Skip to content

feat(web): open extension views in the right panel and bottom dock - #13822

Closed
saphid wants to merge 3 commits into
pingdotgg:mainfrom
saphid:pr/03-web
Closed

saphid wants to merge 3 commits into
pingdotgg:mainfrom
saphid:pr/03-web

Conversation

@saphid

@saphid saphid commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Installed packages need a real client surface and a discoverable entry point. Web and Electron now open registered surfaces from the thread header and manage packages and grants in Settings.

Views retain state through hide/show and reconnect, mount in side panels or bottom docks, and use host menus, tooltips, editors and composer bridges. Native fallback remains available. Reviewer pickers preserve team candidates, and tooltip triggers follow host semantics. Native and extension checkout handoffs show the provider’s actionable login detail without internal prefixes. Long checkout guidance can be expanded in its toast, and typed extension-operation errors survive HTTP and connection handling. The titlebar reserves measured controls space once; hidden terminal docks release histories and active archived threads keep their dock.

Review

Depends on #13821. Review this layer’s last commit; the comparison against main includes its dependencies.

Verification

Check First run Single known-flake rerun Final
CI=true vp i (reuse when lockfile unchanged) pass — pass
SDK and runtime builds pass — pass
vp lint pass — pass
vp fmt --check pass — pass
git merge-tree against fetched main pass — pass
vp run knip:check pass — pass
server.test.ts and RpcAuthorization.test.ts pass — pass
extension-runtime tests pass — pass
web/server/desktop and touched workspace typechecks pass — pass
Effect import subpath case check pass — pass
release smoke pass — pass
apps/server suite FAIL (rc 1) FAIL (rc 1) (failed file only) FAIL (rc 1)
web test pass — pass
web typecheck pass — pass
desktop test pass — pass
desktop typecheck pass — pass
client runtime test pass — pass
client runtime typecheck pass — pass
bundle freshness (integrated version; generated bundles excluded from these PRs) N/A — N/A; integrated version checked separately

The table retains this layer’s fresh first-run results. Only checks matching the documented local server port collision or the combined-patch-limit flake receive one rerun; for a full-suite failure, the rerun covers only its failed test file. Unresolved failures remain visible.

The Default host Diff renderer uses native parsed-path resolvers, preserving real a/ and b/ directories and decoded rename paths. The regression fails before the fix and passes afterward. The host regression belongs to Web; the pack-dependent path-identity tests and fixture belong to Diff.

The main merge preserves both agent-download handling and remote preview ownership. Its omission regression fails before resolution and passes afterward; the complete preview suite, desktop typecheck, lint and format passed.

The final integrated extension rebuild and bundle-freshness check passed. Generated bundles are excluded from the review layers and built from source there.

Earlier integration testing used real web and Electron desktop clients and real GitHub workflows. Desktop testing verified Browser menus, picture-in-picture and pressed-state styling; web testing verified Diff gap expansion, folding/reveal and Open/Copy actions for all four path cases, the Version Control workflow and Files remote editor routing. Agents testing verified launch, script viewing and opening a seeded session. This evidence covers the integrated implementation; these individual PR branches have not had a fresh real-client pass.

Testing against local Forgejo verified both native and extension reviewer pickers in the web client: candidates appeared once without repeated listing, user and team assignment/removal succeeded through the picker, and disabled-state reasons appeared on hover and keyboard focus. The later GitLab web-client proof covers authenticated separate-worktree fork checkout, configured API ports, host-qualified lookup, token isolation, and visible login guidance in both native and extension checkout handoffs. No new real-client pass was run for these individual PR branches. Mobile extension support remains follow-up work.

Current parity assessment: 182 PARITY / 0 SHIPPED-UNVERIFIED / 0 GAP / 2 DEFERRED of 184 scored rows, plus one N/A.

GPT-6.1 Sol via T3 Code

saphid and others added 3 commits October 2, 2026 07:32
Add @t3tools/extension-sdk (authoring API, versioned API catalogue, React surface
adapter, t3-extension build|check CLI) and @t3tools/extension-runtime (install,
discovery, worker host, capability-scoped API and stream broker), plus the wire
contracts in @t3tools/contracts. No app loads extensions yet.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The server installs extension packages under T3 home, runs their server entry in
the extension worker, and serves them over the authenticated environment HTTP API
with the same session and pairing checks as native RPC. Host implementations cover
the public workspace, terminal, VCS, PR, browser, resource-lease, composer,
orchestration, provider-status and UI client APIs. The extensions HTTP group and
the new WebSocket methods join @t3tools/contracts here, next to their handlers.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Web and desktop load trusted extension packages through the authenticated
extensions API. Settings > Integrations > Environment extensions manages them, and
the thread header Extensions menu opens their views in the side panel or bottom
dock. The six built-in panels mount through the same surface contract via native
bridges with unchanged behavior.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@juliusmarminge

Copy link
Copy Markdown
Member

Thanks for working on this. We merged the orchestrator V2 rewrite in #2829, and we are closing this PR as part of that transition.

This extension layer includes the pre-V2 extension host dependency. EnvironmentExtensions and agentSessionsApi depend on deleted ProjectionSnapshotQuery, OrchestrationEngineService and ProviderSessionDirectory; provider credential wiring modifies deleted ProviderService. Rebuild the host on V2 and recreate this dependent layer.

Sorry for the extra work this creates. If the change is still needed on V2, please rebuild it on current main, verify it there, and open a new PR linking back here. We're closing the current implementation without assuming the underlying request is resolved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants