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
108 changes: 108 additions & 0 deletions apps/mobile/generated-uniwind-themes.css

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions apps/mobile/scripts/generate-uniwind-themes.mts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ const ADAPTIVE_COLORS = {
color("black", undefined, 0.15),
color("black", undefined, 0.35),
],
"--color-adaptive-black-a10-white-a10": [
color("black", undefined, 0.1),
color("white", undefined, 0.1),
],
"--color-adaptive-emerald-500-a12-a16": [
color("emerald", 500, 0.12),
color("emerald", 500, 0.16),
Expand Down Expand Up @@ -114,6 +118,8 @@ const ADAPTIVE_COLORS = {
"--color-adaptive-neutral-600-300": [color("neutral", 600), color("neutral", 300)],
"--color-adaptive-neutral-600-400": [color("neutral", 600), color("neutral", 400)],
"--color-adaptive-neutral-950-50": [color("neutral", 950), color("neutral", 50)],
"--color-adaptive-orange-500-a12-a16": [color("orange", 500, 0.12), color("orange", 500, 0.16)],
"--color-adaptive-orange-700-300": [color("orange", 700), color("orange", 300)],
"--color-adaptive-red-50-950-a80": [color("red", 50), color("red", 950, 0.8)],
"--color-adaptive-red-200-800": [color("red", 200), color("red", 800)],
"--color-adaptive-red-600-a80-400-a80": [color("red", 600, 0.8), color("red", 400, 0.8)],
Expand All @@ -132,6 +138,18 @@ const ADAPTIVE_COLORS = {
"--color-adaptive-violet-600-400": [color("violet", 600), color("violet", 400)],
"--color-adaptive-violet-700-300": [color("violet", 700), color("violet", 300)],
"--color-adaptive-white-neutral-950-a70": [color("white"), color("neutral", 950, 0.7)],
"--color-adaptive-yellow-400-a35-300-a20": [
color("yellow", 400, 0.35),
color("yellow", 300, 0.2),
],
"--color-adaptive-yellow-500-a12-a16": [color("yellow", 500, 0.12), color("yellow", 500, 0.16)],
"--color-adaptive-yellow-500-300": [color("yellow", 500), color("yellow", 300)],
"--color-adaptive-yellow-700-300": [color("yellow", 700), color("yellow", 300)],
"--color-adaptive-yellow-800-200": [color("yellow", 800), color("yellow", 200)],
"--color-adaptive-yellow-800-a75-200-a70": [
color("yellow", 800, 0.75),
color("yellow", 200, 0.7),
],
"--color-adaptive-zinc-500-a12-a16": [color("zinc", 500, 0.12), color("zinc", 500, 0.16)],
"--color-adaptive-zinc-500-400": [color("zinc", 500), color("zinc", 400)],
"--color-adaptive-zinc-600-300": [color("zinc", 600), color("zinc", 300)],
Expand Down
12 changes: 6 additions & 6 deletions apps/mobile/src/features/threads/ActionResumeNotice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ export function ActionResumeNotice(props: {

if (action?.outcome === "running") {
return (
<View className="rounded-2xl border border-yellow-400/35 bg-yellow-500/10 px-3.5 py-3 dark:border-yellow-300/20">
<View className="rounded-2xl border border-adaptive-yellow-400-a35-300-a20 bg-yellow-500/10 px-3.5 py-3">
<View className="flex-row items-center gap-2.5">
<SymbolView name="clock" size={18} tintColor="#eab308" type="monochrome" />
<View className="min-w-0 flex-1">
<Text className="text-sm font-t3-bold text-yellow-800 dark:text-yellow-200">
<Text className="text-sm font-t3-bold text-adaptive-yellow-800-200">
Waiting for {action.actionName}
</Text>
<Text className="mt-0.5 text-xs text-yellow-800/75 dark:text-yellow-200/70">
<Text className="mt-0.5 text-xs text-adaptive-yellow-800-a75-200-a70">
The agent will resume once this Action finishes and the thread is idle.
</Text>
</View>
Expand All @@ -98,7 +98,7 @@ export function ActionResumeNotice(props: {
if (action?.delivery !== "available") return null;

return (
<View className="rounded-2xl border border-yellow-400/35 bg-yellow-500/10 px-3.5 py-3 dark:border-yellow-300/20">
<View className="rounded-2xl border border-adaptive-yellow-400-a35-300-a20 bg-yellow-500/10 px-3.5 py-3">
<View className="flex-row items-start gap-2.5">
<SymbolView
name="exclamationmark.triangle"
Expand All @@ -107,10 +107,10 @@ export function ActionResumeNotice(props: {
type="monochrome"
/>
<View className="min-w-0 flex-1">
<Text className="text-sm font-t3-bold text-yellow-800 dark:text-yellow-200">
<Text className="text-sm font-t3-bold text-adaptive-yellow-800-200">
{action.actionName} was interrupted
</Text>
<Text className="mt-0.5 text-xs text-yellow-800/75 dark:text-yellow-200/70">
<Text className="mt-0.5 text-xs text-adaptive-yellow-800-a75-200-a70">
LastCode did not restart the command or wake the agent. Resume only the agent follow-up
when you are ready.
</Text>
Expand Down
4 changes: 2 additions & 2 deletions apps/mobile/src/features/threads/ThreadFeed.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,7 @@ const ActionFollowUpCard = memo(function ActionFollowUpCard(props: {
>
<SymbolView name="cpu" size={14} tintColor={props.iconColor} type="monochrome" />
<Text
className="min-w-0 flex-1 font-t3-medium text-xs text-amber-800 dark:text-amber-200"
className="min-w-0 flex-1 font-t3-medium text-xs text-adaptive-amber-800-200"
numberOfLines={1}
>
Action completed: {props.actionName} Status: {status}
Expand All @@ -1238,7 +1238,7 @@ const ActionFollowUpCard = memo(function ActionFollowUpCard(props: {
{props.expanded ? (
<ScrollView
nestedScrollEnabled
className="mx-2.5 mb-2.5 mt-2 max-h-96 rounded-lg border border-black/10 bg-neutral-950 px-3 py-2.5 dark:border-white/10"
className="mx-2.5 mb-2.5 mt-2 max-h-96 rounded-lg border border-adaptive-black-a10-white-a10 bg-neutral-950 px-3 py-2.5"
>
<Text selectable className="font-mono text-xs leading-5 text-neutral-100">
{props.output}
Expand Down
2 changes: 1 addition & 1 deletion apps/mobile/src/features/threads/thread-list-items.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -626,7 +626,7 @@ export const ThreadListRow = memo(function ThreadListRow(props: {
accessibilityLabel={`Waiting for ${runningAction.actionName}`}
className="size-3 items-center justify-center"
>
<View className="size-1.5 rounded-full bg-yellow-500 dark:bg-yellow-300" />
<View className="size-1.5 rounded-full bg-adaptive-yellow-500-300" />
</View>
) : null;

Expand Down
16 changes: 8 additions & 8 deletions apps/mobile/src/features/threads/threadPresentation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ export function resolveThreadStatus(
return {
kind: "cleanup-failed",
label: "Cleanup failed",
pillClassName: "bg-rose-500/12 dark:bg-rose-500/16",
textClassName: "text-rose-700 dark:text-rose-300",
pillClassName: "bg-adaptive-rose-500-a12-a16",
textClassName: "text-adaptive-rose-700-300",
iconColor: "#ff453a",
iconBackground: "rgba(255,69,58,0.22)",
pulse: false,
Expand All @@ -76,8 +76,8 @@ export function resolveThreadStatus(
return {
kind: "cleanup-queued",
label: "Deleting (Queued)",
pillClassName: "bg-orange-500/12 dark:bg-orange-500/16",
textClassName: "text-orange-700 dark:text-orange-300",
pillClassName: "bg-adaptive-orange-500-a12-a16",
textClassName: "text-adaptive-orange-700-300",
iconColor: "#ff9f0a",
iconBackground: "rgba(255,159,10,0.22)",
pulse: false,
Expand All @@ -88,8 +88,8 @@ export function resolveThreadStatus(
return {
kind: "cleanup-deleting",
label: "Deleting",
pillClassName: "bg-orange-500/12 dark:bg-orange-500/16",
textClassName: "text-orange-700 dark:text-orange-300",
pillClassName: "bg-adaptive-orange-500-a12-a16",
textClassName: "text-adaptive-orange-700-300",
iconColor: "#ff9f0a",
iconBackground: "rgba(255,159,10,0.22)",
pulse: false,
Expand Down Expand Up @@ -160,8 +160,8 @@ export function resolveThreadStatus(
return {
kind: "waiting",
label: "Waiting",
pillClassName: "bg-yellow-500/12 dark:bg-yellow-500/16",
textClassName: "text-yellow-700 dark:text-yellow-300",
pillClassName: "bg-adaptive-yellow-500-a12-a16",
textClassName: "text-adaptive-yellow-700-300",
iconColor: "#eab308",
iconBackground: "rgba(234,179,8,0.22)",
pulse: false,
Expand Down
10 changes: 3 additions & 7 deletions scripts/lastcode-checkpoint.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
checkpointPromotionPushArgs,
checkpointSmokeEnvironment,
checkpointSmokeTypecheckCommands,
checkpointSmokeWorkflowFormatCommand,
checkpointSmokeFormatAndLintCommand,
checkpointSourceCommit,
checkpointTagPushArgs,
checkpointVpPaths,
Expand Down Expand Up @@ -95,12 +95,8 @@ it("typechecks checkpoint automation, shared clients, and the server before publ
]);
});

it("parses and formats every GitHub workflow before publishing", () => {
assert.deepStrictEqual(checkpointSmokeWorkflowFormatCommand(), [
"fmt",
"--check",
".github/workflows",
]);
it("runs the repository format and lint gate before publishing", () => {
assert.deepStrictEqual(checkpointSmokeFormatAndLintCommand(), ["check"]);
});

it("bootstraps dependencies with the invoking worktree runner before using the isolated runner", () => {
Expand Down
6 changes: 3 additions & 3 deletions scripts/lastcode-checkpoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ export function checkpointSmokeTypecheckCommands(): ReadonlyArray<ReadonlyArray<
];
}

export function checkpointSmokeWorkflowFormatCommand(): ReadonlyArray<string> {
return ["fmt", "--check", ".github/workflows"];
export function checkpointSmokeFormatAndLintCommand(): ReadonlyArray<string> {
return ["check"];
}

function git(
Expand Down Expand Up @@ -672,7 +672,7 @@ function runSmokeGate(repoRoot: string, worktree: string): void {
console.log("[lastcode:checkpoint] Installing checkpoint worktree dependencies...");
run(worktree, vp.bootstrap, ["install", "--frozen-lockfile"], { environment });
assertForkInvariants(worktree);
run(worktree, vp.isolated, checkpointSmokeWorkflowFormatCommand(), { environment });
run(worktree, vp.isolated, checkpointSmokeFormatAndLintCommand(), { environment });
run(
worktree,
vp.isolated,
Expand Down