Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c0bb237
fix(web): always show environment chip for remote projects (#4217)
t3dotgg Jul 21, 2026
23c18fd
fix(web): keep composer editable while disconnected (#4241)
t3dotgg Jul 21, 2026
62cf461
fix: better defaults — Claude 1M context, Codex gpt-5.6, worktrees fr…
t3dotgg Jul 22, 2026
6f34ad3
fix(claude): handle all SDK stream messages; stop spurious work-log w…
t3dotgg Jul 22, 2026
32c6012
Sidebar v2 beta: flat thread list with a server-backed settled lifecy…
t3dotgg Jul 22, 2026
282ecb3
fix(settings): validate the add-provider wizard step before advancing…
leorivastech Jul 22, 2026
aa5ec80
fix(claude): isolate capability probe from user MCP servers (#4015)
jbbottoms Jul 22, 2026
783692a
Preserve connecting status while a turn starts (#4101)
D3OXY Jul 22, 2026
4e09cdd
fix(server): stop restoring stale OpenCode models (#4095)
nateEc Jul 22, 2026
c7b21ff
[codex] keep scoped package references as text (#4167)
maxwellyoung Jul 22, 2026
b6e1b39
fix(web): default provider selection for users without Codex (#4117)
mfazekas Jul 22, 2026
571a8b4
Unify temporary worktree branch naming (#4278)
juliusmarminge Jul 22, 2026
020179c
fix(web): use message-square icon for settled icon-less project threa…
UtkarshUsername Jul 22, 2026
18b4688
Stabilize sidebar settling animations (#4280)
juliusmarminge Jul 22, 2026
e5fba26
Restore Copy Link in chat link context menu (#4161)
caezium Jul 22, 2026
f74eb62
fix(desktop): handle EPIPE errors on stdout/stderr to prevent crash d…
UtkarshUsername Jul 22, 2026
18fa89c
Preserve draft thread highlighting during promotion (#4283)
juliusmarminge Jul 22, 2026
7e2bb47
Move mobile working timer into the thread timeline (#4285)
juliusmarminge Jul 22, 2026
376c149
Stabilize PR status lookups and provider session lifecycle (#4281)
juliusmarminge Jul 22, 2026
9fe4832
fix: open command palette instead of custom dialog for new thread pic…
UtkarshUsername Jul 22, 2026
9a0a071
fix(server): don't drop sticky PR fallback when remote URL can't be r…
juliusmarminge Jul 22, 2026
0decc3c
sync upstream main
tarik02 Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions apps/desktop/src/backend/DesktopBackendPool.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,11 +113,11 @@ describe("DesktopBackendPool", () => {
);

it.effect("layerTest dies when no instances are supplied", () =>
Effect.exit(
Effect.gen(function* () {
yield* DesktopBackendPool.DesktopBackendPool;
}).pipe(Effect.provide(DesktopBackendPool.layerTest([]))),
).pipe(Effect.map((exit) => assert.equal(exit._tag, "Failure"))),
DesktopBackendPool.DesktopBackendPool.pipe(
Effect.provide(DesktopBackendPool.layerTest([])),
Effect.exit,
Effect.map((exit) => assert.equal(exit._tag, "Failure")),
),
);

it.effect("resolves the primary label lazily after pool layer construction", () =>
Expand Down
6 changes: 6 additions & 0 deletions apps/desktop/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
for (const stream of [process.stdout, process.stderr]) {
stream.on("error", (err: NodeJS.ErrnoException) => {
if (err.code !== "EPIPE") throw err;
});
}

import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient";
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
import * as NodeServices from "@effect/platform-node/NodeServices";
Expand Down
2 changes: 2 additions & 0 deletions apps/desktop/src/settings/DesktopClientSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ const clientSettings: ClientSettings = {
diffIgnoreWhitespace: true,
favorites: [],
providerModelPreferences: {},
sidebarAutoSettleAfterDays: 3,
sidebarProjectGroupingMode: "repository_path",
sidebarProjectGroupingOverrides: {
"environment-1:/tmp/project-a": "separate",
},
sidebarProjectSortOrder: "manual",
sidebarThreadSortOrder: "created_at",
sidebarThreadPreviewCount: 6,
sidebarV2Enabled: false,
timestampFormat: "24-hour",
wordWrap: true,
};
Expand Down
17 changes: 8 additions & 9 deletions apps/desktop/src/wsl/DesktopWslEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -849,15 +849,14 @@ export const layer = Layer.effect(
// distro. Negative results aren't cached so a transient wsl.exe failure
// doesn't permanently disable tilde expansion.
const userHomeCache = new Map<string, string>();
const getUserHome = (distro: string | null) =>
Effect.gen(function* () {
const key = distro ?? "__default__";
const cached = userHomeCache.get(key);
if (cached !== undefined) return Option.some(cached);
const resolved = yield* provideSpawner(getUserHomeImpl(distro));
if (Option.isSome(resolved)) userHomeCache.set(key, resolved.value);
return resolved;
}).pipe(Effect.withSpan("desktop.wsl.getUserHome"));
const getUserHome = Effect.fn("desktop.wsl.getUserHome")(function* (distro: string | null) {
const key = distro ?? "__default__";
const cached = userHomeCache.get(key);
if (cached !== undefined) return Option.some(cached);
const resolved = yield* provideSpawner(getUserHomeImpl(distro));
if (Option.isSome(resolved)) userHomeCache.set(key, resolved.value);
return resolved;
});

const getDistroIp = (distro: string | null) =>
provideSpawner(getDistroIpImpl(distro)).pipe(Effect.withSpan("desktop.wsl.getDistroIp"));
Expand Down
2 changes: 2 additions & 0 deletions apps/mobile/src/features/archive/archivedThreadList.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ function makeThread(
hasPendingUserInput: false,
hasActionableProposedPlan: false,
...input,
settledOverride: input.settledOverride ?? null,
settledAt: input.settledAt ?? null,
};
}

Expand Down
7 changes: 6 additions & 1 deletion apps/mobile/src/features/home/HomeRouteScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ export function HomeRouteScreen() {
const { savedConnectionsById } = useSavedRemoteConnections();
const navigation = useNavigation();
const [searchQuery, setSearchQuery] = useState("");
const { archiveThread, confirmDeleteThread } = useThreadListActions();
const { archiveThread, confirmDeleteThread, settleThread, unsettleThread } =
useThreadListActions();
const pendingTasks = usePendingNewTasks();
const { openPendingTask, confirmDeletePendingTask } = usePendingTaskListActions();
const environments = useMemo(
Expand Down Expand Up @@ -111,6 +112,8 @@ export function HomeRouteScreen() {
}
onArchiveThread={archiveThread}
onDeleteThread={confirmDeleteThread}
onSettleThread={settleThread}
onUnsettleThread={unsettleThread}
onEnvironmentChange={setSelectedEnvironmentId}
onOpenEnvironments={() =>
navigation.navigate("SettingsSheet", { screen: "SettingsEnvironments" })
Expand All @@ -120,6 +123,8 @@ export function HomeRouteScreen() {
onProjectSortOrderChange={setProjectSortOrder}
onSearchQueryChange={setSearchQuery}
onSelectThread={(thread) => {
// Settled threads are live shells: opening one is plain
// navigation, and sending a message un-settles server-side.
navigation.navigate("Thread", {
environmentId: thread.environmentId,
threadId: thread.id,
Expand Down
Loading
Loading