@oh-story/dsh 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +5 -3
  2. package/lib/client.js +27 -11
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +141 -136
  5. package/lib/drama/skills/short-drama/SKILL.md +55 -122
  6. package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
  7. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +24 -78
  8. package/lib/drama/skills/short-drama/references/creator-documents.md +79 -0
  9. package/lib/drama/skills/short-drama/references/creator-workflow.md +51 -77
  10. package/lib/drama/skills/short-drama/references/knowhow-index.md +2 -0
  11. package/lib/drama/skills/short-drama/references/look-development.md +2 -3
  12. package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
  13. package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
  14. package/lib/drama/skills/short-drama/references/reference-roles.md +29 -135
  15. package/lib/drama/skills/short-drama/references/runtime-preflight.md +13 -19
  16. package/lib/drama/skills/short-drama-assets/SKILL.md +40 -161
  17. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
  18. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
  19. package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
  20. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +5 -12
  21. package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
  22. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +2 -2
  23. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +10 -105
  24. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
  25. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +41 -155
  26. package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
  27. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +10 -12
  28. package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
  29. package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
  30. package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
  31. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
  32. package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
  33. package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
  34. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
  35. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +6 -65
  36. package/lib/drama/skills/short-drama-produce/SKILL.md +26 -10
  37. package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
  38. package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
  39. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
  40. package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
  41. package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
  42. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
  43. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
  44. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -19
  45. package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
  46. package/lib/drama/skills/short-drama-storyboard/SKILL.md +49 -240
  47. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
  48. package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
  49. package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
  50. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +8 -7
  51. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +24 -62
  52. package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
  53. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +5 -23
  54. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
  55. package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
  56. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +11 -71
  57. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +44 -219
  58. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
  59. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +3 -5
  60. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
  61. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +13 -23
  62. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
  63. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +2 -3
  64. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
  65. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +13 -72
  66. package/lib/drama/skills/short-drama-write/SKILL.md +73 -268
  67. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
  68. package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
  69. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
  70. package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
  71. package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
  72. package/lib/index.js +107 -14
  73. package/lib/index.js.map +4 -4
  74. package/lib/oh-story/manifest.json +26 -26
  75. package/lib/oh-story/roles/character-designer.md +4 -4
  76. package/lib/oh-story/roles/narrative-writer.md +11 -11
  77. package/lib/oh-story/roles/story-architect.md +20 -14
  78. package/lib/oh-story/roles/story-explorer.md +8 -5
  79. package/lib/oh-story/skills/story-import/SKILL.md +5 -1
  80. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +1 -1
  81. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +1 -1
  82. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  83. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +1 -1
  84. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +1 -0
  85. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +11 -5
  86. package/lib/oh-story/skills/story-setup/SKILL.md +12 -9
  87. package/lib/types/client/file-activity.d.ts +5 -0
  88. package/lib/types/client/file-activity.d.ts.map +1 -1
  89. package/lib/types/client/index.d.ts.map +1 -1
  90. package/lib/types/index.d.ts +2 -1
  91. package/lib/types/index.d.ts.map +1 -1
  92. package/lib/types/reference-tool.d.ts +6 -0
  93. package/lib/types/reference-tool.d.ts.map +1 -0
  94. package/lib/types/role-provider.d.ts.map +1 -1
  95. package/lib/types/role-tool.d.ts +3 -1
  96. package/lib/types/role-tool.d.ts.map +1 -1
  97. package/lib/types/skill-provider.d.ts.map +1 -1
  98. package/package.json +3 -2
  99. package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
@@ -2,11 +2,11 @@
2
2
  "schemaVersion": 2,
3
3
  "upstream": {
4
4
  "repository": "git@github.com:worldwonderer/oh-story-claudecode.git",
5
- "commit": "6af052974fd86fbdbbafce3e363d643221c6ce27",
5
+ "commit": "9d0bd5f5aead707ddcdcf7d5f141b237e2ac464c",
6
6
  "releaseVersion": "0.7.6",
7
7
  "agentsVersion": 25
8
8
  },
9
- "generatedAt": "2026-08-20T13:49:01.049Z",
9
+ "generatedAt": "2026-08-23T14:45:57.000Z",
10
10
  "skills": [
11
11
  "browser-cdp",
12
12
  "story",
@@ -44,8 +44,8 @@
44
44
  },
45
45
  {
46
46
  "path": "roles/character-designer.md",
47
- "sha256": "3c2a8025f31a7182f1d3f2233282b1e7ebed3aee9fdef8c289cf00636a4f7222",
48
- "bytes": 9363
47
+ "sha256": "d223ed1a0038dfb4295cdbfe6763bb4223c720ab8fc16a9b9888f5116f229bd1",
48
+ "bytes": 9347
49
49
  },
50
50
  {
51
51
  "path": "roles/consistency-checker.md",
@@ -54,18 +54,18 @@
54
54
  },
55
55
  {
56
56
  "path": "roles/narrative-writer.md",
57
- "sha256": "290f5858a464998c5c4a7a6d4e3b7bdfd1a0056c177e527fadffcb870fae48ed",
58
- "bytes": 30669
57
+ "sha256": "dbdc696a4e6c4e1bb9e22e9c102d9018c575811d7f033eee3d95eb80f9e375cb",
58
+ "bytes": 30981
59
59
  },
60
60
  {
61
61
  "path": "roles/story-architect.md",
62
- "sha256": "d09de3f0dd7f2d63c7ef17c52072a822cfba1e9a9e05611015a6d6897e61fb1c",
63
- "bytes": 11910
62
+ "sha256": "9b0258b76954bd5a45826fce2c09390337bd6b3f43762696f9a00621b9009cbe",
63
+ "bytes": 12788
64
64
  },
65
65
  {
66
66
  "path": "roles/story-explorer.md",
67
- "sha256": "cbec04802591a6b4411098feefb8320a0c73d299482dc8160b71b2130a220b93",
68
- "bytes": 20459
67
+ "sha256": "5c26390f9d54037cd70098b1b600f8eb52e9991ca8ca16bc16d0a896e9a0ac24",
68
+ "bytes": 22086
69
69
  },
70
70
  {
71
71
  "path": "roles/story-researcher.md",
@@ -124,8 +124,8 @@
124
124
  },
125
125
  {
126
126
  "path": "skills/story-import/SKILL.md",
127
- "sha256": "d81c297ff09e3f549ccdf31d9d2ac0941954fde834d2d772d3ade009895c84d8",
128
- "bytes": 41724
127
+ "sha256": "ded07fb520b5d6dfa3b94ceacf984af429c64620360bb1f211ce5418e385a405",
128
+ "bytes": 41904
129
129
  },
130
130
  {
131
131
  "path": "skills/story-import/references/character-state-reverse.md",
@@ -149,8 +149,8 @@
149
149
  },
150
150
  {
151
151
  "path": "skills/story-import/references/structure-mapping-long.md",
152
- "sha256": "587ce97d6426a7727ea6a0b29acd9c44af9f5b27b98fcaf56653fff2383b0ee2",
153
- "bytes": 20144
152
+ "sha256": "f6856dc294184990b95d62caef02594ebb0fd3f5fa13c8bb9e81194fdacac0b9",
153
+ "bytes": 20225
154
154
  },
155
155
  {
156
156
  "path": "skills/story-import/references/structure-mapping-short.md",
@@ -274,8 +274,8 @@
274
274
  },
275
275
  {
276
276
  "path": "skills/story-long-write/references/artifact-protocols.md",
277
- "sha256": "a62c1efdfe79d2b91f94b72fd146462ae94287e67211fc424c28e9400479b0f9",
278
- "bytes": 16864
277
+ "sha256": "64c9c027a6b6e4f5565fcdfa58bade57fbcc4a1b7091ce22950a12baad659650",
278
+ "bytes": 16913
279
279
  },
280
280
  {
281
281
  "path": "skills/story-long-write/references/banned-words.md",
@@ -554,8 +554,8 @@
554
554
  },
555
555
  {
556
556
  "path": "skills/story-long-write/references/outline-structure-theory.md",
557
- "sha256": "5f4cbe6806c6cc50f089267e010d3ba573532592b61f0e93d6e4812e60d28498",
558
- "bytes": 22121
557
+ "sha256": "98f012698491cddf03f0176b8501bd132435f9ad62b4f9d7fab902d94614a3a3",
558
+ "bytes": 22122
559
559
  },
560
560
  {
561
561
  "path": "skills/story-long-write/references/plot-core-methods.md",
@@ -619,13 +619,13 @@
619
619
  },
620
620
  {
621
621
  "path": "skills/story-long-write/references/workflow-chapter.md",
622
- "sha256": "1f23ff4faf406dd7b579fe9b95dfb1e850e8e27bbf420f0c9faefcb0d8cabea6",
623
- "bytes": 27047
622
+ "sha256": "160c539f956ea8cb69f945d24af1ab21d0715367abc1b2e182d1c4568120adfb",
623
+ "bytes": 27056
624
624
  },
625
625
  {
626
626
  "path": "skills/story-long-write/references/workflow-daily.md",
627
- "sha256": "76bb18b47f0ee9006a7e827ea27afdf931f13a09ca7499afbf415c21509e9dba",
628
- "bytes": 25092
627
+ "sha256": "28479f89d22286196dda75b432d08cafbdf2c76fd7ae82c8b9fe29c4cbe0e4e6",
628
+ "bytes": 25247
629
629
  },
630
630
  {
631
631
  "path": "skills/story-long-write/references/workflow-revision.md",
@@ -634,8 +634,8 @@
634
634
  },
635
635
  {
636
636
  "path": "skills/story-long-write/references/workflow-setup.md",
637
- "sha256": "ecefc83b5b38a3abfc01cbcc4fabb7229302fbe65b4f1fc122d49fc33c60dd99",
638
- "bytes": 30149
637
+ "sha256": "719e68845bd81153e755ed5188859a4ffb646f83e3fd2bd0e15dcba782485d6f",
638
+ "bytes": 30111
639
639
  },
640
640
  {
641
641
  "path": "skills/story-long-write/references/writing-craft.md",
@@ -749,8 +749,8 @@
749
749
  },
750
750
  {
751
751
  "path": "skills/story-setup/SKILL.md",
752
- "sha256": "bcae5429af949cc8b697c0f54217046241985b41afc973fcd628cbec4e85de9c",
753
- "bytes": 50392
752
+ "sha256": "ecd2216e803c771a00b322f32f6782cb719a35ee9814ccd296f1576b33b0b415",
753
+ "bytes": 51900
754
754
  },
755
755
  {
756
756
  "path": "skills/story-setup/references/agent-references/anti-ai-writing.md",
@@ -44,16 +44,16 @@ maxTurns: 25
44
44
 
45
45
 
46
46
  - **角色设计参考**:
47
- - 基础模板:项目内搜索 `story-setup/references/agent-references/character-basics.md`
47
+ - 基础模板:直接 Read `story-setup/references/agent-references/character-basics.md`
48
48
  - 设计角色前:阅读"主角卡""配角卡""动机链"
49
49
  - 设计反派时:阅读"反派层级""反派建立四要素""反派性格确立四步法"
50
- - 深化方法:项目内搜索 `story-setup/references/agent-references/character-design-methods.md`
50
+ - 深化方法:直接 Read `story-setup/references/agent-references/character-design-methods.md`
51
51
  - 设计角色前:阅读"三层标签反差人设法""九维人设框架"
52
52
  - 设计关系时:阅读"人设关联分层""以梗为中心塑造人设"
53
- - 关系设计:项目内搜索 `story-setup/references/agent-references/character-relations.md`
53
+ - 关系设计:直接 Read `story-setup/references/agent-references/character-relations.md`
54
54
  - 设计关系时:阅读"人物关系类型"
55
55
 
56
- - **对话创作参考**:项目内搜索 `story-setup/references/agent-references/dialogue-mastery.md`
56
+ - **对话创作参考**:直接 Read `story-setup/references/agent-references/dialogue-mastery.md`
57
57
  - 创作对话前:阅读"人物语言差异化"的7维差异化方法
58
58
  - 设计潜台词时:阅读"深层设计:潜台词与议程"
59
59
  - 审查对话质量时:阅读"自查清单"的三大自查项
@@ -49,18 +49,18 @@ memory: project
49
49
 
50
50
  ## 参考文件体系
51
51
 
52
- 你拥有以下参考文件,**按需读取,不要提前全部加载**:
53
- | 参考文件 | 何时读取 |
52
+ 你拥有以下参考文件。**逐行独立判定,命中任一条件即必读**(不是要同时满足),不得因「手头材料已够」跳过;未命中的行不要预加载。
53
+ | 参考文件 | 必读条件 |
54
54
  |---|---|
55
- | `story-setup/references/agent-references/writing-craft.md` | 正文写作(**从细纲到正文·不照抄形状**、三维度揉进、身体细节、物件三次出现、小节密度)时 |
56
- | `story-setup/references/agent-references/emotional-arc-design.md` | 情绪弧线执行、题材情绪策略时 |
57
- | `story-setup/references/agent-references/genre-prose-cards.md` | 按番茄题材分类校准正文提示卡时先读索引,再只读取 `story-setup/references/agent-references/genre-prose-cards/{题材}.md` 单卡;卡片只内部校准题材味,正文里不出现卡片文字或合规自评 |
58
- | `story-setup/references/agent-references/style-genre-modules.md` | 题材风格模块(通用流派补充)时 |
59
- | `story-setup/references/agent-references/opening-design.md` | 开篇创作(黄金一章、开头技巧)时 |
60
- | `story-setup/references/agent-references/anti-ai-writing.md` | 去AI味(7 Gate、三遍去AI法、Show Don't Tell)时 |
61
- | `story-setup/references/agent-references/banned-words.md` | 禁用词替换(Gate A)时 |
62
- | `story-setup/references/agent-references/quality-checklist.md` | 审查文字质量(五维评分、9项检查)时 |
63
- | `story-setup/references/agent-references/dialogue-mastery.md` | 写或审查对话场景(信息嵌入、潜台词、权力博弈、逐句情绪反馈、场合语气)时 |
55
+ | `story-setup/references/agent-references/writing-craft.md` | **产出正文全程**(首稿/重写/补写,落笔前必读):**从细纲到正文·不照抄形状**、三维度揉进、身体细节、物件三次出现、疏密分配 |
56
+ | `story-setup/references/agent-references/banned-words.md` | **产出或修改正文时**(Gate A 禁用词,出现即修) |
57
+ | `story-setup/references/agent-references/opening-design.md` | **开新书、或写前 3 章时**(落笔前) |
58
+ | `story-setup/references/agent-references/anti-ai-writing.md` | **正文写作后做去AI味自检或改写时**(7 Gate、三遍去AI法、Show Don't Tell) |
59
+ | `story-setup/references/agent-references/emotional-arc-design.md` | **prompt 给了 目标情绪 或 selected_emotion_module 时** |
60
+ | `story-setup/references/agent-references/dialogue-mastery.md` | **本章有对话或台词时**(信息嵌入、潜台词、权力博弈、逐句情绪反馈、场合语气) |
61
+ | `story-setup/references/agent-references/genre-prose-cards.md` | **prompt 给了 genre_prose_card 时**:题材已知直接读 `story-setup/references/agent-references/genre-prose-cards/{题材}.md` 单卡,题材未知先读本索引;卡片只内部校准题材味,正文里不出现卡片文字或合规自评 |
62
+ | `story-setup/references/agent-references/style-genre-modules.md` | **genre-prose-cards 索引无匹配题材单卡时**(通用流派兜底) |
63
+ | `story-setup/references/agent-references/quality-checklist.md` | **审查/评分任务时**(五维评分、9项检查) |
64
64
  | `文风路径`(绝对路径由 prompt 传入:自定义文风模式为 `设定/文风.md`,否则对标 `文风.md`) | prompt 含 `文风路径` 时**写作前必读**;`设定/文风.md` 为权威风格基(句长 / 软标点 / 对话潜台词 / 情绪交替),命中硬安全线的写法(`……` / 破折号 / 段间空行 / 碎句)仍按本文件 Gate 归一,不让位 |
65
65
 
66
66
  ---
@@ -35,20 +35,20 @@ memory: project
35
35
 
36
36
  ## 参考文件体系
37
37
 
38
- 你拥有以下参考文件,**按需读取,不要提前全部加载**:
39
- | 参考文件 | 何时读取 |
38
+ 你拥有以下参考文件。**逐行独立判定,命中任一条件即必读**(非同时满足),不得因「手头材料已够」跳过;未命中的行不要预加载。
39
+ | 参考文件 | 必读条件 |
40
40
  |---|---|
41
- | `story-setup/references/agent-references/hooks-chapter.md` | 设计章首/章尾钩子、三翻四震结构时 |
42
- | `story-setup/references/agent-references/hooks-suspense.md` | 设计悬念体系、多线悬念周期时 |
43
- | `story-setup/references/agent-references/emotional-arc-design.md` | 设计情绪弧线、期待感管理、确定题材情绪策略时 |
44
- | `story-setup/references/agent-references/reversal-toolkit.md` | 设计反转、铺设误导、嵌套反转、打脸节奏时 |
45
- | `story-setup/references/agent-references/outline-methods.md` | 排布大纲、五步法、大纲三层结构法时 |
46
- | `story-setup/references/agent-references/outline-rhythm.md` | 设计大纲节奏、升级感三步法时 |
47
- | `story-setup/references/agent-references/outline-conflict.md` | 设计矛盾、主线支线、冲突结构时 |
48
- | `story-setup/references/agent-references/genre-catalog.md` | 题材定位、题材框架速查时 |
49
- | `story-setup/references/agent-references/genre-core-mechanics.md` | 核心梗提炼、微创新、金手指设计时 |
50
- | `story-setup/references/agent-references/opening-design.md` | 设计开篇、黄金一章、开局三大基点时 |
51
- | `story-setup/references/agent-references/quality-checklist.md` | 审查大纲质量、黄金三章检查、通用质量检查时 |
41
+ | `story-setup/references/agent-references/hooks-chapter.md` | **写章首/章尾钩子时**(含三翻四震结构) |
42
+ | `story-setup/references/agent-references/hooks-suspense.md` | **编排悬念体系或多线悬念周期时** |
43
+ | `story-setup/references/agent-references/emotional-arc-design.md` | **设计情绪弧线、期待感管理或确定题材情绪策略时** |
44
+ | `story-setup/references/agent-references/reversal-toolkit.md` | **设计反转、铺设误导或安排打脸节奏时** |
45
+ | `story-setup/references/agent-references/outline-methods.md` | **建/补大纲或细纲时**(落笔前必读):大纲创建法、结构分级、节点设计、细纲实操 |
46
+ | `story-setup/references/agent-references/outline-rhythm.md` | **把控节奏或设计升级感时** |
47
+ | `story-setup/references/agent-references/outline-conflict.md` | **设计矛盾、主线/支线或冲突结构时** |
48
+ | `story-setup/references/agent-references/genre-catalog.md` | **做题材定位或需要题材框架速查时** |
49
+ | `story-setup/references/agent-references/genre-core-mechanics.md` | **提炼核心梗、做微创新或设计金手指时** |
50
+ | `story-setup/references/agent-references/opening-design.md` | **开新书、或设计前 3 章时** |
51
+ | `story-setup/references/agent-references/quality-checklist.md` | **审查大纲质量或做黄金三章检查时** |
52
52
 
53
53
  ---
54
54
 
@@ -111,7 +111,13 @@ memory: project
111
111
  - 视角/信息差:{}
112
112
 
113
113
  #### 情节细化
114
- - 情节点序列:{谁做了什么 + 功能标签(=目的词:铺垫/高潮/爽点/打脸)}
114
+ - 情节点序列(逐行填下表):
115
+
116
+ | # | 情节点(谁做了什么) | 功能标签 | 密/铺/疏 | 目标字数 |
117
+ |---|---|---|---|---|
118
+ | 1 | {} | {铺垫/高潮/爽点/打脸} | {密/铺/疏} | {按档位写区间,标注即下限} |
119
+
120
+ 档位(写区间,标注即下限):密(爽点/打脸/反转/情绪高潮,展开)250-320、慢镜头爽点 400-600;铺(铺垫/日常)120-150;疏(过场/赶路/信息交代,带过)40-60。**`<1500` 字短章例外**:5-8 点,密点下限按比例下浮至 120-250。各点按下限求和 Σ∈[章目标, ×1.1],末尾写一行 `目标字数合计:下限X字(章目标Y,范围Y-Z)`。档位与例外的权威副本在 story-long-write 技能 Phase 3「情节细化」,与本表冲突时以权威副本为准。
115
121
  - 复沓锚句:{须一字不差进正文的原话,一行一条、注明落在第几个情节点,如"点3:立此为凭…";誓言、面板、旧案原话等;没有写"无"}
116
122
  - 行动成本(可无)/收益归属:{可无行动成本,不硬造代价;收益归谁、如何可见}
117
123
 
@@ -156,9 +156,11 @@ maxTurns: 15
156
156
  - 先按项目目录名、`.active-book` 与本书设定识别当前作品;`拆文库/{当前书}/` 是 story-import 的本书分析,不是对标候选。历史误建的 `对标/{当前书}/` 也必须排除,并返回 `gaps.self_benchmark_ignored: true`
157
157
  - `Read 设定/题材定位.md`,提取 `主对标书` 字段
158
158
  - 若有且不是当前作品 → 用该书;若字段指向当前作品 → 忽略该字段并设置 `gaps.self_benchmark_ignored: true`
159
- - 若字段缺失或已忽略 → `Glob 对标/*/`,排除当前作品后取字典序第一个目录,并在 `gaps.main_benchmark_unspecified: true` 提示主对标书未指定
160
- - 若排除后的 `对标/` 无子目录,继续向上找工作区根下的 `拆文库/*/`,同样排除当前作品;若仍无可用目录 → 返回 `gaps.no_benchmark: true`,`results` 置空,**不报错、不继续读文风**
161
- 3. **对标书路径查找**:优先 `{项目}/对标/{书名}/`,回退 `拆文库/{书名}/`(向上找到工作区根,再下钻拆文库)
159
+ - **路径一律用字段值逐字拼接**:不添加《》等任何装饰、不改一字——拼错时 Glob 只会静默返回空,与「书不存在」无法区分
160
+ - **登记的主对标按步骤 3 探不到书目录**(目录下探不到任何文件)→ 返回 `gaps.benchmark_book_missing: true` 与 `expected_path`(原样写入实际探测的完整路径,供核对拼写),`results` 置空**停止**;不得改用其他书,也不得走下面的缺失回退。**书目录存在但缺 `文风.md` 不属于本情形**——照常进入步骤 4-6,由步骤 6 归类为 `profile_missing`
161
+ - 若字段缺失或已忽略 → `Glob 对标/*/**/*`,从命中文件所属的书目录(`对标/` 下的第一层目录,排除当前作品)取字典序第一个,并在 `gaps.main_benchmark_unspecified: true` 提示主对标书未指定;**枚举条件是书目录下有文件,不是有 `文风.md`**——缺文风但资料完整的候选仍算命中
162
+ - 若排除后无命中,继续向上找工作区根下的 `拆文库/*/**/*`,同样排除当前作品;仍无 → 返回 `gaps.no_benchmark: true`,`results` 置空,**不报错、不继续读文风**
163
+ 3. **对标书路径查找(只判书目录有效性,不判文风)**:优先探 `{项目}/对标/{书名}/**/*`,回退探 `拆文库/{书名}/**/*`(向上找到工作区根,再下钻拆文库);探针是目录下的任意文件——Glob 不接受纯目录模式,`{书名}/` 恒返回空。任一处命中文件即视为书目录有效,进入步骤 4;两处都无命中才是 `benchmark_book_missing`。**不得用 `文风.md` 兼作目录存在性探针**——那会把「书在但缺文风」误判成「书不存在」,吞掉步骤 6 的 `profile_missing` 与调用方的 `custom_style` 降级分支
162
164
  4. **读情绪模块(权威)**:
163
165
  - 优先 `Read {对标书路径}/剧情/情绪模块.md`
164
166
  - 存在 → 从「读者需求 / 情绪引擎」「可复现模块」或模块卡片中,按本章情绪/爽点类型选择 1 条 `selected_emotion_module`,并写入 `module_source_path`
@@ -171,7 +173,7 @@ maxTurns: 15
171
173
  - 若两个权威文件都存在但对同一章节/模块的读者情绪或爆发点描述互相矛盾,保留两条原文摘要,并返回 `gaps.module_rhythm_conflict: true` 与 `gaps.conflict: "..."`;调用方按两个权威文件优先于 `拆文报告.md` / `故事线.md` 的规则处理,禁止自行改写
172
174
  6. **读文风**:
173
175
  - `Read {对标书路径}/文风.md`
174
- - 不存在 → 返回 `gaps.profile_missing: true, expected_path: "..."`,**不继续后续步骤**
176
+ - 不存在 → 返回 `gaps.profile_missing: true, expected_path: "..."`,**不继续后续步骤**;书目录本身有效,不得改填 `benchmark_book_missing`——调用方按 `custom_style` 决定继续或停止
175
177
  - 检查「生成记录」里的 `文风可用:否` → 返回 `gaps.profile_degenerate: true`,后续不把文风作为强约束
176
178
  7. **可用性检查(只读可执行)**:
177
179
  - 本 agent 只有 `Read/Glob/Grep`,不能调用 Bash/stat。
@@ -214,7 +216,7 @@ maxTurns: 15
214
216
 
215
217
  > `context_load` 的固定读取量不随章数增长。角色当前值来自独立小快照,旧变化原因来自按 ID/角色定点命中的紧凑增量,时间线按作者/读者视角分开读取。
216
218
 
217
- > 普通查询遇文件缺失时在 `gaps` 中返回事实;`context_load` 缺 state、续写状态卡或 `check` 失败时必须停止组装。`benchmark_style_load` 缺 `剧情/情绪模块.md` 或 `剧情/节奏.md` 时必须返回 `missing_primary_contract: true` 与 `repair_action`,不得继续进入写作准备。
219
+ > 普通查询遇文件缺失时在 `gaps` 中返回事实;`context_load` 缺 state、续写状态卡或 `check` 失败时必须停止组装。`benchmark_style_load` 缺 `剧情/情绪模块.md` 或 `剧情/节奏.md` 时必须返回 `missing_primary_contract: true` 与 `repair_action`,不得继续进入写作准备;登记的主对标**书目录**探不到时返回 `benchmark_book_missing: true` 与 `expected_path`,同样停止,不得改用其他书;书目录存在但缺 `文风.md` 归 `profile_missing`,不占用本分类。
218
220
 
219
221
  ---
220
222
 
@@ -322,6 +324,7 @@ maxTurns: 15
322
324
  "profile_degenerate": false,
323
325
  "stale_reason": null,
324
326
  "main_benchmark_unspecified": false,
327
+ "benchmark_book_missing": false,
325
328
  "self_benchmark_ignored": false,
326
329
  "raw_text_unavailable": false,
327
330
  "tone_match_failed": false,
@@ -364,7 +364,11 @@ story-short-analyze 的拆解管道(Stage 2-6)本身**无 Stage 1 停靠点*
364
364
  - 视角/信息差:{谁知道什么;读者知道什么;主角误判什么;未知写 [待补充]}
365
365
 
366
366
  #### 情节细化
367
- - 情节点序列:{从摘要情节点反推,每点“谁做了什么 + 功能标签”}
367
+ - 情节点序列(逐行填下表;从摘要情节点反推):
368
+
369
+ | # | 情节点(谁做了什么) | 功能标签 | 密/铺/疏 | 目标字数 |
370
+ |---|---|---|---|---|
371
+ | 1 | {} | {功能不明写 [待补充]} | {按原文该段实际篇幅归档} | {[待补充]} |
368
372
  - 行动成本(可无)/收益归属:{有证据才写;行动成本可无、不硬造;未知写 [待补充]}
369
373
 
370
374
  #### 结尾设定和钩子
@@ -271,7 +271,7 @@ A<->B:关系类型 | 情感 | 描述(50-200字)| 演变轨迹
271
271
  | 情节点起承转合 | 内容概括(起因/发展/转折/高潮/结尾) | 按情节点顺序归纳;证据不足写 `[待补充]` |
272
272
  | 主线/支线/任务线索 | 情节安排(主线/辅线/事件线/感情线/逻辑线) | 从剧情单元索引与摘要反推;无证据的辅线/感情线写“无”或 `[待补充]`,不得杜撰 |
273
273
  | 出场角色 / 关键物件 | 人物关系和出场顺序 | 按摘要出现顺序列出;关系变化只写有证据的“前 → 后”,缺失写 `[待补充]` |
274
- | 全部情节点 | 情节细化 / 情节点序列 | 每点写“谁做了什么 + 功能标签”;功能不明写 `[待补充]` |
274
+ | 全部情节点 | 情节细化 / 情节点序列 | 按表格逐行写(# / 情节点 / 功能标签 / 密铺疏 / 目标字数);功能不明写 `[待补充]`,密/铺/疏按原文该段实际篇幅归档 |
275
275
  | 胜负/反转/收益损失 | 行动成本(可无)/收益归属 | 有明确证据才填写;行动成本可无、不硬造;否则 `[待补充]` |
276
276
  | 最后一个情节点 / 悬念类情节点 | 结尾设定和钩子 | 收束状态可归纳;章尾钩子设计目标标 `[待补充]` |
277
277
 
@@ -265,7 +265,7 @@
265
265
 
266
266
  ## 大纲/细纲_第XXX章.md
267
267
 
268
- 细纲是正文写作的章节蓝图,而不是只列事件和钩子的清单。**模板唯一权威副本**见 [Phase 3:大纲搭建](workflow-setup.md#phase-3大纲搭建) 的「细纲(全书每章)」模板(含单元ID/位置、主角目标/关键选择、任务卡点、结构公式、契约风险行、密/疏字数预算与「预算合计」行);本文件不再保留模板副本,避免双模板漂移。新建、补建、回填都按权威模板补齐,未知字段写 `[待补充]`,不要为了补齐字段杜撰副线或人物关系。契约/推进字段只加在章纲摘要层,长规则统一参 `reader-contract-and-progression.md`。
268
+ 细纲是正文写作的章节蓝图,而不是只列事件和钩子的清单。**模板唯一权威副本**见 [Phase 3:大纲搭建](workflow-setup.md#phase-3大纲搭建) 的「细纲(全书每章)」模板(含单元ID/位置、主角目标/关键选择、任务卡点、结构公式、契约风险行、五列情节点表格(含密/铺/疏与目标字数区间)与「目标字数合计」行);本文件不再保留模板副本,避免双模板漂移。新建、补建、回填都按权威模板补齐,未知字段写 `[待补充]`,不要为了补齐字段杜撰副线或人物关系。契约/推进字段只加在章纲摘要层,长规则统一参 `reader-contract-and-progression.md`。
269
269
 
270
270
  ---
271
271
 
@@ -301,7 +301,7 @@
301
301
 
302
302
  题材分级(上面占比是均衡 / 长书基线,按题材分档):番茄短平快 / 男频事业线,高压可到 30% 以上、呼吸章压到 5% 上下都正常,别拿基线去「补呼吸、砍高压」反而掉追读;女频 / 世情 / 追妻,人设关系容量大、关系 / 低压章可更多,但仍走情绪折线、不必每章三折。低压 / 关系章定位是看点(主角身边人的日常本身是订阅点),不是填充。
303
303
 
304
- 与字数预算的衔接:章节定位只改密 / 疏配比的下限,不改 Σ 契约。高压章靠多密点达到 Σ∈[章目标, ×1.1];低压生活 / 信息整理 / 纯过场章靠铺垫(120-150)与疏点(≈40)凑字、允许 0 密点,但关系回收章要保 ≥1 个情感密点(≈250),否则关系写塌。写后字数 <90% 定位欠账时,高压 / 推进章补密点重写,低压 / 过场章补铺垫 / 互动 / 表演 beat,不强塞爽点密点——低密点是设计,不是欠账。
304
+ 与字数预算的衔接:章节定位只改密 / 疏配比的下限,不改 Σ 契约。高压章靠多密点达到 Σ∈[章目标, ×1.1];低压生活 / 信息整理 / 纯过场章靠铺点(120-150)与疏点(40-60)凑字、允许 0 密点,但关系回收章要保 ≥1 个情感密点(250-320),否则关系写塌。写后字数 <90% 定位欠账时,高压 / 推进章补密点重写,低压 / 过场章补铺垫 / 互动 / 表演 beat,不强塞爽点密点——低密点是设计,不是欠账。
305
305
 
306
306
  ---
307
307
 
@@ -72,7 +72,7 @@
72
72
  - 不把本文件整套规则复制进 prompt;细节以已加载 references 和 narrative-writer 模板为准。
73
73
  - agent 输出写入 `正文/第XXX章_章名.md`。如 agent 未部署,由主线程直接写作。
74
74
  8. **字数验证**(写作完成后的第一件事):用跨平台 Python 字符统计本章实际字数,探测顺序 `python3/python/py`;不要用 `wc -c` 或模型估算,Windows 不直接假定 `python3` 命令可用。macOS/Linux 可用 `wc -m` 备选。
75
- - 字数 < 细纲目标 90%:对照情节点预算找欠账点。密点(爽点/打脸/反转)被写薄时,重写到对应预算;低压/关系/信息整理章则补细纲内已有铺垫、互动或表演节拍,不硬塞爽点。若现有细纲没有足够可展开内容,停止并输出 `outline_underfilled` 欠账点,先补纲/确认,不能让正文自造新剧情。
75
+ - 字数 < 细纲目标 90%:对照情节点预算找欠账点。密点(爽点/打脸/反转)被写薄时,重写到该点目标区间内;低压/关系/信息整理章则补细纲内已有铺垫、互动或表演节拍,不硬塞爽点。若现有细纲没有足够可展开内容,停止并输出 `outline_underfilled` 欠账点,先补纲/确认,不能让正文自造新剧情。
76
76
  - 字数 > 章目标×1.1:压过场、合并疏点、删多余过渡,不删主线爽点凑数。
77
77
  - 90% 只是放行下限,目标仍是 `[章目标, 章目标×1.1]`;重写后重新统计,落进区间再进入步骤 9。
78
78
  9. **检查**:章尾是否有往下看的理由(低压/过场章弱钩子或留阶段目标即可,不强求爽点)、爽点是否到位(按章节定位,高压/推进章必查)。两条可证伪核对(不达标→修复):① 爽点出手前是否有可指认的危机/期待段落(指到具体情节点)?指不出=空洞 → 回步骤 8 补铺垫情节点(plot-emotion-system 倒推法);② 装逼/打脸/揭露章,在场配角是否写出差异化反应(集体震惊/各异),还是只写主角动作?没有 → 补在场配角反应(plot-core-methods)
@@ -79,6 +79,7 @@
79
79
  - **story-explorer 召回的 gaps 分支**(用 `benchmark_style_load` query_type 一次拿到 `{style_profile_path, style_profile_summary, selected_emotion_module, rhythm_reference, module_source_path, rhythm_source_path, matched_chapter_K, matched_chapter_techniques, anchor_excerpts, gaps}` 后按此分流):
80
80
  - 若 `gaps.no_benchmark: true` → `custom_style` 为真则进入「自定义文风模式」(用 `设定/文风.md` 写作;无对标可召回,情绪 / 节奏目标改从本书细纲「目标情绪」、卷纲、`设定/题材定位.md` 等内部材料取,`selected_emotion_module` / `rhythm_reference` 记为「无」,不声称从对标召回);否则跳过文风召回,在「意图确认」标记"无对标参考"
81
81
  - 若 `gaps.missing_primary_contract: true` → 停止本章准备,按 `repair_action` 提示重跑 `/story-long-analyze` Stage 3+ 或重新 `/story-import`;不得进入 narrative-writer(情绪 / 节奏轴独立于文风轴,**自定义文风模式不豁免此停止**——补 `剧情/情绪模块.md` / `剧情/节奏.md`,而非写 `设定/文风.md`)
82
+ - 若 `gaps.benchmark_book_missing: true` → 停止,核对 `expected_path` 与 题材定位.md 登记名(逐字一致)后重查;不得换书
82
83
  - 若 `gaps.conflict` 或 `gaps.module_rhythm_conflict: true` → 意图确认必须说明冲突并按 `剧情/情绪模块.md` / `剧情/节奏.md` 的权威优先级执行;不得让 `文风.md` 覆盖情绪/节奏目标
83
84
  - 若 `gaps.profile_missing: true` → `custom_style` 为真则进入自定义文风模式继续;否则按上文 fail-fast 流程停止
84
85
  - 若 `gaps.profile_degenerate: true`(对标文风不可用) → `custom_style` 为真则用 `设定/文风.md` 写作;否则跳过文风、回到默认 Gates 写作
@@ -187,7 +187,7 @@ story-architect 属于高层级结构设计 agent。轻量题材定位优先由
187
187
  1. **批次边界**:一批 ≈ 一个剧情单元(5-15 章);>10 章的剧情单元拆两批。**首批 = 前 10 章封顶、可跨单元**:跨入的剧情单元在建卡时召回一次,余章由后续滚动批共享该剧情单元卡结论。写到单元末段(剩余未建细纲 ≤2 章)即滚动补下一单元整批;用户显式给出章数/范围时按用户要求执行,单批仍建议 ≤10 章、分批连续交付。
188
188
  2. **批次定位与阶段约束**(每批补纲前先写):当前章节区间属于哪个阶段与哪个剧情单元(单元ID)、本批推进目标、本批可释放信息、本批严禁提前释放信息、章尾钩子不能越过的边界。
189
189
  3. **剧情单元消费**:建卡批读本批剧情单元卡「对标剧情参照」指向的剧情单元(≤3 个文件,含结构分布/情节点索引),按节拍→章映射铺章、情节点换素材;同一剧情单元的后续批共享剧情单元卡固化结论,不重读剧情单元。当前卷纲缺少必需剧情单元字段时先补齐卷纲,不带缺失字段进入日更。
190
- 4. **批末预算核对**(每批建完必做):统一核对各章「预算合计」行 Σ∈[章目标, ×1.1],不合格章补密点/压疏点后再交付,不要求逐章写作时反复心算。
190
+ 4. **批末合计核对**(每批建完必做):统一核对各章「目标字数合计」行 Σ∈[章目标, ×1.1],不合格章补密点/压疏点后再交付,不要求逐章写作时反复心算。
191
191
 
192
192
  不要在单次对话里强行产出 30 章完整细纲。
193
193
  如果全书章数较少(≤30 章),可以在 Phase 3 一次全部建完。
@@ -230,7 +230,13 @@ story-architect 属于高层级结构设计 agent。轻量题材定位优先由
230
230
  - 视角/信息差:{谁知道什么;读者知道什么;主角误判什么}
231
231
 
232
232
  #### 情节细化
233
- - 情节点序列:按字数预算编排,不按数量反推。每个情节点标 密/疏 并给字数预算——密(爽点/打脸/反转/情绪高潮,展开)≥250 字、慢镜头爽点 400-600;疏(过场/赶路/信息交代,带过)≈40 字;铺垫/日常取中约 120-150 字。各点预算求和 Σ 落在 [章目标, 章目标×1.1]:低于章目标则增展开点(爽点拆细节拍、关键节点补具体事例),高于上限则压过场/合并疏点——不靠注水、也不靠无限堆砌爽点凑长。点数随 Σ 落定(通常 10 个以上;目标 <1500 字的短章取 5-8 点,密点下限按目标比例下浮到约 120-250;目标为区间时按区间上限算 Σ 范围)。情节细化末尾写一行 `预算合计:X字(目标Y,范围Y-Z)` 便于核对 Σ。每个情节点写清"谁做了什么 + 功能标签"(功能标签即目的词:铺垫/高潮/爽点/打脸/人物塑造/设定,决定该点展开还是带过),如"主角在账单上发现4800元转出【信息揭示·密250】"而非仅写"发现"
233
+ - 情节点序列(逐行填下表;按字数预算编排,不按数量反推):
234
+
235
+ | # | 情节点(谁做了什么) | 功能标签 | 密/铺/疏 | 目标字数 |
236
+ |---|---|---|---|---|
237
+ | 1 | {主角在账单上发现4800元转出} | {信息揭示} | {密} | {250-320} |
238
+
239
+ 档位(写区间,标注即下限):密(爽点/打脸/反转/情绪高潮,展开)250-320、慢镜头爽点 400-600;铺(铺垫/日常)120-150;疏(过场/赶路/信息交代,带过)40-60。功能标签=目的词:铺垫/高潮/爽点/打脸/人物塑造/设定,决定展开或带过。各点按下限求和 Σ∈[章目标, ×1.1]:低于章目标增展开点(爽点拆细节拍、关键节点补具体事例),高于上限压过场/合并疏点——不注水、不堆爽点。点数随 Σ 落定(通常 10 个以上;<1500 字短章 5-8 点,密点下限按比例下浮至 120-250;目标为区间按上限算 Σ)。末尾写一行 `目标字数合计:下限X字(章目标Y,范围Y-Z)`。
234
240
  - 任务卡点说明:如果某情节点是“办事被卡住”,功能标签必须写清它服务的是信息揭示、关系变化、代价兑现、伏笔推进、选择压力、节奏喘息或钩子承接;删掉无损的卡点不进细纲
235
241
  - 复沓锚句:{须一字不差进正文的原话(誓言、面板、旧案原话),一行一条并注明落点,如"点3:立此为凭…";没有写"无"}
236
242
  - 行动成本(可无)/收益归属:{可无行动成本;若有则写谁付出什么成本;收益归谁、如何可见、是否留下后续账}
@@ -246,7 +252,7 @@ story-architect 属于高层级结构设计 agent。轻量题材定位优先由
246
252
  1. 定位当前卷、已写进度与既有剧情单元卡:读 `大纲/大纲.md`、当前 `大纲/卷纲_第X卷.md`、`追踪/上下文.md`(续写状态卡,待回收伏笔取 `## 活跃伏笔`、主角当前状态取 `## 核心角色状态`),以及 `设定/题材定位.md`(终局底牌与升级台阶)——续写状态卡缺项按 workflow-daily「旧信息查找步骤」按需查询,不读全部逐章增量;
247
253
  2. 按 references/outline-structure-theory.md「对标节奏迁移」步骤 1 选同类剧情单元,设计新剧情单元卡(含「对标剧情参照」),**追加**到当前卷卷纲卷尾,并随卡在卷纲「情绪弧线」表与「本卷伏笔」表**只增不改**地追加对应规划;尚未实际埋设的伏笔留在大纲,不提前登记为时间线/追踪事实——用户主动要求补纲即视为已授权追加,锁定的既有剧情单元卡不动;新剧情单元体量超出本卷规划时,先与用户确认扩卷还是开新卷;
248
254
  3. 批次级答一遍上方「大纲安全七检」并执行「大纲安全审查」(追加剧情单元时⑦按单元内 1/4·中点·3/4 口径);
249
- 4. 按「按剧情批出细纲」以新剧情单元为批次滚动补细纲(一批 ≈ 一个剧情单元,>10 章拆两批共享召回),每批建完执行「细纲后设定补全」与批末预算核对;
255
+ 4. 按「按剧情批出细纲」以新剧情单元为批次滚动补细纲(一批 ≈ 一个剧情单元,>10 章拆两批共享召回),每批建完执行「细纲后设定补全」与批末合计核对;
250
256
  5. 新剧情单元和未来揭示边界已经在卷纲/细纲落盘,不复制进追踪续写状态卡;只有下一章必须履行的承诺才在下一次逐章事务里进入 `next_chapter_commitments`。
251
257
 
252
258
  **细纲质量要求**:每章细纲都要按当前章节蓝图直接指导正文(阶段位置、结构公式、禁止提前释放、内容概括、情节安排、人物关系/出场顺序、情节细化、结尾设定齐备),但**强度按章节定位分配、不是每章顶满**:高压/推进章配齐钩子+爽点+悬念;低压/关系/修炼/信息整理章允许无显性爽点、弱钩子或仅情绪钩子,重点是把功能(喘息、关系、铺垫、转场)写到位。底线是每章都给读者一个往下看的理由、相邻章不情绪趋同(见 references/outline-structure-theory.md「章节定位与张弛」)。字段不完整时先补齐;无法从材料确定的关系或副线写 `[待补充]`,不得杜撰。
@@ -276,8 +282,8 @@ story-architect 属于高层级结构设计 agent。轻量题材定位优先由
276
282
  若已部署 story-architect agent(优先检查 `.claude/agents/story-architect.md`),可让它辅助:
277
283
  - 任务:卷级结构、首批细纲、钩子/反转/情绪弧线。
278
284
  - 章节定位:每章标高压/推进/修炼试错/关系回收/低压生活/信息整理;低压章可弱爽点,但仍要有往下看的理由。
279
- - 字数预算:每个情节点标密/疏和预算;密点展开,疏点带过;末尾写 `预算合计:X字(目标Y,范围Y-Z)`。
280
- - 主会话校验:每个情节点都有预算,合计落在 `[章目标, 章目标×1.1]`;不合格先补细纲再写正文。
285
+ - 目标字数:按上方「情节细化」的五列表格与档位规则填(写区间,标注即下限),末尾写「目标字数合计」行。
286
+ - 主会话校验:每点都有区间,按下限求和落在 `[章目标, 章目标×1.1]`;不合格先补细纲再写正文。
281
287
  - **契约摘要必须原样附带**:本阶段的卷纲要直接产出终局储备(本卷主推线/战果、本卷解锁的终局里程碑、禁碰的未解锁底牌)和剧情单元(单元ID等字段),spawn prompt 必须带上 Phase 1「Agent 调用:story-architect」中的「story-architect 契约摘要」,让主线程与委托产出共用同一 schema。
282
288
 
283
289
  如 agent 不可用,由主线程直接执行。
@@ -14,7 +14,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
14
14
 
15
15
  ## Phase 1:检测项目状态
16
16
 
17
- **先自检参考目录**:以正在执行的本 `SKILL.md` 所在目录为准,列出与它同级的 `references/` 下的子目录,核对下面 8 个名字是否都在**且都非空**——`agent-references`、`templates`、`opencode`、`codex`、`zcode`、`openclaw`、`reasonix`、`generic`;同级 `scripts/merge-claude-settings.py` 与 `scripts/merge-codex-hooks.py` 也必须存在(Claude/Codex hooks 合并算法依赖它们)。有缺即 skill 包没装全,**立即停止,不写任何部署文件**,报告里区分「缺目录」和「目录为空」,并给修复指令:「story-setup 参考资料包不完整,缺 {目录名}。按你的安装方式重装 oh-story-claudecode(命令行装的重跑 `npx skills add worldwonderer/oh-story-claudecode -y -g`,marketplace / Plugin Management 装的在面板里重装),再执行 /story-setup。」
17
+ **先自检参考目录**:以正在执行的本 `SKILL.md` 所在目录为准,列出与它同级的 `references/` 下的子目录,核对下面 8 个名字是否都在**且都非空**——`agent-references`、`templates`、`opencode`、`codex`、`zcode`、`openclaw`、`reasonix`、`generic`;同级 `scripts/merge-claude-settings.py`、`scripts/merge-codex-hooks.py` 与 `scripts/copy-path-safety.py` 也必须存在(Claude/Codex hooks 合并和递归复制安全检查依赖它们)。有缺即 skill 包没装全,**立即停止,不写任何部署文件**,报告里区分「缺目录」「目录为空」和「缺脚本」,并给修复指令:「story-setup 参考资料包不完整,缺 {路径}。按你的安装方式重装 oh-story-claudecode(命令行装的重跑 `npx skills add worldwonderer/oh-story-claudecode -y -g`,marketplace / Plugin Management 装的在面板里重装),再执行 /story-setup。」
18
18
 
19
19
  > 判据是「有没有 `SKILL.md`」:只看正在执行的 `SKILL.md` 同级的 `references/`。项目内 `.claude/skills/story-setup/`、`.codex/skills/story-setup/` 和 OpenCode 的 `skills/story-setup/` 只有 `references/agent-references/`、不含 `SKILL.md`,不会是执行目录,也不要拿它们核对。ZCode / OpenClaw / Reasonix / generic 的项目副本是整份 skill 拷贝、自带 `SKILL.md`,8 个子目录本就齐全,照常核对即可。
20
20
 
@@ -70,6 +70,10 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
70
70
 
71
71
  整个 Phase 2 幂等:目录复制、文件写入和下表各合并算法重复执行结果一致。因环境原因(工具不可用、权限被拒、网络失败)中途失败时,直接从头重跑本 Phase,不需要先清理半成品;`create only if absent` 的用户状态文件(见下表 Owner class)不会被二次覆盖。
72
72
 
73
+ **两列基准目录不同**:`Source path` 相对正在执行的这份 skill 包,`Target path` 相对用户项目根。执行每一行(以及下面各端部署算法里的每个递归复制步骤)之前,先把通配符具体化为单个源/目标,再用本 `SKILL.md` 同级的 `scripts/copy-path-safety.py` 检查。该脚本按 `Path.resolve` / `realpath` 语义跟随已有 symlink,并在两侧都存在时用 `samefile` 核对文件系统对象;**只转绝对路径或比较字符串不算检查完成**。读取其 JSON:`status: same` 时 no-op,禁止复制;仅 `copy_allowed: true` 时可以复制;`source_missing`、`unsafe_target_within_source` 或 `filesystem_identity_error` 必须停止该步骤并报告。无法运行脚本时只能用当前环境的文件系统 API 做完全相同的 canonical realpath、same-object 与 target-descendant 检查;无法确认就停止,不得尝试复制。OpenClaw / Reasonix / generic 的项目副本是整份 skill 拷贝,重跑时执行的就是项目里那份;Reasonix / Codex 还可能经 `.agents/skills → ../skills` symlink 加载,路径文本不同也可能指向同一目录,照字面复制会把目录嵌进自身并撑满磁盘。
74
+
75
+ **部署前清理自嵌套残留**:`{.claude,.codex,.zcode}/skills/story-setup/references/agent-references/` 与项目根 `skills/story-setup/references/agent-references/` 里若多出 `agent-references/` 层(可能嵌了多层),以及 `skills/story-setup/skills/`,整段删掉再部署,并在安装报告里列出删掉的路径。
76
+
73
77
  ### Step 1:部署清单(机械可检查)
74
78
 
75
79
  | Source path | Target path | Owner class | Merge mode | Validation check |
@@ -81,6 +85,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
81
85
  | `skills/story-setup/references/agent-references/*.md` | `.claude/skills/story-setup/references/agent-references/*.md` | story-setup managed | replace | every `story-setup/references/agent-references/*.md` reference resolves |
82
86
  | `skills/story-setup/references/templates/settings-hooks.json` | `.claude/settings.local.json` | user+managed | replace managed registrations by stable hook identity | hook JSON valid;旧 matcher 注册已迁移、当前模板命令各一份、用户 hook 保留 |
83
87
  | `skills/story-setup/scripts/merge-claude-settings.py` | 部署时执行,不复制到项目 | story-setup helper | execute | 替换已知 story hook 注册、保留用户 hooks/顶层字段,v24→v25 迁移与重复执行幂等 |
88
+ | `skills/story-setup/scripts/copy-path-safety.py` | 每个递归复制步骤前执行,不复制到项目专用目录 | story-setup helper | execute | JSON 仅 `copy_allowed: true` 时允许复制;symlink 同对象 no-op;target 位于 source 内时停止 |
84
89
  | generated sentinel | `.story-deployed` | story-setup managed | replace | contains `agents_version`, `setup_skill_version`, `target_cli`, `resolver_strategy`, `references_dir` |
85
90
  | `skills/story-setup/references/opencode/AGENTS.md.tmpl` | `AGENTS.md` | user+managed | marker/section merge | contains story skill routing sections | target_cli 含 opencode |
86
91
  | `skills/story-setup/references/opencode/agents/` | `.opencode/agents/` | story-setup managed | replace | 7 agent files exist(replace 前按「配置 OpenCode Agent 模型」中的「保留已有模型配置」缓存现有 `model:`,避免覆盖用户已配模型) | target_cli 含 opencode |
@@ -88,7 +93,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
88
93
  | `skills/story-setup/references/opencode/story_hook_core.js` | `.opencode/plugins/lib/story_hook_core.js` | story-setup managed | replace | Node syntax valid;与 ZCode 副本字节一致;被 story-hooks.ts import | target_cli 含 opencode |
89
94
  | `skills/story-setup/references/opencode/commands/` | `.opencode/commands/` | story-setup managed | replace | 13 command files exist | target_cli 含 opencode |
90
95
  | `skills/story-setup/references/opencode/opencode.json.patch` | merge into `opencode.json` | user+managed | merge by plugin/permission key | plugin entry registered | target_cli 含 opencode |
91
- | `skills/story-setup/references/agent-references/` | `skills/story-setup/references/agent-references/` | story-setup managed | replace | every reference resolves | target_cli 含 opencode |
96
+ | repository `skills/story-setup/references/agent-references/` | `skills/story-setup/references/agent-references/` | story-setup managed | replace | every reference resolves | target_cli 含 opencode |
92
97
  | `skills/story-setup/references/opencode/pre-commit.sh` | `.git/hooks/pre-commit` | user+managed | append or create | file exists and is executable;含 marker 块则替换块内容,不含则检测 exit 0 位置智能插入 | target_cli 含 opencode |
93
98
  | `skills/story-setup/references/codex/AGENTS.md.tmpl` | `AGENTS.md` | user+managed | marker/section merge | contains Codex story skill routing sections | target_cli 含 codex |
94
99
  | `skills/story-setup/references/codex/agents/` | `.codex/agents/` | story-setup managed | replace | 7 TOML agent files parse and contain `name`/`description`/`developer_instructions` | target_cli 含 codex |
@@ -106,7 +111,7 @@ metadata: {"openclaw":{"source":"https://github.com/worldwonderer/oh-story-claud
106
111
  | `skills/story-setup/references/generic/AGENTS.md.tmpl` | `AGENTS.md` | user+managed | marker/section merge | contains generic story skill routing sections | target_cli 含 generic |
107
112
  | `skills/story-setup/references/reasonix/AGENTS.md.tmpl` | `AGENTS.md` | user+managed | marker/section merge | contains Reasonix story skill routing sections and solo/direct fallback | target_cli 含 reasonix |
108
113
  | repository `skills/{browser-cdp,story*}/` | `skills/{browser-cdp,story*}/` | story-setup managed for known skill names | replace known skill dirs only | 13 `SKILL.md` files exist; OpenClaw-compatible frontmatter | target_cli 含 openclaw 或 generic 或 reasonix |
109
- | `skills/story-setup/references/agent-references/` | `skills/story-setup/references/agent-references/` | story-setup managed | replace via full skill copy | every reference resolves | target_cli 含 openclaw 或 generic 或 reasonix |
114
+ | repository `skills/story-setup/references/agent-references/` | 随上一行整份 skill 拷贝落地,本行 no-op | story-setup managed | 不单独复制 | every reference resolves | target_cli 含 openclaw 或 generic 或 reasonix |
110
115
 
111
116
  ### opencode.json 合并算法
112
117
 
@@ -316,9 +321,8 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
316
321
  1. 读取仓库当前 `skills/` 下所有包含 `SKILL.md` 的 story skill 目录(13 个:`browser-cdp` 与 `story*`)到目标项目 `skills/{skill-name}/`;仅替换这些 story-setup 管理的已知 skill 目录,保留用户其他目录。
317
322
  2. 在项目根创建 `.agents/skills → ../skills` 相对 symlink(与 Codex 共用的 skill root),使 Reasonix 原生扫描 `.agents/skills` 时发现这些 skill;若已是指向 `skills/` 的 symlink 则保留,若被占用为普通目录则不覆盖并在安装报告提示。Windows 未启用 symlink 时跳过本步,改走根 `reasonix-plugin.json` 的 `reasonix plugin install`。
318
323
  3. 复制 `skills/story-setup/references/reasonix/AGENTS.md.tmpl` 到项目 `AGENTS.md`,按「AGENTS.md 合并策略」合并。
319
- 4. 复制 `skills/story-setup/references/agent-references/` 到 `skills/story-setup/references/agent-references/`,保证 narrative-writer / story-architect 等角色说明里的参考路径可解析。
320
- 5. `.story-deployed` 的 `target_cli` 写入 `reasonix` 或多端组合;`references_dir` 对 Reasonix 写 `skills/story-setup/references/agent-references`。
321
- 6. 安装报告提示项见 Phase 3 第 12 步。
324
+ 4. `.story-deployed` 的 `target_cli` 写入 `reasonix` 或多端组合;`references_dir` 对 Reasonix 写 `skills/story-setup/references/agent-references`。
325
+ 5. 安装报告提示项见 Phase 3 第 12 步。
322
326
 
323
327
  ### 通用 Web AI / 其他 Agent 部署算法(target_cli 含 generic 时)
324
328
 
@@ -326,9 +330,8 @@ Reasonix(DeepSeek-Reasonix CLI)当前只部署 skills 与 `AGENTS.md`,不
326
330
 
327
331
  1. 复制仓库当前 `skills/` 下所有包含 `SKILL.md` 的 story skill 目录(13 个:`browser-cdp` 与 `story*`)到目标项目 `skills/{skill-name}/`;仅替换这些 story-setup 管理的已知 skill 目录,保留用户其他目录。
328
332
  2. 复制 `skills/story-setup/references/generic/AGENTS.md.tmpl` 到项目 `AGENTS.md`,按「AGENTS.md 合并策略」合并。
329
- 3. 复制 `skills/story-setup/references/agent-references/` 到 `skills/story-setup/references/agent-references/`,保证 narrative-writer / story-architect 等角色说明里的参考路径可解析。
330
- 4. `.story-deployed` 的 `target_cli` 写入 `generic` 或多端组合;`references_dir` 对 generic 写 `skills/story-setup/references/agent-references`。
331
- 5. 安装报告提示项见 Phase 3 第 11 步。
333
+ 3. `.story-deployed` 的 `target_cli` 写入 `generic` 或多端组合;`references_dir` 对 generic 写 `skills/story-setup/references/agent-references`。
334
+ 4. 安装报告提示项见 Phase 3 第 11 步。
332
335
 
333
336
  ### Step 7:创建部署标记
334
337
 
@@ -16,6 +16,9 @@ interface JsonStringPrefix {
16
16
  readonly complete: boolean;
17
17
  }
18
18
  export type WorkbenchMode = "story" | "drama";
19
+ export interface WorkspaceFilePath {
20
+ readonly path: string;
21
+ }
19
22
  /** Read the latest running Assistant step, including tool-only steps hidden from the Chat list. */
20
23
  export declare function streamingAssistant(timeline: ConversationTimelineSnapshot): PartialAssistant | null;
21
24
  /** Read a JSON string even while the model is still streaming its closing quote. */
@@ -29,6 +32,8 @@ export declare function latestSettledMutation(chat: ChatSnapshot): string | unde
29
32
  /** Convert a DSH tool path to the creative-relative path accepted by the narrow route. */
30
33
  export declare function creativeRelativePath(path: string | undefined, cwd: string | undefined): string | undefined;
31
34
  export declare function workbenchModeForPath(path: string | undefined): WorkbenchMode | undefined;
35
+ /** Choose the first useful document when a creative workbench opens. */
36
+ export declare function preferredWorkbenchFile(files: readonly WorkspaceFilePath[], mode: WorkbenchMode): string | undefined;
32
37
  /** Project one streamed mutation over its immediate predecessor. */
33
38
  export declare function previewMutation(activity: FileMutationActivity, base: string): string | undefined;
34
39
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"file-activity.d.ts","sourceRoot":"","sources":["../../../src/client/file-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EAEhB,MAAM,wCAAwC,CAAC;AAGhD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,oBAAoB,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAO9C,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,4BAA4B,GAAG,gBAAgB,GAAG,IAAI,CAUlG;AAgBD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAuBvF;AA4FD,0GAA0G;AAC1G,wBAAgB,aAAa,CAC3B,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,OAAO,GAAE,gBAAgB,GAAG,IAAW,GACtC,oBAAoB,EAAE,CASxB;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAI7F;AAiBD,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAS5E;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY1G;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAMxF;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBhG"}
1
+ {"version":3,"file":"file-activity.d.ts","sourceRoot":"","sources":["../../../src/client/file-activity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,4BAA4B,EAC5B,gBAAgB,EAChB,eAAe,EAEhB,MAAM,wCAAwC,CAAC;AAGhD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,oBAAoB,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,CAAC;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAOD,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,4BAA4B,GAAG,gBAAgB,GAAG,IAAI,CAUlG;AAgBD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAuBvF;AA4FD,0GAA0G;AAC1G,wBAAgB,aAAa,CAC3B,YAAY,EAAE,SAAS,eAAe,EAAE,EACxC,OAAO,GAAE,gBAAgB,GAAG,IAAW,GACtC,oBAAoB,EAAE,CASxB;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAI7F;AAiBD,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAS5E;AAED,0FAA0F;AAC1F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAY1G;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAMxF;AAED,wEAAwE;AACxE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,IAAI,EAAE,aAAa,GAClB,MAAM,GAAG,SAAS,CAmBpB;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAA+C,MAAM,wCAAwC,CAAC;AAqBtI,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,MAAM,UAAY,CAAC;AAEhC,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,oBAAoB,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,SAAS,CAAA;SAAE,CAAC;KAC5D;CACF;AA21BD,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAkBlD;;;;;;AAED,wBAAuC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAA+C,MAAM,wCAAwC,CAAC;AAsBtI,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,MAAM,UAAY,CAAC;AAEhC,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,oBAAoB,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,SAAS,CAAA;SAAE,CAAC;KAC5D;CACF;AA+0BD,iFAAiF;AACjF,wBAAgB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAkBlD;;;;;;AAED,wBAAuC"}
@@ -2,7 +2,8 @@ import type { Context } from "@deepseek-ai/cordis";
2
2
  import z from "@deepseek-ai/schemastery";
3
3
  export { createDramaSkillProvider, createOhStorySkillProvider, parseBundledSkill } from "./skill-provider.js";
4
4
  export { OH_STORY_ROLE_NAMES, loadBundledRole } from "./role-provider.js";
5
- export { createOhStoryRoleTool, OH_STORY_ROLE_TOOL_NAME, registerOhStoryRoleTool, roleToolFilter } from "./role-tool.js";
5
+ export { createOhStoryRoleTool, OH_STORY_ROLE_TOOL_NAME, registerOhStoryRoleTool, roleToolFilter, type OhStoryRoleSubagents } from "./role-tool.js";
6
+ export { bundledReferenceGuard, createOhStoryReferenceTool, OH_STORY_REFERENCE_TOOL_NAME } from "./reference-tool.js";
6
7
  export { registerWorkspaceRoute } from "./workspace-route.js";
7
8
  export { registerOhStoryHooks } from "./native-hooks.js";
8
9
  export declare const name = "oh-story";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAOzC,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,MAAM,UAA0D,CAAC;AAE9E,mFAAmF;AACnF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,MAAM,EAGb,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhB,oEAAoE;AACpE,wBAAsB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF;;;;;;;AAED,wBAA+C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,CAAC,MAAM,0BAA0B,CAAC;AAOzC,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpJ,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACtH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,eAAO,MAAM,IAAI,aAAa,CAAC;AAC/B,eAAO,MAAM,MAAM,UAA0D,CAAC;AAE9E,mFAAmF;AACnF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,MAAM,EAGb,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhB,oEAAoE;AACpE,wBAAsB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQhF;;;;;;;AAED,wBAA+C"}
@@ -0,0 +1,6 @@
1
+ import { type ToolDefinition, type ToolGuard, type ToolRuntime } from "@deepseek-ai/dsh-tools";
2
+ export declare const OH_STORY_REFERENCE_TOOL_NAME = "oh_story_bundled_reference";
3
+ export declare function createOhStoryReferenceTool(storySetupRoot?: string): Promise<ToolDefinition>;
4
+ /** Deny a scoped same-name replacement instead of executing untrusted reference code. */
5
+ export declare function bundledReferenceGuard(definition: ToolDefinition, tools: Pick<ToolRuntime, "get">): ToolGuard;
6
+ //# sourceMappingURL=reference-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-tool.d.ts","sourceRoot":"","sources":["../../src/reference-tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG3G,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AAsCzE,wBAAsB,0BAA0B,CAC9C,cAAc,SAAiD,GAC9D,OAAO,CAAC,cAAc,CAAC,CAqCzB;AAED,yFAAyF;AACzF,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,GAC9B,SAAS,CAKX"}
@@ -1 +1 @@
1
- {"version":3,"file":"role-provider.d.ts","sourceRoot":"","sources":["../../src/role-provider.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,0JAQtB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,cAAc,CAAC;AAOhE,wBAAgB,sBAAsB,IAAI,MAAM,CAK/C;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,QAAQ,SAA2B,EACnC,SAAS,GAAE,oBAAkC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
1
+ {"version":3,"file":"role-provider.d.ts","sourceRoot":"","sources":["../../src/role-provider.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,0JAQtB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,cAAc,CAAC;AAOhE,wBAAgB,sBAAsB,IAAI,MAAM,CAK/C;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,QAAQ,SAA2B,EACnC,SAAS,GAAE,oBAAkC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -1,10 +1,12 @@
1
1
  import type { Context } from "@deepseek-ai/cordis";
2
+ import type { SubagentRuntime } from "@deepseek-ai/dsh-subagent";
2
3
  import { type ToolDefinition } from "@deepseek-ai/dsh-tools";
3
4
  import { type OhStoryRoleName } from "./role-provider.js";
4
5
  export declare const OH_STORY_ROLE_TOOL_NAME = "oh_story_role";
6
+ export type OhStoryRoleSubagents = Pick<SubagentRuntime, "start">;
5
7
  export declare function roleToolFilter(role: OhStoryRoleName): {
6
8
  readonly allow: readonly string[];
7
9
  };
8
- export declare function createOhStoryRoleTool(): Promise<ToolDefinition>;
10
+ export declare function createOhStoryRoleTool(subagents?: OhStoryRoleSubagents): Promise<ToolDefinition>;
9
11
  export declare function registerOhStoryRoleTool(context: Context): Promise<void>;
10
12
  //# sourceMappingURL=role-tool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"role-tool.d.ts","sourceRoot":"","sources":["../../src/role-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEhG,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAYvD,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAE3F;AAMD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,CAAC,CAgErE;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7E"}
1
+ {"version":3,"file":"role-tool.d.ts","sourceRoot":"","sources":["../../src/role-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMzE,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEhG,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAYlE,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAE3F;AAMD,wBAAsB,qBAAqB,CAAC,SAAS,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAkErG;AAED,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAa7E"}