Repository navigation
refactor(client-runtime): add project clone sources come from host definitions - #17756
Conversation
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The mobile clone flow now automatically exposes host definitions such as GitCafe, including new labels, icons, readiness handling, repository lookup, and clone transport behavior. This changes the product's default source choices and enables a new user-facing path, so the broader runtime impact merits human review. Notes:
No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
916ee86 to
c1581e0
Compare
Dismissing prior approval to re-evaluate c1581e0
c1581e0 to
f4c6dfb
Compare
…finitions The Add Project helpers in client-runtime, and mobile's screens on top of them, listed the five hosts by hand: the source union, its label and path hint switches, the default clone transport, a readiness record keyed by host, and route-param guards in two mobile screens. They now read from `sourceControlClients`, so a new host's definition puts it in the picker. Readiness is a lookup function instead of a fixed record. Mobile's PR accessibility label and its icon read from the definition too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
f4c6dfb to
efcc177
Compare
## What's Changed * feat(server): stop Claude subagents without stopping their owner by @Yash-Singh1 in pingdotgg/t3code#17826 * fix(server): stopped native subagents no longer read as Running by @im-kvijay in pingdotgg/t3code#17223 * perf(server): t3_thread_list reads only the listed project's threads by @only21mil in pingdotgg/t3code#17843 * fix(server): show diffs for projects outside the server cwd by @maria-rcks in pingdotgg/t3code#17724 * fix(server): check the specific scope for scripts, preview input, and full-access MCP grants by @juliusmarminge in pingdotgg/t3code#17772 * fix(source-control): stop Forgejo status refresh from scanning every pull request by @loispostula in pingdotgg/t3code#12223 * refactor(contracts): source control provider kind is an open branded slug by @juliusmarminge in pingdotgg/t3code#17739 * feat(source-control): each host package ships a client definition by @juliusmarminge in pingdotgg/t3code#17746 * refactor(client-runtime): add project clone sources come from host definitions by @juliusmarminge in pingdotgg/t3code#17756 * refactor(web): host presentation and behavior come from client definitions by @juliusmarminge in pingdotgg/t3code#17757 * refactor(source-control): reference parsing and project matching are host resolvers by @juliusmarminge in pingdotgg/t3code#17770 * feat(pull-requests): quick actions follow each host's capabilities, not GitHub by @juliusmarminge in pingdotgg/t3code#17774 * feat(projects): new projects can be published to any ready host by @juliusmarminge in pingdotgg/t3code#17860 * fix(server): send Claude MCP servers over the control channel by @juliusmarminge in pingdotgg/t3code#17898 * fix(web): a finished reply replaced by a steer is no longer labeled partial by @juliusmarminge in pingdotgg/t3code#17761 * fix(client-runtime): queued runs that start after a steer show up in the thread by @juliusmarminge in pingdotgg/t3code#17764 * feat(mobile): choose the microphone order for voice input by @juliusmarminge in pingdotgg/t3code#17896 * feat(source-control): host settings live on each host's definition, with a GitCafe token by @juliusmarminge in pingdotgg/t3code#17901 ## New Contributors * @only21mil made their first contribution in pingdotgg/t3code#17843 * @loispostula made their first contribution in pingdotgg/t3code#12223 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261010.2935...v0.0.46-nightly.20261010.2948 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2948
## What's Changed * feat(server): stop Claude subagents without stopping their owner by @Yash-Singh1 in pingdotgg/t3code#17826 * fix(server): stopped native subagents no longer read as Running by @im-kvijay in pingdotgg/t3code#17223 * perf(server): t3_thread_list reads only the listed project's threads by @only21mil in pingdotgg/t3code#17843 * fix(server): show diffs for projects outside the server cwd by @maria-rcks in pingdotgg/t3code#17724 * fix(server): check the specific scope for scripts, preview input, and full-access MCP grants by @juliusmarminge in pingdotgg/t3code#17772 * fix(source-control): stop Forgejo status refresh from scanning every pull request by @loispostula in pingdotgg/t3code#12223 * refactor(contracts): source control provider kind is an open branded slug by @juliusmarminge in pingdotgg/t3code#17739 * feat(source-control): each host package ships a client definition by @juliusmarminge in pingdotgg/t3code#17746 * refactor(client-runtime): add project clone sources come from host definitions by @juliusmarminge in pingdotgg/t3code#17756 * refactor(web): host presentation and behavior come from client definitions by @juliusmarminge in pingdotgg/t3code#17757 * refactor(source-control): reference parsing and project matching are host resolvers by @juliusmarminge in pingdotgg/t3code#17770 * feat(pull-requests): quick actions follow each host's capabilities, not GitHub by @juliusmarminge in pingdotgg/t3code#17774 * feat(projects): new projects can be published to any ready host by @juliusmarminge in pingdotgg/t3code#17860 * fix(server): send Claude MCP servers over the control channel by @juliusmarminge in pingdotgg/t3code#17898 * fix(web): a finished reply replaced by a steer is no longer labeled partial by @juliusmarminge in pingdotgg/t3code#17761 * fix(client-runtime): queued runs that start after a steer show up in the thread by @juliusmarminge in pingdotgg/t3code#17764 * feat(mobile): choose the microphone order for voice input by @juliusmarminge in pingdotgg/t3code#17896 * feat(source-control): host settings live on each host's definition, with a GitCafe token by @juliusmarminge in pingdotgg/t3code#17901 ## New Contributors * @only21mil made their first contribution in pingdotgg/t3code#17843 * @loispostula made their first contribution in pingdotgg/t3code#12223 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261010.2935...v0.0.46-nightly.20261010.2948 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261010.2948
The Add Project helpers in client-runtime listed the hosts by hand: the
AddProjectRemoteProviderKindunion, two source arrays, the label and path-hintswitches,getDefaultCloneUrl'sgithub || forgejocheck, and a readinessRecordkeyed by host. Mobile then repeated the host list twice more, assource === "github" || …route-param guards inAddProjectScreenandAddProjectRepositoryRoute.Fix
operations/projects.tsreads hosts, labels (pickerLabel), path hints and the clone transport fromsourceControlClients.AddProjectRemoteSourceisSourceControlProviderKind | "url".(source) => { ready, hint }) instead of a record with one key per host, so it covers whatever hosts the definitions list.parseAddProjectRemoteSourcereplaces mobile's two route-param guards. A host this build doesn't ship falls back tourl, as before.SourceControlIcontakes the definition'siconkey and draws nothing for keys it has no art for.thread-pr-presentationreads the change request noun from the definition.No behavior change. Labels, hints, ordering (ready first, then by label), hint copy and clone transports are identical.
I deliberately left mobile's "new project → private GitHub repository" alone. It publishes through
ghand readsgetNewProjectGitHubTarget, so it is a GitHub feature, not a host switch.Verification
npx tsc --noEmit -p .is clean in client-runtime and mobile.vp test run packages/client-runtime/src/operations/projects.test.ts apps/mobile/src/state/use-thread-pr.test.ts packages/client-runtime/src/sourceControlClients.test.tspasses. The existing readiness test now calls the resolver form.vp linton the touched files andknipare clean.After restacking onto GitCafe (#17681): GitCafe joins the clone picker through its definition, with no edit to this layer's code. That matches what main's palette offers. Mobile's
SourceControlIcongains GitCafe's mark, the same inset square as web'sGitCafeIcon.🤖 Generated with Claude Code