Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
f9372a4
chore(desktop): separate dev AppUserModelID on Windows (#1934)
adammansfield Apr 12, 2026
f9019cd
Coalesce status refreshes by remote (#1940)
juliusmarminge Apr 12, 2026
2fce84a
fix: quote editor launch args on Windows to support paths with spaces…
D3OXY Apr 12, 2026
f59ee36
fix(web): allow concurrent browser tests to retry ports (#1951)
ashvinnihalani Apr 12, 2026
7a00846
fix: Align token usage metrics for both Claude and Codex (#1943)
ashvinnihalani Apr 12, 2026
94d13a2
Preserve live stream subscriptions across explicit reconnects (#1972)
juliusmarminge Apr 13, 2026
96c9306
Migrate chat scrolling and branch lists to LegendList (#1953)
juliusmarminge Apr 13, 2026
dff8784
window controls overlay (windows&linux) (#1969)
tarik02 Apr 13, 2026
850c912
fix(desktop): increase backend readiness timeout from 10s to 30s (#1979)
rowalth Apr 13, 2026
57d7746
fix(web): replace turn strip overlay gradients with mask-image fade (…
GuilhermeVieiraDev Apr 13, 2026
f7fa62a
Add shell snapshot queries for orchestration state (#1973)
juliusmarminge Apr 13, 2026
1bf048e
fix: avoid copy button overlapping long code blocks (#1985)
barrymichaeldoyle Apr 13, 2026
f2205bd
Pad composer model picker to prevent ring clipping (#1992)
juliusmarminge Apr 13, 2026
801b83e
Allow empty server threads to bootstrap new worktrees (#1936)
juliusmarminge Apr 13, 2026
77fcad3
Prevent live thread branches from regressing to temp worktree names (…
juliusmarminge Apr 13, 2026
047a0a6
fix: add pointer cursor to the permissions mode select trigger (#1997)
UtkarshUsername Apr 13, 2026
9b29be9
docs: Document environment prep before local development (#1975)
ashvinnihalani Apr 13, 2026
5f7becf
feat: Add Kiro editor support to open picker (#1974)
ashvinnihalani Apr 13, 2026
cadd708
feat: show full thread title in a tooltip when hovering sidebar threa…
UtkarshUsername Apr 13, 2026
f5ecca4
Clear tracked RPCs on reconnect (#2000)
juliusmarminge Apr 13, 2026
6f69934
Use latest user message time for thread timestamps (#1996)
juliusmarminge Apr 13, 2026
d18e43b
fix: lost provider session recovery (#1938)
ashvinnihalani Apr 13, 2026
33dadb5
Fix thread timeline autoscroll and simplify branch state (#2002)
juliusmarminge Apr 13, 2026
569fea8
Warm sidebar thread detail subscriptions (#2001)
juliusmarminge Apr 13, 2026
5f7ec73
Fix new-thread draft reuse for worktree defaults (#2003)
juliusmarminge Apr 13, 2026
9dcea68
Refresh git status after branch rename and worktree setup (#2005)
juliusmarminge Apr 13, 2026
008ac5c
Cache provider status and gate desktop startup (#1962)
juliusmarminge Apr 13, 2026
2e42f3f
Improve shell PATH hydration and fallback detection (#1799)
juliusmarminge Apr 13, 2026
c9b07d6
Backfill projected shell summaries and stale approval cleanup (#2004)
juliusmarminge Apr 14, 2026
0d28026
fix(claude): emit plan events for TodoWrite during input streaming (#…
TimCrooker Apr 14, 2026
409ff90
Nightly release channel (#2012)
juliusmarminge Apr 15, 2026
9ff31f8
Fix nightly desktop product name (#2025)
juliusmarminge Apr 15, 2026
44afe78
Add filesystem browse API and command palette project picker (#2024)
Noojuno Apr 15, 2026
7968f27
Fix terminal Cmd+Backspace on macOS (#2027)
SAKETH11111 Apr 15, 2026
28cb9db
feat(web): add tooltip to composer file mention pill (#1944)
GuilhermeVieiraDev Apr 15, 2026
68061af
Improve markdown file link UX (#1956)
justsomelegs Apr 15, 2026
5e1dd56
feat: add Launch Args setting for Claude provider (#1971)
akarabach Apr 15, 2026
f9580ff
Default nightly desktop builds to the nightly update channel (#2049)
juliusmarminge Apr 16, 2026
5e13f53
fix: remove trailing newline from CLAUDE.md symlink (#2052)
marcusgrando Apr 16, 2026
d22c6f5
fix: prevent user-input activities from leaking into pending approval…
marcusgrando Apr 16, 2026
3e07f5a
feat: add Claude Opus 4.7 to built-in models (#2072)
Marve10s Apr 16, 2026
19d4740
fix(web): prevent composer controls overlap on narrow windows (make p…
UtkarshUsername Apr 16, 2026
7a08fcf
fix(server): drop stale text generation options when resetting text-g…
UtkarshUsername Apr 16, 2026
188a40c
feat: configurable project grouping (#2055)
tlh38 Apr 16, 2026
e0117b2
Fix Claude Process leak[MEMORY INTENSIVE], archiving, and stale claud…
crafael23 Apr 16, 2026
d90e15d
fix(server): extend negative repository identity cache ttl (#2083)
m-mohamed Apr 16, 2026
6891c77
Build for Windows ARM (#2080)
Badbird5907 Apr 17, 2026
b7df3df
[codex] Fix Windows release manifest publishing (#2095)
juliusmarminge Apr 17, 2026
5490438
fix: guard against missing sidebarProjectGroupingOverrides in client …
juliusmarminge Apr 17, 2026
b2cca67
ci(release): install deps before finalize version bump (#2100)
juliusmarminge Apr 17, 2026
2d87574
chore(release): prepare v0.0.20
t3-code[bot] Apr 17, 2026
505db9f
try out blacksmith for releases (#2101)
juliusmarminge Apr 17, 2026
b991b9b
Revert to Github Runner for Windows (#2103)
juliusmarminge Apr 17, 2026
ed6b7fb
fix(server): honor gitignored files in workspace search (#2078)
nmharmon8 Apr 17, 2026
8dba2d6
Adopt Node-native TypeScript for desktop and server (#2098)
juliusmarminge Apr 17, 2026
54179c8
Update workflow to use ubuntu-24.04 runner (#2110)
juliusmarminge Apr 17, 2026
d8d3296
Show thread status in command palette (#2107)
Noojuno Apr 17, 2026
a7a44d0
Fix Windows PATH hydration and repair (#1729)
Badbird5907 Apr 17, 2026
f297e30
Clean up invalid pending approval projections (#2106)
juliusmarminge Apr 17, 2026
24dc316
Merge upstream/main (t3code April 2026) preserving MarCode features
tyulyukov Apr 17, 2026
c5a3651
feat(marcode): merge upstream and remove todo feature
tyulyukov Apr 18, 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
  •  
  •  
  •  
9 changes: 6 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@ jobs:

- name: Verify preload bundle output
run: |
test -f apps/desktop/dist-electron/preload.js
grep -nE "desktopBridge|getLocalEnvironmentBootstrap|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.js
test -f apps/desktop/dist-electron/preload.cjs
grep -nE "desktopBridge|getLocalEnvironmentBootstrap|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.cjs

release_smoke:
name: Release Smoke
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
Expand All @@ -92,5 +92,8 @@ jobs:
with:
node-version-file: package.json

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Exercise release-only workflow steps
run: node scripts/release-smoke.ts
217 changes: 173 additions & 44 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,21 @@ on:
push:
tags:
- "v*.*.*"
schedule:
- cron: "0 9 * * *"
workflow_dispatch:
inputs:
channel:
description: "Release channel"
required: false
default: stable
type: choice
options:
- stable
- nightly
version:
description: "Release version (for example 1.2.3 or v1.2.3)"
required: true
required: false
type: string

permissions:
Expand All @@ -18,43 +28,24 @@ permissions:
jobs:
preflight:
name: Preflight
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
outputs:
release_channel: ${{ steps.release_meta.outputs.release_channel }}
version: ${{ steps.release_meta.outputs.version }}
tag: ${{ steps.release_meta.outputs.tag }}
release_name: ${{ steps.release_meta.outputs.name }}
short_sha: ${{ steps.release_meta.outputs.short_sha }}
previous_tag: ${{ steps.previous_tag.outputs.previous_tag }}
cli_dist_tag: ${{ steps.release_meta.outputs.cli_dist_tag }}
is_prerelease: ${{ steps.release_meta.outputs.is_prerelease }}
make_latest: ${{ steps.release_meta.outputs.make_latest }}
ref: ${{ github.sha }}
steps:
- name: Checkout
uses: actions/checkout@v6

- id: release_meta
name: Resolve release version
shell: bash
run: |
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
raw="${{ github.event.inputs.version }}"
else
raw="${GITHUB_REF_NAME}"
fi

version="${raw#v}"
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
echo "Invalid release version: $raw" >&2
exit 1
fi

echo "version=$version" >> "$GITHUB_OUTPUT"
echo "tag=v$version" >> "$GITHUB_OUTPUT"
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
echo "make_latest=true" >> "$GITHUB_OUTPUT"
else
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
echo "make_latest=false" >> "$GITHUB_OUTPUT"
fi
with:
fetch-depth: 0

- name: Setup Bun
uses: oven-sh/setup-bun@v2
Expand All @@ -69,6 +60,60 @@ jobs:
- name: Install dependencies
run: bun install --frozen-lockfile

- id: release_meta
name: Resolve release version
shell: bash
env:
DISPATCH_CHANNEL: ${{ github.event.inputs.channel }}
DISPATCH_VERSION: ${{ github.event.inputs.version }}
NIGHTLY_DATE: ${{ github.run_started_at }}
NIGHTLY_SHA: ${{ github.sha }}
NIGHTLY_RUN_NUMBER: ${{ github.run_number }}
run: |
if [[ "${GITHUB_EVENT_NAME}" == "schedule" || ( "${GITHUB_EVENT_NAME}" == "workflow_dispatch" && "${DISPATCH_CHANNEL:-stable}" == "nightly" ) ]]; then
nightly_date="$(date -u -d "$NIGHTLY_DATE" +%Y%m%d)"

node scripts/resolve-nightly-release.ts \
--date "$nightly_date" \
--run-number "$NIGHTLY_RUN_NUMBER" \
--sha "$NIGHTLY_SHA" \
--github-output

echo "release_channel=nightly" >> "$GITHUB_OUTPUT"
echo "cli_dist_tag=nightly" >> "$GITHUB_OUTPUT"
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
echo "make_latest=false" >> "$GITHUB_OUTPUT"
else
if [[ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]]; then
raw="${DISPATCH_VERSION}"
if [[ -z "$raw" ]]; then
echo "workflow_dispatch stable releases require the version input." >&2
exit 1
fi
else
raw="${GITHUB_REF_NAME}"
fi

version="${raw#v}"
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then
echo "Invalid release version: $raw" >&2
exit 1
fi

echo "release_channel=stable" >> "$GITHUB_OUTPUT"
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "tag=v$version" >> "$GITHUB_OUTPUT"
echo "name=T3 Code v$version" >> "$GITHUB_OUTPUT"
echo "cli_dist_tag=latest" >> "$GITHUB_OUTPUT"
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
echo "make_latest=true" >> "$GITHUB_OUTPUT"
else
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
echo "make_latest=false" >> "$GITHUB_OUTPUT"
fi
fi

- name: Lint
run: bun run lint

Expand All @@ -78,6 +123,14 @@ jobs:
- name: Test
run: bun run test

- id: previous_tag
name: Resolve previous release tag
run: |
node scripts/resolve-previous-release-tag.ts \
--channel "${{ steps.release_meta.outputs.release_channel }}" \
--current-tag "${{ steps.release_meta.outputs.tag }}" \
--github-output

build:
name: Build ${{ matrix.label }}
needs: preflight
Expand All @@ -88,25 +141,30 @@ jobs:
matrix:
include:
- label: macOS arm64
runner: macos-14
runner: blacksmith-12vcpu-macos-26
platform: mac
target: dmg
arch: arm64
- label: macOS x64
runner: macos-15-intel
runner: blacksmith-12vcpu-macos-26
platform: mac
target: dmg
arch: x64
- label: Linux x64
runner: ubuntu-24.04
runner: blacksmith-32vcpu-ubuntu-2404
platform: linux
target: AppImage
arch: x64
- label: Windows x64
runner: windows-2022
runner: windows-2022 # blacksmith-32vcpu-windows-2025
platform: win
target: nsis
arch: x64
# - label: Windows arm64
# runner: windows-11-arm
# platform: win
# target: nsis
# arch: arm64
steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -208,18 +266,31 @@ jobs:
"release/*.AppImage" \
"release/*.exe" \
"release/*.blockmap" \
"release/latest*.yml"; do
"release/*.yml"; do
for file in $pattern; do
cp "$file" release-publish/
done
done

if [[ "${{ matrix.platform }}" == "mac" && "${{ matrix.arch }}" != "arm64" ]]; then
if [[ -f release-publish/latest-mac.yml ]]; then
mv release-publish/latest-mac.yml "release-publish/latest-mac-${{ matrix.arch }}.yml"
fi
shopt -s nullglob
for manifest in release-publish/*-mac.yml; do
mv "$manifest" "${manifest%.yml}-${{ matrix.arch }}.yml"
done
fi

# Enable if Windows arm64 builds are enabled.
# Windows updater metadata is channel-specific (for example
# "latest.yml" or "nightly.yml"). Suffix each per-arch copy so the
# release job can merge matching arm64/x64 manifests back into one
# canonical manifest per channel.
# if [[ "${{ matrix.platform }}" == "win" ]]; then
# shopt -s nullglob
# for manifest in release-publish/*.yml; do
# mv "$manifest" "${manifest%.yml}-win-${{ matrix.arch }}.yml"
# done
# fi

- name: Upload build artifacts
uses: actions/upload-artifact@v7
with:
Expand All @@ -230,7 +301,7 @@ jobs:
publish_cli:
name: Publish CLI to npm
needs: [preflight, build]
runs-on: ubuntu-24.04
runs-on: ubuntu-24.04 # blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
Expand Down Expand Up @@ -273,7 +344,7 @@ jobs:
release:
name: Publish GitHub Release
needs: [preflight, build, publish_cli]
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- name: Checkout
Expand All @@ -295,12 +366,66 @@ jobs:

- name: Merge macOS updater manifests
run: |
node scripts/merge-mac-update-manifests.ts \
release-assets/latest-mac.yml \
release-assets/latest-mac-x64.yml
rm -f release-assets/latest-mac-x64.yml
shopt -s nullglob
for x64_manifest in release-assets/*-mac-x64.yml; do
arm64_manifest="${x64_manifest%-x64.yml}.yml"
if [[ -f "$arm64_manifest" ]]; then
node scripts/merge-update-manifests.ts --platform mac "$arm64_manifest" "$x64_manifest"
rm -f "$x64_manifest"
fi
done

# - name: Merge Windows updater manifests
# run: |
# shopt -s nullglob
# found_windows_manifest=false
# for x64_manifest in release-assets/*-win-x64.yml; do
# if [[ "$(basename "$x64_manifest")" == builder-debug-* ]]; then
# continue
# fi

# arm64_manifest="${x64_manifest/-x64.yml/-arm64.yml}"
# output_manifest="${x64_manifest/-win-x64.yml/.yml}"
# if [[ ! -f "$arm64_manifest" ]]; then
# echo "Missing matching arm64 Windows manifest for $x64_manifest" >&2
# exit 1
# fi

# found_windows_manifest=true
# node scripts/merge-update-manifests.ts --platform win \
# "$arm64_manifest" \
# "$x64_manifest" \
# "$output_manifest"
# rm -f "$arm64_manifest" "$x64_manifest"
# done

# if [[ "$found_windows_manifest" != true ]]; then
# echo "No Windows updater manifests found to merge." >&2
# exit 1
# fi

- name: Publish release
if: needs.preflight.outputs.previous_tag != ''
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.preflight.outputs.tag }}
target_commitish: ${{ needs.preflight.outputs.ref }}
name: MarCode v${{ needs.preflight.outputs.version }}
generate_release_notes: true
previous_tag: ${{ needs.preflight.outputs.previous_tag }}
prerelease: ${{ needs.preflight.outputs.is_prerelease }}
make_latest: ${{ needs.preflight.outputs.make_latest }}
files: |
release-assets/*.dmg
release-assets/*.zip
release-assets/*.AppImage
release-assets/*.exe
release-assets/*.blockmap
release-assets/*.yml
fail_on_unmatched_files: true

- name: Publish first release
if: needs.preflight.outputs.previous_tag == ''
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.preflight.outputs.tag }}
Expand All @@ -315,13 +440,14 @@ jobs:
release-assets/*.AppImage
release-assets/*.exe
release-assets/*.blockmap
release-assets/latest*.yml
release-assets/*.yml
fail_on_unmatched_files: true

finalize:
name: Finalize release
if: needs.preflight.outputs.release_channel == 'stable'
needs: [preflight, release]
runs-on: ubuntu-24.04
runs-on: blacksmith-8vcpu-ubuntu-2404
timeout-minutes: 10
steps:
- id: app_token
Expand Down Expand Up @@ -360,6 +486,9 @@ jobs:
with:
node-version-file: package.json

- name: Install dependencies
run: bun install --frozen-lockfile

- id: update_versions
name: Update version strings
env:
Expand Down
3 changes: 2 additions & 1 deletion .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"*.tsbuildinfo",
"**/routeTree.gen.ts",
"apps/web/public/mockServiceWorker.js",
"apps/web/src/lib/vendor/qrcodegen.ts"
"apps/web/src/lib/vendor/qrcodegen.ts",
"*.icon/**"
],
"sortPackageJson": {}
}
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,14 @@ Observability guide: [docs/observability.md](./docs/observability.md)

## If you REALLY want to contribute still.... read this first

Before local development, prepare the environment and install dependencies:

```bash
# Optional: only needed if you use mise for dev tool management.
mise install
bun install .
```

Read [CONTRIBUTING.md](./CONTRIBUTING.md) before opening an issue or PR.

Need support? Join the [Discord](https://discord.gg/jn4EGJjrvv).
Loading
Loading