github pingdotgg/t3code v0.1.2
T3 Code v0.1.2

2 hours ago

What's Changed

  • test(server): Claude steer test no longer hangs for 120s under CI load by @t3dotgg in #22533
  • test: remove the timing races behind recurring CI and release failures by @t3dotgg in #22523
  • feat(web): render Mermaid diagrams with pele by @maria-rcks in #21472
  • fix(mobile): keep home brand visible during secondary retries by @maria-rcks in #21388
  • fix(mobile): collapse pull request repository errors by @maria-rcks in #21389
  • fix(mobile): show terminal arrow keys before secondary controls by @maria-rcks in #21398
  • fix(mobile): update outdated servers and respect provider permissions by @maria-rcks in #21402
  • fix(mobile): live activity tracks thread status and settlement by @maria-rcks in #21405
  • fix(mobile): use current checkout for non-git projects by @maria-rcks in #21404
  • fix(mobile): add project and checkout removal by @maria-rcks in #21409
  • fix(mobile): show plans and fold settled progress notes by @maria-rcks in #21393
  • fix(mobile): open transcript file links at the resolved path by @maria-rcks in #21403
  • fix(mobile): lock the composer while queued edits save by @maria-rcks in #21390
  • fix(mobile): bring model controls in line with web by @maria-rcks in #21406
  • fix(mobile): restore archive and thread action undo by @maria-rcks in #21401
  • fix(mobile): expose background work and thread status actions by @maria-rcks in #21395
  • fix(web): keep approval menu actions compact by @Yash-Singh1 in #22566
  • fix(web): main typecheck passes again after the Mermaid switch to pele by @t3dotgg in #22570
  • test: delete 11k low-signal tests so CI runs faster and flakes less by @t3dotgg in #22557
  • fix(mobile): thread rows show wake status and elapsed time by @maria-rcks in #21394
  • fix(web,mobile): list database space for all machines in one notice by @juliusmarminge in #22575
  • test(lint): ban per-test timeouts and unreasoned skips by @juliusmarminge in #22560
  • test(web): ban frame and transition waits in browser tests by @juliusmarminge in #22561
  • test: ban wall-clock readings in tests by @juliusmarminge in #22562
  • test(server): ban real-clock waits in tests by @juliusmarminge in #22564
  • test: warn on polling loops in tests and make adapter test harnesses event-driven by @juliusmarminge in #22565
  • fix(mobile): iOS new-thread skill picker stops shifting the screen by @flamboh in #22121
  • fix(web): dialogs keep their content while they close by @flamboh in #21960
  • ci(release): build Windows x64 on Linux like arm64 by @t3dotgg in #22584
  • fix(server): idle orphaned follow-ups can be cancelled without a running parent by @t3dotgg in #22581
  • chore(web): remove "use client" directives by @flamboh in #22587
  • test(mobile): prune low-value tests in mobile (second pass) by @juliusmarminge in #22588
  • test(desktop): prune low-value tests in desktop (second pass) by @juliusmarminge in #22589
  • test(web): prune low-value tests in apps/web (second pass) by @juliusmarminge in #22591
  • test(server): prune low-value tests in apps/server (second pass) by @juliusmarminge in #22592
  • test(packages): prune low-value tests in packages (second pass) by @juliusmarminge in #22593
  • test(server): prune low-value tests in orchestration-v2 (second pass) by @juliusmarminge in #22599
  • test(web): every browser test starts with the mouse off the page by @juliusmarminge in #22556
  • chore(tailscale): drop parseTailscaleMagicDnsName, which nothing imports by @juliusmarminge in #22602
  • fix(server): make the remaining flaky server tests deterministic by @juliusmarminge in #22559
  • fix(mobile): composer chips match chat chips by @flamboh in #22518
  • fix(mobile): show each turn's diffstat on its work row by @maria-rcks in #21392
  • fix(web): silence notifications when stopping a watch by @Yash-Singh1 in #22615
  • ci(release): build macOS desktop on Blacksmith runners again by @t3dotgg in #22613
  • fix(usage): Codex compaction and resumed sessions no longer show skipped-usage warnings by @t3dotgg in #22558
  • fix(web): thread search shows the same PR badge as the sidebar by @maria-rcks in #22627
  • fix(desktop): bump Electron to 44.9.3 to block compromised eMudhra CA keys by @t3dotgg in #22645
  • test(web): ChatView's React Compiler check no longer times out on slow CI runners by @t3dotgg in #22649
  • fix(web): thread links render as chips, and thread chips show the project icon by @flamboh in #22621
  • fix(server): Stop on a delegate always clears it, even when it is stuck by @t3dotgg in #22653
  • feat(web): composer stays usable during approvals, and sending declines and redirects by @maria-rcks in #21503
  • docs(agents): name the fast commands and stop polling by @t3dotgg in #22711
  • fix(desktop): new worktrees install Electron from the local download cache by @t3dotgg in #22712
  • test(server): split replay fixtures into per-provider files by @t3dotgg in #22717
  • fix(server): delegates finish when their leftover work settles, and Grok commands stop holding runs open by @t3dotgg in #22709
  • fix(server): storage cleanup no longer counts pnpm clones as freed space by @t3dotgg in #22713
  • build: upgrade Vite+ to 1.3 and cache typecheck by @t3dotgg in #22716
  • test: local test runs use package configs and a clean env by @t3dotgg in #22714
  • fix(mobile): restore low-latency decoding for simulator streams by @Yash-Singh1 in #22733
  • fix(marketing): typecheck cache no longer misses when the shell env changes by @t3dotgg in #22735
  • build(setup): leaner installs on Mac and Linux, cross-device store warning, setup-done marker by @t3dotgg in #22718
  • build: upgrade pnpm to 12 for 4x faster installs by @t3dotgg in #22738
  • refactor(web): the timeline minimap lives in its own file by @juliusmarminge in #22662
  • refactor(web): timeline work entry rows and tool icons live in their own files by @juliusmarminge in #22674
  • refactor(web): timeline work group and live activity rows live in their own file by @juliusmarminge in #22675
  • refactor(web): timeline user message rows and context chips live in their own files by @juliusmarminge in #22676
  • refactor(web): timeline assistant and orchestration event rows live in their own files by @juliusmarminge in #22677
  • refactor(web): timeline row derivation, position restore and find reader live in hooks by @juliusmarminge in #22682
  • refactor(web): the command palette's theme items live in their own file by @juliusmarminge in #22679
  • refactor(web): the command palette's thread items come from their own hook by @juliusmarminge in #22687
  • refactor(web): the command palette's project items and pure helpers live in their own files by @juliusmarminge in #22699
  • refactor(web): the command palette's add-project views are components by @juliusmarminge in #22707
  • feat(cli): start, message, and read threads from the terminal with t3 thread by @t3dotgg in #22732
  • refactor(web): composer attachment tiles live in their own component by @juliusmarminge in #22689
  • refactor(web): resting image previews and queued attachments are their own components by @juliusmarminge in #22719
  • refactor(web): composer mode controls and footer actions live in ComposerFooterControls by @juliusmarminge in #22720
  • refactor(web): typing no longer re-renders the composer model picker by @juliusmarminge in #22721
  • refactor(web): composer suggestion lists are built by useComposerMenuItems by @juliusmarminge in #22722
  • refactor(web): the sidebar's thread rows live in their own file by @juliusmarminge in #22696
  • refactor(web): sidebar list markers and draft rows live in their own files by @juliusmarminge in #22729
  • feat(dev): first dev start seeds real data and warms deps by @t3dotgg in #22744
  • refactor(web): the pull requests column lives in its own component by @juliusmarminge in #22671
  • refactor(web): the pull request header's crumbs, title editor and base branch live in their own components by @juliusmarminge in #22672
  • refactor(web): the pull request header's actions live in their own components by @juliusmarminge in #22702
  • refactor(web): the pull request detail loader lives in its own hook by @juliusmarminge in #22703
  • refactor(web): the pull request list's rows read the speed-mode modifier themselves by @juliusmarminge in #22704
  • refactor(web): the pull requests page's scope and grouping hooks live in their own module by @juliusmarminge in #22705
  • refactor(web): the pull requests route only validates its search; the page lives under components by @juliusmarminge in #22706
  • perf(web): Shift re-renders only each row's quick-action group by @juliusmarminge in #22726
  • refactor(web): the pull request list's grouping helper lives in a logic module by @juliusmarminge in #22727
  • refactor(web): chat markdown code blocks live in their own module by @juliusmarminge in #22690
  • refactor(web): the Mermaid code block lives in its own component file by @juliusmarminge in #22691
  • refactor(web): chat markdown tables and details live in their own components by @juliusmarminge in #22692
  • refactor(web): chat markdown links and file chips live in their own modules by @juliusmarminge in #22693
  • refactor(web): chat markdown images and videos live in their own module by @juliusmarminge in #22694
  • refactor(web): ChatView's module-level helpers live in their own files by @juliusmarminge in #22665
  • refactor(web): ChatView's persistent terminal drawers live in their own component by @juliusmarminge in #22680
  • refactor(web): ChatView's right panel lives in its own component by @juliusmarminge in #22700
  • refactor(web): ChatView's timeline follow and anchoring lives in useTimelineFollow by @juliusmarminge in #22701
  • refactor(web): ChatView's machine and server-update banners live in useSystemComposerBanners by @juliusmarminge in #22710
  • refactor(web): ChatView's subagent, goal, background-work and branch banners are built in ThreadActivityBanners by @juliusmarminge in #22725
  • refactor(web): ChatView's draft machine routing lives in useDraftEnvironmentRouting by @juliusmarminge in #22728
  • refactor(web): ChatView's send preparation is pure functions in ChatView.logic by @juliusmarminge in #22734
  • refactor(web): the archived threads settings page lives in its own file by @juliusmarminge in #22666
  • refactor(web): the typography settings section lives in its own file by @juliusmarminge in #22667
  • refactor(web): the appearance settings page lives in its own file by @juliusmarminge in #22668
  • refactor(web): the background activity setting and its dialog live in their own file by @juliusmarminge in #22669
  • refactor(web): the connections page's pure helpers live in ConnectionsSettings.logic by @juliusmarminge in #22683
  • refactor(web): authorized clients and endpoint rows live in their own file by @juliusmarminge in #22684
  • refactor(web): saved and T3 Connect environment rows live in their own file by @juliusmarminge in #22685
  • perf(server): skip the macOS xcrun git shim by @t3dotgg in #22759
  • docs(agents): read vendored .repos with git show when sparse-excluded by @t3dotgg in #22764
  • fix(web): ⌘Z undoes a settle even when the composer has focus by @t3dotgg in #22607
  • feat(scripts): one command checks what the branch changed by @t3dotgg in #22767
  • fix(scripts): check:changed no longer skips knip after a removed import by @t3dotgg in #22784
  • perf(dev): faster first load for shared dev servers by @t3dotgg in #22776
  • fix(server): stalled clones say "Stalled" instead of a frozen speed by @t3dotgg in #22780
  • fix(web): steers split a finished turn's work instead of stacking under it by @t3dotgg in #22783
  • fix(web): images on their own line no longer sit beside their label by @t3dotgg in #22787
  • fix(release): include pnpm hook in Vercel uploads by @t3dotgg in #22813
  • fix(release): keep Vercel warnings out of deployment URLs by @t3dotgg in #22817
  • fix(queue): send selected held messages when a thread is stopped by @Yash-Singh1 in #22790
  • fix(server): delegated Claude children follow your subagent cache TTL setting by @t3dotgg in #22841
  • fix(server): t3 pair in a worktree no longer falls back to the live install by @t3dotgg in #22855
  • fix(server): avoid expensive diff minimization in status refreshes by @voltcrash in #21872
  • fix(codex): keep every path of a multi-file patch by @only21mil in #22541
  • fix(gitlab): merge request diffs page 30 files at a time so GitLab 15.7 to 17.10 answer by @Mnigos in #21909
  • fix(server): keep Antigravity question options and no-custom-answer flag in V2 by @fixfon in #22019
  • fix(server): commit prompts no longer repeat CLAUDE.md when it matches AGENTS.md by @t3dotgg in #22848
  • fix(mcp): point a bare thread uuid at its mcp: thread in thread_not_found by @fixfon in #22452
  • fix(opencode): out-of-funds failures show OpenCode's message instead of a usage limit by @fixfon in #22596
  • fix(shared): accept a pasted ChatGPT callback URL that is missing http:// by @Project516 in #21750
  • fix(server): the background service picks up JAVA_HOME from the login shell by @t3dotgg in #22856
  • fix(server): answered questions say "already answered" instead of "not found" by @t3dotgg in #22850
  • fix(desktop): an abandoned browser sign-in no longer blocks T3 Connect for 3 minutes by @t3dotgg in #22903
  • fix(server): agents get a short, current model list instead of a 55k-character catalog dump by @t3dotgg in #22889
  • docs(agents): proof for a bug fix depends on the bug by @juliusmarminge in #23008
  • fix(server): removing a worktree on Windows no longer deletes what its junctions point to by @SunkenInTime in #21099
  • perf(web): a streaming thread re-renders only its own sidebar row by @juliusmarminge in #22730
  • refactor(web): the add environment dialog owns its form state by @juliusmarminge in #22686
  • fix(desktop): use Clerk's upstream fix for abandoned browser sign-ins by @wobsoriano in #23038
  • feat: show automation messages as compact timeline rows by @juliusmarminge in #22638
  • feat(server,web,mobile): approvals in full access say why Claude asked by @juliusmarminge in #22546
  • feat(claude): idle compaction has a global default and per-instance overrides by @juliusmarminge in #23037
  • perf(web): typing no longer re-renders the traits picker or attach button by @juliusmarminge in #23040
  • refactor(web): the composer's layout and provider hooks live in their own files by @juliusmarminge in #23042
  • refactor(web): the prompt stash lives in useComposerStash by @juliusmarminge in #23046
  • refactor(web): composer context imports live in useComposerContextImport by @juliusmarminge in #23048
  • refactor(web): composer file intake lives in useComposerAttachmentIntake by @juliusmarminge in #23049
  • refactor(web): the composer's footer controls render in ComposerControlsBar by @juliusmarminge in #23058
  • refactor(web): composer key handling lives in useComposerCommandKey by @juliusmarminge in #23060
  • refactor(web): ChatView's send paths live in useComposerSend by @juliusmarminge in #23062
  • refactor(web): ChatView's terminal actions live in useChatTerminalActions by @juliusmarminge in #23063
  • refactor(web): ChatView's right panel actions live in useRightPanelActions by @juliusmarminge in #23064
  • refactor(web): ChatView's snooze, settle, and checkout actions live in useThreadLifecycle by @juliusmarminge in #23065
  • refactor(web): ChatView's revert, rollback, and fork live in useTimelineRewind by @juliusmarminge in #23066
  • refactor(web): ChatView's attachment preview handoff lives in useAttachmentPreviewHandoff by @juliusmarminge in #23067
  • refactor(web): ChatView's project clone banner lives in useProjectCloneBanner by @juliusmarminge in #23068
  • refactor(web): ChatView's model, mode, and workspace choices live in useComposerSelection by @juliusmarminge in #23069
  • refactor(web): ChatView's pull request checkout lives in usePullRequestDraftThread by @juliusmarminge in #23070
  • refactor(web): ChatView's thread derivations are tested functions in ChatView.logic by @juliusmarminge in #23071
  • refactor(web): ChatView's paste-to-focus, titlebar controls, and timeline overlays move out by @juliusmarminge in #23072
  • fix(cursor): a closed-stream write in the Cursor SDK no longer stops the server by @t3dotgg in #22897
  • fix(server): Codex no longer offers a one-click update for installs it can't detect by @koushikxd in #22504
  • fix(pi): declare properties on MCP tool schemas that omit them by @tlconde in #21822
  • fix(server): a desktop backend whose launcher died shuts down cleanly instead of crashing by @SunkenInTime in #22471
  • fix(mobile): chat feed no longer re-derives on every render by @t3dotgg in #22913
  • docs(user): the outside agents guide says which addresses agents can sign in over by @Gourav224 in #22377
  • fix(server): HTML preview reports a browser start error instead of an internal error by @t3dotgg in #22895
  • fix(tailscale): a timed-out tailscale probe no longer outlives its call by @t3dotgg in #22900
  • docs(composer): queued messages follow the Follow-up behavior setting by @t3dotgg in #22857
  • fix(server): failed provider updates say why by @koushikxd in #22506
  • test(telemetry): keep fixture PIDs from colliding with the test worker by @only21mil in #21446
  • fix(server): server tests resolve the macOS temp dir symlink by @nabettu in #21442
  • fix(scripts): mobile lint fails instead of passing when ktlint or detekt is missing by @t3dotgg in #22896
  • fix(server): t3_thread_read clamps oversized page sizes instead of failing by @t3dotgg in #22901
  • fix(mobile): opening a pull request no longer crashes with "Maximum update depth exceeded" by @nabettu in #22600
  • fix(web): PR Code tab keeps its files after a refresh with an unchanged diff by @t3dotgg in #22917
  • fix(web): finished provider updates no longer leave a hidden spinner in the sidebar by @t3dotgg in #22912
  • fix(composer): mentions of files like posts.$postId.tsx or [id].tsx stay chips by @t3dotgg in #22922
  • refactor(web): resuming an interrupted run lives in its own hook by @juliusmarminge in #23087
  • refactor(web): proposed-plan follow-ups and implement-in-new-thread live in their own hooks by @juliusmarminge in #23091
  • refactor(web): multiple-model sends live in their own hook by @juliusmarminge in #23094
  • refactor(web): the composer send reads its own settings and draft instead of taking them from ChatView by @juliusmarminge in #23095
  • refactor(web): ComposerControlsBar renders without a memo() wrapper by @juliusmarminge in #23093
  • refactor(web): chat shortcuts live with the hooks that own their actions by @juliusmarminge in #23097
  • refactor(web): ChatView's timeline banners render in ChatBannerLane by @juliusmarminge in #23101
  • fix(web): the branch toolbar and thread details panel stay cached while a reply streams by @juliusmarminge in #23103
  • fix(server): scheduled tasks no longer jump to the top when toggled by @t3dotgg in #22899
  • fix(server): Forgejo and GitCafe pull requests link to their threads again by @MarcoDotIO in #22937
  • fix(server): pushes the remote refuses say why instead of a generic failure by @t3dotgg in #22904
  • fix(composer): typing a price no longer opens the skill menu by @MarcoDotIO in #21519
  • fix(web): thread details PR merge uses the last selected merge method by @tris203 in #22399
  • fix(web): a Usage toggle shortcut now goes back instead of staying on Usage by @t3dotgg in #22905
  • fix(web): quote comment box stays on screen for long code lines by @EtanHey in #22149
  • fix(web): right panel launcher letters open their surface instead of typing into the composer by @t3dotgg in #22898
  • fix(web): ../ file links outside the workspace open as host files by @t3dotgg in #22853
  • fix(shared): recognize relative folder links with trailing slash by @macodev00 in #22188
  • fix(client): usage limits skip disabled connections by @M4NU5 in #22936
  • fix(web): imported VS Code themes keep destructive buttons red by @lgollut in #21924
  • fix(shared): Azure DevOps repositories with a space in the name list their pull requests by @Tabonx in #22782
  • fix(opencode): cancelled todos no longer keep the todo list running by @MarcoDotIO in #22938
  • fix(web): copy to machine clones the fork, not its upstream by @AKolenda in #22492
  • fix(server): JetBrains IDEs open file links at the right column by @levochkaa in #22826
  • fix(server): sync pull request draft status changes by @Yash-Singh1 in #22832
  • test(web): chat shortcut test types through the composer handle by @juliusmarminge in #23126
  • fix(source-control): merge messages drop Claude Code's current claude.com footer by @MarcoDotIO in #23133
  • fix(build): pin Node 26.12.1 for development and standalone releases by @PixPMusic in #23165
  • fix(mobile): keep Duo toolbar actions clear of workspace tabs by @juliusmarminge in #22976
  • fix(mobile): respect Duo safe areas in overlays by @juliusmarminge in #22977
  • fix(mobile): retain resting scroll offsets through Duo inset changes by @juliusmarminge in #22978
  • fix(mobile): deliver the first tab selection after Duo folding by @juliusmarminge in #22979
  • fix(mobile): use native full-width sheets on iPhone Duo by @juliusmarminge in #22980
  • fix(mobile): the pull requests tab's empty detail asks for a pull request by @juliusmarminge in #23143
  • fix(mobile): the iPhone Duo keeps list titles through folds and unfolds with its sidebar by @juliusmarminge in #23144
  • fix(mobile): the iPhone Duo searches from a field at the bottom of its list by @juliusmarminge in #23145
  • fix(mobile): a closed search no longer risks freezing the app by @juliusmarminge in #23146
  • fix(mobile): folding the Duo keeps the thread's end or the reader's line in place by @juliusmarminge in #23147
  • fix(mobile): the iPhone Duo's search field and composer line up with its tab bar by @juliusmarminge in #23148
  • fix(mobile): Screens 5.0.0-t3.36 stops an iPhone Duo unfold crash by @juliusmarminge in #23149
  • fix(mobile): the iPhone Duo's inspector panes use the full column by @juliusmarminge in #23150
  • fix(gitcafe): show line counts on linked and listed pull requests by @maria-rcks in #22633
  • docs(import): correct conversation size and batch limits by @only21mil in #23226
  • fix(server): stop abandoned turns before continuing threads by @Yash-Singh1 in #23169
  • feat(server): export how long runs take and how they end by @juliusmarminge in #22094
  • fix(mobile): new-thread heading clears the iPad header by @juliusmarminge in #23206
  • fix(pi): fork completed turns while the next turn is running by @juliusmarminge in #23052
  • fix(mobile): drafts swipe to discard and every row move animates by @juliusmarminge in #23205
  • feat(server): webhook filters fan out over arrays with a [] path wildcard by @juliusmarminge in #23282
  • fix(web): Arabic and Hebrew text reads and navigates right to left by @yzn-h in #22777
  • fix(client-runtime): refresh Git refs when the RPC session changes by @Yash-Singh1 in #23314
  • fix(web): cap list layout passes to prevent React error 185 by @Yash-Singh1 in #23315
  • fix(mobile): align iPad composer without shifting on keyboard focus by @juliusmarminge in #23355
  • feat(gitcafe): request reviewers and apply labels on GitCafe pull requests by @juliusmarminge in #23034
  • fix(source-control): clones retry over HTTPS when the SSH key is refused by @juliusmarminge in #23170
  • fix(mobile): the iOS composer reopens where you left a long draft by @shivamhwp in #23096
  • fix(mobile): preserve new-thread drafts and native header layout by @juliusmarminge in #23366
  • feat: ChatGPT Business usage limits offer a copyable admin request by @juliusmarminge in #23361
  • fix(web): paused sidebar videos stop reloading after every command by @shivamhwp in #23106
  • chore(typecheck): typescript is the tsc-rs drop-in, no effect-tsgo patch by @t3dotgg in #23023
  • fix(mobile): Dynamic Island status no longer wraps next to other Live Activities by @t3dotgg in #23327
  • perf(web): streamed reply text no longer re-renders ChatView by @juliusmarminge in #23117
  • perf(web): visit marks during a reply no longer re-render ChatView by @juliusmarminge in #23124
  • fix(server): a Claude agent stops when the server that started it dies by @shivamhwp in #23389
  • fix(server): SSH hosts no longer keep every old 300 MB runtime after desktop updates by @shivamhwp in #23113
  • fix(settings): older clients connect again after idle compaction modes by @juliusmarminge in #23454
  • fix(mobile): unify draft and thread navigation and composer behavior by @juliusmarminge in #23467
  • ci: setup survives npm registry outages by @t3dotgg in #23582
  • feat(web,mobile): messages from other agents fold into one-line rows by @shivamhwp in #23135
  • fix(web): subagent bar keeps model and status readable in narrow chat columns by @shivamhwp in #23502
  • fix(chat): mark tool images beyond the preview limit by @only21mil in #23595
  • fix(web): provider updates no longer pop toasts on launch by @flamboh in #23233
  • fix(server): probe the Windows startup environment asynchronously by @UtkarshUsername in #21720
  • fix(usage): count initial Codex requests with inherited totals by @PixPMusic in #23729
  • fix(web): let toast content use the full accordion width by @Yash-Singh1 in #23777
  • fix(web): sidebar follows the active thread after history navigation by @juliusmarminge in #23519

New Contributors

Full Changelog: v0.1.1...v0.1.2

Don't miss a new t3code release

NewReleases is sending notifications on new releases.