Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 202 additions & 3 deletions .agents/upstream-review.md

Large diffs are not rendered by default.

29 changes: 23 additions & 6 deletions .github/workflows/mobile-showcase-screenshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,19 @@ on:
- both
- dark
- light
theme:
description: Palette to capture (all multiplies the run by six)
required: true
default: t3-code
type: choice
options:
- t3-code
- t3-chat
- grove
- ocean
- ember
- iris
- all

permissions:
contents: read
Expand All @@ -33,7 +46,9 @@ jobs:
name: iPhone 6.9, iPhone 6.5, and iPad 13
if: inputs.platform == 'all' || inputs.platform == 'ios'
runs-on: blacksmith-12vcpu-macos-26
timeout-minutes: 60
# Capturing every palette multiplies the device matrix by six, and only the
# one native build is shared between them.
timeout-minutes: ${{ inputs.theme == 'all' && 300 || 60 }}
steps:
- name: Checkout
uses: actions/checkout@v6
Expand Down Expand Up @@ -62,10 +77,10 @@ jobs:
"$vp_pnpm_bin/pnpm" --version

- name: Capture iOS showcase
run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}"
run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}"

- name: Validate App Store Connect assets
run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}" --validate-only
run: pnpm screenshots:mobile --platform ios --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}" --validate-only

- name: Upload iOS screenshots
if: always()
Expand All @@ -80,7 +95,9 @@ jobs:
name: Android phone, 7-inch tablet, and 10-inch tablet
if: inputs.platform == 'all' || inputs.platform == 'android'
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 60
# Capturing every palette multiplies the device matrix by six, and only the
# one native build is shared between them.
timeout-minutes: ${{ inputs.theme == 'all' && 300 || 60 }}
env:
T3_SHOWCASE_ANDROID_ABI: x86_64
steps:
Expand Down Expand Up @@ -137,10 +154,10 @@ jobs:
cores: 8
ram-size: 4096M
disable-animations: false
script: pnpm screenshots:mobile --platform android --appearance "${{ inputs.appearance }}"
script: pnpm screenshots:mobile --platform android --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}"

- name: Validate Google Play assets
run: pnpm screenshots:mobile --platform android --appearance "${{ inputs.appearance }}" --validate-only
run: pnpm screenshots:mobile --platform android --appearance "${{ inputs.appearance }}" --theme "${{ inputs.theme }}" --validate-only

- name: Upload Android screenshots
if: always()
Expand Down
1 change: 0 additions & 1 deletion CLAUDE.md

This file was deleted.

1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
8 changes: 0 additions & 8 deletions apps/desktop/src/backend/tailscaleEndpointProvider.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { HttpClient } from "effect/unstable/http";
import { ChildProcessSpawner } from "effect/unstable/process";

import {
isTailscaleIpv4Address,
parseTailscaleMagicDnsName,
resolveTailscaleAdvertisedEndpoints,
} from "./tailscaleEndpointProvider.ts";
Expand All @@ -22,13 +21,6 @@ const unusedTailscaleExternalServicesLayer = Layer.mergeAll(
);

describe("tailscale endpoint provider", () => {
it("detects Tailnet IPv4 addresses", () => {
assert.equal(isTailscaleIpv4Address("100.64.0.1"), true);
assert.equal(isTailscaleIpv4Address("100.127.255.254"), true);
assert.equal(isTailscaleIpv4Address("100.128.0.1"), false);
assert.equal(isTailscaleIpv4Address("192.168.1.44"), false);
});

it.effect("parses MagicDNS names from tailscale status", () =>
Effect.gen(function* () {
const dnsName = yield* parseTailscaleMagicDnsName(
Expand Down
86 changes: 0 additions & 86 deletions apps/desktop/src/preview/PickPreload.test.ts

This file was deleted.

20 changes: 15 additions & 5 deletions apps/mobile/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
/* Page backgrounds */
--color-screen: #f2f2f7;
--color-sheet: rgba(242, 242, 247, 0.98);
--color-sheet-solid: #f2f2f7;

/* Card / surface */
--color-card: #ffffff;
Expand Down Expand Up @@ -39,13 +40,16 @@
/* Primary action */
--color-primary: #262626;
--color-primary-foreground: #ffffff;
--color-primary-shadow: rgba(0, 0, 0, 0.18);
--color-primary-shadow: #000000;

/* Secondary action */
--color-secondary: #ffffff;
--color-secondary-foreground: #262626;
--color-secondary-border: rgba(0, 0, 0, 0.08);
--color-switch-active: #34c759;
--color-switch-active-track: #34c759;
--color-switch-active-thumb: #ffffff;
--color-switch-inactive-track: rgba(0, 0, 0, 0.08);
--color-switch-inactive-thumb: #8e8e93;

/* Danger */
--color-danger: #fef2f2;
Expand All @@ -56,7 +60,7 @@
--color-input: #ffffff;
--color-input-border: rgba(0, 0, 0, 0.1);
--color-sidebar-search: rgba(118, 118, 128, 0.12);
--color-placeholder: #a3a3a3;
--color-placeholder: #737373;

/* Icons */
--color-icon: #262626;
Expand Down Expand Up @@ -90,6 +94,7 @@
--color-user-bubble: #007aff;
--color-user-bubble-foreground: #ffffff;
--color-user-bubble-foreground-muted: rgba(255, 255, 255, 0.78);
--color-user-bubble-skill-foreground: #f0abfc;

/* Drawer / modal backdrop */
--color-backdrop: rgba(0, 0, 0, 0.22);
Expand All @@ -106,6 +111,7 @@
/* Page backgrounds */
--color-screen: #0a0a0a;
--color-sheet: rgba(14, 14, 14, 0.98);
--color-sheet-solid: #0e0e0e;

/* Card / surface */
--color-card: #171717;
Expand Down Expand Up @@ -133,13 +139,16 @@
/* Primary action */
--color-primary: #f5f5f5;
--color-primary-foreground: #0a0a0a;
--color-primary-shadow: rgba(0, 0, 0, 0.22);
--color-primary-shadow: #000000;

/* Secondary action */
--color-secondary: rgba(255, 255, 255, 0.04);
--color-secondary-foreground: #f5f5f5;
--color-secondary-border: rgba(255, 255, 255, 0.06);
--color-switch-active: #30d158;
--color-switch-active-track: #30d158;
--color-switch-active-thumb: #ffffff;
--color-switch-inactive-track: rgba(255, 255, 255, 0.06);
--color-switch-inactive-thumb: #8e8e93;

/* Danger */
--color-danger: rgba(239, 68, 68, 0.14);
Expand Down Expand Up @@ -184,6 +193,7 @@
--color-user-bubble: #0a84ff;
--color-user-bubble-foreground: #ffffff;
--color-user-bubble-foreground-muted: rgba(255, 255, 255, 0.78);
--color-user-bubble-skill-foreground: #f0abfc;

/* Drawer / modal backdrop */
--color-backdrop: rgba(0, 0, 0, 0.48);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ class T3NativeControlsModule : Module() {
storedScene ?: appContext.currentActivity?.intent?.getStringExtra("showcaseScene")
}

// The palette is fixed for the whole capture, so it only ever arrives as a
// launch extra — unlike the scene, which the runner rewrites in place.
Function("getShowcaseTheme") {
appContext.currentActivity?.intent?.getStringExtra("showcaseTheme")
}

Function("prepareShowcaseCapture") {
// Android app data is cleared by the host runner before launch.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,19 @@ public final class T3NativeControlsModule: Module {
return arguments[flagIndex + 1]
}

// The palette is fixed for the whole capture, so it only ever arrives as a
// launch argument — unlike the scene, which the runner rewrites in place.
Function("getShowcaseTheme") { () -> String? in
let arguments = ProcessInfo.processInfo.arguments
guard
let flagIndex = arguments.firstIndex(of: "--showcaseTheme"),
arguments.indices.contains(flagIndex + 1)
else {
return nil as String?
}
return arguments[flagIndex + 1]
}

Function("getShowcaseOrientation") { () -> String? in
let arguments = ProcessInfo.processInfo.arguments
guard
Expand Down
Loading
Loading