@zooique/memora 2.0.0 → 3.0.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 (588) hide show
  1. package/CHANGELOG.md +1028 -0
  2. package/README.en.md +305 -0
  3. package/README.md +303 -148
  4. package/config.example.json +43 -0
  5. package/dist/agent/agent.d.ts +438 -295
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/agent.js +1368 -836
  8. package/dist/agent/agent.js.map +1 -1
  9. package/dist/agent/assembler.d.ts +117 -39
  10. package/dist/agent/assembler.d.ts.map +1 -1
  11. package/dist/agent/assembler.js +574 -71
  12. package/dist/agent/assembler.js.map +1 -1
  13. package/dist/agent/budget.d.ts +131 -0
  14. package/dist/agent/budget.d.ts.map +1 -0
  15. package/dist/agent/budget.js +128 -0
  16. package/dist/agent/budget.js.map +1 -0
  17. package/dist/agent/builtinToolHandlers.d.ts +229 -17
  18. package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
  19. package/dist/agent/builtinToolHandlers.js +758 -70
  20. package/dist/agent/builtinToolHandlers.js.map +1 -1
  21. package/dist/agent/builtinTools.d.ts +198 -7
  22. package/dist/agent/builtinTools.d.ts.map +1 -1
  23. package/dist/agent/builtinTools.js +646 -14
  24. package/dist/agent/builtinTools.js.map +1 -1
  25. package/dist/agent/compaction.d.ts +93 -0
  26. package/dist/agent/compaction.d.ts.map +1 -0
  27. package/dist/agent/compaction.js +192 -0
  28. package/dist/agent/compaction.js.map +1 -0
  29. package/dist/agent/constants.d.ts +139 -18
  30. package/dist/agent/constants.d.ts.map +1 -1
  31. package/dist/agent/constants.js +154 -18
  32. package/dist/agent/constants.js.map +1 -1
  33. package/dist/agent/contextManager.d.ts +126 -76
  34. package/dist/agent/contextManager.d.ts.map +1 -1
  35. package/dist/agent/contextManager.js +197 -135
  36. package/dist/agent/contextManager.js.map +1 -1
  37. package/dist/agent/contextPreparer.d.ts +78 -0
  38. package/dist/agent/contextPreparer.d.ts.map +1 -0
  39. package/dist/agent/contextPreparer.js +128 -0
  40. package/dist/agent/contextPreparer.js.map +1 -0
  41. package/dist/agent/duplicateInterceptor.d.ts +67 -0
  42. package/dist/agent/duplicateInterceptor.d.ts.map +1 -0
  43. package/dist/agent/duplicateInterceptor.js +82 -0
  44. package/dist/agent/duplicateInterceptor.js.map +1 -0
  45. package/dist/agent/guardRail.d.ts +166 -0
  46. package/dist/agent/guardRail.d.ts.map +1 -0
  47. package/dist/agent/guardRail.js +333 -0
  48. package/dist/agent/guardRail.js.map +1 -0
  49. package/dist/agent/loop.d.ts +718 -253
  50. package/dist/agent/loop.d.ts.map +1 -1
  51. package/dist/agent/loop.js +2215 -648
  52. package/dist/agent/loop.js.map +1 -1
  53. package/dist/agent/managers/archiveCoordinator.d.ts +21 -74
  54. package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
  55. package/dist/agent/managers/archiveCoordinator.js +32 -105
  56. package/dist/agent/managers/archiveCoordinator.js.map +1 -1
  57. package/dist/agent/managers/chatLockManager.d.ts +20 -88
  58. package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
  59. package/dist/agent/managers/chatLockManager.js +31 -103
  60. package/dist/agent/managers/chatLockManager.js.map +1 -1
  61. package/dist/agent/managers/dedupManager.d.ts +85 -0
  62. package/dist/agent/managers/dedupManager.d.ts.map +1 -0
  63. package/dist/agent/managers/dedupManager.js +248 -0
  64. package/dist/agent/managers/dedupManager.js.map +1 -0
  65. package/dist/agent/managers/goalConsistencyChecker.d.ts +42 -0
  66. package/dist/agent/managers/goalConsistencyChecker.d.ts.map +1 -0
  67. package/dist/agent/managers/goalConsistencyChecker.js +178 -0
  68. package/dist/agent/managers/goalConsistencyChecker.js.map +1 -0
  69. package/dist/agent/managers/llmCaller.d.ts +124 -0
  70. package/dist/agent/managers/llmCaller.d.ts.map +1 -0
  71. package/dist/agent/managers/llmCaller.js +417 -0
  72. package/dist/agent/managers/llmCaller.js.map +1 -0
  73. package/dist/agent/managers/llmJudgeHelper.d.ts +21 -0
  74. package/dist/agent/managers/llmJudgeHelper.d.ts.map +1 -0
  75. package/dist/agent/managers/llmJudgeHelper.js +32 -0
  76. package/dist/agent/managers/llmJudgeHelper.js.map +1 -0
  77. package/dist/agent/managers/loopMetrics.d.ts +58 -0
  78. package/dist/agent/managers/loopMetrics.d.ts.map +1 -0
  79. package/dist/agent/managers/loopMetrics.js +68 -0
  80. package/dist/agent/managers/loopMetrics.js.map +1 -0
  81. package/dist/agent/managers/memoryAdvisor.d.ts +27 -120
  82. package/dist/agent/managers/memoryAdvisor.d.ts.map +1 -1
  83. package/dist/agent/managers/memoryAdvisor.js +56 -192
  84. package/dist/agent/managers/memoryAdvisor.js.map +1 -1
  85. package/dist/agent/managers/memoryGovernance.d.ts +24 -0
  86. package/dist/agent/managers/memoryGovernance.d.ts.map +1 -0
  87. package/dist/agent/managers/memoryGovernance.js +46 -0
  88. package/dist/agent/managers/memoryGovernance.js.map +1 -0
  89. package/dist/agent/managers/memoryInspector.d.ts +59 -393
  90. package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
  91. package/dist/agent/managers/memoryInspector.js +92 -736
  92. package/dist/agent/managers/memoryInspector.js.map +1 -1
  93. package/dist/agent/managers/roundSummaryGenerator.d.ts +56 -0
  94. package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -0
  95. package/dist/agent/managers/roundSummaryGenerator.js +201 -0
  96. package/dist/agent/managers/roundSummaryGenerator.js.map +1 -0
  97. package/dist/agent/managers/sessionArchiver.d.ts +19 -63
  98. package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
  99. package/dist/agent/managers/sessionArchiver.js +83 -157
  100. package/dist/agent/managers/sessionArchiver.js.map +1 -1
  101. package/dist/agent/managers/sessionManager.d.ts +286 -57
  102. package/dist/agent/managers/sessionManager.d.ts.map +1 -1
  103. package/dist/agent/managers/sessionManager.js +846 -85
  104. package/dist/agent/managers/sessionManager.js.map +1 -1
  105. package/dist/agent/managers/sessionNamer.d.ts +35 -0
  106. package/dist/agent/managers/sessionNamer.d.ts.map +1 -0
  107. package/dist/agent/managers/sessionNamer.js +104 -0
  108. package/dist/agent/managers/sessionNamer.js.map +1 -0
  109. package/dist/agent/managers/streamAccumulator.d.ts +20 -0
  110. package/dist/agent/managers/streamAccumulator.d.ts.map +1 -0
  111. package/dist/agent/managers/streamAccumulator.js +15 -0
  112. package/dist/agent/managers/streamAccumulator.js.map +1 -0
  113. package/dist/agent/managers/textPolishManager.d.ts +8 -44
  114. package/dist/agent/managers/textPolishManager.d.ts.map +1 -1
  115. package/dist/agent/managers/textPolishManager.js +12 -47
  116. package/dist/agent/managers/textPolishManager.js.map +1 -1
  117. package/dist/agent/managers/toolCallHelpers.d.ts +105 -0
  118. package/dist/agent/managers/toolCallHelpers.d.ts.map +1 -0
  119. package/dist/agent/managers/toolCallHelpers.js +161 -0
  120. package/dist/agent/managers/toolCallHelpers.js.map +1 -0
  121. package/dist/agent/managers/workProjection.d.ts +57 -87
  122. package/dist/agent/managers/workProjection.d.ts.map +1 -1
  123. package/dist/agent/managers/workProjection.js +166 -246
  124. package/dist/agent/managers/workProjection.js.map +1 -1
  125. package/dist/agent/messageHistory.d.ts +134 -84
  126. package/dist/agent/messageHistory.d.ts.map +1 -1
  127. package/dist/agent/messageHistory.js +419 -133
  128. package/dist/agent/messageHistory.js.map +1 -1
  129. package/dist/agent/needsPlanning.d.ts +28 -0
  130. package/dist/agent/needsPlanning.d.ts.map +1 -0
  131. package/dist/agent/needsPlanning.js +68 -0
  132. package/dist/agent/needsPlanning.js.map +1 -0
  133. package/dist/agent/seed/index.d.ts +11 -0
  134. package/dist/agent/seed/index.d.ts.map +1 -0
  135. package/dist/agent/seed/index.js +10 -0
  136. package/dist/agent/seed/index.js.map +1 -0
  137. package/dist/agent/seed/orchestrator.d.ts +83 -0
  138. package/dist/agent/seed/orchestrator.d.ts.map +1 -0
  139. package/dist/agent/seed/orchestrator.js +260 -0
  140. package/dist/agent/seed/orchestrator.js.map +1 -0
  141. package/dist/agent/seed/prepare.d.ts +49 -0
  142. package/dist/agent/seed/prepare.d.ts.map +1 -0
  143. package/dist/agent/seed/prepare.js +107 -0
  144. package/dist/agent/seed/prepare.js.map +1 -0
  145. package/dist/agent/seed/types.d.ts +115 -0
  146. package/dist/agent/seed/types.d.ts.map +1 -0
  147. package/dist/agent/seed/types.js +15 -0
  148. package/dist/agent/seed/types.js.map +1 -0
  149. package/dist/agent/sessionStateMachine.d.ts +78 -0
  150. package/dist/agent/sessionStateMachine.d.ts.map +1 -0
  151. package/dist/agent/sessionStateMachine.js +182 -0
  152. package/dist/agent/sessionStateMachine.js.map +1 -0
  153. package/dist/agent/taskTableRenderer.d.ts +51 -0
  154. package/dist/agent/taskTableRenderer.d.ts.map +1 -0
  155. package/dist/agent/taskTableRenderer.js +115 -0
  156. package/dist/agent/taskTableRenderer.js.map +1 -0
  157. package/dist/agent/toolExecutor.d.ts +255 -9
  158. package/dist/agent/toolExecutor.d.ts.map +1 -1
  159. package/dist/agent/toolExecutor.js +956 -20
  160. package/dist/agent/toolExecutor.js.map +1 -1
  161. package/dist/agent/toolLedger.d.ts +120 -0
  162. package/dist/agent/toolLedger.d.ts.map +1 -0
  163. package/dist/agent/toolLedger.js +149 -0
  164. package/dist/agent/toolLedger.js.map +1 -0
  165. package/dist/agent/toolResultCache.d.ts +134 -0
  166. package/dist/agent/toolResultCache.d.ts.map +1 -0
  167. package/dist/agent/toolResultCache.js +243 -0
  168. package/dist/agent/toolResultCache.js.map +1 -0
  169. package/dist/agent/toolResultOffload.d.ts +59 -0
  170. package/dist/agent/toolResultOffload.d.ts.map +1 -0
  171. package/dist/agent/toolResultOffload.js +70 -0
  172. package/dist/agent/toolResultOffload.js.map +1 -0
  173. package/dist/agent/toolRunner.d.ts +59 -0
  174. package/dist/agent/toolRunner.d.ts.map +1 -0
  175. package/dist/agent/toolRunner.js +147 -0
  176. package/dist/agent/toolRunner.js.map +1 -0
  177. package/dist/agent/tracer.d.ts +99 -107
  178. package/dist/agent/tracer.d.ts.map +1 -1
  179. package/dist/agent/tracer.js +24 -69
  180. package/dist/agent/tracer.js.map +1 -1
  181. package/dist/agent/types.d.ts +512 -162
  182. package/dist/agent/types.d.ts.map +1 -1
  183. package/dist/agent/types.js +2 -51
  184. package/dist/agent/types.js.map +1 -1
  185. package/dist/code-exec/codeExecutionProvider.d.ts +16 -0
  186. package/dist/code-exec/codeExecutionProvider.d.ts.map +1 -0
  187. package/dist/code-exec/codeExecutionProvider.js +57 -0
  188. package/dist/code-exec/codeExecutionProvider.js.map +1 -0
  189. package/dist/code-exec/types.d.ts +37 -0
  190. package/dist/code-exec/types.d.ts.map +1 -0
  191. package/dist/code-exec/types.js +12 -0
  192. package/dist/code-exec/types.js.map +1 -0
  193. package/dist/config/expandEnvVars.d.ts +22 -0
  194. package/dist/config/expandEnvVars.d.ts.map +1 -0
  195. package/dist/config/expandEnvVars.js +38 -0
  196. package/dist/config/expandEnvVars.js.map +1 -0
  197. package/dist/config/loader.d.ts +59 -242
  198. package/dist/config/loader.d.ts.map +1 -1
  199. package/dist/config/loader.js +237 -194
  200. package/dist/config/loader.js.map +1 -1
  201. package/dist/index.d.ts +69 -74
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +93 -63
  204. package/dist/index.js.map +1 -1
  205. package/dist/llm/abortSignal.d.ts +2 -3
  206. package/dist/llm/abortSignal.d.ts.map +1 -1
  207. package/dist/llm/abortSignal.js +2 -3
  208. package/dist/llm/abortSignal.js.map +1 -1
  209. package/dist/llm/factory.d.ts +29 -25
  210. package/dist/llm/factory.d.ts.map +1 -1
  211. package/dist/llm/factory.js +34 -69
  212. package/dist/llm/factory.js.map +1 -1
  213. package/dist/llm/openaiCompatible.d.ts +25 -40
  214. package/dist/llm/openaiCompatible.d.ts.map +1 -1
  215. package/dist/llm/openaiCompatible.js +181 -129
  216. package/dist/llm/openaiCompatible.js.map +1 -1
  217. package/dist/llm/provider.d.ts +29 -42
  218. package/dist/llm/provider.d.ts.map +1 -1
  219. package/dist/llm/provider.js +11 -10
  220. package/dist/llm/provider.js.map +1 -1
  221. package/dist/llm/types.d.ts +54 -11
  222. package/dist/llm/types.d.ts.map +1 -1
  223. package/dist/llm/types.js +0 -5
  224. package/dist/llm/types.js.map +1 -1
  225. package/dist/logging/logger.d.ts +8 -29
  226. package/dist/logging/logger.d.ts.map +1 -1
  227. package/dist/logging/logger.js +43 -233
  228. package/dist/logging/logger.js.map +1 -1
  229. package/dist/logging/loggerInterface.d.ts +9 -8
  230. package/dist/logging/loggerInterface.d.ts.map +1 -1
  231. package/dist/memory/gcService.d.ts +164 -0
  232. package/dist/memory/gcService.d.ts.map +1 -0
  233. package/dist/memory/gcService.js +215 -0
  234. package/dist/memory/gcService.js.map +1 -0
  235. package/dist/memory/governance.d.ts +17 -0
  236. package/dist/memory/governance.d.ts.map +1 -0
  237. package/dist/memory/governance.js +17 -0
  238. package/dist/memory/governance.js.map +1 -0
  239. package/dist/memory/inMemoryRoundStore.d.ts +124 -0
  240. package/dist/memory/inMemoryRoundStore.d.ts.map +1 -0
  241. package/dist/memory/inMemoryRoundStore.js +216 -0
  242. package/dist/memory/inMemoryRoundStore.js.map +1 -0
  243. package/dist/memory/inMemorySessionStore.d.ts +92 -0
  244. package/dist/memory/inMemorySessionStore.d.ts.map +1 -0
  245. package/dist/memory/inMemorySessionStore.js +219 -0
  246. package/dist/memory/inMemorySessionStore.js.map +1 -0
  247. package/dist/memory/inMemorySessionViewLoader.d.ts +89 -0
  248. package/dist/memory/inMemorySessionViewLoader.d.ts.map +1 -0
  249. package/dist/memory/inMemorySessionViewLoader.js +183 -0
  250. package/dist/memory/inMemorySessionViewLoader.js.map +1 -0
  251. package/dist/memory/inMemoryStorage.d.ts +26 -141
  252. package/dist/memory/inMemoryStorage.d.ts.map +1 -1
  253. package/dist/memory/inMemoryStorage.js +48 -187
  254. package/dist/memory/inMemoryStorage.js.map +1 -1
  255. package/dist/memory/keywordsTouch.d.ts +20 -0
  256. package/dist/memory/keywordsTouch.d.ts.map +1 -0
  257. package/dist/memory/keywordsTouch.js +25 -0
  258. package/dist/memory/keywordsTouch.js.map +1 -0
  259. package/dist/memory/lockManager.d.ts +7 -2
  260. package/dist/memory/lockManager.d.ts.map +1 -1
  261. package/dist/memory/lockManager.js +35 -11
  262. package/dist/memory/lockManager.js.map +1 -1
  263. package/dist/memory/projectManager.d.ts +30 -128
  264. package/dist/memory/projectManager.d.ts.map +1 -1
  265. package/dist/memory/projectManager.js +39 -171
  266. package/dist/memory/projectManager.js.map +1 -1
  267. package/dist/memory/projectRegistry.d.ts +22 -37
  268. package/dist/memory/projectRegistry.d.ts.map +1 -1
  269. package/dist/memory/projectRegistry.js +78 -85
  270. package/dist/memory/projectRegistry.js.map +1 -1
  271. package/dist/memory/roundStore.d.ts +629 -0
  272. package/dist/memory/roundStore.d.ts.map +1 -0
  273. package/dist/memory/roundStore.js +116 -0
  274. package/dist/memory/roundStore.js.map +1 -0
  275. package/dist/memory/sessionStore.d.ts +70 -61
  276. package/dist/memory/sessionStore.d.ts.map +1 -1
  277. package/dist/memory/sessionStore.js +23 -1
  278. package/dist/memory/sessionStore.js.map +1 -1
  279. package/dist/memory/sessionViewLoader.d.ts +141 -0
  280. package/dist/memory/sessionViewLoader.d.ts.map +1 -0
  281. package/dist/memory/sessionViewLoader.js +65 -0
  282. package/dist/memory/sessionViewLoader.js.map +1 -0
  283. package/dist/memory/sourceValidation.d.ts +18 -9
  284. package/dist/memory/sourceValidation.d.ts.map +1 -1
  285. package/dist/memory/sourceValidation.js +35 -29
  286. package/dist/memory/sourceValidation.js.map +1 -1
  287. package/dist/memory/storageInterface.d.ts +45 -126
  288. package/dist/memory/storageInterface.d.ts.map +1 -1
  289. package/dist/memory/types.d.ts +82 -168
  290. package/dist/memory/types.d.ts.map +1 -1
  291. package/dist/memory/types.js +116 -79
  292. package/dist/memory/types.js.map +1 -1
  293. package/dist/project-search/projectSearchProvider.d.ts +29 -0
  294. package/dist/project-search/projectSearchProvider.d.ts.map +1 -0
  295. package/dist/project-search/projectSearchProvider.js +57 -0
  296. package/dist/project-search/projectSearchProvider.js.map +1 -0
  297. package/dist/project-search/terms.d.ts +14 -0
  298. package/dist/project-search/terms.d.ts.map +1 -0
  299. package/dist/project-search/terms.js +68 -0
  300. package/dist/project-search/terms.js.map +1 -0
  301. package/dist/project-search/types.d.ts +139 -0
  302. package/dist/project-search/types.d.ts.map +1 -0
  303. package/dist/project-search/types.js +8 -0
  304. package/dist/project-search/types.js.map +1 -0
  305. package/dist/role-pack/capabilityMap.d.ts +28 -0
  306. package/dist/role-pack/capabilityMap.d.ts.map +1 -0
  307. package/dist/role-pack/capabilityMap.js +56 -0
  308. package/dist/role-pack/capabilityMap.js.map +1 -0
  309. package/dist/role-pack/constants.d.ts +21 -0
  310. package/dist/role-pack/constants.d.ts.map +1 -0
  311. package/dist/role-pack/constants.js +21 -0
  312. package/dist/role-pack/constants.js.map +1 -0
  313. package/dist/role-pack/rolePackManager.d.ts +269 -0
  314. package/dist/role-pack/rolePackManager.d.ts.map +1 -0
  315. package/dist/role-pack/rolePackManager.js +1082 -0
  316. package/dist/role-pack/rolePackManager.js.map +1 -0
  317. package/dist/role-pack/strategyKeys.d.ts +100 -0
  318. package/dist/role-pack/strategyKeys.d.ts.map +1 -0
  319. package/dist/role-pack/strategyKeys.js +184 -0
  320. package/dist/role-pack/strategyKeys.js.map +1 -0
  321. package/dist/role-pack/strategyResolver.d.ts +109 -0
  322. package/dist/role-pack/strategyResolver.d.ts.map +1 -0
  323. package/dist/role-pack/strategyResolver.js +304 -0
  324. package/dist/role-pack/strategyResolver.js.map +1 -0
  325. package/dist/role-pack/types.d.ts +237 -0
  326. package/dist/role-pack/types.d.ts.map +1 -0
  327. package/dist/role-pack/types.js +8 -0
  328. package/dist/role-pack/types.js.map +1 -0
  329. package/dist/role-pack/validator.d.ts +38 -0
  330. package/dist/role-pack/validator.d.ts.map +1 -0
  331. package/dist/role-pack/validator.js +436 -0
  332. package/dist/role-pack/validator.js.map +1 -0
  333. package/dist/security/pathGuard.d.ts +69 -72
  334. package/dist/security/pathGuard.d.ts.map +1 -1
  335. package/dist/security/pathGuard.js +151 -131
  336. package/dist/security/pathGuard.js.map +1 -1
  337. package/dist/skill/skillLayer3.d.ts +91 -0
  338. package/dist/skill/skillLayer3.d.ts.map +1 -0
  339. package/dist/skill/skillLayer3.js +104 -0
  340. package/dist/skill/skillLayer3.js.map +1 -0
  341. package/dist/skill/skillManager.d.ts +127 -56
  342. package/dist/skill/skillManager.d.ts.map +1 -1
  343. package/dist/skill/skillManager.js +318 -163
  344. package/dist/skill/skillManager.js.map +1 -1
  345. package/dist/skill/skillScriptRunner.d.ts +97 -0
  346. package/dist/skill/skillScriptRunner.d.ts.map +1 -0
  347. package/dist/skill/skillScriptRunner.js +271 -0
  348. package/dist/skill/skillScriptRunner.js.map +1 -0
  349. package/dist/skill/types.d.ts +73 -17
  350. package/dist/skill/types.d.ts.map +1 -1
  351. package/dist/skill/types.js +5 -1
  352. package/dist/skill/types.js.map +1 -1
  353. package/dist/utils/array.d.ts +5 -6
  354. package/dist/utils/array.d.ts.map +1 -1
  355. package/dist/utils/array.js +6 -6
  356. package/dist/utils/array.js.map +1 -1
  357. package/dist/utils/atomicWrite.d.ts +8 -0
  358. package/dist/utils/atomicWrite.d.ts.map +1 -0
  359. package/dist/utils/atomicWrite.js +31 -0
  360. package/dist/utils/atomicWrite.js.map +1 -0
  361. package/dist/utils/backgroundTask.d.ts +38 -0
  362. package/dist/utils/backgroundTask.d.ts.map +1 -0
  363. package/dist/utils/backgroundTask.js +117 -0
  364. package/dist/utils/backgroundTask.js.map +1 -0
  365. package/dist/utils/configResourceManager.d.ts +79 -0
  366. package/dist/utils/configResourceManager.d.ts.map +1 -0
  367. package/dist/utils/configResourceManager.js +150 -0
  368. package/dist/utils/configResourceManager.js.map +1 -0
  369. package/dist/utils/errors.d.ts +48 -56
  370. package/dist/utils/errors.d.ts.map +1 -1
  371. package/dist/utils/errors.js +60 -58
  372. package/dist/utils/errors.js.map +1 -1
  373. package/dist/utils/eventEmitter.d.ts +141 -63
  374. package/dist/utils/eventEmitter.d.ts.map +1 -1
  375. package/dist/utils/eventEmitter.js +50 -35
  376. package/dist/utils/eventEmitter.js.map +1 -1
  377. package/dist/utils/fileSafe.d.ts +20 -0
  378. package/dist/utils/fileSafe.d.ts.map +1 -0
  379. package/dist/utils/fileSafe.js +56 -0
  380. package/dist/utils/fileSafe.js.map +1 -0
  381. package/dist/utils/frontmatter.d.ts +2 -3
  382. package/dist/utils/frontmatter.d.ts.map +1 -1
  383. package/dist/utils/frontmatter.js +6 -5
  384. package/dist/utils/frontmatter.js.map +1 -1
  385. package/dist/utils/hash.d.ts +12 -0
  386. package/dist/utils/hash.d.ts.map +1 -0
  387. package/dist/utils/hash.js +27 -0
  388. package/dist/utils/hash.js.map +1 -0
  389. package/dist/utils/http.d.ts +17 -0
  390. package/dist/utils/http.d.ts.map +1 -0
  391. package/dist/utils/http.js +29 -0
  392. package/dist/utils/http.js.map +1 -0
  393. package/dist/utils/json.d.ts +1 -1
  394. package/dist/utils/json.js +1 -1
  395. package/dist/utils/math.d.ts +34 -1
  396. package/dist/utils/math.d.ts.map +1 -1
  397. package/dist/utils/math.js +47 -14
  398. package/dist/utils/math.js.map +1 -1
  399. package/dist/utils/objects.d.ts +2 -3
  400. package/dist/utils/objects.d.ts.map +1 -1
  401. package/dist/utils/objects.js +2 -3
  402. package/dist/utils/objects.js.map +1 -1
  403. package/dist/utils/recallDefaults.d.ts +16 -0
  404. package/dist/utils/recallDefaults.d.ts.map +1 -0
  405. package/dist/utils/recallDefaults.js +16 -0
  406. package/dist/utils/recallDefaults.js.map +1 -0
  407. package/dist/utils/safeTimer.d.ts +8 -36
  408. package/dist/utils/safeTimer.d.ts.map +1 -1
  409. package/dist/utils/safeTimer.js +9 -37
  410. package/dist/utils/safeTimer.js.map +1 -1
  411. package/dist/utils/scanner.d.ts +97 -17
  412. package/dist/utils/scanner.d.ts.map +1 -1
  413. package/dist/utils/scanner.js +269 -47
  414. package/dist/utils/scanner.js.map +1 -1
  415. package/dist/utils/segmenter.d.ts +20 -29
  416. package/dist/utils/segmenter.d.ts.map +1 -1
  417. package/dist/utils/segmenter.js +230 -88
  418. package/dist/utils/segmenter.js.map +1 -1
  419. package/dist/utils/strings.d.ts +15 -32
  420. package/dist/utils/strings.d.ts.map +1 -1
  421. package/dist/utils/strings.js +25 -44
  422. package/dist/utils/strings.js.map +1 -1
  423. package/dist/utils/time.d.ts +37 -0
  424. package/dist/utils/time.d.ts.map +1 -1
  425. package/dist/utils/time.js +56 -0
  426. package/dist/utils/time.js.map +1 -1
  427. package/dist/utils/toError.d.ts +13 -1
  428. package/dist/utils/toError.d.ts.map +1 -1
  429. package/dist/utils/toError.js +18 -1
  430. package/dist/utils/toError.js.map +1 -1
  431. package/dist/web-fetch/fetchWebFetchProvider.d.ts +14 -0
  432. package/dist/web-fetch/fetchWebFetchProvider.d.ts.map +1 -0
  433. package/dist/web-fetch/fetchWebFetchProvider.js +69 -0
  434. package/dist/web-fetch/fetchWebFetchProvider.js.map +1 -0
  435. package/dist/web-fetch/types.d.ts +30 -0
  436. package/dist/web-fetch/types.d.ts.map +1 -0
  437. package/dist/web-fetch/types.js +7 -0
  438. package/dist/web-fetch/types.js.map +1 -0
  439. package/dist/web-fetch/webFetchProvider.d.ts +10 -0
  440. package/dist/web-fetch/webFetchProvider.d.ts.map +1 -0
  441. package/dist/web-fetch/webFetchProvider.js +28 -0
  442. package/dist/web-fetch/webFetchProvider.js.map +1 -0
  443. package/dist/web-search/fetchWebSearchProvider.d.ts +27 -0
  444. package/dist/web-search/fetchWebSearchProvider.d.ts.map +1 -0
  445. package/dist/web-search/fetchWebSearchProvider.js +199 -0
  446. package/dist/web-search/fetchWebSearchProvider.js.map +1 -0
  447. package/dist/web-search/types.d.ts +46 -0
  448. package/dist/web-search/types.d.ts.map +1 -0
  449. package/dist/web-search/types.js +2 -0
  450. package/dist/{persona → web-search}/types.js.map +1 -1
  451. package/dist/web-search/webSearchProvider.d.ts +10 -0
  452. package/dist/web-search/webSearchProvider.d.ts.map +1 -0
  453. package/dist/web-search/webSearchProvider.js +30 -0
  454. package/dist/web-search/webSearchProvider.js.map +1 -0
  455. package/docs/architecture/role-pack-authoring-guide.md +243 -0
  456. package/docs/architecture/role-pack-spec.md +767 -0
  457. package/docs/memora-api-reference.md +1175 -0
  458. package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +843 -0
  459. package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -0
  460. package/package.json +105 -83
  461. package/role-packs/README.md +41 -0
  462. package/role-packs/memora/345/212/251/346/211/213/manifest.json +12 -0
  463. package/role-packs/memora/345/212/251/346/211/213/persona.md +12 -0
  464. package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -0
  465. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +44 -0
  466. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -0
  467. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +15 -0
  468. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/character-sheet.md +34 -0
  469. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/core-extractor.md +37 -0
  470. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/craft-review.md +69 -0
  471. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/dialogue-craft.md +45 -0
  472. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -0
  473. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/empathy-craft.md +79 -0
  474. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -0
  475. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/hotspot-mapping.md +121 -0
  476. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/idea-lever.md +42 -0
  477. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/logline-craft.md +47 -0
  478. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/longform-guard.md +64 -0
  479. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/need-finder.md +40 -0
  480. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +46 -0
  481. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pacing-hook.md +34 -0
  482. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/polish-method.md +113 -0
  483. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/pov-discipline.md +79 -0
  484. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/SKILL.md +112 -0
  485. 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 +441 -0
  486. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/relationship-web.md +47 -0
  487. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/scene-craft.md +46 -0
  488. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +60 -0
  489. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-structure.md +36 -0
  490. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/style-weaver.md +109 -0
  491. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/three-layer-check.md +27 -0
  492. package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/world-builder.md +41 -0
  493. 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 +48 -0
  494. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/persona.md +73 -0
  495. 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 +19 -0
  496. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/api-doc-writer.md +40 -0
  497. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/doc-planner.md +42 -0
  498. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/nutrient-search.md +28 -0
  499. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/seed-finder.md +28 -0
  500. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/ssot-audit.md +34 -0
  501. package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/skills/style-guide.md +40 -0
  502. package/dist/agent/guardrail.d.ts +0 -47
  503. package/dist/agent/guardrail.d.ts.map +0 -1
  504. package/dist/agent/guardrail.js +0 -51
  505. package/dist/agent/guardrail.js.map +0 -1
  506. package/dist/agent/managers/autoConfigRefiner.d.ts +0 -39
  507. package/dist/agent/managers/autoConfigRefiner.d.ts.map +0 -1
  508. package/dist/agent/managers/autoConfigRefiner.js +0 -150
  509. package/dist/agent/managers/autoConfigRefiner.js.map +0 -1
  510. package/dist/agent/managers/configManager.d.ts +0 -125
  511. package/dist/agent/managers/configManager.d.ts.map +0 -1
  512. package/dist/agent/managers/configManager.js +0 -194
  513. package/dist/agent/managers/configManager.js.map +0 -1
  514. package/dist/agent/managers/insightExtractor.d.ts +0 -139
  515. package/dist/agent/managers/insightExtractor.d.ts.map +0 -1
  516. package/dist/agent/managers/insightExtractor.js +0 -401
  517. package/dist/agent/managers/insightExtractor.js.map +0 -1
  518. package/dist/agent/managers/memoryDecayScheduler.d.ts +0 -198
  519. package/dist/agent/managers/memoryDecayScheduler.d.ts.map +0 -1
  520. package/dist/agent/managers/memoryDecayScheduler.js +0 -349
  521. package/dist/agent/managers/memoryDecayScheduler.js.map +0 -1
  522. package/dist/agent/managers/relationBuilder.d.ts +0 -131
  523. package/dist/agent/managers/relationBuilder.d.ts.map +0 -1
  524. package/dist/agent/managers/relationBuilder.js +0 -192
  525. package/dist/agent/managers/relationBuilder.js.map +0 -1
  526. package/dist/agent/personaMatcher.d.ts +0 -29
  527. package/dist/agent/personaMatcher.d.ts.map +0 -1
  528. package/dist/agent/personaMatcher.js +0 -60
  529. package/dist/agent/personaMatcher.js.map +0 -1
  530. package/dist/agent/userFactExtractor.d.ts +0 -25
  531. package/dist/agent/userFactExtractor.d.ts.map +0 -1
  532. package/dist/agent/userFactExtractor.js +0 -81
  533. package/dist/agent/userFactExtractor.js.map +0 -1
  534. package/dist/eval/evalRunner.d.ts +0 -94
  535. package/dist/eval/evalRunner.d.ts.map +0 -1
  536. package/dist/eval/evalRunner.js +0 -141
  537. package/dist/eval/evalRunner.js.map +0 -1
  538. package/dist/eval/evalTypes.d.ts +0 -148
  539. package/dist/eval/evalTypes.d.ts.map +0 -1
  540. package/dist/eval/evalTypes.js +0 -118
  541. package/dist/eval/evalTypes.js.map +0 -1
  542. package/dist/eval/scenarios.d.ts +0 -33
  543. package/dist/eval/scenarios.d.ts.map +0 -1
  544. package/dist/eval/scenarios.js +0 -109
  545. package/dist/eval/scenarios.js.map +0 -1
  546. package/dist/llm/embedding.d.ts +0 -67
  547. package/dist/llm/embedding.d.ts.map +0 -1
  548. package/dist/llm/embedding.js +0 -184
  549. package/dist/llm/embedding.js.map +0 -1
  550. package/dist/memory/hybridMerge.d.ts +0 -54
  551. package/dist/memory/hybridMerge.d.ts.map +0 -1
  552. package/dist/memory/hybridMerge.js +0 -36
  553. package/dist/memory/hybridMerge.js.map +0 -1
  554. package/dist/memory/inMemoryRelationStore.d.ts +0 -51
  555. package/dist/memory/inMemoryRelationStore.d.ts.map +0 -1
  556. package/dist/memory/inMemoryRelationStore.js +0 -65
  557. package/dist/memory/inMemoryRelationStore.js.map +0 -1
  558. package/dist/memory/loader.d.ts +0 -49
  559. package/dist/memory/loader.d.ts.map +0 -1
  560. package/dist/memory/loader.js +0 -93
  561. package/dist/memory/loader.js.map +0 -1
  562. package/dist/memory/recall.d.ts +0 -66
  563. package/dist/memory/recall.d.ts.map +0 -1
  564. package/dist/memory/recall.js +0 -142
  565. package/dist/memory/recall.js.map +0 -1
  566. package/dist/memory/relationStore.d.ts +0 -78
  567. package/dist/memory/relationStore.d.ts.map +0 -1
  568. package/dist/memory/relationStore.js +0 -2
  569. package/dist/memory/relationStore.js.map +0 -1
  570. package/dist/memory/store.d.ts +0 -50
  571. package/dist/memory/store.d.ts.map +0 -1
  572. package/dist/memory/store.js +0 -161
  573. package/dist/memory/store.js.map +0 -1
  574. package/dist/memory/userProfile.d.ts +0 -156
  575. package/dist/memory/userProfile.d.ts.map +0 -1
  576. package/dist/memory/userProfile.js +0 -320
  577. package/dist/memory/userProfile.js.map +0 -1
  578. package/dist/memory/vectorStore.d.ts +0 -185
  579. package/dist/memory/vectorStore.d.ts.map +0 -1
  580. package/dist/memory/vectorStore.js +0 -257
  581. package/dist/memory/vectorStore.js.map +0 -1
  582. package/dist/persona/personaManager.d.ts +0 -160
  583. package/dist/persona/personaManager.d.ts.map +0 -1
  584. package/dist/persona/personaManager.js +0 -414
  585. package/dist/persona/personaManager.js.map +0 -1
  586. package/dist/persona/types.d.ts +0 -32
  587. package/dist/persona/types.d.ts.map +0 -1
  588. package/dist/persona/types.js +0 -5
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: craft-review
3
+ description: 写后自检:价值转变、情绪达成、留存思维、三层一致性 + 反 AI 叙事特征治理
4
+ ---
5
+
6
+ # craft-review:写后自检
7
+
8
+ ## 用途
9
+
10
+ 写完不叫完,自检才算完。从"作者视角"切到"读者视角",验证小说交付了承诺的东西。**额外承担反 AI 叙事特征治理**——AI 有结构性叙事缺陷,必须主动检测清除,否则一眼可辨。
11
+
12
+ ## 四道自检
13
+
14
+ 1. **价值转变检查**:每场景/每章必须有价值转变(好→坏 / 坏→好 / 信息揭晓改变认知),无转变即删或重写——"发生了事"不等于"有转变";
15
+ 2. **情绪价值达成**:对照需求层锁定的情绪类型——读者读完得到的是承诺的东西吗?解压型交付了释放感?治愈型交付了抚慰?共鸣型交付了"被看见"?没有就补情绪落点;
16
+ 3. **留存思维**:开头 3 章留人吗?每章章末钩子有效吗?放下后读者有理由回来吗?
17
+ 4. **三层一致性复审**:回到 three-layer-check 四问——内核↔需求、题材↔内核、形式↔读者、情绪价值↔需求缺口,动笔时认定的自洽是否在正文中维持了?
18
+
19
+ ## 反 AI 叙事特征治理(StoryScope 实证)
20
+
21
+ 研究显示仅靠叙事特征就能高准确率区分 AI/人类写作——这些特征**可枚举、可检测、可清除**。写后逐项排查:
22
+
23
+ | AI 结构性缺陷 | 检测项 | 治理动作 |
24
+ | --- | --- | --- |
25
+ | **说教强迫症** | 是否直接点题("这个故事告诉我们""他明白了")? | 删点题句,让读者自己品——好故事从不讲道理 |
26
+ | **闭环强迫** | 是否给每个角色交代结局(所有线都收干净)? | 保留开放式留白——人类偏爱"悬着",让读者想"然后呢" |
27
+ | **无支线** | 是否单线直推、没有旁线/暗线? | 检查主线下是否有配角支线、背景暗线 |
28
+ | **节拍器句长** | 句子节奏是否均匀无起伏(像节拍器)? | 人为制造 burstiness——长短句交错、参差有致 |
29
+ | **主角驱动过度** | 是否每个冲突都由主角亲手解决? | 让配角/环境/巧合偶尔主导,主角不必全能 |
30
+
31
+ ### 微层(字句级)去AI味检测
32
+
33
+ 结构层之上,AI 在字句层面有高频"机器签名"——读者不查术语也能感觉到"顺得假"。写后逐项猎杀:
34
+
35
+ | AI 签名 | 猎杀清单 | 改法 |
36
+ | --- | --- | --- |
37
+ | 过渡词套路 | 然而 / 因此 / 与此同时 / 值得注意的是 / 显而易见 / 毫无疑问 / 本质上 / 换句话说 / 综上所述 | 删或换口语(不过/所以/这会儿/其实/说白了);能砍就砍 |
38
+ | 规整句式 | 首先…其次…最后 / 一方面…另一方面 / 既…又… / 不但…而且 / 虽然…但是…因此 | 拆成 2-3 短句,去掉连接词,用"然后"代替"其次" |
39
+ | 形容词堆砌 | 同一名词前 ≥3 个形容词("幽冷而神秘的古老长剑") | 砍空泛形容词,用具体感官/动作("蓝光。剑身刻着符文") |
40
+ | 对话标签规整 | "他微微一笑,开口说道""她礼貌地回应道" | 省略标签;两人对话不标;需标用具体动词("他冷笑")或纯动作替代 |
41
+
42
+ **改写纪律**:AI 爱把每句话写"正确"——拆长句、留不完整句、让角色有不敢说出口的话(见 empathy-craft 犹豫感)。改完读出声,不顺口的就是机器签名。
43
+
44
+ ## 读者视角重读法
45
+
46
+ - 把自己当第一次读:遮住"作者知道"的信息,只看文本能推断出什么;
47
+ - 标记"读的时候想放下的地方"——这些就是节奏/信息密度/悬念的伤口;
48
+ - 标记"读不懂或信息过载处"——设定是否漏交代或堆砌。
49
+
50
+ ## 输出
51
+
52
+ ```markdown
53
+ - 问题清单(按严重度排序):
54
+ - 每项问题的修改建议:
55
+ - 需要作者拍板的取舍:
56
+ ```
57
+
58
+ ## 校验清单
59
+
60
+ - [ ] 每场景有价值转变?
61
+ - [ ] 交付的情绪价值 = 需求层承诺?
62
+ - [ ] 开头 3 章留人、章末有钩?
63
+ - [ ] 三层一致性在正文中维持?
64
+ - [ ] 无直接点题句(说教)?
65
+ - [ ] 留白与支线存在(非闭环单线)?
66
+ - [ ] 句长有参差(非节拍器)?
67
+ - [ ] 无过渡词套路(然而 / 因此 / 与此同时 / 值得注意的是…)?
68
+ - [ ] 无规整句式与 ≥3 个形容词堆砌?
69
+ - [ ] 对话标签不规整(该省则省、该标用具体动词)?
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: dialogue-craft
3
+ description: 对白写法:潜台词、语气区分、推进情节而非填充
4
+ ---
5
+
6
+ # dialogue-craft:对白写法
7
+
8
+ ## 用途
9
+
10
+ 写出推进情节、揭示人物的对白,而不是「说话机器」的寒暄填充。
11
+
12
+ ## 原则
13
+
14
+ 1. **对白即行动**:每句对白都是**通过语言达成目的的行为**——请求、施压、试探、隐瞒、示弱。写前问:这句他想达到什么?
15
+ 2. **潜台词 > 台词**:真实的人不直接说心里话。表面说「没关系」,实际在报复;表面问「你今天好吗」,实际在试探。让读者从冲突中读出真意。
16
+ 3. **语气即身份**:每人的句式、用词、长度固定——读者遮住名字也能认出是谁在说话。
17
+
18
+ ## 写法检查
19
+
20
+ | 问题 | 改法 |
21
+ |------|------|
22
+ | 两人对白说得一样长、一样多 | 权力关系决定篇幅——掌控者短句,不安者絮叨 |
23
+ | 对白在复述读者已知道的信息 | 删;用动作/环境代替交代 |
24
+ | 对白没有冲突,只有问答 | 让至少一方带着隐藏目的说话 |
25
+ | 所有人说话语气相同 | 回到人物卡,按说话方式改写 |
26
+
27
+ ## 写法细则(去机器感)
28
+
29
+ 对白占网文大半篇幅,写不好全盘皆输。除了潜台词与目的,还要注意字句层的机器签名:
30
+
31
+ - **省略标签**:两人对话不标"他说/她说";需区分时(多人/语气)用具体动词("他冷笑""她低声说")或纯动作替代("他顿了顿""她把茶杯放下")。AI 爱用"他微微一笑,开口说道"这类规整标签。
32
+ - **不完整句**:真人说话常断("我们……算了。分手吧"),不是完整陈述("我不想和你再有任何关系了")。
33
+ - **有情绪的停顿**:用断句代替"质问道"("你……凭什么?")。
34
+ - **用动作打断对话**:"我喜欢你。"他说完,把头扭过去了。
35
+ - **口语省略**:"挺好的"而非"我觉得非常好"。
36
+
37
+ 各题材对白差异:玄幻可中二半文言、都市要生活口语、悬疑短而留白、言情含蓄多潜台词、古言半文半白——AI 常把所有题材写成同一种"会说话的偶像剧腔",按题材调。
38
+
39
+ ## 校验清单
40
+
41
+ - [ ] 每句对白是否有「想达成的目的」?
42
+ - [ ] 遮住名字能分辨说话人?
43
+ - [ ] 有无纯信息交代式的对话?
44
+ - [ ] 标签该省则省、该标用具体动词(无「他微微一笑,开口说道」类规整标签)?
45
+ - [ ] 有断句与停顿(真人说话不完整,非全程完整陈述)?
@@ -0,0 +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
+ - [ ] 波浪线在正文中兑现(不是大纲摆设)?
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: empathy-craft
3
+ description: 共情技法:AI 写不出的"打动"用方法写出来——情绪逻辑、陈述→展示、情感轨迹、潜台词、可互换性测试
4
+ ---
5
+
6
+ # empathy-craft:共情技法
7
+
8
+ ## 用途
9
+
10
+ **共情是 AI 最弱的环节**——模型默认写"统计中心的反应"(心跳加速、泪流满面、胸口一热),这些是通用件,谁都能用,谁都不打动。共情不能靠"想共鸣",要靠方法:把"打动人"拆成可执行的技法。
11
+
12
+ ## 五个技法
13
+
14
+ ### 1. 情绪逻辑(反应指纹)
15
+
16
+ 每个人都有自己应对情绪的方式——有人压力下用幽默转移,有人进入照顾模式,有人外化,有人内化到看不出。**写谁,就按谁的情绪逻辑反应**:
17
+
18
+ ```markdown
19
+ 人物:<名字>
20
+ - 压力下的第一反应(幽默/照顾/外化/内化/沉默):
21
+ - 最害怕被看穿的时刻:
22
+ - 情绪失控时的具体行为(不是形容词):
23
+ ```
24
+
25
+ ### 2. 陈述→展示(情感锚点)
26
+
27
+ **禁止直接写情绪名词**(伤心/愤怒/害怕/开心)。情绪藏在动作、细节、他人反应里——每场景找一个细节把核心情绪"挂"住:
28
+
29
+ - ✗ "他非常愤怒"
30
+ - ✓ "他把门摔上的时候,玻璃震了一下"
31
+ - ✗ "她哭了"
32
+ - ✓ "庆功宴上有人开了三瓶酒,她那杯一直没动"
33
+
34
+ ### 3. 情感轨迹
35
+
36
+ 情绪不是平的——写前给方向,让情绪有起伏:
37
+
38
+ ```markdown
39
+ 情感轨迹:初始(克制/否认)→ 中途(动摇/试探)→ 最后(本音/崩溃/接纳)
40
+ ```
41
+
42
+ ### 4. 潜台词
43
+
44
+ 对话表面说 A,实际在要 B;真意藏在动作里。台词里说破 = 读者不参与 = 无共鸣:
45
+
46
+ - ✗ "他问:'你真的要走吗?'"
47
+ - ✓ "他说:'你真的要走吗?'声音比平时低了一度。烟灰掉在袖子上,他没有掸。"
48
+
49
+ ### 5. 可互换性测试
50
+
51
+ **这段反应换个人、换本小说还成立吗?成立 = 通用 = 重写。** 好反应是指纹不是证件照——硬汉侦探和初恋少女面对危险,反应绝不共用同一套生理描写。
52
+
53
+ ## 叙述者的犹豫与克制(AI 最深的破绽)
54
+
55
+ 前 5 个技法解决"情绪落进文字"。但 AI 文本还有一层更深的机器感,不在字面上,在**叙述者的姿态**:AI 没有不敢写的东西,每句话都"算对了",天然一种"毋庸置疑"的气场。真人写作会犹豫、会克制、会怕——这些不是缺陷,是人味最浓处。
56
+
57
+ 四个注入法:
58
+
59
+ 1. **结论不给满**:AI 替读者下结论("他明白了——这一切都是谎言");人类留半步("他好像明白了什么。但没说出来")。让读者自己得出结论。
60
+ 2. **叙述者承认不确定**:AI 全知("她心中充满复杂情感");人类有限("他看了半天,不知道她什么表情。也许生气。也许难过")。观察者本就看不清。
61
+ 3. **克制收尾**:AI 爱把每段情感收束完整(像作文结尾);人类常留一段没说完的收束("太阳快落了。他走了。门没锁")。读者带着没说完的离开。
62
+ 4. **角色不敢说**:AI 角色想说就说("我要离开这里");真人没说出口的远比说出的多("他想说什么。嘴动了动,又闭上了。'……算了。'")。把没说出口的写出来就是人味。
63
+
64
+ **自检**:①有没有一句是叙述者替读者下的结论?②有没有一处叙述者承认"我不确定"?③有没有一段对话角色把话全说完了?有则补回犹豫的痕迹。
65
+
66
+ ## 演出纪律(写稿时遵守)
67
+
68
+ - 情绪只展示不命名:禁止"伤心/难过/愤怒/开心"等直接形容词;
69
+ - 感情越强烈,动作越轻、台词越少(高张力 = 克制);
70
+ - 让读者在自己心里**生成**情绪,作者不代劳。
71
+
72
+ ## 校验清单
73
+
74
+ - [ ] 这段反应只属于这个人物(换了人不成立)?
75
+ - [ ] 场景有情感锚点细节挂住核心情绪?
76
+ - [ ] 情绪轨迹有起伏(不是平的)?
77
+ - [ ] 对话有潜台词、真意在动作里?
78
+ - [ ] 全文无直接情绪形容词?
79
+ - [ ] 叙述者留有犹豫痕迹(结论没给满 / 承认不确定 / 克制收尾 / 角色有不敢说的话)?
@@ -0,0 +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
+ - 埋点清单(写作时维护):`伏笔 | 出现章节 | 计划回收章节 | 状态`
21
+ - 悬置管理:距离计划回收点太远时,在中途用轻微呼应「提气」,防读者遗忘;
22
+ - 假伏笔:**故意**引导错误预期的信息(误导读者),需在回收时明确这是误导而非漏洞。
23
+
24
+ ## 校验清单
25
+
26
+ - [ ] 每根伏笔有回收点?
27
+ - [ ] 每个回收点有来处?
28
+ - [ ] 埋点是否轻到第一遍不察觉?
29
+ - [ ] 悬置的伏笔有中途提气?
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: hotspot-mapping
3
+ description: 事件→故事映射:搜当下社会热点 → 提取情绪内核 → 映射进小说世界(换事件留情绪,保留人的属性内核)
4
+ ---
5
+
6
+ # hotspot-mapping:事件→故事映射
7
+
8
+ ## 用途
9
+
10
+ **AI 不懂人类情感,但热点事件懂**——一个社会热点之所以热,不是因为事件本身,而是因为它携带了当下成千上万人真实的情绪。事件就是"人类情感需求的化石":AI 不需要去"想象"人类怎么感受,只需要把事件里的情绪内核**搬运**进小说世界。
11
+
12
+ 这是需求层落地的操作法:热点给**此刻的情绪温度**(需求层),经典人性内核给**跨时代的骨架**(内核层),映射后的虚构设定是形式层——三层自洽,人的属性才留得住。
13
+
14
+ ## 核心理念
15
+
16
+ | 维度 | 经典人性内核(内核层) | 热点事件(需求层) |
17
+ |---|---|---|
18
+ | 提供什么 | 骨架——跨时代不变的人性模式 | 血肉——此刻人们正在感受的情绪 |
19
+ | 时间性 | 跨越时代 | 只活一周到一个月的当下温度 |
20
+ | 用在哪 | 故事底层架构、大纲 | 具体场景、章节情绪 |
21
+
22
+ **经典给骨架,热点给血肉。**
23
+
24
+ > **与 `need-finder` 的分工(SSOT,勿重复执行)**:**搜索与情绪内核提取的 SSOT = `need-finder`**(它 step1 搜索、step2 提情绪内核)。若已由 `need-finder` 走完这两步,**本技能从 Step 3「映射到小说世界」开始**,不重复搜索。独立使用本技能时(如给已写章节补一层当下情绪温度)才从 Step 1 走起。**映射的 SSOT = 本技能。**
25
+
26
+ ## 四步操作法
27
+
28
+ ### Step 1:搜索
29
+
30
+ **搜什么**:最近一周到一个月的微博热搜、知乎热榜、百度热搜;引发广泛讨论的社会事件(争议越大,情绪内核越清晰);让人感同身受的普通人故事;**也搜"让人感到温暖的小事"**(无争议但有温度,在小说里更稀缺、更有力)。
31
+
32
+ **不搜什么**:纯娱乐八卦(没有深层情绪内核)、纯政治新闻(映射空间小、易变说教)、一次性奇闻(无情感共鸣基础)。
33
+
34
+ ### Step 2:提取情绪内核(最关键的一步)
35
+
36
+ **事件是壳,壳不重要——壳下面的情绪才带走。**
37
+
38
+ 读完新闻问自己:这条新闻让我产生了什么感受?**用一句话说出这个感受——描述情绪,不描述事件**:
39
+
40
+ | 新闻类型 | 表面事件 | 情绪内核(要带走的东西) |
41
+ |---|---|---|
42
+ | 裁员/失业 | 某公司裁员 30% | 不安全感、"下一个会不会是我" |
43
+ | 网络暴力 | 某人被网暴后抑郁 | 愤怒与无力、"为什么恶人不受惩罚" |
44
+ | 普通人逆袭 | 外卖员考上研究生 | 希望、"也许我也可以" |
45
+ | 不公正判决 | 弱势方败诉 | 对系统的不信任、"老实人总吃亏" |
46
+ | 被看见的小人物 | 某个不被关注的群体被报道 | 被忽视的委屈、"原来有人和我们一样" |
47
+ | 陌生人善意 | 路人合力救援 | 温暖、"世界还没那么糟" |
48
+ | 失而复得 | 走失 20 年的孩子被找到 | 渴望圆满、"如果是我就好了" |
49
+
50
+ **判据**:这个情绪必须是**读者也在感受的**——不是"我觉得这个官员很坏"(观点),是"我觉得老实人总吃亏"(情绪)。
51
+
52
+ ### Step 3:映射到小说世界(换事件、留内核)
53
+
54
+ **保留情绪内核 + 人性内核,替换具体事件**。换设定、换人物、换场景——只留情绪。
55
+
56
+ ```
57
+ 新闻:外卖员被困在算法里,拼命赶时间,出事故率飙升
58
+ ↓ 提取情绪内核
59
+ "底层人被无形的系统压榨,拼命奔跑却永远追不上"
60
+ ↓ 映射到修仙世界(形式层换了,人的属性没变)
61
+ "低阶弟子被困在宗门贡献度系统里,拼命做任务换资源,
62
+ 但规则是宗门定的,他们永远攒不够。最拼的那个弟子,
63
+ 在任务中受了重伤——宗门只发了三颗疗伤丹。"
64
+ ```
65
+
66
+ ```
67
+ 新闻:独居老人去世多日无人发现
68
+ ↓ 提取情绪内核 "一个人在人群中消失了,没有人注意到"
69
+ ↓ 映射到都市
70
+ "邻居的门三天没开了。门口的牛奶瓶攒了三个。
71
+ 主角想起来——上一次和邻居说话,是三个月前。"
72
+ ```
73
+
74
+ ```
75
+ 新闻:路边摊主免费请环卫工吃饭
76
+ ↓ 提取情绪内核 "底层人互相取暖——被忽视的人,看见了另一个被忽视的人"
77
+ ↓ 映射到武侠
78
+ "乞丐把最后一个馒头掰成两半,一半给了更老的乞丐。
79
+ 路过的侠客看见了,把剑收了起来。"
80
+ ```
81
+
82
+ **保留的是人的属性**:贪婪、恐惧、被看见的渴望、守护、不甘——这些不随题材变。变的只是它穿什么衣服出现。
83
+
84
+ ### Step 4:验证(三问)
85
+
86
+ 1. **读者能感到"这种情绪我熟悉"吗?** → 感受不到 = 情绪内核没提取对。
87
+ 2. **读者能认出"这是抄的 XX 新闻"吗?** → 能认出 = 外壳没换干净。
88
+ 3. **情绪是融入的还是贴上去的?** → 删掉这段映射,故事的情感逻辑会断裂吗?不会 = 贴上去的,重写。
89
+
90
+ ## 禁忌
91
+
92
+ | 禁忌 | 为什么 | 怎么做 |
93
+ |---|---|---|
94
+ | 不照搬新闻事件 | 搬事件是抄袭,搬情绪是创作 | 换设定、换人物、换场景,只留情绪内核 |
95
+ | 不消费真实受害者的痛苦 | 用别人的痛苦给故事贴金,读者能闻出来 | 只提取**普遍情绪**,不涉及具体受害者的具体遭遇 |
96
+ | 不让热点喧宾夺主 | 热点服务故事,不是故事服务热点 | 删掉热点映射,故事本身仍应完整 |
97
+ | 不做说教式映射 | 让读者觉得"作者在借小说发表评论" | 不点明映射关系——让人感受到情绪,不是观点 |
98
+ | 不用过时热点 | 两周前的热搜已经冷了,用了反而脱节 | 只搜最近一周到一个月的 |
99
+
100
+ ## 温暖型素材(被忽略的金矿)
101
+
102
+ 搜索的默认倾向是"争议"——争议越大情绪越清晰。但比争议更稀缺、更有力的是**让人温暖的小事**:陌生人善意、日常陪伴、被看见、小团圆。
103
+
104
+ 使用原则:**不煽情**(温暖的力量在克制,叙述者越克制读者越感动)、**不放纵**(一个细节够了,堆砌变味)、**不定性**(不说"这让人感动",只呈现事实)。
105
+
106
+ ## AI 的独特武器(人类做不到)
107
+
108
+ - **跨平台情绪对比**:同时看微博(大众情绪)/ 知乎(理性讨论)/ 小红书(生活感受)/ B 站(年轻群体)对同一事件的反应差异——一个事件在不同人群里有不同的情感内核。
109
+ - **情绪时效曲线**:追踪热点从爆发到冷却的情绪变化(爆发期愤怒 → 讨论期反思 → 冷却期淡漠),不同阶段的情绪可映射到故事的不同位置。
110
+ - **隐秘情绪发现**:在海量评论里找"少数但强烈"的情绪——主流在骂,但有 5% 的人说"我理解他"——这 5% 可能是更深刻的入口。
111
+ - **跨事件情绪连接**:发现两个看似无关的热点共享同一情感内核——"跨事件的共同情绪"比单个事件更有映射价值。
112
+
113
+ ## 校验清单
114
+
115
+ - [ ] 搜的是最近一周到一个月的(非过时热点)?
116
+ - [ ] 情绪内核是一句"情绪",而非一段"事件描述"?
117
+ - [ ] 映射后换了设定/人物/场景,只留情绪?
118
+ - [ ] 保留的是人的属性(人性内核)而非事件外壳?
119
+ - [ ] 读者认不出原新闻,但感到情绪熟悉?
120
+ - [ ] 删掉映射故事仍完整(非喧宾夺主)?
121
+ - [ ] 未涉及具体真实受害者的具体遭遇?
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: idea-lever
3
+ description: 创意杠杆:作者决策一次,AI 展开成 N 个候选(logline/开头/情节分支穷举)
4
+ ---
5
+
6
+ # idea-lever:创意杠杆
7
+
8
+ ## 用途
9
+
10
+ **人从 0→1 靠灵感,从 1→N 是体力活——AI 专吃体力活,把灵感时间还给作者。** 作者做一个关键决策,AI 把它的可能性穷举展开,作者从候选里挑或融合。
11
+
12
+ ## 适用场景(穷举点)
13
+
14
+ | 场景 | 展开方式 |
15
+ | --- | --- |
16
+ | 概念 | 一个内核 → 20 个 logline 候选(不同人物落差/世界/障碍组合) |
17
+ | 开头 | 一个前提 → 10 个不同走向的开头(异常时刻开场/倒叙/对话切入/日常侵入……) |
18
+ | 情节分支 | 一个岔路口 → 5 条分支(每条附"走向 + 代价 + 回收点") |
19
+ | 人物 | 一个目标 → 主角实现它的 N 种方式(正攻/迂回/交易/放弃反得) |
20
+ | 反派/对手 | 一个冲突 → 站在对面的 N 种人选(每个有理由、有镜像) |
21
+
22
+ ## 展开纪律
23
+
24
+ 1. **先问再展开**:确认"作者想在哪一层做决定"(概念/开头/分支/人物),不擅自扩大范围;
25
+ 2. **候选要异质**:10 个候选不能是同一想法的 10 个变体——每个方向要有本质差异(换内核、换人物落差、换代价),否则浪费;
26
+ 3. **每个候选带成本**:附"这个走向的优点/风险/代价",让作者能判断而不只是感觉;
27
+ 4. **作者是选择者**:给出候选 + 推荐(标注理由),但选哪个永远由作者定;
28
+ 5. **展开不替代判断**:穷举的意义是扩大作者的视野,不是替作者做决定——作者仍要 0→1 的灵感,AI 只负责 1→N。
29
+
30
+ ## 与流程衔接
31
+
32
+ - 接在 **logline-craft**(概念包装)之后:一个内核展开 N 个 logline;
33
+ - 接在 **outline-expand**(大纲成文)岔路口:一个转折点展开 N 条分支;
34
+ - 展开后的选中项回到主流程继续(候选→锁定→入圣经→成文)。
35
+
36
+ ## 校验清单
37
+
38
+ - [ ] 先确认了决策层(概念/开头/分支/人物)?
39
+ - [ ] 候选异质(非同一想法变体)?
40
+ - [ ] 每个候选带优点/风险/代价?
41
+ - [ ] 选择权在作者、AI 只推荐?
42
+ - [ ] 选中项已回流主流程?
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: logline-craft
3
+ description: 高概念/一句话卖点(logline):把三层结构翻译成一句话,决定开篇方向与市场吸引力
4
+ ---
5
+
6
+ # logline-craft:高概念(一句话卖点)
7
+
8
+ ## 用途
9
+
10
+ **内核→市场的翻译环节**。三层结构定了方向,但"这书是啥、为啥有人看"必须浓缩成一句话——这一句决定开篇怎么写、卖点怎么包装、读者点不点进来。
11
+
12
+ ## Logline 公式
13
+
14
+ ```
15
+ 一个[独特的人物],在[特殊的世界],想[达成目标],
16
+ 但[巨大的障碍]挡路,代价是[不可逆的代价]
17
+ ```
18
+
19
+ - 例:一个纽约警察,在处处是死角的神话都市里,想找回离家出走的女儿,但每个神都想要她(《美国众神》式)
20
+ - 例:一个会算命的半仙,在规矩森严的宗门里,想救回全师门,但代价是说出那个最不该说的天机
21
+
22
+ ## 从三层结构生成
23
+
24
+ 1. **内核** → 人性困境(孤独/自由/救赎/代价……)是 logline 的"底层引力";
25
+ 2. **独特人物** → 给内核配一个"最不该承受它的人"(身份与困境的落差越大越抓人);
26
+ 3. **世界** → 特殊世界放大困境(普通世界 × 极端困境 = 脱力;特殊世界 × 普通困境 = 奇观;双特殊 = 设定碾压);
27
+ 4. **障碍** → 必须是"价值观/代价层面的障碍",不是"打不过的怪";
28
+ 5. **代价** → 不可逆的东西(失去所爱/失去自我/世界回不去)——没有代价的 logline 没有重量。
29
+
30
+ ## 验证
31
+
32
+ - 一句话能说清"读者为什么想看"?(卖点)
33
+ - 读给不懂背景的人,他能复述吗?(记不住 = 信息过载 = 重写)
34
+ - 这个 logline 换给别的题材还成立吗?(成立 = 人物/障碍不够独特)
35
+
36
+ ## 平台适配
37
+
38
+ - **网文**:卖点前置——一句话必须含"金手指/爽点/身份反转"其中一项;
39
+ - **影视/短剧**:高概念 hook——一句话要有"没想到"的转折感。
40
+
41
+ ## 校验清单
42
+
43
+ - [ ] 有人物、世界、目标、障碍、代价五要素?
44
+ - [ ] 人物与困境有落差(独特)?
45
+ - [ ] 障碍是价值观/代价层面?
46
+ - [ ] 一句话含读者"想看"的理由?
47
+ - [ ] 换题材不成立(不可移植)?
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: longform-guard
3
+ description: 长篇防崩:卷/部规划、大纲预留、设定漂移防护、连载体力管理
4
+ ---
5
+
6
+ # longform-guard:长篇防崩
7
+
8
+ ## 用途
9
+
10
+ 短篇靠灵感,长篇靠**工程**。写 50 万字崩掉的不是文笔,是规划——卷部结构没留余量、大纲写死细节、设定漂移、体力透支。本技能防这三类崩。
11
+
12
+ ## 卷/部规划
13
+
14
+ - **以卷为单元**:每卷 = 一个完整的冲突周期(起→承→转→合),卷末有阶段性了结 + 新钩子(跨卷张力);
15
+ - **卷内留缓冲**:每卷计划内容只占该卷容量的 70%,留 30% 给角色"活"出来的意外(人物会自己长出来,写死反而假);
16
+ - **全书 2-3 个大高潮**:分布在卷末/中后段,不要每卷都拉满(情绪波浪线原则)。
17
+
18
+ ## 大纲预留
19
+
20
+ - **大纲是路线图不是剧本**:只定"每卷解决什么冲突、谁站在对面、价值怎么转",不写死具体对话和细节;
21
+ - **结局留两种可能**:动笔时定"预设结局",写作中允许人物偏离后改到"更真实的结局"——偏离要登记(outline-expand 纪律);
22
+ - **预留"发现"的空间**:好长篇的惊喜来自写的过程中发现——大纲别把路封死。
23
+
24
+ ## 设定漂移防护
25
+
26
+ - **设定圣经是唯一权威**(见 story-bible):矛盾时以圣经为准,改正文不改圣经;
27
+ - **新设定先入册再写**:写到新设定,先登记四卷再落笔;
28
+ - **每 5 章复盘**:时间线/伏笔台账对一遍,发现漂移立即标记(这是允许的,但要"知道自己在漂");
29
+ - **人名地名清单**:出现一次以上的专名登记在册,防"王磊"变"王雷"。
30
+
31
+ ## 连载体力管理
32
+
33
+ - **断更保护**:每章末留"下一章必写钩子"(即使断更,回来有抓手);
34
+ - **章节模板**:每章固定节奏(开场接续→进展→转变→钩子),写的时候不用重新设计;
35
+ - **每卷完整体检**:卷末做一次全卷复盘(节奏/情绪/伏笔),发现问题在下一卷补。
36
+
37
+ ## 单章篇幅密度(体积感红线)
38
+
39
+ 卷部规划管宏观,单章要管**体积感**——AI 写场景天然偏短(一场戏八百字就写完了)或注水(同一情绪反复写)。无基线即无红线。
40
+
41
+ **基线(动笔前按类型定)**:
42
+
43
+ | 类型 | 单章基线 | 说明 |
44
+ | --- | --- | --- |
45
+ | 网文(番茄 / 起点等) | 2000-3000 字 | 章章有钩,宁短勿拖 |
46
+ | 出版向文学 | 3000-5000 字 | 允许慢,但每章须有价值转变 |
47
+ | 短篇 / 中篇 | 单章不低于 1500 字 | 太短会碎 |
48
+
49
+ **红线**:
50
+
51
+ - **连续 3 章低于基线 60%** → 场景没展开,回 `scene-craft` 补动作 / 对话 / 感官 / 内心四维;
52
+ - **高于基线 150%** → 检查是否同一价值转变写了两遍(删重复,不是硬砍);
53
+ - **单章无价值转变** → 不论字数都重写(见 `scene-craft`)。
54
+
55
+ **纪律**:篇幅是结果不是目标——先问「这章的事说完了吗」,再用基线校准;**为凑字数注水比写短更致命**。
56
+
57
+ ## 校验清单
58
+
59
+ - [ ] 每卷有完整冲突周期 + 跨卷钩子?
60
+ - [ ] 单章篇幅在基线内(无连续过短 / 注水)?
61
+ - [ ] 卷内留 30% 缓冲?
62
+ - [ ] 大纲是路线图、结局留可能?
63
+ - [ ] 设定以圣经为准、新设定先入册?
64
+ - [ ] 断更保护 + 卷末体检?
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: need-finder
3
+ description: 需求层洞察:社会热点搜索 → 痛点提炼 → 精神需求缺口反推(读者画像+验证)
4
+ ---
5
+
6
+ # need-finder:需求层洞察
7
+
8
+ ## 用途
9
+
10
+ 三层结构的第一层——找到"当下社会缺什么"。没有它,小说只是自嗨。
11
+
12
+ ## 流程
13
+
14
+ 1. **搜索社会热点**:用 web_search 搜当前热门社会事件/现象(职场、家庭、代际、社会情绪、平台榜单);
15
+ 2. **提炼痛点 + 提取情绪内核**:从热点中问"这些人真正被什么困住"——不是事件本身,是事件之下的普遍困境;**并把这个困境说成一句情绪**:描述感受、不描述事件(是「老实人总吃亏」,不是「某案判错了」);
16
+ 3. **反推精神需求缺口**:痛点 → 缺什么精神供给(解压 / 治愈 / 共鸣 / 代偿 / 爽感);
17
+ 4. **读者画像**:这个痛点属于谁?(Z 世代 / 中老年 / 女性 / 男性 / 下沉市场),画像不同需求不同;
18
+ 5. **转换进小说世界**:把第 2 步的情绪内核 → 用 `hotspot-mapping` 映射到虚构设定(换事件、留情绪、保留人的属性内核),产出可直接进入内核锁定的故事素材——**AI 不靠想象人类的共鸣,靠从事件搬运已经存在的情绪**;
19
+ 6. **验证**:查平台榜单、读者评论、标签热度——避免"想当然的痛点"。
20
+
21
+ ## 输出模板
22
+
23
+ ```markdown
24
+ - 热点现象:
25
+ - 背后痛点:
26
+ - 情绪内核(一句话感受,不是事件描述):
27
+ - 精神需求缺口:
28
+ - 目标读者画像:
29
+ - 映射到小说世界(见 `hotspot-mapping`):
30
+ - 验证依据:
31
+ - 时效性:当下红利 / 长期底色
32
+ ```
33
+
34
+ ## 校验清单
35
+
36
+ - [ ] 痛点来自实证(搜索/榜单)而非猜测?
37
+ - [ ] 情绪内核是感受而非事件描述?
38
+ - [ ] 已用 `hotspot-mapping` 把情绪内核转换成故事素材(保留人的属性)?
39
+ - [ ] 区分了"当下红利"与"长期底色"?
40
+ - [ ] 读者画像具体到"谁"?
@@ -0,0 +1,46 @@
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
+ - **大纲不写死细节**:大纲是"路线图"不是"剧本"——人物在写作中会"活"起来,允许偏离但要登记(为什么偏离、新方向是否更好);
31
+ - **每章开写前回读章纲**:防止"写着写着忘了这章要干嘛";
32
+ - **成文时只盯当前场景**:当前场景写透,全书大局交给大纲(防信息过载);
33
+ - **卡住时的回退**:卡在场景→回章纲找这章目的;卡在章→回大纲找这卷任务;找不到任务 = 这章可能不该存在。
34
+
35
+ ## 交付节奏
36
+
37
+ - 一次给 1-2 章成文(不是一整卷);
38
+ - 每章交付后问:**这章达到章纲的转变和钩子了吗?**——达到才继续,未达先修。
39
+
40
+ ## 校验清单
41
+
42
+ - [ ] 五级逐层展开、每级确认过?
43
+ - [ ] 大纲是路线图不写死?
44
+ - [ ] 偏离有登记?
45
+ - [ ] 成文聚焦当前场景?
46
+ - [ ] 每次 1-2 章、章后验证转变与钩子?