@actalk/inkos-core 1.4.1 → 1.5.0-canary.47.1

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 (262) hide show
  1. package/dist/agent/agent-session.d.ts +15 -0
  2. package/dist/agent/agent-session.d.ts.map +1 -1
  3. package/dist/agent/agent-session.js +256 -26
  4. package/dist/agent/agent-session.js.map +1 -1
  5. package/dist/agent/agent-system-prompt.d.ts +8 -1
  6. package/dist/agent/agent-system-prompt.d.ts.map +1 -1
  7. package/dist/agent/agent-system-prompt.js +382 -176
  8. package/dist/agent/agent-system-prompt.js.map +1 -1
  9. package/dist/agent/agent-tools.d.ts +156 -19
  10. package/dist/agent/agent-tools.d.ts.map +1 -1
  11. package/dist/agent/agent-tools.js +980 -46
  12. package/dist/agent/agent-tools.js.map +1 -1
  13. package/dist/agent/context-transform.d.ts +4 -1
  14. package/dist/agent/context-transform.d.ts.map +1 -1
  15. package/dist/agent/context-transform.js +104 -9
  16. package/dist/agent/context-transform.js.map +1 -1
  17. package/dist/agent/index.d.ts +1 -1
  18. package/dist/agent/index.d.ts.map +1 -1
  19. package/dist/agent/index.js +1 -1
  20. package/dist/agent/index.js.map +1 -1
  21. package/dist/agents/architect.d.ts +11 -1
  22. package/dist/agents/architect.d.ts.map +1 -1
  23. package/dist/agents/architect.js +242 -114
  24. package/dist/agents/architect.js.map +1 -1
  25. package/dist/agents/chapter-analyzer.js +1 -1
  26. package/dist/agents/chapter-analyzer.js.map +1 -1
  27. package/dist/agents/composer.d.ts +36 -0
  28. package/dist/agents/composer.d.ts.map +1 -1
  29. package/dist/agents/composer.js +503 -20
  30. package/dist/agents/composer.js.map +1 -1
  31. package/dist/agents/continuity.d.ts +3 -0
  32. package/dist/agents/continuity.d.ts.map +1 -1
  33. package/dist/agents/continuity.js +28 -14
  34. package/dist/agents/continuity.js.map +1 -1
  35. package/dist/agents/en-prompt-sections.d.ts.map +1 -1
  36. package/dist/agents/en-prompt-sections.js +15 -1
  37. package/dist/agents/en-prompt-sections.js.map +1 -1
  38. package/dist/agents/fanfic-canon-importer.d.ts +1 -0
  39. package/dist/agents/fanfic-canon-importer.d.ts.map +1 -1
  40. package/dist/agents/fanfic-canon-importer.js +53 -6
  41. package/dist/agents/fanfic-canon-importer.js.map +1 -1
  42. package/dist/agents/foundation-reviewer.d.ts +1 -0
  43. package/dist/agents/foundation-reviewer.d.ts.map +1 -1
  44. package/dist/agents/foundation-reviewer.js +17 -12
  45. package/dist/agents/foundation-reviewer.js.map +1 -1
  46. package/dist/agents/length-normalizer.d.ts +1 -0
  47. package/dist/agents/length-normalizer.d.ts.map +1 -1
  48. package/dist/agents/length-normalizer.js +16 -3
  49. package/dist/agents/length-normalizer.js.map +1 -1
  50. package/dist/agents/planner-prompts.d.ts +7 -7
  51. package/dist/agents/planner-prompts.d.ts.map +1 -1
  52. package/dist/agents/planner-prompts.js +29 -29
  53. package/dist/agents/planner-prompts.js.map +1 -1
  54. package/dist/agents/planner.d.ts +6 -5
  55. package/dist/agents/planner.d.ts.map +1 -1
  56. package/dist/agents/planner.js +90 -6
  57. package/dist/agents/planner.js.map +1 -1
  58. package/dist/agents/post-write-validator.d.ts.map +1 -1
  59. package/dist/agents/post-write-validator.js +49 -0
  60. package/dist/agents/post-write-validator.js.map +1 -1
  61. package/dist/agents/reviser.js +10 -0
  62. package/dist/agents/reviser.js.map +1 -1
  63. package/dist/agents/rules-reader.d.ts +6 -14
  64. package/dist/agents/rules-reader.d.ts.map +1 -1
  65. package/dist/agents/rules-reader.js +15 -28
  66. package/dist/agents/rules-reader.js.map +1 -1
  67. package/dist/agents/short-fiction.d.ts +4 -0
  68. package/dist/agents/short-fiction.d.ts.map +1 -1
  69. package/dist/agents/short-fiction.js +51 -8
  70. package/dist/agents/short-fiction.js.map +1 -1
  71. package/dist/agents/state-validator.d.ts +0 -2
  72. package/dist/agents/state-validator.d.ts.map +1 -1
  73. package/dist/agents/state-validator.js +4 -16
  74. package/dist/agents/state-validator.js.map +1 -1
  75. package/dist/agents/style-analyzer.d.ts +1 -1
  76. package/dist/agents/style-analyzer.d.ts.map +1 -1
  77. package/dist/agents/style-analyzer.js +34 -17
  78. package/dist/agents/style-analyzer.js.map +1 -1
  79. package/dist/agents/writer-prompts.d.ts.map +1 -1
  80. package/dist/agents/writer-prompts.js +160 -12
  81. package/dist/agents/writer-prompts.js.map +1 -1
  82. package/dist/agents/writer.d.ts.map +1 -1
  83. package/dist/agents/writer.js +31 -9
  84. package/dist/agents/writer.js.map +1 -1
  85. package/dist/index.d.ts +18 -7
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +17 -7
  88. package/dist/index.js.map +1 -1
  89. package/dist/interaction/action-envelope.d.ts +261 -0
  90. package/dist/interaction/action-envelope.d.ts.map +1 -0
  91. package/dist/interaction/action-envelope.js +102 -0
  92. package/dist/interaction/action-envelope.js.map +1 -0
  93. package/dist/interaction/book-session-store.d.ts +6 -2
  94. package/dist/interaction/book-session-store.d.ts.map +1 -1
  95. package/dist/interaction/book-session-store.js +21 -3
  96. package/dist/interaction/book-session-store.js.map +1 -1
  97. package/dist/interaction/edit-controller.d.ts +5 -0
  98. package/dist/interaction/edit-controller.d.ts.map +1 -1
  99. package/dist/interaction/edit-controller.js +123 -26
  100. package/dist/interaction/edit-controller.js.map +1 -1
  101. package/dist/interaction/events.d.ts +4 -4
  102. package/dist/interaction/intents.d.ts +9 -6
  103. package/dist/interaction/intents.d.ts.map +1 -1
  104. package/dist/interaction/intents.js +2 -1
  105. package/dist/interaction/intents.js.map +1 -1
  106. package/dist/interaction/project-control.d.ts +3 -43
  107. package/dist/interaction/project-control.d.ts.map +1 -1
  108. package/dist/interaction/project-control.js +1 -53
  109. package/dist/interaction/project-control.js.map +1 -1
  110. package/dist/interaction/project-tools.d.ts +1 -1
  111. package/dist/interaction/project-tools.d.ts.map +1 -1
  112. package/dist/interaction/project-tools.js +41 -185
  113. package/dist/interaction/project-tools.js.map +1 -1
  114. package/dist/interaction/runtime.d.ts +1 -1
  115. package/dist/interaction/runtime.d.ts.map +1 -1
  116. package/dist/interaction/runtime.js +49 -75
  117. package/dist/interaction/runtime.js.map +1 -1
  118. package/dist/interaction/session-transcript-legacy.d.ts.map +1 -1
  119. package/dist/interaction/session-transcript-legacy.js +2 -0
  120. package/dist/interaction/session-transcript-legacy.js.map +1 -1
  121. package/dist/interaction/session-transcript-restore.d.ts +4 -3
  122. package/dist/interaction/session-transcript-restore.d.ts.map +1 -1
  123. package/dist/interaction/session-transcript-restore.js +234 -34
  124. package/dist/interaction/session-transcript-restore.js.map +1 -1
  125. package/dist/interaction/session-transcript-schema.d.ts +45 -12
  126. package/dist/interaction/session-transcript-schema.d.ts.map +1 -1
  127. package/dist/interaction/session-transcript-schema.js +6 -0
  128. package/dist/interaction/session-transcript-schema.js.map +1 -1
  129. package/dist/interaction/session-transcript.d.ts +8 -1
  130. package/dist/interaction/session-transcript.d.ts.map +1 -1
  131. package/dist/interaction/session-transcript.js +13 -1
  132. package/dist/interaction/session-transcript.js.map +1 -1
  133. package/dist/interaction/session.d.ts +78 -66
  134. package/dist/interaction/session.d.ts.map +1 -1
  135. package/dist/interaction/session.js +10 -2
  136. package/dist/interaction/session.js.map +1 -1
  137. package/dist/llm/provider.d.ts +32 -34
  138. package/dist/llm/provider.d.ts.map +1 -1
  139. package/dist/llm/provider.js +144 -127
  140. package/dist/llm/provider.js.map +1 -1
  141. package/dist/models/book-rules.d.ts +6 -4
  142. package/dist/models/book-rules.d.ts.map +1 -1
  143. package/dist/models/book-rules.js +187 -8
  144. package/dist/models/book-rules.js.map +1 -1
  145. package/dist/models/context-compression.d.ts +13 -0
  146. package/dist/models/context-compression.d.ts.map +1 -0
  147. package/dist/models/context-compression.js +2 -0
  148. package/dist/models/context-compression.js.map +1 -0
  149. package/dist/models/input-governance.d.ts +53 -12
  150. package/dist/models/input-governance.d.ts.map +1 -1
  151. package/dist/models/input-governance.js +16 -0
  152. package/dist/models/input-governance.js.map +1 -1
  153. package/dist/models/play.d.ts +530 -0
  154. package/dist/models/play.d.ts.map +1 -0
  155. package/dist/models/play.js +318 -0
  156. package/dist/models/play.js.map +1 -0
  157. package/dist/models/project.d.ts +8 -0
  158. package/dist/models/project.d.ts.map +1 -1
  159. package/dist/models/project.js +1 -0
  160. package/dist/models/project.js.map +1 -1
  161. package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -1
  162. package/dist/pipeline/chapter-review-cycle.js +29 -3
  163. package/dist/pipeline/chapter-review-cycle.js.map +1 -1
  164. package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -1
  165. package/dist/pipeline/persisted-governed-plan.js +98 -49
  166. package/dist/pipeline/persisted-governed-plan.js.map +1 -1
  167. package/dist/pipeline/runner.d.ts +31 -0
  168. package/dist/pipeline/runner.d.ts.map +1 -1
  169. package/dist/pipeline/runner.js +212 -68
  170. package/dist/pipeline/runner.js.map +1 -1
  171. package/dist/pipeline/short-fiction-runner.d.ts +14 -0
  172. package/dist/pipeline/short-fiction-runner.d.ts.map +1 -1
  173. package/dist/pipeline/short-fiction-runner.js +242 -94
  174. package/dist/pipeline/short-fiction-runner.js.map +1 -1
  175. package/dist/play/play-agents.d.ts +71 -0
  176. package/dist/play/play-agents.d.ts.map +1 -0
  177. package/dist/play/play-agents.js +511 -0
  178. package/dist/play/play-agents.js.map +1 -0
  179. package/dist/play/play-db-factory.d.ts +9 -0
  180. package/dist/play/play-db-factory.d.ts.map +1 -0
  181. package/dist/play/play-db-factory.js +18 -0
  182. package/dist/play/play-db-factory.js.map +1 -0
  183. package/dist/play/play-db.d.ts +22 -0
  184. package/dist/play/play-db.d.ts.map +1 -0
  185. package/dist/play/play-db.js +248 -0
  186. package/dist/play/play-db.js.map +1 -0
  187. package/dist/play/play-file-db.d.ts +32 -0
  188. package/dist/play/play-file-db.d.ts.map +1 -0
  189. package/dist/play/play-file-db.js +156 -0
  190. package/dist/play/play-file-db.js.map +1 -0
  191. package/dist/play/play-image.d.ts +58 -0
  192. package/dist/play/play-image.d.ts.map +1 -0
  193. package/dist/play/play-image.js +142 -0
  194. package/dist/play/play-image.js.map +1 -0
  195. package/dist/play/play-reducer.d.ts +31 -0
  196. package/dist/play/play-reducer.d.ts.map +1 -0
  197. package/dist/play/play-reducer.js +261 -0
  198. package/dist/play/play-reducer.js.map +1 -0
  199. package/dist/play/play-runner.d.ts +102 -0
  200. package/dist/play/play-runner.d.ts.map +1 -0
  201. package/dist/play/play-runner.js +465 -0
  202. package/dist/play/play-runner.js.map +1 -0
  203. package/dist/play/play-store.d.ts +112 -0
  204. package/dist/play/play-store.d.ts.map +1 -0
  205. package/dist/play/play-store.js +311 -0
  206. package/dist/play/play-store.js.map +1 -0
  207. package/dist/prompts/short-fiction.d.ts +5 -0
  208. package/dist/prompts/short-fiction.d.ts.map +1 -1
  209. package/dist/prompts/short-fiction.js +46 -22
  210. package/dist/prompts/short-fiction.js.map +1 -1
  211. package/dist/state/state-bootstrap.d.ts.map +1 -1
  212. package/dist/state/state-bootstrap.js +12 -25
  213. package/dist/state/state-bootstrap.js.map +1 -1
  214. package/dist/state/state-reducer.js +31 -22
  215. package/dist/state/state-reducer.js.map +1 -1
  216. package/dist/utils/book-eval.d.ts +35 -0
  217. package/dist/utils/book-eval.d.ts.map +1 -0
  218. package/dist/utils/book-eval.js +116 -0
  219. package/dist/utils/book-eval.js.map +1 -0
  220. package/dist/utils/chapter-memo-parser.d.ts +10 -7
  221. package/dist/utils/chapter-memo-parser.d.ts.map +1 -1
  222. package/dist/utils/chapter-memo-parser.js +86 -43
  223. package/dist/utils/chapter-memo-parser.js.map +1 -1
  224. package/dist/utils/context-assembly.d.ts +2 -0
  225. package/dist/utils/context-assembly.d.ts.map +1 -1
  226. package/dist/utils/context-assembly.js +38 -1
  227. package/dist/utils/context-assembly.js.map +1 -1
  228. package/dist/utils/hook-health.d.ts.map +1 -1
  229. package/dist/utils/hook-health.js +5 -2
  230. package/dist/utils/hook-health.js.map +1 -1
  231. package/dist/utils/hook-ledger-validator.d.ts +1 -1
  232. package/dist/utils/hook-ledger-validator.d.ts.map +1 -1
  233. package/dist/utils/hook-ledger-validator.js +5 -5
  234. package/dist/utils/hook-ledger-validator.js.map +1 -1
  235. package/dist/utils/hook-lifecycle.d.ts +1 -0
  236. package/dist/utils/hook-lifecycle.d.ts.map +1 -1
  237. package/dist/utils/hook-lifecycle.js +10 -3
  238. package/dist/utils/hook-lifecycle.js.map +1 -1
  239. package/dist/utils/language.d.ts +10 -0
  240. package/dist/utils/language.d.ts.map +1 -0
  241. package/dist/utils/language.js +18 -0
  242. package/dist/utils/language.js.map +1 -0
  243. package/dist/utils/length-metrics.d.ts +3 -0
  244. package/dist/utils/length-metrics.d.ts.map +1 -1
  245. package/dist/utils/length-metrics.js +8 -0
  246. package/dist/utils/length-metrics.js.map +1 -1
  247. package/dist/utils/memory-retrieval.d.ts.map +1 -1
  248. package/dist/utils/memory-retrieval.js +19 -15
  249. package/dist/utils/memory-retrieval.js.map +1 -1
  250. package/dist/utils/outline-paths.d.ts +12 -0
  251. package/dist/utils/outline-paths.d.ts.map +1 -1
  252. package/dist/utils/outline-paths.js +68 -0
  253. package/dist/utils/outline-paths.js.map +1 -1
  254. package/package.json +1 -1
  255. package/dist/interaction/nl-router.d.ts +0 -8
  256. package/dist/interaction/nl-router.d.ts.map +0 -1
  257. package/dist/interaction/nl-router.js +0 -218
  258. package/dist/interaction/nl-router.js.map +0 -1
  259. package/dist/pipeline/agent.d.ts +0 -15
  260. package/dist/pipeline/agent.d.ts.map +0 -1
  261. package/dist/pipeline/agent.js +0 -597
  262. package/dist/pipeline/agent.js.map +0 -1
@@ -1,597 +0,0 @@
1
- import { chatWithTools } from "../llm/provider.js";
2
- import { PipelineRunner } from "./runner.js";
3
- import { normalizePlatformOrOther } from "../models/book.js";
4
- import { DEFAULT_REVISE_MODE } from "../agents/reviser.js";
5
- import { deriveBookIdFromTitle } from "../utils/book-id.js";
6
- /** Tool definitions for the agent loop. */
7
- const TOOLS = [
8
- {
9
- name: "write_draft",
10
- description: "写【下一章】草稿。只能续写最新章之后的下一章,不能指定章节号,不能补历史空章。生成正文、更新状态卡/账本/伏笔池、保存章节文件。",
11
- parameters: {
12
- type: "object",
13
- properties: {
14
- bookId: { type: "string", description: "书籍ID" },
15
- guidance: { type: "string", description: "本章创作指导(可选,自然语言)" },
16
- },
17
- required: ["bookId"],
18
- },
19
- },
20
- {
21
- name: "plan_chapter",
22
- description: "为下一章生成 chapter intent(章节目标、必须保留、冲突说明)。适合在正式写作前检查当前控制输入是否正确。",
23
- parameters: {
24
- type: "object",
25
- properties: {
26
- bookId: { type: "string", description: "书籍ID" },
27
- guidance: { type: "string", description: "本章额外指导(可选,自然语言)" },
28
- },
29
- required: ["bookId"],
30
- },
31
- },
32
- {
33
- name: "compose_chapter",
34
- description: "为下一章生成 context/rule-stack/trace 运行时产物。适合在写作前确认系统实际会带哪些上下文和优先级。",
35
- parameters: {
36
- type: "object",
37
- properties: {
38
- bookId: { type: "string", description: "书籍ID" },
39
- guidance: { type: "string", description: "本章额外指导(可选,自然语言)" },
40
- },
41
- required: ["bookId"],
42
- },
43
- },
44
- {
45
- name: "audit_chapter",
46
- description: "审计指定章节。检查连续性、OOC、数值、伏笔等问题。",
47
- parameters: {
48
- type: "object",
49
- properties: {
50
- bookId: { type: "string", description: "书籍ID" },
51
- chapterNumber: { type: "number", description: "章节号(不填则审计最新章)" },
52
- },
53
- required: ["bookId"],
54
- },
55
- },
56
- {
57
- name: "revise_chapter",
58
- description: "修订指定章节的文字质量。根据审计问题做局部修正,不改变剧情走向。默认 spot-fix(定点修复最小改动);也支持 polish(润色)、rewrite(改写)、rework(重写)、anti-detect。注意:不能用来补缺失章节、不能改章节号、不能替代 write_draft。",
59
- parameters: {
60
- type: "object",
61
- properties: {
62
- bookId: { type: "string", description: "书籍ID" },
63
- chapterNumber: { type: "number", description: "章节号(不填则修订最新章)" },
64
- mode: { type: "string", enum: ["polish", "rewrite", "rework", "spot-fix", "anti-detect"], description: `修订模式(默认${DEFAULT_REVISE_MODE})` },
65
- },
66
- required: ["bookId"],
67
- },
68
- },
69
- {
70
- name: "scan_market",
71
- description: "扫描市场趋势。从平台排行榜获取实时数据并分析。",
72
- parameters: {
73
- type: "object",
74
- properties: {},
75
- },
76
- },
77
- {
78
- name: "create_book",
79
- description: "创建一本新书。生成世界观、卷纲、文风指南等基础设定。",
80
- parameters: {
81
- type: "object",
82
- properties: {
83
- title: { type: "string", description: "书名" },
84
- genre: { type: "string", enum: ["xuanhuan", "xianxia", "urban", "horror", "other"], description: "题材" },
85
- platform: { type: "string", enum: ["tomato", "feilu", "qidian", "other"], description: "目标平台" },
86
- brief: { type: "string", description: "创作简述/需求(自然语言)" },
87
- },
88
- required: ["title", "genre", "platform"],
89
- },
90
- },
91
- {
92
- name: "update_author_intent",
93
- description: "更新书级长期意图文档 author_intent.md。用于修改这本书长期想成为什么。",
94
- parameters: {
95
- type: "object",
96
- properties: {
97
- bookId: { type: "string", description: "书籍ID" },
98
- content: { type: "string", description: "author_intent.md 的完整新内容" },
99
- },
100
- required: ["bookId", "content"],
101
- },
102
- },
103
- {
104
- name: "update_current_focus",
105
- description: "更新当前关注点文档 current_focus.md。用于把最近几章的注意力拉回某条主线或冲突。",
106
- parameters: {
107
- type: "object",
108
- properties: {
109
- bookId: { type: "string", description: "书籍ID" },
110
- content: { type: "string", description: "current_focus.md 的完整新内容" },
111
- },
112
- required: ["bookId", "content"],
113
- },
114
- },
115
- {
116
- name: "get_book_status",
117
- description: "获取书籍状态概览:章数、字数、最近章节审计情况。",
118
- parameters: {
119
- type: "object",
120
- properties: {
121
- bookId: { type: "string", description: "书籍ID" },
122
- },
123
- required: ["bookId"],
124
- },
125
- },
126
- {
127
- name: "read_truth_files",
128
- description: "读取书籍的长期记忆(状态卡、资源账本、伏笔池)+ 世界观和卷纲。",
129
- parameters: {
130
- type: "object",
131
- properties: {
132
- bookId: { type: "string", description: "书籍ID" },
133
- },
134
- required: ["bookId"],
135
- },
136
- },
137
- {
138
- name: "list_books",
139
- description: "列出所有书籍。",
140
- parameters: {
141
- type: "object",
142
- properties: {},
143
- },
144
- },
145
- {
146
- name: "write_full_pipeline",
147
- description: "完整管线:写草稿 → 审计 → 自动修订(如需要)。一键完成。",
148
- parameters: {
149
- type: "object",
150
- properties: {
151
- bookId: { type: "string", description: "书籍ID" },
152
- count: { type: "number", description: "连续写几章(默认1)" },
153
- },
154
- required: ["bookId"],
155
- },
156
- },
157
- {
158
- name: "web_fetch",
159
- description: "抓取指定URL的文本内容。用于读取搜索结果中的详细页面。",
160
- parameters: {
161
- type: "object",
162
- properties: {
163
- url: { type: "string", description: "要抓取的URL" },
164
- maxChars: { type: "number", description: "最大返回字符数(默认8000)" },
165
- },
166
- required: ["url"],
167
- },
168
- },
169
- {
170
- name: "import_style",
171
- description: "从参考文本生成文风指南(统计 + LLM定性分析)。生成 style_profile.json 和 style_guide.md。",
172
- parameters: {
173
- type: "object",
174
- properties: {
175
- bookId: { type: "string", description: "目标书籍ID" },
176
- referenceText: { type: "string", description: "参考文本(至少2000字)" },
177
- },
178
- required: ["bookId", "referenceText"],
179
- },
180
- },
181
- {
182
- name: "import_canon",
183
- description: "从正传导入正典参照,生成 parent_canon.md,启用番外写作和审计模式。",
184
- parameters: {
185
- type: "object",
186
- properties: {
187
- targetBookId: { type: "string", description: "番外书籍ID" },
188
- parentBookId: { type: "string", description: "正传书籍ID" },
189
- },
190
- required: ["targetBookId", "parentBookId"],
191
- },
192
- },
193
- {
194
- name: "import_chapters",
195
- description: "【整书重导】导入已有章节。从完整文本中自动分割所有章节,逐章分析并重建全部真相文件。这是整书级操作,不是补某一章的工具。导入后可用 write_draft 续写。",
196
- parameters: {
197
- type: "object",
198
- properties: {
199
- bookId: { type: "string", description: "目标书籍ID" },
200
- text: { type: "string", description: "包含多章的完整文本" },
201
- splitPattern: { type: "string", description: "章节分割正则(可选,默认匹配'第X章')" },
202
- },
203
- required: ["bookId", "text"],
204
- },
205
- },
206
- {
207
- name: "write_truth_file",
208
- description: "【整文件覆盖】直接替换书的真相文件内容。用于扩展大纲、修改世界观、调整规则。注意:这是整文件覆盖写入,不是追加;不要用来改 current_state.md 的章节进度指针或 hack 章节号;不要用来补空章节。book_rules.md / story_bible.md 是 Phase 5 之后的兼容指针,不再作为写入目标——请改写 outline/story_frame.md 的 YAML frontmatter。",
209
- parameters: {
210
- type: "object",
211
- properties: {
212
- bookId: { type: "string", description: "书籍ID" },
213
- fileName: { type: "string", description: "文件名(如 outline/story_frame.md、outline/volume_map.md、outline/节奏原则.md(可选,Phase 5 后节奏原则合并到 volume_map 尾段,仅 legacy / 人工写入时出现)、roles/主要角色/<name>.md、roles/次要角色/<name>.md、current_state.md、pending_hooks.md)" },
214
- content: { type: "string", description: "新的完整文件内容" },
215
- },
216
- required: ["bookId", "fileName", "content"],
217
- },
218
- },
219
- ];
220
- export async function runAgentLoop(config, instruction, options) {
221
- const pipeline = new PipelineRunner(config);
222
- const { StateManager } = await import("../state/manager.js");
223
- const state = new StateManager(config.projectRoot);
224
- const messages = [
225
- {
226
- role: "system",
227
- content: `你是 InkOS 小说写作 Agent。用户是小说作者,你帮他管理从建书到成稿的全过程。
228
-
229
- ## 工具
230
-
231
- | 工具 | 作用 |
232
- |------|------|
233
- | list_books | 列出所有书 |
234
- | get_book_status | 查看书的章数、字数、审计状态 |
235
- | read_truth_files | 读取长期记忆(状态卡、资源账本、伏笔池)和设定(世界观、卷纲、本书规则) |
236
- | create_book | 建书,生成世界观、卷纲、本书规则(自动加载题材 genre profile) |
237
- | plan_chapter | 先生成 chapter intent,确认本章目标/冲突/优先级 |
238
- | compose_chapter | 再生成 runtime context/rule stack,确认实际输入 |
239
- | write_draft | 写【下一章】草稿(只能续写最新章之后,不能补历史章) |
240
- | audit_chapter | 审计章节(32维度,按题材条件启用,含AI痕迹+敏感词检测) |
241
- | revise_chapter | 修订章节文字质量(不能补空章/改章号,五种模式) |
242
- | update_author_intent | 更新书级长期意图 author_intent.md |
243
- | update_current_focus | 更新当前关注点 current_focus.md |
244
- | write_full_pipeline | 完整管线:写 → 审 → 改(如需要) |
245
- | scan_market | 扫描平台排行榜,分析市场趋势 |
246
- | web_fetch | 抓取指定URL的文本内容 |
247
- | import_style | 从参考文本生成文风指南(统计+LLM分析) |
248
- | import_canon | 从正传导入正典参照,启用番外模式 |
249
- | import_chapters | 【整书重导】导入全部已有章节并重建真相文件 |
250
- | write_truth_file | 【整文件覆盖】替换真相文件内容,不能用来改章节进度 |
251
-
252
- ## 长期记忆
253
-
254
- 每本书有两层控制面:
255
- - **author_intent.md** — 这本书长期想成为什么
256
- - **current_focus.md** — 最近 1-3 章要把注意力拉回哪里
257
-
258
- 以及七个长期记忆文件,是 Agent 写作和审计的事实依据:
259
- - **current_state.md** — 角色位置、关系、已知信息、当前冲突
260
- - **particle_ledger.md** — 物品/资源账本,每笔增减有据可查
261
- - **pending_hooks.md** — 已埋伏笔、推进状态、预期回收时机
262
- - **chapter_summaries.md** — 每章压缩摘要(人物、事件、伏笔、情绪)
263
- - **subplot_board.md** — 支线进度板
264
- - **emotional_arcs.md** — 角色情感弧线
265
- - **character_matrix.md** — 角色交互矩阵与信息边界
266
-
267
- ## 管线逻辑
268
-
269
- - audit 返回 passed=true → 不需要 revise
270
- - audit 返回 passed=false 且有 critical → 调 revise,改完可以再 audit
271
- - write_full_pipeline 会自动走完 写→审→改,适合不需要中间干预的场景
272
-
273
- ## 规则
274
-
275
- - 用户提供了题材/创意但没说要扫描市场 → 跳过 scan_market,直接 create_book
276
- - 用户说了书名/bookId → 直接操作,不需要先 list_books
277
- - 每完成一步,简要汇报进展
278
- - 当用户要求“先把注意力拉回某条线”时,优先 update_current_focus,然后 plan_chapter / compose_chapter,再决定是否 write_draft 或 write_full_pipeline
279
- - 仿写流程:用户提供参考文本 → import_style → 生成 style_guide.md,后续写作自动参照
280
- - 番外流程:先 create_book 建番外书 → import_canon 导入正传正典 → 然后正常 write_draft
281
- - 续写流程:用户提供已有章节 → import_chapters → 然后 write_draft 续写
282
-
283
- ## 禁止事项(严格遵守)
284
-
285
- - 不要用 write_draft 补历史中间章节。write_draft 只能写【当前最新章之后的下一章】
286
- - 不要用 import_chapters 修补某一个空章。import_chapters 是整书级重导工具
287
- - 不要用 write_truth_file 修改 current_state.md 的章节进度来"骗"系统跳到某一章
288
- - 不要用 revise_chapter 补缺失章节或改章节号。revise 只做文字质量修订
289
- - 用户说"补第 N 章"或"第 N 章是空的"时,先用 get_book_status 和 read_truth_files 判断真实状态,再决定用哪个工具
290
- - 不要在没有确认书籍状态的情况下直接调用写作工具`,
291
- },
292
- { role: "user", content: instruction },
293
- ];
294
- const maxTurns = options?.maxTurns ?? 20;
295
- let lastAssistantMessage = "";
296
- for (let turn = 0; turn < maxTurns; turn++) {
297
- const result = await chatWithTools(config.client, config.model, messages, TOOLS);
298
- // Push assistant message to history
299
- messages.push({
300
- role: "assistant",
301
- content: result.content || null,
302
- ...(result.toolCalls.length > 0 ? { toolCalls: result.toolCalls } : {}),
303
- });
304
- if (result.content) {
305
- lastAssistantMessage = result.content;
306
- options?.onMessage?.(result.content);
307
- }
308
- // If no tool calls, we're done
309
- if (result.toolCalls.length === 0)
310
- break;
311
- // Execute tool calls
312
- for (const toolCall of result.toolCalls) {
313
- let toolResult;
314
- try {
315
- const args = JSON.parse(toolCall.arguments);
316
- options?.onToolCall?.(toolCall.name, args);
317
- toolResult = await executeTool(pipeline, state, config, toolCall.name, args);
318
- }
319
- catch (e) {
320
- toolResult = JSON.stringify({ error: String(e) });
321
- }
322
- options?.onToolResult?.(toolCall.name, toolResult);
323
- messages.push({ role: "tool", toolCallId: toolCall.id, content: toolResult });
324
- }
325
- }
326
- return lastAssistantMessage;
327
- }
328
- export async function executeAgentTool(pipeline, state, config, name, args) {
329
- switch (name) {
330
- case "plan_chapter": {
331
- const result = await pipeline.planChapter(args.bookId, args.guidance);
332
- return JSON.stringify(result);
333
- }
334
- case "compose_chapter": {
335
- const result = await pipeline.composeChapter(args.bookId, args.guidance);
336
- return JSON.stringify(result);
337
- }
338
- case "write_draft": {
339
- const bookId = args.bookId;
340
- const writeGuardError = await getSequentialWriteGuardError(state, bookId, "write_draft");
341
- if (writeGuardError) {
342
- return JSON.stringify({ error: writeGuardError });
343
- }
344
- const result = await pipeline.writeDraft(bookId, args.guidance);
345
- return JSON.stringify(result);
346
- }
347
- case "audit_chapter": {
348
- const result = await pipeline.auditDraft(args.bookId, args.chapterNumber);
349
- return JSON.stringify(result);
350
- }
351
- case "revise_chapter": {
352
- // Guard: target chapter must exist and have content
353
- const bookId = args.bookId;
354
- const chapterNum = args.chapterNumber;
355
- if (chapterNum !== undefined) {
356
- const index = await state.loadChapterIndex(bookId);
357
- const chapter = index.find((ch) => ch.number === chapterNum);
358
- if (!chapter) {
359
- return JSON.stringify({ error: `第${chapterNum}章不存在。revise_chapter 只能修订已有章节,不能用来补写缺失章节。请用 get_book_status 确认。` });
360
- }
361
- if (chapter.wordCount === 0) {
362
- return JSON.stringify({ error: `第${chapterNum}章内容为空(0字)。revise_chapter 不能修订空章节。` });
363
- }
364
- }
365
- const result = await pipeline.reviseDraft(bookId, chapterNum, args.mode ?? DEFAULT_REVISE_MODE);
366
- return JSON.stringify(result);
367
- }
368
- case "scan_market": {
369
- const result = await pipeline.runRadar();
370
- return JSON.stringify(result);
371
- }
372
- case "create_book": {
373
- const now = new Date().toISOString();
374
- const title = args.title;
375
- const bookId = deriveBookIdFromTitle(title) || `book-${Date.now().toString(36)}`;
376
- const book = {
377
- id: bookId,
378
- title,
379
- platform: normalizePlatformOrOther(args.platform ?? "tomato"),
380
- genre: (args.genre ?? "xuanhuan"),
381
- status: "outlining",
382
- targetChapters: 200,
383
- chapterWordCount: 3000,
384
- createdAt: now,
385
- updatedAt: now,
386
- };
387
- const brief = args.brief;
388
- if (brief) {
389
- const contextPipeline = new PipelineRunner({ ...config, externalContext: brief });
390
- await contextPipeline.initBook(book);
391
- }
392
- else {
393
- await pipeline.initBook(book);
394
- }
395
- return JSON.stringify({ bookId, title, status: "created" });
396
- }
397
- case "get_book_status": {
398
- const result = await pipeline.getBookStatus(args.bookId);
399
- return JSON.stringify(result);
400
- }
401
- case "update_author_intent": {
402
- await state.ensureControlDocuments(args.bookId);
403
- const { writeFile } = await import("node:fs/promises");
404
- const { join } = await import("node:path");
405
- const storyDir = join(state.bookDir(args.bookId), "story");
406
- await writeFile(join(storyDir, "author_intent.md"), args.content, "utf-8");
407
- return JSON.stringify({ bookId: args.bookId, file: "story/author_intent.md", written: true });
408
- }
409
- case "update_current_focus": {
410
- await state.ensureControlDocuments(args.bookId);
411
- const { writeFile } = await import("node:fs/promises");
412
- const { join } = await import("node:path");
413
- const storyDir = join(state.bookDir(args.bookId), "story");
414
- await writeFile(join(storyDir, "current_focus.md"), args.content, "utf-8");
415
- return JSON.stringify({ bookId: args.bookId, file: "story/current_focus.md", written: true });
416
- }
417
- case "read_truth_files": {
418
- const result = await pipeline.readTruthFiles(args.bookId);
419
- return JSON.stringify(result);
420
- }
421
- case "list_books": {
422
- const bookIds = await state.listBooks();
423
- const books = await Promise.all(bookIds.map(async (id) => {
424
- try {
425
- return await pipeline.getBookStatus(id);
426
- }
427
- catch {
428
- return { bookId: id, error: "failed to load" };
429
- }
430
- }));
431
- return JSON.stringify(books);
432
- }
433
- case "write_full_pipeline": {
434
- const bookId = args.bookId;
435
- const writeGuardError = await getSequentialWriteGuardError(state, bookId, "write_full_pipeline");
436
- if (writeGuardError) {
437
- return JSON.stringify({ error: writeGuardError });
438
- }
439
- const count = args.count ?? 1;
440
- const results = [];
441
- for (let i = 0; i < count; i++) {
442
- const result = await pipeline.writeNextChapter(bookId);
443
- results.push(result);
444
- }
445
- return JSON.stringify(results);
446
- }
447
- case "web_fetch": {
448
- const { fetchUrl } = await import("../utils/web-search.js");
449
- const text = await fetchUrl(args.url, args.maxChars ?? 8000);
450
- return JSON.stringify({ url: args.url, content: text });
451
- }
452
- case "import_style": {
453
- const guide = await pipeline.generateStyleGuide(args.bookId, args.referenceText);
454
- return JSON.stringify({
455
- bookId: args.bookId,
456
- statsProfile: "story/style_profile.json",
457
- styleGuide: "story/style_guide.md",
458
- guidePreview: guide.slice(0, 500),
459
- });
460
- }
461
- case "import_canon": {
462
- const canon = await pipeline.importCanon(args.targetBookId, args.parentBookId);
463
- return JSON.stringify({
464
- targetBookId: args.targetBookId,
465
- parentBookId: args.parentBookId,
466
- output: "story/parent_canon.md",
467
- canonPreview: canon.slice(0, 500),
468
- });
469
- }
470
- case "import_chapters": {
471
- const { splitChapters } = await import("../utils/chapter-splitter.js");
472
- const chapters = splitChapters(args.text, args.splitPattern);
473
- if (chapters.length === 0) {
474
- return JSON.stringify({ error: "No chapters found. Check text format or provide a splitPattern." });
475
- }
476
- // Guard: import_chapters is a whole-book reimport, not a single-chapter patch
477
- if (chapters.length === 1) {
478
- return JSON.stringify({ error: "import_chapters 是整书重导工具,需要至少 2 个章节。如果只想补一章,请用 write_draft 续写或 revise_chapter 修订。" });
479
- }
480
- const result = await pipeline.importChapters({
481
- bookId: args.bookId,
482
- chapters: [...chapters],
483
- });
484
- return JSON.stringify(result);
485
- }
486
- case "write_truth_file": {
487
- const bookId = args.bookId;
488
- const fileName = args.fileName;
489
- const content = args.content;
490
- // Whitelist allowed truth files.
491
- //
492
- // Hotfix: story_bible.md and book_rules.md are back in the whitelist —
493
- // they are authoritative for pre-Phase-5 books. For new-layout books
494
- // (outline/story_frame.md exists) they're compat shims and writes are
495
- // blocked below.
496
- const LEGACY_SHIM_FILES = new Set(["story_bible.md", "book_rules.md"]);
497
- const ALLOWED_FLAT_FILES = [
498
- "story_bible.md", "book_rules.md",
499
- "current_state.md", "particle_ledger.md", "pending_hooks.md",
500
- "chapter_summaries.md", "subplot_board.md", "emotional_arcs.md",
501
- "character_matrix.md", "style_guide.md",
502
- ];
503
- // outline/节奏原则.md (zh) / outline/rhythm_principles.md (en) are
504
- // optional after Phase 5 consolidation — rhythm principles normally live
505
- // in the last paragraph of volume_map and writeFoundationFiles skips the
506
- // dedicated file when the block is empty. They remain whitelisted so
507
- // legacy books and manual overrides keep working.
508
- const ALLOWED_OUTLINE_FILES = [
509
- "outline/story_frame.md", "outline/volume_map.md",
510
- "outline/节奏原则.md", "outline/rhythm_principles.md",
511
- ];
512
- // Phase hotfix 3: accept both locale dirs so English-layout books can
513
- // be edited via write_truth_file. The reader (utils/outline-paths.ts)
514
- // and Studio (server.ts) accept both — the agent whitelist must match.
515
- const ROLE_PATH_PATTERN = /^roles\/(主要角色|次要角色|major|minor)\/[^/]+\.md$/;
516
- const isAllowed = ALLOWED_FLAT_FILES.includes(fileName)
517
- || ALLOWED_OUTLINE_FILES.includes(fileName)
518
- || ROLE_PATH_PATTERN.test(fileName);
519
- if (!isAllowed) {
520
- const allowedExamples = [
521
- ...ALLOWED_FLAT_FILES,
522
- ...ALLOWED_OUTLINE_FILES,
523
- "roles/主要角色/<name>.md",
524
- "roles/次要角色/<name>.md",
525
- "roles/major/<name>.md",
526
- "roles/minor/<name>.md",
527
- ];
528
- return JSON.stringify({
529
- error: `不允许修改文件 "${fileName}"。允许的文件:${allowedExamples.join(", ")}`,
530
- });
531
- }
532
- // For new-layout books, story_bible.md / book_rules.md are shims —
533
- // block writes so the agent edits outline/story_frame.md instead.
534
- if (LEGACY_SHIM_FILES.has(fileName)) {
535
- const { isNewLayoutBook } = await import("../utils/outline-paths.js");
536
- const bookDirForCheck = new (await import("../state/manager.js")).StateManager(config.projectRoot).bookDir(bookId);
537
- if (await isNewLayoutBook(bookDirForCheck)) {
538
- return JSON.stringify({
539
- error: `"${fileName}" 是兼容指针(新布局书籍),请改写 outline/story_frame.md。`,
540
- });
541
- }
542
- }
543
- // Path traversal guard — the whitelist already forbids `..`, but we
544
- // re-assert at the write site so this cannot regress.
545
- if (fileName.includes("..") || fileName.startsWith("/") || fileName.includes("\0")) {
546
- return JSON.stringify({ error: `不安全的文件路径:"${fileName}"` });
547
- }
548
- // Guard: block chapter progress manipulation via current_state.md
549
- if (fileName === "current_state.md" && containsProgressManipulation(content)) {
550
- return JSON.stringify({ error: "不允许通过 write_truth_file 修改 current_state.md 中的章节进度。章节进度由系统自动管理。" });
551
- }
552
- const { writeFile, mkdir } = await import("node:fs/promises");
553
- const { join, dirname } = await import("node:path");
554
- const bookDir = new (await import("../state/manager.js")).StateManager(config.projectRoot).bookDir(bookId);
555
- const storyDir = join(bookDir, "story");
556
- const targetPath = join(storyDir, fileName);
557
- await mkdir(dirname(targetPath), { recursive: true });
558
- await writeFile(targetPath, content, "utf-8");
559
- return JSON.stringify({
560
- bookId,
561
- file: `story/${fileName}`,
562
- written: true,
563
- size: content.length,
564
- });
565
- }
566
- default:
567
- return JSON.stringify({ error: `Unknown tool: ${name}` });
568
- }
569
- }
570
- async function executeTool(pipeline, state, config, name, args) {
571
- return executeAgentTool(pipeline, state, config, name, args);
572
- }
573
- async function getSequentialWriteGuardError(state, bookId, toolName) {
574
- const nextNum = await state.getNextChapterNumber(bookId);
575
- const index = await state.loadChapterIndex(bookId);
576
- if (index.length === 0)
577
- return null;
578
- const lastIndexedChapter = index[index.length - 1].number;
579
- if (lastIndexedChapter === nextNum - 1)
580
- return null;
581
- return `${toolName} 只能续写下一章(当前应写第${nextNum}章)。检测到章节索引与运行时进度不一致,请先用 get_book_status 确认状态。`;
582
- }
583
- function containsProgressManipulation(content) {
584
- const patterns = [
585
- /\blastAppliedChapter\b/i,
586
- /\|\s*Current Chapter\s*\|\s*\d+\s*\|/i,
587
- /\|\s*当前章(?:节)?\s*\|\s*\d+\s*\|/,
588
- /\bCurrent Chapter\b\s*[::]\s*\d+/i,
589
- /当前章(?:节)?\s*[::]\s*\d+/,
590
- /\bprogress\b\s*[::]\s*\d+/i,
591
- /进度\s*[::]\s*\d+/,
592
- ];
593
- return patterns.some((pattern) => pattern.test(content));
594
- }
595
- /** Export tool definitions so external systems can reference them. */
596
- export { TOOLS as AGENT_TOOLS };
597
- //# sourceMappingURL=agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/pipeline/agent.ts"],"names":[],"mappings":"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"}