@actalk/inkos 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +661 -21
  2. package/dist/commands/interact.d.ts +25 -0
  3. package/dist/commands/interact.d.ts.map +1 -0
  4. package/dist/commands/interact.js +73 -0
  5. package/dist/commands/interact.js.map +1 -0
  6. package/dist/commands/revise.d.ts.map +1 -1
  7. package/dist/commands/revise.js +4 -1
  8. package/dist/commands/revise.js.map +1 -1
  9. package/dist/commands/studio.d.ts +5 -0
  10. package/dist/commands/studio.d.ts.map +1 -1
  11. package/dist/commands/studio.js +23 -1
  12. package/dist/commands/studio.js.map +1 -1
  13. package/dist/commands/tui.d.ts +6 -0
  14. package/dist/commands/tui.d.ts.map +1 -0
  15. package/dist/commands/tui.js +14 -0
  16. package/dist/commands/tui.js.map +1 -0
  17. package/dist/commands/write.js +65 -1
  18. package/dist/commands/write.js.map +1 -1
  19. package/dist/index.js +2 -63
  20. package/dist/index.js.map +1 -1
  21. package/dist/localization.d.ts +0 -1
  22. package/dist/localization.d.ts.map +1 -1
  23. package/dist/localization.js +0 -6
  24. package/dist/localization.js.map +1 -1
  25. package/dist/program.d.ts +10 -0
  26. package/dist/program.d.ts.map +1 -0
  27. package/dist/program.js +85 -0
  28. package/dist/program.js.map +1 -0
  29. package/dist/tui/activity-state.d.ts +10 -0
  30. package/dist/tui/activity-state.d.ts.map +1 -0
  31. package/dist/tui/activity-state.js +27 -0
  32. package/dist/tui/activity-state.js.map +1 -0
  33. package/dist/tui/ansi.d.ts +40 -0
  34. package/dist/tui/ansi.d.ts.map +1 -0
  35. package/dist/tui/ansi.js +62 -0
  36. package/dist/tui/ansi.js.map +1 -0
  37. package/dist/tui/app.d.ts +103 -0
  38. package/dist/tui/app.d.ts.map +1 -0
  39. package/dist/tui/app.js +134 -0
  40. package/dist/tui/app.js.map +1 -0
  41. package/dist/tui/chat-depth.d.ts +9 -0
  42. package/dist/tui/chat-depth.d.ts.map +1 -0
  43. package/dist/tui/chat-depth.js +12 -0
  44. package/dist/tui/chat-depth.js.map +1 -0
  45. package/dist/tui/chat-draft.d.ts +4 -0
  46. package/dist/tui/chat-draft.d.ts.map +1 -0
  47. package/dist/tui/chat-draft.js +28 -0
  48. package/dist/tui/chat-draft.js.map +1 -0
  49. package/dist/tui/composer-caret.d.ts +10 -0
  50. package/dist/tui/composer-caret.d.ts.map +1 -0
  51. package/dist/tui/composer-caret.js +13 -0
  52. package/dist/tui/composer-caret.js.map +1 -0
  53. package/dist/tui/composer-display.d.ts +7 -0
  54. package/dist/tui/composer-display.d.ts.map +1 -0
  55. package/dist/tui/composer-display.js +17 -0
  56. package/dist/tui/composer-display.js.map +1 -0
  57. package/dist/tui/dashboard-model.d.ts +45 -0
  58. package/dist/tui/dashboard-model.d.ts.map +1 -0
  59. package/dist/tui/dashboard-model.js +101 -0
  60. package/dist/tui/dashboard-model.js.map +1 -0
  61. package/dist/tui/dashboard.d.ts +38 -0
  62. package/dist/tui/dashboard.d.ts.map +1 -0
  63. package/dist/tui/dashboard.js +320 -0
  64. package/dist/tui/dashboard.js.map +1 -0
  65. package/dist/tui/effects.d.ts +61 -0
  66. package/dist/tui/effects.d.ts.map +1 -0
  67. package/dist/tui/effects.js +459 -0
  68. package/dist/tui/effects.js.map +1 -0
  69. package/dist/tui/i18n.d.ts +69 -0
  70. package/dist/tui/i18n.d.ts.map +1 -0
  71. package/dist/tui/i18n.js +239 -0
  72. package/dist/tui/i18n.js.map +1 -0
  73. package/dist/tui/input-history.d.ts +12 -0
  74. package/dist/tui/input-history.d.ts.map +1 -0
  75. package/dist/tui/input-history.js +47 -0
  76. package/dist/tui/input-history.js.map +1 -0
  77. package/dist/tui/local-commands.d.ts +5 -0
  78. package/dist/tui/local-commands.d.ts.map +1 -0
  79. package/dist/tui/local-commands.js +43 -0
  80. package/dist/tui/local-commands.js.map +1 -0
  81. package/dist/tui/output.d.ts +11 -0
  82. package/dist/tui/output.d.ts.map +1 -0
  83. package/dist/tui/output.js +24 -0
  84. package/dist/tui/output.js.map +1 -0
  85. package/dist/tui/session-store.d.ts +2 -0
  86. package/dist/tui/session-store.d.ts.map +1 -0
  87. package/dist/tui/session-store.js +2 -0
  88. package/dist/tui/session-store.js.map +1 -0
  89. package/dist/tui/setup.d.ts +49 -0
  90. package/dist/tui/setup.d.ts.map +1 -0
  91. package/dist/tui/setup.js +268 -0
  92. package/dist/tui/setup.js.map +1 -0
  93. package/dist/tui/slash-autocomplete.d.ts +6 -0
  94. package/dist/tui/slash-autocomplete.d.ts.map +1 -0
  95. package/dist/tui/slash-autocomplete.js +50 -0
  96. package/dist/tui/slash-autocomplete.js.map +1 -0
  97. package/dist/tui/theme.d.ts +11 -0
  98. package/dist/tui/theme.d.ts.map +1 -0
  99. package/dist/tui/theme.js +13 -0
  100. package/dist/tui/theme.js.map +1 -0
  101. package/dist/tui/tools.d.ts +15 -0
  102. package/dist/tui/tools.d.ts.map +1 -0
  103. package/dist/tui/tools.js +17 -0
  104. package/dist/tui/tools.js.map +1 -0
  105. package/package.json +12 -7
@@ -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,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"}
@@ -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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"}
@@ -0,0 +1,103 @@
1
+ import { type InteractionRuntimeTools } from "@actalk/inkos-core";
2
+ import { type TuiLocale } from "./i18n.js";
3
+ export interface TuiFrameState {
4
+ readonly locale?: TuiLocale;
5
+ readonly projectName: string;
6
+ readonly activeBookTitle?: string;
7
+ readonly automationMode: string;
8
+ readonly status: string;
9
+ readonly messages?: ReadonlyArray<string>;
10
+ readonly events?: ReadonlyArray<string>;
11
+ }
12
+ export declare function renderTuiFrame(state: TuiFrameState): string;
13
+ export declare function processTuiInput(projectRoot: string, input: string, tools: InteractionRuntimeTools): Promise<{
14
+ session: {
15
+ events: {
16
+ status: "completed" | "planning" | "idle" | "composing" | "writing" | "assessing" | "repairing" | "persisting" | "waiting_human" | "blocked" | "failed";
17
+ kind: string;
18
+ timestamp: number;
19
+ detail?: string | undefined;
20
+ bookId?: string | undefined;
21
+ chapterNumber?: number | undefined;
22
+ }[];
23
+ messages: {
24
+ content: string;
25
+ role: "system" | "user" | "assistant";
26
+ timestamp: number;
27
+ }[];
28
+ sessionId: string;
29
+ projectRoot: string;
30
+ automationMode: "auto" | "semi" | "manual";
31
+ activeBookId?: string | undefined;
32
+ activeChapterNumber?: number | undefined;
33
+ creationDraft?: {
34
+ concept: string;
35
+ missingFields: string[];
36
+ readyToCreate: boolean;
37
+ title?: string | undefined;
38
+ platform?: string | undefined;
39
+ genre?: string | undefined;
40
+ targetChapters?: number | undefined;
41
+ chapterWordCount?: number | undefined;
42
+ language?: "zh" | "en" | undefined;
43
+ protagonist?: string | undefined;
44
+ authorIntent?: string | undefined;
45
+ currentFocus?: string | undefined;
46
+ volumeOutline?: string | undefined;
47
+ blurb?: string | undefined;
48
+ worldPremise?: string | undefined;
49
+ settingNotes?: string | undefined;
50
+ supportingCast?: string | undefined;
51
+ conflictCore?: string | undefined;
52
+ constraints?: string | undefined;
53
+ nextQuestion?: string | undefined;
54
+ } | undefined;
55
+ pendingDecision?: {
56
+ bookId: string;
57
+ kind: string;
58
+ summary: string;
59
+ chapterNumber?: number | undefined;
60
+ } | undefined;
61
+ currentExecution?: {
62
+ status: "completed" | "planning" | "idle" | "composing" | "writing" | "assessing" | "repairing" | "persisting" | "waiting_human" | "blocked" | "failed";
63
+ bookId?: string | undefined;
64
+ chapterNumber?: number | undefined;
65
+ stageLabel?: string | undefined;
66
+ } | undefined;
67
+ };
68
+ request: {
69
+ intent: "chat" | "develop_book" | "show_book_draft" | "create_book" | "discard_book_draft" | "list_books" | "select_book" | "continue_book" | "write_next" | "pause_book" | "resume_book" | "revise_chapter" | "rewrite_chapter" | "patch_chapter_text" | "edit_truth" | "rename_entity" | "update_focus" | "update_author_intent" | "explain_status" | "explain_failure" | "export_book" | "switch_mode";
70
+ title?: string | undefined;
71
+ platform?: string | undefined;
72
+ genre?: string | undefined;
73
+ targetChapters?: number | undefined;
74
+ chapterWordCount?: number | undefined;
75
+ language?: "zh" | "en" | undefined;
76
+ protagonist?: string | undefined;
77
+ authorIntent?: string | undefined;
78
+ currentFocus?: string | undefined;
79
+ volumeOutline?: string | undefined;
80
+ bookId?: string | undefined;
81
+ chapterNumber?: number | undefined;
82
+ blurb?: string | undefined;
83
+ worldPremise?: string | undefined;
84
+ settingNotes?: string | undefined;
85
+ supportingCast?: string | undefined;
86
+ conflictCore?: string | undefined;
87
+ constraints?: string | undefined;
88
+ fileName?: string | undefined;
89
+ format?: "txt" | "md" | "epub" | undefined;
90
+ approvedOnly?: boolean | undefined;
91
+ outputPath?: string | undefined;
92
+ oldValue?: string | undefined;
93
+ newValue?: string | undefined;
94
+ targetText?: string | undefined;
95
+ replacementText?: string | undefined;
96
+ instruction?: string | undefined;
97
+ mode?: "auto" | "semi" | "manual" | undefined;
98
+ };
99
+ responseText?: string;
100
+ details?: Readonly<Record<string, unknown>>;
101
+ }>;
102
+ export declare function launchTui(projectRoot: string, toolsOverride?: InteractionRuntimeTools): Promise<void>;
103
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/tui/app.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAsE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAO/G,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACzC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAqB3D;AAeD,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,uBAAuB;;;;;;kBAoGsnI,CAAC;kBAAoC,CAAC;yBAA2C,CAAC;;;;;;;;;;;;;;;;iBAA6c,CAAC;oBAAsC,CAAC;iBAAmC,CAAC;0BAA4C,CAAC;4BAA8C,CAAC;oBAAsC,CAAC;uBAA8C,CAAC;wBAA0C,CAAC;wBAA0C,CAAC;yBAA2C,CAAC;iBAAmC,CAAC;wBAA0C,CAAC;wBAA0C,CAAC;0BAA4C,CAAC;wBAA0C,CAAC;uBAAyC,CAAC;wBAA0C,CAAC;;;;;;yBAA6J,CAAC;;;;kBAAiP,CAAC;yBAA2C,CAAC;sBAAwC,CAAC;;;;;aApJ5yL,CAAC;gBACO,CAAC;aACG,CAAC;sBAE5B,CAAC;wBACmB,CAAC;gBACP,CAAC;mBAGA,CAAC;oBACpB,CAAA;oBAA0C,CAAC;qBAE3C,CAAD;cACkB,CAAC;qBACR,CAAC;aAAmC,CAAC;oBAC7B,CAAC;oBAA0C,CAAC;sBAC9B,CAAC;oBAC9B,CAAC;mBAEE,CAAC;gBAAsC,CAAC;cAC9B,CAAC;oBAGb,CAAA;kBAAyC,CAAC;gBAC1C,CAAH;gBAAsC,CAAC;kBAEvB,CAAC;uBAGD,CAAC;mBAGW,CAAC;YAEtB,CAAC;;;;GAsCV;AAED,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,uBAAuB,GACtC,OAAO,CAAC,IAAI,CAAC,CAsEf"}
@@ -0,0 +1,134 @@
1
+ import { basename } from "node:path";
2
+ import { appendInteractionMessage, processProjectInteractionInput, } from "@actalk/inkos-core";
3
+ import { render } from "ink";
4
+ import React from "react";
5
+ import { InkTuiApp } from "./dashboard.js";
6
+ import { formatModeLabel, getTuiCopy, normalizeStageLabel, resolveTuiLocale } from "./i18n.js";
7
+ import { formatTuiResult } from "./output.js";
8
+ import { loadProjectSession, persistProjectSession } from "./session-store.js";
9
+ import { detectModelInfo, detectProjectLanguage, ensureProject, interactiveLlmSetup } from "./setup.js";
10
+ import { createInteractionTools } from "./tools.js";
11
+ import { animateStartup } from "./effects.js";
12
+ export function renderTuiFrame(state) {
13
+ const locale = state.locale ?? resolveTuiLocale();
14
+ const copy = getTuiCopy(locale);
15
+ const lines = [
16
+ `${copy.labels.project} ${state.projectName}`,
17
+ `${copy.labels.stage} ${normalizeStageLabel(state.status, copy)}`,
18
+ `${copy.labels.mode} ${formatModeLabel(state.automationMode, copy)}`,
19
+ `${copy.labels.book} ${state.activeBookTitle ?? copy.labels.none}`,
20
+ "",
21
+ ...(state.messages?.length
22
+ ? state.messages.slice(-6).map((message) => `- ${message}`)
23
+ : [`- (${copy.labels.none})`]),
24
+ "",
25
+ state.events?.length
26
+ ? state.events.slice(-1).map((event) => `${copy.labels.recent} ${event}`)[0]
27
+ : `${copy.labels.recent} (${copy.labels.none})`,
28
+ "",
29
+ copy.composer.placeholder,
30
+ "> ",
31
+ ];
32
+ return lines.join("\n");
33
+ }
34
+ async function readVersion() {
35
+ try {
36
+ const { readFile } = await import("node:fs/promises");
37
+ const { join, dirname } = await import("node:path");
38
+ const { fileURLToPath } = await import("node:url");
39
+ const root = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
40
+ const pkg = JSON.parse(await readFile(join(root, "package.json"), "utf-8"));
41
+ return pkg.version ?? "dev";
42
+ }
43
+ catch {
44
+ return "dev";
45
+ }
46
+ }
47
+ export async function processTuiInput(projectRoot, input, tools) {
48
+ const projectLanguage = await detectProjectLanguage(projectRoot);
49
+ const locale = resolveTuiLocale(process.env, projectLanguage);
50
+ const result = await processProjectInteractionInput({
51
+ projectRoot,
52
+ input,
53
+ tools,
54
+ });
55
+ const summary = formatTuiResult({
56
+ intent: result.request.intent,
57
+ status: result.session.currentExecution?.status ?? "completed",
58
+ bookId: result.session.activeBookId,
59
+ mode: result.request.mode,
60
+ responseText: result.responseText,
61
+ locale,
62
+ });
63
+ const nextSession = appendInteractionMessage(result.session, {
64
+ role: "assistant",
65
+ content: summary,
66
+ timestamp: Date.now(),
67
+ });
68
+ await persistProjectSession(projectRoot, nextSession);
69
+ return { ...result, session: nextSession };
70
+ }
71
+ export async function launchTui(projectRoot, toolsOverride) {
72
+ const { hasLlmConfig } = await ensureProject(projectRoot);
73
+ const projectLanguage = await detectProjectLanguage(projectRoot);
74
+ const locale = resolveTuiLocale(process.env, projectLanguage);
75
+ const copy = getTuiCopy(locale);
76
+ if (!hasLlmConfig) {
77
+ console.log();
78
+ console.log(copy.notes.noLlmConfig);
79
+ console.log(copy.notes.setupProvider);
80
+ await interactiveLlmSetup(projectRoot);
81
+ }
82
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
83
+ return;
84
+ }
85
+ const session = await loadProjectSession(projectRoot);
86
+ const modelInfo = await detectModelInfo(projectRoot);
87
+ const modelLabel = modelInfo
88
+ ? `${modelInfo.model && modelInfo.model !== "unknown" ? modelInfo.model : copy.labels.unknown} (${modelInfo.provider})`
89
+ : copy.labels.notConfigured;
90
+ const version = await readVersion();
91
+ const chatStreamBridge = {};
92
+ let tools;
93
+ try {
94
+ tools = toolsOverride ?? (await createInteractionTools(projectRoot, {
95
+ onChatTextDelta: (text) => {
96
+ chatStreamBridge.onTextDelta?.(text);
97
+ },
98
+ }));
99
+ }
100
+ catch (error) {
101
+ const message = error instanceof Error ? error.message : String(error);
102
+ console.error(copy.notes.toolInitFailed(message));
103
+ console.error(copy.notes.toolInitHint);
104
+ return;
105
+ }
106
+ const originalEmitWarning = process.emitWarning;
107
+ process.emitWarning = (() => { });
108
+ const originalStderrWrite = process.stderr.write.bind(process.stderr);
109
+ process.stderr.write = (chunk, ...args) => {
110
+ const text = typeof chunk === "string" ? chunk : chunk.toString();
111
+ if (text.includes("ExperimentalWarning") || text.includes("--trace-warnings")) {
112
+ return true;
113
+ }
114
+ return originalStderrWrite(chunk, ...args);
115
+ };
116
+ try {
117
+ await animateStartup(version, basename(projectRoot), session.activeBookId, modelInfo);
118
+ const app = render(React.createElement(InkTuiApp, {
119
+ locale,
120
+ projectRoot,
121
+ projectName: basename(projectRoot),
122
+ modelLabel,
123
+ initialSession: session,
124
+ tools,
125
+ chatStreamBridge,
126
+ }), { exitOnCtrlC: true });
127
+ await app.waitUntilExit();
128
+ }
129
+ finally {
130
+ process.emitWarning = originalEmitWarning;
131
+ process.stderr.write = originalStderrWrite;
132
+ }
133
+ }
134
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type ChatDepth = "light" | "normal" | "deep";
2
+ export interface ChatDepthProfile {
3
+ readonly depth: ChatDepth;
4
+ readonly temperature: number;
5
+ readonly maxTokens: number;
6
+ readonly label: string;
7
+ }
8
+ export declare function resolveChatDepthProfile(depth: ChatDepth): ChatDepthProfile;
9
+ //# sourceMappingURL=chat-depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-depth.d.ts","sourceRoot":"","sources":["../../src/tui/chat-depth.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAU1E"}
@@ -0,0 +1,12 @@
1
+ export function resolveChatDepthProfile(depth) {
2
+ switch (depth) {
3
+ case "light":
4
+ return { depth, temperature: 0.3, maxTokens: 160, label: "light" };
5
+ case "deep":
6
+ return { depth, temperature: 0.45, maxTokens: 420, label: "deep" };
7
+ case "normal":
8
+ default:
9
+ return { depth: "normal", temperature: 0.4, maxTokens: 240, label: "normal" };
10
+ }
11
+ }
12
+ //# sourceMappingURL=chat-depth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-depth.js","sourceRoot":"","sources":["../../src/tui/chat-depth.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,uBAAuB,CAAC,KAAgB;IACtD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACrE,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACrE,KAAK,QAAQ,CAAC;QACd;YACE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClF,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type InteractionSession } from "@actalk/inkos-core";
2
+ export declare function createOptimisticUserMessageSession(session: InteractionSession, input: string, timestamp?: number): InteractionSession;
3
+ export declare function appendStreamingAssistantChunk(session: InteractionSession, chunk: string, timestamp?: number): InteractionSession;
4
+ //# sourceMappingURL=chat-draft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-draft.d.ts","sourceRoot":"","sources":["../../src/tui/chat-draft.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAmB,GAC7B,kBAAkB,CAMpB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAmB,GAC7B,kBAAkB,CAoBpB"}
@@ -0,0 +1,28 @@
1
+ import { appendInteractionMessage, } from "@actalk/inkos-core";
2
+ export function createOptimisticUserMessageSession(session, input, timestamp = Date.now()) {
3
+ return appendInteractionMessage(session, {
4
+ role: "user",
5
+ content: input,
6
+ timestamp,
7
+ });
8
+ }
9
+ export function appendStreamingAssistantChunk(session, chunk, timestamp = Date.now()) {
10
+ if (!chunk) {
11
+ return session;
12
+ }
13
+ const lastMessage = session.messages.at(-1);
14
+ if (lastMessage?.role === "assistant" && lastMessage.timestamp === timestamp) {
15
+ return {
16
+ ...session,
17
+ messages: session.messages.map((message, index) => index === session.messages.length - 1
18
+ ? { ...message, content: message.content + chunk }
19
+ : message),
20
+ };
21
+ }
22
+ return appendInteractionMessage(session, {
23
+ role: "assistant",
24
+ content: chunk,
25
+ timestamp,
26
+ });
27
+ }
28
+ //# sourceMappingURL=chat-draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-draft.js","sourceRoot":"","sources":["../../src/tui/chat-draft.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAEzB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,kCAAkC,CAChD,OAA2B,EAC3B,KAAa,EACb,YAAoB,IAAI,CAAC,GAAG,EAAE;IAE9B,OAAO,wBAAwB,CAAC,OAAO,EAAE;QACvC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;QACd,SAAS;KACV,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAA2B,EAC3B,KAAa,EACb,YAAoB,IAAI,CAAC,GAAG,EAAE;IAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,WAAW,EAAE,IAAI,KAAK,WAAW,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7E,OAAO;YACL,GAAG,OAAO;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACtF,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,KAAK,EAAE;gBAClD,CAAC,CAAC,OAAO,CAAC;SACb,CAAC;IACJ,CAAC;IAED,OAAO,wBAAwB,CAAC,OAAO,EAAE;QACvC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK;QACd,SAAS;KACV,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ComposerCaretState {
2
+ readonly visible: boolean;
3
+ readonly shouldAnimate: boolean;
4
+ }
5
+ export declare function resolveComposerCaretState(params: {
6
+ readonly inputValue: string;
7
+ readonly isSubmitting: boolean;
8
+ readonly blinkTick: number;
9
+ }): ComposerCaretState;
10
+ //# sourceMappingURL=composer-caret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-caret.d.ts","sourceRoot":"","sources":["../../src/tui/composer-caret.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,GAAG,kBAAkB,CAYrB"}
@@ -0,0 +1,13 @@
1
+ export function resolveComposerCaretState(params) {
2
+ if (params.isSubmitting) {
3
+ return {
4
+ visible: false,
5
+ shouldAnimate: false,
6
+ };
7
+ }
8
+ return {
9
+ visible: true,
10
+ shouldAnimate: false,
11
+ };
12
+ }
13
+ //# sourceMappingURL=composer-caret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-caret.js","sourceRoot":"","sources":["../../src/tui/composer-caret.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,yBAAyB,CAAC,MAIzC;IACC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function renderComposerDisplay(inputValue: string, placeholder: string, showCursor: boolean): {
2
+ readonly textBeforeCursor: string;
3
+ readonly textAfterCursor: string;
4
+ readonly cursor: string;
5
+ readonly isPlaceholder: boolean;
6
+ };
7
+ //# sourceMappingURL=composer-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-display.d.ts","sourceRoot":"","sources":["../../src/tui/composer-display.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,OAAO,GAClB;IACD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;CACjC,CAgBA"}