diff --git a/LICENSE b/LICENSE index 2d8fc74e5d..6aef39e3c8 100644 --- a/LICENSE +++ b/LICENSE @@ -236,7 +236,7 @@ License: MIT Maka includes an ejected adaptation of Astryx ChatReasoning v0.1.9 and generated theme artifacts based on Astryx theme-neutral v0.4.5. Maka also redistributes -`patches/@astryxdesign+core+0.4.5.patch`, which modifies the MIT-licensed Astryx +`patches/@astryxdesign+core+0.5.0.patch`, which modifies the MIT-licensed Astryx core package. The following MIT License applies to that material: MIT License diff --git a/apps/desktop/e2e/accessibility-coverage.spec.ts b/apps/desktop/e2e/accessibility-coverage.spec.ts index 8279c7c8e8..fe4e97fe80 100644 --- a/apps/desktop/e2e/accessibility-coverage.spec.ts +++ b/apps/desktop/e2e/accessibility-coverage.spec.ts @@ -83,25 +83,25 @@ test('module pages and global overlays expose named actionable controls', async const extensionsNavigation = page.getByRole('navigation', { name: /扩展内容/ }); await expect( extensionsNavigation.getByRole('button', { name: '技能', exact: true }), - ).toHaveAttribute('aria-current', 'page'); + ).toHaveAttribute('aria-current', 'true'); await assertAxHealth(cdp, 'extensions/skills'); const mcpButton = extensionsNavigation.getByRole('button', { name: 'MCP', exact: true }); await mcpButton.click(); - await expect(mcpButton).toHaveAttribute('aria-current', 'page'); + await expect(mcpButton).toHaveAttribute('aria-current', 'true'); await assertAxHealth(cdp, 'extensions/mcp'); await navigation.getByRole('button', { name: /定时任务/ }).click(); const automationsNavigation = page.getByRole('navigation', { name: /定时任务内容/ }); await expect( automationsNavigation.getByRole('button', { name: '定时任务', exact: true }), - ).toHaveAttribute('aria-current', 'page'); + ).toHaveAttribute('aria-current', 'true'); await assertAxHealth(cdp, 'automations/scheduled-tasks'); const dailyReviewButton = automationsNavigation.getByRole('button', { name: '每日回顾', exact: true, }); await dailyReviewButton.click(); - await expect(dailyReviewButton).toHaveAttribute('aria-current', 'page'); + await expect(dailyReviewButton).toHaveAttribute('aria-current', 'true'); await assertAxHealth(cdp, 'automations/daily-review'); await page.keyboard.press('Shift+Slash'); diff --git a/apps/desktop/e2e/module-hub.spec.ts b/apps/desktop/e2e/module-hub.spec.ts index 462558387c..91609cfcfd 100644 --- a/apps/desktop/e2e/module-hub.spec.ts +++ b/apps/desktop/e2e/module-hub.spec.ts @@ -32,7 +32,7 @@ test('Module Hub switches all four leaves and opens scheduled creation once', as await extensions.getByRole('button', { name: 'MCP', exact: true }).click(); await expect( extensions.getByRole('button', { name: 'MCP', exact: true }), - ).toHaveAttribute('aria-current', 'page'); + ).toHaveAttribute('aria-current', 'true'); await sidebar.getByRole('button', { name: /定时任务/ }).click(); await expect(page.locator('[data-module="scheduled-tasks"]')).toBeVisible(); diff --git a/apps/desktop/package.json b/apps/desktop/package.json index b08ce8ef13..7551ebbc5c 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -57,8 +57,8 @@ }, "devDependencies": { "@ant-design/icons-svg": "4.5.0", - "@astryxdesign/core": "0.4.5", - "@astryxdesign/theme-neutral": "0.4.5", + "@astryxdesign/core": "0.5.0", + "@astryxdesign/theme-neutral": "0.5.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@fontsource-variable/geist": "^5.3.0", diff --git a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt index 71eea8ee63..3f87d4e130 100644 --- a/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt +++ b/apps/desktop/resources/licenses/npm/THIRD_PARTY_NOTICES.txt @@ -478,7 +478,7 @@ SOFTWARE. ================================================================================ -Package: @astryxdesign/core@0.4.5 +Package: @astryxdesign/core@0.5.0 Declared license: MIT Selected license: MIT Repository: git+https://github.com/facebook/astryx.git#packages/core @@ -508,7 +508,7 @@ SOFTWARE. ================================================================================ -Package: @astryxdesign/theme-neutral@0.4.5 +Package: @astryxdesign/theme-neutral@0.5.0 Declared license: MIT Selected license: MIT Repository: git+https://github.com/facebook/astryx.git#packages/themes/neutral diff --git a/apps/desktop/src/renderer/astryx-theme/maka.css b/apps/desktop/src/renderer/astryx-theme/maka.css index 65b6ce220b..197e5b535a 100644 --- a/apps/desktop/src/renderer/astryx-theme/maka.css +++ b/apps/desktop/src/renderer/astryx-theme/maka.css @@ -323,7 +323,7 @@ } .astryx-badge.error { - background-color: light-dark(#e33f4a, #ff705d); + background-color: light-dark(#c9303a, #ff705d); color: light-dark(#ffffff, #171717); } @@ -386,7 +386,7 @@ } .astryx-statusdot.error { - background-color: light-dark(#e33f4a, #ff705d); + background-color: light-dark(#c9303a, #ff705d); } .astryx-statusdot.accent { @@ -439,7 +439,7 @@ } .astryx-progressbar.error { - --color-error: #e33f4a; + --color-error: #c9303a; } .astryx-card { diff --git a/apps/desktop/src/renderer/astryx-theme/maka.js b/apps/desktop/src/renderer/astryx-theme/maka.js index 96c9e63ff3..16ac3fd1dd 100644 --- a/apps/desktop/src/renderer/astryx-theme/maka.js +++ b/apps/desktop/src/renderer/astryx-theme/maka.js @@ -309,7 +309,7 @@ export const makaTheme = { "color": "#171717" }, "variant:error": { - "backgroundColor": "light-dark(#e33f4a, #ff705d)", + "backgroundColor": "light-dark(#c9303a, #ff705d)", "color": "light-dark(#ffffff, #171717)" }, "variant:red": { @@ -361,7 +361,7 @@ export const makaTheme = { "backgroundColor": "#ffce2f" }, "variant:error": { - "backgroundColor": "light-dark(#e33f4a, #ff705d)" + "backgroundColor": "light-dark(#c9303a, #ff705d)" }, "variant:accent": { "backgroundColor": "light-dark(#0074e2, #6d9cfe)" @@ -409,7 +409,7 @@ export const makaTheme = { "--color-warning": "#ffce2f" }, "variant:error": { - "--color-error": "#e33f4a" + "--color-error": "#c9303a" } }, "card": { diff --git a/apps/desktop/src/renderer/remote-project-directory-dialog.tsx b/apps/desktop/src/renderer/remote-project-directory-dialog.tsx index 20b447ce36..ec57af4206 100644 --- a/apps/desktop/src/renderer/remote-project-directory-dialog.tsx +++ b/apps/desktop/src/renderer/remote-project-directory-dialog.tsx @@ -207,6 +207,7 @@ export function RemoteProjectDirectoryDialog(props: { onOpenChange={(open) => { if (!open) dismiss(); }} + aria-label={copy.remoteDirectoryTitle(host?.name ?? 'Runtime Host')} purpose="form" width={560} maxHeight="calc(100dvh - 64px)" diff --git a/package-lock.json b/package-lock.json index 963aae16b8..41b5411572 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,7 @@ "devDependencies": { "@ai-sdk/provider-utils": "5.0.28", "@astryxdesign/cli": "0.4.5", - "@astryxdesign/core": "0.4.5", + "@astryxdesign/core": "0.5.0", "@biomejs/biome": "2.5.9", "@electron/asar": "3.4.1", "@types/node": "^26.2.0", @@ -57,8 +57,8 @@ }, "devDependencies": { "@ant-design/icons-svg": "4.5.0", - "@astryxdesign/core": "0.4.5", - "@astryxdesign/theme-neutral": "0.4.5", + "@astryxdesign/core": "0.5.0", + "@astryxdesign/theme-neutral": "0.5.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@fontsource-variable/geist": "^5.3.0", @@ -362,9 +362,9 @@ } }, "node_modules/@astryxdesign/core": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@astryxdesign/core/-/core-0.4.5.tgz", - "integrity": "sha512-rbGaoAGZq1QImY2VWeWQNAh1ZqQa/KLWnmoOdy13lSjzMcAPDS6WrVv9fZfsNDx+DIG2oySLtMikwZk5WFl1Uw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astryxdesign/core/-/core-0.5.0.tgz", + "integrity": "sha512-O2lYXrU8+/iRNV9TqOHCj3zhz1NSJxdtytfoQ0Dy/TY7g2CjZTb4/zUpl0EA5hIi4Si1tJxlVf9Uh3LMVALnmg==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -377,16 +377,16 @@ } }, "node_modules/@astryxdesign/theme-neutral": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@astryxdesign/theme-neutral/-/theme-neutral-0.4.5.tgz", - "integrity": "sha512-+xLoTOwgHsQWUWbUVq6vxbCTi6vpIJeXEdkyHXBUE7NqjKl6aJAyqdx5V4SsTOx9fOUeVLPJ5HVtr59u4gKbKQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@astryxdesign/theme-neutral/-/theme-neutral-0.5.0.tgz", + "integrity": "sha512-7EVMNJ3BCzq4lVyRzDQ9SLt0v03atQCpkXiE2BvdmH3B/nRVQvd+qfMBoUhL6EGsVTqnS3b+PSVU6unNcqulgQ==", "dev": true, "license": "MIT", "dependencies": { "lucide-react": "^1.18.0" }, "peerDependencies": { - "@astryxdesign/core": "0.4.5", + "@astryxdesign/core": "0.5.0", "react": ">=19" } }, @@ -14109,7 +14109,7 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@astryxdesign/core": "0.4.5", + "@astryxdesign/core": "0.5.0", "@maka/core": "0.1.0", "clsx": "^2.1.1", "lucide-react": "^1.33.0", diff --git a/package.json b/package.json index 7c5c6c330e..b58b8a6529 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "@ai-sdk/provider-utils": "5.0.28", "@electron/asar": "3.4.1", "@astryxdesign/cli": "0.4.5", - "@astryxdesign/core": "0.4.5", + "@astryxdesign/core": "0.5.0", "@biomejs/biome": "2.5.9", "@types/node": "^26.2.0", "knip": "^6.32.2", diff --git a/packages/ui/package.json b/packages/ui/package.json index 1ccbe9963b..c8de4eb331 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -23,7 +23,7 @@ "test:dist": "node --test \"dist/**/*.test.js\"" }, "dependencies": { - "@astryxdesign/core": "0.4.5", + "@astryxdesign/core": "0.5.0", "@maka/core": "0.1.0", "clsx": "^2.1.1", "lucide-react": "^1.33.0", diff --git a/patches/@astryxdesign+core+0.4.5.patch b/patches/@astryxdesign+core+0.5.0.patch similarity index 94% rename from patches/@astryxdesign+core+0.4.5.patch rename to patches/@astryxdesign+core+0.5.0.patch index 087c9957af..25e5a1ead1 100644 --- a/patches/@astryxdesign+core+0.4.5.patch +++ b/patches/@astryxdesign+core+0.5.0.patch @@ -33,7 +33,7 @@ index ff34874..9ec8d7a 100644 export declare function ChatLayout({ children, composer, density, emptyState, scrollButton, scrollRef: externalScrollRef, xstyle, className, style, 'data-testid': testId, ref, ...rest }: ChatLayoutProps): import("react").JSX.Element; export declare namespace ChatLayout { diff --git a/node_modules/@astryxdesign/core/dist/Chat/ChatLayout.js b/node_modules/@astryxdesign/core/dist/Chat/ChatLayout.js -index ea27cd5..7102f8d 100644 +index ff9b9fa..346e01c 100644 --- a/node_modules/@astryxdesign/core/dist/Chat/ChatLayout.js +++ b/node_modules/@astryxdesign/core/dist/Chat/ChatLayout.js @@ -28,7 +28,7 @@ @@ -92,7 +92,7 @@ index ea27cd5..7102f8d 100644 // --- Derived styles --- const showEmpty = !hasVisibleContent(children); diff --git a/node_modules/@astryxdesign/core/dist/Chat/ChatToolCalls.js b/node_modules/@astryxdesign/core/dist/Chat/ChatToolCalls.js -index 03b89ec..b0a094e 100644 +index 889970f..459e6e8 100644 --- a/node_modules/@astryxdesign/core/dist/Chat/ChatToolCalls.js +++ b/node_modules/@astryxdesign/core/dist/Chat/ChatToolCalls.js @@ -122,6 +122,7 @@ function CallRow({ @@ -159,7 +159,7 @@ index 82ae62c..a97eff5 100644 var displayName: string; } diff --git a/node_modules/@astryxdesign/core/dist/DropdownMenu/DropdownMenuItem.js b/node_modules/@astryxdesign/core/dist/DropdownMenu/DropdownMenuItem.js -index 5bf241b..f773a97 100644 +index 446e25b..00eb8b3 100644 --- a/node_modules/@astryxdesign/core/dist/DropdownMenu/DropdownMenuItem.js +++ b/node_modules/@astryxdesign/core/dist/DropdownMenu/DropdownMenuItem.js @@ -91,6 +91,7 @@ const itemSizeStyles = { @@ -178,22 +178,6 @@ index 5bf241b..f773a97 100644 tabIndex: isDisabled ? undefined : -1, onPointerMove: handlePointerMove, startContent: icon ? renderIconSlot(icon, { -diff --git a/node_modules/@astryxdesign/core/dist/Kbd/Kbd.js b/node_modules/@astryxdesign/core/dist/Kbd/Kbd.js -index 33ed78d..0ecbce6 100644 ---- a/node_modules/@astryxdesign/core/dist/Kbd/Kbd.js -+++ b/node_modules/@astryxdesign/core/dist/Kbd/Kbd.js -@@ -111,7 +111,10 @@ function detectMac() { - // Prefer User-Agent Client Hints API (not deprecated) - const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null; - if (uaData && typeof uaData === 'object' && 'platform' in uaData) { -- return /mac/i.test(uaData.platform ?? ''); -+ const uaPlatform = typeof uaData.platform === 'string' ? uaData.platform : ''; -+ if (uaPlatform.trim().length > 0) { -+ return /mac/i.test(uaPlatform); -+ } - } - // Fallback: navigator.platform (deprecated but still shipped everywhere) - return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? ''); diff --git a/node_modules/@astryxdesign/core/dist/List/List.js b/node_modules/@astryxdesign/core/dist/List/List.js index 08b5f7d..94c623b 100644 --- a/node_modules/@astryxdesign/core/dist/List/List.js @@ -329,7 +313,7 @@ index 0fd8329..7e4ec57 100644 Markdown.displayName = 'Markdown'; \ No newline at end of file diff --git a/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.d.ts b/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.d.ts -index e7b8e00..33a2bb7 100644 +index e7b8e00..fad2e72 100644 --- a/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.d.ts +++ b/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.d.ts @@ -66,6 +66,12 @@ export interface SideNavItemProps extends BaseProps { @@ -355,7 +339,7 @@ index e7b8e00..33a2bb7 100644 var displayName: string; } diff --git a/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.js b/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.js -index 9853461..590561b 100644 +index d694da7..d0a580c 100644 --- a/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.js +++ b/node_modules/@astryxdesign/core/dist/SideNav/SideNavItem.js @@ -210,6 +210,7 @@ export function SideNavItem({ @@ -366,7 +350,7 @@ index 9853461..590561b 100644 children, collapsible: itemCollapsible, size = 'md', -@@ -491,7 +492,7 @@ export function SideNavItem({ +@@ -492,7 +493,7 @@ export function SideNavItem({ const item = /*#__PURE__*/_jsxs("div", { ref: itemRef, ...stylex.props(styles.root, xstyle), @@ -375,22 +359,6 @@ index 9853461..590561b 100644 id: `${id}-children`, role: "group", "aria-labelledby": `${id}-label`, -diff --git a/node_modules/@astryxdesign/core/dist/hooks/useHotkeys.js b/node_modules/@astryxdesign/core/dist/hooks/useHotkeys.js -index 65f9278..f7515e2 100644 ---- a/node_modules/@astryxdesign/core/dist/hooks/useHotkeys.js -+++ b/node_modules/@astryxdesign/core/dist/hooks/useHotkeys.js -@@ -54,7 +54,10 @@ function isApplePlatform() { - } - const uaData = 'userAgentData' in navigator ? navigator.userAgentData : null; - if (uaData && typeof uaData === 'object' && 'platform' in uaData) { -- return /mac/i.test(uaData.platform ?? ''); -+ const uaPlatform = typeof uaData.platform === 'string' ? uaData.platform : ''; -+ if (uaPlatform.trim().length > 0) { -+ return /mac/i.test(uaPlatform); -+ } - } - return /Mac|iPhone|iPad|iPod/.test(navigator.platform ?? ''); - } diff --git a/node_modules/@astryxdesign/core/dist/hooks/useStreamingText.d.ts b/node_modules/@astryxdesign/core/dist/hooks/useStreamingText.d.ts index 7a35d1c..50ee70b 100644 --- a/node_modules/@astryxdesign/core/dist/hooks/useStreamingText.d.ts @@ -561,10 +529,10 @@ index 693d728..7d5724e 100644 } \ No newline at end of file diff --git a/node_modules/@astryxdesign/core/src/Chat/ChatToolCalls.tsx b/node_modules/@astryxdesign/core/src/Chat/ChatToolCalls.tsx -index a2da3d9..91a020e 100644 +index f22bb1f..b710951 100644 --- a/node_modules/@astryxdesign/core/src/Chat/ChatToolCalls.tsx +++ b/node_modules/@astryxdesign/core/src/Chat/ChatToolCalls.tsx -@@ -390,6 +390,7 @@ function CallRow({call}: {call: ChatToolCallItem}) { +@@ -399,6 +399,7 @@ function CallRow({call}: {call: ChatToolCallItem}) {
{ +@@ -322,6 +322,12 @@ export interface SideNavItemProps extends BaseProps { * Right-side content (badges, counts). */ endContent?: ReactNode; @@ -745,7 +713,7 @@ index 1c16116..0ca4ad0 100644 /** * Sub-items for nesting. */ -@@ -378,6 +384,7 @@ export function SideNavItem({ +@@ -385,6 +391,7 @@ export function SideNavItem({ href, onClick, endContent, @@ -753,7 +721,7 @@ index 1c16116..0ca4ad0 100644 children, collapsible: itemCollapsible, size = 'md', -@@ -694,6 +701,7 @@ export function SideNavItem({ +@@ -702,6 +709,7 @@ export function SideNavItem({ const item = (
{itemElement} diff --git a/patches/README.md b/patches/README.md index f7ef9200ad..6ed332c9a4 100644 --- a/patches/README.md +++ b/patches/README.md @@ -45,9 +45,9 @@ Streaming tool-call association for gateways that reuse or omit `index` / `id` Delete when that guard passes against an unpatched package. -## `@astryxdesign/core@0.4.5` +## `@astryxdesign/core@0.5.0` -Six published component seams drop host-owned state or semantics: +Five published component seams drop host-owned state or semantics: - `ChatLayout` needs a conversation identity that resets scroll/unread state without remounting its composer slot and discarding the live draft. @@ -72,10 +72,6 @@ Six published component seams drop host-owned state or semantics: defers activation meanwhile; without the attribute the row announces "available" to assistive technology and silently ignores the action. -Blank UA-CH `navigator.userAgentData.platform` must also not mean "not Apple". -Electron builds with a rewritten identity ship `platform: ''`, which made every -`mod` hotkey listen for Ctrl and every `Kbd` draw Ctrl on macOS. - Streaming text and Markdown expose an explicit `settledText` seam so the renderer can verify and advance the exact prefix already presented without replaying it. The default remains progressive for a genuinely new stream, and diff --git a/scripts/generate-third-party-notices.mjs b/scripts/generate-third-party-notices.mjs index efe5c44094..d406b3dba0 100644 --- a/scripts/generate-third-party-notices.mjs +++ b/scripts/generate-third-party-notices.mjs @@ -139,6 +139,7 @@ const MIT_COPYRIGHT_OVERRIDES = new Map([ ['@astryxdesign/core@0.3.0', 'Copyright (c) 2026 Meta Platforms, Inc.'], ['@astryxdesign/core@0.4.0', 'Copyright (c) 2026 Meta Platforms, Inc.'], ['@astryxdesign/core@0.4.5', 'Copyright (c) 2026 Meta Platforms, Inc.'], + ['@astryxdesign/core@0.5.0', 'Copyright (c) 2026 Meta Platforms, Inc.'], ['@stylexjs/stylex@0.19.0', 'Copyright (c) Meta Platforms, Inc. and affiliates.'], ['@wecom/aibot-node-sdk@1.0.7', 'Copyright (c) WeComTeam contributors'], [