chore(capabilities): refresh UI inventory #5253
ci.yml
on: push
Shell Deploy Scripts
13s
DSH Profile Packaging (windows-latest)
49s
Frontend Build
4m 28s
Matrix: cli-test
Matrix: rust-build-check
Annotations
11 errors and 1 warning
|
src/app/scenes/profile/views/AssistantCard.test.tsx > AssistantCard actions > disables card actions while setting the primary assistant:
src/web-ui/src/app/scenes/profile/views/AssistantCard.tsx#L142
Error: [vitest] No "IconButton" export is defined on the "@/component-library" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
vi.mock(import("@/component-library"), async (importOriginal) => {
const actual = await importOriginal()
return {
...actual,
// your mocked methods
}
})
❯ AssistantCard src/app/scenes/profile/views/AssistantCard.tsx:142:16
❯ renderWithHooks ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:15486:18
❯ mountIndeterminateComponent ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:20103:13
❯ beginWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:21626:16
❯ beginWork$1 ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:27465:14
❯ performUnitOfWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26599:12
❯ workLoopSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26505:5
❯ renderRootSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26473:7
|
|
src/app/scenes/profile/views/AssistantCard.test.tsx > AssistantCard actions > keeps configuration and new-session actions distinct:
src/web-ui/src/app/scenes/profile/views/AssistantCard.tsx#L142
Error: [vitest] No "IconButton" export is defined on the "@/component-library" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:
vi.mock(import("@/component-library"), async (importOriginal) => {
const actual = await importOriginal()
return {
...actual,
// your mocked methods
}
})
❯ AssistantCard src/app/scenes/profile/views/AssistantCard.tsx:142:16
❯ renderWithHooks ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:15486:18
❯ mountIndeterminateComponent ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:20103:13
❯ beginWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:21626:16
❯ beginWork$1 ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:27465:14
❯ performUnitOfWork ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26599:12
❯ workLoopSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26505:5
❯ renderRootSync ../../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.development.js:26473:7
|
|
src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts > VoiceInputDiagnostics responsive layout > gives diagnostic controls enough room without allowing the test label to wrap:
src/web-ui/src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts#L23
AssertionError: expected '\n flex: 0 0 auto;\n ' to contain 'white-space: nowrap'
- Expected
+ Received
- white-space: nowrap
+
+ flex: 0 0 auto;
+
❯ src/infrastructure/config/components/VoiceInputDiagnostics.presentation.test.ts:23:24
|
|
src/infrastructure/config/components/McpToolsConfig.test.tsx:
src/web-ui/src/infrastructure/config/components/McpToolsConfig.tsx#L22
Error: [vitest] There was an error when mocking a module. If you are using "vi.mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://vitest.dev/api/vi.html#vi-mock
❯ src/infrastructure/config/components/McpToolsConfig.tsx:22:1
Caused by: Caused by: Error: Failed to resolve entry for package "@bitfun/theme-bitfun". The package may have incorrect main/module/exports specified in its package.json.
Plugin: vite:import-analysis
File: /home/runner/work/BitFun/BitFun/src/web-ui/src/infrastructure/appearance/builtins/designSystemThemeValues.ts:4:7
1 | import {
2 | themes
3 | } from "@bitfun/theme-bitfun";
| ^
4 | export function getDesignSystemThemeString(mode, name) {
5 | const value = themes[mode][name];
❯ packageEntryFailure ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32816:32
❯ resolvePackageEntry ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32813:2
❯ tryNodeResolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32716:70
❯ ResolveIdContext.handler ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32555:16
❯ EnvironmentPluginContainer.resolveId ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28717:56
❯ TransformPluginContext.resolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28929:13
❯ normalizeUrl ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27111:22
❯ ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27177:32
|
|
src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx:
src/web-ui/src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx#L7
Error: [vitest] There was an error when mocking a module. If you are using "vi.mock" factory, make sure there are no top level variables inside, since this call is hoisted to top of the file. Read more: https://vitest.dev/api/vi.html#vi-mock
❯ src/infrastructure/config/components/AppearancePackageConfigSection.test.tsx:7:1
Caused by: Caused by: Error: Failed to resolve entry for package "@bitfun/theme-bitfun". The package may have incorrect main/module/exports specified in its package.json.
Plugin: vite:import-analysis
File: /home/runner/work/BitFun/BitFun/src/web-ui/src/infrastructure/appearance/builtins/designSystemThemeValues.ts:4:7
1 | import {
2 | themes
3 | } from "@bitfun/theme-bitfun";
| ^
4 | export function getDesignSystemThemeString(mode, name) {
5 | const value = themes[mode][name];
❯ packageEntryFailure ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32816:32
❯ resolvePackageEntry ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32813:2
❯ tryNodeResolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32716:70
❯ ResolveIdContext.handler ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:32555:16
❯ EnvironmentPluginContainer.resolveId ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28717:56
❯ TransformPluginContext.resolve ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28929:13
❯ normalizeUrl ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27111:22
❯ ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27177:32
❯ TransformPluginContext.transform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:27145:4
❯ EnvironmentPluginContainer.transform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:28797:14
❯ loadAndTransform ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:22670:26
❯ fetchModule ../../node_modules/.pnpm/vite@7.3.1_@types+node@20.19.37_jiti@2.6.1_sass@1.97.3_terser@5.46.0_tsx@4.21.0_yaml@2.8.2/node_modules/vite/dist/node/chunks/config.js:33993:15
|
|
src/flow_chat/components/usage/SessionUsageComponents.test.tsx > Session usage report UI components > renders localized partial coverage and cache unavailable without showing zero:
src/web-ui/src/flow_chat/components/usage/SessionUsageComponents.test.tsx#L547
AssertionError: expected '_button_6d3ff8' to contain 'session-usage-report-card__details-bu…'
Expected: "session-usage-report-card__details-button"
Received: "_button_6d3ff8"
❯ src/flow_chat/components/usage/SessionUsageComponents.test.tsx:547:35
|
|
src/features/ssh-remote/SSHConnectionDialog.test.tsx > SSHConnectionDialog > selects an OpenSSH certificate with the native file picker:
src/web-ui/src/features/ssh-remote/SSHConnectionDialog.test.tsx#L310
AssertionError: expected null not to be null
❯ src/features/ssh-remote/SSHConnectionDialog.test.tsx:310:35
|
|
src/features/ssh-remote/SSHConnectionDialog.test.tsx > SSHConnectionDialog > reveals non-default settings when editing an existing connection:
src/web-ui/src/features/ssh-remote/SSHConnectionDialog.test.tsx#L279
AssertionError: expected 'false' to be 'true' // Object.is equality
Expected: "true"
Received: "false"
❯ src/features/ssh-remote/SSHConnectionDialog.test.tsx:279:51
|
|
src/app/scenes/skills/SkillsScene.presentation.test.ts > Skills scene presentation > keeps row navigation and destructive actions as separate compact targets:
src/web-ui/src/app/scenes/skills/SkillsScene.presentation.test.ts#L45
AssertionError: expected 'import { Button, Switch } from \'@bit…' to contain 'className="skills-card__details"'
- Expected
+ Received
- className="skills-card__details"
+ import { Button, Switch } from '@bitfun/ui';
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
+ import {
+ ArrowRight,
+ CheckCircle2,
+ ChevronLeft,
+ ChevronRight,
+ Download,
+ Filter,
+ FolderOpen,
+ Layers,
+ Package,
+ Plus,
+ Puzzle,
+ ShieldAlert,
+ ShieldCheck,
+ Trash2,
+ TrendingUp,
+ User,
+ Zap,
+ } from 'lucide-react';
+ import { useTranslation } from 'react-i18next';
+ import { Badge, ConfirmDialog, IconButton, Input, Modal, Search, Select } from '@/component-library';
+ import { GalleryDetailModal } from '@/app/components';
+ import type { SkillInfo, SkillLevel, SkillMarketItem } from '@/infrastructure/config/types';
+ import {
+ buildSkillCoverageSourceMap,
+ canDeleteSkill,
+ findSkillByKey,
+ getSkillSourceLabel,
+ } from '@/infrastructure/config/skillSourcePresentation';
+ import { workspaceAPI } from '@/infrastructure/api';
+ import { usePeerDeviceModeOptional } from '@/infrastructure/peer-device/peerDeviceContextState';
+ import { isTauriRuntime } from '@/infrastructure/runtime';
+ import { workspaceManager } from '@/infrastructure/services/business/workspaceManager';
+ import { useNotification } from '@/shared/notification-system';
+ import { isRemoteWorkspace } from '@/shared/types';
+ import { createLogger } from '@/shared/utils/logger';
+ import { getCardGradient } from '@/shared/utils/cardGradients';
+ import { useInstalledSkills } from './hooks/useInstalledSkills';
+ import { useSkillMarket } from './hooks/useSkillMarket';
+ import SkillCard from './components/SkillCard';
+ import SkillsSuiteView from './components/SkillsSuiteView';
+ import './SkillsScene.scss';
+ import { useSkillsSceneStore, type InstalledFilter } from './skillsSceneStore';
+ import { useGallerySceneAutoRefresh } from '@/app/hooks/useGallerySceneAutoRefresh';
+
+ const log = createLogger('SkillsScene');
+
+ type SkillTab = 'installed' | 'discover';
+
+ interface CategoryInfo {
+ id: InstalledFilter;
+ icon: React.ReactNode;
+ labelKey: string;
+ titleKey: string;
+ descKey: string;
+ }
+
+ const CATEGORIES: CategoryInfo[] = [
+ {
+ id: 'all',
+ icon: <Layers size={15} strokeWidth={1.6} />,
+ labelKey: 'filters.all',
+ titleKey: 'installed.titleListAll',
+ descKey: 'categories.all',
+ },
+ {
+ id: 'builtin',
+ icon: <ShieldCheck size={15} strokeWidth={1.6} />,
+ labelKey: 'filters.builtin',
+ titleKey: 'installed.titleBuiltin',
+ descKey: 'categories.builtin',
+ },
+ {
+ id: 'user',
+ icon: <User size={15} strokeWidth={1.6} />,
+ labelKey: 'filters.user',
+ titleKey: 'installed.titleUser',
+ descKey: 'categories.user',
+ },
+ {
+ id: 'project',
+ icon: <FolderOpen size={15} strokeWidth={1.6} />,
+ labelKey: 'filters.project',
+ titleKey: 'installed.titleProject',
+ descKey: 'categories.project',
+ },
+ {
+ id: 'suite',
+ icon: <Zap size={15} strokeWidth={1.6} />,
+ labelKey: 'filters.suite',
+ titleKey: 'suite.title',
+ descKey: 'categories.suite',
+ },
+ ];
+
+ const SkillsScene: React.FC = () => {
+ const { t } = useTranslation('scenes/skills');
+ const notification = useNotification();
+ const peerDevice = usePeerDeviceModeOptional();
+ const remoteConnectionActive = peerDevice?.peerMode.active === true;
+ const desktopConfigAvailable = isTauriRuntime() && !remoteConnectionActive;
+ const {
+ searchDraft,
+ marketQuery,
+ installedFilter,
+ hideDuplicates,
+ isAddFormOpen,
+ setSearchDraft,
+ submitMarketQuery,
+ setInstalledFilter,
+ setHideDuplicates,
+ setAddFormOpen,
+ toggleAddForm,
+ } = useSkillsSceneStore();
+
+ const [activeTab, setActiveTab] = useState<SkillTab>('installed');
+ const [deleteTarget, setDeleteTarget] = useState<SkillInfo | null>(null);
+ const [installedSearch, setIns
|
|
src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx > AskUserQuestionCard > deselects a blank multi-select Other answer and omits it from submission:
src/web-ui/src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx#L269
AssertionError: expected undefined to be false // Object.is equality
- Expected:
false
+ Received:
undefined
❯ src/flow_chat/tool-cards/AskUserQuestionCard.test.tsx:269:36
|
|
CLI Tests (macos-15)
Process completed with exit code 101.
|
|
Tauri Windows test-loader limitation
The desktop test harness hit upstream Tauri issue #13419 before any Rust test ran. Compilation and the cross-platform product-control contracts remain blocking.
|