Skip to content

🤖 feat: status bar for the Agent interface status page - #7661

Merged
ibetitsmike merged 18 commits into
mainfrom
mike/status-page-action-bar
Oct 27, 2026
Merged

ibetitsmike merged 18 commits into
mainfrom
mike/status-page-action-bar

Conversation

@ibetitsmike

@ibetitsmike ibetitsmike commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds a host-rendered status bar to the top of the Agent interface status view (the artifacts-agent-interface experiment). It shows what the agent is doing right now, whether your last message reached the transcript, a collapsible peek at the latest transcript rows (also on Ctrl+Alt+Shift+P), and a Start here action on the agent's last reply (also on Ctrl+Alt+Shift+H).

Background

The status view lays status.html over the transcript, so feedback on the experiment was:

  1. You cannot see what the agent is doing at the moment.
  2. You cannot clear the context from the last assistant message (the transcript's Start Here).
  3. You cannot tell whether a message you sent made it into the transcript.

Implementation

  • agentInterfaceStatusBar.ts: pure helpers.
    • deriveStatusActivity: starting (with the runtime's startup breadcrumb, else Starting…), interrupting (after Stop, until the stream ends, with StreamingBarrier's precedence), compacting, waiting for an answer, Running <tool> · <detail>, thinking, writing a reply, working, retrying (while an auto-retry is armed or starting, as RetryBarrier counts it), waiting on a background monitor, idle, or stopped with an error. It only counts tool rows from the current turn. Of serialized calls it names the one whose execution began (executionStartedAt), and a parallel call that is still running wins over a newer call that finished.
    • deriveLastMessageReceipt: Queued, then Sending…, then In transcript (with the row's clock time, as the transcript shows it). A held input is the receipt only when there is nothing else to show, and the others are counted in a +N held chip. It skips machine-authored user rows.
    • recentTranscriptRows (another agent's message names its sender and shows its payload, not the envelope) and findStartHereSource. Start Here uses the same eligibility as AssistantMessage: the reply must be settled, not compacted, after the latest boundary, and not a peer message.
  • AgentInterfaceStatusView.tsx: the bar is a leaf that subscribes to the workspace store itself, so stream deltas re-render only the bar and not the page frame. It renders nothing for workspaces the store has not registered. The transcript peek is a sibling capped at 40% of the section. It uses column-reverse to follow the tail, so it needs no effect. Its open state persists under a new global key.
  • New keybinds TOGGLE_STATUS_TRANSCRIPT_PEEK (Ctrl+Alt+Shift+P, Cmd+Option+Shift+P on macOS) for the peek and STATUS_START_HERE (Ctrl+Alt+Shift+H) for Start here. One useBarShortcut hook listens only while the status page shows. It ignores key repeats and AltGr (which types text), and leaves the chords to dialogs, the command palette, terminals and remote desktops. The palette check is in the shared isShortcutOwnedElsewhere, so it also covers the existing Ctrl+Shift+S view switch. Settings > Keybinds and the buttons' tooltips list both. No other keybind matches either chord.
  • The status page's artifact bridge also forwards the peek chord, so it works with focus in the page. The shim matches Alt chords by the physical key (event.code), since Option changes the key on macOS, and leaves AltGr to the page. The host replays the chord with code and altKey, only from the main pane's status page (STATUS_PAGE_FRAME_CHORDS), and only during the user's own gesture in the focused frame. The Start here chord is not forwarded on purpose: a page script could then open the confirmation while the user types in the page, and the next key would land in the dialog, where Y confirms.
  • useStartHere takes turnActive and sourceKey options. The bar passes both. Start here is off while a turn runs (an armed auto-retry counts), also in a confirmation that opened before the turn started: the backend does not refuse a compaction replace during a turn. sourceKey is the last reply's id: an open confirmation's OK turns off once a newer reply replaces the one it opened for, and reopening it confirms the newer reply. The history write moved into appendStartHereBoundary and the gate into useStartHereGate, which keeps the hook under the CRAP floor. Other callers pass neither option and behave as before.
  • Docs paragraph in docs/workspaces/artifacts.mdx, plus the regenerated built-in skill content.
  • Stories: StatusBarMidTurn (laptop, dark and light) and StatusBarMidTurnPhone.

No new dependencies.

Validation

  • Remote dogfood UAT passed on 122168c. Setup: a fake Anthropic SSE server that ran a sleep 20 bash call with thinking and text phases, at 375 px and 1440 px, in light and dark. It recorded the activity line switching to Running bash · Sleep twenty 21 ms after tool_use, then back to Idle after message_stop, Queued changing to In transcript, the Start here modal adding a context boundary, and no horizontal overflow at 375 px.
  • Remote UAT round 2 on 5838e3b failed one case: the peek chord toggled the peek behind the open command palette. Fixed in 13e2e95. Round 3 on 13e2e95 passed all five cases: neither chord acts from the command palette; the peek chord works with focus in the page (once for a held chord, not for near-miss chords, and not from the sidebar's copy of the page); Ctrl+Alt+Shift+H opens the same confirmation as the button, but not mid-turn, not with focus in the page and not from the page's own script; and Interrupting… shows after Stop until the stream ends (about 86 ms during bash, 230 ms during thinking). After round 3, only 2b9b606 changes production code. Round 4 on 2b9b606 passed all four cases. During an armed auto-retry (HTTP 529, up to attempt 6) the bar read Retrying… and Start here stayed off (the button, the chord and an open dialog's OK) until Stop or Esc, and then read Stopped with an error. A retry that succeeds goes on to Writing a reply… and Idle. An open Start Here confirmation turned OK off within about 100 ms of a newer turn and kept it off after the turn ended; Cancel and reopen confirmed the newer reply, and the saved boundary holds its text.
  • Codex's first review (8 findings) was fixed with tests that fail on the old code: the monitor wait, a blank startup breadcrumb, serialized calls, held inputs, the stale relative time, peer rows, the Start Here race (an open dialog's OK turns off when a turn starts), and the shortcut (toggle, key repeat). Its third review (3 findings: the peek chord from inside the page, the interrupting phase, a Start here shortcut) was fixed the same way in 13e2e95, and its sixth (2 findings: a newer reply under an open Start Here confirmation, and an armed auto-retry counted as idle) in 2b9b606. Every new guard was removed once to see its test fail: repeat, off, AltGr (host and shim), the palette, the status-page gate (shim and host), the replayed code and altKey, the interrupting flag, the retry state and the pinned source.
  • The test audit broke the code under each of the 18 first tests and saw each one fail. It added a test for compacting or a pending question taking precedence over a running tool. A second audit of the round 3 tests found none tautological or duplicated. It moved one assertion into the table that owns it, and a new check pins that a held or disabled Start here chord is still claimed. A third audit, of the later test changes (that check, the story fix and the round 6 tests), changed nothing: 14 breaks of the round 6 code each failed the test meant to catch them.
  • Pixel's flake check caught StatusBarMidTurn rendering two ways: the chat's streaming token count read ~15 or ~10, because the store refreshes it on deltas but not on tool-call-start. The story's tool call now carries no tokens; a local replay of Pixel's capture gave identical renders in 10 of 10 runs for both themes.

Risks

Low. The bar only appears inside the experimental status view. The page frame, the send confirm strip and the composer are unchanged. useStartHere is shared with the chat's Start Here; for its other callers the only changes are the extracted history write and gate.

Known limitations:

  • When the status page agent's reminder turns run, the "last reply" that Start here uses is often the reply to that reminder, not to the user's task.
  • From UAT: while you scroll up in the peek, new rows shift its content; after Start here the receipt hides until you send the next message. When a monitor wakes the agent, the bar can read Idle for about 170 ms; a queued send can show the old receipt for about 30 ms; the status page agent's reminder rows show as raw <notification> text in the peek.
  • The Start here chord does nothing while focus is in the page (see above); the button still works.
  • During an armed auto-retry the status view shows Retrying… but not the retry countdown or its Stop button, which live in the chat's retry barrier; Esc still stops the retry.
  • The page's own script can show or hide the peek with a forged bridge message, but only during the user's own gesture in the page, the same rule as the existing view switch chord. It cannot open Start here.

@mintlify

mintlify Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
Mux 🟢 Ready View Preview Oct 27, 2026, 3:39 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T05:37:45.689262Z 2b9b606 New commits
🔒 Security Review ✅ Completed 2026-10-27T05:37:35.956256Z 2b9b606 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

🟢 e2e stories (Haiku): 14 passed

22 agent steps · 7 replayed from cache · 15 model calls · 46.3k tokens (24% cached)
Spend: $0.09 of the $1.00 cap (proxy ledger)

All 14 tests in 9 files
Test Agent Time
🟢 chatRestart.e2e.ts · 1 passed 1 step · 1 call 5.2s
🟢 a chat survives a restart of the server 1 step · 1 call 5.2s
🟢 compaction.e2e.ts · 1 passed 1 step · 1 call 4.2s
🟢 /compact replaces the old chat with a summary 1 step · 1 call 4.2s
🟢 pluginTrustRestart.e2e.ts · 1 passed 4 steps · 2 calls 9.6s
🟢 a trusted plugin hook stays trusted after the server restarts 4 steps · 2 calls 9.6s
🟢 settingsRoundTrip.e2e.ts · 1 passed 2 steps · 1 call 11.9s
🟢 a chat survives trips through Settings 2 steps · 1 call 11.9s
🟢 sidebarPerWorkspace.e2e.ts · 1 passed 4 steps · 1 call 4.5s
🟢 a new workspace starts with its right sidebar collapsed while another keeps it open 4 steps · 1 call 4.5s
🟢 smoke.e2e.ts · 1 passed 2 steps · 1 call 4.2s
🟢 the agent opens the playground workspace 2 steps · 1 call 4.2s
🟢 streamErrors.e2e.ts · 1 passed 1 step · 1 call 6.9s
🟢 stream errors show in the chat, and the chat recovers 1 step · 1 call 6.9s
🟢 todoNudge.e2e.ts · 1 passed 1 step · 1 call 2.8s
🟢 the agent finishes open TODO items after the turn-end nudge 1 step · 1 call 2.8s
🟢 touchAlignment.e2e.ts · 6 passed 6 steps · 6 calls 27.8s
🟢 the Settings close button is level with the title on a touch screen 390px wide 1 step · 1 call 3.8s
🟢 the Settings close button is level with the title on a touch screen 768px wide 1 step · 1 call 4.0s
🟢 Backup settings checkboxes are small and level with their labels on a touch phone 1 step · 1 call 4.7s
🟢 the heartbeat checkbox is small and level with its label on a touch phone 1 step · 1 call 6.6s
🟢 a reply's model and time stay on one line on a touch phone 1 step · 1 call 5.4s
🟢 the workspace actions menu stays on the title row on a touch phone 1 step · 1 call 3.3s

e2e 0.20.0 · 1m 20s · web · run artifacts

🟢 e2e Electron stories (Haiku): 3 passed

3 agent steps · 3 model calls · 8.0k tokens (22% cached)
Spend: $0.02 of the $1.00 cap (proxy ledger)

All 3 tests in 3 files
Test Agent Time
🟢 electron/deepLink.e2e.ts · 1 passed 1 step · 1 call 6.0s
🟢 a deep link of a second launch starts a chat in the running app 1 step · 1 call 6.0s
🟢 electron/menuBar.e2e.ts · 1 passed 1 step · 1 call 6.3s
🟢 the workspace menu bar is the desktop title bar 1 step · 1 call 6.3s
🟢 electron/smoke.e2e.ts · 1 passed 1 step · 1 call 4.9s
🟢 Xum Electron opens the playground workspace 1 step · 1 call 4.9s

e2e 0.20.0 · 19.4s · electron · run artifacts

🟢 e2e agent repros (Haiku): no tests selected

Spend: $0.00 of the $1.00 cap (proxy ledger)

e2e 0.20.0 · 5.4s · 2 targets (web, phone) · run artifacts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5195e3c86f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/browser/features/RightSidebar/ArtifactsTab/agentInterfaceStatusBar.ts Outdated
Comment thread src/browser/features/RightSidebar/ArtifactsTab/AgentInterfaceStatusView.tsx Outdated
Comment thread src/browser/features/RightSidebar/ArtifactsTab/agentInterfaceStatusBar.ts Outdated
Comment thread src/browser/features/RightSidebar/ArtifactsTab/AgentInterfaceStatusView.tsx Outdated
Comment thread src/browser/features/RightSidebar/ArtifactsTab/agentInterfaceStatusBar.ts Outdated
…a-controls

UAT round 1 minors: the relative time read "just now" for good while the
workspace was idle (nothing re-renders the bar), and the transcript toggle
named the peek's id while the peek was unmounted.
- armed bash monitors read as waiting, not idle
- blank or non-startup runtime details fall back to Starting…
- serialized parallel calls name the one that started
- an old held input no longer stands in for a newer landed message
- peer messages in the peek name their sender and show their text
- Start here stays off in its confirmation once a turn starts
- Ctrl+Alt+Shift+P shows or hides the transcript peek
The turn guard in openModal and executeStartHere read the same rendered
prop as disabled and confirmDisabled, so they added nothing. Moving the
history write into appendStartHereBoundary keeps useStartHere under the
CRAP floor (CC 15 -> 14).
…nputs

Also documents the transcript peek shortcut.
…rovider call

The peek shortcut test now opens the Start Here dialog and checks that the
chord leaves the peek alone (it passed with isShortcutOwnedElsewhere removed).
The serialized-calls test runs two unstarted provider calls, so picking the
oldest instead of the newest fails. The busy bar test drops a no-clock-time
check that no single change could fail: queued receipts carry no timestamp.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7699c788cc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/browser/features/RightSidebar/ArtifactsTab/AgentInterfaceStatusView.tsx Outdated
…tart here's shortcut

- The command palette keeps the bar's chords and the view switch, like a dialog
  (isShortcutOwnedElsewhere checks isCommandPaletteTarget). UAT round 2, S1.
- The status bar shows Interrupting… while a Stop is pending, with
  StreamingBarrier's precedence (Codex P2).
- KEYBINDS.STATUS_START_HERE (Ctrl+Alt+Shift+H) opens Start here from the bar.
  The frame does not forward it: a page script could open the confirmation
  under the user's typing, where Y confirms (Codex P1).
- The status page's bridge forwards the transcript peek chord: Alt chords match
  the physical key, AltGr stays the page's text, and the host replays code and
  Alt (Codex P1). The bar's chords also skip AltGr on the host.
Moves the isTurnActive check for a stop in progress from the precedence test
into the table that owns isTurnActive for every phase.
…ill claimed

The bar claims its chord even when it does nothing, as useBarShortcut's comment
says; no test pinned it, so returning before preventDefault passed.
@ibetitsmike

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: bfcbc5bde1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: bfcbc5bde1

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

Pixel's flake check saw two renders of StatusBarMidTurn: the chat's streaming
token count read ~15 or ~10. The store refreshes that count on deltas but not
on tool-call-start, so the tool call's tokens showed only when no render ran
between the two events. The tool call now carries no tokens.
@ibetitsmike

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 31248d901f

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@ibetitsmike

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review · Automatically triggered

Security review completed. No security issues were found in this pull request.

Reviewed commit: 31248d901f

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 31248d901f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…uring an armed retry

The status bar's Start here confirmation now turns OK off when a newer
reply replaces the one it opened for; reopening it confirms the newer
reply. An armed or starting auto-retry shows "Retrying…" and counts as a
running turn, so Start here stays off until the retry is abandoned.
@ibetitsmike
ibetitsmike added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit 329ee8f Oct 27, 2026
34 of 35 checks passed
@ibetitsmike
ibetitsmike deleted the mike/status-page-action-bar branch October 27, 2026 06:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant