diff --git a/src/web-ui/src/app/scenes/agents/AgentsScene.tsx b/src/web-ui/src/app/scenes/agents/AgentsScene.tsx index 50bf185d..c228a625 100644 --- a/src/web-ui/src/app/scenes/agents/AgentsScene.tsx +++ b/src/web-ui/src/app/scenes/agents/AgentsScene.tsx @@ -22,6 +22,7 @@ import { GalleryZone, } from '@/app/components'; import AgentCard from './components/AgentCard'; +import CoreAgentCard, { type CoreAgentMeta } from './components/CoreAgentCard'; import AgentTeamCard from './components/AgentTeamCard'; import AgentTeamTabBar from './components/AgentTeamTabBar'; import AgentGallery from './components/AgentGallery'; @@ -44,6 +45,14 @@ import './AgentsScene.scss'; const EXAMPLE_TEAM_IDS = new Set(MOCK_AGENT_TEAMS.map((team) => team.id)); +const CORE_AGENT_IDS = new Set(['Claw', 'agentic', 'Cowork']); + +const CORE_AGENT_META: Record = { + Claw: { role: '个人助理', accentColor: '#f59e0b', accentBg: 'rgba(245,158,11,0.10)' }, + agentic: { role: '编码专业智能体', accentColor: '#6366f1', accentBg: 'rgba(99,102,241,0.10)' }, + Cowork: { role: '办公智能体', accentColor: '#14b8a6', accentBg: 'rgba(20,184,166,0.10)' }, +}; + const AgentTeamEditorView: React.FC = () => { const { t } = useTranslation('scenes/agents'); const { openHome } = useAgentsStore(); @@ -121,6 +130,8 @@ const AgentsHomeView: React.FC = () => { return team.name.toLowerCase().includes(query) || team.description.toLowerCase().includes(query); }), [agentTeams, searchQuery]); + const coreAgents = useMemo(() => allAgents.filter((agent) => CORE_AGENT_IDS.has(agent.id)), [allAgents]); + const handleCreateTeam = useCallback(() => { const id = `agent-team-${Date.now()}`; addAgentTeam({ @@ -214,6 +225,13 @@ const AgentsHomeView: React.FC = () => { subtitle={t('page.subtitle')} extraContent={(
+ -
-
- installed.setFormPath(e.target.value)} - variant="outlined" - /> - -
-
- {t('form.path.hint')} -
- - {installed.isValidating ? ( -
{t('form.validating')}
- ) : null} - - {installed.validationResult ? ( -
- {installed.validationResult.valid ? ( - <> -
- {installed.validationResult.name} -
-
- {installed.validationResult.description} -
- - ) : ( -
- {installed.validationResult.error} -
- )} -
- ) : null} - -
- - -
- - ) : null} - {installed.loading ? : null} {!installed.loading && installed.error ? ( @@ -548,6 +437,109 @@ const SkillsScene: React.FC = () => { ) : null} + { + installed.resetForm(); + setAddFormOpen(false); + }} + title={t('form.title')} + size="small" + > +
+ installed.setFormPath(e.target.value)} + variant="outlined" + /> + +
+
+ {t('form.path.hint')} +
+ + {installed.isValidating ? ( +
{t('form.validating')}
+ ) : null} + + {installed.validationResult ? ( +
+ {installed.validationResult.valid ? ( + <> +
+ {installed.validationResult.name} +
+
+ {installed.validationResult.description} +
+ + ) : ( +
+ {installed.validationResult.error} +
+ )} +
+ ) : null} + +
+ + +
+ +
+ setDeleteTarget(null)} diff --git a/src/web-ui/src/component-library/components/Markdown/Markdown.scss b/src/web-ui/src/component-library/components/Markdown/Markdown.scss index 645e75ee..a72c9032 100644 --- a/src/web-ui/src/component-library/components/Markdown/Markdown.scss +++ b/src/web-ui/src/component-library/components/Markdown/Markdown.scss @@ -259,7 +259,8 @@ .markdown-renderer .copy-button { position: absolute; - top: 0.75rem; + top: 50%; + transform: translateY(-50%); right: 0.75rem; padding: 0.5rem; background: transparent; @@ -267,7 +268,7 @@ border-radius: 6px; color: rgba(255, 255, 255, 0.5); cursor: pointer; - transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); + transition: color 0.25s cubic-bezier(0.4, 0, 0.2, 1), background 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; @@ -289,11 +290,11 @@ .markdown-renderer .copy-button:hover { background: transparent; color: #3b82f6; - transform: scale(1.1); + transform: translateY(-50%) scale(1.1); } .markdown-renderer .copy-button:active { - transform: scale(1); + transform: translateY(-50%) scale(1); color: #2563eb; } diff --git a/src/web-ui/src/flow_chat/components/ChatInput.scss b/src/web-ui/src/flow_chat/components/ChatInput.scss index ca68401b..6f27997d 100644 --- a/src/web-ui/src/flow_chat/components/ChatInput.scss +++ b/src/web-ui/src/flow_chat/components/ChatInput.scss @@ -70,27 +70,54 @@ max-height: 42px; padding: 0 18px; border-radius: 999px; - background: var(--color-bg-tertiary); - border: none; + background: rgba(18, 18, 28, 0.22); + border: 1px solid rgba(255, 255, 255, 0.1); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); box-shadow: - 0 2px 8px rgba(0, 0, 0, 0.12), - inset 0 0 0 1px rgba(255, 255, 255, 0.06), - inset 0 1px 0 rgba(255, 255, 255, 0.04); + 0 2px 8px rgba(0, 0, 0, 0.1), + inset 0 1px 0 rgba(255, 255, 255, 0.06); flex-direction: row; align-items: center; gap: 8px; &:hover { - background: var(--color-bg-elevated); - border: 1px solid rgba(100, 150, 255, 0.25); + background: rgba(25, 25, 40, 0.38); + border: 1px solid rgba(100, 150, 255, 0.2); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); box-shadow: - 0 6px 20px rgba(0, 0, 0, 0.35), - 0 0 15px rgba(100, 140, 255, 0.1), - inset 0 1px 0 rgba(255, 255, 255, 0.1); + 0 4px 16px rgba(0, 0, 0, 0.18), + inset 0 1px 0 rgba(255, 255, 255, 0.08); transform: translateY(-2px); } } + // Light theme overrides for the collapsed capsule + :root[data-theme="light"] &, + :root[data-theme-type="light"] &, + .light & { + .bitfun-chat-input__box { + background: rgba(255, 255, 255, 0.28); + border: 1px solid rgba(0, 0, 0, 0.08); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + box-shadow: + 0 2px 8px rgba(0, 0, 0, 0.06), + inset 0 1px 0 rgba(255, 255, 255, 0.8); + + &:hover { + background: rgba(255, 255, 255, 0.45); + border: 1px solid rgba(80, 120, 255, 0.18); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + box-shadow: + 0 4px 16px rgba(0, 0, 0, 0.08), + inset 0 1px 0 rgba(255, 255, 255, 0.9); + } + } + } + .bitfun-chat-input__expand-button, .bitfun-chat-input__template-hint, .bitfun-chat-input__cowork-examples, diff --git a/src/web-ui/src/locales/en-US/flow-chat.json b/src/web-ui/src/locales/en-US/flow-chat.json index ad1a595b..e0c93658 100644 --- a/src/web-ui/src/locales/en-US/flow-chat.json +++ b/src/web-ui/src/locales/en-US/flow-chat.json @@ -122,7 +122,7 @@ "willSendAfterStop": "Will send after stop", "openWorkspaceFolder": "Open workspace folder", "openWorkspaceFolderFailed": "Failed to open workspace folder: {{error}}", - "spaceToActivate": "Press Space to tell me what you'd like to do" + "spaceToActivate": "Press Space to type" }, "context": { "title": "Context", diff --git a/src/web-ui/src/locales/en-US/scenes/agents.json b/src/web-ui/src/locales/en-US/scenes/agents.json index 91c448eb..86adc4ef 100644 --- a/src/web-ui/src/locales/en-US/scenes/agents.json +++ b/src/web-ui/src/locales/en-US/scenes/agents.json @@ -15,6 +15,7 @@ "refresh": "Refresh" }, "nav": { + "coreAgents": "Core Agents", "agents": "Agent", "teams": "Agent Team" }, @@ -115,6 +116,12 @@ "strategySeq": "Sequential", "strategyFree": "Free" }, + "coreAgentsZone": { + "title": "Core Agents", + "subtitle": "Built-in core agent modes covering mainstream AI workflows, ready to use out of the box.", + "empty": "No core agents detected", + "roleLabel": "Primary Use · " + }, "agentsZone": { "title": "Agents Overview", "subtitle": "Browse all agents and sub-agents, then manage solo usage, tools, and skills directly.", diff --git a/src/web-ui/src/locales/zh-CN/flow-chat.json b/src/web-ui/src/locales/zh-CN/flow-chat.json index e2a0fff7..6aa94427 100644 --- a/src/web-ui/src/locales/zh-CN/flow-chat.json +++ b/src/web-ui/src/locales/zh-CN/flow-chat.json @@ -122,7 +122,7 @@ "willSendAfterStop": "将在停止后发送", "openWorkspaceFolder": "打开工作区文件夹", "openWorkspaceFolderFailed": "打开工作区文件夹失败:{{error}}", - "spaceToActivate": "按空格键说说你想做什么" + "spaceToActivate": "按空格键快速键入" }, "context": { "title": "上下文", diff --git a/src/web-ui/src/locales/zh-CN/scenes/agents.json b/src/web-ui/src/locales/zh-CN/scenes/agents.json index 2c8b451a..40af342a 100644 --- a/src/web-ui/src/locales/zh-CN/scenes/agents.json +++ b/src/web-ui/src/locales/zh-CN/scenes/agents.json @@ -15,6 +15,7 @@ "refresh": "刷新" }, "nav": { + "coreAgents": "核心智能体", "agents": "Agent", "teams": "Agent Team" }, @@ -115,6 +116,12 @@ "strategySeq": "顺序", "strategyFree": "自由" }, + "coreAgentsZone": { + "title": "核心智能体", + "subtitle": "平台内置的核心 Agent 模式,覆盖主流 AI 工作流,开箱即用。", + "empty": "暂未检测到核心智能体", + "roleLabel": "主要应用 · " + }, "agentsZone": { "title": "Agent 总览", "subtitle": "查看所有 Agent / Sub-Agent,并直接管理独立启用、工具与 Skills。",