This repository was archived by the owner on Oct 10, 2026. It is now read-only.
Repository navigation
sync: merge upstream/main v0.0.21 (17 commits) #75
Merged
Merged
Changes from 18 commits
Commits
Show all changes
21 commits
Select commit
Hold shift + click to select a range
f6978db
chore(turbo): pass through PATHEXT (#2184)
adammansfield 40b3a80
fix(server): trim OpenCode provider model names (#2252)
adinschmidt 055897f
fix: enforce opencode >= 1.14.19 and reveal window on Wayland (#2262)
mwolson 3a1daa8
Add close buttons to toasts (#2023)
noxire-dev b7c89cf
Refresh Codex protocol bindings to `be75785504ff152fa6333e380a2d50642…
juliusmarminge b8305af
fix: increase Claude auth probe timeout to 10s (#2272)
Heinz-G e25db3a
Fix provider cache atomic write temp path collisions (#2291)
juliusmarminge aa2d385
fix(server): restore CODEX_HOME tilde expansion for Codex launches (#…
HaukeSchnau fd3b96b
Add IntelliJ project icon to the list of possible favicon paths (#1651)
basmilius b0b7b38
fix(server): detect localized Windows command errors (#2152)
raulpesilva 8d1d699
Refactor provider model selections to option arrays (#2246)
juliusmarminge d5b7690
Exclude subscribe RPCs from latency tracking (#2313)
juliusmarminge 0ee302e
fix(request-permission): add `dynamic_tool_call` to command request (…
th1m0 0d55a42
fix(web): ignore stale runtime projection snapshots (#2301)
Pedro-Revez-Silva 188df6d
Fix Claude session cwd resume drift (#2292)
juliusmarminge 00b5c3e
Add task sidebar auto-open setting (#2314)
justsomelegs ada410b
chore(release): prepare v0.0.21
t3-code-bot[bot] 6f54caa
sync: merge upstream/main v0.0.21 (17 commits)
aaditagrawal aecf1b2
ci: bump quality job timeout to 30min
aaditagrawal 5acd9ed
review: address CodeRabbit feedback on sync PR
aaditagrawal 213f782
fix(rpc): match subscribe at start of tag without trailing delimiter
aaditagrawal File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| plans/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| import { EventEmitter } from "node:events"; | ||
|
|
||
| import { describe, expect, it, vi } from "vitest"; | ||
|
|
||
| import { bindFirstRevealTrigger } from "./windowReveal.ts"; | ||
|
|
||
| describe("bindFirstRevealTrigger", () => { | ||
| it("reveals when the first trigger fires", () => { | ||
| const window = new EventEmitter(); | ||
| const webContents = new EventEmitter(); | ||
| const reveal = vi.fn(); | ||
|
|
||
| bindFirstRevealTrigger( | ||
| [ | ||
| (fire) => window.once("ready-to-show", fire), | ||
| (fire) => webContents.once("did-finish-load", fire), | ||
| ], | ||
| reveal, | ||
| ); | ||
|
|
||
| window.emit("ready-to-show"); | ||
|
|
||
| expect(reveal).toHaveBeenCalledTimes(1); | ||
| }); | ||
|
|
||
| it("reveals when only the fallback trigger fires (Wayland deadlock case)", () => { | ||
| const window = new EventEmitter(); | ||
| const webContents = new EventEmitter(); | ||
| const reveal = vi.fn(); | ||
|
|
||
| bindFirstRevealTrigger( | ||
| [ | ||
| (fire) => window.once("ready-to-show", fire), | ||
| (fire) => webContents.once("did-finish-load", fire), | ||
| ], | ||
| reveal, | ||
| ); | ||
|
|
||
| webContents.emit("did-finish-load"); | ||
|
|
||
| expect(reveal).toHaveBeenCalledTimes(1); | ||
| }); | ||
|
|
||
| it("only reveals once when multiple triggers fire", () => { | ||
| const window = new EventEmitter(); | ||
| const webContents = new EventEmitter(); | ||
| const reveal = vi.fn(); | ||
|
|
||
| bindFirstRevealTrigger( | ||
| [ | ||
| (fire) => window.once("ready-to-show", fire), | ||
| (fire) => webContents.once("did-finish-load", fire), | ||
| ], | ||
| reveal, | ||
| ); | ||
|
|
||
| webContents.emit("did-finish-load"); | ||
| window.emit("ready-to-show"); | ||
|
|
||
| expect(reveal).toHaveBeenCalledTimes(1); | ||
| }); | ||
|
|
||
| it("subscribers using `once` ignore re-emitted events after reveal", () => { | ||
| const window = new EventEmitter(); | ||
| const reveal = vi.fn(); | ||
|
|
||
| bindFirstRevealTrigger([(fire) => window.once("ready-to-show", fire)], reveal); | ||
|
|
||
| window.emit("ready-to-show"); | ||
| window.emit("ready-to-show"); | ||
|
|
||
| expect(reveal).toHaveBeenCalledTimes(1); | ||
| }); | ||
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| export type RevealSubscription = (listener: () => void) => void; | ||
|
|
||
| /** | ||
| * Wire a reveal callback to fire exactly once, on whichever of the provided | ||
| * event subscribers fires first. Each subscriber is responsible for binding | ||
| * its own event source. | ||
| * | ||
| * Used by the desktop main window's first-paint reveal logic. The standard | ||
| * Electron pattern is to wait for `ready-to-show` before calling `show()`, | ||
| * but on Linux/Wayland with `show: false`, `ready-to-show` only fires after | ||
| * `show()` is called, deadlocking that pattern. Subscribing to both | ||
| * `ready-to-show` and `did-finish-load` (or any other "renderer is alive" | ||
| * signal) lets the window surface reliably across platforms. | ||
| */ | ||
| export function bindFirstRevealTrigger( | ||
| subscribers: readonly RevealSubscription[], | ||
| reveal: () => void, | ||
| ): void { | ||
| let revealed = false; | ||
| const fire = () => { | ||
| if (revealed) return; | ||
| revealed = true; | ||
| reveal(); | ||
| }; | ||
| for (const subscribe of subscribers) { | ||
| subscribe(fire); | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,6 @@ | ||
| { | ||
| "name": "t3", | ||
| "version": "0.0.20", | ||
| "version": "0.0.21", | ||
| "license": "MIT", | ||
| "repository": { | ||
| "type": "git", | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| import { Effect, FileSystem, Path } from "effect"; | ||
| import * as Random from "effect/Random"; | ||
|
|
||
| export const writeFileStringAtomically = (input: { | ||
| readonly filePath: string; | ||
| readonly contents: string; | ||
| }) => | ||
| Effect.scoped( | ||
| Effect.gen(function* () { | ||
| const fs = yield* FileSystem.FileSystem; | ||
| const path = yield* Path.Path; | ||
| const tempFileId = yield* Random.nextUUIDv4; | ||
| const targetDirectory = path.dirname(input.filePath); | ||
|
|
||
| yield* fs.makeDirectory(targetDirectory, { recursive: true }); | ||
| const tempDirectory = yield* fs.makeTempDirectoryScoped({ | ||
| directory: targetDirectory, | ||
| prefix: `${path.basename(input.filePath)}.`, | ||
| }); | ||
| const tempPath = path.join(tempDirectory, `${tempFileId}.tmp`); | ||
|
|
||
| yield* fs.writeFileString(tempPath, input.contents); | ||
| yield* fs.rename(tempPath, input.filePath); | ||
| }), | ||
| ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.