feat: add NovelPage component with bookshelf, open book, and reading views
This commit is contained in:
6
data/agent/fiction/books/我是汉使-谁敢不敬/guide.worldbook.json
Normal file
6
data/agent/fiction/books/我是汉使-谁敢不敬/guide.worldbook.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"persona": "主角表面温文尔雅、恪守使者礼节,实则杀伐果断、胸怀大格局。受辱时隐忍记账,关键节点一击致命。拥有超越时代的信息差与历史推演金手指,善于借势与布局,从单枪匹马到建立西域都护府权威。",
|
||||
"highlight": "1. 身份反差:所有人都当他是落魄流民,直到汉节与国书亮相,震惊全场。2. 文明降维打击:用冶铁、造纸、兵法碾压西域各方势力。3. 外交爽文:舌战群胡、以一人退一国之兵。4. 势力养成:收服三十六国,在异域复刻大汉盛世。",
|
||||
"experience": "第三人称有限视角跟随主角,初期通过旁观者的鄙夷积蓄压抑,中后期在亮身份、展实力时拉远镜头,放大旁观者的跪服与匈奴使者的恐惧,形成反复打脸爽感。每场外交冲突都按铺垫→加压→以汉威逆转的结构推进。",
|
||||
"forbiddenZones": "禁止主角长期忍气吞声无所作为、禁止汉使身份被长期误解不开封、禁止面对胡人欺辱时以德报怨;挫折控制在1章内,且必须立刻给出明确反击预期。"
|
||||
}
|
||||
11
data/agent/fiction/books/我是汉使-谁敢不敬/meta.json
Normal file
11
data/agent/fiction/books/我是汉使-谁敢不敬/meta.json
Normal 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"
|
||||
}
|
||||
120
data/agent/fiction/books/我是汉使-谁敢不敬/metadata.json
Normal file
120
data/agent/fiction/books/我是汉使-谁敢不敬/metadata.json
Normal 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
|
||||
}
|
||||
}
|
||||
11
data/agent/fiction/books/我是汉使-谁敢不敬/run.json
Normal file
11
data/agent/fiction/books/我是汉使-谁敢不敬/run.json
Normal 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"
|
||||
}
|
||||
13
data/agent/fiction/books/我是汉使-谁敢不敬/settings.json
Normal file
13
data/agent/fiction/books/我是汉使-谁敢不敬/settings.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"prompts": {
|
||||
"openBook": "你是爽文开书优化助手。根据用户提供的创作灵感,输出结构化的开书方案。\n\n要求:\n1. 提炼并优化用户灵感,使其更适合网文爽文节奏。\n2. 生成 guide 世界书草稿:persona(主角人设)、highlight(核心爽点)、experience(读者体验/视角策略)、forbiddenZones(创作禁区)。\n3. 从提供的情绪流 catalog 中挑选 1–4 个最匹配的 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": "你是爽文创作教练。根据当前进度与读者体验目标,给出 1–3 条简短的下一步写作建议(不直接写正文)。"
|
||||
},
|
||||
"reader": {
|
||||
"contextWindowChars": 2000,
|
||||
"prefetchRemainingWords": 300
|
||||
}
|
||||
}
|
||||
59
data/agent/fiction/emotion_flows/catalog.json
Normal file
59
data/agent/fiction/emotion_flows/catalog.json
Normal 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": "当众清算,恩怨了结,读者情绪得到释放。" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
44
data/agent/fiction/guide_global/entries.json
Normal file
44
data/agent/fiction/guide_global/entries.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"entries": [
|
||||
{
|
||||
"layer": "L0",
|
||||
"title": "爽文基本节奏",
|
||||
"content": "每章需有明确的情绪推进:铺垫→加压→释放。避免长时间无爽点的水文;小爽点每 800–1500 字,大爽点每 3–5 章。"
|
||||
},
|
||||
{
|
||||
"layer": "L0",
|
||||
"title": "读者预期管理",
|
||||
"content": "开书前 3 章必须建立核心卖点(金手指/身份差/仇恨对象)。让读者知道「这本书承诺给我什么爽感」。"
|
||||
},
|
||||
{
|
||||
"layer": "L1",
|
||||
"title": "主角行为准则",
|
||||
"content": "主角可以低调但不能窝囊;遇辱必报、有仇必记,但报复需有层次(先小胜再大胜)。避免圣母式原谅削弱爽感。"
|
||||
},
|
||||
{
|
||||
"layer": "L1",
|
||||
"title": "对手设计",
|
||||
"content": "反派/对手需有足够嚣张资本与明确动机;被打脸前要让读者足够讨厌他们。避免脸谱化到无法代入。"
|
||||
},
|
||||
{
|
||||
"layer": "L2",
|
||||
"title": "信息投放",
|
||||
"content": "世界观与力量体系采用「冰山法则」:每次只揭示与当前冲突相关的信息。悬念优于说明书式设定堆砌。"
|
||||
},
|
||||
{
|
||||
"layer": "L2",
|
||||
"title": "对话与描写比例",
|
||||
"content": "冲突场景多用短句对话推进;升级/打脸瞬间可加入 1–2 句环境或旁观者反应放大爽感,但避免冗长旁白。"
|
||||
},
|
||||
{
|
||||
"layer": "L3",
|
||||
"title": "用户体验(视角/人称)",
|
||||
"content": "默认第三人称有限视角跟随主角;关键爽点可短暂拉远至旁观者视角以放大震惊效果。人称切换需有明确叙事目的,避免混乱。"
|
||||
},
|
||||
{
|
||||
"layer": "L3",
|
||||
"title": "禁区与雷点",
|
||||
"content": "避免 NTR、主角长期受虐无反击、重要角色无理由降智。若需挫折,控制在 1–2 章内并给出明确反击预期。"
|
||||
}
|
||||
]
|
||||
}
|
||||
0
data/agent/runs/chat/帝国骑士维尔/默认聊天/events.jsonl
Normal file
0
data/agent/runs/chat/帝国骑士维尔/默认聊天/events.jsonl
Normal file
15
data/agent/runs/chat/帝国骑士维尔/默认聊天/run.json
Normal file
15
data/agent/runs/chat/帝国骑士维尔/默认聊天/run.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "c529576bd6de40969648cf80a3780db9",
|
||||
"template_id": "builtin.chat",
|
||||
"binding": {
|
||||
"role_name": "帝国骑士维尔",
|
||||
"chat_name": "默认聊天",
|
||||
"template_id": "builtin.chat"
|
||||
},
|
||||
"status": "failed",
|
||||
"started_at": "2026-05-30T18:20:55.872092",
|
||||
"finished_at": "2026-05-30T18:21:31.857209",
|
||||
"current_state": "regex_apply_ai_output",
|
||||
"result_content": "",
|
||||
"error": "'<' not supported between instances of 'int' and 'NoneType'"
|
||||
}
|
||||
10
data/agent/studio_projects/test-r1-72cd5b4b/meta.json
Normal file
10
data/agent/studio_projects/test-r1-72cd5b4b/meta.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "test-r1-72cd5b4b",
|
||||
"name": "test-r1-72cd5b4b",
|
||||
"description": "从创建绑定到世界书条目的默认三步流水线,可在工作流编辑页复制并修改。",
|
||||
"templateId": "builtin.studio.example",
|
||||
"characterId": "b0992d14-cb7c-4d81-b0af-7f7434710903",
|
||||
"worldbookId": "e26e5d15-5b87-4693-aa47-f3021fbdc3d7",
|
||||
"createdAt": "2026-05-31T14:58:54.635290",
|
||||
"updatedAt": "2026-05-31T14:58:54.656107"
|
||||
}
|
||||
118
data/agent/studio_projects/test-r1-72cd5b4b/pipeline.json
Normal file
118
data/agent/studio_projects/test-r1-72cd5b4b/pipeline.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"workflowGoal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "init",
|
||||
"skillId": "studio.init_bind",
|
||||
"displayName": "创建并绑定",
|
||||
"enabled": true,
|
||||
"config": {},
|
||||
"displayParams": [
|
||||
{
|
||||
"key": "characterName",
|
||||
"label": "角色卡名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
},
|
||||
{
|
||||
"key": "worldbookName",
|
||||
"label": "世界书名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
}
|
||||
],
|
||||
"inputs": []
|
||||
},
|
||||
{
|
||||
"id": "aesthetic",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "整体美学",
|
||||
"niche": "aesthetic_tone",
|
||||
"enabled": true,
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "产出角色的整体美学设定:视觉风格、氛围、叙事基调,供后续人设步骤引用。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "permanent",
|
||||
"key": "整体美学",
|
||||
"comment": "Studio · 整体美学"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "美学设定是否自洽、可感知,而非空泛形容词堆砌。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否覆盖色调/材质/氛围/叙事基调;是否可与后续人设衔接;表述是否简洁可注入世界书。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "persona",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "具体人设",
|
||||
"niche": "persona_detail",
|
||||
"enabled": true,
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "在整体美学基础上,写出可扮演的人设:性格、动机、口癖、关系与行为模式。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "keyword",
|
||||
"key": "具体人设",
|
||||
"comment": "Studio · 具体人设"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "人设细节是否具体、可扮演,动机与行为是否一致。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否与人设目标一致;是否与整体美学一致;是否避免与已有条目冲突。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本"
|
||||
},
|
||||
{
|
||||
"ref": "aesthetic.output",
|
||||
"label": "整体美学 · 上轮产物"
|
||||
},
|
||||
{
|
||||
"ref": "persona.output",
|
||||
"label": "具体人设 · 上轮产物",
|
||||
"optional": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
10
data/agent/studio_projects/新项目/meta.json
Normal file
10
data/agent/studio_projects/新项目/meta.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "新项目",
|
||||
"name": "新项目",
|
||||
"description": "从创建绑定到世界书条目的默认三步流水线,可在工作流编辑页复制并修改。",
|
||||
"templateId": "builtin.studio.example",
|
||||
"characterId": null,
|
||||
"worldbookId": null,
|
||||
"createdAt": "2026-05-30T19:57:24.114210",
|
||||
"updatedAt": "2026-05-30T19:57:24.114210"
|
||||
}
|
||||
83
data/agent/studio_projects/新项目/pipeline.json
Normal file
83
data/agent/studio_projects/新项目/pipeline.json
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"workflowGoal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "init",
|
||||
"skillId": "studio.init_bind",
|
||||
"displayName": "创建并绑定",
|
||||
"enabled": true,
|
||||
"config": {},
|
||||
"displayParams": [
|
||||
{
|
||||
"key": "characterName",
|
||||
"label": "角色卡名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
},
|
||||
{
|
||||
"key": "worldbookName",
|
||||
"label": "世界书名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
}
|
||||
],
|
||||
"inputs": []
|
||||
},
|
||||
{
|
||||
"id": "aesthetic",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "整体美学",
|
||||
"niche": "aesthetic_tone",
|
||||
"enabled": true,
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "产出角色的整体美学设定:视觉风格、氛围、叙事基调,供后续人设步骤引用。",
|
||||
"insertion": {
|
||||
"position": 4,
|
||||
"activationType": "normal",
|
||||
"key": "整体美学",
|
||||
"comment": "Studio · 整体美学"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"rubric": "是否覆盖色调/材质/氛围/叙事基调;是否可与后续人设衔接;表述是否简洁可注入世界书。"
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": []
|
||||
},
|
||||
{
|
||||
"id": "persona",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "具体人设",
|
||||
"niche": "persona_detail",
|
||||
"enabled": true,
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "在整体美学基础上,写出可扮演的人设:性格、动机、口癖、关系与行为模式。",
|
||||
"insertion": {
|
||||
"position": 4,
|
||||
"activationType": "normal",
|
||||
"key": "具体人设",
|
||||
"comment": "Studio · 具体人设"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"rubric": "是否与人设目标一致;是否与整体美学一致;是否具备可扮演细节;是否避免与已有条目冲突。"
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "aesthetic.output"
|
||||
},
|
||||
{
|
||||
"ref": "persona.output",
|
||||
"optional": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"id": "6f4d68e5-f2cf-470d-a9f0-740c1403495f",
|
||||
"projectId": "test-r1-72cd5b4b",
|
||||
"status": "running",
|
||||
"pipelineSnapshot": {
|
||||
"workflowGoal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "init",
|
||||
"skillId": "studio.init_bind",
|
||||
"displayName": "创建并绑定",
|
||||
"enabled": true,
|
||||
"niche": null,
|
||||
"loopUntilSatisfied": false,
|
||||
"config": {},
|
||||
"displayParams": [
|
||||
{
|
||||
"key": "characterName",
|
||||
"label": "角色卡名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
},
|
||||
{
|
||||
"key": "worldbookName",
|
||||
"label": "世界书名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
}
|
||||
],
|
||||
"inputs": []
|
||||
},
|
||||
{
|
||||
"id": "aesthetic",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "整体美学",
|
||||
"enabled": true,
|
||||
"niche": "aesthetic_tone",
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "产出角色的整体美学设定:视觉风格、氛围、叙事基调,供后续人设步骤引用。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "permanent",
|
||||
"key": "整体美学",
|
||||
"comment": "Studio · 整体美学"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "美学设定是否自洽、可感知,而非空泛形容词堆砌。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否覆盖色调/材质/氛围/叙事基调;是否可与后续人设衔接;表述是否简洁可注入世界书。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本",
|
||||
"optional": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "persona",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "具体人设",
|
||||
"enabled": true,
|
||||
"niche": "persona_detail",
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "在整体美学基础上,写出可扮演的人设:性格、动机、口癖、关系与行为模式。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "keyword",
|
||||
"key": "具体人设",
|
||||
"comment": "Studio · 具体人设"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "人设细节是否具体、可扮演,动机与行为是否一致。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否与人设目标一致;是否与整体美学一致;是否避免与已有条目冲突。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本",
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"ref": "aesthetic.output",
|
||||
"label": "整体美学 · 上轮产物",
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"ref": "persona.output",
|
||||
"label": "具体人设 · 上轮产物",
|
||||
"optional": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"pipelineVersionNote": "2026-05-31T11:24:30.222456",
|
||||
"currentNodeId": "init",
|
||||
"nodeStates": [
|
||||
{
|
||||
"nodeId": "init",
|
||||
"displayName": "创建并绑定",
|
||||
"skillId": "studio.init_bind",
|
||||
"status": "active",
|
||||
"loopUntilSatisfied": false,
|
||||
"lastDraft": null
|
||||
},
|
||||
{
|
||||
"nodeId": "aesthetic",
|
||||
"displayName": "整体美学",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"status": "pending",
|
||||
"loopUntilSatisfied": true,
|
||||
"lastDraft": null
|
||||
},
|
||||
{
|
||||
"nodeId": "persona",
|
||||
"displayName": "具体人设",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"status": "pending",
|
||||
"loopUntilSatisfied": true,
|
||||
"lastDraft": null
|
||||
}
|
||||
],
|
||||
"workflowVariables": {
|
||||
"workflow.goal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。"
|
||||
},
|
||||
"createdAt": "2026-05-31T11:24:30.222456",
|
||||
"updatedAt": "2026-05-31T11:24:30.222456"
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"id": "c70b04fb-f793-4a5c-a687-56466aa95a4e",
|
||||
"projectId": "test-r1-72cd5b4b",
|
||||
"status": "running",
|
||||
"pipelineSnapshot": {
|
||||
"workflowGoal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。",
|
||||
"nodes": [
|
||||
{
|
||||
"id": "init",
|
||||
"skillId": "studio.init_bind",
|
||||
"displayName": "创建并绑定",
|
||||
"enabled": true,
|
||||
"niche": null,
|
||||
"loopUntilSatisfied": false,
|
||||
"config": {},
|
||||
"displayParams": [
|
||||
{
|
||||
"key": "characterName",
|
||||
"label": "角色卡名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
},
|
||||
{
|
||||
"key": "worldbookName",
|
||||
"label": "世界书名称",
|
||||
"type": "text",
|
||||
"required": true,
|
||||
"placeholder": ""
|
||||
}
|
||||
],
|
||||
"inputs": []
|
||||
},
|
||||
{
|
||||
"id": "aesthetic",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "整体美学",
|
||||
"enabled": true,
|
||||
"niche": "aesthetic_tone",
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "产出角色的整体美学设定:视觉风格、氛围、叙事基调,供后续人设步骤引用。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "permanent",
|
||||
"key": "整体美学",
|
||||
"comment": "Studio · 整体美学"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "美学设定是否自洽、可感知,而非空泛形容词堆砌。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否覆盖色调/材质/氛围/叙事基调;是否可与后续人设衔接;表述是否简洁可注入世界书。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本",
|
||||
"optional": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "persona",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"displayName": "具体人设",
|
||||
"enabled": true,
|
||||
"niche": "persona_detail",
|
||||
"loopUntilSatisfied": true,
|
||||
"config": {
|
||||
"stepGoal": "在整体美学基础上,写出可扮演的人设:性格、动机、口癖、关系与行为模式。",
|
||||
"thinkingPrompt": "",
|
||||
"insertion": {
|
||||
"position": 1,
|
||||
"activationType": "keyword",
|
||||
"key": "具体人设",
|
||||
"comment": "Studio · 具体人设"
|
||||
},
|
||||
"scoring": {
|
||||
"enabled": true,
|
||||
"dimensions": [
|
||||
{
|
||||
"id": "authenticity",
|
||||
"name": "真实性",
|
||||
"criteria": "人设细节是否具体、可扮演,动机与行为是否一致。"
|
||||
},
|
||||
{
|
||||
"id": "fit",
|
||||
"name": "贴合度",
|
||||
"criteria": "是否与人设目标一致;是否与整体美学一致;是否避免与已有条目冲突。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"displayParams": [],
|
||||
"inputs": [
|
||||
{
|
||||
"ref": "workflow.goal",
|
||||
"label": "工作流目标文本",
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"ref": "aesthetic.output",
|
||||
"label": "整体美学 · 上轮产物",
|
||||
"optional": false
|
||||
},
|
||||
{
|
||||
"ref": "persona.output",
|
||||
"label": "具体人设 · 上轮产物",
|
||||
"optional": true
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"pipelineVersionNote": "2026-05-31T14:58:54.643943",
|
||||
"currentNodeId": "aesthetic",
|
||||
"nodeStates": [
|
||||
{
|
||||
"nodeId": "init",
|
||||
"displayName": "创建并绑定",
|
||||
"skillId": "studio.init_bind",
|
||||
"status": "completed",
|
||||
"loopUntilSatisfied": false,
|
||||
"lastDraft": {
|
||||
"displayParams": {
|
||||
"characterName": "测试角色6367da",
|
||||
"worldbookName": "测试世界书8c09f9"
|
||||
},
|
||||
"characterId": "b0992d14-cb7c-4d81-b0af-7f7434710903",
|
||||
"worldbookId": "e26e5d15-5b87-4693-aa47-f3021fbdc3d7",
|
||||
"characterName": "测试角色6367da",
|
||||
"worldbookName": "测试世界书8c09f9"
|
||||
}
|
||||
},
|
||||
{
|
||||
"nodeId": "aesthetic",
|
||||
"displayName": "整体美学",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"status": "active",
|
||||
"loopUntilSatisfied": true,
|
||||
"lastDraft": null
|
||||
},
|
||||
{
|
||||
"nodeId": "persona",
|
||||
"displayName": "具体人设",
|
||||
"skillId": "studio.worldbook_entry",
|
||||
"status": "pending",
|
||||
"loopUntilSatisfied": true,
|
||||
"lastDraft": null
|
||||
}
|
||||
],
|
||||
"workflowVariables": {
|
||||
"workflow.goal": "设计一个单人角色:先绑定角色卡与世界书,再迭代整体美学与具体人设,写入世界书条目。",
|
||||
"workflow.boundCharacter": "名称:测试角色6367da\nID:b0992d14-cb7c-4d81-b0af-7f7434710903",
|
||||
"workflow.boundWorldbook": "名称:测试世界书8c09f9\nID:e26e5d15-5b87-4693-aa47-f3021fbdc3d7"
|
||||
},
|
||||
"createdAt": "2026-05-31T14:58:54.643943",
|
||||
"updatedAt": "2026-05-31T14:58:54.659103"
|
||||
}
|
||||
Reference in New Issue
Block a user