@actalk/inkos 0.3.1 → 0.3.5

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 (55) hide show
  1. package/dist/__tests__/publish-package.test.d.ts +2 -0
  2. package/dist/__tests__/publish-package.test.d.ts.map +1 -0
  3. package/dist/__tests__/publish-package.test.js +38 -0
  4. package/dist/__tests__/publish-package.test.js.map +1 -0
  5. package/dist/commands/audit.d.ts.map +1 -1
  6. package/dist/commands/audit.js +14 -4
  7. package/dist/commands/audit.js.map +1 -1
  8. package/dist/commands/book.js +56 -11
  9. package/dist/commands/book.js.map +1 -1
  10. package/dist/commands/config.js +54 -3
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/detect.d.ts +3 -0
  13. package/dist/commands/detect.d.ts.map +1 -0
  14. package/dist/commands/detect.js +104 -0
  15. package/dist/commands/detect.js.map +1 -0
  16. package/dist/commands/doctor.d.ts.map +1 -1
  17. package/dist/commands/doctor.js +47 -11
  18. package/dist/commands/doctor.js.map +1 -1
  19. package/dist/commands/draft.d.ts.map +1 -1
  20. package/dist/commands/draft.js +4 -3
  21. package/dist/commands/draft.js.map +1 -1
  22. package/dist/commands/export.d.ts.map +1 -1
  23. package/dist/commands/export.js +25 -8
  24. package/dist/commands/export.js.map +1 -1
  25. package/dist/commands/init.d.ts.map +1 -1
  26. package/dist/commands/init.js +69 -25
  27. package/dist/commands/init.js.map +1 -1
  28. package/dist/commands/radar.js +27 -14
  29. package/dist/commands/radar.js.map +1 -1
  30. package/dist/commands/review.js +109 -30
  31. package/dist/commands/review.js.map +1 -1
  32. package/dist/commands/revise.d.ts.map +1 -1
  33. package/dist/commands/revise.js +13 -4
  34. package/dist/commands/revise.js.map +1 -1
  35. package/dist/commands/status.d.ts.map +1 -1
  36. package/dist/commands/status.js +46 -13
  37. package/dist/commands/status.js.map +1 -1
  38. package/dist/commands/style.d.ts +3 -0
  39. package/dist/commands/style.d.ts.map +1 -0
  40. package/dist/commands/style.js +67 -0
  41. package/dist/commands/style.js.map +1 -0
  42. package/dist/commands/update.d.ts +3 -0
  43. package/dist/commands/update.d.ts.map +1 -0
  44. package/dist/commands/update.js +32 -0
  45. package/dist/commands/update.js.map +1 -0
  46. package/dist/commands/write.d.ts.map +1 -1
  47. package/dist/commands/write.js +75 -25
  48. package/dist/commands/write.js.map +1 -1
  49. package/dist/index.js +7 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/utils.d.ts +7 -0
  52. package/dist/utils.d.ts.map +1 -1
  53. package/dist/utils.js +44 -6
  54. package/dist/utils.js.map +1 -1
  55. package/package.json +3 -3
@@ -3,14 +3,23 @@ import { StateManager } from "@actalk/inkos-core";
3
3
  import { findProjectRoot, log, logError } from "../utils.js";
4
4
  export const statusCommand = new Command("status")
5
5
  .description("Show project status")
6
- .action(async () => {
6
+ .argument("[book-id]", "Book ID (optional, shows all if omitted)")
7
+ .option("--json", "Output JSON")
8
+ .action(async (bookIdArg, opts) => {
7
9
  try {
8
10
  const root = findProjectRoot();
9
11
  const state = new StateManager(root);
10
- const bookIds = await state.listBooks();
11
- log(`InkOS Project: ${root}`);
12
- log(`Books: ${bookIds.length}`);
13
- log("");
12
+ const allBookIds = await state.listBooks();
13
+ const bookIds = bookIdArg ? [bookIdArg] : allBookIds;
14
+ if (bookIdArg && !allBookIds.includes(bookIdArg)) {
15
+ throw new Error(`Book "${bookIdArg}" not found. Available: ${allBookIds.join(", ") || "(none)"}`);
16
+ }
17
+ const booksData = [];
18
+ if (!opts.json) {
19
+ log(`InkOS Project: ${root}`);
20
+ log(`Books: ${allBookIds.length}`);
21
+ log("");
22
+ }
14
23
  for (const id of bookIds) {
15
24
  const book = await state.loadBookConfig(id);
16
25
  const index = await state.loadChapterIndex(id);
@@ -18,19 +27,43 @@ export const statusCommand = new Command("status")
18
27
  const approved = index.filter((ch) => ch.status === "approved").length;
19
28
  const pending = index.filter((ch) => ch.status === "ready-for-review").length;
20
29
  const failed = index.filter((ch) => ch.status === "audit-failed").length;
21
- log(` ${book.title} (${id})`);
22
- log(` Status: ${book.status}`);
23
- log(` Platform: ${book.platform} | Genre: ${book.genre}`);
24
30
  const totalWords = index.reduce((sum, ch) => sum + ch.wordCount, 0);
25
31
  const avgWords = index.length > 0 ? Math.round(totalWords / index.length) : 0;
26
- log(` Chapters: ${nextChapter - 1} / ${book.targetChapters}`);
27
- log(` Words: ${totalWords.toLocaleString()} (avg ${avgWords}/ch)`);
28
- log(` Approved: ${approved} | Pending: ${pending} | Failed: ${failed}`);
29
- log("");
32
+ booksData.push({
33
+ id,
34
+ title: book.title,
35
+ status: book.status,
36
+ genre: book.genre,
37
+ platform: book.platform,
38
+ chapters: nextChapter - 1,
39
+ targetChapters: book.targetChapters,
40
+ totalWords,
41
+ avgWordsPerChapter: avgWords,
42
+ approved,
43
+ pending,
44
+ failed,
45
+ });
46
+ if (!opts.json) {
47
+ log(` ${book.title} (${id})`);
48
+ log(` Status: ${book.status}`);
49
+ log(` Platform: ${book.platform} | Genre: ${book.genre}`);
50
+ log(` Chapters: ${nextChapter - 1} / ${book.targetChapters}`);
51
+ log(` Words: ${totalWords.toLocaleString()} (avg ${avgWords}/ch)`);
52
+ log(` Approved: ${approved} | Pending: ${pending} | Failed: ${failed}`);
53
+ log("");
54
+ }
55
+ }
56
+ if (opts.json) {
57
+ log(JSON.stringify({ project: root, books: booksData }, null, 2));
30
58
  }
31
59
  }
32
60
  catch (e) {
33
- logError(`Failed to get status: ${e}`);
61
+ if (opts.json) {
62
+ log(JSON.stringify({ error: String(e) }));
63
+ }
64
+ else {
65
+ logError(`Failed to get status: ${e}`);
66
+ }
34
67
  process.exit(1);
35
68
  }
36
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,qBAAqB,CAAC;KAClC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QAErC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC;QAExC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC9B,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,EAAE,CAAC,CAAC;QAER,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;YAEzD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;YACvE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,kBAAkB,CACzC,CAAC,MAAM,CAAC;YACT,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,cAAc,CACrC,CAAC,MAAM,CAAC;YAET,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/B,GAAG,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClC,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9E,GAAG,CAAC,iBAAiB,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACjE,GAAG,CAAC,cAAc,UAAU,CAAC,cAAc,EAAE,SAAS,QAAQ,MAAM,CAAC,CAAC;YACtE,GAAG,CAAC,iBAAiB,QAAQ,eAAe,OAAO,cAAc,MAAM,EAAE,CAAC,CAAC;YAC3E,GAAG,CAAC,EAAE,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const styleCommand: Command;
3
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/commands/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAC8B,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { Command } from "commander";
2
+ import { StateManager, analyzeStyle } from "@actalk/inkos-core";
3
+ import { findProjectRoot, resolveBookId, log, logError } from "../utils.js";
4
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
5
+ import { join, resolve } from "node:path";
6
+ export const styleCommand = new Command("style")
7
+ .description("Style fingerprint analysis and import");
8
+ styleCommand
9
+ .command("analyze")
10
+ .description("Analyze a text file and extract style profile")
11
+ .argument("<file>", "Text file to analyze")
12
+ .option("--name <name>", "Source name for the profile")
13
+ .option("--json", "Output JSON only")
14
+ .action(async (file, opts) => {
15
+ try {
16
+ const text = await readFile(resolve(file), "utf-8");
17
+ const profile = analyzeStyle(text, opts.name ?? file);
18
+ if (opts.json) {
19
+ log(JSON.stringify(profile, null, 2));
20
+ }
21
+ else {
22
+ log("Style Profile:");
23
+ log(` Source: ${profile.sourceName ?? "unknown"}`);
24
+ log(` Avg sentence length: ${profile.avgSentenceLength} chars`);
25
+ log(` Sentence length std dev: ${profile.sentenceLengthStdDev}`);
26
+ log(` Avg paragraph length: ${profile.avgParagraphLength} chars`);
27
+ log(` Paragraph range: ${profile.paragraphLengthRange.min}-${profile.paragraphLengthRange.max} chars`);
28
+ log(` Vocabulary diversity (TTR): ${profile.vocabularyDiversity}`);
29
+ if (profile.topPatterns.length > 0) {
30
+ log(` Top patterns: ${profile.topPatterns.join(", ")}`);
31
+ }
32
+ if (profile.rhetoricalFeatures.length > 0) {
33
+ log(` Rhetorical features: ${profile.rhetoricalFeatures.join(", ")}`);
34
+ }
35
+ }
36
+ }
37
+ catch (e) {
38
+ logError(`Analysis failed: ${e}`);
39
+ process.exit(1);
40
+ }
41
+ });
42
+ styleCommand
43
+ .command("import")
44
+ .description("Import a style profile into a book")
45
+ .argument("<file>", "Text file to analyze and import")
46
+ .argument("[book-id]", "Book ID (auto-detected if only one book)")
47
+ .option("--name <name>", "Source name for the profile")
48
+ .action(async (file, bookIdArg, opts) => {
49
+ try {
50
+ const root = findProjectRoot();
51
+ const bookId = await resolveBookId(bookIdArg, root);
52
+ const state = new StateManager(root);
53
+ const bookDir = state.bookDir(bookId);
54
+ const text = await readFile(resolve(file), "utf-8");
55
+ const profile = analyzeStyle(text, opts.name ?? file);
56
+ const storyDir = join(bookDir, "story");
57
+ await mkdir(storyDir, { recursive: true });
58
+ await writeFile(join(storyDir, "style_profile.json"), JSON.stringify(profile, null, 2), "utf-8");
59
+ log(`Style profile imported to "${bookId}" from "${file}"`);
60
+ log(` Avg sentence: ${profile.avgSentenceLength} chars, TTR: ${profile.vocabularyDiversity}`);
61
+ }
62
+ catch (e) {
63
+ logError(`Import failed: ${e}`);
64
+ process.exit(1);
65
+ }
66
+ });
67
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/commands/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uCAAuC,CAAC,CAAC;AAExD,YAAY;KACT,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;KAC1C,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACpC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAI,EAAE,EAAE;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACtB,GAAG,CAAC,aAAa,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,0BAA0B,OAAO,CAAC,iBAAiB,QAAQ,CAAC,CAAC;YACjE,GAAG,CAAC,8BAA8B,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;YAClE,GAAG,CAAC,2BAA2B,OAAO,CAAC,kBAAkB,QAAQ,CAAC,CAAC;YACnE,GAAG,CAAC,sBAAsB,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC;YACxG,GAAG,CAAC,iCAAiC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACpE,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,mBAAmB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,0BAA0B,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,YAAY;KACT,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;KACrD,QAAQ,CAAC,WAAW,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;KACtD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAA6B,EAAE,IAAI,EAAE,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,CACb,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAChC,OAAO,CACR,CAAC;QAEF,GAAG,CAAC,8BAA8B,MAAM,WAAW,IAAI,GAAG,CAAC,CAAC;QAC5D,GAAG,CAAC,mBAAmB,OAAO,CAAC,iBAAiB,gBAAgB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACjG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const updateCommand: Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SA6BtB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Command } from "commander";
2
+ import { execSync } from "node:child_process";
3
+ import { log, logError } from "../utils.js";
4
+ export const updateCommand = new Command("update")
5
+ .description("Update InkOS to the latest version")
6
+ .action(async () => {
7
+ try {
8
+ log("Checking for updates...");
9
+ const current = execSync("npm list -g @actalk/inkos --depth=0 --json 2>/dev/null", {
10
+ encoding: "utf-8",
11
+ });
12
+ const currentVersion = JSON.parse(current)?.dependencies?.["@actalk/inkos"]?.version ?? "unknown";
13
+ log(`Current version: ${currentVersion}`);
14
+ log("Installing latest version...");
15
+ execSync("npm install -g @actalk/inkos@latest", {
16
+ stdio: "inherit",
17
+ });
18
+ const updated = execSync("inkos --version", { encoding: "utf-8" }).trim();
19
+ if (updated === currentVersion) {
20
+ log(`Already up to date (${updated}).`);
21
+ }
22
+ else {
23
+ log(`Updated: ${currentVersion} → ${updated}`);
24
+ }
25
+ }
26
+ catch (e) {
27
+ logError(`Update failed: ${e}`);
28
+ log("You can also update manually: npm install -g @actalk/inkos@latest");
29
+ process.exit(1);
30
+ }
31
+ });
32
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,wDAAwD,EAAE;YACjF,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,IAAI,SAAS,CAAC;QAElG,GAAG,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC;QAC1C,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAEpC,QAAQ,CAAC,qCAAqC,EAAE;YAC9C,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,GAAG,CAAC,uBAAuB,OAAO,IAAI,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,YAAY,cAAc,MAAM,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SACO,CAAC"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SACO,CAAC"}
@@ -2,22 +2,24 @@ import { Command } from "commander";
2
2
  import { PipelineRunner, StateManager } from "@actalk/inkos-core";
3
3
  import { readdir, unlink } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
- import { loadConfig, createClient, findProjectRoot, resolveContext, log, logError } from "../utils.js";
5
+ import { createInterface } from "node:readline";
6
+ import { loadConfig, createClient, findProjectRoot, resolveContext, resolveBookId, log, logError } from "../utils.js";
6
7
  export const writeCommand = new Command("write")
7
8
  .description("Write chapters");
8
9
  writeCommand
9
10
  .command("next")
10
11
  .description("Write the next chapter for a book")
11
- .argument("<book-id>", "Book ID")
12
+ .argument("[book-id]", "Book ID (auto-detected if only one book)")
12
13
  .option("--count <n>", "Number of chapters to write", "1")
13
14
  .option("--context <text>", "Creative guidance (natural language)")
14
15
  .option("--context-file <path>", "Read guidance from file")
15
16
  .option("--json", "Output JSON")
16
- .action(async (bookId, opts) => {
17
+ .action(async (bookIdArg, opts) => {
17
18
  try {
18
19
  const config = await loadConfig();
19
20
  const client = createClient(config);
20
21
  const root = findProjectRoot();
22
+ const bookId = await resolveBookId(bookIdArg, root);
21
23
  const context = await resolveContext(opts);
22
24
  const pipeline = new PipelineRunner({
23
25
  client,
@@ -30,7 +32,7 @@ writeCommand
30
32
  const results = [];
31
33
  for (let i = 0; i < count; i++) {
32
34
  if (!opts.json)
33
- log(`Writing chapter for "${bookId}"...`);
35
+ log(`[${i + 1}/${count}] Writing chapter for "${bookId}"...`);
34
36
  const result = await pipeline.writeNextChapter(bookId);
35
37
  results.push(result);
36
38
  if (!opts.json) {
@@ -58,56 +60,94 @@ writeCommand
58
60
  }
59
61
  }
60
62
  catch (e) {
61
- logError(`Failed to write chapter: ${e}`);
63
+ if (opts.json) {
64
+ log(JSON.stringify({ error: String(e) }));
65
+ }
66
+ else {
67
+ logError(`Failed to write chapter: ${e}`);
68
+ }
62
69
  process.exit(1);
63
70
  }
64
71
  });
65
72
  writeCommand
66
73
  .command("rewrite")
67
- .description("Re-generate a specific chapter (removes it and writes fresh)")
68
- .argument("<book-id>", "Book ID")
69
- .argument("<chapter>", "Chapter number to rewrite")
70
- .action(async (bookId, chapterStr) => {
74
+ .description("Re-generate a specific chapter: rewrite [book-id] <chapter>")
75
+ .argument("<args...>", "Book ID (optional) and chapter number")
76
+ .option("--force", "Skip confirmation prompt")
77
+ .option("--json", "Output JSON")
78
+ .action(async (args, opts) => {
71
79
  try {
72
80
  const config = await loadConfig();
73
81
  const client = createClient(config);
74
82
  const root = findProjectRoot();
75
- const chapterNum = parseInt(chapterStr, 10);
83
+ let bookId;
84
+ let chapter;
85
+ if (args.length === 1) {
86
+ chapter = parseInt(args[0], 10);
87
+ if (isNaN(chapter))
88
+ throw new Error(`Expected chapter number, got "${args[0]}"`);
89
+ bookId = await resolveBookId(undefined, root);
90
+ }
91
+ else if (args.length === 2) {
92
+ chapter = parseInt(args[1], 10);
93
+ if (isNaN(chapter))
94
+ throw new Error(`Expected chapter number, got "${args[1]}"`);
95
+ bookId = await resolveBookId(args[0], root);
96
+ }
97
+ else {
98
+ throw new Error("Usage: inkos write rewrite [book-id] <chapter>");
99
+ }
100
+ if (!opts.force) {
101
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
102
+ const answer = await new Promise((resolve) => {
103
+ rl.question(`Rewrite chapter ${chapter} of "${bookId}"? This will delete chapter ${chapter} and all later chapters. (y/N) `, resolve);
104
+ });
105
+ rl.close();
106
+ if (answer.toLowerCase() !== "y") {
107
+ log("Cancelled.");
108
+ return;
109
+ }
110
+ }
76
111
  const state = new StateManager(root);
77
112
  const bookDir = state.bookDir(bookId);
78
113
  const chaptersDir = join(bookDir, "chapters");
79
114
  // Remove existing chapter file
80
115
  const files = await readdir(chaptersDir);
81
- const paddedNum = String(chapterNum).padStart(4, "0");
116
+ const paddedNum = String(chapter).padStart(4, "0");
82
117
  const existing = files.filter((f) => f.startsWith(paddedNum) && f.endsWith(".md"));
83
118
  for (const f of existing) {
84
119
  await unlink(join(chaptersDir, f));
85
- log(`Removed: ${f}`);
120
+ if (!opts.json)
121
+ log(`Removed: ${f}`);
86
122
  }
87
123
  // Remove from index (and all chapters after it)
88
124
  const index = await state.loadChapterIndex(bookId);
89
- const trimmed = index.filter((ch) => ch.number < chapterNum);
125
+ const trimmed = index.filter((ch) => ch.number < chapter);
90
126
  await state.saveChapterIndex(bookId, trimmed);
91
127
  // Also remove later chapter files since state will be rolled back
92
128
  const laterFiles = files.filter((f) => {
93
129
  const num = parseInt(f.slice(0, 4), 10);
94
- return num > chapterNum && f.endsWith(".md");
130
+ return num > chapter && f.endsWith(".md");
95
131
  });
96
132
  for (const f of laterFiles) {
97
133
  await unlink(join(chaptersDir, f));
98
- log(`Removed later chapter: ${f}`);
134
+ if (!opts.json)
135
+ log(`Removed later chapter: ${f}`);
99
136
  }
100
137
  // Restore state to previous chapter's end-state
101
- if (chapterNum > 1) {
102
- const restored = await state.restoreState(bookId, chapterNum - 1);
138
+ if (chapter > 1) {
139
+ const restored = await state.restoreState(bookId, chapter - 1);
103
140
  if (restored) {
104
- log(`State restored from chapter ${chapterNum - 1} snapshot.`);
141
+ if (!opts.json)
142
+ log(`State restored from chapter ${chapter - 1} snapshot.`);
105
143
  }
106
144
  else {
107
- log(`Warning: no snapshot for chapter ${chapterNum - 1}. Using current state.`);
145
+ if (!opts.json)
146
+ log(`Warning: no snapshot for chapter ${chapter - 1}. Using current state.`);
108
147
  }
109
148
  }
110
- log(`Regenerating chapter ${chapterNum}...`);
149
+ if (!opts.json)
150
+ log(`Regenerating chapter ${chapter}...`);
111
151
  const pipeline = new PipelineRunner({
112
152
  client,
113
153
  model: config.llm.model,
@@ -115,13 +155,23 @@ writeCommand
115
155
  notifyChannels: config.notify,
116
156
  });
117
157
  const result = await pipeline.writeNextChapter(bookId);
118
- log(` Chapter ${result.chapterNumber}: ${result.title}`);
119
- log(` Words: ${result.wordCount}`);
120
- log(` Audit: ${result.auditResult.passed ? "PASSED" : "NEEDS REVIEW"}`);
121
- log(` Status: ${result.status}`);
158
+ if (opts.json) {
159
+ log(JSON.stringify(result, null, 2));
160
+ }
161
+ else {
162
+ log(` Chapter ${result.chapterNumber}: ${result.title}`);
163
+ log(` Words: ${result.wordCount}`);
164
+ log(` Audit: ${result.auditResult.passed ? "PASSED" : "NEEDS REVIEW"}`);
165
+ log(` Status: ${result.status}`);
166
+ }
122
167
  }
123
168
  catch (e) {
124
- logError(`Failed to rewrite chapter: ${e}`);
169
+ if (opts.json) {
170
+ log(JSON.stringify({ error: String(e) }));
171
+ }
172
+ else {
173
+ logError(`Failed to rewrite chapter: ${e}`);
174
+ }
125
175
  process.exit(1);
126
176
  }
127
177
  });
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/commands/write.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,11 +15,14 @@ import { auditCommand } from "./commands/audit.js";
15
15
  import { reviseCommand } from "./commands/revise.js";
16
16
  import { agentCommand } from "./commands/agent.js";
17
17
  import { genreCommand } from "./commands/genre.js";
18
+ import { updateCommand } from "./commands/update.js";
19
+ import { detectCommand } from "./commands/detect.js";
20
+ import { styleCommand } from "./commands/style.js";
18
21
  const program = new Command();
19
22
  program
20
23
  .name("inkos")
21
24
  .description("InkOS — Multi-agent novel production system")
22
- .version("0.2.0");
25
+ .version("0.3.5");
23
26
  program.addCommand(initCommand);
24
27
  program.addCommand(configCommand);
25
28
  program.addCommand(bookCommand);
@@ -36,5 +39,8 @@ program.addCommand(auditCommand);
36
39
  program.addCommand(reviseCommand);
37
40
  program.addCommand(agentCommand);
38
41
  program.addCommand(genreCommand);
42
+ program.addCommand(updateCommand);
43
+ program.addCommand(detectCommand);
44
+ program.addCommand(styleCommand);
39
45
  program.parse();
40
46
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,6CAA6C,CAAC;KAC1D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  import { type ProjectConfig } from "@actalk/inkos-core";
2
+ export declare const GLOBAL_CONFIG_DIR: string;
3
+ export declare const GLOBAL_ENV_PATH: string;
2
4
  export declare function resolveContext(opts: {
3
5
  readonly context?: string;
4
6
  readonly contextFile?: string;
@@ -8,4 +10,9 @@ export declare function loadConfig(): Promise<ProjectConfig>;
8
10
  export declare function createClient(config: ProjectConfig): import("@actalk/inkos-core").LLMClient;
9
11
  export declare function log(message: string): void;
10
12
  export declare function logError(message: string): void;
13
+ /**
14
+ * Resolve book-id: if provided use it, otherwise auto-detect when exactly one book exists.
15
+ * Validates that the book actually exists.
16
+ */
17
+ export declare function resolveBookId(bookIdArg: string | undefined, root: string): Promise<string>;
11
18
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,aAAa,EAAuB,MAAM,oBAAoB,CAAC;AAE9F,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe9B;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAwBzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,0CAEjD;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,aAAa,EAAuB,MAAM,oBAAoB,CAAC;AAE5G,eAAO,MAAM,iBAAiB,QAA4B,CAAC;AAC3D,eAAO,MAAM,eAAe,QAAkC,CAAC;AAE/D,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAe9B;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAqCzD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,0CAEjD;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
package/dist/utils.js CHANGED
@@ -1,7 +1,10 @@
1
1
  import { readFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
2
3
  import { join, resolve } from "node:path";
3
4
  import { config as loadEnv } from "dotenv";
4
- import { createLLMClient, ProjectConfigSchema } from "@actalk/inkos-core";
5
+ import { createLLMClient, StateManager, ProjectConfigSchema } from "@actalk/inkos-core";
6
+ export const GLOBAL_CONFIG_DIR = join(homedir(), ".inkos");
7
+ export const GLOBAL_ENV_PATH = join(GLOBAL_CONFIG_DIR, ".env");
5
8
  export async function resolveContext(opts) {
6
9
  if (opts.context)
7
10
  return opts.context;
@@ -25,8 +28,9 @@ export function findProjectRoot() {
25
28
  }
26
29
  export async function loadConfig() {
27
30
  const root = findProjectRoot();
28
- // Load .env from project root
29
- loadEnv({ path: join(root, ".env") });
31
+ // Load global ~/.inkos/.env first, then project .env overrides
32
+ loadEnv({ path: GLOBAL_ENV_PATH });
33
+ loadEnv({ path: join(root, ".env"), override: true });
30
34
  const configPath = join(root, "inkos.json");
31
35
  try {
32
36
  const raw = await readFile(configPath, "utf-8");
@@ -37,14 +41,26 @@ export async function loadConfig() {
37
41
  config.llm.provider = env.INKOS_LLM_PROVIDER;
38
42
  if (env.INKOS_LLM_BASE_URL)
39
43
  config.llm.baseUrl = env.INKOS_LLM_BASE_URL;
40
- if (env.INKOS_LLM_API_KEY)
41
- config.llm.apiKey = env.INKOS_LLM_API_KEY;
42
44
  if (env.INKOS_LLM_MODEL)
43
45
  config.llm.model = env.INKOS_LLM_MODEL;
46
+ if (env.INKOS_LLM_TEMPERATURE)
47
+ config.llm.temperature = parseFloat(env.INKOS_LLM_TEMPERATURE);
48
+ if (env.INKOS_LLM_MAX_TOKENS)
49
+ config.llm.maxTokens = parseInt(env.INKOS_LLM_MAX_TOKENS, 10);
50
+ if (env.INKOS_LLM_THINKING_BUDGET)
51
+ config.llm.thinkingBudget = parseInt(env.INKOS_LLM_THINKING_BUDGET, 10);
52
+ if (env.INKOS_LLM_API_FORMAT)
53
+ config.llm.apiFormat = env.INKOS_LLM_API_FORMAT;
54
+ // API key ONLY from env — never stored in inkos.json
55
+ const apiKey = env.INKOS_LLM_API_KEY;
56
+ if (!apiKey) {
57
+ throw new Error("INKOS_LLM_API_KEY not set. Run 'inkos config set-global' or add it to project .env file.");
58
+ }
59
+ config.llm.apiKey = apiKey;
44
60
  return ProjectConfigSchema.parse(config);
45
61
  }
46
62
  catch (e) {
47
- throw new Error(`Failed to load inkos.json from ${root}. Run 'inkos init' first.`);
63
+ throw new Error(`inkos.json not found in ${root}.\nMake sure you are inside an InkOS project directory (cd into the project created by 'inkos init').`);
48
64
  }
49
65
  }
50
66
  export function createClient(config) {
@@ -56,4 +72,26 @@ export function log(message) {
56
72
  export function logError(message) {
57
73
  process.stderr.write(`[ERROR] ${message}\n`);
58
74
  }
75
+ /**
76
+ * Resolve book-id: if provided use it, otherwise auto-detect when exactly one book exists.
77
+ * Validates that the book actually exists.
78
+ */
79
+ export async function resolveBookId(bookIdArg, root) {
80
+ const state = new StateManager(root);
81
+ const books = await state.listBooks();
82
+ if (bookIdArg) {
83
+ if (!books.includes(bookIdArg)) {
84
+ const available = books.length > 0 ? books.join(", ") : "(none)";
85
+ throw new Error(`Book "${bookIdArg}" not found. Available books: ${available}`);
86
+ }
87
+ return bookIdArg;
88
+ }
89
+ if (books.length === 0) {
90
+ throw new Error("No books found. Create one first:\n inkos book create --title '...' --genre xuanhuan");
91
+ }
92
+ if (books.length === 1) {
93
+ return books[0];
94
+ }
95
+ throw new Error(`Multiple books found: ${books.join(", ")}\nPlease specify a book-id.`);
96
+ }
59
97
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actalk/inkos",
3
- "version": "0.3.1",
3
+ "version": "0.3.5",
4
4
  "description": "InkOS CLI — multi-agent novel production system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,9 +16,9 @@
16
16
  "directory": "packages/cli"
17
17
  },
18
18
  "dependencies": {
19
+ "@actalk/inkos-core": "0.3.5",
19
20
  "commander": "^13.0.0",
20
- "dotenv": "^16.4.0",
21
- "@actalk/inkos-core": "0.3.1"
21
+ "dotenv": "^16.4.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "typescript": "^5.8.0",