Skip to content

feat: add support for window tabs - #287

Merged
pedronauck merged 2 commits into
mainfrom
window-tabs
Aug 1, 2026
Merged

pedronauck merged 2 commits into
mainfrom
window-tabs

Conversation

@pedronauck

@pedronauck pedronauck commented Aug 1, 2026 •

Copy link
Copy Markdown
Member

Summary

  • hard-cut persisted window layouts to v3 and add first-class tab frames with ordered members, active state, per-tab navigation stacks, pinning, scoped close/reopen, and bounded history
  • expose the same semantic topology through Web, CLI, HTTP, UDS, native tools, streams, hooks, resources, layout profiles, and the bundled Compozy skill
  • ship multi-instance app identity, dock/palette tab discovery, drag grouping/reorder/tear-out, frame-aware move/swap/zoom, and direct-manipulation Window Manager settings
  • remove obsolete v2 layout compatibility paths and singleton-window assumptions across runtime, generated contracts, tests, docs, and QA artifacts

Verification

  • make gate: full escalation passed; current evidence is recorded by make gate-status
  • full runtime E2E: passed
  • full Web E2E: passed
  • focused CLI, Settings, and API regression suites: passed under -race
  • affected Go lint: zero issues
  • real-user QA: 22/22 scenarios settled in docs/qa/reports/2026-08-01-window-tabs.md
  • visual evidence: docs/qa/evidence/2026-08-01-window-tabs/
  • teardown: main and focused retest labs both recorded "clean": true with zero survivors

QA fix found during dogfooding

compozy config set window_manager.* now uses the canonical Settings section endpoint. A live Window Manager apply projects only that section over the active snapshot, so unrelated restart-required drift stays pending and remains truthful in compozy status.

Compozy Impact Audit

  • Native tools: Added/updated Window Manager tab commands, descriptors, schemas, digests, reason codes, capability registration, and parity tests for group, reorder, activate, pin/unpin, navigate, close/reopen, layout v3, and client-scoped presentation.
  • Extensibility and hooks: Added committed tab lifecycle hook events and v3 window_layout resource projection across extensions, bundles, registries, SDK contracts, and catalog introspection. Preview, rejected, pointer-only, and client-local focus operations remain hook-silent. Config lifecycle adds live Window Manager keys and section-scoped application.
  • Workspace data isolation: Window topology, layouts, navigation stacks, closed entries, resources, events, SSE/WebSocket frames, HTTP/UDS reads, CLI commands, and native tools carry the owning workspace_id; client presentation remains separately fenced. Cross-workspace reads/mutations and foreign client IDs are covered by runtime/API/E2E parity checks.
  • Official Compozy skill: Updated skills/compozy/references/window-management.md for layout v3, tab operations, navigation, pins, reopen, resources, hooks, and dynamic tool discovery; no fixed tool-count assumption remains.

Web / Docs Impact

  • Web desktop shell, dock, command palette, routing coordinator, Settings layouts, Storybook scenes, and browser E2E were updated.
  • CLI/config references, generated OpenAPI/TypeScript/Go contracts, configuration docs, migration guidance, and the bundled skill were co-shipped.

@pedronauck pedronauck self-assigned this Aug 1, 2026
@greptile-apps

greptile-apps Bot commented Aug 1, 2026 •

Copy link
Copy Markdown

Too many files changed for review. (457 files found, 100 file limit)

Bypass the limit by tagging @greptile-apps to review.

@vercel

vercel Bot commented Aug 1, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
compozy-site Ready Ready Preview Aug 1, 2026 4:15pm

Request Review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 362 files, which is 62 over the limit of 300.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 763f7646-2569-41ae-b83e-ab5859c2f414

📥 Commits

Reviewing files that changed from the base of the PR and between 144d325 and d336a1a.

⛔ Files ignored due to path filters (95)
  • .agents/skills/cy-loop-tasks/SKILL.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/cy-loop-tasks/references/checklist.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/cy-loop-tasks/references/goal-header-template.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/cy-loop-tasks/references/stacked-prs.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/cy-loop-tasks/references/state-schema.md is excluded by !**/*.md, !.agents/**
  • .agents/skills/cy-loop-tasks/scripts/_state_io.py is excluded by !.agents/**
  • .agents/skills/cy-loop-tasks/scripts/commit-checkpoint.py is excluded by !.agents/**
  • .agents/skills/cy-loop-tasks/scripts/init-state.py is excluded by !.agents/**
  • .agents/skills/cy-loop-tasks/scripts/test_scripts.py is excluded by !.agents/**
  • .agents/skills/cy-loop-tasks/scripts/update-state.py is excluded by !.agents/**
  • CLAUDE.md is excluded by !**/*.md
  • DESIGN.md is excluded by !**/*.md
  • docs/design/opendesign/design-system/os-shell.html is excluded by !docs/design/**/*
  • docs/design/opendesign/os/pagehead-redesign.html is excluded by !docs/design/**/*
  • docs/qa/bugs/BUG-20260801-window-manager-live-config-drift.md is excluded by !**/*.md
  • docs/qa/charters/CH-window-tabs-agent-parity.md is excluded by !**/*.md
  • docs/qa/charters/CH-window-tabs-home-canary.md is excluded by !**/*.md
  • docs/qa/charters/CH-window-tabs-keyboard-flow.md is excluded by !**/*.md
  • docs/qa/charters/CH-window-tabs-supervisor-recovery.md is excluded by !**/*.md
  • docs/qa/journeys/J-agent-manage-window-tabs.md is excluded by !**/*.md
  • docs/qa/journeys/J-operate-desktop-shell.md is excluded by !**/*.md
  • docs/qa/journeys/J-organize-tabbed-work.md is excluded by !**/*.md
  • docs/qa/reports/2026-08-01-window-tabs.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-desktop-shell-lifecycle.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-dock-default-window-size.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-web-window-routing-lifecycle.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-drop-swap.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-hooks-resources.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-layout-gestures.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-layout-recovery.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-multi-client.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-manager-public-parity.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-agent-parity.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-close-reopen.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-deck-lifecycle.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-multi-instance.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-navigation-stack.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-palette-search.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-pinning.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-strip-relocation.md is excluded by !**/*.md
  • docs/qa/scenarios/ET-window-tab-v3-discard.md is excluded by !**/*.md
  • docs/qa/scenarios/MS-configure-window-manager.md is excluded by !**/*.md
  • docs/qa/scenarios/MS-layout-profile-cli-roundtrip.md is excluded by !**/*.md
  • docs/qa/scenarios/MS-web-session-simple-advanced-launch.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-desktop-pager-overview.md is excluded by !**/*.md
  • docs/qa/scenarios/RT-home-usage-window-persistence.md is excluded by !**/*.md
  • internal/tools/builtin/testdata/native-tool-catalog.json is excluded by !**/*.json
  • openapi/compozy.json is excluded by !**/*.json
  • packages/site/content/docs/cli/layout/frame-resize.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/layout/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/layout/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/window/activate.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/close.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/group.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/index.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/meta.json is excluded by !**/*.json
  • packages/site/content/docs/cli/window/navigate.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/open.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/pin.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/reopen.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/resize.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/cli/window/unpin.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/configuration/config-toml.mdx is excluded by !**/*.mdx
  • packages/site/content/docs/configuration/lifecycle-matrix.mdx is excluded by !**/*.mdx
  • packages/ui/src/components/custom/stories/topbar.stories.tsx is excluded by !**/*.stories.tsx
  • packages/ui/src/components/stories/context-menu.stories.tsx is excluded by !**/*.stories.tsx
  • sdk/typescript/src/generated/contracts.ts is excluded by !**/generated/**, !**/generated/**
  • skills/compozy/references/native-tools.md is excluded by !**/*.md
  • skills/compozy/references/window-management.md is excluded by !**/*.md
  • web/e2e/__tests__/agents.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/extensions.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/jobs-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/knowledge.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/marketplace.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/network.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/os-shell.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/sandbox.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/session-clarify.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/session-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/session-onboarding.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/session-provider-override.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/settings-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/settings.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/storybook-bootstrap.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/tasks-coordinator-handoff.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/tool-approval-grants.spec.ts is excluded by !web/e2e/**
  • web/e2e/__tests__/triggers-hardening.spec.ts is excluded by !web/e2e/**
  • web/e2e/fixtures/__tests__/runtime.test.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/e2e/fixtures/os-navigation.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/e2e/fixtures/runtime-helpers.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/e2e/fixtures/selectors.ts is excluded by !**/fixtures/**, !web/e2e/**
  • web/src/generated/compozy-openapi.d.ts is excluded by !**/generated/**, !**/generated/**, !**/*.d.ts
  • web/src/systems/os/components/stories/os-window-deck.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/os/routes/new-tab.stories.tsx is excluded by !**/*.stories.tsx
  • web/src/systems/session/components/stories/session-create-dialog.stories.tsx is excluded by !**/*.stories.tsx
📒 Files selected for processing (362)
  • internal/acp/handlers_test.go
  • internal/acp/permission_pending.go
  • internal/api/contract/contract_test.go
  • internal/api/contract/settings_window_manager.go
  • internal/api/contract/windowmanager_command_payloads.go
  • internal/api/contract/windowmanager_commands.go
  • internal/api/contract/windowmanager_conversions.go
  • internal/api/contract/windowmanager_layout.go
  • internal/api/contract/windowmanager_types.go
  • internal/api/core/handler_edge_cases_test.go
  • internal/api/core/settings_test.go
  • internal/api/core/settings_window_manager_payload.go
  • internal/api/core/status.go
  • internal/api/core/window_manager_errors.go
  • internal/api/core/window_manager_handlers.go
  • internal/api/core/window_manager_layout.go
  • internal/api/core/window_manager_test.go
  • internal/api/core/window_manager_ws_test.go
  • internal/api/spec/schema_enum_registry.go
  • internal/api/spec/settings_test.go
  • internal/api/spec/windowmanager_command_schema.go
  • internal/api/spec/windowmanager_schemas.go
  • internal/api/spec/windowmanager_test.go
  • internal/api/udsapi/handlers_test.go
  • internal/api/udsapi/transport_parity_integration_test.go
  • internal/cli/bridge_control_integration_test.go
  • internal/cli/cli_historical_task_run_terminal_integration_test.go
  • internal/cli/client.go
  • internal/cli/client_daemon_settings_types.go
  • internal/cli/client_settings_vault.go
  • internal/cli/config_daemon_mutation.go
  • internal/cli/config_daemon_window_manager.go
  • internal/cli/config_path_classification.go
  • internal/cli/config_test.go
  • internal/cli/config_window_manager_mutation_specs.go
  • internal/cli/docpost/docpost_enrichment.go
  • internal/cli/docpost/docpost_test.go
  • internal/cli/extension_exec_integration_test.go
  • internal/cli/format.go
  • internal/cli/helpers_test.go
  • internal/cli/window_manager_common.go
  • internal/cli/window_manager_layout.go
  • internal/cli/window_manager_layout_mutations.go
  • internal/cli/window_manager_output.go
  • internal/cli/window_manager_test.go
  • internal/cli/window_manager_window.go
  • internal/cli/window_manager_window_move.go
  • internal/cli/window_manager_window_navigate.go
  • internal/cli/window_manager_window_resize.go
  • internal/cli/window_manager_window_tabs.go
  • internal/config/lifecycle/lifecycle.go
  • internal/config/lifecycle/lifecycle_test.go
  • internal/config/merge_window_manager.go
  • internal/config/window_manager.go
  • internal/config/window_manager_test.go
  • internal/daemon/boot_tool_registry.go
  • internal/daemon/daemon_acpmock_helpers_integration_test.go
  • internal/daemon/daemon_extension_agent_native_e2e_integration_test.go
  • internal/daemon/daemon_extension_authoring_e2e_integration_test.go
  • internal/daemon/daemon_extension_commands_e2e_integration_test.go
  • internal/daemon/daemon_extension_distribution_e2e_integration_test.go
  • internal/daemon/daemon_integration_test.go
  • internal/daemon/daemon_memory_e2e_integration_test.go
  • internal/daemon/daemon_mock_agents_integration_test.go
  • internal/daemon/daemon_review_and_fix_e2e_integration_test.go
  • internal/daemon/daemon_software_delivery_e2e_integration_test.go
  • internal/daemon/daemon_test.go
  • internal/daemon/hooks_bridge.go
  • internal/daemon/hooks_bridge_extended_dispatch.go
  • internal/daemon/host_api_session_adapter.go
  • internal/daemon/loop_action_liveness_integration_helpers_test.go
  • internal/daemon/native_extension_tool_provider.go
  • internal/daemon/native_extension_tool_provider_test.go
  • internal/daemon/native_extension_tools_integration_test.go
  • internal/daemon/native_tool_window_manager_bindings.go
  • internal/daemon/native_tool_window_manager_commands.go
  • internal/daemon/native_tool_window_manager_execute.go
  • internal/daemon/native_tool_window_manager_input.go
  • internal/daemon/native_tool_window_manager_layout.go
  • internal/daemon/native_tool_window_manager_result.go
  • internal/daemon/native_tool_window_manager_tabs.go
  • internal/daemon/native_tool_window_manager_window.go
  • internal/daemon/native_tools_test.go
  • internal/daemon/notifier_test.go
  • internal/daemon/prompt_sections.go
  • internal/daemon/settings.go
  • internal/daemon/settings_mcp_auth.go
  • internal/daemon/settings_mcp_runtime.go
  • internal/daemon/settings_test.go
  • internal/daemon/task_runtime_test.go
  • internal/daemon/task_session_bridge_network.go
  • internal/daemon/tool_approval_grants_integration_test.go
  • internal/daemon/tool_policy_resolver.go
  • internal/daemon/window_manager_boot.go
  • internal/daemon/window_manager_hooks.go
  • internal/daemon/window_manager_repository.go
  • internal/daemon/window_manager_repository_test.go
  • internal/daemon/window_manager_runtime_test.go
  • internal/daemon/workspace_access_integration_test.go
  • internal/demoseed/seed_integration_test.go
  • internal/extension/contract/sdk_window_manager_hooks.go
  • internal/extension/dev_integration_test.go
  • internal/extension/manager_dev_activation.go
  • internal/hooks/dispatch_window_manager.go
  • internal/hooks/events_test.go
  • internal/hooks/events_window_manager.go
  • internal/hooks/introspection_test.go
  • internal/hooks/introspection_window_manager.go
  • internal/hooks/payloads_window_manager.go
  • internal/hooks/window_manager_dispatch_test.go
  • internal/mcp/hosted_proxy.go
  • internal/mcp/hosted_proxy_test.go
  • internal/observe/observer_session_events.go
  • internal/observe/observer_test.go
  • internal/session/badge.go
  • internal/session/health_test.go
  • internal/session/interfaces.go
  • internal/session/manager_helpers.go
  • internal/session/manager_network_peer_binding.go
  • internal/session/manager_prompt_batch.go
  • internal/session/manager_prompt_event_storage.go
  • internal/session/manager_start_test.go
  • internal/session/manager_test.go
  • internal/session/session.go
  • internal/session/session_catalog_stream.go
  • internal/session/session_info.go
  • internal/session/session_stream_broadcast_test.go
  • internal/settings/config_apply_service.go
  • internal/settings/config_apply_service_test.go
  • internal/settings/config_runtime_status.go
  • internal/settings/service_contract.go
  • internal/settings/service_test.go
  • internal/settings/window_manager_active_config.go
  • internal/settings/window_manager_section.go
  • internal/task/completion_settlement_publication.go
  • internal/task/force_ops.go
  • internal/task/interfaces.go
  • internal/task/lease_manager.go
  • internal/task/lease_manager_claim.go
  • internal/task/lease_manager_lookup.go
  • internal/task/lease_network_binding.go
  • internal/task/lease_recovery_manager.go
  • internal/task/lease_test.go
  • internal/testutil/e2e/runtime_harness_integration_test.go
  • internal/toolmeta/native_entries.go
  • internal/toolmeta/registry_test.go
  • internal/tools/builtin/builtin_test.go
  • internal/tools/builtin/window_manager.go
  • internal/tools/builtin/window_manager_schemas.go
  • internal/tools/builtin/window_manager_schemas_output.go
  • internal/tools/builtin/window_manager_tab_schemas.go
  • internal/tools/builtin_ids.go
  • internal/tools/builtin_ids_window_manager.go
  • internal/windowmanager/active_coalescer.go
  • internal/windowmanager/changes.go
  • internal/windowmanager/client_projection.go
  • internal/windowmanager/clients.go
  • internal/windowmanager/clone.go
  • internal/windowmanager/closed_entries.go
  • internal/windowmanager/commands.go
  • internal/windowmanager/config.go
  • internal/windowmanager/config_test.go
  • internal/windowmanager/errors.go
  • internal/windowmanager/floating_stack.go
  • internal/windowmanager/group_detach.go
  • internal/windowmanager/history.go
  • internal/windowmanager/layout_commands_test.go
  • internal/windowmanager/lifecycle_test.go
  • internal/windowmanager/normalize.go
  • internal/windowmanager/options.go
  • internal/windowmanager/preview_ids.go
  • internal/windowmanager/reducer.go
  • internal/windowmanager/reducer_history_replace.go
  • internal/windowmanager/reducer_layout_frame_resize.go
  • internal/windowmanager/reducer_stack_active.go
  • internal/windowmanager/reducer_stack_group.go
  • internal/windowmanager/reducer_stack_reorder.go
  • internal/windowmanager/reducer_window_close.go
  • internal/windowmanager/reducer_window_move.go
  • internal/windowmanager/reducer_window_navigate.go
  • internal/windowmanager/reducer_window_open.go
  • internal/windowmanager/reducer_window_pin.go
  • internal/windowmanager/reducer_window_reopen.go
  • internal/windowmanager/reducer_window_resize.go
  • internal/windowmanager/reducer_window_swap.go
  • internal/windowmanager/reducer_window_toggle_floating.go
  • internal/windowmanager/reducer_zoom.go
  • internal/windowmanager/service.go
  • internal/windowmanager/service_contract_test.go
  • internal/windowmanager/service_execute.go
  • internal/windowmanager/service_helpers.go
  • internal/windowmanager/service_layout.go
  • internal/windowmanager/service_subscription.go
  • internal/windowmanager/service_test.go
  • internal/windowmanager/shortcuts.go
  • internal/windowmanager/stack_mutation.go
  • internal/windowmanager/topology_test.go
  • internal/windowmanager/tree_mutation.go
  • internal/windowmanager/tree_query.go
  • internal/windowmanager/types.go
  • internal/windowmanager/validate.go
  • magefiles/deps_lint.go
  • magefiles/deps_lint_test.go
  • magefiles/gotest_lane_test.go
  • magefiles/magefile_test.go
  • packages/site/components/marketplace/marketplace-bridge-grid.tsx
  • packages/ui/src/components/__tests__/context-menu.test.tsx
  • packages/ui/src/components/context-menu.tsx
  • packages/ui/src/components/custom/__tests__/topbar.test.tsx
  • packages/ui/src/components/custom/hooks/use-topbar-slot.ts
  • packages/ui/src/components/custom/route-nav.tsx
  • packages/ui/src/components/custom/topbar.tsx
  • packages/ui/src/components/reui/hooks/use-stepper.ts
  • packages/ui/src/components/tooltip.tsx
  • packages/ui/src/exports/animation.ts
  • packages/ui/src/exports/conversation.ts
  • packages/ui/src/exports/editors.ts
  • packages/ui/src/exports/foundation.ts
  • packages/ui/src/exports/listing.ts
  • packages/ui/src/exports/menus.ts
  • packages/ui/src/exports/shell.ts
  • packages/ui/src/exports/viz.ts
  • packages/ui/src/index.ts
  • packages/ui/src/tokens.css
  • scripts/gate.sh
  • scripts/worktree.sh
  • sdk/go/contracts/hook_contracts_gen.go
  • sdk/go/contracts/hook_events_gen.go
  • sdk/go/contracts/types_026_gen.go
  • web/src/components/assistant-ui/__tests__/session-thread.test.tsx
  • web/src/components/assistant-ui/hooks/use-thread-scroll-controller.ts
  • web/src/routeTree.gen.ts
  • web/src/routes/_app/new-tab.tsx
  • web/src/storybook/route-story-registry.ts
  • web/src/systems/extensions/hooks/use-extension-logs.ts
  • web/src/systems/marketplace/components/__tests__/marketplace-components.test.tsx
  • web/src/systems/marketplace/components/marketplace-kind-page.tsx
  • web/src/systems/os/apps/automation/use-automation-jobs-page.ts
  • web/src/systems/os/apps/new-tab/new-tab-window.tsx
  • web/src/systems/os/apps/session/__tests__/session-window.test.tsx
  • web/src/systems/os/apps/tasks/__tests__/tasks-catalog-location.test.tsx
  • web/src/systems/os/apps/tasks/tasks-catalog-location.tsx
  • web/src/systems/os/components/__tests__/os-dock.test.tsx
  • web/src/systems/os/components/__tests__/os-window-deck.test.tsx
  • web/src/systems/os/components/__tests__/os-window-frame.test.tsx
  • web/src/systems/os/components/__tests__/os-window.test.tsx
  • web/src/systems/os/components/desktop-dock.tsx
  • web/src/systems/os/components/desktop-pager.tsx
  • web/src/systems/os/components/desktop-shell.tsx
  • web/src/systems/os/components/os-command-palette-results.tsx
  • web/src/systems/os/components/os-command-palette-shell-actions.tsx
  • web/src/systems/os/components/os-command-palette-window-actions.tsx
  • web/src/systems/os/components/os-command-palette.tsx
  • web/src/systems/os/components/os-dock-app-menu.tsx
  • web/src/systems/os/components/os-dock.tsx
  • web/src/systems/os/components/os-snap-overlay.tsx
  • web/src/systems/os/components/os-snap-seam.tsx
  • web/src/systems/os/components/os-win-layer.tsx
  • web/src/systems/os/components/os-window-deck.tsx
  • web/src/systems/os/components/os-window-frame.tsx
  • web/src/systems/os/components/os-window-tab-state.ts
  • web/src/systems/os/components/os-window-tab.tsx
  • web/src/systems/os/components/os-window.tsx
  • web/src/systems/os/components/stories/_shell-fixture.tsx
  • web/src/systems/os/components/stories/os-window-deck-scene.tsx
  • web/src/systems/os/hooks/__tests__/os-interaction-hooks.test.tsx
  • web/src/systems/os/hooks/__tests__/use-os-command-palette.test.tsx
  • web/src/systems/os/hooks/__tests__/use-os-window-deck.test.tsx
  • web/src/systems/os/hooks/__tests__/use-window-manager-client.test.tsx
  • web/src/systems/os/hooks/__tests__/use-window-manager-stream.test.tsx
  • web/src/systems/os/hooks/__tests__/window-manager-runtime.test.ts
  • web/src/systems/os/hooks/use-desktop-dock.ts
  • web/src/systems/os/hooks/use-desktop-overlays.ts
  • web/src/systems/os/hooks/use-desktop-shell-body.ts
  • web/src/systems/os/hooks/use-frame-seam.ts
  • web/src/systems/os/hooks/use-layout-seam.ts
  • web/src/systems/os/hooks/use-os-command-palette.ts
  • web/src/systems/os/hooks/use-os-shortcuts.ts
  • web/src/systems/os/hooks/use-os-win-layer.ts
  • web/src/systems/os/hooks/use-os-window-deck.ts
  • web/src/systems/os/hooks/use-os-window-resize.ts
  • web/src/systems/os/hooks/use-os-window.ts
  • web/src/systems/os/hooks/use-window-manager-store.ts
  • web/src/systems/os/hooks/use-window-member-slot.ts
  • web/src/systems/os/hooks/use-window-merge-target.ts
  • web/src/systems/os/index.ts
  • web/src/systems/os/lib/__tests__/group-projection.test.ts
  • web/src/systems/os/lib/__tests__/layout-projection-seams.test.ts
  • web/src/systems/os/lib/__tests__/layout-projection.test.ts
  • web/src/systems/os/lib/__tests__/routing-coordinator.test.ts
  • web/src/systems/os/lib/__tests__/seam-preview.test.ts
  • web/src/systems/os/lib/__tests__/snap-targets.test.ts
  • web/src/systems/os/lib/__tests__/tiled-resize.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-action-dispatch.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-config-schema.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-navigation.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-shortcuts.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-stream-schema.test.ts
  • web/src/systems/os/lib/__tests__/window-manager-view.test.ts
  • web/src/systems/os/lib/__tests__/window-slot-registry.test.ts
  • web/src/systems/os/lib/app-registry.tsx
  • web/src/systems/os/lib/context-menu-keyboard.ts
  • web/src/systems/os/lib/frame-seams.ts
  • web/src/systems/os/lib/group-projection.ts
  • web/src/systems/os/lib/layout-minimums.ts
  • web/src/systems/os/lib/layout-projection.ts
  • web/src/systems/os/lib/os-types.ts
  • web/src/systems/os/lib/routing-coordinator.ts
  • web/src/systems/os/lib/seam-preview.ts
  • web/src/systems/os/lib/shell-shortcuts.ts
  • web/src/systems/os/lib/snap-targets.ts
  • web/src/systems/os/lib/tiled-resize.ts
  • web/src/systems/os/lib/window-instance-lookup.ts
  • web/src/systems/os/lib/window-manager-action-dispatch.ts
  • web/src/systems/os/lib/window-manager-command-builders.ts
  • web/src/systems/os/lib/window-manager-command-registry.ts
  • web/src/systems/os/lib/window-manager-config-schema.ts
  • web/src/systems/os/lib/window-manager-config.ts
  • web/src/systems/os/lib/window-manager-schemas.ts
  • web/src/systems/os/lib/window-manager-types.ts
  • web/src/systems/os/lib/window-manager-view.ts
  • web/src/systems/os/lib/window-slot-registry.ts
  • web/src/systems/os/mocks/__tests__/handlers.test.ts
  • web/src/systems/os/mocks/fixtures.ts
  • web/src/systems/os/mocks/handlers.ts
  • web/src/systems/os/mocks/window-manager-mock-runtime.ts
  • web/src/systems/os/runtime/window-manager-runtime-core.ts
  • web/src/systems/os/runtime/window-manager-runtime.ts
  • web/src/systems/os/runtime/window-manager-tab-commands.ts
  • web/src/systems/os/stores/__tests__/window-manager-store.test.ts
  • web/src/systems/os/stores/window-manager-store-selectors.ts
  • web/src/systems/os/stores/window-manager-store-types.ts
  • web/src/systems/os/stores/window-manager-store.ts
  • web/src/systems/session/components/__tests__/session-chat-runtime-provider.test.tsx
  • web/src/systems/session/components/__tests__/session-create-dialog.test.tsx
  • web/src/systems/session/components/session-create-advanced-section.tsx
  • web/src/systems/session/components/session-create-dialog-host.tsx
  • web/src/systems/session/components/session-create-dialog.tsx
  • web/src/systems/session/components/session-create-simple-section.tsx
  • web/src/systems/session/hooks/__tests__/use-session-create-dialog.test.tsx
  • web/src/systems/session/hooks/use-session-create-dialog.ts
  • web/src/systems/session/lib/session-create-draft.ts
  • web/src/systems/session/lib/session-create-navigation.ts
  • web/src/systems/session/lib/session-goal-chat-transport.ts
  • web/src/systems/session/stores/__tests__/session-create-store.test.ts
  • web/src/systems/session/stores/session-create-store.ts
  • web/src/systems/settings/components/__tests__/layout-canvas.test.tsx
  • web/src/systems/settings/components/__tests__/layout-review-bar.test.tsx
  • web/src/systems/settings/hooks/__tests__/use-layout-draft-seam.test.tsx
  • web/src/systems/settings/hooks/__tests__/use-window-manager-config-editor.test.tsx
  • web/src/systems/settings/hooks/__tests__/use-window-manager-layout-editor.test.tsx
  • web/src/systems/settings/hooks/__tests__/use-window-manager-layout-profiles.test.tsx
  • web/src/systems/settings/hooks/__tests__/use-window-manager-ratio-track.test.tsx
  • web/src/systems/settings/hooks/use-settings-roles-page.ts
  • web/src/systems/settings/lib/__tests__/window-manager-layout-mutations.test.ts
  • web/src/systems/settings/lib/__tests__/window-manager-layout-profile-key.test.ts
  • web/src/systems/settings/lib/window-manager-layout-bridge.ts
  • web/src/systems/settings/lib/window-manager-layout-projection.ts
  • web/src/systems/settings/lib/window-manager-layout-schema.ts
  • web/src/systems/settings/lib/window-manager-layout-types.ts
  • web/src/systems/settings/mocks/window-manager-fixtures.ts
  • web/src/systems/settings/stores/__tests__/window-manager-layout-profile-editor-store.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


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.

@github-actions

github-actions Bot commented Aug 1, 2026 •

Copy link
Copy Markdown
Contributor

React Doctor found 24 new issues in 3 files · 23 errors & 1 warning · score 81 / 100 (Needs work) · 8 fixed · vs main

Errors

1 warning

src/systems/extensions/hooks/use-extension-logs.ts

  • ⚠️ L97 React Compiler can't optimize this set-state-in-effect

Reviewed by React Doctor for commit d336a1a. See inline comments for fixes.

@pedronauck
pedronauck merged commit 466375c into main Aug 1, 2026
10 of 11 checks passed
@pedronauck
pedronauck deleted the window-tabs branch August 1, 2026 16:10
return undefined;
}
const factory = eventSourceFactory ?? defaultEventSourceFactory;
if (!eventSourceFactory && typeof EventSource === "undefined") return undefined;
setStatus("connecting");
setStreamStatus("connecting");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/set-state-in-effect (warning)

This synchronous effect update causes an extra render: Calling setState synchronously within an effect can trigger cascading renders. Prefer deriving or initializing the value before render. If the effect must read a browser API after mount, treat this as advisory or suppress it with // react-doctor-disable-next-line react-hooks-js/set-state-in-effect.

Fix → Effects are intended to synchronize state between React and external systems such as manually updating the DOM, state management libraries, or other platform APIs. In general, the body of an effect should do one or both of the following:

  • Update external systems with the latest state from React.
  • Subscribe for updates from some external system, calling setState in a callback function when external state changes.

Calling setState synchronously within an effect body causes cascading renders that can hurt performance, and is not recommended. (https://react.dev/learn/you-might-not-need-an-effect).

Docs

aria-label="Open tabs"
className="no-scrollbar flex min-w-0 items-end gap-0.5 overflow-x-auto"
>
{frame.members.map((member, index) => {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

aria-label="New tab (⌘T)"
data-slot="os-window-tab-add"
className="mb-[calc((var(--height-deck-tab)-var(--size-deck-add))/2)] grid size-deck-add shrink-0 place-items-center rounded-menubar-control text-subtle transition-colors duration-base hover:bg-btn-default-fill hover:text-fg-strong focus-visible:shadow-focus-ring focus-visible:outline-none"
onClick={deck.openNewTab}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs


return (
<Rnd
ref={rndRef}
ref={model.rndRef}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

className={compact ? "absolute inset-0" : undefined}
position={compact ? { x: 0, y: 0 } : { x: rect.x, y: rect.y }}
size={compact ? { width: "100%", height: "100%" } : { width: rect.w, height: rect.h }}
position={compact ? { x: 0, y: 0 } : { x: model.rect.x, y: model.rect.y }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

data-dragging={dragging ? "" : undefined}
data-testid={`os-window-frame-${frame.id}`}
data-frame-kind={frame.kind}
onPointerEnter={model.handlePointerEnter}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

data-testid={`os-window-frame-${frame.id}`}
data-frame-kind={frame.kind}
onPointerEnter={model.handlePointerEnter}
onPointerDownCapture={model.handlePointerDownCapture}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

data-frame-kind={frame.kind}
onPointerEnter={model.handlePointerEnter}
onPointerDownCapture={model.handlePointerDownCapture}
onFocusCapture={model.handleFocusCapture}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

<OsWindowDeck
frame={frame}
slotStores={slotStores}
onTrafficLight={model.handleTrafficLight}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

onTrafficLight={model.handleTrafficLight}
/>
))}
{merge.mergeTargeted ? (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

React Doctor · react-hooks-js/refs (error)

This component misses React Compiler's automatic memoization & re-renders more than it should: Cannot access refs during render. Rewrite the flagged code so the compiler can optimize it.

Fix → React refs are values that are not needed for rendering. Refs should only be accessed outside of render, such as in event handlers or effects. Accessing a ref value (the current property) during render can cause your component not to update as expected (https://react.dev/reference/react/useRef).

Docs

This branch was successfully deployed

1 active deployment
Preview — d336a1a4 Deployed Aug 1, 2026 by vercel[bot]
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