Skip to content

feat(app): combine browser and artifacts views and state#1973

Merged
benjaminshafii merged 6 commits into
devfrom
feat/combine-browser-and-artifact-tabs-and-state
May 27, 2026
Merged

feat(app): combine browser and artifacts views and state#1973
benjaminshafii merged 6 commits into
devfrom
feat/combine-browser-and-artifact-tabs-and-state

Conversation

@JeanMeijer
Copy link
Copy Markdown
Collaborator

Summary

  • Replaces the separate browser panel with a unified side panel for browser and artifact tabs.
  • Adds shared side-panel tab state, tab utilities, and panel tab hooks.
  • Moves browser state into the new side-panel flow and removes the old browser-specific panel files.
  • Updates artifact panel/open-target handling to use the unified tab system.
  • Adjusts session page wiring, persisted UI state, and Electron browser integration for the combined panel.

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 27, 2026

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

Project Deployment Actions Updated (UTC)
openwork-app Ready Ready Preview, Comment May 27, 2026 6:49pm
openwork-den Ready Ready Preview, Comment May 27, 2026 6:49pm
openwork-den-worker-proxy Ready Ready Preview, Comment May 27, 2026 6:49pm
openwork-landing Ready Ready Preview, Comment, Open in v0 May 27, 2026 6:49pm

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 15 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/app/src/react-app/domains/session/panel/side-panel.tsx">

<violation number="1" location="apps/app/src/react-app/domains/session/panel/side-panel.tsx:192">
P2: This `useLayoutEffect` runs on every render and calls `browser.setBounds?.(bounds)` without checking `sameBounds` first. Since the component re-renders on URL/status/navigation changes, this sends redundant IPC calls to the Electron main process when bounds haven't actually changed. Add the same `sameBounds` guard used in `syncBounds`.</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Fix all with cubic | Re-trigger cubic

return;
}

browser.setBounds?.(bounds);
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot May 27, 2026

Choose a reason for hiding this comment

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

P2: This useLayoutEffect runs on every render and calls browser.setBounds?.(bounds) without checking sameBounds first. Since the component re-renders on URL/status/navigation changes, this sends redundant IPC calls to the Electron main process when bounds haven't actually changed. Add the same sameBounds guard used in syncBounds.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/app/src/react-app/domains/session/panel/side-panel.tsx, line 192:

<comment>This `useLayoutEffect` runs on every render and calls `browser.setBounds?.(bounds)` without checking `sameBounds` first. Since the component re-renders on URL/status/navigation changes, this sends redundant IPC calls to the Electron main process when bounds haven't actually changed. Add the same `sameBounds` guard used in `syncBounds`.</comment>

<file context>
@@ -0,0 +1,464 @@
+      return;
+    }
+
+    browser.setBounds?.(bounds);
+    lastBoundsRef.current = bounds;
+  });
</file context>
Fix with Cubic

actions-user and others added 5 commits May 27, 2026 11:48
* test(app): add voice mode CDP audio check

* fix(app): wait for voice CDP target readiness

* fix(desktop): require explicit audio media permission

* fix(desktop): keep fake media behind permission handler

* test(app): capture voice CDP proof

* fix(desktop): request mac microphone access for voice

* fix(app): harden voice CDP runner
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

2 issues found across 211 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="apps/app/src/react-app/design-system/extension-card.tsx">

<violation number="1" location="apps/app/src/react-app/design-system/extension-card.tsx:120">
P2: `fallbackIcon` is still declared in `ExtensionCardProps` and actively passed by callers in `mcp-view.tsx`, but this diff removes its usage from the component body. Those callers now silently have no effect. Remove the prop from the type and clean up call sites, or restore usage.</violation>
</file>

<file name="ee/packages/utils/src/typeid.ts">

<violation number="1" location="ee/packages/utils/src/typeid.ts:52">
P1: Changing the prefix from `"osb"` to `"osub"` is a breaking change for any existing `orgSubscription` IDs stored in the database. Existing IDs with the `osb_` prefix will fail validation (wrong prefix, wrong length). If this table has production data, a migration is needed to rewrite stored IDs, or existing IDs will become unresolvable.</violation>
</file>

Partial review: This PR has more than 50 files, so cubic reviewed the highest-priority files first. During the trial, paid plans get a higher file limit.
You can try an ultrareview to bypass the file limit, comment @cubic-dev-ai ultrareview. Learn more.

Fix all with cubic | Re-trigger cubic

desktopPolicyMember: "dpm",
organizationRole: "orl",
orgSubscription: "osb",
orgSubscription: "osub",
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot May 27, 2026

Choose a reason for hiding this comment

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

P1: Changing the prefix from "osb" to "osub" is a breaking change for any existing orgSubscription IDs stored in the database. Existing IDs with the osb_ prefix will fail validation (wrong prefix, wrong length). If this table has production data, a migration is needed to rewrite stored IDs, or existing IDs will become unresolvable.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At ee/packages/utils/src/typeid.ts, line 52:

<comment>Changing the prefix from `"osb"` to `"osub"` is a breaking change for any existing `orgSubscription` IDs stored in the database. Existing IDs with the `osb_` prefix will fail validation (wrong prefix, wrong length). If this table has production data, a migration is needed to rewrite stored IDs, or existing IDs will become unresolvable.</comment>

<file context>
@@ -49,7 +49,7 @@ export const idTypesMapNameToPrefix = {
   desktopPolicyMember: "dpm",
   organizationRole: "orl",
-  orgSubscription: "osb",
+  orgSubscription: "osub",
   scimProvider: "scp",
   ssoConnection: "ssc",
</file context>
Fix with Cubic

kind === "plugin" || kind === "skill" ? (
<ExtensionMeshAvatar name={name} className="size-7 rounded-md text-[10px] font-bold shadow-inner" />
) : <FallbackIcon size={18} className="text-dls-secondary" />
<ExtensionMeshAvatar
Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot May 27, 2026

Choose a reason for hiding this comment

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

P2: fallbackIcon is still declared in ExtensionCardProps and actively passed by callers in mcp-view.tsx, but this diff removes its usage from the component body. Those callers now silently have no effect. Remove the prop from the type and clean up call sites, or restore usage.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At apps/app/src/react-app/design-system/extension-card.tsx, line 120:

<comment>`fallbackIcon` is still declared in `ExtensionCardProps` and actively passed by callers in `mcp-view.tsx`, but this diff removes its usage from the component body. Those callers now silently have no effect. Remove the prop from the type and clean up call sites, or restore usage.</comment>

<file context>
@@ -117,9 +117,11 @@ export function ExtensionCard(props: ExtensionCardProps) {
-              kind === "plugin" || kind === "skill" ? (
-                <ExtensionMeshAvatar name={name} className="size-7 rounded-md text-[10px] font-bold shadow-inner" />
-              ) : <FallbackIcon size={18} className="text-dls-secondary" />
+              <ExtensionMeshAvatar
+                name={name}
+                category={grainArtCategoryForExtensionKind(kind)}
</file context>
Fix with Cubic

@benjaminshafii benjaminshafii merged commit a9e261a into dev May 27, 2026
11 checks passed
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.

4 participants