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
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ /**
3
+ * Lightweight ANSI SGR-to-StyledSpan parser.
4
+ *
5
+ * Converts tool output containing basic SGR colour/style codes into StyledSpan[]
6
+ * for the rich-text layout engine, while stripping all other escape sequences
7
+ * (cursor movement, erase, absolute positioning, etc.) that would corrupt the
8
+ * TUI frame model.
9
+ *
10
+ * This is intentionally NOT a full terminal emulator. It only handles the
11
+ * subset of SGR codes that external tools (jest, eslint, compilers) commonly
12
+ * emit:
13
+ *
14
+ * - SGR reset (0)
15
+ * - bold (1), dim (2)
16
+ * - foreground colours (30-37)
17
+ * - background colours (40-47)
18
+ * - bright foreground (90-97)
19
+ *
20
+ * All other escape sequences are discarded.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.parseAnsiToStyledSpans = parseAnsiToStyledSpans;
24
+ /**
25
+ * Parse tool output that may contain ANSI SGR escape codes into styled spans.
26
+ * Non-SGR escape sequences (cursor movement, clear screen, etc.) are stripped.
27
+ * Plain text between SGR codes is emitted with the current style.
28
+ */
29
+ function parseAnsiToStyledSpans(rawText) {
30
+ const spans = [];
31
+ const text = rawText.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
32
+ let current = '';
33
+ let style = {};
34
+ let i = 0;
35
+ const flush = () => {
36
+ if (current.length > 0) {
37
+ spans.push({ text: current, style });
38
+ current = '';
39
+ }
40
+ };
41
+ while (i < text.length) {
42
+ const codePoint = text.codePointAt(i);
43
+ if (codePoint === undefined)
44
+ break;
45
+ const char = String.fromCodePoint(codePoint);
46
+ if (codePoint === 0x1b) {
47
+ // ESC found — try to parse the escape sequence
48
+ const parsed = tryParseSgrSequence(text, i);
49
+ if (parsed) {
50
+ flush();
51
+ style = mergeTuiStyle(style, parsed.style);
52
+ i = parsed.nextIndex;
53
+ continue;
54
+ }
55
+ // Not a recognised SGR sequence — skip the entire escape sequence
56
+ flush();
57
+ style = {}; // reset on unknown escape to avoid stale colour
58
+ i = skipEscapeSequence(text, i + 1);
59
+ continue;
60
+ }
61
+ // C0 control characters other than \n are stripped.
62
+ if (codePoint < 0x20 && codePoint !== 0x0a) {
63
+ i += 1;
64
+ continue;
65
+ }
66
+ current += char;
67
+ i += char.length;
68
+ }
69
+ flush();
70
+ return spans;
71
+ }
72
+ function tryParseSgrSequence(text, escIndex) {
73
+ const next = text.codePointAt(escIndex + 1);
74
+ if (next !== 0x5b)
75
+ return null; // 0x5b = '['
76
+ // Find the terminator (0x40–0x7e: @–~)
77
+ let end = escIndex + 2;
78
+ while (end < text.length) {
79
+ const cp = text.codePointAt(end);
80
+ if (cp === undefined)
81
+ break;
82
+ if (cp >= 0x40 && cp <= 0x7e) {
83
+ const params = text.slice(escIndex + 2, end + 1); // include terminator
84
+ const style = parseSgrParams(params);
85
+ if (style === null)
86
+ return null; // not an SGR sequence
87
+ return { style, nextIndex: end + 1 };
88
+ }
89
+ end += 1;
90
+ }
91
+ return null; // unterminated
92
+ }
93
+ /**
94
+ * Parse SGR parameters (the portion between `\x1b[` and `m`).
95
+ * Returns null if the final character is not 'm' (not an SGR sequence).
96
+ */
97
+ function parseSgrParams(params) {
98
+ if (params.length === 0)
99
+ return null; // CSI without params
100
+ const final = params.codePointAt(params.length - 1);
101
+ if (final !== 0x6d)
102
+ return null; // not ending with 'm'
103
+ const codes = params.slice(0, -1).split(';').map(c => parseInt(c, 10));
104
+ if (codes.length === 0 || codes.every(isNaN))
105
+ return null;
106
+ let result = {};
107
+ for (const code of codes) {
108
+ if (isNaN(code))
109
+ continue;
110
+ switch (code) {
111
+ case 0:
112
+ result = {};
113
+ break; // reset
114
+ case 1:
115
+ result = { ...result, bold: true };
116
+ break;
117
+ case 2:
118
+ result = { ...result, dim: true };
119
+ break;
120
+ case 30:
121
+ result = { ...result, foreground: named('black') };
122
+ break;
123
+ case 31:
124
+ result = { ...result, foreground: named('red') };
125
+ break;
126
+ case 32:
127
+ result = { ...result, foreground: named('green') };
128
+ break;
129
+ case 33:
130
+ result = { ...result, foreground: named('yellow') };
131
+ break;
132
+ case 34:
133
+ result = { ...result, foreground: named('blue') };
134
+ break;
135
+ case 35:
136
+ result = { ...result, foreground: named('magenta') };
137
+ break;
138
+ case 36:
139
+ result = { ...result, foreground: named('cyan') };
140
+ break;
141
+ case 37:
142
+ result = { ...result, foreground: named('white') };
143
+ break;
144
+ case 39:
145
+ result = { ...result, foreground: undefined };
146
+ break; // default fg
147
+ case 40:
148
+ result = { ...result, background: named('black') };
149
+ break;
150
+ case 41:
151
+ result = { ...result, background: named('red') };
152
+ break;
153
+ case 42:
154
+ result = { ...result, background: named('green') };
155
+ break;
156
+ case 43:
157
+ result = { ...result, background: named('yellow') };
158
+ break;
159
+ case 44:
160
+ result = { ...result, background: named('blue') };
161
+ break;
162
+ case 45:
163
+ result = { ...result, background: named('magenta') };
164
+ break;
165
+ case 46:
166
+ result = { ...result, background: named('cyan') };
167
+ break;
168
+ case 47:
169
+ result = { ...result, background: named('white') };
170
+ break;
171
+ case 49:
172
+ result = { ...result, background: undefined };
173
+ break; // default bg
174
+ case 90:
175
+ result = { ...result, foreground: named('black') };
176
+ break;
177
+ case 91:
178
+ result = { ...result, foreground: named('red') };
179
+ break;
180
+ case 92:
181
+ result = { ...result, foreground: named('green') };
182
+ break;
183
+ case 93:
184
+ result = { ...result, foreground: named('yellow') };
185
+ break;
186
+ case 94:
187
+ result = { ...result, foreground: named('blue') };
188
+ break;
189
+ case 95:
190
+ result = { ...result, foreground: named('magenta') };
191
+ break;
192
+ case 96:
193
+ result = { ...result, foreground: named('cyan') };
194
+ break;
195
+ case 97:
196
+ result = { ...result, foreground: named('white') };
197
+ break;
198
+ // Unrecognised SGR codes are ignored (they are still valid SGR).
199
+ default: break;
200
+ }
201
+ }
202
+ return result;
203
+ }
204
+ const VALID_NAMED_COLORS = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];
205
+ function named(name) {
206
+ // The SGR code mapping only produces valid named colors, but guard anyway.
207
+ const value = VALID_NAMED_COLORS.includes(name)
208
+ ? name
209
+ : 'white';
210
+ return { kind: 'named', value };
211
+ }
212
+ /** Merge a parsed SGR style on top of the current style. */
213
+ function mergeTuiStyle(current, incoming) {
214
+ // If incoming is a reset (all fields undefined), return empty.
215
+ const hasReset = incoming.foreground === undefined &&
216
+ incoming.background === undefined &&
217
+ incoming.bold === undefined &&
218
+ incoming.dim === undefined;
219
+ if (hasReset)
220
+ return {};
221
+ return {
222
+ foreground: incoming.foreground !== undefined ? incoming.foreground : current.foreground,
223
+ background: incoming.background !== undefined ? incoming.background : current.background,
224
+ bold: incoming.bold !== undefined ? incoming.bold : current.bold,
225
+ dim: incoming.dim !== undefined ? incoming.dim : current.dim,
226
+ };
227
+ }
228
+ /**
229
+ * Skip past an escape sequence starting from the character after ESC.
230
+ * We only skip known SGR/CUP/ED/EL/etc sequences; for unknown sequences
231
+ * we skip to the next printable character as a safety measure.
232
+ */
233
+ function skipEscapeSequence(text, index) {
234
+ // For CSI sequences (starting with '['), skip past all parameter bytes
235
+ // (0x30-0x3f) and intermediate bytes (0x20-0x2f) until the terminator.
236
+ let i = index;
237
+ if (i < text.length && text.codePointAt(i) === 0x5b) {
238
+ // CSI sequence: skip '[' and all parameter/intermediate bytes
239
+ i += 1;
240
+ while (i < text.length) {
241
+ const cp = text.codePointAt(i);
242
+ if (cp === undefined)
243
+ break;
244
+ if (cp >= 0x30 && cp <= 0x3f) {
245
+ i += 1;
246
+ continue;
247
+ } // parameter byte
248
+ if (cp >= 0x20 && cp <= 0x2f) {
249
+ i += 1;
250
+ continue;
251
+ } // intermediate byte
252
+ if (cp >= 0x40 && cp <= 0x7e) {
253
+ return i + 1;
254
+ } // final byte
255
+ break; // not a valid CSI byte — bail out
256
+ }
257
+ return text.length;
258
+ }
259
+ // Non-CSI escape: skip until terminator or end of string.
260
+ while (i < text.length) {
261
+ const cp = text.codePointAt(i);
262
+ if (cp === undefined)
263
+ break;
264
+ if (cp >= 0x40 && cp <= 0x7e)
265
+ return i + 1;
266
+ if (cp < 0x20 || cp > 0x7e)
267
+ return i;
268
+ i += 1;
269
+ }
270
+ return text.length;
271
+ }
272
+ //# sourceMappingURL=ansi-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi-parser.js","sourceRoot":"","sources":["../../../src/runtime/rich-text/ansi-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Rich text layout: convert RichTextBlock[] to StyledRow[].
3
+ *
4
+ * Pure function: takes blocks + width + theme, returns styled rows.
5
+ * Handles width degradation, code wrapping, diff prefixes, table fallback.
6
+ * Every output row satisfies stringWidth(row) <= safeWidth.
7
+ */
8
+ import { type RichTextDocument, type RichTextThemeResolver } from './types';
9
+ import { type StyledRow } from '../../tui-core/style';
10
+ export interface RichTextLayoutOptions {
11
+ width: number;
12
+ theme: RichTextThemeResolver;
13
+ /** Left indentation for the content (continuation alignment). */
14
+ indent?: number;
15
+ }
16
+ /**
17
+ * Layout a RichTextDocument into StyledRow[].
18
+ * Each row's visual width <= safeWidth.
19
+ */
20
+ export declare function layoutRichText(doc: RichTextDocument, options: RichTextLayoutOptions): StyledRow[];
21
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/runtime/rich-text/layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAE3B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,KAAK,SAAS,EAIf,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;IAC7B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAAE,CAUjG"}
@@ -0,0 +1,327 @@
1
+ "use strict";
2
+ /**
3
+ * Rich text layout: convert RichTextBlock[] to StyledRow[].
4
+ *
5
+ * Pure function: takes blocks + width + theme, returns styled rows.
6
+ * Handles width degradation, code wrapping, diff prefixes, table fallback.
7
+ * Every output row satisfies stringWidth(row) <= safeWidth.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.layoutRichText = layoutRichText;
14
+ const string_width_1 = __importDefault(require("string-width"));
15
+ const grapheme_1 = require("../composer/grapheme");
16
+ const style_1 = require("../../tui-core/style");
17
+ /**
18
+ * Layout a RichTextDocument into StyledRow[].
19
+ * Each row's visual width <= safeWidth.
20
+ */
21
+ function layoutRichText(doc, options) {
22
+ const safeWidth = Math.max(1, options.width);
23
+ const rows = [];
24
+ for (const block of doc.blocks) {
25
+ const blockRows = layoutBlock(block, safeWidth, options.theme, options.indent ?? 0);
26
+ rows.push(...blockRows);
27
+ }
28
+ return rows;
29
+ }
30
+ function layoutBlock(block, width, theme, indent) {
31
+ switch (block.type) {
32
+ case 'paragraph':
33
+ return layoutParagraph(block.spans, width, theme('assistantText'), indent);
34
+ case 'heading':
35
+ return layoutParagraph(block.spans, width, theme('heading'), indent);
36
+ case 'list':
37
+ return layoutList(block, width, theme, indent);
38
+ case 'quote':
39
+ return layoutQuote(block, width, theme, indent);
40
+ case 'code':
41
+ return layoutCode(block.lines, block.language, width, theme('code'), indent);
42
+ case 'diff':
43
+ return layoutDiff(block.lines, width, theme, indent);
44
+ case 'table':
45
+ return layoutTable(block, width, theme, indent);
46
+ case 'rule':
47
+ return [[{ text: '─'.repeat(width), style: theme('muted') }]];
48
+ default:
49
+ return [];
50
+ }
51
+ }
52
+ function layoutParagraph(spans, width, style, indent) {
53
+ const availableWidth = Math.max(1, width - indent);
54
+ const styledSpans = spans.map(s => ({
55
+ text: s.text,
56
+ style: resolveSpanStyle(s, style),
57
+ }));
58
+ // If no text content, return an empty row with indent.
59
+ const fullText = styledSpans.map(s => s.text).join('');
60
+ if (!fullText)
61
+ return [[{ text: ' '.repeat(indent), style }]];
62
+ // Check if all spans share the same style — if so, use simple wrap.
63
+ const allSameStyle = styledSpans.every(s => (0, style_1.styleKey)(s.style) === (0, style_1.styleKey)(styledSpans[0].style));
64
+ if (allSameStyle) {
65
+ // Simple path: join text, wrap, apply single style.
66
+ const lines = fullText.split('\n');
67
+ const rows = [];
68
+ for (const line of lines) {
69
+ const wrapped = wrapText(line, availableWidth);
70
+ for (const wrappedLine of wrapped) {
71
+ rows.push([{ text: ' '.repeat(indent) + wrappedLine, style: styledSpans[0].style }]);
72
+ }
73
+ }
74
+ return rows;
75
+ }
76
+ // Mixed-style path: build a character-to-style map, wrap the joined text,
77
+ // then reconstruct spans per row preserving style boundaries.
78
+ const charStyles = [];
79
+ for (const span of styledSpans) {
80
+ Array.from(span.text).forEach(() => {
81
+ charStyles.push(span.style);
82
+ });
83
+ }
84
+ const lines = fullText.split('\n');
85
+ const rows = [];
86
+ let charOffset = 0;
87
+ for (const line of lines) {
88
+ const wrapped = wrapText(line, availableWidth);
89
+ for (const wrappedLine of wrapped) {
90
+ const lineStart = charOffset;
91
+ const lineEnd = charOffset + Array.from(wrappedLine).length;
92
+ // Build spans for this line from the charStyles map.
93
+ const rowSpans = [{ text: ' '.repeat(indent), style }];
94
+ let currentSpanText = '';
95
+ let currentSpanStyle = null;
96
+ for (let ci = lineStart; ci < lineEnd && ci < charStyles.length; ci++) {
97
+ const ch = Array.from(fullText)[ci] || '';
98
+ const chStyle = charStyles[ci];
99
+ if (currentSpanStyle !== null && (0, style_1.styleKey)(chStyle) !== (0, style_1.styleKey)(currentSpanStyle)) {
100
+ if (currentSpanText) {
101
+ rowSpans.push({ text: currentSpanText, style: currentSpanStyle });
102
+ }
103
+ currentSpanText = ch;
104
+ currentSpanStyle = chStyle;
105
+ }
106
+ else {
107
+ currentSpanText += ch;
108
+ currentSpanStyle = chStyle;
109
+ }
110
+ }
111
+ if (currentSpanText && currentSpanStyle !== null) {
112
+ rowSpans.push({ text: currentSpanText, style: currentSpanStyle });
113
+ }
114
+ rows.push(rowSpans);
115
+ charOffset = lineEnd;
116
+ }
117
+ // Skip the newline character in the charStyles map.
118
+ charOffset += 1;
119
+ }
120
+ return rows;
121
+ }
122
+ function wrapText(text, maxWidth) {
123
+ if (!text)
124
+ return [''];
125
+ if ((0, string_width_1.default)(text) <= maxWidth)
126
+ return [text];
127
+ const words = text.split(' ');
128
+ const lines = [];
129
+ let current = '';
130
+ for (const word of words) {
131
+ const candidate = current ? `${current} ${word}` : word;
132
+ if ((0, string_width_1.default)(candidate) <= maxWidth) {
133
+ current = candidate;
134
+ }
135
+ else {
136
+ if (current)
137
+ lines.push(current);
138
+ // Hard-wrap long words.
139
+ if ((0, string_width_1.default)(word) > maxWidth) {
140
+ const chunks = splitByVisualWidth(word, maxWidth);
141
+ lines.push(...chunks.slice(0, -1));
142
+ current = chunks[chunks.length - 1];
143
+ }
144
+ else {
145
+ current = word;
146
+ }
147
+ }
148
+ }
149
+ if (current)
150
+ lines.push(current);
151
+ return lines.length > 0 ? lines : [''];
152
+ }
153
+ function splitByVisualWidth(text, maxWidth) {
154
+ if (text.length === 0)
155
+ return [''];
156
+ const chunks = [];
157
+ let current = '';
158
+ for (const part of (0, grapheme_1.segmentGraphemes)(text)) {
159
+ const next = `${current}${part.segment}`;
160
+ if (current && (0, string_width_1.default)(next) > maxWidth) {
161
+ chunks.push(current);
162
+ current = part.segment;
163
+ }
164
+ else {
165
+ current = next;
166
+ }
167
+ }
168
+ chunks.push(current);
169
+ return chunks;
170
+ }
171
+ function layoutList(block, width, theme, indent) {
172
+ const rows = [];
173
+ const marker = block.ordered ? '1. ' : '- ';
174
+ const childIndent = indent + marker.length;
175
+ block.items.forEach((item, i) => {
176
+ const prefix = block.ordered ? `${i + 1}. ` : '- ';
177
+ const availableWidth = Math.max(1, width - indent);
178
+ // Render first block with prefix, rest with child indent.
179
+ item.forEach((subBlock, j) => {
180
+ if (j === 0) {
181
+ const subRows = layoutBlock(subBlock, width, theme, indent);
182
+ if (subRows.length > 0) {
183
+ // Prepend marker to first row.
184
+ const firstRow = subRows[0];
185
+ rows.push([{ text: prefix + ' '.repeat(Math.max(0, indent)) + (firstRow[0]?.text ?? '').trimStart(), style: theme('muted') }]);
186
+ rows.push(...subRows.slice(1));
187
+ }
188
+ }
189
+ else {
190
+ rows.push(...layoutBlock(subBlock, width, theme, childIndent));
191
+ }
192
+ });
193
+ void availableWidth;
194
+ });
195
+ return rows;
196
+ }
197
+ function layoutQuote(block, width, theme, indent) {
198
+ const rows = [];
199
+ const quoteIndent = indent + 2;
200
+ for (const subBlock of block.blocks) {
201
+ const subRows = layoutBlock(subBlock, width, theme, quoteIndent);
202
+ for (const row of subRows) {
203
+ // Add quote prefix.
204
+ rows.push([{ text: '> ', style: theme('muted') }, ...row]);
205
+ }
206
+ }
207
+ return rows;
208
+ }
209
+ function layoutCode(lines, _language, width, style, indent) {
210
+ const availableWidth = Math.max(1, width - indent - 1); // 1 for border/prefix
211
+ const rows = [];
212
+ for (const line of lines) {
213
+ if ((0, string_width_1.default)(line) <= availableWidth) {
214
+ rows.push([{ text: ' '.repeat(indent) + line, style }]);
215
+ }
216
+ else {
217
+ const wrapped = splitByVisualWidth(line, availableWidth);
218
+ wrapped.forEach((chunk, i) => {
219
+ const marker = i > 0 ? '↳' : ' ';
220
+ rows.push([{ text: ' '.repeat(indent) + marker + chunk, style }]);
221
+ });
222
+ }
223
+ }
224
+ return rows;
225
+ }
226
+ function layoutDiff(lines, width, theme, indent) {
227
+ const rows = [];
228
+ const availableWidth = Math.max(1, width - indent - 1);
229
+ for (const line of lines) {
230
+ const prefix = line.kind === 'add' ? '+' : line.kind === 'remove' ? '-' : ' ';
231
+ const style = diffLineStyle(line.kind, theme);
232
+ if ((0, string_width_1.default)(line.content) <= availableWidth) {
233
+ rows.push([{ text: ' '.repeat(indent) + prefix + line.content, style }]);
234
+ }
235
+ else {
236
+ const wrapped = splitByVisualWidth(line.content, availableWidth);
237
+ wrapped.forEach((chunk, i) => {
238
+ const marker = i > 0 ? '↳' : prefix;
239
+ rows.push([{ text: ' '.repeat(indent) + marker + chunk, style }]);
240
+ });
241
+ }
242
+ }
243
+ return rows;
244
+ }
245
+ function diffLineStyle(kind, theme) {
246
+ switch (kind) {
247
+ case 'add': return theme('diffAdded');
248
+ case 'remove': return theme('diffRemoved');
249
+ case 'hunk':
250
+ case 'meta': return theme('diffHunk');
251
+ case 'context': return theme('muted');
252
+ }
253
+ }
254
+ function layoutTable(block, width, theme, indent) {
255
+ const availableWidth = Math.max(1, width - indent);
256
+ // Measure column widths.
257
+ const colCount = Math.max(block.headers.length, ...block.rows.map(r => r.length));
258
+ if (colCount === 0)
259
+ return [];
260
+ const minColWidth = 3;
261
+ const maxTotal = availableWidth;
262
+ const idealColWidth = Math.floor(maxTotal / colCount);
263
+ // If columns can't fit, fall back to key/value layout.
264
+ if (idealColWidth < minColWidth) {
265
+ return layoutTableAsKeyValue(block, width, theme, indent);
266
+ }
267
+ const colWidth = idealColWidth;
268
+ const rows = [];
269
+ // Header row.
270
+ const headerRow = [];
271
+ for (let c = 0; c < colCount; c++) {
272
+ const headerText = block.headers[c]?.map(s => s.text).join('') ?? '';
273
+ const truncated = truncateToWidth(headerText, colWidth - 1);
274
+ headerRow.push({ text: truncated.padEnd(colWidth), style: theme('heading') });
275
+ }
276
+ rows.push(headerRow);
277
+ // Separator.
278
+ rows.push([{ text: '-'.repeat(Math.min(colWidth * colCount, maxTotal)), style: theme('muted') }]);
279
+ // Data rows.
280
+ for (const row of block.rows) {
281
+ const dataRow = [];
282
+ for (let c = 0; c < colCount; c++) {
283
+ const cellText = row[c]?.map(s => s.text).join('') ?? '';
284
+ const truncated = truncateToWidth(cellText, colWidth - 1);
285
+ dataRow.push({ text: truncated.padEnd(colWidth), style: theme('assistantText') });
286
+ }
287
+ rows.push(dataRow);
288
+ }
289
+ return rows;
290
+ }
291
+ function layoutTableAsKeyValue(block, width, theme, indent) {
292
+ const rows = [];
293
+ const keyWidth = Math.max(1, Math.floor(width / 3) - indent);
294
+ for (let c = 0; c < block.headers.length; c++) {
295
+ const key = block.headers[c]?.map(s => s.text).join('') ?? `col${c}`;
296
+ rows.push([{ text: ' '.repeat(indent) + truncateToWidth(key, keyWidth).padEnd(keyWidth) + ': ', style: theme('heading') }]);
297
+ for (const row of block.rows) {
298
+ const value = row[c]?.map(s => s.text).join('') ?? '';
299
+ rows.push([{ text: ' '.repeat(indent + keyWidth + 2) + value, style: theme('assistantText') }]);
300
+ }
301
+ }
302
+ return rows;
303
+ }
304
+ function resolveSpanStyle(span, baseStyle) {
305
+ if (!span.bold && !span.italic && !span.code)
306
+ return baseStyle;
307
+ return {
308
+ ...baseStyle,
309
+ bold: span.bold || baseStyle.bold,
310
+ italic: span.italic || baseStyle.italic,
311
+ dim: span.code || baseStyle.dim,
312
+ };
313
+ }
314
+ function truncateToWidth(text, maxWidth) {
315
+ if ((0, string_width_1.default)(text) <= maxWidth)
316
+ return text;
317
+ // Truncate by graphemes.
318
+ let result = '';
319
+ for (const part of (0, grapheme_1.segmentGraphemes)(text)) {
320
+ if ((0, string_width_1.default)(result + part.segment) > maxWidth - 1) {
321
+ return result + '…';
322
+ }
323
+ result += part.segment;
324
+ }
325
+ return result;
326
+ }
327
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/runtime/rich-text/layout.ts"],"names":[],"mappings":"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"}