sidekick-agent-hub 0.27.5 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -21
- package/dist/sidekick-cli.mjs +6 -18
- package/dist/sidekick-main.mjs +581 -595
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,6 +8,8 @@ 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.
|
|
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).
|
|
11
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.
|
|
12
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`.
|
|
13
15
|
- **0.27.0: Opus 5.5 pricing and GPT-6 summaries** — cost estimates for Claude Opus 5.5 (`claude-opus-5-5`) sessions use its own rates ($4 / $20 per 1M tokens, $0.20 cache reads) instead of Opus 5's, GPT-6 Sol and Luna sessions are priced, and OpenAI API dashboard summaries use `gpt-6-luna`.
|
|
@@ -340,24 +342,24 @@ History is stored at `~/.config/sidekick/quota-history/<workspaceId>/<provider>.
|
|
|
340
342
|
sidekick accounts [command]
|
|
341
343
|
```
|
|
342
344
|
|
|
343
|
-
Keep several Claude Code and Codex logins on one machine and switch between them without `/logout` cycles. Sidekick registers the login you are already using automatically (labelled with its email), verifies every switch by reading the live credential store back, warns about running apps that still hold the previous login, and flags expiring credentials before they fail. Account data is stored in `~/.config/sidekick/accounts/` with strict file permissions and atomic writes with rollback on failure. See the [Account Switcher](https://cesarandreslopez.github.io/sidekick-agent-hub/features/account-switcher/) guide for the per-app reachability table and platform notes.
|
|
344
|
-
|
|
345
|
-
| Command | Description
|
|
346
|
-
| ------------------------------------------------ |
|
|
347
|
-
| `sidekick accounts` | Interactive picker (arrow keys, `Enter` switch, `a` add, `l` sign in again, `r` remove, `s` shell, `u` undo, `?` help, `q` quit). Prints the list when piped
|
|
348
|
-
| `accounts list` | Saved accounts with health and expiry
|
|
349
|
-
| `accounts add [--label <name>] [--current] [-y]` | Sign in to a new account in an isolated profile; `--current` registers or relabels the live login
|
|
350
|
-
| `accounts switch <name> \| --next [--force]` | Make an account active (label, email, id, or unique prefix); `--force` ignores an expired health verdict
|
|
351
|
-
| `accounts login <name>` | Sign in again to an existing (expired) account, keeping its id and label
|
|
352
|
-
| `accounts remove <name> [-y]` | Delete a saved account and its credentials (prompts unless `--yes`/`--force`; required for `--json`/non-TTY)
|
|
353
|
-
| `accounts shell <name> [-- <cmd…>]` | Subshell, or one command, where `claude`/`codex` use the account
|
|
354
|
-
| `accounts env <name> [--shell <kind>]` | Print the environment for `eval` (`bash`, `zsh`, `fish`, `powershell`, `cmd`; default detected)
|
|
355
|
-
| `accounts undo` | Revert the last switch
|
|
356
|
-
| `accounts doctor`
|
|
357
|
-
| `accounts config auto-switch <pct\|off>` | Persist the auto-switch quota threshold (continuous auto-switching runs in a long-running host such as VS Code)
|
|
358
|
-
| `accounts config keep-alive <on\|off\|run>` | Refresh inactive accounts through the official CLIs (the dashboard runs it hourly); `run` executes one pass now
|
|
359
|
-
|
|
360
|
-
`sidekick accounts` and `accounts list` accept `--provider claude-code|codex|all`; the per-account subcommands accept `claude-code|codex`; `config` takes no provider. The global `--json` applies everywhere. A switch prints `✓ verified` once the live store reads back the new credential, one `!` line per running app that still holds the previous login, and the undo command. A switch to an `expired` or `missing` account is refused with a sign-in hint unless you pass `--force`.
|
|
345
|
+
Keep several Claude Code and Codex logins on one machine and switch between them without `/logout` cycles. Sidekick registers the login you are already using automatically (labelled with its email), verifies every switch by reading the live credential store back, warns about running Claude apps that still hold the previous login, refuses a Codex switch while Codex sessions run, keeps exactly one usable copy of every login (the rest are private backups neither CLI reads), and flags expiring credentials before they fail. Account data is stored in `~/.config/sidekick/accounts/` with strict file permissions and atomic writes with rollback on failure. See the [Account Switcher](https://cesarandreslopez.github.io/sidekick-agent-hub/features/account-switcher/) guide for the per-app reachability table and platform notes.
|
|
346
|
+
|
|
347
|
+
| Command | Description |
|
|
348
|
+
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
349
|
+
| `sidekick accounts` | Interactive picker (arrow keys, `Enter` switch, `a` add, `l` sign in again, `r` remove, `s` shell, `u` undo, `?` help, `q` quit). Prints the list when piped |
|
|
350
|
+
| `accounts list` | Saved accounts with health and expiry |
|
|
351
|
+
| `accounts add [--label <name>] [--current] [-y]` | Sign in to a new account in an isolated profile; `--current` registers or relabels the live login |
|
|
352
|
+
| `accounts switch <name> \| --next [--force]` | Make an account active (label, email, id, or unique prefix); `--force` ignores an expired health verdict but never skips saving the outgoing login or the Codex running-session check |
|
|
353
|
+
| `accounts login <name>` | Sign in again to an existing (expired) account, keeping its id and label |
|
|
354
|
+
| `accounts remove <name> [-y]` | Delete a saved account and its credentials (prompts unless `--yes`/`--force`; required for `--json`/non-TTY) |
|
|
355
|
+
| `accounts shell <name> [-- <cmd…>]` | Subshell, or one command, where `claude`/`codex` use the account |
|
|
356
|
+
| `accounts env <name> [--shell <kind>]` | Print the environment for `eval` (`bash`, `zsh`, `fish`, `powershell`, `cmd`; default detected) |
|
|
357
|
+
| `accounts undo` | Revert the last switch |
|
|
358
|
+
| `accounts doctor [--fix [-y]]` | Read-only check of credential expiry, stored Claude and Codex credentials (unused, second live, unreadable, interrupted switches), running apps, the Codex credential store, and keep-alive; `--fix` repairs what Sidekick owns after asking (`-y` skips; required for `--json`/non-TTY), and `--json` lists the repairs |
|
|
359
|
+
| `accounts config auto-switch <pct\|off>` | Persist the auto-switch quota threshold (continuous auto-switching runs in a long-running host such as VS Code) |
|
|
360
|
+
| `accounts config keep-alive <on\|off\|run>` | Refresh inactive accounts through the official CLIs (the dashboard runs it hourly); `run` executes one pass now |
|
|
361
|
+
|
|
362
|
+
`sidekick accounts` and `accounts list` accept `--provider claude-code|codex|all`; the per-account subcommands accept `claude-code|codex`; `config` takes no provider. The global `--json` applies everywhere. A switch prints `✓ verified` once the live store reads back the new credential, one `!` line per running app that still holds the previous login, and the undo command. A switch to an `expired` or `missing` account is refused with a sign-in hint unless you pass `--force`. A Codex switch is refused while Codex CLI, app, or IDE sessions run or keep-alive is refreshing the target account; `--force` overrides neither. For the live account, `shell` and `env` use the normal Claude or Codex home instead of a profile.
|
|
361
363
|
|
|
362
364
|
```bash
|
|
363
365
|
sidekick accounts # interactive picker
|
|
@@ -366,12 +368,13 @@ sidekick accounts add --label Work # sign in to a second account; curren
|
|
|
366
368
|
sidekick accounts switch work # switch by label, email, or id
|
|
367
369
|
eval "$(sidekick accounts env work)" # this shell only: claude/codex use Work
|
|
368
370
|
sidekick accounts shell work -- claude # one claude session as Work
|
|
369
|
-
sidekick accounts doctor # what would break a switch right now
|
|
371
|
+
sidekick accounts doctor # what would break a switch right now (read-only)
|
|
372
|
+
sidekick accounts doctor --fix # repair stored credentials Sidekick owns (asks first)
|
|
370
373
|
```
|
|
371
374
|
|
|
372
375
|
`remove` prints the resolved account and asks for an interactive y/N answer (default No). Pass `-y`/`--yes` to skip the prompt; `--json` and non-TTY contexts require the flag and exit `1` without it — **unattended automation that removes accounts must add `--yes`**.
|
|
373
376
|
|
|
374
|
-
The legacy `sidekick account --add | --login | --switch | --switch-to <id> | --remove <id> | --launcher <name> | --auto-switch <pct|off>` flags still work and print the equivalent `sidekick accounts …` command on stderr. `--launcher` writes a POSIX
|
|
377
|
+
The legacy `sidekick account --add | --login | --switch | --switch-to <id> | --remove <id> | --launcher <name> | --auto-switch <pct|off>` flags still work and print the equivalent `sidekick accounts …` command on stderr. `--launcher` writes a POSIX script to `~/.local/bin` that runs `sidekick accounts shell` each time, so it follows the account whether or not it is the live login; `accounts shell` and `accounts env` are the cross-platform replacements.
|
|
375
378
|
|
|
376
379
|
## Dashboard Panels
|
|
377
380
|
|
|
@@ -479,7 +482,7 @@ While mouse capture is on, the terminal's own click-drag text selection and copy
|
|
|
479
482
|
|
|
480
483
|
Auto-detects the most recently active session provider:
|
|
481
484
|
|
|
482
|
-
- **Claude Code** — `~/.claude/projects/`
|
|
485
|
+
- **Claude Code** — `~/.claude/projects/` (`$CLAUDE_CONFIG_DIR/projects/` when `CLAUDE_CONFIG_DIR` is set)
|
|
483
486
|
- **OpenCode** — OpenCode's data directory:
|
|
484
487
|
Linux `~/.local/share/opencode/`, macOS `~/Library/Application Support/opencode/`, Windows `%LOCALAPPDATA%\opencode\` (falls back to `%APPDATA%`)
|
|
485
488
|
- **Codex** — `~/.codex/`
|
package/dist/sidekick-cli.mjs
CHANGED
|
@@ -1,22 +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 bo=Object.create;var $n=Object.defineProperty;var Oo=Object.getOwnPropertyDescriptor;var Po=Object.getOwnPropertyNames;var Io=Object.getPrototypeOf,xo=Object.prototype.hasOwnProperty;var y=(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 C=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(n){throw t=0,n}};var Do=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Po(t))!xo.call(e,i)&&i!==n&&$n(e,i,{get:()=>t[i],enumerable:!(r=Oo(t,i))||r.enumerable});return e};var Eo=(e,t,n)=>(n=e!=null?bo(Io(e)):{},Do(t||!e||!e.__esModule?$n(n,"default",{value:e,enumerable:!0}):n,e));var De=C(F=>{"use strict";var jo=F&&F.__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]})),Mo=F&&F.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ct=F&&F.__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"&&jo(n,t,r[i]);return Mo(n,t),n}})();Object.defineProperty(F,"__esModule",{value:!0});F.CONFIG_DIR_ENV_VAR=void 0;F.getDefaultConfigDir=Un;F.setConfigDir=Ro;F.getConfigDirOverride=To;F.getConfigDir=bt;F.getProjectDataPath=No;F.getGlobalDataPath=Ho;F.encodeWorkspacePath=wt;F.getProjectSlug=Lo;F.resolveProjectIdentity=Ot;F.getProjectSlugRaw=$o;var Fo=Ct(y("fs")),le=Ct(y("path")),kn=Ct(y("os"));F.CONFIG_DIR_ENV_VAR="SIDEKICK_CONFIG_DIR";var Be=null;function Un(){return process.platform==="win32"?le.join(process.env.APPDATA||kn.homedir(),"sidekick"):le.join(kn.homedir(),".config","sidekick")}function Ro(e){let t=e?.trim();Be=t?le.resolve(t):null}function To(){return Be}function bt(){if(Be)return Be;let e=process.env[F.CONFIG_DIR_ENV_VAR]?.trim();return e?le.resolve(e):Un()}function No(e,t){return le.join(bt(),t,`${e}.json`)}function Ho(e){return le.join(bt(),e)}function wt(e){return e.replace(/\\/g,"/").replace(/[:/_]/g,"-")}function Lo(e){return Ot(e).canonicalSlug}function Ot(e){let t=le.resolve(e||process.cwd()),n;try{n=Fo.realpathSync(t)}catch{n=t}let r=wt(n),i=wt(t);return{cwd:t,resolvedCwd:n,canonicalSlug:r,legacySlug:i,candidates:r===i?[r]:[r,i],hasLegacyMismatch:r!==i}}function $o(e){return Ot(e).legacySlug}});var ie=C(k=>{"use strict";var ko=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]})),Uo=k&&k.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),It=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"&&ko(n,t,r[i]);return Uo(n,t),n}})();Object.defineProperty(k,"__esModule",{value:!0});k.renameSyncWithRetry=Kn;k.renameWithRetry=Qn;k.atomicWriteJson=Vn;k.atomicWriteJsonSync=Gn;k.atomicWriteFileSync=Jn;k.updateJsonStoreAtomic=Vo;k.withFileLockSync=Xn;k.updateJsonStoreAtomicSync=Xo;var Ae=It(y("crypto")),g=It(y("fs")),ve=It(y("path")),Pt=1e4,Se=3e3,qo=12e4,qn=15e3,Bo=15,Bn=new Int32Array(new SharedArrayBuffer(4)),Wo=new Set(["EPERM","EBUSY","EACCES"]),zo=10;function Wn(e){return Math.min(320,20*2**e)}function zn(e,t){if(process.platform!=="win32"||t>=zo-1)return!1;let n=e.code??"";return Wo.has(n)}function Kn(e,t){for(let n=0;;n++)try{g.renameSync(e,t);return}catch(r){if(!zn(r,n))throw r;Atomics.wait(Bn,0,0,Wn(n))}}async function Qn(e,t){for(let n=0;;n++)try{await g.promises.rename(e,t);return}catch(r){if(!zn(r,n))throw r;await new Promise(i=>setTimeout(i,Wn(n)))}}async function Ko(e){let t;try{t=await g.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 Qo(e){let t;try{t=g.openSync(e,"r"),g.fsyncSync(t)}catch(n){let r=n.code;if(!["EISDIR","EINVAL","ENOSYS","EPERM","EACCES"].includes(r??""))throw n}finally{t!==void 0&&g.closeSync(t)}}async function Vn(e,t){await g.promises.mkdir(ve.dirname(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Ae.randomBytes(8).toString("hex")}.tmp`,r;try{r=await g.promises.open(n,"wx",384),await r.writeFile(JSON.stringify(t,null,2),"utf8"),await r.sync(),await r.close(),r=void 0,await Qn(n,e),await Ko(ve.dirname(e))}catch(i){throw await r?.close().catch(()=>{}),await g.promises.rm(n,{force:!0}).catch(()=>{}),i}}function Gn(e,t){Jn(e,JSON.stringify(t,null,2))}function Jn(e,t,n=384){g.mkdirSync(ve.dirname(e),{recursive:!0,mode:448});let r=`${e}.${process.pid}.${Ae.randomBytes(8).toString("hex")}.tmp`,i;try{i=g.openSync(r,"wx",n),g.writeFileSync(i,t,{encoding:"utf8"}),g.fsyncSync(i),g.closeSync(i),i=void 0,Kn(r,e),Qo(ve.dirname(e))}catch(o){throw i!==void 0&&g.closeSync(i),g.rmSync(r,{force:!0}),o}}async function Vo(e,t,n){await g.promises.mkdir(ve.dirname(e),{recursive:!0,mode:448});let r=`${e}.lock`,i=await Go(r);try{let o=t(),a;try{a=await g.promises.readFile(e,"utf8")}catch(s){if(s.code!=="ENOENT")throw s}if(a!==void 0)try{o=JSON.parse(a)}catch{let s=`${e}.corrupt-${Date.now()}-${Ae.randomBytes(4).toString("hex")}`;await g.promises.rename(e,s)}let c=await n(o);return await Vn(e,c),c}finally{await Jo(r,i)}}async function Go(e){let t=Date.now()+Se,n=null;for(;;)try{let r=await g.promises.open(e,"wx",384),i=`${process.pid}:${Ae.randomBytes(16).toString("hex")}`;await r.writeFile(i,"utf8"),await r.sync();let o=setInterval(()=>{g.promises.utimes(e,new Date,new Date).catch(()=>{})},Math.floor(Pt/3));return o.unref(),{handle:r,token:i,heartbeat:o}}catch(r){if(r.code!=="EEXIST")throw r;let i=await g.promises.readFile(e,"utf8").catch(()=>null);i!==null&&i!==n&&(n=i,t=Date.now()+Se);try{let o=await g.promises.stat(e),a=Date.now()-o.mtimeMs;a>Pt&&!Yn(i,a)&&await g.promises.rm(e,{force:!0})}catch{}if(Date.now()>=t)throw new Error(`Timed out waiting for store lock: ${e} (no progress for ${Se}ms)`);await new Promise(o=>setTimeout(o,15))}}async function Jo(e,t){clearInterval(t.heartbeat),await t.handle.close().catch(()=>{});try{await g.promises.readFile(e,"utf8")===t.token&&await g.promises.rm(e,{force:!0})}catch{}}function Yn(e,t){if(t>qo)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 Xn(e,t){let n=Yo(e);try{return t()}finally{try{g.readFileSync(e,"utf8")===n&&g.rmSync(e,{force:!0})}catch{}}}function Yo(e){let t=Date.now(),n=t+Se,r=null;for(;;)try{let i=g.openSync(e,"wx",384),o=`${process.pid}:${Ae.randomBytes(16).toString("hex")}`;return g.writeFileSync(i,o,"utf8"),g.fsyncSync(i),g.closeSync(i),o}catch(i){if(i.code!=="EEXIST")throw i;let o=null;try{o=g.readFileSync(e,"utf8")}catch{}o!==null&&o!==r&&(r=o,n=Date.now()+Se);try{let c=g.statSync(e),s=Date.now()-c.mtimeMs;s>Pt&&!Yn(o,s)&&g.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 ${Se}ms)`);if(a-t>=qn)throw new Error(`Timed out waiting for store lock: ${e} (blocked synchronously for ${qn}ms)`);Atomics.wait(Bn,0,0,Bo)}}function Xo(e,t,n){return g.mkdirSync(ve.dirname(e),{recursive:!0,mode:448}),Xn(`${e}.lock`,()=>{let r=t(),i;try{i=g.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()}-${Ae.randomBytes(4).toString("hex")}`;g.renameSync(e,a)}let o=n(r);return Gn(e,o),o})}});var Zn=C(We=>{"use strict";Object.defineProperty(We,"__esModule",{value:!0});We._onRawAccountsChanged=Zo;We._emitAccountsChanged=ec;var xt=new Set;function Zo(e){return xt.add(e),()=>xt.delete(e)}function ec(e){for(let t of xt)try{t(e)}catch{}}});var Dt=C(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.MODEL_PROVIDER_IDS=X.RUNTIME_QUOTA_PROVIDER_IDS=X.QUOTA_PROVIDER_IDS=X.ACCOUNT_PROVIDER_IDS=X.SESSION_PROVIDER_IDS=void 0;X.SESSION_PROVIDER_IDS=["claude-code","opencode","codex"];X.ACCOUNT_PROVIDER_IDS=["claude-code","codex"];X.QUOTA_PROVIDER_IDS=["claude-code","codex","zai"];X.RUNTIME_QUOTA_PROVIDER_IDS=["claude","codex","zai"];X.MODEL_PROVIDER_IDS=["anthropic","openai","google","unknown"]});var de=C(D=>{"use strict";var tc=D&&D.__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]})),nc=D&&D.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),er=D&&D.__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"&&tc(n,t,r[i]);return nc(n,t),n}})();Object.defineProperty(D,"__esModule",{value:!0});D.ACCOUNT_PROVIDER_IDS=void 0;D.getAccountsDir=Et;D.withSavedAccountRegistryLock=rr;D.readSavedAccountRegistry=Ee;D.writeSavedAccountRegistry=ac;D.listSavedAccountProfiles=sc;D.getActiveSavedAccount=uc;D.upsertSavedAccountProfile=lc;D.setActiveSavedAccount=dc;D.upsertSavedAccountProfileUnlocked=fc;D.setActiveSavedAccountUnlocked=hc;D.replaceSavedAccountProfiles=pc;D.replaceSavedAccountProfilesUnlocked=mc;D.removeSavedAccountProfile=yc;D.removeSavedAccountProfileUnlocked=ur;var tr=er(y("fs")),nr=er(y("path")),rc=De(),ze=ie(),ic=Zn(),oc=Dt();Object.defineProperty(D,"ACCOUNT_PROVIDER_IDS",{enumerable:!0,get:function(){return oc.ACCOUNT_PROVIDER_IDS}});function Et(){return nr.join((0,rc.getConfigDir)(),"accounts")}function jt(){return nr.join(Et(),"accounts.json")}function Mt(){return jt()+".lock"}function Ft(){tr.mkdirSync(Et(),{recursive:!0,mode:448})}function Rt(e,t={}){(0,ze.atomicWriteJsonSync)(jt(),or(e)),t.silent||(0,ic._emitAccountsChanged)("local")}function rr(e){return Ft(),(0,ze.withFileLockSync)(Mt(),e)}function Tt(e,t={}){return rr(()=>Ke(e,t))}function Ke(e,t={}){let n=e(Ee()??ir());return Rt(n,t),n}function ir(){return{version:2,activeByProvider:{"claude-code":null,codex:null},accounts:[]}}function or(e){let t=ir();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 cc(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 Ee(){try{let e=tr.readFileSync(jt(),"utf8"),t=JSON.parse(e);return t?.version===2?or(t):t?.version===1&&Array.isArray(t.accounts)?cc(t):null}catch{return null}}function ac(e){Ft(),(0,ze.withFileLockSync)(Mt(),()=>Rt(e))}function sc(e){let t=Ee();return t?e?t.accounts.filter(n=>n.providerId===e):t.accounts:[]}function uc(e){let t=Ee();if(!t)return null;let n=t.activeByProvider[e];return n?t.accounts.find(r=>r.providerId===e&&r.id===n)??null:null}function lc(e){return Tt(ar(e))}function dc(e,t,n={}){return Tt(cr(e,t),n)}function cr(e,t){return n=>(n.activeByProvider[e]=t,n)}function ar(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 fc(e){return Ke(ar(e))}function hc(e,t,n={}){return Ke(cr(e,t),n)}function sr(e,t,n){return r=>(r.accounts=r.accounts.filter(i=>i.providerId!==e).concat(t),r.activeByProvider[e]=n,r)}function pc(e,t,n){return Tt(sr(e,t,n))}function mc(e,t,n){return Ke(sr(e,t,n))}function yc(e,t){return Ft(),(0,ze.withFileLockSync)(Mt(),()=>ur(e,t))}function ur(e,t){let n=Ee();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),Rt(n),i}});var Ge=C(b=>{"use strict";var gc=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]})),Sc=b&&b.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Nt=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"&&gc(n,t,r[i]);return Sc(n,t),n}})();Object.defineProperty(b,"__esModule",{value:!0});b.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV=void 0;b.getDefaultClaudeHome=Lt;b.isDefaultClaudeHome=dr;b.getLiveClaudeHome=Ve;b.getClaudeProfilesDir=fr;b.getClaudeProfileDir=hr;b.getClaudeProfileHome=pr;b.ensureClaudeProfileDirs=bc;b.claudeKeychainSuffix=mr;b.claudeKeychainService=yr;b.claudeKeychainAccountName=Oc;b.buildClaudeChildEnv=Pc;b.getClaudeConfigPath=gr;b.readLiveClaudeIdentity=Ic;b.readClaudeProfileIdentity=vr;b.keychainServiceExists=Ar;b.isClaudeProfileAuthenticated=xc;var vc=y("child_process"),Ac=y("crypto"),Qe=Nt(y("fs")),Ht=Nt(y("os")),te=Nt(y("path")),_c=de(),lr="Claude Code-credentials",wc=/^[a-zA-Z0-9._-]+$/,Cc="claude-code-user";b.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV="CLAUDE_SECURESTORAGE_CONFIG_DIR";function Lt(){return te.join(Ht.homedir(),".claude")}function dr(){return!process.env.CLAUDE_CONFIG_DIR?.trim()}function Ve(){let e=process.env.CLAUDE_CONFIG_DIR?.trim();return e||Lt()}function fr(){return te.join((0,_c.getAccountsDir)(),"claude","profiles")}function hr(e){return te.join(fr(),e)}function pr(e){return te.join(hr(e),"home")}function bc(e){Qe.mkdirSync(pr(e),{recursive:!0,mode:448})}function mr(e){return(0,Ac.createHash)("sha256").update(e.normalize("NFC")).digest("hex").slice(0,8)}function yr(e){let t=e??(dr()?void 0:Ve());return t?`${lr}-${mr(t)}`:lr}function Oc(){let e;try{e=process.env.USER||Ht.userInfo().username}catch{e=void 0}return e&&wc.test(e)?e:Cc}function Pc(e,t=process.env){let n={...t,CLAUDE_CONFIG_DIR:e};return delete n[b.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV],n}function $t(e){try{let t=JSON.parse(Qe.readFileSync(e,"utf8"));return t?.oauthAccount&&typeof t.oauthAccount=="object"?t.oauthAccount:null}catch{return null}}function gr(e=Ve()){let t=te.join(e,".claude.json");return $t(t)?t:te.resolve(e)===te.resolve(Lt())?te.join(Ht.homedir(),".claude.json"):t}function Sr(e){let t=e?.emailAddress,n=e?.accountUuid;return typeof t=="string"&&typeof n=="string"?{email:t,uuid:n}:null}function Ic(e=Ve()){return Sr($t(gr(e)))}function vr(e){return Sr($t(te.join(e,".claude.json")))}function Ar(e){try{return(0,vc.execFileSync)("security",["find-generic-password","-s",e],{stdio:["ignore","ignore","ignore"],timeout:4e3,killSignal:"SIGKILL"}),!0}catch{return!1}}function xc(e){return(process.platform==="darwin"&&Ar(yr(e))||Qe.existsSync(te.join(e,".credentials.json")))&&vr(e)!==null}});var Wt=C(Y=>{"use strict";var Dc=Y&&Y.__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]})),Ec=Y&&Y.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),wr=Y&&Y.__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"&&Dc(n,t,r[i]);return Ec(n,t),n}})();Object.defineProperty(Y,"__esModule",{value:!0});Y.KEYCHAIN_SERVICE=void 0;Y.readActiveCredentials=Rc;Y.writeActiveCredentials=Tc;Y.deleteStoredCredentials=Nc;var Cr=wr(y("fs")),jc=wr(y("path")),Ut=y("child_process"),je=Ge(),Mc=ie();Y.KEYCHAIN_SERVICE="Claude Code-credentials";var qt=4e3;function kt(e){return`'${e.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`}function Bt(e){return jc.join(e??(0,je.getLiveClaudeHome)(),".credentials.json")}function _r(e){try{return JSON.parse(Cr.readFileSync(Bt(e),"utf8"))}catch{return null}}function Fc(e){try{let t=(0,Ut.execFileSync)("security",["find-generic-password","-s",e,"-w"],{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:qt,killSignal:"SIGKILL"});return JSON.parse(t.trim())}catch{return null}}function Rc(e){return process.platform==="darwin"?Fc((0,je.claudeKeychainService)(e))??_r(e):_r(e)}function Tc(e,t){let n=JSON.stringify(e);if(JSON.parse(n),process.platform==="darwin"){let r=(0,je.claudeKeychainService)(t),i=["add-generic-password","-U","-s",kt(r),"-a",kt((0,je.claudeKeychainAccountName)()),"-w",kt(n)].join(" ");(0,Ut.execFileSync)("security",["-i"],{input:i+`
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
${t}
|
|
8
|
-
`;let i=n.slice(0,r).replace(/\s*$/,"");return`${i?`${i}
|
|
9
|
-
`:""}${t}
|
|
10
|
-
|
|
11
|
-
${n.slice(r).replace(/^\s*/,"")}
|
|
12
|
-
`}});var nn=C($=>{"use strict";var na=$&&$.__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]})),ra=$&&$.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Tr=$&&$.__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"&&na(n,t,r[i]);return ra(n,t),n}})();Object.defineProperty($,"__esModule",{value:!0});$.getHealthSidecarPath=Zt;$.readHealthSidecar=Nr;$.claudeHealthSidecarFromBlob=Hr;$.writeClaudeHealthSidecar=Lr;$.codexHealthSidecarFromAuth=tn;$.writeCodexHealthSidecar=aa;$.getAccountHealth=$r;$.listAccountsWithHealth=ha;$.describeClaudeCredential=pa;var fe=Tr(y("fs")),ce=Tr(y("path")),Me=Ge(),Xt=Kt(),ia=Wt(),we=Vt(),Ce=Ye(),Xe=de(),oa=ie(),ca=4320*60*1e3;function Zt(e,t){let n=e==="codex"?(0,Ce.getCodexProfileDir)(t):(0,Me.getClaudeProfileDir)(t);return ce.join(n,"health.json")}function Nr(e,t){try{let n=JSON.parse(fe.readFileSync(Zt(e,t),"utf8"));return n?.version===1&&typeof n.capturedAt=="number"?n:null}catch{return null}}function en(e,t,n){try{(0,oa.atomicWriteJsonSync)(Zt(e,t),n)}catch{}}function Hr(e,t,n=Date.now()){let r=(0,Xt.parseClaudeCredentialBlob)(e);if(!r)return null;let i=(0,Xt.resolveClaudeRefreshExpiry)(r);return{version:1,capturedAt:n,accessExpiresAt:r.expiresAt,refreshExpiresAt:i?.refreshExpiresAt,refreshExpiryEstimated:i?.estimated,hasRefreshToken:!!r.refreshToken,authMode:"oauth",source:t}}function Lr(e,t,n,r=Date.now()){let i=Hr(t,n,r);return i&&en("claude-code",e,i),i}function tn(e,t,n=Date.now(),r){let i=(0,we.readAuthIdentityFromRaw)(e);if(!i)return null;let o=(0,we.readLastRefresh)(e,r)??void 0;return{version:1,capturedAt:n,accessExpiresAt:(0,we.readAccessTokenExpiry)(e)??void 0,lastRefreshAt:o,hasRefreshToken:i.authMode==="chatgpt",authMode:i.authMode,source:t}}function aa(e,t,n,r=Date.now()){let i=tn(t,n,r);return i&&en("codex",e,i),i}function sa(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<=ca)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 ua(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>we.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 la(e){return(0,Me.readLiveClaudeIdentity)()?.uuid===e}function da(e){let t=(0,we.readAuthIdentityFromRaw)((0,Ce.readFileOrNull)(ce.join((0,Ce.getSystemCodexHome)(),"auth.json")));return t?(0,we.identitiesMatch)(t,{email:e.email??e.metadata?.email,workspaceId:e.metadata?.workspaceId}):!1}function Mr(e,t){let n=(0,ia.readActiveCredentials)((0,Me.getClaudeProfileHome)(e));return n?Lr(e,n,"switch",t):null}function Fr(e,t){let n=ce.join((0,Ce.getCodexProfileHome)(e),"auth.json"),r=(0,Ce.readFileOrNull)(n),i=tn(r,"switch",t,n);return i&&en("codex",e,i),i}function Rr(e){let t=(0,Me.getClaudeProfileHome)(e);return fe.existsSync(ce.join(t,".credentials.json"))||fe.existsSync(ce.join((0,Me.getClaudeProfileDir)(e),"health.json"))||fe.existsSync(ce.join((0,Xe.getAccountsDir)(),"credentials",`${e}.credentials.json`))||process.platform==="darwin"&&fe.existsSync(ce.join(t,".claude.json"))}function fa(e){let t=(0,Ce.getCodexProfileHome)(e);return fe.existsSync(ce.join(t,"auth.json"))||fe.existsSync(ce.join(t,".credentials.json"))}function $r(e,t,n={}){let r=n.now??Date.now(),i=n.probe??"cache",o=(0,Xe.listSavedAccountProfiles)(e).find(d=>d.id===t),a=e==="codex"?o!==void 0&&da(o):la(t),c=null;i==="store"&&(c=e==="codex"?Fr(t,r):Mr(t,r)),c??=Nr(e,t),!c&&e==="codex"&&(c=Fr(t,r)),!c&&i==="auto"&&Rr(t)&&(c=Mr(t,r));let s={providerId:e,accountId:t,checkedAt:r,isLive:a};if(!c)return(e==="codex"?fa(t):Rr(t))?{...s,state:"unknown",reason:"Credential health has not been recorded yet."}:{...s,state:"missing",reason:"No stored credentials; sign in again."};let u=e==="codex"?ua(c,r):sa(c,r);return{...s,...u,accessExpiresAt:c.accessExpiresAt,refreshExpiresAt:c.refreshExpiresAt,refreshExpiryEstimated:c.refreshExpiryEstimated,lastRefreshAt:c.lastRefreshAt}}function ha(e,t={}){let n={probe:"auto",...t},r=e?[e]:["claude-code","codex"],i=[];for(let o of r){let a=(0,Xe.getActiveSavedAccount)(o);for(let c of(0,Xe.listSavedAccountProfiles)(o))i.push({id:c.id,providerId:o,label:c.label,email:c.email??c.metadata?.email,planType:c.metadata?.planType,isActive:a?.id===c.id,health:$r(o,c.id,n),source:c.metadata?.origin==="live-sync"?"learned":"registered",addedAt:c.addedAt})}return i}function pa(e){return(0,Xt.parseClaudeCredentialBlob)(e)}});var rn=C(V=>{"use strict";var ma=V&&V.__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]})),ya=V&&V.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),kr=V&&V.__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"&&ma(n,t,r[i]);return ya(n,t),n}})();Object.defineProperty(V,"__esModule",{value:!0});V.getLastSwitchPath=Ze;V.readLastSwitch=wa;V.writeLastSwitch=Ca;V.clearLastSwitch=ba;V.switchFailure=Oa;V.finishSwitchResult=Pa;var Ur=kr(y("fs")),ga=kr(y("path")),Sa=y("crypto"),va=de(),Aa=ie();function _a(e){return e==="codex"?"codex":"claude"}function Ze(e){return ga.join((0,va.getAccountsDir)(),_a(e),"last-switch.json")}function wa(e){try{let t=JSON.parse(Ur.readFileSync(Ze(e),"utf8"));return t&&typeof t.token=="string"&&typeof t.to=="string"?t:null}catch{return null}}function Ca(e,t,n){let r={token:(0,Sa.randomUUID)(),provider:e,from:t,to:n,at:new Date().toISOString()};return(0,Aa.atomicWriteJsonSync)(Ze(e),r),r}function ba(e){try{Ur.rmSync(Ze(e),{force:!0})}catch{}}function Oa(e,t,n,r={}){return{success:!1,error:n,provider:e,accountId:t,previousAccountId:null,verified:!1,verification:"none",warnings:[],hints:[],runningConsumers:[],...r}}function Pa(e){let t=[...e.warnings,...e.runningConsumers.map(n=>n.reachability)];return{...e,warnings:t,warning:t.length?t.join(" "):void 0}}});var cn=C(on=>{"use strict";Object.defineProperty(on,"__esModule",{value:!0});on.emptyProviderSyncReport=Ia;function Ia(){return{warnings:[]}}});var sn=C(q=>{"use strict";var xa=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]})),Da=q&&q.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ea=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"&&xa(n,t,r[i]);return Da(n,t),n}})();Object.defineProperty(q,"__esModule",{value:!0});q.ACCOUNT_CONSUMER_REACHABILITY=void 0;q.findRunningProcessesSync=Vr;q.findRunningProcesses=Gr;q.detectRunningAccountConsumers=Ra;q.detectRunningAccountConsumersSync=Ta;q.describeAccountConsumer=Na;var Br=y("child_process"),qr=Ea(y("path")),Wr=4e3,ja=/claude-code[\\/]cli\.js/;function Ma(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 Fa(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 zr(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=qr.basename(i.command),a=i.args.trim().split(/\s+/)[0]??"",s=[o,o.replace(/\.exe$/i,""),qr.basename(a)].find(u=>u&&n.has(u));!s&&n.has("claude")&&/^node(\.exe)?$/i.test(o)&&ja.test(i.args)&&(s="claude"),s&&r.push({pid:i.pid,name:s,command:i.command})}return r}function Kr(){return process.platform==="win32"?{command:"tasklist",args:["/FO","CSV","/NH"]}:{command:"ps",args:["-axo","pid=,comm=,args="]}}function Qr(e){return process.platform==="win32"?Fa(e):Ma(e)}function Vr(e){if(e.length===0)return[];try{let{command:t,args:n}=Kr(),r=(0,Br.spawnSync)(t,n,{encoding:"utf8",maxBuffer:16*1024*1024,timeout:Wr,killSignal:"SIGKILL",windowsHide:!0});return r.error||r.status!==0?[]:zr(Qr(String(r.stdout??"")),e)}catch{return[]}}function Gr(e){return e.length===0?Promise.resolve([]):new Promise(t=>{try{let{command:n,args:r}=Kr();(0,Br.execFile)(n,r,{encoding:"utf8",timeout:Wr,killSignal:"SIGKILL",windowsHide:!0,maxBuffer:16*1024*1024},(i,o)=>{t(i?[]:zr(Qr(String(o??"")),e))})}catch{t([])}})}var an={"claude-cli":"claude","claude-desktop":"Claude","codex-cli":"codex","codex-app":"Codex"};q.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 Jr(e,t){return{kind:e,pids:t,...q.ACCOUNT_CONSUMER_REACHABILITY[e]}}function Yr(e,t){let n=[];for(let r of t){let i=e.filter(o=>o.name===an[r]).map(o=>o.pid);i.length>0&&n.push(Jr(r,i))}return n}function Xr(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 Ra(e){let t=Xr(e),n=await Gr(t.map(r=>an[r]));return Yr(n,t)}function Ta(e){let t=Xr(e),n=Vr(t.map(r=>an[r]));return Yr(n,t)}function Na(e,t=[]){return Jr(e,t)}});var fi=C(_=>{"use strict";var Ha=_&&_.__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]})),La=_&&_.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Zr=_&&_.__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"&&Ha(n,t,r[i]);return La(n,t),n}})();Object.defineProperty(_,"__esModule",{value:!0});_.storeClaudeProfileIdentity=ri;_.storeClaudeProfileCredentials=ii;_.readStoredClaudeAccount=ct;_.readAccountRegistry=Ua;_.writeAccountRegistry=qa;_.readActiveClaudeAccount=be;_.addCurrentAccount=Wa;_.withClaudeAuthSwapLock=Re;_.syncClaudeLiveStateUnlocked=dn;_.syncClaudeLiveState=za;_.cleanupAbandonedClaudeLogins=Ka;_.switchToAccount=Qa;_.switchToAccountAsync=Va;_.applyClaudeProfileToLiveHome=Ja;_.resolveActiveClaudeHome=Ya;_.applyActiveClaudeToLiveHome=Xa;_.reconcileClaudeAuthState=es;_.removeAccount=ts;_.listAccounts=ns;_.getActiveAccount=di;_.resolveActiveClaudeAccount=rs;_.isMultiAccountEnabled=is;var W=Zr(y("fs")),H=Zr(y("path")),B=Wt(),Fe=ie(),S=de(),E=Ge(),et=Kt(),tt=nn(),ne=rn(),$a=cn(),ei=sn();function nt(){return H.join((0,S.getAccountsDir)(),"credentials")}function rt(){return H.join((0,S.getAccountsDir)(),"configs")}function ka(){return H.join((0,S.getAccountsDir)(),"claude",".profiles-migrated-v1")}function ti(){for(let e of[(0,S.getAccountsDir)(),nt(),rt()])W.mkdirSync(e,{recursive:!0,mode:448})}function it(e){try{return JSON.parse(W.readFileSync(e,"utf8"))}catch{return null}}function ni(e){return it(e)?.oauthAccount??null}function ri(e,t){(0,Fe.atomicWriteJsonSync)(H.join((0,E.getClaudeProfileHome)(e),".claude.json"),{oauthAccount:t});try{(0,Fe.atomicWriteJsonSync)(H.join(rt(),`${e}.config.json`),t)}catch{}}function ii(e,t,n){(0,B.writeActiveCredentials)(t,(0,E.getClaudeProfileHome)(e));try{(0,Fe.atomicWriteJsonSync)(H.join(nt(),`${e}.credentials.json`),t)}catch{}(0,tt.writeClaudeHealthSidecar)(e,t,n)}function ot(e,t,n,r){ri(e,n),ii(e,t,r)}function oi(e){return it(H.join(nt(),`${e}.credentials.json`))}function ci(e){return it(H.join(rt(),`${e}.config.json`))}function ai(e){return ni(H.join((0,E.getClaudeProfileHome)(e),".claude.json"))}function ct(e){let t=(0,B.readActiveCredentials)((0,E.getClaudeProfileHome)(e)),n=ai(e);if(t&&n)return{credentials:t,oauthAccount:n};let r=oi(e),i=ci(e);if(r&&i){try{ot(e,r,i,"migration")}catch{}return{credentials:r,oauthAccount:i}}return null}function si(){return ni((0,E.getClaudeConfigPath)())}function un(e){let t={},n=(0,E.getClaudeConfigPath)();try{t=JSON.parse(W.readFileSync(n,"utf8"))}catch{}t.oauthAccount=e,(0,Fe.atomicWriteJsonSync)(n,t)}function Ua(){let e=(0,S.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 qa(e){(0,S.replaceSavedAccountProfiles)("claude-code",Ba(e),e.activeAccountUuid)}function Ba(e){let t=new Map((0,S.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 be(){return(0,E.readLiveClaudeIdentity)()}function ln(e){return(0,S.listSavedAccountProfiles)("claude-code").find(t=>(t.providerAccountId??t.id)===e)??null}function ui(e){let t=(0,S.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 Wa(e){let t=be();if(!t)return{success:!1,error:"No active Claude account found. Sign in with `claude` first."};let n=(0,B.readActiveCredentials)();if(!n)return{success:!1,error:"Could not read Claude credentials."};let r=si();if(!r)return{success:!1,error:"Could not read Claude config file."};ti();try{ot(t.uuid,n,r,"login")}catch(i){return{success:!1,error:`Failed to back up Claude credentials: ${i}`}}return(0,S.withSavedAccountRegistryLock)(()=>{let i=ln(t.uuid),o=i?.id??t.uuid;return(0,S.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,S.setActiveSavedAccountUnlocked)("claude-code",o),{success:!0}})}function Re(e){let t=H.join((0,S.getAccountsDir)(),"claude");return W.mkdirSync(t,{recursive:!0,mode:448}),(0,Fe.withFileLockSync)(H.join(t,"auth-swap.lock"),e)}function dn(e="live-sync"){let t=(0,$a.emptyProviderSyncReport)();try{let n=be();if(!n)return t.skipped="logged-out",t;let r=ui(n);r?r.email!==n.email&&n.email&&(r={...r,email:n.email,metadata:{...r.metadata,email:n.email}},(0,S.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"}},ti(),(0,S.upsertSavedAccountProfile)(r),t.registered={id:r.id,email:n.email});let i=r.providerAccountId??r.id,o=(0,B.readActiveCredentials)(),a=(0,et.parseClaudeCredentialBlob)(o);if(a){let s=(0,tt.readHealthSidecar)("claude-code",i),u=s?.accessExpiresAt??s?.refreshExpiresAt??0,d=(0,et.claudeCredentialFreshness)(a);if(!s||d>u||d===u&&!W.existsSync(H.join((0,E.getClaudeProfileHome)(i),".claude.json")))try{ot(i,o,si()??{emailAddress:n.email,accountUuid:n.uuid},e),t.folded=r.id}catch(A){t.warnings.push(`Could not back up the live Claude credentials: ${A}`)}}else o===null&&t.warnings.push("The live Claude credential store could not be read.");let c=(0,S.getActiveSavedAccount)("claude-code");(!c||c.id!==r.id)&&((0,S.setActiveSavedAccount)("claude-code",r.id,{silent:!0}),t.repointed=r.id)}catch(n){t.warnings.push(`Claude account sync failed: ${n}`)}return t}function za(e="live-sync"){try{return Re(()=>dn(e))}catch(t){return{warnings:[`Could not acquire the account-switch lock: ${t}`]}}}function Ka(e=360*60*1e3,t=Date.now()){let n=[],r=[];try{r=W.readdirSync((0,E.getClaudeProfilesDir)())}catch{return n}let i=new Set((0,S.listSavedAccountProfiles)("claude-code").map(o=>o.id));for(let o of r){if(i.has(o))continue;let a=(0,E.getClaudeProfileDir)(o),c=H.join(a,"profile.json"),s=it(c);if(!s)continue;let u=(0,E.getClaudeProfileHome)(o);if((0,E.isClaudeProfileAuthenticated)(u))continue;let d=s.addedAt?Date.parse(s.addedAt):NaN;if(!((Number.isNaN(d)?Number.POSITIVE_INFINITY:t-d)<e))try{(0,B.deleteStoredCredentials)(u),W.rmSync(a,{recursive:!0,force:!0}),n.push(o)}catch{}}return n}function Qa(e,t={}){let n=(0,ei.detectRunningAccountConsumersSync)("claude-code");return li(e,t,n)}async function Va(e,t={}){let n=await(0,ei.detectRunningAccountConsumers)("claude-code");return li(e,t,n)}function li(e,t,n){try{return Re(()=>Ga(e,t,n))}catch(r){return(0,ne.switchFailure)("claude-code",e,`Could not acquire the account-switch lock: ${r}`)}}function Ga(e,t,n){let r=ln(e);if(!r)return(0,ne.switchFailure)("claude-code",e,`Account ${e} not found in registry.`);let i=r.label??r.email??e,o=H.resolve((0,E.getLiveClaudeHome)()),a=H.resolve((0,E.getClaudeProfilesDir)());if(o===a||o.startsWith(a+H.sep))return(0,ne.switchFailure)("claude-code",e,`CLAUDE_CONFIG_DIR points at a sidekick profile home (${o}); unset it before switching accounts.`);let c=dn("switch"),s=(0,S.getActiveSavedAccount)("claude-code")?.id??null,u={success:!0,provider:"claude-code",accountId:r.id,previousAccountId:s,verified:!1,verification:"none",warnings:[...c.warnings],hints:[],runningConsumers:n,email:r.email};if(be()?.uuid===e)return s!==r.id&&(0,S.setActiveSavedAccount)("claude-code",r.id),(0,ne.finishSwitchResult)({...u,alreadyActive:!0,verified:!0,verification:"store",health:(0,tt.getAccountHealth)("claude-code",r.id),hints:[`${i} is already the active Claude account.`]});let d=ct(e);if(!d)return(0,ne.finishSwitchResult)({...u,success:!1,needsLogin:!0,error:`Stored credentials for "${i}" not found; sign in again.`});let p=(0,tt.getAccountHealth)("claude-code",r.id,{probe:"store"});if(u.health=p,(p.state==="expired"||p.state==="missing")&&!t.force)return(0,ne.finishSwitchResult)({...u,success:!1,needsLogin:!0,error:`Stored credentials for "${i}" have ${p.state==="missing"?"not been saved":"expired"}; sign in again.`});p.state==="expiring"&&p.reason&&u.warnings.push(`"${i}": ${p.reason}`);let A=(0,B.readActiveCredentials)(),v=null;try{v=W.readFileSync((0,E.getClaudeConfigPath)(),"utf8")}catch{}let w=()=>{if(A)try{(0,B.writeActiveCredentials)(A)}catch{}if(v!==null)try{W.writeFileSync((0,E.getClaudeConfigPath)(),v)}catch{}try{(0,S.setActiveSavedAccount)("claude-code",s,{silent:!0})}catch{}};try{(0,B.writeActiveCredentials)(d.credentials),un(d.oauthAccount)}catch(xe){return w(),(0,ne.finishSwitchResult)({...u,success:!1,error:`Failed to write Claude credentials: ${xe}`})}let L=(0,et.parseClaudeCredentialBlob)((0,B.readActiveCredentials)()),ee=(0,et.parseClaudeCredentialBlob)(d.credentials),x=be();if(!(L!==null&&ee!==null&&L.accessToken===ee.accessToken&&x?.uuid===e))return w(),(0,ne.finishSwitchResult)({...u,success:!1,verification:"failed",error:`The live Claude credential store did not reflect the switch to "${i}"; the previous login was restored.`});try{(0,S.setActiveSavedAccount)("claude-code",r.id)}catch(xe){return w(),(0,ne.finishSwitchResult)({...u,success:!1,error:`Failed to update account registry: ${xe}`})}let K;try{K=(0,ne.writeLastSwitch)("claude-code",s,r.id).token}catch{u.warnings.push("The switch succeeded but could not be recorded for undo.")}return(0,ne.finishSwitchResult)({...u,verified:!0,verification:"store",undoToken:K,hints:[`New claude sessions use ${r.email??i}.`]})}function Ja(e){try{return Re(()=>{let t=ct(e);return t?((0,B.writeActiveCredentials)(t.credentials),un(t.oauthAccount),{success:!0}):{success:!1,error:`Stored credentials for ${e} not found.`}})}catch(t){return{success:!1,error:`Could not install the refreshed credentials: ${t}`}}}function Ya(){let e=(0,S.getActiveSavedAccount)("claude-code");return e?(0,E.getClaudeProfileHome)(e.providerAccountId??e.id):(0,E.getLiveClaudeHome)()}function Xa(){try{return Re(Za)}catch(e){return{success:!1,error:`Could not acquire the account-switch lock: ${e}`}}}function Za(){let e=(0,S.getActiveSavedAccount)("claude-code");if(!e)return{success:!1,error:"No active Claude account found."};let t=e.providerAccountId??e.id,n=ct(t);if(!n)return{success:!1,error:`Stored credentials for ${e.email??t} not found.`};let r=(0,B.readActiveCredentials)(),i=null;try{i=W.readFileSync((0,E.getClaudeConfigPath)(),"utf8")}catch{}try{(0,B.writeActiveCredentials)(n.credentials)}catch(o){if(r)try{(0,B.writeActiveCredentials)(r)}catch{}return{success:!1,error:`Failed to write credentials: ${o}`}}try{un(n.oauthAccount)}catch(o){if(r)try{(0,B.writeActiveCredentials)(r)}catch{}if(i)try{W.writeFileSync((0,E.getClaudeConfigPath)(),i)}catch{}return{success:!1,error:`Failed to write config: ${o}`}}return{success:!0}}function es(){try{let e=ka();if(W.existsSync(e))return;let t=(0,S.readSavedAccountRegistry)();if(t)for(let n of t.accounts.filter(r=>r.providerId==="claude-code"))try{let r=n.providerAccountId??n.id;if((0,B.readActiveCredentials)((0,E.getClaudeProfileHome)(r))&&ai(r))continue;let i=oi(r),o=ci(r);if(!i||!o)continue;ot(r,i,o,"migration")}catch{}W.mkdirSync(H.dirname(e),{recursive:!0,mode:448}),W.writeFileSync(e,new Date().toISOString()+`
|
|
14
|
-
`,{encoding:"utf8",mode:384})}catch{}}function ts(e){return(0,S.withSavedAccountRegistryLock)(()=>{let t=ln(e);if(!t)return{success:!1,error:`Account ${e} not found.`};for(let n of[H.join(nt(),`${e}.credentials.json`),H.join(rt(),`${e}.config.json`)])try{W.unlinkSync(n)}catch{}try{(0,B.deleteStoredCredentials)((0,E.getClaudeProfileHome)(e)),W.rmSync((0,E.getClaudeProfileDir)(t.id),{recursive:!0,force:!0})}catch{}return(0,S.removeSavedAccountProfileUnlocked)("claude-code",t.id),{success:!0}})}function ns(){return(0,S.listSavedAccountProfiles)("claude-code").map(e=>({uuid:e.providerAccountId??e.id,email:e.email??e.metadata?.email??"unknown",label:e.label,addedAt:e.addedAt}))}function di(){let e=(0,S.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 rs(e={}){let t=e.selfHeal??!0,n=be();if(n){let i=ui(n);if(i){let o=(0,S.getActiveSavedAccount)("claude-code");if(t&&(!o||o.id!==i.id))try{(0,S.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=di();return r?{email:r.email,label:r.label,providerAccountId:r.uuid,registryAccountId:r.uuid,source:"registry"}:{source:"none"}}function is(){return(0,S.listSavedAccountProfiles)("claude-code").length>=1}});var He=C(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.QUOTA_AGING_MAX_AGE_MS=j.QUOTA_FRESH_MAX_AGE_MS=j.SEVEN_DAY_WINDOW_MS=j.FIVE_HOUR_WINDOW_MS=j.QUOTA_PROVIDER_IDS=void 0;j.classifyQuotaFreshness=us;j.formatQuotaAge=ls;j.projectQuotaWindow=Ne;j.withQuotaProjections=ds;j.fetchQuota=hs;var os=Dt();Object.defineProperty(j,"QUOTA_PROVIDER_IDS",{enumerable:!0,get:function(){return os.QUOTA_PROVIDER_IDS}});var cs="https://api.anthropic.com/api/oauth/usage",as="oauth-2025-04-20",ss=1e4;j.FIVE_HOUR_WINDOW_MS=5*36e5;j.SEVEN_DAY_WINDOW_MS=7*864e5;j.QUOTA_FRESH_MAX_AGE_MS=5*6e4;j.QUOTA_AGING_MAX_AGE_MS=60*6e4;function us(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"stale":e<j.QUOTA_FRESH_MAX_AGE_MS?"fresh":e<j.QUOTA_AGING_MAX_AGE_MS?"aging":"stale"}function ls(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 Ne(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,c=Number.isFinite(a)?a:Date.now(),s=r-(o-c);if(!(s<=0))return Math.min(Math.round(t*(r/s)),200)}function ds(e,t={}){if(!e.available)return e;let n={...e},r=t.capturedAt??e.capturedAt;if(n.projectedFiveHour==null){let i=Ne({utilization:n.fiveHour.utilization,resetsAt:n.fiveHour.resetsAt,windowMs:t.fiveHourWindowMs??j.FIVE_HOUR_WINDOW_MS,capturedAt:r});i!==void 0&&(n.projectedFiveHour=i)}if(n.projectedSevenDay==null){let i=Ne({utilization:n.sevenDay.utilization,resetsAt:n.sevenDay.resetsAt,windowMs:t.sevenDayWindowMs??j.SEVEN_DAY_WINDOW_MS,capturedAt:r});i!==void 0&&(n.projectedSevenDay=i)}return n}function Te(e,t={}){return{fiveHour:{utilization:0,resetsAt:""},sevenDay:{utilization:0,resetsAt:""},available:!1,error:e,...t}}function fs(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 hs(e,t={}){let n=new AbortController,r=setTimeout(()=>n.abort(),ss);r.unref();try{let o=await(t.fetchImpl??fetch)(cs,{method:"GET",signal:n.signal,headers:{Authorization:`Bearer ${e}`,"anthropic-beta":as,"Content-Type":"application/json"}});if(!o.ok)return o.status===401?Te("Sign in to Claude Code to view quota",{failureKind:"auth",httpStatus:o.status}):o.status===429?Te(`API error: ${o.status}`,{failureKind:"rate_limit",httpStatus:o.status,retryAfterMs:fs(o.headers.get("retry-after"))}):o.status>=500&&o.status<=599?Te(`API error: ${o.status}`,{failureKind:"server",httpStatus:o.status}):Te(`API error: ${o.status}`,{failureKind:"unknown",httpStatus:o.status});let a=await o.json(),c=a.five_hour?.utilization??0,s=a.seven_day?.utilization??0,u=a.five_hour?.resets_at??"",d=a.seven_day?.resets_at??"";return{fiveHour:{utilization:c,resetsAt:u},sevenDay:{utilization:s,resetsAt:d},available:!0,projectedFiveHour:Ne({utilization:c,resetsAt:u,windowMs:j.FIVE_HOUR_WINDOW_MS}),projectedSevenDay:Ne({utilization:s,resetsAt:d,windowMs:j.SEVEN_DAY_WINDOW_MS})}}catch{return Te("Network error",{failureKind:"network"})}finally{clearTimeout(r)}}});var hi=C(fn=>{"use strict";Object.defineProperty(fn,"__esModule",{value:!0});fn.isAggregateCodexLimit=ps;function ps(e){return!e||e==="codex"}});var st=C(oe=>{"use strict";var ms=oe&&oe.__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]})),ys=oe&&oe.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),mi=oe&&oe.__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"&&ms(n,t,r[i]);return ys(n,t),n}})();Object.defineProperty(oe,"__esModule",{value:!0});oe.writeQuotaSnapshot=ws;oe.readQuotaSnapshot=Cs;var yi=mi(y("fs")),gs=mi(y("path")),gi=De(),Si=ie(),Ss=He(),pi=hi();function pn(){return gs.join((0,gi.getConfigDir)(),"quota-snapshots.json")}function vi(){yi.mkdirSync((0,gi.getConfigDir)(),{recursive:!0,mode:448})}function Ai(){try{let e=JSON.parse(yi.readFileSync(pn(),"utf8"));if(e?.version===1&&Array.isArray(e.snapshots))return e}catch{}return{version:1,snapshots:[]}}function vs(e){vi(),(0,Si.atomicWriteJsonSync)(pn(),e)}function As(e){return vi(),(0,Si.withFileLockSync)(`${pn()}.lock`,e)}function hn(e){let t=e.capturedAt?Date.parse(e.capturedAt):NaN;return Number.isFinite(t)?t:0}function at(e){let t=Date.parse(e);return Number.isFinite(t)?t:0}function _s(e,t){let n=(0,pi.isAggregateCodexLimit)(e.limitId),r=(0,pi.isAggregateCodexLimit)(t.limitId);if(n!==r)return n;let i=at(e.fiveHour.resetsAt),o=at(t.fiveHour.resetsAt);if(i!==o)return i>o;let a=at(e.sevenDay.resetsAt),c=at(t.sevenDay.resetsAt);if(a!==c)return a>c;let s=e.fiveHour.utilization+e.sevenDay.utilization,u=t.fiveHour.utilization+t.sevenDay.utilization;return s!==u?s>u:hn(e)>hn(t)}function ws(e,t,n){As(()=>{let r=Ai(),i=r.snapshots.findIndex(d=>d.providerId===e&&d.accountId===t),o=i>=0?r.snapshots[i].quota:void 0,{capturedSource:a,...c}=n;delete c.ageMs,delete c.freshness;let s={...c,providerId:e,capturedAt:n.capturedAt??new Date().toISOString(),source:c.source&&c.source!=="cache"?c.source:a??"session",stale:!1,resetCredits:n.resetCredits??(e==="codex"?o?.resetCredits:void 0)};if(i>=0&&_s(r.snapshots[i].quota,s))return;let u={providerId:e,accountId:t,quota:s};i>=0?r.snapshots[i]=u:r.snapshots.push(u),vs(r)})}function Cs(e,t,n=new Date){let i=Ai().snapshots.find(u=>u.providerId===e&&u.accountId===t);if(!i)return null;let o=hn(i.quota),a=o>0?Math.max(0,n.getTime()-o):void 0,c=i.quota.capturedSource??i.quota.source,s=c&&c!=="cache"?c:void 0;return{...i.quota,providerId:e,source:"cache",...s?{capturedSource:s}:{},stale:!0,...a!==void 0?{ageMs:a}:{},freshness:(0,Ss.classifyQuotaFreshness)(a)}}});var qi=C(f=>{"use strict";var bs=f&&f.__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=f&&f.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Ci=f&&f.__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 Os(n,t),n}})();Object.defineProperty(f,"__esModule",{value:!0});f.CODEX_KEYRING_FIX_HINT=f.getCodexCredentialStoreMode=f.getSystemCodexHome=f.getCodexProfileHome=f.getCodexProfilesDir=void 0;f.getCodexMonitoringHomes=xs;f.storeCodexProfileAuth=he;f.parseCodexLoginStatusOutput=vn;f.getCodexLoginStatus=Le;f.getCodexLoginStatusAsync=Oe;f.readCodexAccountMetadata=Ei;f.readCodexAccountMetadataAsync=ji;f.isCodexProfileAuthenticated=Mi;f.isCodexProfileAuthenticatedAsync=Fi;f.listCodexAccounts=ae;f.getActiveCodexAccount=$e;f.resolveSidekickCodexHome=An;f.resolveActiveCodexAccount=Rs;f.getCodexExecutionEnv=Ts;f.prepareCodexAccount=Hs;f.prepareCodexAccountAsync=Ls;f.finalizeCodexAccount=Ti;f.finalizeCodexAccountAsync=Ni;f.withCodexAuthSwapLock=Pe;f.dedupeCodexProfiles=Li;f.syncCodexLiveStateUnlocked=_n;f.syncCodexLiveState=$s;f.cleanupAbandonedCodexLogins=ks;f.switchToCodexAccount=Bs;f.switchToCodexAccountAsync=Ws;f.reconcileCodexAuthState=zs;f.reconcileCodexAuthStateAsync=Ks;f.removeCodexAccount=Qs;var P=Ci(y("fs")),h=Ci(y("path")),bi=y("child_process"),Oi=y("crypto"),O=de(),Q=ie(),I=Vt(),l=Ye(),ut=nn(),z=rn(),Ps=cn(),Pi=sn(),mn=st(),dt=Ye();Object.defineProperty(f,"getCodexProfilesDir",{enumerable:!0,get:function(){return dt.getCodexProfilesDir}});Object.defineProperty(f,"getCodexProfileHome",{enumerable:!0,get:function(){return dt.getCodexProfileHome}});Object.defineProperty(f,"getSystemCodexHome",{enumerable:!0,get:function(){return dt.getSystemCodexHome}});Object.defineProperty(f,"getCodexCredentialStoreMode",{enumerable:!0,get:function(){return dt.getCodexCredentialStoreMode}});f.CODEX_KEYRING_FIX_HINT='Set `cli_auth_credentials_store = "file"` in ~/.codex/config.toml and run `codex login` again.';function Is(e){let t=new Set,n=[];for(let r of e){let i=h.resolve(r);t.has(i)||(t.add(i),n.push(r))}return n}function xs(){let e=(0,l.getExplicitCodexHome)();if(e)return[e];let t=[(0,l.getDefaultSystemCodexHome)()];for(let n of ae()){let r=(0,l.getCodexProfileHome)(n.id);P.existsSync(h.join(r,"sessions"))&&t.push(r)}return Is(t)}function ft(e){try{return JSON.parse(P.readFileSync((0,l.getCodexProfileStatePath)(e),"utf8"))}catch{return null}}function Ds(e,t){(0,l.ensureCodexProfileDirs)(e),(0,Q.atomicWriteJsonSync)((0,l.getCodexProfileStatePath)(e),t)}function _i(e,t){return P.existsSync(e)?(P.mkdirSync(h.dirname(t),{recursive:!0,mode:448}),P.copyFileSync(e,t),!0):!1}function Ii(e,t){let n=(0,l.readFileOrNull)(h.join(e,"config.toml"))??"";(0,Q.atomicWriteFileSync)(h.join(t,"config.toml"),(0,l.forceFileCredentialStore)(n))}function Es(e,t){let n=_i(h.join(e,"auth.json"),h.join(t,"auth.json")),r=_i(h.join(e,".credentials.json"),h.join(t,".credentials.json"));return n||r}function he(e,t,n,r){let i=(0,l.getCodexProfileHome)(e);t&&(0,Q.atomicWriteFileSync)(h.join(i,"auth.json"),t),n&&(0,Q.atomicWriteFileSync)(h.join(i,".credentials.json"),n),t&&(0,ut.writeCodexHealthSidecar)(e,t,r)}function js(e){let t=(0,I.readAuthIdentityFromRaw)((0,l.readFileOrNull)(h.join(e,"auth.json")));return t?{email:t.email,workspaceId:t.workspaceId,planType:t.planType,authMode:t.authMode}:{}}function Ms(e){let t=h.join(e,".credentials.json");if(!P.existsSync(t))return{};try{let n=JSON.parse(P.readFileSync(t,"utf8"));if(typeof n.OPENAI_API_KEY=="string"||typeof n.CODEX_API_KEY=="string")return{authMode:"api-key"}}catch{}return{}}var xi=4e3;function vn(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 Le(e){try{let t={...process.env,CODEX_HOME:e},n=(0,bi.spawnSync)("codex",["login","status"],{encoding:"utf8",env:t,timeout:xi,killSignal:"SIGKILL"});return vn(n.status,String(n.stdout??""))}catch{}return{loggedIn:!1}}function Oe(e){return new Promise(t=>{try{let n={...process.env,CODEX_HOME:e};(0,bi.execFile)("codex",["login","status"],{encoding:"utf8",env:n,timeout:xi,killSignal:"SIGKILL"},(r,i)=>{t(r?{loggedIn:!1}:vn(0,String(i??"")))})}catch{t({loggedIn:!1})}})}function ht(e){let t=js(e);if(t.email||t.workspaceId||t.planType||t.authMode)return t;let n=Ms(e);return n.authMode?n:null}function Di(e){return e.loggedIn?{authMode:e.authMode??"unknown"}:{}}function Ei(e){return ht(e)??Di(Le(e))}async function ji(e){return ht(e)??Di(await Oe(e))}function pe(e){return P.existsSync(h.join(e,"auth.json"))||P.existsSync(h.join(e,".credentials.json"))}function Mi(e){return pe(e)||Le(e).loggedIn}async function Fi(e){return pe(e)||(await Oe(e)).loggedIn}function Fs(e,t){let n=e.trim().toLowerCase();return ae().find(i=>i.id!==t&&(i.label??"").trim().toLowerCase()===n)?`A Codex account named "${e}" already exists.`:null}function ae(){return(0,O.listSavedAccountProfiles)("codex")}function $e(){return(0,O.getActiveSavedAccount)("codex")}function An(){return(0,l.getSystemCodexHome)()}function wi(e){return{email:e.email??e.metadata?.email,workspaceId:e.metadata?.workspaceId}}function Rs(e={}){let t=e.selfHeal??!0,n=(0,I.readAuthIdentityFromRaw)((0,l.readFileOrNull)(h.join(An(),"auth.json")));if(n&&(n.email||n.workspaceId)){let i=ke(n);if(i){let o=(0,O.getActiveSavedAccount)("codex");if(t&&(!o||o.id!==i.id))try{(0,O.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=$e();return r?{email:r.email??r.metadata?.email,label:r.label,providerAccountId:r.providerAccountId,registryAccountId:r.id,source:"registry"}:{source:"none"}}function Ts(e=process.env){return{...e,CODEX_HOME:An()}}function Ns(e){return{success:!1,needsLogin:!1,error:`Codex stores credentials in the OS keyring (cli_auth_credentials_store = "${e}"); sidekick can only switch file-based logins. ${f.CODEX_KEYRING_FIX_HINT}`}}function Ri(e){let t=e.trim();if(!t)return{result:{success:!1,error:"Codex accounts require a non-empty label."}};let n=Fs(t);if(n)return{result:{success:!1,error:n}};let r=(0,l.getSystemCodexHome)(),i=(0,l.getCodexCredentialStoreMode)(r),o=pe(r);if(i==="keyring"||i==="auto"&&!o)return{result:Ns(i)};let a=(0,Oi.randomUUID)(),c=(0,l.getCodexProfileHome)(a);if((0,l.ensureCodexProfileDirs)(a),Ds(a,{label:t,addedAt:new Date().toISOString()}),Ii(r,c),Es(r,c)){let u=(0,I.readAuthIdentityFromRaw)((0,l.readFileOrNull)(h.join(c,"auth.json"))),d=u?ke(u,{fallbackToActive:!1}):null;if(d){try{let A=(0,I.readLastRefresh)((0,l.readFileOrNull)(h.join(c,"auth.json"))),v=(0,I.readLastRefresh)((0,l.readFileOrNull)(h.join((0,l.getCodexProfileHome)(d.id),"auth.json")));v!==null&&A!==null&&v>A||he(d.id,(0,l.readFileOrNull)(h.join(c,"auth.json")),(0,l.readFileOrNull)(h.join(c,".credentials.json")),"login")}catch{}P.rmSync((0,l.getCodexProfileDir)(a),{recursive:!0,force:!0});let p=d.metadata?.origin==="live-sync"&&d.label===d.email?{...d,label:t,metadata:{...d.metadata,origin:"manual"}}:d;return p!==d&&(0,O.upsertSavedAccountProfile)(p),{result:{success:!0,profileId:d.id,codexHome:(0,l.getCodexProfileHome)(d.id),needsLogin:!1,warning:`This Codex login is already saved as "${p.label??d.email??d.id}".`}}}return{finalize:{profileId:a,codexHome:c}}}return{result:{success:!0,profileId:a,codexHome:c,needsLogin:!0}}}function Hs(e){let t=Ri(e);return"finalize"in t?{...Ti(t.finalize.profileId),...t.finalize,needsLogin:!1}:t.result}async function Ls(e){let t=Ri(e);return"finalize"in t?{...await Ni(t.finalize.profileId),...t.finalize,needsLogin:!1}:t.result}function lt(e,t,n){let r=ft(e);if(!r){let u=ae().find(d=>d.id===e);return u?t.activate===!1?{result:{success:!0,profileId:e}}:{swap:u}:{result:{success:!1,error:`Codex profile ${e} was not prepared.`}}}let i=(0,l.getCodexProfileHome)(e);if(!n.authenticated)return{result:{success:!1,error:"Codex profile is not authenticated yet."}};let o=(0,l.readFileOrNull)(h.join(i,"auth.json")),a=(0,I.readAuthIdentityFromRaw)(o),c=a?ke(a,{fallbackToActive:!1}):null;if(c&&c.id!==e){he(c.id,o,(0,l.readFileOrNull)(h.join(i,".credentials.json")),"login"),P.rmSync((0,l.getCodexProfileDir)(e),{recursive:!0,force:!0});let u={...c,label:c.metadata?.origin==="live-sync"?r.label:c.label,email:n.metadata.email??c.email,metadata:{...c.metadata,...n.metadata,origin:"login"}};return(0,O.upsertSavedAccountProfile)(u),t.activate===!1?{result:{success:!0,profileId:c.id}}:{swap:u}}let s={id:e,providerId:"codex",label:r.label,email:n.metadata.email,addedAt:r.addedAt,metadata:{...n.metadata,origin:"login"}};(0,O.upsertSavedAccountProfile)(s),o&&(0,ut.writeCodexHealthSidecar)(e,o,"login");try{P.rmSync((0,l.getCodexProfileStatePath)(e),{force:!0})}catch{}return t.activate===!1?{result:{success:!0,profileId:e}}:pe(i)?{swap:s}:((0,O.setActiveSavedAccount)("codex",e),{result:{success:!0,profileId:e,warning:`Codex stores credentials in the OS keyring; sidekick cannot swap them per account, so \`codex\` keeps using the keyring credentials. ${f.CODEX_KEYRING_FIX_HINT}`}})}function Ti(e,t={}){if(!ft(e)){let o=lt(e,t,{authenticated:!1,metadata:{}});return"swap"in o?gn(o.swap,{}):o.result}let n=(0,l.getCodexProfileHome)(e),r=Mi(n),i=lt(e,t,{authenticated:r,metadata:r?Ei(n):{}});return"swap"in i?gn(i.swap,{}):i.result}async function Ni(e,t={}){if(!ft(e)){let o=lt(e,t,{authenticated:!1,metadata:{}});return"swap"in o?Sn(o.swap,{}):o.result}let n=(0,l.getCodexProfileHome)(e),r=await Fi(n),i=lt(e,t,{authenticated:r,metadata:r?await ji(n):{}});return"swap"in i?Sn(i.swap,{}):i.result}function yn(){return h.join((0,O.getAccountsDir)(),"codex","stash")}function Hi(e,t){try{let n=new Date().toISOString().replace(/[:.]/g,"-"),r=null;if(e&&(r=h.join(yn(),`auth-${n}.json`),(0,Q.atomicWriteFileSync)(r,e)),t){let i=h.join(yn(),`credentials-${n}.json`);(0,Q.atomicWriteFileSync)(i,t),r=r??i}return r}catch{return null}}function ke(e,t={}){let n=ae();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);if(r)return r}return!e?.workspaceId&&!e?.email&&t.fallbackToActive!==!1?$e():null}function Pe(e){let t=h.join((0,O.getAccountsDir)(),"codex");return P.mkdirSync(t,{recursive:!0,mode:448}),(0,Q.withFileLockSync)(h.join(t,"auth-swap.lock"),e)}function Li(){let e=[],t=ae(),n=new Map;for(let r of t){let i=r.metadata?.workspaceId?`ws:${r.metadata.workspaceId}`:r.email??r.metadata?.email?`email:${r.email??r.metadata?.email}`:`id:${r.id}`;n.set(i,[...n.get(i)??[],r])}for(let r of n.values()){if(r.length<2)continue;let i=[...r].sort((p,A)=>Date.parse(p.addedAt)-Date.parse(A.addedAt)),o=i[0],a=h.join((0,l.getCodexProfileHome)(o.id),"auth.json"),c=(0,l.readFileOrNull)(a),s=(0,I.readLastRefresh)(c,a)??-1,u=(0,O.getActiveSavedAccount)("codex")?.id;for(let p of i.slice(1)){let A=h.join((0,l.getCodexProfileHome)(p.id),"auth.json"),v=(0,l.readFileOrNull)(A),w=(0,I.readLastRefresh)(v,A)??-1;v&&w>s&&(c=v,s=w);try{if(!(0,mn.readQuotaSnapshot)("codex",o.id)){let L=(0,mn.readQuotaSnapshot)("codex",p.id);L&&(0,mn.writeQuotaSnapshot)("codex",o.id,L)}}catch{}try{let L=h.join(yn(),`dup-${p.id}-${new Date().toISOString().replace(/[:.]/g,"-")}`);P.mkdirSync(h.dirname(L),{recursive:!0,mode:448}),P.renameSync((0,l.getCodexProfileDir)(p.id),L)}catch{P.rmSync((0,l.getCodexProfileDir)(p.id),{recursive:!0,force:!0})}(0,O.removeSavedAccountProfile)("codex",p.id),e.push(p.id),u===p.id&&(0,O.setActiveSavedAccount)("codex",o.id,{silent:!0})}c&&c!==(0,l.readFileOrNull)(a)&&he(o.id,c,null,"migration");let d=ht((0,l.getCodexProfileHome)(o.id))??{};(0,O.upsertSavedAccountProfile)({...o,email:d.email??o.email,metadata:{...o.metadata,...d}})}return e}function _n(e="live-sync",t={}){let n=(0,Ps.emptyProviderSyncReport)();try{let r=Li();r.length&&(n.merged=r);let i=(0,l.getSystemCodexHome)(),o=h.join(i,"auth.json"),a=(0,l.readFileOrNull)(o),c=(0,l.readFileOrNull)(h.join(i,".credentials.json"));if(!a&&!c){let x=(0,l.getCodexCredentialStoreMode)(i);return t.systemKeyringLoggedIn||x==="keyring"||x==="auto"?(n.skipped="keyring",n.warnings.push(`Codex keeps its login in the OS keyring; sidekick cannot switch it. ${f.CODEX_KEYRING_FIX_HINT}`)):n.skipped="logged-out",n}let s=(0,I.readAuthIdentityFromRaw)(a),u=ke(s,{fallbackToActive:!1});if(!u&&s&&(s.email||s.workspaceId)){let x=(0,Oi.randomUUID)();u={id:x,providerId:"codex",label:s.email??s.workspaceId,email:s.email,addedAt:new Date().toISOString(),metadata:{email:s.email,workspaceId:s.workspaceId,planType:s.planType,authMode:s.authMode,origin:"live-sync"}},(0,l.ensureCodexProfileDirs)(x),Ii(i,(0,l.getCodexProfileHome)(x)),(0,O.upsertSavedAccountProfile)(u),n.registered={id:x,email:s.email}}else if(!u){let x=$e();if(x&&x.metadata?.authMode==="api-key")u=x;else return n.skipped="no-identity",n}let d=h.join((0,l.getCodexProfileHome)(u.id),"auth.json"),p=(0,l.readFileOrNull)(d),A=(0,I.readLastRefresh)(p),v=(0,I.readLastRefresh)(a),w=A!==null&&v!==null&&A>v;if(a!==p&&!w)try{he(u.id,a,c,e);let x=ht((0,l.getCodexProfileHome)(u.id))??{};(0,O.upsertSavedAccountProfile)({...u,email:x.email??u.email,metadata:{...u.metadata,...x}}),n.folded=u.id}catch(x){n.warnings.push(`Could not back up the live Codex credentials: ${x}`)}let ee=(0,O.getActiveSavedAccount)("codex");(!ee||ee.id!==u.id)&&((0,O.setActiveSavedAccount)("codex",u.id,{silent:!0}),n.repointed=u.id)}catch(r){n.warnings.push(`Codex account sync failed: ${r}`)}return n}function $s(e="live-sync"){try{return Pe(()=>_n(e))}catch(t){return{warnings:[`Could not acquire the account-switch lock: ${t}`]}}}function ks(e=360*60*1e3,t=Date.now()){let n=[],r=[];try{r=P.readdirSync((0,l.getCodexProfilesDir)())}catch{return n}let i=new Set(ae().map(o=>o.id));for(let o of r){if(i.has(o))continue;let a=ft(o);if(!a||pe((0,l.getCodexProfileHome)(o)))continue;let c=Date.parse(a.addedAt);if(!((Number.isNaN(c)?Number.POSITIVE_INFINITY:t-c)<e))try{P.rmSync((0,l.getCodexProfileDir)(o),{recursive:!0,force:!0}),n.push(o)}catch{}}return n}function Us(){let e=(0,l.getSystemCodexHome)();return{consumers:(0,Pi.detectRunningAccountConsumersSync)("codex"),systemKeyringLoggedIn:pe(e)?!1:Le(e).loggedIn}}async function qs(){let e=(0,l.getSystemCodexHome)();return{consumers:await(0,Pi.detectRunningAccountConsumers)("codex"),systemKeyringLoggedIn:pe(e)?!1:(await Oe(e)).loggedIn}}function gn(e,t){let n=Us();try{return Pe(()=>$i(e,t,n))}catch(r){return(0,z.switchFailure)("codex",e.id,`Could not acquire the account-switch lock: ${r}`)}}async function Sn(e,t){let n=await qs(),r;try{r=Pe(()=>$i(e,t,n))}catch(i){return(0,z.switchFailure)("codex",e.id,`Could not acquire the account-switch lock: ${i}`)}return r.success&&t.verifyWithCli&&!r.alreadyActive&&(r=(await Oe((0,l.getSystemCodexHome)())).loggedIn?{...r,verification:"cli"}:(0,z.finishSwitchResult)({...r,warnings:[...r.warnings,'`codex login status` reports "Not logged in" after the switch; the stored token may have been revoked. Sign in again if codex prompts you.']})),r}function $i(e,t,n){let r=(0,l.getSystemCodexHome)(),i=h.join(r,"auth.json"),o=h.join(r,".credentials.json"),a=e.label??e.email??e.id,c=(0,O.getActiveSavedAccount)("codex")?.id??null,s={success:!0,provider:"codex",accountId:e.id,previousAccountId:c,verified:!1,verification:"none",warnings:[],hints:[],runningConsumers:n.consumers,email:e.email??e.metadata?.email},u=h.resolve((0,l.getCodexProfilesDir)()),d=h.resolve(r);if(d===u||d.startsWith(u+h.sep))return(0,z.finishSwitchResult)({...s,success:!1,error:`CODEX_HOME points at a sidekick profile home (${r}); unset it before switching accounts.`});let p=(0,l.readFileOrNull)(i),A=(0,l.readFileOrNull)(o);if(!p&&!A&&n.systemKeyringLoggedIn)return(0,z.finishSwitchResult)({...s,success:!1,error:`Codex stores credentials in the OS keyring; file-based account switching is not supported. ${f.CODEX_KEYRING_FIX_HINT}`});let v=_n("switch",{systemKeyringLoggedIn:n.systemKeyringLoggedIn});if(s.warnings.push(...v.warnings),c=(0,O.getActiveSavedAccount)("codex")?.id??null,s.previousAccountId=c,v.skipped==="no-identity"&&p){let ge=Hi(p,A);s.warnings.push(ge?`Live Codex credentials did not match any saved account; stashed at ${ge}.`:"Live Codex credentials did not match any saved account and could not be stashed.")}let w=(0,l.readFileOrNull)(i),L=(0,l.readFileOrNull)(o),ee=(0,l.getCodexProfileHome)(e.id),x=h.join(ee,"auth.json"),T=(0,l.readFileOrNull)(x),K=(0,l.readFileOrNull)(h.join(ee,".credentials.json"));if(!T&&!K)return(0,z.finishSwitchResult)({...s,success:!1,needsLogin:!0,error:`No stored credentials for "${a}". Sign in again to this account.`});if(T&&!(0,I.parseAuthJson)(T))return(0,z.finishSwitchResult)({...s,success:!1,needsLogin:!0,error:`Stored credentials for "${a}" are corrupted. Sign in again to this account.`});let xe=(0,I.readAuthIdentityFromRaw)(w);if(!!((0,I.identitiesMatch)(xe,{...wi(e),...(0,I.readAuthIdentityFromRaw)(T)??{}})||w!==null&&w===T||!w&&!T&&L!==null&&L===K))return c!==e.id&&(0,O.setActiveSavedAccount)("codex",e.id),(0,z.finishSwitchResult)({...s,alreadyActive:!0,verified:!0,verification:"store",health:(0,ut.getAccountHealth)("codex",e.id),hints:[`${a} is already the active Codex account.`]});let At=(0,ut.getAccountHealth)("codex",e.id,{probe:"store"});if(s.health=At,(At.state==="expired"||At.state==="missing")&&!t.force)return(0,z.finishSwitchResult)({...s,success:!1,needsLogin:!0,error:`Stored credentials for "${a}" have expired; sign in again.`});let Tn=(0,I.readLastRefresh)(T,x);Tn!==null&&Date.now()-Tn>I.STALE_AUTH_THRESHOLD_MS&&s.warnings.push(`Stored credentials for "${a}" have not been refreshed in over 8 days; codex may ask you to log in again.`);let _t=()=>{try{w?(0,Q.atomicWriteFileSync)(i,w):P.rmSync(i,{force:!0}),L?(0,Q.atomicWriteFileSync)(o,L):P.rmSync(o,{force:!0})}catch{}try{(0,O.setActiveSavedAccount)("codex",c,{silent:!0})}catch{}};try{T?((0,Q.atomicWriteFileSync)(i,T),K?(0,Q.atomicWriteFileSync)(o,K):L&&P.rmSync(o,{force:!0})):((0,Q.atomicWriteFileSync)(o,K),w&&P.rmSync(i,{force:!0}))}catch(ge){return _t(),(0,z.finishSwitchResult)({...s,success:!1,error:`Failed to write Codex credentials: ${ge}`})}let Nn=(0,l.readFileOrNull)(T?i:o),Co=T??K,Hn=T?(0,I.readAuthIdentityFromRaw)(Nn):null;if(!(Nn===Co&&(!T||(0,I.identitiesMatch)(Hn,{...wi(e),...(0,I.readAuthIdentityFromRaw)(T)??{}})||Hn?.authMode==="api-key")))return _t(),(0,z.finishSwitchResult)({...s,success:!1,verification:"failed",error:`The live Codex credential file did not reflect the switch to "${a}"; the previous login was restored.`});try{(0,O.setActiveSavedAccount)("codex",e.id)}catch(ge){return _t(),(0,z.finishSwitchResult)({...s,success:!1,error:`Failed to update account registry: ${ge}`})}let Ln;try{Ln=(0,z.writeLastSwitch)("codex",c,e.id).token}catch{s.warnings.push("The switch succeeded but could not be recorded for undo.")}return(0,z.finishSwitchResult)({...s,verified:!0,verification:"store",undoToken:Ln,hints:[`New codex sessions use ${e.email??a}.`]})}function Bs(e,t={}){let n=ae().find(r=>r.id===e);return n?gn(n,t):(0,z.switchFailure)("codex",e,`Codex account ${e} not found.`)}async function Ws(e,t={}){let n=ae().find(r=>r.id===e);return n?Sn(n,t):(0,z.switchFailure)("codex",e,`Codex account ${e} not found.`)}function ki(){let e=h.join((0,O.getAccountsDir)(),"codex",".live-auth-migrated-v1");return P.existsSync(e)?!1:!P.existsSync(h.join((0,l.getSystemCodexHome)(),"auth.json"))}function zs(){try{let e=ki()?Le((0,l.getSystemCodexHome)()).loggedIn:!1;Pe(()=>Ui({systemKeyringLoggedIn:e}))}catch{}}async function Ks(){try{let e=ki()?(await Oe((0,l.getSystemCodexHome)())).loggedIn:!1;Pe(()=>Ui({systemKeyringLoggedIn:e}))}catch{}}function Ui(e){try{let t=h.join((0,O.getAccountsDir)(),"codex",".live-auth-migrated-v1");if(P.existsSync(t))return;let n=()=>(0,Q.atomicWriteFileSync)(t,new Date().toISOString()+`
|
|
15
|
-
`),r=$e();if(!r){n();return}let i=(0,l.getCodexProfileHome)(r.id),o=h.join(i,"auth.json"),a=(0,l.readFileOrNull)(o);if(!a){n();return}let c=(0,l.getSystemCodexHome)(),s=h.join(c,"auth.json"),u=(0,l.readFileOrNull)(s);if(!u){e.systemKeyringLoggedIn||(0,Q.atomicWriteFileSync)(s,a),n();return}let d=(0,I.readAuthIdentityFromRaw)(u),p=(0,I.readAuthIdentityFromRaw)(a);if((0,I.identitiesMatch)(d,p)){let v=(0,I.readLastRefresh)(u,s),w=(0,I.readLastRefresh)(a,o);w!==null&&(v===null||w>v)?(Hi(u,null),(0,Q.atomicWriteFileSync)(s,a)):he(r.id,u,null,"migration")}else{let v=ke(d);v&&v.id!==r.id&&(he(v.id,u,null,"migration"),(0,O.setActiveSavedAccount)("codex",v.id))}n()}catch{}}function Qs(e){return(0,O.removeSavedAccountProfile)("codex",e)?(P.rmSync((0,l.getCodexProfileDir)(e),{recursive:!0,force:!0}),{success:!0}):{success:!1,error:`Codex account ${e} not found.`}}});var Bi=C(wn=>{"use strict";Object.defineProperty(wn,"__esModule",{value:!0});wn.getActiveAccountStatus=Ys;var Vs=fi(),Gs=qi();function Js(e){return e instanceof Error?e.message:String(e)}function Ys(e,t={}){try{let n=(0,Vs.resolveActiveClaudeAccount)(t),r=(0,Gs.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??Js(n)}}}});var Ki=C(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.formatTokenCount=Xs;me.formatDurationMs=Zs;me.formatLocalDateKey=Wi;me.parseLocalDateKey=zi;me.addLocalDays=eu;function Xs(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 Zs(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 c=Math.floor(a),s=Math.floor(c/3600),u=Math.floor(c%3600/60),d=c%60;return s>0?`${s}h${i}${u}m${i}${d}s`:`${u}m${i}${d}s`}function Wi(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 zi(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 eu(e,t){let n=zi(e);return n?Wi(new Date(n.getFullYear(),n.getMonth(),n.getDate()+t)):e}});var to=C(G=>{"use strict";var tu=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]})),nu=G&&G.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),bn=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"&&tu(n,t,r[i]);return nu(n,t),n}})();Object.defineProperty(G,"__esModule",{value:!0});G.getWorkspaceIdFromPath=au;G.appendQuotaHistorySample=pu;G.readQuotaHistoryRange=eo;G.readQuotaHistoryDailyBuckets=mu;G.pruneQuotaHistory=yu;G._resetQuotaHistoryInMemoryStateForTests=gu;var ru=bn(y("crypto")),re=bn(y("fs")),On=bn(y("path")),Qi=Ki(),Vi=De(),iu=st(),Gi=ie(),ou=6e4,Pn=91,cu=16*1024,Ji=864e5,Ue=new Map,pt=new Map;function au(e){let t;try{t=re.realpathSync(e)}catch{t=On.resolve(e)}return ru.createHash("sha256").update(t).digest("hex").slice(0,16)}function In(e,t){return On.join((0,Vi.getConfigDir)(),"quota-history",e,`${t}.jsonl`)}function su(e){re.mkdirSync(On.join((0,Vi.getConfigDir)(),"quota-history",e),{recursive:!0,mode:448})}function mt(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 uu(e){let t;try{t=re.openSync(e,"r");let n=re.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),c=Buffer.alloc(a);re.readSync(t,c,0,a,i-a),o=Buffer.concat([c,o]),i-=a;let u=o.toString("utf8").replace(/\n+$/,""),d=u.lastIndexOf(`
|
|
16
|
-
`);if(d>=0){let p=u.slice(d+1),A=mt(p);return A&&Date.parse(A.timestamp)||null}if(i===0){let p=mt(u);return p&&Date.parse(p.timestamp)||null}}return null}catch(n){return n?.code==="ENOENT",null}finally{if(t!==void 0)try{re.closeSync(t)}catch{}}}function lu(e,t){return(0,Gi.withFileLockSync)(`${e}.lock`,t)}function du(e,t){(0,Gi.atomicWriteFileSync)(e,t,384)}function Yi(e,t){let n;try{n=re.statSync(e)}catch{return{kept:0,pruned:0}}if(n.size===0)return{kept:0,pruned:0};let r=Date.now()-t*Ji,o=re.readFileSync(e,"utf8").split(`
|
|
17
|
-
`),a=[],c=0;for(let s of o){if(!s.trim())continue;let u=mt(s);if(!u){c+=1;continue}let d=Date.parse(u.timestamp);Number.isFinite(d)&&d>=r?a.push(s):c+=1}return c>0&&du(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(`
|
|
18
7
|
`)+`
|
|
19
|
-
`:""),{kept:
|
|
20
|
-
`;
|
|
21
|
-
`)){let u=mt(s);if(!u)continue;let d=Date.parse(u.timestamp);Number.isFinite(d)&&(d<o||d>a||c.push(u))}return c.sort((s,u)=>Date.parse(s.timestamp)-Date.parse(u.timestamp)),c}function Cn(e){return(0,Qi.formatLocalDateKey)(e)}async function mu(e){let t=await eo(e),{fromMs:n,toMs:r}=Zi(),i=e.from?Date.parse(e.from):n,o=e.to?Date.parse(e.to):r,a=Cn(i),c=Cn(o),s=new Map;for(let p of t){let A=Date.parse(p.timestamp);if(!Number.isFinite(A))continue;let v=Cn(A),w=s.get(v);w?w.push(p):s.set(v,[p])}let u=[],d=a;for(let p=0;p<=366&&d<=c;p+=1){let A=s.get(d);if(!A||A.length===0)u.push({date:d,samples:0,maxUtilizationFiveHour:0,maxUtilizationSevenDay:0,avgUtilizationFiveHour:0,avgUtilizationSevenDay:0,anyUnavailable:!1});else{let v=0,w=0,L=0,ee=0,x=!1;for(let K of A)v=Math.max(v,K.fiveHour.utilization),w=Math.max(w,K.sevenDay.utilization),L+=K.fiveHour.utilization,ee+=K.sevenDay.utilization,K.available||(x=!0);let T=A.length;u.push({date:d,samples:T,maxUtilizationFiveHour:v,maxUtilizationSevenDay:w,avgUtilizationFiveHour:Math.round(L/T*100)/100,avgUtilizationSevenDay:Math.round(ee/T*100)/100,anyUnavailable:x})}d=(0,Qi.addLocalDays)(d,1)}return u}async function yu(e,t,n=Pn){let r=In(e,t);return Yi(r,n)}function gu(){Ue.clear(),pt.clear()}});var Dn=C(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.BurnRateCalculator=void 0;qe.estimateTimeToQuota=no;var xn=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 no(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)}};qe.BurnRateCalculator=xn;function no(e,t,n){if(n<=0)return null;let r=t-e;return r<=0?0:r/n}});var oo=C(gt=>{"use strict";Object.defineProperty(gt,"__esModule",{value:!0});gt.selectStatuslineAccount=io;gt.formatStatusline=vu;var ro=He(),Su=Dn();function io(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 vu(e){let t=io(e),n=e.now??new Date,r=Au(e.live);if(!t)return En(["acct:none","quota unavailable",...r]);let i=Cu(t.accountLabel),o=t.quota;if(!o?.available)return En([`acct:${i}`,"quota unavailable",...r]);let a=yt(o.fiveHour.utilization),c=bu(o.fiveHour.resetsAt,n),s=wu(o,n),u=[`acct:${i}`,`5h ${Math.round(a)}% resets ${c}`];return s!=null&&u.push(`~${Ou(s)} left`),o.sevenDay.resetsAt&&o.sevenDay.utilization>0&&u.push(`7d ${Math.round(yt(o.sevenDay.utilization))}%`),o.freshness&&o.freshness!=="fresh"&&u.push(`(${(0,ro.formatQuotaAge)(o.ageMs)})`),En([...u,...r])}function Au(e){if(!e)return[];let t=[],n=e.contextWindow?.usedPercentage;typeof n=="number"&&t.push(`ctx ${Math.round(yt(n))}%`);let r=e.cost?.totalCostUsd;typeof r=="number"&&r>0&&t.push(`$${_u(r)}`);let i=e.promptCache?.hitRatio;return typeof i=="number"&&t.push(`cache ${Math.round(yt(i*100))}%`),t}function En(e){return e.join(" \xB7 ")}function _u(e){return e>=100?e.toFixed(0):e>=10?e.toFixed(1):e.toFixed(2)}function wu(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-ro.FIVE_HOUR_WINDOW_MS))/6e4;if(a<=0||e.fiveHour.utilization<=0)return null;let c=e.fiveHour.utilization/a,s=(0,Su.estimateTimeToQuota)(e.fiveHour.utilization,100,c),u=(n-r)/6e4;return s!==null&&s<u?s:null}function Cu(e){let t=e.trim();return(t.includes("@")?t.split("@")[0]:t).replace(/\s+/g,"-").slice(0,24)||"unknown"}function yt(e){return Number.isFinite(e)?Math.min(100,Math.max(0,e)):0}function bu(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 Ou(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 so=C(St=>{"use strict";Object.defineProperty(St,"__esModule",{value:!0});St.parseClaudeStatuslinePayload=Pu;St.quotaFromStatuslinePayload=Iu;function ue(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function J(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function jn(e){return e===null?null:J(e)}function se(e){return typeof e=="string"&&e.length>0?e:void 0}function co(e){return typeof e=="boolean"?e:void 0}function Mn(e){if(!ue(e))return;let t=J(e.used_percentage),n=J(e.resets_at);if(!(t===void 0||n===void 0))return{usedPercentage:t,resetsAt:n}}function Ie(e){return Object.values(e).some(t=>t!==void 0)?e:void 0}function Pu(e){if(typeof e!="string"||!e.trim())return null;let t;try{t=JSON.parse(e)}catch{return null}if(!ue(t))return null;let n=ue(t.model)?t.model:void 0,r=ue(t.workspace)?t.workspace:void 0,i=ue(t.context_window)?t.context_window:void 0,o=ue(t.cost)?t.cost:void 0,a=ue(t.rate_limits)?t.rate_limits:void 0,c=ue(t.prompt_cache)?t.prompt_cache:void 0;return{sessionId:se(t.session_id),transcriptPath:se(t.transcript_path),cwd:se(t.cwd),model:n?Ie({id:se(n.id),displayName:se(n.display_name)}):void 0,workspace:r?Ie({currentDir:se(r.current_dir),projectDir:se(r.project_dir),gitWorktree:se(r.git_worktree)}):void 0,contextWindow:i?Ie({usedPercentage:jn(i.used_percentage),remainingPercentage:jn(i.remaining_percentage),contextWindowSize:J(i.context_window_size),totalInputTokens:J(i.total_input_tokens),totalOutputTokens:J(i.total_output_tokens)}):void 0,cost:o?Ie({totalCostUsd:J(o.total_cost_usd),totalDurationMs:J(o.total_duration_ms),totalApiDurationMs:J(o.total_api_duration_ms),totalLinesAdded:J(o.total_lines_added),totalLinesRemoved:J(o.total_lines_removed)}):void 0,rateLimits:a?Ie({fiveHour:Mn(a.five_hour),sevenDay:Mn(a.seven_day),spendLimit:Mn(a.spend_limit)}):void 0,promptCache:c?Ie({warm:co(c.warm),cachingObserved:co(c.caching_observed),hitRatio:jn(c.hit_ratio),requests:J(c.requests),misses:J(c.misses),expectedRebuilds:J(c.expected_rebuilds)}):void 0,raw:t}}function ao(e,t){return e?{utilization:Math.max(0,e.usedPercentage),resetsAt:new Date(e.resetsAt*1e3).toISOString()}:t??{utilization:0,resetsAt:""}}function Iu(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:ao(n.fiveHour,i?.fiveHour),sevenDay:ao(n.sevenDay,i?.sevenDay),available:!0,providerId:"claude-code",source:"statusline",capturedAt:r.toISOString(),stale:!1}}});var fo=C(R=>{"use strict";var xu=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]})),Du=R&&R.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),Eu=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"&&xu(n,t,r[i]);return Du(n,t),n}})();Object.defineProperty(R,"__esModule",{value:!0});R.STATE_FILE_NAME=R.STATE_FILE_SCHEMA_VERSION=void 0;R.getStateFilePath=Rn;R.readStateFile=lo;R.writeStateFile=Tu;R.quotaToStateFile=Nu;R.billingBlockToStateFile=Hu;var ju=Eu(y("fs")),Mu=De(),Fu=He(),Ru=ie();R.STATE_FILE_SCHEMA_VERSION=1;R.STATE_FILE_NAME="state.json";function Rn(){return(0,Mu.getGlobalDataPath)(R.STATE_FILE_NAME)}function lo(e=Rn()){try{let t=JSON.parse(ju.readFileSync(e,"utf8"));return t&&t.schemaVersion===R.STATE_FILE_SCHEMA_VERSION?t:null}catch{return null}}function Fn(e){if(Array.isArray(e))return`[${e.map(Fn).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)}:${Fn(t[r])}`).join(",")}}`}return JSON.stringify(e)??"null"}function uo(e){return Fn({...e,schemaVersion:void 0,writtenAt:void 0})}function Tu(e,t={}){let n=t.filePath??Rn();try{let r=lo(n);if(r&&uo(r)===uo(e))return!1;let i={schemaVersion:R.STATE_FILE_SCHEMA_VERSION,writtenAt:(t.now??new Date).toISOString(),...e};return(0,Ru.atomicWriteJsonSync)(n,i),!0}catch{return!1}}function Nu(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,Fu.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 Hu(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 vo=C(m=>{"use strict";Object.defineProperty(m,"__esModule",{value:!0});m.writeStateFile=m.readStateFile=m.quotaToStateFile=m.getStateFilePath=m.billingBlockToStateFile=m.STATE_FILE_SCHEMA_VERSION=m.STATE_FILE_NAME=m.quotaFromStatuslinePayload=m.parseClaudeStatuslinePayload=m.selectStatuslineAccount=m.formatStatusline=m.estimateTimeToQuota=m.BurnRateCalculator=m.formatQuotaAge=m.classifyQuotaFreshness=m.getWorkspaceIdFromPath=m.appendQuotaHistorySample=m.writeQuotaSnapshot=m.readQuotaSnapshot=m.getActiveAccountStatus=void 0;var Lu=Bi();Object.defineProperty(m,"getActiveAccountStatus",{enumerable:!0,get:function(){return Lu.getActiveAccountStatus}});var ho=st();Object.defineProperty(m,"readQuotaSnapshot",{enumerable:!0,get:function(){return ho.readQuotaSnapshot}});Object.defineProperty(m,"writeQuotaSnapshot",{enumerable:!0,get:function(){return ho.writeQuotaSnapshot}});var po=to();Object.defineProperty(m,"appendQuotaHistorySample",{enumerable:!0,get:function(){return po.appendQuotaHistorySample}});Object.defineProperty(m,"getWorkspaceIdFromPath",{enumerable:!0,get:function(){return po.getWorkspaceIdFromPath}});var mo=He();Object.defineProperty(m,"classifyQuotaFreshness",{enumerable:!0,get:function(){return mo.classifyQuotaFreshness}});Object.defineProperty(m,"formatQuotaAge",{enumerable:!0,get:function(){return mo.formatQuotaAge}});var yo=Dn();Object.defineProperty(m,"BurnRateCalculator",{enumerable:!0,get:function(){return yo.BurnRateCalculator}});Object.defineProperty(m,"estimateTimeToQuota",{enumerable:!0,get:function(){return yo.estimateTimeToQuota}});var go=oo();Object.defineProperty(m,"formatStatusline",{enumerable:!0,get:function(){return go.formatStatusline}});Object.defineProperty(m,"selectStatuslineAccount",{enumerable:!0,get:function(){return go.selectStatuslineAccount}});var So=so();Object.defineProperty(m,"parseClaudeStatuslinePayload",{enumerable:!0,get:function(){return So.parseClaudeStatuslinePayload}});Object.defineProperty(m,"quotaFromStatuslinePayload",{enumerable:!0,get:function(){return So.quotaFromStatuslinePayload}});var ye=fo();Object.defineProperty(m,"STATE_FILE_NAME",{enumerable:!0,get:function(){return ye.STATE_FILE_NAME}});Object.defineProperty(m,"STATE_FILE_SCHEMA_VERSION",{enumerable:!0,get:function(){return ye.STATE_FILE_SCHEMA_VERSION}});Object.defineProperty(m,"billingBlockToStateFile",{enumerable:!0,get:function(){return ye.billingBlockToStateFile}});Object.defineProperty(m,"getStateFilePath",{enumerable:!0,get:function(){return ye.getStateFilePath}});Object.defineProperty(m,"quotaToStateFile",{enumerable:!0,get:function(){return ye.quotaToStateFile}});Object.defineProperty(m,"readStateFile",{enumerable:!0,get:function(){return ye.readStateFile}});Object.defineProperty(m,"writeStateFile",{enumerable:!0,get:function(){return ye.writeStateFile}})});var M=Eo(vo(),1);import*as vt from"fs";function $u(e=process.env){if(e.SIDEKICK_STATUSLINE_STDIN==="0")return null;try{if(process.stdin.isTTY)return null;let t=vt.fstatSync(0);return t.isFIFO()||t.isFile()||t.isSocket()?(0,M.parseClaudeStatuslinePayload)(vt.readFileSync(0,"utf8")):null}catch{return null}}function ku(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 Uu(e,t,n,r){if(!ku(n,t)){try{(0,M.writeQuotaSnapshot)("claude-code",e,t)}catch{}try{let i=r.workspace?.currentDir??r.cwd??process.cwd();await(0,M.appendQuotaHistorySample)({timestamp:t.capturedAt??new Date().toISOString(),runtimeProvider:"claude",providerId:e,workspaceId:(0,M.getWorkspaceIdFromPath)(i),fiveHour:t.fiveHour,sevenDay:t.sevenDay,available:!0,source:"statusline",stale:!1})}catch{}}}function qu(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,M.quotaToStateFile)(t),codex:(0,M.quotaToStateFile)(n)},context:o,session:a,billingBlock:null}}async function Ao(){let e=$u(),t=(0,M.getActiveAccountStatus)(void 0,{selfHeal:!1}),n=t.claude.accountId,r=n?(0,M.readQuotaSnapshot)("claude-code",n):null,i=r,o=t.codex.accountId?(0,M.readQuotaSnapshot)("codex",t.codex.accountId):null,a=null;if(e){let c=(0,M.quotaFromStatuslinePayload)(e,{fallback:r});c&&(i=c,n&&(a=Uu(n,c,r,e)))}process.stdout.write(`${(0,M.formatStatusline)({accounts:t,claudeQuota:i,codexQuota:o,live:e})}
|
|
22
|
-
`),(0,M.writeStateFile)(qu(t,i,o,e)),a&&await a}var _o=["--project","--provider","--output-file"],Bu=["--json","--no-color","--offline"];function Wu(e){for(let t=0;t<e.length;t++){let n=e[t];if(!Bu.includes(n)){if(_o.includes(n)){t++;continue}if(!_o.some(r=>n.startsWith(`${r}=`)))return n}}}function wo(e){return Wu(e)==="statusline"}wo(process.argv.slice(2))?Ao():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");
|