@kienmatu/inkos 0.1.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.
- package/LICENSE +661 -0
- package/dist/book-backup.d.ts +33 -0
- package/dist/book-backup.d.ts.map +1 -0
- package/dist/book-backup.js +74 -0
- package/dist/book-backup.js.map +1 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +71 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/analytics.d.ts +3 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +74 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +81 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auto.d.ts +3 -0
- package/dist/commands/auto.d.ts.map +1 -0
- package/dist/commands/auto.js +136 -0
- package/dist/commands/auto.js.map +1 -0
- package/dist/commands/book.d.ts +3 -0
- package/dist/commands/book.d.ts.map +1 -0
- package/dist/commands/book.js +324 -0
- package/dist/commands/book.js.map +1 -0
- package/dist/commands/chapter.d.ts +3 -0
- package/dist/commands/chapter.d.ts.map +1 -0
- package/dist/commands/chapter.js +103 -0
- package/dist/commands/chapter.js.map +1 -0
- package/dist/commands/compose.d.ts +3 -0
- package/dist/commands/compose.d.ts.map +1 -0
- package/dist/commands/compose.js +46 -0
- package/dist/commands/compose.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +321 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/consolidate.d.ts +3 -0
- package/dist/commands/consolidate.d.ts.map +1 -0
- package/dist/commands/consolidate.js +50 -0
- package/dist/commands/consolidate.js.map +1 -0
- package/dist/commands/daemon.d.ts +4 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +118 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/detect.d.ts +3 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +104 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +356 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/draft.d.ts +3 -0
- package/dist/commands/draft.d.ts.map +1 -0
- package/dist/commands/draft.js +42 -0
- package/dist/commands/draft.js.map +1 -0
- package/dist/commands/eval.d.ts +3 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/eval.js +57 -0
- package/dist/commands/eval.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +46 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/fanfic.d.ts +3 -0
- package/dist/commands/fanfic.d.ts.map +1 -0
- package/dist/commands/fanfic.js +177 -0
- package/dist/commands/fanfic.js.map +1 -0
- package/dist/commands/forecast.d.ts +12 -0
- package/dist/commands/forecast.d.ts.map +1 -0
- package/dist/commands/forecast.js +156 -0
- package/dist/commands/forecast.js.map +1 -0
- package/dist/commands/genre.d.ts +11 -0
- package/dist/commands/genre.d.ts.map +1 -0
- package/dist/commands/genre.js +186 -0
- package/dist/commands/genre.js.map +1 -0
- package/dist/commands/import.d.ts +3 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +110 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +63 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/interact.d.ts +6 -0
- package/dist/commands/interact.d.ts.map +1 -0
- package/dist/commands/interact.js +95 -0
- package/dist/commands/interact.js.map +1 -0
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +50 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/radar.d.ts +3 -0
- package/dist/commands/radar.d.ts.map +1 -0
- package/dist/commands/radar.js +52 -0
- package/dist/commands/radar.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +229 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/revise.d.ts +3 -0
- package/dist/commands/revise.d.ts.map +1 -0
- package/dist/commands/revise.js +91 -0
- package/dist/commands/revise.js.map +1 -0
- package/dist/commands/short-fiction.d.ts +4 -0
- package/dist/commands/short-fiction.d.ts.map +1 -0
- package/dist/commands/short-fiction.js +220 -0
- package/dist/commands/short-fiction.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +123 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/studio.d.ts +21 -0
- package/dist/commands/studio.d.ts.map +1 -0
- package/dist/commands/studio.js +151 -0
- package/dist/commands/studio.js.map +1 -0
- package/dist/commands/style.d.ts +3 -0
- package/dist/commands/style.d.ts.map +1 -0
- package/dist/commands/style.js +95 -0
- package/dist/commands/style.js.map +1 -0
- package/dist/commands/translate.d.ts +3 -0
- package/dist/commands/translate.d.ts.map +1 -0
- package/dist/commands/translate.js +111 -0
- package/dist/commands/translate.js.map +1 -0
- package/dist/commands/tui.d.ts +6 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +14 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +40 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/write.d.ts +3 -0
- package/dist/commands/write.d.ts.map +1 -0
- package/dist/commands/write.js +371 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/localization.d.ts +103 -0
- package/dist/localization.d.ts.map +1 -0
- package/dist/localization.js +377 -0
- package/dist/localization.js.map +1 -0
- package/dist/notify-helper.d.ts +17 -0
- package/dist/notify-helper.d.ts.map +1 -0
- package/dist/notify-helper.js +27 -0
- package/dist/notify-helper.js.map +1 -0
- package/dist/program.d.ts +10 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +97 -0
- package/dist/program.js.map +1 -0
- package/dist/progress-text.d.ts +26 -0
- package/dist/progress-text.d.ts.map +1 -0
- package/dist/progress-text.js +35 -0
- package/dist/progress-text.js.map +1 -0
- package/dist/project-bootstrap.d.ts +8 -0
- package/dist/project-bootstrap.d.ts.map +1 -0
- package/dist/project-bootstrap.js +139 -0
- package/dist/project-bootstrap.js.map +1 -0
- package/dist/runtime-requirements.d.ts +24 -0
- package/dist/runtime-requirements.d.ts.map +1 -0
- package/dist/runtime-requirements.js +89 -0
- package/dist/runtime-requirements.js.map +1 -0
- package/dist/tui/__tests__/markdown.test.d.ts +2 -0
- package/dist/tui/__tests__/markdown.test.d.ts.map +1 -0
- package/dist/tui/__tests__/markdown.test.js +58 -0
- package/dist/tui/__tests__/markdown.test.js.map +1 -0
- package/dist/tui/activity-state.d.ts +9 -0
- package/dist/tui/activity-state.d.ts.map +1 -0
- package/dist/tui/activity-state.js +6 -0
- package/dist/tui/activity-state.js.map +1 -0
- package/dist/tui/agent-input.d.ts +118 -0
- package/dist/tui/agent-input.d.ts.map +1 -0
- package/dist/tui/agent-input.js +255 -0
- package/dist/tui/agent-input.js.map +1 -0
- package/dist/tui/ansi.d.ts +40 -0
- package/dist/tui/ansi.d.ts.map +1 -0
- package/dist/tui/ansi.js +62 -0
- package/dist/tui/ansi.js.map +1 -0
- package/dist/tui/app.d.ts +13 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +109 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/chat-depth.d.ts +9 -0
- package/dist/tui/chat-depth.d.ts.map +1 -0
- package/dist/tui/chat-depth.js +14 -0
- package/dist/tui/chat-depth.js.map +1 -0
- package/dist/tui/chat-draft.d.ts +4 -0
- package/dist/tui/chat-draft.d.ts.map +1 -0
- package/dist/tui/chat-draft.js +28 -0
- package/dist/tui/chat-draft.js.map +1 -0
- package/dist/tui/composer-caret.d.ts +10 -0
- package/dist/tui/composer-caret.d.ts.map +1 -0
- package/dist/tui/composer-caret.js +13 -0
- package/dist/tui/composer-caret.js.map +1 -0
- package/dist/tui/composer-display.d.ts +7 -0
- package/dist/tui/composer-display.d.ts.map +1 -0
- package/dist/tui/composer-display.js +17 -0
- package/dist/tui/composer-display.js.map +1 -0
- package/dist/tui/dashboard-model.d.ts +46 -0
- package/dist/tui/dashboard-model.d.ts.map +1 -0
- package/dist/tui/dashboard-model.js +105 -0
- package/dist/tui/dashboard-model.js.map +1 -0
- package/dist/tui/dashboard.d.ts +38 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +357 -0
- package/dist/tui/dashboard.js.map +1 -0
- package/dist/tui/effects.d.ts +61 -0
- package/dist/tui/effects.d.ts.map +1 -0
- package/dist/tui/effects.js +451 -0
- package/dist/tui/effects.js.map +1 -0
- package/dist/tui/i18n.d.ts +63 -0
- package/dist/tui/i18n.d.ts.map +1 -0
- package/dist/tui/i18n.js +205 -0
- package/dist/tui/i18n.js.map +1 -0
- package/dist/tui/input-history.d.ts +12 -0
- package/dist/tui/input-history.d.ts.map +1 -0
- package/dist/tui/input-history.js +47 -0
- package/dist/tui/input-history.js.map +1 -0
- package/dist/tui/local-commands.d.ts +12 -0
- package/dist/tui/local-commands.d.ts.map +1 -0
- package/dist/tui/local-commands.js +50 -0
- package/dist/tui/local-commands.js.map +1 -0
- package/dist/tui/markdown.d.ts +2 -0
- package/dist/tui/markdown.d.ts.map +1 -0
- package/dist/tui/markdown.js +60 -0
- package/dist/tui/markdown.js.map +1 -0
- package/dist/tui/session-store.d.ts +2 -0
- package/dist/tui/session-store.d.ts.map +1 -0
- package/dist/tui/session-store.js +2 -0
- package/dist/tui/session-store.js.map +1 -0
- package/dist/tui/setup.d.ts +53 -0
- package/dist/tui/setup.d.ts.map +1 -0
- package/dist/tui/setup.js +313 -0
- package/dist/tui/setup.js.map +1 -0
- package/dist/tui/slash-autocomplete.d.ts +8 -0
- package/dist/tui/slash-autocomplete.d.ts.map +1 -0
- package/dist/tui/slash-autocomplete.js +48 -0
- package/dist/tui/slash-autocomplete.js.map +1 -0
- package/dist/tui/theme.d.ts +28 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +53 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/utils.d.ts +32 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +165 -0
- package/dist/utils.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { formatLengthCount, resolveLengthCountingMode } from "@kienmatu/inkos-core";
|
|
2
|
+
function localize(language, messages) {
|
|
3
|
+
return language === "en" ? messages.en : messages.zh;
|
|
4
|
+
}
|
|
5
|
+
function normalizeCliLanguageTag(value) {
|
|
6
|
+
if (!value) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const normalized = value.trim().toLowerCase();
|
|
10
|
+
if (normalized.startsWith("en")) {
|
|
11
|
+
return "en";
|
|
12
|
+
}
|
|
13
|
+
if (normalized.startsWith("zh")) {
|
|
14
|
+
return "zh";
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
export function resolveCliLanguage(language, env = process.env) {
|
|
19
|
+
const explicit = normalizeCliLanguageTag(language);
|
|
20
|
+
if (explicit) {
|
|
21
|
+
return explicit;
|
|
22
|
+
}
|
|
23
|
+
const requested = normalizeCliLanguageTag(env.INKOS_LOCALE);
|
|
24
|
+
if (requested) {
|
|
25
|
+
return requested;
|
|
26
|
+
}
|
|
27
|
+
const detected = normalizeCliLanguageTag(env.LC_ALL ?? env.LC_MESSAGES ?? env.LANG);
|
|
28
|
+
return detected ?? "zh";
|
|
29
|
+
}
|
|
30
|
+
export function formatBookCreateCreating(language, title, genre, platform) {
|
|
31
|
+
return localize(language, {
|
|
32
|
+
zh: `创建书籍 "${title}"(${genre} / ${platform})...`,
|
|
33
|
+
en: `Creating book "${title}" (${genre} / ${platform})...`,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function formatBookCreateCreated(language, bookId) {
|
|
37
|
+
return localize(language, {
|
|
38
|
+
zh: `已创建书籍:${bookId}`,
|
|
39
|
+
en: `Book created: ${bookId}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export function formatBookCreateLocation(language, bookId) {
|
|
43
|
+
return localize(language, {
|
|
44
|
+
zh: ` 位置:books/${bookId}/`,
|
|
45
|
+
en: ` Location: books/${bookId}/`,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export function formatBookCreateFoundationReady(language) {
|
|
49
|
+
return localize(language, {
|
|
50
|
+
zh: " 故事圣经、大纲和书籍规则已生成。",
|
|
51
|
+
en: " Story bible, outline, book rules generated.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export function formatBookCreateNextStep(language, bookId) {
|
|
55
|
+
return localize(language, {
|
|
56
|
+
zh: `下一步:inkos write next ${bookId}`,
|
|
57
|
+
en: `Next: inkos write next ${bookId}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function formatWriteNextProgress(language, current, total, bookId) {
|
|
61
|
+
return localize(language, {
|
|
62
|
+
zh: `[${current}/${total}] 为「${bookId}」撰写章节...`,
|
|
63
|
+
en: `[${current}/${total}] Writing chapter for "${bookId}"...`,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export function formatWriteNextResultLines(language, result) {
|
|
67
|
+
const auditPassed = result.auditPassed ?? result.passedAudit ?? false;
|
|
68
|
+
const lengthLabel = formatLengthCount(result.wordCount, resolveLengthCountingMode(language));
|
|
69
|
+
const lines = [
|
|
70
|
+
localize(language, {
|
|
71
|
+
zh: ` 第${result.chapterNumber}章:${result.title}`,
|
|
72
|
+
en: ` Chapter ${result.chapterNumber}: ${result.title}`,
|
|
73
|
+
}),
|
|
74
|
+
localize(language, {
|
|
75
|
+
zh: ` 字数:${lengthLabel}`,
|
|
76
|
+
en: ` Length: ${lengthLabel}`,
|
|
77
|
+
}),
|
|
78
|
+
localize(language, {
|
|
79
|
+
zh: ` 审计:${auditPassed ? "通过" : "需复核"}`,
|
|
80
|
+
en: ` Audit: ${auditPassed ? "PASSED" : "NEEDS REVIEW"}`,
|
|
81
|
+
}),
|
|
82
|
+
];
|
|
83
|
+
if (result.revised) {
|
|
84
|
+
lines.push(localize(language, {
|
|
85
|
+
zh: " 自动修正:已执行(已修复关键问题)",
|
|
86
|
+
en: " Auto-revised: YES (critical issues were fixed)",
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
lines.push(localize(language, {
|
|
90
|
+
zh: ` 状态:${result.status}`,
|
|
91
|
+
en: ` Status: ${result.status}`,
|
|
92
|
+
}));
|
|
93
|
+
if (result.issues.length > 0) {
|
|
94
|
+
lines.push(localize(language, {
|
|
95
|
+
zh: " 问题:",
|
|
96
|
+
en: " Issues:",
|
|
97
|
+
}));
|
|
98
|
+
for (const issue of result.issues) {
|
|
99
|
+
lines.push(` [${issue.severity}] ${issue.category}: ${issue.description}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return lines;
|
|
103
|
+
}
|
|
104
|
+
export function formatWriteNextComplete(language) {
|
|
105
|
+
return localize(language, {
|
|
106
|
+
zh: "完成。",
|
|
107
|
+
en: "Done.",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function formatAutoWriteStart(language, bookId, startChapter, targetChapter) {
|
|
111
|
+
return localize(language, {
|
|
112
|
+
zh: `自动写作「${bookId}」:从第${startChapter}章连续写到第${targetChapter}章...`,
|
|
113
|
+
en: `Auto-writing "${bookId}": chapter ${startChapter} through chapter ${targetChapter}...`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
export function formatAutoWriteAlreadyComplete(language, bookId, writtenChapters, targetChapter) {
|
|
117
|
+
return localize(language, {
|
|
118
|
+
zh: `「${bookId}」已写到第${writtenChapters}章(目标第${targetChapter}章),无需继续。`,
|
|
119
|
+
en: `"${bookId}" already has ${writtenChapters} chapter(s) written (target: chapter ${targetChapter}). Nothing to do.`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const NOTIFY_ACTION_LABELS = {
|
|
123
|
+
"write-next": { zh: "写作", en: "Write" },
|
|
124
|
+
"write-rewrite": { zh: "重写", en: "Rewrite" },
|
|
125
|
+
revise: { zh: "修订", en: "Revise" },
|
|
126
|
+
audit: { zh: "审计", en: "Audit" },
|
|
127
|
+
auto: { zh: "自动连写", en: "Auto-write" },
|
|
128
|
+
};
|
|
129
|
+
export function formatNotifyCommandTitle(language, action, bookName, succeeded) {
|
|
130
|
+
const label = localize(language, NOTIFY_ACTION_LABELS[action]);
|
|
131
|
+
const book = bookName === undefined
|
|
132
|
+
? ""
|
|
133
|
+
: localize(language, { zh: `《${bookName}》`, en: `: ${bookName}` });
|
|
134
|
+
return succeeded
|
|
135
|
+
? localize(language, { zh: `✅ ${label}完成${book}`, en: `✅ ${label} complete${book}` })
|
|
136
|
+
: localize(language, { zh: `❌ ${label}失败${book}`, en: `❌ ${label} failed${book}` });
|
|
137
|
+
}
|
|
138
|
+
export function formatNotifyBatchWriteBody(language, chapters) {
|
|
139
|
+
const first = chapters[0];
|
|
140
|
+
const last = chapters[chapters.length - 1];
|
|
141
|
+
const lines = [
|
|
142
|
+
localize(language, {
|
|
143
|
+
zh: `本次完成 ${chapters.length} 章(第${first.chapterNumber}章到第${last.chapterNumber}章)`,
|
|
144
|
+
en: `${chapters.length} chapter(s) written (chapter ${first.chapterNumber} to ${last.chapterNumber})`,
|
|
145
|
+
}),
|
|
146
|
+
...chapters.map((ch) => {
|
|
147
|
+
const lengthLabel = formatLengthCount(ch.wordCount, resolveLengthCountingMode(language));
|
|
148
|
+
return localize(language, {
|
|
149
|
+
zh: `第${ch.chapterNumber}章 ${ch.title} | ${lengthLabel} | ${ch.auditPassed ? "审计通过" : "需复核"}`,
|
|
150
|
+
en: `Chapter ${ch.chapterNumber} ${ch.title} | ${lengthLabel} | ${ch.auditPassed ? "audit passed" : "needs review"}`,
|
|
151
|
+
});
|
|
152
|
+
}),
|
|
153
|
+
];
|
|
154
|
+
return lines.join("\n");
|
|
155
|
+
}
|
|
156
|
+
export function formatNotifyAuditBody(language, result) {
|
|
157
|
+
const head = localize(language, {
|
|
158
|
+
zh: `第${result.chapterNumber}章审计${result.passed ? "通过" : "未通过"}(${result.issueCount} 个问题)`,
|
|
159
|
+
en: `Chapter ${result.chapterNumber} audit ${result.passed ? "passed" : "failed"} (${result.issueCount} issue(s))`,
|
|
160
|
+
});
|
|
161
|
+
return result.summary ? `${head}\n${result.summary}` : head;
|
|
162
|
+
}
|
|
163
|
+
export function formatNotifyReviseBody(language, result) {
|
|
164
|
+
if (!result.applied) {
|
|
165
|
+
return localize(language, {
|
|
166
|
+
zh: `第${result.chapterNumber}章保留原稿${result.skippedReason ? `:${result.skippedReason}` : ""}`,
|
|
167
|
+
en: `Chapter ${result.chapterNumber} kept original draft${result.skippedReason ? `: ${result.skippedReason}` : ""}`,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
const lengthLabel = formatLengthCount(result.wordCount, resolveLengthCountingMode(language));
|
|
171
|
+
return localize(language, {
|
|
172
|
+
zh: `第${result.chapterNumber}章已修订 | ${lengthLabel} | 修复 ${result.fixedCount} 个问题`,
|
|
173
|
+
en: `Chapter ${result.chapterNumber} revised | ${lengthLabel} | ${result.fixedCount} issue(s) fixed`,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
export function formatNotifyFailureBody(language, error) {
|
|
177
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
178
|
+
return localize(language, {
|
|
179
|
+
zh: `错误:${detail}`,
|
|
180
|
+
en: `Error: ${detail}`,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
export function formatImportChaptersDiscovery(language, chapterCount, bookId) {
|
|
184
|
+
return localize(language, {
|
|
185
|
+
zh: `发现 ${chapterCount} 章,准备导入到「${bookId}」。`,
|
|
186
|
+
en: `Found ${chapterCount} chapters to import into "${bookId}".`,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
export function formatImportChaptersResume(language, resumeFrom) {
|
|
190
|
+
return localize(language, {
|
|
191
|
+
zh: `从第 ${resumeFrom} 章继续导入。`,
|
|
192
|
+
en: `Resuming from chapter ${resumeFrom}.`,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
export function formatImportChaptersComplete(language, result) {
|
|
196
|
+
const lengthLabel = formatLengthCount(result.totalWords, resolveLengthCountingMode(language));
|
|
197
|
+
return [
|
|
198
|
+
localize(language, {
|
|
199
|
+
zh: "导入完成:",
|
|
200
|
+
en: "Import complete:",
|
|
201
|
+
}),
|
|
202
|
+
localize(language, {
|
|
203
|
+
zh: ` 已导入章节:${result.importedCount}`,
|
|
204
|
+
en: ` Chapters imported: ${result.importedCount}`,
|
|
205
|
+
}),
|
|
206
|
+
localize(language, {
|
|
207
|
+
zh: ` 总长度:${lengthLabel}`,
|
|
208
|
+
en: ` Total length: ${lengthLabel}`,
|
|
209
|
+
}),
|
|
210
|
+
localize(language, {
|
|
211
|
+
zh: ` 下一章编号:${result.nextChapter}`,
|
|
212
|
+
en: ` Next chapter number: ${result.nextChapter}`,
|
|
213
|
+
}),
|
|
214
|
+
"",
|
|
215
|
+
localize(language, {
|
|
216
|
+
zh: `运行 "inkos write next ${result.continueBookId}" 继续写作。`,
|
|
217
|
+
en: `Run "inkos write next ${result.continueBookId}" to continue writing.`,
|
|
218
|
+
}),
|
|
219
|
+
];
|
|
220
|
+
}
|
|
221
|
+
export function formatImportCanonStart(language, parentBookId, targetBookId) {
|
|
222
|
+
return localize(language, {
|
|
223
|
+
zh: `把 "${parentBookId}" 的正典导入到 "${targetBookId}"...`,
|
|
224
|
+
en: `Importing canon from "${parentBookId}" into "${targetBookId}"...`,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
export function formatImportCanonComplete(language) {
|
|
228
|
+
return [
|
|
229
|
+
localize(language, {
|
|
230
|
+
zh: "正典已导入:story/parent_canon.md",
|
|
231
|
+
en: "Canon imported: story/parent_canon.md",
|
|
232
|
+
}),
|
|
233
|
+
localize(language, {
|
|
234
|
+
zh: "Writer 和 auditor 会在番外模式下自动识别这个文件。",
|
|
235
|
+
en: "Writer and auditor will auto-detect this file for spinoff mode.",
|
|
236
|
+
}),
|
|
237
|
+
];
|
|
238
|
+
}
|
|
239
|
+
export function formatListModelsEmpty(language, service) {
|
|
240
|
+
return localize(language, {
|
|
241
|
+
zh: `${service} 没有可用模型(可能需要 --api-key 和 --base-url)`,
|
|
242
|
+
en: `No models available for ${service} (you may need --api-key and --base-url)`,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
export function formatListModelsHeader(language, service, count) {
|
|
246
|
+
return localize(language, {
|
|
247
|
+
zh: `${service}:${count} 个模型`,
|
|
248
|
+
en: `${service}: ${count} model(s)`,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
export function formatDoctorHintQuota(language) {
|
|
252
|
+
return localize(language, {
|
|
253
|
+
zh: "检查 API Key 是否正确、模型是否可用,以及账号余额或配额是否足够。",
|
|
254
|
+
en: "Check that the API key is valid, the model is available, and the account has enough balance or quota.",
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
export function formatDoctorHintOpenAiProbeExhausted(language) {
|
|
258
|
+
return localize(language, {
|
|
259
|
+
zh: "当前已自动尝试 chat/responses 与流式开关组合;如果仍失败,问题更可能在模型名、baseUrl 路径或服务商兼容性本身。",
|
|
260
|
+
en: "All chat/responses and stream on/off combinations were already probed; if it still fails, the problem is more likely the model name, the baseUrl path, or provider compatibility itself.",
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
export function formatDoctorHintBaseUrl(language) {
|
|
264
|
+
return localize(language, {
|
|
265
|
+
zh: "baseUrl 可能不正确,检查 INKOS_LLM_BASE_URL 是否包含完整路径(如 /v1)",
|
|
266
|
+
en: "The baseUrl may be wrong. Check that INKOS_LLM_BASE_URL includes the full path (e.g. /v1).",
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
export function formatDoctorHintStreamRequirement(language) {
|
|
270
|
+
return localize(language, {
|
|
271
|
+
zh: "检查提供方文档,确认该接口要求 stream=true、stream=false,还是根本不支持 stream",
|
|
272
|
+
en: "Check the provider docs to confirm whether the endpoint requires stream=true, stream=false, or does not support streaming at all.",
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
export function formatDoctorHintModelName(language) {
|
|
276
|
+
return localize(language, {
|
|
277
|
+
zh: "检查模型名称是否正确(INKOS_LLM_MODEL)",
|
|
278
|
+
en: "Check that the model name is correct (INKOS_LLM_MODEL).",
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
export function formatDoctorHintInvalidApiKey(language) {
|
|
282
|
+
return localize(language, {
|
|
283
|
+
zh: "API Key 无效,检查 INKOS_LLM_API_KEY",
|
|
284
|
+
en: "The API key is invalid. Check INKOS_LLM_API_KEY.",
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
// Fanfic errors are intentionally bilingual in a single string: they can surface
|
|
288
|
+
// through `--json` output or be rethrown before any book language is known.
|
|
289
|
+
export function formatFanficInvalidModeError(mode) {
|
|
290
|
+
return `Invalid fanfic mode: "${mode}". Valid modes: canon, au, ooc, cp(无效的同人模式:"${mode}",可选 canon、au、ooc、cp)`;
|
|
291
|
+
}
|
|
292
|
+
export function formatFanficSourceTooShortError(length) {
|
|
293
|
+
return `Source material too short (${length} chars); provide at least 100 chars(源素材内容过短,仅 ${length} 字符,请提供至少 100 字符的原作素材)`;
|
|
294
|
+
}
|
|
295
|
+
export function formatFanficCanonMissingError() {
|
|
296
|
+
return "No fanfic canon found for this book. Create one with `inkos fanfic init`(该书没有同人正典文件,用 inkos fanfic init 创建同人书)";
|
|
297
|
+
}
|
|
298
|
+
export function formatFanficSourceDirEmptyError(sourcePath) {
|
|
299
|
+
return `No .txt or .md files found in ${sourcePath}(目录 ${sourcePath} 中没有 .txt 或 .md 文件)`;
|
|
300
|
+
}
|
|
301
|
+
export function formatChapterSyncNoChanges(language, checked) {
|
|
302
|
+
return localize(language, {
|
|
303
|
+
zh: `已核对 ${checked} 章,index.json 字数无需修正。`,
|
|
304
|
+
en: `Checked ${checked} chapter(s); index.json word counts already match the files.`,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
export function formatChapterSyncChange(language, change, countingMode) {
|
|
308
|
+
const from = formatLengthCount(change.previousWordCount, countingMode);
|
|
309
|
+
const to = formatLengthCount(change.wordCount, countingMode);
|
|
310
|
+
return localize(language, {
|
|
311
|
+
zh: ` 第${change.number}章 ${change.title}:${from} → ${to}`,
|
|
312
|
+
en: ` Chapter ${change.number} ${change.title}: ${from} → ${to}`,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
export function formatChapterSyncSummary(language, changed, checked) {
|
|
316
|
+
return localize(language, {
|
|
317
|
+
zh: `已核对 ${checked} 章,修正了 ${changed} 章的 index.json 字数。`,
|
|
318
|
+
en: `Checked ${checked} chapter(s); corrected ${changed} index.json word count(s).`,
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
export function formatChapterSyncMissingFiles(language, numbers) {
|
|
322
|
+
return localize(language, {
|
|
323
|
+
zh: `警告:index.json 中的第 ${numbers.join("、")} 章找不到对应的章节文件,已跳过。`,
|
|
324
|
+
en: `Warning: chapter(s) ${numbers.join(", ")} exist in index.json but have no chapter file on disk; skipped.`,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
export function formatChapterDeleteConfirm(language, params) {
|
|
328
|
+
return localize(language, {
|
|
329
|
+
zh: `将删除《${params.bookTitle}》(${params.bookId}) 的最新章:第${params.number}章 ${params.title}。`
|
|
330
|
+
+ `章节文件会移入 chapters/.trash/,索引和故事状态回滚到第${params.number - 1}章。确认删除?(y/N) `,
|
|
331
|
+
en: `Delete the latest chapter of "${params.bookTitle}" (${params.bookId}): chapter ${params.number} ${params.title}? `
|
|
332
|
+
+ `The chapter file moves to chapters/.trash/ and the index and story state roll back to chapter ${params.number - 1}. (y/N) `,
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
export function formatChapterDeleteCancelled(language) {
|
|
336
|
+
return localize(language, {
|
|
337
|
+
zh: "已取消。",
|
|
338
|
+
en: "Cancelled.",
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
export function formatChapterDeleteDone(language, params) {
|
|
342
|
+
const trashNote = params.trashedFiles.length > 0
|
|
343
|
+
? params.trashedFiles.join(", ")
|
|
344
|
+
: localize(language, { zh: "(章节文件已不存在,未移动)", en: "(chapter file was already gone; nothing moved)" });
|
|
345
|
+
return localize(language, {
|
|
346
|
+
zh: `已删除第${params.number}章 ${params.title}:章节文件保留在 ${trashNote},索引和故事状态已回滚到第${params.rolledBackTo}章。`,
|
|
347
|
+
en: `Deleted chapter ${params.number} ${params.title}: chapter file kept at ${trashNote}; index and story state rolled back to chapter ${params.rolledBackTo}.`,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
export function formatBookBackupCreated(language, bookId, backupId) {
|
|
351
|
+
return localize(language, {
|
|
352
|
+
zh: `已备份 ${bookId} → .inkos/backups/${bookId}/${backupId}/`,
|
|
353
|
+
en: `Backed up ${bookId} → .inkos/backups/${bookId}/${backupId}/`,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
export function formatBookBackupListEmpty(language, bookId) {
|
|
357
|
+
return localize(language, {
|
|
358
|
+
zh: `${bookId} 还没有备份。用 inkos book backup ${bookId} 创建一份。`,
|
|
359
|
+
en: `No backups for ${bookId} yet. Create one with: inkos book backup ${bookId}`,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
export function formatBookRestoreDone(language, params) {
|
|
363
|
+
const preNote = params.preRestoreBackupId
|
|
364
|
+
? localize(language, {
|
|
365
|
+
zh: `恢复前的状态已自动备份为 ${params.preRestoreBackupId}。`,
|
|
366
|
+
en: `The pre-restore state was automatically backed up as ${params.preRestoreBackupId}.`,
|
|
367
|
+
})
|
|
368
|
+
: localize(language, {
|
|
369
|
+
zh: "书目录当时不存在,未创建恢复前备份。",
|
|
370
|
+
en: "The book directory did not exist, so no pre-restore backup was created.",
|
|
371
|
+
});
|
|
372
|
+
return localize(language, {
|
|
373
|
+
zh: `已把 ${params.bookId} 恢复到备份 ${params.backupId}。${preNote}`,
|
|
374
|
+
en: `Restored ${params.bookId} to backup ${params.backupId}. ${preNote}`,
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=localization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ProjectConfig } from "@kienmatu/inkos-core";
|
|
2
|
+
export interface CliNotifyMessage {
|
|
3
|
+
readonly title: string;
|
|
4
|
+
readonly body: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Send a command-level notification (--notify) to the project's configured
|
|
8
|
+
* notify channels. Callers guard with the --notify flag before invoking so
|
|
9
|
+
* message strings are only assembled when a notification will be attempted.
|
|
10
|
+
*
|
|
11
|
+
* - Uses the caller's already-loaded project config when provided; otherwise
|
|
12
|
+
* loads it here (failure paths may fail before the command loaded it).
|
|
13
|
+
* - Never throws: notification delivery must not change the command's exit
|
|
14
|
+
* code, so every failure is written to stderr as a warning instead.
|
|
15
|
+
*/
|
|
16
|
+
export declare function sendCommandNotification(message: CliNotifyMessage, config?: ProjectConfig): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=notify-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-helper.d.ts","sourceRoot":"","sources":["../src/notify-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGhF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { dispatchNotification } from "@kienmatu/inkos-core";
|
|
2
|
+
import { loadConfig, logError } from "./utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* Send a command-level notification (--notify) to the project's configured
|
|
5
|
+
* notify channels. Callers guard with the --notify flag before invoking so
|
|
6
|
+
* message strings are only assembled when a notification will be attempted.
|
|
7
|
+
*
|
|
8
|
+
* - Uses the caller's already-loaded project config when provided; otherwise
|
|
9
|
+
* loads it here (failure paths may fail before the command loaded it).
|
|
10
|
+
* - Never throws: notification delivery must not change the command's exit
|
|
11
|
+
* code, so every failure is written to stderr as a warning instead.
|
|
12
|
+
*/
|
|
13
|
+
export async function sendCommandNotification(message, config) {
|
|
14
|
+
try {
|
|
15
|
+
const resolved = config ?? (await loadConfig());
|
|
16
|
+
const channels = resolved.notify ?? [];
|
|
17
|
+
if (channels.length === 0) {
|
|
18
|
+
logError("--notify: no notify channels configured in project config (notify: []), skipping notification");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await dispatchNotification(channels, message);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
logError(`--notify: failed to send notification: ${e}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=notify-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify-helper.js","sourceRoot":"","sources":["../src/notify-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAsB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOlD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAyB,EACzB,MAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,+FAA+F,CAAC,CAAC;YAC1G,OAAO;QACT,CAAC;QACD,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,CAAC,0CAA0C,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type InteractCommandHooks } from "./commands/interact.js";
|
|
3
|
+
export interface ProgramHooks {
|
|
4
|
+
readonly launchTui?: (projectRoot: string) => Promise<void> | void;
|
|
5
|
+
readonly launchStudio?: (projectRoot: string, port: string) => Promise<void> | void;
|
|
6
|
+
readonly readInteractionInput?: InteractCommandHooks["readInput"];
|
|
7
|
+
}
|
|
8
|
+
export declare function createProgram(hooks?: ProgramHooks): Command;
|
|
9
|
+
export declare function runProgram(argv?: string[], hooks?: ProgramHooks): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=program.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;CACnE;AAED,wBAAgB,aAAa,CAAC,KAAK,GAAE,YAAiB,GAAG,OAAO,CAyD/D;AAED,wBAAsB,UAAU,CAC9B,IAAI,GAAE,MAAM,EAAiB,EAC7B,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
package/dist/program.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { initCommand } from "./commands/init.js";
|
|
4
|
+
import { configCommand } from "./commands/config.js";
|
|
5
|
+
import { bookCommand } from "./commands/book.js";
|
|
6
|
+
import { chapterCommand } from "./commands/chapter.js";
|
|
7
|
+
import { writeCommand } from "./commands/write.js";
|
|
8
|
+
import { autoCommand } from "./commands/auto.js";
|
|
9
|
+
import { reviewCommand } from "./commands/review.js";
|
|
10
|
+
import { statusCommand } from "./commands/status.js";
|
|
11
|
+
import { radarCommand } from "./commands/radar.js";
|
|
12
|
+
import { upCommand, downCommand } from "./commands/daemon.js";
|
|
13
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
14
|
+
import { exportCommand } from "./commands/export.js";
|
|
15
|
+
import { draftCommand } from "./commands/draft.js";
|
|
16
|
+
import { auditCommand } from "./commands/audit.js";
|
|
17
|
+
import { reviseCommand } from "./commands/revise.js";
|
|
18
|
+
import { agentCommand } from "./commands/agent.js";
|
|
19
|
+
import { planCommand } from "./commands/plan.js";
|
|
20
|
+
import { composeCommand } from "./commands/compose.js";
|
|
21
|
+
import { genreCommand } from "./commands/genre.js";
|
|
22
|
+
import { updateCommand } from "./commands/update.js";
|
|
23
|
+
import { detectCommand } from "./commands/detect.js";
|
|
24
|
+
import { styleCommand } from "./commands/style.js";
|
|
25
|
+
import { analyticsCommand } from "./commands/analytics.js";
|
|
26
|
+
import { evalCommand } from "./commands/eval.js";
|
|
27
|
+
import { importCommand } from "./commands/import.js";
|
|
28
|
+
import { fanficCommand } from "./commands/fanfic.js";
|
|
29
|
+
import { shortCommand } from "./commands/short-fiction.js";
|
|
30
|
+
import { forecastCommand } from "./commands/forecast.js";
|
|
31
|
+
import { translateCommand } from "./commands/translate.js";
|
|
32
|
+
import { createStudioCommand, launchStudioEntry } from "./commands/studio.js";
|
|
33
|
+
import { consolidateCommand } from "./commands/consolidate.js";
|
|
34
|
+
import { createInteractCommand } from "./commands/interact.js";
|
|
35
|
+
import { createTuiCommand } from "./commands/tui.js";
|
|
36
|
+
const require = createRequire(import.meta.url);
|
|
37
|
+
const { version } = require("../package.json");
|
|
38
|
+
export function createProgram(hooks = {}) {
|
|
39
|
+
const program = new Command();
|
|
40
|
+
program
|
|
41
|
+
.name("inkos")
|
|
42
|
+
.description("InkOS — Multi-agent novel production system")
|
|
43
|
+
.version(version)
|
|
44
|
+
.enablePositionalOptions()
|
|
45
|
+
.option("--service <service>", "Override LLM service for this CLI run")
|
|
46
|
+
.option("--model <model>", "Override LLM model for this CLI run")
|
|
47
|
+
.option("--api-key-env <envVar>", "Read LLM API key from this environment variable for this CLI run")
|
|
48
|
+
.option("--base-url <url>", "Override LLM base URL for this CLI run")
|
|
49
|
+
.option("--api-format <chat|responses>", "Override LLM API format for this CLI run")
|
|
50
|
+
.option("--stream", "Force streaming LLM responses for this CLI run")
|
|
51
|
+
.option("--no-stream", "Force non-streaming LLM responses for this CLI run")
|
|
52
|
+
.action(async () => {
|
|
53
|
+
await launchStudioEntry(process.cwd(), "4567", { launchStudio: hooks.launchStudio });
|
|
54
|
+
});
|
|
55
|
+
program.addCommand(initCommand);
|
|
56
|
+
program.addCommand(configCommand);
|
|
57
|
+
program.addCommand(bookCommand);
|
|
58
|
+
program.addCommand(chapterCommand);
|
|
59
|
+
program.addCommand(writeCommand);
|
|
60
|
+
program.addCommand(autoCommand);
|
|
61
|
+
program.addCommand(reviewCommand);
|
|
62
|
+
program.addCommand(statusCommand);
|
|
63
|
+
program.addCommand(radarCommand);
|
|
64
|
+
program.addCommand(upCommand);
|
|
65
|
+
program.addCommand(downCommand);
|
|
66
|
+
program.addCommand(doctorCommand);
|
|
67
|
+
program.addCommand(exportCommand);
|
|
68
|
+
program.addCommand(draftCommand);
|
|
69
|
+
program.addCommand(auditCommand);
|
|
70
|
+
program.addCommand(reviseCommand);
|
|
71
|
+
program.addCommand(agentCommand);
|
|
72
|
+
program.addCommand(planCommand);
|
|
73
|
+
program.addCommand(composeCommand);
|
|
74
|
+
program.addCommand(genreCommand);
|
|
75
|
+
program.addCommand(updateCommand);
|
|
76
|
+
program.addCommand(detectCommand);
|
|
77
|
+
program.addCommand(styleCommand);
|
|
78
|
+
program.addCommand(analyticsCommand);
|
|
79
|
+
program.addCommand(evalCommand);
|
|
80
|
+
program.addCommand(importCommand);
|
|
81
|
+
program.addCommand(fanficCommand);
|
|
82
|
+
program.addCommand(shortCommand);
|
|
83
|
+
program.addCommand(forecastCommand);
|
|
84
|
+
program.addCommand(translateCommand);
|
|
85
|
+
program.addCommand(createStudioCommand({ launchStudio: hooks.launchStudio }));
|
|
86
|
+
program.addCommand(consolidateCommand);
|
|
87
|
+
program.addCommand(createInteractCommand({
|
|
88
|
+
readInput: hooks.readInteractionInput,
|
|
89
|
+
}));
|
|
90
|
+
program.addCommand(createTuiCommand({ launchTui: hooks.launchTui }));
|
|
91
|
+
return program;
|
|
92
|
+
}
|
|
93
|
+
export async function runProgram(argv = process.argv, hooks = {}) {
|
|
94
|
+
const program = createProgram(hooks);
|
|
95
|
+
await program.parseAsync(argv);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type CliLanguage } from "./localization.js";
|
|
2
|
+
export { type CliLanguage };
|
|
3
|
+
export declare function formatWriteStartLine(language: CliLanguage, current: number, total: number, bookId: string): string;
|
|
4
|
+
export declare function formatWriteCompletionLines(language: CliLanguage, result: {
|
|
5
|
+
readonly chapterNumber: number;
|
|
6
|
+
readonly title: string;
|
|
7
|
+
readonly wordCount: number;
|
|
8
|
+
readonly passedAudit: boolean;
|
|
9
|
+
readonly revised: boolean;
|
|
10
|
+
readonly status: string;
|
|
11
|
+
readonly issues: ReadonlyArray<{
|
|
12
|
+
readonly severity: string;
|
|
13
|
+
readonly category: string;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
}>;
|
|
16
|
+
}): string[];
|
|
17
|
+
export declare function formatWriteDoneLine(language: CliLanguage): string;
|
|
18
|
+
export declare function formatImportDiscoveryLine(language: CliLanguage, chapterCount: number, bookId: string): string;
|
|
19
|
+
export declare function formatImportResumeLine(language: CliLanguage, resumeFrom: number): string;
|
|
20
|
+
export declare function formatImportCompletionLines(language: CliLanguage, result: {
|
|
21
|
+
readonly importedCount: number;
|
|
22
|
+
readonly totalCountLabel: string;
|
|
23
|
+
readonly nextChapter: number;
|
|
24
|
+
readonly bookId: string;
|
|
25
|
+
}): string[];
|
|
26
|
+
//# sourceMappingURL=progress-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-text.d.ts","sourceRoot":"","sources":["../src/progress-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,KAAK,WAAW,EAAE,CAAC;AAE5B,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE;IACN,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC,CAAC;CACJ,GACA,MAAM,EAAE,CAEV;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAEjE;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE;IACN,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACA,MAAM,EAAE,CAiBV"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { formatImportChaptersDiscovery, formatImportChaptersResume, formatWriteNextComplete, formatWriteNextProgress, formatWriteNextResultLines, } from "./localization.js";
|
|
2
|
+
export function formatWriteStartLine(language, current, total, bookId) {
|
|
3
|
+
return formatWriteNextProgress(language, current, total, bookId);
|
|
4
|
+
}
|
|
5
|
+
export function formatWriteCompletionLines(language, result) {
|
|
6
|
+
return [...formatWriteNextResultLines(language, result), ""];
|
|
7
|
+
}
|
|
8
|
+
export function formatWriteDoneLine(language) {
|
|
9
|
+
return formatWriteNextComplete(language);
|
|
10
|
+
}
|
|
11
|
+
export function formatImportDiscoveryLine(language, chapterCount, bookId) {
|
|
12
|
+
return formatImportChaptersDiscovery(language, chapterCount, bookId);
|
|
13
|
+
}
|
|
14
|
+
export function formatImportResumeLine(language, resumeFrom) {
|
|
15
|
+
return formatImportChaptersResume(language, resumeFrom);
|
|
16
|
+
}
|
|
17
|
+
export function formatImportCompletionLines(language, result) {
|
|
18
|
+
return [
|
|
19
|
+
language === "en" ? "Import complete:" : "导入完成:",
|
|
20
|
+
language === "en"
|
|
21
|
+
? ` Chapters imported: ${result.importedCount}`
|
|
22
|
+
: ` 已导入章节:${result.importedCount}`,
|
|
23
|
+
language === "en"
|
|
24
|
+
? ` Total length: ${result.totalCountLabel}`
|
|
25
|
+
: ` 总长度:${result.totalCountLabel}`,
|
|
26
|
+
language === "en"
|
|
27
|
+
? ` Next chapter number: ${result.nextChapter}`
|
|
28
|
+
: ` 下一章编号:${result.nextChapter}`,
|
|
29
|
+
"",
|
|
30
|
+
language === "en"
|
|
31
|
+
? `Run "inkos write next ${result.bookId}" to continue writing.`
|
|
32
|
+
: `运行 "inkos write next ${result.bookId}" 继续写作。`,
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=progress-text.js.map
|