From fa90f6726c357582913de34e13b50dc98ca4a9c0 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 26 Sep 2026 23:15:22 +0200 Subject: [PATCH] fix(usage): preserve platform test contracts --- .../app/src/components/page-layout/index.tsx | 5 +++-- packages/app/src/screens/settings-screen.tsx | 4 +++- .../providers/omp/usage-reference.test.ts | 19 ++++++++++++------- .../agent/providers/omp/usage-reference.ts | 3 ++- .../server/plugins/internal-boundary.test.ts | 2 +- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/app/src/components/page-layout/index.tsx b/packages/app/src/components/page-layout/index.tsx index d2b22221cd..bc1f1d5c3a 100644 --- a/packages/app/src/components/page-layout/index.tsx +++ b/packages/app/src/components/page-layout/index.tsx @@ -11,6 +11,7 @@ interface PageLayoutProps { /** Compact back button. Defaults to navigating back. */ onBack?: () => void; testID?: string; + titleTestID?: string; children: ReactNode; } @@ -19,7 +20,7 @@ interface PageLayoutProps { * document heading inside the page and the header only keeps the titlebar drag * region and window controls; on compact the title moves into a back header. */ -export function PageLayout({ title, onBack, testID, children }: PageLayoutProps) { +export function PageLayout({ title, onBack, testID, titleTestID, children }: PageLayoutProps) { const isCompact = useIsCompactFormFactor(); const insets = useSafeAreaInsets(); const scrollContentStyle = useMemo(() => ({ paddingBottom: insets.bottom }), [insets.bottom]); @@ -31,7 +32,7 @@ export function PageLayout({ title, onBack, testID, children }: PageLayoutProps) {showTitle ? ( - + {title} ) : null} diff --git a/packages/app/src/screens/settings-screen.tsx b/packages/app/src/screens/settings-screen.tsx index 0804ef5132..dc1a7c46d6 100644 --- a/packages/app/src/screens/settings-screen.tsx +++ b/packages/app/src/screens/settings-screen.tsx @@ -1478,7 +1478,9 @@ export default function SettingsScreen({ view, openAddHostIntent = null }: Setti - {content} + + {content} + diff --git a/packages/server/src/server/agent/providers/omp/usage-reference.test.ts b/packages/server/src/server/agent/providers/omp/usage-reference.test.ts index 239a8263d2..659c0afcea 100644 --- a/packages/server/src/server/agent/providers/omp/usage-reference.test.ts +++ b/packages/server/src/server/agent/providers/omp/usage-reference.test.ts @@ -242,13 +242,18 @@ test("named profile ignores agent override and uses existing XDG profile data", ); profileDb.close(); expect( - resolveOmpUsageReference("session-1", "openai-codex", { - OMP_PROFILE: "work", - PI_PROFILE: "other", - PI_CODING_AGENT_DIR: f.agentDir, - PI_CONFIG_DIR: join(root, "config"), - XDG_DATA_HOME: join(root, "xdg"), - }), + resolveOmpUsageReference( + "session-1", + "openai-codex", + { + OMP_PROFILE: "work", + PI_PROFILE: "other", + PI_CODING_AGENT_DIR: f.agentDir, + PI_CONFIG_DIR: join(root, "config"), + XDG_DATA_HOME: join(root, "xdg"), + }, + "linux", + ), ).toEqual({ source: "codex", input: { accessToken: "profile-token" } }); }); diff --git a/packages/server/src/server/agent/providers/omp/usage-reference.ts b/packages/server/src/server/agent/providers/omp/usage-reference.ts index ca5f4efc34..384e59697e 100644 --- a/packages/server/src/server/agent/providers/omp/usage-reference.ts +++ b/packages/server/src/server/agent/providers/omp/usage-reference.ts @@ -129,6 +129,7 @@ export function resolveOmpUsageReference( sessionId: string, provider: string, env: NodeJS.ProcessEnv, + platform: NodeJS.Platform = process.platform, ): UsageReference | null { let source: string; if (provider === "openai-codex") source = "codex"; @@ -136,7 +137,7 @@ export function resolveOmpUsageReference( else return null; if (!sessionId) return null; // Upstream: packages/utils/src/dirs.ts:82-94,330-343,583-585 (profile, override, agent dir). - const paths = resolveOmpDiagnosticPaths(env); + const paths = resolveOmpDiagnosticPaths(env, undefined, platform); if (hasKeyOverride(provider, env, paths.agentDir)) return null; let db: UsageDb; try { diff --git a/packages/server/src/server/plugins/internal-boundary.test.ts b/packages/server/src/server/plugins/internal-boundary.test.ts index 62b29d9fc8..a15b98b9a0 100644 --- a/packages/server/src/server/plugins/internal-boundary.test.ts +++ b/packages/server/src/server/plugins/internal-boundary.test.ts @@ -29,7 +29,7 @@ async function checkInternalPluginBoundary(directory: string): Promise { if (hostModules.has(specifier) || isBuiltin(specifier)) continue; const resolved = reader.resolve(specifier, file, dependency.kind); const relative = resolved && path.relative(directory, resolved); - const owned = relative && /^(server|shared)\//.test(relative); + const owned = relative && /^(server|shared)[\\/]/.test(relative); if (!specifier.startsWith(".") || !owned) { throw new Error(`Internal plugin import boundary: ${file} imports ${specifier}`); }