@actalk/inkos-core 0.3.6 → 0.4.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 (110) hide show
  1. package/dist/agents/architect.d.ts.map +1 -1
  2. package/dist/agents/architect.js +17 -3
  3. package/dist/agents/architect.js.map +1 -1
  4. package/dist/agents/base.d.ts +10 -0
  5. package/dist/agents/base.d.ts.map +1 -1
  6. package/dist/agents/base.js +12 -0
  7. package/dist/agents/base.js.map +1 -1
  8. package/dist/agents/continuity.d.ts +3 -1
  9. package/dist/agents/continuity.d.ts.map +1 -1
  10. package/dist/agents/continuity.js +78 -13
  11. package/dist/agents/continuity.js.map +1 -1
  12. package/dist/agents/post-write-validator.d.ts +16 -0
  13. package/dist/agents/post-write-validator.d.ts.map +1 -0
  14. package/dist/agents/post-write-validator.js +204 -0
  15. package/dist/agents/post-write-validator.js.map +1 -0
  16. package/dist/agents/reviser.d.ts +1 -1
  17. package/dist/agents/reviser.d.ts.map +1 -1
  18. package/dist/agents/reviser.js +16 -3
  19. package/dist/agents/reviser.js.map +1 -1
  20. package/dist/agents/sensitive-words.d.ts +22 -0
  21. package/dist/agents/sensitive-words.d.ts.map +1 -0
  22. package/dist/agents/sensitive-words.js +91 -0
  23. package/dist/agents/sensitive-words.js.map +1 -0
  24. package/dist/agents/writer-prompts.d.ts +1 -1
  25. package/dist/agents/writer-prompts.d.ts.map +1 -1
  26. package/dist/agents/writer-prompts.js +122 -11
  27. package/dist/agents/writer-prompts.js.map +1 -1
  28. package/dist/agents/writer.d.ts +15 -0
  29. package/dist/agents/writer.d.ts.map +1 -1
  30. package/dist/agents/writer.js +150 -5
  31. package/dist/agents/writer.js.map +1 -1
  32. package/dist/index.d.ts +3 -0
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/llm/provider.d.ts +1 -0
  37. package/dist/llm/provider.d.ts.map +1 -1
  38. package/dist/llm/provider.js +9 -4
  39. package/dist/llm/provider.js.map +1 -1
  40. package/dist/models/book-rules.d.ts.map +1 -1
  41. package/dist/models/book-rules.js +15 -7
  42. package/dist/models/book-rules.js.map +1 -1
  43. package/dist/models/book.d.ts +4 -4
  44. package/dist/models/book.d.ts.map +1 -1
  45. package/dist/models/book.js +0 -3
  46. package/dist/models/book.js.map +1 -1
  47. package/dist/models/project.d.ts +23 -7
  48. package/dist/models/project.d.ts.map +1 -1
  49. package/dist/models/project.js +13 -6
  50. package/dist/models/project.js.map +1 -1
  51. package/dist/notify/webhook.d.ts +1 -1
  52. package/dist/notify/webhook.d.ts.map +1 -1
  53. package/dist/notify/webhook.js.map +1 -1
  54. package/dist/pipeline/agent.d.ts.map +1 -1
  55. package/dist/pipeline/agent.js +76 -8
  56. package/dist/pipeline/agent.js.map +1 -1
  57. package/dist/pipeline/runner.d.ts +14 -1
  58. package/dist/pipeline/runner.d.ts.map +1 -1
  59. package/dist/pipeline/runner.js +267 -30
  60. package/dist/pipeline/runner.js.map +1 -1
  61. package/dist/pipeline/scheduler.d.ts +20 -2
  62. package/dist/pipeline/scheduler.d.ts.map +1 -1
  63. package/dist/pipeline/scheduler.js +162 -32
  64. package/dist/pipeline/scheduler.js.map +1 -1
  65. package/dist/state/manager.d.ts.map +1 -1
  66. package/dist/state/manager.js +3 -0
  67. package/dist/state/manager.js.map +1 -1
  68. package/dist/utils/web-search.d.ts +13 -0
  69. package/dist/utils/web-search.d.ts.map +1 -0
  70. package/dist/utils/web-search.js +37 -0
  71. package/dist/utils/web-search.js.map +1 -0
  72. package/genres/horror.md +1 -1
  73. package/genres/other.md +1 -1
  74. package/genres/urban.md +1 -1
  75. package/genres/xianxia.md +1 -1
  76. package/genres/xuanhuan.md +1 -1
  77. package/package.json +11 -8
  78. package/LICENSE +0 -21
  79. package/dist/__tests__/ai-tells.test.d.ts +0 -2
  80. package/dist/__tests__/ai-tells.test.d.ts.map +0 -1
  81. package/dist/__tests__/ai-tells.test.js +0 -78
  82. package/dist/__tests__/ai-tells.test.js.map +0 -1
  83. package/dist/__tests__/detection-insights.test.d.ts +0 -2
  84. package/dist/__tests__/detection-insights.test.d.ts.map +0 -1
  85. package/dist/__tests__/detection-insights.test.js +0 -50
  86. package/dist/__tests__/detection-insights.test.js.map +0 -1
  87. package/dist/__tests__/detector.test.d.ts +0 -2
  88. package/dist/__tests__/detector.test.d.ts.map +0 -1
  89. package/dist/__tests__/detector.test.js +0 -71
  90. package/dist/__tests__/detector.test.js.map +0 -1
  91. package/dist/__tests__/models.test.d.ts +0 -2
  92. package/dist/__tests__/models.test.d.ts.map +0 -1
  93. package/dist/__tests__/models.test.js +0 -328
  94. package/dist/__tests__/models.test.js.map +0 -1
  95. package/dist/__tests__/state-manager.test.d.ts +0 -2
  96. package/dist/__tests__/state-manager.test.d.ts.map +0 -1
  97. package/dist/__tests__/state-manager.test.js +0 -264
  98. package/dist/__tests__/state-manager.test.js.map +0 -1
  99. package/dist/__tests__/style-analyzer.test.d.ts +0 -2
  100. package/dist/__tests__/style-analyzer.test.d.ts.map +0 -1
  101. package/dist/__tests__/style-analyzer.test.js +0 -53
  102. package/dist/__tests__/style-analyzer.test.js.map +0 -1
  103. package/dist/__tests__/webhook.test.d.ts +0 -2
  104. package/dist/__tests__/webhook.test.d.ts.map +0 -1
  105. package/dist/__tests__/webhook.test.js +0 -62
  106. package/dist/__tests__/webhook.test.js.map +0 -1
  107. package/dist/__tests__/writer-parser.test.d.ts +0 -2
  108. package/dist/__tests__/writer-parser.test.d.ts.map +0 -1
  109. package/dist/__tests__/writer-parser.test.js +0 -195
  110. package/dist/__tests__/writer-parser.test.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { PipelineRunner } from "./runner.js";
2
2
  import { StateManager } from "../state/manager.js";
3
3
  import { dispatchWebhookEvent } from "../notify/dispatcher.js";
4
+ import { detectChapter, detectAndRewrite } from "./detection-runner.js";
4
5
  export class Scheduler {
5
6
  pipeline;
6
7
  state;
@@ -10,6 +11,10 @@ export class Scheduler {
10
11
  // Quality gate tracking (per book)
11
12
  consecutiveFailures = new Map();
12
13
  pausedBooks = new Set();
14
+ // Failure clustering: bookId → (dimension → count)
15
+ failureDimensions = new Map();
16
+ // Daily chapter counter: "YYYY-MM-DD" → count
17
+ dailyChapterCount = new Map();
13
18
  constructor(config) {
14
19
  this.config = config;
15
20
  this.pipeline = new PipelineRunner(config);
@@ -21,7 +26,7 @@ export class Scheduler {
21
26
  this.running = true;
22
27
  // Run write cycle immediately on start, then schedule
23
28
  await this.runWriteCycle();
24
- // Schedule recurring write cycle (default: every 2 hours)
29
+ // Schedule recurring write cycle
25
30
  const writeCycleMs = this.cronToMs(this.config.writeCron);
26
31
  const writeTask = {
27
32
  name: "write-cycle",
@@ -33,7 +38,7 @@ export class Scheduler {
33
38
  });
34
39
  }, writeCycleMs);
35
40
  this.tasks.push(writeTask);
36
- // Schedule radar scan (default: daily)
41
+ // Schedule radar scan
37
42
  const radarMs = this.cronToMs(this.config.radarCron);
38
43
  const radarTask = {
39
44
  name: "radar-scan",
@@ -61,6 +66,7 @@ export class Scheduler {
61
66
  resumeBook(bookId) {
62
67
  this.pausedBooks.delete(bookId);
63
68
  this.consecutiveFailures.delete(bookId);
69
+ this.failureDimensions.delete(bookId);
64
70
  }
65
71
  /** Check if a book is paused. */
66
72
  isBookPaused(bookId) {
@@ -73,46 +79,139 @@ export class Scheduler {
73
79
  retryTemperatureStep: 0.1,
74
80
  };
75
81
  }
82
+ /** Check if daily cap is reached across all books. */
83
+ isDailyCapReached() {
84
+ const today = new Date().toISOString().slice(0, 10);
85
+ const count = this.dailyChapterCount.get(today) ?? 0;
86
+ return count >= this.config.maxChaptersPerDay;
87
+ }
88
+ /** Increment daily chapter counter. */
89
+ recordChapterWritten() {
90
+ const today = new Date().toISOString().slice(0, 10);
91
+ const count = this.dailyChapterCount.get(today) ?? 0;
92
+ this.dailyChapterCount.set(today, count + 1);
93
+ // Clean up old dates (keep only today)
94
+ for (const key of this.dailyChapterCount.keys()) {
95
+ if (key !== today)
96
+ this.dailyChapterCount.delete(key);
97
+ }
98
+ }
76
99
  async runWriteCycle() {
100
+ if (this.isDailyCapReached()) {
101
+ process.stderr.write(`[scheduler] Daily cap reached (${this.config.maxChaptersPerDay}), skipping cycle\n`);
102
+ return;
103
+ }
77
104
  const bookIds = await this.state.listBooks();
78
105
  const activeBooks = [];
79
106
  for (const id of bookIds) {
80
107
  if (this.pausedBooks.has(id))
81
- continue; // Skip paused books
108
+ continue;
82
109
  const config = await this.state.loadBookConfig(id);
83
110
  if (config.status === "active" || config.status === "outlining") {
84
111
  activeBooks.push({ id, config });
85
112
  }
86
113
  }
87
114
  const booksToWrite = activeBooks.slice(0, this.config.maxConcurrentBooks);
88
- for (const book of booksToWrite) {
89
- try {
90
- const result = await this.pipeline.writeNextChapter(book.id);
91
- if (result.status === "approved") {
92
- // Reset failure counter on success
93
- this.consecutiveFailures.delete(book.id);
115
+ // Parallel book processing
116
+ await Promise.all(booksToWrite.map((book) => this.processBook(book.id, book.config)));
117
+ }
118
+ /** Process a single book: write chaptersPerCycle chapters with retry + cooldown. */
119
+ async processBook(bookId, bookConfig) {
120
+ for (let i = 0; i < this.config.chaptersPerCycle; i++) {
121
+ if (!this.running)
122
+ return;
123
+ if (this.isDailyCapReached())
124
+ return;
125
+ if (this.pausedBooks.has(bookId))
126
+ return;
127
+ // Cooldown between chapters (skip for the first one)
128
+ if (i > 0 && this.config.cooldownAfterChapterMs > 0) {
129
+ await this.sleep(this.config.cooldownAfterChapterMs);
130
+ }
131
+ const success = await this.writeOneChapter(bookId, bookConfig);
132
+ if (!success) {
133
+ // Immediate retry with delay (if within retry limit)
134
+ const failures = this.consecutiveFailures.get(bookId) ?? 0;
135
+ if (failures <= this.gates.maxAuditRetries && this.config.retryDelayMs > 0) {
136
+ process.stderr.write(`[scheduler] ${bookId} retrying in ${this.config.retryDelayMs}ms\n`);
137
+ await this.sleep(this.config.retryDelayMs);
138
+ const retrySuccess = await this.writeOneChapter(bookId, bookConfig);
139
+ if (!retrySuccess)
140
+ break; // Stop this book's cycle on second failure
94
141
  }
95
142
  else {
96
- // Audit failed apply quality gates
97
- await this.handleAuditFailure(book.id, result.chapterNumber);
143
+ break; // Stop this book's cycle
144
+ }
145
+ }
146
+ }
147
+ }
148
+ /** Write one chapter for a book. Returns true if approved. */
149
+ async writeOneChapter(bookId, bookConfig) {
150
+ try {
151
+ // Compute temperature override: base 0.7 + failures * step
152
+ const failures = this.consecutiveFailures.get(bookId) ?? 0;
153
+ const tempOverride = failures > 0
154
+ ? Math.min(1.2, 0.7 + failures * this.gates.retryTemperatureStep)
155
+ : undefined;
156
+ const result = await this.pipeline.writeNextChapter(bookId, undefined, tempOverride);
157
+ if (result.status === "approved") {
158
+ this.consecutiveFailures.delete(bookId);
159
+ this.recordChapterWritten();
160
+ // Auto-detection loop after successful audit
161
+ if (this.config.detection?.enabled) {
162
+ await this.runDetection(bookId, bookConfig, result.chapterNumber);
98
163
  }
99
- this.config.onChapterComplete?.(book.id, result.chapterNumber, result.status);
164
+ this.config.onChapterComplete?.(bookId, result.chapterNumber, result.status);
165
+ return true;
100
166
  }
101
- catch (e) {
102
- this.config.onError?.(book.id, e);
103
- await this.handleAuditFailure(book.id, 0);
167
+ // Audit failed — apply quality gates
168
+ const issueCategories = result.auditResult.issues.map((i) => i.category);
169
+ await this.handleAuditFailure(bookId, result.chapterNumber, issueCategories);
170
+ this.config.onChapterComplete?.(bookId, result.chapterNumber, result.status);
171
+ return false;
172
+ }
173
+ catch (e) {
174
+ this.config.onError?.(bookId, e);
175
+ await this.handleAuditFailure(bookId, 0);
176
+ return false;
177
+ }
178
+ }
179
+ async runDetection(bookId, bookConfig, chapterNumber) {
180
+ if (!this.config.detection)
181
+ return;
182
+ try {
183
+ const bookDir = this.state.bookDir(bookId);
184
+ const chapterContent = await this.readChapterContent(bookDir, chapterNumber);
185
+ const detResult = await detectChapter(this.config.detection, chapterContent, chapterNumber);
186
+ if (!detResult.passed && this.config.detection.autoRewrite) {
187
+ await detectAndRewrite(this.config.detection, { client: this.config.client, model: this.config.model, projectRoot: this.config.projectRoot }, bookDir, chapterContent, chapterNumber, bookConfig.genre);
104
188
  }
105
189
  }
190
+ catch (e) {
191
+ this.config.onError?.(bookId, e);
192
+ }
106
193
  }
107
- async handleAuditFailure(bookId, chapterNumber) {
194
+ async handleAuditFailure(bookId, chapterNumber, issueCategories = []) {
108
195
  const failures = (this.consecutiveFailures.get(bookId) ?? 0) + 1;
109
196
  this.consecutiveFailures.set(bookId, failures);
197
+ // Track failure dimensions for clustering
198
+ if (issueCategories.length > 0) {
199
+ const existing = this.failureDimensions.get(bookId);
200
+ const dimMap = existing ? new Map(existing) : new Map();
201
+ for (const cat of issueCategories) {
202
+ dimMap.set(cat, (dimMap.get(cat) ?? 0) + 1);
203
+ }
204
+ this.failureDimensions.set(bookId, dimMap);
205
+ // Check for dimension clustering (any dimension with >=3 failures)
206
+ for (const [dimension, count] of dimMap) {
207
+ if (count >= 3) {
208
+ await this.emitDiagnosticAlert(bookId, chapterNumber, dimension, count);
209
+ }
210
+ }
211
+ }
110
212
  const gates = this.gates;
111
- // Check if we should retry with higher temperature
112
213
  if (failures <= gates.maxAuditRetries) {
113
- process.stderr.write(`[scheduler] ${bookId} audit failed (${failures}/${gates.maxAuditRetries}), retrying with higher temperature\n`);
114
- // The retry will happen in the next write cycle with adjusted temperature
115
- // (We don't retry immediately to avoid tight loops)
214
+ process.stderr.write(`[scheduler] ${bookId} audit failed (${failures}/${gates.maxAuditRetries}), will retry\n`);
116
215
  return;
117
216
  }
118
217
  // Check if we should pause
@@ -121,7 +220,6 @@ export class Scheduler {
121
220
  const reason = `${failures} consecutive audit failures (threshold: ${gates.pauseAfterConsecutiveFailures})`;
122
221
  process.stderr.write(`[scheduler] ${bookId} PAUSED: ${reason}\n`);
123
222
  this.config.onPause?.(bookId, reason);
124
- // Emit webhook event
125
223
  if (this.config.notifyChannels && this.config.notifyChannels.length > 0) {
126
224
  await dispatchWebhookEvent(this.config.notifyChannels, {
127
225
  event: "pipeline-error",
@@ -141,22 +239,54 @@ export class Scheduler {
141
239
  this.config.onError?.("radar", e);
142
240
  }
143
241
  }
242
+ async emitDiagnosticAlert(bookId, chapterNumber, dimension, count) {
243
+ process.stderr.write(`[scheduler] DIAGNOSTIC: ${bookId} has ${count} failures in dimension "${dimension}"\n`);
244
+ if (this.config.notifyChannels && this.config.notifyChannels.length > 0) {
245
+ await dispatchWebhookEvent(this.config.notifyChannels, {
246
+ event: "diagnostic-alert",
247
+ bookId,
248
+ chapterNumber: chapterNumber > 0 ? chapterNumber : undefined,
249
+ timestamp: new Date().toISOString(),
250
+ data: { dimension, failureCount: count },
251
+ });
252
+ }
253
+ }
254
+ async readChapterContent(bookDir, chapterNumber) {
255
+ const { readFile, readdir } = await import("node:fs/promises");
256
+ const { join } = await import("node:path");
257
+ const chaptersDir = join(bookDir, "chapters");
258
+ const files = await readdir(chaptersDir);
259
+ const paddedNum = String(chapterNumber).padStart(4, "0");
260
+ const chapterFile = files.find((f) => f.startsWith(paddedNum) && f.endsWith(".md"));
261
+ if (!chapterFile) {
262
+ throw new Error(`Chapter ${chapterNumber} file not found in ${chaptersDir}`);
263
+ }
264
+ const raw = await readFile(join(chaptersDir, chapterFile), "utf-8");
265
+ const lines = raw.split("\n");
266
+ const contentStart = lines.findIndex((l, i) => i > 0 && l.trim().length > 0);
267
+ return contentStart >= 0 ? lines.slice(contentStart).join("\n") : raw;
268
+ }
144
269
  cronToMs(cron) {
145
- // Simple cron-to-interval mapping for common patterns
146
- // "0 9 * * *" = daily = 24h
147
- // "0 14 * * *" = daily = 24h
148
- // "0 */2 * * *" = every 2h
149
270
  const parts = cron.split(" ");
150
- if (parts.length >= 5) {
151
- const hour = parts[1];
152
- if (hour.startsWith("*/")) {
153
- const interval = parseInt(hour.slice(2), 10);
154
- return interval * 60 * 60 * 1000;
155
- }
156
- // Default: treat as daily
271
+ if (parts.length < 5)
157
272
  return 24 * 60 * 60 * 1000;
273
+ const minute = parts[0];
274
+ const hour = parts[1];
275
+ // "*/N * * * *" → every N minutes
276
+ if (minute.startsWith("*/")) {
277
+ const interval = parseInt(minute.slice(2), 10);
278
+ return interval * 60 * 1000;
158
279
  }
280
+ // "0 */N * * *" → every N hours
281
+ if (hour.startsWith("*/")) {
282
+ const interval = parseInt(hour.slice(2), 10);
283
+ return interval * 60 * 60 * 1000;
284
+ }
285
+ // Fixed time → treat as daily
159
286
  return 24 * 60 * 60 * 1000;
160
287
  }
288
+ sleep(ms) {
289
+ return new Promise((resolve) => setTimeout(resolve, ms));
290
+ }
161
291
  }
162
292
  //# sourceMappingURL=scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/pipeline/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/pipeline/scheduler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAE1C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAsBnE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIzB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMrD,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMnD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAmB3C,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAUrE,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAUV,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoC5E"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAE1C,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAsBnE,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIzB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMrD,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IASnD,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAmB3C,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAUrE,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IAUV,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoC5E"}
@@ -45,6 +45,9 @@ export class StateManager {
45
45
  async loadBookConfig(bookId) {
46
46
  const configPath = join(this.bookDir(bookId), "book.json");
47
47
  const raw = await readFile(configPath, "utf-8");
48
+ if (!raw.trim()) {
49
+ throw new Error(`book.json is empty for book "${bookId}"`);
50
+ }
48
51
  return JSON.parse(raw);
49
52
  }
50
53
  async saveBookConfig(bookId, config) {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * URL fetch utility for agent loop.
3
+ *
4
+ * Web search is handled natively by the LLM provider (OpenAI web_search_preview
5
+ * or web_search_options). This module only provides URL fetching for cases where
6
+ * the agent loop needs to read a specific page.
7
+ */
8
+ /**
9
+ * Fetch a URL and return its text content.
10
+ * HTML is stripped to plain text. Output is truncated to maxChars.
11
+ */
12
+ export declare function fetchUrl(url: string, maxChars?: number): Promise<string>;
13
+ //# sourceMappingURL=web-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../src/utils/web-search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B5E"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * URL fetch utility for agent loop.
3
+ *
4
+ * Web search is handled natively by the LLM provider (OpenAI web_search_preview
5
+ * or web_search_options). This module only provides URL fetching for cases where
6
+ * the agent loop needs to read a specific page.
7
+ */
8
+ /**
9
+ * Fetch a URL and return its text content.
10
+ * HTML is stripped to plain text. Output is truncated to maxChars.
11
+ */
12
+ export async function fetchUrl(url, maxChars = 8000) {
13
+ const res = await fetch(url, {
14
+ headers: {
15
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
16
+ "Accept": "text/html, application/json, text/plain",
17
+ },
18
+ signal: AbortSignal.timeout(15000),
19
+ });
20
+ if (!res.ok) {
21
+ throw new Error(`Fetch failed: ${res.status} ${res.statusText}`);
22
+ }
23
+ const contentType = res.headers.get("content-type") ?? "";
24
+ const text = await res.text();
25
+ // If HTML, strip tags and collapse whitespace
26
+ if (contentType.includes("html")) {
27
+ return text
28
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
29
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
30
+ .replace(/<[^>]*>/g, " ")
31
+ .replace(/\s+/g, " ")
32
+ .trim()
33
+ .slice(0, maxChars);
34
+ }
35
+ return text.slice(0, maxChars);
36
+ }
37
+ //# sourceMappingURL=web-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../src/utils/web-search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAQ,GAAG,IAAI;IACzD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE;YACP,YAAY,EAAE,oEAAoE;YAClF,QAAQ,EAAE,yCAAyC;SACpD;QACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,8CAA8C;IAC9C,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI;aACR,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;aAC1C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;aACxC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;aACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE;aACN,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC"}
package/genres/horror.md CHANGED
@@ -8,7 +8,7 @@ powerScaling: false
8
8
  eraResearch: false
9
9
  pacingRule: "氛围递进:安全感→微妙不适→确认异常→恐惧升级→高潮→喘息,循环推进"
10
10
  satisfactionTypes: ["真相揭示", "成功逃脱", "反杀怪物", "谜团解开", "同伴获救", "规则发现"]
11
- auditDimensions: [1,2,3,6,7,8,9,10,13,14,15,16,17,18,19]
11
+ auditDimensions: [1,2,3,6,7,8,9,10,13,14,15,16,17,18,19,24,25,26]
12
12
  ---
13
13
 
14
14
  ## 题材禁忌
package/genres/other.md CHANGED
@@ -8,7 +8,7 @@ powerScaling: false
8
8
  eraResearch: false
9
9
  pacingRule: "每2-3章有一个明确的进展或反馈"
10
10
  satisfactionTypes: ["目标达成", "困难克服", "真相揭示", "关系转变"]
11
- auditDimensions: [1,2,3,6,7,8,9,10,13,14,15,16,17,18,19]
11
+ auditDimensions: [1,2,3,6,7,8,9,10,13,14,15,16,17,18,19,24,25,26]
12
12
  ---
13
13
 
14
14
  ## 题材禁忌
package/genres/urban.md CHANGED
@@ -8,7 +8,7 @@ powerScaling: false
8
8
  eraResearch: true
9
9
  pacingRule: "每2-3章一个小回报:商业收益、人脉拓展、对手受挫、信息优势"
10
10
  satisfactionTypes: ["商战碾压", "身份揭示", "人脉兑现", "对手打脸", "资源收割", "地位跃升"]
11
- auditDimensions: [1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
11
+ auditDimensions: [1,2,3,6,7,8,9,10,11,12,13,14,15,16,17,18,19,24,25,26]
12
12
  ---
13
13
 
14
14
  ## 题材禁忌
package/genres/xianxia.md CHANGED
@@ -8,7 +8,7 @@ powerScaling: true
8
8
  eraResearch: false
9
9
  pacingRule: "修炼/悟道与战斗交替,每3-5章一次小突破或关键收获"
10
10
  satisfactionTypes: ["悟道突破", "斗法碾压", "法宝收获", "身份揭示", "天劫渡过", "因果了结"]
11
- auditDimensions: [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19]
11
+ auditDimensions: [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,24,25,26]
12
12
  ---
13
13
 
14
14
  ## 题材禁忌
@@ -8,7 +8,7 @@ powerScaling: true
8
8
  eraResearch: false
9
9
  pacingRule: "三章内必有明确反馈:打脸、收益兑现、信息反转、地位变化"
10
10
  satisfactionTypes: ["打脸", "升级突破", "收益兑现", "智斗碾压", "身份揭示", "底牌亮出"]
11
- auditDimensions: [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19]
11
+ auditDimensions: [1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,24,25,26]
12
12
  ---
13
13
 
14
14
  ## 题材禁忌
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actalk/inkos-core",
3
- "version": "0.3.6",
3
+ "version": "0.4.1",
4
4
  "description": "InkOS core: models, agents, pipeline, LLM integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,6 +13,7 @@
13
13
  },
14
14
  "files": [
15
15
  "dist",
16
+ "!dist/__tests__",
16
17
  "genres"
17
18
  ],
18
19
  "license": "MIT",
@@ -21,6 +22,14 @@
21
22
  "url": "https://github.com/Narcooo/inkos.git",
22
23
  "directory": "packages/core"
23
24
  },
25
+ "scripts": {
26
+ "prepack": "node ../../scripts/prepare-package-for-publish.mjs",
27
+ "postpack": "node ../../scripts/restore-package-json.mjs",
28
+ "build": "tsc",
29
+ "dev": "tsc --watch",
30
+ "test": "vitest run",
31
+ "typecheck": "tsc --noEmit"
32
+ },
24
33
  "dependencies": {
25
34
  "@anthropic-ai/sdk": "^0.78.0",
26
35
  "js-yaml": "^4.1.1",
@@ -31,11 +40,5 @@
31
40
  "@types/js-yaml": "^4.0.9",
32
41
  "typescript": "^5.8.0",
33
42
  "vitest": "^3.0.0"
34
- },
35
- "scripts": {
36
- "build": "tsc",
37
- "dev": "tsc --watch",
38
- "test": "vitest run",
39
- "typecheck": "tsc --noEmit"
40
43
  }
41
- }
44
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 InkOS Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ai-tells.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-tells.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ai-tells.test.ts"],"names":[],"mappings":""}
@@ -1,78 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { analyzeAITells } from "../agents/ai-tells.js";
3
- describe("analyzeAITells", () => {
4
- it("returns no issues for varied paragraph lengths", () => {
5
- const content = [
6
- "短段。",
7
- "",
8
- "这是一个中等长度的段落,包含一些描述性的内容,让这个段落稍微长一些。",
9
- "",
10
- "很长的段落。这个段落包含了大量的内容,描述了各种各样的场景和人物。角色们在这里进行了激烈的讨论,关于未来的计划和当前的困境。他们需要找到一种方式来解决眼前的问题。",
11
- ].join("\n");
12
- const result = analyzeAITells(content);
13
- const paraIssues = result.issues.filter((i) => i.category === "段落等长");
14
- expect(paraIssues).toHaveLength(0);
15
- });
16
- it("detects uniform paragraph lengths (dim 20)", () => {
17
- // Generate paragraphs of nearly identical length
18
- const para = "这是一个测试段落的内容,长度大约相同。";
19
- const content = [para, "", para, "", para, "", para].join("\n");
20
- const result = analyzeAITells(content);
21
- const paraIssues = result.issues.filter((i) => i.category === "段落等长");
22
- expect(paraIssues.length).toBeGreaterThan(0);
23
- expect(paraIssues[0].severity).toBe("warning");
24
- });
25
- it("detects high hedge word density (dim 21)", () => {
26
- const content = [
27
- "他似乎觉得这件事可能不太对劲。",
28
- "",
29
- "或许他应该大概去看看。似乎有什么东西在那里。",
30
- "",
31
- "可能是一种错觉,大概只是风声。某种程度上他也不太确定。",
32
- ].join("\n");
33
- const result = analyzeAITells(content);
34
- const hedgeIssues = result.issues.filter((i) => i.category === "套话密度");
35
- expect(hedgeIssues.length).toBeGreaterThan(0);
36
- });
37
- it("detects formulaic transition repetition (dim 22)", () => {
38
- const content = [
39
- "第一段内容。然而事情并不简单。",
40
- "",
41
- "第二段内容。然而他没有放弃。",
42
- "",
43
- "第三段内容。然而命运弄人。",
44
- ].join("\n");
45
- const result = analyzeAITells(content);
46
- const transIssues = result.issues.filter((i) => i.category === "公式化转折");
47
- expect(transIssues.length).toBeGreaterThan(0);
48
- expect(transIssues[0].description).toContain("然而");
49
- });
50
- it("detects list-like sentence structure (dim 23)", () => {
51
- const content = [
52
- "他看着远方的山峰。他看着脚下的深渊。他看着身旁的同伴。他看着手中的剑。",
53
- ].join("\n");
54
- const result = analyzeAITells(content);
55
- const listIssues = result.issues.filter((i) => i.category === "列表式结构");
56
- expect(listIssues.length).toBeGreaterThan(0);
57
- expect(listIssues[0].severity).toBe("info");
58
- });
59
- it("returns no issues for content with fewer than 3 paragraphs", () => {
60
- const content = "只有一段话。";
61
- const result = analyzeAITells(content);
62
- expect(result.issues).toHaveLength(0);
63
- });
64
- it("returns no issues for clean varied text", () => {
65
- const content = [
66
- "陈风一脚踩碎了脚下的石板。碎石飞溅,打在旁边的墙壁上发出清脆的声响。",
67
- "",
68
- "短暂的沉默。空气中弥漫着灰尘的味道,呛得他咳嗽了两声。远处传来脚步声。",
69
- "",
70
- "\"谁?\"他低喝一声,手已经按上了腰间的刀柄。指尖触到冰凉的金属,心跳稍微稳了一些。黑暗中,一双眼睛正盯着他。那目光冰冷得像冬夜的寒风,带着审视和一丝不易察觉的警惕。",
71
- ].join("\n");
72
- const result = analyzeAITells(content);
73
- // Should have no or few issues for natural-looking text
74
- const warningIssues = result.issues.filter((i) => i.severity === "warning");
75
- expect(warningIssues).toHaveLength(0);
76
- });
77
- });
78
- //# sourceMappingURL=ai-tells.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-tells.test.js","sourceRoot":"","sources":["../../src/__tests__/ai-tells.test.ts"],"names":[],"mappings":"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"}