sidekick-agent-hub 0.27.6 → 0.28.1
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.
- package/README.md +2 -1
- package/dist/sidekick-cli.mjs +6 -19
- package/dist/sidekick-main.mjs +584 -604
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@ Sidekick CLI reads from `~/.config/sidekick/` (`%APPDATA%\sidekick\` on Windows)
|
|
|
8
8
|
|
|
9
9
|
## What's New
|
|
10
10
|
|
|
11
|
+
- **0.28.0: custom Claude homes and archived Codex sessions** — with `CLAUDE_CONFIG_DIR` set, `dashboard`, `dump`, `report`, the usage reports, `blocks`, `search`, and `doctor` read the home Claude Code writes to; Codex sessions moved to `archived_sessions/` stay visible; `dashboard` and `dump` read large or rewritten session files in bounded chunks; and the main bundle shrinks from 2.85 MB to 2.47 MB.
|
|
11
12
|
- **0.27.6: one usable copy of every login** — Sidekick no longer causes Claude Code's "Not logged in · Please run /login": Keychain writes over about 4 KB are no longer truncated, the live login keeps no second copy, `accounts switch` saves the outgoing login first and is journaled so an interrupted switch finishes or rolls back, and keep-alive never refreshes a live copy. Codex switches are refused while Codex sessions run (even with `--force`), and keep-alive refreshes through `codex app-server`. `sidekick accounts doctor` is read-only and reports Claude and Codex credential stores; `--fix` repairs them after asking (`--yes` skips, `--json` lists the repairs).
|
|
12
13
|
- **0.27.5: prompts grouped by session** — `sidekick dump --prompts` prints every prompt you typed in Claude Code and Codex sessions, grouped by session: the most recent session with prompts by default, one session with `--session <id-or-prefix>`, or every session of the project and its git worktrees with `--all` (narrowed by `--since` and `--limit`). `--replies` adds the agent's final reply to each prompt, `--signals` adds interrupts, rejected and failed tool calls, compactions, API errors, and rollbacks, and `--format` writes text, markdown, JSON, or JSONL (one session per line). OpenCode is not supported.
|
|
13
14
|
- **0.27.3: accurate token totals and subagent totals** — Claude Code split lines and repeated Codex `token_count` events are no longer double-counted, which fixes `dump`, `report`, the dashboard, `daily`/`weekly`/`monthly`/`sessions`, and `blocks` (the usage cache rebuilds itself). `sidekick dump` and `sidekick report` show the session's subagents and "Session total (incl. subagents)", and `dump --format json` adds a `tokenSummary` block. The dashboard's Tokens section leads with "Total (incl. cache)", lists all four buckets, then subagent and session totals, and its cache-hit rate counts cache writes. Claude subagent transcripts count toward the usage reports under their parent session, and `state.json` gains `context.totalTokens`.
|
|
@@ -481,7 +482,7 @@ While mouse capture is on, the terminal's own click-drag text selection and copy
|
|
|
481
482
|
|
|
482
483
|
Auto-detects the most recently active session provider:
|
|
483
484
|
|
|
484
|
-
- **Claude Code** — `~/.claude/projects/`
|
|
485
|
+
- **Claude Code** — `~/.claude/projects/` (`$CLAUDE_CONFIG_DIR/projects/` when `CLAUDE_CONFIG_DIR` is set)
|
|
485
486
|
- **OpenCode** — OpenCode's data directory:
|
|
486
487
|
Linux `~/.local/share/opencode/`, macOS `~/Library/Application Support/opencode/`, Windows `%LOCALAPPDATA%\opencode\` (falls back to `%APPDATA%`)
|
|
487
488
|
- **Codex** — `~/.codex/`
|
package/dist/sidekick-cli.mjs
CHANGED
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __createRequire } from "module";
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
|
-
var us=Object.create;var ri=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var ls=Object.getOwnPropertyNames;var fs=Object.getPrototypeOf,hs=Object.prototype.hasOwnProperty;var g=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var b=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}};var ps=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ls(t))!hs.call(e,i)&&i!==n&&ri(e,i,{get:()=>t[i],enumerable:!(r=ds(t,i))||r.enumerable});return e};var gs=(e,t,n)=>(n=e!=null?us(fs(e)):{},ps(t||!e||!e.__esModule?ri(n,"default",{value:e,enumerable:!0}):n,e));var pt=b(L=>{"use strict";var ys=L&&L.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),ms=L&&L.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),pn=L&&L.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&ys(n,t,r[i]);return ms(n,t),n}})();Object.defineProperty(L,"__esModule",{value:!0});L.CONFIG_DIR_ENV_VAR=void 0;L.getDefaultConfigDir=oi;L.setConfigDir=vs;L.getConfigDirOverride=Ss;L.getConfigDir=gn;L.getProjectDataPath=ws;L.getGlobalDataPath=_s;L.encodeWorkspacePath=hn;L.getProjectSlug=As;L.resolveProjectIdentity=yn;L.getProjectSlugRaw=bs;var Cs=pn(g("fs")),$e=pn(g("path")),ii=pn(g("os"));L.CONFIG_DIR_ENV_VAR="SIDEKICK_CONFIG_DIR";var It=null;function oi(){return process.platform==="win32"?$e.join(process.env.APPDATA||ii.homedir(),"sidekick"):$e.join(ii.homedir(),".config","sidekick")}function vs(e){let t=e?.trim();It=t?$e.resolve(t):null}function Ss(){return It}function gn(){if(It)return It;let e=process.env[L.CONFIG_DIR_ENV_VAR]?.trim();return e?$e.resolve(e):oi()}function ws(e,t){return $e.join(gn(),t,`${e}.json`)}function _s(e){return $e.join(gn(),e)}function hn(e){return e.replace(/\\/g,"/").replace(/[:/_]/g,"-")}function As(e){return yn(e).canonicalSlug}function yn(e){let t=$e.resolve(e||process.cwd()),n;try{n=Cs.realpathSync(t)}catch{n=t}let r=hn(n),i=hn(t);return{cwd:t,resolvedCwd:n,canonicalSlug:r,legacySlug:i,candidates:r===i?[r]:[r,i],hasLegacyMismatch:r!==i}}function bs(e){return yn(e).legacySlug}});var ie=b(W=>{"use strict";var xs=W&&W.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Os=W&&W.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Cn=W&&W.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&xs(n,t,r[i]);return Os(n,t),n}})();Object.defineProperty(W,"__esModule",{value:!0});W.renameSyncWithRetry=di;W.renameWithRetry=li;W.atomicWriteJson=fi;W.atomicWriteJsonSync=hi;W.atomicWriteFileSync=pi;W.updateJsonStoreAtomic=Ms;W.withFileLockSync=yi;W.updateJsonStoreAtomicSync=Ls;var Ze=Cn(g("crypto")),w=Cn(g("fs")),Xe=Cn(g("path")),mn=1e4,Ye=3e3,Ps=12e4,ai=15e3,Es=15,si=new Int32Array(new SharedArrayBuffer(4)),ks=new Set(["EPERM","EBUSY","EACCES"]),Rs=10;function ci(e){return Math.min(320,20*2**e)}function ui(e,t){if(process.platform!=="win32"||t>=Rs-1)return!1;let n=e.code??"";return ks.has(n)}function di(e,t){for(let n=0;;n++)try{w.renameSync(e,t);return}catch(r){if(!ui(r,n))throw r;Atomics.wait(si,0,0,ci(n))}}async function li(e,t){for(let n=0;;n++)try{await w.promises.rename(e,t);return}catch(r){if(!ui(r,n))throw r;await new Promise(i=>setTimeout(i,ci(n)))}}async function Is(e){let t;try{t=await w.promises.open(e,"r"),await t.sync()}catch(n){let r=n.code;if(!["EISDIR","EINVAL","ENOSYS","EPERM","EACCES"].includes(r??""))throw n}finally{await t?.close().catch(()=>{})}}function Ds(e){let t;try{t=w.openSync(e,"r"),w.fsyncSync(t)}catch(n){let r=n.code;if(!["EISDIR","EINVAL","ENOSYS","EPERM","EACCES"].includes(r??""))throw n}finally{t!==void 0&&w.closeSync(t)}}async function fi(e,t){await w.promises.mkdir(Xe.dirname(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Ze.randomBytes(8).toString("hex")}.tmp`,r;try{r=await w.promises.open(n,"wx",384),await r.writeFile(JSON.stringify(t,null,2),"utf8"),await r.sync(),await r.close(),r=void 0,await li(n,e),await Is(Xe.dirname(e))}catch(i){throw await r?.close().catch(()=>{}),await w.promises.rm(n,{force:!0}).catch(()=>{}),i}}function hi(e,t){pi(e,JSON.stringify(t,null,2))}function pi(e,t,n=384){w.mkdirSync(Xe.dirname(e),{recursive:!0,mode:448});let r=`${e}.${process.pid}.${Ze.randomBytes(8).toString("hex")}.tmp`,i;try{i=w.openSync(r,"wx",n),w.writeFileSync(i,t,{encoding:"utf8"}),w.fsyncSync(i),w.closeSync(i),i=void 0,di(r,e),Ds(Xe.dirname(e))}catch(o){throw i!==void 0&&w.closeSync(i),w.rmSync(r,{force:!0}),o}}async function Ms(e,t,n){await w.promises.mkdir(Xe.dirname(e),{recursive:!0,mode:448});let r=`${e}.lock`,i=await Fs(r);try{let o=t(),a;try{a=await w.promises.readFile(e,"utf8")}catch(c){if(c.code!=="ENOENT")throw c}if(a!==void 0)try{o=JSON.parse(a)}catch{let c=`${e}.corrupt-${Date.now()}-${Ze.randomBytes(4).toString("hex")}`;await w.promises.rename(e,c)}let s=await n(o);return await fi(e,s),s}finally{await js(r,i)}}async function Fs(e){let t=Date.now()+Ye,n=null;for(;;)try{let r=await w.promises.open(e,"wx",384),i=`${process.pid}:${Ze.randomBytes(16).toString("hex")}`;await r.writeFile(i,"utf8"),await r.sync();let o=setInterval(()=>{w.promises.utimes(e,new Date,new Date).catch(()=>{})},Math.floor(mn/3));return o.unref(),{handle:r,token:i,heartbeat:o}}catch(r){if(r.code!=="EEXIST")throw r;let i=await w.promises.readFile(e,"utf8").catch(()=>null);i!==null&&i!==n&&(n=i,t=Date.now()+Ye);try{let o=await w.promises.stat(e),a=Date.now()-o.mtimeMs;a>mn&&!gi(i,a)&&await w.promises.rm(e,{force:!0})}catch{}if(Date.now()>=t)throw new Error(`Timed out waiting for store lock: ${e} (no progress for ${Ye}ms)`);await new Promise(o=>setTimeout(o,15))}}async function js(e,t){clearInterval(t.heartbeat),await t.handle.close().catch(()=>{});try{await w.promises.readFile(e,"utf8")===t.token&&await w.promises.rm(e,{force:!0})}catch{}}function gi(e,t){if(t>Ps)return!1;let n=Number.parseInt((e??"").split(":",1)[0],10);if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(r){return r.code==="EPERM"}}function yi(e,t){let n=Ts(e);try{return t()}finally{try{w.readFileSync(e,"utf8")===n&&w.rmSync(e,{force:!0})}catch{}}}function Ts(e){let t=Date.now(),n=t+Ye,r=null;for(;;)try{let i=w.openSync(e,"wx",384),o=`${process.pid}:${Ze.randomBytes(16).toString("hex")}`;return w.writeFileSync(i,o,"utf8"),w.fsyncSync(i),w.closeSync(i),o}catch(i){if(i.code!=="EEXIST")throw i;let o=null;try{o=w.readFileSync(e,"utf8")}catch{}o!==null&&o!==r&&(r=o,n=Date.now()+Ye);try{let s=w.statSync(e),c=Date.now()-s.mtimeMs;c>mn&&!gi(o,c)&&w.rmSync(e,{force:!0})}catch{}let a=Date.now();if(a>=n)throw new Error(`Timed out waiting for store lock: ${e} (no progress for ${Ye}ms)`);if(a-t>=ai)throw new Error(`Timed out waiting for store lock: ${e} (blocked synchronously for ${ai}ms)`);Atomics.wait(si,0,0,Es)}}function Ls(e,t,n){return w.mkdirSync(Xe.dirname(e),{recursive:!0,mode:448}),yi(`${e}.lock`,()=>{let r=t(),i;try{i=w.readFileSync(e,"utf8")}catch(a){if(a.code!=="ENOENT")throw a}if(i!==void 0)try{r=JSON.parse(i)}catch{let a=`${e}.corrupt-${Date.now()}-${Ze.randomBytes(4).toString("hex")}`;w.renameSync(e,a)}let o=n(r);return hi(e,o),o})}});var mi=b(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt._onRawAccountsChanged=Hs;Dt._emitAccountsChanged=Ns;var vn=new Set;function Hs(e){return vn.add(e),()=>vn.delete(e)}function Ns(e){for(let t of vn)try{t(e)}catch{}}});var Sn=b(oe=>{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.MODEL_PROVIDER_IDS=oe.RUNTIME_QUOTA_PROVIDER_IDS=oe.QUOTA_PROVIDER_IDS=oe.ACCOUNT_PROVIDER_IDS=oe.SESSION_PROVIDER_IDS=void 0;oe.SESSION_PROVIDER_IDS=["claude-code","opencode","codex"];oe.ACCOUNT_PROVIDER_IDS=["claude-code","codex"];oe.QUOTA_PROVIDER_IDS=["claude-code","codex","zai"];oe.RUNTIME_QUOTA_PROVIDER_IDS=["claude","codex","zai"];oe.MODEL_PROVIDER_IDS=["anthropic","openai","google","unknown"]});var be=b(R=>{"use strict";var Bs=R&&R.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),$s=R&&R.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ci=R&&R.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Bs(n,t,r[i]);return $s(n,t),n}})();Object.defineProperty(R,"__esModule",{value:!0});R.ACCOUNT_PROVIDER_IDS=void 0;R.getAccountsDir=wn;R.withSavedAccountRegistryLock=wi;R.readSavedAccountRegistry=gt;R.writeSavedAccountRegistry=zs;R.listSavedAccountProfiles=Qs;R.getActiveSavedAccount=Js;R.upsertSavedAccountProfile=Vs;R.setActiveSavedAccount=Gs;R.upsertSavedAccountProfileUnlocked=Ys;R.setActiveSavedAccountUnlocked=Xs;R.replaceSavedAccountProfiles=Zs;R.replaceSavedAccountProfilesUnlocked=ec;R.removeSavedAccountProfile=tc;R.removeSavedAccountProfileUnlocked=Pi;var vi=Ci(g("fs")),Si=Ci(g("path")),Us=pt(),Mt=ie(),qs=mi(),Ks=Sn();Object.defineProperty(R,"ACCOUNT_PROVIDER_IDS",{enumerable:!0,get:function(){return Ks.ACCOUNT_PROVIDER_IDS}});function wn(){return Si.join((0,Us.getConfigDir)(),"accounts")}function _n(){return Si.join(wn(),"accounts.json")}function An(){return _n()+".lock"}function bn(){vi.mkdirSync(wn(),{recursive:!0,mode:448})}function xn(e,t={}){(0,Mt.atomicWriteJsonSync)(_n(),Ai(e)),t.silent||(0,qs._emitAccountsChanged)("local")}function wi(e){return bn(),(0,Mt.withFileLockSync)(An(),e)}function On(e,t={}){return wi(()=>Ft(e,t))}function Ft(e,t={}){let n=e(gt()??_i());return xn(n,t),n}function _i(){return{version:2,activeByProvider:{"claude-code":null,codex:null},accounts:[]}}function Ai(e){let t=_i();return t.activeByProvider["claude-code"]=e.activeByProvider?.["claude-code"]??null,t.activeByProvider.codex=e.activeByProvider?.codex??null,t.accounts=Array.isArray(e.accounts)?e.accounts.filter(n=>!!n&&(n.providerId==="claude-code"||n.providerId==="codex")&&typeof n.id=="string"&&typeof n.addedAt=="string").map(n=>({...n,label:n.label||void 0,email:n.email||void 0,providerAccountId:n.providerAccountId||void 0,metadata:n.metadata?{email:n.metadata.email||void 0,workspaceId:n.metadata.workspaceId||void 0,planType:n.metadata.planType||void 0,authMode:n.metadata.authMode||void 0,origin:n.metadata.origin||void 0}:void 0})):[],t}function Ws(e){return{version:2,activeByProvider:{"claude-code":e.activeAccountUuid,codex:null},accounts:e.accounts.map(t=>({id:t.uuid,providerId:"claude-code",providerAccountId:t.uuid,email:t.email,label:t.label,addedAt:t.addedAt,metadata:{email:t.email}}))}}function gt(){try{let e=vi.readFileSync(_n(),"utf8"),t=JSON.parse(e);return t?.version===2?Ai(t):t?.version===1&&Array.isArray(t.accounts)?Ws(t):null}catch{return null}}function zs(e){bn(),(0,Mt.withFileLockSync)(An(),()=>xn(e))}function Qs(e){let t=gt();return t?e?t.accounts.filter(n=>n.providerId===e):t.accounts:[]}function Js(e){let t=gt();if(!t)return null;let n=t.activeByProvider[e];return n?t.accounts.find(r=>r.providerId===e&&r.id===n)??null:null}function Vs(e){return On(xi(e))}function Gs(e,t,n={}){return On(bi(e,t),n)}function bi(e,t){return n=>(n.activeByProvider[e]=t,n)}function xi(e){return t=>{let n=t.accounts.findIndex(r=>r.providerId===e.providerId&&r.id===e.id);return n>=0?t.accounts[n]=e:t.accounts.push(e),t}}function Ys(e){return Ft(xi(e))}function Xs(e,t,n={}){return Ft(bi(e,t),n)}function Oi(e,t,n){return r=>(r.accounts=r.accounts.filter(i=>i.providerId!==e).concat(t),r.activeByProvider[e]=n,r)}function Zs(e,t,n){return On(Oi(e,t,n))}function ec(e,t,n){return Ft(Oi(e,t,n))}function tc(e,t){return bn(),(0,Mt.withFileLockSync)(An(),()=>Pi(e,t))}function Pi(e,t){let n=gt();if(!n)return null;let r=n.accounts.findIndex(o=>o.providerId===e&&o.id===t);if(r===-1)return null;let[i]=n.accounts.splice(r,1);return n.activeByProvider[e]===t&&(n.activeByProvider[e]=n.accounts.find(o=>o.providerId===e)?.id??null),xn(n),i}});var et=b(O=>{"use strict";var nc=O&&O.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),rc=O&&O.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Pn=O&&O.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&nc(n,t,r[i]);return rc(n,t),n}})();Object.defineProperty(O,"__esModule",{value:!0});O.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV=void 0;O.getDefaultClaudeHome=kn;O.isDefaultClaudeHome=Ri;O.getLiveClaudeHome=yt;O.getClaudeProfilesDir=Rn;O.isLiveClaudeHomeSidekickProfile=cc;O.getClaudeProfileDir=Ii;O.getClaudeProfileHome=Di;O.getClaudeCredentialBackupPath=uc;O.ensureClaudeProfileDirs=dc;O.claudeKeychainSuffix=Mi;O.claudeKeychainService=Fi;O.claudeKeychainAccountName=lc;O.buildClaudeChildEnv=fc;O.getClaudeConfigPath=ji;O.readLiveClaudeIdentity=hc;O.readClaudeProfileIdentity=Li;O.keychainServiceExists=Hi;O.isClaudeProfileAuthenticated=pc;var ic=g("child_process"),oc=g("crypto"),jt=Pn(g("fs")),En=Pn(g("os")),J=Pn(g("path")),ki=be(),Ei="Claude Code-credentials",ac=/^[a-zA-Z0-9._-]+$/,sc="claude-code-user";O.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV="CLAUDE_SECURESTORAGE_CONFIG_DIR";function kn(){return J.join(En.homedir(),".claude")}function Ri(){return!process.env.CLAUDE_CONFIG_DIR?.trim()}function yt(){let e=process.env.CLAUDE_CONFIG_DIR?.trim();return e||kn()}function Rn(){return J.join((0,ki.getAccountsDir)(),"claude","profiles")}function cc(){let e=J.resolve(yt()),t=J.resolve(Rn());return e===t||e.startsWith(t+J.sep)}function Ii(e){return J.join(Rn(),e)}function Di(e){return J.join(Ii(e),"home")}function uc(e){return J.join((0,ki.getAccountsDir)(),"credentials",`${e}.credentials.json`)}function dc(e){jt.mkdirSync(Di(e),{recursive:!0,mode:448})}function Mi(e){return(0,oc.createHash)("sha256").update(e.normalize("NFC")).digest("hex").slice(0,8)}function Fi(e){let t=e??(Ri()?void 0:yt());return t?`${Ei}-${Mi(t)}`:Ei}function lc(){let e;try{e=process.env.USER||En.userInfo().username}catch{e=void 0}return e&&ac.test(e)?e:sc}function fc(e,t=process.env){let n={...t,CLAUDE_CONFIG_DIR:e};return delete n[O.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV],n}function In(e){try{let t=JSON.parse(jt.readFileSync(e,"utf8"));return t?.oauthAccount&&typeof t.oauthAccount=="object"?t.oauthAccount:null}catch{return null}}function ji(e=yt()){let t=J.join(e,".claude.json");return In(t)?t:J.resolve(e)===J.resolve(kn())?J.join(En.homedir(),".claude.json"):t}function Ti(e){let t=e?.emailAddress,n=e?.accountUuid;return typeof t=="string"&&typeof n=="string"?{email:t,uuid:n}:null}function hc(e=yt()){return Ti(In(ji(e)))}function Li(e){return Ti(In(J.join(e,".claude.json")))}function Hi(e){try{return(0,ic.execFileSync)("security",["find-generic-password","-s",e],{stdio:["ignore","ignore","ignore"],timeout:4e3,killSignal:"SIGKILL"}),!0}catch{return!1}}function pc(e){return(process.platform==="darwin"&&Hi(Fi(e))||jt.existsSync(J.join(e,".credentials.json")))&&Li(e)!==null}});var Ui=b(ae=>{"use strict";var gc=ae&&ae.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),yc=ae&&ae.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ni=ae&&ae.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&gc(n,t,r[i]);return yc(n,t),n}})();Object.defineProperty(ae,"__esModule",{value:!0});ae.getClaudeCredentialLedgerPath=mt;ae.readClaudeCredentialLedger=vc;ae.recordClaudeCredentialHome=Sc;ae.forgetClaudeCredentialHome=wc;var Bi=Ni(g("fs")),Dn=Ni(g("path")),mc=be(),Cc=et(),$i=ie();function Mn(){return{version:1,entries:[]}}function Fn(e){let t=e?.entries;return Array.isArray(t)?{version:1,entries:t.filter(n=>!!n&&typeof n=="object"&&typeof n.configDir=="string"&&typeof n.service=="string")}:Mn()}function mt(){return Dn.join((0,mc.getAccountsDir)(),"claude","credential-homes.json")}function vc(){try{return Fn(JSON.parse(Bi.readFileSync(mt(),"utf8"))).entries}catch{return[]}}function Sc(e,t,n=new Date){let r=Dn.resolve(e),i=n.toISOString();try{(0,$i.updateJsonStoreAtomicSync)(mt(),Mn,o=>{let a=Fn(o),s=a.entries.find(c=>c.configDir===r);return s?(s.lastWrittenAt=i,t==="profile"&&(s.purpose="profile"),a):(a.entries.push({configDir:r,service:(0,Cc.claudeKeychainService)(r),purpose:t,createdAt:i,lastWrittenAt:i}),a)})}catch{}}function wc(e){let t=Dn.resolve(e);try{if(!Bi.existsSync(mt()))return;(0,$i.updateJsonStoreAtomicSync)(mt(),Mn,n=>{let r=Fn(n);return r.entries=r.entries.filter(i=>i.configDir!==t),r})}catch{}}});var Hn=b(M=>{"use strict";var _c=M&&M.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Ac=M&&M.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ki=M&&M.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&_c(n,t,r[i]);return Ac(n,t),n}})();Object.defineProperty(M,"__esModule",{value:!0});M.ClaudeCredentialWriteError=M.SIDEKICK_KEYCHAIN_COMMENT_PREFIX=M.SECURITY_INTERACTIVE_LINE_LIMIT=M.KEYCHAIN_SERVICE=void 0;M.readClaudeCredentialStore=xc;M.readActiveCredentials=Oc;M.writeActiveCredentials=Ec;M.writeLiveClaudeCredentialStoreUnguarded=kc;M.deleteStoredCredentials=Rc;var Wi=Ki(g("fs")),zi=Ki(g("path")),Lt=g("child_process"),De=et(),Qi=Ui(),bc=ie();M.KEYCHAIN_SERVICE="Claude Code-credentials";var Ht=4e3,Ji=44;M.SECURITY_INTERACTIVE_LINE_LIMIT=4032;M.SIDEKICK_KEYCHAIN_COMMENT_PREFIX="sidekick-agent-hub:";var xe=class extends Error{constructor(t){super(t),this.name="ClaudeCredentialWriteError"}};M.ClaudeCredentialWriteError=xe;function Tt(e){return`'${e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function jn(e){return zi.join(e??(0,De.getLiveClaudeHome)(),".credentials.json")}function Vi(e,t){let n=e.trim();if(!n)return{status:"corrupt",source:t,length:0};let r=t==="keychain"&&!n.startsWith("{")&&/^(?:[0-9a-f]{2})+$/i.test(n)?Buffer.from(n,"hex").toString("utf8"):n;try{let i=JSON.parse(r);if(i&&typeof i=="object"&&!Array.isArray(i))return{status:"ok",blob:i,source:t}}catch{}return{status:"corrupt",source:t,length:r.length}}function Tn(e){let t;try{t=Wi.readFileSync(jn(e),"utf8")}catch(n){return n.code==="ENOENT"?{status:"absent"}:{status:"error",reason:String(n.message??n)}}return Vi(t,"file")}function Gi(e){let t=e.status;return typeof t=="number"?t:null}function Ln(e){try{let t=(0,Lt.execFileSync)("security",["find-generic-password","-a",(0,De.claudeKeychainAccountName)(),"-s",e,"-w"],{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:Ht,killSignal:"SIGKILL"});return Vi(String(t),"keychain")}catch(t){return Gi(t)===Ji?{status:"absent"}:{status:"error",reason:String(t?.message??t)}}}function xc(e,t={}){if(process.platform==="darwin"){let n=Ln((0,De.claudeKeychainService)(e));if(n.status!=="absent"||t.keychainOnly)return n}return Tn(e)}function Oc(e){if(process.platform==="darwin"){let n=Ln((0,De.claudeKeychainService)(e));if(n.status==="ok")return n.blob}let t=Tn(e);return t.status==="ok"?t.blob:null}function Pc(e,t,n){let r=(0,De.claudeKeychainAccountName)(),i=["add-generic-password","-U","-a",r,"-s",e],o=["add-generic-password","-U","-a",Tt(r),"-s",Tt(e)];n&&(i.push("-j",n),o.push("-j",Tt(n))),i.push("-X",t),o.push("-X",Tt(t));let a=`${o.join(" ")}
|
|
5
|
-
`;if(Buffer.byteLength(a,"utf8")<=M.SECURITY_INTERACTIVE_LINE_LIMIT){(0,Lt.execFileSync)("security",["-i"],{input:a,stdio:["pipe","pipe","pipe"],timeout:Ht,killSignal:"SIGKILL"});return}(0,Lt.execFileSync)("security",i,{stdio:["ignore","pipe","pipe"],timeout:Ht,killSignal:"SIGKILL"})}function Yi(e,t){let n=JSON.stringify(e),r;try{r=JSON.stringify(JSON.parse(n))}catch{throw new xe("Refusing to store a credential that is not JSON.")}if(process.platform==="darwin"){let o=(0,De.claudeKeychainService)(t),a=t?`${M.SIDEKICK_KEYCHAIN_COMMENT_PREFIX}${zi.resolve(t)}`:null;try{Pc(o,Buffer.from(n,"utf8").toString("hex"),a)}catch(c){throw new xe(`Keychain write failed: ${c?.message??c}`)}let s=Ln(o);if(s.status==="error")throw new xe("The Keychain write could not be verified (read-back failed); treating it as not written.");if(s.status!=="ok"||JSON.stringify(s.blob)!==r)throw new xe("The Keychain item did not hold the credential after writing it.");return}(0,bc.atomicWriteFileSync)(jn(t),n,384);let i=Tn(t);if(i.status!=="ok"||JSON.stringify(i.blob)!==r)throw new xe("The credentials file did not hold the credential after writing it.")}function Ec(e,t){if(!t)throw new xe("writeActiveCredentials() needs a config directory; the live Claude login is only written through a guarded account switch.");(0,Qi.recordClaudeCredentialHome)(t,"profile"),Yi(e,t)}function kc(e){Yi(e,void 0)}function qi(e,t){try{return(0,Lt.execFileSync)("security",["delete-generic-password",...t?["-a",(0,De.claudeKeychainAccountName)()]:[],"-s",e],{stdio:["ignore","ignore","ignore"],timeout:Ht,killSignal:"SIGKILL"}),"deleted"}catch(n){return Gi(n)===Ji?"absent":"error"}}function Rc(e){let t=!0;if(process.platform==="darwin"){let n=(0,De.claudeKeychainService)(e),r=qi(n,!0);r==="absent"&&(r=qi(n,!1)),r==="error"&&(t=!1)}try{Wi.rmSync(jn(e),{force:!0})}catch{t=!1}return t&&(0,Qi.forgetClaudeCredentialHome)(e),t}});var Nt=b(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0});V.CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS=V.CLAUDE_ACCESS_TOKEN_LIFETIME_MS=void 0;V.parseClaudeCredentialBlob=Dc;V.claudeCredentialFreshness=Nn;V.isNewerClaudeCredential=Mc;V.resolveClaudeRefreshExpiry=Fc;V.claudeRefreshFingerprint=jc;V.claudeLoginOnly=Tc;V.mergeClaudeLoginIntoLive=Lc;var Ic=g("crypto");V.CLAUDE_ACCESS_TOKEN_LIFETIME_MS=480*60*1e3;V.CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS=504*60*60*1e3;function Xi(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Dc(e){if(!e||typeof e!="object")return null;let t=e.claudeAiOauth;if(!t||typeof t!="object")return null;let n=t;return typeof n.accessToken!="string"||!n.accessToken?null:{accessToken:n.accessToken,refreshToken:typeof n.refreshToken=="string"?n.refreshToken:void 0,expiresAt:Xi(n.expiresAt),refreshTokenExpiresAt:Xi(n.refreshTokenExpiresAt),scopes:Array.isArray(n.scopes)?n.scopes.filter(r=>typeof r=="string"):void 0,subscriptionType:typeof n.subscriptionType=="string"?n.subscriptionType:void 0,rateLimitTier:typeof n.rateLimitTier=="string"?n.rateLimitTier:void 0}}function Nn(e){return e?e.expiresAt??e.refreshTokenExpiresAt??0:0}function Mc(e,t){return Nn(e)>Nn(t)}function Fc(e){return e?e.refreshTokenExpiresAt!==void 0?{refreshExpiresAt:e.refreshTokenExpiresAt,estimated:!1}:e.expiresAt!==void 0?{refreshExpiresAt:e.expiresAt-V.CLAUDE_ACCESS_TOKEN_LIFETIME_MS+V.CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS,estimated:!0}:null:null}function jc(e){let t=e?.refreshToken;return t?(0,Ic.createHash)("sha256").update(t).digest("hex").slice(0,16):null}function tt(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Tc(e){let t=tt(tt(e)?.claudeAiOauth);return t?{claudeAiOauth:t}:null}function Lc(e,t){let n=tt(e)??{},r=tt(t)??{},i={...n,claudeAiOauth:r.claudeAiOauth},o=tt(n.mcpOAuth),a=tt(r.mcpOAuth);return(o||a)&&(i.mcpOAuth={...a,...o}),i}});var $n=b(Bn=>{"use strict";Object.defineProperty(Bn,"__esModule",{value:!0});Bn.decideLiveCredentialWrite=Hc;function Hc(e){let t=(n,r)=>({allow:!1,code:n,reason:r});return e.liveStatus==="error"||e.rejectCorrupt&&e.liveStatus==="corrupt"?t("live-unreadable",`The live ${e.provider} login could not be read, so it was left untouched.`):e.intent==="rollback"?e.matchesWritten||e.allowNonOkRollback&&e.liveStatus!=="ok"?{allow:!0}:t("live-changed",`The live ${e.provider} login changed after the switch wrote it; it was kept.`):e.candidateValid?e.intent==="switch"?e.liveAccountId!==null&&e.liveAccountId===e.candidateAccountId?t("same-account","That account is already the live login."):e.sameLink?t("same-link","The saved login is the same refresh token the live login holds; sign in to that account again."):e.liveHasCredential&&!e.capturedOutgoing?t("not-captured","The outgoing live login was not saved first, so it was left untouched."):{allow:!0}:e.liveAccountId!==null&&e.liveAccountId!==e.candidateAccountId?t("different-account",`The live ${e.provider} login belongs to another account; switch accounts instead.`):e.liveHasCredential?!e.strictlyNewer||e.requireDifferentLinkForAdvance&&e.sameLink?t("not-newer",`The live ${e.provider} login is already at least as new; it was kept.`):{allow:!0}:{allow:!0}:t("invalid-candidate",`The saved credential is not a ${e.provider} login.`)}});var Zi=b(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});Un.decideLiveClaudeWrite=Bc;var Nc=$n(),nt=Nt();function Bc(e){let t=(0,nt.parseClaudeCredentialBlob)(e.candidate),n=e.live.status==="ok"?(0,nt.parseClaudeCredentialBlob)(e.live.blob):null,r=(0,nt.claudeRefreshFingerprint)(n);return(0,Nc.decideLiveCredentialWrite)({provider:"Claude",intent:e.intent,liveStatus:e.live.status,candidateValid:t!==null,liveHasCredential:n!==null,liveAccountId:e.liveAccountUuid,candidateAccountId:e.candidateAccountUuid,sameLink:r!==null&&r===(0,nt.claudeRefreshFingerprint)(t),strictlyNewer:(0,nt.claudeCredentialFreshness)(t)>(0,nt.claudeCredentialFreshness)(n),capturedOutgoing:e.capturedOutgoing,matchesWritten:e.live.status==="ok"&&JSON.stringify(e.live.blob)===JSON.stringify(e.written),allowNonOkRollback:!0,requireDifferentLinkForAdvance:!0})}});var ro=b(G=>{"use strict";var $c=G&&G.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Uc=G&&G.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),to=G&&G.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&$c(n,t,r[i]);return Uc(n,t),n}})();Object.defineProperty(G,"__esModule",{value:!0});G.ClaudeRefreshLockBusyError=G.CLAUDE_REFRESH_LOCK_STALE_MS=void 0;G.claudeRefreshLockPaths=no;G.withClaudeRefreshLocksSync=Qc;var Ue=to(g("fs")),eo=to(g("path"));G.CLAUDE_REFRESH_LOCK_STALE_MS=6e4;var qc=5e3,Kc=50,Wc=new Int32Array(new SharedArrayBuffer(4)),Bt=class extends Error{constructor(t){super(`Claude Code is refreshing a login (${t} is held); try again in a few seconds.`),this.name="ClaudeRefreshLockBusyError"}};G.ClaudeRefreshLockBusyError=Bt;function no(e){let t=eo.resolve(e);try{t=Ue.realpathSync(e)}catch{}return[eo.join(e,".oauth_refresh.lock"),`${t}.lock`]}function zc(e,t){try{return Ue.mkdirSync(e),!0}catch(n){if(n.code!=="EEXIST")throw n}try{let n=Ue.statSync(e);if(t-n.mtimeMs>G.CLAUDE_REFRESH_LOCK_STALE_MS)return Ue.rmSync(e,{recursive:!0,force:!0}),Ue.mkdirSync(e),!0}catch{}return!1}function Qc(e,t,n={}){let r=n.waitMs??qc,i=[...new Set(e.filter(a=>{try{return Ue.statSync(a).isDirectory()}catch{return!1}}).flatMap(no))],o=[];try{let a=Date.now()+r;for(let s of i){for(;!zc(s,Date.now());){if(Date.now()>=a)throw new Bt(s);Atomics.wait(Wc,0,0,Kc)}o.push(s)}return t()}finally{for(let a of o.reverse())try{Ue.rmSync(a,{recursive:!0,force:!0})}catch{}}}});var rt=b(I=>{"use strict";var Jc=I&&I.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Vc=I&&I.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Kn=I&&I.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Jc(n,t,r[i]);return Vc(n,t),n}})();Object.defineProperty(I,"__esModule",{value:!0});I.getDefaultSystemCodexHome=io;I.getExplicitCodexHome=oo;I.getSystemCodexHome=ao;I.getCodexProfilesDir=so;I.getCodexProfileDir=Qn;I.getCodexProfileHome=Jn;I.getCodexProfileStatePath=co;I.ensureCodexProfileDirs=Yc;I.readFileOrNull=Xc;I.getCodexCredentialStoreMode=Zc;I.forceFileCredentialStore=eu;I.getCodexBackupPath=tu;I.getCodexLoginsDir=uo;I.getCodexLoginDir=Vn;I.getCodexLoginHome=nu;I.getCodexLoginStatePath=ru;var Ct=Kn(g("fs")),Gc=Kn(g("os")),de=Kn(g("path")),Wn=be();function io(){return de.join(Gc.homedir(),".codex")}function oo(){let e=process.env.CODEX_HOME?.trim();return e||null}function ao(){return oo()??io()}function so(){return de.join((0,Wn.getAccountsDir)(),"codex","profiles")}function zn(e){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e))throw new Error("Invalid Codex account id.")}function Qn(e){return zn(e),de.join(so(),e)}function Jn(e){return de.join(Qn(e),"codex-home")}function co(e){return de.join(Qn(e),"profile.json")}function Yc(e){Ct.mkdirSync(Jn(e),{recursive:!0,mode:448})}function Xc(e){try{return Ct.readFileSync(e,"utf8")}catch{return null}}var qn=/^[ \t]*cli_auth_credentials_store[ \t]*=[ \t]*["']([a-z]+)["']/m;function Zc(e=ao()){let t;try{t=Ct.readFileSync(de.join(e,"config.toml"),"utf8")}catch(o){return o.code==="ENOENT"?"unknown":"unreadable"}let n=t.split(/^[ \t]*\[/m,1)[0],r=n.match(qn);if(!r&&/^[ \t]*cli_auth_credentials_store\s*=/m.test(n))return"unreadable";let i=r?.[1];return i==="file"||i==="keyring"||i==="auto"||i==="ephemeral"?i:i===void 0?"unknown":"unreadable"}function eu(e){let t=e.search(/^[ \t]*\[/m),n=t<0?e:e.slice(0,t);if(qn.test(n))return n.replace(qn,'cli_auth_credentials_store = "file"')+(t<0?"":e.slice(t));let r='cli_auth_credentials_store = "file"',i=e.replace(/\s*$/,"");if(!i)return`${r}
|
|
6
|
-
|
|
7
|
-
${r}
|
|
8
|
-
`;let a=i.slice(0,o).replace(/\s*$/,"");return`${a?`${a}
|
|
9
|
-
`:""}${r}
|
|
10
|
-
|
|
11
|
-
${i.slice(o).replace(/^\s*/,"")}
|
|
12
|
-
`}function tu(e,t=!1){return zn(e),de.join((0,Wn.getAccountsDir)(),"codex","backups",`${e}.${t?"credentials":"auth"}.json`)}function uo(){return de.join((0,Wn.getAccountsDir)(),"codex","logins")}function Vn(e){return zn(e),de.join(uo(),e)}function nu(e){let t=Vn(e);return Ct.existsSync(t)?de.join(t,"codex-home"):Jn(e)}function ru(e){let t=Vn(e);return Ct.existsSync(t)?de.join(t,"profile.json"):co(e)}});var Xn=b(le=>{"use strict";var iu=le&&le.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),ou=le&&le.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),lo=le&&le.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&iu(n,t,r[i]);return ou(n,t),n}})();Object.defineProperty(le,"__esModule",{value:!0});le.isAccountLeaseHeld=ho;le.acquireAccountLease=du;le.releaseAccountLease=lu;var Gn=lo(g("fs")),fo=lo(g("path")),au=et(),su=rt(),cu=ie();function Yn(e,t){let n=e==="codex"?(0,su.getCodexProfileDir)(t):(0,au.getClaudeProfileDir)(t);return fo.join(n,"keepalive.lease")}function uu(e){if(e===process.pid)return!0;try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function ho(e,t,n=Date.now()){try{let r=JSON.parse(Gn.readFileSync(Yn(e,t),"utf8"));return typeof r.pid=="number"&&typeof r.expiresAt=="number"&&r.expiresAt>n&&uu(r.pid)}catch{return!1}}function du(e,t,n,r=Date.now()){if(ho(e,t,r))return!1;let i=Yn(e,t);return Gn.mkdirSync(fo.dirname(i),{recursive:!0,mode:448}),(0,cu.atomicWriteJsonSync)(i,{pid:process.pid,expiresAt:r+n}),!0}function lu(e,t){try{Gn.rmSync(Yn(e,t),{force:!0})}catch{}}});var $t=b(U=>{"use strict";var fu=U&&U.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),hu=U&&U.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),pu=U&&U.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&fu(n,t,r[i]);return hu(n,t),n}})();Object.defineProperty(U,"__esModule",{value:!0});U.STALE_AUTH_THRESHOLD_MS=void 0;U.parseJwtPayload=tr;U.parseAuthJson=vt;U.readAuthIdentityFromRaw=mu;U.readLastRefresh=Zn;U.readAccessTokenExpiry=er;U.identitiesMatch=Cu;U.codexRefreshFingerprint=vu;U.compareCodexAuthFreshness=Su;var gu=pu(g("fs")),yu=g("crypto");U.STALE_AUTH_THRESHOLD_MS=11520*60*1e3;function tr(e){let t=e.split(".");if(t.length<2)return null;try{let n=Buffer.from(t[1],"base64url").toString("utf8");return JSON.parse(n)}catch{return null}}function vt(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t=="object"?t:null}catch{return null}}function mu(e){let t=vt(e);if(!t)return null;let n=t.tokens?.id_token,r=n?tr(n):null,i=r?.["https://api.openai.com/profile"],o=r?.["https://api.openai.com/auth"],a=typeof r?.email=="string"?r.email:typeof i?.email=="string"?i.email:void 0,s=typeof o?.chatgpt_account_id=="string"?o.chatgpt_account_id:t.tokens?.account_id,c=typeof o?.chatgpt_plan_type=="string"?o.chatgpt_plan_type:void 0,u=t.OPENAI_API_KEY||t.auth_mode==="api_key"?"api-key":"chatgpt";return{email:a,workspaceId:s,planType:c,authMode:u}}function Zn(e,t){let n=vt(e);if(n?.last_refresh){let r=Date.parse(n.last_refresh);if(!Number.isNaN(r))return r}if(t)try{return gu.statSync(t).mtimeMs}catch{}return null}function er(e){let n=vt(e)?.tokens?.access_token;if(!n)return null;let r=tr(n);return typeof r?.exp=="number"&&Number.isFinite(r.exp)?r.exp*1e3:null}function Cu(e,t){return!e||!t?!1:e.workspaceId&&t.workspaceId?e.workspaceId===t.workspaceId:!!(e.email&&t.email&&e.email===t.email)}function vu(e){let t=vt(e)?.tokens?.refresh_token;return typeof t=="string"&&t?(0,yu.createHash)("sha256").update(t).digest("hex").slice(0,16):null}function Su(e,t){let n=Zn(e),r=Zn(t);if(n!==null&&r!==null&&n!==r)return n>r?1:-1;let i=er(e),o=er(t);return i!==null&&o!==null&&i!==o?i>o?1:-1:0}});var ar=b(j=>{"use strict";var wu=j&&j.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),_u=j&&j.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),po=j&&j.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&wu(n,t,r[i]);return _u(n,t),n}})();Object.defineProperty(j,"__esModule",{value:!0});j.isLegacyCodexLogin=qe;j.isCodexLogin=ir;j.codexLoginOnly=or;j.readCodexCredentialStore=St;j.readCodexBackup=Co;j.codexSnapshotFingerprint=rr;j.codexStoreMatches=Ut;j.writeCodexBackup=xu;j.canonicalCodexPath=Fe;j.isSidekickCodexHome=vo;j.codexInstalledSnapshot=So;j.writeInactiveCodexCredentialStore=Ou;j.writeLiveCodexCredentialStoreUnguarded=Pu;j.removeCodexProfileCredentials=Eu;var it=po(g("fs")),fe=po(g("path")),Au=g("crypto"),bu=be(),Me=rt(),go=$t(),yo=ie();function qe(e){let t=(0,go.parseAuthJson)(e);return!!(t&&["OPENAI_API_KEY","CODEX_API_KEY"].some(n=>typeof t[n]=="string"&&t[n].length>0))}function ir(e){let t=(0,go.parseAuthJson)(e);return!t||Array.isArray(t)?!1:typeof t.OPENAI_API_KEY=="string"&&t.OPENAI_API_KEY?!0:!!(typeof t.tokens?.access_token=="string"&&t.tokens.access_token&&typeof t.tokens.refresh_token=="string"&&t.tokens.refresh_token)}function or(e){return{authRaw:e.authRaw,legacyRaw:qe(e.legacyRaw)?e.legacyRaw:null}}function nr(e){try{return it.readFileSync(e,"utf8")}catch(t){if(t.code==="ENOENT")return null;throw t}}function mo(e,t){try{let n={authRaw:nr(e),legacyRaw:nr(t)};return{status:n.authRaw!==null?ir(n.authRaw)?"ok":"corrupt":qe(n.legacyRaw)?"ok":"absent",snapshot:n}}catch{return{status:"error"}}}function St(e=(0,Me.getSystemCodexHome)()){return mo(fe.join(e,"auth.json"),fe.join(e,".credentials.json"))}function Co(e){return mo((0,Me.getCodexBackupPath)(e),(0,Me.getCodexBackupPath)(e,!0))}function rr(e){return(0,Au.createHash)("sha256").update(JSON.stringify(e)).digest("hex")}function Ut(e,t){return e.status!=="error"&&rr(e.snapshot)===rr(t)}function xu(e,t){let n=or(t);if(!ir(n.authRaw)&&!qe(n.legacyRaw))throw new Error("Refusing to back up an invalid Codex login.");for(let[r,i]of[[(0,Me.getCodexBackupPath)(e),n.authRaw],[(0,Me.getCodexBackupPath)(e,!0),n.legacyRaw]])i!==null?(0,yo.atomicWriteFileSync)(r,i):it.rmSync(r,{force:!0});if(!Ut(Co(e),n))throw new Error("The private Codex backup did not verify.")}function Fe(e){let t=fe.resolve(e);try{return it.realpathSync(t)}catch{let n=fe.dirname(t);return n===t?t:fe.join(Fe(n),fe.basename(t))}}function vo(e){let t=Fe(fe.join((0,bu.getAccountsDir)(),"codex")),n=Fe(e);return n===t||n.startsWith(t+fe.sep)}function So(e,t){let n=or(t);if(n.legacyRaw&&e.legacyRaw&&!qe(e.legacyRaw))throw new Error("Legacy Codex credentials would replace MCP data; sign in with Codex again.");return{authRaw:n.authRaw,legacyRaw:e.legacyRaw&&!qe(e.legacyRaw)?e.legacyRaw:n.legacyRaw}}function wo(e,t){for(let[n,r]of[["auth.json",t.authRaw],[".credentials.json",t.legacyRaw]]){let i=fe.join(e,n);nr(i)!==r&&(r===null?it.rmSync(i,{force:!0}):(0,yo.atomicWriteFileSync)(i,r))}}function Ou(e,t){if(Fe(e)===Fe((0,Me.getSystemCodexHome)()))throw new Error("A profile credential writer cannot write the live Codex home.");let n=St(e);if(n.status==="error")throw new Error("The Codex profile could not be read.");let r=So(n.snapshot,t);if(wo(e,r),!Ut(St(e),r))throw new Error("The Codex profile write did not verify.")}function Pu(e){let t=(0,Me.getSystemCodexHome)();if(vo(t))throw new Error("Unset CODEX_HOME before changing the live login; it names a Sidekick-owned home.");wo(t,e)}function Eu(e,t){if(Fe(e)===Fe((0,Me.getSystemCodexHome)()))throw new Error("Refusing to remove live Codex credentials.");if(!Ut(St(e),t))throw new Error("The Codex profile changed; its credential was kept.");if(t.authRaw!==null&&it.rmSync(fe.join(e,"auth.json"),{force:!0}),qe(t.legacyRaw)&&it.rmSync(fe.join(e,".credentials.json"),{force:!0}),St(e).status!=="absent")throw new Error("The Codex profile credential could not be removed.")}});var fr=b(q=>{"use strict";var ku=q&&q.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Ru=q&&q.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Po=q&&q.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&ku(n,t,r[i]);return Ru(n,t),n}})();Object.defineProperty(q,"__esModule",{value:!0});q.getHealthSidecarPath=sr;q.readHealthSidecar=Kt;q.claudeHealthSidecarFromBlob=ur;q.writeClaudeHealthSidecar=Eo;q.codexHealthSidecarFromAuth=dr;q.writeCodexHealthSidecar=Mu;q.readEffectiveClaudeCredential=Ro;q.getAccountHealth=Io;q.listAccountsWithHealth=Hu;q.describeClaudeCredential=Nu;var me=Po(g("fs")),Ke=Po(g("path")),We=et(),ye=Nt(),_o=Hn(),Oe=$t(),je=rt(),qt=be(),Ao=ar(),Iu=ie(),Du=4320*60*1e3;function sr(e,t){let n=e==="codex"?(0,je.getCodexProfileDir)(t):(0,We.getClaudeProfileDir)(t);return Ke.join(n,"health.json")}function Kt(e,t){try{let n=JSON.parse(me.readFileSync(sr(e,t),"utf8"));return n?.version===1&&typeof n.capturedAt=="number"?n:null}catch{return null}}function cr(e,t,n){try{(0,Iu.atomicWriteJsonSync)(sr(e,t),n)}catch{}}function ur(e,t,n=Date.now()){let r=(0,ye.parseClaudeCredentialBlob)(e);if(!r)return null;let i=(0,ye.resolveClaudeRefreshExpiry)(r);return{version:1,capturedAt:n,accessExpiresAt:r.expiresAt,refreshExpiresAt:i?.refreshExpiresAt,refreshExpiryEstimated:i?.estimated,hasRefreshToken:!!r.refreshToken,authMode:"oauth",refreshFp:(0,ye.claudeRefreshFingerprint)(r)??void 0,source:t}}function Eo(e,t,n,r=Date.now()){let i=ur(t,n,r);return i&&cr("claude-code",e,i),i}function dr(e,t,n=Date.now(),r){let i=(0,Oe.readAuthIdentityFromRaw)(e);if(!i)return null;let o=(0,Oe.readLastRefresh)(e,r)??void 0;return{version:1,capturedAt:n,accessExpiresAt:(0,Oe.readAccessTokenExpiry)(e)??void 0,lastRefreshAt:o,hasRefreshToken:(0,Oe.codexRefreshFingerprint)(e)!==null,refreshFp:(0,Oe.codexRefreshFingerprint)(e)??void 0,authMode:i.authMode,source:t}}function Mu(e,t,n,r=Date.now()){let i=dr(t,n,r);return i&&cr("codex",e,i),i}function Fu(e,t){let n=e.accessExpiresAt!==void 0,r=n&&e.accessExpiresAt<=t;if(e.refreshExpiresAt!==void 0){if(e.refreshExpiresAt<=t)return{state:"expired",reason:e.refreshExpiryEstimated?"Refresh token has most likely expired (estimated from the snapshot age).":"Refresh token expired; sign in again."};if(e.refreshExpiresAt-t<=Du)return{state:"expiring",reason:"Refresh token expires within 3 days."}}return e.hasRefreshToken===!1&&r?{state:"expired",reason:"Access token expired and no refresh token is stored."}:r?{state:"expiring",reason:"Access token expired; the CLI refreshes it on next use."}:!n&&e.refreshExpiresAt===void 0?{state:"unknown",reason:"The stored credential carries no expiry."}:{state:"fresh"}}function ju(e,t){return e.authMode==="api-key"?{state:"unknown",reason:"API-key login; expiry is not observable locally."}:e.accessExpiresAt!==void 0&&e.accessExpiresAt>t?{state:"fresh"}:e.lastRefreshAt!==void 0&&t-e.lastRefreshAt>Oe.STALE_AUTH_THRESHOLD_MS?{state:"expiring",reason:`Not refreshed in ${Math.floor((t-e.lastRefreshAt)/864e5)} days; codex may ask you to log in again.`}:e.accessExpiresAt!==void 0?{state:"expiring",reason:"Access token expired; codex refreshes it on next use."}:{state:"unknown",reason:"The stored credential carries no expiry."}}function lr(e){return(0,We.readLiveClaudeIdentity)()?.uuid===e}function ko(e){let t=(0,Oe.readAuthIdentityFromRaw)((0,je.readFileOrNull)(Ke.join((0,je.getSystemCodexHome)(),"auth.json")));return t?(0,Oe.identitiesMatch)(t,{email:e.email??e.metadata?.email,workspaceId:e.metadata?.workspaceId}):!1}function Tu(e){try{return JSON.parse(me.readFileSync((0,We.getClaudeCredentialBackupPath)(e),"utf8"))}catch{return null}}function Ro(e){if(lr(e))return(0,_o.readActiveCredentials)();let t=(0,_o.readClaudeCredentialStore)((0,We.getClaudeProfileHome)(e)),n=t.status==="ok"?t.blob:null,r=Tu(e),i=(0,ye.claudeCredentialFreshness)((0,ye.parseClaudeCredentialBlob)(n)),o=(0,ye.claudeCredentialFreshness)((0,ye.parseClaudeCredentialBlob)(r));return(0,ye.parseClaudeCredentialBlob)(r)&&o>i?r:(0,ye.parseClaudeCredentialBlob)(n)?n:null}function bo(e,t,n=!0){let r=Ro(e);if(!r)return null;let i=Kt("claude-code",e)?.source??(lr(e)?"live-sync":"migration");return n?Eo(e,r,i,t):ur(r,i,t)}function xo(e,t,n=!0){let r=(0,qt.listSavedAccountProfiles)("codex").find(l=>l.id===e),i=r!==void 0&&ko(r),o=(0,Ao.readCodexCredentialStore)(i?(0,je.getSystemCodexHome)():(0,je.getCodexProfileHome)(e)),a=i?null:(0,Ao.readCodexBackup)(e),s=o.status==="ok"?o.snapshot.authRaw:null;a?.status==="ok"&&(!s||(0,Oe.compareCodexAuthFreshness)(a.snapshot.authRaw,s)>0)&&(s=a.snapshot.authRaw);let c=Kt("codex",e)?.source??(i?"live-sync":"migration"),u=dr(s,c,t);return u&&n&&cr("codex",e,u),u}function Oo(e){let t=(0,We.getClaudeProfileHome)(e);return me.existsSync(Ke.join(t,".credentials.json"))||me.existsSync(Ke.join((0,We.getClaudeProfileDir)(e),"health.json"))||me.existsSync((0,We.getClaudeCredentialBackupPath)(e))||process.platform==="darwin"&&me.existsSync(Ke.join(t,".claude.json"))}function Lu(e){let t=(0,je.getCodexProfileHome)(e);return me.existsSync((0,je.getCodexBackupPath)(e))||me.existsSync((0,je.getCodexBackupPath)(e,!0))||me.existsSync(Ke.join(t,"auth.json"))||me.existsSync(Ke.join(t,".credentials.json"))}function Io(e,t,n={}){let r=n.now??Date.now(),i=n.probe??"cache",o=(0,qt.listSavedAccountProfiles)(e).find(l=>l.id===t),a=e==="codex"?o!==void 0&&ko(o):lr(t),s=null;i==="store"&&(s=e==="codex"?xo(t,r,n.persist):bo(t,r,n.persist)),s??=Kt(e,t),!s&&e==="codex"&&(s=xo(t,r,n.persist)),!s&&i==="auto"&&Oo(t)&&(s=bo(t,r,n.persist));let c={providerId:e,accountId:t,checkedAt:r,isLive:a};if(!s)return(e==="codex"?Lu(t):Oo(t))?{...c,state:"unknown",reason:"Credential health has not been recorded yet."}:{...c,state:"missing",reason:"No stored credentials; sign in again."};let u=e==="codex"?ju(s,r):Fu(s,r);return{...c,...u,accessExpiresAt:s.accessExpiresAt,refreshExpiresAt:s.refreshExpiresAt,refreshExpiryEstimated:s.refreshExpiryEstimated,lastRefreshAt:s.lastRefreshAt}}function Hu(e,t={}){let n={probe:"auto",...t},r=e?[e]:["claude-code","codex"],i=[];for(let o of r){let a=(0,qt.getActiveSavedAccount)(o);for(let s of(0,qt.listSavedAccountProfiles)(o))i.push({id:s.id,providerId:o,label:s.label,email:s.email??s.metadata?.email,planType:s.metadata?.planType,isActive:a?.id===s.id,health:Io(o,s.id,n),source:s.metadata?.origin==="live-sync"?"learned":"registered",addedAt:s.addedAt})}return i}function Nu(e){return(0,ye.parseClaudeCredentialBlob)(e)}});var hr=b(Z=>{"use strict";var Bu=Z&&Z.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),$u=Z&&Z.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Do=Z&&Z.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Bu(n,t,r[i]);return $u(n,t),n}})();Object.defineProperty(Z,"__esModule",{value:!0});Z.getLastSwitchPath=Wt;Z.readLastSwitch=Qu;Z.writeLastSwitch=Ju;Z.clearLastSwitch=Vu;Z.switchFailure=Gu;Z.finishSwitchResult=Yu;var Mo=Do(g("fs")),Uu=Do(g("path")),qu=g("crypto"),Ku=be(),Wu=ie();function zu(e){return e==="codex"?"codex":"claude"}function Wt(e){return Uu.join((0,Ku.getAccountsDir)(),zu(e),"last-switch.json")}function Qu(e){try{let t=JSON.parse(Mo.readFileSync(Wt(e),"utf8"));return t&&typeof t.token=="string"&&typeof t.to=="string"?t:null}catch{return null}}function Ju(e,t,n){let r={token:(0,qu.randomUUID)(),provider:e,from:t,to:n,at:new Date().toISOString()};return(0,Wu.atomicWriteJsonSync)(Wt(e),r),r}function Vu(e){try{Mo.rmSync(Wt(e),{force:!0})}catch{}}function Gu(e,t,n,r={}){return{success:!1,error:n,provider:e,accountId:t,previousAccountId:null,verified:!1,verification:"none",warnings:[],hints:[],runningConsumers:[],...r}}function Yu(e){let t=[...e.warnings,...e.runningConsumers.map(n=>n.reachability)];return{...e,warnings:t,warning:t.length?t.join(" "):void 0}}});var gr=b(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.emptyProviderSyncReport=Xu;function Xu(){return{warnings:[]}}});var yr=b(K=>{"use strict";var Zu=K&&K.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),ed=K&&K.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),td=K&&K.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Zu(n,t,r[i]);return ed(n,t),n}})();Object.defineProperty(K,"__esModule",{value:!0});K.ACCOUNT_CONSUMER_REACHABILITY=void 0;K.detectRunningAccountConsumers=ad;K.detectRunningAccountConsumersSync=sd;K.describeAccountConsumer=cd;K.findRunningProcessesSync=qo;K.findRunningProcesses=Ko;K.inspectRunningAccountConsumersSync=ud;K.inspectRunningAccountConsumers=dd;var jo=g("child_process"),Fo=td(g("path")),To=4e3,nd=/claude-code[\\/]cli\.js/,rd=/(?:@openai[\\/]codex|codex[\\/]bin)[\\/].*codex\.js/;function id(e){let t=[];for(let n of e.split(`
|
|
13
|
-
`)){let r=n.match(/^\s*(\d+)\s+(\S+)\s*(.*)$/);r&&t.push({pid:Number(r[1]),command:r[2],args:r[3]??""})}return t}function od(e){let t=[];for(let n of e.split(/\r?\n/)){let r=n.match(/^"([^"]+)","(\d+)"/);r&&t.push({pid:Number(r[2]),command:r[1],args:""})}return t}function Lo(e,t){let n=new Set(t),r=[];for(let i of e){if(!Number.isFinite(i.pid)||i.pid===process.pid)continue;let o=Fo.basename(i.command),a=i.args.trim().split(/\s+/)[0]??"",c=[o,o.replace(/\.exe$/i,""),Fo.basename(a)].find(u=>u&&n.has(u));!c&&n.has("claude")&&/^node(\.exe)?$/i.test(o)&&nd.test(i.args)&&(c="claude"),!c&&n.has("codex")&&/^node(\.exe)?$/i.test(o)&&rd.test(i.args)&&(c="codex"),!c&&n.has("Codex")&&/(?:^|[\\/])Codex\.app[\\/]/.test(i.command+" "+i.args)&&(c="Codex"),c&&r.push({pid:i.pid,name:c,command:i.command})}return r}function Ho(){return process.platform==="win32"?{command:"tasklist",args:["/FO","CSV","/NH"]}:{command:"ps",args:["-axo","pid=,comm=,args="]}}function No(e){return process.platform==="win32"?od(e):id(e)}function Bo(e){if(e.length===0)return{ok:!0,processes:[]};try{let{command:t,args:n}=Ho(),r=(0,jo.spawnSync)(t,n,{encoding:"utf8",maxBuffer:16*1024*1024,timeout:To,killSignal:"SIGKILL",windowsHide:!0});return r.error||r.status!==0?{ok:!1,processes:[]}:{ok:!0,processes:Lo(No(String(r.stdout??"")),e)}}catch{return{ok:!1,processes:[]}}}function $o(e){return e.length===0?Promise.resolve({ok:!0,processes:[]}):new Promise(t=>{try{let{command:n,args:r}=Ho();(0,jo.execFile)(n,r,{encoding:"utf8",timeout:To,killSignal:"SIGKILL",windowsHide:!0,maxBuffer:16*1024*1024},(i,o)=>{t({ok:!i,processes:i?[]:Lo(No(String(o??"")),e)})})}catch{t({ok:!1,processes:[]})}})}var wt={"claude-cli":"claude","claude-desktop":"Claude","codex-cli":"codex","codex-app":"Codex"};K.ACCOUNT_CONSUMER_REACHABILITY={"claude-cli":{switched:!0,reachability:"Running claude sessions keep the previous account until restarted; a running session can rotate the refresh token of the account you just left."},"claude-desktop":{switched:!1,reachability:"Claude Desktop is not switched by sidekick (it keeps its own web session) and its embedded engine can rotate the shared CLI token."},"codex-cli":{switched:!0,reachability:"Running codex sessions keep the previous account until restarted."},"codex-app":{switched:!0,reachability:"The Codex app shares the CLI login; restart it to pick up the switch. While running it can refresh and rotate the live token."},"vscode-extension-host":{switched:!0,reachability:"The Claude Code extension host keeps the previous account until the window reloads."}};function Uo(e,t){return{kind:e,pids:t,...K.ACCOUNT_CONSUMER_REACHABILITY[e]}}function zt(e,t){let n=[];for(let r of t){let i=e.filter(o=>o.name===wt[r]).map(o=>o.pid);i.length>0&&n.push(Uo(r,i))}return n}function Qt(e){return e==="claude-code"?["claude-cli","claude-desktop"]:e==="codex"?["codex-cli","codex-app"]:["claude-cli","claude-desktop","codex-cli","codex-app"]}async function ad(e){let t=Qt(e),n=await Ko(t.map(r=>wt[r]));return zt(n,t)}function sd(e){let t=Qt(e),n=qo(t.map(r=>wt[r]));return zt(n,t)}function cd(e,t=[]){return Uo(e,t)}function qo(e){return Bo(e).processes}async function Ko(e){return(await $o(e)).processes}function ud(e){let t=Qt(e),n=Bo(t.map(r=>wt[r]));return{ok:n.ok,consumers:zt(n.processes,t)}}async function dd(e){let t=Qt(e),n=await $o(t.map(r=>wt[r]));return{ok:n.ok,consumers:zt(n.processes,t)}}});var ra=b(A=>{"use strict";var ld=A&&A.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),fd=A&&A.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),zo=A&&A.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&ld(n,t,r[i]);return fd(n,t),n}})();Object.defineProperty(A,"__esModule",{value:!0});A.storeClaudeProfileIdentity=Go;A.storeClaudeProfileCredentialsUnlocked=Sr;A.storeClaudeProfileCredentials=md;A.readStoredClaudeAccount=At;A.readAccountRegistry=vd;A.writeAccountRegistry=Sd;A.readActiveClaudeAccount=Ce;A.addCurrentAccount=_d;A.withClaudeAuthSwapLock=pe;A.syncClaudeLiveStateUnlocked=Pr;A.syncClaudeLiveState=Od;A.cleanupAbandonedClaudeLogins=Ed;A.getClaudeKeepAliveBlocker=kd;A.beginClaudeKeepAlive=Rd;A.finishClaudeKeepAlive=Id;A.restoreClaudeProfileFromBackup=Dd;A.switchToAccount=Md;A.switchToAccountAsync=Fd;A.applyClaudeProfileToLiveHome=ta;A.resolveActiveClaudeHome=Ld;A.applyActiveClaudeToLiveHome=Hd;A.reconcileClaudeAuthState=Nd;A.removeAccount=Bd;A.listAccounts=$d;A.getActiveAccount=na;A.resolveActiveClaudeAccount=Ud;A.isMultiAccountEnabled=qd;var Y=zo(g("fs")),z=zo(g("path")),P=Hn(),at=ie(),_=be(),C=et(),m=Nt(),hd=Zi(),_t=ro(),Cr=Xn(),he=fr(),se=hr(),pd=gr(),Qo=yr();function gd(){return z.join((0,_.getAccountsDir)(),"credentials")}function Vt(){return z.join((0,_.getAccountsDir)(),"configs")}function yd(){return z.join((0,_.getAccountsDir)(),"claude",".profiles-migrated-v1")}function vr(){return z.join((0,_.getAccountsDir)(),"claude","switch-journal.json")}function Jo(){for(let e of[(0,_.getAccountsDir)(),gd(),Vt()])Y.mkdirSync(e,{recursive:!0,mode:448})}function st(e){try{return JSON.parse(Y.readFileSync(e,"utf8"))}catch{return null}}function Vo(e){return st(e)?.oauthAccount??null}function Qe(e){return(0,C.readLiveClaudeIdentity)()?.uuid===e}function Go(e,t){(0,at.atomicWriteJsonSync)(z.join((0,C.getClaudeProfileHome)(e),".claude.json"),{oauthAccount:t});try{(0,at.atomicWriteJsonSync)(z.join(Vt(),`${e}.config.json`),t)}catch{}}function Pe(e){return st((0,C.getClaudeCredentialBackupPath)(e))}function Te(e,t){let n=(0,C.getClaudeCredentialBackupPath)(e);if((0,at.atomicWriteJsonSync)(n,t),JSON.stringify(st(n))!==JSON.stringify(t))throw new Error(`The credential backup for ${e} did not verify after writing.`)}function mr(e,t){let n=(0,m.parseClaudeCredentialBlob)(e),r=(0,m.parseClaudeCredentialBlob)(t);return n?r&&(0,m.claudeCredentialFreshness)(r)>(0,m.claudeCredentialFreshness)(n)?t:e:r?t:null}function Sr(e,t,n){let r=(0,m.claudeLoginOnly)(t);if(!r||!(0,m.parseClaudeCredentialBlob)(r))throw new Error("Refusing to store something that is not a Claude login.");Te(e,t),Qe(e)||(0,P.writeActiveCredentials)(r,(0,C.getClaudeProfileHome)(e)),(0,he.writeClaudeHealthSidecar)(e,t,n)}function md(e,t,n){pe(()=>Sr(e,t,n))}function wr(e,t,n,r){Go(e,n),Sr(e,t,r)}function _r(e){return st(z.join(Vt(),`${e}.config.json`))}function Ar(e){return Vo(z.join((0,C.getClaudeProfileHome)(e),".claude.json"))}function At(e){let t=(0,P.readClaudeCredentialStore)((0,C.getClaudeProfileHome)(e)),n=mr(t.status==="ok"?t.blob:null,Pe(e)),r=Ar(e)??_r(e);return n&&r?{credentials:n,oauthAccount:r}:null}function Yo(){return Vo((0,C.getClaudeConfigPath)())}function br(e){let t={},n=(0,C.getClaudeConfigPath)();try{t=JSON.parse(Y.readFileSync(n,"utf8"))}catch{}t.oauthAccount=e,(0,at.atomicWriteJsonSync)(n,t)}function Cd(e){return e.status==="ok"?{status:"ok",blob:e.blob}:{status:e.status}}function Jt(e,t,n,r){let i=Cd(r.live),o=(0,hd.decideLiveClaudeWrite)({intent:n,live:i,liveAccountUuid:r.liveAccountUuid,candidate:e,candidateAccountUuid:t,capturedOutgoing:r.capturedOutgoing,written:r.written});if(!o.allow)return{ok:!1,code:o.code,reason:o.reason,wrote:!1};let a=n==="rollback"?e:(0,m.mergeClaudeLoginIntoLive)(i.status==="ok"?i.blob:null,e);try{(0,P.writeLiveClaudeCredentialStoreUnguarded)(a)}catch(s){return{ok:!1,code:"write-failed",reason:`${s}`,wrote:!0,attempted:a}}return{ok:!0,installed:a}}function vd(){let e=(0,_.readSavedAccountRegistry)();if(!e)return null;let t=e.accounts.filter(n=>n.providerId==="claude-code").map(n=>({uuid:n.providerAccountId??n.id,email:n.email??n.metadata?.email??"unknown",label:n.label,addedAt:n.addedAt}));return{version:1,activeAccountUuid:e.activeByProvider["claude-code"],accounts:t}}function Sd(e){(0,_.replaceSavedAccountProfiles)("claude-code",wd(e),e.activeAccountUuid)}function wd(e){let t=new Map((0,_.listSavedAccountProfiles)("claude-code").map(n=>[n.providerAccountId??n.id,n]));return e.accounts.map(n=>({id:n.uuid,providerId:"claude-code",providerAccountId:n.uuid,email:n.email,label:n.label,addedAt:n.addedAt,metadata:{...t.get(n.uuid)?.metadata,email:n.email}}))}function Ce(){return(0,C.readLiveClaudeIdentity)()}function Gt(e){return(0,_.listSavedAccountProfiles)("claude-code").find(t=>(t.providerAccountId??t.id)===e)??null}function xr(e){let t=(0,_.listSavedAccountProfiles)("claude-code");return t.find(n=>(n.providerAccountId??n.id)===e.uuid)??t.find(n=>(n.email??n.metadata?.email)===e.email)??null}function ze(e){return e.providerAccountId??e.id}function _d(e){let t=Ce();if(!t)return{success:!1,error:"No active Claude account found. Sign in with `claude` first."};let n=(0,P.readActiveCredentials)();if(!n)return{success:!1,error:"Could not read Claude credentials."};let r=Yo();if(!r)return{success:!1,error:"Could not read Claude config file."};Jo();try{pe(()=>wr(t.uuid,n,r,"login"))}catch(i){return{success:!1,error:`Failed to back up Claude credentials: ${i}`}}return(0,_.withSavedAccountRegistryLock)(()=>{let i=Gt(t.uuid),o=i?.id??t.uuid;return(0,_.upsertSavedAccountProfileUnlocked)({id:o,providerId:"claude-code",providerAccountId:t.uuid,email:t.email,label:e!==void 0?e||void 0:i?.label,addedAt:i?.addedAt??new Date().toISOString(),metadata:{...i?.metadata,email:t.email,origin:i?.metadata?.origin??"manual"}}),(0,_.setActiveSavedAccountUnlocked)("claude-code",o),{success:!0}})}function pe(e){let t=z.join((0,_.getAccountsDir)(),"claude");return Y.mkdirSync(t,{recursive:!0,mode:448}),(0,at.withFileLockSync)(z.join(t,"auth-swap.lock"),e)}function Ad(){let e=st(vr());return e&&typeof e.to=="string"?e:null}function Wo(e){(0,at.atomicWriteJsonSync)(vr(),e)}function ot(){try{Y.rmSync(vr(),{force:!0})}catch{}}function Or(e,t){let n=(0,m.claudeLoginOnly)(t);!n||Qe(e)||(0,P.writeActiveCredentials)(n,(0,C.getClaudeProfileHome)(e))}function bd(e){let t=Ad();if(!t)return;let n=(0,P.readClaudeCredentialStore)();if(n.status==="error"){e.warnings.push("An interrupted account switch is pending; the live login could not be read yet.");return}let r=n.status==="ok"?(0,m.claudeRefreshFingerprint)((0,m.parseClaudeCredentialBlob)(n.blob)):null;if(r!==null&&r===t.toFp){let i=Ar(t.to)??_r(t.to);try{if(i&&(0,C.readLiveClaudeIdentity)()?.uuid!==t.to&&br(i),t.from){let a=Pe(t.from);(0,m.claudeRefreshFingerprint)((0,m.parseClaudeCredentialBlob)(a))===t.fromFp&&Or(t.from,a)}(0,P.deleteStoredCredentials)((0,C.getClaudeProfileHome)(t.to));let o=Gt(t.to);o&&(0,_.setActiveSavedAccount)("claude-code",o.id,{silent:!0}),e.journal="finished"}catch(o){e.warnings.push(`Could not finish an interrupted account switch: ${o}`);return}}else r===t.fromFp?e.journal="rolled-back":(e.journal="cleared",e.warnings.push("An interrupted account switch was found, but the live login matches neither side; it was left as is."));ot()}function Xo(e,t){return(0,_.listSavedAccountProfiles)("claude-code").find(n=>ze(n)!==t&&(0,he.readHealthSidecar)("claude-code",n.id)?.refreshFp===e)??null}function xd(e,t){let n=(0,C.getClaudeProfileHome)(e),r=(0,P.readClaudeCredentialStore)(n);if(r.status!=="absent"){if(r.status==="error"){t.warnings.push("The live account's profile copy could not be read; it was left in place.");return}try{(0,_t.withClaudeRefreshLocksSync)([(0,C.getLiveClaudeHome)(),n],()=>{let i=(0,P.readClaudeCredentialStore)(),o=(0,P.readClaudeCredentialStore)(n);if(i.status==="error"||o.status==="error"){t.warnings.push("A credential store could not be read; the profile copy was left in place.");return}if(o.status==="absent")return;let a=i.status==="ok"?(0,m.parseClaudeCredentialBlob)(i.blob):null,s=o.status==="ok"?o.blob:null,c=(0,m.parseClaudeCredentialBlob)(s);if(c&&(0,m.claudeRefreshFingerprint)(c)!==(0,m.claudeRefreshFingerprint)(a)&&(0,m.claudeCredentialFreshness)(c)>(0,m.claudeCredentialFreshness)(a)){let u=Jt(s,e,"repair",{live:i,liveAccountUuid:e});if(u.ok)Te(e,u.installed),(0,he.writeClaudeHealthSidecar)(e,u.installed,"live-sync"),t.repaired=e;else if(Te(e,mr(Pe(e),s)),t.warnings.push(`The live Claude login looks older than its saved copy and could not be repaired (${u.reason}).`),u.wrote)return}else a&&i.status==="ok"&&Te(e,mr(Pe(e),i.blob));(0,P.deleteStoredCredentials)(n)?t.demoted=e:t.warnings.push("The live account's profile copy could not be removed.")})}catch(i){i instanceof _t.ClaudeRefreshLockBusyError?t.warnings.push("Claude Code was refreshing; the live account's profile copy is removed on the next sync."):t.warnings.push(`Could not remove the live account's profile copy: ${i}`)}}}function Pr(e="live-sync"){let t=(0,pd.emptyProviderSyncReport)();if((0,C.isLiveClaudeHomeSidekickProfile)())return t.skipped="managed-home",t.warnings.push("Unset CLAUDE_CONFIG_DIR before syncing; it points at a sidekick profile home."),t;try{bd(t);let n=Ce();if(!n)return t.skipped="logged-out",t;let r=xr(n);r?r.email!==n.email&&n.email&&(r={...r,email:n.email,metadata:{...r.metadata,email:n.email}},(0,_.upsertSavedAccountProfile)(r)):(r={id:n.uuid,providerId:"claude-code",providerAccountId:n.uuid,email:n.email,label:n.email,addedAt:new Date().toISOString(),metadata:{email:n.email,origin:"live-sync"}},Jo(),(0,_.upsertSavedAccountProfile)(r),t.registered={id:r.id,email:n.email});let i=ze(r),o=(0,P.readClaudeCredentialStore)();if(o.status==="error")t.warnings.push("The live Claude credential store could not be read.");else if(o.status==="corrupt")t.warnings.push("The live Claude credential store is unreadable (not valid JSON); sign in again with `claude`.");else if(o.status==="ok"){let s=(0,m.parseClaudeCredentialBlob)(o.blob),c=(0,m.claudeRefreshFingerprint)(s),u=c?Xo(c,i):null;if(u)t.warnings.push(`The live credential belongs to ${u.label??u.email??u.id}, not ${n.email}; nothing was folded.`);else if(s){let l=(0,m.parseClaudeCredentialBlob)(Pe(i)),p=(0,m.claudeCredentialFreshness)(s),S=(0,m.claudeCredentialFreshness)(l);if(!l||p>S||p===S&&((0,m.claudeRefreshFingerprint)(l)!==c||!Y.existsSync(z.join((0,C.getClaudeProfileHome)(i),".claude.json"))))try{wr(i,o.blob,Yo()??{emailAddress:n.email,accountUuid:n.uuid},e),t.folded=r.id}catch(k){t.warnings.push(`Could not back up the live Claude credentials: ${k}`)}xd(i,t)}}let a=(0,_.getActiveSavedAccount)("claude-code");(!a||a.id!==r.id)&&((0,_.setActiveSavedAccount)("claude-code",r.id,{silent:!0}),t.repointed=r.id)}catch(n){t.warnings.push(`Claude account sync failed: ${n}`)}return t}function Od(e="live-sync"){try{return pe(()=>Pr(e))}catch(t){return{warnings:[`Could not acquire the account-switch lock: ${t}`]}}}var Pd=1440*60*1e3;function Ed(e=360*60*1e3,t=Date.now()){let n=[],r=[];try{r=Y.readdirSync((0,C.getClaudeProfilesDir)())}catch{return n}let i=new Set((0,_.listSavedAccountProfiles)("claude-code").map(o=>o.id));for(let o of r){if(i.has(o))continue;let a=(0,C.getClaudeProfileDir)(o),s=z.join(a,"profile.json"),c=st(s);if(!c)continue;let u=(0,C.getClaudeProfileHome)(o),l=(0,C.isClaudeProfileAuthenticated)(u)?Math.max(e,Pd):e,p=c.addedAt?Date.parse(c.addedAt):NaN;if(!((Number.isNaN(p)?Number.POSITIVE_INFINITY:t-p)<l))try{(0,P.deleteStoredCredentials)(u),Y.rmSync(a,{recursive:!0,force:!0}),n.push(o)}catch{}}return n}function Zo(e){let t=ze(e);if(Qe(t))return"live account; the CLI refreshes it in normal use";let n=(0,P.readClaudeCredentialStore)((0,C.getClaudeProfileHome)(t));if(n.status==="error")return"its saved login could not be read";let r=n.status==="ok"?(0,m.parseClaudeCredentialBlob)(n.blob):null;if(!r)return"no profile copy to refresh (keep-alive never restores backups)";let i=(0,P.readClaudeCredentialStore)();if(i.status==="error")return"the live login could not be read";let o=i.status==="ok"?(0,m.parseClaudeCredentialBlob)(i.blob):null;if(o&&(0,m.claudeRefreshFingerprint)(o)===(0,m.claudeRefreshFingerprint)(r))return"same refresh token as the live login";if((0,he.readHealthSidecar)("claude-code",e.id)?.source==="live-sync")return"copied from the live login; waits for a switch away from it";let a=(0,m.parseClaudeCredentialBlob)(Pe(t));return(0,m.claudeCredentialFreshness)(a)>(0,m.claudeCredentialFreshness)(r)?"its saved backup is newer than the profile copy":null}function Yt(e){return(0,_.listSavedAccountProfiles)("claude-code").find(t=>t.id===e)??null}function kd(e){try{return pe(()=>{let t=Yt(e);return t?Zo(t):"account not found"})}catch(t){return`could not acquire the account-switch lock: ${t}`}}function Rd(e,t){try{return pe(()=>{let n=Yt(e);if(!n)return{ok:!1,reason:"account not found"};let r=Zo(n);return r?{ok:!1,reason:r}:(0,Cr.acquireAccountLease)("claude-code",e,t)?{ok:!0}:{ok:!1,reason:"another keep-alive run holds this account"}})}catch(n){return{ok:!1,reason:`could not acquire the account-switch lock: ${n}`}}}function Id(e){try{pe(()=>{let t=Yt(e);if(!t)return;let n=ze(t);if(Qe(n))return;let r=(0,P.readClaudeCredentialStore)((0,C.getClaudeProfileHome)(n));if(r.status!=="ok")return;let i=Pe(n),o=(0,m.parseClaudeCredentialBlob)(r.blob);if(o&&(0,m.claudeCredentialFreshness)(o)>(0,m.claudeCredentialFreshness)((0,m.parseClaudeCredentialBlob)(i))){let a=(0,m.mergeClaudeLoginIntoLive)(i,r.blob);Te(n,a),(0,he.writeClaudeHealthSidecar)(t.id,a,"keepalive")}})}catch{}finally{(0,Cr.releaseAccountLease)("claude-code",e)}}function Dd(e){try{return pe(()=>{let t=Yt(e);if(!t)return"none";let n=ze(t);if(Qe(n))return"live";let r=(0,P.readClaudeCredentialStore)((0,C.getClaudeProfileHome)(n));if(r.status!=="absent")return r.status==="ok"?"present":"none";let i=Pe(n);return(0,m.parseClaudeCredentialBlob)(i)?(Or(n,i),"restored"):"none"})}catch{return"none"}}function Md(e,t={}){let n=(0,Qo.detectRunningAccountConsumersSync)("claude-code");return ea(e,t,n)}async function Fd(e,t={}){let n=await(0,Qo.detectRunningAccountConsumers)("claude-code");return ea(e,t,n)}function ea(e,t,n){try{return pe(()=>jd(e,t,n))}catch(r){return(0,se.switchFailure)("claude-code",e,`Could not acquire the account-switch lock: ${r}`)}}function jd(e,t,n){let r=Gt(e);if(!r)return(0,se.switchFailure)("claude-code",e,`Account ${e} not found in registry.`);let i=r.label??r.email??e;if((0,C.isLiveClaudeHomeSidekickProfile)())return(0,se.switchFailure)("claude-code",e,`CLAUDE_CONFIG_DIR points at a sidekick profile home (${z.resolve((0,C.getLiveClaudeHome)())}); unset it before switching accounts.`);let o=Pr("live-sync"),a=(0,_.getActiveSavedAccount)("claude-code")?.id??null,s={success:!0,provider:"claude-code",accountId:r.id,previousAccountId:a,verified:!1,verification:"none",warnings:[...o.warnings],hints:[],runningConsumers:n,email:r.email};if(Ce()?.uuid===e)return a!==r.id&&(0,_.setActiveSavedAccount)("claude-code",r.id),(0,se.finishSwitchResult)({...s,alreadyActive:!0,verified:!0,verification:"store",health:(0,he.getAccountHealth)("claude-code",r.id),hints:[`${i} is already the active Claude account.`]});if(!At(e))return(0,se.finishSwitchResult)({...s,success:!1,needsLogin:!0,error:`Stored credentials for "${i}" not found; sign in again.`});let u=(0,he.getAccountHealth)("claude-code",r.id,{probe:"store"});if(s.health=u,(u.state==="expired"||u.state==="missing")&&!t.force)return(0,se.finishSwitchResult)({...s,success:!1,needsLogin:!0,error:`Stored credentials for "${i}" have ${u.state==="missing"?"not been saved":"expired"}; sign in again.`});if(u.state==="expiring"&&u.reason&&s.warnings.push(`"${i}": ${u.reason}`),!t.force&&(0,Cr.isAccountLeaseHeld)("claude-code",r.id))return(0,se.finishSwitchResult)({...s,success:!1,error:`Keep-alive is refreshing "${i}" right now; try again in a few seconds.`});try{return(0,_t.withClaudeRefreshLocksSync)([(0,C.getLiveClaudeHome)(),(0,C.getClaudeProfileHome)(e)],()=>Td(r,i,s,a))}catch(l){return(0,se.finishSwitchResult)({...s,success:!1,error:l instanceof _t.ClaudeRefreshLockBusyError?`${l.message} Nothing was changed.`:`The switch failed before anything was changed: ${l}`})}}function Td(e,t,n,r){let i=ze(e),o=(D,ue={})=>(0,se.finishSwitchResult)({...n,success:!1,error:D,...ue}),a=At(i),s=(0,m.parseClaudeCredentialBlob)(a?.credentials);if(!a||!s)return o(`Stored credentials for "${t}" not found; sign in again.`,{needsLogin:!0});let c=(0,P.readClaudeCredentialStore)();if(c.status==="error")return o("The live Claude login could not be read, so nothing was changed. Try again.");let u=Ce(),l=u?xr(u):null,p=l?ze(l):null,S=c.status==="ok"?(0,m.parseClaudeCredentialBlob)(c.blob):null;if(p===i)return(0,se.finishSwitchResult)({...n,alreadyActive:!0,verified:!0,verification:"store",health:(0,he.getAccountHealth)("claude-code",e.id),hints:[`${t} is already the active Claude account.`]});let x=(0,m.claudeRefreshFingerprint)(S),k=x&&p?Xo(x,p):null;if(k)return o(`The live credential belongs to ${k.label??k.email??k.id}, but the live identity says ${u?.email}; run \`claude\` once (or sign in again) and retry. Nothing was changed.`);let ce=!1,Re=D=>{if(!p)return"The live login has no account identity to save it under; run `claude` once and retry.";try{return Te(p,D),null}catch(ue){return`The outgoing login could not be saved, so nothing was changed: ${ue}`}};if(S&&c.status==="ok"){let D=Re(c.blob);if(D)return o(D);ce=!0}let we=(0,m.claudeRefreshFingerprint)(S),_e=(0,m.claudeRefreshFingerprint)(s);Wo({from:p,to:i,fromFp:we,toFp:_e,at:new Date().toISOString()});let $=(0,P.readClaudeCredentialStore)();if($.status==="error")return ot(),o("The live Claude login could not be re-read, so nothing was changed. Try again.");let Ie=$.status==="ok"?(0,m.parseClaudeCredentialBlob)($.blob):null;if((0,m.claudeRefreshFingerprint)(Ie)!==we&&$.status==="ok"&&Ie){let D=Re($.blob);if(D)return ot(),o(D);ce=!0,c=$,S=Ie,Wo({from:p,to:i,fromFp:(0,m.claudeRefreshFingerprint)(S),toFp:_e,at:new Date().toISOString()})}let Ge=null;try{Ge=Y.readFileSync((0,C.getClaudeConfigPath)(),"utf8")}catch{}let ne=Jt(a.credentials,i,"switch",{live:c,liveAccountUuid:u?.uuid??null,capturedOutgoing:ce}),re=D=>{let ue=c.status==="ok";if(c.status==="ok"){let fn=(0,P.readClaudeCredentialStore)();fn.status==="ok"&&JSON.stringify(fn.blob)===JSON.stringify(c.blob)||(ue=Jt(c.blob,p??i,"rollback",{live:fn,liveAccountUuid:Ce()?.uuid??null,written:D}).ok)}if(Ge!==null)try{Y.writeFileSync((0,C.getClaudeConfigPath)(),Ge)}catch{ue=!1}try{(0,_.setActiveSavedAccount)("claude-code",r,{silent:!0})}catch{}return ot(),ue},Ae=D=>D?"the previous login was restored.":ce?"the previous login could not be restored automatically; it is saved, run `sidekick accounts doctor`.":"the live store held no usable login before the switch; run `sidekick accounts doctor`.";if(!ne.ok){if(!ne.wrote)return ot(),o(ne.reason);let D=re(ne.attempted);return o(`Failed to write Claude credentials (${ne.reason}); ${Ae(D)}`)}try{br(a.oauthAccount)}catch(D){let ue=re(ne.installed);return o(`Failed to write the Claude identity (${D}); ${Ae(ue)}`)}let ei=(0,P.readClaudeCredentialStore)(void 0,{keychainOnly:!0}),ti=ei.status==="ok"?(0,m.parseClaudeCredentialBlob)(ei.blob):null;if(!(ti!==null&&ti.accessToken===s.accessToken&&Ce()?.uuid===i)){let D=re(ne.installed);return o(`The live Claude credential store did not reflect the switch to "${t}"; ${Ae(D)}`,{verification:"failed"})}try{(0,_.setActiveSavedAccount)("claude-code",e.id)}catch(D){let ue=re(ne.installed);return o(`Failed to update account registry (${D}); ${Ae(ue)}`)}if(p&&ce&&c.status==="ok")try{Or(p,c.blob),(0,he.writeClaudeHealthSidecar)(p,c.blob,"switch")}catch(D){n.warnings.push(`The previous login is saved, but its profile copy could not be written yet (${D}).`)}try{Te(i,ne.installed),(0,he.writeClaudeHealthSidecar)(i,ne.installed,"switch")}catch{}(0,P.deleteStoredCredentials)((0,C.getClaudeProfileHome)(i))||n.warnings.push(`"${t}"'s profile copy could not be removed; the next sync retries.`),ot();let ni;try{ni=(0,se.writeLastSwitch)("claude-code",r,e.id).token}catch{n.warnings.push("The switch succeeded but could not be recorded for undo.")}return(0,se.finishSwitchResult)({...n,verified:!0,verification:"store",undoToken:ni,hints:[`New claude sessions use ${e.email??t}.`]})}function ta(e){if((0,C.isLiveClaudeHomeSidekickProfile)())return{success:!1,error:`CLAUDE_CONFIG_DIR points at a sidekick profile home (${z.resolve((0,C.getLiveClaudeHome)())}); the login was saved, but unset it before making the account live.`};try{return pe(()=>{let t=At(e);if(!t)return{success:!1,error:`Stored credentials for ${e} not found.`};let n=(0,C.getClaudeProfileHome)(e);return(0,_t.withClaudeRefreshLocksSync)([(0,C.getLiveClaudeHome)(),n],()=>{let r=(0,P.readClaudeCredentialStore)(),i=Ce()?.uuid??null,o=Jt(t.credentials,e,"relogin",{live:r,liveAccountUuid:i});return o.ok?(br(t.oauthAccount),Te(e,o.installed),(0,he.writeClaudeHealthSidecar)(e,o.installed,"login"),(0,P.deleteStoredCredentials)(n),{success:!0}):o.code==="not-newer"?{success:!0,warning:o.reason}:{success:!1,error:`Could not install the refreshed credentials: ${o.reason}`}})})}catch(t){return{success:!1,error:`Could not install the refreshed credentials: ${t}`}}}function Ld(){let e=(0,_.getActiveSavedAccount)("claude-code");if(!e)return(0,C.getLiveClaudeHome)();let t=e.providerAccountId??e.id;return Qe(t)?(0,C.getLiveClaudeHome)():(0,C.getClaudeProfileHome)(t)}function Hd(){let e=(0,_.getActiveSavedAccount)("claude-code");if(!e)return{success:!1,error:"No active Claude account found."};let t=e.providerAccountId??e.id,n=Ce()?.uuid;return n&&n!==t?{success:!1,error:"The live Claude login belongs to another account; use switchToAccount() to change accounts."}:At(t)?ta(t):{success:!1,error:`Stored credentials for ${e.email??t} not found.`}}function Nd(){try{let e=yd();if(Y.existsSync(e))return;let t=(0,_.readSavedAccountRegistry)();if(t)for(let n of t.accounts.filter(r=>r.providerId==="claude-code"))try{let r=n.providerAccountId??n.id;if(Qe(r)||(0,P.readActiveCredentials)((0,C.getClaudeProfileHome)(r))&&Ar(r))continue;let i=Pe(r),o=_r(r);if(!i||!o)continue;pe(()=>wr(r,i,o,"migration"))}catch{}Y.mkdirSync(z.dirname(e),{recursive:!0,mode:448}),Y.writeFileSync(e,new Date().toISOString()+`
|
|
14
|
-
`,{encoding:"utf8",mode:384})}catch{}}function Bd(e){return(0,_.withSavedAccountRegistryLock)(()=>{let t=Gt(e);if(!t)return{success:!1,error:`Account ${e} not found.`};for(let n of[(0,C.getClaudeCredentialBackupPath)(e),z.join(Vt(),`${e}.config.json`)])try{Y.unlinkSync(n)}catch{}try{(0,P.deleteStoredCredentials)((0,C.getClaudeProfileHome)(e)),Y.rmSync((0,C.getClaudeProfileDir)(t.id),{recursive:!0,force:!0})}catch{}return(0,_.removeSavedAccountProfileUnlocked)("claude-code",t.id),{success:!0}})}function $d(){return(0,_.listSavedAccountProfiles)("claude-code").map(e=>({uuid:e.providerAccountId??e.id,email:e.email??e.metadata?.email??"unknown",label:e.label,addedAt:e.addedAt}))}function na(){let e=(0,_.getActiveSavedAccount)("claude-code");return e?{uuid:e.providerAccountId??e.id,email:e.email??e.metadata?.email??"unknown",label:e.label,addedAt:e.addedAt}:null}function Ud(e={}){let t=e.selfHeal??!0,n=Ce();if(n){let i=xr(n);if(i){let o=(0,_.getActiveSavedAccount)("claude-code");if(t&&(!o||o.id!==i.id))try{(0,_.setActiveSavedAccount)("claude-code",i.id,{silent:!0})}catch{}}return{email:n.email,label:i?.label,providerAccountId:n.uuid,registryAccountId:i?.id,source:"live"}}let r=na();return r?{email:r.email,label:r.label,providerAccountId:r.uuid,registryAccountId:r.uuid,source:"registry"}:{source:"none"}}function qd(){return(0,_.listSavedAccountProfiles)("claude-code").length>=1}});var Ot=b(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.QUOTA_AGING_MAX_AGE_MS=F.QUOTA_FRESH_MAX_AGE_MS=F.SEVEN_DAY_WINDOW_MS=F.FIVE_HOUR_WINDOW_MS=F.QUOTA_PROVIDER_IDS=void 0;F.classifyQuotaFreshness=Jd;F.formatQuotaAge=Vd;F.projectQuotaWindow=xt;F.withQuotaProjections=Gd;F.fetchQuota=Xd;var Kd=Sn();Object.defineProperty(F,"QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return Kd.QUOTA_PROVIDER_IDS}});var Wd="https://api.anthropic.com/api/oauth/usage",zd="oauth-2025-04-20",Qd=1e4;F.FIVE_HOUR_WINDOW_MS=5*36e5;F.SEVEN_DAY_WINDOW_MS=7*864e5;F.QUOTA_FRESH_MAX_AGE_MS=5*6e4;F.QUOTA_AGING_MAX_AGE_MS=60*6e4;function Jd(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"stale":e<F.QUOTA_FRESH_MAX_AGE_MS?"fresh":e<F.QUOTA_AGING_MAX_AGE_MS?"aging":"stale"}function Vd(e){if(typeof e!="number"||!Number.isFinite(e)||e<0)return"age unknown";let t=Math.floor(e/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let n=Math.floor(t/60);return n<48?`${n}h ago`:`${Math.floor(n/24)}d ago`}function xt(e){let{utilization:t,resetsAt:n,windowMs:r,capturedAt:i}=e;if(!n||t<=0||!Number.isFinite(t)||r<=0)return;let o=new Date(n).getTime();if(!Number.isFinite(o))return;let a=i?Date.parse(i):NaN,s=Number.isFinite(a)?a:Date.now(),c=r-(o-s);if(!(c<=0))return Math.min(Math.round(t*(r/c)),200)}function Gd(e,t={}){if(!e.available)return e;let n={...e},r=t.capturedAt??e.capturedAt;if(n.projectedFiveHour==null){let i=xt({utilization:n.fiveHour.utilization,resetsAt:n.fiveHour.resetsAt,windowMs:t.fiveHourWindowMs??F.FIVE_HOUR_WINDOW_MS,capturedAt:r});i!==void 0&&(n.projectedFiveHour=i)}if(n.projectedSevenDay==null){let i=xt({utilization:n.sevenDay.utilization,resetsAt:n.sevenDay.resetsAt,windowMs:t.sevenDayWindowMs??F.SEVEN_DAY_WINDOW_MS,capturedAt:r});i!==void 0&&(n.projectedSevenDay=i)}return n}function bt(e,t={}){return{fiveHour:{utilization:0,resetsAt:""},sevenDay:{utilization:0,resetsAt:""},available:!1,error:e,...t}}function Yd(e){if(!e)return;let t=Number(e);if(Number.isFinite(t)&&t>=0)return Math.round(t*1e3);let n=Date.parse(e);if(!Number.isNaN(n))return Math.max(n-Date.now(),0)}async function Xd(e,t={}){let n=new AbortController,r=setTimeout(()=>n.abort(),Qd);r.unref();try{let o=await(t.fetchImpl??fetch)(Wd,{method:"GET",signal:n.signal,headers:{Authorization:`Bearer ${e}`,"anthropic-beta":zd,"Content-Type":"application/json"}});if(!o.ok)return o.status===401?bt("Sign in to Claude Code to view quota",{failureKind:"auth",httpStatus:o.status}):o.status===429?bt(`API error: ${o.status}`,{failureKind:"rate_limit",httpStatus:o.status,retryAfterMs:Yd(o.headers.get("retry-after"))}):o.status>=500&&o.status<=599?bt(`API error: ${o.status}`,{failureKind:"server",httpStatus:o.status}):bt(`API error: ${o.status}`,{failureKind:"unknown",httpStatus:o.status});let a=await o.json(),s=a.five_hour?.utilization??0,c=a.seven_day?.utilization??0,u=a.five_hour?.resets_at??"",l=a.seven_day?.resets_at??"";return{fiveHour:{utilization:s,resetsAt:u},sevenDay:{utilization:c,resetsAt:l},available:!0,projectedFiveHour:xt({utilization:s,resetsAt:u,windowMs:F.FIVE_HOUR_WINDOW_MS}),projectedSevenDay:xt({utilization:c,resetsAt:l,windowMs:F.SEVEN_DAY_WINDOW_MS})}}catch{return bt("Network error",{failureKind:"network"})}finally{clearTimeout(r)}}});var ia=b(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.isAggregateCodexLimit=Zd;function Zd(e){return!e||e==="codex"}});var Zt=b(ve=>{"use strict";var el=ve&&ve.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),tl=ve&&ve.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),aa=ve&&ve.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&el(n,t,r[i]);return tl(n,t),n}})();Object.defineProperty(ve,"__esModule",{value:!0});ve.writeQuotaSnapshot=sl;ve.readQuotaSnapshot=cl;var sa=aa(g("fs")),nl=aa(g("path")),ca=pt(),ua=ie(),rl=Ot(),oa=ia();function Rr(){return nl.join((0,ca.getConfigDir)(),"quota-snapshots.json")}function da(){sa.mkdirSync((0,ca.getConfigDir)(),{recursive:!0,mode:448})}function la(){try{let e=JSON.parse(sa.readFileSync(Rr(),"utf8"));if(e?.version===1&&Array.isArray(e.snapshots))return e}catch{}return{version:1,snapshots:[]}}function il(e){da(),(0,ua.atomicWriteJsonSync)(Rr(),e)}function ol(e){return da(),(0,ua.withFileLockSync)(`${Rr()}.lock`,e)}function kr(e){let t=e.capturedAt?Date.parse(e.capturedAt):NaN;return Number.isFinite(t)?t:0}function Xt(e){let t=Date.parse(e);return Number.isFinite(t)?t:0}function al(e,t){let n=(0,oa.isAggregateCodexLimit)(e.limitId),r=(0,oa.isAggregateCodexLimit)(t.limitId);if(n!==r)return n;let i=Xt(e.fiveHour.resetsAt),o=Xt(t.fiveHour.resetsAt);if(i!==o)return i>o;let a=Xt(e.sevenDay.resetsAt),s=Xt(t.sevenDay.resetsAt);if(a!==s)return a>s;let c=e.fiveHour.utilization+e.sevenDay.utilization,u=t.fiveHour.utilization+t.sevenDay.utilization;return c!==u?c>u:kr(e)>kr(t)}function sl(e,t,n){ol(()=>{let r=la(),i=r.snapshots.findIndex(l=>l.providerId===e&&l.accountId===t),o=i>=0?r.snapshots[i].quota:void 0,{capturedSource:a,...s}=n;delete s.ageMs,delete s.freshness;let c={...s,providerId:e,capturedAt:n.capturedAt??new Date().toISOString(),source:s.source&&s.source!=="cache"?s.source:a??"session",stale:!1,resetCredits:n.resetCredits??(e==="codex"?o?.resetCredits:void 0)};if(i>=0&&al(r.snapshots[i].quota,c))return;let u={providerId:e,accountId:t,quota:c};i>=0?r.snapshots[i]=u:r.snapshots.push(u),il(r)})}function cl(e,t,n=new Date){let i=la().snapshots.find(u=>u.providerId===e&&u.accountId===t);if(!i)return null;let o=kr(i.quota),a=o>0?Math.max(0,n.getTime()-o):void 0,s=i.quota.capturedSource??i.quota.source,c=s&&s!=="cache"?s:void 0;return{...i.quota,providerId:e,source:"cache",...c?{capturedSource:c}:{},stale:!0,...a!==void 0?{ageMs:a}:{},freshness:(0,rl.classifyQuotaFreshness)(a)}}});var ka=b(h=>{"use strict";var ul=h&&h.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),dl=h&&h.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),fa=h&&h.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&ul(n,t,r[i]);return dl(n,t),n}})();Object.defineProperty(h,"__esModule",{value:!0});h.CODEX_KEYRING_FIX_HINT=h.getCodexCredentialStoreMode=h.getSystemCodexHome=h.getCodexProfileHome=h.getCodexProfilesDir=void 0;h.getCodexMonitoringHomes=hl;h.readStoredCodexAccount=He;h.isLiveCodexProfile=Fr;h.storeCodexProfileAuthUnlocked=Et;h.storeCodexProfileAuth=gl;h.parseCodexLoginStatusOutput=jr;h.getCodexLoginStatus=ma;h.getCodexLoginStatusAsync=Tr;h.readCodexAccountMetadata=Cl;h.readCodexAccountMetadataAsync=vl;h.isCodexProfileAuthenticated=va;h.isCodexProfileAuthenticatedAsync=wl;h.listCodexAccounts=N;h.getActiveCodexAccount=Hr;h.resolveSidekickCodexHome=Nr;h.resolveActiveCodexAccount=Al;h.getCodexExecutionEnv=bl;h.prepareCodexAccount=Ol;h.prepareCodexAccountAsync=Pl;h.discardCodexLogin=on;h.finalizeCodexAccount=El;h.finalizeCodexAccountAsync=kl;h.withCodexAuthSwapLock=X;h.dedupeCodexProfiles=_a;h.hasPendingCodexRepair=Il;h.syncCodexLiveStateUnlocked=ut;h.syncCodexLiveState=xa;h.syncCodexLiveStateAsync=Oa;h.cleanupAbandonedCodexLogins=Pa;h.switchToCodexAccount=Dl;h.switchToCodexAccountAsync=Ml;h.reconcileCodexAuthState=Fl;h.reconcileCodexAuthStateAsync=jl;h.getCodexKeepAliveBlocker=Tl;h.beginCodexKeepAlive=Ll;h.finishCodexKeepAlive=Hl;h.restoreCodexProfileFromBackup=Nl;h.removeCodexAccount=Bl;h.cleanupAbandonedCodexLoginsAsync=$l;var E=fa(g("fs")),Q=fa(g("path")),ha=g("child_process"),Dr=g("crypto"),H=be(),nn=ie(),y=$t(),f=rt(),Le=fr(),Ee=hr(),pa=gr(),Se=yr(),Ir=Zt(),dt=Xn(),ll=$n(),d=ar(),rn=rt();Object.defineProperty(h,"getCodexProfilesDir",{enumerable:!0,get:function(){return rn.getCodexProfilesDir}});Object.defineProperty(h,"getCodexProfileHome",{enumerable:!0,get:function(){return rn.getCodexProfileHome}});Object.defineProperty(h,"getSystemCodexHome",{enumerable:!0,get:function(){return rn.getSystemCodexHome}});Object.defineProperty(h,"getCodexCredentialStoreMode",{enumerable:!0,get:function(){return rn.getCodexCredentialStoreMode}});h.CODEX_KEYRING_FIX_HINT='Set `cli_auth_credentials_store = "file"` in ~/.codex/config.toml and run `codex login` again.';function fl(e){let t=new Set,n=[];for(let r of e){let i=Q.resolve(r);t.has(i)||(t.add(i),n.push(r))}return n}function hl(){let e=(0,f.getExplicitCodexHome)();if(e)return[e];let t=[(0,f.getDefaultSystemCodexHome)()];for(let n of N()){let r=(0,f.getCodexProfileHome)(n.id);E.existsSync(Q.join(r,"sessions"))&&t.push(r)}return fl(t)}function ga(e){try{return JSON.parse(E.readFileSync((0,f.getCodexLoginStatePath)(e),"utf8"))}catch{return null}}function pl(e,t){let n=(0,f.getCodexLoginDir)(e);E.mkdirSync(Q.join(n,"codex-home"),{recursive:!0,mode:448}),(0,nn.atomicWriteJsonSync)(Q.join(n,"profile.json"),t)}function Mr(e,t){let n=(0,f.readFileOrNull)(Q.join(e,"config.toml"))??"";(0,nn.atomicWriteFileSync)(Q.join(t,"config.toml"),(0,f.forceFileCredentialStore)(n))}function He(e){let t=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(e)),n=(0,d.readCodexBackup)(e);return t.status==="ok"&&n.status==="ok"?(0,d.codexLoginOnly)((0,y.compareCodexAuthFreshness)(n.snapshot.authRaw,t.snapshot.authRaw)>0?n.snapshot:t.snapshot):t.status==="ok"?(0,d.codexLoginOnly)(t.snapshot):n.status==="ok"?n.snapshot:null}function ke(e,t){let n=(0,y.readAuthIdentityFromRaw)(t.authRaw);if((0,y.identitiesMatch)(n,ft(e)))return!0;if(n?.authMode==="api-key"||!t.authRaw&&(0,d.isLegacyCodexLogin)(t.legacyRaw)){let r=He(e.id);return r!==null&&(0,d.codexSnapshotFingerprint)((0,d.codexLoginOnly)(t))===(0,d.codexSnapshotFingerprint)(r)}return!1}function Fr(e){let t=(0,d.readCodexCredentialStore)();return t.status==="ok"&&ke(e,t.snapshot)}function Et(e,t,n,r){let i=(0,d.codexLoginOnly)({authRaw:t,legacyRaw:n}),o=N().find(S=>S.id===e),a=(0,y.readAuthIdentityFromRaw)(t);if(o&&a?.authMode==="chatgpt"&&(a.email||a.workspaceId)&&(o.email||o.metadata?.workspaceId)&&!(0,y.identitiesMatch)(a,ft(o)))throw new Error("The Codex credential belongs to a different saved account.");let s=(0,d.readCodexBackup)(e),c=s.status==="ok"&&(0,y.compareCodexAuthFreshness)(s.snapshot.authRaw,t)>0?s.snapshot:i;(0,d.writeCodexBackup)(e,c);let u=(0,d.readCodexCredentialStore)(),l=u.status==="ok"&&(0,y.codexRefreshFingerprint)(c.authRaw)!==null&&(0,y.codexRefreshFingerprint)(c.authRaw)===(0,y.codexRefreshFingerprint)(u.snapshot.authRaw),p=u.status==="ok"&&(o?ke(o,u.snapshot):(0,y.identitiesMatch)((0,y.readAuthIdentityFromRaw)(c.authRaw),(0,y.readAuthIdentityFromRaw)(u.snapshot.authRaw)));!(0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)())&&u.status!=="error"&&u.status!=="corrupt"&&!p&&!l&&(0,d.writeInactiveCodexCredentialStore)((0,f.getCodexProfileHome)(e),c),c.authRaw&&(0,Le.writeCodexHealthSidecar)(e,c.authRaw,r)}function gl(e,t,n,r){X(()=>Et(e,t,n,r))}function lt(e){return e?.ok?e.consumers.length?"Close running Codex CLI, app, and IDE sessions before changing credentials. --force cannot bypass this check.":null:"Could not verify that Codex consumers are stopped; retry after closing Codex."}function en(e,t,n,r){if((0,dt.isAccountLeaseHeld)("codex",t))return{ok:!1,reason:"Keep-alive holds this account; retry when it finishes."};let i=lt(r.scan);if(i)return{ok:!1,reason:i};let o=(0,f.getCodexCredentialStoreMode)();if(o!=="file"&&o!=="unknown")return{ok:!1,reason:h.CODEX_KEYRING_FIX_HINT};if((0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)()))return{ok:!1,reason:"Unset CODEX_HOME; it points at a Sidekick-owned home."};let a=(0,d.readCodexCredentialStore)();if(r.before.status==="error"||!(0,d.codexStoreMatches)(a,r.before.snapshot))return{ok:!1,reason:"The live Codex credential changed; nothing was overwritten."};let s=a.status==="ok"?a.snapshot.authRaw:null,c=(0,y.codexRefreshFingerprint)(s),u=(0,y.readAuthIdentityFromRaw)(e.authRaw),l=N().find(k=>k.id===t),p=u?.authMode!=="chatgpt"||l!==void 0&&(0,y.identitiesMatch)(u,ft(l)),S=(0,ll.decideLiveCredentialWrite)({provider:"Codex",intent:n,liveStatus:a.status,candidateValid:p&&((0,d.isCodexLogin)(e.authRaw)||(0,d.isLegacyCodexLogin)(e.legacyRaw)),liveHasCredential:a.status==="ok",liveAccountId:r.liveAccountId,candidateAccountId:t,sameLink:c!==null&&c===(0,y.codexRefreshFingerprint)(e.authRaw),strictlyNewer:(0,y.compareCodexAuthFreshness)(e.authRaw,s)>0,capturedOutgoing:r.capturedOutgoing,matchesWritten:r.written!==void 0&&(0,d.codexStoreMatches)(a,r.written),rejectCorrupt:!0});if(!S.allow)return{ok:!1,reason:S.reason};if(a.status==="error")return{ok:!1,reason:"The live Codex login could not be read."};let x;try{x=(0,d.codexInstalledSnapshot)(a.snapshot,e)}catch{return{ok:!1,reason:"Legacy credentials would replace unrelated MCP data; sign in again."}}try{if((0,d.writeLiveCodexCredentialStoreUnguarded)(x),!(0,d.codexStoreMatches)((0,d.readCodexCredentialStore)(),x))throw new Error("verification failed");return{ok:!0,installed:x}}catch{return{ok:!1,reason:"The live Codex write did not verify.",attempted:x}}}function yl(e){let t=(0,y.readAuthIdentityFromRaw)((0,f.readFileOrNull)(Q.join(e,"auth.json")));return t?{email:t.email,workspaceId:t.workspaceId,planType:t.planType,authMode:t.authMode}:{}}function ml(e){let t=Q.join(e,".credentials.json");if(!E.existsSync(t))return{};try{let n=JSON.parse(E.readFileSync(t,"utf8"));if(typeof n.OPENAI_API_KEY=="string"||typeof n.CODEX_API_KEY=="string")return{authMode:"api-key"}}catch{}return{}}var ya=4e3;function jr(e,t){let n=t.trim();return e===0&&/^Logged in/i.test(n)?/API key/i.test(n)?{loggedIn:!0,authMode:"api-key"}:/ChatGPT/i.test(n)?{loggedIn:!0,authMode:"chatgpt"}:{loggedIn:!0}:{loggedIn:!1}}function ma(e){try{let t={...process.env,CODEX_HOME:e},n=(0,ha.spawnSync)("codex",["login","status"],{encoding:"utf8",env:t,timeout:ya,killSignal:"SIGKILL"});return jr(n.status,`${String(n.stdout??"")}
|
|
15
|
-
${String(n.stderr??"")}`)}catch{}return{loggedIn:!1}}function Tr(e){return new Promise(t=>{try{let n={...process.env,CODEX_HOME:e};(0,ha.execFile)("codex",["login","status"],{encoding:"utf8",env:n,timeout:ya,killSignal:"SIGKILL"},(r,i,o)=>{t(r?{loggedIn:!1}:jr(0,`${String(i??"")}
|
|
16
|
-
${String(o??"")}`))})}catch{t({loggedIn:!1})}})}function Lr(e){let t=yl(e);if(t.email||t.workspaceId||t.planType||t.authMode)return t;let n=ml(e);return n.authMode?n:null}function Ca(e){return e.loggedIn?{authMode:e.authMode??"unknown"}:{}}function Cl(e){return Lr(e)??Ca(ma(e))}async function vl(e){return Lr(e)??Ca(await Tr(e))}function Sl(e){return(0,d.readCodexCredentialStore)(e).status==="ok"}function va(e){return Sl(e)}async function wl(e){return va(e)}function _l(e,t){let n=e.trim().toLowerCase();return N().find(i=>i.id!==t&&(i.label??"").trim().toLowerCase()===n)?`A Codex account named "${e}" already exists.`:null}function N(){return(0,H.listSavedAccountProfiles)("codex")}function Hr(){return(0,H.getActiveSavedAccount)("codex")}function Nr(){return(0,f.getSystemCodexHome)()}function ft(e){return{email:e.email??e.metadata?.email,workspaceId:e.metadata?.workspaceId}}function Al(e={}){let t=e.selfHeal??!0,n=(0,y.readAuthIdentityFromRaw)((0,f.readFileOrNull)(Q.join(Nr(),"auth.json")));if(n&&(n.email||n.workspaceId)){let i=Br(n);if(i){let o=(0,H.getActiveSavedAccount)("codex");if(t&&(!o||o.id!==i.id))try{(0,H.setActiveSavedAccount)("codex",i.id,{silent:!0})}catch{}}return{email:n.email??i?.email??i?.metadata?.email,label:i?.label,providerAccountId:i?.providerAccountId??n.workspaceId,registryAccountId:i?.id,source:"live"}}let r=Hr();return r?{email:r.email??r.metadata?.email,label:r.label,providerAccountId:r.providerAccountId,registryAccountId:r.id,source:"registry"}:{source:"none"}}function bl(e=process.env){return{...e,CODEX_HOME:Nr()}}function xl(e){return{success:!1,needsLogin:!1,error:`Codex credential storage (${e}) is not file-based. ${h.CODEX_KEYRING_FIX_HINT}`}}function Sa(e,t,n){let r=e.trim();if(!r)return{success:!1,error:"Codex accounts require a non-empty label."};let i=_l(r);if(i)return{success:!1,error:i};let o=(0,f.getSystemCodexHome)(),a=(0,f.getCodexCredentialStoreMode)(o);if(a!=="file"&&a!=="unknown")return xl(a);if((0,d.isSidekickCodexHome)(o))return{success:!1,error:"Unset CODEX_HOME before adding an account; it names a Sidekick-owned home."};let s=(0,d.readCodexCredentialStore)();if(t&&s.status==="ok"){let u=ut("live-sync",{scan:n}),l=N().find(S=>ke(S,s.snapshot));return l?((l.metadata?.origin==="live-sync"||l.label===l.email)&&(0,H.upsertSavedAccountProfile)({...l,label:r,metadata:{...l.metadata,origin:"manual"}}),{success:!0,profileId:l.id,codexHome:o,needsLogin:!1,warning:u.warnings.join(" ")||(u.registered?void 0:`This Codex login is already saved as ${l.label??l.id}.`)}):{success:!1,error:u.warnings[0]??"The live Codex login has no identifiable account."}}if(t&&(s.status==="corrupt"||s.status==="error"))return{success:!1,error:"The live Codex credential could not be read; retry after Codex finishes writing it."};let c=(0,Dr.randomUUID)();try{pl(c,{label:r,addedAt:new Date().toISOString()});let u=(0,f.getCodexLoginHome)(c);return Mr(o,u),{success:!0,profileId:c,codexHome:u,needsLogin:!0}}catch{return on(c),{success:!1,error:"Could not prepare the isolated Codex login."}}}function Ol(e,t={}){let n=t.importCurrent===!1?void 0:(0,Se.inspectRunningAccountConsumersSync)("codex");try{return X(()=>Sa(e,t.importCurrent??!0,n))}catch{return{success:!1,error:"Could not acquire the Codex account-switch lock."}}}async function Pl(e,t={}){let n=t.importCurrent===!1?void 0:await(0,Se.inspectRunningAccountConsumers)("codex");try{return X(()=>Sa(e,t.importCurrent??!0,n))}catch{return{success:!1,error:"Could not acquire the Codex account-switch lock."}}}function on(e){E.rmSync((0,f.getCodexLoginDir)(e),{recursive:!0,force:!0}),!N().some(t=>t.id===e)&&E.existsSync((0,f.getCodexProfileStatePath)(e))&&E.rmSync((0,f.getCodexProfileDir)(e),{recursive:!0,force:!0})}function wa(e,t,n){let r=ga(e);if(!r){let S=N().find(x=>x.id===e);return S?t.activate===!1?{success:!0,profileId:e}:tn(S,{},{scan:n}):{success:!1,error:`Codex profile ${e} was not prepared.`}}let i=(0,f.getCodexLoginHome)(e),o=(0,d.readCodexCredentialStore)(i);if(o.status!=="ok")return{success:!1,error:"Codex profile is not authenticated with readable file credentials yet."};let a=(0,y.readAuthIdentityFromRaw)(o.snapshot.authRaw),s=Lr(i)??{},c=a?Br(a,{fallbackToActive:!1}):null,u=c?.id??(i===(0,f.getCodexProfileHome)(e)?(0,Dr.randomUUID)():e),l={...c,id:u,providerId:"codex",label:c?.label??r.label,email:s.email??c?.email,addedAt:c?.addedAt??r.addedAt,metadata:{...c?.metadata,...s,origin:"login"}};try{let S=(0,d.readCodexBackup)(u);(0,d.writeCodexBackup)(u,S.status==="ok"&&(0,y.compareCodexAuthFreshness)(S.snapshot.authRaw,o.snapshot.authRaw)>0?S.snapshot:o.snapshot),(0,d.removeCodexProfileCredentials)(i,o.snapshot),(0,H.upsertSavedAccountProfile)(l),(0,f.ensureCodexProfileDirs)(u),Mr(i,(0,f.getCodexProfileHome)(u)),Et(u,o.snapshot.authRaw,o.snapshot.legacyRaw,"login")}catch{return{success:!1,profileId:u,error:"Could not finish saving the Codex login; any verified private backup was kept."}}finally{on(e)}if(t.activate===!1)return{success:!0,profileId:u};let p=tn(l,{},{scan:n});return p.success?{...p,profileId:u}:{...p,profileId:u,needsLogin:!1,error:`The login was saved, but could not be activated: ${p.error}`}}function El(e,t={}){let n=(0,Se.inspectRunningAccountConsumersSync)("codex");try{return X(()=>wa(e,t,n))}catch{return{success:!1,error:"Could not finalize the Codex login."}}}async function kl(e,t={}){let n=await(0,Se.inspectRunningAccountConsumers)("codex");try{return X(()=>wa(e,t,n))}catch{return{success:!1,error:"Could not finalize the Codex login."}}}function Rl(){return Q.join((0,H.getAccountsDir)(),"codex","stash")}function Br(e,t={}){let n=N();if(e?.workspaceId){let r=n.find(i=>i.metadata?.workspaceId===e.workspaceId);if(r)return r}if(e?.email){let r=n.find(i=>(i.email??i.metadata?.email)===e.email&&(!e.workspaceId||!i.metadata?.workspaceId));if(r)return r}return!e?.workspaceId&&!e?.email&&t.fallbackToActive!==!1?Hr():null}function X(e){let t=Q.join((0,H.getAccountsDir)(),"codex");return E.mkdirSync(t,{recursive:!0,mode:448}),(0,nn.withFileLockSync)(Q.join(t,"auth-swap.lock"),e)}function _a(e){if(lt(e))return[];let t=[],n=new Map;for(let r of N()){let i=r.metadata?.workspaceId?`ws:${r.metadata.workspaceId}`:r.email?`email:${r.email}`:`id:${r.id}`;n.set(i,[...n.get(i)??[],r])}for(let r of n.values()){if(r.length<2||r.some(s=>(0,dt.isAccountLeaseHeld)("codex",s.id)))continue;let i=[...r].sort((s,c)=>Date.parse(s.addedAt)-Date.parse(c.addedAt)),o=i[0],a=He(o.id);for(let s of i.slice(1)){let c=He(s.id);c&&(!a||(0,y.compareCodexAuthFreshness)(c.authRaw,a.authRaw)>0)&&(a=c)}if(a){(0,d.writeCodexBackup)(o.id,a);for(let s of i.slice(1)){let c=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(s.id));if(c.status==="error"||c.status==="corrupt")continue;c.status==="ok"&&(0,d.removeCodexProfileCredentials)((0,f.getCodexProfileHome)(s.id),c.snapshot);let u=(0,Ir.readQuotaSnapshot)("codex",s.id);u&&!(0,Ir.readQuotaSnapshot)("codex",o.id)&&(0,Ir.writeQuotaSnapshot)("codex",o.id,u);let l=Q.join(Rl(),`dup-${s.id}`);E.mkdirSync(Q.dirname(l),{recursive:!0,mode:448}),E.existsSync((0,f.getCodexProfileDir)(s.id))&&E.renameSync((0,f.getCodexProfileDir)(s.id),l),(0,H.getActiveSavedAccount)("codex")?.id===s.id&&(0,H.setActiveSavedAccount)("codex",o.id,{silent:!0}),(0,H.removeSavedAccountProfile)("codex",s.id),E.rmSync((0,f.getCodexBackupPath)(s.id),{force:!0}),E.rmSync((0,f.getCodexBackupPath)(s.id,!0),{force:!0}),t.push(s.id)}Et(o.id,a.authRaw,a.legacyRaw,"migration")}}return t}function ct(){return Q.join((0,H.getAccountsDir)(),"codex","switch-journal.json")}function Pt(e){return(0,d.codexSnapshotFingerprint)((0,d.codexLoginOnly)(e))}function Aa(){E.rmSync(ct(),{force:!0})}function Il(){if(E.existsSync(ct()))return!0;let e=(0,d.readCodexCredentialStore)();return e.status==="error"||e.status==="corrupt"?!0:e.status!=="ok"?!1:N().some(t=>{if(!ke(t,e.snapshot))return!1;let n=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(t.id)),r=(0,d.readCodexBackup)(t.id);return n.status!=="absent"||r.status==="ok"&&(0,y.compareCodexAuthFreshness)(r.snapshot.authRaw,e.snapshot.authRaw)>0})}function ba(e,t){if(!E.existsSync(ct()))return;let n;try{if(n=JSON.parse(E.readFileSync(ct(),"utf8")),!n.to||!n.fromHash||!n.toHash)throw new Error}catch{e.warnings.push("The Codex switch journal is unreadable; run accounts doctor.");return}let r=(0,d.readCodexCredentialStore)();if(r.status==="error"||r.status==="corrupt"){e.warnings.push("An interrupted Codex switch is pending; the live login could not be read.");return}let i=lt(t);if(i){e.warnings.push(i);return}let o=Pt(r.snapshot),a=N().find(s=>s.id===n.to);if(o===n.toHash||r.status==="ok"&&a&&ke(a,r.snapshot)){if(r.status!=="ok")return;(0,d.writeCodexBackup)(n.to,r.snapshot);let s=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(n.to));if(s.status==="error"||s.status==="corrupt")throw new Error("The interrupted switch target is unreadable.");if(s.status==="ok"&&(0,d.removeCodexProfileCredentials)((0,f.getCodexProfileHome)(n.to),s.snapshot),n.from){let c=(0,d.readCodexBackup)(n.from);c.status==="ok"&&Pt(c.snapshot)===n.fromHash&&((0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(n.from)).status==="absent"&&(0,d.writeInactiveCodexCredentialStore)((0,f.getCodexProfileHome)(n.from),c.snapshot),(0,Le.writeCodexHealthSidecar)(n.from,c.snapshot.authRaw,"switch"))}(0,H.setActiveSavedAccount)("codex",n.to,{silent:!0}),e.journal="finished"}else if(o===n.fromHash){let s=(0,d.readCodexBackup)(n.to);if(s.status==="ok"&&Pt(s.snapshot)===n.toHash&&(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(n.to)).status==="absent"&&(0,d.writeInactiveCodexCredentialStore)((0,f.getCodexProfileHome)(n.to),s.snapshot),n.from){let c=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(n.from));c.status==="ok"&&(0,d.removeCodexProfileCredentials)((0,f.getCodexProfileHome)(n.from),c.snapshot)}(0,H.setActiveSavedAccount)("codex",n.from,{silent:!0}),e.journal="rolled-back"}else e.journal="cleared",e.warnings.push("The live Codex login matches neither side of the interrupted switch; it was kept. Private backups are available for inspection.");Aa()}function ut(e="live-sync",t={}){let n=(0,pa.emptyProviderSyncReport)();try{let r=(0,f.getCodexCredentialStoreMode)();if(r!=="file"&&r!=="unknown")return n.skipped="keyring",n.warnings.push(h.CODEX_KEYRING_FIX_HINT),n;if((0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)()))return n.skipped="managed-home",n.warnings.push("Unset CODEX_HOME before syncing; it points at a Sidekick-owned home."),n;ba(n,t.scan);let i=(0,d.readCodexCredentialStore)();if(i.status==="error"||i.status==="corrupt")return n.skipped="unreadable",n.warnings.push("The live Codex login could not be read; nothing was replaced."),n;if(i.status==="absent")return n.skipped="logged-out",n;let o=_a(t.scan);o.length&&(n.merged=o);let a=(0,y.readAuthIdentityFromRaw)(i.snapshot.authRaw),s=i.snapshot,c=N().find(x=>ke(x,s));if(!c){if(!a?.email&&!a?.workspaceId&&a?.authMode!=="api-key"&&!(0,d.isLegacyCodexLogin)(i.snapshot.legacyRaw))return n.skipped="no-identity",n;c={id:(0,Dr.randomUUID)(),providerId:"codex",label:a?.email??a?.workspaceId??"Codex API key",email:a?.email,addedAt:new Date().toISOString(),metadata:{...a,authMode:a?.authMode??"api-key",origin:"live-sync"}},(0,d.writeCodexBackup)(c.id,i.snapshot),(0,H.upsertSavedAccountProfile)(c),n.registered={id:c.id,email:c.email}}let u=(0,f.getCodexProfileHome)(c.id);(0,f.ensureCodexProfileDirs)(c.id),E.existsSync(Q.join(u,"config.toml"))||Mr((0,f.getSystemCodexHome)(),u);let l=(0,d.readCodexCredentialStore)(u),p=He(c.id);if(p&&(0,y.compareCodexAuthFreshness)(p.authRaw,i.snapshot.authRaw)>0){let x=en(p,c.id,"repair",{before:i,liveAccountId:c.id,scan:t.scan});x.ok?(i={status:"ok",snapshot:x.installed},n.repaired=c.id):n.warnings.push(`A newer Codex login is saved privately; repair is pending. ${x.reason}`)}let S=(0,d.readCodexBackup)(c.id);if((S.status!=="ok"||(0,y.compareCodexAuthFreshness)(S.snapshot.authRaw,i.snapshot.authRaw)<=0)&&((0,d.writeCodexBackup)(c.id,i.snapshot),n.folded=c.id),(0,Le.writeCodexHealthSidecar)(c.id,i.snapshot.authRaw,e),l.status==="ok"){let x=lt(t.scan);(0,y.compareCodexAuthFreshness)(l.snapshot.authRaw,i.snapshot.authRaw)>0&&(0,d.writeCodexBackup)(c.id,l.snapshot),x||(0,dt.isAccountLeaseHeld)("codex",c.id)?n.warnings.push(x??"The profile is leased; duplicate cleanup is pending."):((0,d.removeCodexProfileCredentials)(u,l.snapshot),n.demoted=c.id)}else(l.status==="corrupt"||l.status==="error")&&n.warnings.push("The live account has an unreadable profile credential; run accounts doctor.");(0,H.getActiveSavedAccount)("codex")?.id!==c.id&&((0,H.setActiveSavedAccount)("codex",c.id,{silent:!0}),n.repointed=c.id)}catch{n.warnings.push("Codex account sync could not finish; verified credentials were preserved for the next retry.")}return n}function xa(e="live-sync"){let t=(0,Se.inspectRunningAccountConsumersSync)("codex");try{return X(()=>ut(e,{scan:t}))}catch{return{warnings:["Could not acquire the Codex account-switch lock."]}}}async function Oa(e="live-sync"){let t=await(0,Se.inspectRunningAccountConsumers)("codex");try{return X(()=>ut(e,{scan:t}))}catch{return{warnings:["Could not acquire the Codex account-switch lock."]}}}function Pa(e=1440*60*1e3,t=Date.now(),n){let r=[];return lt(n??(0,Se.inspectRunningAccountConsumersSync)("codex"))||X(()=>{for(let i of[(0,f.getCodexLoginsDir)(),(0,f.getCodexProfilesDir)()])if(E.existsSync(i))for(let o of E.readdirSync(i)){if(N().some(u=>u.id===o))continue;let a=ga(o);if(!a||t-Date.parse(a.addedAt)<e)continue;let s=(0,f.getCodexLoginHome)(o),c=(0,d.readCodexCredentialStore)(s);if(!(c.status==="error"||c.status==="corrupt")){if(c.status==="ok"){let u=(0,y.readAuthIdentityFromRaw)(c.snapshot.authRaw),l=u?Br(u,{fallbackToActive:!1}):null;if(!l)continue;let p=He(l.id);(0,d.writeCodexBackup)(l.id,p&&(0,y.compareCodexAuthFreshness)(p.authRaw,c.snapshot.authRaw)>=0?p:c.snapshot)}on(o),r.push(o)}}}),r}function tn(e,t,n){let r={success:!0,provider:"codex",accountId:e.id,previousAccountId:(0,H.getActiveSavedAccount)("codex")?.id??null,verified:!1,verification:"none",warnings:[],hints:[],runningConsumers:n.scan.consumers,email:e.email??e.metadata?.email},i=(re,Ae={})=>(0,Ee.finishSwitchResult)({...r,success:!1,error:re,...Ae}),o=(0,f.getCodexCredentialStoreMode)();if(o!=="file"&&o!=="unknown")return i(h.CODEX_KEYRING_FIX_HINT);if((0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)()))return i("CODEX_HOME points at a Sidekick-owned home; unset it before switching.");let a=(0,d.readCodexCredentialStore)();if(a.status==="error"||a.status==="corrupt")return i("The live Codex login could not be read; it was left untouched.");let s=He(e.id);if(a.status==="ok"&&ke(e,a.snapshot)){if(s&&(0,y.compareCodexAuthFreshness)(s.authRaw,a.snapshot.authRaw)>0){let Ae=en(s,e.id,"relogin",{before:a,liveAccountId:e.id,scan:n.scan});if(!Ae.ok)return i(Ae.reason)}let re=ut("switch",n);return(0,Ee.finishSwitchResult)({...r,alreadyActive:!0,verified:!0,verification:"store",warnings:re.warnings,health:(0,Le.getAccountHealth)("codex",e.id),hints:["That account is already the live Codex login."]})}let c=lt(n.scan);if(c)return i(c);if((0,dt.isAccountLeaseHeld)("codex",e.id))return i("Keep-alive is refreshing this account; retry after it finishes.");let u=ut("switch",n);if(r.warnings.push(...u.warnings),E.existsSync(ct()))return i("An interrupted Codex switch still needs recovery; run accounts doctor.");if(a=(0,d.readCodexCredentialStore)(),a.status==="error"||a.status==="corrupt")return i("The live Codex credential could not be read.");let l=a.snapshot,p=a.status==="ok"?N().find(re=>ke(re,l)):null;if(a.status==="ok"&&!p)return i("The live login has no unambiguous account identity to save it under; sign in with Codex and retry.");if(r.previousAccountId=p?.id??null,p?.id===e.id)return i("The live account changed during the switch; retry.");let S=(0,f.getCodexProfileHome)(e.id),x=(0,d.readCodexCredentialStore)(S);if(x.status==="error"||x.status==="corrupt")return i("The target profile is unreadable; the switch was deferred.");let k=He(e.id);if(!k)return i("No readable stored credentials for this account; sign in again.",{needsLogin:!0});let ce=(0,y.readAuthIdentityFromRaw)(k.authRaw);if(ce?.authMode==="chatgpt"&&!(0,y.identitiesMatch)(ce,ft(e)))return i("The saved Codex credential does not belong to the selected account.");let Re=(0,y.codexRefreshFingerprint)(l.authRaw);if(Re&&Re===(0,y.codexRefreshFingerprint)(k.authRaw))return i("The target is another copy of the live refresh token; sign in again.");let we=(0,Le.getAccountHealth)("codex",e.id,{probe:"store"});if(r.health=we,(we.state==="expired"||we.state==="missing")&&!t.force)return i("Stored credentials have expired or are missing; sign in again.",{needsLogin:!0});let _e=(0,y.readLastRefresh)(k.authRaw);_e!==null&&Date.now()-_e>y.STALE_AUTH_THRESHOLD_MS&&r.warnings.push("The stored Codex login has not been refreshed in over 8 days.");try{p&&(0,d.writeCodexBackup)(p.id,l),(0,d.writeCodexBackup)(e.id,k),(0,nn.atomicWriteJsonSync)(ct(),{from:p?.id??null,to:e.id,fromHash:Pt(l),toHash:Pt(k),at:new Date().toISOString()})}catch{return i("The outgoing login or switch journal could not be saved and verified; live was left untouched.")}if(!(0,d.codexStoreMatches)((0,d.readCodexCredentialStore)(),l))return i("The live login changed after capture; the switch was deferred.");let $=(0,d.readCodexCredentialStore)(S);if(!(0,d.codexStoreMatches)($,x.snapshot))return i("The target credential changed after selection; the switch was deferred.");if($.status==="error"||$.status==="corrupt")return i("The target profile is unreadable; the switch was deferred.");try{$.status==="ok"&&(0,d.removeCodexProfileCredentials)(S,$.snapshot)}catch{return i("The target copy could not be removed safely; the switch was deferred.")}let Ie=en(k,e.id,"switch",{before:a,liveAccountId:p?.id??null,capturedOutgoing:!!p,scan:n.scan}),Ge=re=>{re&&en(l,p?.id??e.id,"rollback",{before:(0,d.readCodexCredentialStore)(),liveAccountId:e.id,written:re,scan:n.scan}),ba((0,pa.emptyProviderSyncReport)(),n.scan)};if(!Ie.ok){try{Ge(Ie.attempted)}catch{}return i(`${Ie.reason} Verified private backups were kept; run accounts doctor if recovery is pending.`,{verification:"failed"})}try{(0,H.setActiveSavedAccount)("codex",e.id)}catch{try{Ge(Ie.installed)}catch{}return i("The account registry could not be updated; recovery retained the verified backups.")}try{p&&Et(p.id,l.authRaw,l.legacyRaw,"switch"),(0,Le.writeCodexHealthSidecar)(e.id,k.authRaw,"switch"),Aa()}catch{r.warnings.push("The live switch succeeded; profile cleanup is pending and will retry on sync.")}let ne;try{ne=(0,Ee.writeLastSwitch)("codex",p?.id??null,e.id).token}catch{r.warnings.push("The switch succeeded but could not be recorded for undo.")}return(0,Ee.finishSwitchResult)({...r,verified:!0,verification:"store",undoToken:ne,hints:[`New Codex sessions use ${e.label??e.email??e.id}.`]})}function Dl(e,t={}){let n=N().find(i=>i.id===e);if(!n)return(0,Ee.switchFailure)("codex",e,`Codex account ${e} not found.`);let r=(0,Se.inspectRunningAccountConsumersSync)("codex");try{return X(()=>tn(n,t,{scan:r}))}catch{return(0,Ee.switchFailure)("codex",e,"The Codex switch could not finish; private backups and any pending journal were kept.")}}async function Ml(e,t={}){let n=N().find(o=>o.id===e);if(!n)return(0,Ee.switchFailure)("codex",e,`Codex account ${e} not found.`);let r=await(0,Se.inspectRunningAccountConsumers)("codex"),i;try{i=X(()=>tn(n,t,{scan:r}))}catch{return(0,Ee.switchFailure)("codex",e,"The Codex switch could not finish; private backups and any pending journal were kept.")}return i.success&&t.verifyWithCli&&!i.alreadyActive&&((await Tr((0,f.getSystemCodexHome)())).loggedIn?i.verification="cli":i=(0,Ee.finishSwitchResult)({...i,warnings:[...i.warnings,"Codex could not read the installed login; sign in again if prompted."]})),i}function Fl(){xa("migration")}async function jl(){await Oa("migration")}function Ea(e){if((0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)()))return"unset CODEX_HOME before managing accounts; it names a Sidekick-owned home";let t=(0,f.getCodexCredentialStoreMode)();if(t!=="file"&&t!=="unknown")return"live credential storage is not readable file mode";let n=N().find(s=>s.id===e);if(!n)return"account not found";let r=(0,d.readCodexCredentialStore)();if(r.status==="error"||r.status==="corrupt")return"the live login could not be read";if(r.status==="ok"&&ke(n,r.snapshot))return"live account; the CLI refreshes it in normal use";let i=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(e));if(i.status!=="ok")return"no readable profile copy to refresh (keep-alive never restores backups)";let o=(0,y.codexRefreshFingerprint)(i.snapshot.authRaw);if(!o)return"no refreshable ChatGPT login";if(r.status==="ok"&&o===(0,y.codexRefreshFingerprint)(r.snapshot.authRaw))return"same refresh token as the live login";if((0,Le.readHealthSidecar)("codex",e)?.source==="live-sync")return"copied from the live login; waits for a switch away from it";let a=(0,d.readCodexBackup)(e);return a.status==="error"||a.status==="corrupt"?"its private backup could not be read":a.status==="ok"&&(0,y.compareCodexAuthFreshness)(a.snapshot.authRaw,i.snapshot.authRaw)>0?"its saved backup is newer than the profile copy":null}function Tl(e){try{return X(()=>Ea(e))}catch{return"could not acquire the account-switch lock"}}function Ll(e,t){try{return X(()=>{let n=Ea(e);return n?{ok:!1,reason:n}:(0,dt.acquireAccountLease)("codex",e,t)?{ok:!0}:{ok:!1,reason:"another keep-alive run holds this account"}})}catch{return{ok:!1,reason:"could not acquire the account-switch lock"}}}function Hl(e){try{X(()=>{let t=N().find(i=>i.id===e),n=(0,d.readCodexCredentialStore)((0,f.getCodexProfileHome)(e));if(!t||Fr(t)||n.status!=="ok"||!(0,y.identitiesMatch)((0,y.readAuthIdentityFromRaw)(n.snapshot.authRaw),ft(t)))return;let r=(0,d.readCodexBackup)(e);r.status==="ok"&&(0,y.compareCodexAuthFreshness)(r.snapshot.authRaw,n.snapshot.authRaw)>0||((0,d.writeCodexBackup)(e,n.snapshot),(0,Le.writeCodexHealthSidecar)(e,n.snapshot.authRaw,"keepalive"))})}finally{(0,dt.releaseAccountLease)("codex",e)}}function Nl(e,t={}){try{return X(()=>{if((0,d.isSidekickCodexHome)((0,f.getSystemCodexHome)()))return"none";let n=N().find(c=>c.id===e);if(!n)return"none";let r=(0,d.readCodexCredentialStore)();if(r.status==="error"||r.status==="corrupt")return"none";if(Fr(n))return"live";let i=(0,f.getCodexProfileHome)(e),o=(0,d.readCodexCredentialStore)(i);if(o.status==="ok"){let c=(0,y.codexRefreshFingerprint)(o.snapshot.authRaw);if(c&&r.status==="ok"&&c===(0,y.codexRefreshFingerprint)(r.snapshot.authRaw)||!(0,y.identitiesMatch)((0,y.readAuthIdentityFromRaw)(o.snapshot.authRaw),ft(n))&&(0,y.readAuthIdentityFromRaw)(o.snapshot.authRaw)?.authMode!=="api-key"&&!(0,d.isLegacyCodexLogin)(o.snapshot.legacyRaw))return"none";let u=(0,d.readCodexBackup)(e);return u.status==="ok"&&(0,y.compareCodexAuthFreshness)(u.snapshot.authRaw,o.snapshot.authRaw)>0?"none":"present"}if(o.status!=="absent"||t.restore===!1)return"none";let a=(0,d.readCodexBackup)(e);if(a.status!=="ok")return"none";let s=(0,y.codexRefreshFingerprint)(a.snapshot.authRaw);return s&&r.status==="ok"&&s===(0,y.codexRefreshFingerprint)(r.snapshot.authRaw)?"none":((0,d.writeInactiveCodexCredentialStore)(i,a.snapshot),"restored")})}catch{return"none"}}function Bl(e){return(0,H.removeSavedAccountProfile)("codex",e)?(E.rmSync((0,f.getCodexProfileDir)(e),{recursive:!0,force:!0}),E.rmSync((0,f.getCodexBackupPath)(e),{force:!0}),E.rmSync((0,f.getCodexBackupPath)(e,!0),{force:!0}),{success:!0}):{success:!1,error:`Codex account ${e} not found.`}}async function $l(e=1440*60*1e3,t=Date.now()){return Pa(e,t,await(0,Se.inspectRunningAccountConsumers)("codex"))}});var Ra=b($r=>{"use strict";Object.defineProperty($r,"__esModule",{value:!0});$r.getActiveAccountStatus=Wl;var Ul=ra(),ql=ka();function Kl(e){return e instanceof Error?e.message:String(e)}function Wl(e,t={}){try{let n=(0,Ul.resolveActiveClaudeAccount)(t),r=(0,ql.resolveActiveCodexAccount)(t),i=n.source!=="none"?{present:!0,...n.registryAccountId?{accountId:n.registryAccountId}:{},email:n.email,label:n.label??n.email}:{present:!1},o=r.source!=="none"?{present:!0,...r.registryAccountId?{accountId:r.registryAccountId}:{},email:r.email,label:r.label??r.email??r.providerAccountId}:{present:!1};return{ok:i.present||o.present,claude:i,codex:o,error:e}}catch(n){return{ok:!1,claude:{present:!1},codex:{present:!1},error:e??Kl(n)}}}});var Ma=b(Je=>{"use strict";Object.defineProperty(Je,"__esModule",{value:!0});Je.formatTokenCount=zl;Je.formatDurationMs=Ql;Je.formatLocalDateKey=Ia;Je.parseLocalDateKey=Da;Je.addLocalDays=Jl;function zl(e,t={}){if(!Number.isFinite(e))return"0";let n=Math.trunc(e),r=n<0?"-":"",i=Math.abs(n),o=t.suffixCase==="upper"?"K":"k";return i>=1e6?`${r}${(i/1e6).toFixed(1)}M`:i>=1e3?`${r}${(i/1e3).toFixed(1)}${o}`:`${n}`}function Ql(e,t={}){let n=t.invalid??"N/A";if(!Number.isFinite(e)||e<0)return n;let i=(t.style??"spaced")==="compact"?"":" ",o=t.secondsFractionDigits??0;if(e<1e3)return t.includeMilliseconds?`${Math.round(e)}ms`:`${(e/1e3).toFixed(Math.max(1,o))}s`;let a=e/1e3;if(a<60)return o>0?`${a.toFixed(o)}s`:`${Math.floor(a)}s`;let s=Math.floor(a),c=Math.floor(s/3600),u=Math.floor(s%3600/60),l=s%60;return c>0?`${c}h${i}${u}m${i}${l}s`:`${u}m${i}${l}s`}function Ia(e=new Date){let t=typeof e=="number"?new Date(e):e;if(Number.isNaN(t.getTime()))return"";let n=t.getFullYear(),r=String(t.getMonth()+1).padStart(2,"0"),i=String(t.getDate()).padStart(2,"0");return`${n}-${r}-${i}`}function Da(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)return null;let n=new Date(Number(t[1]),Number(t[2])-1,Number(t[3]));return Number.isNaN(n.getTime())?null:n}function Jl(e,t){let n=Da(e);return n?Ia(new Date(n.getFullYear(),n.getMonth(),n.getDate()+t)):e}});var Ua=b(ee=>{"use strict";var Vl=ee&&ee.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),Gl=ee&&ee.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),qr=ee&&ee.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Vl(n,t,r[i]);return Gl(n,t),n}})();Object.defineProperty(ee,"__esModule",{value:!0});ee.getWorkspaceIdFromPath=tf;ee.appendQuotaHistorySample=uf;ee.readQuotaHistoryRange=$a;ee.readQuotaHistoryDailyBuckets=df;ee.pruneQuotaHistory=lf;ee._resetQuotaHistoryInMemoryStateForTests=ff;var Yl=qr(g("crypto")),ge=qr(g("fs")),Kr=qr(g("path")),Fa=Ma(),ja=pt(),Xl=Zt(),Ta=ie(),Zl=6e4,Wr=91,ef=16*1024,La=864e5,kt=new Map,an=new Map;function tf(e){let t;try{t=ge.realpathSync(e)}catch{t=Kr.resolve(e)}return Yl.createHash("sha256").update(t).digest("hex").slice(0,16)}function zr(e,t){return Kr.join((0,ja.getConfigDir)(),"quota-history",e,`${t}.jsonl`)}function nf(e){ge.mkdirSync(Kr.join((0,ja.getConfigDir)(),"quota-history",e),{recursive:!0,mode:448})}function sn(e){let t=e.trim();if(!t)return null;try{let n=JSON.parse(t);return n&&typeof n=="object"&&typeof n.timestamp=="string"&&n.fiveHour&&n.sevenDay?n:null}catch{return null}}function rf(e){let t;try{t=ge.openSync(e,"r");let n=ge.fstatSync(t);if(n.size===0)return null;let r=4096,i=n.size,o=Buffer.alloc(0);for(;i>0;){let a=Math.min(r,i),s=Buffer.alloc(a);ge.readSync(t,s,0,a,i-a),o=Buffer.concat([s,o]),i-=a;let u=o.toString("utf8").replace(/\n+$/,""),l=u.lastIndexOf(`
|
|
17
|
-
`);if(l>=0){let p=u.slice(l+1),S=sn(p);return S&&Date.parse(S.timestamp)||null}if(i===0){let p=sn(u);return p&&Date.parse(p.timestamp)||null}}return null}catch(n){return n?.code==="ENOENT",null}finally{if(t!==void 0)try{ge.closeSync(t)}catch{}}}function of(e,t){return(0,Ta.withFileLockSync)(`${e}.lock`,t)}function af(e,t){(0,Ta.atomicWriteFileSync)(e,t,384)}function Ha(e,t){let n;try{n=ge.statSync(e)}catch{return{kept:0,pruned:0}}if(n.size===0)return{kept:0,pruned:0};let r=Date.now()-t*La,o=ge.readFileSync(e,"utf8").split(`
|
|
18
|
-
`),a=[],s=0;for(let c of o){if(!c.trim())continue;let u=sn(c);if(!u){s+=1;continue}let l=Date.parse(u.timestamp);Number.isFinite(l)&&l>=r?a.push(c):s+=1}return s>0&&af(e,a.length>0?a.join(`
|
|
4
|
+
import*as U from"fs";import*as F from"fs";import*as X from"os";import*as y from"path";import*as I from"fs";import*as K from"path";import*as v from"path";import*as z from"os";var rt="SIDEKICK_CONFIG_DIR",ve=null;function ot(){return process.platform==="win32"?v.join(process.env.APPDATA||z.homedir(),"sidekick"):v.join(z.homedir(),".config","sidekick")}function p(){if(ve)return ve;let e=process.env[rt]?.trim();return e?v.resolve(e):ot()}function we(e){return v.join(p(),e)}import*as J from"crypto";import*as c from"fs";import*as W from"path";var it=1e4,B=3e3,st=12e4,xe=15e3,at=15,Se=new Int32Array(new SharedArrayBuffer(4)),ct=new Set(["EPERM","EBUSY","EACCES"]),ut=10;function dt(e){return Math.min(320,20*2**e)}function lt(e,t){if(process.platform!=="win32"||t>=ut-1)return!1;let n=e.code??"";return ct.has(n)}function ft(e,t){for(let n=0;;n++)try{c.renameSync(e,t);return}catch(r){if(!lt(r,n))throw r;Atomics.wait(Se,0,0,dt(n))}}function pt(e){let t;try{t=c.openSync(e,"r"),c.fsyncSync(t)}catch(n){let r=n.code;if(!["EISDIR","EINVAL","ENOSYS","EPERM","EACCES"].includes(r??""))throw n}finally{t!==void 0&&c.closeSync(t)}}function w(e,t){Q(e,JSON.stringify(t,null,2))}function Q(e,t,n=384){c.mkdirSync(W.dirname(e),{recursive:!0,mode:448});let r=`${e}.${process.pid}.${J.randomBytes(8).toString("hex")}.tmp`,o;try{o=c.openSync(r,"wx",n),c.writeFileSync(o,t,{encoding:"utf8"}),c.fsyncSync(o),c.closeSync(o),o=void 0,ft(r,e),pt(W.dirname(e))}catch(i){throw o!==void 0&&c.closeSync(o),c.rmSync(r,{force:!0}),i}}function ht(e,t){if(t>st)return!1;let n=Number.parseInt((e??"").split(":",1)[0],10);if(!Number.isInteger(n)||n<=0)return!1;try{return process.kill(n,0),!0}catch(r){return r.code==="EPERM"}}function x(e,t){let n=mt(e);try{return t()}finally{try{c.readFileSync(e,"utf8")===n&&c.rmSync(e,{force:!0})}catch{}}}function mt(e){let t=Date.now(),n=t+B,r=null;for(;;)try{let o=c.openSync(e,"wx",384),i=`${process.pid}:${J.randomBytes(16).toString("hex")}`;return c.writeFileSync(o,i,"utf8"),c.fsyncSync(o),c.closeSync(o),i}catch(o){if(o.code!=="EEXIST")throw o;let i=null;try{i=c.readFileSync(e,"utf8")}catch{}i!==null&&i!==r&&(r=i,n=Date.now()+B);try{let a=c.statSync(e),u=Date.now()-a.mtimeMs;u>it&&!ht(i,u)&&c.rmSync(e,{force:!0})}catch{}let s=Date.now();if(s>=n)throw new Error(`Timed out waiting for store lock: ${e} (no progress for ${B}ms)`);if(s-t>=xe)throw new Error(`Timed out waiting for store lock: ${e} (blocked synchronously for ${xe}ms)`);Atomics.wait(Se,0,0,at)}}var gt=new Set;function Ae(e){for(let t of gt)try{t(e)}catch{}}function D(){return K.join(p(),"accounts")}function G(){return K.join(D(),"accounts.json")}function yt(){return G()+".lock"}function vt(){I.mkdirSync(D(),{recursive:!0,mode:448})}function wt(e,t={}){w(G(),be(e)),t.silent||Ae("local")}function Ce(e){return vt(),x(yt(),e)}function xt(e,t={}){return Ce(()=>St(e,t))}function St(e,t={}){let n=e(_()??ke());return wt(n,t),n}function ke(){return{version:2,activeByProvider:{"claude-code":null,codex:null},accounts:[]}}function be(e){let t=ke();return t.activeByProvider["claude-code"]=e.activeByProvider?.["claude-code"]??null,t.activeByProvider.codex=e.activeByProvider?.codex??null,t.accounts=Array.isArray(e.accounts)?e.accounts.filter(n=>!!n&&(n.providerId==="claude-code"||n.providerId==="codex")&&typeof n.id=="string"&&typeof n.addedAt=="string").map(n=>({...n,label:n.label||void 0,email:n.email||void 0,providerAccountId:n.providerAccountId||void 0,metadata:n.metadata?{email:n.metadata.email||void 0,workspaceId:n.metadata.workspaceId||void 0,planType:n.metadata.planType||void 0,authMode:n.metadata.authMode||void 0,origin:n.metadata.origin||void 0}:void 0})):[],t}function At(e){return{version:2,activeByProvider:{"claude-code":e.activeAccountUuid,codex:null},accounts:e.accounts.map(t=>({id:t.uuid,providerId:"claude-code",providerAccountId:t.uuid,email:t.email,label:t.label,addedAt:t.addedAt,metadata:{email:t.email}}))}}function _(){try{let e=I.readFileSync(G(),"utf8"),t=JSON.parse(e);return t?.version===2?be(t):t?.version===1&&Array.isArray(t.accounts)?At(t):null}catch{return null}}function T(e){let t=_();return t?e?t.accounts.filter(n=>n.providerId===e):t.accounts:[]}function S(e){let t=_();if(!t)return null;let n=t.activeByProvider[e];return n?t.accounts.find(r=>r.providerId===e&&r.id===n)??null:null}function E(e,t,n={}){return xt(Ct(e,t),n)}function Ct(e,t){return n=>(n.activeByProvider[e]=t,n)}import*as Ie from"os";import*as De from"path";function V(){return De.join(Ie.homedir(),".claude")}function R(){let e=process.env.CLAUDE_CONFIG_DIR?.trim();return e||V()}function _e(e){try{let t=JSON.parse(F.readFileSync(e,"utf8"));return t?.oauthAccount&&typeof t.oauthAccount=="object"?t.oauthAccount:null}catch{return null}}function Te(e=R()){let t=y.join(e,".claude.json");return _e(t)?t:y.resolve(e)===y.resolve(V())?y.join(X.homedir(),".claude.json"):t}function kt(e){let t=e?.emailAddress,n=e?.accountUuid;return typeof t=="string"&&typeof n=="string"?{email:t,uuid:n}:null}function Ee(e=R()){return kt(_e(Te(e)))}import*as M from"fs";import*as Re from"os";import*as q from"path";function bt(){return q.join(Re.homedir(),".codex")}function It(){let e=process.env.CODEX_HOME?.trim();return e||null}function Fe(){return It()??bt()}function Me(){return Fe()}function Le(e){try{return M.readFileSync(e,"utf8")}catch{return null}}var Dt=11520*60*1e3;function _t(e){let t=e.split(".");if(t.length<2)return null;try{let n=Buffer.from(t[1],"base64url").toString("utf8");return JSON.parse(n)}catch{return null}}function Tt(e){if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t=="object"?t:null}catch{return null}}function Pe(e){let t=Tt(e);if(!t)return null;let n=t.tokens?.id_token,r=n?_t(n):null,o=r?.["https://api.openai.com/profile"],i=r?.["https://api.openai.com/auth"],s=typeof r?.email=="string"?r.email:typeof o?.email=="string"?o.email:void 0,a=typeof i?.chatgpt_account_id=="string"?i.chatgpt_account_id:t.tokens?.account_id,u=typeof i?.chatgpt_plan_type=="string"?i.chatgpt_plan_type:void 0,d=t.OPENAI_API_KEY||t.auth_mode==="api_key"?"api-key":"chatgpt";return{email:s,workspaceId:a,planType:u,authMode:d}}function Rt(){return Ee()}function Ft(e){let t=T("claude-code");return t.find(n=>(n.providerAccountId??n.id)===e.uuid)??t.find(n=>(n.email??n.metadata?.email)===e.email)??null}var Hn=1440*60*1e3;function Mt(){let e=S("claude-code");return e?{uuid:e.providerAccountId??e.id,email:e.email??e.metadata?.email??"unknown",label:e.label,addedAt:e.addedAt}:null}function Oe(e={}){let t=e.selfHeal??!0,n=Rt();if(n){let o=Ft(n);if(o){let i=S("claude-code");if(t&&(!i||i.id!==o.id))try{E("claude-code",o.id,{silent:!0})}catch{}}return{email:n.email,label:o?.label,providerAccountId:n.uuid,registryAccountId:o?.id,source:"live"}}let r=Mt();return r?{email:r.email,label:r.label,providerAccountId:r.uuid,registryAccountId:r.uuid,source:"registry"}:{source:"none"}}import*as te from"path";import*as O from"fs";import*as je from"path";var Ne=5*36e5,$n=7*864e5,Lt=5*6e4,Pt=60*6e4;function L(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"stale":e<Lt?"fresh":e<Pt?"aging":"stale"}function He(e){if(typeof e!="number"||!Number.isFinite(e)||e<0)return"age unknown";let t=Math.floor(e/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let n=Math.floor(t/60);return n<48?`${n}h ago`:`${Math.floor(n/24)}d ago`}function Y(e){return!e||e==="codex"}function ee(){return je.join(p(),"quota-snapshots.json")}function $e(){O.mkdirSync(p(),{recursive:!0,mode:448})}function Ue(){try{let e=JSON.parse(O.readFileSync(ee(),"utf8"));if(e?.version===1&&Array.isArray(e.snapshots))return e}catch{}return{version:1,snapshots:[]}}function Ot(e){$e(),w(ee(),e)}function Nt(e){return $e(),x(`${ee()}.lock`,e)}function Z(e){let t=e.capturedAt?Date.parse(e.capturedAt):NaN;return Number.isFinite(t)?t:0}function P(e){let t=Date.parse(e);return Number.isFinite(t)?t:0}function Ht(e,t){let n=Y(e.limitId),r=Y(t.limitId);if(n!==r)return n;let o=P(e.fiveHour.resetsAt),i=P(t.fiveHour.resetsAt);if(o!==i)return o>i;let s=P(e.sevenDay.resetsAt),a=P(t.sevenDay.resetsAt);if(s!==a)return s>a;let u=e.fiveHour.utilization+e.sevenDay.utilization,d=t.fiveHour.utilization+t.sevenDay.utilization;return u!==d?u>d:Z(e)>Z(t)}function C(e,t,n){Nt(()=>{let r=Ue(),o=r.snapshots.findIndex(h=>h.providerId===e&&h.accountId===t),i=o>=0?r.snapshots[o].quota:void 0,{capturedSource:s,...a}=n;delete a.ageMs,delete a.freshness;let u={...a,providerId:e,capturedAt:n.capturedAt??new Date().toISOString(),source:a.source&&a.source!=="cache"?a.source:s??"session",stale:!1,resetCredits:n.resetCredits??(e==="codex"?i?.resetCredits:void 0)};if(o>=0&&Ht(r.snapshots[o].quota,u))return;let d={providerId:e,accountId:t,quota:u};o>=0?r.snapshots[o]=d:r.snapshots.push(d),Ot(r)})}function N(e,t,n=new Date){let o=Ue().snapshots.find(d=>d.providerId===e&&d.accountId===t);if(!o)return null;let i=Z(o.quota),s=i>0?Math.max(0,n.getTime()-i):void 0,a=o.quota.capturedSource??o.quota.source,u=a&&a!=="cache"?a:void 0;return{...o.quota,providerId:e,source:"cache",...u?{capturedSource:u}:{},stale:!0,...s!==void 0?{ageMs:s}:{},freshness:L(s)}}function jt(){return T("codex")}function ze(){return S("codex")}function Be(e={}){let t=e.selfHeal??!0,n=Pe(Le(te.join(Me(),"auth.json")));if(n&&(n.email||n.workspaceId)){let o=$t(n);if(o){let i=S("codex");if(t&&(!i||i.id!==o.id))try{E("codex",o.id,{silent:!0})}catch{}}return{email:n.email??o?.email??o?.metadata?.email,label:o?.label,providerAccountId:o?.providerAccountId??n.workspaceId,registryAccountId:o?.id,source:"live"}}let r=ze();return r?{email:r.email??r.metadata?.email,label:r.label,providerAccountId:r.providerAccountId,registryAccountId:r.id,source:"registry"}:{source:"none"}}function $t(e,t={}){let n=jt();if(e?.workspaceId){let r=n.find(o=>o.metadata?.workspaceId===e.workspaceId);if(r)return r}if(e?.email){let r=n.find(o=>(o.email??o.metadata?.email)===e.email&&(!e.workspaceId||!o.metadata?.workspaceId));if(r)return r}return!e?.workspaceId&&!e?.email&&t.fallbackToActive!==!1?ze():null}function Ut(e){return e instanceof Error?e.message:String(e)}function ne(e,t={}){try{let n=Oe(t),r=Be(t),o=n.source!=="none"?{present:!0,...n.registryAccountId?{accountId:n.registryAccountId}:{},email:n.email,label:n.label??n.email}:{present:!1},i=r.source!=="none"?{present:!0,...r.registryAccountId?{accountId:r.registryAccountId}:{},email:r.email,label:r.label??r.email??r.providerAccountId}:{present:!1};return{ok:o.present||i.present,claude:o,codex:i,error:e}}catch(n){return{ok:!1,claude:{present:!1},codex:{present:!1},error:e??Ut(n)}}}import*as We from"crypto";import*as l from"fs";import*as k from"path";var zt=6e4,Bt=91,Wt=16*1024,Jt=864e5,H=new Map,re=new Map;function ie(e){let t;try{t=l.realpathSync(e)}catch{t=k.resolve(e)}return We.createHash("sha256").update(t).digest("hex").slice(0,16)}function Qt(e,t){return k.join(p(),"quota-history",e,`${t}.jsonl`)}function Kt(e){l.mkdirSync(k.join(p(),"quota-history",e),{recursive:!0,mode:448})}function oe(e){let t=e.trim();if(!t)return null;try{let n=JSON.parse(t);return n&&typeof n=="object"&&typeof n.timestamp=="string"&&n.fiveHour&&n.sevenDay?n:null}catch{return null}}function Gt(e){let t;try{t=l.openSync(e,"r");let n=l.fstatSync(t);if(n.size===0)return null;let r=4096,o=n.size,i=Buffer.alloc(0);for(;o>0;){let s=Math.min(r,o),a=Buffer.alloc(s);l.readSync(t,a,0,s,o-s),i=Buffer.concat([a,i]),o-=s;let d=i.toString("utf8").replace(/\n+$/,""),h=d.lastIndexOf(`
|
|
5
|
+
`);if(h>=0){let b=d.slice(h+1),ye=oe(b);return ye&&Date.parse(ye.timestamp)||null}if(o===0){let b=oe(d);return b&&Date.parse(b.timestamp)||null}}return null}catch(n){return n?.code==="ENOENT",null}finally{if(t!==void 0)try{l.closeSync(t)}catch{}}}function Vt(e,t){return x(`${e}.lock`,t)}function Xt(e,t){Q(e,t,384)}function qt(e,t){let n;try{n=l.statSync(e)}catch{return{kept:0,pruned:0}}if(n.size===0)return{kept:0,pruned:0};let r=Date.now()-t*Jt,i=l.readFileSync(e,"utf8").split(`
|
|
6
|
+
`),s=[],a=0;for(let u of i){if(!u.trim())continue;let d=oe(u);if(!d){a+=1;continue}let h=Date.parse(d.timestamp);Number.isFinite(h)&&h>=r?s.push(u):a+=1}return a>0&&Xt(e,s.length>0?s.join(`
|
|
19
7
|
`)+`
|
|
20
|
-
`:""),{kept:
|
|
21
|
-
`;
|
|
22
|
-
`)){let u=sn(c);if(!u)continue;let l=Date.parse(u.timestamp);Number.isFinite(l)&&(l<o||l>a||s.push(u))}return s.sort((c,u)=>Date.parse(c.timestamp)-Date.parse(u.timestamp)),s}function Ur(e){return(0,Fa.formatLocalDateKey)(e)}async function df(e){let t=await $a(e),{fromMs:n,toMs:r}=Ba(),i=e.from?Date.parse(e.from):n,o=e.to?Date.parse(e.to):r,a=Ur(i),s=Ur(o),c=new Map;for(let p of t){let S=Date.parse(p.timestamp);if(!Number.isFinite(S))continue;let x=Ur(S),k=c.get(x);k?k.push(p):c.set(x,[p])}let u=[],l=a;for(let p=0;p<=366&&l<=s;p+=1){let S=c.get(l);if(!S||S.length===0)u.push({date:l,samples:0,maxUtilizationFiveHour:0,maxUtilizationSevenDay:0,avgUtilizationFiveHour:0,avgUtilizationSevenDay:0,anyUnavailable:!1});else{let x=0,k=0,ce=0,Re=0,we=!1;for(let $ of S)x=Math.max(x,$.fiveHour.utilization),k=Math.max(k,$.sevenDay.utilization),ce+=$.fiveHour.utilization,Re+=$.sevenDay.utilization,$.available||(we=!0);let _e=S.length;u.push({date:l,samples:_e,maxUtilizationFiveHour:x,maxUtilizationSevenDay:k,avgUtilizationFiveHour:Math.round(ce/_e*100)/100,avgUtilizationSevenDay:Math.round(Re/_e*100)/100,anyUnavailable:we})}l=(0,Fa.addLocalDays)(l,1)}return u}async function lf(e,t,n=Wr){let r=zr(e,t);return Ha(r,n)}function ff(){kt.clear(),an.clear()}});var Jr=b(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.BurnRateCalculator=void 0;Rt.estimateTimeToQuota=qa;var Qr=class{events=[];windowMs;constructor(t=5){this.windowMs=t*6e4}addEvent(t,n=new Date){this.events.push({tokens:t,timestamp:n}),this.pruneOldEvents(n)}calculateBurnRate(t=new Date){if(this.pruneOldEvents(t),this.events.length===0)return 0;let n=this.events.reduce((i,o)=>i+o.tokens,0),r=Math.max((t.getTime()-this.events[0].timestamp.getTime())/6e4,1);return n/r}estimateTimeToQuota(t,n,r=new Date){return qa(t,n,this.calculateBurnRate(r))}getEventCount(){return this.events.length}reset(){this.events=[]}pruneOldEvents(t){let n=t.getTime()-this.windowMs;this.events=this.events.filter(r=>r.timestamp.getTime()>=n)}};Rt.BurnRateCalculator=Qr;function qa(e,t,n){if(n<=0)return null;let r=t-e;return r<=0?0:r/n}});var za=b(un=>{"use strict";Object.defineProperty(un,"__esModule",{value:!0});un.selectStatuslineAccount=Wa;un.formatStatusline=pf;var Ka=Ot(),hf=Jr();function Wa(e){return e.accounts.claude.present?{providerId:"claude-code",accountId:e.accounts.claude.accountId,accountLabel:e.accounts.claude.label??e.accounts.claude.email??"claude",quota:e.claudeQuota??null}:e.accounts.codex.present?{providerId:"codex",accountId:e.accounts.codex.accountId,accountLabel:e.accounts.codex.label??e.accounts.codex.email??"codex",quota:e.codexQuota??null}:null}function pf(e){let t=Wa(e),n=e.now??new Date,r=gf(e.live);if(!t)return Vr(["acct:none","quota unavailable",...r]);let i=Cf(t.accountLabel),o=t.quota;if(!o?.available)return Vr([`acct:${i}`,"quota unavailable",...r]);let a=cn(o.fiveHour.utilization),s=vf(o.fiveHour.resetsAt,n),c=mf(o,n),u=[`acct:${i}`,`5h ${Math.round(a)}% resets ${s}`];return c!=null&&u.push(`~${Sf(c)} left`),o.sevenDay.resetsAt&&o.sevenDay.utilization>0&&u.push(`7d ${Math.round(cn(o.sevenDay.utilization))}%`),o.freshness&&o.freshness!=="fresh"&&u.push(`(${(0,Ka.formatQuotaAge)(o.ageMs)})`),Vr([...u,...r])}function gf(e){if(!e)return[];let t=[],n=e.contextWindow?.usedPercentage;typeof n=="number"&&t.push(`ctx ${Math.round(cn(n))}%`);let r=e.cost?.totalCostUsd;typeof r=="number"&&r>0&&t.push(`$${yf(r)}`);let i=e.promptCache?.hitRatio;return typeof i=="number"&&t.push(`cache ${Math.round(cn(i*100))}%`),t}function Vr(e){return e.join(" \xB7 ")}function yf(e){return e>=100?e.toFixed(0):e>=10?e.toFixed(1):e.toFixed(2)}function mf(e,t){let n=Date.parse(e.fiveHour.resetsAt);if(!Number.isFinite(n))return null;let r=t.getTime();if(n<=r)return null;let i=e.capturedAt?Date.parse(e.capturedAt):t.getTime(),o=Number.isFinite(i)?i:t.getTime();if(o>=n)return null;let a=(o-(n-Ka.FIVE_HOUR_WINDOW_MS))/6e4;if(a<=0||e.fiveHour.utilization<=0)return null;let s=e.fiveHour.utilization/a,c=(0,hf.estimateTimeToQuota)(e.fiveHour.utilization,100,s),u=(n-r)/6e4;return c!==null&&c<u?c:null}function Cf(e){let t=e.trim();return(t.includes("@")?t.split("@")[0]:t).replace(/\s+/g,"-").slice(0,24)||"unknown"}function cn(e){return Number.isFinite(e)?Math.min(100,Math.max(0,e)):0}function vf(e,t){let n=new Date(e),r=Number.isNaN(n.getTime())?t:n;return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)}function Sf(e){let t=Math.max(0,Math.round(e));if(t<60)return`${t}min`;let n=Math.floor(t/60),r=t%60;return r?`${n}h${r}m`:`${n}h`}});var Va=b(dn=>{"use strict";Object.defineProperty(dn,"__esModule",{value:!0});dn.parseClaudeStatuslinePayload=wf;dn.quotaFromStatuslinePayload=_f;function Be(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function te(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function Gr(e){return e===null?null:te(e)}function Ne(e){return typeof e=="string"&&e.length>0?e:void 0}function Qa(e){return typeof e=="boolean"?e:void 0}function Yr(e){if(!Be(e))return;let t=te(e.used_percentage),n=te(e.resets_at);if(!(t===void 0||n===void 0))return{usedPercentage:t,resetsAt:n}}function ht(e){return Object.values(e).some(t=>t!==void 0)?e:void 0}function wf(e){if(typeof e!="string"||!e.trim())return null;let t;try{t=JSON.parse(e)}catch{return null}if(!Be(t))return null;let n=Be(t.model)?t.model:void 0,r=Be(t.workspace)?t.workspace:void 0,i=Be(t.context_window)?t.context_window:void 0,o=Be(t.cost)?t.cost:void 0,a=Be(t.rate_limits)?t.rate_limits:void 0,s=Be(t.prompt_cache)?t.prompt_cache:void 0;return{sessionId:Ne(t.session_id),transcriptPath:Ne(t.transcript_path),cwd:Ne(t.cwd),model:n?ht({id:Ne(n.id),displayName:Ne(n.display_name)}):void 0,workspace:r?ht({currentDir:Ne(r.current_dir),projectDir:Ne(r.project_dir),gitWorktree:Ne(r.git_worktree)}):void 0,contextWindow:i?ht({usedPercentage:Gr(i.used_percentage),remainingPercentage:Gr(i.remaining_percentage),contextWindowSize:te(i.context_window_size),totalInputTokens:te(i.total_input_tokens),totalOutputTokens:te(i.total_output_tokens)}):void 0,cost:o?ht({totalCostUsd:te(o.total_cost_usd),totalDurationMs:te(o.total_duration_ms),totalApiDurationMs:te(o.total_api_duration_ms),totalLinesAdded:te(o.total_lines_added),totalLinesRemoved:te(o.total_lines_removed)}):void 0,rateLimits:a?ht({fiveHour:Yr(a.five_hour),sevenDay:Yr(a.seven_day),spendLimit:Yr(a.spend_limit)}):void 0,promptCache:s?ht({warm:Qa(s.warm),cachingObserved:Qa(s.caching_observed),hitRatio:Gr(s.hit_ratio),requests:te(s.requests),misses:te(s.misses),expectedRebuilds:te(s.expected_rebuilds)}):void 0,raw:t}}function Ja(e,t){return e?{utilization:Math.max(0,e.usedPercentage),resetsAt:new Date(e.resetsAt*1e3).toISOString()}:t??{utilization:0,resetsAt:""}}function _f(e,t={}){let n=e.rateLimits;if(!n?.fiveHour&&!n?.sevenDay)return null;let r=t.now??new Date,i=t.fallback??void 0;return{fiveHour:Ja(n.fiveHour,i?.fiveHour),sevenDay:Ja(n.sevenDay,i?.sevenDay),available:!0,providerId:"claude-code",source:"statusline",capturedAt:r.toISOString(),stale:!1}}});var Xa=b(B=>{"use strict";var Af=B&&B.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),bf=B&&B.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),xf=B&&B.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&Af(n,t,r[i]);return bf(n,t),n}})();Object.defineProperty(B,"__esModule",{value:!0});B.STATE_FILE_NAME=B.STATE_FILE_SCHEMA_VERSION=void 0;B.getStateFilePath=Zr;B.readStateFile=Ya;B.writeStateFile=Rf;B.quotaToStateFile=If;B.billingBlockToStateFile=Df;var Of=xf(g("fs")),Pf=pt(),Ef=Ot(),kf=ie();B.STATE_FILE_SCHEMA_VERSION=1;B.STATE_FILE_NAME="state.json";function Zr(){return(0,Pf.getGlobalDataPath)(B.STATE_FILE_NAME)}function Ya(e=Zr()){try{let t=JSON.parse(Of.readFileSync(e,"utf8"));return t&&t.schemaVersion===B.STATE_FILE_SCHEMA_VERSION?t:null}catch{return null}}function Xr(e){if(Array.isArray(e))return`[${e.map(Xr).join(",")}]`;if(e&&typeof e=="object"){let t=e;return`{${Object.keys(t).sort().filter(r=>t[r]!==void 0).map(r=>`${JSON.stringify(r)}:${Xr(t[r])}`).join(",")}}`}return JSON.stringify(e)??"null"}function Ga(e){return Xr({...e,schemaVersion:void 0,writtenAt:void 0})}function Rf(e,t={}){let n=t.filePath??Zr();try{let r=Ya(n);if(r&&Ga(r)===Ga(e))return!1;let i={schemaVersion:B.STATE_FILE_SCHEMA_VERSION,writtenAt:(t.now??new Date).toISOString(),...e};return(0,kf.atomicWriteJsonSync)(n,i),!0}catch{return!1}}function If(e,t=Date.now()){if(!e||!e.available)return null;let n=typeof e.ageMs=="number"?e.ageMs:null,r=e.freshness??null;if(n===null&&e.capturedAt){let i=Date.parse(e.capturedAt);Number.isFinite(i)&&(n=Math.max(0,t-i),r??=(0,Ef.classifyQuotaFreshness)(n))}return{fiveHour:{utilization:e.fiveHour.utilization,resetsAt:e.fiveHour.resetsAt},sevenDay:{utilization:e.sevenDay.utilization,resetsAt:e.sevenDay.resetsAt},source:e.source??null,capturedSource:e.capturedSource??null,capturedAt:e.capturedAt??null,ageMs:n,freshness:r}}function Df(e){return e?{start:e.start,end:e.end,isActive:e.isActive,tokens:e.tokens.total,costUsd:e.costUsd,costProvenance:e.costProvenance,burnRatePerMinute:e.burnRatePerMinute,projectedTokens:e.projectedTokens,projectedCostUsd:e.projectedCostUsd,remainingMs:e.remainingMs}:null}});var os=b(v=>{"use strict";Object.defineProperty(v,"__esModule",{value:!0});v.writeStateFile=v.readStateFile=v.quotaToStateFile=v.getStateFilePath=v.billingBlockToStateFile=v.STATE_FILE_SCHEMA_VERSION=v.STATE_FILE_NAME=v.quotaFromStatuslinePayload=v.parseClaudeStatuslinePayload=v.selectStatuslineAccount=v.formatStatusline=v.estimateTimeToQuota=v.BurnRateCalculator=v.formatQuotaAge=v.classifyQuotaFreshness=v.getWorkspaceIdFromPath=v.appendQuotaHistorySample=v.writeQuotaSnapshot=v.readQuotaSnapshot=v.getActiveAccountStatus=void 0;var Mf=Ra();Object.defineProperty(v,"getActiveAccountStatus",{enumerable:!0,get:function(){return Mf.getActiveAccountStatus}});var Za=Zt();Object.defineProperty(v,"readQuotaSnapshot",{enumerable:!0,get:function(){return Za.readQuotaSnapshot}});Object.defineProperty(v,"writeQuotaSnapshot",{enumerable:!0,get:function(){return Za.writeQuotaSnapshot}});var es=Ua();Object.defineProperty(v,"appendQuotaHistorySample",{enumerable:!0,get:function(){return es.appendQuotaHistorySample}});Object.defineProperty(v,"getWorkspaceIdFromPath",{enumerable:!0,get:function(){return es.getWorkspaceIdFromPath}});var ts=Ot();Object.defineProperty(v,"classifyQuotaFreshness",{enumerable:!0,get:function(){return ts.classifyQuotaFreshness}});Object.defineProperty(v,"formatQuotaAge",{enumerable:!0,get:function(){return ts.formatQuotaAge}});var ns=Jr();Object.defineProperty(v,"BurnRateCalculator",{enumerable:!0,get:function(){return ns.BurnRateCalculator}});Object.defineProperty(v,"estimateTimeToQuota",{enumerable:!0,get:function(){return ns.estimateTimeToQuota}});var rs=za();Object.defineProperty(v,"formatStatusline",{enumerable:!0,get:function(){return rs.formatStatusline}});Object.defineProperty(v,"selectStatuslineAccount",{enumerable:!0,get:function(){return rs.selectStatuslineAccount}});var is=Va();Object.defineProperty(v,"parseClaudeStatuslinePayload",{enumerable:!0,get:function(){return is.parseClaudeStatuslinePayload}});Object.defineProperty(v,"quotaFromStatuslinePayload",{enumerable:!0,get:function(){return is.quotaFromStatuslinePayload}});var Ve=Xa();Object.defineProperty(v,"STATE_FILE_NAME",{enumerable:!0,get:function(){return Ve.STATE_FILE_NAME}});Object.defineProperty(v,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return Ve.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(v,"billingBlockToStateFile",{enumerable:!0,get:function(){return Ve.billingBlockToStateFile}});Object.defineProperty(v,"getStateFilePath",{enumerable:!0,get:function(){return Ve.getStateFilePath}});Object.defineProperty(v,"quotaToStateFile",{enumerable:!0,get:function(){return Ve.quotaToStateFile}});Object.defineProperty(v,"readStateFile",{enumerable:!0,get:function(){return Ve.readStateFile}});Object.defineProperty(v,"writeStateFile",{enumerable:!0,get:function(){return Ve.writeStateFile}})});var T=gs(os(),1);import*as ln from"fs";function Ff(e=process.env){if(e.SIDEKICK_STATUSLINE_STDIN==="0")return null;try{if(process.stdin.isTTY)return null;let t=ln.fstatSync(0);return t.isFIFO()||t.isFile()||t.isSocket()?(0,T.parseClaudeStatuslinePayload)(ln.readFileSync(0,"utf8")):null}catch{return null}}function jf(e,t){return e?e.fiveHour.utilization===t.fiveHour.utilization&&e.fiveHour.resetsAt===t.fiveHour.resetsAt&&e.sevenDay.utilization===t.sevenDay.utilization&&e.sevenDay.resetsAt===t.sevenDay.resetsAt:!1}async function Tf(e,t,n,r){if(!jf(n,t)){try{(0,T.writeQuotaSnapshot)("claude-code",e,t)}catch{}try{let i=r.workspace?.currentDir??r.cwd??process.cwd();await(0,T.appendQuotaHistorySample)({timestamp:t.capturedAt??new Date().toISOString(),runtimeProvider:"claude",providerId:e,workspaceId:(0,T.getWorkspaceIdFromPath)(i),fiveHour:t.fiveHour,sevenDay:t.sevenDay,available:!0,source:"statusline",stale:!1})}catch{}}}function Lf(e,t,n,r){let i=e.claude.present?{providerId:"claude-code",id:e.claude.accountId??null,label:e.claude.label??null}:e.codex.present?{providerId:"codex",id:e.codex.accountId??null,label:e.codex.label??null}:null,o=r?.contextWindow?{usedPercentage:r.contextWindow.usedPercentage??null,contextWindowSize:r.contextWindow.contextWindowSize??null,totalInputTokens:r.contextWindow.totalInputTokens??null,totalOutputTokens:r.contextWindow.totalOutputTokens??null}:null,a=r?{sessionId:r.sessionId??null,cwd:r.workspace?.currentDir??r.cwd??null,model:r.model?.id??null,costUsd:r.cost?.totalCostUsd??null,durationMs:r.cost?.totalDurationMs??null,linesAdded:r.cost?.totalLinesAdded??null,linesRemoved:r.cost?.totalLinesRemoved??null,promptCacheHitRatio:r.promptCache?.hitRatio??null}:null;return{writer:"statusline",account:i,quota:{claude:(0,T.quotaToStateFile)(t),codex:(0,T.quotaToStateFile)(n)},context:o,session:a,billingBlock:null}}async function as(){let e=Ff(),t=(0,T.getActiveAccountStatus)(void 0,{selfHeal:!1}),n=t.claude.accountId,r=n?(0,T.readQuotaSnapshot)("claude-code",n):null,i=r,o=t.codex.accountId?(0,T.readQuotaSnapshot)("codex",t.codex.accountId):null,a=null;if(e){let s=(0,T.quotaFromStatuslinePayload)(e,{fallback:r});s&&(i=s,n&&(a=Tf(n,s,r,e)))}process.stdout.write(`${(0,T.formatStatusline)({accounts:t,claudeQuota:i,codexQuota:o,live:e})}
|
|
23
|
-
`),(0,T.writeStateFile)(Lf(t,i,o,e)),a&&await a}var ss=["--project","--provider","--output-file"],Hf=["--json","--no-color","--offline"];function Nf(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Hf.includes(n)){if(ss.includes(n)){t++;continue}if(!ss.some(r=>n.startsWith(`${r}=`)))return n}}}function cs(e){return Nf(e)==="statusline"}cs(process.argv.slice(2))?as():await import("./sidekick-main.mjs");
|
|
8
|
+
`:""),{kept:s.length,pruned:a}}function Yt(e){let t=Je(e.runtimeProvider);return{fiveHour:{utilization:e.fiveHour.utilization,resetsAt:e.fiveHour.resetsAt},sevenDay:{utilization:e.sevenDay.utilization,resetsAt:e.sevenDay.resetsAt},available:e.available,error:e.error,providerId:t,source:e.source??"session",capturedAt:e.timestamp,stale:e.stale}}function Je(e){return e==="claude"?"claude-code":e==="zai"?"zai":"codex"}async function Zt(e,t,n){let r=re.get(t);if(r===void 0){let s=Gt(t);s!==null&&(r=s,re.set(t,s))}let o=Date.parse(e.timestamp);if(r!==void 0&&Number.isFinite(o)&&o-r<n.minIntervalMs)return;Kt(e.workspaceId);let i=JSON.stringify(e)+`
|
|
9
|
+
`;Vt(t,()=>{l.appendFileSync(t,i,{encoding:"utf8",mode:384});try{l.statSync(t).size>=Wt&&qt(t,n.retentionDays)}catch{}}),re.set(t,Number.isFinite(o)?o:Date.now());try{let s=Je(e.runtimeProvider);C(s,e.providerId,Yt(e))}catch{}}async function se(e,t={}){let n={minIntervalMs:t.minIntervalMs??zt,retentionDays:t.retentionDays??Bt},r=Qt(e.workspaceId,e.runtimeProvider),i=(H.get(r)??Promise.resolve()).then(()=>Zt(e,r,n)).catch(()=>{});H.set(r,i);try{await i}finally{H.get(r)===i&&H.delete(r)}}function Qe(e,t,n){if(n<=0)return null;let r=t-e;return r<=0?0:r/n}function Ke(e){return e.accounts.claude.present?{providerId:"claude-code",accountId:e.accounts.claude.accountId,accountLabel:e.accounts.claude.label??e.accounts.claude.email??"claude",quota:e.claudeQuota??null}:e.accounts.codex.present?{providerId:"codex",accountId:e.accounts.codex.accountId,accountLabel:e.accounts.codex.label??e.accounts.codex.email??"codex",quota:e.codexQuota??null}:null}function ce(e){let t=Ke(e),n=e.now??new Date,r=en(e.live);if(!t)return ae(["acct:none","quota unavailable",...r]);let o=rn(t.accountLabel),i=t.quota;if(!i?.available)return ae([`acct:${o}`,"quota unavailable",...r]);let s=j(i.fiveHour.utilization),a=on(i.fiveHour.resetsAt,n),u=nn(i,n),d=[`acct:${o}`,`5h ${Math.round(s)}% resets ${a}`];return u!=null&&d.push(`~${sn(u)} left`),i.sevenDay.resetsAt&&i.sevenDay.utilization>0&&d.push(`7d ${Math.round(j(i.sevenDay.utilization))}%`),i.freshness&&i.freshness!=="fresh"&&d.push(`(${He(i.ageMs)})`),ae([...d,...r])}function en(e){if(!e)return[];let t=[],n=e.contextWindow?.usedPercentage;typeof n=="number"&&t.push(`ctx ${Math.round(j(n))}%`);let r=e.cost?.totalCostUsd;typeof r=="number"&&r>0&&t.push(`$${tn(r)}`);let o=e.promptCache?.hitRatio;return typeof o=="number"&&t.push(`cache ${Math.round(j(o*100))}%`),t}function ae(e){return e.join(" \xB7 ")}function tn(e){return e>=100?e.toFixed(0):e>=10?e.toFixed(1):e.toFixed(2)}function nn(e,t){let n=Date.parse(e.fiveHour.resetsAt);if(!Number.isFinite(n))return null;let r=t.getTime();if(n<=r)return null;let o=e.capturedAt?Date.parse(e.capturedAt):t.getTime(),i=Number.isFinite(o)?o:t.getTime();if(i>=n)return null;let s=(i-(n-Ne))/6e4;if(s<=0||e.fiveHour.utilization<=0)return null;let a=e.fiveHour.utilization/s,u=Qe(e.fiveHour.utilization,100,a),d=(n-r)/6e4;return u!==null&&u<d?u:null}function rn(e){let t=e.trim();return(t.includes("@")?t.split("@")[0]:t).replace(/\s+/g,"-").slice(0,24)||"unknown"}function j(e){return Number.isFinite(e)?Math.min(100,Math.max(0,e)):0}function on(e,t){let n=new Date(e),r=Number.isNaN(n.getTime())?t:n;return new Intl.DateTimeFormat(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)}function sn(e){let t=Math.max(0,Math.round(e));if(t<60)return`${t}min`;let n=Math.floor(t/60),r=t%60;return r?`${n}h${r}m`:`${n}h`}function g(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function f(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function ue(e){return e===null?null:f(e)}function m(e){return typeof e=="string"&&e.length>0?e:void 0}function Ge(e){return typeof e=="boolean"?e:void 0}function de(e){if(!g(e))return;let t=f(e.used_percentage),n=f(e.resets_at);if(!(t===void 0||n===void 0))return{usedPercentage:t,resetsAt:n}}function A(e){return Object.values(e).some(t=>t!==void 0)?e:void 0}function le(e){if(typeof e!="string"||!e.trim())return null;let t;try{t=JSON.parse(e)}catch{return null}if(!g(t))return null;let n=g(t.model)?t.model:void 0,r=g(t.workspace)?t.workspace:void 0,o=g(t.context_window)?t.context_window:void 0,i=g(t.cost)?t.cost:void 0,s=g(t.rate_limits)?t.rate_limits:void 0,a=g(t.prompt_cache)?t.prompt_cache:void 0;return{sessionId:m(t.session_id),transcriptPath:m(t.transcript_path),cwd:m(t.cwd),model:n?A({id:m(n.id),displayName:m(n.display_name)}):void 0,workspace:r?A({currentDir:m(r.current_dir),projectDir:m(r.project_dir),gitWorktree:m(r.git_worktree)}):void 0,contextWindow:o?A({usedPercentage:ue(o.used_percentage),remainingPercentage:ue(o.remaining_percentage),contextWindowSize:f(o.context_window_size),totalInputTokens:f(o.total_input_tokens),totalOutputTokens:f(o.total_output_tokens)}):void 0,cost:i?A({totalCostUsd:f(i.total_cost_usd),totalDurationMs:f(i.total_duration_ms),totalApiDurationMs:f(i.total_api_duration_ms),totalLinesAdded:f(i.total_lines_added),totalLinesRemoved:f(i.total_lines_removed)}):void 0,rateLimits:s?A({fiveHour:de(s.five_hour),sevenDay:de(s.seven_day),spendLimit:de(s.spend_limit)}):void 0,promptCache:a?A({warm:Ge(a.warm),cachingObserved:Ge(a.caching_observed),hitRatio:ue(a.hit_ratio),requests:f(a.requests),misses:f(a.misses),expectedRebuilds:f(a.expected_rebuilds)}):void 0,raw:t}}function Ve(e,t){return e?{utilization:Math.max(0,e.usedPercentage),resetsAt:new Date(e.resetsAt*1e3).toISOString()}:t??{utilization:0,resetsAt:""}}function fe(e,t={}){let n=e.rateLimits;if(!n?.fiveHour&&!n?.sevenDay)return null;let r=t.now??new Date,o=t.fallback??void 0;return{fiveHour:Ve(n.fiveHour,o?.fiveHour),sevenDay:Ve(n.sevenDay,o?.sevenDay),available:!0,providerId:"claude-code",source:"statusline",capturedAt:r.toISOString(),stale:!1}}import*as qe from"fs";var he=1,Ye="state.json";function me(){return we(Ye)}function Ze(e=me()){try{let t=JSON.parse(qe.readFileSync(e,"utf8"));return t&&t.schemaVersion===he?t:null}catch{return null}}function pe(e){if(Array.isArray(e))return`[${e.map(pe).join(",")}]`;if(e&&typeof e=="object"){let t=e;return`{${Object.keys(t).sort().filter(r=>t[r]!==void 0).map(r=>`${JSON.stringify(r)}:${pe(t[r])}`).join(",")}}`}return JSON.stringify(e)??"null"}function Xe(e){return pe({...e,schemaVersion:void 0,writtenAt:void 0})}function ge(e,t={}){let n=t.filePath??me();try{let r=Ze(n);if(r&&Xe(r)===Xe(e))return!1;let o={schemaVersion:he,writtenAt:(t.now??new Date).toISOString(),...e};return w(n,o),!0}catch{return!1}}function $(e,t=Date.now()){if(!e||!e.available)return null;let n=typeof e.ageMs=="number"?e.ageMs:null,r=e.freshness??null;if(n===null&&e.capturedAt){let o=Date.parse(e.capturedAt);Number.isFinite(o)&&(n=Math.max(0,t-o),r??=L(n))}return{fiveHour:{utilization:e.fiveHour.utilization,resetsAt:e.fiveHour.resetsAt},sevenDay:{utilization:e.sevenDay.utilization,resetsAt:e.sevenDay.resetsAt},source:e.source??null,capturedSource:e.capturedSource??null,capturedAt:e.capturedAt??null,ageMs:n,freshness:r}}function an(e=process.env){if(e.SIDEKICK_STATUSLINE_STDIN==="0")return null;try{if(process.stdin.isTTY)return null;let t=U.fstatSync(0);return t.isFIFO()||t.isFile()||t.isSocket()?le(U.readFileSync(0,"utf8")):null}catch{return null}}function cn(e,t){return e?e.fiveHour.utilization===t.fiveHour.utilization&&e.fiveHour.resetsAt===t.fiveHour.resetsAt&&e.sevenDay.utilization===t.sevenDay.utilization&&e.sevenDay.resetsAt===t.sevenDay.resetsAt:!1}async function un(e,t,n,r){if(!cn(n,t)){try{C("claude-code",e,t)}catch{}try{let o=r.workspace?.currentDir??r.cwd??process.cwd();await se({timestamp:t.capturedAt??new Date().toISOString(),runtimeProvider:"claude",providerId:e,workspaceId:ie(o),fiveHour:t.fiveHour,sevenDay:t.sevenDay,available:!0,source:"statusline",stale:!1})}catch{}}}function dn(e,t,n,r){let o=e.claude.present?{providerId:"claude-code",id:e.claude.accountId??null,label:e.claude.label??null}:e.codex.present?{providerId:"codex",id:e.codex.accountId??null,label:e.codex.label??null}:null,i=r?.contextWindow?{usedPercentage:r.contextWindow.usedPercentage??null,contextWindowSize:r.contextWindow.contextWindowSize??null,totalInputTokens:r.contextWindow.totalInputTokens??null,totalOutputTokens:r.contextWindow.totalOutputTokens??null}:null,s=r?{sessionId:r.sessionId??null,cwd:r.workspace?.currentDir??r.cwd??null,model:r.model?.id??null,costUsd:r.cost?.totalCostUsd??null,durationMs:r.cost?.totalDurationMs??null,linesAdded:r.cost?.totalLinesAdded??null,linesRemoved:r.cost?.totalLinesRemoved??null,promptCacheHitRatio:r.promptCache?.hitRatio??null}:null;return{writer:"statusline",account:o,quota:{claude:$(t),codex:$(n)},context:i,session:s,billingBlock:null}}async function et(){let e=an(),t=ne(void 0,{selfHeal:!1}),n=t.claude.accountId,r=n?N("claude-code",n):null,o=r,i=t.codex.accountId?N("codex",t.codex.accountId):null,s=null;if(e){let a=fe(e,{fallback:r});a&&(o=a,n&&(s=un(n,a,r,e)))}process.stdout.write(`${ce({accounts:t,claudeQuota:o,codexQuota:i,live:e})}
|
|
10
|
+
`),ge(dn(t,o,i,e)),s&&await s}var tt=["--project","--provider","--output-file"],ln=["--json","--no-color","--offline"];function fn(e){for(let t=0;t<e.length;t++){let n=e[t];if(!ln.includes(n)){if(tt.includes(n)){t++;continue}if(!tt.some(r=>n.startsWith(`${r}=`)))return n}}}function nt(e){return fn(e)==="statusline"}nt(process.argv.slice(2))?et():await import("./sidekick-main.mjs");
|