# 4-43 [done] 侧栏「复制页面」从 `/api/documents/duplicate` 迁移到 `/api/tree/commands`

> 更新时间：2026-05-16
>
> 状态：`done`

## 问题

`sidebar.tsx:924` 的 `handleDuplicateDocument` 直接 `fetch("/api/documents/duplicate")`，走旧 Next.js compat 路由，不经过 Rust tree command 链，不生成 tree domain event。

## 修复

改为调用 `tree-command-client.ts` 中已有的 `copyTreeCommand`，POST 到 `/api/tree/commands`，使用 `action: "copy"` + Rust `tree.subtree.copy` 命令。

## 证据

- `wolai-frontend/src/components/sidebar/sidebar.tsx`：`handleDuplicateDocument` 改为 `copyTreeCommand({ targetParentId: null, items: [{ documentId: node.id, recursive: true }] })`
- `wolai-frontend/src/components/sidebar/sidebar.tsx`：import 新增 `copyTreeCommand`
- 验证：单页面复制后 `/api/tree/commands` 应收到 `action: "copy"`，不走 `/api/documents/duplicate`
