feat(hands): restructure Hands UI with Chinese localization

Major changes:
- Add HandList.tsx component for left sidebar
- Add HandTaskPanel.tsx for middle content area
- Restructure Sidebar tabs: 分身/HANDS/Workflow
- Remove Hands tab from RightPanel
- Localize all UI text to Chinese
- Archive legacy OpenClaw documentation
- Add Hands integration lessons document
- Update feature checklist with new components

UI improvements:
- Left sidebar now shows Hands list with status icons
- Middle area shows selected Hand's tasks and results
- Consistent styling with Tailwind CSS
- Chinese status labels and buttons

Documentation:
- Create docs/archive/openclaw-legacy/ for old docs
- Add docs/knowledge-base/hands-integration-lessons.md
- Update docs/knowledge-base/feature-checklist.md
- Update docs/knowledge-base/README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
iven
2026-03-14 23:16:32 +08:00
parent 67e1da635d
commit 07079293f4
126 changed files with 36229 additions and 1035 deletions

View File

@@ -3,7 +3,7 @@ import { MessageSquare, Trash2, SquarePen } from 'lucide-react';
export function ConversationList() {
const {
conversations, currentConversationId, messages,
conversations, currentConversationId, messages, agents, currentAgent,
newConversation, switchConversation, deleteConversation,
} = useChatStore();
@@ -33,7 +33,7 @@ export function ConversationList() {
<div className="flex-1 min-w-0">
<div className="text-xs font-medium text-orange-700 truncate"></div>
<div className="text-[11px] text-orange-500 truncate">
{messages.filter(m => m.role === 'user').length}
{messages.filter(m => m.role === 'user').length} · {currentAgent?.name || 'ZCLAW'}
</div>
</div>
</div>
@@ -44,6 +44,9 @@ export function ConversationList() {
const isActive = conv.id === currentConversationId;
const msgCount = conv.messages.filter(m => m.role === 'user').length;
const timeStr = formatTime(conv.updatedAt);
const agentName = conv.agentId
? agents.find((agent) => agent.id === conv.agentId)?.name || conv.agentId
: 'ZCLAW';
return (
<div
@@ -63,7 +66,7 @@ export function ConversationList() {
{conv.title}
</div>
<div className="text-[11px] text-gray-400 truncate">
{msgCount} · {timeStr}
{msgCount} · {agentName} · {timeStr}
</div>
</div>
<button