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.
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +59 -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 +52 -0
- package/dist/commands/audit.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 +250 -0
- package/dist/commands/book.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 +47 -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 +293 -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 +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +233 -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 +168 -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 +115 -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 +180 -0
- package/dist/commands/fanfic.js.map +1 -0
- package/dist/commands/genre.d.ts +3 -0
- package/dist/commands/genre.d.ts.map +1 -0
- package/dist/commands/genre.js +152 -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 +136 -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 +132 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/interact.d.ts +25 -0
- package/dist/commands/interact.d.ts.map +1 -0
- package/dist/commands/interact.js +73 -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 +51 -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 +60 -0
- package/dist/commands/revise.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 +14 -0
- package/dist/commands/studio.d.ts.map +1 -0
- package/dist/commands/studio.js +120 -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/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 +323 -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 +38 -0
- package/dist/localization.d.ts.map +1 -0
- package/dist/localization.js +144 -0
- package/dist/localization.js.map +1 -0
- package/dist/program.d.ts +10 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +85 -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/runtime-requirements.d.ts +28 -0
- package/dist/runtime-requirements.d.ts.map +1 -0
- package/dist/runtime-requirements.js +99 -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 +10 -0
- package/dist/tui/activity-state.d.ts.map +1 -0
- package/dist/tui/activity-state.js +27 -0
- package/dist/tui/activity-state.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 +103 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +151 -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 +39 -0
- package/dist/tui/dashboard.d.ts.map +1 -0
- package/dist/tui/dashboard.js +348 -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 +459 -0
- package/dist/tui/effects.js.map +1 -0
- package/dist/tui/i18n.d.ts +69 -0
- package/dist/tui/i18n.d.ts.map +1 -0
- package/dist/tui/i18n.js +239 -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 +5 -0
- package/dist/tui/local-commands.d.ts.map +1 -0
- package/dist/tui/local-commands.js +43 -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/output.d.ts +11 -0
- package/dist/tui/output.d.ts.map +1 -0
- package/dist/tui/output.js +24 -0
- package/dist/tui/output.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 +49 -0
- package/dist/tui/setup.d.ts.map +1 -0
- package/dist/tui/setup.js +268 -0
- package/dist/tui/setup.js.map +1 -0
- package/dist/tui/slash-autocomplete.d.ts +6 -0
- package/dist/tui/slash-autocomplete.d.ts.map +1 -0
- package/dist/tui/slash-autocomplete.js +50 -0
- package/dist/tui/slash-autocomplete.js.map +1 -0
- package/dist/tui/theme.d.ts +13 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +15 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/tools.d.ts +15 -0
- package/dist/tui/tools.d.ts.map +1 -0
- package/dist/tui/tools.js +17 -0
- package/dist/tui/tools.js.map +1 -0
- package/dist/utils.d.ts +25 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +114 -0
- package/dist/utils.js.map +1 -0
- package/package.json +3 -3
package/dist/program.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
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 { writeCommand } from "./commands/write.js";
|
|
7
|
+
import { reviewCommand } from "./commands/review.js";
|
|
8
|
+
import { statusCommand } from "./commands/status.js";
|
|
9
|
+
import { radarCommand } from "./commands/radar.js";
|
|
10
|
+
import { upCommand, downCommand } from "./commands/daemon.js";
|
|
11
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
12
|
+
import { exportCommand } from "./commands/export.js";
|
|
13
|
+
import { draftCommand } from "./commands/draft.js";
|
|
14
|
+
import { auditCommand } from "./commands/audit.js";
|
|
15
|
+
import { reviseCommand } from "./commands/revise.js";
|
|
16
|
+
import { agentCommand } from "./commands/agent.js";
|
|
17
|
+
import { planCommand } from "./commands/plan.js";
|
|
18
|
+
import { composeCommand } from "./commands/compose.js";
|
|
19
|
+
import { genreCommand } from "./commands/genre.js";
|
|
20
|
+
import { updateCommand } from "./commands/update.js";
|
|
21
|
+
import { detectCommand } from "./commands/detect.js";
|
|
22
|
+
import { styleCommand } from "./commands/style.js";
|
|
23
|
+
import { analyticsCommand } from "./commands/analytics.js";
|
|
24
|
+
import { evalCommand } from "./commands/eval.js";
|
|
25
|
+
import { importCommand } from "./commands/import.js";
|
|
26
|
+
import { fanficCommand } from "./commands/fanfic.js";
|
|
27
|
+
import { studioCommand } from "./commands/studio.js";
|
|
28
|
+
import { consolidateCommand } from "./commands/consolidate.js";
|
|
29
|
+
import { createInteractCommand } from "./commands/interact.js";
|
|
30
|
+
import { createTuiCommand } from "./commands/tui.js";
|
|
31
|
+
import { launchTui } from "./tui/app.js";
|
|
32
|
+
const require = createRequire(import.meta.url);
|
|
33
|
+
const { version } = require("../package.json");
|
|
34
|
+
export function createProgram(hooks = {}) {
|
|
35
|
+
const program = new Command();
|
|
36
|
+
program
|
|
37
|
+
.name("inkos")
|
|
38
|
+
.description("InkOS — Multi-agent novel production system")
|
|
39
|
+
.version(version)
|
|
40
|
+
.action(async () => {
|
|
41
|
+
if (hooks.launchTui) {
|
|
42
|
+
await hooks.launchTui(process.cwd());
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
await launchTui(process.cwd());
|
|
46
|
+
});
|
|
47
|
+
program.addCommand(initCommand);
|
|
48
|
+
program.addCommand(configCommand);
|
|
49
|
+
program.addCommand(bookCommand);
|
|
50
|
+
program.addCommand(writeCommand);
|
|
51
|
+
program.addCommand(reviewCommand);
|
|
52
|
+
program.addCommand(statusCommand);
|
|
53
|
+
program.addCommand(radarCommand);
|
|
54
|
+
program.addCommand(upCommand);
|
|
55
|
+
program.addCommand(downCommand);
|
|
56
|
+
program.addCommand(doctorCommand);
|
|
57
|
+
program.addCommand(exportCommand);
|
|
58
|
+
program.addCommand(draftCommand);
|
|
59
|
+
program.addCommand(auditCommand);
|
|
60
|
+
program.addCommand(reviseCommand);
|
|
61
|
+
program.addCommand(agentCommand);
|
|
62
|
+
program.addCommand(planCommand);
|
|
63
|
+
program.addCommand(composeCommand);
|
|
64
|
+
program.addCommand(genreCommand);
|
|
65
|
+
program.addCommand(updateCommand);
|
|
66
|
+
program.addCommand(detectCommand);
|
|
67
|
+
program.addCommand(styleCommand);
|
|
68
|
+
program.addCommand(analyticsCommand);
|
|
69
|
+
program.addCommand(evalCommand);
|
|
70
|
+
program.addCommand(importCommand);
|
|
71
|
+
program.addCommand(fanficCommand);
|
|
72
|
+
program.addCommand(studioCommand);
|
|
73
|
+
program.addCommand(consolidateCommand);
|
|
74
|
+
program.addCommand(createInteractCommand({
|
|
75
|
+
runInteraction: hooks.runInteraction,
|
|
76
|
+
readInput: hooks.readInteractionInput,
|
|
77
|
+
}));
|
|
78
|
+
program.addCommand(createTuiCommand({ launchTui: hooks.launchTui }));
|
|
79
|
+
return program;
|
|
80
|
+
}
|
|
81
|
+
export async function runProgram(argv = process.argv, hooks = {}) {
|
|
82
|
+
const program = createProgram(hooks);
|
|
83
|
+
await program.parseAsync(argv);
|
|
84
|
+
}
|
|
85
|
+
//# 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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-text.js","sourceRoot":"","sources":["../src/progress-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,6BAA6B,EAC7B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAE3B,MAAM,mBAAmB,CAAC;AAI3B,MAAM,UAAU,oBAAoB,CAClC,QAAqB,EACrB,OAAe,EACf,KAAa,EACb,MAAc;IAEd,OAAO,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,QAAqB,EACrB,MAYC;IAED,OAAO,CAAC,GAAG,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAqB;IACvD,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,QAAqB,EACrB,YAAoB,EACpB,MAAc;IAEd,OAAO,6BAA6B,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAqB,EACrB,UAAkB;IAElB,OAAO,0BAA0B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAqB,EACrB,MAKC;IAED,OAAO;QACL,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO;QAChD,QAAQ,KAAK,IAAI;YACf,CAAC,CAAC,wBAAwB,MAAM,CAAC,aAAa,EAAE;YAChD,CAAC,CAAC,WAAW,MAAM,CAAC,aAAa,EAAE;QACrC,QAAQ,KAAK,IAAI;YACf,CAAC,CAAC,mBAAmB,MAAM,CAAC,eAAe,EAAE;YAC7C,CAAC,CAAC,SAAS,MAAM,CAAC,eAAe,EAAE;QACrC,QAAQ,KAAK,IAAI;YACf,CAAC,CAAC,0BAA0B,MAAM,CAAC,WAAW,EAAE;YAChD,CAAC,CAAC,WAAW,MAAM,CAAC,WAAW,EAAE;QACnC,EAAE;QACF,QAAQ,KAAK,IAAI;YACf,CAAC,CAAC,yBAAyB,MAAM,CAAC,MAAM,wBAAwB;YAChE,CAAC,CAAC,wBAAwB,MAAM,CAAC,MAAM,SAAS;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const SQLITE_MEMORY_MIN_NODE_MAJOR = 22;
|
|
2
|
+
export declare const SQLITE_MEMORY_PIN_VERSION: string;
|
|
3
|
+
export declare const SQLITE_MEMORY_PIN_FILES: readonly [".nvmrc", ".node-version"];
|
|
4
|
+
export interface SqliteMemorySupportResult {
|
|
5
|
+
readonly ok: boolean;
|
|
6
|
+
readonly detail: string;
|
|
7
|
+
}
|
|
8
|
+
export interface NodeRuntimePinStatus {
|
|
9
|
+
readonly ok: boolean;
|
|
10
|
+
readonly detail: string;
|
|
11
|
+
readonly missing: ReadonlyArray<string>;
|
|
12
|
+
}
|
|
13
|
+
export interface NodeRuntimePinRepairResult {
|
|
14
|
+
readonly updated: boolean;
|
|
15
|
+
readonly written: ReadonlyArray<string>;
|
|
16
|
+
}
|
|
17
|
+
export declare function formatSqliteMemorySupportWarning(options?: {
|
|
18
|
+
readonly nodeVersion?: string;
|
|
19
|
+
readonly hasNodeSqlite?: boolean;
|
|
20
|
+
}): string | null;
|
|
21
|
+
export declare function inspectNodeRuntimePinFiles(root: string): Promise<NodeRuntimePinStatus>;
|
|
22
|
+
export declare function ensureNodeRuntimePinFiles(root: string): Promise<NodeRuntimePinRepairResult>;
|
|
23
|
+
export declare function parseNodeMajor(version: string): number;
|
|
24
|
+
export declare function evaluateSqliteMemorySupport(options?: {
|
|
25
|
+
readonly nodeVersion?: string;
|
|
26
|
+
readonly hasNodeSqlite?: boolean;
|
|
27
|
+
}): SqliteMemorySupportResult;
|
|
28
|
+
//# sourceMappingURL=runtime-requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-requirements.d.ts","sourceRoot":"","sources":["../src/runtime-requirements.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAC/C,eAAO,MAAM,yBAAyB,QAAuC,CAAC;AAC9E,eAAO,MAAM,uBAAuB,sCAAuC,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IACzD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,MAAM,GAAG,IAAI,CAShB;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2B5F;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAwBjG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAWD,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,yBAAyB,CAuB5B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
export const SQLITE_MEMORY_MIN_NODE_MAJOR = 22;
|
|
6
|
+
export const SQLITE_MEMORY_PIN_VERSION = String(SQLITE_MEMORY_MIN_NODE_MAJOR);
|
|
7
|
+
export const SQLITE_MEMORY_PIN_FILES = [".nvmrc", ".node-version"];
|
|
8
|
+
export function formatSqliteMemorySupportWarning(options) {
|
|
9
|
+
const nodeVersion = options?.nodeVersion ?? process.version;
|
|
10
|
+
const result = evaluateSqliteMemorySupport({
|
|
11
|
+
nodeVersion,
|
|
12
|
+
hasNodeSqlite: options?.hasNodeSqlite,
|
|
13
|
+
});
|
|
14
|
+
if (result.ok)
|
|
15
|
+
return null;
|
|
16
|
+
return `Node ${nodeVersion} does not support SQLite memory index; memory.db live sync will fall back to Markdown. Use Node 22+ or run 'inkos doctor'.`;
|
|
17
|
+
}
|
|
18
|
+
export async function inspectNodeRuntimePinFiles(root) {
|
|
19
|
+
const missing = [];
|
|
20
|
+
for (const file of SQLITE_MEMORY_PIN_FILES) {
|
|
21
|
+
try {
|
|
22
|
+
const content = await readFile(join(root, file), "utf-8");
|
|
23
|
+
if (content.trim() !== SQLITE_MEMORY_PIN_VERSION) {
|
|
24
|
+
missing.push(file);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
missing.push(file);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (missing.length === 0) {
|
|
32
|
+
return {
|
|
33
|
+
ok: true,
|
|
34
|
+
detail: `Pinned to Node ${SQLITE_MEMORY_PIN_VERSION} via ${SQLITE_MEMORY_PIN_FILES.join(", ")}.`,
|
|
35
|
+
missing,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
ok: false,
|
|
40
|
+
detail: `Missing or outdated: ${missing.join(", ")}. Run 'inkos doctor --repair-node-runtime'.`,
|
|
41
|
+
missing,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export async function ensureNodeRuntimePinFiles(root) {
|
|
45
|
+
const written = [];
|
|
46
|
+
for (const file of SQLITE_MEMORY_PIN_FILES) {
|
|
47
|
+
const path = join(root, file);
|
|
48
|
+
let content = "";
|
|
49
|
+
try {
|
|
50
|
+
content = await readFile(path, "utf-8");
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
content = "";
|
|
54
|
+
}
|
|
55
|
+
if (content.trim() === SQLITE_MEMORY_PIN_VERSION) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
await writeFile(path, `${SQLITE_MEMORY_PIN_VERSION}\n`, "utf-8");
|
|
59
|
+
written.push(file);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
updated: written.length > 0,
|
|
63
|
+
written,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function parseNodeMajor(version) {
|
|
67
|
+
return parseInt(version.replace(/^v/i, "").split(".")[0] ?? "0", 10);
|
|
68
|
+
}
|
|
69
|
+
function hasNodeSqliteBuiltin() {
|
|
70
|
+
try {
|
|
71
|
+
require("node:sqlite");
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export function evaluateSqliteMemorySupport(options) {
|
|
79
|
+
const nodeVersion = options?.nodeVersion ?? process.version;
|
|
80
|
+
const major = parseNodeMajor(nodeVersion);
|
|
81
|
+
if (major < SQLITE_MEMORY_MIN_NODE_MAJOR) {
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
detail: `Unavailable on ${nodeVersion}. Long-book memory.db acceleration requires Node ${SQLITE_MEMORY_MIN_NODE_MAJOR}+.`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const hasNodeSqlite = options?.hasNodeSqlite ?? hasNodeSqliteBuiltin();
|
|
88
|
+
if (!hasNodeSqlite) {
|
|
89
|
+
return {
|
|
90
|
+
ok: false,
|
|
91
|
+
detail: `${nodeVersion} detected, but node:sqlite is unavailable on this runtime. memory.db acceleration will stay disabled.`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
detail: `Available on ${nodeVersion}.`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=runtime-requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-requirements.js","sourceRoot":"","sources":["../src/runtime-requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.test.d.ts","sourceRoot":"","sources":["../../../src/tui/__tests__/markdown.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { renderMarkdown } from "../markdown.js";
|
|
3
|
+
describe("renderMarkdown", () => {
|
|
4
|
+
const origTermProgram = process.env.TERM_PROGRAM;
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
if (origTermProgram === undefined)
|
|
7
|
+
delete process.env.TERM_PROGRAM;
|
|
8
|
+
else
|
|
9
|
+
process.env.TERM_PROGRAM = origTermProgram;
|
|
10
|
+
});
|
|
11
|
+
it("converts **text** to ANSI bold", () => {
|
|
12
|
+
const result = renderMarkdown("这是 **加粗** 文本");
|
|
13
|
+
// Should contain ANSI bold on/off around 加粗
|
|
14
|
+
expect(result).toContain("\x1b[1m加粗\x1b[22m");
|
|
15
|
+
// Should NOT contain raw ** markers
|
|
16
|
+
expect(result).not.toContain("**");
|
|
17
|
+
});
|
|
18
|
+
it("converts * bullets to · bullets", () => {
|
|
19
|
+
const result = renderMarkdown("* 第一项\n* 第二项");
|
|
20
|
+
expect(result).toContain("· 第一项");
|
|
21
|
+
expect(result).toContain("· 第二项");
|
|
22
|
+
// No raw * bullets remaining
|
|
23
|
+
expect(result).not.toMatch(/^\s*\* /m);
|
|
24
|
+
});
|
|
25
|
+
it("renders bold inside list items", () => {
|
|
26
|
+
const result = renderMarkdown("* **昨日**: 总统套房\n* **今日**: 桥洞");
|
|
27
|
+
expect(result).toContain("\x1b[1m昨日\x1b[22m");
|
|
28
|
+
expect(result).toContain("\x1b[1m今日\x1b[22m");
|
|
29
|
+
expect(result).toContain("·");
|
|
30
|
+
expect(result).not.toContain("**");
|
|
31
|
+
});
|
|
32
|
+
it("does not leak bold across lines", () => {
|
|
33
|
+
const result = renderMarkdown("打磨**冲突场景**,还是梳理**心理转变弧线**。");
|
|
34
|
+
// Each bold region should be self-contained
|
|
35
|
+
const boldRegions = [...result.matchAll(/\x1b\[1m(.*?)\x1b\[22m/g)];
|
|
36
|
+
expect(boldRegions).toHaveLength(2);
|
|
37
|
+
expect(boldRegions[0][1]).toBe("冲突场景");
|
|
38
|
+
expect(boldRegions[1][1]).toBe("心理转变弧线");
|
|
39
|
+
});
|
|
40
|
+
it("renders tables with box-drawing characters", () => {
|
|
41
|
+
const result = renderMarkdown("| 属性 | 值 |\n|------|----|\n| 住所 | 桥洞 |");
|
|
42
|
+
expect(result).toContain("┌");
|
|
43
|
+
expect(result).toContain("│");
|
|
44
|
+
expect(result).toContain("└");
|
|
45
|
+
});
|
|
46
|
+
it("does not contain full-reset codes that override parent Ink color", () => {
|
|
47
|
+
// \x1b[0m resets ALL terminal attributes including color set by Ink's <Text>.
|
|
48
|
+
// renderMarkdown must not emit it, so the parent <Text color={...}> stays in effect.
|
|
49
|
+
const result = renderMarkdown("这是 **加粗** 文本");
|
|
50
|
+
expect(result).not.toContain("\x1b[0m");
|
|
51
|
+
});
|
|
52
|
+
it("falls back to raw text on parse error", () => {
|
|
53
|
+
// renderMarkdown should never throw; it returns raw text on failure
|
|
54
|
+
const result = renderMarkdown("plain text");
|
|
55
|
+
expect(result).toContain("plain text");
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=markdown.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.test.js","sourceRoot":"","sources":["../../../src/tui/__tests__/markdown.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InteractionIntentType } from "@actalk/inkos-core";
|
|
2
|
+
import type { TuiCopy } from "./i18n.js";
|
|
3
|
+
export interface ActivityState {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly frames: readonly string[];
|
|
6
|
+
readonly accent: string;
|
|
7
|
+
readonly intervalMs: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function describeActivityState(intent: InteractionIntentType | "unknown", copy: Pick<TuiCopy, "activity">): ActivityState;
|
|
10
|
+
//# sourceMappingURL=activity-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-state.d.ts","sourceRoot":"","sources":["../../src/tui/activity-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAQD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAAG,SAAS,EACzC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAC9B,aAAa,CAqBf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { WARM_ACCENT } from "./theme.js";
|
|
2
|
+
const DOTS = ["· ", "·· ", "···", " ··", " ·"];
|
|
3
|
+
const WAVE = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴"];
|
|
4
|
+
const PULSE = ["◜", "◠", "◝", "◞", "◡", "◟"];
|
|
5
|
+
export function describeActivityState(intent, copy) {
|
|
6
|
+
switch (intent) {
|
|
7
|
+
case "write_next":
|
|
8
|
+
case "continue_book":
|
|
9
|
+
return { label: copy.activity.writing, frames: WAVE, accent: WARM_ACCENT, intervalMs: 180 };
|
|
10
|
+
case "revise_chapter":
|
|
11
|
+
case "rewrite_chapter":
|
|
12
|
+
return { label: copy.activity.reviewing, frames: WAVE, accent: WARM_ACCENT, intervalMs: 180 };
|
|
13
|
+
case "update_focus":
|
|
14
|
+
case "update_author_intent":
|
|
15
|
+
case "edit_truth":
|
|
16
|
+
return { label: copy.activity.updating, frames: PULSE, accent: WARM_ACCENT, intervalMs: 220 };
|
|
17
|
+
case "list_books":
|
|
18
|
+
case "select_book":
|
|
19
|
+
case "switch_mode":
|
|
20
|
+
case "explain_status":
|
|
21
|
+
return { label: copy.activity.checking, frames: DOTS, accent: WARM_ACCENT, intervalMs: 220 };
|
|
22
|
+
case "chat":
|
|
23
|
+
default:
|
|
24
|
+
return { label: copy.activity.thinking, frames: DOTS, accent: WARM_ACCENT, intervalMs: 220 };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=activity-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity-state.js","sourceRoot":"","sources":["../../src/tui/activity-state.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAC1D,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AACrD,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CACnC,MAAyC,EACzC,IAA+B;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,eAAe;YAClB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAC9F,KAAK,gBAAgB,CAAC;QACtB,KAAK,iBAAiB;YACpB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAChG,KAAK,cAAc,CAAC;QACpB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,YAAY;YACf,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAChG,KAAK,YAAY,CAAC;QAClB,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,gBAAgB;YACnB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAC/F,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACjG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const reset = "\u001B[0m";
|
|
2
|
+
export declare const bold = "\u001B[1m";
|
|
3
|
+
export declare const dim = "\u001B[2m";
|
|
4
|
+
export declare const italic = "\u001B[3m";
|
|
5
|
+
export declare const red = "\u001B[31m";
|
|
6
|
+
export declare const green = "\u001B[32m";
|
|
7
|
+
export declare const yellow = "\u001B[33m";
|
|
8
|
+
export declare const blue = "\u001B[34m";
|
|
9
|
+
export declare const magenta = "\u001B[35m";
|
|
10
|
+
export declare const cyan = "\u001B[36m";
|
|
11
|
+
export declare const white = "\u001B[37m";
|
|
12
|
+
export declare const gray = "\u001B[90m";
|
|
13
|
+
export declare const brightRed = "\u001B[91m";
|
|
14
|
+
export declare const brightGreen = "\u001B[92m";
|
|
15
|
+
export declare const brightYellow = "\u001B[93m";
|
|
16
|
+
export declare const brightBlue = "\u001B[94m";
|
|
17
|
+
export declare const brightMagenta = "\u001B[95m";
|
|
18
|
+
export declare const brightCyan = "\u001B[96m";
|
|
19
|
+
export declare const brightWhite = "\u001B[97m";
|
|
20
|
+
export declare const bgCyan = "\u001B[46m";
|
|
21
|
+
export declare const bgBlue = "\u001B[44m";
|
|
22
|
+
export declare const bgMagenta = "\u001B[45m";
|
|
23
|
+
export declare const bgGreen = "\u001B[42m";
|
|
24
|
+
export declare const bgYellow = "\u001B[43m";
|
|
25
|
+
export declare const bgRed = "\u001B[41m";
|
|
26
|
+
export declare const bgGray = "\u001B[100m";
|
|
27
|
+
export declare const clearScreen = "\u001B[2J\u001B[H";
|
|
28
|
+
export declare const showCursor = "\u001B[?25h";
|
|
29
|
+
export declare const hideCursor = "\u001B[?25l";
|
|
30
|
+
export declare const clearLine = "\u001B[2K\r";
|
|
31
|
+
export declare const saveCursor = "\u001B[s";
|
|
32
|
+
export declare const restoreCursor = "\u001B[u";
|
|
33
|
+
export declare function c(text: string, ...codes: string[]): string;
|
|
34
|
+
export declare function termWidth(): number;
|
|
35
|
+
export declare function stripAnsi(s: string): string;
|
|
36
|
+
export declare function hr(char?: string): string;
|
|
37
|
+
export declare function box(lines: string[], width?: number): string;
|
|
38
|
+
export declare function badge(text: string, bg: string, fg?: string): string;
|
|
39
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../src/tui/ansi.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,cAAY,CAAC;AAC/B,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,MAAM,cAAY,CAAC;AAEhC,eAAO,MAAM,GAAG,eAAa,CAAC;AAC9B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,SAAS,eAAa,CAAC;AACpC,eAAO,MAAM,WAAW,eAAa,CAAC;AACtC,eAAO,MAAM,YAAY,eAAa,CAAC;AACvC,eAAO,MAAM,UAAU,eAAa,CAAC;AACrC,eAAO,MAAM,aAAa,eAAa,CAAC;AACxC,eAAO,MAAM,UAAU,eAAa,CAAC;AACrC,eAAO,MAAM,WAAW,eAAa,CAAC;AAEtC,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,SAAS,eAAa,CAAC;AACpC,eAAO,MAAM,OAAO,eAAa,CAAC;AAClC,eAAO,MAAM,QAAQ,eAAa,CAAC;AACnC,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,MAAM,gBAAc,CAAC;AAElC,eAAO,MAAM,WAAW,sBAAkB,CAAC;AAC3C,eAAO,MAAM,UAAU,gBAAc,CAAC;AACtC,eAAO,MAAM,UAAU,gBAAc,CAAC;AACtC,eAAO,MAAM,SAAS,gBAAc,CAAC;AACrC,eAAO,MAAM,UAAU,aAAW,CAAC;AACnC,eAAO,MAAM,aAAa,aAAW,CAAC;AAEtC,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,EAAE,CAAC,IAAI,SAAM,GAAG,MAAM,CAErC;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM,CASvD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,MAAoB,GAAG,MAAM,CAEhF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
package/dist/tui/ansi.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* ── ANSI terminal helpers ── zero dependencies ── */
|
|
2
|
+
export const reset = "\x1b[0m";
|
|
3
|
+
export const bold = "\x1b[1m";
|
|
4
|
+
export const dim = "\x1b[2m";
|
|
5
|
+
export const italic = "\x1b[3m";
|
|
6
|
+
export const red = "\x1b[31m";
|
|
7
|
+
export const green = "\x1b[32m";
|
|
8
|
+
export const yellow = "\x1b[33m";
|
|
9
|
+
export const blue = "\x1b[34m";
|
|
10
|
+
export const magenta = "\x1b[35m";
|
|
11
|
+
export const cyan = "\x1b[36m";
|
|
12
|
+
export const white = "\x1b[37m";
|
|
13
|
+
export const gray = "\x1b[90m";
|
|
14
|
+
export const brightRed = "\x1b[91m";
|
|
15
|
+
export const brightGreen = "\x1b[92m";
|
|
16
|
+
export const brightYellow = "\x1b[93m";
|
|
17
|
+
export const brightBlue = "\x1b[94m";
|
|
18
|
+
export const brightMagenta = "\x1b[95m";
|
|
19
|
+
export const brightCyan = "\x1b[96m";
|
|
20
|
+
export const brightWhite = "\x1b[97m";
|
|
21
|
+
export const bgCyan = "\x1b[46m";
|
|
22
|
+
export const bgBlue = "\x1b[44m";
|
|
23
|
+
export const bgMagenta = "\x1b[45m";
|
|
24
|
+
export const bgGreen = "\x1b[42m";
|
|
25
|
+
export const bgYellow = "\x1b[43m";
|
|
26
|
+
export const bgRed = "\x1b[41m";
|
|
27
|
+
export const bgGray = "\x1b[100m";
|
|
28
|
+
export const clearScreen = "\x1b[2J\x1b[H";
|
|
29
|
+
export const showCursor = "\x1b[?25h";
|
|
30
|
+
export const hideCursor = "\x1b[?25l";
|
|
31
|
+
export const clearLine = "\x1b[2K\r";
|
|
32
|
+
export const saveCursor = "\x1b[s";
|
|
33
|
+
export const restoreCursor = "\x1b[u";
|
|
34
|
+
export function c(text, ...codes) {
|
|
35
|
+
return `${codes.join("")}${text}${reset}`;
|
|
36
|
+
}
|
|
37
|
+
export function termWidth() {
|
|
38
|
+
return process.stdout.columns ?? 80;
|
|
39
|
+
}
|
|
40
|
+
export function stripAnsi(s) {
|
|
41
|
+
return s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
42
|
+
}
|
|
43
|
+
export function hr(char = "─") {
|
|
44
|
+
return char.repeat(Math.min(termWidth(), 60));
|
|
45
|
+
}
|
|
46
|
+
export function box(lines, width = 56) {
|
|
47
|
+
const top = `╭${"─".repeat(width - 2)}╮`;
|
|
48
|
+
const bot = `╰${"─".repeat(width - 2)}╯`;
|
|
49
|
+
const rows = lines.map((line) => {
|
|
50
|
+
const visible = stripAnsi(line);
|
|
51
|
+
const pad = Math.max(0, width - 2 - visible.length);
|
|
52
|
+
return `│${line}${" ".repeat(pad)}│`;
|
|
53
|
+
});
|
|
54
|
+
return [top, ...rows, bot].join("\n");
|
|
55
|
+
}
|
|
56
|
+
export function badge(text, bg, fg = brightWhite) {
|
|
57
|
+
return `${bg}${fg}${bold} ${text} ${reset}`;
|
|
58
|
+
}
|
|
59
|
+
export function sleep(ms) {
|
|
60
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=ansi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../src/tui/ansi.ts"],"names":[],"mappings":"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"}
|