重构世界模拟器为模块化配方架构,完善创作编排、会话运行时与 Web UI,并清理过时技能。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-30 00:39:32 +08:00
parent 2b74c30d36
commit e670a5129c
167 changed files with 22955 additions and 5659 deletions

View File

@@ -0,0 +1,32 @@
# Worker 可选模板ref 默认契约)
## 定位
**不是** play 时加载的 `workers/*/SKILL.md`
**是** 谈【剧本】、写 `设计.worker集` 时合并的 **默认建议**context、outputs、职责摘要。
| 层 | 权威来源 |
|----|----------|
| 本局 play 怎么跑 | 用户 accept 的 **`设计.worker集`** |
| 可选模板 | 本目录 `{ref}.yaml` — 未写全 `context`/`outputs` 时合并 |
Runtime 执行时读 Worker 集条目,不直接读本目录。
## 文件
| 文件 | 说明 |
|------|------|
| `world-simulator.yaml` | 世界推进 / 裁决 |
| `narrator.yaml` | 转述 / 展示 |
| `role-decide.yaml` | 单角色决策 |
| `round-present.yaml` | 结构化回合陈述 |
| `opening-generator.yaml` | 开局生成器(创作末尾) |
| `outline.yaml` | 大纲 / 细纲 |
| `chapter-writer.yaml` | 章节正文 |
## 用法
1. 按用户意图选 `ref`
2.`{ref}.yaml` 填默认字段
3. 用户特殊需求覆盖后写入 Worker 集
4. accept 后声明即实例规格

View File

@@ -0,0 +1,25 @@
id: chapter-writer
label: 章节正文
role: drafting
duty: >
按大纲当前节点与用户指令写一章/一段可读正文;写入约定正文 tag。
不擅自改大纲结构;用户重 roll 本段时只重写本段。
when: 大纲已有、用户要求写下一章/段或重 roll 当前段
suggested_context:
static:
- 设计.worker集
- 大纲.当前
dynamic:
- 正文.已完成
- 用户.最新输入
- 变量.当前
suggested_outputs:
- 正文.当前段
- 正文.已完成
presentation_hints:
mode: prose | markdown
tone: 依题材;爽文可偏节奏与兑现,勿空洞灌水
prompt_excerpt: |
你是章节写手。只写本轮要求的一段/一章,对照大纲节点兑现承诺。
输出进 正文.当前段;若需归档到 正文.已完成 按声明 outputs 执行。
不要重写整本;不要发明与大纲冲突的主线转折,除非用户本轮明确要求。

View File

@@ -0,0 +1,23 @@
id: narrator
label: 转述 / 展示
role: transcription
duty: >
读世界层 / 中间 tag按 Worker 集 presentation 组装 输出.用户展示;
只改表达,不改事实(除非用户要求摘要压缩)。
when: 核心层产出齐、尚无本轮 输出.用户展示
suggested_context:
static:
- 设计.worker集
dynamic:
- 运行.事件流
- 运行.本轮.裁决
- 变量.当前
- 用户.最新输入
suggested_outputs:
- 输出.用户展示
presentation_hints:
mode: prose | markdown | mixed
tone: 依 Worker 集 presentation
prompt_excerpt: |
你是面向用户的展示编排者。读黑板中间产物,按 presentation 写可读回复;
不替 world-simulator 补充裁决、不臆造未写入 tag 的事实。

View File

@@ -0,0 +1,25 @@
id: opening-generator
label: 开局 · 开场白
stage: design-end
duty: >
创作末尾:结合已定世界/故事设定与表结构,写出开场白(主产物);
初值表与开场同一真相,能推断则推断。不是填表工具。
when: Worker 集 accept 后、进 play 前design_end 或 workers 声明启用时
suggested_context:
static:
- 设计.worker集
- 用户.需求
- 上下文.定稿摘要
dynamic:
- 用户.最新输入
- 用户.worker答复
- 运行.初始变量
- 输出.开场白
suggested_outputs:
- 输出.开场白
- 运行.初始变量
- 变量.当前
prompt_excerpt: |
主产物是开场白:扎根已有世界与故事,把玩家放进可行动的第一拍。
表是配套:与开场事实一致;普通大学生等可推出的别问。
禁止先问卷填表再糊开场;禁止开场与表打架。

View File

@@ -0,0 +1,22 @@
id: outline
label: 大纲 / 细纲
role: planning
duty: >
根据用户意图与已定设定,产出或更新可执行大纲(卷/章/节或情节点);
写进约定 tag供 chapter-writer 与展示层引用。不直接写长章正文。
when: 写手/分段模式下尚无可用大纲,或用户要求改大纲
suggested_context:
static:
- 设计.worker集
- 用户.需求
dynamic:
- 大纲.当前
- 用户.最新输入
suggested_outputs:
- 大纲.当前
presentation_hints:
mode: markdown
tone: 条目清晰,可勾选推进
prompt_excerpt: |
你是大纲作者。按用户爽点与篇幅产出可执行大纲(章标题 + 一句话节拍即可)。
不要写成长篇正文;修改时保留用户已锁定的章,只改其点名部分。

View File

@@ -0,0 +1,21 @@
id: role-decide
label: 角色决策
role: auxiliary
duty: >
仅代表 世界.当前角色.id 所指角色;产出 .思考(仅用户)与 .行动(世界层可见)。
信息隔绝:不读其他角色 .思考 / .行动。
when: Worker 集启用且本轮需该角色独立决策;须 workerContext.roleId
suggested_context:
static:
- 设计.worker集
dynamic:
- 世界.当前角色.id
- 运行.事件流
- 角色.*.可见信息
- 场景.公开叙述
suggested_outputs:
- 角色.*.思考
- 角色.*.行动
prompt_excerpt: |
两层输出:思考(用户专阅)与行动(含说话,世界层可读)。
禁止读博弈规则全文或其他角色思考 tag仅 L3 可见信息。

View File

@@ -0,0 +1,21 @@
id: round-present
label: 回合陈述
role: transcription
duty: >
结构化陈述本轮:发生了什么、各方行动/思考摘要Markdown/表格);
适合思想实验、博弈,通常不必文学化 narrator。
when: 多角色模拟一轮结束,需 输出.用户展示
suggested_context:
static:
- 设计.worker集
dynamic:
- 输出.回合摘要
- 场景.公开叙述
- 角色.*.思考
- 角色.*.行动
- 运行.事件流
suggested_outputs:
- 输出.用户展示
prompt_excerpt: |
按参数决定是否展示思考层;公开局面与思考分节,不混写。
摘录自旧「回合展示」worker 写法,写入 Worker 集时按实例改 tag 名。

View File

@@ -0,0 +1,23 @@
id: world-simulator
label: 世界模拟
role: core
duty: >
中立世界层:读用户输入与当前状态,按 Worker 集 / notes 中的规则推进事件、
裁决组合结果;输出客观、干巴,默认叙事质量低(常需 narrator 转述)。
when: 每轮用户输入后,或 tag_flow 要求产出本轮实质内容时
suggested_context:
static:
- 设计.worker集
- 用户.需求
dynamic:
- 用户.最新输入
- 运行.事件流
- 变量.当前
- 运行.初始变量
suggested_outputs:
- 运行.本轮.裁决
- 运行.事件流
prompt_excerpt: |
你是中立世界层,不是文学作者。只对规则与已提交输入作机械反应;
不写角色内心、不做剧情化推演。输出可复核的客观事实与状态变化。
叙事质量 intentionally 低——转述交给 narrator若 Worker 集启用)。