feat: add NovelPage component with bookshelf, open book, and reading views

This commit is contained in:
2026-06-02 08:19:38 +08:00
parent 54e17c9795
commit 81b0d0ea1f
39 changed files with 8057 additions and 64 deletions

View File

@@ -0,0 +1,6 @@
{
"persona": "主角表面温文尔雅、恪守使者礼节,实则杀伐果断、胸怀大格局。受辱时隐忍记账,关键节点一击致命。拥有超越时代的信息差与历史推演金手指,善于借势与布局,从单枪匹马到建立西域都护府权威。",
"highlight": "1. 身份反差所有人都当他是落魄流民直到汉节与国书亮相震惊全场。2. 文明降维打击用冶铁、造纸、兵法碾压西域各方势力。3. 外交爽文舌战群胡、以一人退一国之兵。4. 势力养成:收服三十六国,在异域复刻大汉盛世。",
"experience": "第三人称有限视角跟随主角,初期通过旁观者的鄙夷积蓄压抑,中后期在亮身份、展实力时拉远镜头,放大旁观者的跪服与匈奴使者的恐惧,形成反复打脸爽感。每场外交冲突都按铺垫→加压→以汉威逆转的结构推进。",
"forbiddenZones": "禁止主角长期忍气吞声无所作为、禁止汉使身份被长期误解不开封、禁止面对胡人欺辱时以德报怨挫折控制在1章内且必须立刻给出明确反击预期。"
}

View File

@@ -0,0 +1,11 @@
{
"id": "我是汉使-谁敢不敬",
"title": "我是汉使,谁敢不敬",
"allowedFlowIds": [
"power-reveal",
"face-slap-rise",
"alliance-dominate"
],
"createdAt": "2026-06-01T10:36:45.755451",
"updatedAt": "2026-06-01T10:56:58.330409"
}

View File

@@ -0,0 +1,120 @@
{
"coarseOutline": {
"events": [
{
"id": "evt-1",
"title": "流落楼兰,身份的蛰伏",
"summary": "主角衣衫褴褛抵达楼兰城外,被守城胡兵当成逃难流民肆意驱赶羞辱。主角冷眼观察局势,暗中记录下所有侮辱,等待时机。入城后被安置在最低贱的商贾聚集区。",
"order": 1
},
{
"id": "evt-2",
"title": "匈奴使团嚣张登场,压抑升级",
"summary": "匈奴特使率领百骑使团入城,楼兰王卑躬屈膝迎接。匈奴使者在市集当众嘲笑汉人弱如羔羊,主角被推搡却不动声色,只展露些许冶铁知识换取铁匠铺收留,埋下反击伏笔。",
"order": 2
},
{
"id": "evt-3",
"title": "纸刀初试,小胜立威",
"summary": "匈奴人再次当众侮辱主角,逼其钻胯。主角以“教你们写汉字”为赌约,用刚造出的粗糙纸张和断笔,当众写下檄文,暗讽匈奴无文。贵族们对纸惊为神物,主角赢得楼兰大商人的庇护,匈奴使吃瘪离去。",
"order": 3
},
{
"id": "evt-4",
"title": "王宫夜宴亮汉节,身份反转",
"summary": "楼兰王宴请匈奴使,主角被大商贾带入宴席。匈奴使阁楼内强迫楼兰王交出“汉人奸细”处死,主角缓步出列,手捧封尘汉节,展开黄绫国书,朗声道:“大汉使臣张明,持节出使西域三十六国,谁敢不敬?”全场死寂,匈奴使脸色煞白。",
"order": 4
},
{
"id": "evt-5",
"title": "斩杀匈奴使,楼兰臣服",
"summary": "匈奴使强辩汉节是伪造,命令护卫拿下主角。主角喝破楼兰王昔日杀汉使将招致灭国之祸,并当场宣读大汉讨罪檄文。在楼兰王犹豫之际,主角以迅雷之势拔出随从暗藏环首刀,亲手斩杀匈奴正使,威震大殿。楼兰王跪伏,愿为汉属。",
"order": 5
},
{
"id": "evt-6",
"title": "以寡敌众,冶铁骑兵显威",
"summary": "匈奴副使逃出带领城外百骑反扑,主角早有准备,调遣楼兰城卫,并用改良的冶铁马蹄铁和简易马镫装备了二十人骑兵小队,正面冲垮毫无防备的匈奴骑兵。一战斩首七十,俘虏三十,彻底打垮楼兰境内匈奴势力。",
"order": 6
},
{
"id": "evt-7",
"title": "楼兰盟约,都护雏形",
"summary": "主角与楼兰王歃血为盟,设立汉使常驻衙门,推行简易汉律保护商路。同时放出流言:大汉西域都护府即将设立,归附者可得冶铁、造纸之术。周边小国开始遣使试探。",
"order": 7
},
{
"id": "evt-8",
"title": "车师设局,舌战降服",
"summary": "车师国受匈奴蛊惑扣押汉商队,主角仅带十骑赴会。在王庭之上,车师王列甲士恐吓,主角从容陈说匈奴败亡之势,并以楼兰之变震慑,允诺开放贸易和冶铁秘法。车师贵族分裂,最终斩杀亲匈奴大臣,迎汉使入驻。",
"order": 8
},
{
"id": "evt-9",
"title": "三十六国初盟,匈奴单于震怒",
"summary": "半年间,主角借商业和文明技术输出,接连与十余国结盟。一次盟会上,主角正式打出“大汉西域都护府”旗号,诸国共尊汉使为都护。消息传到漠北,匈奴单于怒极,下令三万铁骑西征,誓要血洗西域汉势力。",
"order": 9
},
{
"id": "evt-10",
"title": "大漠烽烟,以少胜多",
"summary": "主角利用信息差,提前获知匈奴行军路线,以兵法“围点打援”诱敌深入。集结诸国联军八千,在干涸河床设伏,用改良的硬弩和连环马阵正面击溃匈奴前锋,再以火攻断其辎重。匈奴单于亲率的中军溃败,折损过半,仓皇东逃。",
"order": 10
},
{
"id": "evt-11",
"title": "丝路重开,万邦来朝",
"summary": "主角将缴获的匈奴单于金箭与捷报一同传往长安。汉武帝大喜,正式册封主角为西域都护,授权统管西域。丝绸之路全线贯通,大汉商队、工匠、文人涌入西域,诸国争相效仿汉制。主角立于都护府高台,俯瞰一片繁华,当年那些羞辱过他的人早已化为尘埃。",
"order": 11
}
],
"version": 1
},
"events": {
"evt-1": {
"emotionFlowId": "alliance-dominate",
"flowStepsPlan": {
"起": "主角孤身抵达楼兰城外,衣着破烂,人脉与资源为零。被守城胡兵当作流民百般羞辱驱赶,主角隐忍观察,暗中记录所有折辱者面孔与背景,最终被丢到最低贱的商贾聚集区。此时主角处于绝对弱势,积蓄着对胡人傲慢的认识与反击的渴望。",
"承": "在商贾区,主角利用超越时代的知识小露锋芒,比如用古法提纯井盐、鉴别劣质铁器。这些举动引起了几类人的注意:落魄的本地护卫、被排挤的西域小商贩,以及楼兰城中一名失势贵族管家。主角刻意展示出自己‘虽落魄却有秘术’的价值,为后续结盟埋下伏笔。",
"转": "楼兰城中某个小权贵欲吞占商贾区,设局陷害聚集区商户。主角在暗中洞悉阴谋,指使刚结交的护卫提前揭露,并在众人面前以智谋反制,让权贵当众出丑。此事令那失势贵族管家背后的小主子意识到主角不凡,主动邀约,主角以‘各取所需’的姿态赢得其暂时效忠,完成第一次关键人收服。",
"合": "主角以这失势贵族为跳板,在商贾区建立初步的情报网络,收服了第一批追随者——护卫担任贴身力量,小商贩负责打探消息,失势贵族提供身份掩护。虽然依旧隐藏汉使身份,但一个以他为核心的微型势力雏形已在楼兰底层成型,为后续朝堂亮相、收服三十六国埋下暗线。"
},
"chapterPlan": [
{
"seq": 1,
"phaseKey": "起",
"phaseSlice": "全",
"brief": "主角衣衫褴褛到楼兰城下,被胡兵当难民拖拽驱赶、吐口水羞辱,他一言不发冷眼观察。城门口,一名胡商因货物被刁难,主角用简单西域话帮其解围,展露冷静思维。最终被丢入最混乱的商贾区,在破棚里用手刻下第一个仇人名字。爽点:冷静隐忍与记账的伏笔,通过旁人对‘这个乞丐居然会西域话’的诧异铺垫反差。",
"status": "planned"
},
{
"seq": 2,
"phaseKey": "承",
"phaseSlice": "全",
"brief": "主角以替人写书信、鉴别货物真伪在商贾区站稳脚跟,用提纯粗盐的方法让一名小贩获利三倍,引发小轰动。落魄护卫昆图目睹后主动试探,主角故意露一手卸骨擒拿术震慑对方。同时引起失势贵族之管家注意。爽点:文明降维打击——人人当他是流民,他却随手点石成金,周围人从轻蔑转为巴结。",
"status": "planned"
},
{
"seq": 3,
"phaseKey": "转",
"phaseSlice": "全",
"brief": "小权贵古尔贡欲用‘盗窃军马’罪名强占商贾区,抓走两名商贩。主角让昆图护住证人,自己通过管家带话给失势贵族,以三句话点破古尔贡布局的漏洞。在古尔贡带兵来封市时,主角当众拆穿伪造证据,并反手指控其勾结马贼,围观胡人从嘲弄变为惊惧。古尔贡被当街打脸,失势贵族公开表态庇护商圈。爽点:以一介贱民之身,翻手间让权贵灰头土脸,旁观者倒戈,首次展示翻云覆雨的智谋。",
"status": "planned"
},
{
"seq": 4,
"phaseKey": "合",
"phaseSlice": "全",
"brief": "事后失势贵族幼主密邀主角,试探其来历。主角只展露汉节一角却不宣明身份,提出互利之约:贵族借主角之智复起,主角借贵族之便铺开暗棋。昆图宣誓效忠,小贩们主动成为眼线。主角在商贾区租下一处院落,挂上破损卦幡,以此为据点开始收集三十六国情报。爽点:收服班底、势力雏形确立,身份依旧成谜但威势已成,为下一阶段亮明汉使身份蓄满张力。",
"status": "planned"
}
]
}
},
"progress": {
"currentChapterSeq": 0,
"charOffset": 0,
"ttsPaused": false,
"genPaused": false
}
}

View File

@@ -0,0 +1,11 @@
{
"status": "error",
"pipelineStage": "event_plan",
"stage": "error",
"message": "事件纲要生成失败",
"progress": {
"done": 0,
"total": 11
},
"updatedAt": "2026-06-01T11:56:27.977792"
}

View File

@@ -0,0 +1,13 @@
{
"prompts": {
"openBook": "你是爽文开书优化助手。根据用户提供的创作灵感,输出结构化的开书方案。\n\n要求\n1. 提炼并优化用户灵感,使其更适合网文爽文节奏。\n2. 生成 guide 世界书草稿persona主角人设、highlight核心爽点、experience读者体验/视角策略、forbiddenZones创作禁区。\n3. 从提供的情绪流 catalog 中挑选 14 个最匹配的 flow id 写入 allowedFlowIds。\n4. 建议一个简洁有力的书名。\n\n只输出 JSON不要 markdown 代码块外的文字:\n{\n \"title\": \"书名\",\n \"optimizedIntro\": \"优化后的开书灵感\",\n \"guide\": {\n \"persona\": \"...\",\n \"highlight\": \"...\",\n \"experience\": \"...\",\n \"forbiddenZones\": \"...\"\n },\n \"allowedFlowIds\": [\"flow-id\"]\n}",
"coarseOutline": "你是爽文大纲助手。根据当前书籍设定与进度,生成/修订粗纲(事件链级别,非细章)。\n\n输出 JSON\n{\n \"events\": [\n { \"id\": \"evt-1\", \"title\": \"事件标题\", \"summary\": \"事件概要\", \"emotionFlowId\": \"可选\" }\n ],\n \"version\": 1\n}",
"eventPlan": "你是爽文事件规划助手。将粗纲中的某个事件展开为可执行的章节级计划。\n\n输出 JSON包含章节序号建议、每章核心冲突与爽点类型。",
"chapter": "你是爽文章节写作助手。根据当前事件计划、guide 设定与上文,撰写本章正文。\n\n要求节奏明快、对话推动冲突、每章末尾留钩子。输出 JSON\n{ \"title\": \"章标题\", \"body\": \"正文(可分段)\" }",
"nudge": "你是爽文创作教练。根据当前进度与读者体验目标,给出 13 条简短的下一步写作建议(不直接写正文)。"
},
"reader": {
"contextWindowChars": 2000,
"prefetchRemainingWords": 300
}
}

View File

@@ -0,0 +1,59 @@
{
"flows": [
{
"id": "face-slap-rise",
"intro": "经典打脸逆袭:先抑后扬,让读者在主角翻盘点获得强烈爽感。",
"tags": ["打脸", "逆袭", "装逼"],
"steps": [
{ "key": "起", "text": "主角被轻视、被嘲讽,处境处于低谷,埋下伏笔。" },
{ "key": "承", "text": "矛盾升级,对手步步紧逼,读者情绪被压抑到极点。" },
{ "key": "转", "text": "主角展露真实实力或底牌,局势开始逆转。" },
{ "key": "合", "text": "当众打脸,对手颜面尽失,主角收获声望与资源。" }
]
},
{
"id": "treasure-upgrade",
"intro": "奇遇升级流:获得宝物/传承后实力跃迁,节奏明快。",
"tags": ["奇遇", "升级", "宝物"],
"steps": [
{ "key": "起", "text": "主角陷入险境或瓶颈,看似无路可走。" },
{ "key": "承", "text": "意外触发隐藏机缘,获得线索或残缺传承。" },
{ "key": "转", "text": "完成试炼或解开封印,实力/境界突破。" },
{ "key": "合", "text": "以新力量解决眼前危机,并留下更大悬念。" }
]
},
{
"id": "power-reveal",
"intro": "扮猪吃虎:隐藏身份或实力,在关键时刻一鸣惊人。",
"tags": ["扮猪吃虎", "身份", "震惊"],
"steps": [
{ "key": "起", "text": "主角以弱者/凡人形象出现,被各方忽视。" },
{ "key": "承", "text": "敌人或路人持续挑衅,形成对比张力。" },
{ "key": "转", "text": "危机时刻主角不再隐藏,展露真实层次。" },
{ "key": "合", "text": "全场震惊,先前嘲讽者态度一百八十度转变。" }
]
},
{
"id": "alliance-dominate",
"intro": "势力扩张:收服强者、建立势力,格局由小变大。",
"tags": ["势力", "收服", "格局"],
"steps": [
{ "key": "起", "text": "主角孤身或小团队,资源与人脉有限。" },
{ "key": "承", "text": "展现价值或魅力,引起潜在盟友/强者的注意。" },
{ "key": "转", "text": "通过实力或智谋赢得关键人物认可。" },
{ "key": "合", "text": "势力雏形确立,为下一阶段大事件铺垫。" }
]
},
{
"id": "revenge-climax",
"intro": "复仇清算:旧怨新仇一并了结,情绪释放型高潮。",
"tags": ["复仇", "清算", "高潮"],
"steps": [
{ "key": "起", "text": "回忆旧怨,明确复仇对象与动机。" },
{ "key": "承", "text": "对手仍嚣张或以为主角不足为惧。" },
{ "key": "转", "text": "主角布局收网,切断对手退路。" },
{ "key": "合", "text": "当众清算,恩怨了结,读者情绪得到释放。" }
]
}
]
}

View File

@@ -0,0 +1,44 @@
{
"entries": [
{
"layer": "L0",
"title": "爽文基本节奏",
"content": "每章需有明确的情绪推进:铺垫→加压→释放。避免长时间无爽点的水文;小爽点每 8001500 字,大爽点每 35 章。"
},
{
"layer": "L0",
"title": "读者预期管理",
"content": "开书前 3 章必须建立核心卖点(金手指/身份差/仇恨对象)。让读者知道「这本书承诺给我什么爽感」。"
},
{
"layer": "L1",
"title": "主角行为准则",
"content": "主角可以低调但不能窝囊;遇辱必报、有仇必记,但报复需有层次(先小胜再大胜)。避免圣母式原谅削弱爽感。"
},
{
"layer": "L1",
"title": "对手设计",
"content": "反派/对手需有足够嚣张资本与明确动机;被打脸前要让读者足够讨厌他们。避免脸谱化到无法代入。"
},
{
"layer": "L2",
"title": "信息投放",
"content": "世界观与力量体系采用「冰山法则」:每次只揭示与当前冲突相关的信息。悬念优于说明书式设定堆砌。"
},
{
"layer": "L2",
"title": "对话与描写比例",
"content": "冲突场景多用短句对话推进;升级/打脸瞬间可加入 12 句环境或旁观者反应放大爽感,但避免冗长旁白。"
},
{
"layer": "L3",
"title": "用户体验(视角/人称)",
"content": "默认第三人称有限视角跟随主角;关键爽点可短暂拉远至旁观者视角以放大震惊效果。人称切换需有明确叙事目的,避免混乱。"
},
{
"layer": "L3",
"title": "禁区与雷点",
"content": "避免 NTR、主角长期受虐无反击、重要角色无理由降智。若需挫折控制在 12 章内并给出明确反击预期。"
}
]
}