@cortexkit/opencode-openai-auth 1.2.0 → 1.3.0

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 (49) hide show
  1. package/dist/bin.js +2 -2
  2. package/dist/{codex-request-CjXETpTA.d.ts → codex-request-B9D0e97Q.d.ts} +145 -28
  3. package/dist/{index-ehjj89rx.js → index-1mbgsxsr.js} +1 -1
  4. package/dist/{index-htvcmtcx.js → index-2pgkrebq.js} +1 -1
  5. package/dist/{index-rwbrhkse.js → index-4v2fs42x.js} +1 -1
  6. package/dist/index-8x1aj7q3.js +2 -0
  7. package/dist/{index-6n4pnfkg.js → index-ex6nx3mq.js} +1 -1
  8. package/dist/{index-qxbchh2d.js → index-gn2b097f.js} +1 -1
  9. package/dist/{index-qp5hdpw8.js → index-m3ctrabv.js} +1 -1
  10. package/dist/{index-03em8hv1.js → index-psjyexj3.js} +15 -15
  11. package/dist/{index-ffg0sgg5.js → index-tddr876f.js} +1 -1
  12. package/dist/index-tn8x5tz8.js +90 -0
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.js +1 -1
  15. package/dist/{model-CQcw10oW.d.ts → model-BdITTmeb.d.ts} +1 -1
  16. package/dist/{port-file-BDJnzgHH.d.ts → port-file-DbHIVC9a.d.ts} +1 -1
  17. package/dist/{protocol-C-kagE6O.d.ts → protocol-MysYPAho.d.ts} +1 -1
  18. package/dist/rpc/port-file.d.ts +1 -1
  19. package/dist/rpc/port-file.js +1 -1
  20. package/dist/rpc/protocol.d.ts +1 -1
  21. package/dist/rpc/protocol.js +1 -1
  22. package/dist/rpc/rpc-client.d.ts +3 -3
  23. package/dist/rpc/rpc-client.js +1 -1
  24. package/dist/{sidebar-state-BfQ4mpZO.d.ts → sidebar-state-CVSok7zv.d.ts} +20 -4
  25. package/dist/sidebar-state.d.ts +1 -1
  26. package/dist/sidebar-state.js +1 -1
  27. package/dist/tui-preferences.js +1 -1
  28. package/dist/tui.d.ts +2 -2
  29. package/dist/v2/server.d.ts +2 -2
  30. package/dist/v2/server.js +1 -1
  31. package/package.json +4 -4
  32. package/src/tui-compiled/raw/shared/0332701351b3eeec-format.js +69 -1
  33. package/src/tui-compiled/raw/shared/0f77ebc3c914c9c6-custody.js +225 -16
  34. package/src/tui-compiled/raw/shared/169b2b4bf30909bc-consumer.js +130 -5
  35. package/src/tui-compiled/raw/shared/375d9cca2def037d-private-files.js +10 -2
  36. package/src/tui-compiled/raw/shared/94f53cfd572ba4bb-availability.js +106 -0
  37. package/src/tui-compiled/raw/shared/d0f0b6be200311af-insula.js +286 -21
  38. package/src/tui-compiled/raw/shared/dc9290c2a7552ba6-watch.js +253 -0
  39. package/src/tui-compiled/raw/shared/e8d3c8da776ef9cd-index.js +4 -1
  40. package/src/tui-compiled/runtime/shared/0332701351b3eeec-format.js +69 -1
  41. package/src/tui-compiled/runtime/shared/0f77ebc3c914c9c6-custody.js +225 -16
  42. package/src/tui-compiled/runtime/shared/169b2b4bf30909bc-consumer.js +130 -5
  43. package/src/tui-compiled/runtime/shared/375d9cca2def037d-private-files.js +10 -2
  44. package/src/tui-compiled/runtime/shared/94f53cfd572ba4bb-availability.js +106 -0
  45. package/src/tui-compiled/runtime/shared/d0f0b6be200311af-insula.js +286 -21
  46. package/src/tui-compiled/runtime/shared/dc9290c2a7552ba6-watch.js +253 -0
  47. package/src/tui-compiled/runtime/shared/e8d3c8da776ef9cd-index.js +4 -1
  48. package/dist/index-f21addzm.js +0 -90
  49. package/dist/index-r2s51ac1.js +0 -2
@@ -1,4 +1,4 @@
1
- import{$a as X3,Aa as b3,Ab as o4,Ba as aJ,Bb as zX,Ca as KY,Da as tJ,Ea as eJ,Eb as q$,Ja as YX,Ka as JX,La as XX,Ma as QX,Na as E9,Oa as d1,Pa as k6,Qa as t8,Ra as n6,Sa as e8,Ta as YY,Ua as JY,Va as XY,Wa as QY,Ya as RY,Za as CY,_a as w9,ab as Q3,bb as G3,cb as $3,db as W3,eb as C9,gb as y6,ib as J9,jb as D$,kb as U0,mb as $X,nb as vJ,ob as hJ,pa as F9,pb as WX,qa as hX,qb as P$,ra as G$,rb as n4,sa as n,sb as _$,tb as r9,ub as y8,va as N$,vb as W8,wa as N3,wb as z8,xa as j3,xb as O9,ya as j$,yb as z3,za as F$,zb as s9}from"./index-03em8hv1.js";import{$b as f8,Gb as mY,Ib as nX,Kb as L6,Lb as M$,Ob as A$,Sb as f3,Tb as T$,Ub as R$,Vb as C$,_b as g8,ac as w$,bc as S$,ec as I$,fc as b$,gc as k$,ic as G8,jc as $8,kc as x$,lc as v$,mc as U9,nc as h$}from"./index-6n4pnfkg.js";import{$c as i1,$d as U1,Bd as xJ,Cc as Q8,Cd as R0,Dd as n1,Fd as B3,Gc as V3,Gd as w1,Hd as hY,Id as S1,Jc as kJ,Jd as e1,Kd as K1,Lc as z1,Ld as H9,Mc as W$,Md as V$,Nc as E6,Nd as B$,Oc as i4,Od as J3,Pc as z$,Pd as L3,Qc as uJ,Qd as Z6,Rc as pJ,Rd as n0,Sc as Y6,Sd as o6,Tc as J6,Td as WY,Uc as s6,Vc as lJ,Wc as dJ,Wd as L$,Xc as iJ,Xd as M9,Yc as nJ,Yd as A6,Zc as oJ,Zd as T6,_c as rJ,_d as F3,ad as Y9,ae as O$,bd as g9,be as O3,cd as AG,ce as D3,dd as iX,de as P3,ee as kY,fe as _3,ge as q3,he as E3,jd as sJ,pd as m0,qd as K$,rd as C1,sd as a9,td as U$,vc as X9,vd as H$,wd as o0,xc as j9,yd as Z$}from"./index-f21addzm.js";import{me as Y8}from"./index-qxbchh2d.js";import{re as wX,se as SX,te as IX,ue as s3,ve as $$,we as p1}from"./index-htvcmtcx.js";import{De as OX,Fe as t1,He as V0,Me as h9,Oe as GX}from"./index-ehjj89rx.js";import{Pe as V6,Qe as e9,Te as LX,Ue as NX,Ve as BY,We as jX,Ze as FX}from"./index-r2s51ac1.js";import{$e as bX,bf as E$}from"./index-bc89akak.js";import{df as iY}from"./index-xwvze96g.js";import{createHash as MB,randomUUID as AB}from"node:crypto";import{statSync as TB}from"node:fs";import u4 from"node:os";import{join as RB}from"node:path";import{readFile as DW}from"node:fs/promises";import{readFileSync as s$}from"node:fs";import{homedir as a$,tmpdir as t$}from"node:os";import{join as m1}from"node:path";var e$="https://chatgpt.com/backend-api/codex/responses",YW="openai-auth.json",x6={webSockets:"CORTEXKIT_OPENAI_AUTH_WEBSOCKETS",rawWebSocket:"CORTEXKIT_OPENAI_AUTH_RAW_WS",responsesLite:"CORTEXKIT_OPENAI_AUTH_RESPONSES_LITE",dump:"CORTEXKIT_OPENAI_AUTH_DUMP",dumpDir:"OPENCODE_OPENAI_AUTH_DUMP_DIR",codexApiEndpoint:"CORTEXKIT_OPENAI_AUTH_CODEX_ENDPOINT",configFile:"OPENCODE_OPENAI_AUTH_FILE",stateFile:"OPENCODE_OPENAI_AUTH_STATE_FILE",configDir:"OPENCODE_CONFIG_DIR"};function GY(){let Y=process.env[x6.configDir]?.trim();if(Y)return Y;return m1(process.env.XDG_CONFIG_HOME||m1(a$(),".config"),"opencode")}function X0(){return process.env[x6.configFile]?.trim()||m1(GY(),YW)}function JW(){try{let Y=JSON.parse(s$(X0(),"utf8"));return Y!=null&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function XW(Y){let J=process.env[Y];if(J===void 0)return;let X=J.trim().toLowerCase();if(X==="1"||X==="true"||X==="yes"||X==="on")return!0;if(X===""||X==="0"||X==="false"||X==="no"||X==="off")return!1;return}function g1(Y,J,X){let Q=XW(Y);if(Q!==void 0)return Q;if(typeof J==="boolean")return J;return X}function QW(){let Y=JW(),J;if(Y.dump!==void 0&&Y.dump!==null){if(typeof Y.dump==="object")J=Y.dump.enabled;else if(typeof Y.dump==="boolean")J=Y.dump}return{webSockets:g1(x6.webSockets,Y.webSockets,!1),rawWebSocket:g1(x6.rawWebSocket,Y.rawWebSocket,!1),responsesLite:g1(x6.responsesLite,Y.responsesLite,!1),dump:g1(x6.dump,J,!1),dumpDir:process.env[x6.dumpDir]?.trim()||(typeof Y.dumpDir==="string"&&Y.dumpDir.trim()?Y.dumpDir.trim():m1(t$(),"opencode-openai-auth-dumps")),codexApiEndpoint:process.env[x6.codexApiEndpoint]?.trim()||(typeof Y.codexApiEndpoint==="string"&&Y.codexApiEndpoint.trim()?Y.codexApiEndpoint.trim():e$)}}var f1;function i0(){if(!f1)f1=QW();return f1}function CJ(){return f1=void 0,i0()}import{readFileSync as GW}from"node:fs";var $W="The `main` account holds the login OpenCode signs in with (its login slot only points at it), so it cannot be removed. Sign in with another account through `opencode auth login` to replace it.";function WW(Y){return`The account-pool migration is moving OpenCode's login into \`${Y}\` right now, so it cannot be removed yet. Try again once the migration has finished.`}function D9(Y,J={}){return F9({provider:"openai",configPath:Y.configPath,statePath:Y.statePath,quota:j9,...J})}function $Y(Y){try{let J=JSON.parse(GW(Y,"utf8"));if(!J||typeof J!=="object"||Array.isArray(J))return!1;return r9(J).migratedAt!==void 0}catch{return!1}}async function c1(Y,J){if(!$Y(Y.configPath))return;let X=await J.read();return X.status==="ready"?X.rows:void 0}function u1(Y,J){if(Y===Z6)return $W;if(r9(J.config).pending?.rowId===Y)return WW(Y);return}function zW(Y,J){return O9(Y,Z6,J.legacyLocks).filter((X)=>X.name===s9)}function q6(Y,J={}){return zW(Y,J)}var P9="This setup has no OpenAI login in its account store. Sign in for this setup with opencode auth login, or point OPENCODE_OPENAI_AUTH_FILE and OPENCODE_OPENAI_AUTH_STATE_FILE at the store that holds the login.";class r6 extends Error{constructor(){super("The main OpenAI account lives in the account pool");this.name="MainAccountInPoolError"}}async function wJ(Y){let J=Y.storage,X=o6(J);if(!J||!X||m0(X))return;let Q=X,G=Y.now(),$=(J.refresh?.refreshBeforeExpiryMinutes??240)*60000;if((!Q.access||!Q.expires||Q.expires-G<=$)&&!E6(Q.lastRefreshError,Q.refresh,G))try{Q=await Y.refreshAccount(Q,J)}catch(U){Y.warn?.("pool main row refresh failed",{error:U instanceof Error?U.message:String(U)})}let K=Q.access?.trim();if(!K)return;if(typeof Q.expires!=="number"||Q.expires<=Y.now())return;return{account:Q,token:K}}import{readdir as KW,readFile as UW}from"node:fs/promises";import{homedir as HW}from"node:os";import{join as _9}from"node:path";function IJ(){return process.env.XDG_STATE_HOME||_9(HW(),".local","state")}function ZW(Y=IJ()){return _9(Y,"cortexkit","openai-auth","processes")}function VW(Y=IJ()){return _9(Y,"cortexkit","openai-auth","rpc")}function BW(Y){try{return process.kill(Y,0),!0}catch(J){return J.code==="EPERM"}}function SJ(Y){let J=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/.exec(Y.trim());if(!J)return;return{core:[Number(J[1]),Number(J[2]),Number(J[3])],pre:J[4]?J[4].split("."):[]}}function LW(Y,J){let X=SJ(Y),Q=SJ(J);if(!X||!Q)return;for(let G=0;G<3;G++){let $=X.core[G]-Q.core[G];if($!==0)return Math.sign($)}if(X.pre.length===0||Q.pre.length===0)return Math.sign(Q.pre.length-X.pre.length);for(let G=0;G<Math.max(X.pre.length,Q.pre.length);G++){let $=X.pre[G],W=Q.pre[G];if($===void 0)return-1;if(W===void 0)return 1;let K=/^\d+$/.test($),U=/^\d+$/.test(W);if(K&&U){let H=Number($)-Number(W);if(H!==0)return Math.sign(H)}else if(K!==U)return K?-1:1;else if($!==W)return $<W?-1:1}return 0}async function zY(Y){try{return{ok:!0,names:await KW(Y)}}catch(J){let X=J.code;if(X==="ENOENT")return{ok:!0,names:[]};return{ok:!1,code:X,error:`${Y}: ${String(J)}`}}}async function NW(Y,J){let X;try{X=await UW(Y,"utf8")}catch(Q){if(Q.code==="ENOENT")return{kind:"gone"};return{kind:"unreadable"}}try{let Q=JSON.parse(X);if(Q!==null&&typeof Q==="object"&&Q.pid===J&&typeof Q.version==="string")return{kind:"ok",version:Q.version}}catch{}return{kind:"unreadable"}}async function q9(Y){let J=Y.isAlive??BW,X=Y.selfPid??process.pid,Q=new Map,G=(B)=>{let O=B.pid==="unknown"?`dir:${B.detail}`:B.pid;if(!Q.has(O))Q.set(O,B)},$=(B)=>{try{return J(B)}catch{return!0}},W=(B,O)=>{let q=O.exec(B),_=q?Number(q[1]):Number.NaN;return Number.isSafeInteger(_)&&_>=1?_:void 0},K=ZW(Y.stateHome),U=new Set,H=await zY(K);if(!H.ok)G({pid:"unknown",version:"unknown",detail:H.error});for(let B of H.ok?H.names:[]){let O=W(B,/^(\d+)\.json$/);if(O===void 0||O===X)continue;let q=_9(K,B),_=await NW(q,O);if(_.kind==="gone")continue;if(U.add(O),!$(O))continue;if(_.kind==="unreadable"){G({pid:O,version:"unknown",detail:q});continue}let M=LW(_.version,Y.currentVersion);if(M===void 0||M<0)G({pid:O,version:_.version,detail:q})}let V=Y.rpcDir??VW(Y.stateHome),D=await zY(V);if(!D.ok)G({pid:"unknown",version:"unknown",detail:D.error});for(let B of D.ok?D.names:[]){if(!p1(B))continue;let O=_9(V,B),q=await zY(O);if(!q.ok){if(q.code==="ENOTDIR")continue;G({pid:"unknown",version:"unknown",detail:q.error});continue}for(let _ of q.names){let M=W(_,/^port-(\d+)\.json$/);if(M===void 0||M===X||U.has(M))continue;if($(M))G({pid:M,version:"unknown",detail:_9(O,_)})}}let L=(B)=>B.pid==="unknown"?Number.POSITIVE_INFINITY:B.pid;return Q.size===0?{open:!0}:{open:!1,blockers:[...Q.values()].sort((B,O)=>L(B)-L(O))}}var v6="1.2.0";import{readFile as yJ}from"node:fs/promises";function l1(Y){return typeof Y==="object"&&Y!==null&&!Array.isArray(Y)}async function gJ(Y){let J=await xJ(Y.configPath),X=[];try{let G=JSON.parse(await yJ(Y.statePath,"utf8"));if(l1(G)){let $=G.accounts;if(l1($))X=Object.keys($)}}catch(G){if(G.code!=="ENOENT")throw G}return{rosterIds:J?[...J]:[],stateIds:X,orphanStateIds:J?X.filter((G)=>!J.has(G)):[]}}async function jW(Y){try{let J=JSON.parse(await yJ(Y.configPath,"utf8"));return l1(J)&&l1(J.claustrum)&&J.claustrum.mode==="claustrum"}catch{return!1}}var bJ="Connect this host to the Claustrum vault (`opencode auth login` > Connect to the Claustrum vault, or the Vault section of `/openai`) if the vault holds the account, or sign in to the account again.";function fJ(Y){if(!Y)return;let J=Y.accounts.find((X)=>X.id==="main"&&o0(X));if(J)return J;if(!Y.mainAccountId)return;return Y.accounts.find((X)=>o0(X)&&X.accountId===Y.mainAccountId)}function FW(Y,J){let X=Y.lastRefreshError;return E6(X,Y.refresh,J)&&X!==void 0&&X.nextRetryAt!==void 0&&X.nextRetryAt-X.checkedAt>=kJ}function OW(Y){let J=[],X=[],Q=Y.now??Date.now(),G=fJ(Y.storage),$=!1;if(m0(Y.auth))J.push({code:"tombstoned-host-slot",message:`OpenCode's OpenAI slot holds a tombstone left by the vault custody of an older version, not a credential; it is never sent. ${bJ}`});else if(n0(Y.auth)){if(!o6(Y.storage))J.push({code:"main-pool-row-missing",message:"The main account was moved into the account pool, but the pool has no usable `main` row."})}else if(!Y.auth)J.push({code:"auth-slot-missing",message:"OpenCode's OpenAI auth slot is missing."}),$=!0;else if(Y.auth.type!=="oauth")J.push({code:"auth-slot-not-oauth",message:"OpenCode's OpenAI auth slot is not OAuth."}),$=!0;else if(G&&(!Y.auth.refresh||G.refresh!==Y.auth.refresh))J.push({code:"main-refresh-not-in-store",message:"OpenCode's main credential does not match the copy in the account store."}),$=!0;if($&&G){let U={type:"restore-main-credential"};X.push(U);let H=J.find((V)=>V.code==="auth-slot-missing"||V.code==="auth-slot-not-oauth"||V.code==="main-refresh-not-in-store");if(H)H.repair=U}let W=Y.storage?.accounts??[];if(W.length===0)J.push({code:"no-accounts",message:"The account store has no accounts."});else if(!W.some((U)=>U.enabled!==!1))J.push({code:"no-enabled-accounts",message:"The account store has no enabled accounts."});for(let U of W){if(!o0(U)||!m0(U))continue;J.push({code:"tombstoned-account",accountId:U.id,message:`Account ${U.id} holds a tombstone left by the vault custody of an older version, not a credential; it is never sent. ${bJ}`})}if(Y.retiredCustodyMode)J.push({code:"retired-custody-mode",message:"The config still selects the vault custody mode of an older version (`claustrum.mode`). It is ignored, and dropped at the next settings write; vault accounts are served once this host is connected to the Claustrum vault."});for(let U of W){if(!o0(U))continue;if(!FW(U,Q))continue;let H={type:"clear-refresh-backoff",accountId:U.id};X.push(H),J.push({code:"armed-non-transient-refresh-backoff",accountId:U.id,message:`Account ${U.id} has an armed non-transient refresh backoff.`,repair:H})}let K=[...Y.orphanStateIds??[]];if(K.length>0){let U={type:"prune-orphan-state-ids",ids:K};X.push(U),J.push({code:"orphan-state-ids",message:`State contains ids absent from the config roster: ${K.join(", ")}.`,repair:U})}return{findings:J,repairs:X}}function mJ(Y){let J=(X)=>{if(X.type==="restore-main-credential")return{label:"Copy the stored main credential back into OpenCode's slot",apply:async()=>{if(n0(await Y.readAuth()))return;let Q=fJ(await Y.loadAccounts(Y.paths));if(!Q)return;await Y.setMainAuth({refresh:Q.refresh,access:Q.access??"",expires:Q.expires??0})}};if(Y.migrated)return;if(X.type==="prune-orphan-state-ids")return{label:`Drop the state entries of ${X.ids.join(", ")}`,apply:async()=>{await Y.mutateAccounts((Q)=>Q,Y.paths)}};return{label:`Clear the refresh backoff of ${X.accountId}`,apply:async()=>{await Y.mutateAccounts((Q)=>{let G=Q.accounts.find(($)=>$.id===X.accountId&&o0($));if(G)G.lastRefreshError=void 0;return Q},Y.paths)}}};return[{id:"openai-auth",run:async()=>{let[X,Q,G,$]=await Promise.all([Y.loadAccounts(Y.paths),Y.readStoreIds(Y.paths),Y.readAuth(),jW(Y.paths)]),W=OW({auth:G.type==="missing"?void 0:G,storage:X,orphanStateIds:Q.orphanStateIds,retiredCustodyMode:$,now:Y.now()}),K=await F9({provider:"openai",quota:j9,configPath:Y.paths.configPath,statePath:Y.paths.statePath}).read();if(K.status==="ready")for(let U of K.rows){if(U.disabledReason!==vJ)continue;W.findings.push({code:"slot-transfer-origin-unknown",accountId:U.id,message:`Account ${U.id} was preserved disabled after an interrupted transfer with an untagged placeholder; sole ownership could not be established. ${hJ}`})}return W.findings.map((U)=>{let H=U.repair?J(U.repair):void 0;return{code:U.code,message:U.message,...U.accountId!==void 0?{accountId:U.accountId}:{},...H?{repair:H}:{}}})}}]}var PW=GX,cJ="OpenAI accounts",_W="ChatGPT accounts in the vault",qW="Uses the ChatGPT accounts in the Claustrum vault, with no sign-in. This works only while this host is connected to the vault and OpenCode has no OpenAI login stored; otherwise it fails and changes nothing.";async function EW(){let{redirectUri:Y}=await iJ(),J=await pJ(),X=uJ(crypto.getRandomValues(new Uint8Array(32)).buffer),Q=lJ(Y,J,X),G=nJ(J,X);return{url:Q,instructions:"Complete authorization in your browser. This window will close automatically.",method:"auto",callback:async()=>{try{let $=await G;return{type:"success",refresh:$.refresh_token,access:$.access_token,expires:Date.now()+($.expires_in??3600)*1000,accountId:s6($)}}finally{dJ(X)}}}}async function MW(Y){let{deviceData:J,url:X,instructions:Q}=await oJ(Y);return{url:X,instructions:Q,method:"auto",async callback(){try{let G=await rJ(J,Y);return{type:"success",refresh:G.refresh_token,access:G.access_token,expires:Date.now()+(G.expires_in??3600)*1000,accountId:s6(G)}}catch{return{type:"failed"}}}}}function KX({client:Y,getAuth:J,getPaths:X=()=>U0(X0()),fetchImpl:Q=fetch,packageVersion:G=v6,dependencies:$,onMainSlotWritten:W,vault:K}){let U={authorizeBrowser:$?.authorizeBrowser??EW,authorizeHeadless:$?.authorizeHeadless??(()=>MW(G)),beginAccountLogin:$?.beginAccountLogin??i1,loadAccounts:$?.loadAccounts??R0,mutateAccounts:$?.mutateAccounts??n1,readStoreIds:$?.readStoreIds??gJ,openBrowser:$?.openBrowser??PW,now:$?.now??Date.now,openAccountPool:$?.openAccountPool??D9,migrationBlockers:$?.migrationBlockers??(async()=>{let j=await q9({currentVersion:G});return j.open?[]:j.blockers.map((C)=>({pid:C.pid,version:C.version}))}),...$?.terminal?{terminal:$.terminal}:{},...$?.vaultWait?{vaultWait:$.vaultWait}:{}},H=async()=>await J?.().catch(()=>{return})??{type:"missing"},V=async()=>{if(K&&await K.authority()!=="local")return!0;if((await H()).type!=="missing")return!0;let j=X(),C=U.openAccountPool(j);if((await C.read()).status==="ready")return JX(C);return((await U.loadAccounts(j))?.accounts.length??0)>0},D=async(j)=>{if(await WX(X().configPath,async()=>{if(K&&await K.authority()!=="local")return!1;if(n0(await H()))return!1;return await Y.auth.set({path:{id:"openai"},body:{type:"oauth",...j}}),!0}))await W?.().catch(()=>{})},L=(j)=>({begin:async({headless:C,signal:h})=>{if(K&&await K.authority()!=="local")throw Error(E9);let A=await U.beginAccountLogin({version:G,headless:C,...h?{signal:h}:{}});return{url:A.url,instructions:A.instructions,completion:A.completion.then(async(g)=>{if(K&&await K.authority()!=="local")throw Error(E9);let r=await j.read(),i=r.status==="ready"?r.rows.find((B0)=>B0.id===Z6)?.identity:void 0;if(g.accountId&&i&&g.accountId===i)throw Error("that account is already the OpenCode main credential");return{id:g.id,credential:{type:"oauth",refresh:g.refresh,...g.access!==void 0?{access:g.access}:{},...g.expires!==void 0?{expires:g.expires}:{}},...g.accountId!==void 0?{identity:g.accountId}:{},...g.label!==void 0?{label:g.label}:{}}})}},openBrowser:(C)=>U.openBrowser(C)}),B=async(j)=>{if(K&&await K.authority()!=="local")throw Error(E9);let C=j.credential;if(C?.type!=="oauth"||!C.access)throw Error("no usable access token for a quota check");let h=await a9({accessToken:C.access,fetchImpl:Q,now:U.now,...j.identity?{accountId:j.identity}:{},accountKey:j.id});return M9(h,U.now(),!0)},O=(j)=>mJ({paths:X(),migrated:j,readAuth:H,loadAccounts:U.loadAccounts,readStoreIds:U.readStoreIds,mutateAccounts:U.mutateAccounts,setMainAuth:D,now:U.now}),q=(j,C)=>({title:cJ,store:t8(C,{rowLocks:(h)=>O9(j,h)}),...U.terminal?{terminal:U.terminal}:{},login:L(C),protect:(h,A)=>u1(h,A),extraLocks:q6(j),pollQuota:B,doctor:O(!0),status:async()=>{let h=await K?.status();if(K&&await K.authority()!=="local"&&h)return[KY(K.host,K.name,h.enrollment)];return[`Routing: ${(await U.loadAccounts(j))?.routing?.mode??"main-first"}`,...K?[KY(K.host,K.name,(await K.status()).enrollment)]:[]]},...K?{extraActions:[_(K)]}:{}}),_=(j)=>{let C=j.enrolled();return{id:C?"vault-disconnect":"vault-connect",label:C?"Disconnect from the Claustrum vault":"Connect to the Claustrum vault",hint:"serve OpenAI accounts held in the vault",run:async(h)=>{let A=await j.authority();if(C){if(A!=="local")await j.disconnect();h.print("Disconnected from the Claustrum vault.");return}if(A!=="local"){h.print("Nothing was changed: this host is already connected or its enrollment is unreadable. Reopen the menu to disconnect.");return}h.print(`Asking the Claustrum vault to enroll ${j.name}…`);let g,r=await j.waitForApproval({...U.vaultWait,onPending:(i)=>{let Z0=i.state==="pending"?i.requestId??i.retryCode??"":i.state;if(Z0===g)return;g=Z0;for(let B0 of aJ(j.name,i))h.print(B0);h.print("Waiting for the approval… (stop with Ctrl-C; Connect picks the request up again)")}});h.print(tJ(j,r).text)}}},M=async()=>{let j=await U.migrationBlockers();return YX({title:cJ,status:["Accounts move to the new account layout once every OpenCode process on this machine runs this version of OpenAI auth. Account management opens after the move.",...j.length>0?["These processes still hold the move back:",...j.map((C)=>` ${C.pid==="unknown"?"processes that could not be read":`pid ${C.pid}`}: version ${C.version}`)]:[]],actions:[eJ({checks:O(!1)})],...U.terminal?{terminal:U.terminal}:{}})},S=async(j)=>{let C=X(),h=U.openAccountPool(C);if(K&&await K.authority()!=="local")return d1(q(C,h),K);if(await c1(C,h)===void 0)return M();let A=q(C,h);return K?d1(A,K):XX(A)},x=(j)=>async()=>{if(K&&await K.authority()!=="local")throw Error(E9);let C=await j();if(C.method!=="auto")return C;return{...C,callback:async()=>{let h=await C.callback();if(K&&await K.authority()!=="local")return{type:"failed"};return h}}};return[{label:"ChatGPT Pro/Plus (browser)",type:"oauth",authorize:QX({hasCredential:V,openMenu:S,login:x(()=>U.authorizeBrowser())})},{label:"ChatGPT Pro/Plus (headless)",type:"oauth",authorize:x(()=>U.authorizeHeadless())},{label:"Manually enter API Key",type:"api"},...K?.enrolled()?[{label:_W,type:"oauth",authorize:async()=>({url:"",instructions:qW,method:"auto",callback:async()=>{if(await sJ(K.paths,K.name)!=="vault")return{type:"failed"};try{let j=JSON.parse(await DW(zX(),"utf8"));if(!j||typeof j!=="object"||Array.isArray(j)||Object.hasOwn(j,"openai"))return{type:"failed"}}catch(j){if(j.code!=="ENOENT")return{type:"failed"}}return{...$X,type:"success"}}})}]:[]]}var UY=["type","model","instructions","previous_response_id","input","tools","tool_choice","parallel_tool_calls","reasoning","store","stream","include","prompt_cache_key","text","generate","client_metadata"];function a6(Y){let J={};for(let X of UY)if(X in Y)J[X]=Y[X];for(let X of Object.keys(Y))if(!(X in J))J[X]=Y[X];return J}import{createHash as pW}from"node:crypto";import{createHash as AW,randomBytes as UX}from"node:crypto";import{chmod as TW,lstat as HX,mkdir as RW,open as CW,readdir as DX,rename as wW,unlink as LY,writeFile as SW}from"node:fs/promises";import{join as o1,resolve as HY}from"node:path";var IW=100,ZY="session-unknown",bW=300000,kW=60000,xW=600000,vW=/\.(body|meta|request|response)\.json$/,hW=/^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z-\d+-\d{6,}-[a-zA-Z0-9._-]+$/,yW=/\.[a-f0-9]{24}\.partial$/;function PX(Y){let J=Y.replace(vW,"");if(J===Y||!hW.test(J))return;return J}function gW(Y){let J=Y.replace(yW,"");return J!==Y&&PX(J)!==void 0}async function ZX(Y){let{dir:J,maxBytes:X}=Y,Q=Y.now??Date.now(),G=Y.minAgeMs??kW,$=Y.partialStaleMs??xW,W={removed:0,freedBytes:0};if(!(X>0))return W;try{if(V6)await LX(J,"directory");if((await HX(J)).isSymbolicLink())return W;let K=new Set((Y.protectedPaths??[]).map((_)=>HY(_))),U=await DX(J,{withFileTypes:!0}),H=[];await Promise.all(U.map(async(_)=>{if(!_.isFile())return;let M=gW(_.name),S=M?void 0:PX(_.name);if(!M&&S===void 0)return;let x=o1(J,_.name);try{let j=await HX(x);if(!j.isFile())return;H.push({path:x,size:j.size,mtimeMs:j.mtimeMs,group:S})}catch{}}));let V=H.reduce((_,M)=>_+M.size,0),D=0,L=0,B=async(_)=>{try{await LY(_.path),V-=_.size,L+=_.size,D+=1}catch{}};for(let _ of H){if(_.group!==void 0)continue;if(K.has(HY(_.path)))continue;if(Q-_.mtimeMs<$)continue;await B(_)}let O=new Map;for(let _ of H){if(_.group===void 0)continue;let M=O.get(_.group)??{files:[],newest:0};M.files.push(_),M.newest=Math.max(M.newest,_.mtimeMs),O.set(_.group,M)}let q=[...O.entries()].sort(([_,M],[S,x])=>M.newest-x.newest||_.localeCompare(S));for(let[,_]of q){if(V<=X)break;if(Q-_.newest<G)continue;if(_.files.some((M)=>K.has(HY(M.path))))continue;for(let M of _.files)await B(M)}if(D>0)Y.logger?.debug("removed old dump files",{removed:D,freedBytes:L});return{removed:D,freedBytes:L}}catch(K){if(K instanceof e9&&K.code==="ERR_PRIVATE_FILES_SECURITY")throw K;return W}}async function fW(Y,J,X){if(V6)return FX(Y,J,{stagePath:`${Y}.${X?X():UX(12).toString("hex")}.partial`});for(let Q=0;;Q+=1){let G=`${Y}.${X?X():UX(12).toString("hex")}.partial`,$=!1,W;try{W=await CW(G,"wx",384),$=!0,await W.writeFile(J,"utf8"),await W.chmod(384),await W.close(),W=void 0,await wW(G,Y);return}catch(K){if(await W?.close().catch(()=>{}),$)await LY(G).catch(()=>{});if(K.code==="EEXIST"&&Q===0)continue;throw K}}}function VY(Y){return Y.length<=16?Y:`${Y.slice(0,12)}…`}function t9(Y,J){let X=Y.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");if(!X)return J;return X.slice(0,80)}function VX(Y){return AW("sha256").update(Y).digest("hex")}function mW(Y){return Y.toLowerCase().replace(/[-_]/g,"")}function BX(Y){return Y!==null&&typeof Y==="object"&&!Array.isArray(Y)}function cW(Y,J){if(Y===void 0)return null;if(Y===J)return{changed:!1,firstByte:-1,lastPreviousByte:-1,lastCurrentByte:-1,previousBytes:Y.length,currentBytes:J.length};let X=0;while(X<Y.length&&X<J.length&&Y[X]===J[X])X++;let Q=Y.length-1,G=J.length-1;while(Q>=X&&G>=X&&Y[Q]===J[G])Q--,G--;return{changed:!0,firstByte:X,lastPreviousByte:Q,lastCurrentByte:G,changedPreviousBytes:Q-X+1,changedCurrentBytes:G-X+1,previousBytes:Y.length,currentBytes:J.length}}var uW=0;function _X(Y){let J=Y.enabled===!0,X=Y.pid??process.pid,Q=Y.now??Date.now,G=Y.logger,$=new Set((Y.secretKeys??[]).map(mW)),W=OX({extraSecretKeys:(A)=>$.has(A),extraValuePatterns:[...Y.secretPatterns??[]]}),K=new Set(Y.schemaKeys??["tools"]),U=new Map,H=()=>typeof Y.dir==="function"?Y.dir():Y.dir;function V(A){let g=W.redact({[A]:null})[A];return g===null?void 0:g}function D(A){if(Array.isArray(A))return A.map(D);if(BX(A)){let g={};for(let[r,i]of Object.entries(A)){let Z0=V(r);if(K.has(r))g[r]=W.redactStrings(i);else if(Z0!==void 0)g[r]=Z0;else g[r]=D(i)}return g}return W.redactStrings(A)}function L(A){let g;try{g=JSON.parse(A)}catch{return{text:W.redactStrings(A),parsed:void 0}}let r=D(g),i=JSON.stringify(r);return{text:JSON.stringify(g)===i?A:i,parsed:BX(r)?r:void 0}}async function B(A,g,r,i){let Z0=`-${t9(g,ZY)}-${t9(r,"channel")}`,B0;try{B0=await DX(A)}catch{return}let p=B0.filter((t)=>t.endsWith(".meta.json")&&t.includes(Z0)).sort().reverse();for(let t of p)try{if(JSON.parse(await BY(o1(A,t),V6))?.baselineKey!==i)continue;return await BY(o1(A,t.replace(/\.meta\.json$/,".body.json")),V6)}catch(L0){if(L0 instanceof e9&&(V6||L0.code==="ERR_PRIVATE_FILES_SECURITY"))throw L0}return}function O(A,g){if(!U.has(A))while(U.size>=IW){let r=U.keys().next().value;if(r===void 0)break;U.delete(r)}U.set(A,g)}async function q(A){if(!J)return;let g=++uW,r=A.session?.trim()||ZY,i=H(),Z0=new Date(Q()).toISOString(),B0=[Z0.replace(/[:.]/g,"-"),String(X),String(g).padStart(6,"0"),t9(r,ZY),t9(A.channel,"channel"),...A.phase?[t9(A.phase,"phase")]:[]].join("-"),p=o1(i,B0),t={body:`${p}.body.json`,metadata:`${p}.meta.json`,request:`${p}.request.json`},L0=VX(`${A.channel}\x00${r}`);try{if(V6)await NX(i);else await RW(i,{recursive:!0,mode:448}),await TW(i,448);let v=U.get(L0),x0=v===void 0?void 0:"memory";if(v===void 0){if(v=await B(i,r,A.channel,L0),v!==void 0)x0="disk"}let T0=L(A.bodyText),K0={id:B0,createdAt:Z0,pid:X,session:VY(r),channel:A.channel,...A.phase?{phase:A.phase}:{},accountId:A.accountId,status:A.status,error:A.error===void 0?void 0:W.redactStrings(A.error),baselineKey:L0,bodyBytes:Buffer.byteLength(A.bodyText,"utf8"),bodyHash:VX(A.bodyText),diff:cW(v,T0.text),baselineSource:x0,body:T0.parsed?{parseable:!0,...Y.summarize?.(T0.parsed)}:{parseable:!1},...A.meta?{extra:D(A.meta)}:{},files:t},s=D({url:A.url,method:A.method,accountId:A.accountId,headers:A.headers===void 0?void 0:Object.fromEntries(new Headers(A.headers).entries())}),_0=(d,y)=>V6?jX(d,y):SW(d,y,{encoding:"utf8",mode:384,flag:"wx"}),l=[[t.body,T0.text],[t.metadata,`${JSON.stringify(K0,null,2)}
1
+ import{$a as X3,Aa as b3,Ab as o4,Ba as aJ,Bb as zX,Ca as KY,Da as tJ,Ea as eJ,Eb as q$,Ja as YX,Ka as JX,La as XX,Ma as QX,Na as E9,Oa as d1,Pa as k6,Qa as t8,Ra as n6,Sa as e8,Ta as YY,Ua as JY,Va as XY,Wa as QY,Ya as RY,Za as CY,_a as w9,ab as Q3,bb as G3,cb as $3,db as W3,eb as C9,gb as y6,ib as J9,jb as D$,kb as U0,mb as $X,nb as vJ,ob as hJ,pa as F9,pb as WX,qa as hX,qb as P$,ra as G$,rb as n4,sa as n,sb as _$,tb as r9,ub as y8,va as N$,vb as W8,wa as N3,wb as z8,xa as j3,xb as O9,ya as j$,yb as z3,za as F$,zb as s9}from"./index-psjyexj3.js";import{$b as f8,Gb as mY,Ib as nX,Kb as L6,Lb as M$,Ob as A$,Sb as f3,Tb as T$,Ub as R$,Vb as C$,_b as g8,ac as w$,bc as S$,ec as I$,fc as b$,gc as k$,ic as G8,jc as $8,kc as x$,lc as v$,mc as U9,nc as h$}from"./index-ex6nx3mq.js";import{$c as i1,$d as U1,Bd as xJ,Cc as Q8,Cd as R0,Dd as n1,Fd as B3,Gc as V3,Gd as w1,Hd as hY,Id as S1,Jc as kJ,Jd as e1,Kd as K1,Lc as z1,Ld as H9,Mc as W$,Md as V$,Nc as E6,Nd as B$,Oc as i4,Od as J3,Pc as z$,Pd as L3,Qc as uJ,Qd as Z6,Rc as pJ,Rd as n0,Sc as Y6,Sd as o6,Tc as J6,Td as WY,Uc as s6,Vc as lJ,Wc as dJ,Wd as L$,Xc as iJ,Xd as M9,Yc as nJ,Yd as A6,Zc as oJ,Zd as T6,_c as rJ,_d as F3,ad as Y9,ae as O$,bd as g9,be as O3,cd as AG,ce as D3,de as P3,ed as iX,ee as kY,fe as _3,ge as q3,he as E3,jd as sJ,pd as m0,qd as K$,rd as C1,sd as a9,td as U$,vc as X9,vd as H$,wd as o0,xc as j9,yd as Z$}from"./index-tn8x5tz8.js";import{me as Y8}from"./index-gn2b097f.js";import{re as wX,se as SX,te as IX,ue as s3,ve as $$,we as p1}from"./index-2pgkrebq.js";import{De as OX,Fe as t1,He as V0,Me as h9,Oe as GX}from"./index-1mbgsxsr.js";import{Pe as V6,Qe as e9,Te as LX,Ue as NX,Ve as BY,We as jX,Ze as FX}from"./index-8x1aj7q3.js";import{$e as bX,bf as E$}from"./index-bc89akak.js";import{df as iY}from"./index-xwvze96g.js";import{createHash as MB,randomUUID as AB}from"node:crypto";import{statSync as TB}from"node:fs";import u4 from"node:os";import{join as RB}from"node:path";import{readFile as DW}from"node:fs/promises";import{readFileSync as s$}from"node:fs";import{homedir as a$,tmpdir as t$}from"node:os";import{join as m1}from"node:path";var e$="https://chatgpt.com/backend-api/codex/responses",YW="openai-auth.json",x6={webSockets:"CORTEXKIT_OPENAI_AUTH_WEBSOCKETS",rawWebSocket:"CORTEXKIT_OPENAI_AUTH_RAW_WS",responsesLite:"CORTEXKIT_OPENAI_AUTH_RESPONSES_LITE",dump:"CORTEXKIT_OPENAI_AUTH_DUMP",dumpDir:"OPENCODE_OPENAI_AUTH_DUMP_DIR",codexApiEndpoint:"CORTEXKIT_OPENAI_AUTH_CODEX_ENDPOINT",configFile:"OPENCODE_OPENAI_AUTH_FILE",stateFile:"OPENCODE_OPENAI_AUTH_STATE_FILE",configDir:"OPENCODE_CONFIG_DIR"};function GY(){let Y=process.env[x6.configDir]?.trim();if(Y)return Y;return m1(process.env.XDG_CONFIG_HOME||m1(a$(),".config"),"opencode")}function X0(){return process.env[x6.configFile]?.trim()||m1(GY(),YW)}function JW(){try{let Y=JSON.parse(s$(X0(),"utf8"));return Y!=null&&typeof Y==="object"&&!Array.isArray(Y)?Y:{}}catch{return{}}}function XW(Y){let J=process.env[Y];if(J===void 0)return;let X=J.trim().toLowerCase();if(X==="1"||X==="true"||X==="yes"||X==="on")return!0;if(X===""||X==="0"||X==="false"||X==="no"||X==="off")return!1;return}function g1(Y,J,X){let Q=XW(Y);if(Q!==void 0)return Q;if(typeof J==="boolean")return J;return X}function QW(){let Y=JW(),J;if(Y.dump!==void 0&&Y.dump!==null){if(typeof Y.dump==="object")J=Y.dump.enabled;else if(typeof Y.dump==="boolean")J=Y.dump}return{webSockets:g1(x6.webSockets,Y.webSockets,!1),rawWebSocket:g1(x6.rawWebSocket,Y.rawWebSocket,!1),responsesLite:g1(x6.responsesLite,Y.responsesLite,!1),dump:g1(x6.dump,J,!1),dumpDir:process.env[x6.dumpDir]?.trim()||(typeof Y.dumpDir==="string"&&Y.dumpDir.trim()?Y.dumpDir.trim():m1(t$(),"opencode-openai-auth-dumps")),codexApiEndpoint:process.env[x6.codexApiEndpoint]?.trim()||(typeof Y.codexApiEndpoint==="string"&&Y.codexApiEndpoint.trim()?Y.codexApiEndpoint.trim():e$)}}var f1;function i0(){if(!f1)f1=QW();return f1}function CJ(){return f1=void 0,i0()}import{readFileSync as GW}from"node:fs";var $W="The `main` account holds the login OpenCode signs in with (its login slot only points at it), so it cannot be removed. Sign in with another account through `opencode auth login` to replace it.";function WW(Y){return`The account-pool migration is moving OpenCode's login into \`${Y}\` right now, so it cannot be removed yet. Try again once the migration has finished.`}function D9(Y,J={}){return F9({provider:"openai",configPath:Y.configPath,statePath:Y.statePath,quota:j9,...J})}function $Y(Y){try{let J=JSON.parse(GW(Y,"utf8"));if(!J||typeof J!=="object"||Array.isArray(J))return!1;return r9(J).migratedAt!==void 0}catch{return!1}}async function c1(Y,J){if(!$Y(Y.configPath))return;let X=await J.read();return X.status==="ready"?X.rows:void 0}function u1(Y,J){if(Y===Z6)return $W;if(r9(J.config).pending?.rowId===Y)return WW(Y);return}function zW(Y,J){return O9(Y,Z6,J.legacyLocks).filter((X)=>X.name===s9)}function q6(Y,J={}){return zW(Y,J)}var P9="This setup has no OpenAI login in its account store. Sign in for this setup with opencode auth login, or point OPENCODE_OPENAI_AUTH_FILE and OPENCODE_OPENAI_AUTH_STATE_FILE at the store that holds the login.";class r6 extends Error{constructor(){super("The main OpenAI account lives in the account pool");this.name="MainAccountInPoolError"}}async function wJ(Y){let J=Y.storage,X=o6(J);if(!J||!X||m0(X))return;let Q=X,G=Y.now(),$=(J.refresh?.refreshBeforeExpiryMinutes??240)*60000;if((!Q.access||!Q.expires||Q.expires-G<=$)&&!E6(Q.lastRefreshError,Q.refresh,G))try{Q=await Y.refreshAccount(Q,J)}catch(U){Y.warn?.("pool main row refresh failed",{error:U instanceof Error?U.message:String(U)})}let K=Q.access?.trim();if(!K)return;if(typeof Q.expires!=="number"||Q.expires<=Y.now())return;return{account:Q,token:K}}import{readdir as KW,readFile as UW}from"node:fs/promises";import{homedir as HW}from"node:os";import{join as _9}from"node:path";function IJ(){return process.env.XDG_STATE_HOME||_9(HW(),".local","state")}function ZW(Y=IJ()){return _9(Y,"cortexkit","openai-auth","processes")}function VW(Y=IJ()){return _9(Y,"cortexkit","openai-auth","rpc")}function BW(Y){try{return process.kill(Y,0),!0}catch(J){return J.code==="EPERM"}}function SJ(Y){let J=/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z.-]+)?$/.exec(Y.trim());if(!J)return;return{core:[Number(J[1]),Number(J[2]),Number(J[3])],pre:J[4]?J[4].split("."):[]}}function LW(Y,J){let X=SJ(Y),Q=SJ(J);if(!X||!Q)return;for(let G=0;G<3;G++){let $=X.core[G]-Q.core[G];if($!==0)return Math.sign($)}if(X.pre.length===0||Q.pre.length===0)return Math.sign(Q.pre.length-X.pre.length);for(let G=0;G<Math.max(X.pre.length,Q.pre.length);G++){let $=X.pre[G],W=Q.pre[G];if($===void 0)return-1;if(W===void 0)return 1;let K=/^\d+$/.test($),U=/^\d+$/.test(W);if(K&&U){let H=Number($)-Number(W);if(H!==0)return Math.sign(H)}else if(K!==U)return K?-1:1;else if($!==W)return $<W?-1:1}return 0}async function zY(Y){try{return{ok:!0,names:await KW(Y)}}catch(J){let X=J.code;if(X==="ENOENT")return{ok:!0,names:[]};return{ok:!1,code:X,error:`${Y}: ${String(J)}`}}}async function NW(Y,J){let X;try{X=await UW(Y,"utf8")}catch(Q){if(Q.code==="ENOENT")return{kind:"gone"};return{kind:"unreadable"}}try{let Q=JSON.parse(X);if(Q!==null&&typeof Q==="object"&&Q.pid===J&&typeof Q.version==="string")return{kind:"ok",version:Q.version}}catch{}return{kind:"unreadable"}}async function q9(Y){let J=Y.isAlive??BW,X=Y.selfPid??process.pid,Q=new Map,G=(B)=>{let O=B.pid==="unknown"?`dir:${B.detail}`:B.pid;if(!Q.has(O))Q.set(O,B)},$=(B)=>{try{return J(B)}catch{return!0}},W=(B,O)=>{let q=O.exec(B),_=q?Number(q[1]):Number.NaN;return Number.isSafeInteger(_)&&_>=1?_:void 0},K=ZW(Y.stateHome),U=new Set,H=await zY(K);if(!H.ok)G({pid:"unknown",version:"unknown",detail:H.error});for(let B of H.ok?H.names:[]){let O=W(B,/^(\d+)\.json$/);if(O===void 0||O===X)continue;let q=_9(K,B),_=await NW(q,O);if(_.kind==="gone")continue;if(U.add(O),!$(O))continue;if(_.kind==="unreadable"){G({pid:O,version:"unknown",detail:q});continue}let M=LW(_.version,Y.currentVersion);if(M===void 0||M<0)G({pid:O,version:_.version,detail:q})}let V=Y.rpcDir??VW(Y.stateHome),D=await zY(V);if(!D.ok)G({pid:"unknown",version:"unknown",detail:D.error});for(let B of D.ok?D.names:[]){if(!p1(B))continue;let O=_9(V,B),q=await zY(O);if(!q.ok){if(q.code==="ENOTDIR")continue;G({pid:"unknown",version:"unknown",detail:q.error});continue}for(let _ of q.names){let M=W(_,/^port-(\d+)\.json$/);if(M===void 0||M===X||U.has(M))continue;if($(M))G({pid:M,version:"unknown",detail:_9(O,_)})}}let L=(B)=>B.pid==="unknown"?Number.POSITIVE_INFINITY:B.pid;return Q.size===0?{open:!0}:{open:!1,blockers:[...Q.values()].sort((B,O)=>L(B)-L(O))}}var v6="1.3.0";import{readFile as yJ}from"node:fs/promises";function l1(Y){return typeof Y==="object"&&Y!==null&&!Array.isArray(Y)}async function gJ(Y){let J=await xJ(Y.configPath),X=[];try{let G=JSON.parse(await yJ(Y.statePath,"utf8"));if(l1(G)){let $=G.accounts;if(l1($))X=Object.keys($)}}catch(G){if(G.code!=="ENOENT")throw G}return{rosterIds:J?[...J]:[],stateIds:X,orphanStateIds:J?X.filter((G)=>!J.has(G)):[]}}async function jW(Y){try{let J=JSON.parse(await yJ(Y.configPath,"utf8"));return l1(J)&&l1(J.claustrum)&&J.claustrum.mode==="claustrum"}catch{return!1}}var bJ="Connect this host to the Claustrum vault (`opencode auth login` > Connect to the Claustrum vault, or the Vault section of `/openai`) if the vault holds the account, or sign in to the account again.";function fJ(Y){if(!Y)return;let J=Y.accounts.find((X)=>X.id==="main"&&o0(X));if(J)return J;if(!Y.mainAccountId)return;return Y.accounts.find((X)=>o0(X)&&X.accountId===Y.mainAccountId)}function FW(Y,J){let X=Y.lastRefreshError;return E6(X,Y.refresh,J)&&X!==void 0&&X.nextRetryAt!==void 0&&X.nextRetryAt-X.checkedAt>=kJ}function OW(Y){let J=[],X=[],Q=Y.now??Date.now(),G=fJ(Y.storage),$=!1;if(m0(Y.auth))J.push({code:"tombstoned-host-slot",message:`OpenCode's OpenAI slot holds a tombstone left by the vault custody of an older version, not a credential; it is never sent. ${bJ}`});else if(n0(Y.auth)){if(!o6(Y.storage))J.push({code:"main-pool-row-missing",message:"The main account was moved into the account pool, but the pool has no usable `main` row."})}else if(!Y.auth)J.push({code:"auth-slot-missing",message:"OpenCode's OpenAI auth slot is missing."}),$=!0;else if(Y.auth.type!=="oauth")J.push({code:"auth-slot-not-oauth",message:"OpenCode's OpenAI auth slot is not OAuth."}),$=!0;else if(G&&(!Y.auth.refresh||G.refresh!==Y.auth.refresh))J.push({code:"main-refresh-not-in-store",message:"OpenCode's main credential does not match the copy in the account store."}),$=!0;if($&&G){let U={type:"restore-main-credential"};X.push(U);let H=J.find((V)=>V.code==="auth-slot-missing"||V.code==="auth-slot-not-oauth"||V.code==="main-refresh-not-in-store");if(H)H.repair=U}let W=Y.storage?.accounts??[];if(W.length===0)J.push({code:"no-accounts",message:"The account store has no accounts."});else if(!W.some((U)=>U.enabled!==!1))J.push({code:"no-enabled-accounts",message:"The account store has no enabled accounts."});for(let U of W){if(!o0(U)||!m0(U))continue;J.push({code:"tombstoned-account",accountId:U.id,message:`Account ${U.id} holds a tombstone left by the vault custody of an older version, not a credential; it is never sent. ${bJ}`})}if(Y.retiredCustodyMode)J.push({code:"retired-custody-mode",message:"The config still selects the vault custody mode of an older version (`claustrum.mode`). It is ignored, and dropped at the next settings write; vault accounts are served once this host is connected to the Claustrum vault."});for(let U of W){if(!o0(U))continue;if(!FW(U,Q))continue;let H={type:"clear-refresh-backoff",accountId:U.id};X.push(H),J.push({code:"armed-non-transient-refresh-backoff",accountId:U.id,message:`Account ${U.id} has an armed non-transient refresh backoff.`,repair:H})}let K=[...Y.orphanStateIds??[]];if(K.length>0){let U={type:"prune-orphan-state-ids",ids:K};X.push(U),J.push({code:"orphan-state-ids",message:`State contains ids absent from the config roster: ${K.join(", ")}.`,repair:U})}return{findings:J,repairs:X}}function mJ(Y){let J=(X)=>{if(X.type==="restore-main-credential")return{label:"Copy the stored main credential back into OpenCode's slot",apply:async()=>{if(n0(await Y.readAuth()))return;let Q=fJ(await Y.loadAccounts(Y.paths));if(!Q)return;await Y.setMainAuth({refresh:Q.refresh,access:Q.access??"",expires:Q.expires??0})}};if(Y.migrated)return;if(X.type==="prune-orphan-state-ids")return{label:`Drop the state entries of ${X.ids.join(", ")}`,apply:async()=>{await Y.mutateAccounts((Q)=>Q,Y.paths)}};return{label:`Clear the refresh backoff of ${X.accountId}`,apply:async()=>{await Y.mutateAccounts((Q)=>{let G=Q.accounts.find(($)=>$.id===X.accountId&&o0($));if(G)G.lastRefreshError=void 0;return Q},Y.paths)}}};return[{id:"openai-auth",run:async()=>{let[X,Q,G,$]=await Promise.all([Y.loadAccounts(Y.paths),Y.readStoreIds(Y.paths),Y.readAuth(),jW(Y.paths)]),W=OW({auth:G.type==="missing"?void 0:G,storage:X,orphanStateIds:Q.orphanStateIds,retiredCustodyMode:$,now:Y.now()}),K=await F9({provider:"openai",quota:j9,configPath:Y.paths.configPath,statePath:Y.paths.statePath}).read();if(K.status==="ready")for(let U of K.rows){if(U.disabledReason!==vJ)continue;W.findings.push({code:"slot-transfer-origin-unknown",accountId:U.id,message:`Account ${U.id} was preserved disabled after an interrupted transfer with an untagged placeholder; sole ownership could not be established. ${hJ}`})}return W.findings.map((U)=>{let H=U.repair?J(U.repair):void 0;return{code:U.code,message:U.message,...U.accountId!==void 0?{accountId:U.accountId}:{},...H?{repair:H}:{}}})}}]}var PW=GX,cJ="OpenAI accounts",_W="ChatGPT accounts in the vault",qW="Uses the ChatGPT accounts in the Claustrum vault, with no sign-in. This works only while this host is connected to the vault and OpenCode has no OpenAI login stored; otherwise it fails and changes nothing.";async function EW(){let{redirectUri:Y}=await iJ(),J=await pJ(),X=uJ(crypto.getRandomValues(new Uint8Array(32)).buffer),Q=lJ(Y,J,X),G=nJ(J,X);return{url:Q,instructions:"Complete authorization in your browser. This window will close automatically.",method:"auto",callback:async()=>{try{let $=await G;return{type:"success",refresh:$.refresh_token,access:$.access_token,expires:Date.now()+($.expires_in??3600)*1000,accountId:s6($)}}finally{dJ(X)}}}}async function MW(Y){let{deviceData:J,url:X,instructions:Q}=await oJ(Y);return{url:X,instructions:Q,method:"auto",async callback(){try{let G=await rJ(J,Y);return{type:"success",refresh:G.refresh_token,access:G.access_token,expires:Date.now()+(G.expires_in??3600)*1000,accountId:s6(G)}}catch{return{type:"failed"}}}}}function KX({client:Y,getAuth:J,getPaths:X=()=>U0(X0()),fetchImpl:Q=fetch,packageVersion:G=v6,dependencies:$,onMainSlotWritten:W,vault:K}){let U={authorizeBrowser:$?.authorizeBrowser??EW,authorizeHeadless:$?.authorizeHeadless??(()=>MW(G)),beginAccountLogin:$?.beginAccountLogin??i1,loadAccounts:$?.loadAccounts??R0,mutateAccounts:$?.mutateAccounts??n1,readStoreIds:$?.readStoreIds??gJ,openBrowser:$?.openBrowser??PW,now:$?.now??Date.now,openAccountPool:$?.openAccountPool??D9,migrationBlockers:$?.migrationBlockers??(async()=>{let j=await q9({currentVersion:G});return j.open?[]:j.blockers.map((C)=>({pid:C.pid,version:C.version}))}),...$?.terminal?{terminal:$.terminal}:{},...$?.vaultWait?{vaultWait:$.vaultWait}:{}},H=async()=>await J?.().catch(()=>{return})??{type:"missing"},V=async()=>{if(K&&await K.authority()!=="local")return!0;if((await H()).type!=="missing")return!0;let j=X(),C=U.openAccountPool(j);if((await C.read()).status==="ready")return JX(C);return((await U.loadAccounts(j))?.accounts.length??0)>0},D=async(j)=>{if(await WX(X().configPath,async()=>{if(K&&await K.authority()!=="local")return!1;if(n0(await H()))return!1;return await Y.auth.set({path:{id:"openai"},body:{type:"oauth",...j}}),!0}))await W?.().catch(()=>{})},L=(j)=>({begin:async({headless:C,signal:h})=>{if(K&&await K.authority()!=="local")throw Error(E9);let A=await U.beginAccountLogin({version:G,headless:C,...h?{signal:h}:{}});return{url:A.url,instructions:A.instructions,completion:A.completion.then(async(g)=>{if(K&&await K.authority()!=="local")throw Error(E9);let r=await j.read(),i=r.status==="ready"?r.rows.find((B0)=>B0.id===Z6)?.identity:void 0;if(g.accountId&&i&&g.accountId===i)throw Error("that account is already the OpenCode main credential");return{id:g.id,credential:{type:"oauth",refresh:g.refresh,...g.access!==void 0?{access:g.access}:{},...g.expires!==void 0?{expires:g.expires}:{}},...g.accountId!==void 0?{identity:g.accountId}:{},...g.label!==void 0?{label:g.label}:{}}})}},openBrowser:(C)=>U.openBrowser(C)}),B=async(j)=>{if(K&&await K.authority()!=="local")throw Error(E9);let C=j.credential;if(C?.type!=="oauth"||!C.access)throw Error("no usable access token for a quota check");let h=await a9({accessToken:C.access,fetchImpl:Q,now:U.now,...j.identity?{accountId:j.identity}:{},accountKey:j.id});return M9(h,U.now(),!0)},O=(j)=>mJ({paths:X(),migrated:j,readAuth:H,loadAccounts:U.loadAccounts,readStoreIds:U.readStoreIds,mutateAccounts:U.mutateAccounts,setMainAuth:D,now:U.now}),q=(j,C)=>({title:cJ,store:t8(C,{rowLocks:(h)=>O9(j,h)}),...U.terminal?{terminal:U.terminal}:{},login:L(C),protect:(h,A)=>u1(h,A),extraLocks:q6(j),pollQuota:B,doctor:O(!0),status:async()=>{let h=await K?.status();if(K&&await K.authority()!=="local"&&h)return[KY(K.host,K.name,h.enrollment)];return[`Routing: ${(await U.loadAccounts(j))?.routing?.mode??"main-first"}`,...K?[KY(K.host,K.name,(await K.status()).enrollment)]:[]]},...K?{extraActions:[_(K)]}:{}}),_=(j)=>{let C=j.enrolled();return{id:C?"vault-disconnect":"vault-connect",label:C?"Disconnect from the Claustrum vault":"Connect to the Claustrum vault",hint:"serve OpenAI accounts held in the vault",run:async(h)=>{let A=await j.authority();if(C){if(A!=="local")await j.disconnect();h.print("Disconnected from the Claustrum vault.");return}if(A!=="local"){h.print("Nothing was changed: this host is already connected or its enrollment is unreadable. Reopen the menu to disconnect.");return}h.print(`Asking the Claustrum vault to enroll ${j.name}…`);let g,r=await j.waitForApproval({...U.vaultWait,onPending:(i)=>{let Z0=i.state==="pending"?i.requestId??i.retryCode??"":i.state;if(Z0===g)return;g=Z0;for(let B0 of aJ(j.name,i))h.print(B0);h.print("Waiting for the approval… (stop with Ctrl-C; Connect picks the request up again)")}});h.print(tJ(j,r).text)}}},M=async()=>{let j=await U.migrationBlockers();return YX({title:cJ,status:["Accounts move to the new account layout once every OpenCode process on this machine runs this version of OpenAI auth. Account management opens after the move.",...j.length>0?["These processes still hold the move back:",...j.map((C)=>` ${C.pid==="unknown"?"processes that could not be read":`pid ${C.pid}`}: version ${C.version}`)]:[]],actions:[eJ({checks:O(!1)})],...U.terminal?{terminal:U.terminal}:{}})},S=async(j)=>{let C=X(),h=U.openAccountPool(C);if(K&&await K.authority()!=="local")return d1(q(C,h),K);if(await c1(C,h)===void 0)return M();let A=q(C,h);return K?d1(A,K):XX(A)},x=(j)=>async()=>{if(K&&await K.authority()!=="local")throw Error(E9);let C=await j();if(C.method!=="auto")return C;return{...C,callback:async()=>{let h=await C.callback();if(K&&await K.authority()!=="local")return{type:"failed"};return h}}};return[{label:"ChatGPT Pro/Plus (browser)",type:"oauth",authorize:QX({hasCredential:V,openMenu:S,login:x(()=>U.authorizeBrowser())})},{label:"ChatGPT Pro/Plus (headless)",type:"oauth",authorize:x(()=>U.authorizeHeadless())},{label:"Manually enter API Key",type:"api"},...K?.enrolled()?[{label:_W,type:"oauth",authorize:async()=>({url:"",instructions:qW,method:"auto",callback:async()=>{if(await sJ(K.paths,K.name)!=="vault")return{type:"failed"};try{let j=JSON.parse(await DW(zX(),"utf8"));if(!j||typeof j!=="object"||Array.isArray(j)||Object.hasOwn(j,"openai"))return{type:"failed"}}catch(j){if(j.code!=="ENOENT")return{type:"failed"}}return{...$X,type:"success"}}})}]:[]]}var UY=["type","model","instructions","previous_response_id","input","tools","tool_choice","parallel_tool_calls","reasoning","store","stream","include","prompt_cache_key","text","generate","client_metadata"];function a6(Y){let J={};for(let X of UY)if(X in Y)J[X]=Y[X];for(let X of Object.keys(Y))if(!(X in J))J[X]=Y[X];return J}import{createHash as pW}from"node:crypto";import{createHash as AW,randomBytes as UX}from"node:crypto";import{chmod as TW,lstat as HX,mkdir as RW,open as CW,readdir as DX,rename as wW,unlink as LY,writeFile as SW}from"node:fs/promises";import{join as o1,resolve as HY}from"node:path";var IW=100,ZY="session-unknown",bW=300000,kW=60000,xW=600000,vW=/\.(body|meta|request|response)\.json$/,hW=/^\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z-\d+-\d{6,}-[a-zA-Z0-9._-]+$/,yW=/\.[a-f0-9]{24}\.partial$/;function PX(Y){let J=Y.replace(vW,"");if(J===Y||!hW.test(J))return;return J}function gW(Y){let J=Y.replace(yW,"");return J!==Y&&PX(J)!==void 0}async function ZX(Y){let{dir:J,maxBytes:X}=Y,Q=Y.now??Date.now(),G=Y.minAgeMs??kW,$=Y.partialStaleMs??xW,W={removed:0,freedBytes:0};if(!(X>0))return W;try{if(V6)await LX(J,"directory");if((await HX(J)).isSymbolicLink())return W;let K=new Set((Y.protectedPaths??[]).map((_)=>HY(_))),U=await DX(J,{withFileTypes:!0}),H=[];await Promise.all(U.map(async(_)=>{if(!_.isFile())return;let M=gW(_.name),S=M?void 0:PX(_.name);if(!M&&S===void 0)return;let x=o1(J,_.name);try{let j=await HX(x);if(!j.isFile())return;H.push({path:x,size:j.size,mtimeMs:j.mtimeMs,group:S})}catch{}}));let V=H.reduce((_,M)=>_+M.size,0),D=0,L=0,B=async(_)=>{try{await LY(_.path),V-=_.size,L+=_.size,D+=1}catch{}};for(let _ of H){if(_.group!==void 0)continue;if(K.has(HY(_.path)))continue;if(Q-_.mtimeMs<$)continue;await B(_)}let O=new Map;for(let _ of H){if(_.group===void 0)continue;let M=O.get(_.group)??{files:[],newest:0};M.files.push(_),M.newest=Math.max(M.newest,_.mtimeMs),O.set(_.group,M)}let q=[...O.entries()].sort(([_,M],[S,x])=>M.newest-x.newest||_.localeCompare(S));for(let[,_]of q){if(V<=X)break;if(Q-_.newest<G)continue;if(_.files.some((M)=>K.has(HY(M.path))))continue;for(let M of _.files)await B(M)}if(D>0)Y.logger?.debug("removed old dump files",{removed:D,freedBytes:L});return{removed:D,freedBytes:L}}catch(K){if(K instanceof e9&&K.code==="ERR_PRIVATE_FILES_SECURITY")throw K;return W}}async function fW(Y,J,X){if(V6)return FX(Y,J,{stagePath:`${Y}.${X?X():UX(12).toString("hex")}.partial`});for(let Q=0;;Q+=1){let G=`${Y}.${X?X():UX(12).toString("hex")}.partial`,$=!1,W;try{W=await CW(G,"wx",384),$=!0,await W.writeFile(J,"utf8"),await W.chmod(384),await W.close(),W=void 0,await wW(G,Y);return}catch(K){if(await W?.close().catch(()=>{}),$)await LY(G).catch(()=>{});if(K.code==="EEXIST"&&Q===0)continue;throw K}}}function VY(Y){return Y.length<=16?Y:`${Y.slice(0,12)}…`}function t9(Y,J){let X=Y.trim().replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");if(!X)return J;return X.slice(0,80)}function VX(Y){return AW("sha256").update(Y).digest("hex")}function mW(Y){return Y.toLowerCase().replace(/[-_]/g,"")}function BX(Y){return Y!==null&&typeof Y==="object"&&!Array.isArray(Y)}function cW(Y,J){if(Y===void 0)return null;if(Y===J)return{changed:!1,firstByte:-1,lastPreviousByte:-1,lastCurrentByte:-1,previousBytes:Y.length,currentBytes:J.length};let X=0;while(X<Y.length&&X<J.length&&Y[X]===J[X])X++;let Q=Y.length-1,G=J.length-1;while(Q>=X&&G>=X&&Y[Q]===J[G])Q--,G--;return{changed:!0,firstByte:X,lastPreviousByte:Q,lastCurrentByte:G,changedPreviousBytes:Q-X+1,changedCurrentBytes:G-X+1,previousBytes:Y.length,currentBytes:J.length}}var uW=0;function _X(Y){let J=Y.enabled===!0,X=Y.pid??process.pid,Q=Y.now??Date.now,G=Y.logger,$=new Set((Y.secretKeys??[]).map(mW)),W=OX({extraSecretKeys:(A)=>$.has(A),extraValuePatterns:[...Y.secretPatterns??[]]}),K=new Set(Y.schemaKeys??["tools"]),U=new Map,H=()=>typeof Y.dir==="function"?Y.dir():Y.dir;function V(A){let g=W.redact({[A]:null})[A];return g===null?void 0:g}function D(A){if(Array.isArray(A))return A.map(D);if(BX(A)){let g={};for(let[r,i]of Object.entries(A)){let Z0=V(r);if(K.has(r))g[r]=W.redactStrings(i);else if(Z0!==void 0)g[r]=Z0;else g[r]=D(i)}return g}return W.redactStrings(A)}function L(A){let g;try{g=JSON.parse(A)}catch{return{text:W.redactStrings(A),parsed:void 0}}let r=D(g),i=JSON.stringify(r);return{text:JSON.stringify(g)===i?A:i,parsed:BX(r)?r:void 0}}async function B(A,g,r,i){let Z0=`-${t9(g,ZY)}-${t9(r,"channel")}`,B0;try{B0=await DX(A)}catch{return}let p=B0.filter((t)=>t.endsWith(".meta.json")&&t.includes(Z0)).sort().reverse();for(let t of p)try{if(JSON.parse(await BY(o1(A,t),V6))?.baselineKey!==i)continue;return await BY(o1(A,t.replace(/\.meta\.json$/,".body.json")),V6)}catch(L0){if(L0 instanceof e9&&(V6||L0.code==="ERR_PRIVATE_FILES_SECURITY"))throw L0}return}function O(A,g){if(!U.has(A))while(U.size>=IW){let r=U.keys().next().value;if(r===void 0)break;U.delete(r)}U.set(A,g)}async function q(A){if(!J)return;let g=++uW,r=A.session?.trim()||ZY,i=H(),Z0=new Date(Q()).toISOString(),B0=[Z0.replace(/[:.]/g,"-"),String(X),String(g).padStart(6,"0"),t9(r,ZY),t9(A.channel,"channel"),...A.phase?[t9(A.phase,"phase")]:[]].join("-"),p=o1(i,B0),t={body:`${p}.body.json`,metadata:`${p}.meta.json`,request:`${p}.request.json`},L0=VX(`${A.channel}\x00${r}`);try{if(V6)await NX(i);else await RW(i,{recursive:!0,mode:448}),await TW(i,448);let v=U.get(L0),x0=v===void 0?void 0:"memory";if(v===void 0){if(v=await B(i,r,A.channel,L0),v!==void 0)x0="disk"}let T0=L(A.bodyText),K0={id:B0,createdAt:Z0,pid:X,session:VY(r),channel:A.channel,...A.phase?{phase:A.phase}:{},accountId:A.accountId,status:A.status,error:A.error===void 0?void 0:W.redactStrings(A.error),baselineKey:L0,bodyBytes:Buffer.byteLength(A.bodyText,"utf8"),bodyHash:VX(A.bodyText),diff:cW(v,T0.text),baselineSource:x0,body:T0.parsed?{parseable:!0,...Y.summarize?.(T0.parsed)}:{parseable:!1},...A.meta?{extra:D(A.meta)}:{},files:t},s=D({url:A.url,method:A.method,accountId:A.accountId,headers:A.headers===void 0?void 0:Object.fromEntries(new Headers(A.headers).entries())}),_0=(d,y)=>V6?jX(d,y):SW(d,y,{encoding:"utf8",mode:384,flag:"wx"}),l=[[t.body,T0.text],[t.metadata,`${JSON.stringify(K0,null,2)}
2
2
  `],[t.request,`${JSON.stringify(s,null,2)}
3
3
  `]],I=await Promise.allSettled(l.map(([d,y])=>_0(d,y))),u=I.find((d)=>d.status==="rejected");if(u){if(Y.cleanupFailedDumps)await _(l,I);throw u.reason}return O(L0,T0.text),G?.debug("dumped request",{id:B0,session:VY(r),body:t.body}),C(i,Object.values(t)),{id:B0,files:t,responseFile:`${p}.response.json`}}catch(v){if(v instanceof e9&&(V6||v.code==="ERR_PRIVATE_FILES_SECURITY"))throw v;G?.warn("request dump failed",{session:VY(r),error:v instanceof Error?v.message:String(v)});return}}async function _(A,g){await Promise.all(A.map(async([r],i)=>{let Z0=g[i];if(Z0?.status==="rejected"&&Z0.reason?.code==="EEXIST")return;await LY(r).catch(()=>{})}))}let M=Y.maxBytes??0,S=Y.sweepIntervalMs??bW,x=0;function j(A,g){return{dir:A,maxBytes:M,protectedPaths:g,now:Q(),minAgeMs:Y.sweepMinAgeMs,partialStaleMs:Y.partialStaleMs,logger:G}}function C(A,g){if(!(M>0))return;let r=Q();if(r-x<S)return;x=r,ZX(j(A,g))}async function h(A,g){if(!A)return;let r=D({status:g.status,requestId:g.requestId,usage:g.usage,...g.fields,complete:g.complete??!0});try{return await fW(A.responseFile,`${JSON.stringify(r,null,2)}
4
4
  `,Y.stageName),A.responseFile}catch(i){if(i instanceof e9&&(V6||i.code==="ERR_PRIVATE_FILES_SECURITY"))throw i;G?.warn("response dump failed",{id:A.id,error:i instanceof Error?i.message:String(i)});return}}return{isEnabled:()=>J,setEnabled:(A)=>{J=A},dump:q,dumpResponse:h,sweep:(A)=>ZX(j(H(),A))}}var EX=V0("dump"),h6="x-cortexkit-openai-auth-dump-session",lW=["chatgpt-account-id","email","org_name","organization_name"],dW=["tools"];function NY(Y){return pW("sha256").update(JSON.stringify(Y)).digest("hex")}function iW(Y){return Y!=null&&typeof Y==="object"&&"type"in Y&&typeof Y.type==="string"?Y.type:"unknown"}function nW(Y){let J=Array.isArray(Y.input)?Y.input:[],X=Array.isArray(Y.tools)?Y.tools:[],Q=Y.client_metadata!=null&&typeof Y.client_metadata==="object"&&!Array.isArray(Y.client_metadata)?Y.client_metadata:void 0;return{model:typeof Y.model==="string"?Y.model:void 0,stream:Y.stream,generate:Y.generate,store:Y.store,previousResponseID:typeof Y.previous_response_id==="string"?Y.previous_response_id:void 0,promptCacheKey:typeof Y.prompt_cache_key==="string"?Y.prompt_cache_key:void 0,reasoning:Y.reasoning,inputCount:J.length,inputHash:NY(J),inputBytes:JSON.stringify(J).length,firstInputHash:J[0]===void 0?null:NY(J[0]),toolsCount:X.length,toolTypes:X.map(iW),toolsHash:NY(X),clientMetadataKeys:Q?Object.keys(Q).sort():[]}}function oW(){return _X({dir:()=>i0().dumpDir,logger:EX,secretKeys:lW,schemaKeys:dW,summarize:nW})}var qX=oW();async function A9(Y){let J=i0().dump===!0;if(qX.setEnabled(J),!J)return;let X=typeof Y.bodyText==="function"?Y.bodyText():Y.bodyText;await qX.dump({session:Y.sessionID,channel:Y.transport,phase:Y.phase,bodyText:X,accountId:Y.accountId,url:Y.url,method:Y.method,headers:Y.headers,status:Y.status,error:Y.error})}async function t6(Y){if(!i0().dump)return;EX.debug("diagnostic",Y)}function T9(Y){return JSON.stringify(jY(Y))??"undefined"}function jY(Y){if(Array.isArray(Y))return Y.map(jY);if(!n(Y))return Y;return Object.fromEntries(Object.keys(Y).sort().map((J)=>[J,jY(Y[J])]))}var rW=512,sW=2097152;function FY(Y,J){if(typeof Y==="function"||typeof J==="function")return!1;if(J!==null&&typeof J==="object"&&Object.hasOwn(J,"toJSON")&&typeof J.toJSON==="function")return!1;if(Y===J)return!0;if(Array.isArray(Y))return Array.isArray(J)&&Y.length===J.length&&Y.every(($,W)=>FY($,J[W]));if(Y===null||J===null||typeof Y!=="object"||typeof J!=="object"||Array.isArray(J))return!1;let X=Y,Q=J,G=Object.keys(X);return G.length===Object.keys(Q).length&&G.every(($)=>Object.prototype.propertyIsEnumerable.call(Q,$)&&FY(X[$],Q[$]))}function e6(Y,J){let X=[],Q=[],G=0;for(let $=0;$<Y.length;$++){let W=J?.texts[$],K=W!==void 0&&FY(J?.snapshots[$],Y[$]),U=K?W:T9(Y[$]);X.push(U),Q.push(K?J?.snapshots[$]:U==="undefined"?void 0:JSON.parse(U)),G+=U.length}return{texts:X,snapshots:Q,retainable:Y.length<=rW&&G<=sW}}function Y1(Y){return Y.retainable?Y:void 0}function J1(Y,J){if(Y.texts.length>J.texts.length)return;for(let X=0;X<Y.texts.length;X++)if(Y.texts[X]!==J.texts[X])return;return Y.texts.length}function M6(){let Y=crypto.getRandomValues(new Uint8Array(16)),J=Date.now();Y[0]=J/1099511627776&255,Y[1]=J/4294967296&255,Y[2]=J/16777216&255,Y[3]=J/65536&255,Y[4]=J/256&255,Y[5]=J&255,Y[6]=(Y[6]??0)&15|112,Y[8]=(Y[8]??0)&63|128;let X=Array.from(Y,(Q)=>Q.toString(16).padStart(2,"0")).join("");return`${X.slice(0,8)}-${X.slice(8,12)}-${X.slice(12,16)}-${X.slice(16,20)}-${X.slice(20)}`}var MX=new Set(["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna","gpt-6-astra","gpt-6-sol","gpt-6-luna","gpt-6.1-sol"]),aW="terminal_resize_reflow",r1="0.159.0",AX=`codex_exec/${r1} (Debian 12.0.0; aarch64) unknown (codex_exec; ${r1})`,tW="seccomp",X1="x-openai-auth-agent";function eW(Y){if(typeof Y!=="string")return;try{let J=JSON.parse(Y);return typeof J==="object"&&J!==null&&!Array.isArray(J)?J:void 0}catch{return}}function Q1(Y,J){return n(Y)&&(Y.type==="message"||("role"in Y))&&Y.role===J}function Yz(Y,J,X){if(!Y.input)return J.length>0;let Q=Y.canonicalInput??e6(Y.input);if(J1(Q,X)===void 0)return!0;return J.slice(Y.input.length).some(($)=>Q1($,"user")||Q1($,"developer"))}function Jz(Y,J,X){let Q=Array.isArray(J?.input)?J.input:void 0,G=Q?e6(Q,Y.canonicalInput):void 0;if(Q&&G&&(Yz(Y,Q,G)||!Y.turnID))Y.turnID=(X?.uuid??M6)(),Y.turnStartedAt=(X?.now??Date.now)();else if(!Y.turnStartedAt)Y.turnStartedAt=(X?.now??Date.now)();if(Q&&G)Y.input=Q.slice(),Y.canonicalInput=Y1(G)}function TX(Y){let J=Y.headers.get(X1);if(Y.headers.delete(X1),!Y.metadata)return{init:Y.init};let X=eW(Y.init?.body),Q=Y.runtime?.now??Date.now;if(!Y.skipTurnUpdate){if(!Y.websocket)Jz(Y.metadata,X,Y.runtime);else if(!Y.metadata.turnStartedAt)Y.metadata.turnStartedAt=Q();if(!Y.metadata.turnStartedAt)Y.metadata.turnStartedAt=Q()}let G=JSON.stringify({session_id:Y.metadata.threadID,thread_id:Y.metadata.threadID,thread_source:"user",turn_id:Y.metadata.turnID,sandbox:tW,turn_started_at_unix_ms:Y.metadata.turnStartedAt,request_kind:"turn",window_id:Y.metadata.windowID});if(Y.headers.set("originator","codex_exec"),Y.websocket)Y.headers.delete("accept"),Y.headers.delete("content-type");else Y.headers.set("accept","text/event-stream");if(Y.headers.set("session-id",Y.metadata.threadID),Y.headers.delete("x-session-id"),Y.headers.delete("x-session-affinity"),Y.headers.set("thread-id",Y.metadata.threadID),Y.headers.set("x-codex-window-id",Y.metadata.windowID),Y.headers.set("x-client-request-id",Y.metadata.threadID),Y.headers.set("x-codex-beta-features",aW),Y.headers.set("x-codex-turn-metadata",G),Y.headers.set("user-agent",AX),Y.headers.set("version",r1),Y.dumpSessionID)Y.headers.set(h6,Y.dumpSessionID);let $=X;if(!$)return{init:Y.init};let W=Y.responsesLite&&typeof $.model==="string"&&MX.has($.model);if(W&&!Y.websocket)Y.headers.set("x-openai-internal-codex-responses-lite","true");if($.prompt_cache_key=Y.metadata.threadID,$.parallel_tool_calls??=!0,Array.isArray($.tools))$.tools=$.tools.map(Xz);if(Y.applyEffort?.($,Y.metadata,J),W)Y.rewriteLite($);let K={...typeof $.client_metadata==="object"&&$.client_metadata!==null?$.client_metadata:{},"x-codex-installation-id":Y.installationID,"x-codex-window-id":Y.metadata.windowID};if(Y.websocket){if(K["x-codex-turn-metadata"]=G,K["x-codex-ws-stream-request-start-ms"]=String(Q()),W)K.ws_request_header_x_openai_internal_codex_responses_lite="true"}return $.client_metadata=K,Y.headers.delete("content-length"),Y.headers.delete("Content-Length"),{init:{...Y.init,body:JSON.stringify(a6($))}}}function Xz(Y){if(!n(Y)||Y.type!=="function")return Y;let J=n(Y.parameters)&&"$schema"in Y.parameters?(()=>{let{$schema:U,...H}=Y.parameters;return H})():Y.parameters,{type:X,name:Q,description:G,strict:$,parameters:W,...K}=Y;return{type:X,name:Q,description:G,strict:$??!1,parameters:J,...K}}import{mkdirSync as Qz,readFileSync as Gz,renameSync as $z,writeFileSync as Wz}from"node:fs";import{dirname as zz}from"node:path";function Kz(Y){let J=new Map,X=JSON.parse(Gz(Y,"utf8"));if(!n(X.sessions))return J;for(let[Q,G]of Object.entries(X.sessions)){if(!n(G)||typeof G.threadID!=="string")continue;J.set(Q,G.threadID)}return J}function RX(Y,J=M6){let X=new Map,Q;try{Q=Kz(Y)}catch{return X}for(let[G,$]of Q)X.set(G,{threadID:$,turnID:J(),windowID:`${$}:0`});return X}function Uz(Y,J){let X=`${Y}.tmp-${process.pid}`;Qz(zz(Y),{recursive:!0});let Q={version:1,sessions:Object.fromEntries([...J].map(([G,$])=>[G,{threadID:$}]))};Wz(X,`${JSON.stringify(Q,null,2)}
@@ -0,0 +1,2 @@
1
+ import{ef as E}from"./index-xwvze96g.js";import{randomUUID as k}from"node:crypto";import{lstat as S,readFile as O,rename as F,unlink as C}from"node:fs/promises";import{dirname as V,resolve as M}from"node:path";var b=process.platform==="win32",N=new Set;function T(j){if(j?.reason==="io-error"){if(j.win32Code===2||j.win32Code===3)return"ENOENT";if(j.win32Code===80||j.win32Code===183)return"EEXIST"}return j?.code??"ERR_PRIVATE_FILE"}var B;function $(){return B??=import("@cortexkit/private-files"),B}class R extends Error{path;stage;code;win32Code;reason;published=!1;durabilityConfirmed=!1;fileDurable=!1;attempts=0;elapsedMs=0;orphanPath;constructor(j,G,A){let z=A;super(`Private file refused at ${G}: ${j} (${z?.reason??z?.code??"io-error"}). Use a safe parent directory. Repair only a named secret file in safe ancestry whose owner the published policy trusts, without changing its owner or any existing directory. Previously exposed credentials may need rotation. Windows requires the private-files native prebuild and an ACL-persisting local filesystem such as NTFS.`,{cause:A});this.path=j,this.stage=G,this.name="PrivateFileError",this.code=T(z),this.win32Code=z?.win32Code,this.reason=z?.reason}}async function q(j,G,A){try{return await A()}catch(z){if(z instanceof R)throw z;throw new R(j,G,z)}}var g;async function Z(j,G){j=M(j),G??=g,await q(j,"safe-parent",async()=>{let A=await(await $()).verifySafeParent(j,G);if(A.ok===!1){if(A.reason==="io-error"||A.reason==="wrong-kind")await S(j);throw new R(A.level??A.path,"safe-parent",{...A,code:"ERR_PRIVATE_FILES_SECURITY"})}})}async function U(j,G,A=!1){if(j=M(j),G==="directory")return Z(j);await q(j,"verify",async()=>{let z=await $(),K=await z.verifyOwnerOnly(j),H=!1;if(!K.ok){let{reason:L}=K.refusal;if(L==="io-error")await z.verifyPrivatePath(j,G);if(A&&[z.EXTRA_ACE,z.NOT_PROTECTED,z.NULL_DACL,z.EMPTY_DACL].includes(L))await Z(V(j)),await z.securePrivatePath(j,G),H=!0;else throw Object.assign(Error("Owner-only verification refused"),{reason:L,code:"ERR_PRIVATE_FILES_SECURITY"})}if(await z.verifyPrivatePath(j,G),H&&!N.has(j))N.add(j),process.emitWarning(`Private permissions tightened: ${j}. This object may have been readable before; rotate credentials if needed.`,"PrivateFileMigration")})}async function w(j,G=!1,A){j=M(j),await q(j,"directory",async()=>{let z=await $();try{return await S(j),await Z(j,A)}catch(H){if(T(H)!=="ENOENT")throw H}let K=V(j);if(K===j)throw Object.assign(Error("Missing root"),{code:"ENOENT"});await w(K,!1,A);try{await z.createOwnerOnly(j,{kind:"dir"})}catch(H){if(T(H)!=="EEXIST")throw H}await Z(j,A)})}async function d(j,G=!1){if(!b)return O(j,"utf8");return(await P(j,G)).toString("utf8")}async function P(j,G=!1){if(!b)return O(j);if(j=M(j),G)await Z(V(j)),await U(j,"file",!0);return q(j,"read",async()=>(await $()).readOwnerOnly(j))}async function f(j,G){await Z(V(M(j))),await q(j,"create",async()=>{await(await $()).createPrivateFile(M(j),G)})}async function l(j){await Z(V(M(j))),await q(j,"directory-create",async()=>{await(await $()).createOwnerOnly(M(j),{kind:"dir"})})}async function y(j,G,A={}){j=M(j),G=M(G);let z=A.now??(()=>performance.now()),K=z(),H=A.deadline??1/0,L,_=[0,10,20,40,80,100],x,J=0;for(let W of _){let I=Math.min(L??1/0,H);if(z()>=I)break;if(W)await(A.sleep??((X)=>new Promise((Y)=>setTimeout(Y,X))))(Math.min(W,Math.max(0,I-z())));if(z()>=I)break;let D=z();if(await A.beforeRename?.(),L!==void 0)L+=z()-D;if(z()>=H)break;J++;try{return await(A.rename??F)(j,G),{attempts:J,elapsedMs:z()-K}}catch(X){x??=X;let Y=X;if(!(Y.win32Code!==void 0?Y.win32Code===32||Y.win32Code===33:["EBUSY","EPERM","EACCES"].includes(Y.code??"")&&!Y.reason))break;L??=z()+500}}let Q=new R(G,"rename",x??Object.assign(Error("Publication deadline expired"),{code:"ETIMEDOUT"}));throw Q.attempts=J,Q.elapsedMs=z()-K,Q}async function n(j,G,A={}){j=M(j),await w(V(j));try{await U(j,"file",!0)}catch(J){if(J.code!=="ENOENT")throw J}let z=M(A.stagePath??`${j}.${k()}.tmp`);if(V(z)!==V(j))throw new R(j,"stage-directory",{code:"EXDEV"});let K=!1,H=!1,L={attempts:0,elapsedMs:0},_="stage-create",x=(J)=>{try{A.onOutcome?.({path:j,stage:J?.stage??"published",published:H,fileDurable:H,durabilityConfirmed:!1,attempts:J?.attempts??L.attempts,elapsedMs:J?.elapsedMs??L.elapsedMs,...J&&{code:J.code,win32Code:J.win32Code}})}catch{}};try{if(await f(z,G),K=!0,_="before-rename",L=await y(z,j,A),K=!1,H=!0,_="published-callback",A.onRenamed?.(),_="published-verify",await U(j,"file"),A.durable&&A.durability!=="file-only-on-windows")throw new R(j,"directory-sync-unsupported",{code:"ENOTSUP"});x()}catch(J){let Q=J instanceof R?J:new R(j,_,J);if(Q.published=H,Q.fileDurable=H,H)Object.assign(Q,L);if(K){try{await C(z)}catch{Q.orphanPath=z}K=!1}throw x(Q),Q}finally{if(K)await C(z).catch(()=>{})}}
2
+ export{b as Pe,R as Qe,q as Re,Z as Se,U as Te,w as Ue,d as Ve,f as We,l as Xe,y as Ye,n as Ze};
@@ -1,2 +1,2 @@
1
- import{Bc as g,Cc as WZ,Fc as d,_d as OZ,be as TZ,yc as NZ,zc as PZ}from"./index-f21addzm.js";import{je as XZ,ne as VZ,oe as YZ,pe as y,qe as b}from"./index-qxbchh2d.js";import{He as HZ}from"./index-ehjj89rx.js";import{Pe as I,Qe as $Z,Ue as A,Ve as JZ}from"./index-r2s51ac1.js";import{createHash as dZ}from"node:crypto";import{constants as lZ,copyFileSync as uZ,mkdirSync as rZ,statSync as cZ}from"node:fs";import{readFile as oZ}from"node:fs/promises";import{homedir as aZ,tmpdir as iZ}from"node:os";import{dirname as sZ,join as h}from"node:path";import{chmod as hZ,mkdir as mZ}from"node:fs/promises";import{dirname as ZZ}from"node:path";function k(Z){let{path:$,defaultValue:V,normalize:J}=Z,X=Promise.resolve(),Y=(K)=>{if(K==="")return V;try{return J(JSON.parse(K))}catch{return V}},G=async()=>{try{if(I)await A(ZZ($),Z.secureDir??!0);return await JZ($,I)}catch(K){if(K.code==="ENOENT")return"";throw K}},z=async()=>{try{return Y(await G())}catch(K){if(K instanceof $Z)throw K;return V}},U=(K,D)=>{let P=X.then(K).then((N)=>D?.onResult?.(N));return X=P.catch(()=>{}),P},B={...b.sidebar,name:Z.lockName??b.sidebar.name,timeoutMs:Z.timeoutMs??b.sidebar.timeoutMs},j=async(K,D,P)=>{await XZ($,D,{serialize:JSON.stringify,beforeRename:async()=>{await P?.beforeCommit?.(),await K.assertOwned()}}),await P?.afterRename?.();try{return await K.assertOwned(),!0}catch(N){if(N instanceof YZ)return!1;throw N}},Q=async(K,D,P)=>{Z.logger?.warn("sidebar lock lost after rename; repairing write",{path:$});try{let N=await y($,B,async(W)=>{let H=K(await z(),D);if(H===void 0)return"skipped";return await j(W,H,P)?"written":"lost-again"});if(N==="lost-again")Z.logger?.warn("sidebar repair lost its lock after rename",{path:$});return{status:"lost-after-rename",repair:N}}catch(N){if(!(N instanceof VZ))throw N;return Z.logger?.warn("sidebar repair lock unavailable; repair skipped",{path:$}),{status:"lost-after-rename",repair:"lock-unavailable"}}},L=async(K,D)=>{let P=D,N=ZZ($),W=Z.secureDir??!0;if(I)await A(N,W);else if(await mZ(N,{recursive:!0,mode:448}),W)await hZ(N,448).catch((F)=>{Z.logger?.warn("sidebar directory permission remediation failed",{error:F instanceof Error?F.message:String(F)})});let H=await y($,B,async(F)=>{let s=async(C)=>({value:C,held:await j(F,C,P)});for(let C=0;C<3;C+=1){let e=await G(),t=K(Y(e));if(t===void 0)return;if(C===0)await P?.beforeRecheck?.();if(await G()!==e)continue;return await s(t)}let n=K(await z());return n===void 0?void 0:await s(n)});if(H===void 0)return{status:"skipped"};if(H.held)return{status:"written"};let i=D?.repair??Z.repair;if(!i)return Z.logger?.warn("sidebar lock lost after rename; write not repaired",{path:$}),{status:"lost-after-rename",repair:"none"};return await Q(i,H.value,P)};return{read:z,write:(K,D)=>U(()=>L(()=>K,D),D),update:(K,D)=>U(()=>L(K,D),D)}}var l=["primary","secondary"],pZ={primary:300,secondary:10080};function gZ(Z,$){return NZ({scope:"all",label:$,windowMinutes:Z})}function x0(Z){if(!Z)return[];let $=[];for(let V of l){let J=Z[V];if(!J)continue;let X=J.windowMinutes,Y=X!==void 0&&Number.isFinite(X)&&X>0?X:pZ[V];$.push({key:V,label:gZ(X,V),window:J,windowMs:Y*60000})}return $}var M=HZ("sidebar"),nZ="OPENCODE_OPENAI_AUTH_SIDEBAR_STATE_FILE";function _Z(){let Z=process.env.XDG_STATE_HOME||h(aZ(),".local","state");return h(Z,"cortexkit","openai-auth","sidebar-state.json")}var RZ=h(iZ(),"opencode-openai-auth","sidebar-state.json");function k0(Z){RZ=Z,m.clear()}var eZ=/^[a-f0-9]{64}$/,u=604800000,CZ=256,FZ=3600000;function _(Z){return dZ("sha256").update(Z).digest("hex")}function tZ(Z){return typeof Z==="number"&&Number.isFinite(Z)&&Z>=0?Z:void 0}function MZ(Z){let $=tZ(Z);return $!==void 0?{resetCredits:$}:{}}function Z0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.activeId!=="string"||typeof X.route!=="string"||typeof X.updatedAt!=="number"||!Number.isFinite(X.updatedAt))continue;$[V]={activeId:X.activeId,route:X.route,updatedAt:X.updatedAt}}return Object.keys($).length>0?$:void 0}function $0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(!eZ.test(V)||J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.accountId!=="string"||X.accountId.length===0||typeof X.assignedAt!=="number"||!Number.isFinite(X.assignedAt)||X.assignedAt<0||typeof X.lastSeenAt!=="number"||!Number.isFinite(X.lastSeenAt)||X.lastSeenAt<0||typeof X.inputBytes!=="number"||!Number.isFinite(X.inputBytes)||X.inputBytes<0)continue;let Y=X.quotaCheckedAt;if(Y!==void 0&&(typeof Y!=="number"||!Number.isFinite(Y)||Y<0))continue;let G=X.wireAccountId;$[V]={accountId:X.accountId,assignedAt:X.assignedAt,lastSeenAt:X.lastSeenAt,inputBytes:X.inputBytes,...Y===void 0?{}:{quotaCheckedAt:Y},...typeof G==="string"?{wireAccountId:G}:{}}}return Object.keys($).length>0?$:void 0}function O(){let Z=process.env[nZ];if(Z)return Z;let $=_Z();if(!m.has($))m.add($),J0($,RZ);return $}var m=new Set;function J0(Z,$){try{rZ(sZ(Z),{recursive:!0,mode:448}),uZ($,Z,lZ.COPYFILE_EXCL)}catch{}}var E={main:{quota:null,killed:!1},fallbacks:[],activeId:void 0,route:"main",lastUpdated:0};function f(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return E;let $=Z,V=$.main,J;if(V!==null&&typeof V==="object"&&!Array.isArray(V)){let K=V;J={quota:"quota"in K?K.quota:null,killed:typeof K.killed==="boolean"?K.killed:!1,...typeof K.mainAccountId==="string"?{mainAccountId:K.mainAccountId}:{},...typeof K.quotaBackedOff==="boolean"?{quotaBackedOff:K.quotaBackedOff}:{},...typeof K.quotaBackoffUntil==="number"?{quotaBackoffUntil:K.quotaBackoffUntil}:{},...typeof K.refreshBackedOff==="boolean"?{refreshBackedOff:K.refreshBackedOff}:{},...typeof K.refreshBackoffUntil==="number"?{refreshBackoffUntil:K.refreshBackoffUntil}:{},...MZ(K.resetCredits)}}else J={quota:null,killed:!1};let X=zZ($.fallbacks),Y=Array.isArray($.vaultAccounts)?zZ($.vaultAccounts):void 0,G=typeof $.activeId==="string"?$.activeId:void 0,z=typeof $.route==="string"?$.route:E.route,U=typeof $.lastUpdated==="number"?$.lastUpdated:0,B=typeof $.planType==="string"?$.planType:void 0,j=typeof $.credits==="number"?$.credits:void 0,Q=Z0($.activeRouting),L=$0($.stickyAssignments);return{main:J,fallbacks:X,activeId:G,route:z,lastUpdated:U,...Q!==void 0?{activeRouting:Q}:{},...L!==void 0?{stickyAssignments:L}:{},...B!==void 0?{planType:B}:{},...j!==void 0?{credits:j}:{},...$.accountPool===!0?{accountPool:!0}:{},...Y!==void 0?{vaultAccounts:Y}:{}}}function zZ(Z){if(!Array.isArray(Z))return[];return Z.filter(($)=>$!==null&&typeof $==="object"&&!Array.isArray($)&&typeof $.id==="string").map(($)=>({id:$.id,...typeof $.credentialId==="string"?{credentialId:$.credentialId}:{},label:typeof $.label==="string"?$.label:void 0,...typeof $.accountId==="string"?{accountId:$.accountId}:{},quota:"quota"in $?$.quota:null,killed:typeof $.killed==="boolean"?$.killed:!1,enabled:typeof $.enabled==="boolean"?$.enabled:!0,...typeof $.routable==="boolean"?{routable:$.routable}:{},...["needs sign-in","turned off in vault","unavailable"].includes($.vaultState)?{vaultState:$.vaultState}:{},...MZ($.resetCredits)}))}function r(Z){return[...Z.fallbacks,...Z.vaultAccounts??[]]}async function X0(Z=O()){try{let $=await oZ(Z,"utf8");return f(JSON.parse($))}catch{return E}}var V0=3600000,GZ=128;function qZ(Z,$,V=Date.now()){if(!(Z.updatedAt>=V-V0&&Z.updatedAt<=V))return!1;if($===void 0)return!0;return Z.activeId==="main"||$.some((X)=>X.enabled!==!1&&X.routable!==!1&&X.killed!==!0&&X.id===Z.activeId)}function Y0(Z,$=Date.now()){let V=Z?.spendControl;if(V?.reached!==!0||typeof V.resetsAt!=="string")return;let J=Date.parse(V.resetsAt);if(!Number.isFinite(J)||J<=$)return;return{resetsAt:V.resetsAt,resetAtMs:J}}function z0(Z,$=Date.now()){let V;for(let X of l){let Y=Z?.[X];if(typeof Y?.resetsAt!=="string"||!Number.isFinite(Y.usedPercent)||Y.usedPercent<100)continue;let G=Date.parse(Y.resetsAt);if(!Number.isFinite(G)||G<=$)continue;if(!V||G<V.resetAtMs)V={resetsAt:Y.resetsAt,resetAtMs:G}}let J=Y0(Z,$);if(J&&(!V||J.resetAtMs<V.resetAtMs))V=J;return V}function q(Z,$=Date.now()){return z0(Z,$)!==void 0}function G0(Z,$,V=Date.now()){if(!$||Z.route!=="sticky-balanced")return;let J=Z.stickyAssignments?.[_($)];if(!J||J.lastSeenAt<V-u)return;if(J.accountId==="main"&&Z.vaultAccounts===void 0)return Z.main?.killed||q(Z.main?.quota,V)?void 0:"main";let X=r(Z).find((Y)=>Y.id===J.accountId);if(!X||X.enabled===!1||X.routable===!1||X.killed===!0||q(X.quota,V))return;return X.id}function w0(Z,$,V=Date.now()){if(!$){if(Z.vaultAccounts===void 0)return{activeId:Z.activeId??"main",route:Z.route};let j=Z.vaultAccounts.find((Q)=>Q.id===Z.activeId&&Q.enabled&&Q.routable!==!1&&!Q.killed);if(j&&!q(j.quota,V))return{activeId:j.id,route:Z.route}}let J=$?Z.activeRouting?.[$]:void 0,X=r(Z),Y=J?.activeId==="main"?Z.main.quota:X.find((j)=>j.id===J?.activeId)?.quota;if(J&&(Z.vaultAccounts===void 0||J.activeId.startsWith("vault:"))&&qZ(J,X,V)&&!q(Y,V))return{activeId:J.activeId,route:J.route};let G=G0(Z,$,V);if(G)return{activeId:G,route:Z.route};let z=Z.vaultAccounts!==void 0,U=(z?c(Z):Z.fallbacks).filter((j)=>j.enabled&&j.routable!==!1&&!j.killed),B=U.find((j)=>!q(j.quota,V))??U[0];return{activeId:z?B?.id??"vault":Z.route==="fallback-first"&&B?B.id:"main",route:Z.route}}function c(Z){let $=Z.vaultAccounts??[],V=new Map($.map((J)=>[J.id,J]));return d($.map((J)=>J.id),wZ(Z),OZ($)??"").flatMap((J)=>{let X=V.get(J);return X?[X]:[]})}function EZ(Z,$,V=Date.now(),J){if(!Z)return;let X=Object.entries(Z).filter(([G,z])=>G!==J&&qZ(z,$,V)),Y=X.length<=GZ?X:X.sort((G,z)=>z[1].updatedAt-G[1].updatedAt).slice(0,GZ);return Y.length>0?Object.fromEntries(Y):void 0}function x(Z,$,V=Date.now(),J){if(!Z)return;let X=0,Y=0,G=0,z=[];for(let[B,j]of Object.entries(Z)){if(B===J){G+=1;continue}if(j.lastSeenAt<V-u){Y+=1;continue}if($!==void 0&&!$.has(j.accountId)){X+=1;continue}z.push([B,j])}let U=X+Y+G;if(U>0)M.debug("pruned sticky assignments",{pid:process.pid,removed:U,reasons:{"account-not-in-roster":X,expired:Y,"explicit-removal":G}});return z.length>0?Object.fromEntries(z):void 0}function xZ(Z,$){let V=Object.keys(Z).length-CZ;if(V<=0)return Z;let J=new Set(Object.entries(Z).filter(([X])=>X!==$).sort(([X,Y],[G,z])=>Y.lastSeenAt-z.lastSeenAt||X.localeCompare(G)).slice(0,V).map(([X])=>X));return Object.fromEntries(Object.entries(Z).filter(([X])=>!J.has(X)))}function IZ(Z,$){if(Z===$)return!0;if(!Z||!$)return!1;let V=Object.entries(Z);if(V.length!==Object.keys($).length)return!1;return V.every(([J,X])=>Object.is($[J],X))}function bZ(Z,$,V,J){return Z!==void 0&&$.has(Z.accountId)&&!V.has(Z.accountId)&&Z.lastSeenAt>=J-u}function vZ(Z,$,V,J){return $>Z.inputBytes||V-Z.lastSeenAt>=FZ||Z.wireAccountId===void 0&&J!==void 0}function SZ(Z,$){return typeof Z.wireAccountId==="string"&&typeof $==="string"&&Z.wireAccountId!==$}function K0(Z){let $=new Map(Z),V={get size(){return $.size},has:(J)=>$.has(J),get:(J)=>$.get(J),entries:()=>$.entries(),keys:()=>$.keys(),values:()=>$.values(),forEach:(J,X)=>{$.forEach((Y,G)=>{J.call(X,Y,G,V)})},[Symbol.iterator]:()=>$[Symbol.iterator]()};return Object.freeze(V)}function j0(Z,$,V){let J=new Map;for(let[X,Y]of Object.entries(Z??{})){if(X===V)continue;if(Y.quotaCheckedAt!==$[Y.accountId])continue;J.set(Y.accountId,(J.get(Y.accountId)??0)+Y.inputBytes)}return K0(J)}function o(Z){if(Z===void 0)return;return new Set(["main",...Z.filter(($)=>$.enabled!==!1&&$.killed!==!0).map(($)=>$.id)])}var p=Promise.resolve();function T(Z){let $=p.then(Z);return p=$.catch(()=>{}),$}var KZ=new Map;function a(Z){let $=KZ.get(Z);if(!$)$=k({path:Z,defaultValue:E,normalize:f,secureDir:Z===_Z(),logger:M}),KZ.set(Z,$);return $}var w=new Set;async function fZ(Z,$){try{await $}catch(V){let J={pid:process.pid,error:V instanceof Error?V.message:String(V)};if(w.has(Z))M.debug("sidebar write failed again",J);else w.add(Z),M.warn("sidebar write failed",J);throw V}if(w.delete(Z))M.info("sidebar write recovered",{pid:process.pid})}function h0(Z,$=O()){return T(()=>fZ($,a($).write(f(Z))))}function L0(Z){return a(Z).read()}function R(Z,$,V){let J=Symbol("sidebar authority changed");return fZ(Z,a(Z).update((X)=>{if(V?.canWrite&&!V.canWrite())return;let Y=$(X);if(Y===void 0)return;if(Y.vaultAccounts!==void 0)Y.activeId=Y.activeId?.startsWith("vault:")?Y.activeId:void 0,Y.activeRouting=Object.fromEntries(Object.entries(Y.activeRouting??{}).filter(([,G])=>G.activeId.startsWith("vault:"))),Y.stickyAssignments=Object.fromEntries(Object.entries(Y.stickyAssignments??{}).filter(([,G])=>G.accountId.startsWith("vault:")&&!Y.vaultAccounts?.some((z)=>z.id===G.accountId&&z.killed)));return f(Y)},{beforeRecheck:async(...X)=>{if(await V?.beforeRecheck?.(...X),V?.canWrite&&!V.canWrite())throw J}}).catch((X)=>{if(X!==J)throw X}))}function v(Z){let $;for(let V of[Z?.primary?.checkedAt,Z?.secondary?.checkedAt,Z?.checkedAt])if(typeof V==="number"&&Number.isFinite(V))$=$===void 0?V:Math.max($,V);return $}function jZ(Z,$){let V=v(Z),J=v($);if(J!==void 0&&(V===void 0||J>V))return $;return Z}function LZ(Z,$){return Z!==void 0&&$!==void 0&&Z===$}function S(Z,$){let V=Z?.checkedAt;if(typeof V==="number"&&Number.isFinite(V))return V;if(typeof $==="number"&&Number.isFinite($))return $;return}function BZ(Z,$,V,J,X){if(Z&&$){let Y=S(Z,J),G=S($,X);if(G!==void 0&&(Y===void 0||G>Y))return $;return Z}return V?$:Z}function UZ(Z,$){if(Z.spendControl!==void 0)return Z.spendControl;if(Z.spendControlCleared===!0)return;return $.spendControl}function QZ(Z,$){if(!Z)return $;if(!$)return Z;let V=v(Z),J=v($),X=J!==void 0&&(V===void 0||J>V),Y=BZ(Z.primary,$.primary,X,Z.checkedAt,$.checkedAt),G=BZ(Z.secondary,$.secondary,X,Z.checkedAt,$.checkedAt),z=X?UZ($,Z):UZ(Z,$),U=z===void 0&&(Z.spendControlCleared===!0||$.spendControlCleared===!0),B;for(let K of[S(Y),S(G)])if(K!==void 0)B=B===void 0?K:Math.max(B,K);let{spendControl:j,spendControlCleared:Q,...L}=Z;return{...L,primary:Y,secondary:G,...z!==void 0?{spendControl:z}:{},...U?{spendControlCleared:!0}:{},checkedAt:B??Z.checkedAt}}function m0(Z,$=O(),V){return T(async()=>{await R($,(J)=>{let X=new Map(J.fallbacks.map((j)=>[j.id,j])),Y=Z.vaultAccounts!==void 0,G=LZ(Z.main.mainAccountId,J.main.mainAccountId),z=G?QZ(Z.main.quota,J.main.quota):jZ(Z.main.quota,J.main.quota),U=Date.now(),B=x(J.stickyAssignments,Y?void 0:o(r(Z)),U);return{...J,...Z,main:Y?Z.main:{...Z.main,quota:z,mainAccountId:G?Z.main.mainAccountId:z===J.main.quota&&z!==Z.main.quota?J.main.mainAccountId:Z.main.mainAccountId},fallbacks:Y?Z.fallbacks:Z.fallbacks.map((j)=>{let Q=X.get(j.id),L=LZ(j.accountId,Q?.accountId),K=L?QZ(j.quota,Q?.quota??null):jZ(j.quota,Q?.quota??null);return{...j,quota:K,accountId:L?j.accountId:K===Q?.quota&&K!==j.quota?Q?.accountId:j.accountId}}),activeId:J.activeId,activeRouting:J.activeRouting,stickyAssignments:B,lastUpdated:Math.max(U,J.lastUpdated+1),accountPool:Z.accountPool===!0?!0:void 0,vaultAccounts:Z.vaultAccounts}},V)})}function p0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=EZ({...X.activeRouting,[Z.sessionId]:{activeId:Z.activeId,route:Z.route,updatedAt:Z.updatedAt}},$,Date.now()),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Date.now());return{...X,activeId:Z.activeId,route:Z.route,activeRouting:Y,stickyAssignments:G,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function g0(Z,$=O(),V){return T(async()=>{await R($,(J)=>({...J,activeId:Z.activeId,route:Z.route,lastUpdated:Math.max(Date.now(),J.lastUpdated+1)}),V)})}function d0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=Date.now(),G=EZ(X.activeRouting,$,Y,Z),z=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Y,_(Z));return{...X,activeRouting:G,stickyAssignments:z,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function AZ(Z,$){return bZ(Z,new Set($.validPinnedAccountIds),new Set($.excludeAccountIds),$.now)&&!SZ(Z,$.wireAccountIdByAccount?.[Z.accountId])&&!vZ(Z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[Z.accountId])}function yZ(Z,$){let V=_($.sessionId),J=new Set($.validPinnedAccountIds),X=new Set($.excludeAccountIds),Y=x(Z.stickyAssignments,J,$.now),G=!IZ(Z.stickyAssignments,Y),z=Y?.[V],U=z!==void 0&&SZ(z,$.wireAccountIdByAccount?.[z.accountId]);if(bZ(z,J,X,$.now)&&!U){let Q=vZ(z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[z.accountId]),L=Q?{...z,inputBytes:Math.max(z.inputBytes,$.requestBytes),...z.wireAccountId===void 0&&$.wireAccountIdByAccount?.[z.accountId]!==void 0?{wireAccountId:$.wireAccountIdByAccount?.[z.accountId]}:{},...$.now-z.lastSeenAt>=FZ?{lastSeenAt:$.now}:{}}:z;if(!G&&!Q)return{assignment:L,next:void 0};return{assignment:L,next:{...Z,stickyAssignments:{...Y,[V]:L},lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let B=$.choose(j0(Y,$.quotaCheckedAtByAccount,U?V:void 0));if(!B){if(!G)return{assignment:void 0,next:void 0};return{assignment:void 0,next:{...Z,stickyAssignments:Y,lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let j={accountId:B.accountId,assignedAt:$.now,lastSeenAt:$.now,inputBytes:$.requestBytes,...B.quotaCheckedAt===void 0?{}:{quotaCheckedAt:B.quotaCheckedAt},...$.wireAccountIdByAccount?.[B.accountId]===void 0?{}:{wireAccountId:$.wireAccountIdByAccount?.[B.accountId]}};return{assignment:j,next:{...Z,stickyAssignments:xZ({...Y,[V]:j},V),lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}async function l0(Z,$=O(),V){let J=_(Z.sessionId),X=(await L0($)).stickyAssignments?.[J];if(AZ(X,Z))return X;let Y;return await T(async()=>{await R($,(G)=>{let z=yZ(G,Z);return Y=z.assignment,z.next},V)}),Y}function u0(Z,$){let V=Z.stickyAssignments?.[_($.sessionId)];if(AZ(V,$))return{assignment:V,next:void 0};return yZ(Z,$)}function r0(Z,$=O()){let V=_(Z.sessionId),J=new Set(Z.validPinnedAccountIds);return T(async()=>{await R($,(X)=>{let Y=Date.now(),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:J,Y),z=G?.[V];if(z&&z.assignedAt>Z.assignment.assignedAt){if(IZ(X.stickyAssignments,G))return;return{...X,stickyAssignments:G,lastUpdated:Math.max(Y,X.lastUpdated+1)}}let B=z!==void 0&&z.accountId===Z.assignment.accountId&&z.assignedAt===Z.assignment.assignedAt?{...Z.assignment,inputBytes:Math.max(z.inputBytes,Z.assignment.inputBytes),lastSeenAt:Math.max(z.lastSeenAt,Z.assignment.lastSeenAt)}:Z.assignment;return{...X,stickyAssignments:xZ({...G,[V]:B},V),lastUpdated:Math.max(Y,X.lastUpdated+1)}})})}async function c0(Z,$=O()){let V=_(Z),J=!1;return await T(async()=>{await R($,(X)=>{let Y=X.stickyAssignments;if(Y?.[V]===void 0){J=!1;return}J=!0;let{[V]:G,...z}=Y;return{...X,...Object.keys(z).length>0?{stickyAssignments:z}:{stickyAssignments:void 0},lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}})}),J}function o0(){return p}var B0=500;function U0(Z,$,V){return new Promise((J,X)=>{let Y=setTimeout(()=>J(V()),$);Y.unref?.(),Z.then((G)=>{clearTimeout(Y),J(G)},(G)=>{clearTimeout(Y),X(G)})})}function a0(Z,$={}){let V=$.readBudgetMs??B0,J,X,Y=()=>{try{let z=cZ(Z);return`${z.ino}:${z.size}:${z.mtimeMs}`}catch{return}},G=(z)=>{if(X&&X.key===z)return X.promise;let U=Date.now(),B=X0(Z).then((L)=>{if(!J||J.readAt<=U)J={state:L,readAt:U,key:z};return{state:L,readAt:U}}),j={key:z,promise:B};X=j;let Q=()=>{if(X===j)X=void 0};return B.then(Q,Q),B};return{get(){let z=Y();if(J&&J.key===z)return Promise.resolve({state:J.state,readAt:J.readAt});return U0(G(z),V,()=>J?{state:J.state,readAt:J.readAt}:{state:E,readAt:0})},read(){return G(Y())},refreshInBackground(){let z=Y();if(J?.key===z)return;G(z)}}}function i0(Z,$,V){let J={assignment:V};Z.delete($),Z.set($,J);while(Z.size>CZ){let X=Z.keys().next().value;if(X===void 0)break;Z.delete(X)}return J}function s0(Z,$){if($.size===0)return Z.state;let V={...Z.state.stickyAssignments},J=!1;for(let[X,Y]of $){if(Y.persistedAt!==void 0&&Z.readAt>Y.persistedAt){$.delete(X);continue}V[X]=Y.assignment,J=!0}if(!J)return Z.state;return{...Z.state,stickyAssignments:V}}function n0(Z){let $=Z.retryDelayMs??500,V=Z.maxRetryDelayMs??30000,J=new Map,X=new Map,Y=new Set,G=0,z=$,U,B=!1,j=()=>{if(U||B||X.size===0)return;U=setTimeout(()=>{U=void 0;let L=[...X];X.clear(),z=Math.min(z*2,V);for(let[K,D]of L){let P=J.get(K);if(P!==void 0)Q(K,D.label,D.write,P)}},z),U.unref?.()},Q=(L,K,D,P)=>{let N;try{N=D()}catch(W){N=Promise.reject(W)}N.then(()=>{if(J.get(L)!==P)return;if(J.delete(L),Y.delete(L))Z.logger.info("sidebar bookkeeping write recovered",{pid:process.pid,write:K});if(Y.size===0)z=$;Z.onWritten?.()},(W)=>{if(J.get(L)!==P)return;let H={pid:process.pid,write:K,error:W instanceof Error?W.message:String(W)};if(B){J.delete(L),Z.logger.debug("sidebar bookkeeping write dropped",H);return}if(Y.has(L))Z.logger.debug("sidebar bookkeeping write failed again",H);else Y.add(L),Z.logger.warn("sidebar bookkeeping write failed; retrying in the background",H);X.set(L,{label:K,write:D}),j()})};return{enqueue(L,K,D){G+=1,J.set(L,G),X.delete(L),Q(L,K,D,G)},cancel(L){J.delete(L),X.delete(L),Y.delete(L)},stop(){if(B=!0,U)clearTimeout(U);U=void 0,X.clear()}}}function Q0(Z){let $=Z.activeId;if(Z.vaultAccounts!==void 0){let V=c(Z).filter((X)=>X.enabled&&X.routable!==!1),J=V.find((X)=>X.id===$)??V[0];return J?{id:J.id,name:J.label??J.id,quota:J.quota,killed:J.killed}:{id:"vault",name:"vault",quota:null,killed:!1}}if($&&$!=="main"){let V=Z.fallbacks.find((J)=>J.enabled&&J.id===$);if(V)return{id:V.id,name:V.label??V.id,quota:V.quota,killed:V.killed}}return{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed}}function kZ(Z,$=Date.now()){if(!Z)return;return WZ({limits:l.flatMap((V)=>{let J=Z[V];return J?[{kind:"reading",scope:"all",label:V,usedPercent:J.usedPercent,checkedAt:J.checkedAt??Z.checkedAt??$,windowMinutes:J.windowMinutes,resetsAt:J.resetsAt}]:[]}),...Z.spendControl?{budget:{...Z.spendControl,kind:"reading",checkedAt:Z.checkedAt??$}}:{}})}function e0(Z,$=Date.now()){let V=Z?.primary?.usedPercent??null,J=Z?.secondary?.usedPercent??null,X=kZ(Z,$);return{primaryUsedPercent:V,secondaryUsedPercent:J,text:!X||X.limits.length===0&&!X.budget?null:g(X,{now:$,form:"compact"})}}function wZ(Z){return Z.route==="sticky-balanced"?"roster":TZ(Z.route)}function t0(Z,$={}){let V=$.now??Date.now(),J=Q0(Z).id;return(Z.vaultAccounts!==void 0?c(Z).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed})):D0(Z,J,$.showFallbacks??!0)).map((Y)=>{let G=kZ(Y.quota,V),z=G&&(G.limits.length>0||G.budget)?G:void 0;return{id:Y.id,name:Y.name,killed:Y.killed,active:Y.id===J,stale:z?PZ(z,{now:V}):!1,text:z?g(z,{now:V,form:"narrow"}):null}})}function D0(Z,$,V){let J=[{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed},...Z.fallbacks.filter((Y)=>Y.enabled&&(V||Y.id===$)).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed}))],X=new Map(J.map((Y)=>[Y.id,Y]));return d(J.map((Y)=>Y.id),wZ(Z),"main").flatMap((Y)=>{let G=X.get(Y);return G?[G]:[]})}function DZ(Z){let $=globalThis.Bun;return $?.stringWidth?$.stringWidth(Z):Array.from(Z).length}function Z1(Z,$){if(DZ(Z)<=$)return Z;if($<1)return"";let V="",J=0;for(let X of Z){let Y=DZ(X);if(J+Y>$-1)break;V+=X,J+=Y}return`${V}…`}var N0=300000,P0=0.01,W0=1;function $1(Z,$,V){if(!Z.resetsAt)return null;let J=new Date(Z.resetsAt).getTime();if(!Number.isFinite(J))return null;let X=J-$,Y=V-X;if(Y<N0)return null;if(Y<$*P0)return null;if(Y>=$)return null;let G=Z.usedPercent,z=Math.min(Math.max(Y/$*100,0),100),U=G-z,B=Math.abs(U)<W0?"on-pace":U>0?"deficit":"reserve",j=null;if(G>0){let Q=Y*100/G,L=X+Q;if(L<J)j=new Date(L).toISOString()}return{pacePercent:z,deltaPercent:U,state:B,runsOutAt:j}}
1
+ import{Bc as g,Cc as WZ,Fc as d,_d as OZ,be as TZ,yc as NZ,zc as PZ}from"./index-tn8x5tz8.js";import{je as XZ,ne as VZ,oe as YZ,pe as y,qe as b}from"./index-gn2b097f.js";import{He as HZ}from"./index-1mbgsxsr.js";import{Pe as I,Qe as $Z,Ue as A,Ve as JZ}from"./index-8x1aj7q3.js";import{createHash as dZ}from"node:crypto";import{constants as lZ,copyFileSync as uZ,mkdirSync as rZ,statSync as cZ}from"node:fs";import{readFile as oZ}from"node:fs/promises";import{homedir as aZ,tmpdir as iZ}from"node:os";import{dirname as sZ,join as h}from"node:path";import{chmod as hZ,mkdir as mZ}from"node:fs/promises";import{dirname as ZZ}from"node:path";function k(Z){let{path:$,defaultValue:V,normalize:J}=Z,X=Promise.resolve(),Y=(K)=>{if(K==="")return V;try{return J(JSON.parse(K))}catch{return V}},G=async()=>{try{if(I)await A(ZZ($),Z.secureDir??!0);return await JZ($,I)}catch(K){if(K.code==="ENOENT")return"";throw K}},z=async()=>{try{return Y(await G())}catch(K){if(K instanceof $Z)throw K;return V}},U=(K,D)=>{let P=X.then(K).then((N)=>D?.onResult?.(N));return X=P.catch(()=>{}),P},B={...b.sidebar,name:Z.lockName??b.sidebar.name,timeoutMs:Z.timeoutMs??b.sidebar.timeoutMs},j=async(K,D,P)=>{await XZ($,D,{serialize:JSON.stringify,beforeRename:async()=>{await P?.beforeCommit?.(),await K.assertOwned()}}),await P?.afterRename?.();try{return await K.assertOwned(),!0}catch(N){if(N instanceof YZ)return!1;throw N}},Q=async(K,D,P)=>{Z.logger?.warn("sidebar lock lost after rename; repairing write",{path:$});try{let N=await y($,B,async(W)=>{let H=K(await z(),D);if(H===void 0)return"skipped";return await j(W,H,P)?"written":"lost-again"});if(N==="lost-again")Z.logger?.warn("sidebar repair lost its lock after rename",{path:$});return{status:"lost-after-rename",repair:N}}catch(N){if(!(N instanceof VZ))throw N;return Z.logger?.warn("sidebar repair lock unavailable; repair skipped",{path:$}),{status:"lost-after-rename",repair:"lock-unavailable"}}},L=async(K,D)=>{let P=D,N=ZZ($),W=Z.secureDir??!0;if(I)await A(N,W);else if(await mZ(N,{recursive:!0,mode:448}),W)await hZ(N,448).catch((F)=>{Z.logger?.warn("sidebar directory permission remediation failed",{error:F instanceof Error?F.message:String(F)})});let H=await y($,B,async(F)=>{let s=async(C)=>({value:C,held:await j(F,C,P)});for(let C=0;C<3;C+=1){let e=await G(),t=K(Y(e));if(t===void 0)return;if(C===0)await P?.beforeRecheck?.();if(await G()!==e)continue;return await s(t)}let n=K(await z());return n===void 0?void 0:await s(n)});if(H===void 0)return{status:"skipped"};if(H.held)return{status:"written"};let i=D?.repair??Z.repair;if(!i)return Z.logger?.warn("sidebar lock lost after rename; write not repaired",{path:$}),{status:"lost-after-rename",repair:"none"};return await Q(i,H.value,P)};return{read:z,write:(K,D)=>U(()=>L(()=>K,D),D),update:(K,D)=>U(()=>L(K,D),D)}}var l=["primary","secondary"],pZ={primary:300,secondary:10080};function gZ(Z,$){return NZ({scope:"all",label:$,windowMinutes:Z})}function x0(Z){if(!Z)return[];let $=[];for(let V of l){let J=Z[V];if(!J)continue;let X=J.windowMinutes,Y=X!==void 0&&Number.isFinite(X)&&X>0?X:pZ[V];$.push({key:V,label:gZ(X,V),window:J,windowMs:Y*60000})}return $}var M=HZ("sidebar"),nZ="OPENCODE_OPENAI_AUTH_SIDEBAR_STATE_FILE";function _Z(){let Z=process.env.XDG_STATE_HOME||h(aZ(),".local","state");return h(Z,"cortexkit","openai-auth","sidebar-state.json")}var RZ=h(iZ(),"opencode-openai-auth","sidebar-state.json");function k0(Z){RZ=Z,m.clear()}var eZ=/^[a-f0-9]{64}$/,u=604800000,CZ=256,FZ=3600000;function _(Z){return dZ("sha256").update(Z).digest("hex")}function tZ(Z){return typeof Z==="number"&&Number.isFinite(Z)&&Z>=0?Z:void 0}function MZ(Z){let $=tZ(Z);return $!==void 0?{resetCredits:$}:{}}function Z0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.activeId!=="string"||typeof X.route!=="string"||typeof X.updatedAt!=="number"||!Number.isFinite(X.updatedAt))continue;$[V]={activeId:X.activeId,route:X.route,updatedAt:X.updatedAt}}return Object.keys($).length>0?$:void 0}function $0(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return;let $={};for(let[V,J]of Object.entries(Z)){if(!eZ.test(V)||J===null||typeof J!=="object"||Array.isArray(J))continue;let X=J;if(typeof X.accountId!=="string"||X.accountId.length===0||typeof X.assignedAt!=="number"||!Number.isFinite(X.assignedAt)||X.assignedAt<0||typeof X.lastSeenAt!=="number"||!Number.isFinite(X.lastSeenAt)||X.lastSeenAt<0||typeof X.inputBytes!=="number"||!Number.isFinite(X.inputBytes)||X.inputBytes<0)continue;let Y=X.quotaCheckedAt;if(Y!==void 0&&(typeof Y!=="number"||!Number.isFinite(Y)||Y<0))continue;let G=X.wireAccountId;$[V]={accountId:X.accountId,assignedAt:X.assignedAt,lastSeenAt:X.lastSeenAt,inputBytes:X.inputBytes,...Y===void 0?{}:{quotaCheckedAt:Y},...typeof G==="string"?{wireAccountId:G}:{}}}return Object.keys($).length>0?$:void 0}function O(){let Z=process.env[nZ];if(Z)return Z;let $=_Z();if(!m.has($))m.add($),J0($,RZ);return $}var m=new Set;function J0(Z,$){try{rZ(sZ(Z),{recursive:!0,mode:448}),uZ($,Z,lZ.COPYFILE_EXCL)}catch{}}var E={main:{quota:null,killed:!1},fallbacks:[],activeId:void 0,route:"main",lastUpdated:0};function f(Z){if(Z===null||typeof Z!=="object"||Array.isArray(Z))return E;let $=Z,V=$.main,J;if(V!==null&&typeof V==="object"&&!Array.isArray(V)){let K=V;J={quota:"quota"in K?K.quota:null,killed:typeof K.killed==="boolean"?K.killed:!1,...typeof K.mainAccountId==="string"?{mainAccountId:K.mainAccountId}:{},...typeof K.quotaBackedOff==="boolean"?{quotaBackedOff:K.quotaBackedOff}:{},...typeof K.quotaBackoffUntil==="number"?{quotaBackoffUntil:K.quotaBackoffUntil}:{},...typeof K.refreshBackedOff==="boolean"?{refreshBackedOff:K.refreshBackedOff}:{},...typeof K.refreshBackoffUntil==="number"?{refreshBackoffUntil:K.refreshBackoffUntil}:{},...MZ(K.resetCredits)}}else J={quota:null,killed:!1};let X=zZ($.fallbacks),Y=Array.isArray($.vaultAccounts)?zZ($.vaultAccounts):void 0,G=typeof $.activeId==="string"?$.activeId:void 0,z=typeof $.route==="string"?$.route:E.route,U=typeof $.lastUpdated==="number"?$.lastUpdated:0,B=typeof $.planType==="string"?$.planType:void 0,j=typeof $.credits==="number"?$.credits:void 0,Q=Z0($.activeRouting),L=$0($.stickyAssignments);return{main:J,fallbacks:X,activeId:G,route:z,lastUpdated:U,...Q!==void 0?{activeRouting:Q}:{},...L!==void 0?{stickyAssignments:L}:{},...B!==void 0?{planType:B}:{},...j!==void 0?{credits:j}:{},...$.accountPool===!0?{accountPool:!0}:{},...Y!==void 0?{vaultAccounts:Y}:{}}}function zZ(Z){if(!Array.isArray(Z))return[];return Z.filter(($)=>$!==null&&typeof $==="object"&&!Array.isArray($)&&typeof $.id==="string").map(($)=>({id:$.id,...typeof $.credentialId==="string"?{credentialId:$.credentialId}:{},label:typeof $.label==="string"?$.label:void 0,...typeof $.accountId==="string"?{accountId:$.accountId}:{},quota:"quota"in $?$.quota:null,killed:typeof $.killed==="boolean"?$.killed:!1,enabled:typeof $.enabled==="boolean"?$.enabled:!0,...typeof $.routable==="boolean"?{routable:$.routable}:{},...["needs sign-in","turned off in vault","unavailable"].includes($.vaultState)?{vaultState:$.vaultState}:{},...MZ($.resetCredits)}))}function r(Z){return[...Z.fallbacks,...Z.vaultAccounts??[]]}async function X0(Z=O()){try{let $=await oZ(Z,"utf8");return f(JSON.parse($))}catch{return E}}var V0=3600000,GZ=128;function qZ(Z,$,V=Date.now()){if(!(Z.updatedAt>=V-V0&&Z.updatedAt<=V))return!1;if($===void 0)return!0;return Z.activeId==="main"||$.some((X)=>X.enabled!==!1&&X.routable!==!1&&X.killed!==!0&&X.id===Z.activeId)}function Y0(Z,$=Date.now()){let V=Z?.spendControl;if(V?.reached!==!0||typeof V.resetsAt!=="string")return;let J=Date.parse(V.resetsAt);if(!Number.isFinite(J)||J<=$)return;return{resetsAt:V.resetsAt,resetAtMs:J}}function z0(Z,$=Date.now()){let V;for(let X of l){let Y=Z?.[X];if(typeof Y?.resetsAt!=="string"||!Number.isFinite(Y.usedPercent)||Y.usedPercent<100)continue;let G=Date.parse(Y.resetsAt);if(!Number.isFinite(G)||G<=$)continue;if(!V||G<V.resetAtMs)V={resetsAt:Y.resetsAt,resetAtMs:G}}let J=Y0(Z,$);if(J&&(!V||J.resetAtMs<V.resetAtMs))V=J;return V}function q(Z,$=Date.now()){return z0(Z,$)!==void 0}function G0(Z,$,V=Date.now()){if(!$||Z.route!=="sticky-balanced")return;let J=Z.stickyAssignments?.[_($)];if(!J||J.lastSeenAt<V-u)return;if(J.accountId==="main"&&Z.vaultAccounts===void 0)return Z.main?.killed||q(Z.main?.quota,V)?void 0:"main";let X=r(Z).find((Y)=>Y.id===J.accountId);if(!X||X.enabled===!1||X.routable===!1||X.killed===!0||q(X.quota,V))return;return X.id}function w0(Z,$,V=Date.now()){if(!$){if(Z.vaultAccounts===void 0)return{activeId:Z.activeId??"main",route:Z.route};let j=Z.vaultAccounts.find((Q)=>Q.id===Z.activeId&&Q.enabled&&Q.routable!==!1&&!Q.killed);if(j&&!q(j.quota,V))return{activeId:j.id,route:Z.route}}let J=$?Z.activeRouting?.[$]:void 0,X=r(Z),Y=J?.activeId==="main"?Z.main.quota:X.find((j)=>j.id===J?.activeId)?.quota;if(J&&(Z.vaultAccounts===void 0||J.activeId.startsWith("vault:"))&&qZ(J,X,V)&&!q(Y,V))return{activeId:J.activeId,route:J.route};let G=G0(Z,$,V);if(G)return{activeId:G,route:Z.route};let z=Z.vaultAccounts!==void 0,U=(z?c(Z):Z.fallbacks).filter((j)=>j.enabled&&j.routable!==!1&&!j.killed),B=U.find((j)=>!q(j.quota,V))??U[0];return{activeId:z?B?.id??"vault":Z.route==="fallback-first"&&B?B.id:"main",route:Z.route}}function c(Z){let $=Z.vaultAccounts??[],V=new Map($.map((J)=>[J.id,J]));return d($.map((J)=>J.id),wZ(Z),OZ($)??"").flatMap((J)=>{let X=V.get(J);return X?[X]:[]})}function EZ(Z,$,V=Date.now(),J){if(!Z)return;let X=Object.entries(Z).filter(([G,z])=>G!==J&&qZ(z,$,V)),Y=X.length<=GZ?X:X.sort((G,z)=>z[1].updatedAt-G[1].updatedAt).slice(0,GZ);return Y.length>0?Object.fromEntries(Y):void 0}function x(Z,$,V=Date.now(),J){if(!Z)return;let X=0,Y=0,G=0,z=[];for(let[B,j]of Object.entries(Z)){if(B===J){G+=1;continue}if(j.lastSeenAt<V-u){Y+=1;continue}if($!==void 0&&!$.has(j.accountId)){X+=1;continue}z.push([B,j])}let U=X+Y+G;if(U>0)M.debug("pruned sticky assignments",{pid:process.pid,removed:U,reasons:{"account-not-in-roster":X,expired:Y,"explicit-removal":G}});return z.length>0?Object.fromEntries(z):void 0}function xZ(Z,$){let V=Object.keys(Z).length-CZ;if(V<=0)return Z;let J=new Set(Object.entries(Z).filter(([X])=>X!==$).sort(([X,Y],[G,z])=>Y.lastSeenAt-z.lastSeenAt||X.localeCompare(G)).slice(0,V).map(([X])=>X));return Object.fromEntries(Object.entries(Z).filter(([X])=>!J.has(X)))}function IZ(Z,$){if(Z===$)return!0;if(!Z||!$)return!1;let V=Object.entries(Z);if(V.length!==Object.keys($).length)return!1;return V.every(([J,X])=>Object.is($[J],X))}function bZ(Z,$,V,J){return Z!==void 0&&$.has(Z.accountId)&&!V.has(Z.accountId)&&Z.lastSeenAt>=J-u}function vZ(Z,$,V,J){return $>Z.inputBytes||V-Z.lastSeenAt>=FZ||Z.wireAccountId===void 0&&J!==void 0}function SZ(Z,$){return typeof Z.wireAccountId==="string"&&typeof $==="string"&&Z.wireAccountId!==$}function K0(Z){let $=new Map(Z),V={get size(){return $.size},has:(J)=>$.has(J),get:(J)=>$.get(J),entries:()=>$.entries(),keys:()=>$.keys(),values:()=>$.values(),forEach:(J,X)=>{$.forEach((Y,G)=>{J.call(X,Y,G,V)})},[Symbol.iterator]:()=>$[Symbol.iterator]()};return Object.freeze(V)}function j0(Z,$,V){let J=new Map;for(let[X,Y]of Object.entries(Z??{})){if(X===V)continue;if(Y.quotaCheckedAt!==$[Y.accountId])continue;J.set(Y.accountId,(J.get(Y.accountId)??0)+Y.inputBytes)}return K0(J)}function o(Z){if(Z===void 0)return;return new Set(["main",...Z.filter(($)=>$.enabled!==!1&&$.killed!==!0).map(($)=>$.id)])}var p=Promise.resolve();function T(Z){let $=p.then(Z);return p=$.catch(()=>{}),$}var KZ=new Map;function a(Z){let $=KZ.get(Z);if(!$)$=k({path:Z,defaultValue:E,normalize:f,secureDir:Z===_Z(),logger:M}),KZ.set(Z,$);return $}var w=new Set;async function fZ(Z,$){try{await $}catch(V){let J={pid:process.pid,error:V instanceof Error?V.message:String(V)};if(w.has(Z))M.debug("sidebar write failed again",J);else w.add(Z),M.warn("sidebar write failed",J);throw V}if(w.delete(Z))M.info("sidebar write recovered",{pid:process.pid})}function h0(Z,$=O()){return T(()=>fZ($,a($).write(f(Z))))}function L0(Z){return a(Z).read()}function R(Z,$,V){let J=Symbol("sidebar authority changed");return fZ(Z,a(Z).update((X)=>{if(V?.canWrite&&!V.canWrite())return;let Y=$(X);if(Y===void 0)return;if(Y.vaultAccounts!==void 0)Y.activeId=Y.activeId?.startsWith("vault:")?Y.activeId:void 0,Y.activeRouting=Object.fromEntries(Object.entries(Y.activeRouting??{}).filter(([,G])=>G.activeId.startsWith("vault:"))),Y.stickyAssignments=Object.fromEntries(Object.entries(Y.stickyAssignments??{}).filter(([,G])=>G.accountId.startsWith("vault:")&&!Y.vaultAccounts?.some((z)=>z.id===G.accountId&&z.killed)));return f(Y)},{beforeRecheck:async(...X)=>{if(await V?.beforeRecheck?.(...X),V?.canWrite&&!V.canWrite())throw J}}).catch((X)=>{if(X!==J)throw X}))}function v(Z){let $;for(let V of[Z?.primary?.checkedAt,Z?.secondary?.checkedAt,Z?.checkedAt])if(typeof V==="number"&&Number.isFinite(V))$=$===void 0?V:Math.max($,V);return $}function jZ(Z,$){let V=v(Z),J=v($);if(J!==void 0&&(V===void 0||J>V))return $;return Z}function LZ(Z,$){return Z!==void 0&&$!==void 0&&Z===$}function S(Z,$){let V=Z?.checkedAt;if(typeof V==="number"&&Number.isFinite(V))return V;if(typeof $==="number"&&Number.isFinite($))return $;return}function BZ(Z,$,V,J,X){if(Z&&$){let Y=S(Z,J),G=S($,X);if(G!==void 0&&(Y===void 0||G>Y))return $;return Z}return V?$:Z}function UZ(Z,$){if(Z.spendControl!==void 0)return Z.spendControl;if(Z.spendControlCleared===!0)return;return $.spendControl}function QZ(Z,$){if(!Z)return $;if(!$)return Z;let V=v(Z),J=v($),X=J!==void 0&&(V===void 0||J>V),Y=BZ(Z.primary,$.primary,X,Z.checkedAt,$.checkedAt),G=BZ(Z.secondary,$.secondary,X,Z.checkedAt,$.checkedAt),z=X?UZ($,Z):UZ(Z,$),U=z===void 0&&(Z.spendControlCleared===!0||$.spendControlCleared===!0),B;for(let K of[S(Y),S(G)])if(K!==void 0)B=B===void 0?K:Math.max(B,K);let{spendControl:j,spendControlCleared:Q,...L}=Z;return{...L,primary:Y,secondary:G,...z!==void 0?{spendControl:z}:{},...U?{spendControlCleared:!0}:{},checkedAt:B??Z.checkedAt}}function m0(Z,$=O(),V){return T(async()=>{await R($,(J)=>{let X=new Map(J.fallbacks.map((j)=>[j.id,j])),Y=Z.vaultAccounts!==void 0,G=LZ(Z.main.mainAccountId,J.main.mainAccountId),z=G?QZ(Z.main.quota,J.main.quota):jZ(Z.main.quota,J.main.quota),U=Date.now(),B=x(J.stickyAssignments,Y?void 0:o(r(Z)),U);return{...J,...Z,main:Y?Z.main:{...Z.main,quota:z,mainAccountId:G?Z.main.mainAccountId:z===J.main.quota&&z!==Z.main.quota?J.main.mainAccountId:Z.main.mainAccountId},fallbacks:Y?Z.fallbacks:Z.fallbacks.map((j)=>{let Q=X.get(j.id),L=LZ(j.accountId,Q?.accountId),K=L?QZ(j.quota,Q?.quota??null):jZ(j.quota,Q?.quota??null);return{...j,quota:K,accountId:L?j.accountId:K===Q?.quota&&K!==j.quota?Q?.accountId:j.accountId}}),activeId:J.activeId,activeRouting:J.activeRouting,stickyAssignments:B,lastUpdated:Math.max(U,J.lastUpdated+1),accountPool:Z.accountPool===!0?!0:void 0,vaultAccounts:Z.vaultAccounts}},V)})}function p0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=EZ({...X.activeRouting,[Z.sessionId]:{activeId:Z.activeId,route:Z.route,updatedAt:Z.updatedAt}},$,Date.now()),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Date.now());return{...X,activeId:Z.activeId,route:Z.route,activeRouting:Y,stickyAssignments:G,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function g0(Z,$=O(),V){return T(async()=>{await R($,(J)=>({...J,activeId:Z.activeId,route:Z.route,lastUpdated:Math.max(Date.now(),J.lastUpdated+1)}),V)})}function d0(Z,$,V=O(),J){return T(async()=>{await R(V,(X)=>{let Y=Date.now(),G=EZ(X.activeRouting,$,Y,Z),z=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:o($),Y,_(Z));return{...X,activeRouting:G,stickyAssignments:z,lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}},J)})}function AZ(Z,$){return bZ(Z,new Set($.validPinnedAccountIds),new Set($.excludeAccountIds),$.now)&&!SZ(Z,$.wireAccountIdByAccount?.[Z.accountId])&&!vZ(Z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[Z.accountId])}function yZ(Z,$){let V=_($.sessionId),J=new Set($.validPinnedAccountIds),X=new Set($.excludeAccountIds),Y=x(Z.stickyAssignments,J,$.now),G=!IZ(Z.stickyAssignments,Y),z=Y?.[V],U=z!==void 0&&SZ(z,$.wireAccountIdByAccount?.[z.accountId]);if(bZ(z,J,X,$.now)&&!U){let Q=vZ(z,$.requestBytes,$.now,$.wireAccountIdByAccount?.[z.accountId]),L=Q?{...z,inputBytes:Math.max(z.inputBytes,$.requestBytes),...z.wireAccountId===void 0&&$.wireAccountIdByAccount?.[z.accountId]!==void 0?{wireAccountId:$.wireAccountIdByAccount?.[z.accountId]}:{},...$.now-z.lastSeenAt>=FZ?{lastSeenAt:$.now}:{}}:z;if(!G&&!Q)return{assignment:L,next:void 0};return{assignment:L,next:{...Z,stickyAssignments:{...Y,[V]:L},lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let B=$.choose(j0(Y,$.quotaCheckedAtByAccount,U?V:void 0));if(!B){if(!G)return{assignment:void 0,next:void 0};return{assignment:void 0,next:{...Z,stickyAssignments:Y,lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}let j={accountId:B.accountId,assignedAt:$.now,lastSeenAt:$.now,inputBytes:$.requestBytes,...B.quotaCheckedAt===void 0?{}:{quotaCheckedAt:B.quotaCheckedAt},...$.wireAccountIdByAccount?.[B.accountId]===void 0?{}:{wireAccountId:$.wireAccountIdByAccount?.[B.accountId]}};return{assignment:j,next:{...Z,stickyAssignments:xZ({...Y,[V]:j},V),lastUpdated:Math.max($.now,Z.lastUpdated+1)}}}async function l0(Z,$=O(),V){let J=_(Z.sessionId),X=(await L0($)).stickyAssignments?.[J];if(AZ(X,Z))return X;let Y;return await T(async()=>{await R($,(G)=>{let z=yZ(G,Z);return Y=z.assignment,z.next},V)}),Y}function u0(Z,$){let V=Z.stickyAssignments?.[_($.sessionId)];if(AZ(V,$))return{assignment:V,next:void 0};return yZ(Z,$)}function r0(Z,$=O()){let V=_(Z.sessionId),J=new Set(Z.validPinnedAccountIds);return T(async()=>{await R($,(X)=>{let Y=Date.now(),G=x(X.stickyAssignments,X.vaultAccounts!==void 0?void 0:J,Y),z=G?.[V];if(z&&z.assignedAt>Z.assignment.assignedAt){if(IZ(X.stickyAssignments,G))return;return{...X,stickyAssignments:G,lastUpdated:Math.max(Y,X.lastUpdated+1)}}let B=z!==void 0&&z.accountId===Z.assignment.accountId&&z.assignedAt===Z.assignment.assignedAt?{...Z.assignment,inputBytes:Math.max(z.inputBytes,Z.assignment.inputBytes),lastSeenAt:Math.max(z.lastSeenAt,Z.assignment.lastSeenAt)}:Z.assignment;return{...X,stickyAssignments:xZ({...G,[V]:B},V),lastUpdated:Math.max(Y,X.lastUpdated+1)}})})}async function c0(Z,$=O()){let V=_(Z),J=!1;return await T(async()=>{await R($,(X)=>{let Y=X.stickyAssignments;if(Y?.[V]===void 0){J=!1;return}J=!0;let{[V]:G,...z}=Y;return{...X,...Object.keys(z).length>0?{stickyAssignments:z}:{stickyAssignments:void 0},lastUpdated:Math.max(Date.now(),X.lastUpdated+1)}})}),J}function o0(){return p}var B0=500;function U0(Z,$,V){return new Promise((J,X)=>{let Y=setTimeout(()=>J(V()),$);Y.unref?.(),Z.then((G)=>{clearTimeout(Y),J(G)},(G)=>{clearTimeout(Y),X(G)})})}function a0(Z,$={}){let V=$.readBudgetMs??B0,J,X,Y=()=>{try{let z=cZ(Z);return`${z.ino}:${z.size}:${z.mtimeMs}`}catch{return}},G=(z)=>{if(X&&X.key===z)return X.promise;let U=Date.now(),B=X0(Z).then((L)=>{if(!J||J.readAt<=U)J={state:L,readAt:U,key:z};return{state:L,readAt:U}}),j={key:z,promise:B};X=j;let Q=()=>{if(X===j)X=void 0};return B.then(Q,Q),B};return{get(){let z=Y();if(J&&J.key===z)return Promise.resolve({state:J.state,readAt:J.readAt});return U0(G(z),V,()=>J?{state:J.state,readAt:J.readAt}:{state:E,readAt:0})},read(){return G(Y())},refreshInBackground(){let z=Y();if(J?.key===z)return;G(z)}}}function i0(Z,$,V){let J={assignment:V};Z.delete($),Z.set($,J);while(Z.size>CZ){let X=Z.keys().next().value;if(X===void 0)break;Z.delete(X)}return J}function s0(Z,$){if($.size===0)return Z.state;let V={...Z.state.stickyAssignments},J=!1;for(let[X,Y]of $){if(Y.persistedAt!==void 0&&Z.readAt>Y.persistedAt){$.delete(X);continue}V[X]=Y.assignment,J=!0}if(!J)return Z.state;return{...Z.state,stickyAssignments:V}}function n0(Z){let $=Z.retryDelayMs??500,V=Z.maxRetryDelayMs??30000,J=new Map,X=new Map,Y=new Set,G=0,z=$,U,B=!1,j=()=>{if(U||B||X.size===0)return;U=setTimeout(()=>{U=void 0;let L=[...X];X.clear(),z=Math.min(z*2,V);for(let[K,D]of L){let P=J.get(K);if(P!==void 0)Q(K,D.label,D.write,P)}},z),U.unref?.()},Q=(L,K,D,P)=>{let N;try{N=D()}catch(W){N=Promise.reject(W)}N.then(()=>{if(J.get(L)!==P)return;if(J.delete(L),Y.delete(L))Z.logger.info("sidebar bookkeeping write recovered",{pid:process.pid,write:K});if(Y.size===0)z=$;Z.onWritten?.()},(W)=>{if(J.get(L)!==P)return;let H={pid:process.pid,write:K,error:W instanceof Error?W.message:String(W)};if(B){J.delete(L),Z.logger.debug("sidebar bookkeeping write dropped",H);return}if(Y.has(L))Z.logger.debug("sidebar bookkeeping write failed again",H);else Y.add(L),Z.logger.warn("sidebar bookkeeping write failed; retrying in the background",H);X.set(L,{label:K,write:D}),j()})};return{enqueue(L,K,D){G+=1,J.set(L,G),X.delete(L),Q(L,K,D,G)},cancel(L){J.delete(L),X.delete(L),Y.delete(L)},stop(){if(B=!0,U)clearTimeout(U);U=void 0,X.clear()}}}function Q0(Z){let $=Z.activeId;if(Z.vaultAccounts!==void 0){let V=c(Z).filter((X)=>X.enabled&&X.routable!==!1),J=V.find((X)=>X.id===$)??V[0];return J?{id:J.id,name:J.label??J.id,quota:J.quota,killed:J.killed}:{id:"vault",name:"vault",quota:null,killed:!1}}if($&&$!=="main"){let V=Z.fallbacks.find((J)=>J.enabled&&J.id===$);if(V)return{id:V.id,name:V.label??V.id,quota:V.quota,killed:V.killed}}return{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed}}function kZ(Z,$=Date.now()){if(!Z)return;return WZ({limits:l.flatMap((V)=>{let J=Z[V];return J?[{kind:"reading",scope:"all",label:V,usedPercent:J.usedPercent,checkedAt:J.checkedAt??Z.checkedAt??$,windowMinutes:J.windowMinutes,resetsAt:J.resetsAt}]:[]}),...Z.spendControl?{budget:{...Z.spendControl,kind:"reading",checkedAt:Z.checkedAt??$}}:{}})}function e0(Z,$=Date.now()){let V=Z?.primary?.usedPercent??null,J=Z?.secondary?.usedPercent??null,X=kZ(Z,$);return{primaryUsedPercent:V,secondaryUsedPercent:J,text:!X||X.limits.length===0&&!X.budget?null:g(X,{now:$,form:"compact"})}}function wZ(Z){return Z.route==="sticky-balanced"?"roster":TZ(Z.route)}function t0(Z,$={}){let V=$.now??Date.now(),J=Q0(Z).id;return(Z.vaultAccounts!==void 0?c(Z).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed})):D0(Z,J,$.showFallbacks??!0)).map((Y)=>{let G=kZ(Y.quota,V),z=G&&(G.limits.length>0||G.budget)?G:void 0;return{id:Y.id,name:Y.name,killed:Y.killed,active:Y.id===J,stale:z?PZ(z,{now:V}):!1,text:z?g(z,{now:V,form:"narrow"}):null}})}function D0(Z,$,V){let J=[{id:"main",name:"main",quota:Z.main.quota,killed:Z.main.killed},...Z.fallbacks.filter((Y)=>Y.enabled&&(V||Y.id===$)).map((Y)=>({id:Y.id,name:Y.label??Y.id,quota:Y.quota,killed:Y.killed}))],X=new Map(J.map((Y)=>[Y.id,Y]));return d(J.map((Y)=>Y.id),wZ(Z),"main").flatMap((Y)=>{let G=X.get(Y);return G?[G]:[]})}function DZ(Z){let $=globalThis.Bun;return $?.stringWidth?$.stringWidth(Z):Array.from(Z).length}function Z1(Z,$){if(DZ(Z)<=$)return Z;if($<1)return"";let V="",J=0;for(let X of Z){let Y=DZ(X);if(J+Y>$-1)break;V+=X,J+=Y}return`${V}…`}var N0=300000,P0=0.01,W0=1;function $1(Z,$,V){if(!Z.resetsAt)return null;let J=new Date(Z.resetsAt).getTime();if(!Number.isFinite(J))return null;let X=J-$,Y=V-X;if(Y<N0)return null;if(Y<$*P0)return null;if(Y>=$)return null;let G=Z.usedPercent,z=Math.min(Math.max(Y/$*100,0),100),U=G-z,B=Math.abs(U)<W0?"on-pace":U>0?"deficit":"reserve",j=null;if(G>0){let Q=Y*100/G,L=X+Q;if(L<J)j=new Date(L).toISOString()}return{pacePercent:z,deltaPercent:U,state:B,runsOutAt:j}}
2
2
  export{gZ as Fb,x0 as Gb,k0 as Hb,u as Ib,CZ as Jb,_ as Kb,O as Lb,E as Mb,f as Nb,X0 as Ob,V0 as Pb,GZ as Qb,qZ as Rb,Y0 as Sb,z0 as Tb,q as Ub,G0 as Vb,w0 as Wb,EZ as Xb,x as Yb,h0 as Zb,m0 as _b,p0 as $b,g0 as ac,d0 as bc,yZ as cc,l0 as dc,u0 as ec,r0 as fc,c0 as gc,o0 as hc,B0 as ic,U0 as jc,a0 as kc,i0 as lc,s0 as mc,n0 as nc,Q0 as oc,kZ as pc,e0 as qc,t0 as rc,DZ as sc,Z1 as tc,$1 as uc};
@@ -1,4 +1,4 @@
1
- import{Pe as H,Qe as q,Re as V0,Te as x,Ue as h,Ve as S,We as v,Xe as _0,Ze as b}from"./index-r2s51ac1.js";import{randomUUID as I}from"node:crypto";import{mkdir as H0,open as B0,readFile as Q0,rename as W0,rm as L,stat as Y0}from"node:fs/promises";import{dirname as P,join as Z0}from"node:path";function N0($,G){return`${$}.${G}.lock`}class G0 extends Error{details;constructor($){super(`Timed out acquiring ${$.name} lock for ${$.target}`);this.name="LockContentionError",this.details=$}}class R extends Error{details;constructor($){super(`Lost ${$.name} lock for ${$.target}`);this.name="LockOwnershipError",this.details=$}}async function A0($,G,Q){let Y=performance.now();for(;;){let Z=await K0({path:$,name:G.name,ttlMs:G.ttlMs,renew:G.renew??!1,...G.onStep?{onStep:G.onStep}:{},...G.onRenewalTimer?{onRenewalTimer:G.onRenewalTimer}:{}});if(Z)try{return await Q(Z)}finally{await Z.release()}let J=G.timeoutMs-(performance.now()-Y);if(J<=0)throw new G0({target:$,name:G.name,timeoutMs:G.timeoutMs});await new Promise((_)=>setTimeout(_,Math.min(25,Math.ceil(J))))}}async function J0($,G){let Q=await B0($,"wx",384);try{await Q.writeFile(G,"utf8")}finally{await Q.close()}}var D0=globalThis.setTimeout.bind(globalThis),U0=globalThis.clearTimeout.bind(globalThis);function q0($){let G=$?.code;return G==="ENOENT"||!H&&(G==="EINVAL"||G==="ENOTDIR")}function K0($){return x0({...$,now:Date.now})}async function x0($){let G=N0($.path,$.name),Q=Z0(G,"owner.json"),Y=I(),Z=$.now??Date.now,J=null,_=!1,D=!1,B,l,j0=new Promise((z)=>{l=z});function p(z){try{let K=$.onRenewalTimer?.(z);if(K&&(typeof K==="object"||typeof K==="function")&&"then"in K&&typeof K.then==="function")Promise.resolve(K).catch(()=>{})}catch{}}function d(){if(!J)return;U0(J),J=null,p("cancelled")}function C(z,K){if(B||_)return;B=Object.freeze({reason:z,expectedOwnerId:Y,...typeof K?.ownerId==="string"?{observedOwnerId:K.ownerId}:{},...typeof K?.expiresAt==="number"?{observedExpiresAt:K.expiresAt}:{}}),d(),l(B)}let E,M=null,g=`${G}.evicting`,f=Z0(g,"owner.json"),a=I(),C0=5000,y=8;async function j(){if(H)try{return JSON.parse(await S(G,!0))}catch(z){if(z.code!=="EISDIR"&&z.reason!=="wrong-kind")throw z;return await x(G,"directory",!0),JSON.parse(await S(Q,!0))}try{return JSON.parse(await Q0(G,"utf8"))}catch(z){if(z.code!=="EISDIR")throw z;return JSON.parse(await Q0(Q,"utf8"))}}async function g0(){if(H){let W=await j(),V=Number(W?.expiresAt)-Z();await b(G,`${JSON.stringify({ownerId:Y,expiresAt:Z()+$.ttlMs})}
1
+ import{Pe as H,Qe as q,Re as V0,Te as x,Ue as h,Ve as S,We as v,Xe as _0,Ze as b}from"./index-8x1aj7q3.js";import{randomUUID as I}from"node:crypto";import{mkdir as H0,open as B0,readFile as Q0,rename as W0,rm as L,stat as Y0}from"node:fs/promises";import{dirname as P,join as Z0}from"node:path";function N0($,G){return`${$}.${G}.lock`}class G0 extends Error{details;constructor($){super(`Timed out acquiring ${$.name} lock for ${$.target}`);this.name="LockContentionError",this.details=$}}class R extends Error{details;constructor($){super(`Lost ${$.name} lock for ${$.target}`);this.name="LockOwnershipError",this.details=$}}async function A0($,G,Q){let Y=performance.now();for(;;){let Z=await K0({path:$,name:G.name,ttlMs:G.ttlMs,renew:G.renew??!1,...G.onStep?{onStep:G.onStep}:{},...G.onRenewalTimer?{onRenewalTimer:G.onRenewalTimer}:{}});if(Z)try{return await Q(Z)}finally{await Z.release()}let J=G.timeoutMs-(performance.now()-Y);if(J<=0)throw new G0({target:$,name:G.name,timeoutMs:G.timeoutMs});await new Promise((_)=>setTimeout(_,Math.min(25,Math.ceil(J))))}}async function J0($,G){let Q=await B0($,"wx",384);try{await Q.writeFile(G,"utf8")}finally{await Q.close()}}var D0=globalThis.setTimeout.bind(globalThis),U0=globalThis.clearTimeout.bind(globalThis);function q0($){let G=$?.code;return G==="ENOENT"||!H&&(G==="EINVAL"||G==="ENOTDIR")}function K0($){return x0({...$,now:Date.now})}async function x0($){let G=N0($.path,$.name),Q=Z0(G,"owner.json"),Y=I(),Z=$.now??Date.now,J=null,_=!1,D=!1,B,l,j0=new Promise((z)=>{l=z});function p(z){try{let K=$.onRenewalTimer?.(z);if(K&&(typeof K==="object"||typeof K==="function")&&"then"in K&&typeof K.then==="function")Promise.resolve(K).catch(()=>{})}catch{}}function d(){if(!J)return;U0(J),J=null,p("cancelled")}function C(z,K){if(B||_)return;B=Object.freeze({reason:z,expectedOwnerId:Y,...typeof K?.ownerId==="string"?{observedOwnerId:K.ownerId}:{},...typeof K?.expiresAt==="number"?{observedExpiresAt:K.expiresAt}:{}}),d(),l(B)}let E,M=null,g=`${G}.evicting`,f=Z0(g,"owner.json"),a=I(),C0=5000,y=8;async function j(){if(H)try{return JSON.parse(await S(G,!0))}catch(z){if(z.code!=="EISDIR"&&z.reason!=="wrong-kind")throw z;return await x(G,"directory",!0),JSON.parse(await S(Q,!0))}try{return JSON.parse(await Q0(G,"utf8"))}catch(z){if(z.code!=="EISDIR")throw z;return JSON.parse(await Q0(Q,"utf8"))}}async function g0(){if(H){let W=await j(),V=Number(W?.expiresAt)-Z();await b(G,`${JSON.stringify({ownerId:Y,expiresAt:Z()+$.ttlMs})}
2
2
  `,{deadline:performance.now()+Math.max(0,V),beforeRename:async()=>{let T=await j();if(T?.ownerId!==Y||!(Number(T?.expiresAt)>Z())||!await X())throw new R({target:$.path,name:$.name})}});return}let z=`${G}.${I()}.tmp`,K,N=!1;try{K=await B0(z,"wx",384),N=!0,await K.writeFile(`${JSON.stringify({ownerId:Y,expiresAt:Z()+$.ttlMs})}
3
3
  `,"utf8"),await K.chmod(384),await K.close(),K=void 0;let W=await j();if(W?.ownerId!==Y||!(Number(W?.expiresAt)>Z())||!await X())throw new R({target:$.path,name:$.name});await W0(z,G),N=!1}finally{if(await K?.close().catch(()=>{}),N)await L(z,{force:!0}).catch(()=>{})}}async function s(){let z=`${JSON.stringify({ownerId:Y,expiresAt:Z()+$.ttlMs})}
4
4
  `;if(H)await v(G,z);else await J0(G,z)}async function n(z){let K=z.code;if(K==="EEXIST"){if(H)await j();return!0}if(K==="EISDIR"){if(H)await x(G,"directory",!0),await S(Q,!0);return!0}return!1}async function k(){if(H)await h(P(G));try{return await s(),!0}catch(z){let K=z.code;if(await n(z))return!1;if(K==="ENOENT"){if(H)await h(P(G));else await H0(P(G),{recursive:!0});try{return await s(),!0}catch(N){if(await n(N))return!1;throw N}}throw z}}async function O(){await new Promise((z)=>setTimeout(z,Math.floor(Math.random()*4)))}async function m(z=!0){if(z&&$.onStep)await $.onStep("lock-read-ready");let K;try{K=await j()}catch(W){if(H&&W.code!=="ENOENT")throw W}let N=Number(K?.expiresAt);if(Number.isFinite(N)&&N>Z())return{status:"live"};if(typeof K?.ownerId==="string"&&Number.isFinite(N))return{status:"stale",identity:{kind:"owner",ownerId:K.ownerId,expiresAt:N}};try{let W=await Y0(G),V=Number.isFinite(N)?N:W.mtimeMs+$.ttlMs;if(V>Z())return{status:"live"};return{status:"stale",identity:{kind:"stat",dev:W.dev,ino:W.ino,mtimeMs:W.mtimeMs,expiresAt:V}}}catch(W){if(W.code==="ENOENT"){if($.onStep)await $.onStep("lock-missing");return{status:"missing"}}throw W}}function i(z,K){if(K.status!=="stale")return!1;let N=K.identity;if(z.kind==="owner"&&N.kind==="owner")return z.ownerId===N.ownerId&&z.expiresAt===N.expiresAt;return z.kind==="stat"&&N.kind==="stat"&&z.dev===N.dev&&z.ino===N.ino&&z.mtimeMs===N.mtimeMs&&z.expiresAt===N.expiresAt}async function X(){try{return JSON.parse(await S(f,H))?.ownerId===a}catch(z){if(H&&z.code!=="ENOENT")throw z;return!1}}async function A(z){if(H)await V0(z,"remove",()=>L(z,{recursive:!0,force:!0}));else await L(z,{recursive:!0,force:!0}).catch(()=>{})}async function u(){if(await X())await A(g)}async function t(){if(H)await _0(g);else await H0(g);try{let z=`${JSON.stringify({ownerId:a,createdAt:Z()})}
@@ -1,3 +1,3 @@
1
- import{Bb as X,Db as V}from"./index-03em8hv1.js";import{randomUUID as Z}from"node:crypto";import{chmod as $,mkdir as G,readFile as H,rename as L,rm as T,stat as f,writeFile as g}from"node:fs/promises";import{dirname as k,resolve as w}from"node:path";var x="(no OpenCode 1 logins on this machine)";function C(b=process.env){return X(b)}async function Q(b){let z;try{z=await H(b,"utf8")}catch(q){if(q.code==="ENOENT")return;throw q}let j=JSON.parse(z);if(!j||typeof j!=="object"||Array.isArray(j))throw Error(`${b} does not hold a JSON object`);return j}function R(b){return b===void 0?void 0:JSON.stringify(b)}async function D(b){try{return(await f(b)).mode&511}catch(z){if(z.code==="ENOENT")return;throw z}}function _(b=C()){let z=new Map;return{path:w(b),async get(j){let q=(await Q(b))?.[j.path.id];return z.set(j.path.id,R(q)),q},async set(j){let q=j.path.id,W=await D(b),J=await Q(b)??{};if(!z.has(q)||z.get(q)!==R(J[q]))throw new V;J[q]=j.body,await G(k(b),{recursive:!0});let B=`${b}.${Z()}.tmp`;try{await g(B,`${JSON.stringify(J,null,2)}
1
+ import{Bb as X,Db as V}from"./index-psjyexj3.js";import{randomUUID as Z}from"node:crypto";import{chmod as $,mkdir as G,readFile as H,rename as L,rm as T,stat as f,writeFile as g}from"node:fs/promises";import{dirname as k,resolve as w}from"node:path";var x="(no OpenCode 1 logins on this machine)";function C(b=process.env){return X(b)}async function Q(b){let z;try{z=await H(b,"utf8")}catch(q){if(q.code==="ENOENT")return;throw q}let j=JSON.parse(z);if(!j||typeof j!=="object"||Array.isArray(j))throw Error(`${b} does not hold a JSON object`);return j}function R(b){return b===void 0?void 0:JSON.stringify(b)}async function D(b){try{return(await f(b)).mode&511}catch(z){if(z.code==="ENOENT")return;throw z}}function _(b=C()){let z=new Map;return{path:w(b),async get(j){let q=(await Q(b))?.[j.path.id];return z.set(j.path.id,R(q)),q},async set(j){let q=j.path.id,W=await D(b),J=await Q(b)??{};if(!z.has(q)||z.get(q)!==R(J[q]))throw new V;J[q]=j.body,await G(k(b),{recursive:!0});let B=`${b}.${Z()}.tmp`;try{await g(B,`${JSON.stringify(J,null,2)}
2
2
  `,{mode:W??384}),await $(B,W??384),await L(B,b)}catch(Y){throw await T(B,{force:!0}).catch(()=>{}),Y}return z.set(q,R(j.body)),!0},async all(){let j=await Q(b);if(!j||Object.keys(j).length===0)return{[x]:!0};return j}}}
3
3
  export{_ as c};