openhorse 0.2.19 → 0.2.21

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 (333) hide show
  1. package/dist/agents/coordinator.d.ts.map +1 -1
  2. package/dist/agents/fork.d.ts.map +1 -1
  3. package/dist/agents/fork.js +0 -1
  4. package/dist/agents/fork.js.map +1 -1
  5. package/dist/agents/worker-pool.d.ts.map +1 -1
  6. package/dist/agents/worker-pool.js +3 -1
  7. package/dist/agents/worker-pool.js.map +1 -1
  8. package/dist/cli.js +3 -3
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/index.d.ts.map +1 -1
  11. package/dist/commands/index.js +13 -28
  12. package/dist/commands/index.js.map +1 -1
  13. package/dist/core/checkpoint.d.ts.map +1 -1
  14. package/dist/core/checkpoint.js +3 -0
  15. package/dist/core/checkpoint.js.map +1 -1
  16. package/dist/framework/prompt.d.ts.map +1 -1
  17. package/dist/framework/prompt.js +16 -0
  18. package/dist/framework/prompt.js.map +1 -1
  19. package/dist/framework/query.d.ts.map +1 -1
  20. package/dist/framework/query.js +0 -7
  21. package/dist/framework/query.js.map +1 -1
  22. package/dist/harness/context-harness.d.ts.map +1 -1
  23. package/dist/harness/context-harness.js +6 -1
  24. package/dist/harness/context-harness.js.map +1 -1
  25. package/dist/harness/ledger.d.ts +1 -0
  26. package/dist/harness/ledger.d.ts.map +1 -1
  27. package/dist/harness/ledger.js +8 -0
  28. package/dist/harness/ledger.js.map +1 -1
  29. package/dist/harness/safety.d.ts +2 -0
  30. package/dist/harness/safety.d.ts.map +1 -1
  31. package/dist/harness/safety.js +27 -3
  32. package/dist/harness/safety.js.map +1 -1
  33. package/dist/init.d.ts +1 -1
  34. package/dist/init.d.ts.map +1 -1
  35. package/dist/init.js +1 -1
  36. package/dist/init.js.map +1 -1
  37. package/dist/ink-ui/components/Markdown.d.ts +1 -1
  38. package/dist/ink-ui/components/Markdown.d.ts.map +1 -1
  39. package/dist/ink-ui/components/Markdown.js +1 -1
  40. package/dist/ink-ui/components/Markdown.js.map +1 -1
  41. package/dist/ink-ui/runtime/grapheme.d.ts +9 -8
  42. package/dist/ink-ui/runtime/grapheme.d.ts.map +1 -1
  43. package/dist/ink-ui/runtime/grapheme.js +14 -60
  44. package/dist/ink-ui/runtime/grapheme.js.map +1 -1
  45. package/dist/ink-ui/runtime/input-buffer.d.ts +9 -31
  46. package/dist/ink-ui/runtime/input-buffer.d.ts.map +1 -1
  47. package/dist/ink-ui/runtime/input-buffer.js +15 -162
  48. package/dist/ink-ui/runtime/input-buffer.js.map +1 -1
  49. package/dist/ink-ui/runtime/native-cursor.js +0 -25
  50. package/dist/ink-ui/runtime/native-cursor.js.map +1 -1
  51. package/dist/ink-ui/runtime/prompt-layout.d.ts +9 -29
  52. package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -1
  53. package/dist/ink-ui/runtime/prompt-layout.js +18 -166
  54. package/dist/ink-ui/runtime/prompt-layout.js.map +1 -1
  55. package/dist/ink-ui/runtime/transcript-state.d.ts.map +1 -1
  56. package/dist/ink-ui/runtime/transcript-state.js +2 -0
  57. package/dist/ink-ui/runtime/transcript-state.js.map +1 -1
  58. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  59. package/dist/ink-ui/screens/ReplScreen.js +11 -0
  60. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  61. package/dist/memory/entrypoint.js +1 -1
  62. package/dist/memory/entrypoint.js.map +1 -1
  63. package/dist/memory/storage.js +1 -1
  64. package/dist/memory/storage.js.map +1 -1
  65. package/dist/memory/store.d.ts +1 -0
  66. package/dist/memory/store.d.ts.map +1 -1
  67. package/dist/memory/store.js +9 -0
  68. package/dist/memory/store.js.map +1 -1
  69. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -1
  70. package/dist/runtime/agent-runtime-controller.js +15 -0
  71. package/dist/runtime/agent-runtime-controller.js.map +1 -1
  72. package/dist/runtime/agent-runtime-protocol.d.ts +4 -1
  73. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -1
  74. package/dist/runtime/agent-runtime-protocol.js +6 -0
  75. package/dist/runtime/agent-runtime-protocol.js.map +1 -1
  76. package/dist/runtime/chat-controller.d.ts +27 -0
  77. package/dist/runtime/chat-controller.d.ts.map +1 -1
  78. package/dist/runtime/chat-controller.js +148 -5
  79. package/dist/runtime/chat-controller.js.map +1 -1
  80. package/dist/runtime/composer/buffer.d.ts +43 -0
  81. package/dist/runtime/composer/buffer.d.ts.map +1 -0
  82. package/dist/runtime/composer/buffer.js +176 -0
  83. package/dist/runtime/composer/buffer.js.map +1 -0
  84. package/dist/runtime/composer/grapheme.d.ts +19 -0
  85. package/dist/runtime/composer/grapheme.d.ts.map +1 -0
  86. package/dist/runtime/composer/grapheme.js +73 -0
  87. package/dist/runtime/composer/grapheme.js.map +1 -0
  88. package/dist/runtime/composer/history.d.ts +39 -0
  89. package/dist/runtime/composer/history.d.ts.map +1 -0
  90. package/dist/runtime/composer/history.js +91 -0
  91. package/dist/runtime/composer/history.js.map +1 -0
  92. package/dist/runtime/composer/layout.d.ts +40 -0
  93. package/dist/runtime/composer/layout.d.ts.map +1 -0
  94. package/dist/runtime/composer/layout.js +174 -0
  95. package/dist/runtime/composer/layout.js.map +1 -0
  96. package/dist/runtime/rich-text/ansi-parser.d.ts +31 -0
  97. package/dist/runtime/rich-text/ansi-parser.d.ts.map +1 -0
  98. package/dist/runtime/rich-text/ansi-parser.js +272 -0
  99. package/dist/runtime/rich-text/ansi-parser.js.map +1 -0
  100. package/dist/runtime/rich-text/layout.d.ts +21 -0
  101. package/dist/runtime/rich-text/layout.d.ts.map +1 -0
  102. package/dist/runtime/rich-text/layout.js +327 -0
  103. package/dist/runtime/rich-text/layout.js.map +1 -0
  104. package/dist/runtime/rich-text/markdown-parser.d.ts +17 -0
  105. package/dist/runtime/rich-text/markdown-parser.d.ts.map +1 -0
  106. package/dist/runtime/rich-text/markdown-parser.js +211 -0
  107. package/dist/runtime/rich-text/markdown-parser.js.map +1 -0
  108. package/dist/runtime/rich-text/sanitizer.d.ts +18 -0
  109. package/dist/runtime/rich-text/sanitizer.d.ts.map +1 -0
  110. package/dist/runtime/rich-text/sanitizer.js +32 -0
  111. package/dist/runtime/rich-text/sanitizer.js.map +1 -0
  112. package/dist/runtime/rich-text/types.d.ts +59 -0
  113. package/dist/runtime/rich-text/types.d.ts.map +1 -0
  114. package/dist/runtime/rich-text/types.js +17 -0
  115. package/dist/runtime/rich-text/types.js.map +1 -0
  116. package/dist/runtime/subagents/budget.d.ts +118 -0
  117. package/dist/runtime/subagents/budget.d.ts.map +1 -0
  118. package/dist/runtime/subagents/budget.js +173 -0
  119. package/dist/runtime/subagents/budget.js.map +1 -0
  120. package/dist/runtime/subagents/child-executor-guard.d.ts +60 -0
  121. package/dist/runtime/subagents/child-executor-guard.d.ts.map +1 -0
  122. package/dist/runtime/subagents/child-executor-guard.js +219 -0
  123. package/dist/runtime/subagents/child-executor-guard.js.map +1 -0
  124. package/dist/runtime/subagents/context-builder.d.ts +34 -0
  125. package/dist/runtime/subagents/context-builder.d.ts.map +1 -0
  126. package/dist/runtime/subagents/context-builder.js +99 -0
  127. package/dist/runtime/subagents/context-builder.js.map +1 -0
  128. package/dist/runtime/subagents/index.d.ts +21 -0
  129. package/dist/runtime/subagents/index.d.ts.map +1 -0
  130. package/dist/runtime/subagents/index.js +62 -0
  131. package/dist/runtime/subagents/index.js.map +1 -0
  132. package/dist/runtime/subagents/policy.d.ts +68 -0
  133. package/dist/runtime/subagents/policy.d.ts.map +1 -0
  134. package/dist/runtime/subagents/policy.js +230 -0
  135. package/dist/runtime/subagents/policy.js.map +1 -0
  136. package/dist/runtime/subagents/presets.d.ts +44 -0
  137. package/dist/runtime/subagents/presets.d.ts.map +1 -0
  138. package/dist/runtime/subagents/presets.js +148 -0
  139. package/dist/runtime/subagents/presets.js.map +1 -0
  140. package/dist/runtime/subagents/production.d.ts +44 -0
  141. package/dist/runtime/subagents/production.d.ts.map +1 -0
  142. package/dist/runtime/subagents/production.js +118 -0
  143. package/dist/runtime/subagents/production.js.map +1 -0
  144. package/dist/runtime/subagents/provider-gate.d.ts +99 -0
  145. package/dist/runtime/subagents/provider-gate.d.ts.map +1 -0
  146. package/dist/runtime/subagents/provider-gate.js +186 -0
  147. package/dist/runtime/subagents/provider-gate.js.map +1 -0
  148. package/dist/runtime/subagents/result-parser.d.ts +40 -0
  149. package/dist/runtime/subagents/result-parser.d.ts.map +1 -0
  150. package/dist/runtime/subagents/result-parser.js +226 -0
  151. package/dist/runtime/subagents/result-parser.js.map +1 -0
  152. package/dist/runtime/subagents/runner.d.ts +53 -0
  153. package/dist/runtime/subagents/runner.d.ts.map +1 -0
  154. package/dist/runtime/subagents/runner.js +172 -0
  155. package/dist/runtime/subagents/runner.js.map +1 -0
  156. package/dist/runtime/subagents/runtime-integration.d.ts +73 -0
  157. package/dist/runtime/subagents/runtime-integration.d.ts.map +1 -0
  158. package/dist/runtime/subagents/runtime-integration.js +148 -0
  159. package/dist/runtime/subagents/runtime-integration.js.map +1 -0
  160. package/dist/runtime/subagents/supervisor.d.ts +79 -0
  161. package/dist/runtime/subagents/supervisor.d.ts.map +1 -0
  162. package/dist/runtime/subagents/supervisor.js +301 -0
  163. package/dist/runtime/subagents/supervisor.js.map +1 -0
  164. package/dist/runtime/subagents/tool.d.ts +38 -0
  165. package/dist/runtime/subagents/tool.d.ts.map +1 -0
  166. package/dist/runtime/subagents/tool.js +171 -0
  167. package/dist/runtime/subagents/tool.js.map +1 -0
  168. package/dist/runtime/subagents/types.d.ts +150 -0
  169. package/dist/runtime/subagents/types.d.ts.map +1 -0
  170. package/dist/runtime/subagents/types.js +52 -0
  171. package/dist/runtime/subagents/types.js.map +1 -0
  172. package/dist/runtime/ui-events.d.ts +5 -0
  173. package/dist/runtime/ui-events.d.ts.map +1 -1
  174. package/dist/runtime/ui-events.js.map +1 -1
  175. package/dist/runtime/ui-view-model.d.ts +35 -1
  176. package/dist/runtime/ui-view-model.d.ts.map +1 -1
  177. package/dist/runtime/ui-view-model.js +32 -1
  178. package/dist/runtime/ui-view-model.js.map +1 -1
  179. package/dist/sdk/query.d.ts.map +1 -1
  180. package/dist/sdk/query.js +0 -1
  181. package/dist/sdk/query.js.map +1 -1
  182. package/dist/services/auto-fix/autoFixHook.d.ts.map +1 -1
  183. package/dist/services/auto-fix/autoFixHook.js +3 -2
  184. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  185. package/dist/services/auto-fix/autoFixRunner.d.ts +2 -2
  186. package/dist/services/auto-fix/autoFixRunner.d.ts.map +1 -1
  187. package/dist/services/auto-fix/autoFixRunner.js +2 -2
  188. package/dist/services/auto-fix/autoFixRunner.js.map +1 -1
  189. package/dist/services/compact/auto-compact.js +3 -3
  190. package/dist/services/compact/auto-compact.js.map +1 -1
  191. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  192. package/dist/services/compact/summary-generator.js +0 -1
  193. package/dist/services/compact/summary-generator.js.map +1 -1
  194. package/dist/services/concurrent-sessions.d.ts.map +1 -1
  195. package/dist/services/concurrent-sessions.js +3 -0
  196. package/dist/services/concurrent-sessions.js.map +1 -1
  197. package/dist/services/config.d.ts +11 -4
  198. package/dist/services/config.d.ts.map +1 -1
  199. package/dist/services/config.js +45 -4
  200. package/dist/services/config.js.map +1 -1
  201. package/dist/services/doctor.d.ts.map +1 -1
  202. package/dist/services/doctor.js +1 -1
  203. package/dist/services/doctor.js.map +1 -1
  204. package/dist/services/global-config.d.ts +23 -1
  205. package/dist/services/global-config.d.ts.map +1 -1
  206. package/dist/services/global-config.js +3 -0
  207. package/dist/services/global-config.js.map +1 -1
  208. package/dist/services/llm.d.ts.map +1 -1
  209. package/dist/services/llm.js +9 -1
  210. package/dist/services/llm.js.map +1 -1
  211. package/dist/services/mcp/transports.d.ts +2 -0
  212. package/dist/services/mcp/transports.d.ts.map +1 -1
  213. package/dist/services/mcp/transports.js +23 -2
  214. package/dist/services/mcp/transports.js.map +1 -1
  215. package/dist/services/memory.d.ts.map +1 -1
  216. package/dist/services/memory.js.map +1 -1
  217. package/dist/services/model-context.d.ts.map +1 -1
  218. package/dist/services/model-context.js +7 -1
  219. package/dist/services/model-context.js.map +1 -1
  220. package/dist/services/session-memory/sessionMemory.js +1 -1
  221. package/dist/services/session-memory/sessionMemory.js.map +1 -1
  222. package/dist/services/session-storage.d.ts +1 -1
  223. package/dist/services/session-storage.d.ts.map +1 -1
  224. package/dist/services/session-storage.js +38 -4
  225. package/dist/services/session-storage.js.map +1 -1
  226. package/dist/services/task-manager.d.ts +2 -0
  227. package/dist/services/task-manager.d.ts.map +1 -1
  228. package/dist/services/task-manager.js +13 -0
  229. package/dist/services/task-manager.js.map +1 -1
  230. package/dist/services/usage-state.d.ts.map +1 -1
  231. package/dist/services/usage-state.js +3 -0
  232. package/dist/services/usage-state.js.map +1 -1
  233. package/dist/skills/loader.d.ts +1 -1
  234. package/dist/skills/loader.d.ts.map +1 -1
  235. package/dist/skills/loader.js +1 -1
  236. package/dist/skills/loader.js.map +1 -1
  237. package/dist/skills/registry.d.ts +1 -1
  238. package/dist/skills/registry.d.ts.map +1 -1
  239. package/dist/skills/registry.js +1 -1
  240. package/dist/skills/registry.js.map +1 -1
  241. package/dist/terminal-ui/launch.d.ts +18 -3
  242. package/dist/terminal-ui/launch.d.ts.map +1 -1
  243. package/dist/terminal-ui/launch.js +21 -4
  244. package/dist/terminal-ui/launch.js.map +1 -1
  245. package/dist/tools/index.d.ts.map +1 -1
  246. package/dist/tools/index.js +3 -4
  247. package/dist/tools/index.js.map +1 -1
  248. package/dist/tools/lsp.js.map +1 -1
  249. package/dist/tools/web.js +3 -3
  250. package/dist/tools/web.js.map +1 -1
  251. package/dist/tui-core/frame.d.ts +13 -1
  252. package/dist/tui-core/frame.d.ts.map +1 -1
  253. package/dist/tui-core/frame.js +61 -8
  254. package/dist/tui-core/frame.js.map +1 -1
  255. package/dist/tui-core/style.d.ts +87 -0
  256. package/dist/tui-core/style.d.ts.map +1 -0
  257. package/dist/tui-core/style.js +248 -0
  258. package/dist/tui-core/style.js.map +1 -0
  259. package/dist/tui-core/terminal-writer.d.ts.map +1 -1
  260. package/dist/tui-core/terminal-writer.js +16 -3
  261. package/dist/tui-core/terminal-writer.js.map +1 -1
  262. package/dist/tui-ui/inline-surface.d.ts +134 -0
  263. package/dist/tui-ui/inline-surface.d.ts.map +1 -0
  264. package/dist/tui-ui/inline-surface.js +364 -0
  265. package/dist/tui-ui/inline-surface.js.map +1 -0
  266. package/dist/tui-ui/launch.d.ts.map +1 -1
  267. package/dist/tui-ui/launch.js +249 -64
  268. package/dist/tui-ui/launch.js.map +1 -1
  269. package/dist/tui-ui/layout.js +15 -2
  270. package/dist/tui-ui/layout.js.map +1 -1
  271. package/dist/tui-ui/render-scheduler.d.ts +37 -0
  272. package/dist/tui-ui/render-scheduler.d.ts.map +1 -0
  273. package/dist/tui-ui/render-scheduler.js +118 -0
  274. package/dist/tui-ui/render-scheduler.js.map +1 -0
  275. package/dist/tui-ui/runner.d.ts +12 -0
  276. package/dist/tui-ui/runner.d.ts.map +1 -1
  277. package/dist/tui-ui/runner.js +34 -2
  278. package/dist/tui-ui/runner.js.map +1 -1
  279. package/dist/tui-ui/state.d.ts +33 -3
  280. package/dist/tui-ui/state.d.ts.map +1 -1
  281. package/dist/tui-ui/state.js +138 -25
  282. package/dist/tui-ui/state.js.map +1 -1
  283. package/dist/tui-ui/transcript-cache.d.ts +33 -0
  284. package/dist/tui-ui/transcript-cache.d.ts.map +1 -0
  285. package/dist/tui-ui/transcript-cache.js +67 -0
  286. package/dist/tui-ui/transcript-cache.js.map +1 -0
  287. package/dist/ui/box.d.ts.map +1 -1
  288. package/dist/ui/box.js +0 -11
  289. package/dist/ui/box.js.map +1 -1
  290. package/dist/ui/command-panel.d.ts.map +1 -1
  291. package/dist/ui/command-panel.js +1 -3
  292. package/dist/ui/command-panel.js.map +1 -1
  293. package/dist/ui/file-completion.js +1 -1
  294. package/dist/ui/file-completion.js.map +1 -1
  295. package/dist/ui/markdown.d.ts.map +1 -1
  296. package/dist/ui/markdown.js +1 -2
  297. package/dist/ui/markdown.js.map +1 -1
  298. package/dist/ui/multiline-input.d.ts.map +1 -1
  299. package/dist/ui/multiline-input.js +1 -2
  300. package/dist/ui/multiline-input.js.map +1 -1
  301. package/dist/ui/progress.d.ts.map +1 -1
  302. package/dist/ui/progress.js +0 -3
  303. package/dist/ui/progress.js.map +1 -1
  304. package/dist/ui/status-bar.d.ts.map +1 -1
  305. package/dist/ui/status-bar.js +0 -1
  306. package/dist/ui/status-bar.js.map +1 -1
  307. package/dist/ui/stream-markdown.d.ts +3 -0
  308. package/dist/ui/stream-markdown.d.ts.map +1 -1
  309. package/dist/ui/stream-markdown.js +0 -6
  310. package/dist/ui/stream-markdown.js.map +1 -1
  311. package/dist/ui/tool-preview.d.ts.map +1 -1
  312. package/dist/ui/tool-preview.js +0 -1
  313. package/dist/ui/tool-preview.js.map +1 -1
  314. package/package.json +1 -1
  315. package/dist/cli-dbg.js +0 -717
  316. package/dist/cli-debug.d.ts +0 -7
  317. package/dist/cli-debug.d.ts.map +0 -1
  318. package/dist/cli-debug.js +0 -717
  319. package/dist/cli-debug.js.map +0 -1
  320. package/dist/cli-debug2.d.ts +0 -7
  321. package/dist/cli-debug2.d.ts.map +0 -1
  322. package/dist/cli-debug2.js +0 -717
  323. package/dist/cli-debug2.js.map +0 -1
  324. package/dist/cli-debug3.d.ts +0 -7
  325. package/dist/cli-debug3.d.ts.map +0 -1
  326. package/dist/cli-debug3.js +0 -719
  327. package/dist/cli-debug3.js.map +0 -1
  328. package/dist/cli-ink.d.ts +0 -8
  329. package/dist/cli-ink.d.ts.map +0 -1
  330. package/dist/cli-ink.js +0 -32
  331. package/dist/cli-ink.js.map +0 -1
  332. package/dist/cli-patch.js +0 -716
  333. package/dist/cli-test.js +0 -726
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/tui-core/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/tui-core/frame.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * TUI style model: normalized, renderer-independent text styling.
3
+ *
4
+ * Styles are semantic tokens resolved by theme at layout time; ANSI SGR
5
+ * codes are only emitted by the terminal row encoder. Layout never writes
6
+ * raw escape sequences.
7
+ *
8
+ * NO_COLOR / FORCE_COLOR are respected at the encoder level - style
9
+ * fields are preserved in the model but color output is suppressed.
10
+ */
11
+ export type TuiColor = {
12
+ kind: 'named';
13
+ value: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white';
14
+ } | {
15
+ kind: 'indexed';
16
+ value: number;
17
+ } | {
18
+ kind: 'rgb';
19
+ r: number;
20
+ g: number;
21
+ b: number;
22
+ };
23
+ export interface TuiStyle {
24
+ foreground?: TuiColor;
25
+ background?: TuiColor;
26
+ bold?: boolean;
27
+ dim?: boolean;
28
+ italic?: boolean;
29
+ underline?: boolean;
30
+ inverse?: boolean;
31
+ }
32
+ /** Shared immutable default style (no formatting). */
33
+ export declare const DEFAULT_STYLE: TuiStyle;
34
+ /**
35
+ * Normalize a style: remove undefined/false fields, clamp indexed/rgb values.
36
+ * Returns a new frozen object. Used for frame diff comparison.
37
+ */
38
+ export declare function normalizeStyle(style: TuiStyle): TuiStyle;
39
+ /**
40
+ * Compute a stable string key for style comparison.
41
+ * Used in frame diff to detect style-only changes efficiently.
42
+ */
43
+ export declare function styleKey(style: TuiStyle): string;
44
+ /**
45
+ * Check if two styles are equivalent after normalization.
46
+ */
47
+ export declare function stylesEqual(a: TuiStyle, b: TuiStyle): boolean;
48
+ export interface TuiTheme {
49
+ assistantText: TuiStyle;
50
+ heading: TuiStyle;
51
+ code: TuiStyle;
52
+ diffAdded: TuiStyle;
53
+ diffRemoved: TuiStyle;
54
+ diffHunk: TuiStyle;
55
+ warning: TuiStyle;
56
+ error: TuiStyle;
57
+ activityRunning: TuiStyle;
58
+ activitySuccess: TuiStyle;
59
+ activityFailed: TuiStyle;
60
+ muted: TuiStyle;
61
+ }
62
+ /** Default dark-theme semantic tokens. */
63
+ export declare const DEFAULT_THEME: TuiTheme;
64
+ /** Check if NO_COLOR is set or output is not a TTY. */
65
+ export declare function shouldSuppressColor(): boolean;
66
+ /**
67
+ * Encode a TuiStyle into ANSI SGR parameters.
68
+ * Returns an empty string if style is default or color is suppressed.
69
+ * Row encoder must emit SGR0 (\x1b[0m) after each styled span.
70
+ */
71
+ export declare function encodeStyleToSgr(style: TuiStyle, suppressColor?: boolean): string;
72
+ /** SGR reset sequence. */
73
+ export declare const SGR_RESET = "\u001B[0m";
74
+ export interface StyledSpan {
75
+ text: string;
76
+ style: TuiStyle;
77
+ }
78
+ export type StyledRow = StyledSpan[];
79
+ /**
80
+ * Sanitize text for terminal display.
81
+ *
82
+ * Strips entire ANSI escape sequences (CSI, OSC, etc.) and all C0/C1 control
83
+ * characters except \n and \t. Tab is expanded to spaces before entering layout.
84
+ * This prevents model content from injecting ANSI control sequences.
85
+ */
86
+ export declare function sanitizeTerminalText(text: string, tabWidth?: number): string;
87
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/tui-core/style.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GACtG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,sDAAsD;AACtD,eAAO,MAAM,aAAa,EAAE,QAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAgBxD;AAkBD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAUhD;AAUD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAMD,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,QAAQ,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,QAAQ,CAAC;IACpB,WAAW,EAAE,QAAQ,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,eAAe,EAAE,QAAQ,CAAC;IAC1B,eAAe,EAAE,QAAQ,CAAC;IAC1B,cAAc,EAAE,QAAQ,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,0CAA0C;AAC1C,eAAO,MAAM,aAAa,EAAE,QAa3B,CAAC;AAMF,uDAAuD;AACvD,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,UAAwB,GAAG,MAAM,CAiB/F;AAqBD,0BAA0B;AAC1B,eAAO,MAAM,SAAS,cAAY,CAAC;AAMnC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;AAMrC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CA2BvE"}
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ /**
3
+ * TUI style model: normalized, renderer-independent text styling.
4
+ *
5
+ * Styles are semantic tokens resolved by theme at layout time; ANSI SGR
6
+ * codes are only emitted by the terminal row encoder. Layout never writes
7
+ * raw escape sequences.
8
+ *
9
+ * NO_COLOR / FORCE_COLOR are respected at the encoder level - style
10
+ * fields are preserved in the model but color output is suppressed.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.SGR_RESET = exports.DEFAULT_THEME = exports.DEFAULT_STYLE = void 0;
14
+ exports.normalizeStyle = normalizeStyle;
15
+ exports.styleKey = styleKey;
16
+ exports.stylesEqual = stylesEqual;
17
+ exports.shouldSuppressColor = shouldSuppressColor;
18
+ exports.encodeStyleToSgr = encodeStyleToSgr;
19
+ exports.sanitizeTerminalText = sanitizeTerminalText;
20
+ /** Shared immutable default style (no formatting). */
21
+ exports.DEFAULT_STYLE = {};
22
+ /**
23
+ * Normalize a style: remove undefined/false fields, clamp indexed/rgb values.
24
+ * Returns a new frozen object. Used for frame diff comparison.
25
+ */
26
+ function normalizeStyle(style) {
27
+ const result = {};
28
+ if (style.foreground) {
29
+ result.foreground = normalizeColor(style.foreground);
30
+ }
31
+ if (style.background) {
32
+ result.background = normalizeColor(style.background);
33
+ }
34
+ if (style.bold)
35
+ result.bold = true;
36
+ if (style.dim)
37
+ result.dim = true;
38
+ if (style.italic)
39
+ result.italic = true;
40
+ if (style.underline)
41
+ result.underline = true;
42
+ if (style.inverse)
43
+ result.inverse = true;
44
+ return result;
45
+ }
46
+ function normalizeColor(color) {
47
+ switch (color.kind) {
48
+ case 'named':
49
+ return color;
50
+ case 'indexed':
51
+ return { kind: 'indexed', value: Math.max(0, Math.min(255, Math.floor(color.value))) };
52
+ case 'rgb':
53
+ return {
54
+ kind: 'rgb',
55
+ r: Math.max(0, Math.min(255, Math.floor(color.r))),
56
+ g: Math.max(0, Math.min(255, Math.floor(color.g))),
57
+ b: Math.max(0, Math.min(255, Math.floor(color.b))),
58
+ };
59
+ }
60
+ }
61
+ /**
62
+ * Compute a stable string key for style comparison.
63
+ * Used in frame diff to detect style-only changes efficiently.
64
+ */
65
+ function styleKey(style) {
66
+ const parts = [];
67
+ if (style.foreground)
68
+ parts.push(`fg:${colorKey(style.foreground)}`);
69
+ if (style.background)
70
+ parts.push(`bg:${colorKey(style.background)}`);
71
+ if (style.bold)
72
+ parts.push('b');
73
+ if (style.dim)
74
+ parts.push('d');
75
+ if (style.italic)
76
+ parts.push('i');
77
+ if (style.underline)
78
+ parts.push('u');
79
+ if (style.inverse)
80
+ parts.push('v');
81
+ return parts.join(',');
82
+ }
83
+ function colorKey(color) {
84
+ switch (color.kind) {
85
+ case 'named': return color.value;
86
+ case 'indexed': return `i${color.value}`;
87
+ case 'rgb': return `r${color.r}.${color.g}.${color.b}`;
88
+ }
89
+ }
90
+ /**
91
+ * Check if two styles are equivalent after normalization.
92
+ */
93
+ function stylesEqual(a, b) {
94
+ return styleKey(normalizeStyle(a)) === styleKey(normalizeStyle(b));
95
+ }
96
+ /** Default dark-theme semantic tokens. */
97
+ exports.DEFAULT_THEME = {
98
+ assistantText: {},
99
+ heading: { foreground: { kind: 'named', value: 'cyan' }, bold: true },
100
+ code: { foreground: { kind: 'named', value: 'white' }, dim: true },
101
+ diffAdded: { foreground: { kind: 'named', value: 'green' } },
102
+ diffRemoved: { foreground: { kind: 'named', value: 'red' } },
103
+ diffHunk: { foreground: { kind: 'named', value: 'cyan' }, dim: true },
104
+ warning: { foreground: { kind: 'named', value: 'yellow' } },
105
+ error: { foreground: { kind: 'named', value: 'red' } },
106
+ activityRunning: { foreground: { kind: 'named', value: 'yellow' } },
107
+ activitySuccess: { foreground: { kind: 'named', value: 'green' } },
108
+ activityFailed: { foreground: { kind: 'named', value: 'red' } },
109
+ muted: { dim: true },
110
+ };
111
+ // ============================================================================
112
+ // ANSI SGR encoder
113
+ // ============================================================================
114
+ /** Check if NO_COLOR is set or output is not a TTY. */
115
+ function shouldSuppressColor() {
116
+ if (process.env.NO_COLOR !== undefined && process.env.NO_COLOR !== '')
117
+ return true;
118
+ if (process.env.FORCE_COLOR === '0')
119
+ return true;
120
+ return false;
121
+ }
122
+ /**
123
+ * Encode a TuiStyle into ANSI SGR parameters.
124
+ * Returns an empty string if style is default or color is suppressed.
125
+ * Row encoder must emit SGR0 (\x1b[0m) after each styled span.
126
+ */
127
+ function encodeStyleToSgr(style, suppressColor = shouldSuppressColor()) {
128
+ const norm = normalizeStyle(style);
129
+ const params = [];
130
+ if (norm.bold)
131
+ params.push('1');
132
+ if (norm.dim)
133
+ params.push('2');
134
+ if (norm.italic)
135
+ params.push('3');
136
+ if (norm.underline)
137
+ params.push('4');
138
+ if (norm.inverse)
139
+ params.push('7');
140
+ if (!suppressColor) {
141
+ if (norm.foreground)
142
+ params.push(...encodeColorSgr(norm.foreground, '3', '38'));
143
+ if (norm.background)
144
+ params.push(...encodeColorSgr(norm.background, '4', '48'));
145
+ }
146
+ if (params.length === 0)
147
+ return '';
148
+ return `\x1b[${params.join(';')}m`;
149
+ }
150
+ function encodeColorSgr(color, baseSingle, baseExtended) {
151
+ switch (color.kind) {
152
+ case 'named': {
153
+ const map = {
154
+ black: 0, red: 1, green: 2, yellow: 3,
155
+ blue: 4, magenta: 5, cyan: 6, white: 7,
156
+ };
157
+ const code = map[color.value];
158
+ if (code === undefined)
159
+ return [];
160
+ const base = parseInt(baseSingle, 10) * 10;
161
+ return [`${base + code}`];
162
+ }
163
+ case 'indexed':
164
+ return [`${baseExtended};5;${color.value}`];
165
+ case 'rgb':
166
+ return [`${baseExtended};2;${color.r};${color.g};${color.b}`];
167
+ }
168
+ }
169
+ /** SGR reset sequence. */
170
+ exports.SGR_RESET = '\x1b[0m';
171
+ // ============================================================================
172
+ // Sanitizer
173
+ // ============================================================================
174
+ /**
175
+ * Sanitize text for terminal display.
176
+ *
177
+ * Strips entire ANSI escape sequences (CSI, OSC, etc.) and all C0/C1 control
178
+ * characters except \n and \t. Tab is expanded to spaces before entering layout.
179
+ * This prevents model content from injecting ANSI control sequences.
180
+ */
181
+ function sanitizeTerminalText(text, tabWidth = 2) {
182
+ let result = '';
183
+ let i = 0;
184
+ while (i < text.length) {
185
+ const codePoint = text.codePointAt(i);
186
+ if (codePoint === undefined)
187
+ break;
188
+ const char = String.fromCodePoint(codePoint);
189
+ // ESC (0x1b): strip the entire escape sequence that follows.
190
+ if (codePoint === 0x1b) {
191
+ i = skipEscapeSequence(text, i + 1);
192
+ continue;
193
+ }
194
+ if (char === '\n') {
195
+ result += '\n';
196
+ }
197
+ else if (char === '\t') {
198
+ result += ' '.repeat(tabWidth);
199
+ }
200
+ else if (codePoint < 0x20 || (codePoint >= 0x7f && codePoint < 0xa0)) {
201
+ // C0/C1 control: strip. This includes DEL (0x7f).
202
+ }
203
+ else {
204
+ result += char;
205
+ }
206
+ i += char.length;
207
+ }
208
+ return result;
209
+ }
210
+ /**
211
+ * Skip past an ANSI escape sequence body starting after the ESC byte.
212
+ * CSI: ESC [ params final-byte (0x40-0x7e)
213
+ * OSC: ESC ] data ST (BEL 0x07 or ESC backslash)
214
+ * Other: ESC + single intermediate/final byte
215
+ * Returns the index after the consumed sequence.
216
+ */
217
+ function skipEscapeSequence(text, start) {
218
+ if (start >= text.length)
219
+ return start;
220
+ const next = text.charCodeAt(start);
221
+ if (next === 0x5b) {
222
+ // CSI: ESC [ - consume params until final byte (0x40-0x7e).
223
+ let i = start + 1;
224
+ while (i < text.length) {
225
+ const c = text.charCodeAt(i);
226
+ if (c >= 0x40 && c <= 0x7e)
227
+ return i + 1;
228
+ i += 1;
229
+ }
230
+ return i;
231
+ }
232
+ if (next === 0x5d) {
233
+ // OSC: ESC ] - consume until BEL (0x07) or ST (ESC backslash).
234
+ let i = start + 1;
235
+ while (i < text.length) {
236
+ const c = text.charCodeAt(i);
237
+ if (c === 0x07)
238
+ return i + 1;
239
+ if (c === 0x1b && i + 1 < text.length && text.charCodeAt(i + 1) === 0x5c)
240
+ return i + 2;
241
+ i += 1;
242
+ }
243
+ return i;
244
+ }
245
+ // Other escape (e.g. ESC =, ESC >): consume one byte.
246
+ return start + 1;
247
+ }
248
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/tui-core/style.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-writer.d.ts","sourceRoot":"","sources":["../../src/tui-core/terminal-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAyB;gBAGtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACzC,OAAO,GAAE,wBAA6B;IAGzD,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,uBAAuB;IAShD,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAwCzB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
1
+ {"version":3,"file":"terminal-writer.d.ts","sourceRoot":"","sources":["../../src/tui-core/terminal-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,QAAQ,CAAyB;gBAGtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACzC,OAAO,GAAE,wBAA6B;IAGzD,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,uBAAuB;IAShD,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,GAAG,IAAI,EACzB,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,wBAA6B,GACrC,uBAAuB,CAmDzB;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
@@ -9,6 +9,7 @@ exports.cursorShow = cursorShow;
9
9
  exports.disableAutoWrap = disableAutoWrap;
10
10
  exports.enableAutoWrap = enableAutoWrap;
11
11
  const frame_1 = require("./frame");
12
+ const style_1 = require("./style");
12
13
  class TuiTerminalWriter {
13
14
  constructor(output, options = {}) {
14
15
  this.output = output;
@@ -30,11 +31,11 @@ class TuiTerminalWriter {
30
31
  exports.TuiTerminalWriter = TuiTerminalWriter;
31
32
  function renderTerminalFrame(previous, next, options = {}) {
32
33
  const diff = (0, frame_1.diffTuiFrames)(previous, next);
33
- const rows = (0, frame_1.renderFrameRows)(next);
34
34
  const chunks = [];
35
35
  const bracketCursor = options.bracketCursor ?? true;
36
36
  const shouldPaint = diff.changedRows.length > 0 || diff.cursorChanged;
37
37
  const bracketAutoWrap = options.bracketAutoWrap ?? true;
38
+ const suppressColor = (0, style_1.shouldSuppressColor)();
38
39
  if (shouldPaint && bracketAutoWrap) {
39
40
  chunks.push(disableAutoWrap());
40
41
  }
@@ -44,12 +45,24 @@ function renderTerminalFrame(previous, next, options = {}) {
44
45
  for (const rowIndex of diff.changedRows) {
45
46
  chunks.push(moveTo(rowIndex, 0));
46
47
  chunks.push(clearLine());
47
- chunks.push(rows[rowIndex] ?? '');
48
+ // Emit styled spans: SGR per span, SGR0 reset at end (only if styled).
49
+ const spans = (0, frame_1.renderStyledFrameRow)(next.rows[rowIndex] ?? []);
50
+ let emittedSgr = false;
51
+ for (const span of spans) {
52
+ const sgr = (0, style_1.encodeStyleToSgr)(span.style, suppressColor);
53
+ if (sgr) {
54
+ chunks.push(sgr);
55
+ emittedSgr = true;
56
+ }
57
+ chunks.push(span.text);
58
+ }
59
+ if (emittedSgr)
60
+ chunks.push(style_1.SGR_RESET);
48
61
  }
49
62
  if (diff.cursorChanged || diff.changedRows.length > 0) {
50
63
  chunks.push(moveTo(next.cursor.row, next.cursor.column));
51
64
  }
52
- if (bracketCursor) {
65
+ if (bracketCursor && shouldPaint) {
53
66
  chunks.push(next.cursor.visible ? cursorShow() : cursorHide());
54
67
  }
55
68
  else if (diff.cursorChanged && !next.cursor.visible) {
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-writer.js","sourceRoot":"","sources":["../../src/tui-core/terminal-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-writer.js","sourceRoot":"","sources":["../../src/tui-core/terminal-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * InlineTerminalSurface: primary-screen inline TUI surface.
3
+ *
4
+ * Replaces the alternate-screen (1049) approach. Finalized transcript
5
+ * content is committed once to stdout (entering shell native scrollback),
6
+ * while the bottom live region holds only ephemeral content (streaming
7
+ * assistant, running tools, overlay, status, prompt).
8
+ *
9
+ * Control sequences used (relative addressing only):
10
+ * CR \r return to column 0
11
+ * EL2 \x1b[2K erase current line
12
+ * CUU(n) \x1b[<n>A cursor up (relative)
13
+ * CUD(n) \x1b[<n>B cursor down (relative)
14
+ * CUF(n) \x1b[<n>C cursor forward (relative)
15
+ * SGR0 \x1b[0m reset style
16
+ * DECTCEM \x1b[?25l/?25h hide/show cursor
17
+ * DECAWM \x1b[?7l/?7h disable/enable autowrap (paint batch)
18
+ *
19
+ * Forbidden (never emitted):
20
+ * \x1b[?1049h / \x1b[?1049l (alternate screen)
21
+ * CSI row;col H / f (absolute cursor positioning)
22
+ * CSI 2J (full screen clear)
23
+ * mouse reporting, OSC52, OSC8
24
+ *
25
+ * All operations are serialized via an internal FIFO queue so commit,
26
+ * renderLive, resize, suspend, and unmount never interleave on the same stream.
27
+ */
28
+ import { type TuiFrame } from '../tui-core/frame';
29
+ /** Minimal output stream interface. */
30
+ export interface SurfaceOutput {
31
+ write(chunk: string | Uint8Array): boolean;
32
+ on(event: 'drain', listener: () => void): this;
33
+ off(event: 'drain', listener: () => void): this;
34
+ readonly writable: boolean;
35
+ }
36
+ export interface InlineSurfaceOptions {
37
+ output: SurfaceOutput;
38
+ /** Inject for deterministic tests. */
39
+ now?: () => number;
40
+ }
41
+ export type SurfacePhase = 'idle' | 'mounted' | 'suspended' | 'unmounted' | 'failed';
42
+ export interface InlineSurfaceState {
43
+ phase: SurfacePhase;
44
+ width: number;
45
+ height: number;
46
+ /** Rows reserved for the live region (only grows during a mount lifecycle). */
47
+ liveRegionCapacity: number;
48
+ cursorRow: number;
49
+ cursorColumn: number;
50
+ previousFrame: TuiFrame | null;
51
+ }
52
+ /** A committed transcript entry rendered to styled rows. */
53
+ export interface CommittedEntry {
54
+ displayKey: string;
55
+ rows: {
56
+ text: string;
57
+ style?: import('../tui-core/style').TuiStyle;
58
+ }[][];
59
+ }
60
+ export interface TranscriptCommitBatch {
61
+ generation: number;
62
+ reason: 'append' | 'finalize' | 'restore' | 'replace' | 'clear-divider';
63
+ entries: CommittedEntry[];
64
+ }
65
+ export interface TuiTerminalRenderResult {
66
+ output: string;
67
+ committedEntries: number;
68
+ }
69
+ /**
70
+ * Get the latest live frame for rendering after a commit.
71
+ * The runner provides this so commit + finalize interleaving uses fresh state.
72
+ */
73
+ export type LiveFrameProvider = () => TuiFrame | null;
74
+ export declare class InlineTerminalSurface {
75
+ private phase;
76
+ private width;
77
+ private height;
78
+ private liveRegionCapacity;
79
+ private cursorRow;
80
+ private cursorColumn;
81
+ private previousFrame;
82
+ private readonly output;
83
+ private readonly now;
84
+ private readonly suppressColor;
85
+ /** Serialized FIFO queue of pending operations. */
86
+ private queue;
87
+ private processing;
88
+ constructor(options: InlineSurfaceOptions);
89
+ getState(): InlineSurfaceState;
90
+ /** Safe content width: never write the last column (avoid pending-wrap). */
91
+ get safeContentWidth(): number;
92
+ /** Enqueue an operation; FIFO guarantees no interleaving. */
93
+ private enqueue;
94
+ private drainQueue;
95
+ /** Mount: enable bracketed paste + hide cursor. NO alternate screen. */
96
+ mount(width: number, height: number): Promise<void>;
97
+ /**
98
+ * Commit finalized transcript entries to scrollback (append-only).
99
+ * Protocol: clear live region -> commit rows -> rebuild live frame.
100
+ */
101
+ commit(batch: TranscriptCommitBatch, getLatestLiveFrame: LiveFrameProvider): Promise<TuiTerminalRenderResult>;
102
+ /** Render the live region frame (relative addressing, changed-row diff). */
103
+ renderLive(frame: TuiFrame): Promise<string>;
104
+ private renderLiveInternal;
105
+ /** Ensure the live region has at least requiredRows capacity (grows only). */
106
+ private ensureCapacity;
107
+ /** Clear the live region rows (relative, no absolute addressing). */
108
+ private clearLiveRegion;
109
+ /** Resize: only handle live region; committed history goes to terminal reflow. */
110
+ resize(width: number, height: number, getLatestLiveFrame: LiveFrameProvider): Promise<void>;
111
+ /** Suspend for child process: clear live region, disable bracketed paste, show cursor. */
112
+ suspend(): Promise<void>;
113
+ /** Restore after child process: re-enable bracketed paste, rebuild live frame. */
114
+ restore(getLatestLiveFrame: LiveFrameProvider): Promise<void>;
115
+ /** Unmount: clear live region, restore terminal state. Does NOT erase scrollback. */
116
+ unmount(): Promise<void>;
117
+ /** Flush: wait for queue to drain. Yields to I/O between checks. */
118
+ flush(): Promise<void>;
119
+ private writeRaw;
120
+ /** Reset for tests. */
121
+ reset(): void;
122
+ }
123
+ export declare class MemoryOutput implements SurfaceOutput {
124
+ chunks: string[];
125
+ writable: boolean;
126
+ private drainListeners;
127
+ write(chunk: string | Uint8Array): boolean;
128
+ on(event: 'drain', listener: () => void): this;
129
+ off(event: 'drain', listener: () => void): this;
130
+ text(): string;
131
+ /** Assert output never contains forbidden sequences. */
132
+ assertNoForbidden(): void;
133
+ }
134
+ //# sourceMappingURL=inline-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-surface.d.ts","sourceRoot":"","sources":["../../src/tui-ui/inline-surface.ts"],"names":[],"mappings":"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"}