inkos-n 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/dist/commands/agent.d.ts +3 -0
  2. package/dist/commands/agent.d.ts.map +1 -0
  3. package/dist/commands/agent.js +59 -0
  4. package/dist/commands/agent.js.map +1 -0
  5. package/dist/commands/analytics.d.ts +3 -0
  6. package/dist/commands/analytics.d.ts.map +1 -0
  7. package/dist/commands/analytics.js +74 -0
  8. package/dist/commands/analytics.js.map +1 -0
  9. package/dist/commands/audit.d.ts +3 -0
  10. package/dist/commands/audit.d.ts.map +1 -0
  11. package/dist/commands/audit.js +52 -0
  12. package/dist/commands/audit.js.map +1 -0
  13. package/dist/commands/book.d.ts +3 -0
  14. package/dist/commands/book.d.ts.map +1 -0
  15. package/dist/commands/book.js +250 -0
  16. package/dist/commands/book.js.map +1 -0
  17. package/dist/commands/compose.d.ts +3 -0
  18. package/dist/commands/compose.d.ts.map +1 -0
  19. package/dist/commands/compose.js +47 -0
  20. package/dist/commands/compose.js.map +1 -0
  21. package/dist/commands/config.d.ts +3 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +293 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/consolidate.d.ts +3 -0
  26. package/dist/commands/consolidate.d.ts.map +1 -0
  27. package/dist/commands/consolidate.js +50 -0
  28. package/dist/commands/consolidate.js.map +1 -0
  29. package/dist/commands/daemon.d.ts +4 -0
  30. package/dist/commands/daemon.d.ts.map +1 -0
  31. package/dist/commands/daemon.js +118 -0
  32. package/dist/commands/daemon.js.map +1 -0
  33. package/dist/commands/detect.d.ts +3 -0
  34. package/dist/commands/detect.d.ts.map +1 -0
  35. package/dist/commands/detect.js +104 -0
  36. package/dist/commands/detect.js.map +1 -0
  37. package/dist/commands/doctor.d.ts +3 -0
  38. package/dist/commands/doctor.d.ts.map +1 -0
  39. package/dist/commands/doctor.js +233 -0
  40. package/dist/commands/doctor.js.map +1 -0
  41. package/dist/commands/draft.d.ts +3 -0
  42. package/dist/commands/draft.d.ts.map +1 -0
  43. package/dist/commands/draft.js +42 -0
  44. package/dist/commands/draft.js.map +1 -0
  45. package/dist/commands/eval.d.ts +3 -0
  46. package/dist/commands/eval.d.ts.map +1 -0
  47. package/dist/commands/eval.js +168 -0
  48. package/dist/commands/eval.js.map +1 -0
  49. package/dist/commands/export.d.ts +3 -0
  50. package/dist/commands/export.d.ts.map +1 -0
  51. package/dist/commands/export.js +115 -0
  52. package/dist/commands/export.js.map +1 -0
  53. package/dist/commands/fanfic.d.ts +3 -0
  54. package/dist/commands/fanfic.d.ts.map +1 -0
  55. package/dist/commands/fanfic.js +180 -0
  56. package/dist/commands/fanfic.js.map +1 -0
  57. package/dist/commands/genre.d.ts +3 -0
  58. package/dist/commands/genre.d.ts.map +1 -0
  59. package/dist/commands/genre.js +152 -0
  60. package/dist/commands/genre.js.map +1 -0
  61. package/dist/commands/import.d.ts +3 -0
  62. package/dist/commands/import.d.ts.map +1 -0
  63. package/dist/commands/import.js +136 -0
  64. package/dist/commands/import.js.map +1 -0
  65. package/dist/commands/init.d.ts +3 -0
  66. package/dist/commands/init.d.ts.map +1 -0
  67. package/dist/commands/init.js +132 -0
  68. package/dist/commands/init.js.map +1 -0
  69. package/dist/commands/interact.d.ts +25 -0
  70. package/dist/commands/interact.d.ts.map +1 -0
  71. package/dist/commands/interact.js +73 -0
  72. package/dist/commands/interact.js.map +1 -0
  73. package/dist/commands/plan.d.ts +3 -0
  74. package/dist/commands/plan.d.ts.map +1 -0
  75. package/dist/commands/plan.js +51 -0
  76. package/dist/commands/plan.js.map +1 -0
  77. package/dist/commands/radar.d.ts +3 -0
  78. package/dist/commands/radar.d.ts.map +1 -0
  79. package/dist/commands/radar.js +52 -0
  80. package/dist/commands/radar.js.map +1 -0
  81. package/dist/commands/review.d.ts +3 -0
  82. package/dist/commands/review.d.ts.map +1 -0
  83. package/dist/commands/review.js +229 -0
  84. package/dist/commands/review.js.map +1 -0
  85. package/dist/commands/revise.d.ts +3 -0
  86. package/dist/commands/revise.d.ts.map +1 -0
  87. package/dist/commands/revise.js +60 -0
  88. package/dist/commands/revise.js.map +1 -0
  89. package/dist/commands/status.d.ts +3 -0
  90. package/dist/commands/status.d.ts.map +1 -0
  91. package/dist/commands/status.js +123 -0
  92. package/dist/commands/status.js.map +1 -0
  93. package/dist/commands/studio.d.ts +14 -0
  94. package/dist/commands/studio.d.ts.map +1 -0
  95. package/dist/commands/studio.js +120 -0
  96. package/dist/commands/studio.js.map +1 -0
  97. package/dist/commands/style.d.ts +3 -0
  98. package/dist/commands/style.d.ts.map +1 -0
  99. package/dist/commands/style.js +95 -0
  100. package/dist/commands/style.js.map +1 -0
  101. package/dist/commands/tui.d.ts +6 -0
  102. package/dist/commands/tui.d.ts.map +1 -0
  103. package/dist/commands/tui.js +14 -0
  104. package/dist/commands/tui.js.map +1 -0
  105. package/dist/commands/update.d.ts +3 -0
  106. package/dist/commands/update.d.ts.map +1 -0
  107. package/dist/commands/update.js +40 -0
  108. package/dist/commands/update.js.map +1 -0
  109. package/dist/commands/write.d.ts +3 -0
  110. package/dist/commands/write.d.ts.map +1 -0
  111. package/dist/commands/write.js +323 -0
  112. package/dist/commands/write.js.map +1 -0
  113. package/dist/index.d.ts +3 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +4 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/localization.d.ts +38 -0
  118. package/dist/localization.d.ts.map +1 -0
  119. package/dist/localization.js +144 -0
  120. package/dist/localization.js.map +1 -0
  121. package/dist/program.d.ts +10 -0
  122. package/dist/program.d.ts.map +1 -0
  123. package/dist/program.js +85 -0
  124. package/dist/program.js.map +1 -0
  125. package/dist/progress-text.d.ts +26 -0
  126. package/dist/progress-text.d.ts.map +1 -0
  127. package/dist/progress-text.js +35 -0
  128. package/dist/progress-text.js.map +1 -0
  129. package/dist/runtime-requirements.d.ts +28 -0
  130. package/dist/runtime-requirements.d.ts.map +1 -0
  131. package/dist/runtime-requirements.js +99 -0
  132. package/dist/runtime-requirements.js.map +1 -0
  133. package/dist/tui/__tests__/markdown.test.d.ts +2 -0
  134. package/dist/tui/__tests__/markdown.test.d.ts.map +1 -0
  135. package/dist/tui/__tests__/markdown.test.js +58 -0
  136. package/dist/tui/__tests__/markdown.test.js.map +1 -0
  137. package/dist/tui/activity-state.d.ts +10 -0
  138. package/dist/tui/activity-state.d.ts.map +1 -0
  139. package/dist/tui/activity-state.js +27 -0
  140. package/dist/tui/activity-state.js.map +1 -0
  141. package/dist/tui/ansi.d.ts +40 -0
  142. package/dist/tui/ansi.d.ts.map +1 -0
  143. package/dist/tui/ansi.js +62 -0
  144. package/dist/tui/ansi.js.map +1 -0
  145. package/dist/tui/app.d.ts +103 -0
  146. package/dist/tui/app.d.ts.map +1 -0
  147. package/dist/tui/app.js +151 -0
  148. package/dist/tui/app.js.map +1 -0
  149. package/dist/tui/chat-depth.d.ts +9 -0
  150. package/dist/tui/chat-depth.d.ts.map +1 -0
  151. package/dist/tui/chat-depth.js +14 -0
  152. package/dist/tui/chat-depth.js.map +1 -0
  153. package/dist/tui/chat-draft.d.ts +4 -0
  154. package/dist/tui/chat-draft.d.ts.map +1 -0
  155. package/dist/tui/chat-draft.js +28 -0
  156. package/dist/tui/chat-draft.js.map +1 -0
  157. package/dist/tui/composer-caret.d.ts +10 -0
  158. package/dist/tui/composer-caret.d.ts.map +1 -0
  159. package/dist/tui/composer-caret.js +13 -0
  160. package/dist/tui/composer-caret.js.map +1 -0
  161. package/dist/tui/composer-display.d.ts +7 -0
  162. package/dist/tui/composer-display.d.ts.map +1 -0
  163. package/dist/tui/composer-display.js +17 -0
  164. package/dist/tui/composer-display.js.map +1 -0
  165. package/dist/tui/dashboard-model.d.ts +46 -0
  166. package/dist/tui/dashboard-model.d.ts.map +1 -0
  167. package/dist/tui/dashboard-model.js +105 -0
  168. package/dist/tui/dashboard-model.js.map +1 -0
  169. package/dist/tui/dashboard.d.ts +39 -0
  170. package/dist/tui/dashboard.d.ts.map +1 -0
  171. package/dist/tui/dashboard.js +348 -0
  172. package/dist/tui/dashboard.js.map +1 -0
  173. package/dist/tui/effects.d.ts +61 -0
  174. package/dist/tui/effects.d.ts.map +1 -0
  175. package/dist/tui/effects.js +459 -0
  176. package/dist/tui/effects.js.map +1 -0
  177. package/dist/tui/i18n.d.ts +69 -0
  178. package/dist/tui/i18n.d.ts.map +1 -0
  179. package/dist/tui/i18n.js +239 -0
  180. package/dist/tui/i18n.js.map +1 -0
  181. package/dist/tui/input-history.d.ts +12 -0
  182. package/dist/tui/input-history.d.ts.map +1 -0
  183. package/dist/tui/input-history.js +47 -0
  184. package/dist/tui/input-history.js.map +1 -0
  185. package/dist/tui/local-commands.d.ts +5 -0
  186. package/dist/tui/local-commands.d.ts.map +1 -0
  187. package/dist/tui/local-commands.js +43 -0
  188. package/dist/tui/local-commands.js.map +1 -0
  189. package/dist/tui/markdown.d.ts +2 -0
  190. package/dist/tui/markdown.d.ts.map +1 -0
  191. package/dist/tui/markdown.js +60 -0
  192. package/dist/tui/markdown.js.map +1 -0
  193. package/dist/tui/output.d.ts +11 -0
  194. package/dist/tui/output.d.ts.map +1 -0
  195. package/dist/tui/output.js +24 -0
  196. package/dist/tui/output.js.map +1 -0
  197. package/dist/tui/session-store.d.ts +2 -0
  198. package/dist/tui/session-store.d.ts.map +1 -0
  199. package/dist/tui/session-store.js +2 -0
  200. package/dist/tui/session-store.js.map +1 -0
  201. package/dist/tui/setup.d.ts +49 -0
  202. package/dist/tui/setup.d.ts.map +1 -0
  203. package/dist/tui/setup.js +268 -0
  204. package/dist/tui/setup.js.map +1 -0
  205. package/dist/tui/slash-autocomplete.d.ts +6 -0
  206. package/dist/tui/slash-autocomplete.d.ts.map +1 -0
  207. package/dist/tui/slash-autocomplete.js +50 -0
  208. package/dist/tui/slash-autocomplete.js.map +1 -0
  209. package/dist/tui/theme.d.ts +13 -0
  210. package/dist/tui/theme.d.ts.map +1 -0
  211. package/dist/tui/theme.js +15 -0
  212. package/dist/tui/theme.js.map +1 -0
  213. package/dist/tui/tools.d.ts +15 -0
  214. package/dist/tui/tools.d.ts.map +1 -0
  215. package/dist/tui/tools.js +17 -0
  216. package/dist/tui/tools.js.map +1 -0
  217. package/dist/utils.d.ts +25 -0
  218. package/dist/utils.d.ts.map +1 -0
  219. package/dist/utils.js +114 -0
  220. package/dist/utils.js.map +1 -0
  221. package/package.json +3 -3
@@ -0,0 +1,132 @@
1
+ import { Command } from "commander";
2
+ import { access, readFile, writeFile, mkdir } from "node:fs/promises";
3
+ import { join, basename, resolve } from "node:path";
4
+ import { log, logError, GLOBAL_ENV_PATH } from "../utils.js";
5
+ async function hasGlobalConfig() {
6
+ try {
7
+ const content = await readFile(GLOBAL_ENV_PATH, "utf-8");
8
+ return content.includes("INKOS_LLM_API_KEY=") && !content.includes("your-api-key-here");
9
+ }
10
+ catch {
11
+ return false;
12
+ }
13
+ }
14
+ export const initCommand = new Command("init")
15
+ .description("Initialize an InkOS project (current directory by default)")
16
+ .argument("[name]", "Project name (creates subdirectory). Omit to init current directory.")
17
+ .option("--lang <language>", "Default writing language: zh (Chinese) or en (English)", "zh")
18
+ .action(async (name, opts) => {
19
+ const projectDir = name ? resolve(process.cwd(), name) : process.cwd();
20
+ const projectName = basename(projectDir);
21
+ try {
22
+ await mkdir(projectDir, { recursive: true });
23
+ // Check if inkos.json already exists
24
+ const configPath = join(projectDir, "inkos.json");
25
+ try {
26
+ await access(configPath);
27
+ throw new Error(`inkos.json already exists in ${projectDir}. Use a different directory or delete the existing project.`);
28
+ }
29
+ catch (e) {
30
+ if (e instanceof Error && e.message.includes("already exists"))
31
+ throw e;
32
+ // File doesn't exist, good
33
+ }
34
+ await mkdir(join(projectDir, "books"), { recursive: true });
35
+ await mkdir(join(projectDir, "radar"), { recursive: true });
36
+ const config = {
37
+ name: projectName,
38
+ version: "0.1.0",
39
+ language: opts.lang ?? "zh",
40
+ llm: {
41
+ provider: process.env.INKOS_LLM_PROVIDER ?? "openai",
42
+ baseUrl: process.env.INKOS_LLM_BASE_URL ?? "",
43
+ model: process.env.INKOS_LLM_MODEL ?? "",
44
+ },
45
+ notify: [],
46
+ daemon: {
47
+ schedule: {
48
+ radarCron: "0 */6 * * *",
49
+ writeCron: "*/15 * * * *",
50
+ },
51
+ maxConcurrentBooks: 3,
52
+ },
53
+ };
54
+ await writeFile(join(projectDir, "inkos.json"), JSON.stringify(config, null, 2), "utf-8");
55
+ await Promise.all([
56
+ writeFile(join(projectDir, ".nvmrc"), "22\n", "utf-8"),
57
+ writeFile(join(projectDir, ".node-version"), "22\n", "utf-8"),
58
+ ]);
59
+ const global = await hasGlobalConfig();
60
+ if (global) {
61
+ await writeFile(join(projectDir, ".env"), [
62
+ "# Project-level LLM overrides (optional)",
63
+ "# Global config at ~/.inkos/.env will be used by default.",
64
+ "# Uncomment below to override for this project only:",
65
+ "# INKOS_LLM_PROVIDER=openai",
66
+ "# INKOS_LLM_BASE_URL=",
67
+ "# INKOS_LLM_API_KEY=",
68
+ "# INKOS_LLM_MODEL=",
69
+ "",
70
+ "# Web search (optional):",
71
+ "# TAVILY_API_KEY=tvly-xxxxx",
72
+ ].join("\n"), "utf-8");
73
+ }
74
+ else {
75
+ await writeFile(join(projectDir, ".env"), [
76
+ "# LLM Configuration",
77
+ "# Tip: Run 'inkos config set-global' to set once for all projects.",
78
+ "# Provider: openai (OpenAI / compatible proxy), anthropic (Anthropic native)",
79
+ "INKOS_LLM_PROVIDER=openai",
80
+ "INKOS_LLM_BASE_URL=",
81
+ "INKOS_LLM_API_KEY=",
82
+ "INKOS_LLM_MODEL=",
83
+ "",
84
+ "# Optional parameters (defaults shown):",
85
+ "# INKOS_LLM_TEMPERATURE=0.7",
86
+ "# INKOS_LLM_MAX_TOKENS=8192",
87
+ "# INKOS_LLM_THINKING_BUDGET=0 # Anthropic extended thinking budget",
88
+ "# INKOS_LLM_API_FORMAT=chat # chat (default) or responses (OpenAI Responses API)",
89
+ "",
90
+ "# Web search (optional, for auditor era-research):",
91
+ "# TAVILY_API_KEY=tvly-xxxxx # Free at tavily.com (1000 searches/month)",
92
+ "",
93
+ "# Anthropic example:",
94
+ "# INKOS_LLM_PROVIDER=anthropic",
95
+ "# INKOS_LLM_PROVIDER=anthropic",
96
+ "# INKOS_LLM_BASE_URL=",
97
+ "# INKOS_LLM_MODEL=",
98
+ ].join("\n"), "utf-8");
99
+ }
100
+ await writeFile(join(projectDir, ".gitignore"), [".env", "node_modules/", ".DS_Store"].join("\n"), "utf-8");
101
+ log(`Project initialized at ${projectDir}`);
102
+ log("");
103
+ const isEnglish = (opts.lang ?? "zh") === "en";
104
+ const exampleCreate = isEnglish
105
+ ? " inkos book create --title 'My Novel' --genre progression --platform royalroad --lang en"
106
+ : " inkos book create --title '我的小说' --genre xuanhuan --platform tomato";
107
+ if (global) {
108
+ log("Global LLM config detected. Ready to go!");
109
+ log("");
110
+ log("Next steps:");
111
+ if (name)
112
+ log(` cd ${name}`);
113
+ log(exampleCreate);
114
+ }
115
+ else {
116
+ log("Next steps:");
117
+ if (name)
118
+ log(` cd ${name}`);
119
+ log(" # Option 1: Set global config (recommended, one-time):");
120
+ log(" inkos config set-global --provider openai --base-url <your-api-url> --api-key <your-key> --model <your-model>");
121
+ log(" # Option 2: Edit .env for this project only");
122
+ log("");
123
+ log(exampleCreate);
124
+ }
125
+ log(" inkos write next <book-id>");
126
+ }
127
+ catch (e) {
128
+ logError(`Failed to initialize project: ${e}`);
129
+ process.exit(1);
130
+ }
131
+ });
132
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Command } from "commander";
2
+ import { type InteractionRuntimeTools } from "@actalk/inkos-core";
3
+ export interface InteractCommandHooks {
4
+ readonly runInteraction?: (params: {
5
+ readonly projectRoot: string;
6
+ readonly input: string;
7
+ readonly activeBookId?: string;
8
+ readonly tools: InteractionRuntimeTools;
9
+ }) => Promise<{
10
+ readonly request: unknown;
11
+ readonly responseText?: string;
12
+ readonly session: {
13
+ readonly automationMode: string;
14
+ readonly activeBookId?: string;
15
+ readonly currentExecution?: unknown;
16
+ readonly pendingDecision?: unknown;
17
+ readonly messages: ReadonlyArray<unknown>;
18
+ readonly events: ReadonlyArray<unknown>;
19
+ };
20
+ }>;
21
+ readonly createTools?: (projectRoot: string) => Promise<InteractionRuntimeTools>;
22
+ readonly readInput?: () => Promise<string>;
23
+ }
24
+ export declare function createInteractCommand(hooks?: InteractCommandHooks): Command;
25
+ //# sourceMappingURL=interact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact.d.ts","sourceRoot":"","sources":["../../src/commands/interact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAG5B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE;QACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,KAAK,EAAE,uBAAuB,CAAC;KACzC,KAAK,OAAO,CAAC;QACZ,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,OAAO,EAAE;YAChB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;YAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;YAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;YACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;YACnC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;SACzC,CAAC;KACH,CAAC,CAAC;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAsCD,wBAAgB,qBAAqB,CAAC,KAAK,GAAE,oBAAyB,GAAG,OAAO,CA2C/E"}
@@ -0,0 +1,73 @@
1
+ import { Command } from "commander";
2
+ import { processProjectInteractionInput, } from "@actalk/inkos-core";
3
+ import { createInteractionTools } from "../tui/tools.js";
4
+ async function readInteractionInput(args, explicitMessage, readInput) {
5
+ const explicit = explicitMessage?.trim();
6
+ if (explicit) {
7
+ return explicit;
8
+ }
9
+ const inline = args.join(" ").trim();
10
+ if (inline) {
11
+ return inline;
12
+ }
13
+ if (readInput) {
14
+ const provided = (await readInput()).trim();
15
+ if (provided) {
16
+ return provided;
17
+ }
18
+ }
19
+ if (!process.stdin.isTTY) {
20
+ const chunks = [];
21
+ for await (const chunk of process.stdin) {
22
+ chunks.push(chunk);
23
+ }
24
+ const piped = Buffer.concat(chunks).toString("utf-8").trim();
25
+ if (piped) {
26
+ return piped;
27
+ }
28
+ }
29
+ throw new Error("Interaction message is required. Pass text arguments or pipe input via stdin.");
30
+ }
31
+ export function createInteractCommand(hooks = {}) {
32
+ return new Command("interact")
33
+ .description("Run a shared natural-language interaction against the current project")
34
+ .argument("[message...]", "Natural-language message")
35
+ .option("--message <text>", "Explicit natural-language message")
36
+ .option("--book <bookId>", "Bind a specific active book for this interaction")
37
+ .option("--json", "Emit structured JSON for external agents")
38
+ .action(async (messageArgs, opts) => {
39
+ const input = await readInteractionInput(messageArgs, opts.message, hooks.readInput);
40
+ const projectRoot = process.cwd();
41
+ const tools = hooks.createTools
42
+ ? await hooks.createTools(projectRoot)
43
+ : hooks.runInteraction
44
+ ? {}
45
+ : await createInteractionTools(projectRoot);
46
+ const runInteraction = hooks.runInteraction ?? processProjectInteractionInput;
47
+ const result = await runInteraction({
48
+ projectRoot,
49
+ input,
50
+ activeBookId: opts.book,
51
+ tools,
52
+ });
53
+ if (opts.json) {
54
+ process.stdout.write(`${JSON.stringify({
55
+ request: result.request,
56
+ responseText: result.responseText,
57
+ session: result.session,
58
+ currentExecution: result.session.currentExecution ?? null,
59
+ pendingDecision: result.session.pendingDecision ?? null,
60
+ events: result.session.events,
61
+ }, null, 2)}\n`);
62
+ return;
63
+ }
64
+ const text = result.responseText
65
+ ?? (result.session.messages.at(-1) && "content" in result.session.messages.at(-1)
66
+ ? String(result.session.messages.at(-1).content)
67
+ : "");
68
+ if (text) {
69
+ process.stdout.write(`${text}\n`);
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=interact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interact.js","sourceRoot":"","sources":["../../src/commands/interact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const planCommand: Command;
3
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SACsB,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Command } from "commander";
2
+ import { PipelineRunner } from "@actalk/inkos-core";
3
+ import { buildPipelineConfig, findProjectRoot, loadConfig, log, logError, resolveBookId, resolveContext } from "../utils.js";
4
+ export const planCommand = new Command("plan")
5
+ .description("Plan chapter input artifacts");
6
+ planCommand
7
+ .command("chapter")
8
+ .description("Generate chapter intent for the next chapter")
9
+ .argument("[book-id]", "Book ID (auto-detected if only one book)")
10
+ .option("--context <text>", "Chapter steering guidance")
11
+ .option("--context-file <path>", "Read guidance from file")
12
+ .option("--json", "Output JSON")
13
+ .option("-q, --quiet", "Suppress console output")
14
+ .action(async (bookIdArg, opts) => {
15
+ try {
16
+ const config = await loadConfig({ requireApiKey: false });
17
+ const root = findProjectRoot();
18
+ const bookId = await resolveBookId(bookIdArg, root);
19
+ const context = await resolveContext(opts);
20
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root, {
21
+ externalContext: context,
22
+ inputGovernanceMode: "v2",
23
+ quiet: opts.quiet,
24
+ }));
25
+ const result = await pipeline.planChapter(bookId, context);
26
+ if (opts.json) {
27
+ log(JSON.stringify(result, null, 2));
28
+ }
29
+ else {
30
+ log(`Planned chapter ${result.chapterNumber} for "${bookId}"`);
31
+ log(` Goal: ${result.goal}`);
32
+ log(` Intent: ${result.intentPath}`);
33
+ if (result.conflicts.length > 0) {
34
+ log(" Conflicts:");
35
+ for (const conflict of result.conflicts) {
36
+ log(` - ${conflict}`);
37
+ }
38
+ }
39
+ }
40
+ }
41
+ catch (e) {
42
+ if (opts.json) {
43
+ log(JSON.stringify({ error: String(e) }));
44
+ }
45
+ else {
46
+ logError(`Failed to plan chapter: ${e}`);
47
+ }
48
+ process.exit(1);
49
+ }
50
+ });
51
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7H,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8BAA8B,CAAC,CAAC;AAE/C,WAAW;KACR,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,QAAQ,CAAC,WAAW,EAAE,0CAA0C,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,yBAAyB,CAAC;KAC1D,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;KAC/B,MAAM,CAAC,aAAa,EAAE,yBAAyB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,IAAI,EAAE,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,IAAI,cAAc,CACjC,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE;YAChC,eAAe,EAAE,OAAO;YACxB,mBAAmB,EAAE,IAAI;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CACH,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,mBAAmB,MAAM,CAAC,aAAa,SAAS,MAAM,GAAG,CAAC,CAAC;YAC/D,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9B,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACtC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACpB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxC,GAAG,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,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 radarCommand: Command;
3
+ //# sourceMappingURL=radar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar.d.ts","sourceRoot":"","sources":["../../src/commands/radar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SACY,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { Command } from "commander";
2
+ import { PipelineRunner } from "@actalk/inkos-core";
3
+ import { loadConfig, buildPipelineConfig, findProjectRoot, log, logError } from "../utils.js";
4
+ import { writeFile, mkdir } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ export const radarCommand = new Command("radar")
7
+ .description("Market intelligence");
8
+ radarCommand
9
+ .command("scan")
10
+ .description("Scan market for opportunities")
11
+ .option("--json", "Output JSON")
12
+ .action(async (opts) => {
13
+ try {
14
+ const config = await loadConfig();
15
+ const root = findProjectRoot();
16
+ const pipeline = new PipelineRunner(buildPipelineConfig(config, root));
17
+ if (!opts.json)
18
+ log("Scanning market...");
19
+ const result = await pipeline.runRadar();
20
+ // Save radar result
21
+ const radarDir = join(root, "radar");
22
+ await mkdir(radarDir, { recursive: true });
23
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
24
+ const filePath = join(radarDir, `scan-${timestamp}.json`);
25
+ await writeFile(filePath, JSON.stringify(result, null, 2), "utf-8");
26
+ if (opts.json) {
27
+ log(JSON.stringify({ ...result, savedTo: filePath }, null, 2));
28
+ }
29
+ else {
30
+ log(`\nMarket Summary:\n${result.marketSummary}\n`);
31
+ log("Recommendations:");
32
+ for (const rec of result.recommendations) {
33
+ log(` [${(rec.confidence * 100).toFixed(0)}%] ${rec.platform}/${rec.genre}`);
34
+ log(` Concept: ${rec.concept}`);
35
+ log(` Reasoning: ${rec.reasoning}`);
36
+ log(` Benchmarks: ${rec.benchmarkTitles.join(", ")}`);
37
+ log("");
38
+ }
39
+ log(`Radar result saved to radar/scan-${timestamp}.json`);
40
+ }
41
+ }
42
+ catch (e) {
43
+ if (opts.json) {
44
+ log(JSON.stringify({ error: String(e) }));
45
+ }
46
+ else {
47
+ logError(`Radar scan failed: ${e}`);
48
+ }
49
+ process.exit(1);
50
+ }
51
+ });
52
+ //# sourceMappingURL=radar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radar.js","sourceRoot":"","sources":["../../src/commands/radar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const reviewCommand: Command;
3
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SACmB,CAAC"}
@@ -0,0 +1,229 @@
1
+ import { Command } from "commander";
2
+ import { StateManager, formatLengthCount, readGenreProfile, resolveLengthCountingMode } from "@actalk/inkos-core";
3
+ import { findProjectRoot, resolveBookId, log, logError } from "../utils.js";
4
+ export const reviewCommand = new Command("review")
5
+ .description("Review and approve chapters");
6
+ reviewCommand
7
+ .command("list")
8
+ .description("List chapters pending review")
9
+ .argument("[book-id]", "Book ID (optional, lists all books if omitted)")
10
+ .option("--json", "Output JSON")
11
+ .action(async (bookId, opts) => {
12
+ try {
13
+ const root = findProjectRoot();
14
+ const state = new StateManager(root);
15
+ const bookIds = bookId ? [bookId] : await state.listBooks();
16
+ const allPending = [];
17
+ for (const id of bookIds) {
18
+ const index = await state.loadChapterIndex(id);
19
+ const pending = index.filter((ch) => ch.status === "ready-for-review" || ch.status === "audit-failed");
20
+ if (pending.length === 0)
21
+ continue;
22
+ const book = await state.loadBookConfig(id);
23
+ const { profile: genreProfile } = await readGenreProfile(root, book.genre);
24
+ const countingMode = resolveLengthCountingMode(book.language ?? genreProfile.language);
25
+ if (!opts.json) {
26
+ log(`\n${book.title} (${id}):`);
27
+ }
28
+ for (const ch of pending) {
29
+ allPending.push({
30
+ bookId: id,
31
+ title: book.title,
32
+ chapter: ch.number,
33
+ chapterTitle: ch.title,
34
+ wordCount: ch.wordCount,
35
+ status: ch.status,
36
+ issues: ch.auditIssues,
37
+ });
38
+ if (!opts.json) {
39
+ log(` Ch.${ch.number} "${ch.title}" | ${formatLengthCount(ch.wordCount, countingMode)} | ${ch.status}`);
40
+ if (ch.auditIssues.length > 0) {
41
+ for (const issue of ch.auditIssues) {
42
+ log(` - ${issue}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ if (opts.json) {
49
+ log(JSON.stringify({ pending: allPending }, null, 2));
50
+ }
51
+ else if (allPending.length === 0) {
52
+ log("No chapters pending review.");
53
+ }
54
+ }
55
+ catch (e) {
56
+ if (opts.json) {
57
+ log(JSON.stringify({ error: String(e) }));
58
+ }
59
+ else {
60
+ logError(`Failed to list reviews: ${e}`);
61
+ }
62
+ process.exit(1);
63
+ }
64
+ });
65
+ /**
66
+ * Parse "[book-id] <chapter>" style arguments from variadic args.
67
+ * Supports: "3" (auto-detect book) or "my-book 3"
68
+ */
69
+ function parseBookAndChapter(args) {
70
+ if (args.length === 1) {
71
+ const num = parseInt(args[0], 10);
72
+ if (isNaN(num)) {
73
+ throw new Error(`Expected chapter number, got "${args[0]}"`);
74
+ }
75
+ return { bookIdArg: undefined, chapterNum: num };
76
+ }
77
+ if (args.length === 2) {
78
+ const num = parseInt(args[1], 10);
79
+ if (isNaN(num)) {
80
+ throw new Error(`Expected chapter number as second argument, got "${args[1]}"`);
81
+ }
82
+ return { bookIdArg: args[0], chapterNum: num };
83
+ }
84
+ throw new Error("Usage: inkos review approve [book-id] <chapter>");
85
+ }
86
+ reviewCommand
87
+ .command("approve")
88
+ .description("Approve a chapter and commit its state: approve [book-id] <chapter>")
89
+ .argument("<args...>", "Book ID (optional) and chapter number")
90
+ .option("--json", "Output JSON")
91
+ .action(async (args, opts) => {
92
+ try {
93
+ const root = findProjectRoot();
94
+ const { bookIdArg, chapterNum } = parseBookAndChapter(args);
95
+ const bookId = await resolveBookId(bookIdArg, root);
96
+ const state = new StateManager(root);
97
+ const index = [...(await state.loadChapterIndex(bookId))];
98
+ const idx = index.findIndex((ch) => ch.number === chapterNum);
99
+ if (idx === -1) {
100
+ throw new Error(`Chapter ${chapterNum} not found in "${bookId}"`);
101
+ }
102
+ index[idx] = {
103
+ ...index[idx],
104
+ status: "approved",
105
+ updatedAt: new Date().toISOString(),
106
+ };
107
+ await state.saveChapterIndex(bookId, index);
108
+ if (opts.json) {
109
+ log(JSON.stringify({ bookId, chapter: chapterNum, status: "approved" }));
110
+ }
111
+ else {
112
+ log(`Chapter ${chapterNum} approved (state committed).`);
113
+ }
114
+ }
115
+ catch (e) {
116
+ if (opts.json) {
117
+ log(JSON.stringify({ error: String(e) }));
118
+ }
119
+ else {
120
+ logError(`Failed to approve: ${e}`);
121
+ }
122
+ process.exit(1);
123
+ }
124
+ });
125
+ reviewCommand
126
+ .command("approve-all")
127
+ .description("Approve all pending chapters for a book")
128
+ .argument("[book-id]", "Book ID (auto-detected if only one book)")
129
+ .option("--json", "Output JSON")
130
+ .action(async (bookIdArg, opts) => {
131
+ try {
132
+ const root = findProjectRoot();
133
+ const bookId = await resolveBookId(bookIdArg, root);
134
+ const state = new StateManager(root);
135
+ const index = [...(await state.loadChapterIndex(bookId))];
136
+ let count = 0;
137
+ const now = new Date().toISOString();
138
+ const updated = index.map((ch) => {
139
+ if (ch.status === "ready-for-review" || ch.status === "audit-failed") {
140
+ count++;
141
+ return { ...ch, status: "approved", updatedAt: now };
142
+ }
143
+ return ch;
144
+ });
145
+ await state.saveChapterIndex(bookId, updated);
146
+ if (opts.json) {
147
+ log(JSON.stringify({ bookId, approvedCount: count }));
148
+ }
149
+ else {
150
+ log(`${count} chapter(s) approved.`);
151
+ }
152
+ }
153
+ catch (e) {
154
+ if (opts.json) {
155
+ log(JSON.stringify({ error: String(e) }));
156
+ }
157
+ else {
158
+ logError(`Failed to approve: ${e}`);
159
+ }
160
+ process.exit(1);
161
+ }
162
+ });
163
+ reviewCommand
164
+ .command("reject")
165
+ .description("Reject a chapter and roll back state: reject [book-id] <chapter>")
166
+ .argument("<args...>", "Book ID (optional) and chapter number")
167
+ .option("--reason <reason>", "Rejection reason")
168
+ .option("--keep-subsequent", "Only reject this chapter, do not discard subsequent chapters")
169
+ .option("--json", "Output JSON")
170
+ .action(async (args, opts) => {
171
+ try {
172
+ const root = findProjectRoot();
173
+ const { bookIdArg, chapterNum } = parseBookAndChapter(args);
174
+ const bookId = await resolveBookId(bookIdArg, root);
175
+ const state = new StateManager(root);
176
+ const index = await state.loadChapterIndex(bookId);
177
+ const idx = index.findIndex((ch) => ch.number === chapterNum);
178
+ if (idx === -1) {
179
+ throw new Error(`Chapter ${chapterNum} not found in "${bookId}"`);
180
+ }
181
+ if (opts.keepSubsequent) {
182
+ // Legacy behavior: only mark as rejected, no state rollback
183
+ const updated = [...index];
184
+ updated[idx] = {
185
+ ...updated[idx],
186
+ status: "rejected",
187
+ reviewNote: opts.reason ?? "Rejected without reason",
188
+ updatedAt: new Date().toISOString(),
189
+ };
190
+ await state.saveChapterIndex(bookId, updated);
191
+ if (opts.json) {
192
+ log(JSON.stringify({ bookId, chapter: chapterNum, status: "rejected", discarded: [] }));
193
+ }
194
+ else {
195
+ log(`Chapter ${chapterNum} rejected (state not rolled back).`);
196
+ }
197
+ return;
198
+ }
199
+ // Default: roll back state to before the rejected chapter and discard
200
+ // it along with all subsequent chapters that depend on its state.
201
+ const rollbackTarget = chapterNum - 1;
202
+ const discarded = await state.rollbackToChapter(bookId, rollbackTarget);
203
+ if (opts.json) {
204
+ log(JSON.stringify({
205
+ bookId,
206
+ chapter: chapterNum,
207
+ status: "rejected",
208
+ rolledBackTo: rollbackTarget,
209
+ discarded,
210
+ }));
211
+ }
212
+ else {
213
+ log(`Chapter ${chapterNum} rejected. State rolled back to chapter ${rollbackTarget}.`);
214
+ if (discarded.length > 1) {
215
+ log(` Also discarded ${discarded.length - 1} subsequent chapter(s): ${discarded.filter((n) => n !== chapterNum).join(", ")}`);
216
+ }
217
+ }
218
+ }
219
+ catch (e) {
220
+ if (opts.json) {
221
+ log(JSON.stringify({ error: String(e) }));
222
+ }
223
+ else {
224
+ logError(`Failed to reject: ${e}`);
225
+ }
226
+ process.exit(1);
227
+ }
228
+ });
229
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const reviseCommand: Command;
3
+ //# sourceMappingURL=revise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revise.d.ts","sourceRoot":"","sources":["../../src/commands/revise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAqDtB,CAAC"}