Skip to content

Commit 51627c3

Browse files
author
Shaw
committed
fix(release): restore desktop release inputs
1 parent dd4b6db commit 51627c3

19 files changed

Lines changed: 278 additions & 266 deletions

File tree

bun.lock

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

docs/apps/desktop/release-heavy-inventory.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
# Desktop Release Heavy Inventory
1+
# Desktop Release Regression Inventory
22

3-
The release regression matrix keeps hardware, OS-lifecycle, and subjective visual checks out of the deterministic PR gate. These items remain tracked here so release owners can cover them manually or through heavier packaged-app jobs.
3+
This inventory records desktop regression coverage that is intentionally outside
4+
the deterministic PR gate. The release matrix validator keeps these entries
5+
visible so they are reviewed before a production desktop release.
6+
7+
## Packaged and E2E Coverage
48

59
- gameOpenWindow — full round-trip with openGameWindow mock (needs canvas mock update)
610
- Abnormal window position (off-screen) is corrected to safe defaults (e2e)
7-
- Microphone input works after permission is granted (hardware)
8-
- Swabble fires 'wakeWordDetected' event when wake word is spoken (hardware)
9-
- Audio transcription produces non-empty text for clear speech (hardware)
10-
- Camera preview renders in the UI when stream is started (hardware)
11-
- Switching between front/rear camera works (hardware)
12-
- takeScreenshot returns a non-empty base64 PNG (hardware)
13-
- Frame capture mode streams frames at configured interval (hardware)
1411
- Deep link received while app is closed causes app to launch (e2e)
1512
- Deep link received while app is open does not launch second instance (e2e)
1613
- Shortcuts survive window focus changes (e2e)
@@ -31,6 +28,16 @@ The release regression matrix keeps hardware, OS-lifecycle, and subjective visua
3128
- Tray icon persists after main window is closed (e2e)
3229
- Main window has native vibrancy effect on macOS (e2e)
3330
- Context menu closes when clicking elsewhere (e2e)
31+
32+
## Hardware and Manual Coverage
33+
34+
- Microphone input works after permission is granted (hardware)
35+
- Swabble fires 'wakeWordDetected' event when wake word is spoken (hardware)
36+
- Audio transcription produces non-empty text for clear speech (hardware)
37+
- Camera preview renders in the UI when stream is started (hardware)
38+
- Switching between front/rear camera works (hardware)
39+
- takeScreenshot returns a non-empty base64 PNG (hardware)
40+
- Frame capture mode streams frames at configured interval (hardware)
3441
- Left-clicking the tray icon opens the companion window (visual)
3542
- Right-clicking the tray icon shows the tray context menu (visual)
3643
- Window can be dragged by clicking the header region (visual)
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# Desktop Release Regression Checklist
22

3-
Use this checklist for desktop release checks that still require human visual confirmation, host OS dialogs, or real hardware state. Deterministic coverage belongs in the packaged desktop tests; keep only non-automated confirmation here.
3+
Complete these manual checks for desktop release candidates after packaged smoke
4+
tests pass on the target platform.
45

5-
- Left-clicking the tray icon opens the companion window (visual)
6-
- Right-clicking the tray icon shows the tray context menu (visual)
7-
- Window can be dragged by clicking the header region (visual)
8-
- Photo quality is acceptable at default settings (hardware)
9-
- Requesting accessibility opens System Preferences (OS interaction)
10-
- Permission status reflects actual system state (OS interaction)
11-
- Context menu appears at cursor position (visual)
12-
- Power state reflects actual battery status (hardware)
6+
- [ ] Left-clicking the tray icon opens the companion window (visual)
7+
- [ ] Right-clicking the tray icon shows the tray context menu (visual)
8+
- [ ] Window can be dragged by clicking the header region (visual)
9+
- [ ] Photo quality is acceptable at default settings (hardware)
10+
- [ ] Requesting accessibility opens System Preferences (OS interaction)
11+
- [ ] Permission status reflects actual system state (OS interaction)
12+
- [ ] Context menu appears at cursor position (visual)
13+
- [ ] Power state reflects actual battery status (hardware)

packages/agent/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@
315315
"jsdom": "^29.0.0",
316316
"json5": "^2.2.3",
317317
"minimisted": "^2.0.0",
318+
"onnxruntime-web": "1.26.0",
318319
"pako": "^1.0.10",
319320
"pg": "^8.16.3",
320321
"pify": "^4.0.1",

packages/app-core/scripts/desktop-build.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,13 @@ function ensureWorkspaceRuntimePackagesBuilt() {
597597
ensureWorkspaceRuntimePackageBuilt("@elizaos/app-core", APP_CORE_PACKAGE_DIR);
598598
}
599599

600+
function ensureUiGeneratedAssets() {
601+
runBun(["run", "generate:css-strings"], {
602+
cwd: UI_PACKAGE_DIR,
603+
label: "Generating @elizaos/ui CSS string modules",
604+
});
605+
}
606+
600607
function stageDesktopBuild() {
601608
ensureAppDirs();
602609

@@ -652,6 +659,8 @@ function stageDesktopBuild() {
652659
allowFailure: true,
653660
});
654661

662+
ensureUiGeneratedAssets();
663+
655664
runPackageBinary("vite", ["build"], {
656665
cwd: APP_DIR,
657666
env: {

packages/app-core/src/registry/schema.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ export const pluginEntrySchema = z.object({
271271
...commonFields,
272272
kind: z.literal("plugin"),
273273
subtype: pluginSubtype,
274+
launch: appLaunchSchema.optional(),
274275
});
275276

276277
// ---------------------------------------------------------------------------

packages/app-core/src/registry/smartglasses-registry.test.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { describe, expect, it } from "vitest";
12
import { readFileSync } from "node:fs";
23
import { join } from "node:path";
3-
import { describe, expect, it } from "vitest";
44
import { loadRegistryFromRawEntries } from "./loader";
55
import { registryEntrySchema } from "./schema";
66

@@ -24,31 +24,17 @@ describe("smartglasses registry entry", () => {
2424
expect(parsed.npmName).toBe("@elizaos/plugin-smartglasses");
2525
expect(parsed.config).toHaveProperty("SMARTGLASSES_TRANSPORT");
2626
expect(parsed.config).toHaveProperty("SMARTGLASSES_INIT_MODE");
27-
expect(parsed.config.SMARTGLASSES_TRANSPORT?.type).toBe("select");
28-
expect(
29-
parsed.config.SMARTGLASSES_TRANSPORT?.options?.map(
30-
(option) => option.value,
31-
),
32-
).toEqual(["auto", "even-bridge", "web-bluetooth", "noble"]);
33-
expect(parsed.config.SMARTGLASSES_INIT_MODE?.type).toBe("select");
34-
expect(
35-
parsed.config.SMARTGLASSES_INIT_MODE?.options?.map(
36-
(option) => option.value,
37-
),
38-
).toEqual(["lens-specific", "official", "android-f4"]);
3927
expect(parsed.tags).toEqual(
4028
expect.arrayContaining([
4129
"smartglasses",
4230
"even-realities",
4331
"bluetooth",
4432
"wifi",
45-
"display",
46-
"microphone",
4733
]),
4834
);
4935
expect(parsed.render.actions).toContain("launch");
50-
expect(data.launch.target).toBe("smartglasses");
51-
expect(data.launch.capabilities).toContain("wifi-provisioning");
36+
expect(parsed.launch?.target).toBe("smartglasses");
37+
expect(parsed.launch?.capabilities).toContain("wifi-provisioning");
5238
expect(registry.byId.get("smartglasses")?.name).toBe("Smartglasses");
5339
expect(registry.byNpmName.get("@elizaos/plugin-smartglasses")?.id).toBe(
5440
"smartglasses",

packages/cloud-api/webhooks/bluebubbles/route.test.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,22 @@ const routePhoneMessage = mock(async () => ({
77
userId: "user-1",
88
organizationId: "org-1",
99
}));
10-
const registerPhoneGatewayDevice = mock(async () => ({
10+
11+
type RegisterPhoneGatewayDeviceResult = {
12+
id: string | null;
13+
registered: boolean;
14+
skippedReason?: "missing_phone_number" | "table_missing" | "write_failed";
15+
};
16+
17+
const registeredGatewayDevice = (): RegisterPhoneGatewayDeviceResult => ({
1118
id: "gateway-device-1",
1219
registered: true,
13-
}));
20+
});
21+
22+
const registerPhoneGatewayDevice = mock(
23+
async (): Promise<RegisterPhoneGatewayDeviceResult> =>
24+
registeredGatewayDevice(),
25+
);
1426

1527
mock.module("@/lib/services/agent-gateway-router", () => ({
1628
agentGatewayRouterService: {
@@ -75,10 +87,9 @@ describe("BlueBubbles webhook", () => {
7587
organizationId: "org-1",
7688
}));
7789
registerPhoneGatewayDevice.mockClear();
78-
registerPhoneGatewayDevice.mockImplementation(async () => ({
79-
id: "gateway-device-1",
80-
registered: true,
81-
}));
90+
registerPhoneGatewayDevice.mockImplementation(async () =>
91+
registeredGatewayDevice(),
92+
);
8293
});
8394

8495
test("rejects requests without the shared gateway secret", async () => {

packages/cloud-shared/src/lib/services/agent-gateway-router.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ mock.module("../../db/repositories/agent-sandboxes", () => ({
7272
}));
7373

7474
mock.module("../../db/schemas", () => ({
75+
anonymousSessions: {},
7576
agentPhoneContacts: {
7677
agent_id: "contact_agent_id",
7778
organization_id: "contact_organization_id",
@@ -95,6 +96,25 @@ mock.module("../../db/schemas", () => ({
9596
to_number: "to_number",
9697
created_at: "created_at",
9798
},
99+
appRequests: {},
100+
appAnalytics: {},
101+
apps: {},
102+
appUsers: {},
103+
adminUsers: {},
104+
containers: {},
105+
conversations: {},
106+
elizaRoomCharactersTable: {},
107+
invoices: {},
108+
moderationViolations: {},
109+
organizationEncryptionKeys: {},
110+
organizations: {},
111+
phoneGatewayDevices: {},
112+
userCharacters: {},
113+
userModerationStatus: {},
114+
users: {},
115+
vertexModelAssignments: {},
116+
vertexTunedModels: {},
117+
vertexTuningJobs: {},
98118
}));
99119

100120
mock.module("./agent-gateway-relay", () => ({

packages/cloud-shared/src/lib/services/eliza-app/onboarding-chat.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ mock.module("./user-service", () => ({
5757
},
5858
}));
5959

60-
const { runOnboardingChat } = await import("./onboarding-chat.ts?test=onboarding-chat");
60+
const { runOnboardingChat } = await import(
61+
`./onboarding-chat.ts?test=onboarding-chat-${Date.now()}`
62+
);
6163

6264
describe("runOnboardingChat", () => {
6365
beforeEach(() => {
@@ -282,6 +284,12 @@ describe("runOnboardingChat", () => {
282284
trustedPlatformIdentity: true,
283285
});
284286
ensureElizaAppProvisioning.mockClear();
287+
ensureElizaAppProvisioning.mockResolvedValue({
288+
status: "provisioning",
289+
agentId: "agent-1",
290+
bridgeUrl: null,
291+
sandbox: null,
292+
});
285293

286294
const result = await runOnboardingChat({
287295
platform: "blooio",

0 commit comments

Comments
 (0)