| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import { createDirectory, readFile, writeFile } from "@/commands/fs"
- import { hasOutlineForRefinement, generateOutlineRefinementFiles } from "@/lib/novel/outline-generation"
- import { useWikiStore, type LlmConfig } from "@/stores/wiki-store"
- const PROJECT_PATH = "/acceptance-refine-project"
- const OUTLINES_DIR = `${PROJECT_PATH}/wiki/outlines`
- const OUTLINE_PATH = `${OUTLINES_DIR}/story-outline.md`
- const IMPORTED_OUTLINE = [
- "---",
- "type: outline",
- 'title: "导入示例总纲"',
- "---",
- "",
- "# 导入示例总纲",
- "",
- "## 故事核心",
- "- 主角因旧案回到故乡,卷入多方势力争夺。",
- "",
- "## 卷一目标",
- "- 查明第一起失踪案的真实动机。",
- "",
- "## 卷二目标",
- "- 揭示幕后组织与主角家族的关联。",
- "",
- "## 长线伏笔",
- "- 失踪名单中的同姓者身份。",
- "- 夜潮会账本缺页来源。",
- "",
- ].join("\n")
- const llmConfig: LlmConfig = {
- provider: "custom",
- apiKey: "",
- model: "mock-refine-model",
- ollamaUrl: "http://127.0.0.1:11434",
- customEndpoint: "http://127.0.0.1:18080",
- maxContextSize: 131072,
- apiMode: "chat_completions",
- reasoning: { mode: "off" },
- }
- async function main() {
- console.log("[accept] start")
- useWikiStore.getState().setNovelMode(true)
- await createDirectory(OUTLINES_DIR)
- await writeFile(OUTLINE_PATH, IMPORTED_OUTLINE)
- console.log("[accept] outline imported:", OUTLINE_PATH)
- const canRefine = await hasOutlineForRefinement(PROJECT_PATH)
- console.log("[accept] hasOutlineForRefinement:", canRefine)
- if (!canRefine) {
- throw new Error("Outline import check failed: hasOutlineForRefinement=false")
- }
- console.log("[accept] submit refine generation ...")
- const result = await generateOutlineRefinementFiles(
- PROJECT_PATH,
- llmConfig,
- "请基于已有总纲,细化第一卷章节推进,并补全人物、组织、能力体系、伏笔与地点设定。",
- )
- console.log("[accept] refine generated:", result.writtenPaths.length)
- const written = await Promise.all(
- result.writtenPaths.map(async (path) => {
- const content = await readFile(path)
- const firstLine = content.split("\n").find((line) => line.trim().length > 0) ?? ""
- return { path, firstLine, length: content.length }
- }),
- )
- console.log(JSON.stringify({
- projectPath: PROJECT_PATH,
- importedOutline: OUTLINE_PATH,
- primaryPath: result.primaryPath,
- writtenCount: result.writtenPaths.length,
- written,
- }, null, 2))
- }
- main().catch((error) => {
- console.error(error instanceof Error ? error.stack ?? error.message : String(error))
- process.exit(1)
- })
|