diff --git a/.cursor/skills/inbox-directive/SKILL.md b/.cursor/skills/inbox-directive/SKILL.md new file mode 100644 index 0000000..5d97a40 --- /dev/null +++ b/.cursor/skills/inbox-directive/SKILL.md @@ -0,0 +1,73 @@ +--- +name: inbox-directive +description: Use when 指令、按此修改 SSOT、直接落地、处理 inbox 标为指令、采纳提案 P-xxx. 分析→确认→更新/新建 bible 与 beat→归档;或采纳提案时重读→重验→报告→执行。 +--- + +# 指令 + +**直接修改 SSOT**(更新/新建 bible 与 beat),然后归档。通用约束见 **AGENTS.md**。 + +## A. 处理 Inbox 文件(指令路径) + +### 阶段一(只读,不修改任何文件) + +1. 识别实体(角色、设定、节拍),对每个判断操作(更新/新建/废弃)。 +2. 输出分析报告,**等人确认**。报告须含: + - **涉及实体**:角色 / 设定 / Beat 列表 + - **建议操作表**:| 实体 | 类型 | 操作 | 具体内容 | 是否有冲突 | + - **待人确认项**(冲突裁决、新建是否符合预期等) + - **请回复**:`执行全部` / `逐条确认` / `跳过` 或具体修改意见 + +### 阶段二(确认后执行) + +1. **更新/新建 bible 与 beat**:已有→更新(加粗关键词领起、句末标来源;同步叙事时间线;冲突记入冲突小节)。没有→新建(角色用 `template/tpl-character.md`,设定用 `tpl-worldbuilding.md`,beat 用 `tpl-beat.md`;替换占位符,不写 Templater 标签;frontmatter 加 `created_by: ai`)。Beat 新建:有 Fiction 草稿→`draft`,仅占位→`backlog`;新建后到对应 bible 叙事时间线加一行。 +2. **来源索引**:用归档路径 `[[inbox/archived/文件名]]`。不确定处标 `[#TBD: 说明]`。 +3. **归档 inbox**:顶部加 frontmatter 后移入 `inbox/archived/`: + ```yaml + archived: true + archived_date: YYYY-MM-DD + aggregated_to: [条目名或路径, ...] + note: 可选;不完整时注明未处理部分 + ``` +4. **git commit**:`inbox: 处理并归档 {文件名},更新 {涉及实体}`。 +5. **输出处理摘要**:新建 / 更新 / 无需变更 / 发现的冲突 / 已归档 / 需人类决定。 + +流程约束:阶段一不修改任何文件;AI 新建必标 `created_by: ai`。 + +## B. 采纳提案(如「采纳 P-001」) + +1. **重读**:读该提案全文。 +2. **重验**:扫描相关 Bible/Beat,看与现有一致性、是否有新冲突。 +3. **报告**:若影响分析过时则说明当前影响;否则简要确认。 +4. **执行**:用户确认后,合并入 SSOT、更新 changelog;提案移入 `proposals/archive/`(项目根),`status: accepted`。 + +## 命名约定 + +### Bible +- **条目与文件名均使用中文**,与标题/主名一致,如 `佩佩.md`、`火山.md`;不含空格,多词可用短横线如 `世界观-年表.md`。 +- 若工具对中文路径支持不佳,可保留拼音/英文文件名,frontmatter `id` 与正文标题写中文主名。 +- frontmatter `aliases` 包含所有已知名称/变体(中文、英文、拼音),供检索用。 + +### Beat +- **文件名即 ID**:`id` 字段必须与文件名(不含扩展名)完全一致。 +- **格式**:`{场景或角色}-{事件/情境核心词}`,如 `佩佩-维修1`、`诊室门口-年审公布`、`梦-海边`。 +- **不含编排信息**:Day、D01、order 等只放 frontmatter,不放文件名。 +- 类型(beat_type)放 frontmatter,命名无需重复。 + +## 废弃处理 + +禁止物理删除任何 bible 或 beat 文件。「删掉」一律按废弃处理。 + +### Beat 废弃 +1. `status: deprecated`,changelog 记录废弃原因。文件保留在 `kb/beats/`,不移动。 +2. Bible 叙事时间线不强制更新;链接保留,点入可见已废弃。 + +### Bible 废弃 +1. frontmatter `status` 改为 `archived` 或 `deprecated`,changelog 记录原因与来源。 +2. 可选移动至归档子目录,如 `kb/bible/设定/_archived/`;不删除文件。 +3. 其他文件中的链接保留即可。 + +## 信息边界 + +- **Beat**:事件信息(场景、发生什么、揭示处);时间线由 beat 驱动。 +- **Bible**:非事件信息(角色、设定、静态事实);需新建 beat 时即建,标 `backlog`。 diff --git a/.cursor/skills/inbox-discussion/SKILL.md b/.cursor/skills/inbox-discussion/SKILL.md new file mode 100644 index 0000000..39792bd --- /dev/null +++ b/.cursor/skills/inbox-discussion/SKILL.md @@ -0,0 +1,8 @@ +--- +name: inbox-discussion +description: Use when 讨论、头脑风暴、信息收集、探索想法、还没决定怎么做. 讨论模式:只对话与收集信息,不修改 kb,不写提案。 +--- + +# 讨论 + +用户选择**讨论**或未明确指令/提案时:只做信息收集与对话,不修改 `kb/`,不创建提案、不写 SSOT。需要落地时再请用户标明「提案」或「指令」,再走 **inbox-proposal** 或 **inbox-directive**。 diff --git a/.cursor/skills/inbox-process/SKILL.md b/.cursor/skills/inbox-process/SKILL.md index 696ea6e..b4c64c0 100644 --- a/.cursor/skills/inbox-process/SKILL.md +++ b/.cursor/skills/inbox-process/SKILL.md @@ -1,203 +1,6 @@ --- name: inbox-process -description: Use when processing inbox files, archiving eureka notes, updating bible from new information, running inbox workflow. 处理 inbox、处理 eureka、挨个跑 inbox 流程、处理并归档 inbox. 执行「处理 Inbox / Eureka」全流程(识别实体、更新/新建 bible 与 beat、Beat→Bible 反向同步、归档),归档为流程最后一步。 +description: Use when 处理 inbox、跑 inbox 流程、处理 eureka、inbox 归档. 先按 AGENTS.md 判断讨论/提案/指令(不明则问),再选用 inbox-discussion、inbox-proposal 或 inbox-directive。 --- -# Inbox 处理与归档 - -## 流程概览 - -``` -📥 Inbox 文件 - ↓ - 是指令还是提案?(用户未标明则必须询问) - ↓ - ┌──────┴──────┐ - 指令 (Fix) 提案 (Idea) - 直接改 SSOT 不改 SSOT - ↓ ↓ - 阶段一:分析 写入 kb/proposals/P-xxx - ↓ ↓ - 阶段二:执行 填写 targets、初始影响分析 - 更新/新建 bible 归档 Inbox,提示「已转为提案 P-xxx,可在 [[xxx]] 底部看到」 - 与 beat → 归档 -``` - -**指令路径**(与原有流程一致): -``` -阶段一:分析(只读,不修改任何文件) - ↓ 输出分析报告,等待人确认 -阶段二:执行(收到确认后) - ↓ 更新/新建 bible 与 beat → Beat→Bible 反向同步 → 标记 TBD → 归档 → 输出摘要 -``` - ---- - -## 入口:指令 vs 提案 - -1. 完整阅读该 inbox 文件。 -2. **若用户未标明是指令还是提案**,必须先询问: - - 「这份内容是指令(直接按此修改 SSOT)还是提案(仅写入提案库供讨论)?」 -3. **提案**:走下方「提案分支」,不修改任何 Bible/Beat 正文。 -4. **指令**:走下方「阶段一:分析」→「阶段二:执行」。 - ---- - -## 阶段一:分析(仅指令路径;不修改任何文件) - -1. 识别其中提到的所有实体(角色、世界观、节拍) -2. 对每个实体,判断需要执行什么操作 -3. **暂停,输出分析报告,等待人确认** - -### 分析报告格式 - -``` -📥 Inbox 分析:{文件名} - -**涉及实体** -- 角色:xxx、xxx -- 设定:xxx、xxx -- Beat:xxx(inbox 内容直接涉及具体场景或对话时列出) - -**建议操作** -| 实体 | 类型 | 操作 | 具体内容 | 是否有冲突 | -|------|------|------|---------|-----------| -| 佩佩 | 角色 | 更新 | 年龄改为22岁,职称改为广告部画师 | ⚠️ 与现有年龄25冲突 | -| 原型 | 设定 | 无需变更 | inbox 内容已在 bible 中覆盖 | — | -| 新设定名 | 设定 | 新建 | 从模板新建 kb/bible/设定/xxx.md | — | -| 佩佩-维修1 | beat | 更新 | Fiction 补充医生台词 | — | -| 佩佩-维修4 | beat | 新建 | inbox 描述了新场景,尚无对应 beat | — | -| 某设定 | 设定 | 废弃 | inbox 要求删掉该设定 → 改 status: deprecated,移入约定归档目录,不删除文件 | — | - -**待人确认的判断** -- [ ] 冲突裁决:佩佩年龄 22 vs 25,是否以本次为准? -- [ ] 新建 beat 佩佩-维修4:Fiction 草稿是否符合预期? -- [ ] xxx - -**请回复以下选项:** -- `执行全部` — 执行所有建议,冲突项记录到冲突表不自行解决 -- `逐条确认` — 逐条列出,逐条回复是/否 -- `跳过` — 不处理,直接移入 inbox/archived/,不更新任何 bible 或 beat -- 或直接告诉我你的修改意见 -``` - ---- - -## 提案分支(Inbox 被标为提案时) - -1. **创建提案文件**:从 `template/tpl-proposal.md` 复制到 `kb/proposals/P-{序号}_{简短标题}.md`。序号取当前 `kb/proposals/` 下未占用的最小三位数(如无则 P-001)。 -2. **填写 frontmatter**: - - `targets`:本提案针对的 Bible/Beat,用 wikilink 数组,如 `[[kb/bible/角色/佩佩]]`、`[[kb/beats/佩佩-维修1]]`(与 Dataview 关联,必填)。 - - `summary`:与「核心创意」一致的一句话。 - - `created`、`author` 等按需填写。 -3. **撰写正文**:核心创意、详细内容、**初始影响分析 (Snapshot)**(基于当前 kb 版本,列出可能受影响的 Beat/Bible 与冲突点),讨论记录可留空。 -4. **归档 Inbox**:按「阶段二」步骤 3 加 frontmatter 并移入 `inbox/archived/`;`aggregated_to` 中写上对应提案路径,如 `[kb/proposals/P-001_佩佩机器人化.md]`。 -5. **提示用户**:「已转为提案 P-xxx,你可以在 [[角色名]] / [[Beat 名]] 的页面底部看到该提案。」 - ---- - -## 阶段二:执行(仅指令路径;收到确认后) - -### 步骤 1:更新或新建 bible 与 beat - -**已有 bible → 更新** -- 将新信息加入对应 SSOT 小节,用 **加粗关键词** 领起,句末标来源 -- 同步更新「叙事时间线」表格:新增剧情点、补全关联 Beat、更新状态 -- 与现有信息冲突 → 在「冲突」小节记录两版 + 来源,不自行解决 -- **来源索引**:本流程中引用的来源在步骤 3 会移入 `inbox/archived/`。补全或更新「来源索引」时,**直接使用移动后的归档路径** `[[inbox/archived/文件名]]`。此时文件尚在 inbox/ 下、链接会暂时失效是预期行为,无需担心;归档完成后链接即可用。 - -**没有 bible → 新建** -- 角色:从 `template/tpl-character.md` 复制到 `kb/bible/角色/{名称}.md` -- 设定:从 `template/tpl-worldbuilding.md` 复制到 `kb/bible/设定/{名称}.md` -- 替换所有 `{{name}}`、`{{term_name}}` 占位符,不要写 Templater 标签 -- 在 frontmatter 加 `created_by: ai` - -**已有 beat → 更新** -- 若涉及 Fiction 内容:更新正文,在变更日志注明来源 -- 若涉及 reveals:按步骤 2 的反向同步逻辑处理 -- 若涉及 status 变更:更新 frontmatter - -**没有 beat → 新建** -- 从 `template/tpl-beat.md` 复制到 `kb/beats/{id}.md` -- 替换占位符,填写 frontmatter 中能确定的字段 -- **status**:若有具体 Fiction 草稿(至少一句话)→ `draft`;若仅因索引/叙事时间线需要而新建、尚无具体内容 → `backlog` -- Fiction:draft 时必须有至少一句话的草稿;backlog 时可为占位句(如「待写」),不能只有 YAML -- 在 frontmatter 加 `created_by: ai` -- **新建后必须回到对应 bible 的叙事时间线加一行**:draft 标 `🚧 草稿`,backlog 标 `🔹 无Beat` 或 `🚧 待写` - -### 步骤 2:标记不确定处 - -不确定的信息标记 `[#TBD: 说明]`,不要凭猜测写入 SSOT 或 Fiction。 - -### 步骤 3:归档 inbox 文件 - -确认主要内容已归纳到对应 bible 或 beat 后,在文件最顶部加归档 frontmatter,再移动文件: - -```yaml ---- -archived: true -archived_date: YYYY-MM-DD -aggregated_to: [佩佩, 原型, kb/beats/佩佩-维修1.md] -note: 可选;仅在不完整时写「内容已聚合,但XX部分未处理」 ---- -``` - -- `aggregated_to`(必填):已聚合到的 bible/beat 条目名或相对路径 -- `note`(可选):仅当部分内容未处理时填写 - -| 情况 | 动作 | -|------|------| -| 内容已归纳到位 | 移入 `inbox/archived/` | -| 明显未落地 | **留在 inbox**,不归档 | -| 不确定是否完整处理 | `note` 注明未处理部分后移入 archived | - -### 步骤 4:git commit - -``` -git add . -git commit -m "inbox: 处理并归档 {文件名},更新 {涉及实体}" -``` - -### 步骤 5:输出处理摘要 - -``` -## 处理摘要 [日期] - -### 新建 -- kb/bible/角色/xxx.md(AI 新建,来源:{inbox文件名}) -- kb/beats/xxx.md(AI 新建,来源:{inbox文件名}) - -### 更新 -- kb/bible/角色/yyy.md:补充了{具体内容} -- kb/beats/zzz.md:Fiction 补充台词;叙事时间线状态更新为 ✅ - -### 无需变更 -- xxx:inbox 内容已在 bible 中覆盖,无新增信息 - -### 发现的冲突 -- [冲突主题]:版本A(来源)vs 版本B(来源),已记录到冲突表,待人裁决 - -### 已归档 -- inbox/{文件名} → inbox/archived/{文件名}(aggregated_to: [xxx, yyy]) - -### 需人类决定 -- [ ] 问题1 -- [ ] 问题2 -``` - ---- - -## 信息边界(Bible vs Beat) - -- **Beat**:游戏内事件信息(场景、发生什么、玩家经历、信息在哪里揭示);叙事时间线由 beat 驱动,AI 同步,人不手动维护事件性内容。 -- **Bible**:事件之外的信息(角色是谁、设定规则、跨叙事静态事实);不人工维护动态/事件性内容。索引或时间线遇到需新建 beat 时即建 beat,标 `backlog`。 - -## 约束(任何情况下均适用) - -- **不自行解决冲突**:记录两版 + 来源,等人裁决 -- **不做创意判断**:只做信息整理,不评价设定对错 -- **不确定不写入 SSOT 或 Fiction**:标 `[#TBD]` 而非猜测 -- **每次变更必须写 changelog**:日期、内容、来源三列必填 -- **阶段一不修改任何文件**:收到确认前只分析不执行 -- **AI 新建的文件必须标记**:bible 和 beat 均在 frontmatter 加 `created_by: ai` -- **不物理删除**:AI 无权删除任何文件。若 inbox 要求「删掉设定/角色/节拍 X」,执行**废弃**——将该条目的 `status` 改为 `archived` 或 `deprecated`,按 `kb/README.md` 约定移动至指定文件夹(若有),changelog 记录废弃原因;绝不使用删除文件的动作。 \ No newline at end of file +处理 inbox 时:先判断是**讨论**、**提案**还是**指令**(用户未标明则询问)。讨论 → 用 **inbox-discussion**。提案 → 用 **inbox-proposal**。指令 → 用 **inbox-directive**。详见各 skill 与 **AGENTS.md**。 diff --git a/.cursor/skills/inbox-proposal/SKILL.md b/.cursor/skills/inbox-proposal/SKILL.md new file mode 100644 index 0000000..77db32c --- /dev/null +++ b/.cursor/skills/inbox-proposal/SKILL.md @@ -0,0 +1,16 @@ +--- +name: inbox-proposal +description: Use when 提案、想法进提案库、inbox 标为提案、仅写 P-xxx 不改 SSOT. 将内容写入项目根 proposals/,填 targets,归档 inbox。 +--- + +# 提案 + +**不修改 SSOT**。将内容写入项目根 `proposals/`,填写 `targets` 指向涉及的 Bible/Beat;对应页面底部由 Dataview 展示「关联提案」。 + +1. **创建提案文件**:从 `template/tpl-proposal.md` 复制到 `proposals/P-{序号}_{简短标题}.md`(项目根),序号取未占用最小三位数。 +2. **frontmatter**:`targets`(wikilink 数组,如 `[[kb/bible/角色/佩佩]]`、`[[kb/beats/佩佩-维修1]]`)、`summary`(与核心创意一致的一句话)。 +3. **正文**:核心创意、详细内容、**初始影响分析**(基于当前 kb,列出可能受影响的 Beat/Bible 与冲突点)、讨论记录可留空。 +4. **归档 inbox**:顶部加 `archived: true`、`archived_date`、`aggregated_to: [proposals/P-xxx_标题.md]`,移入 `inbox/archived/`。 +5. **提示用户**:「已转为提案 P-xxx,可在 [[角色名]] / [[Beat 名]] 页面底部看到。」 + +通用约束见 **AGENTS.md**(不删、冲突记录不裁决、变更写 changelog 等)。