@bitkyc08/opencodex 2.78.0 → 2.79.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/gui/dist/assets/App-BOUa-ek3.js +54 -0
  2. package/gui/dist/assets/App-CSJvmjNs.css +1 -0
  3. package/gui/dist/assets/{Tray-DiJpSub0.js → Tray-DUtzB4zF.js} +1 -1
  4. package/gui/dist/assets/{index-DmQB8D_R.css → index-Brk6F3fn.css} +1 -1
  5. package/gui/dist/assets/index-DwHNDF4s.js +94 -0
  6. package/gui/dist/assets/{quota-summary-B_a96nXj.js → quota-summary-BuL4WIBo.js} +1 -1
  7. package/gui/dist/index.html +2 -2
  8. package/package.json +3 -2
  9. package/src/adapters/devin.ts +22 -1
  10. package/src/claude/desktop-picker.ts +11 -9
  11. package/src/claude/inbound-content-options.ts +29 -2
  12. package/src/claude/intercept/local-ca-files.ts +265 -0
  13. package/src/claude/intercept/local-ca-windows.ts +73 -0
  14. package/src/claude/intercept/local-ca.ts +12 -24
  15. package/src/claude/intercept/picker-ca-persistence.ts +106 -0
  16. package/src/claude/intercept/picker-ca-startup.ts +16 -0
  17. package/src/claude/intercept/picker-ca-store.ts +70 -0
  18. package/src/claude/intercept/picker-ca.ts +43 -9
  19. package/src/claude/intercept/picker-runtime.ts +14 -4
  20. package/src/claude/intercept/runtime.ts +32 -23
  21. package/src/cli/ensure-readiness.ts +48 -0
  22. package/src/cli/gui-pair-client.ts +15 -7
  23. package/src/cli/gui.ts +4 -1
  24. package/src/cli/hub.ts +1 -0
  25. package/src/cli/index.ts +10 -11
  26. package/src/cli/status.ts +2 -2
  27. package/src/cli/update-restart-child.ts +4 -1
  28. package/src/codex/account-credit-use.ts +8 -2
  29. package/src/codex/auth-api/account-pause-group.ts +113 -0
  30. package/src/codex/auth-api/routes.ts +18 -12
  31. package/src/codex/auth-context.ts +45 -3
  32. package/src/codex/autostart-health.ts +10 -0
  33. package/src/codex/pool-credit-policy.ts +67 -0
  34. package/src/generated/compatibility-version.json +106 -46
  35. package/src/lib/gui-pair-capability.ts +1 -1
  36. package/src/lib/gui-pair-intent.ts +170 -0
  37. package/src/lib/windows-owner-acl.ts +143 -0
  38. package/src/providers/openai-sidecar-credit.ts +26 -0
  39. package/src/providers/openai-sidecar.ts +35 -0
  40. package/src/server/claude-messages.ts +1 -0
  41. package/src/server/gui-pair-delivery.ts +23 -0
  42. package/src/server/index/serve-options.ts +5 -8
  43. package/src/server/live-native-calls.ts +94 -0
  44. package/src/server/live.ts +28 -5
  45. package/src/server/local-management-read-client.ts +15 -11
  46. package/src/server/management/oauth-account-routes.ts +15 -0
  47. package/src/server/management/route-registry.ts +1 -0
  48. package/src/server/management/shared.ts +9 -3
  49. package/src/server/messages-native-scope.ts +57 -0
  50. package/src/server/messages-native.ts +9 -0
  51. package/src/server/responses/adapter-dispatch.ts +31 -2
  52. package/src/server/responses/compact.ts +17 -2
  53. package/src/server/responses/core-auth.ts +18 -1
  54. package/src/server/responses/core-codex-account.ts +18 -8
  55. package/src/server/responses/non-replayable-error.ts +48 -0
  56. package/src/server/responses/passthrough-delivery.ts +5 -1
  57. package/src/server/responses/passthrough-dispatch.ts +21 -19
  58. package/src/server/responses/request-prepare.ts +11 -1
  59. package/src/server/responses/sidecar-execution.ts +1 -0
  60. package/src/server/search.ts +4 -0
  61. package/src/server/startup-health-cache.ts +2 -6
  62. package/src/vision/describe.ts +17 -10
  63. package/src/vision/index.ts +1 -0
  64. package/src/web-search/executor.ts +17 -10
  65. package/src/web-search/format-result.ts +304 -20
  66. package/src/web-search/loop.ts +2 -1
  67. package/src/web-search/passthrough-bridge.ts +1 -0
  68. package/src/web-search/run-turn-loop.ts +1 -1
  69. package/gui/dist/assets/App-BtfG5id-.js +0 -54
  70. package/gui/dist/assets/App-lCIslZ1L.css +0 -1
  71. package/gui/dist/assets/index-Btc3Ogw4.js +0 -94
@@ -0,0 +1 @@
1
+ .codex-account-controls{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:12px;min-width:0;display:flex}.codex-account-auto-switch{flex:none;align-items:center;gap:7px;min-width:0;display:flex}.codex-account-auto-switch-label{font-size:var(--text-label);color:var(--muted);font-weight:var(--weight-medium);white-space:nowrap}.codex-account-auto-switch-input-wrap{align-items:stretch;display:inline-flex;position:relative}.codex-account-auto-switch-input{width:76px;height:30px;font-size:var(--text-label);text-align:right;padding:4px 38px 4px 8px}.codex-account-auto-switch-unit{color:var(--muted);font-size:var(--text-label);pointer-events:none;position:absolute;top:50%;right:25px;transform:translateY(-50%)}.codex-account-auto-switch-input-wrap .ocx-stepper{width:22px}.codex-account-auto-switch-toggle{transform-origin:50%;margin-inline:-3px;transform:scale(.8)}.quota-row--codex-credits .quota-val{white-space:nowrap}.quota-compact:has(>.quota-row--codex-credits){grid-template-columns:minmax(34px,max-content) max-content minmax(34px,max-content) minmax(38px,max-content) minmax(58px,1fr) minmax(30px,max-content);column-gap:8px}.quota-compact:has(>.quota-row--codex-credits)>*{grid-column:1/-1}.quota-compact:has(>.quota-row--codex-credits)>.quota-row:not(.quota-row--credits){grid-template-columns:subgrid}.codex-auth-credits-toggle{align-items:center;gap:var(--space-2);white-space:nowrap;display:inline-flex}.codex-auth-credits-toggle__label{font-size:var(--text-label);color:var(--muted)}.codex-credit-spend{align-items:center;gap:var(--space-2);white-space:nowrap;display:inline-flex}.codex-credit-spend .toggle[aria-pressed=mixed] .toggle-knob{transform:translate(8px,-50%)}.codex-account-credits{align-items:center;gap:7px;display:inline-flex}.codex-account-credits__label{font-size:var(--text-label);color:var(--muted);font-weight:var(--weight-medium);white-space:nowrap}.codex-account-credits__toggle{transform-origin:50%;margin-inline:-3px;transform:scale(.8)}.anthropic-pool-card__native-messages{align-items:flex-start;gap:var(--space-2);margin-top:var(--space-3);cursor:pointer;display:flex}.anthropic-pool-card__native-messages>input{margin:var(--space-0-5) 0 0;accent-color:var(--accent)}.anthropic-pool-card__native-messages>input:focus-visible{outline:var(--space-0-5) solid var(--accent);outline-offset:var(--space-0-5)}.anthropic-pool-card__native-messages-copy{gap:var(--space-1);max-width:var(--prose-measure);display:grid}.anthropic-pool-card__native-messages:has(input:disabled){cursor:default}.anthropic-pool-card__save-warning{margin:var(--space-2) var(--space-4);color:var(--amber);font-size:var(--text-label);line-height:var(--leading-body)}.kiro-device-dialog{max-width:var(--prose-measure);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);width:100%;color:var(--text);padding:var(--space-6)}.kiro-device-dialog::backdrop{background:var(--glass-rail)}.kiro-login-choices{gap:var(--space-2);margin-block:var(--space-4);display:grid}.kiro-login-choices .btn{min-height:var(--control-touch);justify-content:flex-start}.kiro-device-code{align-items:center;gap:var(--space-3);margin-block:var(--space-4);flex-wrap:wrap;display:flex}.kiro-device-code-value{font-family:var(--font-code);font-size:var(--text-title);font-weight:var(--weight-semibold);letter-spacing:var(--tracking-wide)}.kiro-device-destination{overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}.kiro-device-actions{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-4);display:flex}.logs-stack-end.logs-decode-rate{white-space:normal;display:flex}.logs-decode-rate>span:first-child{white-space:nowrap}.logs-decode-rate .text-caption{font-family:var(--font-ui);overflow-wrap:break-word}.log-detail-grid.log-detail-performance-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.log-detail-performance-grid>span{overflow-wrap:break-word;min-width:0}.logs-decode-basis-hint{grid-column:1/-1}.main-inner:has(.claude-page .claudecode-workspace-shell){max-width:980px}.claude-panel-lead{color:var(--muted);font-size:var(--text-label);line-height:var(--leading-body);max-width:var(--prose-measure);margin:0}.claudecode-connection-card{margin-bottom:var(--space-4)}.claudecode-workspace-shell .setting-controls>.custom-select{text-align:right}.claude-page .claude-status-bar{z-index:8;box-shadow:var(--shadow-sm);flex-wrap:wrap;padding:6px 8px 6px 14px;position:sticky;top:12px}.claude-page .claude-status-bar>.claude-status-health{margin-left:0}.claude-status-actions{align-items:center;gap:var(--space-3);margin-left:auto;display:flex}.claude-desktop-roles{margin-bottom:var(--space-4);overflow:hidden}.claude-desktop-section-title{font-size:var(--text-control);font-weight:var(--weight-semibold);line-height:var(--leading-ui);color:var(--text);align-items:baseline;gap:8px;margin:0;display:flex}.claude-desktop-section-title .count{color:var(--muted);font-weight:var(--weight-medium);font-family:var(--font-code);font-size:var(--text-label)}.claude-desktop-roles>.claude-desktop-section-title{padding:12px 16px 4px}.claude-desktop-roles-scope{color:var(--muted);font-size:var(--text-label);margin:0;padding:0 16px 8px}.claude-desktop-roles .setting-controls>.custom-select{text-align:right}.claude-desktop-roles .setting-label{flex:12rem}.claude-desktop-roles .setting-controls{flex:0 auto;min-width:0;max-width:min(60%,28rem)}.claude-desktop-roles .setting-controls>.custom-select,.claude-desktop-roles .select-trigger{max-width:100%}.claude-desktop-roles .select-trigger>span:first-child{text-overflow:ellipsis;min-width:0;overflow:hidden}.claude-desktop-roles .select-trigger>svg{flex:none}.claude-role-option{vertical-align:bottom;min-width:0;max-width:100%;display:inline-flex}.claude-role-option__route{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.claude-role-option__status{white-space:pre;color:var(--muted);flex:none}@media (width<=760px){.claude-desktop-roles .setting-controls{max-width:100%}.claude-desktop-roles .setting-controls>.custom-select,.claude-desktop-roles .select-trigger{width:100%}.claude-desktop-roles .select-trigger{justify-content:space-between}}.claude-desktop-list{gap:var(--space-2);margin-bottom:var(--space-4);flex-direction:column;display:flex}.claude-desktop-list-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.claude-desktop-list-hint{color:var(--muted);font-size:var(--text-label);margin:0}.claude-desktop-list-rows{margin:0;padding:0;list-style:none;overflow:hidden}.claude-desktop-list-row{border-top:1px solid var(--border-soft,var(--border));align-items:center;gap:10px;min-width:0;padding:8px 14px;display:flex}.claude-desktop-list-row:first-child{border-top:none}.claude-desktop-list-names{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.claude-desktop-list-names strong,.claude-desktop-list-names code{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.claude-desktop-list-names strong{font-weight:var(--weight-medium)}.claude-desktop-list-names code{color:var(--muted);font-size:11px}.claude-row-quick{color:var(--accent)}.claude-desktop-advanced{margin-bottom:var(--space-4);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.claude-desktop-advanced>summary{cursor:pointer;flex-direction:column;gap:8px;padding:12px 14px;list-style:none;display:flex}.claude-desktop-advanced>summary::-webkit-details-marker{display:none}.claude-desktop-advanced-title{font-weight:var(--weight-semibold);color:var(--text);align-items:center;gap:6px;display:flex}.claude-desktop-advanced-chips{flex-wrap:wrap;gap:6px;display:flex}.claude-desktop-advanced-chip{border-radius:var(--radius-pill);background:var(--raised);max-width:100%;color:var(--muted);font-size:var(--text-label);align-items:baseline;gap:6px;padding:2px 10px;display:inline-flex}.claude-desktop-advanced-chip b{color:var(--text);font-weight:var(--weight-medium)}.claude-desktop-advanced-chip code{text-overflow:ellipsis;white-space:nowrap;max-width:220px;font-size:11px;overflow:hidden}.claude-desktop-advanced-count{font-family:var(--font-code);color:var(--faint);font-size:11px}.claude-desktop-advanced-desc{color:var(--muted);font-size:var(--text-label);margin:0;padding:0 14px 10px}.claude-desktop-advanced>.ocx-group-stack{padding:0 10px 10px}.remote-link-page{gap:var(--space-4);display:grid}.remote-link-page .page-head{align-items:flex-start}.remote-link-page .page-sub{max-width:var(--prose-measure);margin:0}.remote-link-panel{gap:var(--space-4);display:grid}.remote-link-off-preview{min-height:260px;position:relative;overflow:hidden}.remote-link-off-preview:after{content:"";pointer-events:none;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);background:color-mix(in srgb, var(--bg) 24%, transparent);position:absolute;inset:0}.remote-link-preview-content{gap:var(--space-3);filter:grayscale();opacity:.64;-webkit-user-select:none;user-select:none;display:grid}.remote-link-preview-row{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--raised);display:flex}.remote-link-preview-lines{gap:var(--space-2);width:min(55%,300px);display:grid}.remote-link-preview-lines span{border-radius:var(--radius-pill);background:var(--border);height:8px;display:block}.remote-link-switch-row{z-index:1;justify-content:space-between;align-items:center;gap:var(--space-4);display:flex;position:relative}.remote-link-switch{width:var(--control-touch);height:var(--control-md);border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--toggle-off-bg);cursor:pointer;padding:3px}.remote-link-switch:after{content:"";background:var(--toggle-dot-color);width:24px;height:24px;transition:transform var(--motion-fast) ease;border-radius:50%;display:block}.remote-link-switch[aria-checked=true]{background:var(--toggle-on-bg)}.remote-link-switch[aria-checked=true]:after{transform:translate(16px)}.remote-link-switch:focus-visible,.remote-link-role-card:focus-visible,.remote-link-sheet button:focus-visible,.remote-link-sheet a:focus-visible,.remote-link-row button:focus-visible{outline:2px solid var(--accent-ring);outline-offset:2px}.remote-link-role-grid{gap:var(--space-3);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.remote-link-role-card{min-height:132px;padding:var(--space-4);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--raised);color:var(--text);text-align:left;cursor:pointer}.remote-link-role-card:hover{background:var(--raised-hover)}.remote-link-role-card[aria-disabled=true]{color:var(--muted);cursor:not-allowed;opacity:.72}.remote-link-role-card[aria-disabled=true]:hover{background:var(--raised)}.remote-link-role-card[aria-checked=true]{border-color:var(--text);box-shadow:0 0 0 1px var(--text)}.remote-link-role-card strong,.remote-link-role-card span{display:block}.remote-link-role-card span{margin-top:var(--space-2);color:var(--muted);font-size:var(--text-label)}.remote-link-toolbar{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.remote-link-status{align-items:center;gap:var(--space-2);color:var(--muted);font-size:var(--text-label);display:inline-flex}.remote-link-status:before{content:"";background:var(--faint);border-radius:50%;flex:none;width:8px;height:8px}.remote-link-status[data-state=connected]:before{background:var(--green)}.remote-link-status[data-state=reconnecting]:before{background:var(--amber)}.remote-link-status[data-state=failed]:before{background:var(--red)}.remote-link-status[data-state=connecting]:before{background:var(--amber)}.remote-link-children{gap:var(--space-2);display:grid}.remote-link-row{gap:var(--space-3);padding:var(--space-3);border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--raised);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.remote-link-row-main{gap:var(--space-2);min-width:0;display:grid}.remote-link-row-meta{gap:var(--space-3);color:var(--muted);font-size:var(--text-caption);flex-wrap:wrap;display:flex}.remote-link-row .btn{min-height:var(--control-touch)}.remote-link-error{color:var(--red)}.remote-link-hint{margin-top:var(--space-1);color:var(--muted);font-size:var(--text-label);overflow-wrap:anywhere;display:block}.remote-link-info{color:var(--muted);font-size:var(--text-label)}.remote-link-restart{gap:var(--space-2);padding:var(--space-4);border:1px solid var(--border-soft);border-radius:var(--radius-sm);background:var(--raised);display:grid}.remote-link-restart p{color:var(--muted);margin:0}.remote-link-fingerprint{padding:var(--space-3);overflow-wrap:anywhere;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--raised);font-family:var(--font-code);font-size:var(--text-label);margin:0}.remote-link-workspace-card{justify-content:space-between;align-items:center;gap:var(--space-4);display:flex}.remote-link-workspace-card p{margin:var(--space-1) 0 0;color:var(--muted);font-size:var(--text-label)}.remote-link-sheet{width:min(620px, calc(100vw - var(--space-4)));max-height:min(760px, calc(100dvh - var(--space-4)));padding:var(--space-6);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg);color:var(--text);box-shadow:var(--shadow);margin:auto;overflow:auto}.remote-link-sheet::backdrop{background:color-mix(in srgb, var(--text) 24%, transparent)}.remote-link-sheet-head{justify-content:space-between;align-items:flex-start;gap:var(--space-3);display:flex}.remote-link-sheet-head h3{font-size:var(--text-title);margin:0}.remote-link-sheet-body{gap:var(--space-4);margin-top:var(--space-5);display:grid}.remote-link-sheet pre{white-space:pre-wrap;overflow-wrap:anywhere;font-family:var(--font-code);font-size:var(--text-label)}.remote-link-candidates{gap:var(--space-2);display:grid}.remote-link-candidate{justify-content:space-between;align-items:center;gap:var(--space-3);min-height:var(--control-touch);padding:var(--space-2) var(--space-3);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--raised);color:var(--text);cursor:pointer;text-align:left;display:flex}.remote-link-candidate:hover{background:var(--raised-hover)}.remote-link-form{gap:var(--space-2);display:grid}.remote-link-form .field-label{margin-bottom:0}.remote-link-sheet-actions{justify-content:flex-end;gap:var(--space-2);flex-wrap:wrap;display:flex}.remote-link-confirm-dialog{width:min(460px, calc(100vw - var(--space-4)));padding:var(--space-5);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);color:var(--text);box-shadow:var(--shadow);margin:auto}.remote-link-confirm-dialog::backdrop{background:color-mix(in srgb, var(--text) 24%, transparent)}.remote-link-confirm-dialog h3{font-size:var(--text-subtitle);margin:0}.remote-link-confirm-dialog p{color:var(--muted)}@media (width<=620px){.remote-link-role-grid{grid-template-columns:1fr}.remote-link-workspace-card,.remote-link-switch-row{flex-direction:column;align-items:stretch}.remote-link-switch{align-self:flex-start}.remote-link-sheet{width:calc(100vw - var(--space-2));border-radius:var(--radius-lg) var(--radius-lg) 0 0;max-height:88dvh;margin:auto auto 0}}@media (prefers-reduced-motion:reduce){.remote-link-page *,.remote-link-page :before,.remote-link-page :after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.quota-summary-bar{z-index:var(--z-sticky);border-bottom:1px solid var(--border);background:var(--bg);min-height:34px;font-size:var(--text-label);align-items:center;gap:12px;padding:4px 16px;display:flex;position:sticky;top:0}.quota-summary-scroller{flex:1;align-items:center;gap:2px;min-width:0;display:flex}.quota-summary-list{overscroll-behavior-x:contain;scrollbar-width:none;flex-wrap:nowrap;flex:auto;align-items:center;gap:4px;min-width:0;margin:0;padding:3px;list-style:none;display:flex;overflow:auto hidden}.quota-summary-list::-webkit-scrollbar{display:none}.quota-summary-item{flex:none}.quota-summary-scroll{border:1px solid var(--border);background:var(--surface);width:22px;height:22px;color:var(--text);font:inherit;cursor:pointer;border-radius:999px;flex:none;place-items:center;padding:0;font-weight:600;line-height:1;display:inline-grid}.quota-summary-scroll:hover:not([aria-disabled=true]){background:var(--bg)}.quota-summary-scroll[aria-disabled=true]{color:var(--muted);opacity:.45;cursor:default}.quota-summary-scroll:focus-visible{outline:2px solid var(--text);outline-offset:1px}.quota-summary-chip{color:var(--text);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;align-items:center;gap:6px;padding:3px 8px;text-decoration:none;display:inline-flex}.quota-summary-chip:hover,.quota-summary-chip--open{border-color:var(--border)}.quota-summary-chip:focus-visible{outline:2px solid var(--text);outline-offset:1px}.quota-summary-name{color:var(--muted)}.quota-summary-pct{font-variant-numeric:tabular-nums;font-weight:600}.quota-summary-flag{width:14px;height:14px;color:var(--bg);font-size:var(--text-micro);border-radius:50%;place-items:center;font-weight:700;display:inline-grid}.quota-summary-item--warn .quota-summary-chip{background:var(--amber-soft)}.quota-summary-item--warn .quota-summary-pct{color:var(--amber)}.quota-summary-item--warn .quota-summary-flag{background:var(--amber)}.quota-summary-item--critical .quota-summary-chip{border-color:var(--red);background:var(--red-soft)}.quota-summary-item--critical .quota-summary-pct{color:var(--red)}.quota-summary-item--critical .quota-summary-flag{background:var(--red)}.quota-summary-popover{top:calc(var(--qs-pop-top,0) * 1px);left:calc(var(--qs-pop-left,0) * 1px);z-index:var(--z-popover);border:1px solid var(--border);background:var(--surface);border-radius:8px;min-width:260px;max-width:calc(100% - 16px);padding:10px 12px;position:fixed;box-shadow:0 8px 24px #00000024}.quota-summary-popover:before{content:"";left:calc(var(--qs-bridge-left,0) * 1px - 1px);right:calc(var(--qs-bridge-right,0) * 1px - 1px);height:calc((var(--qs-pop-gap,4) + 1) * 1px);position:absolute;bottom:100%}.quota-summary-popover-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;display:flex}.quota-summary-badge{font-size:var(--text-caption);border-radius:999px;padding:1px 6px}.quota-summary-badge--warn{color:var(--amber);background:var(--amber-soft)}.quota-summary-badge--critical{color:var(--red);background:var(--red-soft)}.quota-summary-table{border-collapse:collapse;width:100%}.quota-summary-table th,.quota-summary-table td{text-align:left;white-space:nowrap;padding:3px 0;font-weight:400}.quota-summary-table td.quota-summary-row-pct{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;padding:3px 12px;font-weight:600}.quota-summary-row-reset{color:var(--muted);white-space:nowrap}.quota-summary-table th[scope=row]{white-space:normal;overflow-wrap:anywhere}.quota-summary-row--warn .quota-summary-row-pct{color:var(--amber)}.quota-summary-row--critical .quota-summary-row-pct{color:var(--red)}.quota-summary-popover-foot{color:var(--muted);font-size:var(--text-caption);flex-wrap:wrap;justify-content:space-between;gap:4px 12px;margin-top:6px;display:flex}.quota-summary-updated{color:var(--muted);font-size:var(--text-caption);white-space:nowrap;flex-shrink:0}.quota-summary-popover-link{color:var(--text);text-underline-offset:2px;text-decoration:underline}.quota-summary-popover-link:focus-visible{outline:2px solid var(--text);outline-offset:1px}.quota-summary-updated--stale{color:var(--amber)}.main:has(>.quota-summary-bar):has(>.main-inner--combos .combos-workspace-shell){flex-direction:column;height:100dvh;display:flex}.main:has(>.quota-summary-bar)>.main-inner.main-inner--combos:has(.combos-workspace-shell){flex:auto;height:auto;min-height:0}@media (width<=760px){.quota-summary-bar{padding:4px 10px;position:static}.quota-summary-popover{top:calc(var(--qs-pop-top,0) * 1px);min-width:0;left:8px;right:8px}.main:has(>.quota-summary-bar):has(>.main-inner--combos .combos-workspace-shell){height:100%;min-height:0}}.section-switcher{border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);flex-wrap:wrap;gap:2px;max-width:100%;margin:0 0 16px;padding:2px;display:inline-flex}.section-switcher-btn{appearance:none;color:var(--muted);border-radius:var(--radius-pill);cursor:pointer;font:inherit;font-size:var(--text-control);white-space:nowrap;background:0 0;border:none;align-items:center;padding:5px 14px;display:inline-flex}.section-switcher-btn:hover{color:var(--text)}.section-switcher-btn[aria-current=page]{background:var(--raised);color:var(--text);font-weight:var(--weight-semibold)}.section-switcher-btn:focus-visible{outline:2px solid var(--accent-ring);outline-offset:1px}@media (width<=760px){.section-switcher{display:flex}.section-switcher-btn{min-height:var(--control-touch);flex:auto;justify-content:center}}.app{--titlebar-h:40px;--tl-inset:80px;--chrome-clear:52px}.app--macos{--chrome-clear:124px;--sidebar-column:max(232px, calc(var(--tl-inset) + 52px))}.sidebar-top{z-index:calc(var(--z-overlay,30) + 1);width:232px;height:var(--titlebar-h,40px);border-bottom:1px solid var(--border);background:var(--glass-rail);-webkit-backdrop-filter:var(--glass-blur);-webkit-user-select:none;user-select:none;align-items:center;padding:0 10px 0 14px;display:flex;position:fixed;top:0;left:0}.app--macos .sidebar-top{width:var(--sidebar-column);padding-left:var(--tl-inset,80px)}.sidebar{padding-top:calc(var(--titlebar-h,40px) + 18px)}.sidebar-collapse{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--muted);cursor:pointer;transition:background var(--motion-fast), color var(--motion-fast);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.sidebar-collapse:hover{background:var(--accent-soft);color:var(--text)}.sidebar-collapse:focus-visible{outline:2px solid var(--accent-ring);outline-offset:2px}.sidebar-collapse svg{width:18px;height:18px}.main-top{z-index:var(--z-sticky);height:var(--titlebar-h,40px);background:var(--bg);border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none;align-items:stretch;display:flex;position:sticky;top:0}.main-top>.quota-summary-bar{border-bottom:none;flex:auto;min-width:0;min-height:0;padding:0 16px;position:static}.main:has(>.main-top):has(>.main-inner--combos .combos-workspace-shell){flex-direction:column;height:100dvh;display:flex}.main:has(>.main-top)>.main-inner.main-inner--combos:has(.combos-workspace-shell){flex:auto;height:auto;min-height:0}@media (width>=761px){.app{transition:grid-template-columns .16s}.app--macos.app--reduced-zoom{transition:none}.app--macos:not(.app--nav-collapsed){grid-template-columns:var(--sidebar-column) minmax(0, 1fr)}.app.app--nav-collapsed{grid-template-columns:0 1fr}.app--nav-collapsed .sidebar{display:none}.app--nav-collapsed .main{grid-column:2}.app--nav-collapsed .sidebar-top{-webkit-backdrop-filter:none;background:0 0;border-bottom:none;width:auto;margin:0;padding:0 12px}.app--macos.app--nav-collapsed .sidebar-top{padding-left:var(--tl-inset,80px)}.app--nav-collapsed .main-top,.app--nav-collapsed .main>.quota-summary-bar{padding-left:var(--chrome-clear,52px)}}@media (width<=760px){.sidebar-top{display:none}.main-top{z-index:auto;position:static}.main:has(>.main-top):has(>.main-inner--combos .combos-workspace-shell){height:100%;min-height:0}.app--macos .mobile-topbar{padding-left:var(--tl-inset,80px)}.app--macos .sidebar.open{padding-top:calc(var(--titlebar-h,40px) + 18px)}}@media (width<=320px){.app--macos .mobile-topbar{flex-wrap:wrap}.app--macos .mobile-topbar-actions{width:calc(100% + var(--tl-inset,80px));margin-left:calc(-1 * var(--tl-inset,80px));justify-content:flex-end}}
@@ -1 +1 @@
1
- import{D as e,O as t,_ as n,b as r,n as i}from"./index-Btc3Ogw4.js";import{J as a,T as o,X as s,_ as c,a as ee,c as l,d as u,f as d,i as f,l as p,m,o as h,p as g,r as te,s as _,u as v,v as y}from"./quota-summary-B_a96nXj.js";var b=t(e(),1),x=i(),S=2e4,C=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function w(){let{t:e,locale:t}=r(),[i,w]=(0,b.useState)(null),[T,E]=(0,b.useState)(!1),[D,O]=(0,b.useState)([null,null]),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)([]),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)(!1),[z,B]=(0,b.useState)(null),[V,H]=(0,b.useState)(!1),[U,W]=(0,b.useState)(0),[G,K]=(0,b.useState)(null),[q,J]=(0,b.useState)(null),Y=()=>W(e=>e+1),X=(0,b.useRef)(!1),Z=async(t,r,i)=>{K(`${t}:${i}`),J(null);let a=n(S);try{let e=f(t,r,i),n=await fetch(e.path,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e.body),signal:a.signal});if(!n.ok)throw Error(String(n.status));X.current=!0,Y()}catch{K(null),J(e(r===`codex`?`codexAuth.switchFailed`:`prov.accountSwitchFail`))}finally{a.clear()}};(0,b.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,i=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),a=async()=>{if(!i()||t)return;t=!0,H(!0);let n=!1,o=new AbortController;e=o;let s=e=>ee(e,o.signal),l=()=>!r&&!o.signal.aborted;try{let e=(async()=>{try{let e=u(await s(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,switchKind:e.switchKind,accounts:[]};try{let t=await s(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await s(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,switchKind:e.switchKind,accounts:p(t)}}catch{return{name:e.name,switchKind:e.switchKind,accounts:[],unavailable:!0}}}));l()&&(M(t),P(!1),n=!0)}catch{l()&&(M([]),P(!0))}})(),t=(async()=>{let e;try{if(e=(await s(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);l()&&(w(e),E(!1))}catch{l()&&E(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>{let n=v(await s(t));return h(n,e)})).then(e=>{l()&&(n||=e.some(e=>e.status===`fulfilled`),O(e.map(e=>e.status===`fulfilled`?e.value:null)),A(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=y(e);try{let n=await s(`/api/usage/timeline?${t}`);l()&&(I(c(n,e)),R(!1))}catch{l()&&(I(null),R(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,l()&&(H(!1),n&&B(Date.now()),X.current&&(X.current=!1,K(null))),!r&&o.signal.aborted&&i()&&a()}},o=()=>{i()?a():e?.abort()},s=()=>{n=!1,o()},l=()=>{n=!0,o()},d=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),o()};a();let f=setInterval(()=>void a(),6e4);return document.addEventListener(`visibilitychange`,o),window.addEventListener(`blur`,s),window.addEventListener(`focus`,l),window.addEventListener(`opencodex:tray-visibility`,d),()=>{r=!0,e?.abort(),clearInterval(f),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,o),window.removeEventListener(`blur`,s),window.removeEventListener(`focus`,l),window.removeEventListener(`opencodex:tray-visibility`,d)}},[U]);let Q=e=>_(e)?a(e,t):`—`,$=n=>{let r=n?l(n):void 0,a=r?.cacheReadInputTokens??r?.cachedInputTokens,o=_(a)&&_(r?.inputTokens)&&r.inputTokens>0?`${Math.round(a/r.inputTokens*100)}%`:`—`;return(0,x.jsxs)(`dl`,{children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,x.jsx)(`dd`,{children:Q(r?.totalTokens)})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.input`)}),(0,x.jsxs)(`dd`,{children:[Q(r?.inputTokens),` `,(0,x.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.output`)}),(0,x.jsx)(`dd`,{children:Q(r?.outputTokens)})]}),i?.showCost&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,x.jsx)(`dd`,{title:_(r?.requests)&&_(r?.pricedRequests)&&r.pricedRequests<r.requests?e(`usage.cost.unpricedNote`,{count:r.requests-r.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:_(r?.estimatedCostUsd)?new Intl.NumberFormat(t,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(r.estimatedCostUsd)+(_(r.pricedRequests)&&_(r.requests)&&r.pricedRequests<r.requests?`*`:``):`—`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,x.jsx)(`dd`,{children:Q(r?.requests)})]}),_(r?.requests)&&r.requests>0&&_(r.measuredRequests)&&r.measuredRequests<r.requests&&(0,x.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,x.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,x.jsxs)(`dd`,{children:[Math.round(r.measuredRequests/r.requests*100),`%`]})]})]})},ne=new Set(i?.hiddenProviders??[]);return(0,x.jsxs)(`main`,{className:`tray-page`,children:[(0,x.jsxs)(`header`,{children:[(0,x.jsx)(`strong`,{children:`OpenCodex`}),(0,x.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),T&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),!i&&!T&&(0,x.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),i&&(0,x.jsxs)(`section`,{className:`tray-totals`,children:[i.showToday&&(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`tray.today`),C(D[0])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[0]?.summary)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`usage.range.30d`),C(D[1])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[1]?.summary)]})]}),k&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),i?.showChart&&(0,x.jsx)(`section`,{className:`tray-chart`,children:(0,x.jsx)(m,{timeline:F,chartStyle:i.chartStyle,hours:i.chartHours,loading:!F&&!L,error:L?e(`usage.companion.timelineUnavailable`):null,onRetry:Y,locale:t,t:e})}),i?.showModels&&!!D[0]?.models.length&&(0,x.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:D[0].models.map(t=>(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,x.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,x.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:Q(t.requests)})}),(0,x.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:Q(l(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(i?.showAccounts??!0)&&(0,x.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[N&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),q&&(0,x.jsx)(`p`,{role:`alert`,className:`tray-error`,children:q}),j.filter(e=>!ne.has(e.name)).map(n=>(0,x.jsxs)(`div`,{className:`tray-provider`,children:[(0,x.jsxs)(`h2`,{children:[(0,x.jsx)(o,{name:n.name,cls:`provider-icon tray-provider-icon`}),s(n.name,e)]}),!n.accounts.length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(n.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),n.accounts.map(r=>{let i=n.switchKind,a=G===`${n.name}:${r.id}`;return(0,x.jsxs)(`div`,{className:`tray-account`,children:[(0,x.jsxs)(`div`,{className:`tray-account-name`,children:[(0,x.jsxs)(`span`,{className:`tray-account-label`,title:r.label,children:[r.label,r.exhausted&&(0,x.jsx)(`span`,{className:`tray-exhausted`,title:e(`quota.limitReached`),"aria-label":e(`quota.limitReached`),children:` ⚠`})]}),(0,x.jsxs)(`span`,{className:`tray-account-meta`,children:[a&&(0,x.jsx)(`span`,{role:`status`,children:e(`pws.accountSwitching`)}),!a&&i&&r.switchState===`available`&&(0,x.jsx)(`button`,{type:`button`,className:`tray-use`,disabled:G!==null,onClick:()=>void Z(n.name,i,r.id),title:e(`prov.accountSwitchTitle`),"aria-label":`${e(`prov.accountSwitchTitle`)}: ${r.label}`,children:e(`prov.accountSwitchTitle`)}),r.plan,r.active&&(0,x.jsx)(`span`,{className:`tray-active`,title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ✓`})]})]}),r.email&&r.email!==r.label&&(0,x.jsx)(`div`,{className:`tray-account-email`,children:r.email}),!d(r.quota).length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(r.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),d(r.quota).map(n=>{let r=`key`in n?e(n.key):n.label,i=g(n.reset,t),a=_(n.percent)?Math.min(100,n.percent):null;return(0,x.jsxs)(`div`,{className:`tray-quota`,children:[(0,x.jsx)(`span`,{title:r,children:r}),(0,x.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,x.jsx)(`span`,{className:`tray-bar tray-bar--${te(a??void 0)}`,role:a===null?`img`:`meter`,"aria-label":a===null?`${r}: ${e(`pws.dashboard.noQuota`)}`:r,"aria-valuemin":a===null?void 0:0,"aria-valuemax":a===null?void 0:100,"aria-valuenow":a??void 0,"aria-valuetext":a===null?void 0:`${Math.round(a)}%`,children:(0,x.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,x.jsx)(`time`,{title:i.exact,children:i.text})]},n.id)})]},r.id)})]},n.name))]}),(0,x.jsxs)(`div`,{className:`tray-refresh`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:Y,disabled:V,children:e(`startup.refresh`)}),(0,x.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:z===null?`—`:new Date(z).toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,x.jsx)(`footer`,{children:(0,x.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,x.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{w as default};
1
+ import{D as e,O as t,_ as n,b as r,n as i}from"./index-DwHNDF4s.js";import{J as a,T as o,X as s,_ as c,a as ee,c as l,d as u,f as d,i as f,l as p,m,o as h,p as g,r as te,s as _,u as v,v as y}from"./quota-summary-BuL4WIBo.js";var b=t(e(),1),x=i(),S=2e4,C=e=>e?.usageIncomplete||e?.historyTruncated||e?.entriesTruncated;function w(){let{t:e,locale:t}=r(),[i,w]=(0,b.useState)(null),[T,E]=(0,b.useState)(!1),[D,O]=(0,b.useState)([null,null]),[k,A]=(0,b.useState)(!1),[j,M]=(0,b.useState)([]),[N,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(null),[L,R]=(0,b.useState)(!1),[z,B]=(0,b.useState)(null),[V,H]=(0,b.useState)(!1),[U,W]=(0,b.useState)(0),[G,K]=(0,b.useState)(null),[q,J]=(0,b.useState)(null),Y=()=>W(e=>e+1),X=(0,b.useRef)(!1),Z=async(t,r,i)=>{K(`${t}:${i}`),J(null);let a=n(S);try{let e=f(t,r,i),n=await fetch(e.path,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e.body),signal:a.signal});if(!n.ok)throw Error(String(n.status));X.current=!0,Y()}catch{K(null),J(e(r===`codex`?`codexAuth.switchFailed`:`prov.accountSwitchFail`))}finally{a.clear()}};(0,b.useEffect)(()=>{document.documentElement.classList.add(`tray-document`);let e=null,t=!1,n=!0,r=!1,i=()=>!document.hidden&&(window.__OPENCODEX_TRAY_VISIBLE__??n),a=async()=>{if(!i()||t)return;t=!0,H(!0);let n=!1,o=new AbortController;e=o;let s=e=>ee(e,o.signal),l=()=>!r&&!o.signal.aborted;try{let e=(async()=>{try{let e=u(await s(`/api/config`)),t=await Promise.all(e.map(async e=>{if(!e.path)return{name:e.name,switchKind:e.switchKind,accounts:[]};try{let t=await s(e.path);if(e.name===`openai`)try{t.activeCodexAccountId=(await s(`/api/codex-auth/active`)).activeCodexAccountId??`__main__`}catch{}return{name:e.name,switchKind:e.switchKind,accounts:p(t)}}catch{return{name:e.name,switchKind:e.switchKind,accounts:[],unavailable:!0}}}));l()&&(M(t),P(!1),n=!0)}catch{l()&&(M([]),P(!0))}})(),t=(async()=>{let e;try{if(e=(await s(`/api/companion/settings`)).settings,!e||!Array.isArray(e.hiddenProviders)||!(e.models===null||Array.isArray(e.models)))throw Error(`Invalid settings`);l()&&(w(e),E(!1))}catch{l()&&E(!0);return}let t=Promise.allSettled([`/api/usage?range=today`,`/api/usage?range=30d`].map(async t=>{let n=v(await s(t));return h(n,e)})).then(e=>{l()&&(n||=e.some(e=>e.status===`fulfilled`),O(e.map(e=>e.status===`fulfilled`?e.value:null)),A(e.some(e=>e.status===`rejected`)))}),r=(async()=>{if(!e.showChart)return;let t=y(e);try{let n=await s(`/api/usage/timeline?${t}`);l()&&(I(c(n,e)),R(!1))}catch{l()&&(I(null),R(!0))}})();await Promise.allSettled([t,r])})();await Promise.allSettled([e,t])}finally{t=!1,l()&&(H(!1),n&&B(Date.now()),X.current&&(X.current=!1,K(null))),!r&&o.signal.aborted&&i()&&a()}},o=()=>{i()?a():e?.abort()},s=()=>{n=!1,o()},l=()=>{n=!0,o()},d=e=>{let t=e.detail;typeof t==`boolean`&&(window.__OPENCODEX_TRAY_VISIBLE__=t),o()};a();let f=setInterval(()=>void a(),6e4);return document.addEventListener(`visibilitychange`,o),window.addEventListener(`blur`,s),window.addEventListener(`focus`,l),window.addEventListener(`opencodex:tray-visibility`,d),()=>{r=!0,e?.abort(),clearInterval(f),document.documentElement.classList.remove(`tray-document`),document.removeEventListener(`visibilitychange`,o),window.removeEventListener(`blur`,s),window.removeEventListener(`focus`,l),window.removeEventListener(`opencodex:tray-visibility`,d)}},[U]);let Q=e=>_(e)?a(e,t):`—`,$=n=>{let r=n?l(n):void 0,a=r?.cacheReadInputTokens??r?.cachedInputTokens,o=_(a)&&_(r?.inputTokens)&&r.inputTokens>0?`${Math.round(a/r.inputTokens*100)}%`:`—`;return(0,x.jsxs)(`dl`,{children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.totalTokens`)}),(0,x.jsx)(`dd`,{children:Q(r?.totalTokens)})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.input`)}),(0,x.jsxs)(`dd`,{children:[Q(r?.inputTokens),` `,(0,x.jsx)(`small`,{title:e(`usage.card.cachedTokens`),children:e(`tray.cached`,{percent:o})})]})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`tray.output`)}),(0,x.jsx)(`dd`,{children:Q(r?.outputTokens)})]}),i?.showCost&&(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{title:e(`logs.metric.estimatedCostTitle`),children:e(`tray.cost`)}),(0,x.jsx)(`dd`,{title:_(r?.requests)&&_(r?.pricedRequests)&&r.pricedRequests<r.requests?e(`usage.cost.unpricedNote`,{count:r.requests-r.pricedRequests}):e(`logs.metric.estimatedCostTitle`),children:_(r?.estimatedCostUsd)?new Intl.NumberFormat(t,{style:`currency`,currency:`USD`,maximumFractionDigits:2}).format(r.estimatedCostUsd)+(_(r.pricedRequests)&&_(r.requests)&&r.pricedRequests<r.requests?`*`:``):`—`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{children:e(`usage.card.requests`)}),(0,x.jsx)(`dd`,{children:Q(r?.requests)})]}),_(r?.requests)&&r.requests>0&&_(r.measuredRequests)&&r.measuredRequests<r.requests&&(0,x.jsxs)(`div`,{className:`tray-coverage`,title:e(`usage.coverage.note`),children:[(0,x.jsx)(`dt`,{children:e(`usage.card.coverage`)}),(0,x.jsxs)(`dd`,{children:[Math.round(r.measuredRequests/r.requests*100),`%`]})]})]})},ne=new Set(i?.hiddenProviders??[]);return(0,x.jsxs)(`main`,{className:`tray-page`,children:[(0,x.jsxs)(`header`,{children:[(0,x.jsx)(`strong`,{children:`OpenCodex`}),(0,x.jsx)(`a`,{href:`/?desktop=open#/usage`,"aria-label":e(`sub.settings`),title:e(`sub.settings`),children:`⚙`})]}),T&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.companion.settingsUnavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),!i&&!T&&(0,x.jsx)(`p`,{role:`status`,children:e(`common.loading`)}),i&&(0,x.jsxs)(`section`,{className:`tray-totals`,children:[i.showToday&&(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`tray.today`),C(D[0])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[0]?.summary)]}),(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h2`,{children:[e(`usage.range.30d`),C(D[1])&&(0,x.jsx)(`span`,{title:e(`usage.incomplete`),"aria-label":e(`usage.incomplete`),children:` *`})]}),$(D[1]?.summary)]})]}),k&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`usage.loadError`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),i?.showChart&&(0,x.jsx)(`section`,{className:`tray-chart`,children:(0,x.jsx)(m,{timeline:F,chartStyle:i.chartStyle,hours:i.chartHours,loading:!F&&!L,error:L?e(`usage.companion.timelineUnavailable`):null,onRetry:Y,locale:t,t:e})}),i?.showModels&&!!D[0]?.models.length&&(0,x.jsx)(`section`,{className:`tray-models`,"aria-label":e(`usage.section.models`),children:D[0].models.map(t=>(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`span`,{title:`${t.provider}/${t.model}`,children:t.model}),(0,x.jsxs)(`span`,{className:`tray-model-metrics`,children:[(0,x.jsx)(`span`,{title:e(`usage.card.requests`),children:e(`pws.dashboard.requests`,{count:Q(t.requests)})}),(0,x.jsx)(`span`,{title:e(`usage.card.totalTokens`),children:Q(l(t).totalTokens)})]})]},`${t.provider}/${t.model}`))}),(i?.showAccounts??!0)&&(0,x.jsxs)(`section`,{className:`tray-providers`,"aria-label":e(`usage.section.providers`),children:[N&&(0,x.jsxs)(`p`,{role:`alert`,className:`tray-error`,children:[e(`startup.tray.unavailable`),` `,(0,x.jsx)(`button`,{onClick:Y,children:e(`common.retry`)})]}),q&&(0,x.jsx)(`p`,{role:`alert`,className:`tray-error`,children:q}),j.filter(e=>!ne.has(e.name)).map(n=>(0,x.jsxs)(`div`,{className:`tray-provider`,children:[(0,x.jsxs)(`h2`,{children:[(0,x.jsx)(o,{name:n.name,cls:`provider-icon tray-provider-icon`}),s(n.name,e)]}),!n.accounts.length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(n.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),n.accounts.map(r=>{let i=n.switchKind,a=G===`${n.name}:${r.id}`;return(0,x.jsxs)(`div`,{className:`tray-account`,children:[(0,x.jsxs)(`div`,{className:`tray-account-name`,children:[(0,x.jsxs)(`span`,{className:`tray-account-label`,title:r.label,children:[r.label,r.exhausted&&(0,x.jsx)(`span`,{className:`tray-exhausted`,title:e(`quota.limitReached`),"aria-label":e(`quota.limitReached`),children:` ⚠`})]}),(0,x.jsxs)(`span`,{className:`tray-account-meta`,children:[a&&(0,x.jsx)(`span`,{role:`status`,children:e(`pws.accountSwitching`)}),!a&&i&&r.switchState===`available`&&(0,x.jsx)(`button`,{type:`button`,className:`tray-use`,disabled:G!==null,onClick:()=>void Z(n.name,i,r.id),title:e(`prov.accountSwitchTitle`),"aria-label":`${e(`prov.accountSwitchTitle`)}: ${r.label}`,children:e(`prov.accountSwitchTitle`)}),r.plan,r.active&&(0,x.jsx)(`span`,{className:`tray-active`,title:e(`prov.activeBadge`),"aria-label":e(`prov.activeBadge`),children:` ✓`})]})]}),r.email&&r.email!==r.label&&(0,x.jsx)(`div`,{className:`tray-account-email`,children:r.email}),!d(r.quota).length&&(0,x.jsx)(`div`,{className:`tray-missing`,children:e(r.unavailable?`startup.tray.unavailable`:`pws.dashboard.noQuota`)}),d(r.quota).map(n=>{let r=`key`in n?e(n.key):n.label,i=g(n.reset,t),a=_(n.percent)?Math.min(100,n.percent):null;return(0,x.jsxs)(`div`,{className:`tray-quota`,children:[(0,x.jsx)(`span`,{title:r,children:r}),(0,x.jsx)(`span`,{children:a===null?`—`:`${Math.round(a)}%`}),(0,x.jsx)(`span`,{className:`tray-bar tray-bar--${te(a??void 0)}`,role:a===null?`img`:`meter`,"aria-label":a===null?`${r}: ${e(`pws.dashboard.noQuota`)}`:r,"aria-valuemin":a===null?void 0:0,"aria-valuemax":a===null?void 0:100,"aria-valuenow":a??void 0,"aria-valuetext":a===null?void 0:`${Math.round(a)}%`,children:(0,x.jsx)(`i`,{style:{width:a===null?`0%`:`${a}%`}})}),(0,x.jsx)(`time`,{title:i.exact,children:i.text})]},n.id)})]},r.id)})]},n.name))]}),(0,x.jsxs)(`div`,{className:`tray-refresh`,children:[(0,x.jsx)(`button`,{type:`button`,onClick:Y,disabled:V,children:e(`startup.refresh`)}),(0,x.jsx)(`span`,{role:`status`,children:e(`tray.updated`,{time:z===null?`—`:new Date(z).toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})})})]}),(0,x.jsx)(`footer`,{children:(0,x.jsxs)(`a`,{href:`/?desktop=open#/usage`,children:[e(`nav.dashboard`),` `,(0,x.jsx)(`span`,{"aria-hidden":`true`,children:`↗`})]})})]})}export{w as default};