Skip to content

feat(workspaces): add full-bleed single-widget tabs#109627

Merged
steipete merged 4 commits into
mainfrom
feat/workspaces-full-bleed-tabs
Jul 17, 2026
Merged

feat(workspaces): add full-bleed single-widget tabs#109627
steipete merged 4 commits into
mainfrom
feat/workspaces-full-bleed-tabs

Conversation

@steipete

@steipete steipete commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Closes #101148

Extracted from #101908 with credit to @100yenadmin. This PR intentionally contains only the approved full-bleed tab slice: no gallery, install, persistence, action, history, Teams, or SSRF/SDK work.

What Problem This Solves

Workspace tabs always render a widget grid and card chrome, even when a single widget is intended to behave like a full app.

Why This Change Was Made

Adds a validated grid / full tab layout across the Workspaces schema, gateway, agent tool, CLI, and Control UI. Full layout accepts at most one widget and reuses the existing binding, builtin context, custom-widget approval, manifest, sandbox, and error-boundary paths.

User Impact

Operators and agents can make a zero- or one-widget tab fill the available workspace content area with openclaw workspaces tabs full <slug>, then return it to the grid with openclaw workspaces tabs grid <slug>.

Evidence

Before: grid card chrome

workspace-full-bleed-before

After: full-bleed single widget

workspace-full-bleed-after

Co-authored-by: Eva [email protected]

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation app: web-ui App: web-ui plugin: workspaces Agent-composable Workspaces plugin size: M maintainer Maintainer-authored PR labels Jul 17, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. labels Jul 17, 2026
@clawsweeper

clawsweeper Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Codex review: found issues before merge. Reviewed July 17, 2026, 12:36 AM ET / 04:36 UTC.

Summary
The PR adds an optional persisted grid/full layout for workspace tabs, gateway, agent-tool, and CLI mutation paths, full-bleed Control UI rendering, documentation, and focused schema/UI coverage.

PR surface: Source +105, Tests +166, Docs +6. Total +277 across 15 files.

Reproducibility: not applicable. this adds a new Workspaces layout capability rather than repairing an established current-main behavior, and the intended before/after result is directly demonstrated.

Review metrics: 2 noteworthy metrics.

  • Persisted schema surface: 1 optional field added. The field is stored in workspace documents under the existing schema version, so upgrade semantics matter before merge.
  • Agent tool parameters: 1 enum parameter added. Its JSON-schema encoding reaches model providers and must use the provider-compatible flat enum form.

Stored data model
Persistent data-model change detected: database schema: ui/src/e2e/workspace-full-bleed.e2e.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #101148
Summary: This PR is the focused implementation candidate for the full-bleed portion of the canonical issue; the broader open PR only partially overlaps because it also contains distinct gallery and security work.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster ✨ media proof bonus
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Replace the union-literal tool parameter with a flat string enum.
  • [P2] Add or identify persisted old-document and round-trip upgrade proof for schema version 1.

Risk before merge

  • [P1] The optional persisted layout field is written under workspace document schema version 1. Existing documents load without it, but downgrade behavior and expectations for other v1 readers are not explicitly established.

Maintainer options:

  1. Fix schema encoding and prove v1 persistence (recommended)
    Replace the anyOf-style agent-tool parameter and add old-document plus store or gateway round-trip coverage before merge.
  2. Accept the additive v1 contract
    A maintainer may explicitly accept forward-only persisted compatibility after the provider-schema defect is repaired.
  3. Pause for schema versioning
    Hold the PR if Workspaces requires downgrade-safe or externally stable schema-version semantics.

Next step before merge

  • [P2] Repair the provider-facing enum, then have the Workspaces owner confirm the persisted schema-version contract before merge; the protected maintainer label keeps this human-routed.

Maintainer decision needed

  • Question: Should WorkspaceTab.layout remain an additive field in schema version 1, with older documents defaulting to grid, or does the Workspaces document contract require an explicit version and migration change?
  • Rationale: The patch changes persisted plugin state without changing schemaVersion; source inspection establishes current behavior, but intended downgrade and external-reader compatibility requires maintainer ownership.
  • Likely owner: steipete — The focused branch and recent schema/type hardening make this person the best available owner for the version-contract choice.
  • Options:
    • Keep additive v1 field (recommended): Treat missing layout as grid, document the forward-only expectation, and add old-document plus persisted round-trip tests.
    • Version and migrate: Bump the workspace document schema and add a bounded migration if v1 readers must reject or transform the new field safely.

Security
Cleared: The diff adds no dependency, workflow, secret-access, network-fetching, or new code-execution surface and reuses the existing widget manifest, approval, sandbox, and error-boundary paths.

Review findings

  • [P1] Use the provider-compatible flat enum for layout — extensions/workspaces/src/tools.ts:550-555
Review details

Best possible solution:

Use the repository’s flat string-enum tool schema, retain missing layout as grid, and add explicit persisted v1 round-trip and upgrade coverage before landing this narrow slice independently of gallery work.

Do we have a high-confidence way to reproduce the issue?

Not applicable: this adds a new Workspaces layout capability rather than repairing an established current-main behavior, and the intended before/after result is directly demonstrated.

Is this the best way to solve the issue?

No, not quite as submitted: the plugin-owned persisted layout and shared renderer are the right boundaries, but the agent-tool enum needs the provider-compatible schema form and the v1 persistence contract needs explicit proof or approval.

Full review comments:

  • [P1] Use the provider-compatible flat enum for layout — extensions/workspaces/src/tools.ts:550-555
    Type.Union([Type.Literal("grid"), Type.Literal("full")]) produces an anyOf-style tool schema, while repository policy notes that some providers reject this shape. That can make workspace_tab_update unavailable on those providers; encode layout with the shared flat string-enum helper or an equivalent string schema with enum.
    Confidence: 0.96

Overall correctness: patch is incorrect
Overall confidence: 0.9

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against e3618454f245.

Label changes

Label changes:

  • add proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Before/after screenshots directly show the changed UI, supplemented by a direct Crabbox visual run and hosted Chromium E2E on the PR head.
  • add rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • add status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): Before/after screenshots directly show the changed UI, supplemented by a direct Crabbox visual run and hosted Chromium E2E on the PR head.
  • remove rating: 🐚 platinum hermit: Current PR rating is rating: 🦐 gold shrimp, so this older rating label is no longer current.
  • remove status: 👀 ready for maintainer look: Current PR status label is status: ⏳ waiting on author.

Label justifications:

  • P2: This is a bounded Workspaces feature with strong visual proof and one repairable compatibility blocker.
  • merge-risk: 🚨 compatibility: The PR changes both a provider-facing agent-tool schema and the persisted workspace document shape.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (screenshot): Before/after screenshots directly show the changed UI, supplemented by a direct Crabbox visual run and hosted Chromium E2E on the PR head.
  • proof: sufficient: Contributor real behavior proof is sufficient. Before/after screenshots directly show the changed UI, supplemented by a direct Crabbox visual run and hosted Chromium E2E on the PR head.
  • proof: 📸 screenshot: Contributor real behavior proof includes screenshot evidence. Before/after screenshots directly show the changed UI, supplemented by a direct Crabbox visual run and hosted Chromium E2E on the PR head.
Evidence reviewed

PR surface:

Source +105, Tests +166, Docs +6. Total +277 across 15 files.

View PR surface stats
Area Files Added Removed Net
Source 10 132 27 +105
Tests 4 167 1 +166
Docs 1 6 0 +6
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 15 305 28 +277

What I checked:

  • Provider-facing schema defect: The new layout parameter uses a union of string literals, producing the anyOf-style tool schema that repository policy identifies as unsupported by some model providers. (extensions/workspaces/src/tools.ts:550, ee6c9a10f38d)
  • Repository tool-schema contract: The root policy directs provider-facing tool schemas to use flat string enums rather than Type.Union literal schemas because some providers reject anyOf. (AGENTS.md:115, e3618454f245)
  • Persisted document surface: WorkspaceTab gains an optional layout field while workspace documents continue using schema version 1, leaving the intended downgrade and external-reader contract to be confirmed. (extensions/workspaces/src/schema.ts:39, ee6c9a10f38d)
  • Backward-loading coverage: The schema test continues validating a document without layout and separately covers valid full layout and the one-widget limit, supporting an additive upgrade path for existing documents. (extensions/workspaces/src/schema.test.ts:27, ee6c9a10f38d)
  • Real behavior proof: The PR supplies direct before/after screenshots, a Crabbox visual run, and hosted Chromium E2E evidence showing the full-bleed result. (ui/src/e2e/workspace-full-bleed.e2e.test.ts:1, ee6c9a10f38d)
  • Focused canonical scope: The PR explicitly implements the full-bleed portion of the canonical issue while excluding the gallery, installation, SSRF, SDK, persistence-history, and action surfaces still present in the broader open PR. (ee6c9a10f38d)

Likely related people:

  • 100yenadmin: Authored the canonical feature issue and the broader Workspaces implementation from which this focused layout slice was extracted. (role: feature designer and adjacent implementation owner; confidence: high; commits: a6749eb96293; files: extensions/workspaces/src/schema.ts, ui/src/pages/plugin/workspace-view.ts)
  • steipete: Carries the focused branch and its rendering and type-surface hardening, making this person the clearest available owner for the persisted schema decision. (role: recent integrator and schema reviewer; confidence: medium; commits: 9ae96e6e661a, 9df883091c41, ee6c9a10f38d; files: extensions/workspaces/src/tools.ts, extensions/workspaces/src/schema.ts, ui/src/pages/plugin/workspace-view.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (1 earlier review cycle)
  • reviewed 2026-07-17T04:12:18.137Z sha 9df8830 :: needs maintainer review before merge. :: none

@clawsweeper

clawsweeper Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: feat(workspaces): add full-bleed single-widget tabs This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@clawsweeper clawsweeper Bot added proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 17, 2026
@steipete
steipete merged commit 7be5d78 into main Jul 17, 2026
136 of 144 checks passed
@steipete
steipete deleted the feat/workspaces-full-bleed-tabs branch July 17, 2026 04:56
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 17, 2026
* feat(workspaces): add full-bleed app tabs

* fix(workspaces): harden full-bleed rendering

* fix(workspaces): eliminate full-bleed iframe gap

* fix(workspaces): keep tab layout type internal

---------

Co-authored-by: Eva <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui docs Improvements or additions to documentation maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. P2 Normal backlog priority with limited blast radius. plugin: workspaces Agent-composable Workspaces plugin proof: 📸 screenshot Contributor real behavior proof includes screenshot evidence. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: M status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dashboard: full-bleed tab layout + "tab app" bundle

1 participant