Skip to content

feat: full mode embeds the local dashboard inline by default; clear error when not local (v0.5.0)#12

Merged
mabry1985 merged 1 commit into
mainfrom
feat/full-default-local-embed
Jun 16, 2026
Merged

feat: full mode embeds the local dashboard inline by default; clear error when not local (v0.5.0)#12
mabry1985 merged 1 commit into
mainfrom
feat/full-default-local-embed

Conversation

@mabry1985

Copy link
Copy Markdown
Contributor

Follow-up to the v0.4.0 panel work, per feedback (the minimal screenshot mode isn't wanted).

What changes

  • full is the default again — and it embeds the dashboard inline, the right way: at the dashboard's own local origin (http://<host>:<port>/), not through the sub-path proxy that could never serve its root-absolute Next.js assets. On a local setup (console + agent-browser on one box) you get the real dashboard — viewport + activity/console/network feeds — right in the panel. Verified e2e against the live binary: iframe → 127.0.0.1:4848, dashboard actually loaded (title + tabs), status "running", no error.
  • "Assume local, error if not." Full mode detects whether the dashboard is reachable from your browser — local = loopback host AND not fleet-proxied AND not https. When it's not local (a fleet member, a non-loopback host, or an https console where the http dashboard is mixed-content-blocked), it shows a clear, specific error pointing at panel_mode: minimal — never a blank frame. Local-but-stopped shows a Start prompt; Start/Stop lives in the bar.
  • minimal stays as the works-everywhere option (screenshot viewport) for remote/member agents.

No change to the browser tools. 19 tests (the full-mode test now asserts the inline embed + the local-detection + the error), ruff clean.

🤖 Generated with Claude Code

…ror when not local (v0.5.0)

Per feedback (the minimal screenshot mode isn't wanted): full mode is the default again and now
embeds agent-browser's dashboard INLINE — but correctly, at its own local origin
(http://<host>:<port>/), not through the impossible sub-path proxy. On a local setup (console +
agent-browser on one machine) you get the real dashboard, feeds and all, in the panel. Verified
e2e against the live binary (iframe → 127.0.0.1:4848, dashboard loaded — title + tabs, status
"running", no error).

"Assume local, error if not": full mode detects whether the dashboard is reachable from the
operator's browser — LOCAL = loopback host (localhost/127.0.0.1) AND not fleet-proxied (base=="")
AND not https. If not local (a member, a non-loopback host, or an https console where the http
dashboard is mixed-content-blocked), it shows a clear, specific error pointing at panel_mode:
minimal instead of a blank frame. Local-but-stopped shows a Start prompt; the Start/Stop control
is in the bar.

minimal mode stays as the remote/everywhere option. 19 tests (full-mode test now asserts the
embed + the error path), ruff clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@protoquinn

protoquinn Bot commented Jun 16, 2026

Copy link
Copy Markdown

👀 Quinn is reviewing — verdict (PASS / WARN / FAIL) + findings to follow.

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

QA Audit — PR #12 | feat: full mode embeds the local dashboard inline by default; clear error when not local (v0.5.0)

VERDICT: WARN


CI Status

  • test: queued
    ⏳ Non-terminal — re-review will land once checks complete.

Diff Review

  • browser_panel.py: Full mode switches from launcher card → inline iframe at dashboard's own origin. Local detection (loopback + no fleet proxy + not https) gates the embed; non-local and mixed-content get clear actionable errors pointing at panel_mode: minimal. Start/Stop lives in the bar, visible only when embeddable.
  • CHANGELOG.md, README.md: Docs updated to reflect new default and error behavior.
  • protoagent.plugin.yaml: Version bump to v0.5.0.

Observations

  • LOW: Clawpatch structural review unavailable — repo not in project registry. Diff-based review only.
  • LOW: Diff truncated at 200/302 lines — Python route-handler changes beyond the _FULL_PAGE template update were not reviewed.
  • INFO: setTimeout(decide, 1500) after dashboard start gives 1.5s for boot before re-check. Adequate for most systems but may flicker on very slow hardware. Not a correctness issue — the poll catches it on the next interval.
  • INFO: The three-branch decide() logic (!LOCAL, MIXED, local) is cleanly separated with specific error messages. No fall-through ambiguity.
  • INFO: setInterval polling gates on LOCAL && !MIXED && $("f").style.display === "none" — stops polling once the iframe is showing, avoiding unnecessary API traffic. Dashboard-crash detection is left to the iframe's own error display (reasonable).

— Quinn, QA Engineer

@protoquinn

protoquinn Bot commented Jun 16, 2026

Copy link
Copy Markdown

Submitted COMMENT review on #12.

@mabry1985 mabry1985 merged commit f7fe151 into main Jun 16, 2026
1 check passed
@mabry1985 mabry1985 deleted the feat/full-default-local-embed branch June 16, 2026 03:32
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