Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
a17cbc3
feat(dev): keep worktree dev state isolated on T3 Code dev servers (#…
t3dotgg Jul 26, 2026
23b5502
feat(dev): Make t3 code dev instances shareable over Tailscale (#4556)
t3dotgg Jul 27, 2026
89c5a19
fix(dev): skip browser-blocked ports (#4608)
t3dotgg Jul 27, 2026
d60f6e9
fix: cut websocket throughput in half by pruning activity payloads (#…
t3dotgg Jul 27, 2026
b4680cb
perf(mobile): defer work-log detail serialization (#4607)
saphid Jul 27, 2026
23ea08d
test: account for lazy thread feed details (#4628)
t3dotgg Jul 27, 2026
a78f245
feat(relay): limit managed tunnels per user (#4530)
juliusmarminge Jul 27, 2026
2b06c08
Add managed tunnel limits migration (#4635)
juliusmarminge Jul 27, 2026
f4c3943
Add background preview capture and picture-in-picture support (#4397)
juliusmarminge Jul 27, 2026
200fa82
feat(web): prompt stash — cmd+S saves the composer to a per-provider …
t3dotgg Jul 27, 2026
108e017
Upgrade Effect and Alchemy betas (#4643)
juliusmarminge Jul 27, 2026
bdf99c1
feat: allow new thread creation through project breadcrumbs (#4638)
0x4bs3nt Jul 27, 2026
7248877
fix(web): scope PR state to the thread branch (#4460)
juliusmarminge Jul 27, 2026
d2d40b6
Drop redundant Relay user indexes (#4648)
juliusmarminge Jul 27, 2026
96398e3
feat(connect): release the Cloudflare tunnel when the environment shu…
juliusmarminge Jul 27, 2026
180620e
Fix Relay Worker RuntimeContext wiring (#4653)
juliusmarminge Jul 27, 2026
da11342
Fix live sidebar resize limits and defer Alchemy runtime context (#4655)
juliusmarminge Jul 27, 2026
32843c2
fix(web): constrain branch toolbar context (#4657)
maxktz Jul 27, 2026
0e19c10
Keep MCP credentials alive across provider turns (#4659)
juliusmarminge Jul 27, 2026
f0121f3
fix: close actions dropdown when editing (#4660)
0x4bs3nt Jul 27, 2026
32af2f0
fix(preview): stabilize PiP viewport identity (#4661)
juliusmarminge Jul 27, 2026
80ead5f
Add glass styling for thread tooltips and simplify preview tab handli…
juliusmarminge Jul 27, 2026
5ba6ef7
Use tarball archiving for hosted web deploys (#4669)
juliusmarminge Jul 27, 2026
6e3b738
fix(server): bound editor discovery during config loading (#4291)
maria-rcks Jul 27, 2026
e77f42c
Prevent draft thread detail polling before shell registration (#4670)
juliusmarminge Jul 27, 2026
10bca3f
feat: add configurable source control writing settings (#4204)
maria-rcks Jul 27, 2026
eea3ea4
feat(diff-panel): show total line additions and deletions (#4674)
0x4bs3nt Jul 27, 2026
6afbed3
Clear provider update actions while updating (#4676)
juliusmarminge Jul 27, 2026
6a3df51
Fix sidebar highlighting for draft threads (#4679)
juliusmarminge Jul 27, 2026
3957a95
Use glass surfaces for web toasts (#4681)
juliusmarminge Jul 27, 2026
a2ffb12
Show origin ref in branch trigger label (#4680)
juliusmarminge Jul 27, 2026
1153afb
fix(mobile): match react version to react-native 0.85.3 vendored rend…
KrzysztofMoch Jul 27, 2026
831eb66
chore(release): prepare v0.0.29
t3-code[bot] Jul 27, 2026
a148e08
Add OTA update checks to mobile settings (#4686)
juliusmarminge Jul 27, 2026
476d69c
fix(mobile): threads load snapped to bottom on iOS (#4689)
t3dotgg Jul 28, 2026
c13a021
feat: default sidebar v2 on for nightly and dev builds (#4491)
t3dotgg Jul 28, 2026
dd5ea32
fix(web): 33 web UI fixes (#4700)
maxktz Jul 28, 2026
b0c4992
Make mobile Thread List v2 the default (#4717)
juliusmarminge Jul 28, 2026
d25b157
Fix mobile showcase workflow without Clerk (#4718)
juliusmarminge Jul 28, 2026
e00781a
Fix relay credential lookup for unlinked environments (#4692)
juliusmarminge Jul 28, 2026
9cf9fc9
Settle merged PR threads immediately (#4704)
t3dotgg Jul 28, 2026
362f127
feat(web): add maria's sidebar header artwork toggle (#4652)
maxktz Jul 28, 2026
4f584da
feat(web): add appearance settings category (#4715)
maxktz Jul 28, 2026
9ccfd9d
fix(desktop): allow updater-controlled relaunch (#4721)
0x4bs3nt Jul 28, 2026
3c50a64
fix(web): prevent diff panel scroll jumping (#4724)
0x4bs3nt Jul 28, 2026
55dd016
Link inline code file paths in chat markdown (#4726)
juliusmarminge Jul 28, 2026
f1a68ac
Fix Android showcase capture and rebuild v2 queued rows (#4730)
juliusmarminge Jul 28, 2026
887dd6e
perf(server): negotiate permessage-deflate on the websocket (#4705)
t3dotgg Jul 28, 2026
b64ae88
docs: overhaul agent guidance (#4782)
t3dotgg Jul 28, 2026
0aa92cd
Merge upstream main into fork
YJJosh Jul 28, 2026
86c5ba2
test(web): avoid oversized stash fixtures
YJJosh Jul 28, 2026
1237188
fix: address tunnel quota and preview review findings
YJJosh Jul 28, 2026
e0f529e
fix(relay): serialize endpoint release state
YJJosh Jul 28, 2026
4313af2
fix(relay): recover interrupted tunnel releases
YJJosh Jul 28, 2026
69bc081
fix(relay): backfill incomplete tunnel reservations
YJJosh Jul 28, 2026
00427d6
fix(relay): reject overlapping endpoint provisions
YJJosh Jul 28, 2026
7176728
fix(relay): fence stale endpoint provisions
YJJosh Jul 28, 2026
849505a
fix(relay): fence stale tunnels and releases
YJJosh Jul 28, 2026
bd2c031
fix(relay): count tunnels held by stale provisions
YJJosh Jul 28, 2026
fa16920
fix(relay): clean up stale provisioning leases
YJJosh Jul 30, 2026
e1c11fd
fix(server): forward source-control policy through Pi
YJJosh Jul 30, 2026
b5a987e
fix(relay): bound endpoint provisioning leases
YJJosh Jul 30, 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.
16 changes: 14 additions & 2 deletions .agents/skills/test-t3-app/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,25 @@ Use this skill for the web client. For iOS Simulator, Android Emulator, or physi
2. Choose a base directory that belongs only to the current worktree or test:
- Use the repository's ignored `.t3` directory for reusable worktree-local state.
- Use `mktemp -d /tmp/t3code-test.XXXXXX` for disposable state and retain the printed absolute path.
3. Start the full web stack with `vp run dev --home-dir <base-dir>`.
3. Start the full web stack with `vp run dev`. Add `--share` when the user needs to open it from another tailnet device. In a linked worktree it defaults to that worktree's gitignored `.t3`; pass `--home-dir <base-dir>` only when the test needs a different isolated directory.
4. Keep the terminal session alive and read the selected server port, web port, base directory, and pairing URL from its output.

Treat a base directory as disposable only when it was created or deliberately selected for the current test. Never delete or directly seed the shared `~/.t3` directory. Prefer starting with a new temporary base directory over clearing state of uncertain ownership.

The worktree-local default deliberately outranks an ambient `T3CODE_HOME`; do not pass the shared home through to a worktree dev server.

Ports are derived from the worktree path but can shift when occupied. Always read the actual values from the `[dev-runner]` line.

Shared browser dev is single-origin: Vite proxies the backend paths, so never set `VITE_HTTP_URL` or `VITE_WS_URL` for `dev`/`dev:web`.

The dev runner disables browser auto-open by default. Do not pass `--browser` during automated testing: an automatically opened page can consume the one-time bootstrap token before the controlled browser uses it.

### Verify a shared environment before human handoff

When another person will use the printed pairing URL, first open the shared origin without the pairing path or fragment in the controlled browser and confirm the T3 Code app loads. This browser navigation is required even when curl succeeds because browsers block some otherwise reachable ports before making a network request.

Do not open the other person's complete pairing URL during this reachability check; doing so consumes its one-time token. If the agent also needs an authenticated browser, create and consume a separate pairing token, then leave a fresh token for the other person.

## Preserve the environment while iterating

Treat the overall testing or implementation loop—not an assistant turn or one verification pass—as the environment lifecycle boundary.
Expand Down Expand Up @@ -55,7 +67,7 @@ T3CODE_PORT=<server-port> node apps/server/src/bin.ts auth pairing create \

Use the `Pair URL` from this command once. Derive `<server-port>` and `<web-url>` from the current dev-runner output, including any automatically selected port offset. Setting `T3CODE_PORT` keeps the administrative CLI from probing for an unrelated free port.

Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `<base-dir>/userdata`; the `<base-dir>/dev` fallback is only used by an implicit dev home. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets.
Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `<base-dir>/userdata`; the `<base-dir>/dev` fallback is only used by an implicit dev home. A worktree-local `.t3` counts as explicit, so its state lives in `<worktree>/.t3/userdata`. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets.

## Inspect or seed SQLite state

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,7 @@ jobs:
echo "Deploying hosted web app for $channel_name channel."
deployment_url="$(
vp dlx vercel@53.1.1 deploy \
--archive=tgz \
--prod \
--skip-domain \
--yes \
Expand Down
2 changes: 1 addition & 1 deletion .repos/alchemy-effect/.eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1 @@
alchemy/test/**
alchemy/test/**
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 49 additions & 0 deletions .repos/alchemy-effect/.github/pr-assets/update-screenshots.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# Regenerate the PR screenshots from the built site and commit them if changed.
# Usage: .github/pr-assets/update-screenshots.sh [pr-number]
# Assumes website/dist is freshly built (DOCS_FAST=1 bun astro build).
set -euo pipefail

PR="${1:-721}"
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
OUT="$ROOT/.github/pr-assets/$PR"
DIST="$ROOT/website/dist"
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
PORT=4899

[ -d "$DIST" ] || { echo "website/dist missing — build first"; exit 1; }
mkdir -p "$OUT"

python3 -m http.server "$PORT" --directory "$DIST" >/dev/null 2>&1 &
SERVER_PID=$!
trap 'kill $SERVER_PID 2>/dev/null || true' EXIT
sleep 1

shot() { # shot <file> <path> [extra chrome flags...]
local file="$1" path="$2"; shift 2
"$CHROME" --headless=new --disable-gpu --hide-scrollbars \
--window-size=1600,1000 --virtual-time-budget=6000 \
"$@" --screenshot="$OUT/$file" "http://localhost:$PORT$path" 2>/dev/null
echo "$file: $(wc -c <"$OUT/$file" | tr -d ' ') bytes"
}

shot landing.png /
shot docs-tab.png /getting-started/
shot cloudflare-hub.png /cloudflare/
shot aws-hub.png /aws/
shot planetscale-hub.png /planetscale/
shot axiom-hub.png /axiom/
shot reference.png /providers/cloudflare/workers/durableobject/
shot cloudflare-hub-dark.png /cloudflare/ --force-dark-mode --blink-settings=preferredColorScheme=2

cd "$ROOT"
if git status --porcelain -- ".github/pr-assets/$PR" | grep -q .; then
git add ".github/pr-assets/$PR"
git commit -q -m "chore(website): refresh PR screenshots

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>"
git push
echo "screenshots refreshed and pushed"
else
echo "screenshots unchanged"
fi
41 changes: 41 additions & 0 deletions .repos/alchemy-effect/.github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: check

# Runs the website docs validator (`bun run docs:check`) on every PR
# so broken links / missing API references fail fast before merge.

on:
pull_request:
types: [opened, reopened, synchronize]

permissions:
contents: read

env:
NODE_VERSION: "24"

jobs:
check:
runs-on: ubuntu-22-large
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# `bun install` needs the distilled submodule (workspace member)
submodules: true

- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ env.NODE_VERSION }}

- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: latest

- uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: ~/.bun/install/cache
key: bun-${{ runner.os }}-${{ hashFiles('bun.lock') }}
restore-keys: bun-${{ runner.os }}-

- run: bun install
- run: bun tsc -b
- run: bun run docs:check
55 changes: 55 additions & 0 deletions .repos/alchemy-effect/.github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Claude Code

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
id-token: write
actions: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Configure AWS credentials
id: aws
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: us-east-1
output-credentials: true

- name: Run Claude Code
uses: anthropics/claude-code-action@v1
env:
AWS_ACCESS_KEY_ID: ${{ steps.aws.outputs.aws-access-key-id }}
AWS_SECRET_ACCESS_KEY: ${{ steps.aws.outputs.aws-secret-access-key }}
AWS_SESSION_TOKEN: ${{ steps.aws.outputs.aws-session-token }}
AWS_REGION: us-east-1
AWS_DEFAULT_REGION: us-east-1
CLOUDFLARE_API_TOKEN: ${{ secrets.TEST_CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.TEST_CLOUDFLARE_ACCOUNT_ID }}
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
claude_args: |
--model claude-fable-5
--allowedTools "Bash(aws:*),WebFetch,WebSearch"
137 changes: 0 additions & 137 deletions .repos/alchemy-effect/.github/workflows/deploy.yml

This file was deleted.

Loading
Loading