Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
ca3f973
feat(contracts): clients tolerate union members they don't know yet (…
juliusmarminge Oct 5, 2026
5c03ced
refactor(contracts): project icons decode forward-compatibly instead …
juliusmarminge Oct 5, 2026
31f9d83
Removed an unused helper from the Android push payload builder (#16116)
kridaydave Oct 5, 2026
1c33f3b
perf(mobile): reduce shell cache encoding work (#15096)
juliusmarminge Oct 5, 2026
c71ca06
perf(mobile): defer audio recorder creation until dictation (#15248)
juliusmarminge Oct 5, 2026
4dbc012
feat(server): bump Antigravity ACP agent to 1.3.0 (#15746)
Droyder7 Oct 5, 2026
9d029a1
feat(acp): support local provider commands (#16021)
maria-rcks Oct 5, 2026
3e6b450
fix(server): honor submodule settings when creating worktrees (#15594)
BlankParticle Oct 5, 2026
194c73f
chore(deps): upgrade Effect to stable 4.0.1 (#16138)
juliusmarminge Oct 5, 2026
b12b3f7
fix(server): worktree threads survive a local branch named t3code (#1…
juliusmarminge Oct 5, 2026
6f9cea0
chore(refs): sync Effect and Alchemy references to 4.0.1 and beta.80 …
juliusmarminge Oct 5, 2026
039ddf1
fix(web): match subagent timestamp fonts to chat (#16151)
StiensWout Oct 5, 2026
5b613de
fix(web): wrap full status text in composer hover details (#16158)
UtkarshUsername Oct 5, 2026
2bffcc5
ci: run the transfer report job on Blacksmith (#16178)
juliusmarminge Oct 5, 2026
f32c23c
fix(server): Stop also stops delegated tasks and pull request watches…
t3dotgg Oct 5, 2026
a172e1c
feat: native /goal for Codex and Claude, with goal status in the UI (…
t3dotgg Oct 5, 2026
73fd3c1
fix(server): use current SQL import in thread stop tests
juliusmarminge Oct 5, 2026
f973b1d
fix(server): name the cause of a failed git command (#8645)
walid-baharwal Oct 5, 2026
21eb9a4
fix(server): PR watch wakes the agent when a bot edits its review com…
Gigioxx Oct 5, 2026
24238fe
feat(source-control): omit agent credits from PR merge messages (#16192)
juliusmarminge Oct 5, 2026
5cebd3b
fix(clients): dropped connections say why in the client trace (#16200)
t3dotgg Oct 5, 2026
404e229
fix(server): PR watch reports a required check that first appears alr…
ScottN-PV Oct 5, 2026
2a68a77
fix: a failed DPoP key load and a fresh maintenance read are no longe…
juliusmarminge Oct 5, 2026
5eb8773
fix: tool screenshots show as images, not base64 text (#16199)
t3dotgg Oct 5, 2026
f5eb250
docs(mcp): thread tools reach threads in any project (#15947)
t3dotgg Oct 5, 2026
207f6a1
fix(threads): threads watching a PR stay in Working instead of bounci…
t3dotgg Oct 5, 2026
3d2a98f
chore(deps): bump cursor sdk and astro to clear vulnerable transitive…
juliusmarminge Oct 5, 2026
54b6b66
fix(server): PR sync waits out a GitHub rate limit pause instead of f…
t3dotgg Oct 5, 2026
7dfb86a
feat(server): scheduled tasks can run on a webhook (#15085)
juliusmarminge Oct 5, 2026
b070e52
feat(relay): forward webhook requests to the environment's tunnel (#1…
juliusmarminge Oct 5, 2026
aee889b
feat(mobile): create and copy webhook automations (#15087)
juliusmarminge Oct 5, 2026
ea4b443
feat(web): create webhook automations and inspect their deliveries (#…
juliusmarminge Oct 5, 2026
f33b060
feat(relay,server,web,mobile): opt-in to hold webhooks while offline …
juliusmarminge Oct 5, 2026
9e5229b
fix(server): PR watches stop burning GitHub's rate limit and giving u…
t3dotgg Oct 5, 2026
cbb731b
fix(server): delegation sees a fixed provider without the app open (#…
t3dotgg Oct 5, 2026
2afe87e
feat: new branches use the shorter t3/ prefix (#16220)
t3dotgg Oct 5, 2026
c138163
perf: cheaper shell refreshes, one copy of Codex streaming text, no M…
t3dotgg Oct 5, 2026
677d152
feat: agents can show HTML pages inline in threads (#15968)
t3dotgg Oct 5, 2026
25d5c7c
chore(relay): match Alchemy to the PS-80 Postgres cluster (#16228)
juliusmarminge Oct 5, 2026
9f61ba6
feat: agents ask the user for a secret through a private card (#15907)
juliusmarminge Oct 5, 2026
3da82d5
feat(web): see and stop pull request watches in the thread details ca…
t3dotgg Oct 5, 2026
27ab455
fix(server): ACP mode states with null descriptions are no longer dro…
juliusmarminge Oct 5, 2026
ca95267
fix(server): finished outbox rows and old PR cache files are pruned (…
juliusmarminge Oct 5, 2026
cfa4f76
fix(relay): releasing a tunnel that still has a connector no longer 5…
juliusmarminge Oct 5, 2026
7a047d0
refactor(server,relay): webhook capabilities live in services, not ha…
juliusmarminge Oct 5, 2026
ee6991a
fix(server): a T3 Connect preferences save finishes even if the clien…
juliusmarminge Oct 6, 2026
6302d66
refactor(server): import service modules as namespaces, not aliased l…
juliusmarminge Oct 6, 2026
fc4ecc8
feat(server): log how long PR watches stay quiet before they end (#16…
t3dotgg Oct 6, 2026
1024941
feat(server,web): choose where new worktrees are created (#16231)
juliusmarminge Oct 6, 2026
dcbaf05
perf(server): idle status polls and PR sweeps start fewer git process…
t3dotgg Oct 6, 2026
758dc29
perf(server): PR watches spend ~90% fewer GitHub points by checking a…
t3dotgg Oct 6, 2026
4df84a7
fix(pull-requests): PR detail reads no longer drain the GitHub quota …
t3dotgg Oct 6, 2026
ecfdda5
refactor: layer variables are named layer or layerXyz (#16282)
juliusmarminge Oct 6, 2026
9422e2e
refactor(server): T3 Connect link capabilities live in a CloudLink se…
juliusmarminge Oct 6, 2026
db4d0a8
fix(web): sidebar drag and drop no longer snaps back (#16291)
t3dotgg Oct 6, 2026
64275ae
fix(web): inline HTML renders no longer trap the thread's scroll (#16…
t3dotgg Oct 6, 2026
3d17862
refactor(server): one module per service instead of Services/ and Lay…
juliusmarminge Oct 6, 2026
ea54be7
chore(review): configure CodeRabbit in TypeScript (#16281)
esthor Oct 6, 2026
6262e5f
docs: put the Effect and web UI review rules in the docs (#16286)
esthor Oct 6, 2026
31d0c8a
chore(lint): require a reason on every lint and type-checker suppress…
esthor Oct 6, 2026
8bd7745
refactor(relay): import HookInboxObject once, as a namespace (#16307)
juliusmarminge Oct 6, 2026
f36df18
fix(web): a rejected desktop-local credential is not retried every po…
juliusmarminge Oct 6, 2026
5afe18e
feat(desktop): the renderer's bootstrap token rotates every 12 hours …
juliusmarminge Oct 6, 2026
9c49228
fix(web): recover from a closed IndexedDB connection (#16311)
juliusmarminge Oct 6, 2026
18c1210
fix(relay): stop forcing manual relay deploys by default (#13563)
juliusmarminge Oct 6, 2026
7b32b2c
feat(relay): measure the managed tunnel backlog (#13564)
juliusmarminge Oct 6, 2026
41d2535
feat(relay): clean up tunnels of hosts that never registered recovery…
juliusmarminge Oct 6, 2026
6bfc8ba
perf(relay): delete expired tunnels four at a time within a time budg…
juliusmarminge Oct 6, 2026
6b456a9
feat(connect): tell users when an idle tunnel was removed (#13567)
juliusmarminge Oct 6, 2026
204a639
docs(relay): add the legacy tunnel cleanup rollout runbook (#13568)
juliusmarminge Oct 6, 2026
c21f93e
chore(review): point CodeRabbit at the web UI conventions (#16324)
esthor Oct 6, 2026
3a9c1a6
chore(review): turn off CodeRabbit's docstring coverage check (#16328)
esthor Oct 6, 2026
ff873b2
refactor(server): CloudLink keeps only the link lifecycle; pure check…
juliusmarminge Oct 6, 2026
68e50db
refactor(server): CloudLink fails with its own errors; the connect ro…
juliusmarminge Oct 6, 2026
99db70c
refactor(server): replay guards stay in CloudLink (#16349)
juliusmarminge Oct 6, 2026
017c9a0
fix(server): forks no longer merge into their upstream repo's project…
t3dotgg Oct 6, 2026
2103bfa
fix(server): stop the startup project sync from delaying the app wind…
Mnigos Oct 6, 2026
ff2fda7
fix(web): avoid blocking image preparation conversions (#13342)
Bil0000 Oct 6, 2026
fec71c5
fix(server): return partial workspace index on timeout (#11500)
Michel-Liao Oct 6, 2026
b69f8b5
fix(server): probe project favicon candidates concurrently (#12543)
ishaanko Oct 6, 2026
570b72d
fix(observability): a failing trace disk no longer stalls the server …
t3dotgg Oct 6, 2026
447046b
fix(server): status polling no longer locks the git index (#14718)
ahalekelly Oct 6, 2026
71964e6
perf(shared): scan PATH once per command before spawning, not on ever…
SkiTee3000 Oct 6, 2026
61a0ec9
fix(server): main's startup auto-pull test compiles again (#16357)
t3dotgg Oct 6, 2026
24edd55
fix(server): project favicons stop being rescanned every minute (#16206)
t3dotgg Oct 6, 2026
255ac27
fix(server): Claude limits load again for users with large transcript…
t3dotgg Oct 6, 2026
3236d8c
Add esthor to the list of GitHub users
juliusmarminge Oct 6, 2026
eef36a6
fix(server): caches and ids are written atomically (#16242)
juliusmarminge Oct 6, 2026
327a29e
fix(server): one-shot initializers no longer race (#16260)
juliusmarminge Oct 6, 2026
bfe40e6
fix(server): the PR cache sweep only removes real entry files (#16285)
juliusmarminge Oct 6, 2026
4b3568b
chore: keep one copy each of undici 8 and ws 8 (#16211)
juliusmarminge Oct 6, 2026
24e4b62
fix(shared): DrainableWorker keeps running after a failed item (#16223)
juliusmarminge Oct 6, 2026
c299308
fix(server): metrics count interrupted work on the monotonic clock (#…
juliusmarminge Oct 6, 2026
efeeb77
refactor(web): import connection storage as a namespace in its test (…
juliusmarminge Oct 6, 2026
2d162d1
fix(contracts): trimmed IDs round-trip (#16300)
juliusmarminge Oct 6, 2026
fad6732
fix(server): main's settings, keybindings and session tests compile a…
juliusmarminge Oct 6, 2026
ff397a2
chore(lint): catch known tags with Effect.catchTags (#16361)
esthor Oct 6, 2026
25f0b2a
fix(observability): T3 Connect tracing stops at the relay boundary (#…
juliusmarminge Oct 6, 2026
0ecb78e
fix(relay): error and deadline responses carry CORS headers (#16253)
juliusmarminge Oct 6, 2026
8f75697
fix(web): bring back the live shimmer on work log rows (#16372)
juliusmarminge Oct 6, 2026
83b982a
refactor: Effect code gets UUIDs and SHA-256 from Effect's Crypto (#1…
esthor Oct 6, 2026
4427358
fix(relay): export traces through one tracer, one request span each (…
juliusmarminge Oct 6, 2026
4ae976d
fix(server): Pi thread titles use linked PR context (#16210)
juliusmarminge Oct 6, 2026
76d3c96
fix(desktop): retry transient bearer bootstrap and degrade on session…
jamesvillarrubia Oct 6, 2026
2ba038d
merge upstream/main into fork
adampeterhiggins Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
37 changes: 37 additions & 0 deletions .coderabbit.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { defineConfig } from "@coderabbitai/config";

export default defineConfig({
reviews: {
high_level_summary: false,
review_status: false,
auto_review: {
enabled: true,
},
pre_merge_checks: {
docstrings: { mode: "off" },
},
path_filters: [
// Vendored read-only reference checkouts of upstream Effect and Alchemy
// (see scripts/lib/reference-repos.ts). Nothing imports from them.
"!.repos/**",
],
path_instructions: [
{
path: "{apps,packages,infra}/**/*.ts",
instructions: "Hold changed code to the rules in docs/internals/effect-services.md.",
},
{
path: "apps/web/src/**/*.{tsx,css}",
instructions: "Hold changed code to the rules in docs/internals/web-ui.md.",
},
],
},
knowledge_base: {
code_guidelines: {
filePatterns: [
{ files: "docs/internals/effect-services.md", applyTo: "{apps,packages,infra}/**/*.ts" },
{ files: "docs/internals/web-ui.md", applyTo: "apps/web/src/**/*.{tsx,css}" },
],
},
},
});
9 changes: 0 additions & 9 deletions .coderabbit.yaml

This file was deleted.

2 changes: 1 addition & 1 deletion .cursor/rules/cursor-cloud.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,4 @@ Gradle auto-downloads any additional pinned SDK packages on demand.
## Known flaky tests (unrelated to setup)

- `apps/server/src/git/GitManager.test.ts` (cross-repo PR metadata, can time out at 12s).
- `apps/server/src/provider/Layers/ProviderRegistry.test.ts` (codex binaryPath re-probe ordering).
- `apps/server/src/provider/ProviderRegistry.test.ts` (codex binaryPath re-probe ordering).
1 change: 1 addition & 0 deletions .github/VOUCHED.td
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ github:cursoragent
github:D3OXY
github:dbalders
github:eggfriedrice24
github:esthor
github:extoci
github:f-trycua
github:flamboh
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,11 @@ jobs:
transfer-report:
name: Transfer report artifact
needs: test_server
runs-on: ubuntu-24.04
# On Blacksmith like every other job here: the GitHub-hosted queue is shared
# with the PR bots and can leave this job waiting until it is abandoned,
# which fails `Check` on an otherwise green run.
runs-on: blacksmith-2vcpu-ubuntu-2404
timeout-minutes: 5
steps:
- name: Require transfer measurements
uses: actions/download-artifact@v8
Expand Down
11 changes: 6 additions & 5 deletions .github/workflows/deploy-relay.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ on:
push:
branches:
- main
# Alchemy does not redeploy the Worker when only a Config value read in its
# Init changes (alchemy-run/alchemy#1831), so a changed repository variable
# needs a forced deploy to reach production.
# Redeploys main after a variable or secret change. Alchemy redeploys the
# Worker when a value it reads changes, so force is rarely needed, and it
# replaces the Postgres runtime role (alchemy-run/alchemy#1832).
workflow_dispatch:
inputs:
force:
description: Redeploy every resource, including ones with no detected changes
description: Redeploy every resource, including ones with no detected changes. Replaces the Postgres runtime role.
type: boolean
default: true
default: false

permissions:
contents: read
Expand Down Expand Up @@ -40,6 +40,7 @@ jobs:
RELAY_API_ZONE_NAME: ${{ vars.RELAY_API_ZONE_NAME }}
RELAY_TUNNEL_ZONE_NAME: ${{ vars.RELAY_TUNNEL_ZONE_NAME }}
RELAY_TUNNEL_CLEANUP_MODE: ${{ vars.RELAY_TUNNEL_CLEANUP_MODE }}
RELAY_LEGACY_TUNNEL_CLEANUP_MODE: ${{ vars.RELAY_LEGACY_TUNNEL_CLEANUP_MODE }}
CLERK_PUBLISHABLE_KEY: ${{ vars.CLERK_PUBLISHABLE_KEY }}
CLERK_JWT_AUDIENCE: ${{ vars.CLERK_JWT_AUDIENCE }}
APNS_ENVIRONMENT: ${{ vars.APNS_ENVIRONMENT }}
Expand Down
8 changes: 8 additions & 0 deletions .repos/alchemy-effect/.github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,14 @@ jobs:
- name: Run Typecheck
run: pnpm tsc -b

# Must run after `tsc -b`: it reads distilled's emitted `lib/*.d.ts`,
# and stale/missing declarations resolve to `any`.
- name: Lint providers
run: pnpm lint:providers

- name: Test CLI launcher
run: timeout 240 pnpm test test/Cli/launcher.test.ts test/Cli/exitCodes.test.ts --retry 0 --concurrency 1

- name: Check API JSDocs
run: pnpm docs:check-jsdoc

Expand Down
17 changes: 15 additions & 2 deletions .repos/alchemy-effect/.github/workflows/pkg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ on:
- "tsconfig.json"
- ".github/workflows/pkg.yml"
pull_request:
types: [opened, synchronize, reopened, labeled]
paths:
- "submodules/distilled"
- "packages/**"
Expand Down Expand Up @@ -54,6 +55,7 @@ jobs:
# Pack the pull request head rather than the synthetic merge commit,
# so every tarball is addressed by a commit that exists on the PR.
ref: ${{ github.event.pull_request.head.sha || github.sha }}
fetch-depth: 0

- name: Checkout distilled
run: git submodule update --init --depth=1 --checkout -- submodules/distilled
Expand All @@ -69,19 +71,29 @@ jobs:
install: true
require-lockfile: true

# Cold-building the alchemy package peaks near 17 GB of heap, which
# starves the runner agent on a 32 GB machine and drops the job. A soft
# limit holds the peak near 11 GB for roughly twice the compile time.
- name: Build packages
env:
GOMEMLIMIT: 6GiB
GOGC: "40"
run: pnpm build:pkg

# Keep the directory lists in sync with the `build:pkg` script.
# The @distilled.cloud list is alchemy's dependency set, which `build:pkg`
# derives with `--filter=alchemy...`; keep the @alchemy.run list in sync.
- name: Pack packages
id: pack
run: >-
pnpm exec pkg pack
${{ contains(github.event.pull_request.labels.*.name, 'force-ci') && '--all' || '' }}
--rebuild-all-path 'scripts/copy-package-files.ts'
--group 'alchemy=./packages/alchemy'
--group '@alchemy.run[Collapsed]=./packages/{better-auth,cloudflare-runtime,frontend-frameworks,node-utils,floci,pkg}'
--group '@distilled.cloud[Collapsed]=./submodules/distilled/packages/{core,aws,axiom,cloudflare,fly-io,github,hetzner,neon,planetscale,railway,stripe}'
--group '@distilled.cloud[Collapsed]=./submodules/distilled/packages/{core,acme,aws,axiom,cloudflare,doppler,fly-io,github,hetzner,infisical,neon,prisma,planetscale,railway,stripe,zerossl}'

- name: Vouch for the manifest
if: steps.pack.outputs.package-count != '0'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ steps.pack.outputs.artifact-name }}
Expand All @@ -91,4 +103,5 @@ jobs:
retention-days: 1

- name: Publish packages
if: steps.pack.outputs.package-count != '0'
run: pnpm exec pkg publish
5 changes: 5 additions & 0 deletions .repos/alchemy-effect/.github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ jobs:
bun scripts/release/prepare.ts '${{ inputs.version }}' | tee -a "$GITHUB_OUTPUT"

- name: Build release packages
# Match preview CI: the cold tsgo build can starve the runner
# without Go heap limits on this 32 GB machine.
env:
GOMEMLIMIT: 6GiB
GOGC: "40"
run: >-
pnpm turbo run build
$(jq -r '.[] | "--filter=\(.name)"' release-packages.json)
Expand Down
7 changes: 7 additions & 0 deletions .repos/alchemy-effect/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ smoke
*.d.ts
!examples/prisma-tanstack-start/migrations/**/start-contract.d.ts
!examples/prisma-tanstack-start/migrations/**/end-contract.d.ts
# Emitted Prisma ORM v8 contract types: imported by the fixtures/example that
# consume them, so a clean checkout must typecheck without running a deploy.
!examples/cloudflare-neon-prisma/src/prisma/generated/contract.d.ts
!packages/alchemy/test/Cloudflare/Workers/fixtures/prisma-orm/generated/contract.d.ts
!packages/alchemy/test/Prisma/ORM/fixtures/client/generated/contract.d.ts
# drizzle-kit's generated durable-sqlite migrations bundle (checked-in test fixture)
!packages/alchemy/test/Cloudflare/Workers/fixtures/drizzle-do/drizzle/migrations.js
# Container image contexts COPY these into the image; without the negation
Expand Down Expand Up @@ -67,6 +72,8 @@ examples/cloudflare-worker/src/scratch.ts
/packages/alchemy/README.md

!/packages/alchemy/bin/cli.js
!/packages/alchemy/bin/alchemy.js
!/packages/alchemy/bin/exec.js
!/packages/alchemy/bin/register-dev-mode.js
!/packages/alchemy/bin/register-oxc.js
.tmp
Expand Down
6 changes: 3 additions & 3 deletions .repos/alchemy-effect/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -857,8 +857,8 @@ Resolve the bindings, expose one route per behavior, default-export the class so
// fixtures/worker.ts
import * as Cloudflare from "@/Cloudflare/index.ts";
import * as Effect from "effect/Effect";
import { HttpServerRequest } from "effect/unstable/http/HttpServerRequest";
import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse";
import { HttpServerRequest } from "effect/http/HttpServerRequest";
import * as HttpServerResponse from "effect/http/HttpServerResponse";
import { Gateway } from "./gateway.ts";

export default class TestWorker extends Cloudflare.Worker<TestWorker>()(
Expand Down Expand Up @@ -895,7 +895,7 @@ import * as Test from "@/Test/Alchemy";
import { expect } from "alchemy-test";
import * as Effect from "effect/Effect";
import * as Schedule from "effect/Schedule";
import * as HttpClient from "effect/unstable/http/HttpClient";
import * as HttpClient from "effect/http/HttpClient";
import TestWorker from "./fixtures/worker.ts";

const { test, beforeAll, afterAll, deploy, destroy } = Test.make({
Expand Down
Loading