Merge pull request #2708 from kev1n77/fmy/ui-sys #5721
ci.yml
on: push
Build Impact
23s
Shell Deploy Scripts
22s
Matrix: cli-test
Matrix: Impact-selected Linux / Relay Contract / build
Waiting for pending jobs
Matrix: rust-build-check
DSH Profile Packaging (windows-latest)
Frontend Build
6m 4s
Rust / CLI Validation
10s
Annotations
2 errors and 9 warnings
|
Frontend Build
Process completed with exit code 1.
|
|
src/flow_chat/components/ChatInputWorkspaceStripLayout.test.ts > composer context track layout > shows the current mode icon in the compact add menu while keeping profile icons in the list:
src/web-ui/src/flow_chat/components/ChatInputWorkspaceStripLayout.test.ts#L421
AssertionError: expected 'import React, { useCallback, useEffec…' to match /minimal: Scan,[\s\S]*?balanced: Grid2…/
- Expected:
/minimal: Scan,[\s\S]*?balanced: Grid2X2,[\s\S]*?ultimate: Grid3X3,/
+ Received:
"import React, { useCallback, useEffect, useId, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
import { Bot } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import { Icon, Menu, MenuItem, MenuSection, MenuSeparator, type IconName } from '@bitfun/ui';
import { Tooltip } from '@/component-library';
import { getAppearanceOverlayHost } from '@/infrastructure/appearance/runtime/AppearanceOverlayHost';
import { notificationService } from '@/shared/notification-system';
import { useAnchoredPopoverPosition } from '@/shared/utils/useAnchoredPopoverPosition';
import { useSideAnchoredPopoverPosition } from '@/shared/utils/useSideAnchoredPopoverPosition';
import './HarnessProfileSelector.scss';
export type HarnessProfileId = KnownHarnessProfileId | (string & {});
export type KnownHarnessProfileId =
| 'minimal'
| 'balanced'
| 'ultimate'
| 'creative'
| 'other';
export type SelectableHarnessProfileId = 'minimal' | 'balanced' | 'ultimate' | 'creative';
export interface HarnessAgentOption {
id: string;
name: string;
available?: boolean;
}
export type HarnessNewSessionSelection =
| { kind: 'profile'; id: SelectableHarnessProfileId }
| { kind: 'agent'; id: string };
export type HarnessProfileSelectorPresentation = 'standalone' | 'menu-item';
interface HarnessProfileSelectorProps {
/** Session still runs a legacy fixed mode and cannot switch. */
legacySession?: boolean;
/** The Session has accepted its first runtime Turn, so Harness and main Agent are fixed. */
sessionStarted?: boolean;
selectedProfile: HarnessProfileId;
selectedAgentId?: string;
otherAgents?: HarnessAgentOption[];
disabled?: boolean;
/**
* `standalone` anchors the picker to its own floating trigger. `menu-item`
* turns that trigger into a row inside a parent action menu and opens the
* secondary picker beside it in the shared overlay layer.
*/
presentation?: HarnessProfileSelectorPresentation;
onSelectProfile: (profileId: SelectableHarnessProfileId) => void | Promise<void>;
onSelectAgent?: (agentId: string) => void | Promise<void>;
onStartNewSession?: (
selection: HarnessNewSessionSelection,
) => void | Promise<void>;
/** Lets a parent action menu close after a terminal selection. */
onSelectionComplete?: () => void;
}
const PROFILE_IDS: KnownHarnessProfileId[] = [
'minimal',
'balanced',
'ultimate',
'creative',
'other',
];
type DensityHarnessProfileId = 'minimal' | 'balanced' | 'ultimate';
const PROFILE_GEARS: Record<DensityHarnessProfileId, 1 | 2 | 3> = {
minimal: 1,
balanced: 2,
ultimate: 3,
};
const PROFILE_ICONS: Record<SelectableHarnessProfileId, IconName> = {
minimal: 'minimal',
balanced: 'standard',
ultimate: 'ultimate',
creative: 'creative',
};
function isDensityProfile(profile: KnownHarnessProfileId): profile is DensityHarnessProfileId {
return profile === 'minimal' || profile === 'balanced' || profile === 'ultimate';
}
function isSelectableProfile(
profile: KnownHarnessProfileId,
): profile is SelectableHarnessProfileId {
return isDensityProfile(profile) || profile === 'creative';
}
function sameAgent(left: string | null | undefined, right: string | null | undefined): boolean {
return left?.trim().toLowerCase() === right?.trim().toLowerCase();
}
/** Menu rows and the compact add-menu trigger share one mode mark. */
function HarnessProfileMark({
profile,
}: {
profile: KnownHarnessProfileId;
}): React.ReactElement {
const densityProfile = isDensityProfile(profile) ? profile : undefined;
return (
<span
className=\"bitfun-harness-selector__density-mark\"
data-harness-profile={profile}
data-harness-density={densityProfile ? PROFILE_GEARS[densityProfile] : 0}
aria-hidden
>
{profile === 'other' ? (
<Bot
className=\"bitfun-harness-select
|
|
Frontend Build:
src/web-ui/src/flow_chat/tool-cards/AgentWaitToolCard.tsx#L17
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/flow_chat/components/voice/RealtimeVoiceCallContext.tsx#L32
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/flow_chat/components/voice/RealtimeVoiceCallContext.tsx#L23
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/flow_chat/components/ReasoningPresetSelector.tsx#L113
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/flow_chat/components/ReasoningPresetSelector.tsx#L36
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/app/stores/sceneStore.ts#L147
'navCursor' is never reassigned. Use 'const' instead
|
|
Frontend Build:
src/web-ui/src/app/stores/sceneStore.ts#L146
'navHistory' is never reassigned. Use 'const' instead
|
|
Frontend Build:
src/web-ui/src/app/components/SceneTopBar/SceneChrome.tsx#L121
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|
|
Frontend Build:
src/web-ui/src/app/components/NavPanel/components/DeviceArtwork.tsx#L6
Fast refresh only works when a file only exports components. Use a new file to share constants or functions between components
|