Skip to content

feat(plugins): read files from a thread workspace - #32

Open
saphid wants to merge 404 commits into
ashx-j:feat/plugin-systemfrom
saphid:feat/plugin-workspace-read-20261110
Open

saphid wants to merge 404 commits into
ashx-j:feat/plugin-systemfrom
saphid:feat/plugin-workspace-read-20261110

Conversation

@saphid

@saphid saphid commented Nov 10, 2026 •

Copy link
Copy Markdown

Server plugins cannot read the files in the thread they serve through the public SDK. Server API version 2 adds workspace.listEntries({ threadId, directoryPath? }) and workspace.readFile({ threadId, relativePath }).

Each call resolves the active thread and project, uses the thread worktree or project folder, and reuses the existing shallow listing and bounded text reader. Absolute paths, traversal and symlinks outside the workspace are refused. The SDK README includes an MCP tool example. This is a read-only API for trusted plugins, with the existing 1 MiB text limit. Reads under .git retain existing workspace behavior; errors can include host paths. There is no Files renderer or editing API in this slice, and no client UI change.

Depends on the plugin platform #33606, which is not merged. This branch preserves ashx-j's platform and Maria's follow-up commits, rebased onto main ddc4f576. Their branches and PR ownership are unchanged. The full upstream diff includes that prerequisite. This counterpart keeps its existing feat/plugin-system base; its diff also includes the main refresh. Review the feature and follow-up fixes. Paired PR: upstream #33808.

Published head c780dff2081 adds the shared platform review corrections: structured host lifecycle errors that retain the original cause and existing plugin diagnostics, route-visibility styling owned by SidebarInset, and removal of one static home-region test. The additive feature behavior is unchanged. The earlier ancestry-only merge 66285781965 is retained, keeping the original author base as an ancestor without retargeting either PR. Platform owner refs remain untouched.

Verification on this source tree: CI=true VITEST_MAX_WORKERS=1 vp run check:changed origin/main passed all stages: 1,100 tests in 79 files, 42 package typechecks, format, lint, knip, GraphQL, unused patches and React Compiler. The frozen tree fac078efb3e434587fa854c78a0cc1c42f072d8e matches the committed tree exactly; commit hooks passed. Focused shared-patch verification in the workspace tree passed 42 server tests and 13 browser tests. A fresh independent GPT-6.1 Sol review (high reasoning, Codex harness) approved the exact six-file patch across all three branches with no actionable findings; its additional runtime check passed 27 stage/cause combinations. The earlier isolated Linux suite passed 249 tests in 37 files before this shared follow-up; it was not repeated for these edits. All eight required upstream checks passed on c780dff2081; live upstream checks. This fork reported no check runs or workflow runs on the preceding identical commit; no fork-CI pass is claimed.

The refresh retains main's MCP tool search, settings translations/accessibility, and current composer dictation/submission behavior. The shared browser test now selects the “New thread in…” submenu by name instead of assuming an optional project row exists; Enter activation and project highlight assertions remain. No production keyboard behavior, timeout or retry changed. At the previous publication, all three branches merged cleanly with newer main ed54f306; that later main revision was checked for merge conflicts, not represented as the tested base.

Landing gates: this is additive feature work dependent on the unmerged platform. Upstream's current contribution policy requires a maintainer request for feature PRs; this description makes no claim that such a request or merge approval has been given. Approvability also requires human review of platform/default-primary-environment loading, diagnostic suppressions and intentional plugin exception-text exposure; those gates remain open. Macroscope correctness review was cost-limited and was not bypassed or retriggered. GitHub's clean merge result is not a merge-readiness verdict. Kept open and unmerged; tracked in saphid/personal-ops#128.

Created and integrated with Claude Opus 5.5 in Claude Code and GPT-6.1 Sol in Codex through T3 Code. Fresh integration and shared-fix reviews: GPT-6.1 Sol, high reasoning, Codex harness.

@ashx-j
ashx-j force-pushed the feat/plugin-system branch from e56923b to 4051d5e Compare November 10, 2026 09:59
@saphid
saphid force-pushed the feat/plugin-workspace-read-20261110 branch from 9019e20 to 2d908fb Compare November 10, 2026 10:42
@saphid
saphid force-pushed the feat/plugin-workspace-read-20261110 branch 4 times, most recently from 0b0324f to a0b060c Compare November 11, 2026 10:02
t3dotgg and others added 23 commits November 11, 2026 13:23
…34279)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…gdotgg#34360)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…otgg#14870)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…wed (pingdotgg#34333)

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
…dotgg#34552)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
…he message (pingdotgg#34306)

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…er browser tabs (pingdotgg#34252)

Co-authored-by: Julius Marminge <julius0216@outlook.com>
Yash-Singh1 and others added 27 commits November 11, 2026 22:03
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…gdotgg#33124)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…iled X (pingdotgg#34734)

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Yash Singh <saiansh2525@gmail.com>
…hread that sent them (pingdotgg#34721)

Co-authored-by: Happy Campr <happycampr@Locals-MacBook-Pro.local>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…ithout a fork

A plugin is a folder with a t3-plugin.json that a user drops onto Settings → Plugins. It installs
turned off on one environment, and can ship themes and styles, a server half (RPC methods and
channels, storage, settings with secrets in the secret store, and MCP tools for agents) and a web
half that loads with T3's own React and UI kit (right panels, commands, a settings panel, assets,
and redrawing the composer's control row, the sidebar and the Settings frame). @t3tools/plugin-sdk
types both halves and builds a web half.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@saphid
saphid force-pushed the feat/plugin-workspace-read-20261110 branch from a0b060c to f7e5df1 Compare November 12, 2026 07:00
The platform and its follow-up fixes are already carried by the reviewed
rebased prerequisite. Record the original author branch as integrated so
the existing fork-base review PR can merge without replaying those changes.
The tested source tree is unchanged.
Keep plugin-owned failure diagnostics while storing host boundary context separately. Move route visibility styling to SidebarInset and remove the static home-region test.
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.