inkos-n 1.2.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 (221) hide show
  1. package/dist/commands/agent.d.ts +3 -0
  2. package/dist/commands/agent.d.ts.map +1 -0
  3. package/dist/commands/agent.js +59 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/analytics.d.ts +3 -0
  6. package/dist/commands/analytics.d.ts.map +1 -0
  7. package/dist/commands/analytics.js +74 -0
  8. package/dist/commands/analytics.js.map +1 -0
  9. package/dist/commands/audit.d.ts +3 -0
  10. package/dist/commands/audit.d.ts.map +1 -0
  11. package/dist/commands/audit.js +52 -0
  12. package/dist/commands/audit.js.map +1 -0
  13. package/dist/commands/book.d.ts +3 -0
  14. package/dist/commands/book.d.ts.map +1 -0
  15. package/dist/commands/book.js +250 -0
  16. package/dist/commands/book.js.map +1 -0
  17. package/dist/commands/compose.d.ts +3 -0
  18. package/dist/commands/compose.d.ts.map +1 -0
  19. package/dist/commands/compose.js +47 -0
  20. package/dist/commands/compose.js.map +1 -0
  21. package/dist/commands/config.d.ts +3 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +293 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/consolidate.d.ts +3 -0
  26. package/dist/commands/consolidate.d.ts.map +1 -0
  27. package/dist/commands/consolidate.js +50 -0
  28. package/dist/commands/consolidate.js.map +1 -0
  29. package/dist/commands/daemon.d.ts +4 -0
  30. package/dist/commands/daemon.d.ts.map +1 -0
  31. package/dist/commands/daemon.js +118 -0
  32. package/dist/commands/daemon.js.map +1 -0
  33. package/dist/commands/detect.d.ts +3 -0
  34. package/dist/commands/detect.d.ts.map +1 -0
  35. package/dist/commands/detect.js +104 -0
  36. package/dist/commands/detect.js.map +1 -0
  37. package/dist/commands/doctor.d.ts +3 -0
  38. package/dist/commands/doctor.d.ts.map +1 -0
  39. package/dist/commands/doctor.js +233 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/draft.d.ts +3 -0
  42. package/dist/commands/draft.d.ts.map +1 -0
  43. package/dist/commands/draft.js +42 -0
  44. package/dist/commands/draft.js.map +1 -0
  45. package/dist/commands/eval.d.ts +3 -0
  46. package/dist/commands/eval.d.ts.map +1 -0
  47. package/dist/commands/eval.js +168 -0
  48. package/dist/commands/eval.js.map +1 -0
  49. package/dist/commands/export.d.ts +3 -0
  50. package/dist/commands/export.d.ts.map +1 -0
  51. package/dist/commands/export.js +115 -0
  52. package/dist/commands/export.js.map +1 -0
  53. package/dist/commands/fanfic.d.ts +3 -0
  54. package/dist/commands/fanfic.d.ts.map +1 -0
  55. package/dist/commands/fanfic.js +180 -0
  56. package/dist/commands/fanfic.js.map +1 -0
  57. package/dist/commands/genre.d.ts +3 -0
  58. package/dist/commands/genre.d.ts.map +1 -0
  59. package/dist/commands/genre.js +152 -0
  60. package/dist/commands/genre.js.map +1 -0
  61. package/dist/commands/import.d.ts +3 -0
  62. package/dist/commands/import.d.ts.map +1 -0
  63. package/dist/commands/import.js +136 -0
  64. package/dist/commands/import.js.map +1 -0
  65. package/dist/commands/init.d.ts +3 -0
  66. package/dist/commands/init.d.ts.map +1 -0
  67. package/dist/commands/init.js +132 -0
  68. package/dist/commands/init.js.map +1 -0
  69. package/dist/commands/interact.d.ts +25 -0
  70. package/dist/commands/interact.d.ts.map +1 -0
  71. package/dist/commands/interact.js +73 -0
  72. package/dist/commands/interact.js.map +1 -0
  73. package/dist/commands/plan.d.ts +3 -0
  74. package/dist/commands/plan.d.ts.map +1 -0
  75. package/dist/commands/plan.js +51 -0
  76. package/dist/commands/plan.js.map +1 -0
  77. package/dist/commands/radar.d.ts +3 -0
  78. package/dist/commands/radar.d.ts.map +1 -0
  79. package/dist/commands/radar.js +52 -0
  80. package/dist/commands/radar.js.map +1 -0
  81. package/dist/commands/review.d.ts +3 -0
  82. package/dist/commands/review.d.ts.map +1 -0
  83. package/dist/commands/review.js +229 -0
  84. package/dist/commands/review.js.map +1 -0
  85. package/dist/commands/revise.d.ts +3 -0
  86. package/dist/commands/revise.d.ts.map +1 -0
  87. package/dist/commands/revise.js +60 -0
  88. package/dist/commands/revise.js.map +1 -0
  89. package/dist/commands/status.d.ts +3 -0
  90. package/dist/commands/status.d.ts.map +1 -0
  91. package/dist/commands/status.js +123 -0
  92. package/dist/commands/status.js.map +1 -0
  93. package/dist/commands/studio.d.ts +14 -0
  94. package/dist/commands/studio.d.ts.map +1 -0
  95. package/dist/commands/studio.js +120 -0
  96. package/dist/commands/studio.js.map +1 -0
  97. package/dist/commands/style.d.ts +3 -0
  98. package/dist/commands/style.d.ts.map +1 -0
  99. package/dist/commands/style.js +95 -0
  100. package/dist/commands/style.js.map +1 -0
  101. package/dist/commands/tui.d.ts +6 -0
  102. package/dist/commands/tui.d.ts.map +1 -0
  103. package/dist/commands/tui.js +14 -0
  104. package/dist/commands/tui.js.map +1 -0
  105. package/dist/commands/update.d.ts +3 -0
  106. package/dist/commands/update.d.ts.map +1 -0
  107. package/dist/commands/update.js +40 -0
  108. package/dist/commands/update.js.map +1 -0
  109. package/dist/commands/write.d.ts +3 -0
  110. package/dist/commands/write.d.ts.map +1 -0
  111. package/dist/commands/write.js +323 -0
  112. package/dist/commands/write.js.map +1 -0
  113. package/dist/index.d.ts +3 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +4 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/localization.d.ts +38 -0
  118. package/dist/localization.d.ts.map +1 -0
  119. package/dist/localization.js +144 -0
  120. package/dist/localization.js.map +1 -0
  121. package/dist/program.d.ts +10 -0
  122. package/dist/program.d.ts.map +1 -0
  123. package/dist/program.js +85 -0
  124. package/dist/program.js.map +1 -0
  125. package/dist/progress-text.d.ts +26 -0
  126. package/dist/progress-text.d.ts.map +1 -0
  127. package/dist/progress-text.js +35 -0
  128. package/dist/progress-text.js.map +1 -0
  129. package/dist/runtime-requirements.d.ts +28 -0
  130. package/dist/runtime-requirements.d.ts.map +1 -0
  131. package/dist/runtime-requirements.js +99 -0
  132. package/dist/runtime-requirements.js.map +1 -0
  133. package/dist/tui/__tests__/markdown.test.d.ts +2 -0
  134. package/dist/tui/__tests__/markdown.test.d.ts.map +1 -0
  135. package/dist/tui/__tests__/markdown.test.js +58 -0
  136. package/dist/tui/__tests__/markdown.test.js.map +1 -0
  137. package/dist/tui/activity-state.d.ts +10 -0
  138. package/dist/tui/activity-state.d.ts.map +1 -0
  139. package/dist/tui/activity-state.js +27 -0
  140. package/dist/tui/activity-state.js.map +1 -0
  141. package/dist/tui/ansi.d.ts +40 -0
  142. package/dist/tui/ansi.d.ts.map +1 -0
  143. package/dist/tui/ansi.js +62 -0
  144. package/dist/tui/ansi.js.map +1 -0
  145. package/dist/tui/app.d.ts +103 -0
  146. package/dist/tui/app.d.ts.map +1 -0
  147. package/dist/tui/app.js +151 -0
  148. package/dist/tui/app.js.map +1 -0
  149. package/dist/tui/chat-depth.d.ts +9 -0
  150. package/dist/tui/chat-depth.d.ts.map +1 -0
  151. package/dist/tui/chat-depth.js +14 -0
  152. package/dist/tui/chat-depth.js.map +1 -0
  153. package/dist/tui/chat-draft.d.ts +4 -0
  154. package/dist/tui/chat-draft.d.ts.map +1 -0
  155. package/dist/tui/chat-draft.js +28 -0
  156. package/dist/tui/chat-draft.js.map +1 -0
  157. package/dist/tui/composer-caret.d.ts +10 -0
  158. package/dist/tui/composer-caret.d.ts.map +1 -0
  159. package/dist/tui/composer-caret.js +13 -0
  160. package/dist/tui/composer-caret.js.map +1 -0
  161. package/dist/tui/composer-display.d.ts +7 -0
  162. package/dist/tui/composer-display.d.ts.map +1 -0
  163. package/dist/tui/composer-display.js +17 -0
  164. package/dist/tui/composer-display.js.map +1 -0
  165. package/dist/tui/dashboard-model.d.ts +46 -0
  166. package/dist/tui/dashboard-model.d.ts.map +1 -0
  167. package/dist/tui/dashboard-model.js +105 -0
  168. package/dist/tui/dashboard-model.js.map +1 -0
  169. package/dist/tui/dashboard.d.ts +39 -0
  170. package/dist/tui/dashboard.d.ts.map +1 -0
  171. package/dist/tui/dashboard.js +348 -0
  172. package/dist/tui/dashboard.js.map +1 -0
  173. package/dist/tui/effects.d.ts +61 -0
  174. package/dist/tui/effects.d.ts.map +1 -0
  175. package/dist/tui/effects.js +459 -0
  176. package/dist/tui/effects.js.map +1 -0
  177. package/dist/tui/i18n.d.ts +69 -0
  178. package/dist/tui/i18n.d.ts.map +1 -0
  179. package/dist/tui/i18n.js +239 -0
  180. package/dist/tui/i18n.js.map +1 -0
  181. package/dist/tui/input-history.d.ts +12 -0
  182. package/dist/tui/input-history.d.ts.map +1 -0
  183. package/dist/tui/input-history.js +47 -0
  184. package/dist/tui/input-history.js.map +1 -0
  185. package/dist/tui/local-commands.d.ts +5 -0
  186. package/dist/tui/local-commands.d.ts.map +1 -0
  187. package/dist/tui/local-commands.js +43 -0
  188. package/dist/tui/local-commands.js.map +1 -0
  189. package/dist/tui/markdown.d.ts +2 -0
  190. package/dist/tui/markdown.d.ts.map +1 -0
  191. package/dist/tui/markdown.js +60 -0
  192. package/dist/tui/markdown.js.map +1 -0
  193. package/dist/tui/output.d.ts +11 -0
  194. package/dist/tui/output.d.ts.map +1 -0
  195. package/dist/tui/output.js +24 -0
  196. package/dist/tui/output.js.map +1 -0
  197. package/dist/tui/session-store.d.ts +2 -0
  198. package/dist/tui/session-store.d.ts.map +1 -0
  199. package/dist/tui/session-store.js +2 -0
  200. package/dist/tui/session-store.js.map +1 -0
  201. package/dist/tui/setup.d.ts +49 -0
  202. package/dist/tui/setup.d.ts.map +1 -0
  203. package/dist/tui/setup.js +268 -0
  204. package/dist/tui/setup.js.map +1 -0
  205. package/dist/tui/slash-autocomplete.d.ts +6 -0
  206. package/dist/tui/slash-autocomplete.d.ts.map +1 -0
  207. package/dist/tui/slash-autocomplete.js +50 -0
  208. package/dist/tui/slash-autocomplete.js.map +1 -0
  209. package/dist/tui/theme.d.ts +13 -0
  210. package/dist/tui/theme.d.ts.map +1 -0
  211. package/dist/tui/theme.js +15 -0
  212. package/dist/tui/theme.js.map +1 -0
  213. package/dist/tui/tools.d.ts +15 -0
  214. package/dist/tui/tools.d.ts.map +1 -0
  215. package/dist/tui/tools.js +17 -0
  216. package/dist/tui/tools.js.map +1 -0
  217. package/dist/utils.d.ts +25 -0
  218. package/dist/utils.d.ts.map +1 -0
  219. package/dist/utils.js +114 -0
  220. package/dist/utils.js.map +1 -0
  221. package/package.json +65 -0
@@ -0,0 +1,323 @@
1
+ import { Command } from "commander";
2
+ import { PipelineRunner, StateManager } from "@actalk/inkos-core";
3
+ import { readdir, stat, unlink } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { createInterface } from "node:readline";
6
+ import { loadConfig, buildPipelineConfig, findProjectRoot, getLegacyMigrationHint, resolveContext, resolveBookId, log, logError } from "../utils.js";
7
+ import { formatWriteNextComplete, formatWriteNextProgress, formatWriteNextResultLines, resolveCliLanguage } from "../localization.js";
8
+ export const writeCommand = new Command("write")
9
+ .description("Write chapters");
10
+ writeCommand
11
+ .command("next")
12
+ .description("Write the next chapter for a book")
13
+ .argument("[book-id]", "Book ID (auto-detected if only one book)")
14
+ .option("--count <n>", "Number of chapters to write", "1")
15
+ .option("--words <n>", "Words per chapter (overrides book config)")
16
+ .option("--context <text>", "Creative guidance (natural language)")
17
+ .option("--context-file <path>", "Read guidance from file")
18
+ .option("--json", "Output JSON")
19
+ .option("-q, --quiet", "Suppress console output")
20
+ .action(async (bookIdArg, opts) => {
21
+ try {
22
+ const root = findProjectRoot();
23
+ const bookId = await resolveBookId(bookIdArg, root);
24
+ const context = await resolveContext(opts);
25
+ const state = new StateManager(root);
26
+ const book = await state.loadBookConfig(bookId);
27
+ const language = resolveCliLanguage(book.language);
28
+ const migrationHint = await getLegacyMigrationHint(root, bookId);
29
+ if (migrationHint && !opts.json) {
30
+ log(`[migration] ${migrationHint}`);
31
+ }
32
+ const config = await loadConfig();
33
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root, { externalContext: context, quiet: opts.quiet }));
34
+ const count = parseInt(opts.count, 10);
35
+ const wordCount = opts.words ? parseInt(opts.words, 10) : undefined;
36
+ const results = [];
37
+ for (let i = 0; i < count; i++) {
38
+ if (!opts.json)
39
+ log(formatWriteNextProgress(language, i + 1, count, bookId));
40
+ const result = await pipeline.writeNextChapter(bookId, wordCount);
41
+ results.push(result);
42
+ if (!opts.json) {
43
+ for (const line of formatWriteNextResultLines(language, {
44
+ chapterNumber: result.chapterNumber,
45
+ title: result.title,
46
+ wordCount: result.wordCount,
47
+ auditPassed: result.auditResult.passed,
48
+ revised: result.revised,
49
+ status: result.status,
50
+ issues: result.auditResult.issues,
51
+ })) {
52
+ log(line);
53
+ }
54
+ log("");
55
+ }
56
+ if (result.status === "state-degraded") {
57
+ if (!opts.json) {
58
+ log(language === "en"
59
+ ? "State repair required before continuing. Stopping batch."
60
+ : "需要先修复 state,已停止后续连写。");
61
+ }
62
+ break;
63
+ }
64
+ }
65
+ if (opts.json) {
66
+ log(JSON.stringify(results, null, 2));
67
+ }
68
+ else {
69
+ log(formatWriteNextComplete(language));
70
+ }
71
+ }
72
+ catch (e) {
73
+ if (opts.json) {
74
+ log(JSON.stringify({ error: String(e) }));
75
+ }
76
+ else {
77
+ logError(`Failed to write chapter: ${e}`);
78
+ }
79
+ process.exit(1);
80
+ }
81
+ });
82
+ writeCommand
83
+ .command("rewrite")
84
+ .description("Re-generate a specific chapter: rewrite [book-id] <chapter>")
85
+ .argument("<args...>", "Book ID (optional) and chapter number")
86
+ .option("--force", "Skip confirmation prompt")
87
+ .option("--words <n>", "Words per chapter (overrides book config)")
88
+ .option("--brief <text>", "One-off creative guidance for this rewrite only")
89
+ .option("--json", "Output JSON")
90
+ .action(async (args, opts) => {
91
+ try {
92
+ const root = findProjectRoot();
93
+ let bookId;
94
+ let chapter;
95
+ if (args.length === 1) {
96
+ chapter = parseInt(args[0], 10);
97
+ if (isNaN(chapter))
98
+ throw new Error(`Expected chapter number, got "${args[0]}"`);
99
+ bookId = await resolveBookId(undefined, root);
100
+ }
101
+ else if (args.length === 2) {
102
+ chapter = parseInt(args[1], 10);
103
+ if (isNaN(chapter))
104
+ throw new Error(`Expected chapter number, got "${args[1]}"`);
105
+ bookId = await resolveBookId(args[0], root);
106
+ }
107
+ else {
108
+ throw new Error("Usage: inkos write rewrite [book-id] <chapter>");
109
+ }
110
+ if (!opts.force) {
111
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
112
+ const answer = await new Promise((resolve) => {
113
+ rl.question(`Rewrite chapter ${chapter} of "${bookId}"? This will delete chapter ${chapter} and all later chapters. (y/N) `, resolve);
114
+ });
115
+ rl.close();
116
+ if (answer.toLowerCase() !== "y") {
117
+ log("Cancelled.");
118
+ return;
119
+ }
120
+ }
121
+ const state = new StateManager(root);
122
+ const bookDir = state.bookDir(bookId);
123
+ const chaptersDir = join(bookDir, "chapters");
124
+ const restoreFrom = chapter - 1;
125
+ const restoreSnapshotDir = join(bookDir, "story", "snapshots", String(restoreFrom));
126
+ await stat(restoreSnapshotDir).catch(() => {
127
+ throw new Error(`Cannot rewrite chapter ${chapter}: missing snapshot for chapter ${restoreFrom}`);
128
+ });
129
+ const migrationHint = await getLegacyMigrationHint(root, bookId);
130
+ if (migrationHint && !opts.json) {
131
+ log(`[migration] ${migrationHint}`);
132
+ }
133
+ // Remove existing chapter file
134
+ const files = await readdir(chaptersDir);
135
+ const paddedNum = String(chapter).padStart(4, "0");
136
+ const existing = files.filter((f) => f.startsWith(paddedNum) && f.endsWith(".md"));
137
+ for (const f of existing) {
138
+ await unlink(join(chaptersDir, f));
139
+ if (!opts.json)
140
+ log(`Removed: ${f}`);
141
+ }
142
+ // Remove from index (and all chapters after it)
143
+ const index = await state.loadChapterIndex(bookId);
144
+ const trimmed = index.filter((ch) => ch.number < chapter);
145
+ await state.saveChapterIndex(bookId, trimmed);
146
+ // Also remove later chapter files since state will be rolled back
147
+ const laterFiles = files.filter((f) => {
148
+ const num = parseInt(f.slice(0, 4), 10);
149
+ return num > chapter && f.endsWith(".md");
150
+ });
151
+ for (const f of laterFiles) {
152
+ await unlink(join(chaptersDir, f));
153
+ if (!opts.json)
154
+ log(`Removed later chapter: ${f}`);
155
+ }
156
+ // Restore state to previous chapter's end-state (chapter 1 uses snapshot-0 from initBook)
157
+ const restored = await state.restoreState(bookId, restoreFrom);
158
+ if (!restored) {
159
+ throw new Error(`Cannot rewrite chapter ${chapter}: failed to restore snapshot for chapter ${restoreFrom}`);
160
+ }
161
+ if (!opts.json)
162
+ log(`State restored from chapter ${restoreFrom} snapshot.`);
163
+ const nextChapter = await state.getNextChapterNumber(bookId);
164
+ if (nextChapter !== chapter) {
165
+ throw new Error(`Cannot rewrite chapter ${chapter}: expected next chapter to be ${chapter}, but resolved to ${nextChapter}`);
166
+ }
167
+ if (!opts.json)
168
+ log(`Regenerating chapter ${chapter}...`);
169
+ const wordCount = opts.words ? parseInt(opts.words, 10) : undefined;
170
+ const config = await loadConfig();
171
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root, {
172
+ externalContext: opts.brief,
173
+ }));
174
+ const result = await pipeline.writeNextChapter(bookId, wordCount);
175
+ const book = await state.loadBookConfig(bookId);
176
+ const language = resolveCliLanguage(book.language);
177
+ if (opts.json) {
178
+ log(JSON.stringify(result, null, 2));
179
+ }
180
+ else {
181
+ for (const line of formatWriteNextResultLines(language, {
182
+ chapterNumber: result.chapterNumber,
183
+ title: result.title,
184
+ wordCount: result.wordCount,
185
+ auditPassed: result.auditResult.passed,
186
+ revised: result.revised,
187
+ status: result.status,
188
+ issues: result.auditResult.issues,
189
+ })) {
190
+ log(line);
191
+ }
192
+ }
193
+ }
194
+ catch (e) {
195
+ if (opts.json) {
196
+ log(JSON.stringify({ error: String(e) }));
197
+ }
198
+ else {
199
+ logError(`Failed to rewrite chapter: ${e}`);
200
+ }
201
+ process.exit(1);
202
+ }
203
+ });
204
+ writeCommand
205
+ .command("sync")
206
+ .description("Rebuild truth files and SQLite indexes from the latest edited chapter body")
207
+ .argument("<args...>", "Book ID (optional) and chapter number")
208
+ .option("--brief <text>", "One-off guidance for how to interpret the edited chapter while syncing")
209
+ .option("--json", "Output JSON")
210
+ .action(async (args, opts) => {
211
+ try {
212
+ const root = findProjectRoot();
213
+ let bookId;
214
+ let chapter;
215
+ if (args.length === 1) {
216
+ chapter = parseInt(args[0], 10);
217
+ if (isNaN(chapter))
218
+ throw new Error(`Expected chapter number, got "${args[0]}"`);
219
+ bookId = await resolveBookId(undefined, root);
220
+ }
221
+ else if (args.length === 2) {
222
+ chapter = parseInt(args[1], 10);
223
+ if (isNaN(chapter))
224
+ throw new Error(`Expected chapter number, got "${args[1]}"`);
225
+ bookId = await resolveBookId(args[0], root);
226
+ }
227
+ else {
228
+ throw new Error("Usage: inkos write sync [book-id] <chapter>");
229
+ }
230
+ const state = new StateManager(root);
231
+ const book = await state.loadBookConfig(bookId);
232
+ const language = resolveCliLanguage(book.language);
233
+ const config = await loadConfig();
234
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root, {
235
+ externalContext: opts.brief,
236
+ }));
237
+ const result = await pipeline.resyncChapterArtifacts(bookId, chapter);
238
+ if (opts.json) {
239
+ log(JSON.stringify(result, null, 2));
240
+ }
241
+ else {
242
+ for (const line of formatWriteNextResultLines(language, {
243
+ chapterNumber: result.chapterNumber,
244
+ title: result.title,
245
+ wordCount: result.wordCount,
246
+ auditPassed: result.auditResult.passed,
247
+ revised: result.revised,
248
+ status: result.status,
249
+ issues: result.auditResult.issues,
250
+ })) {
251
+ log(line);
252
+ }
253
+ }
254
+ }
255
+ catch (e) {
256
+ if (opts.json) {
257
+ log(JSON.stringify({ error: String(e) }));
258
+ }
259
+ else {
260
+ logError(`Failed to sync chapter artifacts: ${e}`);
261
+ }
262
+ process.exit(1);
263
+ }
264
+ });
265
+ writeCommand
266
+ .command("repair-state")
267
+ .description("Rebuild truth files for a persisted state-degraded chapter without rewriting body text")
268
+ .argument("<args...>", "Book ID (optional) and chapter number")
269
+ .option("--json", "Output JSON")
270
+ .action(async (args, opts) => {
271
+ try {
272
+ const root = findProjectRoot();
273
+ let bookId;
274
+ let chapter;
275
+ if (args.length === 1) {
276
+ chapter = parseInt(args[0], 10);
277
+ if (isNaN(chapter))
278
+ throw new Error(`Expected chapter number, got "${args[0]}"`);
279
+ bookId = await resolveBookId(undefined, root);
280
+ }
281
+ else if (args.length === 2) {
282
+ chapter = parseInt(args[1], 10);
283
+ if (isNaN(chapter))
284
+ throw new Error(`Expected chapter number, got "${args[1]}"`);
285
+ bookId = await resolveBookId(args[0], root);
286
+ }
287
+ else {
288
+ throw new Error("Usage: inkos write repair-state [book-id] <chapter>");
289
+ }
290
+ const state = new StateManager(root);
291
+ const book = await state.loadBookConfig(bookId);
292
+ const language = resolveCliLanguage(book.language);
293
+ const config = await loadConfig();
294
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root));
295
+ const result = await pipeline.repairChapterState(bookId, chapter);
296
+ if (opts.json) {
297
+ log(JSON.stringify(result, null, 2));
298
+ }
299
+ else {
300
+ for (const line of formatWriteNextResultLines(language, {
301
+ chapterNumber: result.chapterNumber,
302
+ title: result.title,
303
+ wordCount: result.wordCount,
304
+ auditPassed: result.auditResult.passed,
305
+ revised: result.revised,
306
+ status: result.status,
307
+ issues: result.auditResult.issues,
308
+ })) {
309
+ log(line);
310
+ }
311
+ }
312
+ }
313
+ catch (e) {
314
+ if (opts.json) {
315
+ log(JSON.stringify({ error: String(e) }));
316
+ }
317
+ else {
318
+ logError(`Failed to repair chapter state: ${e}`);
319
+ }
320
+ process.exit(1);
321
+ }
322
+ });
323
+ //# sourceMappingURL=write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runProgram } from "./program.js";
3
+ await runProgram();
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,EAAE,CAAC"}
@@ -0,0 +1,38 @@
1
+ export type CliLanguage = "zh" | "en";
2
+ type WriteIssue = {
3
+ readonly severity: string;
4
+ readonly category: string;
5
+ readonly description: string;
6
+ };
7
+ type WriteResultShape = {
8
+ readonly chapterNumber: number;
9
+ readonly title: string;
10
+ readonly wordCount: number;
11
+ readonly status: string;
12
+ readonly revised: boolean;
13
+ readonly issues: ReadonlyArray<WriteIssue>;
14
+ readonly auditPassed?: boolean;
15
+ readonly passedAudit?: boolean;
16
+ };
17
+ type ImportResultShape = {
18
+ readonly importedCount: number;
19
+ readonly totalWords: number;
20
+ readonly nextChapter: number;
21
+ readonly continueBookId: string;
22
+ };
23
+ export declare function resolveCliLanguage(language?: string): CliLanguage;
24
+ export declare function formatBookCreateCreating(language: CliLanguage, title: string, genre: string, platform: string): string;
25
+ export declare function formatBookCreateCreated(language: CliLanguage, bookId: string): string;
26
+ export declare function formatBookCreateLocation(language: CliLanguage, bookId: string): string;
27
+ export declare function formatBookCreateFoundationReady(language: CliLanguage): string;
28
+ export declare function formatBookCreateNextStep(language: CliLanguage, bookId: string): string;
29
+ export declare function formatWriteNextProgress(language: CliLanguage, current: number, total: number, bookId: string): string;
30
+ export declare function formatWriteNextResultLines(language: CliLanguage, result: WriteResultShape): string[];
31
+ export declare function formatWriteNextComplete(language: CliLanguage): string;
32
+ export declare function formatImportChaptersDiscovery(language: CliLanguage, chapterCount: number, bookId: string): string;
33
+ export declare function formatImportChaptersResume(language: CliLanguage, resumeFrom: number): string;
34
+ export declare function formatImportChaptersComplete(language: CliLanguage, result: ImportResultShape): string[];
35
+ export declare function formatImportCanonStart(language: CliLanguage, parentBookId: string, targetBookId: string): string;
36
+ export declare function formatImportCanonComplete(language: CliLanguage): string[];
37
+ export {};
38
+ //# sourceMappingURL=localization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization.d.ts","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,CAEjE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrF;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtF;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAK7E;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtF;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,gBAAgB,GACvB,MAAM,EAAE,CAyCV;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAKrE;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAKR;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,iBAAiB,GACxB,MAAM,EAAE,CAyBV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,CAKR;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,CAWzE"}
@@ -0,0 +1,144 @@
1
+ import { formatLengthCount, resolveLengthCountingMode } from "@actalk/inkos-core";
2
+ function localize(language, messages) {
3
+ return language === "en" ? messages.en : messages.zh;
4
+ }
5
+ export function resolveCliLanguage(language) {
6
+ return language === "en" ? "en" : "zh";
7
+ }
8
+ export function formatBookCreateCreating(language, title, genre, platform) {
9
+ return localize(language, {
10
+ zh: `创建书籍 "${title}"(${genre} / ${platform})...`,
11
+ en: `Creating book "${title}" (${genre} / ${platform})...`,
12
+ });
13
+ }
14
+ export function formatBookCreateCreated(language, bookId) {
15
+ return localize(language, {
16
+ zh: `已创建书籍:${bookId}`,
17
+ en: `Book created: ${bookId}`,
18
+ });
19
+ }
20
+ export function formatBookCreateLocation(language, bookId) {
21
+ return localize(language, {
22
+ zh: ` 位置:books/${bookId}/`,
23
+ en: ` Location: books/${bookId}/`,
24
+ });
25
+ }
26
+ export function formatBookCreateFoundationReady(language) {
27
+ return localize(language, {
28
+ zh: " 故事圣经、大纲和书籍规则已生成。",
29
+ en: " Story bible, outline, book rules generated.",
30
+ });
31
+ }
32
+ export function formatBookCreateNextStep(language, bookId) {
33
+ return localize(language, {
34
+ zh: `下一步:inkos write next ${bookId}`,
35
+ en: `Next: inkos write next ${bookId}`,
36
+ });
37
+ }
38
+ export function formatWriteNextProgress(language, current, total, bookId) {
39
+ return localize(language, {
40
+ zh: `[${current}/${total}] 为「${bookId}」撰写章节...`,
41
+ en: `[${current}/${total}] Writing chapter for "${bookId}"...`,
42
+ });
43
+ }
44
+ export function formatWriteNextResultLines(language, result) {
45
+ const auditPassed = result.auditPassed ?? result.passedAudit ?? false;
46
+ const lengthLabel = formatLengthCount(result.wordCount, resolveLengthCountingMode(language));
47
+ const lines = [
48
+ localize(language, {
49
+ zh: ` 第${result.chapterNumber}章:${result.title}`,
50
+ en: ` Chapter ${result.chapterNumber}: ${result.title}`,
51
+ }),
52
+ localize(language, {
53
+ zh: ` 字数:${lengthLabel}`,
54
+ en: ` Length: ${lengthLabel}`,
55
+ }),
56
+ localize(language, {
57
+ zh: ` 审计:${auditPassed ? "通过" : "需复核"}`,
58
+ en: ` Audit: ${auditPassed ? "PASSED" : "NEEDS REVIEW"}`,
59
+ }),
60
+ ];
61
+ if (result.revised) {
62
+ lines.push(localize(language, {
63
+ zh: " 自动修正:已执行(已修复关键问题)",
64
+ en: " Auto-revised: YES (critical issues were fixed)",
65
+ }));
66
+ }
67
+ lines.push(localize(language, {
68
+ zh: ` 状态:${result.status}`,
69
+ en: ` Status: ${result.status}`,
70
+ }));
71
+ if (result.issues.length > 0) {
72
+ lines.push(localize(language, {
73
+ zh: " 问题:",
74
+ en: " Issues:",
75
+ }));
76
+ for (const issue of result.issues) {
77
+ lines.push(` [${issue.severity}] ${issue.category}: ${issue.description}`);
78
+ }
79
+ }
80
+ return lines;
81
+ }
82
+ export function formatWriteNextComplete(language) {
83
+ return localize(language, {
84
+ zh: "完成。",
85
+ en: "Done.",
86
+ });
87
+ }
88
+ export function formatImportChaptersDiscovery(language, chapterCount, bookId) {
89
+ return localize(language, {
90
+ zh: `发现 ${chapterCount} 章,准备导入到「${bookId}」。`,
91
+ en: `Found ${chapterCount} chapters to import into "${bookId}".`,
92
+ });
93
+ }
94
+ export function formatImportChaptersResume(language, resumeFrom) {
95
+ return localize(language, {
96
+ zh: `从第 ${resumeFrom} 章继续导入。`,
97
+ en: `Resuming from chapter ${resumeFrom}.`,
98
+ });
99
+ }
100
+ export function formatImportChaptersComplete(language, result) {
101
+ const lengthLabel = formatLengthCount(result.totalWords, resolveLengthCountingMode(language));
102
+ return [
103
+ localize(language, {
104
+ zh: "导入完成:",
105
+ en: "Import complete:",
106
+ }),
107
+ localize(language, {
108
+ zh: ` 已导入章节:${result.importedCount}`,
109
+ en: ` Chapters imported: ${result.importedCount}`,
110
+ }),
111
+ localize(language, {
112
+ zh: ` 总长度:${lengthLabel}`,
113
+ en: ` Total length: ${lengthLabel}`,
114
+ }),
115
+ localize(language, {
116
+ zh: ` 下一章编号:${result.nextChapter}`,
117
+ en: ` Next chapter number: ${result.nextChapter}`,
118
+ }),
119
+ "",
120
+ localize(language, {
121
+ zh: `运行 "inkos write next ${result.continueBookId}" 继续写作。`,
122
+ en: `Run "inkos write next ${result.continueBookId}" to continue writing.`,
123
+ }),
124
+ ];
125
+ }
126
+ export function formatImportCanonStart(language, parentBookId, targetBookId) {
127
+ return localize(language, {
128
+ zh: `把 "${parentBookId}" 的正典导入到 "${targetBookId}"...`,
129
+ en: `Importing canon from "${parentBookId}" into "${targetBookId}"...`,
130
+ });
131
+ }
132
+ export function formatImportCanonComplete(language) {
133
+ return [
134
+ localize(language, {
135
+ zh: "正典已导入:story/parent_canon.md",
136
+ en: "Canon imported: story/parent_canon.md",
137
+ }),
138
+ localize(language, {
139
+ zh: "Writer 和 auditor 会在番外模式下自动识别这个文件。",
140
+ en: "Writer and auditor will auto-detect this file for spinoff mode.",
141
+ }),
142
+ ];
143
+ }
144
+ //# sourceMappingURL=localization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization.js","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from "commander";
2
+ import { type InteractCommandHooks } from "./commands/interact.js";
3
+ export interface ProgramHooks {
4
+ readonly launchTui?: (projectRoot: string) => Promise<void> | void;
5
+ readonly runInteraction?: InteractCommandHooks["runInteraction"];
6
+ readonly readInteractionInput?: InteractCommandHooks["readInput"];
7
+ }
8
+ export declare function createProgram(hooks?: ProgramHooks): Command;
9
+ export declare function runProgram(argv?: string[], hooks?: ProgramHooks): Promise<void>;
10
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACjE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;CACnE;AAED,wBAAgB,aAAa,CAAC,KAAK,GAAE,YAAiB,GAAG,OAAO,CAiD/D;AAED,wBAAsB,UAAU,CAC9B,IAAI,GAAE,MAAM,EAAiB,EAC7B,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAGf"}