From c624a629735fb82f9b2941ce25388eb34079f217 Mon Sep 17 00:00:00 2001 From: "omegent-app[bot]" <306514130+omegent-app[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2026 10:13:50 +0000 Subject: [PATCH] feat(settings): default new threads to new worktree from origin Make the product default for draft threads match the preferred worktree workflow: New worktree with Start from origin enabled. Mobile falls back to the shared server defaults when config is still loading. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com> --- apps/mobile/src/features/threads/new-task-flow-provider.tsx | 6 ++++-- packages/contracts/src/settings.test.ts | 4 ++++ packages/contracts/src/settings.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/mobile/src/features/threads/new-task-flow-provider.tsx b/apps/mobile/src/features/threads/new-task-flow-provider.tsx index 8d4ce7a7feda..d40b28ce7f5e 100644 --- a/apps/mobile/src/features/threads/new-task-flow-provider.tsx +++ b/apps/mobile/src/features/threads/new-task-flow-provider.tsx @@ -12,6 +12,7 @@ import { CommandId, DEFAULT_PROVIDER_INTERACTION_MODE, DEFAULT_RUNTIME_MODE, + DEFAULT_SERVER_SETTINGS, MessageId, ThreadId, } from "@t3tools/contracts"; @@ -354,7 +355,8 @@ export function NewTaskFlowProvider(props: React.PropsWithChildren) { // The server's configured default decides the mode until the user picks one // explicitly — same resolution web uses for new draft threads. const defaultWorkspaceMode: WorkspaceMode = - selectedEnvironmentServerConfig?.settings.defaultThreadEnvMode ?? "local"; + selectedEnvironmentServerConfig?.settings.defaultThreadEnvMode ?? + DEFAULT_SERVER_SETTINGS.defaultThreadEnvMode; const workspaceMode = selectedProjectDraft.workspaceSelection?.mode ?? defaultWorkspaceMode; const selectedBranchName = selectedProjectDraft.workspaceSelection?.branch ?? null; const selectedWorktreePath = selectedProjectDraft.workspaceSelection?.worktreePath ?? null; @@ -365,7 +367,7 @@ export function NewTaskFlowProvider(props: React.PropsWithChildren) { const startFromOrigin = draftStartFromOrigin ?? selectedEnvironmentServerConfig?.settings.newWorktreesStartFromOrigin ?? - true; + DEFAULT_SERVER_SETTINGS.newWorktreesStartFromOrigin; const runtimeMode = selectedProjectDraft.runtimeMode ?? DEFAULT_RUNTIME_MODE; const interactionMode = selectedProjectDraft.interactionMode ?? DEFAULT_PROVIDER_INTERACTION_MODE; diff --git a/packages/contracts/src/settings.test.ts b/packages/contracts/src/settings.test.ts index 466e775b73ef..0879a4e7c423 100644 --- a/packages/contracts/src/settings.test.ts +++ b/packages/contracts/src/settings.test.ts @@ -187,6 +187,10 @@ describe("ServerSettings.providerInstances (slice-2 invariant)", () => { }); describe("ServerSettings worktree defaults", () => { + it("defaults new threads to worktree mode", () => { + expect(decodeServerSettings({}).defaultThreadEnvMode).toBe("worktree"); + }); + it("defaults start-from-origin on for legacy configs", () => { expect(decodeServerSettings({}).newWorktreesStartFromOrigin).toBe(true); }); diff --git a/packages/contracts/src/settings.ts b/packages/contracts/src/settings.ts index fbc253ebb049..c2e949c1cfdd 100644 --- a/packages/contracts/src/settings.ts +++ b/packages/contracts/src/settings.ts @@ -530,7 +530,7 @@ export const ServerSettings = Schema.Struct({ Schema.withDecodingDefault(Effect.succeed(DEFAULT_BACKGROUND_ACTIVITY_PROFILE)), ), defaultThreadEnvMode: ThreadEnvMode.pipe( - Schema.withDecodingDefault(Effect.succeed("local" as const satisfies ThreadEnvMode)), + Schema.withDecodingDefault(Effect.succeed("worktree" as const satisfies ThreadEnvMode)), ), newWorktreesStartFromOrigin: Schema.Boolean.pipe( Schema.withDecodingDefault(Effect.succeed(true)),