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,17 @@
1
+ /**
2
+ * Markdown parser: convert model text to RichTextBlock[].
3
+ *
4
+ * Uses marked.lexer() to tokenize, then normalizes tokens into the
5
+ * structured RichTextBlock model. Never calls marked.parse() (HTML),
6
+ * never depends on React components.
7
+ *
8
+ * Resource limits enforce deterministic degradation on malformed or
9
+ * oversized input - parser never throws, falls back to plain text.
10
+ */
11
+ import { type RichTextDocument } from './types';
12
+ /**
13
+ * Parse model text into a RichTextDocument.
14
+ * Never throws - returns a plain-text paragraph on parse failure.
15
+ */
16
+ export declare function parseRichText(rawText: string): RichTextDocument;
17
+ //# sourceMappingURL=markdown-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.d.ts","sourceRoot":"","sources":["../../../src/runtime/rich-text/markdown-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAIL,KAAK,gBAAgB,EAMtB,MAAM,SAAS,CAAC;AAGjB;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA+B/D"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * Markdown parser: convert model text to RichTextBlock[].
4
+ *
5
+ * Uses marked.lexer() to tokenize, then normalizes tokens into the
6
+ * structured RichTextBlock model. Never calls marked.parse() (HTML),
7
+ * never depends on React components.
8
+ *
9
+ * Resource limits enforce deterministic degradation on malformed or
10
+ * oversized input - parser never throws, falls back to plain text.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.parseRichText = parseRichText;
14
+ const marked_1 = require("marked");
15
+ const types_1 = require("./types");
16
+ const sanitizer_1 = require("./sanitizer");
17
+ /**
18
+ * Parse model text into a RichTextDocument.
19
+ * Never throws - returns a plain-text paragraph on parse failure.
20
+ */
21
+ function parseRichText(rawText) {
22
+ if (!rawText || rawText.length === 0) {
23
+ return { blocks: [] };
24
+ }
25
+ // Resource limit: truncate oversized input.
26
+ const truncated = rawText.length > types_1.MAX_RICH_TEXT_INPUT_BYTES
27
+ ? rawText.slice(0, types_1.MAX_RICH_TEXT_INPUT_BYTES)
28
+ : rawText;
29
+ const cleaned = (0, sanitizer_1.sanitizeRichTextInput)(truncated);
30
+ try {
31
+ const tokens = marked_1.marked.lexer(cleaned);
32
+ const blocks = [];
33
+ for (const token of tokens) {
34
+ if (blocks.length >= types_1.MAX_RICH_TEXT_BLOCKS)
35
+ break;
36
+ const block = tokenToBlock(token, 0);
37
+ if (block) {
38
+ if (Array.isArray(block)) {
39
+ blocks.push(...block);
40
+ }
41
+ else {
42
+ blocks.push(block);
43
+ }
44
+ }
45
+ }
46
+ return { blocks };
47
+ }
48
+ catch {
49
+ // Fallback: treat entire text as a single paragraph.
50
+ return { blocks: [{ type: 'paragraph', spans: [{ text: cleaned }] }] };
51
+ }
52
+ }
53
+ function tokenToBlock(token, depth) {
54
+ if (depth > types_1.MAX_MARKDOWN_NESTING) {
55
+ // Flatten deep nesting: return text content as paragraph.
56
+ const text = extractTokenText(token);
57
+ return text ? { type: 'paragraph', spans: [{ text }] } : null;
58
+ }
59
+ switch (token.type) {
60
+ case 'heading':
61
+ return parseHeading(token);
62
+ case 'paragraph':
63
+ return { type: 'paragraph', spans: parseInlineTokens(token.tokens ?? [], depth) };
64
+ case 'list':
65
+ return parseList(token, depth);
66
+ case 'blockquote':
67
+ return parseQuote(token, depth);
68
+ case 'code':
69
+ return parseCode(token);
70
+ case 'hr':
71
+ return { type: 'rule' };
72
+ case 'table':
73
+ return parseTable(token);
74
+ case 'html':
75
+ return parseHtml(token);
76
+ case 'space':
77
+ return null;
78
+ default:
79
+ // Unknown token: use raw text as fallback, never silently drop.
80
+ const raw = token.raw;
81
+ return raw ? { type: 'paragraph', spans: [{ text: raw.trim() }] } : null;
82
+ }
83
+ }
84
+ function parseHeading(token) {
85
+ return {
86
+ type: 'heading',
87
+ level: Math.max(1, Math.min(6, token.depth)),
88
+ spans: parseInlineTokens(token.tokens ?? [], 0),
89
+ };
90
+ }
91
+ function parseList(token, depth) {
92
+ const items = (token.items ?? []).map(item => {
93
+ const subBlocks = [];
94
+ for (const subToken of item.tokens ?? []) {
95
+ const block = tokenToBlock(subToken, depth + 1);
96
+ if (block) {
97
+ if (Array.isArray(block))
98
+ subBlocks.push(...block);
99
+ else
100
+ subBlocks.push(block);
101
+ }
102
+ }
103
+ return subBlocks;
104
+ });
105
+ return { type: 'list', ordered: token.ordered, items };
106
+ }
107
+ function parseQuote(token, depth) {
108
+ const blocks = [];
109
+ for (const subToken of token.tokens ?? []) {
110
+ const block = tokenToBlock(subToken, depth + 1);
111
+ if (block) {
112
+ if (Array.isArray(block))
113
+ blocks.push(...block);
114
+ else
115
+ blocks.push(block);
116
+ }
117
+ }
118
+ return { type: 'quote', blocks };
119
+ }
120
+ function parseCode(token) {
121
+ const language = token.lang?.trim() || undefined;
122
+ const content = (0, sanitizer_1.sanitizeCodeContent)(token.text);
123
+ // Detect diff/patch language for specialized rendering.
124
+ if (language === 'diff' || language === 'patch') {
125
+ return { type: 'diff', lines: parseDiffLines(content) };
126
+ }
127
+ const lines = content.split('\n');
128
+ return { type: 'code', language, lines };
129
+ }
130
+ function parseDiffLines(content) {
131
+ const lines = content.split('\n');
132
+ return lines.map(line => {
133
+ if (line.startsWith('@@')) {
134
+ return { kind: 'hunk', content: line };
135
+ }
136
+ if (line.startsWith('+++') || line.startsWith('---')) {
137
+ return { kind: 'meta', content: line };
138
+ }
139
+ if (line.startsWith('+')) {
140
+ return { kind: 'add', content: line.slice(1) };
141
+ }
142
+ if (line.startsWith('-')) {
143
+ return { kind: 'remove', content: line.slice(1) };
144
+ }
145
+ return { kind: 'context', content: line.startsWith(' ') ? line.slice(1) : line };
146
+ });
147
+ }
148
+ function parseTable(token) {
149
+ const headers = (token.header ?? []).map(cell => parseInlineTokens(cell.tokens ?? [], 0)).slice(0, types_1.MAX_TABLE_COLUMNS);
150
+ const rows = (token.rows ?? [])
151
+ .slice(0, types_1.MAX_TABLE_ROWS)
152
+ .map(row => row.slice(0, types_1.MAX_TABLE_COLUMNS).map(cell => parseInlineTokens(cell.tokens ?? [], 0)));
153
+ return { type: 'table', headers, rows };
154
+ }
155
+ function parseHtml(token) {
156
+ // Never interpret HTML tags - display as safe plain text.
157
+ return { type: 'paragraph', spans: [{ text: token.text }] };
158
+ }
159
+ function parseInlineTokens(tokens, depth) {
160
+ if (depth > types_1.MAX_MARKDOWN_NESTING)
161
+ return [];
162
+ const spans = [];
163
+ for (const token of tokens) {
164
+ const span = inlineTokenToSpan(token, depth);
165
+ if (span)
166
+ spans.push(span);
167
+ }
168
+ return spans.length > 0 ? spans : [];
169
+ }
170
+ function inlineTokenToSpan(token, _depth) {
171
+ switch (token.type) {
172
+ case 'text':
173
+ return { text: extractTokenText(token) };
174
+ case 'strong':
175
+ return { text: extractTokenText(token), bold: true };
176
+ case 'em':
177
+ return { text: extractTokenText(token), italic: true };
178
+ case 'codespan':
179
+ return { text: token.text, code: true };
180
+ case 'link':
181
+ return {
182
+ text: extractTokenText(token),
183
+ linkUrl: token.href,
184
+ };
185
+ case 'br':
186
+ return { text: '\n' };
187
+ case 'del':
188
+ return { text: extractTokenText(token) };
189
+ case 'image':
190
+ return {
191
+ text: token.text || token.href,
192
+ linkUrl: token.href,
193
+ };
194
+ default:
195
+ // Unknown inline: use raw text.
196
+ const raw = token.raw;
197
+ return raw ? { text: raw } : null;
198
+ }
199
+ }
200
+ function extractTokenText(token) {
201
+ const t = token;
202
+ if (typeof t.text === 'string')
203
+ return t.text;
204
+ if (typeof t.raw === 'string')
205
+ return t.raw;
206
+ if (Array.isArray(t.tokens)) {
207
+ return t.tokens.map(extractTokenText).join('');
208
+ }
209
+ return '';
210
+ }
211
+ //# sourceMappingURL=markdown-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../src/runtime/rich-text/markdown-parser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAoBH,sCA+BC;AAjDD,mCAAyD;AACzD,mCAUiB;AACjB,2CAAyE;AAEzE;;;GAGG;AACH,SAAgB,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,iCAAyB;QAC1D,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,iCAAyB,CAAC;QAC7C,CAAC,CAAC,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,IAAA,iCAAqB,EAAC,SAAS,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,MAAM,GAAoB,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,IAAI,4BAAoB;gBAAE,MAAM;YACjD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,qDAAqD;QACrD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,KAAa;IAC/C,IAAI,KAAK,GAAG,4BAAoB,EAAE,CAAC;QACjC,0DAA0D;QAC1D,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,KAAuB,CAAC,CAAC;QAC/C,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QACpF,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,KAAoB,EAAE,KAAK,CAAC,CAAC;QAChD,KAAK,YAAY;YACf,OAAO,UAAU,CAAC,KAA0B,EAAE,KAAK,CAAC,CAAC;QACvD,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,KAAoB,CAAC,CAAC;QACzC,KAAK,IAAI;YACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,KAAqB,CAAC,CAAC;QAC3C,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,KAAoB,CAAC,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;QACd;YACE,gEAAgE;YAChE,MAAM,GAAG,GAAI,KAA0B,CAAC,GAAG,CAAC;YAC5C,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAqB;IACzC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB,EAAE,KAAa;IAClD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC3C,MAAM,SAAS,GAAoB,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;oBAC9C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,UAAU,CAAC,KAAwB,EAAE,KAAa;IACzD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;gBAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACjD,MAAM,OAAO,GAAG,IAAA,+BAAmB,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhD,wDAAwD;IACxD,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACtB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,KAAmB;IACrC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAiB,CAAC,CAAC;IACtH,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SAC5B,KAAK,CAAC,CAAC,EAAE,sBAAc,CAAC;SACxB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,yBAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,KAAkB;IACnC,0DAA0D;IAC1D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe,EAAE,KAAa;IACvD,IAAI,KAAK,GAAG,4BAAoB;QAAE,OAAO,EAAE,CAAC;IAE5C,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAY,EAAE,MAAc;IACrD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvD,KAAK,IAAI;YACP,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzD,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAG,KAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/D,KAAK,MAAM;YACT,OAAO;gBACL,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC;gBAC7B,OAAO,EAAG,KAAqB,CAAC,IAAI;aACrC,CAAC;QACJ,KAAK,IAAI;YACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,KAAK,OAAO;YACV,OAAO;gBACL,IAAI,EAAG,KAAsB,CAAC,IAAI,IAAK,KAAsB,CAAC,IAAI;gBAClE,OAAO,EAAG,KAAsB,CAAC,IAAI;aACtC,CAAC;QACJ;YACE,gCAAgC;YAChC,MAAM,GAAG,GAAI,KAA0B,CAAC,GAAG,CAAC;YAC5C,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAY;IACpC,MAAM,CAAC,GAAG,KAAkE,CAAC;IAC7E,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC9C,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Rich text sanitizer.
3
+ *
4
+ * Delegates to the shared terminal sanitizer for control-character stripping,
5
+ * then applies additional rich-text-specific normalization for Markdown
6
+ * parsing safety.
7
+ */
8
+ /**
9
+ * Sanitize raw model text before Markdown parsing.
10
+ * Normalizes line endings first, then strips ANSI/escape sequences.
11
+ */
12
+ export declare function sanitizeRichTextInput(text: string): string;
13
+ /**
14
+ * Sanitize a code block's content for display.
15
+ * Preserves whitespace and indentation, strips escape sequences.
16
+ */
17
+ export declare function sanitizeCodeContent(code: string): string;
18
+ //# sourceMappingURL=sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../../src/runtime/rich-text/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * Rich text sanitizer.
4
+ *
5
+ * Delegates to the shared terminal sanitizer for control-character stripping,
6
+ * then applies additional rich-text-specific normalization for Markdown
7
+ * parsing safety.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.sanitizeRichTextInput = sanitizeRichTextInput;
11
+ exports.sanitizeCodeContent = sanitizeCodeContent;
12
+ const style_1 = require("../../tui-core/style");
13
+ /**
14
+ * Sanitize raw model text before Markdown parsing.
15
+ * Normalizes line endings first, then strips ANSI/escape sequences.
16
+ */
17
+ function sanitizeRichTextInput(text) {
18
+ // Normalize line endings BEFORE stripping control chars (so \r is preserved).
19
+ const normalized = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
20
+ // Strip escape sequences and control chars (except \n, \t).
21
+ return (0, style_1.sanitizeTerminalText)(normalized, 4);
22
+ }
23
+ /**
24
+ * Sanitize a code block's content for display.
25
+ * Preserves whitespace and indentation, strips escape sequences.
26
+ */
27
+ function sanitizeCodeContent(code) {
28
+ // Code blocks keep their content mostly intact but strip ANSI escape sequences.
29
+ const normalized = code.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
30
+ return (0, style_1.sanitizeTerminalText)(normalized, 4);
31
+ }
32
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/runtime/rich-text/sanitizer.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAQH,sDAKC;AAMD,kDAIC;AArBD,gDAA4D;AAE5D;;;GAGG;AACH,SAAgB,qBAAqB,CAAC,IAAY;IAChD,8EAA8E;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,4DAA4D;IAC5D,OAAO,IAAA,4BAAoB,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,gFAAgF;IAChF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpE,OAAO,IAAA,4BAAoB,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Rich text block model: renderer-independent structured Markdown output.
3
+ *
4
+ * Parsed from model text via marked.lexer(), normalized into a fixed
5
+ * block/span union. Layout consumes this model to produce StyledRow[]
6
+ * without depending on React or JSX.
7
+ */
8
+ import type { TuiStyle } from '../../tui-core/style';
9
+ export interface RichTextSpan {
10
+ text: string;
11
+ bold?: boolean;
12
+ italic?: boolean;
13
+ code?: boolean;
14
+ linkUrl?: string;
15
+ }
16
+ export interface DiffLine {
17
+ kind: 'add' | 'remove' | 'context' | 'hunk' | 'meta';
18
+ content: string;
19
+ }
20
+ export type RichTextBlock = {
21
+ type: 'paragraph';
22
+ spans: RichTextSpan[];
23
+ } | {
24
+ type: 'heading';
25
+ level: number;
26
+ spans: RichTextSpan[];
27
+ } | {
28
+ type: 'list';
29
+ ordered: boolean;
30
+ items: RichTextBlock[][];
31
+ } | {
32
+ type: 'quote';
33
+ blocks: RichTextBlock[];
34
+ } | {
35
+ type: 'code';
36
+ language?: string;
37
+ lines: string[];
38
+ } | {
39
+ type: 'diff';
40
+ lines: DiffLine[];
41
+ } | {
42
+ type: 'table';
43
+ headers: RichTextSpan[][];
44
+ rows: RichTextSpan[][][];
45
+ } | {
46
+ type: 'rule';
47
+ };
48
+ export interface RichTextDocument {
49
+ blocks: RichTextBlock[];
50
+ }
51
+ export declare const MAX_RICH_TEXT_INPUT_BYTES = 1000000;
52
+ export declare const MAX_RICH_TEXT_BLOCKS = 2000;
53
+ export declare const MAX_MARKDOWN_NESTING = 4;
54
+ export declare const MAX_TABLE_COLUMNS = 20;
55
+ export declare const MAX_TABLE_ROWS = 200;
56
+ export type RichTextStyleToken = 'assistantText' | 'heading' | 'code' | 'diffAdded' | 'diffRemoved' | 'diffHunk' | 'warning' | 'error' | 'muted';
57
+ /** Resolve a semantic token to a TuiStyle via theme. */
58
+ export type RichTextThemeResolver = (token: RichTextStyleToken) => TuiStyle;
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/rich-text/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,EAAE,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,EAAE,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,aAAa,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;IAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAGD,eAAO,MAAM,yBAAyB,UAAY,CAAC;AACnD,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAC1C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,cAAc,MAAM,CAAC;AAGlC,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,SAAS,GACT,MAAM,GACN,WAAW,GACX,aAAa,GACb,UAAU,GACV,SAAS,GACT,OAAO,GACP,OAAO,CAAC;AAEZ,wDAAwD;AACxD,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,QAAQ,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Rich text block model: renderer-independent structured Markdown output.
4
+ *
5
+ * Parsed from model text via marked.lexer(), normalized into a fixed
6
+ * block/span union. Layout consumes this model to produce StyledRow[]
7
+ * without depending on React or JSX.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MAX_TABLE_ROWS = exports.MAX_TABLE_COLUMNS = exports.MAX_MARKDOWN_NESTING = exports.MAX_RICH_TEXT_BLOCKS = exports.MAX_RICH_TEXT_INPUT_BYTES = void 0;
11
+ // Resource limits (deterministic degradation, never OOM)
12
+ exports.MAX_RICH_TEXT_INPUT_BYTES = 1000000;
13
+ exports.MAX_RICH_TEXT_BLOCKS = 2000;
14
+ exports.MAX_MARKDOWN_NESTING = 4;
15
+ exports.MAX_TABLE_COLUMNS = 20;
16
+ exports.MAX_TABLE_ROWS = 200;
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/runtime/rich-text/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AA+BH,yDAAyD;AAC5C,QAAA,yBAAyB,GAAG,OAAS,CAAC;AACtC,QAAA,oBAAoB,GAAG,IAAK,CAAC;AAC7B,QAAA,oBAAoB,GAAG,CAAC,CAAC;AACzB,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,cAAc,GAAG,GAAG,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Subagent budget ledger: reserve before launch, reconcile after completion.
3
+ *
4
+ * The root turn owns an aggregate budget (model requests, tool calls,
5
+ * model-visible bytes, wall-clock time). Children draw against it. To avoid
6
+ * over-spending, the Supervisor reserves a per-task allowance up front and
7
+ * releases the difference once the real usage is known.
8
+ *
9
+ * This ledger is the single source of truth for child aggregate usage; the
10
+ * root loop reads it to fold child cost into `/cost` and loop stats.
11
+ */
12
+ import type { SubtaskUsage } from './types';
13
+ export interface SubagentBudgetLimits {
14
+ /** Total model requests allowed across all children in one root turn. */
15
+ maxModelRequestsPerTurn: number;
16
+ /** Per-child model request allowance. */
17
+ maxModelRequestsPerTask: number;
18
+ /** Per-child tool call allowance. */
19
+ maxToolCallsPerTask: number;
20
+ /** Per-child wall-clock timeout (ms). */
21
+ timeoutMs: number;
22
+ }
23
+ export interface ReservedBudget {
24
+ taskId: string;
25
+ modelRequests: number;
26
+ }
27
+ export interface BudgetSnapshot {
28
+ /** Requests reserved but not yet reconciled. */
29
+ reservedModelRequests: number;
30
+ /** Reconciled (actual observed) usage so far - never clamped to hide overage. */
31
+ used: SubtaskUsage;
32
+ /** Requests still available for new reservations. */
33
+ availableModelRequests: number;
34
+ /** Whether the aggregate limit has been exceeded by actual usage. */
35
+ exhausted: boolean;
36
+ /** Per-task overage events: observed usage exceeded an enforced allowance. */
37
+ violations: BudgetViolation[];
38
+ }
39
+ export interface BudgetViolation {
40
+ taskId: string;
41
+ /** The enforced limit that was exceeded. */
42
+ limit: 'maxModelRequestsPerTask' | 'maxToolCallsPerTask' | 'timeoutMs' | 'maxModelRequestsPerTurn';
43
+ /** The observed value. */
44
+ observed: number;
45
+ /** The enforced ceiling. */
46
+ enforced: number;
47
+ }
48
+ /**
49
+ * R6: turn-level mutable state shared across all `subtask` calls within one
50
+ * root turn. Lives on the SubagentTurnBundle so multiple `subtask` tool calls
51
+ * in the same turn see a consistent counter - the per-batch reset that
52
+ * previously let a turn exceed `maxTasksPerTurn` is gone.
53
+ */
54
+ export declare class TurnTaskState {
55
+ private started;
56
+ /** Increment by `n` and return the new total. Called atomically by the
57
+ * supervisor after policy allows a batch. */
58
+ addStarted(n: number): number;
59
+ /** Total tasks started in this root turn (across all `subtask` calls). */
60
+ tasksStarted(): number;
61
+ reset(): void;
62
+ }
63
+ /**
64
+ * Aggregate budget ledger for one root turn. Not thread-safe by itself;
65
+ * the Supervisor serializes mutations.
66
+ *
67
+ * R6: observed usage is recorded faithfully (never clamped to hide overage).
68
+ * The enforced allowance and observed usage are modeled separately, so `/cost`
69
+ * and telemetry reflect the truth while the runtime still stops children that
70
+ * exceed their allowance.
71
+ */
72
+ export declare class SubagentBudgetLedger {
73
+ private readonly limits;
74
+ private reserved;
75
+ private reconciled;
76
+ private violations;
77
+ constructor(limits: SubagentBudgetLimits);
78
+ /** Reserve model-request slots for a task. Returns false if unavailable. */
79
+ reserve(taskId: string, requestedRequests: number): ReservedBudget | null;
80
+ /** Release a reservation without consuming (e.g. task rejected after reserve). */
81
+ release(taskId: string): void;
82
+ /**
83
+ * Reconcile actual usage for a task. Releases its reservation and debits
84
+ * the REAL usage (never clamped). Records a violation if observed usage
85
+ * exceeded an enforced per-task or aggregate ceiling. Returns true if the
86
+ * aggregate turn limit is still respected.
87
+ *
88
+ * R6: observed usage is stored as-is so `/cost` and telemetry are truthful.
89
+ */
90
+ reconcile(taskId: string, actual: SubtaskUsage): boolean;
91
+ availableModelRequests(): number;
92
+ /**
93
+ * Whether `count` new tasks can each reserve at least one model request.
94
+ * NOTE: this checks the minimum (1 request per task), not the full
95
+ * per-task cap. The supervisor's reserve loop (supervisor.ts:158-179)
96
+ * handles per-task reserve amounts individually.
97
+ */
98
+ canReserveBatch(count: number): boolean;
99
+ snapshot(): BudgetSnapshot;
100
+ /** Reconciled aggregate usage across all completed children. */
101
+ aggregateUsage(): SubtaskUsage;
102
+ /** Number of tasks that have been reconciled (completed/failed/cancelled). */
103
+ reconciledTaskCount(): number;
104
+ /** Recorded overage violations (observed exceeded enforced ceiling). */
105
+ violationsList(): BudgetViolation[];
106
+ /** True if no reservations are outstanding and no usage has been recorded. */
107
+ isClean(): boolean;
108
+ private aggregateReservedOrUsed;
109
+ private aggregateUsedModelRequests;
110
+ }
111
+ /** Build limits from a SubagentConfig. */
112
+ export declare function budgetLimitsFromConfig(config: {
113
+ maxModelRequestsPerTurn: number;
114
+ maxModelRequestsPerTask: number;
115
+ maxToolCallsPerTask: number;
116
+ timeoutMs: number;
117
+ }): SubagentBudgetLimits;
118
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../../src/runtime/subagents/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,uBAAuB,EAAE,MAAM,CAAC;IAChC,yCAAyC;IACzC,uBAAuB,EAAE,MAAM,CAAC;IAChC,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,gDAAgD;IAChD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,IAAI,EAAE,YAAY,CAAC;IACnB,qDAAqD;IACrD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,KAAK,EAAE,yBAAyB,GAAG,qBAAqB,GAAG,WAAW,GAAG,yBAAyB,CAAC;IACnG,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAK;IAEpB;iDAC6C;IAC7C,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAK7B,0EAA0E;IAC1E,YAAY,IAAI,MAAM;IAItB,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;GAQG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAAyB;gBAE/B,MAAM,EAAE,oBAAoB;IAIxC,4EAA4E;IAC5E,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAQzE,kFAAkF;IAClF,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO;IAkCxD,sBAAsB,IAAI,MAAM;IAIhC;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIvC,QAAQ,IAAI,cAAc;IAe1B,gEAAgE;IAChE,cAAc,IAAI,YAAY;IAI9B,8EAA8E;IAC9E,mBAAmB,IAAI,MAAM;IAI7B,wEAAwE;IACxE,cAAc,IAAI,eAAe,EAAE;IAInC,8EAA8E;IAC9E,OAAO,IAAI,OAAO;IAIlB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,0BAA0B;CAGnC;AAED,0CAA0C;AAC1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,oBAAoB,CAOvB"}