@actalk/inkos-core 1.1.1 → 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 (62) hide show
  1. package/LICENSE +661 -21
  2. package/dist/index.d.ts +12 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +12 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/interaction/edit-controller.d.ts +55 -0
  7. package/dist/interaction/edit-controller.d.ts.map +1 -0
  8. package/dist/interaction/edit-controller.js +187 -0
  9. package/dist/interaction/edit-controller.js.map +1 -0
  10. package/dist/interaction/events.d.ts +45 -0
  11. package/dist/interaction/events.d.ts.map +1 -0
  12. package/dist/interaction/events.js +32 -0
  13. package/dist/interaction/events.js.map +1 -0
  14. package/dist/interaction/intents.d.ts +96 -0
  15. package/dist/interaction/intents.d.ts.map +1 -0
  16. package/dist/interaction/intents.js +58 -0
  17. package/dist/interaction/intents.js.map +1 -0
  18. package/dist/interaction/modes.d.ts +5 -0
  19. package/dist/interaction/modes.d.ts.map +1 -0
  20. package/dist/interaction/modes.js +7 -0
  21. package/dist/interaction/modes.js.map +1 -0
  22. package/dist/interaction/nl-router.d.ts +7 -0
  23. package/dist/interaction/nl-router.d.ts.map +1 -0
  24. package/dist/interaction/nl-router.js +218 -0
  25. package/dist/interaction/nl-router.js.map +1 -0
  26. package/dist/interaction/project-control.d.ts +85 -0
  27. package/dist/interaction/project-control.d.ts.map +1 -0
  28. package/dist/interaction/project-control.js +123 -0
  29. package/dist/interaction/project-control.js.map +1 -0
  30. package/dist/interaction/project-session-store.d.ts +7 -0
  31. package/dist/interaction/project-session-store.d.ts.map +1 -0
  32. package/dist/interaction/project-session-store.js +46 -0
  33. package/dist/interaction/project-session-store.js.map +1 -0
  34. package/dist/interaction/project-tools.d.ts +20 -0
  35. package/dist/interaction/project-tools.d.ts.map +1 -0
  36. package/dist/interaction/project-tools.js +516 -0
  37. package/dist/interaction/project-tools.js.map +1 -0
  38. package/dist/interaction/request-router.d.ts +3 -0
  39. package/dist/interaction/request-router.d.ts.map +1 -0
  40. package/dist/interaction/request-router.js +5 -0
  41. package/dist/interaction/request-router.js.map +1 -0
  42. package/dist/interaction/runtime.d.ts +54 -0
  43. package/dist/interaction/runtime.d.ts.map +1 -0
  44. package/dist/interaction/runtime.js +943 -0
  45. package/dist/interaction/runtime.js.map +1 -0
  46. package/dist/interaction/session.d.ts +352 -0
  47. package/dist/interaction/session.d.ts.map +1 -0
  48. package/dist/interaction/session.js +98 -0
  49. package/dist/interaction/session.js.map +1 -0
  50. package/dist/interaction/truth-authority.d.ts +4 -0
  51. package/dist/interaction/truth-authority.d.ts.map +1 -0
  52. package/dist/interaction/truth-authority.js +37 -0
  53. package/dist/interaction/truth-authority.js.map +1 -0
  54. package/dist/llm/provider.d.ts +2 -0
  55. package/dist/llm/provider.d.ts.map +1 -1
  56. package/dist/llm/provider.js +49 -14
  57. package/dist/llm/provider.js.map +1 -1
  58. package/dist/pipeline/runner.d.ts +8 -1
  59. package/dist/pipeline/runner.d.ts.map +1 -1
  60. package/dist/pipeline/runner.js +139 -4
  61. package/dist/pipeline/runner.js.map +1 -1
  62. package/package.json +2 -2
@@ -0,0 +1,516 @@
1
+ import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { chatCompletion } from "../index.js";
4
+ import { executeEditTransaction } from "./edit-controller.js";
5
+ function normalizePlatform(platform) {
6
+ switch (platform) {
7
+ case "tomato":
8
+ case "feilu":
9
+ case "qidian":
10
+ return platform;
11
+ default:
12
+ return "other";
13
+ }
14
+ }
15
+ function extractBalancedJsonObject(text) {
16
+ const start = text.indexOf("{");
17
+ if (start < 0) {
18
+ return null;
19
+ }
20
+ let depth = 0;
21
+ let inString = false;
22
+ let escaped = false;
23
+ for (let index = start; index < text.length; index += 1) {
24
+ const char = text[index];
25
+ if (inString) {
26
+ if (escaped) {
27
+ escaped = false;
28
+ continue;
29
+ }
30
+ if (char === "\\") {
31
+ escaped = true;
32
+ continue;
33
+ }
34
+ if (char === "\"") {
35
+ inString = false;
36
+ }
37
+ continue;
38
+ }
39
+ if (char === "\"") {
40
+ inString = true;
41
+ continue;
42
+ }
43
+ if (char === "{") {
44
+ depth += 1;
45
+ continue;
46
+ }
47
+ if (char === "}") {
48
+ depth -= 1;
49
+ if (depth === 0) {
50
+ return text.slice(start, index + 1);
51
+ }
52
+ if (depth < 0) {
53
+ return null;
54
+ }
55
+ }
56
+ }
57
+ return null;
58
+ }
59
+ function parseCreationDraftResult(text) {
60
+ const candidate = extractBalancedJsonObject(text);
61
+ if (!candidate) {
62
+ return null;
63
+ }
64
+ try {
65
+ const parsed = JSON.parse(candidate);
66
+ if (!parsed.assistantReply || !parsed.draft) {
67
+ return null;
68
+ }
69
+ return {
70
+ assistantReply: parsed.assistantReply,
71
+ draft: parsed.draft,
72
+ };
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ function deriveBookId(title) {
79
+ return title
80
+ .toLowerCase()
81
+ .replace(/[^a-z0-9\u4e00-\u9fff]/g, "-")
82
+ .replace(/-+/g, "-")
83
+ .slice(0, 30);
84
+ }
85
+ function buildBookConfig(input) {
86
+ const now = new Date().toISOString();
87
+ return {
88
+ id: deriveBookId(input.title),
89
+ title: input.title,
90
+ platform: normalizePlatform(input.platform),
91
+ genre: input.genre ?? "other",
92
+ status: "outlining",
93
+ targetChapters: input.targetChapters ?? 200,
94
+ chapterWordCount: input.chapterWordCount ?? 3000,
95
+ ...(input.language ? { language: input.language } : {}),
96
+ createdAt: now,
97
+ updatedAt: now,
98
+ };
99
+ }
100
+ function buildCreationExternalContext(input) {
101
+ const sections = [
102
+ input.worldPremise ? `## 世界观与核心设定\n${input.worldPremise}` : undefined,
103
+ input.settingNotes ? `## 补充设定\n${input.settingNotes}` : undefined,
104
+ input.protagonist ? `## 主角设定\n${input.protagonist}` : undefined,
105
+ input.supportingCast ? `## 关键角色与势力\n${input.supportingCast}` : undefined,
106
+ input.conflictCore ? `## 核心冲突\n${input.conflictCore}` : undefined,
107
+ input.volumeOutline ? `## 卷纲方向\n${input.volumeOutline}` : undefined,
108
+ input.blurb ? `## 简介卖点\n${input.blurb}` : undefined,
109
+ input.constraints ? `## 创作约束\n${input.constraints}` : undefined,
110
+ ].filter((section) => Boolean(section?.trim()));
111
+ if (sections.length === 0) {
112
+ return undefined;
113
+ }
114
+ return sections.join("\n\n");
115
+ }
116
+ export function buildChapterFileLookup(files) {
117
+ const lookup = new Map();
118
+ for (const file of files) {
119
+ if (!file.endsWith(".md") || !/^\d{4}/.test(file)) {
120
+ continue;
121
+ }
122
+ const chapterNumber = parseInt(file.slice(0, 4), 10);
123
+ if (!lookup.has(chapterNumber)) {
124
+ lookup.set(chapterNumber, file);
125
+ }
126
+ }
127
+ return lookup;
128
+ }
129
+ async function exportBookToPath(state, bookId, options) {
130
+ const format = options.format ?? "txt";
131
+ const index = await state.loadChapterIndex(bookId);
132
+ const book = await state.loadBookConfig(bookId);
133
+ const chapters = options.approvedOnly
134
+ ? index.filter((chapter) => chapter.status === "approved")
135
+ : index;
136
+ if (chapters.length === 0) {
137
+ throw new Error("No chapters to export.");
138
+ }
139
+ const bookDir = state.bookDir(bookId);
140
+ const chaptersDir = join(bookDir, "chapters");
141
+ const projectRoot = dirname(dirname(bookDir));
142
+ const outputPath = options.outputPath ?? join(projectRoot, `${bookId}_export.${format}`);
143
+ const chapterFiles = buildChapterFileLookup(await readdir(chaptersDir));
144
+ if (format === "epub") {
145
+ const sections = [
146
+ "<!DOCTYPE html>",
147
+ `<html><head><meta charset="utf-8"><title>${book.title}</title><style>body{font-family:serif;max-width:40em;margin:auto;padding:2em;line-height:1.8}h2{margin-top:3em}</style></head><body>`,
148
+ `<h1>${book.title}</h1>`,
149
+ ];
150
+ for (const chapter of chapters) {
151
+ const match = chapterFiles.get(chapter.number);
152
+ if (!match) {
153
+ continue;
154
+ }
155
+ const markdown = await readFile(join(chaptersDir, match), "utf-8");
156
+ const title = markdown.match(/^#\s+(.+)/m)?.[1] ?? match.replace(/\.md$/, "");
157
+ const htmlBody = markdown
158
+ .split("\n")
159
+ .filter((line) => !line.startsWith("#"))
160
+ .map((line) => line.trim() ? `<p>${line}</p>` : "")
161
+ .join("\n");
162
+ sections.push(`<h2>${title}</h2>`);
163
+ sections.push(htmlBody);
164
+ }
165
+ sections.push("</body></html>");
166
+ await mkdir(dirname(outputPath), { recursive: true });
167
+ await writeFile(outputPath, sections.join("\n"), "utf-8");
168
+ }
169
+ else {
170
+ const parts = [];
171
+ parts.push(format === "md" ? `# ${book.title}\n\n---\n` : `${book.title}\n\n`);
172
+ for (const chapter of chapters) {
173
+ const match = chapterFiles.get(chapter.number);
174
+ if (!match) {
175
+ continue;
176
+ }
177
+ parts.push(await readFile(join(chaptersDir, match), "utf-8"));
178
+ parts.push("\n\n");
179
+ }
180
+ await mkdir(dirname(outputPath), { recursive: true });
181
+ await writeFile(outputPath, parts.join(format === "md" ? "\n---\n\n" : "\n"), "utf-8");
182
+ }
183
+ return {
184
+ outputPath,
185
+ chaptersExported: chapters.length,
186
+ totalWords: chapters.reduce((sum, chapter) => sum + chapter.wordCount, 0),
187
+ format,
188
+ };
189
+ }
190
+ function mapStageMessageToStatus(message) {
191
+ const lower = message.trim().toLowerCase();
192
+ if (lower.includes("planning next chapter")
193
+ || lower.includes("generating foundation")
194
+ || lower.includes("reviewing foundation")
195
+ || lower.includes("preparing chapter inputs")
196
+ || message.includes("规划下一章意图")
197
+ || message.includes("生成基础设定")
198
+ || message.includes("审核基础设定")
199
+ || message.includes("准备章节输入")) {
200
+ return "planning";
201
+ }
202
+ if (lower.includes("composing chapter runtime context")
203
+ || message.includes("组装章节运行时上下文")) {
204
+ return "composing";
205
+ }
206
+ if (lower.includes("writing chapter draft")
207
+ || message.includes("撰写章节草稿")) {
208
+ return "writing";
209
+ }
210
+ if (lower.includes("auditing draft")
211
+ || message.includes("审计草稿")) {
212
+ return "assessing";
213
+ }
214
+ if (lower.includes("fixing")
215
+ || lower.includes("revising chapter")
216
+ || lower.includes("rewrite")
217
+ || lower.includes("repair")
218
+ || message.includes("自动修复")
219
+ || message.includes("整章改写")
220
+ || message.includes("修订第")) {
221
+ return "repairing";
222
+ }
223
+ if (lower.includes("persist")
224
+ || lower.includes("saving")
225
+ || lower.includes("snapshot")
226
+ || lower.includes("rebuilding final truth files")
227
+ || lower.includes("validating truth file updates")
228
+ || lower.includes("syncing memory indexes")
229
+ || message.includes("落盘")
230
+ || message.includes("保存")
231
+ || message.includes("快照")
232
+ || message.includes("校验真相文件变更")
233
+ || message.includes("生成最终真相文件")
234
+ || message.includes("同步记忆索引")) {
235
+ return "persisting";
236
+ }
237
+ return undefined;
238
+ }
239
+ function extractStageDetail(message) {
240
+ if (message.startsWith("Stage: ")) {
241
+ return message.slice("Stage: ".length).trim();
242
+ }
243
+ if (message.startsWith("阶段:")) {
244
+ return message.slice("阶段:".length).trim();
245
+ }
246
+ return undefined;
247
+ }
248
+ function createInteractionLogger(original, events, bookId) {
249
+ const emit = (level, message) => {
250
+ const stageDetail = extractStageDetail(message);
251
+ const stageStatus = stageDetail ? mapStageMessageToStatus(stageDetail) : undefined;
252
+ if (stageDetail && stageStatus) {
253
+ events.push({
254
+ kind: "stage.changed",
255
+ timestamp: Date.now(),
256
+ status: stageStatus,
257
+ bookId,
258
+ detail: stageDetail,
259
+ });
260
+ return;
261
+ }
262
+ if (level === "warn") {
263
+ events.push({
264
+ kind: "task.warning",
265
+ timestamp: Date.now(),
266
+ status: "blocked",
267
+ bookId,
268
+ detail: message,
269
+ });
270
+ return;
271
+ }
272
+ if (level === "error") {
273
+ events.push({
274
+ kind: "task.failed",
275
+ timestamp: Date.now(),
276
+ status: "failed",
277
+ bookId,
278
+ detail: message,
279
+ });
280
+ }
281
+ };
282
+ const wrap = (base) => ({
283
+ debug: (msg, ctx) => {
284
+ emit("debug", msg);
285
+ base?.debug(msg, ctx);
286
+ },
287
+ info: (msg, ctx) => {
288
+ emit("info", msg);
289
+ base?.info(msg, ctx);
290
+ },
291
+ warn: (msg, ctx) => {
292
+ emit("warn", msg);
293
+ base?.warn(msg, ctx);
294
+ },
295
+ error: (msg, ctx) => {
296
+ emit("error", msg);
297
+ base?.error(msg, ctx);
298
+ },
299
+ child: (tag, extraCtx) => wrap(base?.child(tag, extraCtx)),
300
+ });
301
+ return wrap(original);
302
+ }
303
+ async function withPipelineInteractionTelemetry(pipeline, bookId, executor) {
304
+ const events = [];
305
+ const originalLogger = pipeline.config?.logger;
306
+ if (pipeline.config) {
307
+ pipeline.config.logger = createInteractionLogger(originalLogger, events, bookId);
308
+ }
309
+ try {
310
+ const result = await executor();
311
+ return {
312
+ ...result,
313
+ __interaction: {
314
+ events,
315
+ ...(typeof result.chapterNumber === "number"
316
+ ? { activeChapterNumber: result.chapterNumber }
317
+ : {}),
318
+ },
319
+ };
320
+ }
321
+ finally {
322
+ if (pipeline.config) {
323
+ pipeline.config.logger = originalLogger;
324
+ }
325
+ }
326
+ }
327
+ export function createInteractionToolsFromDeps(pipeline, state, hooks) {
328
+ const instrumentedPipeline = pipeline;
329
+ return {
330
+ listBooks: () => state.listBooks(),
331
+ developBookDraft: async (input, existingDraft) => {
332
+ if (!instrumentedPipeline.config?.client || !instrumentedPipeline.config?.model) {
333
+ const concept = existingDraft?.concept ?? input;
334
+ return {
335
+ __interaction: {
336
+ responseText: "先把这本书的大概方向收住。你更想写长篇连载,还是十来章能收住的版本?",
337
+ details: {
338
+ creationDraft: {
339
+ concept,
340
+ title: existingDraft?.title,
341
+ genre: existingDraft?.genre,
342
+ platform: existingDraft?.platform,
343
+ language: existingDraft?.language,
344
+ targetChapters: existingDraft?.targetChapters,
345
+ chapterWordCount: existingDraft?.chapterWordCount,
346
+ blurb: existingDraft?.blurb,
347
+ authorIntent: existingDraft?.authorIntent,
348
+ currentFocus: existingDraft?.currentFocus,
349
+ nextQuestion: "你更想写长篇连载,还是十来章能收住的版本?",
350
+ missingFields: existingDraft?.missingFields ?? ["title", "genre", "targetChapters"],
351
+ readyToCreate: existingDraft?.readyToCreate ?? false,
352
+ },
353
+ },
354
+ },
355
+ };
356
+ }
357
+ const response = await chatCompletion(instrumentedPipeline.config.client, instrumentedPipeline.config.model, [
358
+ {
359
+ role: "system",
360
+ content: [
361
+ "You are InkOS book ideation assistant.",
362
+ "Turn the user's latest message and the current draft into a tighter book creation draft.",
363
+ "Ask at most one sharp next question.",
364
+ "Default to concise Chinese unless the draft language is clearly English.",
365
+ "Return JSON only with keys assistantReply and draft.",
366
+ "draft must include concept and may include title, genre, platform, language, targetChapters, chapterWordCount, blurb, worldPremise, settingNotes, protagonist, supportingCast, conflictCore, volumeOutline, constraints, authorIntent, currentFocus, nextQuestion, missingFields, readyToCreate.",
367
+ "Help the user decide and revise worldview, setting, protagonist, supporting cast, core conflict, blurb, and volume direction.",
368
+ "Be conservative: only mark readyToCreate=true when the draft already has a workable title, genre, targetChapters, chapterWordCount, and enough setting/conflict detail to generate a foundation.",
369
+ ].join(" "),
370
+ },
371
+ {
372
+ role: "user",
373
+ content: JSON.stringify({
374
+ currentDraft: existingDraft ?? null,
375
+ latestMessage: input,
376
+ }, null, 2),
377
+ },
378
+ ], { temperature: 0.4, maxTokens: 700 });
379
+ const parsed = parseCreationDraftResult(response.content);
380
+ if (!parsed) {
381
+ throw new Error("Book draft assistant returned invalid JSON.");
382
+ }
383
+ return {
384
+ __interaction: {
385
+ responseText: parsed.assistantReply,
386
+ details: {
387
+ creationDraft: parsed.draft,
388
+ },
389
+ },
390
+ };
391
+ },
392
+ createBook: async (input) => {
393
+ const book = buildBookConfig(input);
394
+ if (!pipeline.initBook) {
395
+ throw new Error("Pipeline does not support shared book creation.");
396
+ }
397
+ await pipeline.initBook(book, {
398
+ externalContext: buildCreationExternalContext(input),
399
+ authorIntent: input.authorIntent,
400
+ currentFocus: input.currentFocus,
401
+ });
402
+ return {
403
+ bookId: book.id,
404
+ title: book.title,
405
+ __interaction: {
406
+ responseText: `Created ${book.title} (${book.id}).`,
407
+ details: {
408
+ bookId: book.id,
409
+ title: book.title,
410
+ },
411
+ },
412
+ };
413
+ },
414
+ exportBook: async (bookId, options) => {
415
+ const result = await exportBookToPath(state, bookId, options);
416
+ return {
417
+ ...result,
418
+ __interaction: {
419
+ responseText: `Exported ${bookId} to ${result.outputPath} (${result.chaptersExported} chapters).`,
420
+ details: {
421
+ outputPath: result.outputPath,
422
+ chaptersExported: result.chaptersExported,
423
+ totalWords: result.totalWords,
424
+ format: result.format,
425
+ },
426
+ },
427
+ };
428
+ },
429
+ chat: async (input, options) => {
430
+ const bookLabel = options.bookId ?? "none";
431
+ const chatRequestOptions = hooks?.getChatRequestOptions?.() ?? {};
432
+ const response = instrumentedPipeline.config?.client && instrumentedPipeline.config?.model
433
+ ? await chatCompletion(instrumentedPipeline.config.client, instrumentedPipeline.config.model, [
434
+ {
435
+ role: "system",
436
+ content: [
437
+ "You are InkOS inside the terminal workbench.",
438
+ "Respond conversationally and briefly.",
439
+ "If there is no active book, help the user decide what to write next.",
440
+ "If there is an active book, keep the answer grounded in that book context.",
441
+ ].join(" "),
442
+ },
443
+ {
444
+ role: "user",
445
+ content: `activeBook=${bookLabel}\nautomationMode=${options.automationMode}\nmessage=${input}`,
446
+ },
447
+ ], {
448
+ temperature: chatRequestOptions.temperature ?? 0.4,
449
+ maxTokens: chatRequestOptions.maxTokens ?? 240,
450
+ onTextDelta: hooks?.onChatTextDelta,
451
+ })
452
+ : undefined;
453
+ return {
454
+ __interaction: {
455
+ responseText: response?.content?.trim()
456
+ || (options.bookId
457
+ ? `I’m here. Active book is ${options.bookId}.`
458
+ : "I’m here. No active book yet."),
459
+ },
460
+ };
461
+ },
462
+ writeNextChapter: (bookId) => withPipelineInteractionTelemetry(instrumentedPipeline, bookId, () => pipeline.writeNextChapter(bookId)),
463
+ reviseDraft: (bookId, chapterNumber, mode) => withPipelineInteractionTelemetry(instrumentedPipeline, bookId, () => pipeline.reviseDraft(bookId, chapterNumber, mode)),
464
+ patchChapterText: async (bookId, chapterNumber, targetText, replacementText) => {
465
+ const execution = await executeEditTransaction({
466
+ bookDir: (targetBookId) => state.bookDir(targetBookId),
467
+ loadChapterIndex: (targetBookId) => state.loadChapterIndex(targetBookId),
468
+ saveChapterIndex: (targetBookId, index) => state.saveChapterIndex(targetBookId, index),
469
+ }, {
470
+ kind: "chapter-local-edit",
471
+ bookId,
472
+ chapterNumber,
473
+ instruction: `Replace ${targetText} with ${replacementText}`,
474
+ targetText,
475
+ replacementText,
476
+ });
477
+ return {
478
+ __interaction: {
479
+ activeChapterNumber: chapterNumber,
480
+ responseText: execution.summary,
481
+ },
482
+ };
483
+ },
484
+ renameEntity: async (bookId, oldValue, newValue) => {
485
+ const execution = await executeEditTransaction({
486
+ bookDir: (targetBookId) => state.bookDir(targetBookId),
487
+ loadChapterIndex: (targetBookId) => state.loadChapterIndex(targetBookId),
488
+ saveChapterIndex: (targetBookId, index) => state.saveChapterIndex(targetBookId, index),
489
+ }, {
490
+ kind: "entity-rename",
491
+ bookId,
492
+ entityType: "character",
493
+ oldValue,
494
+ newValue,
495
+ });
496
+ return {
497
+ __interaction: {
498
+ responseText: execution.summary,
499
+ },
500
+ };
501
+ },
502
+ updateCurrentFocus: async (bookId, content) => {
503
+ await state.ensureControlDocuments(bookId);
504
+ await writeFile(join(state.bookDir(bookId), "story", "current_focus.md"), content, "utf-8");
505
+ },
506
+ updateAuthorIntent: async (bookId, content) => {
507
+ await state.ensureControlDocuments(bookId);
508
+ await writeFile(join(state.bookDir(bookId), "story", "author_intent.md"), content, "utf-8");
509
+ },
510
+ writeTruthFile: async (bookId, fileName, content) => {
511
+ await state.ensureControlDocuments(bookId);
512
+ await writeFile(join(state.bookDir(bookId), "story", fileName), content, "utf-8");
513
+ },
514
+ };
515
+ }
516
+ //# sourceMappingURL=project-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-tools.js","sourceRoot":"","sources":["../../src/interaction/project-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type InteractionRequest } from "./intents.js";
2
+ export declare function routeInteractionRequest(input: InteractionRequest): InteractionRequest;
3
+ //# sourceMappingURL=request-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-router.d.ts","sourceRoot":"","sources":["../../src/interaction/request-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEjF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAErF"}
@@ -0,0 +1,5 @@
1
+ import { InteractionRequestSchema } from "./intents.js";
2
+ export function routeInteractionRequest(input) {
3
+ return InteractionRequestSchema.parse(input);
4
+ }
5
+ //# sourceMappingURL=request-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-router.js","sourceRoot":"","sources":["../../src/interaction/request-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,cAAc,CAAC;AAEjF,MAAM,UAAU,uBAAuB,CAAC,KAAyB;IAC/D,OAAO,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { AutomationMode } from "./modes.js";
2
+ import type { InteractionRequest } from "./intents.js";
3
+ import type { InteractionSession } from "./session.js";
4
+ type ReviseMode = "local-fix" | "rewrite";
5
+ export interface InteractionRuntimeTools {
6
+ readonly listBooks: () => Promise<ReadonlyArray<string>>;
7
+ readonly developBookDraft?: (input: string, existingDraft?: InteractionSession["creationDraft"]) => Promise<unknown>;
8
+ readonly createBook?: (input: {
9
+ readonly title: string;
10
+ readonly genre?: string;
11
+ readonly platform?: string;
12
+ readonly language?: "zh" | "en";
13
+ readonly chapterWordCount?: number;
14
+ readonly targetChapters?: number;
15
+ readonly blurb?: string;
16
+ readonly worldPremise?: string;
17
+ readonly settingNotes?: string;
18
+ readonly protagonist?: string;
19
+ readonly supportingCast?: string;
20
+ readonly conflictCore?: string;
21
+ readonly volumeOutline?: string;
22
+ readonly constraints?: string;
23
+ readonly authorIntent?: string;
24
+ readonly currentFocus?: string;
25
+ }) => Promise<unknown>;
26
+ readonly exportBook?: (bookId: string, options: {
27
+ readonly format?: "txt" | "md" | "epub";
28
+ readonly approvedOnly?: boolean;
29
+ readonly outputPath?: string;
30
+ }) => Promise<unknown>;
31
+ readonly chat?: (input: string, options: {
32
+ readonly bookId?: string;
33
+ readonly automationMode: AutomationMode;
34
+ }) => Promise<unknown>;
35
+ readonly writeNextChapter: (bookId: string) => Promise<unknown>;
36
+ readonly reviseDraft: (bookId: string, chapterNumber: number, mode: ReviseMode) => Promise<unknown>;
37
+ readonly patchChapterText: (bookId: string, chapterNumber: number, targetText: string, replacementText: string) => Promise<unknown>;
38
+ readonly renameEntity: (bookId: string, oldValue: string, newValue: string) => Promise<unknown>;
39
+ readonly updateCurrentFocus: (bookId: string, content: string) => Promise<unknown>;
40
+ readonly updateAuthorIntent: (bookId: string, content: string) => Promise<unknown>;
41
+ readonly writeTruthFile: (bookId: string, fileName: string, content: string) => Promise<unknown>;
42
+ }
43
+ export interface InteractionRuntimeResult {
44
+ readonly session: InteractionSession;
45
+ readonly responseText?: string;
46
+ readonly details?: Readonly<Record<string, unknown>>;
47
+ }
48
+ export declare function runInteractionRequest(params: {
49
+ readonly session: InteractionSession;
50
+ readonly request: InteractionRequest;
51
+ readonly tools: InteractionRuntimeTools;
52
+ }): Promise<InteractionRuntimeResult>;
53
+ export {};
54
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/interaction/runtime.ts"],"names":[],"mappings":"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"}