Skip to content

fix(settings): finish extension readiness and section routing wiring - #3111

Merged
benjaminshafii merged 1 commit into
devfrom
fix/extensions-marketplace-wiring
Jul 25, 2026
Merged

fix(settings): finish extension readiness and section routing wiring#3111
benjaminshafii merged 1 commit into
devfrom
fix/extensions-marketplace-wiring

Conversation

@benjaminshafii

@benjaminshafii benjaminshafii commented Jul 25, 2026

Copy link
Copy Markdown
Member

Problem

Three pieces of unfinished wiring (not missing features) meant members could not tell which organization capabilities were ready versus needed setup. This was the single most confusing thing in an enterprise walkthrough: the app already knows the answer and could not say it.

Fix 1 — organization readiness rows could never render

connect-view.tsx declares marketplaceItems?: ExtensionItem[], defaults it to [], and uses it to build the Needs your sign-in / Needs admin setup / Ready to use groups for marketplace plugins. settings-route.tsx never passed it. Those rows were unreachable in every build.

Now passes the already-derived extensionItems.cloudPluginItems — no new fetch, no duplicated derivation. This is the direct answer to "does a teammate installing this skill have to connect the MCP themselves?"

Fix 2 — ExtensionsView ignored its own section routing

It accepted initialSection and setSectionRoute and used neither, so /settings/extensions, /extensions/mcp, /extensions/skills and /extensions/plugins all rendered an identical page — including the composer's own Configure deep link. The inventory now opens pre-filtered and keeps the URL in sync; /plugins opens the plugins block expanded.

Fix 3 — "View in Marketplace" led nowhere

The notification label promised a Marketplace screen that does not exist while navigating to Extensions. Label now matches the real destination, via i18n rather than a hardcoded string.

Verification

pnpm typecheck                     clean
77 focused tests across 24 connect/extensions/mcp suites   all pass

New regression test proves Fix 1: routed cloud-marketplace items produce plugin readiness rows. New route test covers the extensions deep links.

Note for the reviewer

Trivially conflicts with #3113 in mcp-view.tsx — two adjacent additions, both wanted. Verified resolved and green in an integration branch merging all of this work together.

@vercel

vercel Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
openwork-app Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-den Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-den-worker-proxy Ready Ready Preview, Comment Jul 25, 2026 1:01pm
openwork-landing Ready Ready Preview, Comment, Open in v0 Jul 25, 2026 1:01pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
openwork-diagnostics Skipped Skipped Jul 25, 2026 1:01pm

@benjaminshafii

Copy link
Copy Markdown
Member Author

Validation: real app, isolated Linux sandbox, matched A/B

All nine branches of this series were merged into one integration branch (f91884c3) and driven as a real user through CDP in a fresh Daytona sandbox. Baseline dev was run in a separate, identically-provisioned fresh sandbox with the same model (GPT-4o mini) so the comparison is apples-to-apples.

core-flow step clean dev (2fda6070) this series (f91884c3)
App boots to a usable session surface ✅ 105ms ✅ 94ms
User creates a fresh task in the workspace ✅ 674ms ✅ 662ms
User writes a message and runs it (real inference) ✅ 2768ms ✅ 111405ms
User closes and reopens; the session survives ❌ not persisted ❌ not persisted

Step 4 fails identically on clean dev (Session ses_… was not listed after reopen (not persisted)), so it is pre-existing on dev and not introduced here. Against the canonical core flow this series is inert, which is exactly the claim for a cleanup/wiring series.

Validated frames: core-flow-01-booted.png, core-flow-02-session-created.png, core-flow-03-task-response.png — including the assertion "Visible text does not include 'Something went wrong'".

A real regression this caught, in this series

Booting the real app initially failed with:

TypeError: Unknown file extension ".ts" for packages/types/src/skill-markdown.ts
→ "OpenWork server did not finish starting. Please restart OpenWork."

@openwork/types is a source-only package — every exports entry resolves to raw ./src/*.ts. apps/server is built with plain tsc (no bundling), so a runtime import there survives into emitted JS and Node cannot load it. Only the bun build-bundled files under src/opencode-plugins/ may import it.

pnpm typecheck and both bun suites passed straight through this, because bun loads .ts natively and Vite bundles for the renderer. Only booting the real product surfaced it. It is fixed in #3112, and that PR adds an automated guard that fails if any non-bundled apps/server file imports @openwork/types, plus a plain-node import proof of the built output.

Static verification on the merged result

pnpm typecheck                                        clean
pnpm --filter @openwork/app test                      435 pass,  0 fail
pnpm --filter openwork-server test                    526 pass,  0 fail
pnpm --filter @openwork-ee/den-web test                73 pass,  0 fail
pnpm --filter @openwork-ee/den-web build              succeeded
den-api desktop-policy suites (real MySQL)              9 pass,  0 fail

Honest gaps

  • No per-PR fraimz flow was authored; this is the canonical core-flow inertness proof plus the matched baseline, which is the right standard for a series that is mostly wiring, deletion, and policy gating.
  • The cloud prompt-card behavior in feat(desktop-policies): let organization prompts launch a named skill #3115 is covered by unit + real-DB API tests, not by a driven cloud fraimz — that needs the Den stack and a seeded org.
  • Local macOS pnpm dev could not be used: every worktree shares one userData dir, so app.requestSingleInstanceLock() makes any second instance quit before creating a window (CDP stays up, so it looks like a hang). Worth a separate DX fix.

@benjaminshafii
benjaminshafii merged commit ea58461 into dev Jul 25, 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.

1 participant