GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat(site/src/pages/AIBridgePage): add column controls to the AI sessions list by tracyjohnsonux · Pull Request #31054 · coder/coder

Conversation

@tracyjohnsonux

@tracyjohnsonux tracyjohnsonux commented Oct 20, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Adds a Columns menu to the AI sessions list so users can choose which columns show, reorder them, and switch between preset views.

  • Views: General, Security, and Cost apply a preset column set in one click. Changing any column clears the checkmark; picking the view again resets to it.
  • Show/hide: a switch per column. Turning a column on appends it; turning it off moves it to the top of "Not shown". The last shown column cannot be turned off; a tooltip explains why.
  • Reorder: drag handle with pointer or keyboard (Space, arrows, Space), using @dnd-kit/react like the chat sidebar.
  • Responsive: the table hides shown columns from the end when they do not fit and the menu lists them under "Hidden at this width". Last prompt keeps at least 320px. The chevron is now its own fixed column.
  • New columns: Model (never shown by default) and Cost. Cost uses placeholder data derived from token counts until the sessions API reports cost (TODO in ListSessionsRow.tsx).
  • Initial prompt: the prompt column is renamed "Initial prompt". It still shows the last prompt as placeholder data because the sessions API only returns that (TODO in ListSessionsRow.tsx). The backend should return, in order of preference:
    1. For Coder Agents sessions, the chat summary. The session ID is the root chat ID (X-Coder-Chat-Id), so it joins to chats.
    2. The first user prompt that is not a shared system prompt. A prompt is shared when its opening matches prompts from five or more other sessions. On dogfood, 49 of the latest 100 sessions end on one templated prompt that opens with "You produce a short sidebar status summarizing".
    3. The first user prompt.
  • Settings persist in local storage, keyed by user ID.

Header text now uses the menu labels, so "In/Out Tokens" becomes sentence case.

Depends on #30733 (stacked on its branch). Also merges in #31040 (sessions search filter) so the Columns menu sits beside the new search; its files show in this diff until #31040 merges.

Design decisions
  • View definitions (sessionColumns.ts), from the design:
    • General: Last prompt, User, Client, In/Out tokens, Cost, Last active
    • Security: Last prompt, User, Network, Threads, Last active
    • Cost: Last prompt, User, Client, Cost, In/Out tokens, Threads
  • Active view is derived by comparing the shown columns with each view, not stored, so customizing back to a view's exact columns shows its checkmark again.
  • Width fitting: each column has a fixed width in sessionColumns; the table uses table-fixed, and a ResizeObserver on the table wrapper drives countFittingColumns. Those widths are inline style because the fit calculation also uses them.
  • Storage: frontend-only by request; key aiGateway.sessions.columns.<userId>. Unknown saved columns are dropped and columns added later start hidden.
  • Locked switch uses aria-disabled instead of disabled so keyboard users can focus it and read the tooltip.
  • Keyboard drag focus: dnd-kit moves the dragged row's element, which drops focus; the handle is refocused on drag over, matching refocusKeyboardPinDrag in the chat sidebar. Escape during a keyboard drag cancels the drag without closing the menu.

🤖 This PR was generated by Coder Agents on behalf of @tracyjohnsonux.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
tracyjohnsonux added 19 commits October 14, 2026 03:23
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): show session time below date in se…
e0560aa
…ssions list
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): shorten last prompt column header
bbdafcf
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): rename last active column header
de961b1
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): move session timezone into header …
5a93263
…tooltip
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): shorten network column header
cc6e2d4
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): cap last prompt tooltip height and…
4058171
… scroll
@tracyjohnsonux
fix(site/src/pages/AIBridgePage): keep sessions header cells in table…
8747a54
… layout
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): narrow last active timezone tooltip
c1fc8ed
@tracyjohnsonux
feat(site/src): open AI Gateway info tooltips above their icon
1a410ba
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): show token counts in compact K/M/B…
c5d7693
… notation
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): give the last prompt column more room
8ffab14
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): truncate last prompt preview in se…
3ed1f5f
…ssions list
@tracyjohnsonux
chore(site/src): trim comments in AI Gateway sessions changes
af8a79c
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): widen last active timezone tooltip
37e38ef
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): narrow network disabled tooltip
073dd22
@tracyjohnsonux
feat(site/src): use the search filter on the AI Gateway sessions list
5639ae6
Replace the sessions list search box and User, Provider, Client, and
Model dropdowns with the FilterCombobox search filter used on the
Workspaces page. Each former dropdown becomes a filter category. The
date range keeps its own picker; its bounds are kept out of the search
input and merged back into the query on change.
@tracyjohnsonux
fix(site/src/pages/AIBridgePage): keep the sessions search at a compa…
00d113c
…ct width
@tracyjohnsonux
Merge remote-tracking branch 'origin/main' into aibridge-sessions-dat…
1f7f9b6
…e-time-two-lines
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): add column controls to the AI sess…
25109ea
…ions list

Add a Columns menu to the AI sessions list with three one-click views
(General, Security, Cost), a switch per column, and drag-handle
reordering with pointer or keyboard. At least one column stays shown.
Customizing the columns clears the view checkmark; picking a view again
resets to it. Settings persist per user in local storage.

The table hides shown columns from the end when they do not fit its
width and the menu lists them under "Hidden at this width". The chevron
is now its own fixed column. A Model column is available but never shown
by default, and a Cost column shows placeholder data derived from token
counts until the sessions API reports cost.
@github-actions github-actions Bot assigned tracyjohnsonux Oct 20, 2026
tracyjohnsonux added 2 commits October 20, 2026 14:22
@tracyjohnsonux
Merge #31040 (sessions search filter) into column controls
6c5fb79
Places the Columns menu beside the new search filter and updates the
view test for the filter's new props and auth requirement.
@tracyjohnsonux
fix(site/src/pages/AIBridgePage): keep the hidden-width divider out o…
42f4a33
…f drags

Render "Hidden at this width" as its own list item instead of inside the
first hidden row, so it no longer moves with that row during a drag.

Save a selected view by ID rather than by its columns, so a later change
to a view's columns still applies and the view stays checked. The storage
key is renamed so values saved by earlier previews start from General.
Base automatically changed from aibridge-sessions-date-time-two-lines to main October 20, 2026 20:16
@tracyjohnsonux tracyjohnsonux added the experimental Changes that might not necessarily be merged, until its approved to proceed with. label Oct 20, 2026
@linear-code

linear-code Bot commented Oct 21, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

CODAGT-1380

AIGOV-776

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

tracyjohnsonux added 5 commits October 22, 2026 05:47
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): show sub-cent session costs as <$0.01
148b7aa
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): match the last active time size to…
44133d9
… its date
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): rename the prompt column to Initia…
92f8f56
…l prompt

The column now reads from one placeholder that documents the intended
initial prompt: the Coder Agents chat summary, else the first user prompt
that is not a shared system prompt, else the first prompt. The sessions
API returns only the last prompt today, so the placeholder shows that.
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): restyle the columns trigger as Cus…
289eb22
…tomize view
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): use the small size for the Customi…
9dec2a4
…ze view button
tracyjohnsonux added 5 commits November 4, 2026 07:48
@tracyjohnsonux
Merge remote-tracking branch 'origin/main' into ai-sessions-search-fi…
c7bee17
…lter

# Conflicts:
#	site/src/api/queries/aiBridge.ts
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): add an organization filter to the …
7eff5b0
…sessions list

The sessions search API does not filter by organization yet, so the
token defaults to the default organization, shows as a chip, and is left
out of the request.
@tracyjohnsonux
Merge remote-tracking branch 'origin/ai-sessions-search-filter' into …
cefd65b
…ai-sessions-column-controls

# Conflicts:
#	site/src/components/InfoTooltip/InfoTooltip.tsx
#	site/src/pages/AIBridgePage/ListSessionsPage/ListSessionsPage.tsx
#	site/src/pages/AIBridgePage/ListSessionsPage/ListSessionsPageView.stories.tsx
#	site/src/pages/AIBridgePage/ListSessionsPage/ListSessionsPageView.tsx
#	site/src/pages/AIBridgePage/ListSessionsPage/ListSessionsRow.tsx
#	site/src/pages/AIBridgePage/utils.test.ts
#	site/src/pages/AIBridgePage/utils.ts
@tracyjohnsonux
feat(site/src/pages/AIBridgePage): update sessions filter category icons
71eacc2
@tracyjohnsonux
Merge remote-tracking branch 'origin/ai-sessions-search-filter' into …
59c4a4b
…ai-sessions-column-controls

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@tracyjohnsonux tracyjohnsonux

Labels

experimental Changes that might not necessarily be merged, until its approved to proceed with.

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@tracyjohnsonux
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.