"use client"; import { useState } from "react"; import { X } from "lucide-react"; import { ThinkingIndicator } from "@/components/ThinkingIndicator"; import { Button } from "@/components/ui/Button"; import { SectionHeader } from "@/components/ui/SectionHeader"; import { StatusNote } from "@/components/ui/StatusNote"; import { GeneratorRunner } from "@/components/toolbox/GeneratorRunner"; import type { ToolDescriptorView } from "@/lib/api/types"; import { isLegacyTool } from "@/lib/toolbox/toolbox"; import { useToolboxTools } from "@/lib/toolbox/useToolboxTools"; interface InlineToolboxProps { projectId: string; // 把生成结果插入正文(追加到章末)。 onInsertText: (text: string) => void; // 当前正文(编辑器 text)。透传给 GeneratorRunner,供 book-title 等据正文反推 brief。 manuscriptText?: string; onClose: () => void; } // 编辑器内联工具箱(不离开写作界面):列出生成器(含金手指),就地生成结构化预览, // 文本类产物点「插入正文」直接填入写作处,可入库类走既有 ingest。legacy 生成器(世界观/ // 人设/大纲)仍走各自更丰富的独立页,不塞进内联面板。 export function InlineToolbox({ projectId, onInsertText, manuscriptText, onClose, }: InlineToolboxProps) { const { status, tools } = useToolboxTools(); const [active, setActive] = useState(null); const openable = tools.filter((tool) => !isLegacyTool(tool)); return (
{active ? (
setActive(null)} onInsertText={(text) => { if (text.trim().length > 0) onInsertText(text); }} />
) : status === "loading" ? (
) : status === "error" ? (

请检查后端连接后重开。

) : openable.length === 0 ? (

暂无可内联调用的生成器。

) : ( )}
); }