Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
0d5dc77
Migrate workflows to Blacksmith
blacksmith-sh[bot] Feb 27, 2026
b127970
feat(sidebar): pin chats within projects
12ya Jul 12, 2026
53a27cb
feat(sidebar): pin threads with drag and drop
12ya Jul 12, 2026
5833599
refactor(sidebar): simplify thread pin controls
12ya Jul 12, 2026
a06830f
refactor(sidebar): pin threads by divider crossing
12ya Jul 12, 2026
6656e1c
fix(sidebar): animate pinned thread groups
12ya Jul 12, 2026
fd614e5
fix(sidebar): ignore controls when starting thread drags
12ya Jul 13, 2026
d2c46a7
fix(sidebar): scope thread actions to active rows
12ya Jul 13, 2026
b8c812d
fix(sidebar): enable drag pinning at group edges
12ya Jul 13, 2026
9ceec82
fix(sidebar): harden thread row interactions
12ya Jul 13, 2026
02c19ff
fix(sidebar): prevent edge divider drag jumps
12ya Jul 13, 2026
f5a4caf
fix(sidebar): refresh previews on active thread changes
12ya Jul 13, 2026
44e562b
fix(sidebar): anchor overlay dividers to group edges
12ya Jul 13, 2026
3ad218d
fix(sidebar): hide empty thread overflow controls
12ya Jul 13, 2026
1ed8120
Refactor session and event handling for reliability
12ya Jul 15, 2026
4db7325
feat!: rebrand the application as V12
12ya Jul 16, 2026
de98308
Merge remote-tracking branch 'upstream/blacksmith-migration-3a43047'
12ya Jul 16, 2026
91b9b66
Merge branch 'main' into v-12ya
12ya Jul 16, 2026
bd2bd65
Merge remote-tracking branch 'upstream/main'
12ya Jul 16, 2026
6ef47ba
fix(release): target lowercase v12 repository
12ya Jul 16, 2026
c0eb2ba
ci(release): use GitHub-hosted runners
12ya Jul 16, 2026
89bff81
test(release): align repository fixture casing
12ya Jul 16, 2026
c048761
feat(drafts): preserve unfinished chats across navigation
12ya Jul 16, 2026
dd9d094
docs: summarize core V12 workflows
12ya Jul 16, 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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .cursor/rules/cursor-cloud.mdc
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
---
description: Cursor Cloud environment setup and run notes for T3 Code (Cursor-specific; not for other editors/CI)
description: Cursor Cloud environment setup and run notes for V12 (Cursor-specific; not for other editors/CI)
alwaysApply: true
---

# Cursor Cloud specific instructions

These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since T3 Code is
These notes apply only to Cursor Cloud agents (kept out of the shared `AGENTS.md` since V12 is
developed in many places). They cover the pre-provisioned VM environment and non-obvious run caveats.

## Toolchain
Expand All@@ -28,7 +28,7 @@ Pre-installed and wired into login shells (`~/.bashrc`/`~/.profile`): Node 24 (v
the next free pair, so read the actual ports from stdout. Avoid production `build`/`start` in dev.
- Auth/pairing: the server is unauthenticated by default and prints a pairing URL to stdout on startup
(e.g. `http://localhost:5733/pair#token=XXXX`). Open that URL in the browser to pair before the web
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.t3`
UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.v12`
(`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB.
- Agent providers are external CLIs (`codex`, `claude`, `cursor-agent`, `opencode`) probed on `PATH`.
Without one installed the UI loads but no agent can run. Claude Code
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
{
"name": "T3 Code Dev",
"name": "V12 Dev",
"image": "debian:bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
Expand Down
26 changes: 13 additions & 13 deletions .env.example
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
# Optional: T3 Connect source builds
# Leave these unset to disable optional T3 Connect features in local source builds.
# Optional: V12 Connect source builds
# Leave these unset to disable optional V12 Connect features in local source builds.
# Release builds inject their public values at build time. Do not add server-side
# secrets to this file.

# Get these from the Clerk Dashboard under API keys, JWT templates, and OAuth applications.
# T3CODE_CLERK_PUBLISHABLE_KEY=pk_test_...
# T3CODE_CLERK_JWT_TEMPLATE=t3-relay
# T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...
# V12_CLERK_PUBLISHABLE_KEY=pk_test_...
# V12_CLERK_JWT_TEMPLATE=v12-relay
# V12_CLERK_CLI_OAUTH_CLIENT_ID=oauthapp_...

# Optional: signed macOS passkey builds. The RP domain defaults to the Frontend API
# hostname encoded in T3CODE_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# hostname encoded in V12_CLERK_PUBLISHABLE_KEY. Set the override only when Clerk
# returns a different RP ID or when multiple domains must be entitled.
# T3CODE_APPLE_TEAM_ID=ABC1234567
# T3CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/t3code.provisionprofile
# T3CODE_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com
# V12_APPLE_TEAM_ID=ABC1234567
# V12_MACOS_PROVISIONING_PROFILE=/absolute/path/to/v12.provisionprofile
# V12_CLERK_PASSKEY_RP_DOMAINS=example.clerk.accounts.dev,clerk.example.com

# Get this from your relay deployment. `infra/relay` deploys update it automatically.
# T3CODE_RELAY_URL=https://relay.example.com
# V12_RELAY_URL=https://relay.example.com

# Public, ingest-only mobile OpenTelemetry configuration.
# T3CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# T3CODE_MOBILE_OTLP_TRACES_DATASET=t3-code-mobile-traces-dev
# T3CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-...
# V12_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces
# V12_MOBILE_OTLP_TRACES_DATASET=v12-mobile-traces-dev
# V12_MOBILE_OTLP_TRACES_TOKEN=xaat-...
27 changes: 2 additions & 25 deletions .github/VOUCHED.td
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,28 +8,5 @@
# github:username
# -github:username reason for denouncement
#
# Keep entries sorted alphabetically.
github:adityavardhansharma
github:binbandit
github:chuks-qua
github:cursoragent
github:gbarros-dev
github:github-actions[bot]
github:hwanseoc
github:jamesx0416
github:jasonLaster
github:JoeEverest
github:maria-rcks
github:nmggithub
github:Noojuno
github:notkainoa
github:PatrickBauer
github:realAhmedRoach
github:shiroyasha9
github:Yash-Singh1
github:eggfriedrice24
github:Ymit24
github:shivamhwp
github:jappyjan
github:justsomelegs
github:UtkarshUsername
# Keep entries sorted alphabetically. This fork intentionally starts with no
# inherited external trust entries; collaborators are trusted automatically.
19 changes: 6 additions & 13 deletions .github/pull_request_template.md
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,3 @@
<!--
⚠️ READ BEFORE OPENING ⚠️

We are not actively accepting contributions right now.

You can still open a PR, but please do so knowing there is a high chance
we may close it without merging it, or never review it.

- Small, focused PRs are strongly preferred. Bug fixes are most likely to be merged.
- New features will most likely just annoy us.
- 1,000+ line PRs with a bunch of new features will probably get you banned from the repo.
-->

## What Changed

<!-- Describe the change clearly and keep scope tight. -->
Expand All@@ -19,6 +6,10 @@ we may close it without merging it, or never review it.

<!-- Explain the problem being solved and why this approach is the right one. -->

## Validation

<!-- List the checks and tests you ran. -->

## UI Changes

<!-- If this PR changes UI, include clear before/after screenshots.
Expand All@@ -29,5 +20,7 @@ we may close it without merging it, or never review it.

- [ ] This PR is small and focused
- [ ] I explained what changed and why
- [ ] `vp check` and `vp run typecheck` pass
- [ ] I included before/after screenshots for any UI changes
- [ ] I included a video for animation/interaction changes
- [ ] I did not include secrets, private data, or machine-specific files
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -23,7 +23,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Check
run: vp check
Expand DownExpand Up@@ -56,7 +56,7 @@ jobs:
run-install: true

- name: Ensure Electron runtime is installed
run: vp run --filter @t3tools/desktop ensure:electron
run: vp run --filter @v12/desktop ensure:electron

- name: Test
run: vp run test
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-relay.yml
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
name: Deploy T3 Connect relay
name: Deploy V12 Connect relay

on:
push:
Expand DownExpand Up@@ -48,7 +48,7 @@ jobs:

- name: Deploy production relay stage
id: deploy
run: vp run --filter t3code-relay deploy --stage prod --yes --github-output
run: vp run --filter v12-relay deploy --stage prod --yes --github-output
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }}
Expand Down
Loading
Loading