Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
4a14fb8
Use GitHub-hosted runners for CI and release workflows
ashutoshpw Sep 5, 2026
5a8187f
chore: rename fork CLI to t2code
ashutoshpw Sep 5, 2026
35b3469
rebrand: rename app identity and deep-link schemes to T2 Code
ashutoshpw Sep 5, 2026
e08a42c
rebrand(web): user-facing copy to T2 Code
ashutoshpw Sep 5, 2026
780e944
rebrand(mobile): user-facing copy and t2code deep links
ashutoshpw Sep 5, 2026
6e81c2b
rebrand(server,desktop): user-facing strings to T2 Code
ashutoshpw Sep 5, 2026
fe8b42a
rebrand(shared,marketing,contracts): product copy to T2 Code
ashutoshpw Sep 5, 2026
552bb64
test: rebrand CI test fixtures to T2 Code
ashutoshpw Sep 5, 2026
a073008
feat: change the default server port from 3773 to 3772
ashutoshpw Sep 5, 2026
7d2b6c3
test(desktop): rebrand ssh prompt error expectation to T2 Code
ashutoshpw Sep 5, 2026
130afb2
docs: add rebase-with-upstream skill for rebrand audit
ashutoshpw Sep 5, 2026
449eab8
rebrand(server): qualify new HostResources service key for t2code
ashutoshpw Sep 6, 2026
4ffedf8
ci(release): run nightlies every 12 hours
ashutoshpw Sep 6, 2026
7aec7d7
rebrand(scripts): point mobile showcase at the T2 Code app identity
ashutoshpw Sep 6, 2026
af04c6f
rebrand: sweep remaining T3 Code copy to T2 Code
ashutoshpw Sep 6, 2026
7a7d569
docs: sweep remaining T3 Code copy to T2 Code
ashutoshpw Sep 6, 2026
96d77c7
chore(rebrand): fail commit and push on re-introduced T3 brand strings
ashutoshpw Sep 6, 2026
e9d7e78
rebrand: move @t3tools/web and @t3tools/marketing to the @t2code name…
ashutoshpw Sep 6, 2026
c842ce0
chore(mobile): move app bundle/package IDs to codes.t2.mobile
ashutoshpw Sep 6, 2026
bba4f75
chore(agents): rename test-t3-mobile skill to test-t2-mobile
ashutoshpw Sep 6, 2026
7cc2033
rebrand: move remaining @t3tools packages to the @t2code namespace
ashutoshpw Sep 6, 2026
aa44fe3
feat: let users rename environments
ashutoshpw Sep 6, 2026
429005c
refactor(relay): migrate T3 relay identity to T2
ashutoshpw Sep 6, 2026
442aebe
feat(providers): import chat history from settings with a time window
ashutoshpw Sep 6, 2026
9f5a83f
refactor(relay): rebrand mobile tracing and cloudflared env vars to T2
ashutoshpw Sep 6, 2026
bc069fa
chore(release): default hosted web domains to t2.codes
ashutoshpw Sep 6, 2026
c1be969
feat(relay): provision relay database on Neon instead of PlanetScale
ashutoshpw Sep 6, 2026
2f76708
docs: drop Homebrew install and point releases at the fork
ashutoshpw Sep 6, 2026
fa8429e
fix(relay): patch alchemy Output walker to break reference cycles
ashutoshpw Sep 6, 2026
131e1cb
docs(skill): gate upstream GitHub Actions changes
ashutoshpw Sep 9, 2026
28472aa
fix(server): preserve ACP permission option IDs
ashutoshpw Sep 9, 2026
13ce349
fix(server): reject empty ACP option IDs
ashutoshpw Sep 9, 2026
12abd41
fix(acp): support native session modes and optional auth
ashutoshpw Sep 9, 2026
51b5cda
fix(acp): honor advertised cursor approval options
ashutoshpw Sep 9, 2026
33feb98
test(acp): cover cursor approval options
ashutoshpw Sep 9, 2026
f3dd713
fix(acp): use native cursor modes safely
ashutoshpw Sep 9, 2026
7caa50f
feat(contracts): add fx provider settings and defaults
ashutoshpw Sep 9, 2026
6e5fb9f
feat(ui): add fx provider presentation
ashutoshpw Sep 9, 2026
1278aae
fix(web): expose fx in provider diagnostics
ashutoshpw Sep 9, 2026
0041e2c
fix(server): serialize FX prompt lifecycle safely
ashutoshpw Sep 9, 2026
c593716
feat(provider): add fx ACP harness
ashutoshpw Sep 9, 2026
0dd4ce8
fix(provider): hide unsupported fx text generation
ashutoshpw Sep 9, 2026
1882cbd
test(provider): cover fx ACP lifecycle
ashutoshpw Sep 9, 2026
eea4b93
test(provider): cover fx cancellation policies
ashutoshpw Sep 9, 2026
5f6357b
fix(provider): type fx approval options
ashutoshpw Sep 9, 2026
29e7911
test(fx): preserve adapter error type
ashutoshpw Sep 9, 2026
8ea27be
test(fx): stabilize adapter and desktop harness types
ashutoshpw Sep 9, 2026
9490838
style(fx): format adapter harness test
ashutoshpw Sep 9, 2026
984da9c
feat(settings): make worktree branch prefix configurable (default t2c…
ashutoshpw Sep 9, 2026
655f991
fix(shared): drop unused legacy-prefix re-export flagged by knip
ashutoshpw Sep 9, 2026
6ec7aa6
fix(relay): adopt existing production trace dataset
ashutoshpw Sep 15, 2026
f4f6682
fix(ci): make preview releases pass reliably
ashutoshpw Sep 15, 2026
febbcb2
fix(release): align CLI archive and npm publishing
ashutoshpw Sep 15, 2026
4154cd9
fix(release): gate releases on npm package visibility
ashutoshpw Sep 15, 2026
7d2793a
fix(release): satisfy publish gate lint rules
ashutoshpw Sep 15, 2026
03cbdb6
fix(release): use T2 Code marketing and AUR repositories
ashutoshpw Sep 15, 2026
b2364ad
feat(branding): complete T2 Code brand assets
ashutoshpw Sep 15, 2026
179365a
fix(release): remove dead exports
ashutoshpw Sep 15, 2026
3e16206
chore(rebrand): guard legacy t3tools identifiers
ashutoshpw Sep 15, 2026
35b65cb
fix(rebrand): inspect each legacy identifier
ashutoshpw Sep 15, 2026
74eaa6c
fix(project): migrate checked-in config to t2.json (#7)
ashutoshpw Sep 15, 2026
d6812fb
docs(rebrand): gate rebase pre-flight on origin/main CI
ashutoshpw Sep 16, 2026
33a8b63
fix(rebrand): rebrand T3 Connect display copy to T2 Connect
ashutoshpw Sep 16, 2026
55c02d5
feat(rebrand): widen brand guard to global Connect copy, @t3 scopes, …
ashutoshpw Sep 16, 2026
7b2d1b0
refactor: rename internal T3CODE_/T3_ env vars to T2 naming
ashutoshpw Sep 16, 2026
a60f7b7
feat: honor legacy T3CODE_* env names while teaching T2CODE_*
ashutoshpw Sep 16, 2026
ed86d99
chore: extend rebrand guard with env-name rules
ashutoshpw Sep 16, 2026
d4da05f
docs: rebase skill and brand audit cover the env-name migration
ashutoshpw Sep 16, 2026
b78e5c5
fix: keep legacy project-script env expectations in setup runner tests
ashutoshpw Sep 16, 2026
863b2d8
fix: dedupe legacy env expectations in web projectScripts test
ashutoshpw Sep 16, 2026
df46d8c
chore: drop legacy GitHub repo variable fallbacks
ashutoshpw Sep 16, 2026
cd5d8dc
style: format files touched by the upstream rebase
ashutoshpw Sep 16, 2026
a598325
fix(web): resolve upload URL before guarding the connection
ashutoshpw Sep 16, 2026
4b15902
test(server): cover signed workspace file uploads (#8)
ashutoshpw Sep 17, 2026
fd25760
style: format the workspace file upload test
ashutoshpw Sep 17, 2026
0933b41
fix(desktop): align the dev remote entry path env name in the test
ashutoshpw Sep 19, 2026
e58a4ef
style: format the test-t3-app skill
ashutoshpw Sep 19, 2026
d3bf1c4
test(relay): mock EnvironmentLinks in the routing fallback test
ashutoshpw Sep 19, 2026
862a1f7
test(relay): satisfy the EnvironmentLinks requirement type in the rou…
ashutoshpw Sep 19, 2026
040101b
test(relay): provide EnvironmentLinks to the routing fallback test
ashutoshpw Sep 19, 2026
9ac9121
chore(relay): drop a stray duplicate of the Api test
ashutoshpw Sep 19, 2026
1ffd8f8
fix(relay): use the supported deploy flags in the release workflow
ashutoshpw Sep 19, 2026
52b10e4
rebrand: complete the t2 namespace migration
ashutoshpw Sep 19, 2026
cf78f71
chore(rebrand): baseline the pre-rename module paths that the rename …
ashutoshpw Sep 19, 2026
fa6ea21
fix(rebrand): align the oxlint plugin name with its registration
ashutoshpw Sep 19, 2026
b6b325f
rebrand: sweep remaining t3tools/t3code references to t2
ashutoshpw Sep 19, 2026
ccd7796
test(rebrand): update guard fixtures for the completed t2 migration
ashutoshpw Sep 19, 2026
158ef54
fix(rebrand): sync the triage playbook app domain
ashutoshpw Sep 19, 2026
fb34c70
fix(relay): health endpoint path in the connector test
ashutoshpw Sep 19, 2026
eb4d41e
rebrand: finish t3-chat/t3-context fixture migrations
ashutoshpw Sep 19, 2026
53c7985
rebrand: legacy context upgrade emits the t2-context scheme
ashutoshpw Sep 19, 2026
38cf24c
test: align the case-insensitive repo fixture with the t2code name
ashutoshpw Sep 19, 2026
5eb723b
rebrand: finish the t2-code icon rename in work-log presentation
ashutoshpw Sep 19, 2026
2806529
rebrand: t2-code ids in showcase, discord, and brand icon exports
ashutoshpw Sep 19, 2026
5b09534
rebrand: accept the t2-code MCP server identity in work-log labels
ashutoshpw Sep 19, 2026
7d43ad3
fix(rebrand): T2 Code display copy in the work-log test
ashutoshpw Sep 19, 2026
7c5701e
test: restore legacy-scheme fixtures in composer draft store migrations
ashutoshpw Sep 19, 2026
2d6f8d6
rebrand: fold the legacy context-link regex into the shared matcher
ashutoshpw Sep 19, 2026
99b771d
rebrand: t2-code icon name in the timeline icon union
ashutoshpw Sep 19, 2026
372a0b9
rebrand: t2-code icon in the timeline logic and union
ashutoshpw Sep 19, 2026
99908f5
test: t2-context fragment attribute in the clipboard test
ashutoshpw Sep 19, 2026
c00cbd5
ci: batch Rust and release smoke checks into one job
ashutoshpw Sep 22, 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
  •  
  •  
  •  
44 changes: 44 additions & 0 deletions .agents/skills/rebase-with-upstream/BRAND-AUDIT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Brand audit reference

Companion to SKILL.md. What the guard covers, how to classify a hit, and the traps that have bitten past rebases. The guard is `scripts/check-rebrand.ts`; its in-file allowlists and `scripts/rebrand-baseline.json` are the only legitimate exemptions.

## What the guard rejects

Line rules run on every added line (pre-commit: staged; pre-push: pushed ranges; CI: whole tree). Path rules run once per tracked file, so a renamed or binary asset cannot carry a T3 name past a commit.

| Rule id | Rejects |
| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `t3-connect-copy` | "T3 Connect" copy anywhere — "T2 Connect" is the brand. Compatibility identifiers (module names like `T3ConnectUserProfilePage`, route ids like `t3-connect`, token types like `t3-link-challenge+jwt`) are not copy; they stay. |
| `t3-copy` | "T3 Code"/"T3Code" as first-party copy. |
| `t3-wordmark-ref`, `t3-mark-ref`, `t3-wordmark-label`, `t3-wordmark-path` | Retired wordmark/widget-mark components, bare `T3` aria labels, the legacy SVG path fingerprint. |
| `t3-cli-scope` | `@t3code/` — an invented half-rename; the fork CLI is `@t2code/cli` (upstream ships it unscoped as `t3`). |
| `t3-scope` | `@t3/` — an invented upstream-adjacent scope; fork packages are `@t2code/*`. |
| `t3tools-scope`, `t3tools-brand` | `@t3tools/` and repository-owned `t3tools` metadata; upstream repo URLs stay. |
| `t3-port` | 3773 and derived `3_773`/`13_773` literals; the fork's port is 3772. |
| `t3-scheme`, `t3-scheme-preview` | `t3code`/`t3code-preview` deep-link schemes outside legacy storage partition names. |
| `t3-env-name` | `T3CODE_*`/`T3_*` env names. The namespace is `T2CODE_*`/`T2_*`; legacy spellings survive only in the guarded seam files (`packages/shared/src/legacyEnv.ts` + its test), baseline-grandfathered compat lines, and the rule's retained non-env identifiers (`T3_CHAT_THEME`, `T3_CHAT_THEME_ID`, `T3_CODE_*` theme/prompt constants, `T3_PIERRE_ICONS`, `T3_FILE_ICON_SPRITE`, `T3_MCP_TOOL_LABELS`). |
| `t3-named-path` | Any tracked path containing `t3` not followed by a digit (avoids `bit31`-style false positives). |
| `t3-project-file` | Restoring upstream's root `t3.json`. |

`.agents/`, `.repos/`, and `apps/mobile/modules/` are exempt dirs; the guard's own sources are guarded files. Everything grandfathered is an exact baseline entry — `file` + line for content, `file` + empty line for paths. Remove the entry when you remove the string.

## Classifying a sweep hit

Grep for brand strings across tests and copy-bearing files:

```sh
rg -n "T3 Code|T3_CODE|@t3code/cli|@t3tools/|t3tools|@t2code/" -g '!node_modules' -g '!.t3' -g '!.repos' -g '!patches/**'
rg -no "(?<![A-Za-z0-9_])T3(?:CODE)?_[A-Z0-9_]+" -g '!node_modules' -g '!.t3' -g '!.repos' -g '!.agents' -g '!patches/**'
```

- **Intentional, leave alone:** upstream repo URLs, compatibility-bound platform identifiers (bundle ids like `com.t3tools.t3code`, the AUR `t3code-bin` package name), upstream `@t2code/*` package scope (upstream's CLI is unscoped `t3`; the fork's packages are `@t2code/*` — any `@t2code/` or `@t3code/` outside exempt dirs is a rebase gap), vendored `.repos/`, git blob SHAs inside `patches/`, historical validation notes in comments, mock strings echoed verbatim by both source and test. Existing `t3tools` exceptions must be exact baseline entries; do not add a blanket directory exemption for new hits.
- **Must be T2:** user-facing copy, error messages, announcements, embedded playbook/prompt text, release names, showcase data — anywhere the source was rebranded but a test fixture or doc still says T3.

## Known traps from past rebases

- **Numeric literals with separators**: `3_773` and `13_773` do not match a `3773` grep. Search `\d_773`, `13_773`, `14_607`-style derived literals separately.
- **Derived expectations**: tests that compute ports from a base constant shift by one when the base moves; exhaustion-boundary tests (e.g. `startOffset` where `base + offset > 65535`) must be recomputed, not string-replaced.
- **Embedded copies that must stay byte-identical**: `apps/server/src/cli/triagePrompt.ts` (`TRIAGE_PLAYBOOK`) and `.github/triage/PLAYBOOK.md` must match exactly — rebrand both or neither.
- **Fixtures as inputs vs expectations**: a `releaseName` a test feeds in and asserts back verbatim can stay as-is only if it is not rebranded upstream; if the real producer (e.g. `resolve-nightly-release.ts`) emits T2, rebrand the fixture too so the test stays realistic.
- **Env names are contextual, not textual**: legacy `T3CODE_*`/`T3_*` spellings are legitimate in exactly three places — the guarded seam files, baseline-grandfathered compat lines (dual-read fallbacks like `(repoEnv.T2CODE_X ?? repoEnv.T3CODE_X)`, legacy strippers in `infra/relay/scripts/deploy.ts`, boot-service parsers that accept both spellings, workflow `vars.T2_X || vars.T3_X` rotations), and the guard's retained identifier list. Anything else — including prefix checks (`startsWith("T2CODE_")`), sentinel strings (`__T2_SETUP_DONE__`), and generated remote-shell scripts — must use the T2 namespace. Identifier substrings (`LEGACY_T3_CHAT_DARK_THEME_ID`, `devRemoteServerEntryPath`-style camelCase) do not match the rule; do not use that as a loophole to spell env names with a T3 prefix.
- **Legacy-name coverage lives in dedicated tests**: the fallback path is exercised by `packages/shared/src/legacyEnv.test.ts`, the legacy `T3CODE_HOME` test in `apps/server/src/cli/config.test.ts`, and the legacy env-file fixtures in `scripts/lib/public-config.test.ts`. New env-name tests assert T2 names; do not spread legacy spellings into other fixtures.
69 changes: 69 additions & 0 deletions .agents/skills/rebase-with-upstream/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
name: rebase-with-upstream
description: Rebase the T2 Code fork (ashutoshpw/t2code) onto upstream T3 Code (pingdotgg/t3code) and audit that the T2 Code rebrand still holds after upstream's changes are merged in. Use when rebasing main onto upstream/main, syncing the fork with upstream, or after a rebase when CI fails with "T3" strings the fork had rebranded to "T2".
---

# Rebase with upstream + rebrand audit

This fork tracks `pingdotgg/t3code` (upstream) and publishes as **T2 Code** on `ashutoshpw/t2code` (origin). A rebase replays the fork's rebrand commits on top of new upstream work, and upstream's new commits routinely contain `T3` strings the rebrand has never seen. The rebase is not done when git says it is; it is done when the brand audit passes.

## Pre-flight

1. Work from a clean tree with local `main` == `origin/main`.
2. `git fetch origin main && git fetch upstream main`.
3. Gate on CI before touching history — a rebase rewrites `main`, so starting from a red base makes the post-push loop chase failures the rebase never caused:
```sh
gh run list --repo ashutoshpw/t2code --branch main --commit "$(git rev-parse origin/main)"
```
- Any run still `queued` or `in_progress`: wait for it to finish before continuing.
- Any run concluding `failure` or `cancelled`: abort. Report the failing checks and stop — do not rebase until `origin/main` is green or the user explicitly says go.
- No runs for that SHA at all: suspicious rather than green; confirm with the user first.
4. Review divergence: `git rev-list --left-right --count origin/main...upstream/main`.
5. Dry-run the conflict surface (Git < 2.38 lacks `merge-tree --write-tree`; use the legacy form):
```sh
git merge-tree "$(git merge-base upstream/main origin/main)" upstream/main origin/main
```
Count real conflicts with `grep -c '^+<<<'`. Report the plan before rebasing.

## Rebase

1. `git rebase upstream/main`.
2. Conflict policy — the fork's rebrand wins for user-facing copy, but upstream's structural changes win:
- If upstream refactored code the rebrand renamed (extracted variables, moved strings), re-apply the rebrand _inside upstream's new shape_. Example: upstream hoisted an `installArgs` array for an npm fallback path; keep the hoist, keep the `@t2code/cli` package name.
- Env vars belong to the T2 namespace (`T2CODE_*`/`T2_*`). Upstream's new env reads and writes must be renamed inside upstream's new shape, and upstream's new tests that assert env names flip with them. External inputs keep working through the legacy-name seam (`@t2code/shared/legacyEnv`, its config helpers in `@t2code/shared/legacyEnvConfig`, and baseline-grandfathered fallback lines) — do not re-widen that seam during a rebase; new upstream variables get T2 names only.
- Watch for upstream swapping npm packages (`t3` vs `@t2code/cli`) and URLs (keep upstream repo URLs like `github.com/pingdotgg/t3code` — those are intentional).
- Ask the user before adopting any new GitHub Actions entry or edit to an existing one in the fork.
3. Fold conflict fixes into the fork commit they belong to (`git commit --fixup=<sha>` + `GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash upstream/main`) so history stays at the fork's usual 7-ish commits.

## Rebrand audit (the part that actually catches failures)

The repo ships a brand guard: pre-commit and pre-push hooks run `scripts/check-rebrand.ts` (added staged lines, pushed ranges, and tracked paths) and fail on re-introduced T3 strings — copy, package scopes, ports, schemes, and T3-named file paths alike. Run the same audit over the whole tree before pushing:

```sh
node scripts/check-rebrand.ts --tree
```

Hits that are genuinely intentional (legacy compat, upstream references) get exempted via the allowlists in `scripts/check-rebrand.ts` or `scripts/rebrand-baseline.json` (`node scripts/check-rebrand.ts --update-baseline`) — review that diff like code, never `--no-verify`.

Upstream's new tests hardcode `T3` copy that the rebrand commits predate. These failures hide: CI jobs fail fast per package, so later suites never run and each push reveals one more. Do not trust a single green suite — sweep everything.

1. Grep and classify hits per [BRAND-AUDIT.md](./BRAND-AUDIT.md) — the full rule table, the compat-vs-must-rebrand taxonomy, and known traps from past rebases.
2. The reliable signal is execution, not eyeballing: run every test file that mentions brand copy, plus every test file touched by the rebase. A test that passes is fine regardless of why; a mismatch always shows up as `expected 'T2 …' to equal 'T3 …'` (or the reverse).

## Verify and push

1. Run targeted typecheck for the packages the rebase touched (e.g. `pnpm --filter @t2code/cli run typecheck`).
2. Update `origin/main` with `git push --force-with-lease origin main` — a rebase always rewrites the fork's main.
3. Poll CI on the pushed head. When a job fails, check whether it is a new rebrand gap (fix, fixup into the right commit, push) or a masked suite that now runs for the first time (expect a few rounds on busy rebases). Stop when every check is green on the latest commit.

## Report what changed

A finished rebase is not just a green push — close every run with a short summary the user can scan. Keep it to bullets, one line each; cite `file:line` when pointing at a specific decision.

1. **The rebase**: upstream range (old tip → new tip), how many upstream commits were picked up, how many fork commits replayed, and the pushed head SHA.
2. **Conflict work**: the resolutions that mattered, not every file — structural calls (whose side won and why), rebrands re-applied inside upstream's new shape, and any fork commit that became obsolete, was dropped, or was folded away.
3. **Rebrand gaps found**: what the audit caught and fixed, plus keeper classifications worth remembering (things that look like gaps but are intentional).
4. **Verification**: what actually ran — guard, typechecks, test suites — and their results. Note anything that could not be verified locally and is only covered by CI.
5. **Flags for the user**: pre-existing failures, deliberate deviations from upstream, removed legacy seams, and anything that needs a decision (e.g. a URL a rename would 404).

If a round was aborted, or CI is not green on the latest commit, say so explicitly instead of implying success.
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: test-t3-mobile
description: Test T3 Code's native iOS and Android app through its Device panel and returned AgentDevice command. Use for mobile verification, native-client builds, Metro launch, and mobile pairing against isolated development state.
name: test-t2-mobile
description: Test T2 Code's native iOS and Android app through its Device panel and returned AgentDevice command. Use for mobile verification, native-client builds, Metro launch, and mobile pairing against isolated development state.
---

# Test T3 Mobile
# Test T2 Mobile

## Open the device

Expand All @@ -26,7 +26,7 @@ Test with meaningful project and thread data. Read the shared
[SQLite fixture reference](../test-t3-app/references/sqlite-fixtures.md) only
when inspecting or seeding SQLite. Stop the test server before fixture writes.

## Launch T3 Code Dev
## Launch T2 Code Dev

From the checkout being tested on the selected device host, run:

Expand All @@ -39,7 +39,7 @@ mobile verification includes that build step unless the user prohibits it.

Start `vp run dev:client` from `apps/mobile`, or reuse a healthy Metro belonging
to this checkout. Open its printed development-client URL with AgentDevice
`open com.t3tools.t3code.dev <url>` and all returned target arguments.
`open codes.t2.desktop.dev <url>` and all returned target arguments.
The device must be able to reach both Metro and the isolated backend.

## Pair and verify
Expand All @@ -49,12 +49,12 @@ arguments stored in `agent_device_command` and the Bash array
`agent_device_target_args`:

```bash
.agents/skills/test-t3-mobile/scripts/pair-client.sh \
.agents/skills/test-t2-mobile/scripts/pair-client.sh \
<server-port> <base-dir> <device-reachable-backend-origin> \
"$agent_device_command" "${agent_device_target_args[@]}"
```

It issues a fresh credential and opens T3 Code Dev's existing pairing route
It issues a fresh credential and opens T2 Code Dev's existing pairing route
through AgentDevice. For a backend on the device host, use
`http://127.0.0.1:<server-port>` on iOS or `http://10.0.2.2:<server-port>`
on Android. For a remote backend, use its reachable origin.
Expand Down
4 changes: 4 additions & 0 deletions .agents/skills/test-t2-mobile/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Test T2 Mobile"
short_description: "Test T2 Code on iOS or Android"
default_prompt: "Use $test-t2-mobile to launch T2 Code against an isolated backend and verify the affected flow on an available simulator or emulator."
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,31 @@ usage() {

[[ $# -ge 5 ]] || usage

<<<<<<< HEAD
server_port="$1"
base_dir="$2"
mobile_origin="$3"
agent_device_command="$4"
shift 4
=======
platform="$1"
device_id="$2"
server_port="$3"
base_dir="$4"
url_scheme="${5:-t2code-dev}"

case "$platform" in
ios)
mobile_origin="http://127.0.0.1:${server_port}"
;;
android)
mobile_origin="http://10.0.2.2:${server_port}"
;;
*)
usage
;;
esac
>>>>>>> 7b901800f (rebrand: move remaining @t3tools packages to the @t2code namespace)

repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"
Expand Down Expand Up @@ -44,7 +64,7 @@ process.stdout.write(`t3code-dev://connections/new?${query}`);
NODE
)"

if ! "$agent_device_command" open com.t3tools.t3code.dev "$deep_link" "$@" \
if ! "$agent_device_command" open codes.t2.mobile.dev "$deep_link" "$@" \
>/dev/null 2>&1; then
echo "AgentDevice could not open the pairing route. Check the Device panel and retry with a fresh credential." >&2
exit 1
Expand Down
Loading
Loading