feat(web): show the local bridge agent + status in the AI panel (0194) - #163
Merged
Conversation
When the "Local bridge" tier is selected, the AI chat panel now fetches the daemon's /health and shows which coding agent is running (e.g. "Running claude · v1.0.0") with a status dot — so it's clear the bridge is connected and to which agent. Where a control channel exists (the Electron preload `window.xnetAgentBridge`), a picker lets you switch the agent (Claude/Codex/Gemini/OpenCode); on the web the daemon is launched with a fixed --agent, so the picker is hidden. apps/web (ai-chat-connector.ts): pure, tested helpers KNOWN_BRIDGE_AGENTS + parseBridgeHealth. AiChatPanel: a bridge-health effect (fetch /health for the selected bridge tier) + a BridgeStatus row + Electron-only agent switch via window.xnetAgentBridge.start(agent). Tests: web view 92 (connector parseBridgeHealth/KNOWN_BRIDGE_AGENTS; panel renders "Running claude" from a mocked /health). typecheck, eslint, prettier clean. Deferred: live agent-switch for the web/CLI daemon (needs a control channel); ACP transport + in-panel approvals/tool-fidelity. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Contributor
🖼️ UI changes in this PRNo visual differences detected in the changed UI. |
Contributor
|
Preview removed for PR #163. |
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
Backfills the notable user-facing PRs that merged before the changelog automation existed (or were flagged `needs-changelog`): | Entry | PR | |---|---| | A richer, interactive changelog | #151 | | xNet adapts to your phone (mobile workbench) | #156 | | See your local agent in the AI panel | #163 | | Paid plugins | #157 | | Agent-native Connectors | #160 | | A new look — cosmic-web app icons | #153 | Each fragment carries its **original** PR number, so `resolve-prs` leaves it untouched and the gallery/link point at the right PR. The **#156 entry auto-pulls its real mobile-vs-desktop before/after sliders** from `visuals/pr/156/` — confirming the auto-gallery works on a backfilled entry. This PR also exercises the new flow itself: it **adds fragments**, so the required `changelog-section` check passes via the fragment-present path (no `skip-changelog` label). Verified locally: `validate:changelog` → 19 fragments valid; `astro build` clean; all 6 articles + the #156 before/after gallery render. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
## What Backfills the changelog so it reflects what's live on `main`. The per-PR fragment system (exploration 0197) was current through PR #163 (PR #178 backfilled #151/#153/#156/#157/#160/#163), but the recent **0198/0199 batch** and a couple of stragglers shipped without entries. This adds 7 fragments, with prose lifted from each PR's own `## Changelog` block where present. | PR | Entry | Tags | |---|---|---| | #143 | AI chat that knows your workspace | `ai` | | #167 | Linear-grade Tasks | `tasks` `app` | | #169 | Cleaner page editor typography | `editor` | | #170 | Bring your Slack data into xNet | `plugins` `platform` | | #171 | Smoother, more consistent motion | `app` | | #173 | Airtable-grade database grids | `app` | | #174 | A redesigned chat & channels experience | `app` | ## Deliberately excluded - **In-editor AI (#154 / #158)** — shipped the transform engine + diff/approval logic, but both PRs state the `/ai` UI wiring into the running app is **deferred**, so it isn't user-visible yet. An entry would overclaim. - **Slack (#170)** — entry scoped to the migration connector + compatibility layer (genuinely live); avoids claiming the webhook/slash-command hub endpoints work, since they're generic-over-an-injected-sink and not mounted in a running server yet. - Pure infra/ops/docs PRs (cloud M1/M2, CI, runbooks) — not user-facing. ## Verification - `validate-changelog.ts` → **26 fragments valid** (19 existing + 7 new) - `prettier --check` on all new files → clean - Newest-first ordering confirmed — the 7 entries slot in at the top ## Changelog <!-- This PR only adds changelog fragments for already-merged work; it ships no user-facing change of its own. --> 🤖 Generated with [Claude Code](https://claude.com/claude-code)
crs48
added a commit
that referenced
this pull request
Jun 18, 2026
…193/0194) (#201) The `changelog-section` required check was only added in #164, so the 0192/0193/0194 feature batch merged before it never got changelog entries. This backfills the 12 user-facing features that were missing, each dated to its merge day with its PR number and contributors: | PR | Entry | |----|-------| | #138 | A safer foundation for plugins | | #145 | One trust model across plugins and Labs | | #146 | Reliability you can see for managed hubs | | #148 | Drive your own coding agent from xNet | | #149 | AI that can act on your workspace | | #150 | Your Labs become AI tools | | #152 | Your agent can use your workspace | | #154 | AI edits, right inside the editor | | #155 | An agentic dev loop in your terminal | | #158 | Review AI edits before they apply | | #159 | Kick off agentic code tasks from xNet | | #162 | Plugins run on the Labs runtime | Skipped: PRs already covered by umbrella entries (#142 plugin ecosystem, #144 extensibility fabric, #147 automated changelog, #163 agent panel, #180 changelog gallery), internal-only changes (#139 schema authz — zero user-facing effect), and meta/test/docs PRs. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What & why
Exploration 0194, Phase 3 (surfacing). The bridge could drive an agent, but the panel never showed which agent was connected. This surfaces the bridge's agent + status in the AI chat panel.
Changes
apps/webai-chat-connector.ts— pure, tested helpers:KNOWN_BRIDGE_AGENTS(claude/codex/gemini/opencode) andparseBridgeHealth(parses the daemon's/health).AiChatPanel— when the Local bridge tier is selected, fetch its/healthand render a status row: a green/grey dot + e.g. "Running claude · v1.0.0". Where a control channel exists (the Electron preloadwindow.xnetAgentBridge), an agent picker switches the running agent; on the web (daemon launched with a fixed--agent) the picker is hidden.Tests / validation
parseBridgeHealth+KNOWN_BRIDGE_AGENTS; panel: renders "Running claude" from a mocked/health; added anafterEachso the shared fixture/localStorage is reset between cases).typecheck(web),eslint --max-warnings 0,prettier --checkclean.Deferred
Live agent-switch for the web/CLI daemon (needs a control channel); the larger ACP transport + in-panel approvals/tool-fidelity.
🤖 Generated with Claude Code