Skip to content

feat(tui): render agent telemetry and notifications - #9023

Closed
usr-bin-roygbiv wants to merge 8 commits into
manaflow-ai:mainfrom
usr-bin-roygbiv:agent/roygbiv-cmux-tui-agent-parity
Closed

usr-bin-roygbiv wants to merge 8 commits into
manaflow-ai:mainfrom
usr-bin-roygbiv:agent/roygbiv-cmux-tui-agent-parity

Conversation

@usr-bin-roygbiv

@usr-bin-roygbiv usr-bin-roygbiv commented Jul 28, 2026 •

Copy link
Copy Markdown

Summary

  • implement protocol 12 agent-state events and optional telemetry on top of upstream protocol 11 viewport/layout work
  • inject stable TUI workspace/surface IDs into child PTYs and render state-aware summaries with server-anchored elapsed time, task progress, running jobs, and active-agent counts
  • preserve screen/session chrome on narrow terminals and keep timers advancing for running agents on non-active workspace rails
  • add notification subtitles, a bounded banner, and numeric unread-count/highest-severity rendering
  • preserve legacy TypeScript reportAgent(..., session) callers while gating only protocol-12 telemetry fields
  • sanitize and bound free-form telemetry before storage/broadcast, reject malformed remote agent lists, and align protocol/spec compatibility wording
  • update CLI, server, event bus, specs, TypeScript bindings, and cross-binding protocol ceilings

Review fixes

  • addressed every current inline review finding; the direct-render sanitization report was already covered by the final sanitize_render_buffer pass, and telemetry is now additionally sanitized and clamped at ingestion
  • moved the PTY failure comment back beside its statement and named the notification banner duration
  • added focused regressions for clock skew, non-active sidebar timers, banner expiry, malformed agent lists, telemetry sanitization, TypeScript legacy session compatibility, and event union shapes
  • made the Python live test skip unrelated subscription events
  • fixed Markdown enum pipes, identify example fields, optional wire-schema fields, protocol-12 assertion, --session <id>, and protocol-9/capability clear-history wording

Testing

  • cargo test -p cmux-tui-core agent --lib — 7 passed
  • cargo test -p cmux-tui-core notification --lib — 3 passed
  • cargo test -p cmux-tui agent — 48 passed
  • cargo test -p cmux-tui notification — 4 passed
  • cargo test -p cmux-tui --test cli cli_verbs_cover_command_output_errors_and_streams — 1 passed
  • focused clock-skew, non-active timer, banner expiry, and malformed-list tests — 1 passed each
  • npm test in bindings/typescript — 65 passed
  • cargo build -p cmux-tui && python3 scripts/test-agent-parity.py — build passed; parity smoke 1 passed
  • python3 -m py_compile scripts/test-agent-parity.py — passed
  • cargo fmt --all -- --check and git diff --check — passed

Demo Video

N/A — this is a Linux TUI/protocol change; deterministic focused tests and the live parity smoke exercise the changed behavior.

Checklist

  • Tested locally
  • Added/updated behavior tests
  • Updated protocol and frontend documentation
  • Addressed current inline review comments

Summary by CodeRabbit

  • New Features

    • Added agent telemetry, including labels, details, progress counters, timing, and active-task information.
    • Added the agent error state and real-time agent status updates.
    • Added notification subtitles, displayed in the TUI notification banner.
    • Added CLI options for notification subtitles and agent telemetry.
    • Added surface-aware agent updates and improved agent summaries in the workspace interface.
  • Documentation

    • Updated protocol and client documentation for Protocol v12 and its compatibility requirements.
  • Tests

    • Added end-to-end coverage for agent telemetry, status events, notifications, and unread indicators.

@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@coderabbitai

coderabbitai Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Protocol v12 support is added across the control server, Mux, remote sessions, TypeScript bindings, CLI, TUI rendering, conformance tests, end-to-end parity checks, and protocol documentation. Agent telemetry, error states, state-change events, and notification subtitles are wired through the full stack.

Changes

Protocol v12 agent and notification flow

Layer / File(s) Summary
Core protocol data and server handling
cmux-tui/crates/cmux-tui-core/src/{mux.rs,server.rs,event_bus.rs,lib.rs}
Adds agent telemetry, the error state, agent-state-changed events, notification subtitles, protocol version 12, event filtering, serialization, and telemetry routing.
CLI and remote session integration
cmux-tui/crates/cmux-tui/src/{cli.rs,session/*}
Adds telemetry CLI flags, remote agent-list decoding, protocol-12 validation, agent event parsing, and surface-scoped event handling.
TUI state and rendering
cmux-tui/crates/cmux-tui/src/{app.rs,ui/*}
Caches agent records, renders agent summaries and indicators, tracks elapsed time, and displays expiring notification banners.
TypeScript protocol bindings
cmux-tui/bindings/typescript/{src,test}/*
Extends command, event, common, and client types for telemetry, error states, agent events, subtitles, and protocol gating.
Protocol specifications and compatibility
cmux-tui/spec/*, cmux-tui/docs/*
Updates protocol v12 contracts, negotiation rules, CLI documentation, event schemas, frontend guidance, and examples.
Conformance and end-to-end validation
cmux-tui/bindings/conformance/*, cmux-tui/bindings/*/e2e/*, cmux-tui/scripts/*, cmux-tui/crates/cmux-tui/tests/*
Updates protocol expectations and adds binding, smoke, CLI, and agent/notification parity coverage.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: lawrencecchen


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Swift Blocking Runtime ❌ Error Production RemoteDaemon code added writeQueue.sync and stateQueue.sync in call admission/keepalive watchdog paths, expanding blocking sync in a latency-sensitive socket path. Move the admission/watchdog coordination to an actor or async callback/state transition, and avoid new synchronous queue hops in runtime code.
Docstring Coverage ⚠️ Warning Docstring coverage is 34.65% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (23 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly captures the main change: adding agent telemetry and notification rendering.
Description check ✅ Passed The description covers the required summary, testing, demo-video, and checklist sections; the only notable omission is the copy/paste review-trigger block.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed HEAD changes only cmux-tui/spec/cli.md; no Swift files or Swift actor-isolation issues are present.
Cmux Browser Automation Off-Main ✅ Passed HEAD only changes cmux-tui/spec/cli.md; no browser.* socket automation files or worker-routing code were touched.
Cmux Expensive Synchronous Load ✅ Passed Diff touches only cmux-tui/spec/cli.md; no Swift files or expensive-load patterns are present, so this Swift-specific check is not applicable.
Cmux Cache Substitution Correctness ✅ Passed PASS: agent_records/notification_banner are UI-only; Session::agents() still does fresh list-agents, and reset/event paths keep the cache event-driven and refreshed.
Cmux No Hacky Sleeps ✅ Passed Only bounded test scaffolding uses waits/polling; runtime client timers are request/stream timeouts, not sync hacks.
Cmux Algorithmic Complexity ✅ Passed New collection walks are linear (workspace tabs, agent records) and I found no nested rescans, repeated sorts, or batch rescans on the same scalable set.
Cmux Swift Concurrency ✅ Passed PR diff only changes spec/cli.md; no cmux-owned Swift code was added or modified.
Cmux Swift @Concurrent ✅ Passed No changed Swift file adds @concurrent, and scans found no nonisolated async patterns; added async code is actor-bound or explicitly hopped.
Cmux Swift Package Boundaries ✅ Passed PASS: The Swift diff is mostly app/UI glue and composition; reusable logic is extracted into small SwiftPM packages, not stranded in Sources/.
Cmux Swiftpm Lockfiles ✅ Passed PR only adds a local path dependency and source-file membership; no external SwiftPM pins, .gitignore edits, or package-reference changes without lockfiles.
Cmux Swift Logging ✅ Passed The diff only changes cmux-tui/spec/cli.md; no Swift runtime files were touched, so the Swift logging rule is not implicated.
Cmux User-Facing Error Privacy ✅ Passed The only commit diff is a docs/cli.md wording tweak, and the rule explicitly allows docs; no user-facing error text changed in production code.
Cmux Full Internationalization ✅ Passed New Swift UI copy uses localized APIs, and the touched xcstrings entries cover all 20 supported locales with no missing or placeholder translations.
Cmux Swiftui State Layout ✅ Passed No SwiftUI files or state/layout changes are present; git status is clean and the PR summary only touches Rust/TS/docs.
Cmux Architecture Rethink ✅ Passed No Swift files are touched; the diff is a one-line docs clarification in cmux-tui/spec/cli.md, so the Swift architecture rule is not applicable.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS: The commit diff only changes a Markdown file; no Swift window/controller code was added or modified, so the shortcut rule isn’t implicated.
Cmux Source Artifacts ✅ Passed The only changed path is cmux-tui/spec/cli.md, a hand-written docs file; no local outputs, caches, temp dirs, or artifact paths were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS: The PR diff only changes cmux-tui/spec/cli.md; no Swift files under any Sources/ path are changed, so the debug-seam rule doesn't apply.
Cmux No Ambient Global State ✅ Passed Only cmux-tui/spec/cli.md changed in HEAD^..HEAD; no Swift production code or new ambient global state was added.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
cmux-tui/crates/cmux-tui-core/src/mux.rs (1)

3676-3700: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Preserve telemetry when advancing agent state

report_agent creates a full new AgentRecord, so omitting fields sends AgentTelemetry::default() for all Option<T> telemetry fields. This means a later state transition can reset started_at_ms and progress fields used by agent_elapsed_seconds/agent summary; the hook suppression also blocks later socket telemetry updates from reaching the UI. Merge telemetry instead of replacing the whole record, and avoid treating a later hook report as authoritative for a prior socket record unless the new socket telemetry is preserved or stale telemetry is invalid.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/crates/cmux-tui-core/src/mux.rs` around lines 3676 - 3700, Update
report_agent so new reports merge with the existing AgentRecord and preserve
non-default AgentTelemetry fields when the incoming report omits them, including
started_at_ms and progress values. Revise the Hook/Socket suppression logic to
allow valid newer socket telemetry to update a prior hook record, while
preventing stale hook data from overwriting an established socket record. Keep
state/source/session updates and AgentStateChanged emission consistent with the
merged record.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux-tui/crates/cmux-tui/src/app.rs`:
- Around line 4720-4728: Move the tick_agent_elapsed() and
expire_notification_banner() checks above the existing comment, keeping the
comment immediately adjacent to action.merge(self.apply_pty_failures()).
Preserve the current checks and RenderAction::Draw behavior unchanged.
- Around line 6451-6457: Extract the four-second notification banner duration
into a named constant alongside the existing display-duration constants such as
DURABLE_NOTICE_DISPLAY_DURATION, then update the
AppEvent::Mux(MuxEvent::Notification(event)) handler to use that constant when
calculating the deadline.

In `@cmux-tui/crates/cmux-tui/src/cli.rs`:
- Around line 1044-1053: The agent-state validation is duplicated between
build_list_agents and build_report_agent. Extract the allowed-state check and
matching UsageError message into a shared helper, then call it from both
functions while preserving the current accepted states and error behavior.

In `@cmux-tui/scripts/test-agent-parity.py`:
- Around line 115-143: Update the subscriber read in the report-agent test to
loop over events until event["event"] equals "agent-state-changed", skipping
unrelated client events. Then retain the existing state and tasks_completed
assertions against the matched event, following the skip-loop pattern used by
the notification check.

In `@cmux-tui/spec/cli.md`:
- Around line 145-147: Escape every enum separator in the affected Markdown
tables so literal alternatives do not create extra columns: update the notify,
list-agents, and report-agent flag descriptions in cmux-tui/spec/cli.md lines
145-147, and the corresponding notify mapping at cmux-tui/spec/commands.md line
2884, list-agents mapping at line 2947, and report-agent mapping at line 3005.

In `@cmux-tui/spec/commands.md`:
- Line 207: Update the identify JSON example to match the declared result schema
by including required registry_id, generation, and workspace_revision fields in
the exact result object; only mark them optional if the server intentionally
omits them.

In `@cmux-tui/spec/events.md`:
- Around line 877-884: Update the wire schema fields session, label, detail,
started_at_ms, tasks_completed, tasks_total, jobs_running, agents_active, and
subtitle to be optional, matching the optional properties defined in the
TypeScript events protocol. Preserve their existing types and names while
changing only their required/omitted-field behavior.

---

Outside diff comments:
In `@cmux-tui/crates/cmux-tui-core/src/mux.rs`:
- Around line 3676-3700: Update report_agent so new reports merge with the
existing AgentRecord and preserve non-default AgentTelemetry fields when the
incoming report omits them, including started_at_ms and progress values. Revise
the Hook/Socket suppression logic to allow valid newer socket telemetry to
update a prior hook record, while preventing stale hook data from overwriting an
established socket record. Keep state/source/session updates and
AgentStateChanged emission consistent with the merged record.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 45429a1b-5607-4936-8fe9-b0d25f2ba9d1

📥 Commits

Reviewing files that changed from the base of the PR and between 1d2e1fa and ae8e8a7.

📒 Files selected for processing (35)
  • cmux-tui/bindings/conformance/fixtures.json
  • cmux-tui/bindings/generate.sh
  • cmux-tui/bindings/go/cmd/e2e/main.go
  • cmux-tui/bindings/java/src/com/cmux/E2e.java
  • cmux-tui/bindings/python/e2e.py
  • cmux-tui/bindings/typescript/README.md
  • cmux-tui/bindings/typescript/e2e/e2e.ts
  • cmux-tui/bindings/typescript/src/client.ts
  • cmux-tui/bindings/typescript/src/protocol/commands.ts
  • cmux-tui/bindings/typescript/src/protocol/common.ts
  • cmux-tui/bindings/typescript/src/protocol/events.ts
  • cmux-tui/bindings/typescript/test/client.test.ts
  • cmux-tui/bindings/typescript/test/protocol-types.ts
  • cmux-tui/crates/cmux-tui-core/src/event_bus.rs
  • cmux-tui/crates/cmux-tui-core/src/lib.rs
  • cmux-tui/crates/cmux-tui-core/src/mux.rs
  • cmux-tui/crates/cmux-tui-core/src/server.rs
  • cmux-tui/crates/cmux-tui/src/app.rs
  • cmux-tui/crates/cmux-tui/src/cli.rs
  • cmux-tui/crates/cmux-tui/src/session/mod.rs
  • cmux-tui/crates/cmux-tui/src/session/remote.rs
  • cmux-tui/crates/cmux-tui/src/ui/mod.rs
  • cmux-tui/crates/cmux-tui/src/ui/sidebar.rs
  • cmux-tui/crates/cmux-tui/tests/cli.rs
  • cmux-tui/docs/README.md
  • cmux-tui/docs/protocol.md
  • cmux-tui/scripts/smoke-tui.py
  • cmux-tui/scripts/test-agent-parity.py
  • cmux-tui/spec/README.md
  • cmux-tui/spec/bindings.md
  • cmux-tui/spec/cli.md
  • cmux-tui/spec/commands.md
  • cmux-tui/spec/events.md
  • cmux-tui/spec/frontends.md
  • cmux-tui/spec/transports.md

Comment thread cmux-tui/crates/cmux-tui/src/app.rs Outdated
Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/cli.rs
Comment thread cmux-tui/scripts/test-agent-parity.py
Comment thread cmux-tui/spec/cli.md Outdated
Comment thread cmux-tui/spec/commands.md Outdated
Comment thread cmux-tui/spec/events.md Outdated
@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch from ae8e8a7 to 72deeb8 Compare July 28, 2026 02:59
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@usr-bin-roygbiv

Copy link
Copy Markdown
Author

@codex review
@coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@cubic-dev-ai

cubic-dev-ai Bot commented Jul 28, 2026

Copy link
Copy Markdown

@codex review
@coderabbitai review
@greptile-apps review
@cubic-dev-ai review

@usr-bin-roygbiv I can't start this review because your workspace has reached its free monthly review limit. cubic has reviewed 241,631 of the 240,000 allowed lines of code this month. Reviews resume on 1 August 2026 (in 4 days). Paid plans include much higher monthly review limits. Upgrade now to resume reviews.

To help optimise your usage, you can tune cubic to get the most out of your usage limits:

Learn more →

@coderabbitai

coderabbitai Bot commented Jul 28, 2026 •

Copy link
Copy Markdown

@usr-bin-roygbiv: I’ll review the changes in #9023.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

To use Codex here, create a Codex account and connect to github.

@coderabbitai coderabbitai 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.

Actionable comments posted: 11

♻️ Duplicate comments (1)
cmux-tui/scripts/test-agent-parity.py (1)

115-143: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Read until agent-state-changed is received (still unresolved).

The control-subscribe channel also broadcasts client events (ClientAttached/ClientChanged); the line immediately after report-agent isn't guaranteed to be the agent event. The notification check further down (lines 183-186) already uses a skip-loop for exactly this reason — apply the same pattern here instead of a bare readline().

🩺 Proposed fix
-        event = json.loads(subscriber_stream.readline())
-        self.assertEqual(event["event"], "agent-state-changed")
-        self.assertEqual(event["state"], "error")
-        self.assertEqual(event["tasks_completed"], 3)
+        while True:
+            event = json.loads(subscriber_stream.readline())
+            if event.get("event") == "agent-state-changed":
+                break
+        self.assertEqual(event["state"], "error")
+        self.assertEqual(event["tasks_completed"], 3)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/scripts/test-agent-parity.py` around lines 115 - 143, Update the
report-agent verification in the parity test to read subscriber_stream
repeatedly until it receives the "agent-state-changed" event, skipping unrelated
client events such as ClientAttached or ClientChanged. Reuse the existing
skip-loop pattern from the later notification check, then keep the current state
and tasks_completed assertions against the matched event.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux-tui/bindings/typescript/src/client.ts`:
- Around line 841-857: Update reportAgent to preserve the legacy positional
session argument and accept the object form without breaking TypeScript or
JavaScript callers. Normalize both forms before processing, and require protocol
12 only when new telemetry fields beyond session are supplied; allow
options.session alone on protocols 6–11.

In `@cmux-tui/bindings/typescript/test/protocol-types.ts`:
- Around line 126-141: The type-level fixture in protocol-types.ts currently
omits SubscribeEvent and KnownCmuxEvent coverage. Add fixtures assigning
notification and agent-state-changed events to those unions, including cases
with omitted and null telemetry fields, while preserving the existing
request-shape tests so event-field or union regressions fail at compile time.

In `@cmux-tui/crates/cmux-tui-core/src/mux.rs`:
- Around line 436-455: Sanitize and clamp AgentTelemetry.label and detail before
they are stored in AgentRecord, reusing sanitize_window_title with the
established hard length cap. Apply this at the AgentRecord/AgentTelemetry
construction or update path so AgentStateChanged broadcasts, JSON serialization,
and agent_summary() only receive bounded sanitized strings.

In `@cmux-tui/crates/cmux-tui/src/app.rs`:
- Around line 5759-5766: The agent_elapsed_seconds method mixes server
timestamps with the local clock for active agents. Anchor live elapsed
calculations to a server-time offset captured when updated_at_ms is received,
while retaining purely server-based updated_at_ms minus started_at_ms
calculations for Done and Error states, so live and terminal values remain
consistent.
- Around line 15522-15734: Extend the test module with focused coverage for the
time-driven helpers expire_notification_banner and tick_agent_elapsed. Inject
deterministic deadlines or timestamps, verify expired notification banners are
removed, and verify tick_agent_elapsed updates elapsed timing for an agent
record associated with a non-active surface so sidebar timers continue
advancing.
- Around line 5794-5803: Update tick_agent_elapsed to derive its redraw value
from every cached/rendered agent record used by agent_summary, rather than only
active_agent_record(). Compare the aggregate per-surface elapsed or
running-state value with last_agent_elapsed_second, and return true whenever any
sidebar timer can advance while preserving the existing change-detection
behavior.

In `@cmux-tui/crates/cmux-tui/src/session/mod.rs`:
- Around line 271-285: The Session::agents method must fail on malformed remote
agent data instead of returning empty or partial results. Require the response’s
agents field to be an array and propagate a decode error for any record that
remote::parse_agent_record cannot parse, matching the validation behavior of
clients(); preserve the existing successful parsing behavior for valid lists.

In `@cmux-tui/crates/cmux-tui/src/ui/mod.rs`:
- Around line 283-293: Sanitize agent-supplied text by replacing every control
character with a space before rendering. In
cmux-tui/crates/cmux-tui/src/ui/mod.rs lines 283-293, clean the status-bar
summary before passing it to put; in cmux-tui/crates/cmux-tui/src/ui/sidebar.rs
lines 415-431, clean the subtitle before passing it to rail::entry. Reuse the
established clean pattern from draw_notification_banner.

In `@cmux-tui/crates/cmux-tui/tests/cli.rs`:
- Line 797: Update the protocol version assertion in the CLI test to expect 12,
matching the server’s authoritative PROTOCOL_VERSION and related conformance and
remote-session tests.

In `@cmux-tui/spec/cli.md`:
- Line 151: Update the report-agent CLI option documentation to show --session
as a value-taking argument using the [--session <id>] form, while leaving the
existing optionality and other option descriptions unchanged.

In `@cmux-tui/spec/transports.md`:
- Line 7: Update the clear-history compatibility prose in the protocol matrices
across transports.md, README.md, protocol.md, and frontends.md so clients must
require the advertised clear-history-v1 capability and identify.protocol >= 9
before using clear-history, matching the v9 command schema.

---

Duplicate comments:
In `@cmux-tui/scripts/test-agent-parity.py`:
- Around line 115-143: Update the report-agent verification in the parity test
to read subscriber_stream repeatedly until it receives the "agent-state-changed"
event, skipping unrelated client events such as ClientAttached or ClientChanged.
Reuse the existing skip-loop pattern from the later notification check, then
keep the current state and tasks_completed assertions against the matched event.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 716087c9-9358-44d4-836c-e0b6b50f19f6

📥 Commits

Reviewing files that changed from the base of the PR and between ae8e8a7 and 72deeb8.

📒 Files selected for processing (35)
  • cmux-tui/bindings/conformance/fixtures.json
  • cmux-tui/bindings/generate.sh
  • cmux-tui/bindings/go/cmd/e2e/main.go
  • cmux-tui/bindings/java/src/com/cmux/E2e.java
  • cmux-tui/bindings/python/e2e.py
  • cmux-tui/bindings/typescript/README.md
  • cmux-tui/bindings/typescript/e2e/e2e.ts
  • cmux-tui/bindings/typescript/src/client.ts
  • cmux-tui/bindings/typescript/src/protocol/commands.ts
  • cmux-tui/bindings/typescript/src/protocol/common.ts
  • cmux-tui/bindings/typescript/src/protocol/events.ts
  • cmux-tui/bindings/typescript/test/client.test.ts
  • cmux-tui/bindings/typescript/test/protocol-types.ts
  • cmux-tui/crates/cmux-tui-core/src/event_bus.rs
  • cmux-tui/crates/cmux-tui-core/src/lib.rs
  • cmux-tui/crates/cmux-tui-core/src/mux.rs
  • cmux-tui/crates/cmux-tui-core/src/server.rs
  • cmux-tui/crates/cmux-tui/src/app.rs
  • cmux-tui/crates/cmux-tui/src/cli.rs
  • cmux-tui/crates/cmux-tui/src/session/mod.rs
  • cmux-tui/crates/cmux-tui/src/session/remote.rs
  • cmux-tui/crates/cmux-tui/src/ui/mod.rs
  • cmux-tui/crates/cmux-tui/src/ui/sidebar.rs
  • cmux-tui/crates/cmux-tui/tests/cli.rs
  • cmux-tui/docs/README.md
  • cmux-tui/docs/protocol.md
  • cmux-tui/scripts/smoke-tui.py
  • cmux-tui/scripts/test-agent-parity.py
  • cmux-tui/spec/README.md
  • cmux-tui/spec/bindings.md
  • cmux-tui/spec/cli.md
  • cmux-tui/spec/commands.md
  • cmux-tui/spec/events.md
  • cmux-tui/spec/frontends.md
  • cmux-tui/spec/transports.md

Comment thread cmux-tui/bindings/typescript/src/client.ts
Comment thread cmux-tui/bindings/typescript/test/protocol-types.ts
Comment thread cmux-tui/crates/cmux-tui-core/src/mux.rs
Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/session/mod.rs
Comment thread cmux-tui/crates/cmux-tui/src/ui/mod.rs
Comment thread cmux-tui/crates/cmux-tui/tests/cli.rs Outdated
Comment thread cmux-tui/spec/cli.md Outdated
Comment thread cmux-tui/spec/transports.md Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
cmux-tui/spec/commands.md (1)

3192-3202: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Mark optional v12 telemetry result fields as optional.

Older producers may omit v12 fields, but both result schemas require them. Generated clients could reject valid pre-v12-compatible payloads.

  • cmux-tui/spec/commands.md#L3192-L3202: change label through agents_active to optional members (?).
  • cmux-tui/spec/commands.md#L3260-L3261: change the same telemetry members to optional members in report-agent results.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/spec/commands.md` around lines 3192 - 3202, Update the telemetry
result schema at cmux-tui/spec/commands.md lines 3192-3202 and the report-agent
result schema at lines 3260-3261: mark label, detail, started_at_ms,
tasks_completed, tasks_total, jobs_running, and agents_active as optional
members using the schema’s existing optional-member syntax. Leave state, source,
session, and updated_at_ms unchanged.
cmux-tui/crates/cmux-tui-core/src/mux.rs (1)

3786-3817: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Bound/sanitize subtitle the same way report_agent now sanitizes telemetry.

report_agent (below, lines 3825-3832) now runs label/detail through sanitize_window_title and clamps them to 64 chars specifically to prevent control characters and overlong payloads from corrupting terminal rendering or amplifying broadcast size. post_notification's new subtitle (and pre-existing title/body) take the same free-form, externally-supplied path (CLI notify, Command::Notify) but skip that treatment entirely, reintroducing the exact class of issue that was just closed for agent telemetry.

🛡️ Proposed fix
     pub fn post_notification(
         &self,
         title: String,
         subtitle: Option<String>,
         body: String,
         level: NotificationLevel,
         surface: Option<SurfaceId>,
     ) -> u64 {
         let id = self.next_notification_id();
+        let subtitle = subtitle
+            .map(|value| crate::server::sanitize_window_title(&value).chars().take(128).collect());
         let mut unread_changed = false;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/crates/cmux-tui-core/src/mux.rs` around lines 3786 - 3817, Update
post_notification to sanitize title, subtitle, and body with
sanitize_window_title and clamp each value to 64 characters, matching
report_agent’s telemetry handling. Apply the transformation before constructing
MuxEvent::Notification, preserving subtitle’s optional shape and the existing
notification flow.
cmux-tui/scripts/test-agent-parity.py (1)

35-43: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Bound the stderr read on startup failure.

If the child remains alive without creating the socket, self.server.stderr.read() waits for EOF indefinitely, so the test hangs instead of failing. Terminate/kill the process and use bounded communicate() before reporting the error.

Proposed fix
         stderr = self.server.stderr.read() if self.server.stderr else ""
+        if self.server.poll() is None:
+            self.server.terminate()
+            try:
+                stderr, _ = self.server.communicate(timeout=5)
+            except subprocess.TimeoutExpired:
+                self.server.kill()
+                stderr, _ = self.server.communicate()
         self.fail(f"headless server did not start: {stderr[-2000:]}")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/scripts/test-agent-parity.py` around lines 35 - 43, Update the
startup-failure path in the test agent’s server wait logic to terminate the
still-running self.server process, force-kill it if necessary, and collect
stderr with bounded communicate() calls before self.fail. Replace the unbounded
self.server.stderr.read() while preserving the existing stderr tail in the
failure message.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux-tui/spec/cli.md`:
- Line 151: Update the report-agent option table to show value placeholders for
every value-taking telemetry flag: use <label> and <detail> for the
corresponding string options and <n> for all numeric options, while preserving
the existing --session <id> and command contract.

---

Outside diff comments:
In `@cmux-tui/crates/cmux-tui-core/src/mux.rs`:
- Around line 3786-3817: Update post_notification to sanitize title, subtitle,
and body with sanitize_window_title and clamp each value to 64 characters,
matching report_agent’s telemetry handling. Apply the transformation before
constructing MuxEvent::Notification, preserving subtitle’s optional shape and
the existing notification flow.

In `@cmux-tui/scripts/test-agent-parity.py`:
- Around line 35-43: Update the startup-failure path in the test agent’s server
wait logic to terminate the still-running self.server process, force-kill it if
necessary, and collect stderr with bounded communicate() calls before self.fail.
Replace the unbounded self.server.stderr.read() while preserving the existing
stderr tail in the failure message.

In `@cmux-tui/spec/commands.md`:
- Around line 3192-3202: Update the telemetry result schema at
cmux-tui/spec/commands.md lines 3192-3202 and the report-agent result schema at
lines 3260-3261: mark label, detail, started_at_ms, tasks_completed,
tasks_total, jobs_running, and agents_active as optional members using the
schema’s existing optional-member syntax. Leave state, source, session, and
updated_at_ms unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9a795ef2-1ad5-476f-a869-ab9573fb182a

📥 Commits

Reviewing files that changed from the base of the PR and between 72deeb8 and 907d264.

📒 Files selected for processing (17)
  • cmux-tui/bindings/typescript/src/client.ts
  • cmux-tui/bindings/typescript/test/client.test.ts
  • cmux-tui/bindings/typescript/test/protocol-types.ts
  • cmux-tui/crates/cmux-tui-core/src/mux.rs
  • cmux-tui/crates/cmux-tui-core/src/server.rs
  • cmux-tui/crates/cmux-tui/src/app.rs
  • cmux-tui/crates/cmux-tui/src/cli.rs
  • cmux-tui/crates/cmux-tui/src/session/mod.rs
  • cmux-tui/crates/cmux-tui/tests/cli.rs
  • cmux-tui/docs/protocol.md
  • cmux-tui/scripts/test-agent-parity.py
  • cmux-tui/spec/README.md
  • cmux-tui/spec/cli.md
  • cmux-tui/spec/commands.md
  • cmux-tui/spec/events.md
  • cmux-tui/spec/frontends.md
  • cmux-tui/spec/transports.md

Comment thread cmux-tui/spec/cli.md Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux-tui/crates/cmux-tui/src/app.rs`:
- Around line 5760-5766: Update is_omp_root_record and all OMP-root
attention/counting callers to use a structured protocol-level root-session
identity signal instead of matching telemetry.label to "OMP"; add that signal to
AgentRecord or its associated telemetry data if absent, set it when creating the
OMP root record, and preserve non-root AgentSource::Hook records such as
"Worker" as non-roots.
- Around line 5768-5786: The omp_root_session_counts method currently performs
an unnecessary tree traversal for each agent record. Replace the
self.tree.surface(record.surface).is_some() filter with a tab_locations
membership check using contains_key, while preserving the existing root-record
filtering and state counting.

In `@cmux-tui/crates/cmux-tui/src/ui/pane.rs`:
- Around line 205-210: In cmux-tui/crates/cmux-tui/src/ui/pane.rs:205-210 and
356-362, compute a single filtered, severity-ranked attention cue from the OMP
state and unread notification, excluding Working/Idle OMP states, then reuse it
for both tab labels and styles. Ensure higher-severity unread notifications take
precedence over lower-severity OMP icons while preserving the existing rendering
and styling behavior for the selected cue.

In `@cmux-tui/crates/cmux-tui/src/ui/sidebar.rs`:
- Around line 24-51: Update workspace_attention_color so Working and Idle OMP
states are excluded before selecting the maximum, matching omp_attention_icon’s
no-indicator behavior. Filter out rank-zero entries from the omp iterator while
preserving notification handling and existing ranking for Error, Blocked,
Unknown, and Done.
- Around line 24-51: Update workspace_attention_color to traverse each
workspace’s screens, panes, and tabs only once per render, combining
notification and OMP attention ranking updates within that single tab iteration.
Preserve the existing ranking precedence and color selection behavior while
eliminating the separate notifications and omp scans.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cb3b14aa-4438-4ec5-8370-3ef991ccb71d

📥 Commits

Reviewing files that changed from the base of the PR and between 907d264 and a9e9d9a.

📒 Files selected for processing (5)
  • cmux-tui/crates/cmux-tui/src/app.rs
  • cmux-tui/crates/cmux-tui/src/ui/mod.rs
  • cmux-tui/crates/cmux-tui/src/ui/pane.rs
  • cmux-tui/crates/cmux-tui/src/ui/sidebar.rs
  • cmux-tui/docs/configuration.md

Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/app.rs Outdated
Comment thread cmux-tui/crates/cmux-tui/src/ui/pane.rs Outdated
Comment thread cmux-tui/crates/cmux-tui/src/ui/sidebar.rs Outdated
@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch 4 times, most recently from e721f61 to 96f5b3f Compare July 28, 2026 09:36
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@coderabbitai coderabbitai 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.

Actionable comments posted: 9

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
cmux-tui/crates/cmux-tui/src/ui/mod.rs (1)

100-140: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Notification banner silently overwrites the prefix-key help bar.

draw_notification_banner's non-surface-only y is area.height.saturating_sub(2) (line 354), which is exactly the row draw_prefix_help_bar draws to (status_y.saturating_sub(1) = (area.height-1)-1 = area.height-2, called from draw_status_bar at lines 341-343). Since draw() calls draw_status_bar before draw_notification_banner (line 122), an active notification banner will overwrite the prefix help row whenever the user has prefix_armed a keyboard sequence, hiding the available-actions chrome without any fallback. This contradicts the PR's stated goal of preserving screen/session chrome, and there's no existing test covering both states together.

🩹 Proposed fix: shift banner up when prefix is armed
-    let y = if app.is_surface_only() { area.height - 1 } else { area.height.saturating_sub(2) };
+    let y = if app.is_surface_only() {
+        area.height - 1
+    } else if app.prefix_armed {
+        area.height.saturating_sub(3)
+    } else {
+        area.height.saturating_sub(2)
+    };

Also applies to: 340-394

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmux-tui/crates/cmux-tui/src/ui/mod.rs` around lines 100 - 140, Update
draw_notification_banner so its non-surface-only row moves up when
app.prefix_armed is active, avoiding the prefix-help row rendered by
draw_prefix_help_bar in draw_status_bar. Preserve the current banner position
when no prefix sequence is armed, and add coverage for the
notification-plus-prefix-armed state.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cmux-tui/bindings/typescript/src/client.ts`:
- Around line 838-845: Localize the new public protocol-v12 additions using the
project’s locale-specific sources instead of English literals. Update client.ts
at lines 838-845 to localize the notification-subtitle protocol error, client.ts
at lines 872-875 to localize the agent-telemetry protocol error, and README.md
at line 4 to add matching localized protocol-v12 documentation; update every
supported locale as required.

In `@cmux-tui/crates/cmux-tui-core/src/mux.rs`:
- Around line 2456-2471: Update the workspace_key-to-workspace_id lookup in the
surface spawn logic to call the existing State::workspace_by_key method instead
of scanning state.workspaces with iter().find(). Preserve the current optional
handling and CMUX_TUI_WORKSPACE_ID environment assignment while reusing the
maintained O(1) index.

In `@cmux-tui/crates/cmux-tui/src/app.rs`:
- Around line 7061-7062: Update replace_authoritative_tree, using its existing
live_surfaces set, to prune agent_records and agent_observed_at_ms entries whose
surfaces are no longer live. Keep the existing retire_surface_state cleanup for
per-surface retirement, but reconcile both caches against the authoritative live
surface set so orphaned non-terminal agents cannot continue triggering redraws.
- Around line 5780-5804: Update agent_summary and format_elapsed to obtain the
agent state labels, jobs/agents unit suffixes, and elapsed-time h/m/s suffixes
through localization::catalog() instead of hardcoded strings. Preserve the
existing compact formatting and ordering while ensuring every user-facing
segment uses the active locale.

In `@cmux-tui/crates/cmux-tui/src/session/remote.rs`:
- Around line 90-121: Update parse_agent_record to reject malformed optional
fields instead of treating them as absent: distinguish missing values from wrong
JSON types for session, every AgentTelemetry field, and updated_at_ms, and
return a parse error that decode_remote_agent_list propagates. Restrict state
parsing to the protocol’s explicit strings, including "unknown", and reject any
other state rather than mapping it to AgentState::Unknown; preserve event
handling’s ability to discard malformed events and add regressions for invalid
optional types and unknown states.

In `@cmux-tui/crates/cmux-tui/src/ui/sidebar.rs`:
- Around line 446-451: Update draw_workspaces to guard workspace_sidebar_area
dimensions before calling rail::prepare or rendering workspace rows. Skip
painting when the area is too narrow or short for the x + 1 and y + 1 buffer
accesses, including width 1, preventing out-of-bounds writes while preserving
normal rendering for valid areas.

In `@cmux-tui/spec/commands.md`:
- Line 216: Update the protocol compatibility matrices to gate the new agent
state error on protocol 12 everywhere: in cmux-tui/spec/commands.md lines
216-216, cmux-tui/spec/transports.md lines 7-7, and cmux-tui/spec/frontends.md
lines 30-30, add error to the protocol-12 requirement; in
cmux-tui/docs/protocol.md lines 143-143, list error among the protocol-v12
additions.
- Line 3132: Update the notify.subtitle field in the command schema
documentation to accept string|null, matching the NotifyRequest type and
preserving explicit null as a valid protocol value.
- Around line 3192-3201: Update the list-agent schema fields label, detail,
started_at_ms, tasks_completed, tasks_total, jobs_running, and agents_active to
be optional and nullable, preserving their existing types. Ensure the schema
accepts older producers that omit these additive v12 telemetry fields and
remains consistent with the example payload.

---

Outside diff comments:
In `@cmux-tui/crates/cmux-tui/src/ui/mod.rs`:
- Around line 100-140: Update draw_notification_banner so its non-surface-only
row moves up when app.prefix_armed is active, avoiding the prefix-help row
rendered by draw_prefix_help_bar in draw_status_bar. Preserve the current banner
position when no prefix sequence is armed, and add coverage for the
notification-plus-prefix-armed state.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 56298e26-da19-4f28-a6ac-c083a52c8a84

📥 Commits

Reviewing files that changed from the base of the PR and between a9e9d9a and 96f5b3f.

📒 Files selected for processing (35)
  • cmux-tui/bindings/conformance/fixtures.json
  • cmux-tui/bindings/generate.sh
  • cmux-tui/bindings/go/cmd/e2e/main.go
  • cmux-tui/bindings/java/src/com/cmux/E2e.java
  • cmux-tui/bindings/python/e2e.py
  • cmux-tui/bindings/typescript/README.md
  • cmux-tui/bindings/typescript/e2e/e2e.ts
  • cmux-tui/bindings/typescript/src/client.ts
  • cmux-tui/bindings/typescript/src/protocol/commands.ts
  • cmux-tui/bindings/typescript/src/protocol/common.ts
  • cmux-tui/bindings/typescript/src/protocol/events.ts
  • cmux-tui/bindings/typescript/test/client.test.ts
  • cmux-tui/bindings/typescript/test/protocol-types.ts
  • cmux-tui/crates/cmux-tui-core/src/event_bus.rs
  • cmux-tui/crates/cmux-tui-core/src/lib.rs
  • cmux-tui/crates/cmux-tui-core/src/mux.rs
  • cmux-tui/crates/cmux-tui-core/src/server.rs
  • cmux-tui/crates/cmux-tui/src/app.rs
  • cmux-tui/crates/cmux-tui/src/cli.rs
  • cmux-tui/crates/cmux-tui/src/session/mod.rs
  • cmux-tui/crates/cmux-tui/src/session/remote.rs
  • cmux-tui/crates/cmux-tui/src/ui/mod.rs
  • cmux-tui/crates/cmux-tui/src/ui/sidebar.rs
  • cmux-tui/crates/cmux-tui/tests/cli.rs
  • cmux-tui/docs/README.md
  • cmux-tui/docs/protocol.md
  • cmux-tui/scripts/smoke-tui.py
  • cmux-tui/scripts/test-agent-parity.py
  • cmux-tui/spec/README.md
  • cmux-tui/spec/bindings.md
  • cmux-tui/spec/cli.md
  • cmux-tui/spec/commands.md
  • cmux-tui/spec/events.md
  • cmux-tui/spec/frontends.md
  • cmux-tui/spec/transports.md

Comment thread cmux-tui/bindings/typescript/src/client.ts
Comment thread cmux-tui/crates/cmux-tui-core/src/mux.rs
Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/app.rs
Comment thread cmux-tui/crates/cmux-tui/src/session/remote.rs
Comment thread cmux-tui/crates/cmux-tui/src/ui/sidebar.rs Outdated
Comment thread cmux-tui/spec/commands.md Outdated
Comment thread cmux-tui/spec/commands.md Outdated
Comment thread cmux-tui/spec/commands.md Outdated
@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch from 96f5b3f to 357b7de Compare July 28, 2026 09:59
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch 2 times, most recently from dc14a30 to bd3b397 Compare July 28, 2026 12:27
@cursor

cursor Bot commented Jul 28, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch 3 times, most recently from f8a2178 to 25a558b Compare July 31, 2026 05:39
@cursor

cursor Bot commented Jul 31, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@usr-bin-roygbiv
usr-bin-roygbiv force-pushed the agent/roygbiv-cmux-tui-agent-parity branch from 25a558b to 5e187b8 Compare July 31, 2026 05:41
@cursor

cursor Bot commented Jul 31, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

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