Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
14e56f8
Add T3 Code mobile app and shared remote runtime
juliusmarminge Apr 14, 2026
df4223b
Enhance mobile review comments with diff previews
juliusmarminge Apr 15, 2026
4de9770
get native highlighter setup properly
juliusmarminge Apr 15, 2026
43d534a
shiki loading changes
juliusmarminge Apr 15, 2026
dcf4d6d
Improve mobile review diff rendering
juliusmarminge Apr 16, 2026
3c78384
feat(mobile): Add terminal powered by libghostty (#2056)
juliusmarminge Apr 16, 2026
3430744
Set mobile config scheme per app variant
juliusmarminge Apr 16, 2026
5858792
Stage remote terminal launches and replay hydrated buffers
juliusmarminge Apr 17, 2026
ccac2d8
Fix post-rebase mobile typecheck issues
juliusmarminge Apr 17, 2026
f1ae412
move some stuff around
juliusmarminge Apr 17, 2026
cca1bac
Refactor remote terminal session state handling
juliusmarminge Apr 17, 2026
2faef72
Extract WebSocket RPC client into shared runtime package
juliusmarminge Apr 18, 2026
df425a8
Ignore fast mode updates for Opencode models
juliusmarminge Apr 18, 2026
e27b561
terminals
juliusmarminge Apr 27, 2026
da56bd5
Add mobile review profiling and syntax highlight debug tools
juliusmarminge Apr 29, 2026
3790816
Add native mobile review diff rendering and static checks
juliusmarminge May 1, 2026
7a285d1
Add mobile source control discovery runtime state
juliusmarminge May 4, 2026
b305a44
Use branded ids in mobile runtime flows
juliusmarminge May 4, 2026
9aae833
Fix terminal attach session launch context
juliusmarminge May 4, 2026
509a7a8
feat: ios16 support (#2469)
Yash-Singh1 May 4, 2026
a49c2d1
Fix saved environment runtime test mocks
juliusmarminge May 4, 2026
eba2803
Add inline review comment selection to mobile diffs
juliusmarminge May 5, 2026
6db3098
Add remote review diff plumbing
juliusmarminge May 5, 2026
8916eeb
Switch review preview timestamps to DateTimeUtc
juliusmarminge May 5, 2026
3c9c14f
rm
juliusmarminge May 5, 2026
b487b05
use custom react-native-nitro-markdown
Yash-Singh1 May 7, 2026
594df47
Restrict review diff preview to workspace roots
juliusmarminge May 7, 2026
d950f45
Refactor review sheet into focused native review hooks
juliusmarminge May 7, 2026
ab95f11
Fix mobile native static check typecheck
juliusmarminge May 8, 2026
e793c07
Refactor mobile remote search and review state
juliusmarminge May 9, 2026
fbd89d3
Handle truncated git review diff previews safely
juliusmarminge May 9, 2026
8d65f13
Rename branch state to VCS refs
juliusmarminge May 9, 2026
570cc46
Replace git react-query layer with vcsRefManager and source control acti
juliusmarminge May 9, 2026
c87cc16
Refactor client runtime state refresh handling
juliusmarminge May 9, 2026
e7b41d7
Rename git state to VCS and add diff preview caching
juliusmarminge May 9, 2026
4ac2618
Fix browser VCS status test mocks
juliusmarminge May 9, 2026
7f03f4d
Harden remote connect and subscription handling
juliusmarminge May 9, 2026
7793bd6
Normalize branch and model selection handling
juliusmarminge May 12, 2026
90fea7b
Refactor collection handling for mobile remote connect
juliusmarminge May 12, 2026
89672b3
Refactor mobile ordering and catalog assembly
juliusmarminge May 12, 2026
2632c92
Refine mobile environment connection flows
juliusmarminge May 13, 2026
6b48288
Sync mobile remote branch with main
juliusmarminge May 20, 2026
3ee6fbb
Fix CI regressions after branch sync
juliusmarminge May 20, 2026
1e929ad
Handle intentional WS closes and heartbeat freshness
juliusmarminge May 20, 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
  •  
  •  
  •  
27 changes: 27 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,33 @@ jobs:
test -f apps/desktop/dist-electron/preload.cjs
grep -nE "desktopBridge|getLocalEnvironmentBootstrap|PICK_FOLDER_CHANNEL|wsUrl" apps/desktop/dist-electron/preload.cjs
mobile_native_static_analysis:
name: Mobile Native Static Analysis
runs-on: blacksmith-12vcpu-macos-26
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: package.json

- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: package.json

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

- name: Install mobile native static analysis tools
run: brew bundle install --file apps/mobile/Brewfile

- name: Lint mobile native sources
run: node scripts/mobile-native-static-check.ts
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI lint step silently skips execution with node

Medium Severity

The CI step runs node scripts/mobile-native-static-check.ts, but the script's entry-point guard uses import.meta.main — a Bun/Deno API that doesn't exist in Node.js (it evaluates to undefined/falsy). This means the lint step will load the module but never call Command.run, silently passing without executing any checks. The rest of the project uses bun to run scripts; this step likely needs bun instead of node.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit ef1ed88. Configure here.


release_smoke:
name: Release Smoke
runs-on: blacksmith-8vcpu-ubuntu-2404
Expand Down
3 changes: 3 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@
"bun.lock",
"*.tsbuildinfo",
"**/routeTree.gen.ts",
"apps/mobile/android/**",
"apps/mobile/ios/**",
"apps/web/public/mockServiceWorker.js",
"apps/web/src/lib/vendor/qrcodegen.ts",
"apps/mobile/uniwind-types.d.ts",
"*.icon/**"
],
"sortPackageJson": {},
Expand Down
6 changes: 5 additions & 1 deletion .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
"node_modules",
"bun.lock",
"*.tsbuildinfo",
"**/routeTree.gen.ts"
"**/routeTree.gen.ts",
"apps/mobile/android/**",
"apps/mobile/ios/**",
"apps/mobile/uniwind-types.d.ts"
],
"plugins": ["eslint", "oxc", "react", "unicorn", "typescript"],
"jsPlugins": ["./oxlint-plugin-t3code/index.ts"],
Expand All @@ -16,6 +19,7 @@
"perf": "warn"
},
"rules": {
"unicorn/no-array-sort": "off",
Comment thread
cursor[bot] marked this conversation as resolved.
"react-in-jsx-scope": "off",
"eslint/no-shadow": "off",
"eslint/no-await-in-loop": "off",
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## Task Completion Requirements

- All of `bun fmt`, `bun lint`, and `bun typecheck` must pass before considering tasks completed.
- If changing native mobile code, `bun lint:mobile` must also pass.
- NEVER run `bun test`. Always use `bun run test` (runs Vitest).

## Project Snapshot
Expand Down
12 changes: 12 additions & 0 deletions apps/mobile/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
root = false

[*.{kt,kts}]
indent_size = 2
ktlint_code_style = android_studio
ktlint_standard_blank-line-between-when-conditions = disabled
ktlint_standard_class-signature = disabled
ktlint_standard_function-signature = disabled
ktlint_standard_import-ordering = disabled
ktlint_standard_multiline-expression-wrapping = disabled
ktlint_standard_trailing-comma-on-call-site = disabled
ktlint_standard_when-entry-bracing = disabled
41 changes: 41 additions & 0 deletions apps/mobile/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files

# dependencies
node_modules/

# Expo
.expo/
dist/
web-build/
expo-env.d.ts

# Native
.kotlin/
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision

# Metro
.metro-health-check*

# debug
npm-debug.*
yarn-debug.*
yarn-error.*

# macOS
.DS_Store
*.pem

# local env files
.env*.local

# typescript
*.tsbuildinfo

# generated native folders
/ios
/android
58 changes: 58 additions & 0 deletions apps/mobile/.swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
included:
- ios/T3Code
- modules/t3-terminal/ios
- modules/t3-review-diff/ios

excluded:
- ios/Pods
- ios/build
- modules/t3-terminal/Vendor

reporter: xcode

disabled_rules:
- file_length
- function_body_length
- identifier_name
- line_length
- lower_acl_than_parent
- modifier_order
- trailing_comma
- type_body_length

opt_in_rules:
- array_init
- closure_end_indentation
- closure_spacing
- collection_alignment
- contains_over_filter_count
- contains_over_filter_is_empty
- contains_over_first_not_nil
- contains_over_range_nil_comparison
- empty_collection_literal
- empty_count
- empty_string
- enum_case_associated_values_count
- fallthrough
- fatal_error_message
- first_where
- flatmap_over_map_reduce
- force_unwrapping
- implicitly_unwrapped_optional
- last_where
- legacy_multiple
- legacy_random
- operator_usage_whitespace
- overridden_super_call
- prefer_self_type_over_type_of_self
- private_action
- private_outlet
- prohibited_super_call
- reduce_into
- redundant_nil_coalescing
- sorted_first_last
- static_operator
- toggle_bool
- unneeded_parentheses_in_closure_argument
- vertical_parameter_alignment_on_call
- yoda_condition
3 changes: 3 additions & 0 deletions apps/mobile/Brewfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
brew "swiftlint"
brew "ktlint"
brew "detekt"
81 changes: 81 additions & 0 deletions apps/mobile/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# T3 Code Mobile

> [!WARNING]
> T3 Code Mobile is currently in development and is not distributed yet. If you want to try it out, you can build it from source.

## Quickstart

> [!NOTE]
> Uses native modules so using Expo Go is not supported. You need to use the Expo Dev Client.

This app has three variants:

- `development`: Expo dev client, installable side-by-side as `T3 Code Dev`
- `preview`: persistent internal preview build, installable side-by-side as `T3 Code Preview`
- `production`: store/release build as `T3 Code`

Run commands from `apps/mobile`.

## Development

Start Metro for the dev client:

```bash
bun run dev:client
```

Build and run the local iOS dev client:

```bash
bun run ios:dev
```

Build and run the local iOS preview app:

```bash
bun run ios:preview
```

Force the review diff highlighter engine:

```bash
EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=javascript bun run ios:dev
```

`javascript` is the default and recommended setting for the review diff screen. Set `EXPO_PUBLIC_REVIEW_HIGHLIGHTER_ENGINE=native` only when you explicitly want to test the native Shiki engine.

Inspect the resolved Expo config for a variant:

```bash
bun run config:dev
bun run config:preview
```

Run static checks for mobile native code:

```bash
node ../../scripts/mobile-native-static-check.ts
```

The native lint task runs SwiftLint for Swift plus ktlint and detekt for Kotlin. Missing native tools are reported as warnings and skipped locally. CI installs the default toolset from `apps/mobile/Brewfile` before running the native checks.

## EAS Builds

Create a cloud dev-client build:

```bash
bun run eas:ios:dev
```

Create a persistent preview build:

```bash
bun run eas:ios:preview
```

Android equivalents:

```bash
bun run eas:android:dev
bun run eas:android:preview
```
Loading
Loading