feat(ui): session board grid engine and board view - #110644
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 18, 2026, 12:32 PM ET / 16:32 UTC. Summary PR surface: Source +1963, Tests +1040, Other +69. Total +3072 across 12 files. Reproducibility: unclear. the supplied inline review gives a concrete source-level MCP-app loading path, but no inspectable final-head browser artifact demonstrates that the path now succeeds. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review findings
Review detailsBest possible solution: Preserve a single supported MCP-app embed boundary, add redacted final-head browser proof that exercises it, and land the temporary board contract only with explicit owner agreement on its host and protocol migration path. Do we have a high-confidence way to reproduce the issue? Unclear: the supplied inline review gives a concrete source-level MCP-app loading path, but no inspectable final-head browser artifact demonstrates that the path now succeeds. Is this the best way to solve the issue? No: the staged board implementation is plausible, but it must either use the existing MCP-app embed contract correctly or prove an equivalent supported path before it is the best maintainable solution. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: unclear because the file could not be read completely. Codex review notes: model internal, reasoning high; reviewed against 33f9c47e3c79. Label changesLabel justifications:
Evidence reviewedPR surface: Source +1963, Tests +1040, Other +69. Total +3072 across 12 files. View PR surface stats
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c8e4678d05
ℹ️ 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".
| <iframe | ||
| class="board-widget__frame" | ||
| sandbox="allow-scripts" |
There was a problem hiding this comment.
Allow MCP app widget hosts to retain same-origin
For widgets whose contentKind is mcp-app, this iframe will commonly be pointed at the existing MCP standalone URL (/__openclaw__/mcp-app#...). That host immediately fetches /__openclaw__/mcp-app/view with an Authorization header and then creates its own inner sandbox with allow-same-origin allow-forms (src/gateway/mcp-app-standalone.ts:310-320); placing the host in a parent iframe with only allow-scripts gives it an opaque origin, so that same-origin ticket fetch becomes cross-origin/preflighted and the MCP app never loads. Please select the sandbox based on widget.contentKind (or route MCP apps through the existing MCP app embed path) rather than using the strict HTML sandbox for all widgets.
Useful? React with 👍 / 👎.
* feat(ui): add session board grid view * fix(ui): use shared board controls * fix(ui): keep board cell registration type-safe * chore(ui): drop unused board cell class export
What Problem This Solves
First UI piece of the session-dashboard program (design:
docs/web/dashboard-architecture.md): the board rendering core. Sessions are getting a second "board" face where agents pin live widgets; this PR delivers the fluid grid engine and the<openclaw-board-view>element that later PRs (chat dock/face host, gateway domain wiring) plug into. No user-visible surface changes yet — nothing instantiates the element outside the mock fixture page.Why This Change Was Made
Board rendering is self-contained against a frozen contract (types local in
ui/src/lib/board/view-types.tsuntil the protocol package lands), so it can build and test independently: pure DOM-free 12-column auto-compacting layout engine (gravity-up, push-aside, first-fit), tab strip, widget cells with sandboxed iframes, grant placeholder/rejected/error states, pointer drag + resize, keyboard nudge with aria announcements.User Impact
None yet (dead code until the host lands; mock dev page at
/__fixtures/board/for development). Follow-up PRs wire it to the session view and gateway.Evidence
check-changed --stagedgreen pre-rebase (format, i18n, typechecks, lint); i18n verify green post-rebase (en.ts keys only; locale bundles left to refresh workflow).