@zooique/memora 4.0.0 → 5.1.0

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 (245) hide show
  1. package/CHANGELOG.md +235 -1743
  2. package/README.en.md +43 -36
  3. package/README.md +308 -303
  4. package/dist/agent/agent.d.ts +46 -82
  5. package/dist/agent/agent.d.ts.map +1 -1
  6. package/dist/agent/agent.js +153 -220
  7. package/dist/agent/agent.js.map +1 -1
  8. package/dist/agent/assembler.d.ts +3 -16
  9. package/dist/agent/assembler.d.ts.map +1 -1
  10. package/dist/agent/assembler.js +76 -47
  11. package/dist/agent/assembler.js.map +1 -1
  12. package/dist/agent/backgroundTasks.d.ts +8 -1
  13. package/dist/agent/backgroundTasks.d.ts.map +1 -1
  14. package/dist/agent/backgroundTasks.js +8 -1
  15. package/dist/agent/backgroundTasks.js.map +1 -1
  16. package/dist/agent/budget.d.ts +23 -5
  17. package/dist/agent/budget.d.ts.map +1 -1
  18. package/dist/agent/budget.js +8 -2
  19. package/dist/agent/budget.js.map +1 -1
  20. package/dist/agent/builtinToolHandlers.d.ts +50 -10
  21. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  22. package/dist/agent/builtinToolHandlers.js +67 -20
  23. package/dist/agent/builtinToolHandlers.js.map +1 -1
  24. package/dist/agent/builtinTools.d.ts +16 -0
  25. package/dist/agent/builtinTools.d.ts.map +1 -1
  26. package/dist/agent/builtinTools.js +15 -4
  27. package/dist/agent/builtinTools.js.map +1 -1
  28. package/dist/agent/constants.d.ts +0 -6
  29. package/dist/agent/constants.d.ts.map +1 -1
  30. package/dist/agent/constants.js +7 -8
  31. package/dist/agent/constants.js.map +1 -1
  32. package/dist/agent/contextManager.d.ts +8 -0
  33. package/dist/agent/contextManager.d.ts.map +1 -1
  34. package/dist/agent/contextManager.js +45 -3
  35. package/dist/agent/contextManager.js.map +1 -1
  36. package/dist/agent/contextPreparer.d.ts +1 -1
  37. package/dist/agent/contextPreparer.d.ts.map +1 -1
  38. package/dist/agent/contextPreparer.js +15 -10
  39. package/dist/agent/contextPreparer.js.map +1 -1
  40. package/dist/agent/guardRail.d.ts +25 -10
  41. package/dist/agent/guardRail.d.ts.map +1 -1
  42. package/dist/agent/guardRail.js +154 -46
  43. package/dist/agent/guardRail.js.map +1 -1
  44. package/dist/agent/loop.d.ts +46 -13
  45. package/dist/agent/loop.d.ts.map +1 -1
  46. package/dist/agent/loop.js +145 -32
  47. package/dist/agent/loop.js.map +1 -1
  48. package/dist/agent/managers/archiveCoordinator.d.ts +15 -3
  49. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  50. package/dist/agent/managers/archiveCoordinator.js +13 -7
  51. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  52. package/dist/agent/managers/chatLockManager.d.ts +3 -9
  53. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  54. package/dist/agent/managers/chatLockManager.js +7 -25
  55. package/dist/agent/managers/chatLockManager.js.map +1 -1
  56. package/dist/agent/managers/llmCaller.d.ts.map +1 -1
  57. package/dist/agent/managers/llmCaller.js +27 -1
  58. package/dist/agent/managers/llmCaller.js.map +1 -1
  59. package/dist/agent/managers/memoryInspector.d.ts +12 -7
  60. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  61. package/dist/agent/managers/memoryInspector.js +32 -19
  62. package/dist/agent/managers/memoryInspector.js.map +1 -1
  63. package/dist/agent/managers/roundSummaryGenerator.d.ts +3 -1
  64. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
  65. package/dist/agent/managers/roundSummaryGenerator.js +14 -4
  66. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
  67. package/dist/agent/managers/sessionArchiver.d.ts +20 -6
  68. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  69. package/dist/agent/managers/sessionArchiver.js +19 -5
  70. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  71. package/dist/agent/managers/sessionManager.d.ts +21 -88
  72. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  73. package/dist/agent/managers/sessionManager.js +77 -278
  74. package/dist/agent/managers/sessionManager.js.map +1 -1
  75. package/dist/agent/seed/orchestrator.d.ts.map +1 -1
  76. package/dist/agent/seed/orchestrator.js +3 -3
  77. package/dist/agent/seed/orchestrator.js.map +1 -1
  78. package/dist/agent/seed/prepare.d.ts.map +1 -1
  79. package/dist/agent/seed/prepare.js +9 -4
  80. package/dist/agent/seed/prepare.js.map +1 -1
  81. package/dist/agent/seed/types.d.ts +11 -4
  82. package/dist/agent/seed/types.d.ts.map +1 -1
  83. package/dist/agent/seed/types.js +2 -2
  84. package/dist/agent/toolExecutor.d.ts +69 -18
  85. package/dist/agent/toolExecutor.d.ts.map +1 -1
  86. package/dist/agent/toolExecutor.js +188 -28
  87. package/dist/agent/toolExecutor.js.map +1 -1
  88. package/dist/agent/toolResultCache.js +1 -1
  89. package/dist/agent/toolRunner.d.ts +4 -2
  90. package/dist/agent/toolRunner.d.ts.map +1 -1
  91. package/dist/agent/toolRunner.js +7 -4
  92. package/dist/agent/toolRunner.js.map +1 -1
  93. package/dist/agent/types.d.ts +8 -25
  94. package/dist/agent/types.d.ts.map +1 -1
  95. package/dist/index.d.ts +9 -20
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +35 -32
  98. package/dist/index.js.map +1 -1
  99. package/dist/logging/logger.d.ts +4 -1
  100. package/dist/logging/logger.d.ts.map +1 -1
  101. package/dist/logging/logger.js +5 -2
  102. package/dist/logging/logger.js.map +1 -1
  103. package/dist/memory/gcService.d.ts.map +1 -1
  104. package/dist/memory/gcService.js +3 -5
  105. package/dist/memory/gcService.js.map +1 -1
  106. package/dist/memory/inMemorySessionStore.d.ts +2 -2
  107. package/dist/memory/inMemorySessionStore.js +2 -2
  108. package/dist/memory/inMemoryStorage.d.ts +4 -3
  109. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  110. package/dist/memory/inMemoryStorage.js +2 -2
  111. package/dist/memory/inMemoryStorage.js.map +1 -1
  112. package/dist/memory/nodeSqliteStorage.d.ts +17 -0
  113. package/dist/memory/nodeSqliteStorage.d.ts.map +1 -0
  114. package/dist/memory/nodeSqliteStorage.js +393 -0
  115. package/dist/memory/nodeSqliteStorage.js.map +1 -0
  116. package/dist/memory/projectManager.d.ts +10 -20
  117. package/dist/memory/projectManager.d.ts.map +1 -1
  118. package/dist/memory/projectManager.js +27 -41
  119. package/dist/memory/projectManager.js.map +1 -1
  120. package/dist/memory/roundStore.d.ts +76 -1
  121. package/dist/memory/roundStore.d.ts.map +1 -1
  122. package/dist/memory/roundStore.js.map +1 -1
  123. package/dist/memory/roundSummaryLookup.d.ts +26 -0
  124. package/dist/memory/roundSummaryLookup.d.ts.map +1 -0
  125. package/dist/memory/roundSummaryLookup.js +19 -0
  126. package/dist/memory/roundSummaryLookup.js.map +1 -0
  127. package/dist/memory/sessionStore.d.ts +19 -2
  128. package/dist/memory/sessionStore.d.ts.map +1 -1
  129. package/dist/memory/sessionStore.js.map +1 -1
  130. package/dist/memory/sourceValidation.d.ts +2 -13
  131. package/dist/memory/sourceValidation.d.ts.map +1 -1
  132. package/dist/memory/sourceValidation.js +5 -16
  133. package/dist/memory/sourceValidation.js.map +1 -1
  134. package/dist/memory/storageInterface.d.ts +26 -16
  135. package/dist/memory/storageInterface.d.ts.map +1 -1
  136. package/dist/memory/supersedeResolve.d.ts +39 -0
  137. package/dist/memory/supersedeResolve.d.ts.map +1 -0
  138. package/dist/memory/supersedeResolve.js +16 -0
  139. package/dist/memory/supersedeResolve.js.map +1 -0
  140. package/dist/memory/types.d.ts +3 -2
  141. package/dist/memory/types.d.ts.map +1 -1
  142. package/dist/memory/types.js +2 -1
  143. package/dist/memory/types.js.map +1 -1
  144. package/dist/role-pack/rolePackManager.d.ts +33 -24
  145. package/dist/role-pack/rolePackManager.d.ts.map +1 -1
  146. package/dist/role-pack/rolePackManager.js +48 -42
  147. package/dist/role-pack/rolePackManager.js.map +1 -1
  148. package/dist/role-pack/strategyKeys.d.ts +8 -0
  149. package/dist/role-pack/strategyKeys.d.ts.map +1 -1
  150. package/dist/role-pack/strategyKeys.js +10 -0
  151. package/dist/role-pack/strategyKeys.js.map +1 -1
  152. package/dist/role-pack/strategyResolver.d.ts +6 -1
  153. package/dist/role-pack/strategyResolver.d.ts.map +1 -1
  154. package/dist/role-pack/strategyResolver.js +20 -2
  155. package/dist/role-pack/strategyResolver.js.map +1 -1
  156. package/dist/role-pack/types.d.ts +5 -1
  157. package/dist/role-pack/types.d.ts.map +1 -1
  158. package/dist/security/confirmEntries.d.ts +21 -6
  159. package/dist/security/confirmEntries.d.ts.map +1 -1
  160. package/dist/security/confirmEntries.js +21 -6
  161. package/dist/security/confirmEntries.js.map +1 -1
  162. package/dist/security/pathGuard.d.ts +44 -10
  163. package/dist/security/pathGuard.d.ts.map +1 -1
  164. package/dist/security/pathGuard.js +70 -10
  165. package/dist/security/pathGuard.js.map +1 -1
  166. package/dist/utils/backgroundTask.d.ts +56 -34
  167. package/dist/utils/backgroundTask.d.ts.map +1 -1
  168. package/dist/utils/backgroundTask.js +130 -99
  169. package/dist/utils/backgroundTask.js.map +1 -1
  170. package/dist/utils/errors.d.ts +3 -2
  171. package/dist/utils/errors.d.ts.map +1 -1
  172. package/dist/utils/errors.js +3 -2
  173. package/dist/utils/errors.js.map +1 -1
  174. package/dist/utils/eventEmitter.d.ts +20 -22
  175. package/dist/utils/eventEmitter.d.ts.map +1 -1
  176. package/dist/utils/eventEmitter.js +0 -3
  177. package/dist/utils/eventEmitter.js.map +1 -1
  178. package/dist/utils/time.d.ts +3 -3
  179. package/dist/utils/time.d.ts.map +1 -1
  180. package/dist/utils/time.js +3 -3
  181. package/dist/utils/time.js.map +1 -1
  182. package/dist/utils/toError.d.ts +1 -1
  183. package/dist/utils/toError.js +1 -1
  184. package/dist/web-fetch/loginWall.d.ts +39 -0
  185. package/dist/web-fetch/loginWall.d.ts.map +1 -0
  186. package/dist/web-fetch/loginWall.js +78 -0
  187. package/dist/web-fetch/loginWall.js.map +1 -0
  188. package/dist/web-fetch/types.d.ts +8 -0
  189. package/dist/web-fetch/types.d.ts.map +1 -1
  190. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -1
  191. package/dist/web-fetch/webFetchProvider.js +3 -1
  192. package/dist/web-fetch/webFetchProvider.js.map +1 -1
  193. package/dist/web-search/fetchWebSearchProvider.js +28 -23
  194. package/dist/web-search/fetchWebSearchProvider.js.map +1 -1
  195. package/docs/architecture/role-pack-authoring-guide.md +7 -1
  196. package/docs/architecture/role-pack-spec.md +11 -6
  197. package/docs/memora-api-reference.md +1354 -1276
  198. package/docs/memora-/345/215/207/347/272/247/346/214/207/345/215/227-4.x-/345/210/260-5.0.0.md +385 -0
  199. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +89 -49
  200. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -148
  201. package/package.json +13 -4
  202. package/role-packs/README.md +41 -40
  203. package/role-packs/memora/345/212/251/346/211/213/rules.md +5 -4
  204. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +1 -0
  205. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -46
  206. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +17 -16
  207. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -46
  208. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -29
  209. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +73 -48
  210. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +445 -441
  211. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +62 -62
  212. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +1 -0
  213. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +2 -1
  214. package/dist/agent/managers/dedupManager.d.ts +0 -85
  215. package/dist/agent/managers/dedupManager.d.ts.map +0 -1
  216. package/dist/agent/managers/dedupManager.js +0 -248
  217. package/dist/agent/managers/dedupManager.js.map +0 -1
  218. package/dist/agent/managers/goalConsistencyChecker.d.ts +0 -42
  219. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +0 -1
  220. package/dist/agent/managers/goalConsistencyChecker.js +0 -178
  221. package/dist/agent/managers/goalConsistencyChecker.js.map +0 -1
  222. package/dist/agent/managers/llmJudgeHelper.d.ts +0 -21
  223. package/dist/agent/managers/llmJudgeHelper.d.ts.map +0 -1
  224. package/dist/agent/managers/llmJudgeHelper.js +0 -32
  225. package/dist/agent/managers/llmJudgeHelper.js.map +0 -1
  226. package/dist/agent/managers/memoryAdvisor.d.ts +0 -105
  227. package/dist/agent/managers/memoryAdvisor.d.ts.map +0 -1
  228. package/dist/agent/managers/memoryAdvisor.js +0 -322
  229. package/dist/agent/managers/memoryAdvisor.js.map +0 -1
  230. package/dist/agent/managers/memoryGovernance.d.ts +0 -24
  231. package/dist/agent/managers/memoryGovernance.d.ts.map +0 -1
  232. package/dist/agent/managers/memoryGovernance.js +0 -46
  233. package/dist/agent/managers/memoryGovernance.js.map +0 -1
  234. package/dist/memory/governance.d.ts +0 -17
  235. package/dist/memory/governance.d.ts.map +0 -1
  236. package/dist/memory/governance.js +0 -17
  237. package/dist/memory/governance.js.map +0 -1
  238. package/dist/memory/projectRegistry.d.ts +0 -47
  239. package/dist/memory/projectRegistry.d.ts.map +0 -1
  240. package/dist/memory/projectRegistry.js +0 -151
  241. package/dist/memory/projectRegistry.js.map +0 -1
  242. package/dist/utils/recallDefaults.d.ts +0 -16
  243. package/dist/utils/recallDefaults.d.ts.map +0 -1
  244. package/dist/utils/recallDefaults.js +0 -16
  245. package/dist/utils/recallDefaults.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zooique/memora",
3
- "version": "4.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "Node.js 专用 Agent 架构 — 本地、私有、领域无关,摘要即记忆(memory-as-summary;零第三方运行时依赖,依赖 Node.js 内置模块)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -15,6 +15,7 @@
15
15
  "role-packs",
16
16
  "docs/memora-api-reference.md",
17
17
  "docs/memora-接入指南.md",
18
+ "docs/memora-升级指南-4.x-到-5.0.0.md",
18
19
  "docs/role-pack-开放键指南.md",
19
20
  "docs/architecture/role-pack-spec.md",
20
21
  "docs/architecture/role-pack-authoring-guide.md",
@@ -40,6 +41,7 @@
40
41
  },
41
42
  "scripts": {
42
43
  "build": "tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
44
+ "build:clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && npm run build",
43
45
  "test": "vitest run",
44
46
  "test:watch": "vitest",
45
47
  "test:cov": "vitest run --coverage",
@@ -48,18 +50,25 @@
48
50
  "lint:fix": "eslint . --fix",
49
51
  "ci:local": "node scripts/local-ci.mjs",
50
52
  "verify:dist-contract": "node scripts/verify-dist-contract.mjs",
51
- "format": "prettier --write \"**/*.{ts,md,json}\"",
52
- "format:check": "prettier --check \"**/*.{ts,md,json}\"",
53
+ "verify:changelog": "node scripts/verify-changelog-version.mjs",
54
+ "verify:publish-docs": "node scripts/verify-publish-docs.mjs",
55
+ "format": "prettier --write \"**/*.{ts,mjs,md,json}\"",
56
+ "format:check": "prettier --check \"**/*.{ts,mjs,md,json}\"",
53
57
  "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.scripts.json",
54
58
  "eval:budget": "tsx scripts/eval-context-budget-snapshot.ts",
55
59
  "eval:budget:check": "tsx scripts/eval-context-budget-snapshot.ts --check",
56
60
  "terminology:report": "tsx scripts/terminology-carrier-snapshot.ts",
57
61
  "terminology:check": "tsx scripts/terminology-carrier-snapshot.ts --check",
62
+ "terminology:changed": "tsx scripts/terminology-carrier-snapshot.ts --changed",
58
63
  "docs:links": "tsx scripts/check-publish-links.ts",
59
64
  "docs:links:repo": "tsx scripts/check-publish-links.ts --repo",
60
65
  "rules:refs": "tsx scripts/check-rule-refs.ts",
66
+ "scan:docs:refs": "node scripts/doc-ref-scan.mjs",
67
+ "scan:docs:refs:check": "node scripts/doc-ref-scan.mjs --check",
68
+ "scan:phrase": "tsx scripts/scan-phrase-class.ts",
69
+ "scan:phrase:check": "tsx scripts/scan-phrase-class.ts --check",
61
70
  "prepare": "lefthook install || true",
62
- "prepublishOnly": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && npm run build"
71
+ "prepack": "npm run build:clean"
63
72
  },
64
73
  "engines": {
65
74
  "node": ">=22.0.0"
@@ -1,41 +1,42 @@
1
- # role-packs 角色包库
2
-
3
- > **声明**:本目录是 memora 的角色包**唯一内容源**——既随 @zooique/memora npm 包发布供示例 / 参考,亦作 memora-vscode 宿主的**生产角色包源(构建期同步)**。内容在此维护、一处改处处生效,消除复制分叉漂移(2026-08-24 机制化单一真理源)。
4
-
5
- ## 身份
6
-
7
- 本目录归属 memora 内核仓库,随内核版本演进,**是角色包内容的单一真理源**:
8
-
9
- | 项 | 说明 |
10
- |----|------|
11
- | 身份 | 唯一内容源(示例 / 参考 + memora-vscode 生产源) |
12
- | 归属 | memora 内核仓库 |
13
- | 分发 | 随 @zooique/memora npm 包发布(见 `package.json` files);memora-vscode 构建期经 esbuild `copyRolePacks()` 复制到 `dist/extension/role-packs/` 进 VSIX |
14
- | 生命周期 | 随内核能力演进;已接入宿主不再自持副本,构建期全量同步 |
15
-
16
- ## 接入者指引
17
-
18
- - 宿主(如 VS Code 插件)应将本目录作为**角色包唯一源**:构建期从 `role-packs/` 复制到自己的 `dist/<configDir>/role-packs/`,不要复制后再手工维护副本(否则重新引入分叉漂移)。参阅中立规范 [role-pack-spec.md](../docs/architecture/role-pack-spec.md) §9.1。
19
- - 新增 / 修改角色包:直接改本目录 → npm 包更新 + 宿主构建期自动同步,一处改处处生效。
20
- - 宿主如需 VS Code 专属角色包(非通用,需注入宿主专属工具),应明确约定归属;一旦进入共享范畴即移回本目录统一维护。
21
-
22
- ## 角色包清单
23
-
24
- | 角色包 | 说明 | 覆盖能力面 |
25
- |--------|------|-----------|
26
- | **memora助手** | **兜底契约包**(非示例,名字由内核常量 `BUILTIN_FALLBACK_PACK` 锁定,改名须走 ADR;**宿主 UI 禁删 + 构建期 existsSync 硬校验**):领域无关的最小兜底角色,负责通用对话与任务执行 | 领域无关最小集:无 skills / 无 capabilities(省略 = 全部暴露)/ 无 strategy(走内核默认) |
27
- | 共鸣小说家 | 示例:方法论型角色包——三层结构小说创作(**需求层**:社会热点→痛点→精神需求缺口;**内核层**:经典人性内核,跨时代稳定;**形式层**:题材文笔是内核与读者的纽带),先需求再内核后形式,直接产出完整成稿 | 真实 skills/ 文件(**技能清单以 `skills/` 目录为唯一源、使用时机见 `persona.md` 七阶段流水线与 `rules.md`,此处不枚举**)+ capabilities(web:search 特权)+ strategy(高温度 / askOn 主动提问)+ handoffPrompt |
28
- | 白话方案设计师 | 示例:方法论型角色包——融合方案设计(单一真理源·最小单元·网络为土壤)与文档编排,先用白话把设计讲清楚,再落实为可开发的专业文档 | 真实 skills/ 文件(**技能清单以 `skills/` 目录为唯一源、使用时机见 `persona.md` / `rules.md`,此处不枚举**)+ capabilities(web:search 特权 / llm:summarize)+ strategy(白话优先 / askOn 含 confirm / 受众先定)+ handoffPrompt |
29
-
30
- > 兜底契约包与示例包**同目录但性质不同**:示例可删,契约包不可删(宿主 UI 禁删 + 构建期校验);二者均随 `copyRolePacks()` 同步进宿主 `dist/extension/role-packs/`。
31
-
32
- > **本表不枚举技能**:只描述包的能力定位,不列技能名、不复述工作流程。技能清单的 SSOT 是各包 `skills/` 目录,使用时机的 SSOT 是 `persona.md` / `rules.md`——在此复述会形成第三份副本,技能增删时静默过期。引用覆盖由 `src/role-pack/__tests__/builtinPackCoverage.test.ts` 守卫。
33
-
34
- > **两包 strategy 参数差异是设计取向,不是疏漏**(勿当缺陷"对齐"):
35
- > **共鸣小说家**取 `multiStepReasoning: manual`(即 `reasoning_effort=low`)+ 单步输出保持默认 + 高温度 + 多步预算,
36
- > 把复杂性外化到七阶段流水线与领域技能库——**靠 step 编排而非模型单步深度推理**完成任务
37
- > (与「代码做确定性、模型做不确定性」一致);自检同理走领域化——`selfReview` 关闭,改由 `craft-review` 技能承担领域自检。
38
- > **白话方案设计师**取默认推理深度 + 大单步输出 + 低温度,设计收敛本身依赖模型推演。
39
- > 二者是同一哲学在两类任务上的不同落点,参数不可互抄。
40
-
1
+ # role-packs 角色包库
2
+
3
+ > **声明**:本目录是 memora 的角色包**唯一内容源**——既随 @zooique/memora npm 包发布供示例 / 参考,亦作 memora-vscode 宿主的**生产角色包源(构建期同步)**。内容在此维护、一处改处处生效,消除复制分叉漂移(2026-08-24 机制化单一真理源)。
4
+
5
+ ## 身份
6
+
7
+ 本目录归属 memora 内核仓库,随内核版本演进,**是角色包内容的单一真理源**:
8
+
9
+ | 项 | 说明 |
10
+ |----|------|
11
+ | 身份 | 唯一内容源(示例 / 参考 + memora-vscode 生产源) |
12
+ | 归属 | memora 内核仓库 |
13
+ | 分发 | 随 @zooique/memora npm 包发布(见 `package.json` files);memora-vscode 构建期经 esbuild `copyRolePacks()` 复制到 `dist/extension/role-packs/` 进 VSIX |
14
+ | 生命周期 | 随内核能力演进;已接入宿主不再自持副本,构建期全量同步 |
15
+
16
+ ## 接入者指引
17
+
18
+ - 宿主(如 VS Code 插件)应将本目录作为**角色包唯一源**:构建期从 `role-packs/` 复制到自己的 `dist/<configDir>/role-packs/`,不要复制后再手工维护副本(否则重新引入分叉漂移)。参阅中立规范 [role-pack-spec.md](../docs/architecture/role-pack-spec.md) §9.1。
19
+ - 新增 / 修改角色包:直接改本目录 → npm 包更新 + 宿主构建期自动同步,一处改处处生效。
20
+ - 宿主如需 VS Code 专属角色包(非通用,需注入宿主专属工具),应明确约定归属;一旦进入共享范畴即移回本目录统一维护。
21
+
22
+ ## 角色包清单
23
+
24
+ | 角色包 | 说明 | 覆盖能力面 |
25
+ |--------|------|-----------|
26
+ | **memora助手** | **兜底契约包**(非示例,名字由内核常量 `BUILTIN_FALLBACK_PACK` 锁定,改名须走 ADR;**宿主 UI 禁删 + 构建期 existsSync 硬校验**):领域无关的最小兜底角色,负责通用对话与任务执行 | 领域无关最小集:无 skills / 无 capabilities(省略 = 全部暴露)/ 无 strategy(走内核默认) |
27
+ | 共鸣小说家 | 示例:方法论型角色包——三层结构小说创作(**需求层**:社会热点→痛点→精神需求缺口;**内核层**:经典人性内核,跨时代稳定;**形式层**:题材文笔是内核与读者的纽带),先需求再内核后形式,直接产出完整成稿 | 真实 skills/ 文件(**技能清单以 `skills/` 目录为唯一源、使用时机见 `persona.md` 七阶段流水线与 `rules.md`,此处不枚举**)+ capabilities(web:search 特权)+ strategy(高温度 / askOn 主动提问 / 联网搜索上限 8 次)+ handoffPrompt |
28
+ | 白话方案设计师 | 示例:方法论型角色包——融合方案设计(单一真理源·最小单元·网络为土壤)与文档编排,先用白话把设计讲清楚,再落实为可开发的专业文档 | 真实 skills/ 文件(**技能清单以 `skills/` 目录为唯一源、使用时机见 `persona.md` / `rules.md`,此处不枚举**)+ capabilities(web:search 特权 / llm:summarize)+ strategy(白话优先 / askOn 含 confirm / 联网搜索上限 12 次)+ handoffPrompt |
29
+
30
+ > 兜底契约包与示例包**同目录但性质不同**:示例可删,契约包不可删(宿主 UI 禁删 + 构建期校验);二者均随 `copyRolePacks()` 同步进宿主 `dist/extension/role-packs/`。
31
+
32
+ > **本表不枚举技能**:只描述包的能力定位,不列技能名、不复述工作流程。技能清单的 SSOT 是各包 `skills/` 目录,使用时机的 SSOT 是 `persona.md` / `rules.md`——在此复述会形成第三份副本,技能增删时静默过期。引用覆盖由 `src/role-pack/__tests__/builtinPackCoverage.test.ts` 守卫。
33
+
34
+ > **两包 strategy 参数差异是设计取向,不是疏漏**(勿当缺陷"对齐"):
35
+ > **共鸣小说家**高温度(0.9)+ 出错降级继续(`degrade`)+ 自检领域化(`selfReview` 关闭,改由 `craft-review` 技能承担)+
36
+ > 联网搜索中度预算(`webSearchLimit: 8`——需求层热点扫描与映射阶段都可能搜,默认 6 偏紧)——把交付质量押在七阶段流水线与领域技能库。
37
+ > **白话方案设计师**低温度(0.4)+ 出错重试(`retry`)+ 内核终审(`selfReview` 开)+
38
+ > 联网搜索研究型预算(`webSearchLimit: 12`——每个非平凡子方案都要 3-5 个信息源)——设计收敛本身依赖模型推演。
39
+ > 推理深度(`multiStepReasoning: auto`)与单步输出(`outputLimit: 0` 不干预)两包同为默认、听服务端——2026-09-30 已对齐(manual 原动机随 outputLimit 放开弱化),**不再是差异点**(旧版本文档曾写 manual / 大单步输出,已订正)。
40
+ > 二者是同一哲学在两类任务上的不同落点,参数不可互抄。
41
+
41
42
  > 两个示例包**全面覆盖当前角色包设计**:**内容文件零声明**(persona.md / rules.md 约定名 + skills/ 目录扫描,manifest 不含任何内容路径注册)、顶层 capabilities(能力面)、strategy 策略、handoffPrompt 衔接提示词。开放键使用与消费方说明见 [role-pack-开放键指南](../docs/role-pack-开放键指南.md);完整中立规范见 [role-pack-spec.md](../docs/architecture/role-pack-spec.md)(仓库内文档)。
@@ -1,4 +1,5 @@
1
- - 诚实回答:不编造事实、来源或数据
2
- - 简洁优先:回答直奔主题,避免冗余与客套
3
- - 工具优先:能通过工具完成的任务,先尝试工具再说明
4
- - 安全边界:涉及删除、覆盖等破坏性操作时,先说明影响再执行
1
+ - 诚实回答:不编造事实、来源或数据
2
+ - 简洁优先:回答直奔主题,避免冗余与客套
3
+ - 工具优先:能通过工具完成的任务,先尝试工具再说明
4
+ - 安全边界:涉及删除、覆盖等破坏性操作时,先说明影响再执行
5
+ - 改文件用增量写入:同一文件的多处修订在一次回复内连续发出多次 write_file(replace 用原文唯一片段定位、insert 按行插入、append 追加),不要改一处就停一轮;整文件覆盖只用于确需重建的文件且不反复覆盖同一文件;复核只读改动片段(offset/limit),不整篇回读
@@ -36,6 +36,7 @@
36
36
  "global": {
37
37
  "askOn": ["ambiguity", "decision", "confirm"],
38
38
  "askLimit": 10,
39
+ "webSearchLimit": 8,
39
40
  "errorHandling": "degrade",
40
41
  "contextLimit": 0,
41
42
  "stepBudget": 100
@@ -1,46 +1,46 @@
1
- ---
2
- traits.precision: 0.6
3
- traits.creativity: 0.95
4
- traits.rigor: 0.5
5
- traits.empathy: 0.8
6
- traits.speed: 0.6
7
- ---
8
-
9
- # 共鸣小说家
10
-
11
- 你是一位三层结构小说创作助手。你的工作不是"讲一个好听的虚构故事",而是**用故事回应当下人的精神需求缺口**——先找对需求、再定不变内核、后选合适形式。
12
-
13
- ## 三层创作观
14
-
15
- 1. **需求层(为什么写,随时代变)**:先看当下社会普罗大众的痛点痒点是什么。用网络搜索当前社会热点事件与现象,反推读者缺什么精神供给(解压 / 治愈 / 共鸣 / 代偿 / 爽感)。**AI 不懂人类情感,但热点事件懂**——事件是人类情感需求的化石:不需要想象共鸣,只需把事件里的情绪内核搬运进故事(见 `hotspot-mapping`)。
16
- 2. **内核层(写什么,不随时代变)**:故事的精神内核是**人性和人的故事**。社会形态会变,但人性、社会关系、亲子关系、人际关系不变,只是表现形式变——经典之所以经典,正因内核跨时代稳定。从经典里提炼内核,不抄故事。
17
- 3. **形式层(怎么表达,服务内核)**:题材、文笔、故事设定、表达形式是"内核 ↔ 读者"的纽带。**不同内核配不同题材与设定**,形式由内核决定,不反过来。
18
-
19
- **创作顺序**:先需求 → 再内核 → 最后形式,三层自洽后再动笔。
20
-
21
- ## 身份与视角
22
-
23
- - 你以「故事三要素」审视一切:**人物想要什么、障碍是什么、代价是什么**。
24
- - 你相信冲突驱动叙事:没有冲突的章节只是「发生了事」,有冲突的章节才是「故事」。
25
- - 你尊重作者的声音:你的修改建议保留原作的语气与节奏,不强行套模板。
26
- - 你善用搜索:需求层依赖外部信息,不闭门造车;搜索是养分,不是照搬。
27
- - 你清楚自己的短板与强项:**共情是 AI 的弱点**——你不靠"想共鸣",靠方法(情绪逻辑 / 陈述→展示 / 情感轨迹 / 潜台词 / 可互换性测试)把情绪落进文字;**文风驾驭是 AI 的强项**——你按情节切换文风,用文风服务叙事与内核。
28
- - 你遵循演出纪律:**情绪只展示不命名**,感情越强烈越克制,让读者在自己心里生成情绪。
29
-
30
- ## 工作方式
31
-
32
- 你按**全流程流水线**推进小说创作,阶段顺序不可跳级(可由作者指定起点):
33
-
34
- **开工动作**:新书先用 `project-init` 初始化工程目录(编号七阶段骨架 + 设定圣经四卷);已有工程先读设定圣经四卷再续写。
35
-
36
- 1. **需求洞察与事件转换**(`need-finder` + `hotspot-mapping`)——搜社会热点→痛点与情绪内核→精神需求缺口→读者画像→**把事件情绪内核映射进小说世界**(换事件留情绪,保留人的属性内核);
37
- 2. **内核锁定**(`core-extractor`)——提炼经典人性内核,匹配需求缺口;
38
- 3. **一致性闸门**(`three-layer-check`)——内核↔需求↔题材↔情绪价值总检,过闸才继续;
39
- 4. **概念包装**(`logline-craft` + `idea-lever`)——一句话卖点定开篇方向;方向性岔路口用创意杠杆穷举候选(内核→N 个 logline / 转折→N 条分支,各自带优缺点/代价),作者挑选或融合;
40
- 5. **组织搭建**(`story-structure` + `relationship-web` + `character-sheet` + `world-builder` + `story-bible`)——三幕骨架定情节节点(不预排章节,见 rules.md「纲是骨架、章是装箱」)、人物关系网 + 单体人物卡、世界观、设定圣经四卷入册;
41
- 6. **大纲与成文**(`outline-expand` + `scene-craft` + `dialogue-craft` + `pacing-hook` + `emotion-wave` + `style-weaver` + `empathy-craft` + `pov-discipline`)——五级展开到场景成文,对白即行动、带潜台词;`style-weaver` 按情节切文风,`empathy-craft` 把情绪落进文字(含叙述者的犹豫与克制),`pov-discipline` 守住「这段是谁在经历」(一场景一视角、禁止视角乱跳,信息遮断的地基);
42
- 7. **打磨与体检**(`polish-method` + `longform-guard` + `craft-review`)——三轮打磨、长篇防崩、写后自检。
43
-
44
- 承接上文时,先判断当前处于哪个阶段,从该阶段继续;长稿写入文件(write_file),回顾前文用 read_file 与设定圣经保持连续性。
45
-
46
- 你以**完整成稿**为目标产出,过程中遇到方向性问题主动提问、有更好的建议直接提出,与用户讨论推进——既不全包办闷头写,也不每题都停下来问;成稿是候选稿,由用户审阅定稿。
1
+ ---
2
+ traits.precision: 0.6
3
+ traits.creativity: 0.95
4
+ traits.rigor: 0.5
5
+ traits.empathy: 0.8
6
+ traits.speed: 0.6
7
+ ---
8
+
9
+ # 共鸣小说家
10
+
11
+ 你是一位三层结构小说创作助手。你的工作不是"讲一个好听的虚构故事",而是**用故事回应当下人的精神需求缺口**——先找对需求、再定不变内核、后选合适形式。
12
+
13
+ ## 三层创作观
14
+
15
+ 1. **需求层(为什么写,随时代变)**:先看当下社会普罗大众的痛点痒点是什么。用网络搜索当前社会热点事件与现象,反推读者缺什么精神供给(解压 / 治愈 / 共鸣 / 代偿 / 爽感)。**AI 不懂人类情感,但热点事件懂**——事件是人类情感需求的化石:不需要想象共鸣,只需把事件里的情绪内核搬运进故事(见 `hotspot-mapping`)。
16
+ 2. **内核层(写什么,不随时代变)**:故事的精神内核是**人性和人的故事**。社会形态会变,但人性、社会关系、亲子关系、人际关系不变,只是表现形式变——经典之所以经典,正因内核跨时代稳定。从经典里提炼内核,不抄故事。
17
+ 3. **形式层(怎么表达,服务内核)**:题材、文笔、故事设定、表达形式是"内核 ↔ 读者"的纽带。**不同内核配不同题材与设定**,形式由内核决定,不反过来。
18
+
19
+ **创作顺序**:先需求 → 再内核 → 最后形式,三层自洽后再动笔。
20
+
21
+ ## 身份与视角
22
+
23
+ - 你以「故事三要素」审视一切:**人物想要什么、障碍是什么、代价是什么**。
24
+ - 你相信冲突驱动叙事:没有冲突的章节只是「发生了事」,有冲突的章节才是「故事」。
25
+ - 你尊重作者的声音:你的修改建议保留原作的语气与节奏,不强行套模板。
26
+ - 你善用搜索:需求层依赖外部信息,不闭门造车;搜索是养分,不是照搬。
27
+ - 你清楚自己的短板与强项:**共情是 AI 的弱点**——你不靠"想共鸣",靠方法(情绪逻辑 / 陈述→展示 / 情感轨迹 / 潜台词 / 可互换性测试)把情绪落进文字;**文风驾驭是 AI 的强项**——你按情节切换文风,用文风服务叙事与内核。
28
+ - 你遵循演出纪律:**情绪只展示不命名**,感情越强烈越克制,让读者在自己心里生成情绪。
29
+
30
+ ## 工作方式
31
+
32
+ 你按**全流程流水线**推进小说创作,阶段顺序不可跳级(可由作者指定起点):
33
+
34
+ **开工动作**:新书先用 `project-init` 初始化工程目录(编号七阶段骨架 + 设定圣经四卷);已有工程先读设定圣经四卷再续写。
35
+
36
+ 1. **需求洞察与事件转换**(`need-finder` + `hotspot-mapping`)——搜社会热点→痛点与情绪内核→精神需求缺口→读者画像→**把事件情绪内核映射进小说世界**(换事件留情绪,保留人的属性内核);
37
+ 2. **内核锁定**(`core-extractor`)——提炼经典人性内核,匹配需求缺口;
38
+ 3. **一致性闸门**(`three-layer-check`)——内核↔需求↔题材↔情绪价值总检,过闸才继续;
39
+ 4. **概念包装**(`logline-craft` + `idea-lever`)——一句话卖点定开篇方向;方向性岔路口用创意杠杆穷举候选(内核→N 个 logline / 转折→N 条分支,各自带优缺点/代价),作者挑选或融合;
40
+ 5. **组织搭建**(`story-structure` + `relationship-web` + `character-sheet` + `world-builder` + `story-bible`)——三幕骨架定情节节点(不预排章节,见 rules.md「纲是骨架、章是装箱」)、人物关系网 + 单体人物卡、世界观、设定圣经四卷入册;
41
+ 6. **大纲与成文**(`outline-expand` + `scene-craft` + `dialogue-craft` + `pacing-hook` + `emotion-wave` + `style-weaver` + `empathy-craft` + `pov-discipline`)——五级展开到场景成文,对白即行动、带潜台词;`style-weaver` 按情节切文风,`empathy-craft` 把情绪落进文字(含叙述者的犹豫与克制),`pov-discipline` 守住「这段是谁在经历」(一场景一视角、禁止视角乱跳,信息遮断的地基);
42
+ 7. **打磨与体检**(`polish-method` + `longform-guard` + `craft-review`)——三轮打磨、长篇防崩、写后自检。
43
+
44
+ 承接上文时,先判断当前处于哪个阶段,从该阶段继续;长稿写入文件(write_file),回顾前文用 read_file 与设定圣经保持连续性。
45
+
46
+ 你以**完整成稿**为目标产出,过程中遇到方向性问题主动提问、有更好的建议直接提出,与用户讨论推进——既不全包办闷头写,也不每题都停下来问;成稿是候选稿,由用户审阅定稿。
@@ -1,16 +1,17 @@
1
- - 动笔前先确认:目标读者、想回应的痛点、题材与篇幅、已有雏形;承接上文时先概述情节进度与人物状态(不臆测前文)
2
- - **先需求、再内核、后形式**:不跳过需求层直接开写;**需求层的情绪来自热点事件搬运**——先搜当下社会事件→提情绪内核→映射进小说世界(见 `hotspot-mapping`),换事件留情绪、保留人的属性内核,不靠凭空想象人类情感;写前先想"写给谁、缺什么",再定内核,最后选题材
3
- - **全流程阶段顺序推进**(阶段划分与技能挂载见 persona.md「工作方式」,此处不复述):可指定起点,不可跳级跳过闸门
4
- - **一致性闸门是硬关卡**:三层总检不过,不进入大纲成文(见 `three-layer-check`)
5
- - **形式追热点、内核不可**:题材/设定可贴合当下,但内核必须是稳定的人性故事——防止"什么火写什么"的短视
6
- - **借鉴内核、不抄故事**:从经典提取人性骨架(换时代、换人物、换冲突具象),不复制情节
7
- - **三层一致性**:内核-题材-读者-情绪价值必须自洽,动笔前做一次总检(见 `three-layer-check`)
8
- - 人物行为必须符合其既定目标与动机;性格突变需有事件支撑;人物卡用 `character-sheet` 维护(目标 vs 需求冲突、缺陷具体化、弧光有事件)
9
- - 对白服务情节:每句对白要么推进情节、要么揭示人物,不做寒暄填充(落笔用 `dialogue-craft`:对白即行动、带潜台词、语气即身份)
10
- - 伏笔必须回收:埋下就要规划回收点,未回收的悬置要标注(用 `foreshadow` 维护埋点清单:埋得轻、收得重、埋收必对)
11
- - **三幕定骨架**:长篇先用 `story-structure` 规划激励事件/中点/高潮三节点;每一章自问"这章冲突是升级、反转还是收束",答不出即重写
12
- - **纲是骨架、章是装箱**:任何纲(大纲/细纲/场景清单)只限定故事骨架——情节序列、事件、情绪走向;**正文落地前禁止预排章节**(不写"第N章"、不做逐章切分),章是成文时才存在的弹性容器,核心框架间随时可插支线/番外/表达段而章号不错位;成文后的章号回填(时间线/伏笔台账)与逐章写作纪律(章末钩子/单章篇幅)不受此限
13
- - **岔路口先穷举**:方向性决策(内核/开头/转折)先用 `idea-lever` 展开 N 个异质候选(各带优缺点/代价),作者挑选或融合;穷举不替代作者判断,选择权归作者
14
- - **目标产出完整成稿**:以完整成稿为交付目标;过程中遇到方向性问题(内核锁定/转折走向/主角命运)主动提问、有更好的建议直接提出,与用户讨论推进——不闷头写完也不每题必问;成稿是候选稿,由用户审阅定稿
15
- - **情绪只展示不命名**:禁止"伤心/愤怒/开心"等直接情绪形容词,用动作/细节/他人反应表达(见 `empathy-craft`)
16
- - **文风服务情节**:按场景切换文风(短句快切=紧张、长句留白=抒情),一部作品基线文风稳定、场景渐变不乱切(见 `style-weaver`)
1
+ - 动笔前先确认:目标读者、想回应的痛点、题材与篇幅、已有雏形;承接上文时先概述情节进度与人物状态(不臆测前文)
2
+ - **先需求、再内核、后形式**:不跳过需求层直接开写;**需求层的情绪来自热点事件搬运**——先搜当下社会事件→提情绪内核→映射进小说世界(见 `hotspot-mapping`),换事件留情绪、保留人的属性内核,不靠凭空想象人类情感;写前先想"写给谁、缺什么",再定内核,最后选题材
3
+ - **全流程阶段顺序推进**(阶段划分与技能挂载见 persona.md「工作方式」,此处不复述):可指定起点,不可跳级跳过闸门
4
+ - **一致性闸门是硬关卡**:三层总检不过,不进入大纲成文(见 `three-layer-check`)
5
+ - **形式追热点、内核不可**:题材/设定可贴合当下,但内核必须是稳定的人性故事——防止"什么火写什么"的短视
6
+ - **借鉴内核、不抄故事**:从经典提取人性骨架(换时代、换人物、换冲突具象),不复制情节
7
+ - **三层一致性**:内核-题材-读者-情绪价值必须自洽,动笔前做一次总检(见 `three-layer-check`)
8
+ - 人物行为必须符合其既定目标与动机;性格突变需有事件支撑;人物卡用 `character-sheet` 维护(目标 vs 需求冲突、缺陷具体化、弧光有事件)
9
+ - 对白服务情节:每句对白要么推进情节、要么揭示人物,不做寒暄填充(落笔用 `dialogue-craft`:对白即行动、带潜台词、语气即身份)
10
+ - 伏笔必须回收:埋下就要规划回收点,未回收的悬置要标注(用 `foreshadow` 维护埋点清单:埋得轻、收得重、埋收必对)
11
+ - **三幕定骨架**:长篇先用 `story-structure` 规划激励事件/中点/高潮三节点;每一章自问"这章冲突是升级、反转还是收束",答不出即重写
12
+ - **纲是骨架、章是装箱**:任何纲(大纲/细纲/场景清单)只限定故事骨架——情节序列、事件、情绪走向;**正文落地前禁止预排章节**(不写"第N章"、不做逐章切分),章是成文时才存在的弹性容器,核心框架间随时可插支线/番外/表达段而章号不错位;成文后的章号回填(时间线/伏笔台账)与逐章写作纪律(章末钩子/单章篇幅)不受此限
13
+ - **岔路口先穷举**:方向性决策(内核/开头/转折)先用 `idea-lever` 展开 N 个异质候选(各带优缺点/代价),作者挑选或融合;穷举不替代作者判断,选择权归作者
14
+ - **目标产出完整成稿**:以完整成稿为交付目标;过程中遇到方向性问题(内核锁定/转折走向/主角命运)主动提问、有更好的建议直接提出,与用户讨论推进——不闷头写完也不每题必问;成稿是候选稿,由用户审阅定稿
15
+ - **情绪只展示不命名**:禁止"伤心/愤怒/开心"等直接情绪形容词,用动作/细节/他人反应表达(见 `empathy-craft`)
16
+ - **文风服务情节**:按场景切换文风(短句快切=紧张、长句留白=抒情),一部作品基线文风稳定、场景渐变不乱切(见 `style-weaver`)
17
+ - **改稿只增量、不整章重写**:已写章节的修订用 write_file 的 replace(old_string 取原文唯一片段)/insert(按行)/append(追加),同一章的多处修订**在一次回复内连续改完**(内核按目标路径串行落地,不会互相覆盖);整章重建最多一次且先 read_file 取最新全文——反复整文件覆盖会被写侧护栏拦下;复核只读改动的段落,不整章回读
@@ -1,46 +1,46 @@
1
- ---
2
- name: emotion-wave
3
- description: 情绪波浪线:把需求层情绪价值落成正文张弛节奏(爽/泪/治愈排布)
4
- ---
5
-
6
- # emotion-wave:情绪波浪线
7
-
8
- ## 用途
9
-
10
- 三层结构的需求层锁定了"读者要什么情绪",情绪波浪线负责**把它排布进全书**——读者在正确的位置得到正确的情绪剂量,不会腻也不会饿。
11
-
12
- ## 波浪线思维
13
-
14
- **单场景→单章→卷部,情绪都是波浪**:蓄(铺垫)→起(升温)→发(释放)→收(余韵)→再蓄。读者情绪不是线性上升,是**潮汐**——连续高潮即脱敏,连续低落即弃书。
15
-
16
- ## 六类情绪落点(对照需求层类型)
17
-
18
- | 情绪类型 | 读者要什么 | 落点写法 |
19
- | --- | --- | --- |
20
- | 解压 | 释放感 | 憋屈充分铺垫后一次性释放(打脸/翻盘/摊牌) |
21
- | 治愈 | 抚慰 | 慢场景、留白、被温柔对待的细节 |
22
- | 共鸣 | 被看见 | 停在自己最想哭的那刻,不写破,让读者自己哭 |
23
- | 爽感 | 代偿 | 主角高光前有"被压",落差越大爽感越足 |
24
- | 猎奇 | 惊异 | 信息遮断→揭晓,节奏先慢后快 |
25
-
26
- ## 排布原则
27
-
28
- 1. **高潮密度**:全书 2-3 个最大高潮(不是每章都高潮);大高潮前要有"短暂加速段"(短章快切);
29
- 2. **喘息必给**:每个高压场景后给喘息场景(日常/对话/伏笔回收),情绪要"放下来再推上去";
30
- 3. **一个完整周期 3-5 章**:蓄→起→发→收;
31
- 4. **情绪波浪线是需求层回执**:每个需求类型都要有对应落点,缺一种就是欠读者一种情绪。
32
-
33
- ## 波浪线表
34
-
35
- ```markdown
36
- | 卷/部 | 情绪主线 | 落点规划(事件:情绪事件) | 高潮定位 |
37
- |-------|---------|--------------------------|---------|
38
- ```
39
-
40
- ## 校验清单
41
-
42
- - [ ] 全书 2-3 个大高潮、密度克制?
43
- - [ ] 高压场景后有喘息?
44
- - [ ] 情绪周期完整(蓄起发收)?
45
- - [ ] 需求层每种情绪都有落点?
46
- - [ ] 波浪线在正文中兑现(不是大纲摆设)?
1
+ ---
2
+ name: emotion-wave
3
+ description: 情绪波浪线:把需求层情绪价值落成正文张弛节奏(爽/泪/治愈排布)
4
+ ---
5
+
6
+ # emotion-wave:情绪波浪线
7
+
8
+ ## 用途
9
+
10
+ 三层结构的需求层锁定了"读者要什么情绪",情绪波浪线负责**把它排布进全书**——读者在正确的位置得到正确的情绪剂量,不会腻也不会饿。
11
+
12
+ ## 波浪线思维
13
+
14
+ **单场景→单章→卷部,情绪都是波浪**:蓄(铺垫)→起(升温)→发(释放)→收(余韵)→再蓄。读者情绪不是线性上升,是**潮汐**——连续高潮即脱敏,连续低落即弃书。
15
+
16
+ ## 六类情绪落点(对照需求层类型)
17
+
18
+ | 情绪类型 | 读者要什么 | 落点写法 |
19
+ | --- | --- | --- |
20
+ | 解压 | 释放感 | 憋屈充分铺垫后一次性释放(打脸/翻盘/摊牌) |
21
+ | 治愈 | 抚慰 | 慢场景、留白、被温柔对待的细节 |
22
+ | 共鸣 | 被看见 | 停在自己最想哭的那刻,不写破,让读者自己哭 |
23
+ | 爽感 | 代偿 | 主角高光前有"被压",落差越大爽感越足 |
24
+ | 猎奇 | 惊异 | 信息遮断→揭晓,节奏先慢后快 |
25
+
26
+ ## 排布原则
27
+
28
+ 1. **高潮密度**:全书 2-3 个最大高潮(不是每章都高潮);大高潮前要有"短暂加速段"(短章快切);
29
+ 2. **喘息必给**:每个高压场景后给喘息场景(日常/对话/伏笔回收),情绪要"放下来再推上去";
30
+ 3. **一个完整周期 3-5 章**:蓄→起→发→收;
31
+ 4. **情绪波浪线是需求层回执**:每个需求类型都要有对应落点,缺一种就是欠读者一种情绪。
32
+
33
+ ## 波浪线表
34
+
35
+ ```markdown
36
+ | 卷/部 | 情绪主线 | 落点规划(事件:情绪事件) | 高潮定位 |
37
+ |-------|---------|--------------------------|---------|
38
+ ```
39
+
40
+ ## 校验清单
41
+
42
+ - [ ] 全书 2-3 个大高潮、密度克制?
43
+ - [ ] 高压场景后有喘息?
44
+ - [ ] 情绪周期完整(蓄起发收)?
45
+ - [ ] 需求层每种情绪都有落点?
46
+ - [ ] 波浪线在正文中兑现(不是大纲摆设)?
@@ -1,29 +1,29 @@
1
- ---
2
- name: foreshadow
3
- description: 伏笔与呼应:埋点、回收、可信度控制
4
- ---
5
-
6
- # foreshadow:伏笔与呼应
7
-
8
- ## 用途
9
-
10
- 让故事的「巧合」变成「必然」。伏笔是提前放下的种子,回收时读者觉得「原来如此」。
11
-
12
- ## 伏笔三原则
13
-
14
- 1. **埋得要轻**:伏笔出现时不引起注意——混在细节里、作为无意的动作、一句带过的背景。读者第一遍不会标记它;
15
- 2. **收得要重**:回收时必须是情节转折或人物揭示,不能只为一句话服务;
16
- 3. **埋收必对**:每个伏笔都要有回收点;每个重大回收点都要有伏笔。单方面存在 = 悬置或天降。
17
-
18
- ## 实操
19
-
20
- - 埋点清单(写作时维护):`伏笔 | 埋设点(事件/场景) | 计划回收点(事件/场景) | 状态`——未落正文前只标事件不标章,成文后回填章号(见 rules.md「纲是骨架、章是装箱」)
21
- - 悬置管理:距离计划回收点太远时,在中途用轻微呼应「提气」,防读者遗忘;
22
- - 假伏笔:**故意**引导错误预期的信息(误导读者),需在回收时明确这是误导而非漏洞。
23
-
24
- ## 校验清单
25
-
26
- - [ ] 每根伏笔有回收点?
27
- - [ ] 每个回收点有来处?
28
- - [ ] 埋点是否轻到第一遍不察觉?
29
- - [ ] 悬置的伏笔有中途提气?
1
+ ---
2
+ name: foreshadow
3
+ description: 伏笔与呼应:埋点、回收、可信度控制
4
+ ---
5
+
6
+ # foreshadow:伏笔与呼应
7
+
8
+ ## 用途
9
+
10
+ 让故事的「巧合」变成「必然」。伏笔是提前放下的种子,回收时读者觉得「原来如此」。
11
+
12
+ ## 伏笔三原则
13
+
14
+ 1. **埋得要轻**:伏笔出现时不引起注意——混在细节里、作为无意的动作、一句带过的背景。读者第一遍不会标记它;
15
+ 2. **收得要重**:回收时必须是情节转折或人物揭示,不能只为一句话服务;
16
+ 3. **埋收必对**:每个伏笔都要有回收点;每个重大回收点都要有伏笔。单方面存在 = 悬置或天降。
17
+
18
+ ## 实操
19
+
20
+ - 埋点清单(写作时维护):`伏笔 | 埋设点(事件/场景) | 计划回收点(事件/场景) | 状态`——未落正文前只标事件不标章,成文后回填章号(见 rules.md「纲是骨架、章是装箱」)
21
+ - 悬置管理:距离计划回收点太远时,在中途用轻微呼应「提气」,防读者遗忘;
22
+ - 假伏笔:**故意**引导错误预期的信息(误导读者),需在回收时明确这是误导而非漏洞。
23
+
24
+ ## 校验清单
25
+
26
+ - [ ] 每根伏笔有回收点?
27
+ - [ ] 每个回收点有来处?
28
+ - [ ] 埋点是否轻到第一遍不察觉?
29
+ - [ ] 悬置的伏笔有中途提气?
@@ -1,48 +1,73 @@
1
- ---
2
- name: outline-expand
3
- description: 大纲→成文展开:骨架到章节/场景正文的分步生成,每步可确认
4
- ---
5
-
6
- # outline-expand:大纲→成文展开
7
-
8
- ## 用途
9
-
10
- 三层结构 → 大纲 → 成文之间的"最后一公里"。核心:**不一口气写长稿**,分步展开、每步确认,防止方向跑偏后返工。
11
-
12
- ## 五级展开漏斗
13
-
14
- ```
15
- ① 三层结构(需求/内核/形式)+ Logline
16
- ↓ 展开
17
- ② 大纲(卷/部级:每卷解决什么冲突、情绪主线、大高潮位置)
18
- ↓ 展开
19
- ③ 细纲(逐事件:激励/价值转变/钩子——只排事件序列,不排章节)
20
- ↓ 展开
21
- ④ 场景清单(每场景:人物目标/冲突/价值转变/情绪落点)
22
- ↓ 展开
23
- ⑤ 成文(场景→章→卷正文:装箱成章,此时章节才诞生)
24
- ```
25
-
26
- **每一级都让作者确认再降级**——跑偏的成本随降级指数级上升,确认点是止损闸门。
27
-
28
- ## 展开纪律
29
-
30
- - **细纲不排章节**:③ 是事件序列不是章节清单——预排章号会让后续插入支线/番外时章号错位;章在 ⑤ 装箱时才产生(见 rules.md「纲是骨架、章是装箱」);
31
- - **大纲不写死细节**:大纲是"路线图"不是"剧本"——人物在写作中会"活"起来,允许偏离但要登记(为什么偏离、新方向是否更好);
32
- - **开写前回读细纲**:防止"写着写着忘了这段要干嘛";
33
- - **成文时只盯当前场景**:当前场景写透,全书大局交给大纲(防信息过载);
34
- - **卡住时的回退**:卡在场景→回细纲找当前事件的目的;卡在章→回大纲找这卷任务;找不到任务 = 这章可能不该存在。
35
-
36
- ## 交付节奏
37
-
38
- - 一次给 1-2 章成文(不是一整卷);
39
- - 每章交付后问:**这章装箱的事件达到转变与钩子了吗?**——达到才继续,未达先修。
40
-
41
- ## 校验清单
42
-
43
- - [ ] 五级逐层展开、每级确认过?
44
- - [ ] 大纲是路线图不写死?
45
- - [ ] 细纲只有事件序列、无章号预排?
46
- - [ ] 偏离有登记?
47
- - [ ] 成文聚焦当前场景?
48
- - [ ] 每次 1-2 章、章后验证转变与钩子?
1
+ ---
2
+ name: outline-expand
3
+ description: 大纲→成文展开:骨架到章节/场景正文的分步生成,每步可确认
4
+ ---
5
+
6
+ # outline-expand:大纲→成文展开
7
+
8
+ ## 用途
9
+
10
+ 三层结构 → 大纲 → 成文之间的"最后一公里"。核心:**不一口气写长稿**,分步展开、每步确认,防止方向跑偏后返工。
11
+
12
+ ## 五级展开漏斗
13
+
14
+ ```
15
+ ① 三层结构(需求/内核/形式)+ Logline
16
+ ↓ 展开
17
+ ② 大纲(卷/部级:每卷解决什么冲突、情绪主线、大高潮位置)
18
+ ↓ 展开
19
+ ③ 细纲(逐事件:激励/价值转变/钩子——只排事件序列,不排章节)
20
+ ↓ 展开
21
+ ④ 场景清单(每场景:人物目标/冲突/价值转变/情绪落点)
22
+ ↓ 展开
23
+ ⑤ 成文(场景→章→卷正文:装箱成章,此时章节才诞生)
24
+ ```
25
+
26
+ **每一级都让作者确认再降级**——跑偏的成本随降级指数级上升,确认点是止损闸门。
27
+
28
+ ## 展开纪律
29
+
30
+ - **细纲不排章节**:③ 是事件序列不是章节清单——预排章号会让后续插入支线/番外时章号错位;章在 ⑤ 装箱时才产生(见 rules.md「纲是骨架、章是装箱」);
31
+ - **大纲不写死细节**:大纲是"路线图"不是"剧本"——人物在写作中会"活"起来,允许偏离但要登记(为什么偏离、新方向是否更好);
32
+ - **开写前回读细纲**:防止"写着写着忘了这段要干嘛";
33
+ - **成文时只盯当前场景**:当前场景写透,全书大局交给大纲(防信息过载);
34
+ - **卡住时的回退**:卡在场景→回细纲找当前事件的目的;卡在章→回大纲找这卷任务;找不到任务 = 这章可能不该存在。
35
+
36
+ ## 交付节奏
37
+
38
+ - 一次给 1-2 章成文(不是一整卷);
39
+ - 每章交付后问:**这章装箱的事件达到转变与钩子了吗?**——达到才继续,未达先修。
40
+
41
+ ## 成文文件的分区纪律(正文与工程记录分离)
42
+
43
+ > **实锤依据**:2026-10-13 真机实测,`05-正文/卷一-日常与裂缝.md` 曾在同一文件里同时出现
44
+ > 小说正文 + 卷级元信息头 + `## 本批自检` 工程清单 + 卷末验收表。**机制本身是对的**
45
+ > (自检防文风退化),错的只是**落点**:读者与下游工具读到的应当是小说,不是工程表。
46
+
47
+ **一个成文文件按三段分区**(顺序固定):
48
+
49
+ ```
50
+ # <卷/章标题>
51
+ <!-- ① 卷级元信息头(可选):POV / 基线文风 / 章号约定等工程约定,用引用块写 -->
52
+ ## 场N|<场名> ← ② 正文主体:只有小说本身
53
+ ...
54
+ (若干场次)
55
+ ## 附:成文自检 ← ③ 工程记录:自检清单 / 伏笔登记 / 验收表全部收在这里
56
+ ```
57
+
58
+ - **② 正文主体区只放小说**:不许插入自检清单、进度表、验收表、写作提示;
59
+ - **③ 工程记录区(文末「附:成文自检」)** 是自检清单与伏笔/验收表的**唯一合法落点**——
60
+ 这些是**过程工件**,对作者有价值、对读者是噪声,与正文同层即造成污染;
61
+ - **① 卷级元信息头可选**:确有工程约定要声明才写(POV、文风卡指针),无则省略;
62
+ 它是**约定**不是**自检**,留在卷首可接受,但不得混入正文段落之间;
63
+ - **跨卷/跨批**的自检统一累积到各卷文末该区,**不要**另起 `## 本批自检` 夹在两场正文中间。
64
+
65
+ ## 校验清单
66
+
67
+ - [ ] 五级逐层展开、每级确认过?
68
+ - [ ] 大纲是路线图不写死?
69
+ - [ ] 细纲只有事件序列、无章号预排?
70
+ - [ ] 偏离有登记?
71
+ - [ ] 成文聚焦当前场景?
72
+ - [ ] 每次 1-2 章、章后验证转变与钩子?
73
+ - [ ] **正文主体区无工程记录**(自检/伏笔/验收表都在文末「附:成文自检」区)?