feat: DeerFlow 2.0 core capabilities — Phase 1.0 + 1.1
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

Phase 1.0 — Butler Mode UI:
- Hide "自动化" and "技能市场" entries from sidebar navigation
- Remove AutomationPanel and SkillMarket view rendering from App.tsx
- Simplify MainViewType to only 'chat'
- Main interface is now: chat + conversation list + detail panel only

Phase 1.1 — Mode Differentiation:
- Add subagent_enabled field to ChatModeConfig (Rust), StreamChatRequest (Tauri),
  gateway-client, kernel-client, saas-relay-client, and streamStore
- TaskTool is now only registered when subagent_enabled=true (Ultra mode)
- System prompt includes sub-agent delegation instructions only in Ultra mode
- Frontend transmits subagent_enabled from ChatMode config through the full stack

This connects the 4-tier mode selector (Flash/Thinking/Pro/Ultra) to actual
backend behavioral differences — Ultra mode now truly enables sub-agent delegation.
This commit is contained in:
iven
2026-04-06 12:46:43 +08:00
parent 9c346ed6fb
commit cb140b5151
10 changed files with 72 additions and 105 deletions

View File

@@ -1,7 +1,7 @@
import { useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import {
SquarePen, MessageSquare, Bot, Search, X, Settings, Zap, Sparkles
SquarePen, MessageSquare, Bot, Search, X, Settings
} from 'lucide-react';
import { ConversationList } from './ConversationList';
import { CloneManager } from './CloneManager';
@@ -15,7 +15,7 @@ const sidebarTabVariants = {
exit: { opacity: 0, transition: { duration: 0.1 } },
};
export type MainViewType = 'chat' | 'automation' | 'skills';
export type MainViewType = 'chat';
interface SidebarProps {
onOpenSettings?: () => void;
@@ -89,23 +89,6 @@ export function Sidebar({
</button>
{/* Divider between primary nav and secondary tools */}
<div className="mx-1 my-1 border-t border-[#e8e6e1]/40 dark:border-gray-800" />
<button
onClick={() => onMainViewChange?.('automation')}
className="w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm text-gray-600 dark:text-gray-400 hover:bg-black/5 dark:hover:bg-white/5 transition-colors"
>
<Zap className="w-4 h-4" />
</button>
<button
onClick={() => onMainViewChange?.('skills')}
className="w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm text-gray-600 dark:text-gray-400 hover:bg-black/5 dark:hover:bg-white/5 transition-colors"
>
<Sparkles className="w-4 h-4" />
</button>
</div>
{/* Divider */}