Skip to content

Commit d08a910

Browse files
Shawclaude
andcommitted
chore: commit in-progress workspace changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent fbed802 commit d08a910

10 files changed

Lines changed: 262 additions & 50 deletions

File tree

packages/app-core/src/components/shell/Header.test.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ describe("Header", () => {
187187
expect(
188188
screen.getByTestId("desktop-window-titlebar-drag-zone"),
189189
).toBeTruthy();
190+
const paddedRow = titlebar.querySelector("[data-window-titlebar-padding]");
191+
expect(paddedRow).toBeTruthy();
192+
expect((paddedRow as HTMLElement).style.paddingInlineStart).toContain(
193+
"--eliza-macos-frame-left-inset",
194+
);
190195
expect(screen.queryByText("Eliza")).toBeNull();
191196
});
192197

packages/app-core/src/components/shell/Header.tsx

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { Button } from "@elizaos/ui";
22
import { ChevronRight, ListTodo, Settings } from "lucide-react";
3-
import type { ReactNode, PointerEvent as ReactPointerEvent } from "react";
3+
import type {
4+
CSSProperties,
5+
ReactNode,
6+
PointerEvent as ReactPointerEvent,
7+
} from "react";
48
import { useCallback, useEffect, useMemo } from "react";
59
import { isElectrobunRuntime } from "../../bridge/electrobun-runtime";
610
import { useMediaQuery } from "../../hooks";
@@ -71,6 +75,13 @@ const MOBILE_BOTTOM_NAV_BUTTON_ACTIVE_CLASSNAME =
7175
"text-accent after:opacity-100";
7276
const ACCESS_BADGE_CLASSNAME =
7377
"inline-flex h-[2.375rem] max-w-[15rem] shrink-0 items-center gap-1.5 rounded-md border border-border/45 bg-bg/45 px-2 text-[11px] font-medium leading-none text-muted shadow-none";
78+
const MAC_TITLEBAR_PADDING_STYLE: CSSProperties = {
79+
paddingInlineStart:
80+
"max(env(safe-area-inset-left, 0px), var(--eliza-macos-frame-left-inset, 78px))",
81+
paddingInlineEnd: "0.75rem",
82+
paddingTop:
83+
"max(env(safe-area-inset-top, 0px), var(--eliza-macos-frame-top-inset, 0px))",
84+
};
7485

7586
interface AccessBadgeContent {
7687
primary: "Local" | "Remote";
@@ -167,6 +178,9 @@ export function Header({
167178
DESKTOP_LABEL_COLLAPSE_MEDIA_QUERY,
168179
);
169180
const showMacDesktopTitleBar = shouldShowMacDesktopTitleBar();
181+
const titlebarPaddingStyle = showMacDesktopTitleBar
182+
? MAC_TITLEBAR_PADDING_STYLE
183+
: undefined;
170184
const showCloudStatus = !hideCloudCredits && !isMobileViewport;
171185
const accessBadgeContent = useMemo(
172186
() => resolveAccessBadgeContent(authStatusState),
@@ -585,6 +599,7 @@ export function Header({
585599
data-window-titlebar-padding={
586600
showMacDesktopTitleBar ? "true" : undefined
587601
}
602+
style={titlebarPaddingStyle}
588603
>
589604
{isMobileViewport ? (
590605
<>

packages/app/test/ui-smoke/titlebar-navigation.spec.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,18 @@ test("desktop titlebar keeps navigation clickable and title area draggable", asy
7575
const appsButton = page.getByTestId("header-nav-button-apps");
7676
await expect(appsButton).toBeVisible();
7777
const titlebarBox = await titlebar.boundingBox();
78+
const chatBox = await page
79+
.getByTestId("header-nav-button-chat")
80+
.boundingBox();
7881
const appsBox = await appsButton.boundingBox();
7982
expect(titlebarBox, "Expected titlebar bounds").not.toBeNull();
83+
expect(chatBox, "Expected chat nav button bounds").not.toBeNull();
8084
expect(appsBox, "Expected app nav button bounds").not.toBeNull();
81-
if (!titlebarBox || !appsBox) return;
85+
if (!titlebarBox || !chatBox || !appsBox) return;
86+
expect(
87+
chatBox.x - titlebarBox.x,
88+
"Desktop nav should reserve left space for macOS traffic lights",
89+
).toBeGreaterThanOrEqual(70);
8290
expect(
8391
appsBox.y - titlebarBox.y,
8492
"Desktop nav should share the traffic-light titlebar row",

packages/core/src/generated/action-docs.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4786,6 +4786,61 @@ export const allActionsSpec = {
47864786
descriptionCompressed:
47874787
"Handle any complex music query that requires understanding and research, then queue the selected track after confirmed:true. Supports: artist queries (first...",
47884788
},
4789+
{
4790+
name: "POLYMARKET_GET_MARKET",
4791+
description: "Fetch a single Polymarket market by market id or slug.",
4792+
parameters: [],
4793+
similes: ["POLYMARKET_MARKET", "POLYMARKET_MARKET_DETAILS"],
4794+
descriptionCompressed:
4795+
"Fetch a single Polymarket market by market id or slug.",
4796+
},
4797+
{
4798+
name: "POLYMARKET_GET_MARKETS",
4799+
description:
4800+
"List active Polymarket markets. Supports limit and offset parameters.",
4801+
parameters: [],
4802+
similes: ["POLYMARKET_MARKETS", "SEARCH_POLYMARKET_MARKETS"],
4803+
descriptionCompressed:
4804+
"List active Polymarket markets. Supports limit and offset parameters.",
4805+
},
4806+
{
4807+
name: "POLYMARKET_GET_ORDERBOOK",
4808+
description:
4809+
"Fetch a token orderbook and derive true best bid/ask from all CLOB levels.",
4810+
parameters: [],
4811+
similes: [
4812+
"POLYMARKET_QUOTE",
4813+
"POLYMARKET_ORDERBOOK",
4814+
"POLYMARKET_TOKEN_INFO",
4815+
],
4816+
descriptionCompressed:
4817+
"Fetch a token orderbook and derive true best bid/ask from all CLOB levels.",
4818+
},
4819+
{
4820+
name: "POLYMARKET_GET_POSITIONS",
4821+
description: "Fetch Polymarket positions for a wallet address.",
4822+
parameters: [],
4823+
similes: ["POLYMARKET_POSITIONS", "POLYMARKET_WALLET_POSITIONS"],
4824+
descriptionCompressed: "Fetch Polymarket positions for a wallet address.",
4825+
},
4826+
{
4827+
name: "POLYMARKET_PLACE_ORDER",
4828+
description:
4829+
"Explain Polymarket order placement readiness. Signed trading is disabled in this app scaffold.",
4830+
parameters: [],
4831+
similes: ["POLYMARKET_TRADE", "POLYMARKET_BUY", "POLYMARKET_SELL"],
4832+
descriptionCompressed:
4833+
"Explain Polymarket order placement readiness. Signed trading is disabled in this app scaffold.",
4834+
},
4835+
{
4836+
name: "POLYMARKET_STATUS",
4837+
description:
4838+
"Check Polymarket public-read and trading readiness for the local app.",
4839+
parameters: [],
4840+
similes: ["POLYMARKET_READINESS", "POLYMARKET_HEALTH"],
4841+
descriptionCompressed:
4842+
"Check Polymarket public-read and trading readiness for the local app.",
4843+
},
47894844
{
47904845
name: "POST_INSTAGRAM_COMMENT",
47914846
description: "Post a comment on an Instagram post or media",

packages/elizaos/templates-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"version": "1.0.0",
3-
"generatedAt": "2026-05-05T03:10:22.587Z",
3+
"generatedAt": "2026-05-05T04:36:01.092Z",
44
"repoUrl": "https://github.com/elizaos/eliza",
55
"templates": [
66
{

packages/prompts/specs/actions/plugins.generated.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1825,6 +1825,46 @@
18251825
"INTELLIGENT_MUSIC_SEARCH"
18261826
]
18271827
},
1828+
{
1829+
"name": "POLYMARKET_GET_MARKET",
1830+
"description": "Fetch a single Polymarket market by market id or slug.",
1831+
"parameters": [],
1832+
"similes": ["POLYMARKET_MARKET", "POLYMARKET_MARKET_DETAILS"]
1833+
},
1834+
{
1835+
"name": "POLYMARKET_GET_MARKETS",
1836+
"description": "List active Polymarket markets. Supports limit and offset parameters.",
1837+
"parameters": [],
1838+
"similes": ["POLYMARKET_MARKETS", "SEARCH_POLYMARKET_MARKETS"]
1839+
},
1840+
{
1841+
"name": "POLYMARKET_GET_ORDERBOOK",
1842+
"description": "Fetch a token orderbook and derive true best bid/ask from all CLOB levels.",
1843+
"parameters": [],
1844+
"similes": [
1845+
"POLYMARKET_QUOTE",
1846+
"POLYMARKET_ORDERBOOK",
1847+
"POLYMARKET_TOKEN_INFO"
1848+
]
1849+
},
1850+
{
1851+
"name": "POLYMARKET_GET_POSITIONS",
1852+
"description": "Fetch Polymarket positions for a wallet address.",
1853+
"parameters": [],
1854+
"similes": ["POLYMARKET_POSITIONS", "POLYMARKET_WALLET_POSITIONS"]
1855+
},
1856+
{
1857+
"name": "POLYMARKET_PLACE_ORDER",
1858+
"description": "Explain Polymarket order placement readiness. Signed trading is disabled in this app scaffold.",
1859+
"parameters": [],
1860+
"similes": ["POLYMARKET_TRADE", "POLYMARKET_BUY", "POLYMARKET_SELL"]
1861+
},
1862+
{
1863+
"name": "POLYMARKET_STATUS",
1864+
"description": "Check Polymarket public-read and trading readiness for the local app.",
1865+
"parameters": [],
1866+
"similes": ["POLYMARKET_READINESS", "POLYMARKET_HEALTH"]
1867+
},
18281868
{
18291869
"name": "POST_INSTAGRAM_COMMENT",
18301870
"description": "Post a comment on an Instagram post or media",

packages/ui/src/styles/electrobun-mac-window-drag.css

Lines changed: 78 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
* without duplicating policy only in native code.
1010
*
1111
* html.eliza-electrobun-frameless is toggled from apps/app/src/main.tsx
12-
* (main macOS Electrobun shell only; detached shells skip it).
12+
* and html.eliza-electrobun-custom-titlebar is toggled by Header when the
13+
* main macOS Electrobun shell renders its custom titlebar.
1314
*/
14-
html.eliza-electrobun-frameless {
15+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) {
1516
/**
1617
* Leading inset so the header nav (Chat, Apps, ...) clears the traffic-light
1718
* cluster while staying on the same vertical row. hiddenInset draws controls
@@ -26,22 +27,34 @@ html.eliza-electrobun-frameless:not(.eliza-electrobun-custom-titlebar) body {
2627
-webkit-app-region: drag;
2728
}
2829

29-
html.eliza-electrobun-frameless [data-window-titlebar="true"] {
30+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
31+
[data-window-titlebar="true"] {
3032
-webkit-app-region: drag;
3133
}
3234

33-
html.eliza-electrobun-frameless [data-no-window-drag="true"],
34-
html.eliza-electrobun-frameless [data-no-window-drag="true"] *,
35-
html.eliza-electrobun-frameless [data-no-window-drag="true"]::before,
36-
html.eliza-electrobun-frameless [data-no-window-drag="true"]::after,
37-
html.eliza-electrobun-frameless [data-no-camera-drag="true"],
38-
html.eliza-electrobun-frameless [data-no-camera-drag="true"] *,
39-
html.eliza-electrobun-frameless [data-no-camera-drag="true"]::before,
40-
html.eliza-electrobun-frameless [data-no-camera-drag="true"]::after {
35+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
36+
[data-no-window-drag="true"],
37+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
38+
[data-no-window-drag="true"]
39+
*,
40+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
41+
[data-no-window-drag="true"]::before,
42+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
43+
[data-no-window-drag="true"]::after,
44+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
45+
[data-no-camera-drag="true"],
46+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
47+
[data-no-camera-drag="true"]
48+
*,
49+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
50+
[data-no-camera-drag="true"]::before,
51+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
52+
[data-no-camera-drag="true"]::after {
4153
-webkit-app-region: no-drag;
4254
}
4355

44-
html.eliza-electrobun-frameless [data-window-titlebar-padding] {
56+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
57+
[data-window-titlebar-padding] {
4558
padding-inline-start: max(
4659
env(safe-area-inset-left, 0px),
4760
var(--eliza-macos-frame-left-inset)
@@ -53,38 +66,59 @@ html.eliza-electrobun-frameless [data-window-titlebar-padding] {
5366
);
5467
}
5568

56-
html.eliza-electrobun-frameless a,
57-
html.eliza-electrobun-frameless button,
58-
html.eliza-electrobun-frameless input,
59-
html.eliza-electrobun-frameless textarea,
60-
html.eliza-electrobun-frameless select,
61-
html.eliza-electrobun-frameless option,
62-
html.eliza-electrobun-frameless label,
63-
html.eliza-electrobun-frameless summary,
64-
html.eliza-electrobun-frameless iframe,
65-
html.eliza-electrobun-frameless canvas,
66-
html.eliza-electrobun-frameless video,
67-
html.eliza-electrobun-frameless audio,
68-
html.eliza-electrobun-frameless electrobun-wgpu,
69-
html.eliza-electrobun-frameless [role="button"],
70-
html.eliza-electrobun-frameless [role="link"],
71-
html.eliza-electrobun-frameless [role="menuitem"],
72-
html.eliza-electrobun-frameless [role="menuitemcheckbox"],
73-
html.eliza-electrobun-frameless [role="menuitemradio"],
74-
html.eliza-electrobun-frameless [role="option"],
75-
html.eliza-electrobun-frameless [role="radio"],
76-
html.eliza-electrobun-frameless [role="checkbox"],
77-
html.eliza-electrobun-frameless [role="switch"],
78-
html.eliza-electrobun-frameless [role="tab"],
79-
html.eliza-electrobun-frameless [role="slider"],
80-
html.eliza-electrobun-frameless [role="listbox"],
81-
html.eliza-electrobun-frameless [role="combobox"],
82-
html.eliza-electrobun-frameless [role="spinbutton"],
83-
html.eliza-electrobun-frameless [role="textbox"],
84-
html.eliza-electrobun-frameless [role="searchbox"],
85-
html.eliza-electrobun-frameless [contenteditable="true"],
86-
html.eliza-electrobun-frameless [aria-haspopup],
87-
html.eliza-electrobun-frameless [data-shell-scroll-region="true"] {
69+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) a,
70+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) button,
71+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) input,
72+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
73+
textarea,
74+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) select,
75+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) option,
76+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) label,
77+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) summary,
78+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) iframe,
79+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) canvas,
80+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) video,
81+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar) audio,
82+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
83+
electrobun-wgpu,
84+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
85+
[role="button"],
86+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
87+
[role="link"],
88+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
89+
[role="menuitem"],
90+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
91+
[role="menuitemcheckbox"],
92+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
93+
[role="menuitemradio"],
94+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
95+
[role="option"],
96+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
97+
[role="radio"],
98+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
99+
[role="checkbox"],
100+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
101+
[role="switch"],
102+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
103+
[role="tab"],
104+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
105+
[role="slider"],
106+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
107+
[role="listbox"],
108+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
109+
[role="combobox"],
110+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
111+
[role="spinbutton"],
112+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
113+
[role="textbox"],
114+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
115+
[role="searchbox"],
116+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
117+
[contenteditable="true"],
118+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
119+
[aria-haspopup],
120+
html:is(.eliza-electrobun-frameless, .eliza-electrobun-custom-titlebar)
121+
[data-shell-scroll-region="true"] {
88122
-webkit-app-region: no-drag;
89123
}
90124

scripts/launch-qa/check-docs.mjs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,18 @@ function firstExistingPath(basePaths) {
252252
return null;
253253
}
254254

255+
function docsAliasPaths(repoRoot, filePart) {
256+
const parts = filePart.split(/[\\/]+/).filter(Boolean);
257+
const docsIndex = parts.lastIndexOf("docs");
258+
if (docsIndex === -1) {
259+
return [];
260+
}
261+
262+
return [
263+
path.join(repoRoot, "packages", "docs", ...parts.slice(docsIndex + 1)),
264+
];
265+
}
266+
255267
function resolveLinkedFile(repoRoot, fromFile, filePart) {
256268
if (!filePart) {
257269
return fromFile;
@@ -260,14 +272,19 @@ function resolveLinkedFile(repoRoot, fromFile, filePart) {
260272
const stripped = filePart.replace(/^\/+/, "");
261273
return (
262274
firstExistingPath([
275+
path.join(repoRoot, "packages", "docs", stripped),
276+
...docsAliasPaths(repoRoot, stripped),
263277
path.join(repoRoot, "docs", stripped),
264278
path.join(repoRoot, stripped),
265279
]) ?? path.join(repoRoot, "docs", stripped)
266280
);
267281
}
268282

269283
const basePath = path.resolve(path.dirname(fromFile), filePart);
270-
return firstExistingPath([basePath]) ?? basePath;
284+
return (
285+
firstExistingPath([basePath, ...docsAliasPaths(repoRoot, filePart)]) ??
286+
basePath
287+
);
271288
}
272289

273290
function resolveAnchorFile(filePath) {

0 commit comments

Comments
 (0)