Skip to content

Commit 5af50c7

Browse files
author
lalalune
committed
fix: resolve workspace validation issues
1 parent ea8230d commit 5af50c7

126 files changed

Lines changed: 1447 additions & 593 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

bun.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/app-core/scripts/aosp/stage-default-models.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ const repoRoot = resolveRepoRootFromImportMeta(import.meta.url);
6666
const CHAT_MODEL_ELIZA_1_MOBILE = {
6767
id: "eliza-1-2b",
6868
displayName: "eliza-1-2B",
69-
hfRepo: "elizalabs/eliza-1",
69+
hfRepo: "elizaos/eliza-1",
7070
hfPath: "bundles/2b/text/eliza-1-2b-128k.gguf",
7171
ggufFile: "text/eliza-1-2b-128k.gguf",
7272
expectedMinBytes: 900 * 1024 * 1024,
@@ -77,7 +77,7 @@ const CHAT_MODEL_ELIZA_1_MOBILE = {
7777
const CHAT_MODEL_ELIZA_1_LITE = {
7878
id: "eliza-1-0_8b",
7979
displayName: "eliza-1-0.8B",
80-
hfRepo: "elizalabs/eliza-1",
80+
hfRepo: "elizaos/eliza-1",
8181
hfPath: "bundles/0_8b/text/eliza-1-0_8b-128k.gguf",
8282
ggufFile: "text/eliza-1-0_8b-128k.gguf",
8383
expectedMinBytes: 300 * 1024 * 1024,

packages/app-core/scripts/build-llama-cpp-dflash.mjs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -533,17 +533,7 @@ function findAndroidVulkanInclude(ndk) {
533533
function findGlslc(ndk, { preferNdk = false } = {}) {
534534
const explicit = process.env.GLSLC?.trim();
535535
if (explicit && fs.existsSync(explicit)) return explicit;
536-
// Prefer the host shaderc package when present. The NDK-bundled glslc is
537-
// useful as a fallback for Android cross builds, but older NDK toolchains can
538-
// reject desktop Vulkan feature probes and even fail optimizing generated
539-
// shaders that the host shaderc handles correctly.
540-
if (has("glslc")) {
541-
const out = spawnSync("which", ["glslc"], {
542-
encoding: "utf8",
543-
}).stdout?.trim();
544-
if (out) return out;
545-
return "glslc";
546-
}
536+
let ndkGlslc = null;
547537
if (ndk) {
548538
const hostDirs = [
549539
"linux-x86_64",
@@ -559,7 +549,19 @@ function findGlslc(ndk, { preferNdk = false } = {}) {
559549
}
560550
}
561551
}
562-
return null;
552+
if (preferNdk && ndkGlslc) return ndkGlslc;
553+
// Prefer the host shaderc package when present. The NDK-bundled glslc is
554+
// useful as a fallback for Android cross builds, but older NDK toolchains can
555+
// reject desktop Vulkan feature probes and even fail optimizing generated
556+
// shaders that the host shaderc handles correctly.
557+
if (has("glslc")) {
558+
const out = spawnSync("which", ["glslc"], {
559+
encoding: "utf8",
560+
}).stdout?.trim();
561+
if (out) return out;
562+
return "glslc";
563+
}
564+
return ndkGlslc;
563565
}
564566

565567
// Find a usable x86_64-w64-mingw32 cross-toolchain on the host.

packages/app/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@
118118
"@elizaos/shared": "workspace:*",
119119
"@elizaos/shared-brand": "workspace:*",
120120
"@elizaos/ui": "workspace:*",
121+
"@fontsource-variable/open-sans": "^5.2.7",
122+
"@fontsource/poppins": "^5.2.7",
121123
"@pixiv/three-vrm": "^3.4.5",
122124
"llama-cpp-capacitor": "^0.1.5",
123125
"react": "^19.0.0",

packages/app/test/ui-smoke/ai-qa-capture.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
type Theme,
1111
VIEWPORT_SIZES,
1212
type ViewportName,
13-
} from "../../../../scripts/ai-qa/route-catalog";
13+
} from "../../../../scripts/ai-qa/route-catalog.ts";
1414
import {
1515
installDefaultAppRoutes,
1616
openAppPath,

packages/app/test/ui-smoke/android-system-apps.spec.ts

Lines changed: 61 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { expect, type Page, test } from "@playwright/test";
1+
import { type BrowserContext, expect, type Page, test } from "@playwright/test";
22
import {
33
assertReadyChecks,
44
installDefaultAppRoutes,
@@ -52,10 +52,21 @@ const RED_ERROR_TEXT =
5252
const BENIGN_SHIM_ISSUES = [
5353
/"Keyboard" plugin is not implemented on web/i,
5454
/\[Eliza\] Network plugin not available: Cannot read properties of undefined \(reading 'addListener'\)/i,
55+
/Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document\./i,
5556
];
5657

5758
test.use({ userAgent: ANDROID_ELIZA_UA });
5859

60+
function getAndroidSystemRoute(name: string): AndroidSystemRouteCase {
61+
const route = ANDROID_SYSTEM_APP_CASES.find(
62+
(candidate) => candidate.name === name,
63+
);
64+
if (!route) {
65+
throw new Error(`Missing Android system app route: ${name}`);
66+
}
67+
return route;
68+
}
69+
5970
function installAndroidPlatformShim(page: Page): Promise<void> {
6071
return page.addInitScript(() => {
6172
let capacitorValue: unknown = Reflect.get(window, "Capacitor");
@@ -120,6 +131,22 @@ async function openAppWindow(
120131
);
121132
}
122133

134+
async function openFreshAppWindow(
135+
context: BrowserContext,
136+
routeCase: AndroidSystemRouteCase,
137+
): Promise<{ issues: string[]; page: Page }> {
138+
const page = await context.newPage();
139+
await installAndroidPlatformShim(page);
140+
await seedAppStorage(page, {
141+
"eliza:ui-theme": "dark",
142+
"elizaos:ui-theme": "dark",
143+
});
144+
await installDefaultAppRoutes(page);
145+
const issues = installIssueGuards(page);
146+
await openAppWindow(page, routeCase);
147+
return { issues, page };
148+
}
149+
123150
async function expectNoIssues(
124151
page: Page,
125152
issues: readonly string[],
@@ -151,26 +178,25 @@ test.beforeEach(async ({ page }) => {
151178
await installDefaultAppRoutes(page);
152179
});
153180

154-
test("AOSP system apps render and expose safe controls", async ({ page }) => {
155-
const issues = installIssueGuards(page);
156-
181+
test("AOSP system apps render and expose safe controls", async ({
182+
context,
183+
}) => {
157184
for (const routeCase of ANDROID_SYSTEM_APP_CASES) {
158185
await test.step(routeCase.name, async () => {
159-
await openAppWindow(page, routeCase);
186+
const { issues, page } = await openFreshAppWindow(context, routeCase);
160187
await expectNoIssues(page, issues.splice(0), routeCase.name);
188+
await page.close();
161189
});
162190
}
163191
});
164192

165193
test("Phone, Contacts, WiFi, Messages, and Device Settings handle core interactions", async ({
166-
page,
194+
context,
167195
}) => {
168-
const issues = installIssueGuards(page);
169-
const byName = new Map(
170-
ANDROID_SYSTEM_APP_CASES.map((route) => [route.name, route]),
196+
let { issues, page } = await openFreshAppWindow(
197+
context,
198+
getAndroidSystemRoute("phone"),
171199
);
172-
173-
await openAppWindow(page, byName.get("phone")!);
174200
await page.getByTestId("phone-dial-key-1").click();
175201
await page.getByTestId("phone-dial-key-2").click();
176202
await page.getByTestId("phone-dial-key-3").click();
@@ -179,7 +205,9 @@ test("Phone, Contacts, WiFi, Messages, and Device Settings handle core interacti
179205
page.getByRole("status", { name: "Number being dialed" }),
180206
).toContainText("12");
181207
await page.getByRole("tab", { name: "Recent" }).click();
182-
await expect(page.getByText("No recent calls.", { exact: true })).toBeVisible();
208+
await expect(
209+
page.getByText("No recent calls.", { exact: true }),
210+
).toBeVisible();
183211
const phoneContactsTab = page.getByRole("tab", { name: "Contacts" });
184212
if (await phoneContactsTab.isEnabled()) {
185213
await phoneContactsTab.click();
@@ -190,36 +218,53 @@ test("Phone, Contacts, WiFi, Messages, and Device Settings handle core interacti
190218
await expect(phoneContactsTab).toBeDisabled();
191219
}
192220
await expectNoIssues(page, issues.splice(0), "phone interactions");
221+
await page.close();
193222

194-
await openAppWindow(page, byName.get("contacts")!);
223+
({ issues, page } = await openFreshAppWindow(
224+
context,
225+
getAndroidSystemRoute("contacts"),
226+
));
195227
await page.getByTestId("contacts-search").fill("ada");
196228
await page.getByTestId("contacts-new").click();
197229
await page.getByPlaceholder("Full name").fill("Ada Lovelace");
198230
await page.getByPlaceholder("+1 555 123 4567").fill("+1 555 0100");
199231
await page.getByRole("button", { name: "Cancel" }).click();
200232
await expect(page.getByTestId("contacts-shell")).toBeVisible();
201233
await expectNoIssues(page, issues.splice(0), "contacts interactions");
234+
await page.close();
202235

203-
await openAppWindow(page, byName.get("wifi")!);
236+
({ issues, page } = await openFreshAppWindow(
237+
context,
238+
getAndroidSystemRoute("wifi"),
239+
));
204240
await page.getByTestId("wifi-scan").click();
205241
await expect(page.getByText("Wi-Fi is off")).toBeVisible();
206242
await expect(page.getByText("No networks found")).toBeVisible();
207243
await expectNoIssues(page, issues.splice(0), "wifi interactions");
244+
await page.close();
208245

209-
await openAppWindow(page, byName.get("messages")!);
246+
({ issues, page } = await openFreshAppWindow(
247+
context,
248+
getAndroidSystemRoute("messages"),
249+
));
210250
await page.getByTestId("messages-new").click();
211251
await page.getByTestId("messages-compose-address").fill("+1 555 0101");
212252
await page.getByTestId("messages-compose-body").fill("QA SMS draft");
213253
await expect(page.getByTestId("messages-send")).toBeEnabled();
214254
await page.getByTestId("messages-refresh").click();
215255
await expectNoIssues(page, issues.splice(0), "messages interactions");
256+
await page.close();
216257

217-
await openAppWindow(page, byName.get("device settings")!);
258+
({ issues, page } = await openFreshAppWindow(
259+
context,
260+
getAndroidSystemRoute("device settings"),
261+
));
218262
await page.getByTestId("device-settings-brightness").fill("67");
219263
const mediaVolume = page.getByTestId("device-settings-volume-music");
220264
if (await mediaVolume.isVisible().catch(() => false)) {
221265
await mediaVolume.fill("8");
222266
}
223267
await page.getByTestId("device-settings-refresh").click();
224268
await expectNoIssues(page, issues.splice(0), "device settings interactions");
269+
await page.close();
225270
});

packages/app/test/ui-smoke/connectors.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ test("connector modes keep developer credentials as the default path", async ({
242242
).toHaveClass(/border-accent/);
243243
await expect(
244244
telegramSection.getByText(
245-
"Manage Telegram bot accounts through @elizaos/plugin-telegram account inventory.",
245+
/Telegram does not support bot-install OAuth for bidirectional chats\..*BotFather token/i,
246246
),
247247
).toBeVisible();
248248

packages/cloud-frontend/playwright.config.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import { defineConfig, devices } from "@playwright/test";
33
// When CLOUD_E2E_LIVE_URL is set we are testing the real deployed site, so we
44
// don't spin up the local Vite dev server at all.
55
const LIVE_URL = process.env.CLOUD_E2E_LIVE_URL;
6+
const HOST = process.env.PLAYWRIGHT_HOST || "127.0.0.1";
7+
const PORT = process.env.PLAYWRIGHT_PORT || "4173";
8+
const LOCAL_URL = process.env.PLAYWRIGHT_BASE_URL || `http://${HOST}:${PORT}`;
9+
const BASE_URL = LIVE_URL ?? LOCAL_URL;
610

711
export default defineConfig({
812
testDir: "./tests/e2e",
@@ -14,19 +18,15 @@ export default defineConfig({
1418
},
1519
},
1620
use: {
17-
baseURL: LIVE_URL ?? "http://127.0.0.1:4173",
21+
baseURL: BASE_URL,
1822
trace: "retain-on-failure",
1923
screenshot: "only-on-failure",
2024
},
2125
webServer: LIVE_URL
2226
? undefined
2327
: {
24-
// VITE_ELIZA_RENDER_TELEMETRY is intentionally NOT enabled here — its
25-
// "committed N profiler updates" console.error noise trips the strict
26-
// console-error assertions in cloud-routes.spec.ts.
27-
command:
28-
"env -u FORCE_COLOR VITE_PLAYWRIGHT_TEST_AUTH=true bun --bun vite --host 127.0.0.1 --port 4173",
29-
url: "http://127.0.0.1:4173",
28+
command: `env -u FORCE_COLOR VITE_PLAYWRIGHT_TEST_AUTH=true VITE_ELIZA_RENDER_TELEMETRY=false bun --bun vite --host ${HOST} --port ${PORT} --strictPort`,
29+
url: LOCAL_URL,
3030
reuseExistingServer:
3131
process.env.CLOUD_FRONTEND_E2E_SERVER_STARTED === "1" ||
3232
!process.env.CI,

packages/cloud-frontend/scripts/run-e2e.mjs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const args = process.argv.slice(2);
77
const env = {
88
...process.env,
99
VITE_PLAYWRIGHT_TEST_AUTH: "true",
10-
VITE_ELIZA_RENDER_TELEMETRY: "true",
10+
VITE_ELIZA_RENDER_TELEMETRY: "false",
1111
CLOUD_FRONTEND_E2E_SERVER_STARTED: "1",
1212
};
1313
delete env.FORCE_COLOR;
@@ -39,10 +39,14 @@ function stop(child) {
3939
child.kill("SIGTERM");
4040
}
4141

42-
const server = spawn("bun", ["--bun", "vite", "--host", host, "--port", port], {
43-
stdio: "inherit",
44-
env,
45-
});
42+
const server = spawn(
43+
"bun",
44+
["--bun", "vite", "--host", host, "--port", port, "--strictPort"],
45+
{
46+
stdio: "inherit",
47+
env,
48+
},
49+
);
4650

4751
try {
4852
await waitForServer(server);

packages/cloud-frontend/src/App.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -534,14 +534,15 @@ function DashboardRedirect({ to }: { to: string }) {
534534

535535
function ElizaOsCheckoutRedirect() {
536536
const location = useLocation();
537+
const target = `https://elizaos.ai/checkout${location.search}`;
537538

538539
useEffect(() => {
539-
window.location.replace(`https://elizaos.ai/checkout${location.search}`);
540-
}, [location.search]);
540+
window.location.replace(target);
541+
}, [target]);
541542

542543
return (
543-
<main className="min-h-screen bg-black p-8 font-poppins text-white">
544-
Redirecting to elizaOS checkout.
544+
<main className="min-h-screen bg-black p-8 text-white">
545+
<a href={target}>Continue to elizaOS checkout</a>
545546
</main>
546547
);
547548
}
@@ -553,6 +554,7 @@ function App() {
553554
<Routes>
554555
<Route element={<RootLayout />}>
555556
<Route index element={<SuspenseRoute component={Home} />} />
557+
<Route path="os" element={<SuspenseRoute component={Home} />} />
556558
<Route path="checkout" element={<ElizaOsCheckoutRedirect />} />
557559
<Route
558560
path="terms-of-service"
@@ -567,6 +569,7 @@ function App() {
567569
element={<SuspenseRoute component={SandboxProxy} />}
568570
/>
569571
<Route path="bsc" element={<SuspenseRoute component={BscPromo} />} />
572+
<Route path="blog" element={<SuspenseRoute component={Home} />} />
570573
<Route
571574
path="chat/:characterRef"
572575
element={<SuspenseRoute component={PublicChat} />}
@@ -647,7 +650,6 @@ function App() {
647650
path="docs/*"
648651
element={<SuspenseRoute component={DocsRouter} />}
649652
/>
650-
651653
{/*
652654
* Dashboard subtree. Suspense for the layout itself stays here, but
653655
* the inner per-page `<Outlet />` gets its own Suspense inside

0 commit comments

Comments
 (0)