From 2afa933153edcfa254d1c7f7dcbc025e4582c737 Mon Sep 17 00:00:00 2001
From: merefield Quota refresh failed. Values below are the last successful observation. Expiry details unavailable. No listed expiry does not mean no expiry. Read-only preview. Use the terminal to redeem a reset. The backend may return only some credits. This list does not establish
+ redemption order. Cycle duration or reset date unavailable — position cannot be
+ plotted. Cycle duration unavailable — pace cannot be calculated. No quota windows reported yet. All reported windows are shown. API-equivalent learning and quota status
+ scoring remain in the terminal for this first preview. MODEL / REASONING LEVEL / SPEED MODEL / REASONING LEVEL / SPEED Applied settings remain after Codexometer closes. Command unavailable from this observation. Open Codex to inspect the
+ request. Session controls temporarily unavailable. Check Codex for current state. Checking session controls… Controls require a supported live request from a connected shared
+ app-server session. Local observations alone cannot provide them. Type one of these choices exactly. Your answer stays masked. Command unavailable from this observation. Open Codex to inspect the
+ request. Session connection or refresh unavailable. Context and telemetry may be
+ stale. Some quota profile checks are unavailable. Only sessions with freshly
+ verified quota and settings can be updated; previous outcome notices remain
+ visible. Read only — reply or approve in Codex. This session is no longer in the current observation. Return to sessions. No locally observed sessions yet. Keep Codex running alongside
+ Codexometer. ↑ ↓ SELECT SESSION // ← LESS DETAIL // → MORE DETAIL // ESC BACK History refresh failed. Any displayed history is the last successful
+ observation. LESS ░ ▒ ▓ █ MORE // HOVER FOR DATE AND TOKENS DAYS History unavailable or awaiting a matching account observation. Missing
+ history is not treated as zero usage. Account-wide history reported by Codex, not the local Sessions counter. Dates
+ use UTC. Historical resets are not provided by this data. Quota refresh failed. Policy state is based on the last successful
+ observation. The longest Codex quota window selects one active model profile. ASK
+ creates a per-session review; AUTO applies the profile on the next
+ eligible check. No threshold-based model steps were configured at launch. Connecting to your local Codexometer… Your quota. Your sessions. Your command centre. Quota refresh failed. Values below are the last successful observation. Expiry details unavailable. No listed expiry does not mean no expiry. Read-only preview. Use the terminal to redeem a reset. The backend may return only some credits. This list does not establish
- redemption order. Cycle duration or reset date unavailable — position cannot be
- plotted. Cycle duration unavailable — pace cannot be calculated. No quota windows reported yet. All reported windows are shown. API-equivalent learning and quota status
- scoring remain in the terminal for this first preview. MODEL / REASONING LEVEL / SPEED MODEL / REASONING LEVEL / SPEED Applied settings remain after Codexometer closes. Command unavailable from this observation. Open Codex to inspect the
- request. Session controls temporarily unavailable. Check Codex for current state. Checking session controls… Controls require a supported live request from a connected shared
- app-server session. Local observations alone cannot provide them. Type one of these choices exactly. Your answer stays masked. Command unavailable from this observation. Open Codex to inspect the
- request. Session connection or refresh unavailable. Context and telemetry may be
- stale. Some quota profile checks are unavailable. Only sessions with freshly
- verified quota and settings can be updated; previous outcome notices remain
- visible. Read only — reply or approve in Codex. This session is no longer in the current observation. Return to sessions. No locally observed sessions yet. Keep Codex running alongside
- Codexometer. ↑ ↓ SELECT SESSION // ← LESS DETAIL // → MORE DETAIL // ESC BACK History refresh failed. Any displayed history is the last successful
- observation. LESS ░ ▒ ▓ █ MORE // HOVER FOR DATE AND TOKENS DAYS History unavailable or awaiting a matching account observation. Missing
- history is not treated as zero usage. Account-wide history reported by Codex, not the local Sessions counter. Dates
- use UTC. Historical resets are not provided by this data. Connecting to your local Codexometer… Your quota. Your sessions. Your command centre. MODEL STEP POLICY // OBSERVED {date(live.data.quotaAt)}
+ Quota refresh failed. Policy state is based on the last successful
+ observation.
+
+ The longest Codex quota window selects one active model profile. ASK
+ creates a per-session review; AUTO applies the profile on the next
+ eligible check.
+
+ {threshold.effort.toUpperCase()} REASONING // {threshold.speed.toUpperCase()}
+ SPEED
+ No threshold-based model steps were configured at launch. Quota refresh failed. Policy state is based on the last successful
+ observation. The longest Codex quota window selects one active model profile. ASK
+ creates a per-session review; AUTO applies the profile on the next
+ eligible check. No threshold-based model steps were configured at launch. Quota refresh failed. Values below are the last successful observation. Expiry details unavailable. No listed expiry does not mean no expiry. Read-only preview. Use the terminal to redeem a reset. The backend may return only some credits. This list does not establish
+ redemption order. Cycle duration or reset date unavailable — position cannot be
+ plotted. Cycle duration unavailable — pace cannot be calculated. No quota windows reported yet. All reported windows are shown. API-equivalent learning and quota status
+ scoring remain in the terminal for this first preview. MODEL / REASONING LEVEL / SPEED MODEL / REASONING LEVEL / SPEED Applied settings remain after Codexometer closes. Command unavailable from this observation. Open Codex to inspect the
+ request. Session controls temporarily unavailable. Check Codex for current state. Checking session controls… Controls require a supported live request from a connected shared
+ app-server session. Local observations alone cannot provide them. Type one of these choices exactly. Your answer stays masked. Command unavailable from this observation. Open Codex to inspect the
+ request. Session connection or refresh unavailable. Context and telemetry may be
+ stale. Some quota profile checks are unavailable. Only sessions with freshly
+ verified quota and settings can be updated; previous outcome notices remain
+ visible. Read only — reply or approve in Codex. This session is no longer in the current observation. Return to sessions. No locally observed sessions yet. Keep Codex running alongside
+ Codexometer. ↑ ↓ SELECT SESSION // ← LESS DETAIL // → MORE DETAIL // ESC BACK History refresh failed. Any displayed history is the last successful
+ observation. LESS ░ ▒ ▓ █ MORE // HOVER FOR DATE AND TOKENS DAYS History unavailable or awaiting a matching account observation. Missing
+ history is not treated as zero usage. Account-wide history reported by Codex, not the local Sessions counter. Dates
+ use UTC. Historical resets are not provided by this data. Connecting to your local Codexometer… Your quota. Your sessions. Your command centre. Quota refresh failed. Values below are the last successful observation. Expiry details unavailable. No listed expiry does not mean no expiry. Read-only preview. Use the terminal to redeem a reset. The backend may return only some credits. This list does not establish
- redemption order. Cycle duration or reset date unavailable — position cannot be
- plotted. Cycle duration unavailable — pace cannot be calculated. No quota windows reported yet. All reported windows are shown. API-equivalent learning and quota status
- scoring remain in the terminal for this first preview. MODEL / REASONING LEVEL / SPEED MODEL / REASONING LEVEL / SPEED Applied settings remain after Codexometer closes. Command unavailable from this observation. Open Codex to inspect the
- request. Session controls temporarily unavailable. Check Codex for current state. Checking session controls… Controls require a supported live request from a connected shared
- app-server session. Local observations alone cannot provide them. Type one of these choices exactly. Your answer stays masked. Command unavailable from this observation. Open Codex to inspect the
- request. Session connection or refresh unavailable. Context and telemetry may be
- stale. Some quota profile checks are unavailable. Only sessions with freshly
- verified quota and settings can be updated; previous outcome notices remain
- visible. Read only — reply or approve in Codex. This session is no longer in the current observation. Return to sessions. No locally observed sessions yet. Keep Codex running alongside
- Codexometer. ↑ ↓ SELECT SESSION // ← LESS DETAIL // → MORE DETAIL // ESC BACK History refresh failed. Any displayed history is the last successful
- observation. LESS ░ ▒ ▓ █ MORE // HOVER FOR DATE AND TOKENS DAYS History unavailable or awaiting a matching account observation. Missing
- history is not treated as zero usage. Account-wide history reported by Codex, not the local Sessions counter. Dates
- use UTC. Historical resets are not provided by this data. Quota refresh failed. Policy state is based on the last successful
- observation. The longest Codex quota window selects one active model profile. ASK
- creates a per-session review; AUTO applies the profile on the next
- eligible check. No threshold-based model steps were configured at launch. Connecting to your local Codexometer… Your quota. Your sessions. Your command centre.0){var E=i&4&&s===0?n:null;if(o){for(v=0;v `),pa=K(` Observed at Period elapsed Consumed Trail segment
Observed quota
+ path, not individual session usage. Gaps are not interpolated. Expand the
+ observation table for times, positions and gaps.OBSERVATION TABLE
CURRENT PROFILE
PROPOSED PROFILE
`,1),Ga=K(`About browser controls
`),Qa=K(`Grants permission beyond this one command. Check the scope
+ carefully.`),$a=K(``),eo=K(``),to=K(``),no=K(``),ro=K(` `,1),io=K(`View fixed choices
`),_o=K(`
`),vo=K(`
`,1),bo=K(`
`,1),So=K(`
TOKEN ACTIVITY // 30 SECOND SAMPLES
SESSION TOTALS
`),ts=K(` LIFETIME TOKENS
PEAK DAY
CURRENT STREAK
Accessible data table
Date (UTC) Tokens USAGE // ACCOUNT HISTORY
Page not found
`,1);function ds(e){var t=us();Te(2),q(e,t)}var fs=K(` `),ps=K(`0){var E=i&4&&s===0?n:null;if(o){for(v=0;v `),sa=K(` Observed at Period elapsed Consumed Trail segment
Observed quota
- path, not individual session usage. Gaps are not interpolated. Expand the
- observation table for times, positions and gaps.OBSERVATION TABLE
CURRENT PROFILE
PROPOSED PROFILE
`,1),za=K(`About browser controls
`),Ka=K(`Grants permission beyond this one command. Check the scope
- carefully.`),qa=K(``),Ja=K(``),Ya=K(``),Xa=K(``),Za=K(` `,1),Qa=K(`View fixed choices
`),uo=K(`
`),fo=K(`
`,1),mo=K(`
`,1),go=K(`
TOKEN ACTIVITY // 30 SECOND SAMPLES
SESSION TOTALS
`),Yo=K(` LIFETIME TOKENS
PEAK DAY
CURRENT STREAK
Accessible data table
Date (UTC) Tokens USAGE // ACCOUNT HISTORY
Page not found
`,1);function es(e){var t=$o();Te(2),q(e,t)}var ts=K(` `),ns=K(`THRESHOLDS // {live.data.thresholds.length} CONFIGURED
+ 0){var E=i&4&&s===0?n:null;if(o){for(v=0;v
`),va=K(` Observed at Period elapsed Consumed Trail segment
Observed quota
+ path, not individual session usage. Gaps are not interpolated. Expand the
+ observation table for times, positions and gaps.OBSERVATION TABLE
CURRENT PROFILE
PROPOSED PROFILE
`,1),Xa=K(`About browser controls
`),ro=K(`Grants permission beyond this one command. Check the scope
+ carefully.`),io=K(``),ao=K(``),oo=K(``),so=K(``),co=K(` `,1),lo=K(`View fixed choices
`),So=K(`
`),Co=K(`
`,1),To=K(`
`,1),Do=K(`
TOKEN ACTIVITY // 30 SECOND SAMPLES
SESSION TOTALS
`),os=K(` LIFETIME TOKENS
PEAK DAY
CURRENT STREAK
Accessible data table
Date (UTC) Tokens USAGE // ACCOUNT HISTORY
Page not found
`,1);function ds(e){var t=us();Ee(2),q(e,t)}var fs=K(` `),ps=K(`0){var E=i&4&&s===0?n:null;if(o){for(v=0;v `),pa=K(` Observed at Period elapsed Consumed Trail segment
Observed quota
- path, not individual session usage. Gaps are not interpolated. Expand the
- observation table for times, positions and gaps.OBSERVATION TABLE
CURRENT PROFILE
PROPOSED PROFILE
`,1),Ga=K(`About browser controls
`),Qa=K(`Grants permission beyond this one command. Check the scope
- carefully.`),$a=K(``),eo=K(``),to=K(``),no=K(``),ro=K(` `,1),io=K(`View fixed choices
`),_o=K(`
`),vo=K(`
`,1),bo=K(`
`,1),So=K(`
TOKEN ACTIVITY // 30 SECOND SAMPLES
SESSION TOTALS
`),ts=K(` LIFETIME TOKENS
PEAK DAY
CURRENT STREAK
Accessible data table
Date (UTC) Tokens USAGE // ACCOUNT HISTORY
Page not found
`,1);function ds(e){var t=us();Te(2),q(e,t)}var fs=K(` `),ps=K(`
QUOTA // OBSERVED {date(live.data.quotaAt)}
- {#if view === 'resets'} + {#if view === 'thresholds'} +Read-only preview. Use the terminal to redeem a reset.
diff --git a/web/src/preferences.svelte.ts b/web/src/preferences.svelte.ts index 58ed29c..f01944d 100644 --- a/web/src/preferences.svelte.ts +++ b/web/src/preferences.svelte.ts @@ -1,7 +1,15 @@ -export const quotaViews = ['bars', 'pace', 'zone', 'pie', 'fuel', 'resets']; +export const quotaViews = [ + 'bars', + 'pace', + 'zone', + 'pie', + 'fuel', + 'resets', + 'thresholds', +]; const key = 'codexometer.web.preferences.v1'; interface Preferences { - tab: 'quota' | 'sessions' | 'usage' | 'thresholds'; + tab: 'quota' | 'sessions' | 'usage'; view: string; selected: string; defaultDetail: number; @@ -19,7 +27,7 @@ function read(): Preferences { const value = JSON.parse(localStorage.getItem(key) || 'null'); if (!value || typeof value !== 'object') return defaults; return { - tab: ['quota', 'sessions', 'usage', 'thresholds'].includes(value.tab) + tab: ['quota', 'sessions', 'usage'].includes(value.tab) ? value.tab : 'quota', view: quotaViews.includes(value.view) ? value.view : 'bars', diff --git a/web/tests/browser.spec.ts b/web/tests/browser.spec.ts index fe686ae..6b7f564 100644 --- a/web/tests/browser.spec.ts +++ b/web/tests/browser.spec.ts @@ -109,6 +109,17 @@ test.describe('quota profile reviews', () => { exact: true, }); await expect(thresholds).toBeVisible(); + await expect( + page + .getByRole('navigation', { name: 'Main navigation' }) + .getByRole('link', { name: 'THRESHOLDS' }), + ).toHaveCount(0); + await expect( + page + .getByRole('navigation', { name: 'Quota view' }) + .getByRole('link') + .last(), + ).toHaveText('THRESHOLDS'); await thresholds.click(); await expect( page.getByRole('heading', { name: /THRESHOLDS/ }), From 86c901b25744cb55212fa731ee9406749a248a79 Mon Sep 17 00:00:00 2001 From: merefield