diff --git a/.agents/skills/ios-debugger-agent/SKILL.md b/.agents/skills/ios-debugger-agent/SKILL.md index 7afa579383d9..e74158a8a4e1 100644 --- a/.agents/skills/ios-debugger-agent/SKILL.md +++ b/.agents/skills/ios-debugger-agent/SKILL.md @@ -1,6 +1,6 @@ --- name: ios-debugger-agent -description: Build, launch, inspect, and drive iOS apps with the repository-configured XcodeBuildMCP server. Use on macOS for iOS Simulator builds, focused native test runs, semantic UI automation, screenshots, logs, or debugging, including T3 Code Mobile verification. +description: Build, launch, inspect, and drive iOS apps with the repository-configured XcodeBuildMCP server. Use on macOS for iOS Simulator builds, focused native test runs, semantic UI automation, screenshots, logs, or debugging, including Platon Code Mobile verification. --- # iOS Debugger Agent diff --git a/.agents/skills/ios-simulator-browser/SKILL.md b/.agents/skills/ios-simulator-browser/SKILL.md index 74b97530799c..59c83c3b72ce 100644 --- a/.agents/skills/ios-simulator-browser/SKILL.md +++ b/.agents/skills/ios-simulator-browser/SKILL.md @@ -1,6 +1,6 @@ --- name: ios-simulator-browser -description: Stream an explicit iOS Simulator through pinned serve-sim into the T3 Code in-app browser or another agent browser. Use on Apple Silicon macOS when the user should watch simulator verification live or when browser-visible simulator evidence is needed. +description: Stream an explicit iOS Simulator through pinned serve-sim into the Platon Code in-app browser or another agent browser. Use on Apple Silicon macOS when the user should watch simulator verification live or when browser-visible simulator evidence is needed. --- # iOS Simulator Browser @@ -11,7 +11,7 @@ Use serve-sim as the shared visual feed for an iOS Simulator. Use `ios-debugger- serve-sim `0.1.45` requires Apple Silicon macOS, Xcode command-line tools, and Node.js 20 or newer. If the host is unsupported, continue with XcodeBuildMCP screenshots and report that live streaming was unavailable. -When running inside T3 Code, use its product-native browser MCP to open the stream. Other agent hosts may use their own browser or preview surface. +When running inside Platon Code, use its product-native browser MCP to open the stream. Other agent hosts may use their own browser or preview surface. Keep serve-sim on its default `127.0.0.1` binding. Do not expose its preview to a LAN or tunnel unless the user explicitly requests that access and the network is trusted; the preview includes a token-gated shell-execution route. diff --git a/.agents/skills/ios-simulator-browser/agents/openai.yaml b/.agents/skills/ios-simulator-browser/agents/openai.yaml index 9e8cdf7a16b0..dd992b143278 100644 --- a/.agents/skills/ios-simulator-browser/agents/openai.yaml +++ b/.agents/skills/ios-simulator-browser/agents/openai.yaml @@ -1,4 +1,4 @@ interface: display_name: "iOS Simulator Browser" short_description: "Stream iOS Simulator in the browser" - default_prompt: "Use $ios-simulator-browser to stream the selected iOS Simulator into the T3 Code in-app browser." + default_prompt: "Use $ios-simulator-browser to stream the selected iOS Simulator into the Platon Code in-app browser." diff --git a/.agents/skills/test-t3-app/SKILL.md b/.agents/skills/test-platon-app/SKILL.md similarity index 73% rename from .agents/skills/test-t3-app/SKILL.md rename to .agents/skills/test-platon-app/SKILL.md index 45524f6fcd33..2fc13123211c 100644 --- a/.agents/skills/test-t3-app/SKILL.md +++ b/.agents/skills/test-platon-app/SKILL.md @@ -1,24 +1,24 @@ --- -name: test-t3-app -description: Launch, retain, and test the T3 Code web app in isolated development environments, including first-try browser authentication with one-time pairing URLs, pairing-token recovery, worktree-safe state directories, cross-turn dev server lifecycle, and direct SQLite inspection or fixture seeding. Use when an agent needs to run T3 locally, iteratively test UI behavior with a human, recover from an expired or consumed pairing token, isolate dev state, or prepare test data in state.sqlite. +name: test-platon-app +description: Launch, retain, and test the Platon Code web app in isolated development environments, including first-try browser authentication with one-time pairing URLs, pairing-token recovery, worktree-safe state directories, cross-turn dev server lifecycle, and direct SQLite inspection or fixture seeding. Use when an agent needs to run T3 locally, iteratively test UI behavior with a human, recover from an expired or consumed pairing token, isolate dev state, or prepare test data in state.sqlite. --- # Test T3 App -Use this skill for the web client. For iOS Simulator, Android Emulator, or physical-device testing against an isolated T3 backend, use the sibling [`test-t3-mobile`](../test-t3-mobile/SKILL.md) skill. +Use this skill for the web client. For iOS Simulator, Android Emulator, or physical-device testing against an isolated T3 backend, use the sibling [`test-platon-mobile`](../test-platon-mobile/SKILL.md) skill. ## Start an isolated web environment 1. Run commands from the repository root. 2. Choose a base directory that belongs only to the current worktree or test: - - Use the repository's ignored `.t3` directory for reusable worktree-local state. - - Use `mktemp -d /tmp/t3code-test.XXXXXX` for disposable state and retain the printed absolute path. -3. Start the full web stack with `vp run dev`. Add `--share` when the user needs to open it from another tailnet device. In a linked worktree it defaults to that worktree's gitignored `.t3`; pass `--home-dir ` only when the test needs a different isolated directory. + - Use the repository's ignored `.platon` directory for reusable worktree-local state. + - Use `mktemp -d /tmp/platon-code-test.XXXXXX` for disposable state and retain the printed absolute path. +3. Start the full web stack with `vp run dev`. Add `--share` when the user needs to open it from another tailnet device. In a linked worktree it defaults to that worktree's gitignored `.platon`; pass `--home-dir ` only when the test needs a different isolated directory. 4. Keep the terminal session alive and read the selected server port, web port, base directory, and pairing URL from its output. -Treat a base directory as disposable only when it was created or deliberately selected for the current test. Never delete or directly seed the shared `~/.t3` directory. Prefer starting with a new temporary base directory over clearing state of uncertain ownership. +Treat a base directory as disposable only when it was created or deliberately selected for the current test. Never delete or directly seed the shared `~/.platon` directory. Prefer starting with a new temporary base directory over clearing state of uncertain ownership. -The worktree-local default deliberately outranks an ambient `T3CODE_HOME`; do not pass the shared home through to a worktree dev server. +The worktree-local default deliberately outranks an ambient `PLATON_CODE_HOME`; do not pass the shared home through to a worktree dev server. Ports are derived from the worktree path but can shift when occupied. Always read the actual values from the `[dev-runner]` line. @@ -28,7 +28,7 @@ The dev runner disables browser auto-open by default. Do not pass `--browser` du ### Verify a shared environment before human handoff -When another person will use the printed pairing URL, first open the shared origin without the pairing path or fragment in the controlled browser and confirm the T3 Code app loads. This browser navigation is required even when curl succeeds because browsers block some otherwise reachable ports before making a network request. +When another person will use the printed pairing URL, first open the shared origin without the pairing path or fragment in the controlled browser and confirm the Platon Code app loads. This browser navigation is required even when curl succeeds because browsers block some otherwise reachable ports before making a network request. Do not open the other person's complete pairing URL during this reachability check; doing so consumes its one-time token. If the agent also needs an authenticated browser, create and consume a separate pairing token, then leave a fresh token for the other person. @@ -57,7 +57,7 @@ Treat pairing URLs as secrets. Do not copy them into final responses, screenshot Create another token against the same database and web URL as the running dev server: ```bash -T3CODE_PORT= node apps/server/src/bin.ts auth pairing create \ +PLATON_CODE_PORT= node apps/server/src/bin.ts auth pairing create \ --base-dir \ --dev-url \ --base-url \ @@ -65,20 +65,20 @@ T3CODE_PORT= node apps/server/src/bin.ts auth pairing create \ --label agent-ui-test ``` -Use the `Pair URL` from this command once. Derive `` and `` from the current dev-runner output, including any automatically selected port offset. Setting `T3CODE_PORT` keeps the administrative CLI from probing for an unrelated free port. +Use the `Pair URL` from this command once. Derive `` and `` from the current dev-runner output, including any automatically selected port offset. Setting `PLATON_CODE_PORT` keeps the administrative CLI from probing for an unrelated free port. -Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `/userdata`; the `/dev` fallback is only used by an implicit dev home. A worktree-local `.t3` counts as explicit, so its state lives in `/.t3/userdata`. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets. +Always pass `--dev-url` for a dev-runner environment so the generated pairing URL uses the current web origin. An explicit base directory stores runtime state in `/userdata`; the `/dev` fallback is only used by an implicit dev home. A worktree-local `.platon` counts as explicit, so its state lives in `/.platon/userdata`. Use `auth pairing list` to inspect active token metadata; it intentionally cannot reveal token secrets. ## Inspect or seed SQLite state Read [references/sqlite-fixtures.md](references/sqlite-fixtures.md) before changing the database. -- Use `node apps/server/scripts/t3-sqlite-state.ts query` for schema discovery and read-only checks. -- Stop the dev server before using `node apps/server/scripts/t3-sqlite-state.ts exec`, then restart it with the same base directory. +- Use `node apps/server/scripts/platon-sqlite-state.ts query` for schema discovery and read-only checks. +- Stop the dev server before using `node apps/server/scripts/platon-sqlite-state.ts exec`, then restart it with the same base directory. - Seed projection tables only for disposable UI fixtures. Use application commands and APIs when testing business behavior or projection correctness. - Use the auth CLI, not direct `auth_*` table edits, for pairing and sessions. -The helper refuses to write to the shared `~/.t3` directory by default and creates a database backup before each mutation. +The helper refuses to write to the shared `~/.platon` directory by default and creates a database backup before each mutation. ## Tear down only when the testing loop is finished diff --git a/.agents/skills/test-platon-app/agents/openai.yaml b/.agents/skills/test-platon-app/agents/openai.yaml new file mode 100644 index 000000000000..b36f45c20b21 --- /dev/null +++ b/.agents/skills/test-platon-app/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "T3 App Testing" + short_description: "Launch and retain isolated T3 test environments" + default_prompt: "Use $test-platon-app to launch an isolated Platon environment and iteratively test it in the browser while preserving state." diff --git a/.agents/skills/test-t3-app/references/sqlite-fixtures.md b/.agents/skills/test-platon-app/references/sqlite-fixtures.md similarity index 92% rename from .agents/skills/test-t3-app/references/sqlite-fixtures.md rename to .agents/skills/test-platon-app/references/sqlite-fixtures.md index 8eca543cf979..1b71e301c9d5 100644 --- a/.agents/skills/test-t3-app/references/sqlite-fixtures.md +++ b/.agents/skills/test-platon-app/references/sqlite-fixtures.md @@ -13,7 +13,7 @@ Start the target runtime once before seeding so all migrations have run. Use an List tables: ```bash -node apps/server/scripts/t3-sqlite-state.ts query \ +node apps/server/scripts/platon-sqlite-state.ts query \ --base-dir \ --sql "SELECT name FROM sqlite_schema WHERE type = 'table' ORDER BY name" ``` @@ -21,7 +21,7 @@ node apps/server/scripts/t3-sqlite-state.ts query \ Inspect current columns before writing a fixture: ```bash -node apps/server/scripts/t3-sqlite-state.ts query \ +node apps/server/scripts/platon-sqlite-state.ts query \ --base-dir \ --sql "PRAGMA table_info(projection_threads)" ``` @@ -29,9 +29,9 @@ node apps/server/scripts/t3-sqlite-state.ts query \ Apply a SQL fixture from a file: ```bash -node apps/server/scripts/t3-sqlite-state.ts exec \ +node apps/server/scripts/platon-sqlite-state.ts exec \ --base-dir \ - --file /tmp/t3-seed.sql + --file /tmp/platon-seed.sql ``` Use one statement per invocation for both `query` and `exec`; the helper wraps writes in a transaction and prints the backup path after a successful mutation. Use a single insert with multiple value rows when a fixture needs several records. diff --git a/.agents/skills/test-t3-mobile/SKILL.md b/.agents/skills/test-platon-mobile/SKILL.md similarity index 78% rename from .agents/skills/test-t3-mobile/SKILL.md rename to .agents/skills/test-platon-mobile/SKILL.md index 98c1c3b20224..d8454336b1ec 100644 --- a/.agents/skills/test-t3-mobile/SKILL.md +++ b/.agents/skills/test-platon-mobile/SKILL.md @@ -1,11 +1,11 @@ --- -name: test-t3-mobile -description: Launch and test T3 Code Mobile on an iOS Simulator or Android Emulator against disposable local T3 environments, including Metro and dev-client reuse, native rebuild decisions, per-client pairing, seeded projects, semantic UI control, screenshots, and iOS serve-sim streaming. Use after mobile UI or native changes, when reproducing phone or tablet behavior, pairing an emulator to isolated state, or verifying mobile behavior on macOS, Linux, or Windows. +name: test-platon-mobile +description: Launch and test Platon Code Mobile on an iOS Simulator or Android Emulator against disposable local Platon environments, including Metro and dev-client reuse, native rebuild decisions, per-client pairing, seeded projects, semantic UI control, screenshots, and iOS serve-sim streaming. Use after mobile UI or native changes, when reproducing phone or tablet behavior, pairing an emulator to isolated state, or verifying mobile behavior on macOS, Linux, or Windows. --- # Test T3 Mobile -Run one focused, end-to-end mobile verification pass against disposable T3 state. Use the sibling [`test-t3-app`](../test-t3-app/SKILL.md) skill as the detailed reference for pairing-token semantics and SQLite fixtures. +Run one focused, end-to-end mobile verification pass against disposable Platon state. Use the sibling [`test-platon-app`](../test-platon-app/SKILL.md) skill as the detailed reference for pairing-token semantics and SQLite fixtures. Command examples use POSIX shell syntax. On Windows, use PowerShell equivalents: set variables with `$env:NAME = "value"`, use an explicit temporary directory from `[System.IO.Path]::GetTempPath()`, and run multiline examples on one line or with PowerShell backticks. Use `$env:ANDROID_HOME\platform-tools\adb.exe` when `adb` is not already on `PATH`. @@ -28,15 +28,15 @@ Do not treat unavailable iOS tooling as a blocker when Android is a valid repres The development identity on both platforms is: -- App: `T3 Code Dev` -- Bundle/package identifier: `com.t3tools.t3code.dev` -- URL scheme: `t3code-dev` +- App: `Platon Code Dev` +- Bundle/package identifier: `com.platon.platon-code.dev` +- URL scheme: `platon-code-dev` Bundle or package presence proves the correct variant, not native compatibility. Reuse it only when the current changes did not alter its Expo SDK, native dependencies, config plugins, entitlements, generated project, or native source. -## Start one disposable T3 environment +## Start one disposable Platon environment -Run backend commands from the repository root. Use the ignored, worktree-local `.t3` directory or create a fresh directory with the host OS's temporary-directory mechanism. An explicit base directory stores state in `/userdata`; never point testing at shared `~/.t3` state. +Run backend commands from the repository root. Use the ignored, worktree-local `.platon` directory or create a fresh directory with the host OS's temporary-directory mechanism. An explicit base directory stores state in `/userdata`; never point testing at shared `~/.platon` state. Seed a small number of meaningful Git projects before starting the backend: @@ -48,7 +48,7 @@ node apps/server/src/bin.ts project add \ Running `project add` before the backend starts gives it exclusive offline database access. If a backend is already running, wait until it is ready so the CLI dispatches through the live server; never run offline mutations concurrently with the server. -Use direct SQLite mutation only for disposable projection fixtures. Follow `test-t3-app` and stop the backend before writing. +Use direct SQLite mutation only for disposable projection fixtures. Follow `test-platon-app` and stop the backend before writing. Start a headless backend after seeding: @@ -72,14 +72,14 @@ Enter the complete `http://` origin to make the test transport explicit. Bare IP Run Metro from `apps/mobile`. -1. Inspect any process on the intended Metro port and its `/status` response. Reuse it only when it is healthy, belongs to this worktree, and matches `APP_VARIANT=development`, `--dev-client`, and scheme `t3code-dev`. +1. Inspect any process on the intended Metro port and its `/status` response. Reuse it only when it is healthy, belongs to this worktree, and matches `APP_VARIANT=development`, `--dev-client`, and scheme `platon-code-dev`. 2. Never kill another worktree's Metro. Use a free explicit port when necessary. 3. Run `vp run dev:client` on the standard port. For another port, retain the complete development identity: ```bash APP_VARIANT=development vp exec expo start \ --dev-client \ - --scheme t3code-dev \ + --scheme platon-code-dev \ --clear \ --lan \ --port @@ -93,16 +93,16 @@ Run Metro from `apps/mobile`. Use `ios-debugger-agent` to select one UDID and set these XcodeBuildMCP session defaults: -- Workspace: `/apps/mobile/ios/T3CodeDev.xcworkspace` -- Scheme: `T3CodeDev` +- Workspace: `/apps/mobile/ios/PlatonCodeDev.xcworkspace` +- Scheme: `PlatonCodeDev` - Configuration: `Debug` - Simulator ID: the selected UDID -- Bundle ID: `com.t3tools.t3code.dev` +- Bundle ID: `com.platon.platon-code.dev` Check the installed client with: ```bash -xcrun simctl get_app_container com.t3tools.t3code.dev app +xcrun simctl get_app_container com.platon.platon-code.dev app xcrun simctl openurl ``` @@ -113,12 +113,12 @@ Accept the iOS confirmation prompt and dismiss the developer menu when it obscur Select one running emulator serial from `adb devices` and check the installed client: ```bash -adb -s shell pm path com.t3tools.t3code.dev +adb -s shell pm path com.platon.platon-code.dev adb -s reverse tcp: tcp: adb -s shell am start -W \ -a android.intent.action.VIEW \ -d '' \ - com.t3tools.t3code.dev + com.platon.platon-code.dev ``` Do not start, stop, erase, or reconfigure an emulator owned by another task. Track and later stop only processes owned by this test. @@ -128,28 +128,28 @@ Do not start, stop, erase, or reconfigure an emulator owned by another task. Tra Issue a fresh credential against the running backend's exact base directory: ```bash -T3CODE_PORT= node apps/server/src/bin.ts auth pairing create \ +PLATON_CODE_PORT= node apps/server/src/bin.ts auth pairing create \ --base-dir \ --base-url \ --ttl 15m \ --label agent-mobile- ``` -In PowerShell, set `$env:T3CODE_PORT = ""` first and run the `node ... auth pairing create` command without the leading assignment. +In PowerShell, set `$env:PLATON_CODE_PORT = ""` first and run the `node ... auth pairing create` command without the leading assignment. If the visible Add Environment action is not exposed as a semantic target, open the app's registered route instead of guessing coordinates: ```bash -xcrun simctl openurl 't3code-dev://connections/new' +xcrun simctl openurl 'platon-code-dev://connections/new' adb -s shell am start -W \ -a android.intent.action.VIEW \ - -d 't3code-dev://connections/new' \ - com.t3tools.t3code.dev + -d 'platon-code-dev://connections/new' \ + com.platon.platon-code.dev ``` Run only the command for the selected platform. -In T3 Code Dev, open Add Environment and enter the complete `` and newly printed `Token`. Verify the expected seeded projects appear before exercising the affected flow. +In Platon Code Dev, open Add Environment and enter the complete `` and newly printed `Token`. Verify the expected seeded projects appear before exercising the affected flow. Pairing credentials are secret, short-lived, and single-use. Create a different credential for every simulator, emulator, physical device, or browser. If an attempt fails, issue a new credential rather than retrying the old one. Do not expose tokens in screenshots, commits, or final responses. @@ -157,7 +157,7 @@ Pairing credentials are secret, short-lived, and single-use. Create a different ### iOS -Use `snapshot_ui` and current element references from XcodeBuildMCP for taps and typing. Stream the same UDID through `ios-simulator-browser` so the user can watch in T3 Code when the host supports it. Use the stream as a visual feed rather than a reason to switch to fragile browser coordinates. +Use `snapshot_ui` and current element references from XcodeBuildMCP for taps and typing. Stream the same UDID through `ios-simulator-browser` so the user can watch in Platon Code when the host supports it. Use the stream as a visual feed rather than a reason to switch to fragile browser coordinates. ### Android @@ -171,7 +171,7 @@ Exercise only the affected flow on one representative device unless the change s 1. Confirm the app connected to the intended disposable environment instead of merely rendering an empty disconnected state. 2. Capture the relevant final state. -3. Remove the disposable environment from T3 Code Dev. +3. Remove the disposable environment from Platon Code Dev. 4. Remove any `adb reverse` rule created for this test with `adb -s reverse --remove tcp:`. 5. Stop only the serve-sim, Metro, backend, emulator, and log processes started by this test. 6. Remove only base directories and temporary Git repositories deliberately created for this test. Preserve them when they contain useful reproduction evidence. diff --git a/.agents/skills/test-platon-mobile/agents/openai.yaml b/.agents/skills/test-platon-mobile/agents/openai.yaml new file mode 100644 index 000000000000..874a6ccc461c --- /dev/null +++ b/.agents/skills/test-platon-mobile/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Test T3 Mobile" + short_description: "Test Platon Code on iOS or Android" + default_prompt: "Use $test-platon-mobile to launch Platon Code against an isolated backend and verify the affected flow on an available simulator or emulator." diff --git a/.agents/skills/test-t3-app/agents/openai.yaml b/.agents/skills/test-t3-app/agents/openai.yaml deleted file mode 100644 index 0445ee4cb9ec..000000000000 --- a/.agents/skills/test-t3-app/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "T3 App Testing" - short_description: "Launch and retain isolated T3 test environments" - default_prompt: "Use $test-t3-app to launch an isolated T3 environment and iteratively test it in the browser while preserving state." diff --git a/.agents/skills/test-t3-mobile/agents/openai.yaml b/.agents/skills/test-t3-mobile/agents/openai.yaml deleted file mode 100644 index e9518ce9e04a..000000000000 --- a/.agents/skills/test-t3-mobile/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "Test T3 Mobile" - short_description: "Test T3 Code on iOS or Android" - default_prompt: "Use $test-t3-mobile to launch T3 Code against an isolated backend and verify the affected flow on an available simulator or emulator." diff --git a/.cursor/rules/cursor-cloud.mdc b/.cursor/rules/cursor-cloud.mdc index 98fcb1d5766a..49ab0221ce53 100644 --- a/.cursor/rules/cursor-cloud.mdc +++ b/.cursor/rules/cursor-cloud.mdc @@ -28,8 +28,8 @@ 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` - (`T3CODE_HOME`); multiple `npm run dev` instances bind different ports but share that same DB. + UI can talk to the server. Server state (SQLite, auth, projects) lives under `~/.platon` + (`PLATON_CODE_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 (`npm i -g @anthropic-ai/claude-code`) works headlessly using `ANTHROPIC_API_KEY` from the diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index cc1f11cd8baf..739f1dd06de4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "name": "T3 Code Dev", + "name": "Platon Code Dev", "image": "debian:bookworm", "features": { "ghcr.io/devcontainers/features/git:1": {}, diff --git a/.env.example b/.env.example index 61cdd66d246a..04b2b8af3ebc 100644 --- a/.env.example +++ b/.env.example @@ -1,28 +1,28 @@ -# Optional: T3 Connect source builds -# Leave these unset to disable optional T3 Connect features in local source builds. +# Optional: Platon Connect source builds +# Leave these unset to disable optional Platon 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_... +# PLATON_CODE_CLERK_PUBLISHABLE_KEY=pk_test_... +# PLATON_CODE_CLERK_JWT_TEMPLATE=platon-relay +# PLATON_CODE_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 PLATON_CODE_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 +# PLATON_CODE_APPLE_TEAM_ID=ABC1234567 +# PLATON_CODE_MACOS_PROVISIONING_PROFILE=/absolute/path/to/platon-code.provisionprofile +# PLATON_CODE_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 +# PLATON_CODE_RELAY_URL=https://relay.example.com # Optional: hosted app origin used by the CLI's out-of-band OAuth flow. # Defaults to https://app.t3.codes; override to test against a staging deployment. -# T3CODE_HOSTED_APP_URL=https://nightly.app.t3.codes +# PLATON_CODE_HOSTED_APP_URL=https://nightly.app.t3.codes # 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-... +# PLATON_CODE_MOBILE_OTLP_TRACES_URL=https://api.axiom.co/v1/traces +# PLATON_CODE_MOBILE_OTLP_TRACES_DATASET=platon-code-mobile-traces-dev +# PLATON_CODE_MOBILE_OTLP_TRACES_TOKEN=xaat-... diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e51867cbe7d..7ebb12f0b6e5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: components: rustfmt - name: Ensure Electron runtime is installed - run: vp run --filter @t3tools/desktop ensure:electron + run: vp run --filter @platon/desktop ensure:electron - name: Check run: vp check @@ -81,7 +81,7 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Ensure Electron runtime is installed - run: vp run --filter @t3tools/desktop ensure:electron + run: vp run --filter @platon/desktop ensure:electron - name: Test run: vp run test @@ -109,7 +109,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... + - --filter=@platon/scripts... - name: Install mobile native static analysis tools run: brew bundle install --file apps/mobile/Brewfile @@ -137,7 +137,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... + - --filter=@platon/scripts... - name: Exercise release-only workflow steps run: node scripts/release-smoke.ts diff --git a/.github/workflows/deploy-relay.yml b/.github/workflows/deploy-relay.yml index f652844a54f3..0b72b264b399 100644 --- a/.github/workflows/deploy-relay.yml +++ b/.github/workflows/deploy-relay.yml @@ -1,4 +1,4 @@ -name: Deploy T3 Connect relay +name: Deploy Platon Connect relay on: push: @@ -51,11 +51,11 @@ jobs: cache: true run-install: | args: - - --filter=t3code-relay... + - --filter=platon-code-relay... - name: Deploy production relay stage id: deploy - run: vp run --filter t3code-relay deploy --stage prod --yes --github-output + run: vp run --filter platon-code-relay deploy --stage prod --yes --github-output env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} PLANETSCALE_API_TOKEN_ID: ${{ secrets.PLANETSCALE_API_TOKEN_ID }} diff --git a/.github/workflows/mobile-eas-preview.yml b/.github/workflows/mobile-eas-preview.yml index d53602f8f5e8..2b3d6779fb85 100644 --- a/.github/workflows/mobile-eas-preview.yml +++ b/.github/workflows/mobile-eas-preview.yml @@ -52,7 +52,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/mobile... + - --filter=@platon/mobile... - name: Expose pnpm if: steps.expo-token.outputs.present == 'true' diff --git a/.github/workflows/mobile-eas-production.yml b/.github/workflows/mobile-eas-production.yml index 2e61de6039e8..d27f70901f81 100644 --- a/.github/workflows/mobile-eas-production.yml +++ b/.github/workflows/mobile-eas-production.yml @@ -70,7 +70,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/mobile... + - --filter=@platon/mobile... - name: Expose pnpm if: steps.expo-token.outputs.present == 'true' diff --git a/.github/workflows/mobile-showcase-screenshots.yml b/.github/workflows/mobile-showcase-screenshots.yml index 3eaaf508e31f..02768bda7fac 100644 --- a/.github/workflows/mobile-showcase-screenshots.yml +++ b/.github/workflows/mobile-showcase-screenshots.yml @@ -50,9 +50,9 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/mobile... - - --filter=@t3tools/scripts... - - --filter=t3... + - --filter=@platon/mobile... + - --filter=@platon/scripts... + - --filter=platon-code... - name: Expose pnpm run: | @@ -82,7 +82,7 @@ jobs: runs-on: blacksmith-16vcpu-ubuntu-2404 timeout-minutes: 60 env: - T3_SHOWCASE_ANDROID_ABI: x86_64 + PLATON_SHOWCASE_ANDROID_ABI: x86_64 steps: - name: Checkout uses: actions/checkout@v6 @@ -99,9 +99,9 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/mobile... - - --filter=@t3tools/scripts... - - --filter=t3... + - --filter=@platon/mobile... + - --filter=@platon/scripts... + - --filter=platon-code... - name: Expose pnpm run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ce47d6e6ed73..2af503a95c7a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -101,7 +101,7 @@ jobs: run-install: true - name: Ensure Electron runtime is installed - run: vp run --filter @t3tools/desktop ensure:electron + run: vp run --filter @platon/desktop ensure:electron - id: release_meta name: Resolve release version @@ -146,7 +146,7 @@ jobs: 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 "name=Platon 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" @@ -175,7 +175,7 @@ jobs: --github-output relay_public_config: - name: Resolve T3 Connect public config + name: Resolve Platon Connect public config needs: preflight if: ${{ !failure() && !cancelled() && needs.preflight.result == 'success' }} runs-on: blacksmith-8vcpu-ubuntu-2404 @@ -212,13 +212,13 @@ jobs: cache: true run-install: | args: - - --filter=t3code-relay... + - --filter=platon-code-relay... - id: relay_state name: Read production relay tracing config shell: bash run: | - vp run --filter t3code-relay deploy \ + vp run --filter platon-code-relay deploy \ --stage prod \ --read-state \ --github-output \ @@ -293,7 +293,7 @@ jobs: cache: true run-install: | args: - - --filter=t3... + - --filter=platon-code... - name: Build node-pty linux-x64 prebuild shell: bash @@ -330,10 +330,10 @@ jobs: runs-on: ${{ matrix.runner }} timeout-minutes: 30 env: - T3CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} - T3CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} - T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} - T3CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} + PLATON_CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} + PLATON_CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} + PLATON_CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} + PLATON_CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} strategy: fail-fast: false matrix: @@ -388,9 +388,9 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/desktop... - - --filter=t3... - - --filter=@t3tools/scripts... + - --filter=@platon/desktop... + - --filter=platon-code... + - --filter=@platon/scripts... - name: Setup Rust uses: dtolnay/rust-toolchain@stable @@ -407,7 +407,7 @@ jobs: shell: bash run: | config_path="$RUNNER_TEMP/relay-client-tracing/relay-client-tracing.env" - tracing_token="$(sed -n 's/^T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" + tracing_token="$(sed -n 's/^PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" echo "::add-mask::$tracing_token" cat "$config_path" >> "$GITHUB_ENV" @@ -525,7 +525,7 @@ jobs: APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }} APPLE_TEAM_ID: ${{ vars.APPLE_TEAM_ID }} MACOS_PROVISIONING_PROFILE: ${{ secrets.MACOS_PROVISIONING_PROFILE }} - T3CODE_CLERK_PASSKEY_RP_DOMAINS: ${{ vars.CLERK_PASSKEY_RP_DOMAINS }} + PLATON_CODE_CLERK_PASSKEY_RP_DOMAINS: ${{ vars.CLERK_PASSKEY_RP_DOMAINS }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} @@ -562,11 +562,11 @@ jobs: printf '%s' "$APPLE_API_KEY" > "$key_path" export APPLE_API_KEY="$key_path" - profile_path="$RUNNER_TEMP/t3code.provisionprofile" + profile_path="$RUNNER_TEMP/platon-code.provisionprofile" printf '%s' "$MACOS_PROVISIONING_PROFILE" | base64 -D > "$profile_path" security cms -D -i "$profile_path" >/dev/null - export T3CODE_APPLE_TEAM_ID="$APPLE_TEAM_ID" - export T3CODE_MACOS_PROVISIONING_PROFILE="$profile_path" + export PLATON_CODE_APPLE_TEAM_ID="$APPLE_TEAM_ID" + export PLATON_CODE_MACOS_PROVISIONING_PROFILE="$profile_path" echo "macOS signing enabled." args+=(--signed) @@ -639,7 +639,7 @@ jobs: shell: bash run: | set -euo pipefail - binary_name="t3-resource-monitor" + binary_name="platon-resource-monitor" if [[ "${{ matrix.platform }}" == "win" ]]; then binary_name="${binary_name}.exe" fi @@ -672,10 +672,10 @@ jobs: contents: read id-token: write env: - T3CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} - T3CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} - T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} - T3CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} + PLATON_CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} + PLATON_CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} + PLATON_CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} + PLATON_CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} steps: - name: Checkout uses: actions/checkout@v6 @@ -693,9 +693,9 @@ jobs: cache: true run-install: | args: - - --filter=t3... - - --filter=@t3tools/web... - - --filter=@t3tools/scripts... + - --filter=platon-code... + - --filter=@platon/web... + - --filter=@platon/scripts... - name: Download relay client tracing config uses: actions/download-artifact@v8 @@ -707,7 +707,7 @@ jobs: shell: bash run: | config_path="$RUNNER_TEMP/relay-client-tracing/relay-client-tracing.env" - tracing_token="$(sed -n 's/^T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" + tracing_token="$(sed -n 's/^PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" echo "::add-mask::$tracing_token" cat "$config_path" >> "$GITHUB_ENV" @@ -715,10 +715,10 @@ jobs: run: node scripts/update-release-package-versions.ts "${{ needs.preflight.outputs.version }}" - name: Build web package - run: vp run --filter @t3tools/web build + run: vp run --filter @platon/web build - name: Build CLI package - run: vp run --filter t3 build + run: vp run --filter platon-code build - name: Download resource monitors uses: actions/download-artifact@v8 @@ -734,8 +734,8 @@ jobs: resource_key="${artifact_dir##*/resource-monitor-}" target_dir="apps/server/dist/resource-monitor/${resource_key}" mkdir -p "$target_dir" - cp "$artifact_dir"/t3-resource-monitor* "$target_dir/" - chmod +x "$target_dir"/t3-resource-monitor 2>/dev/null || true + cp "$artifact_dir"/platon-resource-monitor* "$target_dir/" + chmod +x "$target_dir"/platon-resource-monitor 2>/dev/null || true done - name: Publish CLI package @@ -772,7 +772,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... + - --filter=@platon/scripts... - name: Download all desktop artifacts uses: actions/download-artifact@v8 @@ -869,16 +869,16 @@ jobs: runs-on: blacksmith-8vcpu-ubuntu-2404 timeout-minutes: 10 env: - T3CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} - T3CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} - T3CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} - T3CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} + PLATON_CODE_CLERK_PUBLISHABLE_KEY: ${{ needs.relay_public_config.outputs.clerk_publishable_key }} + PLATON_CODE_CLERK_JWT_TEMPLATE: ${{ needs.relay_public_config.outputs.clerk_jwt_template }} + PLATON_CODE_CLERK_CLI_OAUTH_CLIENT_ID: ${{ needs.relay_public_config.outputs.clerk_cli_oauth_client_id }} + PLATON_CODE_RELAY_URL: ${{ needs.relay_public_config.outputs.relay_url }} VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} - T3CODE_WEB_ROUTER_URL: ${{ vars.T3CODE_WEB_ROUTER_URL }} - T3CODE_WEB_LATEST_DOMAIN: ${{ vars.T3CODE_WEB_LATEST_DOMAIN }} - T3CODE_WEB_NIGHTLY_DOMAIN: ${{ vars.T3CODE_WEB_NIGHTLY_DOMAIN }} + PLATON_CODE_WEB_ROUTER_URL: ${{ vars.PLATON_CODE_WEB_ROUTER_URL }} + PLATON_CODE_WEB_LATEST_DOMAIN: ${{ vars.PLATON_CODE_WEB_LATEST_DOMAIN }} + PLATON_CODE_WEB_NIGHTLY_DOMAIN: ${{ vars.PLATON_CODE_WEB_NIGHTLY_DOMAIN }} VERCEL_TEAM_SLUG: ${{ vars.VERCEL_TEAM_SLUG }} steps: - name: Checkout @@ -897,8 +897,8 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... - - --filter=@t3tools/web... + - --filter=@platon/scripts... + - --filter=@platon/web... - name: Download relay client tracing config uses: actions/download-artifact@v8 @@ -910,7 +910,7 @@ jobs: shell: bash run: | config_path="$RUNNER_TEMP/relay-client-tracing/relay-client-tracing.env" - tracing_token="$(sed -n 's/^T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" + tracing_token="$(sed -n 's/^PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=//p' "$config_path")" echo "::add-mask::$tracing_token" cat "$config_path" >> "$GITHUB_ENV" @@ -930,9 +930,9 @@ jobs: exit 1 fi - router_url="${T3CODE_WEB_ROUTER_URL:-https://app.t3.codes}" - latest_domain="${T3CODE_WEB_LATEST_DOMAIN:-latest.app.t3.codes}" - nightly_domain="${T3CODE_WEB_NIGHTLY_DOMAIN:-nightly.app.t3.codes}" + router_url="${PLATON_CODE_WEB_ROUTER_URL:-https://app.t3.codes}" + latest_domain="${PLATON_CODE_WEB_LATEST_DOMAIN:-latest.app.t3.codes}" + nightly_domain="${PLATON_CODE_WEB_NIGHTLY_DOMAIN:-nightly.app.t3.codes}" router_domain="${router_url#http://}" router_domain="${router_domain#https://}" router_domain="${router_domain%%/*}" @@ -958,13 +958,13 @@ jobs: --token "$VERCEL_TOKEN" \ "${vercel_scope_args[@]}" \ --build-env "APP_VERSION=${{ needs.preflight.outputs.version }}" \ - --build-env "T3CODE_CLERK_PUBLISHABLE_KEY=${T3CODE_CLERK_PUBLISHABLE_KEY:-}" \ - --build-env "T3CODE_CLERK_JWT_TEMPLATE=${T3CODE_CLERK_JWT_TEMPLATE:-}" \ - --build-env "T3CODE_CLERK_CLI_OAUTH_CLIENT_ID=${T3CODE_CLERK_CLI_OAUTH_CLIENT_ID:-}" \ - --build-env "T3CODE_RELAY_URL=${T3CODE_RELAY_URL:-}" \ - --build-env "T3CODE_RELAY_CLIENT_OTLP_TRACES_URL=${T3CODE_RELAY_CLIENT_OTLP_TRACES_URL:-}" \ - --build-env "T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET=${T3CODE_RELAY_CLIENT_OTLP_TRACES_DATASET:-}" \ - --build-env "T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=${T3CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN:-}" \ + --build-env "PLATON_CODE_CLERK_PUBLISHABLE_KEY=${PLATON_CODE_CLERK_PUBLISHABLE_KEY:-}" \ + --build-env "PLATON_CODE_CLERK_JWT_TEMPLATE=${PLATON_CODE_CLERK_JWT_TEMPLATE:-}" \ + --build-env "PLATON_CODE_CLERK_CLI_OAUTH_CLIENT_ID=${PLATON_CODE_CLERK_CLI_OAUTH_CLIENT_ID:-}" \ + --build-env "PLATON_CODE_RELAY_URL=${PLATON_CODE_RELAY_URL:-}" \ + --build-env "PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_URL=${PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_URL:-}" \ + --build-env "PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_DATASET=${PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_DATASET:-}" \ + --build-env "PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN=${PLATON_CODE_RELAY_CLIENT_OTLP_TRACES_TOKEN:-}" \ --build-env "VITE_HOSTED_APP_URL=$router_url" \ --build-env "VITE_HOSTED_APP_CHANNEL=$channel_name" )" @@ -1025,8 +1025,8 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... - - --filter=@t3tools/oxlint-plugin-t3code... + - --filter=@platon/scripts... + - --filter=@platon/oxlint-plugin-platon-code... - id: update_versions name: Update version strings @@ -1089,7 +1089,7 @@ jobs: cache: true run-install: | args: - - --filter=@t3tools/scripts... + - --filter=@platon/scripts... - name: Announce prerelease on Discord if: needs.preflight.outputs.is_prerelease == 'true' diff --git a/.gitignore b/.gitignore index 07793efe9b52..72ac6215cea9 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ build/ release/ release-mock/ .t3 +.platon .idea/ apps/web/.playwright apps/web/playwright-report diff --git a/.macroscope/check-run-agents/effect-service-conventions.md b/.macroscope/check-run-agents/effect-service-conventions.md index 542e9028d36f..e43d706ae9c7 100644 --- a/.macroscope/check-run-agents/effect-service-conventions.md +++ b/.macroscope/check-run-agents/effect-service-conventions.md @@ -27,7 +27,7 @@ Review changed TypeScript and directly affected call sites for the conventions b - Import Effect library modules from their subpaths as namespaces, for example `import * as Effect from "effect/Effect"` and `import * as Layer from "effect/Layer"`. Flag consolidated named imports from `"effect"` in touched Effect service code. - At a service boundary, import the local service module as a namespace and use its public module shape: `WorkspacePaths.WorkspacePaths`, `WorkspacePaths.make`, and `WorkspacePaths.layer`. Flag aliases such as `import { layer as workspacePathsLayer }` that erase the module namespace. -- Namespace imports are not a blanket rule. Keep named imports for whole packages such as `@t3tools/contracts`, and for modules used only for a pure helper, error, schema, config value, or standalone type. Do not request `import type * as Contracts`. +- Namespace imports are not a blanket rule. Keep named imports for whole packages such as `@platon/contracts`, and for modules used only for a pure helper, error, schema, config value, or standalone type. Do not request `import type * as Contracts`. - A package subpath that is itself a service module may use a namespace import when callers access its service/tag, `make`, or `layer` members. - When a barrel exposes an entire service module, prefer `export * as TokenStore from "./tokenStore.ts"` so consumers can use `TokenStore.TokenStore` and `TokenStore.layer`. Do not individually rename `make` and `layer` exports to simulate a namespace. diff --git a/.plans/18-server-auth-model.md b/.plans/18-server-auth-model.md index 9f8ba8a05df1..0e1183091446 100644 --- a/.plans/18-server-auth-model.md +++ b/.plans/18-server-auth-model.md @@ -2,7 +2,7 @@ ## Purpose -Define the long-term server auth architecture for T3 Code before first-class remote environments ship. +Define the long-term server auth architecture for Platon Code before first-class remote environments ship. This plan is deliberately broader than the current WebSocket token check and narrower than a complete remote collaboration system. The goal is to make the server secure by default, keep local desktop UX frictionless, and leave clean integration points for future remote access methods. @@ -291,7 +291,7 @@ export interface ServerAuthShape { } export class ServerAuth extends ServiceMap.Service()( - "t3/ServerAuth", + "platon/ServerAuth", ) {} ``` @@ -571,7 +571,7 @@ T3Server -> T3Server : validate cookie session T3Server --> Frontend : websocket accepted ``` -### `npx t3` user +### `npx platon-code` user This is the standalone local server flow. @@ -579,7 +579,7 @@ There is no trusted desktop shell here, so pairing should be explicit. ```text Participants: - UserShell = npx t3 launcher + UserShell = npx platon-code launcher T3Server = standalone local server Browser = browser tab diff --git a/.plans/19-remote-endpoints-hosted-static.md b/.plans/19-remote-endpoints-hosted-static.md index ada2f681ce4a..f1b59af465de 100644 --- a/.plans/19-remote-endpoints-hosted-static.md +++ b/.plans/19-remote-endpoints-hosted-static.md @@ -324,7 +324,7 @@ Future tunnel provider responsibilities: - use existing backend pairing/session auth - never bypass server auth -The tunnel fabric can later be Pipenet-derived, Tailscale-derived, or another reverse tunnel implementation. The rest of T3 Code should only see an `AdvertisedEndpoint`. +The tunnel fabric can later be Pipenet-derived, Tailscale-derived, or another reverse tunnel implementation. The rest of Platon Code should only see an `AdvertisedEndpoint`. ## Security Checklist diff --git a/.plans/effect-atom.md b/.plans/effect-atom.md index ff6894f5637e..b2e2f0a061d2 100644 --- a/.plans/effect-atom.md +++ b/.plans/effect-atom.md @@ -1,20 +1,20 @@ # Replace React Query With AtomRpc + Atom State ## Summary -- Use `effect/unstable/reactivity/AtomRpc` over the existing `WsRpcGroup`; stop wrapping RPC in promises via [wsRpcClient.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsRpcClient.ts) and [wsNativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts). +- Use `effect/unstable/reactivity/AtomRpc` over the existing `WsRpcGroup`; stop wrapping RPC in promises via [wsRpcClient.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsRpcClient.ts) and [wsNativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts). - Keep Zustand for orchestration read model and UI state. - Keep a narrow `desktopBridge` adapter for dialogs, menus, external links, theme, and updater APIs. - Do not introduce Suspense in this migration. Atom-backed hooks should keep returning `data`, `error`, `isLoading|isPending`, `refresh`, and `mutateAsync`-style surfaces so component churn stays low. ## Target Architecture -- Extract the websocket `RpcClient.Protocol` layer from [wsTransport.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsTransport.ts) into `rpc/protocol.ts`. +- Extract the websocket `RpcClient.Protocol` layer from [wsTransport.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsTransport.ts) into `rpc/protocol.ts`. - Define one `AtomRpc.Service` for `WsRpcGroup` in `rpc/client.ts`. - Add `rpc/invalidation.ts` with explicit scoped invalidation keys: `git:${cwd}`, `project:${cwd}`, `checkpoint:${threadId}`, `server-config`. - Add `platform/desktopBridge.ts` as the only browser/desktop facade. -- Remove from web by the end: [wsNativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts), [nativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts), [wsNativeApiState.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiState.ts), [wsNativeApiAtoms.tsx](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiAtoms.tsx), [wsRpcClient.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsRpcClient.ts), and all `*ReactQuery.ts` modules. +- Remove from web by the end: [wsNativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts), [nativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts), [wsNativeApiState.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiState.ts), [wsNativeApiAtoms.tsx](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiAtoms.tsx), [wsRpcClient.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsRpcClient.ts), and all `*ReactQuery.ts` modules. ## Phase 1: Infrastructure First -1. Extract the shared websocket RPC protocol layer from [wsTransport.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsTransport.ts) without changing behavior. +1. Extract the shared websocket RPC protocol layer from [wsTransport.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsTransport.ts) without changing behavior. 2. Build the AtomRpc client on top of that layer. 3. Add one temporary `runRpc` helper for imperative handlers that still want `Promise` ergonomics; it must call the AtomRpc service directly and must not reintroduce a facade object. 4. Replace manual registry wiring with one app-level registry provider based on `@effect/atom-react`. @@ -22,21 +22,21 @@ ## Phase 2: Replace `wsNativeApi`-Owned Push State 1. Migrate welcome/config/provider/settings state first, because it is already atom-shaped and is the lowest-risk way to delete `wsNativeApi` responsibilities. -2. Replace [wsNativeApiState.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiState.ts) with `rpc/serverState.ts`, updated directly from `subscribeServerLifecycle` and `subscribeServerConfig`. +2. Replace [wsNativeApiState.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiState.ts) with `rpc/serverState.ts`, updated directly from `subscribeServerLifecycle` and `subscribeServerConfig`. 3. Keep the current hook names for one PR: `useServerConfig`, `useServerSettings`, `useServerProviders`, `useServerKeybindings`, `useServerWelcomeSubscription`, `useServerConfigUpdatedSubscription`. -4. Move bootstrap side effects out of [wsNativeApiAtoms.tsx](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiAtoms.tsx) into a new root bootstrap component mounted from [__root.tsx](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx). -5. Delete the `server.getConfig()` fallback logic from [wsNativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts); snapshot fetch now lives beside the stream atoms. +4. Move bootstrap side effects out of [wsNativeApiAtoms.tsx](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApiAtoms.tsx) into a new root bootstrap component mounted from [__root.tsx](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx). +5. Delete the `server.getConfig()` fallback logic from [wsNativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.ts); snapshot fetch now lives beside the stream atoms. ## Phase 3: Replace React Query Domain By Domain -1. Replace [gitReactQuery.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/gitReactQuery.ts) first. +1. Replace [gitReactQuery.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/gitReactQuery.ts) first. 2. Add `rpc/gitAtoms.ts` and `rpc/useGit.ts` with `useGitStatus`, `useGitBranches`, `useResolvePullRequest`, and `useGitMutation`. 3. Mutation settlement must invalidate scoped keys, not a global cache. `checkout`, `pull`, `init`, `createWorktree`, `removeWorktree`, `preparePullRequestThread`, and stacked actions invalidate `git:${cwd}`. Worktree create/remove also invalidates `project:${cwd}`. -4. Replace [projectReactQuery.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/projectReactQuery.ts) second. `useProjectSearchEntries` must preserve current “keep previous results while loading” behavior. -5. Replace [providerReactQuery.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/providerReactQuery.ts) third. Preserve current checkpoint error normalization and retry/backoff semantics inside the atom effect. Invalidate by `checkpoint:${threadId}`. +4. Replace [projectReactQuery.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/projectReactQuery.ts) second. `useProjectSearchEntries` must preserve current “keep previous results while loading” behavior. +5. Replace [providerReactQuery.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/providerReactQuery.ts) third. Preserve current checkpoint error normalization and retry/backoff semantics inside the atom effect. Invalidate by `checkpoint:${threadId}`. 6. Defer the desktop updater until the last phase. ## Phase 4: Move Root Invalidation Off `queryClient` -1. In [__root.tsx](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx), remove `QueryClient` usage and replace the throttled `invalidateQueries` block with throttled invalidation helpers. +1. In [__root.tsx](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx), remove `QueryClient` usage and replace the throttled `invalidateQueries` block with throttled invalidation helpers. 2. Keep Zustand orchestration/event application unchanged. 3. Map current effects exactly: - git or checkpoint-affecting orchestration events touch `checkpoint:${threadId}` @@ -50,14 +50,14 @@ - `rpc/gitActions.ts` - `rpc/projectActions.ts` - `platform/desktopBridge.ts` -2. Migrate direct [nativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts) callers by domain, not file-by-file: git-heavy components first, then orchestration/thread actions, then shell/dialog helpers. -3. After the last caller is gone, delete [nativeApi.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts) and the `window.nativeApi` fallback entirely. -4. In the final cleanup PR, remove `NativeApi` from [ipc.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/packages/contracts/src/ipc.ts) if nothing outside web still needs it. +2. Migrate direct [nativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts) callers by domain, not file-by-file: git-heavy components first, then orchestration/thread actions, then shell/dialog helpers. +3. After the last caller is gone, delete [nativeApi.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/nativeApi.ts) and the `window.nativeApi` fallback entirely. +4. In the final cleanup PR, remove `NativeApi` from [ipc.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/packages/contracts/src/ipc.ts) if nothing outside web still needs it. ## Phase 6: Remove React Query Completely 1. Delete `@tanstack/react-query` from `apps/web/package.json`. -2. Remove `QueryClientProvider` and router context from [router.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/router.ts) and [__root.tsx](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx). -3. Replace [desktopUpdateReactQuery.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/desktopUpdateReactQuery.ts) with a writable atom plus `desktopBridge.onUpdateState`. +2. Remove `QueryClientProvider` and router context from [router.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/router.ts) and [__root.tsx](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/routes/__root.tsx). +3. Replace [desktopUpdateReactQuery.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/lib/desktopUpdateReactQuery.ts) with a writable atom plus `desktopBridge.onUpdateState`. 4. Delete the old query-option tests. ## Public Interfaces And Types @@ -70,8 +70,8 @@ ## Test Plan - Add unit tests for `rpc/serverState.ts`: snapshot bootstrapping, stream replay, provider/settings updates. - Add unit tests for git/project/checkpoint hooks: loading, error mapping, retry behavior, invalidation, keep-previous-result behavior. -- Update the browser harness in [wsRpcHarness.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/test/wsRpcHarness.ts) to assert direct RPC + atom behavior instead of `__resetNativeApiForTests`. -- Replace [wsNativeApi.test.ts](/Users/julius/.t3/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.test.ts), `gitReactQuery.test.ts`, `providerReactQuery.test.ts`, and `desktopUpdateReactQuery.test.ts` with equivalent atom-backed coverage. +- Update the browser harness in [wsRpcHarness.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/test/wsRpcHarness.ts) to assert direct RPC + atom behavior instead of `__resetNativeApiForTests`. +- Replace [wsNativeApi.test.ts](/Users/julius/.platon/worktrees/codething-mvp/effect-http-router/apps/web/src/wsNativeApi.test.ts), `gitReactQuery.test.ts`, `providerReactQuery.test.ts`, and `desktopUpdateReactQuery.test.ts` with equivalent atom-backed coverage. - Acceptance scenarios: - welcome still bootstraps snapshot and navigation - keybindings toast still responds to config stream updates diff --git a/.plans/t3-connect-remote-setup.html b/.plans/platon-connect-remote-setup.html similarity index 86% rename from .plans/t3-connect-remote-setup.html rename to .plans/platon-connect-remote-setup.html index 101c293bee1f..c40e5b934ea7 100644 --- a/.plans/t3-connect-remote-setup.html +++ b/.plans/platon-connect-remote-setup.html @@ -3,7 +3,7 @@ -Plan: seamless `npx t3 connect` for remote boxes +Plan: seamless `npx platon-code connect` for remote boxes - T3 Code (Alpha) + Platon Code (Alpha)
-
- +
+
diff --git a/apps/web/package.json b/apps/web/package.json index 53b38b80ba0b..f36865544746 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,5 +1,5 @@ { - "name": "@t3tools/web", + "name": "@platon/web", "version": "0.0.31", "private": true, "type": "module", @@ -27,9 +27,9 @@ "@lexical/react": "^0.41.0", "@pierre/diffs": "catalog:", "@pierre/trees": "1.0.0-beta.4", - "@t3tools/client-runtime": "workspace:*", - "@t3tools/contracts": "workspace:*", - "@t3tools/shared": "workspace:*", + "@platon/client-runtime": "workspace:*", + "@platon/contracts": "workspace:*", + "@platon/shared": "workspace:*", "@tanstack/react-pacer": "^0.19.4", "@tanstack/react-router": "^1.160.2", "class-variance-authority": "^0.7.1", diff --git a/apps/web/public/apple-touch-icon.png b/apps/web/public/apple-touch-icon.png index 3eed25ea6b78..e645ee053568 100644 Binary files a/apps/web/public/apple-touch-icon.png and b/apps/web/public/apple-touch-icon.png differ diff --git a/apps/web/public/favicon-16x16.png b/apps/web/public/favicon-16x16.png index a3431b8c6dfe..6f451c829f2d 100644 Binary files a/apps/web/public/favicon-16x16.png and b/apps/web/public/favicon-16x16.png differ diff --git a/apps/web/public/favicon-32x32.png b/apps/web/public/favicon-32x32.png index 862f7629971f..156a4116233c 100644 Binary files a/apps/web/public/favicon-32x32.png and b/apps/web/public/favicon-32x32.png differ diff --git a/apps/web/public/favicon.ico b/apps/web/public/favicon.ico index 750da22602ee..a389d8623d29 100644 Binary files a/apps/web/public/favicon.ico and b/apps/web/public/favicon.ico differ diff --git a/apps/web/scripts/build-libghostty-wasm.sh b/apps/web/scripts/build-libghostty-wasm.sh index d4b1238bbfc0..501ceb64be54 100755 --- a/apps/web/scripts/build-libghostty-wasm.sh +++ b/apps/web/scripts/build-libghostty-wasm.sh @@ -9,7 +9,7 @@ CANONICAL_VENDOR_DIR="${REPO_DIR}/native/libghostty-vt" VENDOR_DIR="${WEB_DIR}/src/terminal/ghostty/vendor" GHOSTTY_REVISION="$(tr -d '[:space:]' < "${CANONICAL_VENDOR_DIR}/VERSION")" -GHOSTTY_SOURCE_DIR="${GHOSTTY_SOURCE_DIR:-${HOME}/.cache/t3code/ghostty-${GHOSTTY_REVISION:0:8}}" +GHOSTTY_SOURCE_DIR="${GHOSTTY_SOURCE_DIR:-${HOME}/.cache/platon-code/ghostty-${GHOSTTY_REVISION:0:8}}" GHOSTTY_ZIG_VERSION="${GHOSTTY_ZIG_VERSION:-0.15.2}" GHOSTTY_ZIG="${GHOSTTY_ZIG:-}" @@ -50,7 +50,7 @@ ensure_zig() { *) die "unsupported host architecture: ${host_arch}" ;; esac - cache_dir="${HOME}/.cache/t3code/zig-${GHOSTTY_ZIG_VERSION}" + cache_dir="${HOME}/.cache/platon-code/zig-${GHOSTTY_ZIG_VERSION}" GHOSTTY_ZIG="${cache_dir}/zig" if [[ -x "${GHOSTTY_ZIG}" ]]; then return diff --git a/apps/web/src/assets/assetUrls.ts b/apps/web/src/assets/assetUrls.ts index 701af3a79fc9..24b0eb5dd8ec 100644 --- a/apps/web/src/assets/assetUrls.ts +++ b/apps/web/src/assets/assetUrls.ts @@ -1,13 +1,13 @@ import { useAtomValue } from "@effect/atom-react"; -import { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; -import type { AssetResource, EnvironmentId } from "@t3tools/contracts"; +import { resolveAssetUrl } from "@platon/client-runtime/state/assets"; +import type { AssetResource, EnvironmentId } from "@platon/contracts"; import { AsyncResult } from "effect/unstable/reactivity"; import { useMemo } from "react"; import { assetEnvironment } from "~/state/assets"; import { usePreparedConnection } from "~/state/session"; -export { resolveAssetUrl } from "@t3tools/client-runtime/state/assets"; +export { resolveAssetUrl } from "@platon/client-runtime/state/assets"; export type AssetUrlState = | { readonly _tag: "Loading" } diff --git a/apps/web/src/authBootstrap.test.ts b/apps/web/src/authBootstrap.test.ts index 1a79f729bb03..2d9cac1a6743 100644 --- a/apps/web/src/authBootstrap.test.ts +++ b/apps/web/src/authBootstrap.test.ts @@ -4,7 +4,7 @@ import { type AuthCreatePairingCredentialInput, type AuthSessionState, type DesktopBridge, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import * as DateTime from "effect/DateTime"; import * as Effect from "effect/Effect"; import { HttpClientError, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"; @@ -25,14 +25,14 @@ const LOOPBACK_AUTH = { policy: "loopback-browser", bootstrapMethods: ["one-time-token"], sessionMethods: ["browser-session-cookie"], - sessionCookieName: "t3_session", + sessionCookieName: "platon_session", } as const; const DESKTOP_AUTH = { policy: "desktop-managed-local", bootstrapMethods: ["desktop-bootstrap"], sessionMethods: ["browser-session-cookie"], - sessionCookieName: "t3_session", + sessionCookieName: "platon_session", } as const; const SESSION_EXPIRES_AT = DateTime.makeUnsafe("2026-04-05T00:00:00.000Z"); @@ -66,7 +66,7 @@ function installTestBrowser(url: string) { }; vi.stubGlobal("window", testWindow); - vi.stubGlobal("document", { title: "T3 Code" }); + vi.stubGlobal("document", { title: "Platon Code" }); return testWindow; } diff --git a/apps/web/src/branding.test.ts b/apps/web/src/branding.test.ts index e517d40b04f3..c0712c67b5cc 100644 --- a/apps/web/src/branding.test.ts +++ b/apps/web/src/branding.test.ts @@ -26,9 +26,9 @@ describe("branding", () => { value: { desktopBridge: { getAppBranding: () => ({ - baseName: "T3 Code", + baseName: "Platon Code", stageLabel: "Nightly", - displayName: "T3 Code (Nightly)", + displayName: "Platon Code (Nightly)", }), }, }, @@ -36,9 +36,9 @@ describe("branding", () => { const branding = await import("./branding"); - expect(branding.APP_BASE_NAME).toBe("T3 Code"); + expect(branding.APP_BASE_NAME).toBe("Platon Code"); expect(branding.APP_STAGE_LABEL).toBe("Nightly"); - expect(branding.APP_DISPLAY_NAME).toBe("T3 Code (Nightly)"); + expect(branding.APP_DISPLAY_NAME).toBe("Platon Code (Nightly)"); }); it("normalizes hosted app channel metadata", async () => { @@ -49,7 +49,7 @@ describe("branding", () => { expect(branding.HOSTED_APP_CHANNEL).toBe("nightly"); expect(branding.HOSTED_APP_CHANNEL_LABEL).toBe("Nightly"); expect(branding.APP_STAGE_LABEL).toBe("Nightly"); - expect(branding.APP_DISPLAY_NAME).toBe("T3 Code (Nightly)"); + expect(branding.APP_DISPLAY_NAME).toBe("Platon Code (Nightly)"); }); it("does not label the latest hosted app channel", async () => { @@ -60,7 +60,7 @@ describe("branding", () => { expect(branding.HOSTED_APP_CHANNEL).toBe("latest"); expect(branding.HOSTED_APP_CHANNEL_LABEL).toBe("Latest"); expect(branding.APP_STAGE_LABEL).toBe("Latest"); - expect(branding.APP_DISPLAY_NAME).toBe("T3 Code"); + expect(branding.APP_DISPLAY_NAME).toBe("Platon Code"); }); it("ignores unknown hosted app channels", async () => { @@ -86,34 +86,34 @@ describe("branding logic", () => { it("updates the display name for nightly primary server versions", () => { expect( resolveServerBackedAppDisplayName({ - baseName: "T3 Code", - fallbackDisplayName: "T3 Code (Alpha)", + baseName: "Platon Code", + fallbackDisplayName: "Platon Code (Alpha)", fallbackStageLabel: "Alpha", primaryServerVersion: "0.0.28-nightly.20260616.12", }), - ).toBe("T3 Code (Nightly)"); + ).toBe("Platon Code (Nightly)"); }); it("keeps the fallback display name for stable primary server versions", () => { expect( resolveServerBackedAppDisplayName({ - baseName: "T3 Code", - fallbackDisplayName: "T3 Code (Alpha)", + baseName: "Platon Code", + fallbackDisplayName: "Platon Code (Alpha)", fallbackStageLabel: "Alpha", primaryServerVersion: "0.0.27", }), - ).toBe("T3 Code (Alpha)"); + ).toBe("Platon Code (Alpha)"); }); it("keeps the fallback display name for malformed nightly primary server versions", () => { expect( resolveServerBackedAppDisplayName({ - baseName: "T3 Code", - fallbackDisplayName: "T3 Code (Alpha)", + baseName: "Platon Code", + fallbackDisplayName: "Platon Code (Alpha)", fallbackStageLabel: "Alpha", primaryServerVersion: "0.0.28-nightly.20260616", }), - ).toBe("T3 Code (Alpha)"); + ).toBe("Platon Code (Alpha)"); }); }); diff --git a/apps/web/src/branding.ts b/apps/web/src/branding.ts index 7fc57cf0d03f..b5848f06e68c 100644 --- a/apps/web/src/branding.ts +++ b/apps/web/src/branding.ts @@ -1,4 +1,4 @@ -import type { DesktopAppBranding } from "@t3tools/contracts"; +import type { DesktopAppBranding } from "@platon/contracts"; import { formatAppDisplayName } from "./branding.logic"; function readInjectedDesktopAppBranding(): DesktopAppBranding | null { @@ -16,7 +16,7 @@ export const HOSTED_APP_CHANNEL = hostedAppChannel === "latest" || hostedAppChannel === "nightly" ? hostedAppChannel : null; export const HOSTED_APP_CHANNEL_LABEL = HOSTED_APP_CHANNEL === "nightly" ? "Nightly" : HOSTED_APP_CHANNEL === "latest" ? "Latest" : null; -export const APP_BASE_NAME = injectedDesktopAppBranding?.baseName ?? "T3 Code"; +export const APP_BASE_NAME = injectedDesktopAppBranding?.baseName ?? "Platon Code"; export const APP_STAGE_LABEL = injectedDesktopAppBranding?.stageLabel ?? HOSTED_APP_CHANNEL_LABEL ?? diff --git a/apps/web/src/browser/BrowserDeviceToolbar.test.ts b/apps/web/src/browser/BrowserDeviceToolbar.test.ts index ee4987794c33..ad46c62ea106 100644 --- a/apps/web/src/browser/BrowserDeviceToolbar.test.ts +++ b/apps/web/src/browser/BrowserDeviceToolbar.test.ts @@ -1,4 +1,4 @@ -import type { PreviewViewportSetting } from "@t3tools/contracts"; +import type { PreviewViewportSetting } from "@platon/contracts"; import { describe, expect, it, vi } from "vite-plus/test"; import { diff --git a/apps/web/src/browser/BrowserDeviceToolbar.tsx b/apps/web/src/browser/BrowserDeviceToolbar.tsx index f20ab0b37109..ef5e5c969043 100644 --- a/apps/web/src/browser/BrowserDeviceToolbar.tsx +++ b/apps/web/src/browser/BrowserDeviceToolbar.tsx @@ -5,8 +5,8 @@ import { PREVIEW_VIEWPORT_MAX_DIMENSION, PREVIEW_VIEWPORT_MIN_DIMENSION, type PreviewViewportSetting, -} from "@t3tools/contracts"; -import { PREVIEW_VIEWPORT_PRESETS, resolvePreviewViewport } from "@t3tools/shared/previewViewport"; +} from "@platon/contracts"; +import { PREVIEW_VIEWPORT_PRESETS, resolvePreviewViewport } from "@platon/shared/previewViewport"; import { Link2, X } from "lucide-react"; import { useState } from "react"; diff --git a/apps/web/src/browser/ElectronBrowserHost.tsx b/apps/web/src/browser/ElectronBrowserHost.tsx index fbf7c14b738c..fff9fd5df4b7 100644 --- a/apps/web/src/browser/ElectronBrowserHost.tsx +++ b/apps/web/src/browser/ElectronBrowserHost.tsx @@ -1,7 +1,7 @@ "use client"; -import { parseScopedThreadKey } from "@t3tools/client-runtime/environment"; -import { FILL_PREVIEW_VIEWPORT } from "@t3tools/contracts"; +import { parseScopedThreadKey } from "@platon/client-runtime/environment"; +import { FILL_PREVIEW_VIEWPORT } from "@platon/contracts"; import { useEffect, useMemo } from "react"; import { isElectron } from "~/env"; diff --git a/apps/web/src/browser/HostedBrowserWebview.tsx b/apps/web/src/browser/HostedBrowserWebview.tsx index ae0526abb15f..0923fd7fddb6 100644 --- a/apps/web/src/browser/HostedBrowserWebview.tsx +++ b/apps/web/src/browser/HostedBrowserWebview.tsx @@ -1,6 +1,6 @@ "use client"; -import type { PreviewViewportSetting, ScopedThreadRef } from "@t3tools/contracts"; +import type { PreviewViewportSetting, ScopedThreadRef } from "@platon/contracts"; import { useShallow } from "zustand/react/shallow"; import { useCallback, useEffect, useRef, useState } from "react"; diff --git a/apps/web/src/browser/annotationTheme.ts b/apps/web/src/browser/annotationTheme.ts index e12c667d23d7..fdee563c4b59 100644 --- a/apps/web/src/browser/annotationTheme.ts +++ b/apps/web/src/browser/annotationTheme.ts @@ -1,4 +1,4 @@ -import type { DesktopPreviewAnnotationTheme } from "@t3tools/contracts"; +import type { DesktopPreviewAnnotationTheme } from "@platon/contracts"; const readVariable = (styles: CSSStyleDeclaration, name: string, fallback: string): string => styles.getPropertyValue(name).trim() || fallback; diff --git a/apps/web/src/browser/browserDeviceToolbarState.ts b/apps/web/src/browser/browserDeviceToolbarState.ts index 9986ee022829..7ff8bf63c672 100644 --- a/apps/web/src/browser/browserDeviceToolbarState.ts +++ b/apps/web/src/browser/browserDeviceToolbarState.ts @@ -1,4 +1,4 @@ -import type { PreviewViewportSetting } from "@t3tools/contracts"; +import type { PreviewViewportSetting } from "@platon/contracts"; export function reconcileLockedAspectRatio( current: number | null, diff --git a/apps/web/src/browser/browserPointerStore.ts b/apps/web/src/browser/browserPointerStore.ts index f9f905ddc8f8..fc6a7754f393 100644 --- a/apps/web/src/browser/browserPointerStore.ts +++ b/apps/web/src/browser/browserPointerStore.ts @@ -1,4 +1,4 @@ -import type { DesktopPreviewPointerEvent } from "@t3tools/contracts"; +import type { DesktopPreviewPointerEvent } from "@platon/contracts"; import { create } from "zustand"; interface BrowserPointerStoreState { diff --git a/apps/web/src/browser/browserRecording.test.ts b/apps/web/src/browser/browserRecording.test.ts index b5ef77dd2d8f..c3849ade60f0 100644 --- a/apps/web/src/browser/browserRecording.test.ts +++ b/apps/web/src/browser/browserRecording.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId, ThreadId } from "@t3tools/contracts"; +import { EnvironmentId, ThreadId } from "@platon/contracts"; import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; const { diff --git a/apps/web/src/browser/browserRecording.ts b/apps/web/src/browser/browserRecording.ts index 69297cfdbb85..7c9429c7b22e 100644 --- a/apps/web/src/browser/browserRecording.ts +++ b/apps/web/src/browser/browserRecording.ts @@ -2,7 +2,7 @@ import type { DesktopPreviewRecordingArtifact, DesktopPreviewRecordingFrame, ScopedThreadRef, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { useAtomValue } from "@effect/atom-react"; import * as Schema from "effect/Schema"; import { Atom } from "effect/unstable/reactivity"; diff --git a/apps/web/src/browser/browserTargetResolver.test.ts b/apps/web/src/browser/browserTargetResolver.test.ts index 6f89d86df88a..c956fec5a3ce 100644 --- a/apps/web/src/browser/browserTargetResolver.test.ts +++ b/apps/web/src/browser/browserTargetResolver.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId } from "@t3tools/contracts"; +import { EnvironmentId } from "@platon/contracts"; import { beforeEach, describe, expect, it, vi } from "vite-plus/test"; const readPreparedConnection = vi.fn(); diff --git a/apps/web/src/browser/browserTargetResolver.ts b/apps/web/src/browser/browserTargetResolver.ts index 9b201dbdbaec..984b5ee6abc9 100644 --- a/apps/web/src/browser/browserTargetResolver.ts +++ b/apps/web/src/browser/browserTargetResolver.ts @@ -2,8 +2,8 @@ import type { BrowserNavigationTarget, EnvironmentId, PreviewUrlResolution, -} from "@t3tools/contracts"; -import { isLoopbackHost, normalizePreviewUrl } from "@t3tools/shared/preview"; +} from "@platon/contracts"; +import { isLoopbackHost, normalizePreviewUrl } from "@platon/shared/preview"; import { readPreparedConnection } from "~/state/session"; diff --git a/apps/web/src/browser/browserViewportActions.test.ts b/apps/web/src/browser/browserViewportActions.test.ts index a7633fd0963d..bc48dcf0cf9a 100644 --- a/apps/web/src/browser/browserViewportActions.test.ts +++ b/apps/web/src/browser/browserViewportActions.test.ts @@ -1,4 +1,4 @@ -import type { PreviewViewportSetting } from "@t3tools/contracts"; +import type { PreviewViewportSetting } from "@platon/contracts"; import { describe, expect, it, vi } from "vite-plus/test"; import { diff --git a/apps/web/src/browser/browserViewportActions.ts b/apps/web/src/browser/browserViewportActions.ts index b80f68af3f00..5da4efee5d07 100644 --- a/apps/web/src/browser/browserViewportActions.ts +++ b/apps/web/src/browser/browserViewportActions.ts @@ -1,4 +1,4 @@ -import type { PreviewViewportSetting } from "@t3tools/contracts"; +import type { PreviewViewportSetting } from "@platon/contracts"; type BrowserViewportHandler = (setting: PreviewViewportSetting) => Promise; diff --git a/apps/web/src/browser/browserViewportLayout.ts b/apps/web/src/browser/browserViewportLayout.ts index 414701a816c5..504cf9cf42d8 100644 --- a/apps/web/src/browser/browserViewportLayout.ts +++ b/apps/web/src/browser/browserViewportLayout.ts @@ -4,7 +4,7 @@ import { PREVIEW_VIEWPORT_MIN_DIMENSION, type PreviewViewportSetting, type PreviewViewportSize, -} from "@t3tools/contracts"; +} from "@platon/contracts"; export interface BrowserViewportLayout { readonly canvasWidth: number; diff --git a/apps/web/src/browser/desktopTabLifetime.test.ts b/apps/web/src/browser/desktopTabLifetime.test.ts index feb015c91a42..ef6255ddb858 100644 --- a/apps/web/src/browser/desktopTabLifetime.test.ts +++ b/apps/web/src/browser/desktopTabLifetime.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId, ThreadId } from "@t3tools/contracts"; +import { EnvironmentId, ThreadId } from "@platon/contracts"; import { afterEach, beforeEach, describe, expect, it, vi } from "vite-plus/test"; const { closeTab, createTab, stopBrowserRecording } = vi.hoisted(() => ({ diff --git a/apps/web/src/browser/openFileInPreview.ts b/apps/web/src/browser/openFileInPreview.ts index b89b87c92898..2fcbe8e309fc 100644 --- a/apps/web/src/browser/openFileInPreview.ts +++ b/apps/web/src/browser/openFileInPreview.ts @@ -5,11 +5,8 @@ import type { PreviewOpenInput, PreviewSessionSnapshot, ScopedThreadRef, -} from "@t3tools/contracts"; -import { - type AtomCommandResult, - mapAtomCommandResult, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/contracts"; +import { type AtomCommandResult, mapAtomCommandResult } from "@platon/client-runtime/state/runtime"; import * as Cause from "effect/Cause"; import * as Data from "effect/Data"; import { AsyncResult } from "effect/unstable/reactivity"; diff --git a/apps/web/src/browser/previewRuntimeTabId.test.ts b/apps/web/src/browser/previewRuntimeTabId.test.ts index 7518ede3e5e7..2a7fd8580409 100644 --- a/apps/web/src/browser/previewRuntimeTabId.test.ts +++ b/apps/web/src/browser/previewRuntimeTabId.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId, ThreadId } from "@t3tools/contracts"; +import { EnvironmentId, ThreadId } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { isCurrentPreviewRuntimeTab, previewRuntimeTabId } from "./previewRuntimeTabId"; diff --git a/apps/web/src/browser/previewRuntimeTabId.ts b/apps/web/src/browser/previewRuntimeTabId.ts index 64dc4f9839a2..ca257ebcd404 100644 --- a/apps/web/src/browser/previewRuntimeTabId.ts +++ b/apps/web/src/browser/previewRuntimeTabId.ts @@ -1,4 +1,4 @@ -import type { ScopedThreadRef } from "@t3tools/contracts"; +import type { ScopedThreadRef } from "@platon/contracts"; /** * The server only guarantees preview tab ids are unique within one process. diff --git a/apps/web/src/browser/previewWebviewConfigState.test.ts b/apps/web/src/browser/previewWebviewConfigState.test.ts index 35eb665eb7e3..ca7987307f51 100644 --- a/apps/web/src/browser/previewWebviewConfigState.test.ts +++ b/apps/web/src/browser/previewWebviewConfigState.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "@effect/vitest"; -import { EnvironmentId } from "@t3tools/contracts"; +import { EnvironmentId } from "@platon/contracts"; import * as Effect from "effect/Effect"; import { diff --git a/apps/web/src/browser/previewWebviewConfigState.ts b/apps/web/src/browser/previewWebviewConfigState.ts index 6f1cf058e38c..cb58cb5c471e 100644 --- a/apps/web/src/browser/previewWebviewConfigState.ts +++ b/apps/web/src/browser/previewWebviewConfigState.ts @@ -3,7 +3,7 @@ import type { DesktopPreviewBridge, DesktopPreviewWebviewConfig, EnvironmentId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import * as Schema from "effect/Schema"; diff --git a/apps/web/src/browser/useBrowserViewportResize.ts b/apps/web/src/browser/useBrowserViewportResize.ts index 4f05f6dd27d9..ab65d9458d5a 100644 --- a/apps/web/src/browser/useBrowserViewportResize.ts +++ b/apps/web/src/browser/useBrowserViewportResize.ts @@ -1,6 +1,6 @@ "use client"; -import type { PreviewViewportSetting, PreviewViewportSize } from "@t3tools/contracts"; +import type { PreviewViewportSetting, PreviewViewportSize } from "@platon/contracts"; import { useCallback, useEffect, diff --git a/apps/web/src/clientPersistenceStorage.test.ts b/apps/web/src/clientPersistenceStorage.test.ts index 8f849a6e7b39..1b07b47d46ff 100644 --- a/apps/web/src/clientPersistenceStorage.test.ts +++ b/apps/web/src/clientPersistenceStorage.test.ts @@ -1,4 +1,4 @@ -import { DEFAULT_CLIENT_SETTINGS } from "@t3tools/contracts"; +import { DEFAULT_CLIENT_SETTINGS } from "@platon/contracts"; import { afterEach, describe, expect, it, vi } from "vite-plus/test"; function createLocalStorageStub(): Storage { @@ -54,7 +54,7 @@ describe("clientPersistenceStorage", () => { it("reports structured decode failures while preserving the fallback", async () => { const testWindow = getTestWindow(); - testWindow.localStorage.setItem("t3code:client-settings:v1", "not-json"); + testWindow.localStorage.setItem("platon-code:client-settings:v1", "not-json"); const consoleError = vi.spyOn(console, "error").mockImplementation(() => undefined); const { readBrowserClientSettings } = await import("./clientPersistenceStorage"); @@ -64,7 +64,7 @@ describe("clientPersistenceStorage", () => { expect.objectContaining({ _tag: "LocalStorageOperationError", operation: "decode", - storageKey: "t3code:client-settings:v1", + storageKey: "platon-code:client-settings:v1", cause: expect.anything(), }), ); @@ -73,7 +73,7 @@ describe("clientPersistenceStorage", () => { it("defaults word wrap on and discards obsolete wrapping preferences", async () => { const testWindow = getTestWindow(); testWindow.localStorage.setItem( - "t3code:client-settings:v1", + "platon-code:client-settings:v1", JSON.stringify({ chatWordWrap: false, diffWordWrap: false, diff --git a/apps/web/src/clientPersistenceStorage.ts b/apps/web/src/clientPersistenceStorage.ts index 5c0ba7c6eccf..f6f42a0691f0 100644 --- a/apps/web/src/clientPersistenceStorage.ts +++ b/apps/web/src/clientPersistenceStorage.ts @@ -1,8 +1,8 @@ -import { ClientSettingsSchema, type ClientSettings } from "@t3tools/contracts"; +import { ClientSettingsSchema, type ClientSettings } from "@platon/contracts"; import { getLocalStorageItem, setLocalStorageItem } from "./hooks/useLocalStorage"; -export const CLIENT_SETTINGS_STORAGE_KEY = "t3code:client-settings:v1"; +export const CLIENT_SETTINGS_STORAGE_KEY = "platon-code:client-settings:v1"; function hasWindow(): boolean { return typeof window !== "undefined"; diff --git a/apps/web/src/cloud/connectCliAuth.test.ts b/apps/web/src/cloud/connectCliAuth.test.ts index 61d854eb6ab3..ba7a7e5f7a2c 100644 --- a/apps/web/src/cloud/connectCliAuth.test.ts +++ b/apps/web/src/cloud/connectCliAuth.test.ts @@ -16,8 +16,8 @@ describe("connectCliAuth", () => { it("requires both the publishable key and the CLI OAuth client id", () => { vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", TEST_PUBLISHABLE_KEY); - vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "t3-relay"); - vi.stubEnv("VITE_T3CODE_RELAY_URL", "https://relay.example.com"); + vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "platon-relay"); + vi.stubEnv("VITE_PLATON_CODE_RELAY_URL", "https://relay.example.com"); expect(hasConnectCliAuthConfig()).toBe(false); vi.stubEnv("VITE_CLERK_CLI_OAUTH_CLIENT_ID", "oauthapp_123"); diff --git a/apps/web/src/cloud/connectCliAuth.ts b/apps/web/src/cloud/connectCliAuth.ts index 849319dcebef..5d15007cc1c8 100644 --- a/apps/web/src/cloud/connectCliAuth.ts +++ b/apps/web/src/cloud/connectCliAuth.ts @@ -3,13 +3,13 @@ import { connectCallbackUrl, CONNECT_OAUTH_SCOPES, type ConnectAuthorizeRequest, -} from "@t3tools/shared/connectAuth"; -import { clerkFrontendApiUrlFromPublishableKey } from "@t3tools/shared/relayAuth"; +} from "@platon/shared/connectAuth"; +import { clerkFrontendApiUrlFromPublishableKey } from "@platon/shared/relayAuth"; import { configuredHostedAppUrl, isHostedStaticApp } from "../hostedPairing"; import { hasCloudPublicConfig, resolveCloudPublicConfig, trimNonEmpty } from "./publicConfig"; -const CONNECT_CLI_AUTH_STATE_STORAGE_KEY = "t3code-connect-cli-auth-state"; +const CONNECT_CLI_AUTH_STATE_STORAGE_KEY = "platon-code-connect-cli-auth-state"; export function resolveConnectCliOAuthClientId(): string | null { return trimNonEmpty(import.meta.env.VITE_CLERK_CLI_OAUTH_CLIENT_ID as string | undefined); diff --git a/apps/web/src/cloud/connectOnboarding.ts b/apps/web/src/cloud/connectOnboarding.ts index 7d61e11c6c6a..cfc2281b54b8 100644 --- a/apps/web/src/cloud/connectOnboarding.ts +++ b/apps/web/src/cloud/connectOnboarding.ts @@ -1,11 +1,11 @@ import * as Schema from "effect/Schema"; /** - * Accounts that opted out of the post-sign-in T3 Connect onboarding wizard + * Accounts that opted out of the post-sign-in Platon Connect onboarding wizard * ("Don't show this again"). The wizard otherwise shows on every sign-in, * since sign-out clears the connected environments. */ -export const CONNECT_ONBOARDING_OPT_OUT_STORAGE_KEY = "t3code:connect-onboarding-opt-out:v1"; +export const CONNECT_ONBOARDING_OPT_OUT_STORAGE_KEY = "platon-code:connect-onboarding-opt-out:v1"; export const ConnectOnboardingOptOutSchema = Schema.Struct({ optOutAccounts: Schema.Array(Schema.String), diff --git a/apps/web/src/cloud/dpop.test.ts b/apps/web/src/cloud/dpop.test.ts index 75951db1baff..5196140cd7c9 100644 --- a/apps/web/src/cloud/dpop.test.ts +++ b/apps/web/src/cloud/dpop.test.ts @@ -1,4 +1,4 @@ -import { verifyDpopProof } from "@t3tools/shared/dpop"; +import { verifyDpopProof } from "@platon/shared/dpop"; import { describe, expect, it } from "@effect/vitest"; import * as Effect from "effect/Effect"; import { decodeJwt } from "jose"; diff --git a/apps/web/src/cloud/dpop.ts b/apps/web/src/cloud/dpop.ts index d0994955db17..7bc471388a26 100644 --- a/apps/web/src/cloud/dpop.ts +++ b/apps/web/src/cloud/dpop.ts @@ -2,7 +2,7 @@ import { computeDpopAccessTokenHash, computeDpopJwkThumbprint, DpopPublicJwk, -} from "@t3tools/shared/dpop"; +} from "@platon/shared/dpop"; import * as Crypto from "effect/Crypto"; import * as Data from "effect/Data"; import * as Effect from "effect/Effect"; @@ -21,7 +21,7 @@ export class BrowserDpopError extends Data.TaggedError("BrowserDpopError")<{ readonly cause?: unknown; }> {} -const DPOP_DATABASE_NAME = "t3code:cloud-auth"; +const DPOP_DATABASE_NAME = "platon-code:cloud-auth"; const DPOP_DATABASE_VERSION = 1; const DPOP_KEY_STORE_NAME = "keys"; const DPOP_KEY_ID = "relay-dpop-proof-key"; diff --git a/apps/web/src/cloud/linkEnvironment.test.ts b/apps/web/src/cloud/linkEnvironment.test.ts index 38e205beabbb..6975f812638c 100644 --- a/apps/web/src/cloud/linkEnvironment.test.ts +++ b/apps/web/src/cloud/linkEnvironment.test.ts @@ -3,8 +3,8 @@ import { EnvironmentId, type RelayClientInstallProgressEvent, WS_METHODS, -} from "@t3tools/contracts"; -import { RelayWebClientId } from "@t3tools/contracts/relay"; +} from "@platon/contracts"; +import { RelayWebClientId } from "@platon/contracts/relay"; import { describe, expect, it } from "@effect/vitest"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -18,11 +18,11 @@ import { EnvironmentSupervisor, type PreparedConnection, PrimaryConnectionTarget, -} from "@t3tools/client-runtime/connection"; -import { type RpcSession } from "@t3tools/client-runtime/rpc"; -import { EnvironmentRegistry } from "@t3tools/client-runtime/connection"; -import { ManagedRelay } from "@t3tools/client-runtime/relay"; -import { remoteHttpClientLayer } from "@t3tools/client-runtime/rpc"; +} from "@platon/client-runtime/connection"; +import { type RpcSession } from "@platon/client-runtime/rpc"; +import { EnvironmentRegistry } from "@platon/client-runtime/connection"; +import { ManagedRelay } from "@platon/client-runtime/relay"; +import { remoteHttpClientLayer } from "@platon/client-runtime/rpc"; import { __resetDesktopPrimaryAuthForTests } from "../environments/primary/desktopAuth"; import { @@ -142,7 +142,7 @@ function bodyText(body: BodyInit | null | undefined): string { beforeEach(() => { vi.clearAllMocks(); - vi.stubEnv("VITE_T3CODE_RELAY_URL", "https://relay.example.test"); + vi.stubEnv("VITE_PLATON_CODE_RELAY_URL", "https://relay.example.test"); relayClientInstallDialog.requestConfirmation.mockResolvedValue(true); }); @@ -242,7 +242,7 @@ describe("web cloud link environment client", () => { ); vi.stubGlobal("fetch", fetchMock); vi.stubGlobal("window", { - location: { origin: "t3code://app" }, + location: { origin: "platon-code://app" }, desktopBridge: { getLocalEnvironmentBearerToken: vi.fn().mockResolvedValue("desktop-bearer-token"), } as unknown as DesktopBridge, diff --git a/apps/web/src/cloud/linkEnvironment.ts b/apps/web/src/cloud/linkEnvironment.ts index a245cbc54db2..9b8f340f80f3 100644 --- a/apps/web/src/cloud/linkEnvironment.ts +++ b/apps/web/src/cloud/linkEnvironment.ts @@ -14,18 +14,18 @@ import { EnvironmentHttpUnauthorizedError, EnvironmentId, WS_METHODS, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { type RelayClientDeviceRecord, type RelayClientEnvironmentRecord, type RelayEnvironmentLinkResponse, type RelayProtectedError as RelayProtectedErrorType, type RelayManagedEndpointProviderKind, -} from "@t3tools/contracts/relay"; -import { EnvironmentRegistry } from "@t3tools/client-runtime/connection"; -import { request, runStream } from "@t3tools/client-runtime/rpc"; -import { makeEnvironmentHttpApiClient } from "@t3tools/client-runtime/rpc"; -import { ManagedRelay } from "@t3tools/client-runtime/relay"; +} from "@platon/contracts/relay"; +import { EnvironmentRegistry } from "@platon/client-runtime/connection"; +import { request, runStream } from "@platon/client-runtime/rpc"; +import { makeEnvironmentHttpApiClient } from "@platon/client-runtime/rpc"; +import { ManagedRelay } from "@platon/client-runtime/relay"; import { readPrimaryEnvironmentDescriptor, @@ -74,7 +74,7 @@ function ensureRelayClientAvailable( if (status.status === "available") return; if (status.status === "unsupported") { return yield* new CloudEnvironmentLinkError({ - message: `T3 Code cannot install the relay client automatically on ${status.platform}-${status.arch}.`, + message: `Platon Code cannot install the relay client automatically on ${status.platform}-${status.arch}.`, }); } @@ -110,7 +110,7 @@ function ensureRelayClientAvailable( return yield* new CloudEnvironmentLinkError({ message: installedStatus.status === "unsupported" - ? `T3 Code cannot install the relay client automatically on ${installedStatus.platform}-${installedStatus.arch}.` + ? `Platon Code cannot install the relay client automatically on ${installedStatus.platform}-${installedStatus.arch}.` : "The relay client is still unavailable after installation.", }); } @@ -285,7 +285,7 @@ export function listManagedCloudEnvironments(input: { const configuredRelayUrl = relayUrl(); if (!configuredRelayUrl) { return yield* new CloudEnvironmentLinkError({ - message: "T3CODE_RELAY_URL is not configured.", + message: "PLATON_CODE_RELAY_URL is not configured.", }); } const relayClient = yield* ManagedRelay.ManagedRelayClient; @@ -315,7 +315,7 @@ export function listCloudDevices(input: { return Effect.gen(function* () { if (!relayUrl()) { return yield* new CloudEnvironmentLinkError({ - message: "T3CODE_RELAY_URL is not configured.", + message: "PLATON_CODE_RELAY_URL is not configured.", }); } const relayClient = yield* ManagedRelay.ManagedRelayClient; @@ -394,7 +394,7 @@ export function unlinkPrimaryEnvironmentFromCloud(input: { // "publish_only" links the environment to the relay for agent-activity // publishing alone: no managed tunnel is provisioned, so it can be toggled -// independently of T3 Connect while clients reach the environment out of band. +// independently of Platon Connect while clients reach the environment out of band. export type CloudLinkMode = "managed" | "publish_only"; const PUBLISH_ONLY_PROVIDER_KIND = "manual" satisfies RelayManagedEndpointProviderKind; @@ -412,7 +412,7 @@ export function linkPrimaryEnvironmentToCloud(input: { const configuredRelayUrl = relayUrl(); if (!configuredRelayUrl) { return yield* new CloudEnvironmentLinkError({ - message: "T3CODE_RELAY_URL is not configured.", + message: "PLATON_CODE_RELAY_URL is not configured.", }); } const managedTunnelsEnabled = (input.mode ?? "managed") === "managed"; diff --git a/apps/web/src/cloud/linkEnvironmentAtoms.ts b/apps/web/src/cloud/linkEnvironmentAtoms.ts index 1094e860e462..83ecc2af24a9 100644 --- a/apps/web/src/cloud/linkEnvironmentAtoms.ts +++ b/apps/web/src/cloud/linkEnvironmentAtoms.ts @@ -1,7 +1,7 @@ import { createAtomCommandScheduler, createRuntimeCommand, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { connectionAtomRuntime } from "../connection/runtime"; import { diff --git a/apps/web/src/cloud/managedAuth.test.ts b/apps/web/src/cloud/managedAuth.test.ts index aa29a59677eb..40e35ca38e26 100644 --- a/apps/web/src/cloud/managedAuth.test.ts +++ b/apps/web/src/cloud/managedAuth.test.ts @@ -1,4 +1,4 @@ -import { managedRelaySessionAtom, setManagedRelaySession } from "@t3tools/client-runtime/relay"; +import { managedRelaySessionAtom, setManagedRelaySession } from "@platon/client-runtime/relay"; import { afterEach, describe, expect, it, vi } from "vite-plus/test"; import { appAtomRegistry } from "../rpc/atomRegistry"; diff --git a/apps/web/src/cloud/managedAuth.tsx b/apps/web/src/cloud/managedAuth.tsx index 2f631214501b..6d03e312b753 100644 --- a/apps/web/src/cloud/managedAuth.tsx +++ b/apps/web/src/cloud/managedAuth.tsx @@ -1,10 +1,10 @@ import { useAuth } from "@clerk/react"; -import { ManagedRelay, setManagedRelaySession } from "@t3tools/client-runtime/relay"; +import { ManagedRelay, setManagedRelaySession } from "@platon/client-runtime/relay"; import { reportAtomCommandResult, settleAsyncResult, settlePromise, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import * as Effect from "effect/Effect"; import { useEffect, useRef, type ReactNode } from "react"; diff --git a/apps/web/src/cloud/managedRelayLayer.ts b/apps/web/src/cloud/managedRelayLayer.ts index 52f9b6496c95..7714bcae77af 100644 --- a/apps/web/src/cloud/managedRelayLayer.ts +++ b/apps/web/src/cloud/managedRelayLayer.ts @@ -1,5 +1,5 @@ -import { ManagedRelay } from "@t3tools/client-runtime/relay"; -import { RelayWebClientId } from "@t3tools/contracts/relay"; +import { ManagedRelay } from "@platon/client-runtime/relay"; +import { RelayWebClientId } from "@platon/contracts/relay"; import * as Crypto from "effect/Crypto"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; diff --git a/apps/web/src/cloud/managedRelayState.ts b/apps/web/src/cloud/managedRelayState.ts index 5f29c121dbcd..164840ca20de 100644 --- a/apps/web/src/cloud/managedRelayState.ts +++ b/apps/web/src/cloud/managedRelayState.ts @@ -4,11 +4,11 @@ import { ManagedRelay, managedRelaySessionAtom, readManagedRelaySnapshotState, -} from "@t3tools/client-runtime/relay"; +} from "@platon/client-runtime/relay"; import type { RelayClientDeviceRecord, RelayClientEnvironmentRecord, -} from "@t3tools/contracts/relay"; +} from "@platon/contracts/relay"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; import * as Layer from "effect/Layer"; @@ -47,7 +47,7 @@ export function useManagedRelayEnvironments() { const snapshot = readManagedRelaySnapshotState(result); useEffect(() => { if (snapshot.error) { - console.error("[t3-cloud] Relay environment listing failed", { + console.error("[platon-cloud] Relay environment listing failed", { message: snapshot.error, traceId: snapshot.errorTraceId, }); @@ -74,7 +74,7 @@ export function useManagedRelayDevices() { const snapshot = readManagedRelaySnapshotState(result); useEffect(() => { if (snapshot.error) { - console.error("[t3-cloud] Relay device listing failed", { + console.error("[platon-cloud] Relay device listing failed", { message: snapshot.error, traceId: snapshot.errorTraceId, }); diff --git a/apps/web/src/cloud/primaryCloudLinkState.ts b/apps/web/src/cloud/primaryCloudLinkState.ts index 34fdacd214af..8bce66c61302 100644 --- a/apps/web/src/cloud/primaryCloudLinkState.ts +++ b/apps/web/src/cloud/primaryCloudLinkState.ts @@ -1,5 +1,5 @@ import { useAtomValue } from "@effect/atom-react"; -import type { EnvironmentCloudLinkStateResult } from "@t3tools/contracts"; +import type { EnvironmentCloudLinkStateResult } from "@platon/contracts"; import * as Cause from "effect/Cause"; import * as Context from "effect/Context"; import * as Effect from "effect/Effect"; @@ -72,7 +72,7 @@ export function usePrimaryCloudLinkState() { let error: string | null = null; if (result._tag === "Failure") { const cause = Cause.squash(result.cause); - error = cause instanceof Error ? cause.message : "Could not read T3 Connect link state."; + error = cause instanceof Error ? cause.message : "Could not read Platon Connect link state."; } return { diff --git a/apps/web/src/cloud/publicConfig.test.ts b/apps/web/src/cloud/publicConfig.test.ts index d42aa34baa26..ed39f5455c72 100644 --- a/apps/web/src/cloud/publicConfig.test.ts +++ b/apps/web/src/cloud/publicConfig.test.ts @@ -14,23 +14,23 @@ describe("hasCloudPublicConfig", () => { it("requires both public cloud values", () => { vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", ""); vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", ""); - vi.stubEnv("VITE_T3CODE_RELAY_URL", ""); + vi.stubEnv("VITE_PLATON_CODE_RELAY_URL", ""); expect(hasCloudPublicConfig()).toBe(false); vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", "pk_test_example"); expect(hasCloudPublicConfig()).toBe(false); - vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "t3-relay"); + vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "platon-relay"); expect(hasCloudPublicConfig()).toBe(false); - vi.stubEnv("VITE_T3CODE_RELAY_URL", "https://relay.example.test"); + vi.stubEnv("VITE_PLATON_CODE_RELAY_URL", "https://relay.example.test"); expect(hasCloudPublicConfig()).toBe(true); }); it("rejects an insecure relay URL", () => { vi.stubEnv("VITE_CLERK_PUBLISHABLE_KEY", "pk_test_example"); - vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "t3-relay"); - vi.stubEnv("VITE_T3CODE_RELAY_URL", "http://relay.example.test"); + vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", "platon-relay"); + vi.stubEnv("VITE_PLATON_CODE_RELAY_URL", "http://relay.example.test"); expect(hasCloudPublicConfig()).toBe(false); }); @@ -39,7 +39,7 @@ describe("hasCloudPublicConfig", () => { vi.stubEnv("VITE_CLERK_JWT_TEMPLATE", ""); expect(() => resolveRelayClerkTokenOptions()).toThrowError( - new CloudPublicConfigMissingError({ key: "T3CODE_CLERK_JWT_TEMPLATE" }), + new CloudPublicConfigMissingError({ key: "PLATON_CODE_CLERK_JWT_TEMPLATE" }), ); }); }); diff --git a/apps/web/src/cloud/publicConfig.ts b/apps/web/src/cloud/publicConfig.ts index 2caf4f52f360..9f39dfc5f430 100644 --- a/apps/web/src/cloud/publicConfig.ts +++ b/apps/web/src/cloud/publicConfig.ts @@ -1,11 +1,11 @@ -import { relayClerkTokenOptions } from "@t3tools/shared/relayAuth"; -import { normalizeSecureRelayUrl } from "@t3tools/shared/relayUrl"; +import { relayClerkTokenOptions } from "@platon/shared/relayAuth"; +import { normalizeSecureRelayUrl } from "@platon/shared/relayUrl"; import * as Schema from "effect/Schema"; export class CloudPublicConfigMissingError extends Schema.TaggedErrorClass()( "CloudPublicConfigMissingError", { - key: Schema.Literal("T3CODE_CLERK_JWT_TEMPLATE"), + key: Schema.Literal("PLATON_CODE_CLERK_JWT_TEMPLATE"), }, ) { override get message(): string { @@ -44,7 +44,7 @@ export function resolveCloudPublicConfig(): CloudPublicConfig { ), clerkJwtTemplate: trimNonEmpty(import.meta.env.VITE_CLERK_JWT_TEMPLATE as string | undefined), relayUrl: normalizeSecureRelayUrl( - (import.meta.env.VITE_T3CODE_RELAY_URL as string | undefined) ?? "", + (import.meta.env.VITE_PLATON_CODE_RELAY_URL as string | undefined) ?? "", ), relayTracing: { tracesUrl: normalizeSecureUrl( @@ -77,7 +77,7 @@ export function hasCloudPublicConfig(): boolean { export function resolveRelayClerkTokenOptions() { const { clerkJwtTemplate } = resolveCloudPublicConfig(); if (!clerkJwtTemplate) { - throw new CloudPublicConfigMissingError({ key: "T3CODE_CLERK_JWT_TEMPLATE" }); + throw new CloudPublicConfigMissingError({ key: "PLATON_CODE_CLERK_JWT_TEMPLATE" }); } return relayClerkTokenOptions(clerkJwtTemplate); } diff --git a/apps/web/src/cloud/relayClientInstallDialog.ts b/apps/web/src/cloud/relayClientInstallDialog.ts index b1b0c6607e35..569cd5027214 100644 --- a/apps/web/src/cloud/relayClientInstallDialog.ts +++ b/apps/web/src/cloud/relayClientInstallDialog.ts @@ -2,7 +2,7 @@ import { RelayClientInstallProgressStageSchema, type RelayClientInstallProgressEvent, type RelayClientInstallProgressStage, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import * as Schema from "effect/Schema"; export class RelayClientInstallConfirmationConflictError extends Schema.TaggedErrorClass()( diff --git a/apps/web/src/cloud/useCloudLinkController.ts b/apps/web/src/cloud/useCloudLinkController.ts index d91596880850..9e712184efb2 100644 --- a/apps/web/src/cloud/useCloudLinkController.ts +++ b/apps/web/src/cloud/useCloudLinkController.ts @@ -1,10 +1,10 @@ import { useAuth } from "@clerk/react"; -import { findErrorTraceId } from "@t3tools/client-runtime/errors"; +import { findErrorTraceId } from "@platon/client-runtime/errors"; import { isAtomCommandInterrupted, settlePromise, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { useState } from "react"; import { toastManager } from "../components/ui/toast"; @@ -24,7 +24,7 @@ export interface CloudLinkDesiredState { } /** - * Drives the primary environment's T3 Connect link. T3 Connect (managed + * Drives the primary environment's Platon Connect link. Platon Connect (managed * tunnel) and agent-activity publishing are independent capabilities backed by * a single relay link, so consumers express the full desired state and * `reconcileCloudState` applies it: unlink when neither is wanted, otherwise @@ -51,13 +51,14 @@ export function useCloudLinkController() { const [operationError, setOperationError] = useState(null); const reportUpdateFailure = (cause: unknown) => { - const message = cause instanceof Error ? cause.message : "Could not update T3 Connect access."; + const message = + cause instanceof Error ? cause.message : "Could not update Platon Connect access."; const traceId = findErrorTraceId(cause); - console.error("[t3-connect] Could not update T3 Connect", { message, traceId, cause }); + console.error("[platon-connect] Could not update Platon Connect", { message, traceId, cause }); setOperationError(traceId ? `${message} Trace ID: ${traceId}` : message); toastManager.add({ type: "error", - title: "Could not update T3 Connect", + title: "Could not update Platon Connect", description: message, data: traceId ? { @@ -93,7 +94,7 @@ export function useCloudLinkController() { // actually holds now. if (!wantsLink) { // Unlink works without a relay token — a failed token read must not - // leave the user unable to turn T3 Connect off. + // leave the user unable to turn Platon Connect off. const unlinkResult = await unlinkPrimaryEnvironment({ target, clerkToken: tokenResult._tag === "Success" ? (tokenResult.value ?? null) : null, @@ -112,7 +113,7 @@ export function useCloudLinkController() { } const clerkToken = tokenResult.value; if (!clerkToken) { - reportUpdateFailure(new Error("Sign in to T3 Connect before enabling this.")); + reportUpdateFailure(new Error("Sign in to Platon Connect before enabling this.")); return false; } if (!linked || managedTunnelActive !== desired.managedTunnel) { diff --git a/apps/web/src/commandPaletteBus.ts b/apps/web/src/commandPaletteBus.ts index 2a953132992c..f91167dc9557 100644 --- a/apps/web/src/commandPaletteBus.ts +++ b/apps/web/src/commandPaletteBus.ts @@ -1,6 +1,6 @@ // Tiny event bus allowing components to programmatically open the command palette // without owning its React state. -const COMMAND_PALETTE_OPEN_EVENT = "t3code:open-command-palette"; +const COMMAND_PALETTE_OPEN_EVENT = "platon-code:open-command-palette"; export interface CommandPaletteOpenDetail { readonly open?: "add-project" | "new-thread-in"; diff --git a/apps/web/src/components/BranchToolbar.logic.test.ts b/apps/web/src/components/BranchToolbar.logic.test.ts index 76336f1ef1f2..57d721998189 100644 --- a/apps/web/src/components/BranchToolbar.logic.test.ts +++ b/apps/web/src/components/BranchToolbar.logic.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId, type VcsRef } from "@t3tools/contracts"; +import { EnvironmentId, type VcsRef } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { dedupeRemoteBranchesWithLocalMatches, @@ -29,20 +29,20 @@ describe("resolvePreviousWorktreeSeed", () => { resolvePreviousWorktreeSeed({ threads: [ { - branch: "t3/older", - worktreePath: "/repo/.t3/worktrees/older", + branch: "platon/older", + worktreePath: "/repo/.platon/worktrees/older", updatedAt: "2026-07-20T00:00:00.000Z", }, { - branch: "t3/newer", - worktreePath: "/repo/.t3/worktrees/newer", + branch: "platon/newer", + worktreePath: "/repo/.platon/worktrees/newer", updatedAt: "2026-07-22T00:00:00.000Z", }, { branch: "main", worktreePath: null, updatedAt: "2026-07-23T00:00:00.000Z" }, ], currentWorktreePath: null, }), - ).toEqual({ branch: "t3/newer", worktreePath: "/repo/.t3/worktrees/newer" }); + ).toEqual({ branch: "platon/newer", worktreePath: "/repo/.platon/worktrees/newer" }); }); it("skips the worktree the composer already points at", () => { @@ -50,12 +50,12 @@ describe("resolvePreviousWorktreeSeed", () => { resolvePreviousWorktreeSeed({ threads: [ { - branch: "t3/current", - worktreePath: "/repo/.t3/worktrees/current", + branch: "platon/current", + worktreePath: "/repo/.platon/worktrees/current", updatedAt: "2026-07-22T00:00:00.000Z", }, ], - currentWorktreePath: "/repo/.t3/worktrees/current", + currentWorktreePath: "/repo/.platon/worktrees/current", }), ).toBeNull(); }); @@ -74,32 +74,32 @@ describe("resolvePreviousWorktreeSeed", () => { resolvePreviousWorktreeSeed({ threads: [ { - branch: "t3/archived", - worktreePath: "/repo/.t3/worktrees/archived", + branch: "platon/archived", + worktreePath: "/repo/.platon/worktrees/archived", updatedAt: "2026-07-23T00:00:00.000Z", archivedAt: "2026-07-23T01:00:00.000Z", }, { - branch: "t3/garbage-timestamp", - worktreePath: "/repo/.t3/worktrees/garbage", + branch: "platon/garbage-timestamp", + worktreePath: "/repo/.platon/worktrees/garbage", updatedAt: "not-a-date", }, { - branch: "t3/live", - worktreePath: "/repo/.t3/worktrees/live", + branch: "platon/live", + worktreePath: "/repo/.platon/worktrees/live", updatedAt: "2026-07-21T00:00:00.000Z", archivedAt: null, }, ], currentWorktreePath: null, }), - ).toEqual({ branch: "t3/live", worktreePath: "/repo/.t3/worktrees/live" }); + ).toEqual({ branch: "platon/live", worktreePath: "/repo/.platon/worktrees/live" }); }); }); describe("resolvePreviousWorktreeLabel", () => { it("includes the branch when known", () => { - expect(resolvePreviousWorktreeLabel({ branch: "t3/fix-thing", worktreePath: "/wt" })).toBe( + expect(resolvePreviousWorktreeLabel({ branch: "platon/fix-thing", worktreePath: "/wt" })).toBe( "Previous worktree (t3/fix-thing)", ); expect(resolvePreviousWorktreeLabel({ branch: null, worktreePath: "/wt" })).toBe( @@ -113,7 +113,7 @@ describe("resolveDraftEnvModeAfterBranchChange", () => { expect( resolveDraftEnvModeAfterBranchChange({ nextWorktreePath: null, - currentWorktreePath: "/repo/.t3/worktrees/feature-a", + currentWorktreePath: "/repo/.platon/worktrees/feature-a", effectiveEnvMode: "worktree", }), ).toBe("local"); @@ -132,7 +132,7 @@ describe("resolveDraftEnvModeAfterBranchChange", () => { it("uses worktree mode when selecting a ref already attached to a worktree", () => { expect( resolveDraftEnvModeAfterBranchChange({ - nextWorktreePath: "/repo/.t3/worktrees/feature-a", + nextWorktreePath: "/repo/.platon/worktrees/feature-a", currentWorktreePath: null, effectiveEnvMode: "local", }), @@ -329,7 +329,7 @@ describe("resolveLocalCheckoutBranchMismatch", () => { expect( resolveLocalCheckoutBranchMismatch({ effectiveEnvMode: "worktree", - activeWorktreePath: "/repo/.t3/worktrees/feature-thread", + activeWorktreePath: "/repo/.platon/worktrees/feature-thread", activeThreadBranch: "feature/thread", currentGitBranch: "feature/current", }), @@ -425,7 +425,7 @@ describe("resolveEffectiveEnvMode", () => { it("treats draft threads already attached to a worktree as current-checkout mode", () => { expect( resolveEffectiveEnvMode({ - activeWorktreePath: "/repo/.t3/worktrees/feature-a", + activeWorktreePath: "/repo/.platon/worktrees/feature-a", hasServerThread: false, draftThreadEnvMode: "worktree", }), @@ -456,7 +456,9 @@ describe("resolveCurrentWorkspaceLabel", () => { }); it("describes the active checkout as a worktree when one is attached", () => { - expect(resolveCurrentWorkspaceLabel("/repo/.t3/worktrees/feature-a")).toBe("Current worktree"); + expect(resolveCurrentWorkspaceLabel("/repo/.platon/worktrees/feature-a")).toBe( + "Current worktree", + ); }); }); @@ -466,7 +468,7 @@ describe("resolveLockedWorkspaceLabel", () => { }); it("uses a shorter label for an attached worktree", () => { - expect(resolveLockedWorkspaceLabel("/repo/.t3/worktrees/feature-a")).toBe("Worktree"); + expect(resolveLockedWorkspaceLabel("/repo/.platon/worktrees/feature-a")).toBe("Worktree"); }); }); @@ -598,15 +600,15 @@ describe("resolveBranchSelectionTarget", () => { expect( resolveBranchSelectionTarget({ activeProjectCwd: "/repo", - activeWorktreePath: "/repo/.t3/worktrees/feature-a", + activeWorktreePath: "/repo/.platon/worktrees/feature-a", refName: { isDefault: false, - worktreePath: "/repo/.t3/worktrees/feature-b", + worktreePath: "/repo/.platon/worktrees/feature-b", }, }), ).toEqual({ - checkoutCwd: "/repo/.t3/worktrees/feature-b", - nextWorktreePath: "/repo/.t3/worktrees/feature-b", + checkoutCwd: "/repo/.platon/worktrees/feature-b", + nextWorktreePath: "/repo/.platon/worktrees/feature-b", reuseExistingWorktree: true, }); }); @@ -615,7 +617,7 @@ describe("resolveBranchSelectionTarget", () => { expect( resolveBranchSelectionTarget({ activeProjectCwd: "/repo", - activeWorktreePath: "/repo/.t3/worktrees/feature-a", + activeWorktreePath: "/repo/.platon/worktrees/feature-a", refName: { isDefault: true, worktreePath: "/repo", @@ -632,7 +634,7 @@ describe("resolveBranchSelectionTarget", () => { expect( resolveBranchSelectionTarget({ activeProjectCwd: "/repo", - activeWorktreePath: "/repo/.t3/worktrees/feature-a", + activeWorktreePath: "/repo/.platon/worktrees/feature-a", refName: { isDefault: true, worktreePath: null, @@ -649,15 +651,15 @@ describe("resolveBranchSelectionTarget", () => { expect( resolveBranchSelectionTarget({ activeProjectCwd: "/repo", - activeWorktreePath: "/repo/.t3/worktrees/feature-a", + activeWorktreePath: "/repo/.platon/worktrees/feature-a", refName: { isDefault: false, worktreePath: null, }, }), ).toEqual({ - checkoutCwd: "/repo/.t3/worktrees/feature-a", - nextWorktreePath: "/repo/.t3/worktrees/feature-a", + checkoutCwd: "/repo/.platon/worktrees/feature-a", + nextWorktreePath: "/repo/.platon/worktrees/feature-a", reuseExistingWorktree: false, }); }); diff --git a/apps/web/src/components/BranchToolbar.logic.ts b/apps/web/src/components/BranchToolbar.logic.ts index d9737f17a323..5812e4c0d818 100644 --- a/apps/web/src/components/BranchToolbar.logic.ts +++ b/apps/web/src/components/BranchToolbar.logic.ts @@ -1,10 +1,10 @@ -import type { EnvironmentId, VcsRef, ProjectId } from "@t3tools/contracts"; +import type { EnvironmentId, VcsRef, ProjectId } from "@platon/contracts"; import * as Schema from "effect/Schema"; import { toSortableTimestamp } from "../lib/threadSort"; export { dedupeRemoteBranchesWithLocalMatches, deriveLocalBranchNameFromRemoteRef, -} from "@t3tools/shared/git"; +} from "@platon/shared/git"; export interface EnvironmentOption { environmentId: EnvironmentId; diff --git a/apps/web/src/components/BranchToolbar.tsx b/apps/web/src/components/BranchToolbar.tsx index 3a83f5c9a0ff..4e7ba6013491 100644 --- a/apps/web/src/components/BranchToolbar.tsx +++ b/apps/web/src/components/BranchToolbar.tsx @@ -1,5 +1,5 @@ -import { scopeProjectRef, scopeThreadRef } from "@t3tools/client-runtime/environment"; -import type { EnvironmentId, ThreadId } from "@t3tools/contracts"; +import { scopeProjectRef, scopeThreadRef } from "@platon/client-runtime/environment"; +import type { EnvironmentId, ThreadId } from "@platon/contracts"; import { ChevronDownIcon, CloudIcon, diff --git a/apps/web/src/components/BranchToolbarBranchSelector.tsx b/apps/web/src/components/BranchToolbarBranchSelector.tsx index 9b4cbf2b4a41..c1427db4372e 100644 --- a/apps/web/src/components/BranchToolbarBranchSelector.tsx +++ b/apps/web/src/components/BranchToolbarBranchSelector.tsx @@ -1,9 +1,9 @@ -import { scopeProjectRef, scopeThreadRef } from "@t3tools/client-runtime/environment"; +import { scopeProjectRef, scopeThreadRef } from "@platon/client-runtime/environment"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; -import type { ContextMenuItem, EnvironmentId, VcsRef, ThreadId } from "@t3tools/contracts"; +} from "@platon/client-runtime/state/runtime"; +import type { ContextMenuItem, EnvironmentId, VcsRef, ThreadId } from "@platon/contracts"; import { LegendList, type LegendListRef } from "@legendapp/list/react"; import { ChevronDownIcon, GitBranchIcon, RefreshCwIcon, SearchIcon } from "lucide-react"; import { diff --git a/apps/web/src/components/BranchToolbarEnvironmentSelector.tsx b/apps/web/src/components/BranchToolbarEnvironmentSelector.tsx index e4ed54758ff4..bd47cc1648a2 100644 --- a/apps/web/src/components/BranchToolbarEnvironmentSelector.tsx +++ b/apps/web/src/components/BranchToolbarEnvironmentSelector.tsx @@ -1,4 +1,4 @@ -import type { EnvironmentId } from "@t3tools/contracts"; +import type { EnvironmentId } from "@platon/contracts"; import { CloudIcon, MonitorIcon } from "lucide-react"; import { memo, useMemo } from "react"; diff --git a/apps/web/src/components/ChatMarkdown.tsx b/apps/web/src/components/ChatMarkdown.tsx index 985e943cb39c..a38fc66dbad0 100644 --- a/apps/web/src/components/ChatMarkdown.tsx +++ b/apps/web/src/components/ChatMarkdown.tsx @@ -8,12 +8,12 @@ import { Minimize2Icon, WrapTextIcon, } from "lucide-react"; -import type { ScopedThreadRef, ServerProviderSkill } from "@t3tools/contracts"; +import type { ScopedThreadRef, ServerProviderSkill } from "@platon/contracts"; import { isAtomCommandInterrupted, squashAtomCommandFailure, type AtomCommandResult, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import * as Cause from "effect/Cause"; import { AsyncResult } from "effect/unstable/reactivity"; import React, { diff --git a/apps/web/src/components/ChatView.logic.test.ts b/apps/web/src/components/ChatView.logic.test.ts index 39285438d1af..108e387108e8 100644 --- a/apps/web/src/components/ChatView.logic.test.ts +++ b/apps/web/src/components/ChatView.logic.test.ts @@ -5,7 +5,7 @@ import { ProviderInstanceId, ThreadId, TurnId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import type { Thread, ThreadShell } from "../types"; diff --git a/apps/web/src/components/ChatView.logic.ts b/apps/web/src/components/ChatView.logic.ts index 04b35fd45516..710d6b3d8aa5 100644 --- a/apps/web/src/components/ChatView.logic.ts +++ b/apps/web/src/components/ChatView.logic.ts @@ -9,7 +9,7 @@ import { type ScopedThreadRef, type ThreadId, type TurnId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { type ChatMessage, type SessionPhase, type Thread, type ThreadShell } from "../types"; import { type ComposerImageAttachment, type DraftThreadState } from "../composerDraftStore"; import * as Schema from "effect/Schema"; @@ -22,7 +22,7 @@ import { } from "../lib/terminalContext"; import type { DraftThreadEnvMode } from "../composerDraftStore"; -export const LAST_INVOKED_SCRIPT_BY_PROJECT_KEY = "t3code:last-invoked-script-by-project"; +export const LAST_INVOKED_SCRIPT_BY_PROJECT_KEY = "platon-code:last-invoked-script-by-project"; export const MAX_HIDDEN_MOUNTED_TERMINAL_THREADS = 10; export const MAX_HIDDEN_MOUNTED_PREVIEW_THREADS = 3; diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 2b9eda1a7875..f42ba8b9fdc5 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -20,27 +20,27 @@ import { ProviderDriverKind, RuntimeMode, TerminalOpenInput, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { connectionStatusTitle, type EnvironmentConnectionPresentation, -} from "@t3tools/client-runtime/connection"; -import { effectiveSettled, effectiveSnoozed } from "@t3tools/client-runtime/state/thread-settled"; +} from "@platon/client-runtime/connection"; +import { effectiveSettled, effectiveSnoozed } from "@platon/client-runtime/state/thread-settled"; import { parseScopedThreadKey, scopedThreadKey, scopeProjectRef, scopeThreadRef, -} from "@t3tools/client-runtime/environment"; +} from "@platon/client-runtime/environment"; import { applyClaudePromptEffortPrefix, createModelSelection, resolvePromptInjectedEffort, -} from "@t3tools/shared/model"; -import { CHAT_LIST_ANCHOR_OFFSET } from "@t3tools/shared/chatList"; -import { projectScriptCwd, projectScriptRuntimeEnv } from "@t3tools/shared/projectScripts"; -import { truncate } from "@t3tools/shared/String"; -import { nextTerminalId, resolveTerminalSessionLabel } from "@t3tools/shared/terminalLabels"; +} from "@platon/shared/model"; +import { CHAT_LIST_ANCHOR_OFFSET } from "@platon/shared/chatList"; +import { projectScriptCwd, projectScriptRuntimeEnv } from "@platon/shared/projectScripts"; +import { truncate } from "@platon/shared/String"; +import { nextTerminalId, resolveTerminalSessionLabel } from "@platon/shared/terminalLabels"; import { Debouncer } from "@tanstack/react-pacer"; import { useAtomValue } from "@effect/atom-react"; import { @@ -63,7 +63,7 @@ import { settlePromise, squashAtomCommandFailure, type AtomCommandResult, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import * as Cause from "effect/Cause"; import { AsyncResult } from "effect/unstable/reactivity"; import { isElectron } from "../env"; @@ -114,7 +114,7 @@ import { import { useTheme } from "../hooks/useTheme"; import { useTurnDiffSummaries } from "../hooks/useTurnDiffSummaries"; import { isCommandPaletteOpen } from "../commandPaletteBus"; -import { buildTemporaryWorktreeBranchName } from "@t3tools/shared/git"; +import { buildTemporaryWorktreeBranchName } from "@platon/shared/git"; import { useMediaQuery } from "../hooks/useMediaQuery"; import { RIGHT_PANEL_INLINE_LAYOUT_MEDIA_QUERY } from "../rightPanelLayout"; import { diff --git a/apps/web/src/components/CommandPalette.logic.test.ts b/apps/web/src/components/CommandPalette.logic.test.ts index 4d591500f5c6..0a681a2df585 100644 --- a/apps/web/src/components/CommandPalette.logic.test.ts +++ b/apps/web/src/components/CommandPalette.logic.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, vi } from "vite-plus/test"; -import { EnvironmentId, ProjectId, ProviderInstanceId, ThreadId } from "@t3tools/contracts"; +import { EnvironmentId, ProjectId, ProviderInstanceId, ThreadId } from "@platon/contracts"; import type { Thread } from "../types"; import { buildBrowseGroups, @@ -244,7 +244,7 @@ describe("buildThreadActionItems", () => { it("keeps message excerpts searchable without replacing thread metadata", () => { const [item] = buildThreadActionItems({ threads: [makeThread({ branch: "feat/search" })], - projectTitleById: new Map([[PROJECT_ID, "T3 Code"]]), + projectTitleById: new Map([[PROJECT_ID, "Platon Code"]]), sortOrder: "updated_at", icon: null, getContentMatch: () => ({ @@ -261,7 +261,7 @@ describe("buildThreadActionItems", () => { snippet: "The relay reconnect is now bounded.", query: "reconnect", }); - expect(item?.description).toBe("T3 Code · #feat/search"); + expect(item?.description).toBe("Platon Code · #feat/search"); }); it("filters archived threads out of thread search items", () => { diff --git a/apps/web/src/components/CommandPalette.logic.ts b/apps/web/src/components/CommandPalette.logic.ts index eee6ba5886e6..152b738dfa95 100644 --- a/apps/web/src/components/CommandPalette.logic.ts +++ b/apps/web/src/components/CommandPalette.logic.ts @@ -2,8 +2,8 @@ import { type FilesystemBrowseEntry, type KeybindingCommand, THREAD_JUMP_KEYBINDING_COMMANDS, -} from "@t3tools/contracts"; -import type { SidebarThreadSortOrder } from "@t3tools/contracts/settings"; +} from "@platon/contracts"; +import type { SidebarThreadSortOrder } from "@platon/contracts/settings"; import * as Arr from "effect/Array"; import * as Result from "effect/Result"; import { type ReactNode } from "react"; diff --git a/apps/web/src/components/CommandPalette.tsx b/apps/web/src/components/CommandPalette.tsx index 853d317655ab..440740cc2dbd 100644 --- a/apps/web/src/components/CommandPalette.tsx +++ b/apps/web/src/components/CommandPalette.tsx @@ -1,20 +1,20 @@ "use client"; -import { scopeProjectRef, scopeThreadRef } from "@t3tools/client-runtime/environment"; -import { canCreateProjectInEnvironment } from "@t3tools/client-runtime/operations/projects"; -import { connectionStatusText } from "@t3tools/client-runtime/connection"; -import { threadSearchMatchKey } from "@t3tools/client-runtime/state/thread-search"; +import { scopeProjectRef, scopeThreadRef } from "@platon/client-runtime/environment"; +import { canCreateProjectInEnvironment } from "@platon/client-runtime/operations/projects"; +import { connectionStatusText } from "@platon/client-runtime/connection"; +import { threadSearchMatchKey } from "@platon/client-runtime/state/thread-search"; import { canPreloadBrowsePath, createBrowseNavigationCoordinator, filterFilesystemBrowseEntries, getFilesystemBrowsePath, -} from "@t3tools/client-runtime/state/filesystem"; +} from "@platon/client-runtime/state/filesystem"; import { isAtomCommandInterrupted, settlePromise, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { type DesktopWslState, type EnvironmentId, @@ -24,7 +24,7 @@ import { type SourceControlProviderKind, type SourceControlRepositoryInfo, PRIMARY_LOCAL_ENVIRONMENT_ID, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { useNavigate, useParams } from "@tanstack/react-router"; import * as Option from "effect/Option"; import { diff --git a/apps/web/src/components/CommandPaletteResults.tsx b/apps/web/src/components/CommandPaletteResults.tsx index 2ab4ef8f3f81..71e14f5c4851 100644 --- a/apps/web/src/components/CommandPaletteResults.tsx +++ b/apps/web/src/components/CommandPaletteResults.tsx @@ -1,4 +1,4 @@ -import { type ResolvedKeybindingsConfig } from "@t3tools/contracts"; +import { type ResolvedKeybindingsConfig } from "@platon/contracts"; import { ChevronRightIcon } from "lucide-react"; import { shortcutLabelForCommand } from "../keybindings"; import { diff --git a/apps/web/src/components/ComposerPromptEditor.tsx b/apps/web/src/components/ComposerPromptEditor.tsx index 169126788ae8..10303738a4ff 100644 --- a/apps/web/src/components/ComposerPromptEditor.tsx +++ b/apps/web/src/components/ComposerPromptEditor.tsx @@ -5,8 +5,8 @@ import { LexicalErrorBoundary } from "@lexical/react/LexicalErrorBoundary"; import { HistoryPlugin } from "@lexical/react/LexicalHistoryPlugin"; import { OnChangePlugin } from "@lexical/react/LexicalOnChangePlugin"; import { PlainTextPlugin } from "@lexical/react/LexicalPlainTextPlugin"; -import { type ServerProviderSkill } from "@t3tools/contracts"; -import { serializeComposerFileLink } from "@t3tools/shared/composerTrigger"; +import { type ServerProviderSkill } from "@platon/contracts"; +import { serializeComposerFileLink } from "@platon/shared/composerTrigger"; import { $applyNodeReplacement, $createRangeSelectionFromDom, @@ -1804,7 +1804,7 @@ export function ComposerPromptEditor({ const initialSkillMetadataRef = useRef(skillMetadataByName(skills)); const initialConfig = useMemo( () => ({ - namespace: "t3tools-composer-editor", + namespace: "platon-composer-editor", editable: true, nodes: [ComposerMentionNode, ComposerSkillNode, ComposerTerminalContextNode], editorState: () => { diff --git a/apps/web/src/components/DiffPanel.tsx b/apps/web/src/components/DiffPanel.tsx index d10cb39f0e36..24cada731d50 100644 --- a/apps/web/src/components/DiffPanel.tsx +++ b/apps/web/src/components/DiffPanel.tsx @@ -3,9 +3,9 @@ import { useParams } from "@tanstack/react-router"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; -import { safeErrorLogAttributes } from "@t3tools/client-runtime/errors"; -import type { ScopedThreadRef, TurnId } from "@t3tools/contracts"; +} from "@platon/client-runtime/state/runtime"; +import { safeErrorLogAttributes } from "@platon/client-runtime/errors"; +import type { ScopedThreadRef, TurnId } from "@platon/contracts"; import { ArrowRightIcon, CheckIcon, diff --git a/apps/web/src/components/GitActionsControl.logic.test.ts b/apps/web/src/components/GitActionsControl.logic.test.ts index f302e976ca70..056b1f841345 100644 --- a/apps/web/src/components/GitActionsControl.logic.test.ts +++ b/apps/web/src/components/GitActionsControl.logic.test.ts @@ -1,4 +1,4 @@ -import type { VcsStatusResult } from "@t3tools/contracts"; +import type { VcsStatusResult } from "@platon/contracts"; import { assert, describe, it } from "vite-plus/test"; import { buildGitActionProgressStages, @@ -1095,8 +1095,8 @@ describe("resolveLiveThreadBranchUpdate", () => { it("does not regress a semantic thread ref back to a temporary worktree ref", () => { const update = resolveLiveThreadBranchUpdate({ - threadBranch: "t3code/github-query-rate-limit", - gitStatus: status({ refName: "t3code/bda76797" }), + threadBranch: "platon-code/github-query-rate-limit", + gitStatus: status({ refName: "platon-code/bda76797" }), }); assert.equal(update, null); @@ -1104,7 +1104,7 @@ describe("resolveLiveThreadBranchUpdate", () => { it("allows a temporary worktree ref to reconcile to a semantic branch", () => { const update = resolveLiveThreadBranchUpdate({ - threadBranch: "t3code/a9628676", + threadBranch: "platon-code/a9628676", gitStatus: status({ refName: "feature/diff-panel-toggle" }), }); diff --git a/apps/web/src/components/GitActionsControl.logic.ts b/apps/web/src/components/GitActionsControl.logic.ts index 96f7af794ace..08bbdfa9b503 100644 --- a/apps/web/src/components/GitActionsControl.logic.ts +++ b/apps/web/src/components/GitActionsControl.logic.ts @@ -2,8 +2,8 @@ import type { GitRunStackedActionResult, GitStackedAction, VcsStatusResult, -} from "@t3tools/contracts"; -import { isTemporaryWorktreeBranch } from "@t3tools/shared/git"; +} from "@platon/contracts"; +import { isTemporaryWorktreeBranch } from "@platon/shared/git"; import { DEFAULT_CHANGE_REQUEST_TERMINOLOGY, getChangeRequestTerminology, @@ -414,4 +414,4 @@ export function resolveLiveThreadBranchUpdate(input: { } // Re-export from shared for backwards compatibility in this module's exports -export { resolveAutoFeatureBranchName } from "@t3tools/shared/git"; +export { resolveAutoFeatureBranchName } from "@platon/shared/git"; diff --git a/apps/web/src/components/GitActionsControl.tsx b/apps/web/src/components/GitActionsControl.tsx index 4f2bd19952d2..6682d4d637e3 100644 --- a/apps/web/src/components/GitActionsControl.tsx +++ b/apps/web/src/components/GitActionsControl.tsx @@ -1,9 +1,9 @@ import { useAtomValue } from "@effect/atom-react"; -import { type ScopedThreadRef } from "@t3tools/contracts"; +import { type ScopedThreadRef } from "@platon/contracts"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import type { GitActionProgressEvent, GitRunStackedActionResult, @@ -14,7 +14,7 @@ import type { SourceControlPublishRepositoryResult, SourceControlRepositoryVisibility, VcsStatusResult, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { useNavigate } from "@tanstack/react-router"; import * as Option from "effect/Option"; import { useCallback, useEffect, useEffectEvent, useMemo, useRef, useState } from "react"; diff --git a/apps/web/src/components/KeybindingsUpdateToast.logic.test.ts b/apps/web/src/components/KeybindingsUpdateToast.logic.test.ts index de5a2123cde4..9269a80c9cac 100644 --- a/apps/web/src/components/KeybindingsUpdateToast.logic.test.ts +++ b/apps/web/src/components/KeybindingsUpdateToast.logic.test.ts @@ -1,4 +1,4 @@ -import type { ServerConfigStreamEvent } from "@t3tools/contracts"; +import type { ServerConfigStreamEvent } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { diff --git a/apps/web/src/components/KeybindingsUpdateToast.logic.ts b/apps/web/src/components/KeybindingsUpdateToast.logic.ts index f6a47f50cfc6..2c9f6f3f1549 100644 --- a/apps/web/src/components/KeybindingsUpdateToast.logic.ts +++ b/apps/web/src/components/KeybindingsUpdateToast.logic.ts @@ -1,4 +1,4 @@ -import type { ServerConfigStreamEvent } from "@t3tools/contracts"; +import type { ServerConfigStreamEvent } from "@platon/contracts"; export const KEYBINDINGS_SUCCESS_TOAST_COOLDOWN_MS = 2_000; diff --git a/apps/web/src/components/PlanSidebar.tsx b/apps/web/src/components/PlanSidebar.tsx index abc0db79b6cb..c40a0fd4bfa2 100644 --- a/apps/web/src/components/PlanSidebar.tsx +++ b/apps/web/src/components/PlanSidebar.tsx @@ -2,9 +2,9 @@ import { memo, useState, useCallback } from "react"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; -import type { EnvironmentId, ScopedThreadRef } from "@t3tools/contracts"; -import { type TimestampFormat } from "@t3tools/contracts/settings"; +} from "@platon/client-runtime/state/runtime"; +import type { EnvironmentId, ScopedThreadRef } from "@platon/contracts"; +import { type TimestampFormat } from "@platon/contracts/settings"; import { Badge } from "./ui/badge"; import { Button } from "./ui/button"; import { ScrollArea } from "./ui/scroll-area"; diff --git a/apps/web/src/components/ProjectFavicon.test.tsx b/apps/web/src/components/ProjectFavicon.test.tsx index c2fac8beb7ec..7d5830ae3c0e 100644 --- a/apps/web/src/components/ProjectFavicon.test.tsx +++ b/apps/web/src/components/ProjectFavicon.test.tsx @@ -1,6 +1,6 @@ import type { ComponentType, Dispatch, ReactElement, SetStateAction } from "react"; import { beforeEach, describe, expect, it, vi } from "vite-plus/test"; -import type { EnvironmentId } from "@t3tools/contracts"; +import type { EnvironmentId } from "@platon/contracts"; const testState = vi.hoisted(() => ({ faviconUrl: "https://environment.test/api/assets/token-a/v1-20-favicon.svg", diff --git a/apps/web/src/components/ProjectFavicon.tsx b/apps/web/src/components/ProjectFavicon.tsx index 1df19a640756..fcadbce50afc 100644 --- a/apps/web/src/components/ProjectFavicon.tsx +++ b/apps/web/src/components/ProjectFavicon.tsx @@ -1,8 +1,8 @@ -import type { EnvironmentId } from "@t3tools/contracts"; +import type { EnvironmentId } from "@platon/contracts"; import { getProjectFaviconCacheKey, isProjectFaviconFallbackUrl, -} from "@t3tools/shared/projectFavicon"; +} from "@platon/shared/projectFavicon"; import { FolderIcon } from "lucide-react"; import type { ComponentType } from "react"; import { useState } from "react"; diff --git a/apps/web/src/components/ProjectScriptsControl.test.tsx b/apps/web/src/components/ProjectScriptsControl.test.tsx index d9f3e7e69f08..a98c1db23d65 100644 --- a/apps/web/src/components/ProjectScriptsControl.test.tsx +++ b/apps/web/src/components/ProjectScriptsControl.test.tsx @@ -1,4 +1,4 @@ -import type { ProjectScript, ResolvedKeybindingsConfig } from "@t3tools/contracts"; +import type { ProjectScript, ResolvedKeybindingsConfig } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/ProjectScriptsControl.tsx b/apps/web/src/components/ProjectScriptsControl.tsx index 3a1d71150988..630059215f85 100644 --- a/apps/web/src/components/ProjectScriptsControl.tsx +++ b/apps/web/src/components/ProjectScriptsControl.tsx @@ -2,13 +2,13 @@ import type { ProjectScript, ProjectScriptIcon, ResolvedKeybindingsConfig, - T3ProjectFileScript, -} from "@t3tools/contracts"; + PlatonProjectFileScript, +} from "@platon/contracts"; import { isAtomCommandInterrupted, squashAtomCommandFailure, type AtomCommandResult, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { BugIcon, ChevronDownIcon, @@ -109,12 +109,12 @@ export interface NewProjectScriptInput { export type ProjectScriptActionResult = AtomCommandResult; -const NO_FILE_SCRIPTS: ReadonlyArray = []; +const NO_FILE_SCRIPTS: ReadonlyArray = []; interface ProjectScriptsControlProps { scripts: ReadonlyArray; - /** Scripts declared in the project's checked-in t3.json, offered for import. */ - fileScripts?: ReadonlyArray; + /** Scripts declared in the project's checked-in platon.json, offered for import. */ + fileScripts?: ReadonlyArray; keybindings: ResolvedKeybindingsConfig; preferredScriptId?: string | null; onRunScript: (script: ProjectScript) => void; @@ -280,7 +280,7 @@ export default function ProjectScriptsControl({ void onDeleteScript(editingScriptId); }, [editingScriptId, onDeleteScript]); - const importFileScript = async (fileScript: T3ProjectFileScript) => { + const importFileScript = async (fileScript: PlatonProjectFileScript) => { const payload: NewProjectScriptInput = { name: fileScript.name, command: fileScript.command, @@ -313,7 +313,7 @@ export default function ProjectScriptsControl({ <> {primaryScript && } - From t3.json + From platon.json {importableScripts.map((fileScript) => ( & { diff --git a/apps/web/src/components/ProviderUpdatePrimaryNotification.tsx b/apps/web/src/components/ProviderUpdatePrimaryNotification.tsx index 64399679acfe..e5c6e462ec24 100644 --- a/apps/web/src/components/ProviderUpdatePrimaryNotification.tsx +++ b/apps/web/src/components/ProviderUpdatePrimaryNotification.tsx @@ -2,7 +2,7 @@ import { useNavigate } from "@tanstack/react-router"; import { useAtomValue } from "@effect/atom-react"; import { DownloadIcon } from "lucide-react"; import { useCallback, useEffect, useMemo, useRef } from "react"; -import { type ProviderDriverKind, type ProviderInstanceId } from "@t3tools/contracts"; +import { type ProviderDriverKind, type ProviderInstanceId } from "@platon/contracts"; import { primaryServerProvidersAtom, serverEnvironment } from "../state/server"; import { usePrimaryEnvironment } from "../state/environments"; diff --git a/apps/web/src/components/PullRequestThreadDialog.tsx b/apps/web/src/components/PullRequestThreadDialog.tsx index 4004b4930c27..92c9ad3aff6d 100644 --- a/apps/web/src/components/PullRequestThreadDialog.tsx +++ b/apps/web/src/components/PullRequestThreadDialog.tsx @@ -1,5 +1,5 @@ -import type { EnvironmentId, ThreadId } from "@t3tools/contracts"; -import { isAtomCommandInterrupted } from "@t3tools/client-runtime/state/runtime"; +import type { EnvironmentId, ThreadId } from "@platon/contracts"; +import { isAtomCommandInterrupted } from "@platon/client-runtime/state/runtime"; import { useDebouncedValue } from "@tanstack/react-pacer"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; diff --git a/apps/web/src/components/RightPanelTabs.tsx b/apps/web/src/components/RightPanelTabs.tsx index fe652b6fde73..2a5e384a790c 100644 --- a/apps/web/src/components/RightPanelTabs.tsx +++ b/apps/web/src/components/RightPanelTabs.tsx @@ -1,5 +1,5 @@ -import type { ContextMenuItem, PreviewSessionSnapshot } from "@t3tools/contracts"; -import { getTerminalLabel } from "@t3tools/shared/terminalLabels"; +import type { ContextMenuItem, PreviewSessionSnapshot } from "@platon/contracts"; +import { getTerminalLabel } from "@platon/shared/terminalLabels"; import { ClipboardList, FileDiff, Files, Globe2, Plus, TerminalSquare, X } from "lucide-react"; import { type MouseEvent as ReactMouseEvent, @@ -51,7 +51,7 @@ interface RightPanelTabsProps { } const SURFACE_DISABLED_REASONS = { - browser: "Browser previews are only available in the T3 Code desktop app.", + browser: "Browser previews are only available in the Platon Code desktop app.", files: "Files are only available when a project is open.", diff: "Diff is only available for server threads in Git repositories.", } as const; diff --git a/apps/web/src/components/ServerUpdateAction.test.tsx b/apps/web/src/components/ServerUpdateAction.test.tsx index 4d5669a0a8ff..1d30618945fd 100644 --- a/apps/web/src/components/ServerUpdateAction.test.tsx +++ b/apps/web/src/components/ServerUpdateAction.test.tsx @@ -1,6 +1,6 @@ import type { ReactElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; -import type { EnvironmentId } from "@t3tools/contracts"; +import type { EnvironmentId } from "@platon/contracts"; import * as Cause from "effect/Cause"; import { AsyncResult } from "effect/unstable/reactivity"; import { beforeEach, describe, expect, it, vi } from "vite-plus/test"; @@ -64,7 +64,7 @@ describe("ServerUpdateAction", () => { expect(testState.toast).toHaveBeenCalledWith({ type: "success", title: "Test server updated", - description: "Reconnected on t3@0.0.31.", + description: "Reconnected on platon@0.0.31.", }); }); diff --git a/apps/web/src/components/ServerUpdateAction.tsx b/apps/web/src/components/ServerUpdateAction.tsx index f3b6c694fae7..e6c1fa3bc085 100644 --- a/apps/web/src/components/ServerUpdateAction.tsx +++ b/apps/web/src/components/ServerUpdateAction.tsx @@ -1,9 +1,9 @@ -import type { EnvironmentId, ServerSelfUpdateCapability } from "@t3tools/contracts"; -import type { ServerUpdateState } from "@t3tools/client-runtime/state/server"; +import type { EnvironmentId, ServerSelfUpdateCapability } from "@platon/contracts"; +import type { ServerUpdateState } from "@platon/client-runtime/state/server"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { CheckIcon } from "lucide-react"; import { useCopyToClipboard } from "~/hooks/useCopyToClipboard"; @@ -172,7 +172,7 @@ export function ServerUpdateAction({ toastManager.add({ type: "success", title: `${serverLabel} updated`, - description: `Reconnected on t3@${result.value.targetVersion}.`, + description: `Reconnected on platon@${result.value.targetVersion}.`, }); } finally { pendingUpdateEnvironmentIds.delete(environmentId); diff --git a/apps/web/src/components/Sidebar.logic.test.ts b/apps/web/src/components/Sidebar.logic.test.ts index ac2716a196ef..8091addc3d73 100644 --- a/apps/web/src/components/Sidebar.logic.test.ts +++ b/apps/web/src/components/Sidebar.logic.test.ts @@ -37,7 +37,7 @@ import { ProjectId, ProviderInstanceId, ThreadId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { DEFAULT_INTERACTION_MODE, diff --git a/apps/web/src/components/Sidebar.logic.ts b/apps/web/src/components/Sidebar.logic.ts index 7b8a0eff3ff2..7a8bf514659a 100644 --- a/apps/web/src/components/Sidebar.logic.ts +++ b/apps/web/src/components/Sidebar.logic.ts @@ -1,6 +1,6 @@ import * as React from "react"; -import type { ContextMenuItem } from "@t3tools/contracts"; -import type { SidebarProjectSortOrder, SidebarThreadSortOrder } from "@t3tools/contracts/settings"; +import type { ContextMenuItem } from "@platon/contracts"; +import type { SidebarProjectSortOrder, SidebarThreadSortOrder } from "@platon/contracts/settings"; import { getThreadSortTimestamp, sortThreads, diff --git a/apps/web/src/components/Sidebar.snooze.ts b/apps/web/src/components/Sidebar.snooze.ts index adbc361a8ee3..2badc760aaff 100644 --- a/apps/web/src/components/Sidebar.snooze.ts +++ b/apps/web/src/components/Sidebar.snooze.ts @@ -1,10 +1,10 @@ -import { snoozeWakeLabel } from "@t3tools/client-runtime/state/thread-settled"; +import { snoozeWakeLabel } from "@platon/client-runtime/state/thread-settled"; import { parseTimestampDate } from "../timestampFormat"; export { resolveSnoozePresets, type SnoozePreset, -} from "@t3tools/client-runtime/state/thread-settled"; +} from "@platon/client-runtime/state/thread-settled"; export { snoozeWakeLabel }; const DAY_MS = 24 * 60 * 60 * 1_000; diff --git a/apps/web/src/components/Sidebar.tsx b/apps/web/src/components/Sidebar.tsx index cffab8bd5778..2b179d693c77 100644 --- a/apps/web/src/components/Sidebar.tsx +++ b/apps/web/src/components/Sidebar.tsx @@ -48,20 +48,20 @@ import { type ResolvedKeybindingsConfig, type SidebarProjectGroupingMode, ThreadId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { parseScopedThreadKey, scopedProjectKey, scopedThreadKey, scopeProjectRef, scopeThreadRef, -} from "@t3tools/client-runtime/environment"; -import { safeErrorLogAttributes } from "@t3tools/client-runtime/errors"; +} from "@platon/client-runtime/environment"; +import { safeErrorLogAttributes } from "@platon/client-runtime/errors"; import { isAtomCommandInterrupted, settlePromise, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { useLocation, useNavigate, useParams, useRouter } from "@tanstack/react-router"; import { MAX_SIDEBAR_THREAD_PREVIEW_COUNT, @@ -69,7 +69,7 @@ import { type SidebarProjectSortOrder, type SidebarThreadPreviewCount, type SidebarThreadSortOrder, -} from "@t3tools/contracts/settings"; +} from "@platon/contracts/settings"; import { isDesktopLocalConnectionTarget } from "../connection/desktopLocal"; import { useDesktopLocalBootstraps } from "../connection/useDesktopLocalBootstraps"; import { isElectron } from "../env"; diff --git a/apps/web/src/components/SidebarV2.tsx b/apps/web/src/components/SidebarV2.tsx index 18fcc810f508..39fcfa790d13 100644 --- a/apps/web/src/components/SidebarV2.tsx +++ b/apps/web/src/components/SidebarV2.tsx @@ -5,14 +5,14 @@ import { effectiveSettled, effectiveSnoozed, threadWokeAt, -} from "@t3tools/client-runtime/state/thread-settled"; -import type { EnvironmentThreadShell } from "@t3tools/client-runtime/state/models"; +} from "@platon/client-runtime/state/thread-settled"; +import type { EnvironmentThreadShell } from "@platon/client-runtime/state/models"; import { scopeProjectRef, scopeThreadRef, scopedThreadKey, -} from "@t3tools/client-runtime/environment"; -import type { ScopedThreadRef, SidebarProjectGroupingMode } from "@t3tools/contracts"; +} from "@platon/client-runtime/environment"; +import type { ScopedThreadRef, SidebarProjectGroupingMode } from "@platon/contracts"; import { AlarmClockIcon, AlarmClockOffIcon, @@ -54,7 +54,7 @@ import { isAtomCommandInterrupted, settlePromise, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; +} from "@platon/client-runtime/state/runtime"; import { isElectron } from "../env"; import { resolveShortcutCommand, diff --git a/apps/web/src/components/SplashScreen.tsx b/apps/web/src/components/SplashScreen.tsx index a0b593a95078..72b4674d89be 100644 --- a/apps/web/src/components/SplashScreen.tsx +++ b/apps/web/src/components/SplashScreen.tsx @@ -1,8 +1,11 @@ export function SplashScreen() { return (
-
- T3 Code +
+ Platon Code
); diff --git a/apps/web/src/components/ThreadStatusIndicators.test.ts b/apps/web/src/components/ThreadStatusIndicators.test.ts index 3eb8e4f710f1..8255be0962c5 100644 --- a/apps/web/src/components/ThreadStatusIndicators.test.ts +++ b/apps/web/src/components/ThreadStatusIndicators.test.ts @@ -1,4 +1,4 @@ -import type { VcsStatusResult } from "@t3tools/contracts"; +import type { VcsStatusResult } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { @@ -21,7 +21,7 @@ function status(overrides: Partial = {}): VcsStatusResult { pr: { number: 42, title: "PR branch", - url: "https://github.com/pingdotgg/t3code/pull/42", + url: "https://github.com/pingdotgg/platon-code/pull/42", baseRef: "main", headRef: "feature/current", state: "open", diff --git a/apps/web/src/components/ThreadStatusIndicators.test.tsx b/apps/web/src/components/ThreadStatusIndicators.test.tsx index 868bd2cd99c0..478bf50c469e 100644 --- a/apps/web/src/components/ThreadStatusIndicators.test.tsx +++ b/apps/web/src/components/ThreadStatusIndicators.test.tsx @@ -1,4 +1,4 @@ -import { ThreadId } from "@t3tools/contracts"; +import { ThreadId } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/ThreadStatusIndicators.tsx b/apps/web/src/components/ThreadStatusIndicators.tsx index af53d1a78b20..3a3d1578de64 100644 --- a/apps/web/src/components/ThreadStatusIndicators.tsx +++ b/apps/web/src/components/ThreadStatusIndicators.tsx @@ -2,8 +2,8 @@ import { scopeProjectRef, scopedThreadKey, scopeThreadRef, -} from "@t3tools/client-runtime/environment"; -import type { VcsStatusResult } from "@t3tools/contracts"; +} from "@platon/client-runtime/environment"; +import type { VcsStatusResult } from "@platon/contracts"; import { CloudIcon, FolderGit2Icon, GitPullRequestIcon, TerminalIcon } from "lucide-react"; import { useMemo } from "react"; import { useEnvironment, usePrimaryEnvironmentId } from "../state/environments"; diff --git a/apps/web/src/components/ThreadTerminalDrawer.tsx b/apps/web/src/components/ThreadTerminalDrawer.tsx index dd7da738626c..f1e94afe6b90 100644 --- a/apps/web/src/components/ThreadTerminalDrawer.tsx +++ b/apps/web/src/components/ThreadTerminalDrawer.tsx @@ -2,8 +2,8 @@ import { useAtomValue } from "@effect/atom-react"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; -import { type TerminalSessionState } from "@t3tools/client-runtime/state/terminal"; +} from "@platon/client-runtime/state/runtime"; +import { type TerminalSessionState } from "@platon/client-runtime/state/terminal"; import { Plus, SquareSplitHorizontal, @@ -16,8 +16,8 @@ import { type ResolvedKeybindingsConfig, type ScopedThreadRef, type ThreadId, -} from "@t3tools/contracts"; -import { getTerminalLabel } from "@t3tools/shared/terminalLabels"; +} from "@platon/contracts"; +import { getTerminalLabel } from "@platon/shared/terminalLabels"; import { type PointerEvent as ReactPointerEvent, type ReactNode, diff --git a/apps/web/src/components/auth/PairingRouteSurface.tsx b/apps/web/src/components/auth/PairingRouteSurface.tsx index 59288506569c..d405719c28d4 100644 --- a/apps/web/src/components/auth/PairingRouteSurface.tsx +++ b/apps/web/src/components/auth/PairingRouteSurface.tsx @@ -1,5 +1,5 @@ -import type { AuthSessionState } from "@t3tools/contracts"; -import { squashAtomCommandFailure } from "@t3tools/client-runtime/state/runtime"; +import type { AuthSessionState } from "@platon/contracts"; +import { squashAtomCommandFailure } from "@platon/client-runtime/state/runtime"; import React, { startTransition, useEffect, useRef, useState, useCallback } from "react"; import { APP_DISPLAY_NAME } from "../../branding"; diff --git a/apps/web/src/components/chat/ChangedFilesTree.test.tsx b/apps/web/src/components/chat/ChangedFilesTree.test.tsx index ec5875682fc1..9a10a1e980a1 100644 --- a/apps/web/src/components/chat/ChangedFilesTree.test.tsx +++ b/apps/web/src/components/chat/ChangedFilesTree.test.tsx @@ -1,4 +1,4 @@ -import { TurnId } from "@t3tools/contracts"; +import { TurnId } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/chat/ChangedFilesTree.tsx b/apps/web/src/components/chat/ChangedFilesTree.tsx index 3a705eef36d4..7e01f909b039 100644 --- a/apps/web/src/components/chat/ChangedFilesTree.tsx +++ b/apps/web/src/components/chat/ChangedFilesTree.tsx @@ -1,4 +1,4 @@ -import { type TurnId } from "@t3tools/contracts"; +import { type TurnId } from "@platon/contracts"; import { memo, useCallback, useMemo, useState } from "react"; import { type TurnDiffFileChange } from "../../types"; import { diff --git a/apps/web/src/components/chat/ChatComposer.tsx b/apps/web/src/components/chat/ChatComposer.tsx index e92ecd497e3d..c0633a6a70be 100644 --- a/apps/web/src/components/chat/ChatComposer.tsx +++ b/apps/web/src/components/chat/ChatComposer.tsx @@ -11,16 +11,16 @@ import type { ServerProvider, ThreadId, TurnId, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { ProviderDriverKind, ProviderInstanceId, PROVIDER_SEND_TURN_MAX_ATTACHMENTS, PROVIDER_SEND_TURN_MAX_IMAGE_BYTES, -} from "@t3tools/contracts"; -import type { EnvironmentConnectionPresentation } from "@t3tools/client-runtime/connection"; -import { serializeComposerFileLink } from "@t3tools/shared/composerTrigger"; -import { createModelSelection, normalizeModelSlug } from "@t3tools/shared/model"; +} from "@platon/contracts"; +import type { EnvironmentConnectionPresentation } from "@platon/client-runtime/connection"; +import { serializeComposerFileLink } from "@platon/shared/composerTrigger"; +import { createModelSelection, normalizeModelSlug } from "@platon/shared/model"; import { memo, type ReactNode, @@ -193,7 +193,7 @@ import { type ProviderInstanceEntry, } from "../../providerInstances"; import { type AppModelOption, getAppModelOptionsForInstance } from "../../modelSelection"; -import type { UnifiedSettings } from "@t3tools/contracts/settings"; +import type { UnifiedSettings } from "@platon/contracts/settings"; import type { SessionPhase, Thread } from "../../types"; import type { PendingUserInputDraftAnswer } from "../../pendingUserInput"; import type { PendingApproval, PendingUserInput } from "../../session-logic"; diff --git a/apps/web/src/components/chat/ChatHeader.test.ts b/apps/web/src/components/chat/ChatHeader.test.ts index d716092fc3eb..4f2c9e96418c 100644 --- a/apps/web/src/components/chat/ChatHeader.test.ts +++ b/apps/web/src/components/chat/ChatHeader.test.ts @@ -1,4 +1,4 @@ -import { EnvironmentId } from "@t3tools/contracts"; +import { EnvironmentId } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { shouldShowOpenInPicker } from "./ChatHeader"; diff --git a/apps/web/src/components/chat/ChatHeader.tsx b/apps/web/src/components/chat/ChatHeader.tsx index 0adeed6ffa61..e8fe88d3783e 100644 --- a/apps/web/src/components/chat/ChatHeader.tsx +++ b/apps/web/src/components/chat/ChatHeader.tsx @@ -4,8 +4,8 @@ import { type ProjectScript, type ResolvedKeybindingsConfig, type ThreadId, -} from "@t3tools/contracts"; -import { scopeThreadRef } from "@t3tools/client-runtime/environment"; +} from "@platon/contracts"; +import { scopeThreadRef } from "@platon/client-runtime/environment"; import { memo } from "react"; import GitActionsControl from "../GitActionsControl"; import { type DraftId } from "~/composerDraftStore"; @@ -16,7 +16,7 @@ import ProjectScriptsControl, { } from "../ProjectScriptsControl"; import { OpenInPicker } from "./OpenInPicker"; import { usePrimaryEnvironmentId } from "../../state/environments"; -import { useT3ProjectFileScripts } from "~/hooks/useT3ProjectFileScripts"; +import { usePlatonProjectFileScripts } from "~/hooks/usePlatonProjectFileScripts"; import { ProjectFavicon } from "../ProjectFavicon"; import { cn } from "~/lib/utils"; @@ -77,7 +77,7 @@ export const ChatHeader = memo(function ChatHeader({ onDeleteProjectScript, }: ChatHeaderProps) { const primaryEnvironmentId = usePrimaryEnvironmentId(); - const fileScripts = useT3ProjectFileScripts( + const fileScripts = usePlatonProjectFileScripts( activeThreadEnvironmentId, activeProjectScripts ? activeProjectCwd : null, ); diff --git a/apps/web/src/components/chat/CompactComposerControlsMenu.tsx b/apps/web/src/components/chat/CompactComposerControlsMenu.tsx index b808f5629201..7dd9095d787d 100644 --- a/apps/web/src/components/chat/CompactComposerControlsMenu.tsx +++ b/apps/web/src/components/chat/CompactComposerControlsMenu.tsx @@ -1,4 +1,4 @@ -import { ProviderInteractionMode, RuntimeMode } from "@t3tools/contracts"; +import { ProviderInteractionMode, RuntimeMode } from "@platon/contracts"; import { memo, type ReactNode } from "react"; import { EllipsisIcon, ListTodoIcon } from "lucide-react"; import { Button } from "../ui/button"; diff --git a/apps/web/src/components/chat/ComposerCommandMenu.tsx b/apps/web/src/components/chat/ComposerCommandMenu.tsx index 73fc63489056..c2fb244bc689 100644 --- a/apps/web/src/components/chat/ComposerCommandMenu.tsx +++ b/apps/web/src/components/chat/ComposerCommandMenu.tsx @@ -3,7 +3,7 @@ import { type ProviderDriverKind, type ServerProviderSkill, type ServerProviderSlashCommand, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { BotIcon } from "lucide-react"; import { memo, useLayoutEffect, useMemo, useRef } from "react"; diff --git a/apps/web/src/components/chat/ComposerPendingApprovalActions.tsx b/apps/web/src/components/chat/ComposerPendingApprovalActions.tsx index 64c3acc7bf7e..d5f8d4e2fd5c 100644 --- a/apps/web/src/components/chat/ComposerPendingApprovalActions.tsx +++ b/apps/web/src/components/chat/ComposerPendingApprovalActions.tsx @@ -1,4 +1,4 @@ -import { type ApprovalRequestId, type ProviderApprovalDecision } from "@t3tools/contracts"; +import { type ApprovalRequestId, type ProviderApprovalDecision } from "@platon/contracts"; import { memo } from "react"; import { Button } from "../ui/button"; diff --git a/apps/web/src/components/chat/ComposerPendingApprovalPanel.test.tsx b/apps/web/src/components/chat/ComposerPendingApprovalPanel.test.tsx index fbaf81bc9fd6..9984e96706b2 100644 --- a/apps/web/src/components/chat/ComposerPendingApprovalPanel.test.tsx +++ b/apps/web/src/components/chat/ComposerPendingApprovalPanel.test.tsx @@ -1,4 +1,4 @@ -import { ApprovalRequestId } from "@t3tools/contracts"; +import { ApprovalRequestId } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/chat/ComposerPendingTerminalContexts.test.tsx b/apps/web/src/components/chat/ComposerPendingTerminalContexts.test.tsx index 3c610a7b5c42..202ba0bfa259 100644 --- a/apps/web/src/components/chat/ComposerPendingTerminalContexts.test.tsx +++ b/apps/web/src/components/chat/ComposerPendingTerminalContexts.test.tsx @@ -1,4 +1,4 @@ -import { ThreadId } from "@t3tools/contracts"; +import { ThreadId } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx index bd02a91b248e..4c9090c9d6b6 100644 --- a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx +++ b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx @@ -1,4 +1,4 @@ -import { type ApprovalRequestId } from "@t3tools/contracts"; +import { type ApprovalRequestId } from "@platon/contracts"; import { memo, useEffect, useEffectEvent, useRef, useState } from "react"; import { type PendingUserInput } from "../../session-logic"; import { diff --git a/apps/web/src/components/chat/ComposerPreviewAnnotationCards.test.tsx b/apps/web/src/components/chat/ComposerPreviewAnnotationCards.test.tsx index 5bb28054e7d7..d4398b68ca0e 100644 --- a/apps/web/src/components/chat/ComposerPreviewAnnotationCards.test.tsx +++ b/apps/web/src/components/chat/ComposerPreviewAnnotationCards.test.tsx @@ -1,4 +1,4 @@ -import type { PreviewAnnotationPayload } from "@t3tools/contracts"; +import type { PreviewAnnotationPayload } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it, vi } from "vite-plus/test"; diff --git a/apps/web/src/components/chat/ComposerPreviewAnnotationCards.tsx b/apps/web/src/components/chat/ComposerPreviewAnnotationCards.tsx index 602ad114464a..a57e75202ebc 100644 --- a/apps/web/src/components/chat/ComposerPreviewAnnotationCards.tsx +++ b/apps/web/src/components/chat/ComposerPreviewAnnotationCards.tsx @@ -1,4 +1,4 @@ -import type { PreviewAnnotationPayload } from "@t3tools/contracts"; +import type { PreviewAnnotationPayload } from "@platon/contracts"; import { Frame, MousePointerClick, Paintbrush, PenLine, X } from "lucide-react"; import type { ReactNode } from "react"; diff --git a/apps/web/src/components/chat/DraftHeroHeadline.tsx b/apps/web/src/components/chat/DraftHeroHeadline.tsx index 4407e6215259..00789fc0aee9 100644 --- a/apps/web/src/components/chat/DraftHeroHeadline.tsx +++ b/apps/web/src/components/chat/DraftHeroHeadline.tsx @@ -1,5 +1,5 @@ -import type { ScopedProjectRef } from "@t3tools/contracts"; -import { scopedProjectKey, scopeProjectRef } from "@t3tools/client-runtime/environment"; +import type { ScopedProjectRef } from "@platon/contracts"; +import { scopedProjectKey, scopeProjectRef } from "@platon/client-runtime/environment"; import { FolderPlusIcon } from "lucide-react"; import { useCallback, useMemo } from "react"; diff --git a/apps/web/src/components/chat/MessagesTimeline.logic.ts b/apps/web/src/components/chat/MessagesTimeline.logic.ts index 3227bac2413b..1049335b189e 100644 --- a/apps/web/src/components/chat/MessagesTimeline.logic.ts +++ b/apps/web/src/components/chat/MessagesTimeline.logic.ts @@ -7,7 +7,7 @@ import { type WorkLogEntry, } from "../../session-logic"; import { type ChatMessage, type ProposedPlan, type TurnDiffSummary } from "../../types"; -import { type MessageId, type OrchestrationLatestTurn, type TurnId } from "@t3tools/contracts"; +import { type MessageId, type OrchestrationLatestTurn, type TurnId } from "@platon/contracts"; export const MAX_VISIBLE_WORK_LOG_ENTRIES = 1; export const TIMELINE_MINIMAP_ITEM_SPACING = 8; diff --git a/apps/web/src/components/chat/MessagesTimeline.test.tsx b/apps/web/src/components/chat/MessagesTimeline.test.tsx index 83ca7d3e9527..336a8b9091fe 100644 --- a/apps/web/src/components/chat/MessagesTimeline.test.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.test.tsx @@ -1,4 +1,4 @@ -import { CheckpointRef, EnvironmentId, MessageId, TurnId } from "@t3tools/contracts"; +import { CheckpointRef, EnvironmentId, MessageId, TurnId } from "@platon/contracts"; import { createRef, type ReactNode, type Ref } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { beforeAll, describe, expect, it, vi } from "vite-plus/test"; @@ -541,16 +541,18 @@ describe("MessagesTimeline", () => { createdAt: "2026-03-17T19:12:28.000Z", label: "Updated files", tone: "tool", - changedFiles: ["C:/Users/mike/dev-stuff/t3code/apps/web/src/session-logic.ts"], + changedFiles: ["C:/Users/mike/dev-stuff/platon-code/apps/web/src/session-logic.ts"], }, }, ]} - workspaceRoot="C:/Users/mike/dev-stuff/t3code" + workspaceRoot="C:/Users/mike/dev-stuff/platon-code" />, ); - expect(markup).toContain("t3code/apps/web/src/session-logic.ts"); - expect(markup).not.toContain("C:/Users/mike/dev-stuff/t3code/apps/web/src/session-logic.ts"); + expect(markup).toContain("platon-code/apps/web/src/session-logic.ts"); + expect(markup).not.toContain( + "C:/Users/mike/dev-stuff/platon-code/apps/web/src/session-logic.ts", + ); }); it("renders review comment contexts as structured cards instead of raw tags", () => { diff --git a/apps/web/src/components/chat/MessagesTimeline.tsx b/apps/web/src/components/chat/MessagesTimeline.tsx index a429b54deaf1..ce09fe0e2c38 100644 --- a/apps/web/src/components/chat/MessagesTimeline.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.tsx @@ -4,9 +4,9 @@ import { type ScopedThreadRef, type ServerProviderSkill, type TurnId, -} from "@t3tools/contracts"; -import { parseScopedThreadKey } from "@t3tools/client-runtime/environment"; -import { resolveChatListAnchoredEndSpace } from "@t3tools/shared/chatList"; +} from "@platon/contracts"; +import { parseScopedThreadKey } from "@platon/client-runtime/environment"; +import { resolveChatListAnchoredEndSpace } from "@platon/shared/chatList"; import { createContext, Fragment, @@ -97,7 +97,7 @@ import { } from "~/lib/previewAnnotation"; import { cn } from "~/lib/utils"; import { useUiStateStore } from "~/uiStateStore"; -import { type TimestampFormat } from "@t3tools/contracts/settings"; +import { type TimestampFormat } from "@platon/contracts/settings"; import { formatChatTimestampTooltip, formatShortTimestamp } from "../../timestampFormat"; import { diff --git a/apps/web/src/components/chat/ModelListRow.tsx b/apps/web/src/components/chat/ModelListRow.tsx index a74a4ebf8c26..adfcfd01c88c 100644 --- a/apps/web/src/components/chat/ModelListRow.tsx +++ b/apps/web/src/components/chat/ModelListRow.tsx @@ -1,4 +1,4 @@ -import { type ProviderDriverKind, type ProviderInstanceId } from "@t3tools/contracts"; +import { type ProviderDriverKind, type ProviderInstanceId } from "@platon/contracts"; import { memo } from "react"; import { StarIcon } from "lucide-react"; import { diff --git a/apps/web/src/components/chat/ModelPickerContent.tsx b/apps/web/src/components/chat/ModelPickerContent.tsx index c58716d843cb..ec28974207ac 100644 --- a/apps/web/src/components/chat/ModelPickerContent.tsx +++ b/apps/web/src/components/chat/ModelPickerContent.tsx @@ -2,8 +2,8 @@ import { type ProviderInstanceId, type ProviderDriverKind, type ResolvedKeybindingsConfig, -} from "@t3tools/contracts"; -import { resolveSelectableModel } from "@t3tools/shared/model"; +} from "@platon/contracts"; +import { resolveSelectableModel } from "@platon/shared/model"; import { LegendList, type LegendListRef } from "@legendapp/list/react"; import { memo, useMemo, useState, useCallback, useEffect, useLayoutEffect, useRef } from "react"; import { ChevronRightIcon, SearchIcon } from "lucide-react"; diff --git a/apps/web/src/components/chat/ModelPickerSidebar.tsx b/apps/web/src/components/chat/ModelPickerSidebar.tsx index 24ec66cd6142..a0689cf6d7ba 100644 --- a/apps/web/src/components/chat/ModelPickerSidebar.tsx +++ b/apps/web/src/components/chat/ModelPickerSidebar.tsx @@ -1,4 +1,4 @@ -import { type ProviderInstanceId } from "@t3tools/contracts"; +import { type ProviderInstanceId } from "@platon/contracts"; import { memo, useLayoutEffect, useMemo, useRef, useState } from "react"; import { SparklesIcon, StarIcon } from "lucide-react"; import { ProviderInstanceIcon } from "./ProviderInstanceIcon"; diff --git a/apps/web/src/components/chat/OpenInPicker.tsx b/apps/web/src/components/chat/OpenInPicker.tsx index de5a2f7cfff7..1821fe0f1e4e 100644 --- a/apps/web/src/components/chat/OpenInPicker.tsx +++ b/apps/web/src/components/chat/OpenInPicker.tsx @@ -1,4 +1,4 @@ -import { EditorId, type EnvironmentId, type ResolvedKeybindingsConfig } from "@t3tools/contracts"; +import { EditorId, type EnvironmentId, type ResolvedKeybindingsConfig } from "@platon/contracts"; import { memo, useCallback, useEffect, useMemo } from "react"; import { isOpenFavoriteEditorShortcut, shortcutLabelForCommand } from "../../keybindings"; import { usePreferredEditor } from "../../editorPreferences"; diff --git a/apps/web/src/components/chat/ProposedPlanCard.tsx b/apps/web/src/components/chat/ProposedPlanCard.tsx index 9746857a8cac..cf337c82e933 100644 --- a/apps/web/src/components/chat/ProposedPlanCard.tsx +++ b/apps/web/src/components/chat/ProposedPlanCard.tsx @@ -2,8 +2,8 @@ import { memo, useState, useId } from "react"; import { isAtomCommandInterrupted, squashAtomCommandFailure, -} from "@t3tools/client-runtime/state/runtime"; -import type { EnvironmentId, ScopedThreadRef } from "@t3tools/contracts"; +} from "@platon/client-runtime/state/runtime"; +import type { EnvironmentId, ScopedThreadRef } from "@platon/contracts"; import { buildCollapsedProposedPlanPreviewMarkdown, buildProposedPlanMarkdownFilename, diff --git a/apps/web/src/components/chat/ProviderInstanceIcon.tsx b/apps/web/src/components/chat/ProviderInstanceIcon.tsx index a58e29fe115b..7110a0f9ab97 100644 --- a/apps/web/src/components/chat/ProviderInstanceIcon.tsx +++ b/apps/web/src/components/chat/ProviderInstanceIcon.tsx @@ -1,5 +1,5 @@ import { type CSSProperties, memo } from "react"; -import { type ProviderDriverKind } from "@t3tools/contracts"; +import { type ProviderDriverKind } from "@platon/contracts"; import { PROVIDER_ICON_BY_PROVIDER } from "./providerIconUtils"; import { cn } from "~/lib/utils"; diff --git a/apps/web/src/components/chat/ProviderModelPicker.tsx b/apps/web/src/components/chat/ProviderModelPicker.tsx index a9b3a398115b..aa3a5e648dc5 100644 --- a/apps/web/src/components/chat/ProviderModelPicker.tsx +++ b/apps/web/src/components/chat/ProviderModelPicker.tsx @@ -2,7 +2,7 @@ import { type ProviderInstanceId, type ProviderDriverKind, type ResolvedKeybindingsConfig, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { memo, useEffect, useMemo, useState } from "react"; import type { VariantProps } from "class-variance-authority"; import { buttonVariants } from "../ui/button"; diff --git a/apps/web/src/components/chat/ProviderStatusBanner.test.tsx b/apps/web/src/components/chat/ProviderStatusBanner.test.tsx index 2a5bfe9ed3a8..27b4ade6ccae 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.test.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.test.tsx @@ -1,4 +1,4 @@ -import { ProviderDriverKind, ProviderInstanceId, type ServerProvider } from "@t3tools/contracts"; +import { ProviderDriverKind, ProviderInstanceId, type ServerProvider } from "@platon/contracts"; import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it } from "vite-plus/test"; diff --git a/apps/web/src/components/chat/ProviderStatusBanner.tsx b/apps/web/src/components/chat/ProviderStatusBanner.tsx index a64a94bc1c38..98f84a0dbffd 100644 --- a/apps/web/src/components/chat/ProviderStatusBanner.tsx +++ b/apps/web/src/components/chat/ProviderStatusBanner.tsx @@ -1,4 +1,4 @@ -import { type ServerProvider } from "@t3tools/contracts"; +import { type ServerProvider } from "@platon/contracts"; import { memo } from "react"; import { InfoIcon, XIcon } from "lucide-react"; import { cn } from "~/lib/utils"; diff --git a/apps/web/src/components/chat/SkillInlineText.tsx b/apps/web/src/components/chat/SkillInlineText.tsx index 0acff1a8f6cd..72869d595a46 100644 --- a/apps/web/src/components/chat/SkillInlineText.tsx +++ b/apps/web/src/components/chat/SkillInlineText.tsx @@ -1,5 +1,5 @@ import { Children, cloneElement, isValidElement, type ReactNode } from "react"; -import type { ServerProviderSkill } from "@t3tools/contracts"; +import type { ServerProviderSkill } from "@platon/contracts"; import { formatProviderSkillDisplayName } from "../../providerSkillPresentation"; import { diff --git a/apps/web/src/components/chat/TraitsPicker.test.ts b/apps/web/src/components/chat/TraitsPicker.test.ts index b457f515ff77..a987174c83a3 100644 --- a/apps/web/src/components/chat/TraitsPicker.test.ts +++ b/apps/web/src/components/chat/TraitsPicker.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vite-plus/test"; -import { ProviderDriverKind, type ProviderOptionDescriptor } from "@t3tools/contracts"; +import { ProviderDriverKind, type ProviderOptionDescriptor } from "@platon/contracts"; import { buildTraitsTriggerDisplay } from "./TraitsPicker"; function selectDescriptor( diff --git a/apps/web/src/components/chat/TraitsPicker.tsx b/apps/web/src/components/chat/TraitsPicker.tsx index 6593acd8e1fc..bdf5d8e85611 100644 --- a/apps/web/src/components/chat/TraitsPicker.tsx +++ b/apps/web/src/components/chat/TraitsPicker.tsx @@ -5,7 +5,7 @@ import { type ProviderOptionSelection, type ScopedThreadRef, type ServerProviderModel, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { applyClaudePromptEffortPrefix, buildProviderOptionSelectionsFromDescriptors, @@ -13,7 +13,7 @@ import { getProviderOptionCurrentValue, getProviderOptionDescriptors, isClaudeUltrathinkPrompt, -} from "@t3tools/shared/model"; +} from "@platon/shared/model"; import { memo, useCallback, useState } from "react"; import type { VariantProps } from "class-variance-authority"; import { ZapIcon } from "lucide-react"; diff --git a/apps/web/src/components/chat/composerMentionDrag.ts b/apps/web/src/components/chat/composerMentionDrag.ts index 43b1bfd800dc..708999cb5d8f 100644 --- a/apps/web/src/components/chat/composerMentionDrag.ts +++ b/apps/web/src/components/chat/composerMentionDrag.ts @@ -1,11 +1,11 @@ -import { serializeComposerFileLink } from "@t3tools/shared/composerTrigger"; +import { serializeComposerFileLink } from "@platon/shared/composerTrigger"; /** * Drag payload type carrying a serialized composer mention. Set on drags that * start in the workspace file tree so the composer can tell them apart from * OS file drags and plain text selections. */ -export const COMPOSER_MENTION_DRAG_TYPE = "application/x-t3code-composer-mention"; +export const COMPOSER_MENTION_DRAG_TYPE = "application/x-platon-code-composer-mention"; export function composerMentionFromTreePath(treePath: string): string | null { const relativePath = treePath.replace(/\/+$/, ""); diff --git a/apps/web/src/components/chat/composerProviderState.test.tsx b/apps/web/src/components/chat/composerProviderState.test.tsx index 067e71ef1bfc..9afa1703bbf8 100644 --- a/apps/web/src/components/chat/composerProviderState.test.tsx +++ b/apps/web/src/components/chat/composerProviderState.test.tsx @@ -4,7 +4,7 @@ import { type ProviderOptionDescriptor, type ProviderOptionSelection, type ServerProviderModel, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { getComposerPromptInjectionState, getComposerProviderState, diff --git a/apps/web/src/components/chat/composerProviderState.tsx b/apps/web/src/components/chat/composerProviderState.tsx index 1349e2509b7b..c2ad3335f0ec 100644 --- a/apps/web/src/components/chat/composerProviderState.tsx +++ b/apps/web/src/components/chat/composerProviderState.tsx @@ -4,13 +4,13 @@ import { type ProviderOptionSelection, type ScopedThreadRef, type ServerProviderModel, -} from "@t3tools/contracts"; +} from "@platon/contracts"; import { buildProviderOptionSelectionsFromDescriptors, getProviderOptionCurrentValue, getProviderOptionDescriptors, isClaudeUltrathinkPrompt, -} from "@t3tools/shared/model"; +} from "@platon/shared/model"; import type { ReactNode } from "react"; import type { DraftId } from "../../composerDraftStore"; diff --git a/apps/web/src/components/chat/composerSlashCommandSearch.test.ts b/apps/web/src/components/chat/composerSlashCommandSearch.test.ts index bf7ab3e1d9a5..7ab6cb7bced1 100644 --- a/apps/web/src/components/chat/composerSlashCommandSearch.test.ts +++ b/apps/web/src/components/chat/composerSlashCommandSearch.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vite-plus/test"; -import { ProviderDriverKind } from "@t3tools/contracts"; +import { ProviderDriverKind } from "@platon/contracts"; import type { ComposerCommandItem } from "./ComposerCommandMenu"; import { searchSlashCommandItems } from "./composerSlashCommandSearch"; diff --git a/apps/web/src/components/chat/composerSlashCommandSearch.ts b/apps/web/src/components/chat/composerSlashCommandSearch.ts index c4919b192451..96eb0b3cd558 100644 --- a/apps/web/src/components/chat/composerSlashCommandSearch.ts +++ b/apps/web/src/components/chat/composerSlashCommandSearch.ts @@ -2,7 +2,7 @@ import { insertRankedSearchResult, normalizeSearchQuery, scoreQueryMatch, -} from "@t3tools/shared/searchRanking"; +} from "@platon/shared/searchRanking"; import type { ComposerCommandItem } from "./ComposerCommandMenu"; diff --git a/apps/web/src/components/chat/draftHeroTransition.ts b/apps/web/src/components/chat/draftHeroTransition.ts index 0773407cfcc4..f5dc2a0b56ec 100644 --- a/apps/web/src/components/chat/draftHeroTransition.ts +++ b/apps/web/src/components/chat/draftHeroTransition.ts @@ -1,8 +1,8 @@ export const DRAFT_HERO_TRANSITION_ANIMATION_ID = "t3-draft-hero-transition"; export const DRAFT_HERO_TRANSITION_DURATION_MS = 180; export const DRAFT_HERO_TRANSITION_EASING = "cubic-bezier(0.4, 0, 0.2, 1)"; -export const MOBILE_COMPOSER_VIEW_TRANSITION_NAME = "t3-mobile-composer"; -export const MOBILE_DRAFT_HEADLINE_VIEW_TRANSITION_NAME = "t3-mobile-draft-headline"; +export const MOBILE_COMPOSER_VIEW_TRANSITION_NAME = "platon-mobile-composer"; +export const MOBILE_DRAFT_HEADLINE_VIEW_TRANSITION_NAME = "platon-mobile-draft-headline"; type ComposerViewTransition = { readonly finished: Promise; diff --git a/apps/web/src/components/chat/externalLinkContextMenu.ts b/apps/web/src/components/chat/externalLinkContextMenu.ts index 398ca40da511..9123efd6589e 100644 --- a/apps/web/src/components/chat/externalLinkContextMenu.ts +++ b/apps/web/src/components/chat/externalLinkContextMenu.ts @@ -1,4 +1,4 @@ -import type { ContextMenuItem } from "@t3tools/contracts"; +import type { ContextMenuItem } from "@platon/contracts"; export type ExternalLinkContextMenuAction = "open-in-preview" | "open-external" | "copy-link"; diff --git a/apps/web/src/components/chat/modelPickerKeys.test.ts b/apps/web/src/components/chat/modelPickerKeys.test.ts index e56fcb3d4146..89e6152e7e15 100644 --- a/apps/web/src/components/chat/modelPickerKeys.test.ts +++ b/apps/web/src/components/chat/modelPickerKeys.test.ts @@ -1,4 +1,4 @@ -import { ProviderInstanceId } from "@t3tools/contracts"; +import { ProviderInstanceId } from "@platon/contracts"; import { describe, expect, it } from "vite-plus/test"; import { modelPickerLegacySectionKey, diff --git a/apps/web/src/components/chat/modelPickerKeys.ts b/apps/web/src/components/chat/modelPickerKeys.ts index 0b4f0845e116..8a4209082cd2 100644 --- a/apps/web/src/components/chat/modelPickerKeys.ts +++ b/apps/web/src/components/chat/modelPickerKeys.ts @@ -1,4 +1,4 @@ -import type { ProviderInstanceId } from "@t3tools/contracts"; +import type { ProviderInstanceId } from "@platon/contracts"; const MODEL_KEY_PREFIX = "model:"; const LEGACY_SECTION_KEY_PREFIX = "legacy-models:"; diff --git a/apps/web/src/components/chat/modelPickerModelHighlights.ts b/apps/web/src/components/chat/modelPickerModelHighlights.ts index 2131480a6a23..6e8f34c0da5f 100644 --- a/apps/web/src/components/chat/modelPickerModelHighlights.ts +++ b/apps/web/src/components/chat/modelPickerModelHighlights.ts @@ -1,4 +1,4 @@ -import type { ProviderDriverKind } from "@t3tools/contracts"; +import type { ProviderDriverKind } from "@platon/contracts"; /** * Model slugs that show a gold "NEW" chip in the model picker list. diff --git a/apps/web/src/components/chat/modelPickerSearch.ts b/apps/web/src/components/chat/modelPickerSearch.ts index ff265e4a65a5..672948c28399 100644 --- a/apps/web/src/components/chat/modelPickerSearch.ts +++ b/apps/web/src/components/chat/modelPickerSearch.ts @@ -1,4 +1,4 @@ -import { normalizeSearchQuery, scoreQueryMatch } from "@t3tools/shared/searchRanking"; +import { normalizeSearchQuery, scoreQueryMatch } from "@platon/shared/searchRanking"; type ModelPickerSearchableModel = { /** Driver kind — indexed so "codex" still matches a Codex Personal instance. */ diff --git a/apps/web/src/components/chat/providerIconUtils.ts b/apps/web/src/components/chat/providerIconUtils.ts index 504c80be3cc0..f2dac70ac329 100644 --- a/apps/web/src/components/chat/providerIconUtils.ts +++ b/apps/web/src/components/chat/providerIconUtils.ts @@ -1,4 +1,4 @@ -import { ProviderDriverKind } from "@t3tools/contracts"; +import { ProviderDriverKind } from "@platon/contracts"; import { ClaudeAI, CursorIcon, GrokIcon, Icon, KimiIcon, OpenAI, OpenCodeIcon } from "../Icons"; import { PROVIDER_OPTIONS } from "../../session-logic"; diff --git a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.test.ts b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.test.ts index fcc660e8305a..187c6186f411 100644 --- a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.test.ts +++ b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.test.ts @@ -1,4 +1,4 @@ -import type { RelayClientDeviceRecord } from "@t3tools/contracts/relay"; +import type { RelayClientDeviceRecord } from "@platon/contracts/relay"; import { describe, expect, it } from "vite-plus/test"; import { @@ -31,7 +31,7 @@ describe("mobile client presentation", () => { it("describes the client platform and enabled notification events", () => { const client = device(); - expect(mobileClientPlatformLabel(client)).toBe("iOS 18 · T3 Code 1.2.3"); + expect(mobileClientPlatformLabel(client)).toBe("iOS 18 · Platon Code 1.2.3"); expect(mobileClientNotificationDetail(client)).toBe( "Alerts enabled for approvals, completions.", ); diff --git a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts index 5ca9595bef4d..2f2bcd578c90 100644 --- a/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts +++ b/apps/web/src/components/clerk/MobileClientsUserProfilePage.logic.ts @@ -1,4 +1,4 @@ -import type { RelayClientDeviceRecord } from "@t3tools/contracts/relay"; +import type { RelayClientDeviceRecord } from "@platon/contracts/relay"; const mobileClientUpdatedAtFormatter = new Intl.DateTimeFormat(undefined, { dateStyle: "medium", @@ -15,7 +15,7 @@ const NOTIFICATION_PREFERENCES = [ >; export function mobileClientPlatformLabel(device: RelayClientDeviceRecord): string { - return `iOS ${device.iosMajorVersion}${device.appVersion ? ` · T3 Code ${device.appVersion}` : ""}`; + return `iOS ${device.iosMajorVersion}${device.appVersion ? ` · Platon Code ${device.appVersion}` : ""}`; } export function mobileClientNotificationDetail(device: RelayClientDeviceRecord): string { diff --git a/apps/web/src/components/clerk/MobileClientsUserProfilePage.tsx b/apps/web/src/components/clerk/MobileClientsUserProfilePage.tsx index 26af10ba5b83..c786ec028e42 100644 --- a/apps/web/src/components/clerk/MobileClientsUserProfilePage.tsx +++ b/apps/web/src/components/clerk/MobileClientsUserProfilePage.tsx @@ -1,4 +1,4 @@ -import type { RelayClientDeviceRecord } from "@t3tools/contracts/relay"; +import type { RelayClientDeviceRecord } from "@platon/contracts/relay"; import { RefreshCwIcon, SmartphoneIcon } from "lucide-react"; import { useManagedRelayDevices } from "../../cloud/managedRelayState"; @@ -96,7 +96,7 @@ function EmptyMobileClients() { No mobile clients - Sign in to T3 Code on your iPhone to register it for push notifications and Live + Sign in to Platon Code on your iPhone to register it for push notifications and Live Activities. @@ -117,7 +117,7 @@ export function MobileClientsUserProfilePage() {

Mobile clients

- Devices registered to receive T3 Connect activity from your environments. + Devices registered to receive Platon Connect activity from your environments.