codex-cost 0.1.0

Local web dashboard for inspecting Codex token usage from session logs.
Documentation
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Codex Cost</title>
    <link rel="stylesheet" href="/styles.css" />
  </head>
  <body>
    <main class="app-shell">
      <header class="topbar">
        <div>
          <h1>Codex Cost</h1>
          <p id="generatedAt">Loading local session data...</p>
        </div>
        <button id="refreshButton" class="icon-button" type="button" title="Refresh data" aria-label="Refresh data">
          <span aria-hidden="true">&#8635;</span>
        </button>
      </header>

      <section class="kpis" aria-label="Usage totals">
        <article>
          <span>All time</span>
          <strong id="allTimeTokens">0</strong>
        </article>
        <article>
          <span>Today</span>
          <strong id="todayTokens">0</strong>
        </article>
        <article>
          <span>Last 7 days</span>
          <strong id="lastSevenTokens">0</strong>
        </article>
        <article>
          <span>Events</span>
          <strong id="eventCount">0</strong>
        </article>
      </section>

      <section class="workspace">
        <aside class="filters" aria-label="Filters">
          <label>
            Dimension
            <select id="dimensionSelect">
              <option value="projects">Project</option>
              <option value="models">Model</option>
              <option value="threads">Thread</option>
              <option value="efforts">Effort</option>
              <option value="context_windows">Context window</option>
            </select>
          </label>
          <label>
            Project
            <select id="projectFilter">
              <option value="">All projects</option>
            </select>
          </label>
          <label>
            Model
            <select id="modelFilter">
              <option value="">All models</option>
            </select>
          </label>
          <label>
            Search
            <input id="searchInput" type="search" placeholder="Thread or path" />
          </label>
          <div class="range-readout">
            <span>Selected range</span>
            <strong id="rangeReadout">All data</strong>
          </div>
          <div id="warnings" class="warnings" hidden></div>
        </aside>

        <section class="content">
          <section class="panel timeline-panel" aria-label="Token timeline">
            <div class="panel-heading">
              <h2>Timeline</h2>
              <div class="segmented" role="group" aria-label="Time presets">
                <button type="button" data-preset="all" class="active">All</button>
                <button type="button" data-preset="7d">7d</button>
                <button type="button" data-preset="today">Today</button>
              </div>
            </div>
            <svg id="timelineChart" viewBox="0 0 900 260" role="img" aria-label="Token usage over time"></svg>
          </section>

          <section class="grid">
            <section class="panel" aria-label="Distribution chart">
              <div class="panel-heading">
                <h2 id="distributionTitle">Project distribution</h2>
              </div>
              <div id="distributionChart" class="bar-chart"></div>
            </section>

            <section class="panel" aria-label="Token type breakdown">
              <div class="panel-heading">
                <h2>Token types</h2>
              </div>
              <div id="breakdownChart" class="breakdown"></div>
            </section>
          </section>

          <section class="panel table-panel" aria-label="Usage events">
            <div class="panel-heading">
              <h2>Events</h2>
              <span id="tableCount">0 rows</span>
            </div>
            <div class="table-wrap">
              <table>
                <thead>
                  <tr>
                    <th>Time</th>
                    <th>Project</th>
                    <th>Thread</th>
                    <th>Model</th>
                    <th>Effort</th>
                    <th>Window</th>
                    <th>Tokens</th>
                  </tr>
                </thead>
                <tbody id="eventsBody"></tbody>
              </table>
            </div>
          </section>
        </section>
      </section>
      <div id="chartTooltip" class="chart-tooltip" role="tooltip" hidden></div>
    </main>
    <script src="/number-format.js" defer></script>
    <script src="/app.js" defer></script>
  </body>
</html>