@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.
Files changed (250) hide show
  1. package/LICENSE +661 -0
  2. package/dist/book-backup.d.ts +33 -0
  3. package/dist/book-backup.d.ts.map +1 -0
  4. package/dist/book-backup.js +74 -0
  5. package/dist/book-backup.js.map +1 -0
  6. package/dist/commands/agent.d.ts +3 -0
  7. package/dist/commands/agent.d.ts.map +1 -0
  8. package/dist/commands/agent.js +71 -0
  9. package/dist/commands/agent.js.map +1 -0
  10. package/dist/commands/analytics.d.ts +3 -0
  11. package/dist/commands/analytics.d.ts.map +1 -0
  12. package/dist/commands/analytics.js +74 -0
  13. package/dist/commands/analytics.js.map +1 -0
  14. package/dist/commands/audit.d.ts +3 -0
  15. package/dist/commands/audit.d.ts.map +1 -0
  16. package/dist/commands/audit.js +81 -0
  17. package/dist/commands/audit.js.map +1 -0
  18. package/dist/commands/auto.d.ts +3 -0
  19. package/dist/commands/auto.d.ts.map +1 -0
  20. package/dist/commands/auto.js +136 -0
  21. package/dist/commands/auto.js.map +1 -0
  22. package/dist/commands/book.d.ts +3 -0
  23. package/dist/commands/book.d.ts.map +1 -0
  24. package/dist/commands/book.js +324 -0
  25. package/dist/commands/book.js.map +1 -0
  26. package/dist/commands/chapter.d.ts +3 -0
  27. package/dist/commands/chapter.d.ts.map +1 -0
  28. package/dist/commands/chapter.js +103 -0
  29. package/dist/commands/chapter.js.map +1 -0
  30. package/dist/commands/compose.d.ts +3 -0
  31. package/dist/commands/compose.d.ts.map +1 -0
  32. package/dist/commands/compose.js +46 -0
  33. package/dist/commands/compose.js.map +1 -0
  34. package/dist/commands/config.d.ts +3 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +321 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/consolidate.d.ts +3 -0
  39. package/dist/commands/consolidate.d.ts.map +1 -0
  40. package/dist/commands/consolidate.js +50 -0
  41. package/dist/commands/consolidate.js.map +1 -0
  42. package/dist/commands/daemon.d.ts +4 -0
  43. package/dist/commands/daemon.d.ts.map +1 -0
  44. package/dist/commands/daemon.js +118 -0
  45. package/dist/commands/daemon.js.map +1 -0
  46. package/dist/commands/detect.d.ts +3 -0
  47. package/dist/commands/detect.d.ts.map +1 -0
  48. package/dist/commands/detect.js +104 -0
  49. package/dist/commands/detect.js.map +1 -0
  50. package/dist/commands/doctor.d.ts +8 -0
  51. package/dist/commands/doctor.d.ts.map +1 -0
  52. package/dist/commands/doctor.js +356 -0
  53. package/dist/commands/doctor.js.map +1 -0
  54. package/dist/commands/draft.d.ts +3 -0
  55. package/dist/commands/draft.d.ts.map +1 -0
  56. package/dist/commands/draft.js +42 -0
  57. package/dist/commands/draft.js.map +1 -0
  58. package/dist/commands/eval.d.ts +3 -0
  59. package/dist/commands/eval.d.ts.map +1 -0
  60. package/dist/commands/eval.js +57 -0
  61. package/dist/commands/eval.js.map +1 -0
  62. package/dist/commands/export.d.ts +3 -0
  63. package/dist/commands/export.d.ts.map +1 -0
  64. package/dist/commands/export.js +46 -0
  65. package/dist/commands/export.js.map +1 -0
  66. package/dist/commands/fanfic.d.ts +3 -0
  67. package/dist/commands/fanfic.d.ts.map +1 -0
  68. package/dist/commands/fanfic.js +177 -0
  69. package/dist/commands/fanfic.js.map +1 -0
  70. package/dist/commands/forecast.d.ts +12 -0
  71. package/dist/commands/forecast.d.ts.map +1 -0
  72. package/dist/commands/forecast.js +156 -0
  73. package/dist/commands/forecast.js.map +1 -0
  74. package/dist/commands/genre.d.ts +11 -0
  75. package/dist/commands/genre.d.ts.map +1 -0
  76. package/dist/commands/genre.js +186 -0
  77. package/dist/commands/genre.js.map +1 -0
  78. package/dist/commands/import.d.ts +3 -0
  79. package/dist/commands/import.d.ts.map +1 -0
  80. package/dist/commands/import.js +110 -0
  81. package/dist/commands/import.js.map +1 -0
  82. package/dist/commands/init.d.ts +3 -0
  83. package/dist/commands/init.d.ts.map +1 -0
  84. package/dist/commands/init.js +63 -0
  85. package/dist/commands/init.js.map +1 -0
  86. package/dist/commands/interact.d.ts +6 -0
  87. package/dist/commands/interact.d.ts.map +1 -0
  88. package/dist/commands/interact.js +95 -0
  89. package/dist/commands/interact.js.map +1 -0
  90. package/dist/commands/plan.d.ts +3 -0
  91. package/dist/commands/plan.d.ts.map +1 -0
  92. package/dist/commands/plan.js +50 -0
  93. package/dist/commands/plan.js.map +1 -0
  94. package/dist/commands/radar.d.ts +3 -0
  95. package/dist/commands/radar.d.ts.map +1 -0
  96. package/dist/commands/radar.js +52 -0
  97. package/dist/commands/radar.js.map +1 -0
  98. package/dist/commands/review.d.ts +3 -0
  99. package/dist/commands/review.d.ts.map +1 -0
  100. package/dist/commands/review.js +229 -0
  101. package/dist/commands/review.js.map +1 -0
  102. package/dist/commands/revise.d.ts +3 -0
  103. package/dist/commands/revise.d.ts.map +1 -0
  104. package/dist/commands/revise.js +91 -0
  105. package/dist/commands/revise.js.map +1 -0
  106. package/dist/commands/short-fiction.d.ts +4 -0
  107. package/dist/commands/short-fiction.d.ts.map +1 -0
  108. package/dist/commands/short-fiction.js +220 -0
  109. package/dist/commands/short-fiction.js.map +1 -0
  110. package/dist/commands/status.d.ts +3 -0
  111. package/dist/commands/status.d.ts.map +1 -0
  112. package/dist/commands/status.js +123 -0
  113. package/dist/commands/status.js.map +1 -0
  114. package/dist/commands/studio.d.ts +21 -0
  115. package/dist/commands/studio.d.ts.map +1 -0
  116. package/dist/commands/studio.js +151 -0
  117. package/dist/commands/studio.js.map +1 -0
  118. package/dist/commands/style.d.ts +3 -0
  119. package/dist/commands/style.d.ts.map +1 -0
  120. package/dist/commands/style.js +95 -0
  121. package/dist/commands/style.js.map +1 -0
  122. package/dist/commands/translate.d.ts +3 -0
  123. package/dist/commands/translate.d.ts.map +1 -0
  124. package/dist/commands/translate.js +111 -0
  125. package/dist/commands/translate.js.map +1 -0
  126. package/dist/commands/tui.d.ts +6 -0
  127. package/dist/commands/tui.d.ts.map +1 -0
  128. package/dist/commands/tui.js +14 -0
  129. package/dist/commands/tui.js.map +1 -0
  130. package/dist/commands/update.d.ts +3 -0
  131. package/dist/commands/update.d.ts.map +1 -0
  132. package/dist/commands/update.js +40 -0
  133. package/dist/commands/update.js.map +1 -0
  134. package/dist/commands/write.d.ts +3 -0
  135. package/dist/commands/write.d.ts.map +1 -0
  136. package/dist/commands/write.js +371 -0
  137. package/dist/commands/write.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +4 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/localization.d.ts +103 -0
  143. package/dist/localization.d.ts.map +1 -0
  144. package/dist/localization.js +377 -0
  145. package/dist/localization.js.map +1 -0
  146. package/dist/notify-helper.d.ts +17 -0
  147. package/dist/notify-helper.d.ts.map +1 -0
  148. package/dist/notify-helper.js +27 -0
  149. package/dist/notify-helper.js.map +1 -0
  150. package/dist/program.d.ts +10 -0
  151. package/dist/program.d.ts.map +1 -0
  152. package/dist/program.js +97 -0
  153. package/dist/program.js.map +1 -0
  154. package/dist/progress-text.d.ts +26 -0
  155. package/dist/progress-text.d.ts.map +1 -0
  156. package/dist/progress-text.js +35 -0
  157. package/dist/progress-text.js.map +1 -0
  158. package/dist/project-bootstrap.d.ts +8 -0
  159. package/dist/project-bootstrap.d.ts.map +1 -0
  160. package/dist/project-bootstrap.js +139 -0
  161. package/dist/project-bootstrap.js.map +1 -0
  162. package/dist/runtime-requirements.d.ts +24 -0
  163. package/dist/runtime-requirements.d.ts.map +1 -0
  164. package/dist/runtime-requirements.js +89 -0
  165. package/dist/runtime-requirements.js.map +1 -0
  166. package/dist/tui/__tests__/markdown.test.d.ts +2 -0
  167. package/dist/tui/__tests__/markdown.test.d.ts.map +1 -0
  168. package/dist/tui/__tests__/markdown.test.js +58 -0
  169. package/dist/tui/__tests__/markdown.test.js.map +1 -0
  170. package/dist/tui/activity-state.d.ts +9 -0
  171. package/dist/tui/activity-state.d.ts.map +1 -0
  172. package/dist/tui/activity-state.js +6 -0
  173. package/dist/tui/activity-state.js.map +1 -0
  174. package/dist/tui/agent-input.d.ts +118 -0
  175. package/dist/tui/agent-input.d.ts.map +1 -0
  176. package/dist/tui/agent-input.js +255 -0
  177. package/dist/tui/agent-input.js.map +1 -0
  178. package/dist/tui/ansi.d.ts +40 -0
  179. package/dist/tui/ansi.d.ts.map +1 -0
  180. package/dist/tui/ansi.js +62 -0
  181. package/dist/tui/ansi.js.map +1 -0
  182. package/dist/tui/app.d.ts +13 -0
  183. package/dist/tui/app.d.ts.map +1 -0
  184. package/dist/tui/app.js +109 -0
  185. package/dist/tui/app.js.map +1 -0
  186. package/dist/tui/chat-depth.d.ts +9 -0
  187. package/dist/tui/chat-depth.d.ts.map +1 -0
  188. package/dist/tui/chat-depth.js +14 -0
  189. package/dist/tui/chat-depth.js.map +1 -0
  190. package/dist/tui/chat-draft.d.ts +4 -0
  191. package/dist/tui/chat-draft.d.ts.map +1 -0
  192. package/dist/tui/chat-draft.js +28 -0
  193. package/dist/tui/chat-draft.js.map +1 -0
  194. package/dist/tui/composer-caret.d.ts +10 -0
  195. package/dist/tui/composer-caret.d.ts.map +1 -0
  196. package/dist/tui/composer-caret.js +13 -0
  197. package/dist/tui/composer-caret.js.map +1 -0
  198. package/dist/tui/composer-display.d.ts +7 -0
  199. package/dist/tui/composer-display.d.ts.map +1 -0
  200. package/dist/tui/composer-display.js +17 -0
  201. package/dist/tui/composer-display.js.map +1 -0
  202. package/dist/tui/dashboard-model.d.ts +46 -0
  203. package/dist/tui/dashboard-model.d.ts.map +1 -0
  204. package/dist/tui/dashboard-model.js +105 -0
  205. package/dist/tui/dashboard-model.js.map +1 -0
  206. package/dist/tui/dashboard.d.ts +38 -0
  207. package/dist/tui/dashboard.d.ts.map +1 -0
  208. package/dist/tui/dashboard.js +357 -0
  209. package/dist/tui/dashboard.js.map +1 -0
  210. package/dist/tui/effects.d.ts +61 -0
  211. package/dist/tui/effects.d.ts.map +1 -0
  212. package/dist/tui/effects.js +451 -0
  213. package/dist/tui/effects.js.map +1 -0
  214. package/dist/tui/i18n.d.ts +63 -0
  215. package/dist/tui/i18n.d.ts.map +1 -0
  216. package/dist/tui/i18n.js +205 -0
  217. package/dist/tui/i18n.js.map +1 -0
  218. package/dist/tui/input-history.d.ts +12 -0
  219. package/dist/tui/input-history.d.ts.map +1 -0
  220. package/dist/tui/input-history.js +47 -0
  221. package/dist/tui/input-history.js.map +1 -0
  222. package/dist/tui/local-commands.d.ts +12 -0
  223. package/dist/tui/local-commands.d.ts.map +1 -0
  224. package/dist/tui/local-commands.js +50 -0
  225. package/dist/tui/local-commands.js.map +1 -0
  226. package/dist/tui/markdown.d.ts +2 -0
  227. package/dist/tui/markdown.d.ts.map +1 -0
  228. package/dist/tui/markdown.js +60 -0
  229. package/dist/tui/markdown.js.map +1 -0
  230. package/dist/tui/session-store.d.ts +2 -0
  231. package/dist/tui/session-store.d.ts.map +1 -0
  232. package/dist/tui/session-store.js +2 -0
  233. package/dist/tui/session-store.js.map +1 -0
  234. package/dist/tui/setup.d.ts +53 -0
  235. package/dist/tui/setup.d.ts.map +1 -0
  236. package/dist/tui/setup.js +313 -0
  237. package/dist/tui/setup.js.map +1 -0
  238. package/dist/tui/slash-autocomplete.d.ts +8 -0
  239. package/dist/tui/slash-autocomplete.d.ts.map +1 -0
  240. package/dist/tui/slash-autocomplete.js +48 -0
  241. package/dist/tui/slash-autocomplete.js.map +1 -0
  242. package/dist/tui/theme.d.ts +28 -0
  243. package/dist/tui/theme.d.ts.map +1 -0
  244. package/dist/tui/theme.js +53 -0
  245. package/dist/tui/theme.js.map +1 -0
  246. package/dist/utils.d.ts +32 -0
  247. package/dist/utils.d.ts.map +1 -0
  248. package/dist/utils.js +165 -0
  249. package/dist/utils.js.map +1 -0
  250. package/package.json +72 -0
@@ -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"}
@@ -0,0 +1,17 @@
1
+ export function renderComposerDisplay(inputValue, placeholder, showCursor) {
2
+ if (!inputValue) {
3
+ return {
4
+ textBeforeCursor: showCursor ? "" : placeholder,
5
+ textAfterCursor: showCursor ? placeholder : "",
6
+ cursor: showCursor ? "│" : "",
7
+ isPlaceholder: true,
8
+ };
9
+ }
10
+ return {
11
+ textBeforeCursor: inputValue,
12
+ textAfterCursor: "",
13
+ cursor: showCursor ? "│" : "",
14
+ isPlaceholder: false,
15
+ };
16
+ }
17
+ //# sourceMappingURL=composer-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer-display.js","sourceRoot":"","sources":["../../src/tui/composer-display.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,WAAmB,EACnB,UAAmB;IAOnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;YAC/C,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YAC9C,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC7B,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,EAAE;QACnB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC7B,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { ExecutionStatus, InteractionMessage, InteractionSession } from "@kienmatu/inkos-core";
2
+ import { type TuiCopy } from "./i18n.js";
3
+ export interface DashboardMessageRow {
4
+ readonly key: string;
5
+ readonly label: string;
6
+ readonly role: InteractionMessage["role"];
7
+ readonly content: string;
8
+ }
9
+ export interface DashboardEventRow {
10
+ readonly key: string;
11
+ readonly status: ExecutionStatus;
12
+ readonly summary: string;
13
+ }
14
+ export interface DashboardViewModel {
15
+ readonly projectName: string;
16
+ readonly activeBookTitle?: string;
17
+ readonly modelLabel: string;
18
+ readonly modeLabel: string;
19
+ readonly executionStatus: ExecutionStatus;
20
+ readonly executionLabel: string;
21
+ readonly headerLine: string;
22
+ readonly statusPrimaryLine: string;
23
+ readonly statusSecondaryLine: string;
24
+ readonly messageRows: ReadonlyArray<DashboardMessageRow>;
25
+ readonly eventRows: ReadonlyArray<DashboardEventRow>;
26
+ readonly pendingDecisionSummary?: string;
27
+ readonly composerPlaceholder: string;
28
+ readonly composerHelper: string;
29
+ readonly composerStatus: string;
30
+ readonly errorText?: string;
31
+ }
32
+ export interface BuildDashboardViewModelParams {
33
+ readonly projectName: string;
34
+ readonly activeBookTitle?: string;
35
+ readonly modelLabel: string;
36
+ readonly depthLabel?: string;
37
+ readonly copy: TuiCopy;
38
+ readonly session: InteractionSession;
39
+ readonly isSubmitting: boolean;
40
+ readonly lastError?: string;
41
+ readonly sinceTimestamp?: number;
42
+ readonly terminalRows?: number;
43
+ readonly scrollOffset?: number;
44
+ }
45
+ export declare function buildDashboardViewModel(params: BuildDashboardViewModelParams): DashboardViewModel;
46
+ //# sourceMappingURL=dashboard-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-model.d.ts","sourceRoot":"","sources":["../../src/tui/dashboard-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAwC,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACzD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACrD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,kBAAkB,CA6EjG"}
@@ -0,0 +1,105 @@
1
+ import { formatModeLabel, normalizeStageLabel } from "./i18n.js";
2
+ export function buildDashboardViewModel(params) {
3
+ const status = params.session.currentExecution?.status ?? "idle";
4
+ const executionLabel = normalizeStageLabel(params.session.currentExecution?.stageLabel ?? status, params.copy);
5
+ const modeLabel = formatModeLabel(params.session.automationMode, params.copy);
6
+ const bookLabel = params.activeBookTitle ?? params.session.activeBookId ?? params.copy.labels.none;
7
+ const draftTitle = params.session.creationDraft?.title;
8
+ const draftQuestion = params.session.creationDraft?.nextQuestion;
9
+ const sinceTimestamp = params.sinceTimestamp ?? 0;
10
+ const terminalRows = params.terminalRows ?? process.stdout.rows ?? 24;
11
+ const conversationLimit = Math.max(4, terminalRows - 10);
12
+ const filteredMessages = params.session.messages
13
+ .filter((message) => message.timestamp >= sinceTimestamp);
14
+ const scrollOffset = params.scrollOffset ?? 0;
15
+ const endIndex = filteredMessages.length - scrollOffset;
16
+ const startIndex = Math.max(0, endIndex - conversationLimit);
17
+ const messageRows = filteredMessages
18
+ .slice(startIndex, endIndex > 0 ? endIndex : undefined)
19
+ .map((message, index) => ({
20
+ key: `${message.timestamp}-${index}`,
21
+ label: roleLabel(message.role, params.copy),
22
+ role: message.role,
23
+ content: message.content,
24
+ }));
25
+ const eventRows = params.session.events
26
+ .filter((event) => event.timestamp >= sinceTimestamp)
27
+ .slice(-3)
28
+ .map((event, index) => ({
29
+ key: `${event.timestamp}-${index}`,
30
+ status: event.status,
31
+ summary: summarizeEvent(event, params.copy),
32
+ }));
33
+ const latestEventSummary = eventRows[eventRows.length - 1]?.summary;
34
+ return {
35
+ projectName: params.projectName,
36
+ activeBookTitle: params.activeBookTitle ?? params.session.activeBookId,
37
+ modelLabel: params.modelLabel,
38
+ modeLabel,
39
+ executionStatus: status,
40
+ executionLabel,
41
+ headerLine: [
42
+ `${params.copy.labels.project} ${params.projectName}`,
43
+ `${params.copy.labels.book} ${bookLabel}`,
44
+ draftTitle ? `${params.copy.labels.draft} ${draftTitle}` : undefined,
45
+ `${params.copy.labels.depth} ${params.depthLabel ?? params.copy.depthLabels.normal}`,
46
+ `${params.copy.labels.session} ${params.session.sessionId.slice(-4)}`,
47
+ params.copy.labels.messageCount(params.session.messages.length),
48
+ ].filter(Boolean).join(" · "),
49
+ statusPrimaryLine: `${params.copy.labels.stage} ${executionLabel} · ${params.copy.labels.model} ${params.modelLabel}`,
50
+ statusSecondaryLine: params.lastError
51
+ ? `${params.copy.labels.error} · ${compactInline(params.lastError)}`
52
+ : params.isSubmitting && latestEventSummary
53
+ ? `${params.copy.labels.recent} · ${latestEventSummary}`
54
+ : params.session.pendingDecision?.summary
55
+ ? `${params.copy.labels.pending} · ${compactInline(params.session.pendingDecision.summary)}`
56
+ : draftQuestion
57
+ ? `${params.copy.labels.draft} · ${compactInline(draftQuestion)}`
58
+ : draftTitle
59
+ ? `${params.copy.labels.draft} · ${draftTitle}`
60
+ : latestEventSummary
61
+ ? `${params.copy.labels.recent} · ${latestEventSummary}`
62
+ : `${params.copy.labels.ready} · ${bookLabel}`,
63
+ messageRows,
64
+ eventRows,
65
+ pendingDecisionSummary: params.session.pendingDecision?.summary,
66
+ composerPlaceholder: params.copy.composer.placeholder,
67
+ composerHelper: params.copy.composer.helper,
68
+ composerStatus: params.isSubmitting
69
+ ? params.copy.composer.submitting
70
+ : params.lastError
71
+ ? params.copy.composer.failed
72
+ : params.copy.composer.ready,
73
+ errorText: params.lastError,
74
+ };
75
+ }
76
+ function roleLabel(role, copy) {
77
+ switch (role) {
78
+ case "user":
79
+ return copy.roles.user;
80
+ case "assistant":
81
+ return copy.roles.assistant;
82
+ case "system":
83
+ return copy.roles.system;
84
+ default:
85
+ return role;
86
+ }
87
+ }
88
+ function summarizeEvent(event, copy) {
89
+ const base = compactInline(event.detail?.trim() || event.kind);
90
+ if (event.bookId && event.chapterNumber !== undefined) {
91
+ const chapterLabel = copy.locale === "zh-CN"
92
+ ? `第 ${event.chapterNumber} 章`
93
+ : `ch.${event.chapterNumber}`;
94
+ return `${base} (${event.bookId} ${chapterLabel})`;
95
+ }
96
+ if (event.bookId) {
97
+ return `${base} (${event.bookId})`;
98
+ }
99
+ return base;
100
+ }
101
+ function compactInline(value) {
102
+ const singleLine = value.replace(/\s+/g, " ").trim();
103
+ return singleLine.length > 72 ? singleLine.slice(0, 69) + "..." : singleLine;
104
+ }
105
+ //# sourceMappingURL=dashboard-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-model.js","sourceRoot":"","sources":["../../src/tui/dashboard-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import React from "react";
2
+ import { type InteractionSession } from "@kienmatu/inkos-core";
3
+ import { type TuiLocale } from "./i18n.js";
4
+ export interface InkTuiDashboardProps {
5
+ readonly locale: TuiLocale;
6
+ readonly projectName: string;
7
+ readonly activeBookTitle?: string;
8
+ readonly modelLabel: string;
9
+ readonly depthLabel?: string;
10
+ readonly session: InteractionSession;
11
+ readonly inputValue: string;
12
+ readonly isSubmitting: boolean;
13
+ readonly sinceTimestamp?: number;
14
+ readonly lastError?: string;
15
+ readonly slashSuggestions?: ReadonlyArray<string>;
16
+ readonly selectedSlashIndex?: number;
17
+ readonly showComposerCursor?: boolean;
18
+ readonly scrollOffset?: number;
19
+ readonly onInputChange?: (value: string) => void;
20
+ readonly onSubmit?: (value: string) => void;
21
+ }
22
+ export interface InkTuiAppProps {
23
+ readonly locale: TuiLocale;
24
+ readonly projectRoot: string;
25
+ readonly projectName: string;
26
+ readonly modelLabel: string;
27
+ readonly initialSession: InteractionSession;
28
+ readonly chatStreamBridge?: {
29
+ onTextDelta?: (text: string) => void;
30
+ getChatRequestOptions?: () => {
31
+ readonly temperature?: number;
32
+ readonly maxTokens?: number;
33
+ };
34
+ };
35
+ }
36
+ export declare function InkTuiDashboard(props: InkTuiDashboardProps): React.JSX.Element;
37
+ export declare function InkTuiApp(props: InkTuiAppProps): React.JSX.Element;
38
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/tui/dashboard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EAAoD,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAgB7F,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,qBAAqB,CAAC,EAAE,MAAM;YAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA8F9E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA6RlE"}
@@ -0,0 +1,357 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { appendInteractionMessage, } from "@kienmatu/inkos-core";
4
+ import { Box, Text, useApp, useInput } from "ink";
5
+ import { processTuiAgentInput } from "./agent-input.js";
6
+ import { describeActivityState } from "./activity-state.js";
7
+ import { resolveComposerCaretState } from "./composer-caret.js";
8
+ import { resolveChatDepthProfile } from "./chat-depth.js";
9
+ import { appendStreamingAssistantChunk, createOptimisticUserMessageSession } from "./chat-draft.js";
10
+ import { renderComposerDisplay } from "./composer-display.js";
11
+ import { renderMarkdown } from "./markdown.js";
12
+ import { buildDashboardViewModel } from "./dashboard-model.js";
13
+ import { buildInputHistory, moveHistoryCursor } from "./input-history.js";
14
+ import { formatModeLabel, getTuiCopy, normalizeStageLabel } from "./i18n.js";
15
+ import { loadProjectSession, persistProjectSession, resolveSessionActiveBook } from "./session-store.js";
16
+ import { classifyLocalTuiCommand, parseDepthCommand, parseModelCommand } from "./local-commands.js";
17
+ import { applySlashSuggestion, getNextSlashSelection, getSlashSuggestions, SLASH_COMMANDS, } from "./slash-autocomplete.js";
18
+ import { WARM_ACCENT, WARM_BORDER, WARM_MUTED, WARM_REPLY, STATUS_SUCCESS, STATUS_ERROR, STATUS_ACTIVE, STATUS_IDLE, ROLE_USER, ROLE_SYSTEM, isAppleTerminal, } from "./theme.js";
19
+ export function InkTuiDashboard(props) {
20
+ const copy = getTuiCopy(props.locale);
21
+ const model = buildDashboardViewModel({
22
+ copy,
23
+ projectName: props.projectName,
24
+ activeBookTitle: props.activeBookTitle,
25
+ modelLabel: props.modelLabel,
26
+ depthLabel: props.depthLabel,
27
+ session: props.session,
28
+ isSubmitting: props.isSubmitting,
29
+ lastError: props.lastError,
30
+ sinceTimestamp: props.sinceTimestamp,
31
+ scrollOffset: props.scrollOffset,
32
+ });
33
+ const activeAccent = props.isSubmitting ? WARM_ACCENT : statusColor(model.executionStatus);
34
+ const composer = renderComposerDisplay(props.inputValue, model.composerPlaceholder, props.showComposerCursor ?? false);
35
+ const separatorWidth = Math.max(20, (process.stdout.columns ?? 60) - 8);
36
+ const thinRule = "─".repeat(separatorWidth);
37
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", paddingX: 2, children: [_jsx(Text, { color: WARM_MUTED, children: model.headerLine }), _jsx(Text, { color: WARM_BORDER, children: thinRule }), _jsx(Box, { flexDirection: "column", marginTop: 1, flexGrow: 1, children: model.messageRows.length > 0 ? (model.messageRows.map((row) => _jsx(ConversationRow, { row: row }, row.key))) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: WARM_MUTED, italic: true, children: [" ", copy.composer.emptyConversation] }) })) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: WARM_BORDER, children: thinRule }), _jsxs(Box, { marginTop: 1, flexDirection: "column", width: "100%", borderStyle: "round", borderColor: props.isSubmitting ? STATUS_ACTIVE : WARM_BORDER, paddingX: 1, children: [_jsxs(Box, { children: [_jsxs(Text, { color: props.isSubmitting ? STATUS_ACTIVE : WARM_ACCENT, bold: true, children: ["\u203A", " "] }), composer.textBeforeCursor ? (_jsx(Text, { color: composer.isPlaceholder ? WARM_MUTED : WARM_REPLY, children: composer.textBeforeCursor })) : null, composer.cursor ? (_jsx(Text, { color: props.isSubmitting ? STATUS_ACTIVE : WARM_ACCENT, children: composer.cursor })) : null, composer.textAfterCursor ? (_jsx(Text, { color: composer.isPlaceholder ? WARM_MUTED : WARM_REPLY, children: composer.textAfterCursor })) : null] }), props.slashSuggestions && props.slashSuggestions.length > 0 ? (_jsx(Box, { flexDirection: "column", marginTop: 1, borderTop: true, borderColor: WARM_BORDER, children: props.slashSuggestions.slice(0, 6).map((suggestion, index) => {
38
+ const isSelected = index === (props.selectedSlashIndex ?? 0);
39
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? WARM_ACCENT : WARM_BORDER, children: isSelected ? "› " : " " }), _jsx(Text, { color: isSelected ? WARM_REPLY : WARM_MUTED, bold: isSelected, children: suggestion })] }, suggestion));
40
+ }) })) : null] }), _jsxs(Box, { marginTop: 1, children: [_jsx(ExecutionBadge, { status: model.executionStatus, color: activeAccent }), _jsxs(Text, { color: activeAccent, children: [" ", model.statusPrimaryLine] })] })] })] }));
41
+ }
42
+ export function InkTuiApp(props) {
43
+ const { exit } = useApp();
44
+ const copy = getTuiCopy(props.locale);
45
+ const [session, setSession] = useState(props.initialSession);
46
+ const [inputValue, setInputValue] = useState("");
47
+ const [isSubmitting, setIsSubmitting] = useState(false);
48
+ const [lastError, setLastError] = useState();
49
+ const [sinceTimestamp, setSinceTimestamp] = useState();
50
+ const [selectedSlashIndex, setSelectedSlashIndex] = useState(0);
51
+ const [scrollOffset, setScrollOffset] = useState(0);
52
+ const [historyState, setHistoryState] = useState({
53
+ cursor: null,
54
+ draft: "",
55
+ });
56
+ const [activityFrameIndex, setActivityFrameIndex] = useState(0);
57
+ const [chatDepth, setChatDepth] = useState("normal");
58
+ const [modelLabel, setModelLabel] = useState(props.initialSession.modelOverride
59
+ ? formatModelOverrideLabel(props.initialSession.modelOverride, props.modelLabel)
60
+ : props.modelLabel);
61
+ const assistantDraftTimestampRef = useRef(null);
62
+ const submitLockRef = useRef(false);
63
+ const slashSuggestions = getSlashSuggestions(inputValue, SLASH_COMMANDS);
64
+ const inputHistory = buildInputHistory(session.messages);
65
+ const activity = describeActivityState(copy);
66
+ const chatDepthProfile = resolveChatDepthProfile(chatDepth);
67
+ const composerCaret = resolveComposerCaretState({
68
+ inputValue,
69
+ isSubmitting,
70
+ blinkTick: 0,
71
+ });
72
+ useEffect(() => {
73
+ if (!isSubmitting) {
74
+ setActivityFrameIndex(0);
75
+ return;
76
+ }
77
+ const timer = setInterval(() => {
78
+ setActivityFrameIndex((current) => (current + 1) % activity.frames.length);
79
+ }, activity.intervalMs);
80
+ return () => clearInterval(timer);
81
+ }, [activity.frames.length, activity.intervalMs, isSubmitting]);
82
+ if (props.chatStreamBridge) {
83
+ props.chatStreamBridge.getChatRequestOptions = () => ({
84
+ temperature: chatDepthProfile.temperature,
85
+ maxTokens: chatDepthProfile.maxTokens,
86
+ });
87
+ }
88
+ props.chatStreamBridge && (props.chatStreamBridge.onTextDelta = (text) => {
89
+ const timestamp = assistantDraftTimestampRef.current;
90
+ if (timestamp === null) {
91
+ return;
92
+ }
93
+ setSession((current) => appendStreamingAssistantChunk(current, text, timestamp));
94
+ });
95
+ useInput((_input, key) => {
96
+ if (key.escape) {
97
+ exit();
98
+ return;
99
+ }
100
+ if (slashSuggestions.length > 0 && key.tab) {
101
+ setInputValue(applySlashSuggestion(inputValue, slashSuggestions, selectedSlashIndex));
102
+ setSelectedSlashIndex(0);
103
+ return;
104
+ }
105
+ if (key.backspace || key.delete) {
106
+ setInputValue((current) => {
107
+ // Use Intl.Segmenter for grapheme-aware backspace (handles CJK, emoji, etc.)
108
+ const segments = [...new Intl.Segmenter().segment(current)];
109
+ segments.pop();
110
+ return segments.map((s) => s.segment).join("");
111
+ });
112
+ setSelectedSlashIndex(0);
113
+ return;
114
+ }
115
+ if (slashSuggestions.length > 0 && key.downArrow) {
116
+ setSelectedSlashIndex((current) => getNextSlashSelection(current, slashSuggestions.length, "down"));
117
+ return;
118
+ }
119
+ if (slashSuggestions.length > 0 && key.upArrow) {
120
+ setSelectedSlashIndex((current) => getNextSlashSelection(current, slashSuggestions.length, "up"));
121
+ return;
122
+ }
123
+ // Page Up / Page Down for conversation scrolling
124
+ // Raw sequences: Page Up = \x1b[5~ , Page Down = \x1b[6~
125
+ if (_input === "\x1b[5~") {
126
+ const maxOffset = Math.max(0, session.messages.length - 4);
127
+ setScrollOffset((cur) => Math.min(maxOffset, cur + 3));
128
+ return;
129
+ }
130
+ if (_input === "\x1b[6~") {
131
+ setScrollOffset((cur) => Math.max(0, cur - 3));
132
+ return;
133
+ }
134
+ if (key.downArrow) {
135
+ const next = moveHistoryCursor(inputHistory, historyState, inputValue, "down");
136
+ setHistoryState(next.state);
137
+ setInputValue(next.value);
138
+ return;
139
+ }
140
+ if (key.upArrow) {
141
+ const next = moveHistoryCursor(inputHistory, historyState, inputValue, "up");
142
+ setHistoryState(next.state);
143
+ setInputValue(next.value);
144
+ return;
145
+ }
146
+ if (key.return) {
147
+ void handleSubmit(inputValue);
148
+ return;
149
+ }
150
+ if (_input && !_input.includes("\r") && !_input.includes("\n") && !key.ctrl && !key.meta) {
151
+ setInputValue((current) => current + _input);
152
+ setSelectedSlashIndex(0);
153
+ }
154
+ });
155
+ const appendSystemNote = (content) => {
156
+ setLastError(undefined);
157
+ setSession((current) => appendInteractionMessage(current, {
158
+ role: "system",
159
+ content,
160
+ timestamp: Date.now(),
161
+ }));
162
+ };
163
+ const handleSubmit = async (rawValue) => {
164
+ const input = rawValue.trim();
165
+ if (!input || isSubmitting || submitLockRef.current) {
166
+ return;
167
+ }
168
+ submitLockRef.current = true;
169
+ try {
170
+ const localCommand = classifyLocalTuiCommand(input);
171
+ const depthCommand = parseDepthCommand(input);
172
+ const modelCommand = parseModelCommand(input);
173
+ if (localCommand) {
174
+ setInputValue("");
175
+ if (localCommand === "quit") {
176
+ exit();
177
+ return;
178
+ }
179
+ if (localCommand === "help") {
180
+ appendSystemNote(copy.notes.help);
181
+ return;
182
+ }
183
+ if (localCommand === "status") {
184
+ const stage = normalizeStageLabel(session.currentExecution?.stageLabel ?? session.currentExecution?.status ?? "idle", copy);
185
+ appendSystemNote(copy.notes.status(stage, formatModeLabel(session.automationMode, copy)));
186
+ return;
187
+ }
188
+ if (localCommand === "clear") {
189
+ setLastError(undefined);
190
+ setSinceTimestamp(Date.now());
191
+ return;
192
+ }
193
+ if (localCommand === "config") {
194
+ appendSystemNote(copy.notes.config);
195
+ return;
196
+ }
197
+ }
198
+ if (modelCommand) {
199
+ setInputValue("");
200
+ if (modelCommand.kind === "show") {
201
+ appendSystemNote(copy.notes.modelCurrent(modelLabel));
202
+ return;
203
+ }
204
+ const nextModelLabel = formatModelOverrideLabel(modelCommand.model, props.modelLabel);
205
+ const nextSession = appendInteractionMessage({
206
+ ...session,
207
+ modelOverride: modelCommand.model,
208
+ }, {
209
+ role: "system",
210
+ content: copy.notes.modelSet(modelCommand.model),
211
+ timestamp: Date.now(),
212
+ });
213
+ setSession(nextSession);
214
+ setModelLabel(nextModelLabel);
215
+ await persistProjectSession(props.projectRoot, nextSession);
216
+ return;
217
+ }
218
+ if (depthCommand) {
219
+ setInputValue("");
220
+ setChatDepth(depthCommand);
221
+ appendSystemNote(copy.notes.depthSet(copy.depthLabels[depthCommand]));
222
+ return;
223
+ }
224
+ const activeBookId = await resolveSessionActiveBook(props.projectRoot, session);
225
+ const userTimestamp = Date.now();
226
+ const assistantDraftTimestamp = userTimestamp + 1;
227
+ assistantDraftTimestampRef.current = assistantDraftTimestamp;
228
+ setIsSubmitting(true);
229
+ setLastError(undefined);
230
+ setInputValue("");
231
+ setScrollOffset(0);
232
+ setHistoryState({ cursor: null, draft: "" });
233
+ setSession((current) => createOptimisticUserMessageSession(current, input, userTimestamp));
234
+ const result = await processTuiAgentInput({
235
+ projectRoot: props.projectRoot,
236
+ input,
237
+ session,
238
+ activeBookId,
239
+ onTextDelta: (text) => {
240
+ props.chatStreamBridge?.onTextDelta?.(text);
241
+ },
242
+ });
243
+ setSession(result.session);
244
+ }
245
+ catch (error) {
246
+ const message = error instanceof Error ? error.message : String(error);
247
+ const failedSession = await loadProjectSession(props.projectRoot);
248
+ setSession(failedSession);
249
+ setLastError(message);
250
+ }
251
+ finally {
252
+ assistantDraftTimestampRef.current = null;
253
+ setIsSubmitting(false);
254
+ submitLockRef.current = false;
255
+ }
256
+ };
257
+ const activitySession = isSubmitting
258
+ ? {
259
+ ...session,
260
+ currentExecution: {
261
+ status: "planning",
262
+ bookId: session.activeBookId,
263
+ chapterNumber: session.activeChapterNumber,
264
+ stageLabel: `${activity.label} ${activity.frames[activityFrameIndex] ?? ""}`.trim(),
265
+ },
266
+ }
267
+ : session;
268
+ return (_jsx(InkTuiDashboard, { locale: props.locale, projectName: props.projectName, activeBookTitle: activitySession.activeBookId, modelLabel: modelLabel, depthLabel: copy.depthLabels[chatDepth], session: activitySession, inputValue: inputValue, isSubmitting: isSubmitting, sinceTimestamp: sinceTimestamp, lastError: lastError, slashSuggestions: slashSuggestions, selectedSlashIndex: selectedSlashIndex, showComposerCursor: composerCaret.visible, scrollOffset: scrollOffset, onInputChange: (value) => {
269
+ setInputValue(value);
270
+ setSelectedSlashIndex(0);
271
+ setHistoryState((current) => current.cursor === null ? current : { cursor: null, draft: value });
272
+ }, onSubmit: (value) => {
273
+ void handleSubmit(value);
274
+ } }));
275
+ }
276
+ function formatModelOverrideLabel(model, defaultLabel) {
277
+ const provider = defaultLabel.match(/\(([^)]+)\)$/)?.[1];
278
+ return provider ? `${model} (${provider})` : model;
279
+ }
280
+ function ConversationRow(props) {
281
+ const { role, content } = props.row;
282
+ // Terminal.app: use the same simple layout as the main branch to avoid
283
+ // triggering CoreGraphics crashes from complex Box nesting + ANSI codes.
284
+ if (isAppleTerminal) {
285
+ const prefix = role === "user" ? "│ " : role === "system" ? "· " : "◆ ";
286
+ const color = role === "user" ? ROLE_USER : role === "system" ? ROLE_SYSTEM : WARM_REPLY;
287
+ return (_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: role === "assistant" ? WARM_ACCENT : color, children: prefix }), _jsx(Text, { color: color, children: content })] }));
288
+ }
289
+ if (role === "user") {
290
+ return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: ROLE_USER, children: "\u2502" }) }), _jsx(Box, { flexDirection: "column", flexShrink: 1, children: _jsx(Text, { color: ROLE_USER, children: content }) })] }));
291
+ }
292
+ if (role === "system") {
293
+ return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: ROLE_SYSTEM, children: "\u00B7" }) }), _jsx(Box, { flexDirection: "column", flexShrink: 1, children: _jsx(Text, { color: ROLE_SYSTEM, children: content }) })] }));
294
+ }
295
+ // assistant — render markdown (bold, tables, code, etc.)
296
+ return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: WARM_ACCENT, children: "\u25C6" }) }), _jsx(Box, { flexDirection: "column", flexShrink: 1, children: _jsx(Text, { color: WARM_REPLY, children: renderMarkdown(content) }) })] }));
297
+ }
298
+ function ExecutionBadge(props) {
299
+ const icon = statusIcon(props.status);
300
+ return (_jsx(Text, { color: props.color ?? statusColor(props.status), bold: true, children: icon }));
301
+ }
302
+ function statusIcon(status) {
303
+ switch (status) {
304
+ case "completed":
305
+ return "✓";
306
+ case "failed":
307
+ return "✗";
308
+ case "blocked":
309
+ case "waiting_human":
310
+ return "◈";
311
+ case "writing":
312
+ return "✎";
313
+ case "planning":
314
+ case "composing":
315
+ return "◇";
316
+ case "repairing":
317
+ case "persisting":
318
+ return "◉";
319
+ default:
320
+ return "●";
321
+ }
322
+ }
323
+ function MutedText(props) {
324
+ return _jsx(Text, { color: WARM_MUTED, children: props.children });
325
+ }
326
+ function messageColor(role) {
327
+ switch (role) {
328
+ case "user":
329
+ return WARM_MUTED;
330
+ case "assistant":
331
+ return WARM_REPLY;
332
+ case "system":
333
+ return WARM_ACCENT;
334
+ default:
335
+ return WARM_REPLY;
336
+ }
337
+ }
338
+ function statusColor(status) {
339
+ switch (status) {
340
+ case "completed":
341
+ return STATUS_SUCCESS;
342
+ case "failed":
343
+ return STATUS_ERROR;
344
+ case "blocked":
345
+ case "waiting_human":
346
+ return WARM_ACCENT;
347
+ case "writing":
348
+ case "repairing":
349
+ case "planning":
350
+ case "composing":
351
+ case "persisting":
352
+ return STATUS_ACTIVE;
353
+ default:
354
+ return STATUS_IDLE;
355
+ }
356
+ }
357
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.tsx"],"names":[],"mappings":"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"}