Skip to content

feat(extensions): add first-party Files extension - #13824

Closed
saphid wants to merge 4 commits into
pingdotgg:mainfrom
saphid:pr/04-files
Closed

saphid wants to merge 4 commits into
pingdotgg:mainfrom
saphid:pr/04-files

Conversation

@saphid

@saphid saphid commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

A Files panel implemented inside the app cannot be installed independently. This adds a Files extension built against public SDK APIs.

The panel supports a virtualized explorer, refresh and grant-denial recovery, editable host code views, Markdown task controls, review comments, file previews, editor routing and composer context. UI-kit tree rows use native icons and keyboard behavior.

Review

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

Verification

Check First run 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 local HTTP port collision (rc 1) pass
sdk build pass pass
build pass pass
check pass pass
test pass pass
typecheck pass pass
audit pass pass
web test pass pass
bundle freshness (integrated version; generated bundles excluded from these PRs) N/A N/A; integrated version checked separately

The only failing results are server HTTP tests on the author's machine: an unrelated local service occupies the same port number on IPv4, causing bootstrap requests to receive that service's 403 or 404 responses. The same failures occur on unmodified main, and the same suite passes in full on layers containing all server changes, including Terminal. CI on Linux is the authority for the server suite.

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. GitLab workflows remain unverified in a real client, and mobile extension support remains follow-up work.

Remote editor routing was verified in a real web client.

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 4 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>
Add packages/first-party-extensions/files, an installable Files panel built only on the
public extension SDK (the audit script enforces that). It installs beside the
built-in panel and does not replace or remove it.

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