whale-code 6.5.4 → 6.5.6

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 (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","names":["Marked","markedTerminal","chalk","colors","highlightCode","setRebuildCallback","diffWords","buildPalette","systemBlue","hex","brand","systemCyan","info","systemPink","pink","systemPurple","purple","systemIndigo","indigo","systemGreen","success","systemMint","mint","systemRed","error","systemOrange","warning","text","secondary","tertiary","separator","lavender","roseGold","p","termWidth","process","stdout","columns","contentWidth","toolContentWidth","supportsOsc8","tp","env","TERM_PROGRAM","test","VTE_VERSION","WT_SESSION","KONSOLE_VERSION","hyperlink","url","startsWith","email","slice","display","underline","shortenPathForHeader","fullPath","maxLen","fp","cwd","home","HOME","length","parts","split","file","pop","parent","colorizeFinancials","str","replace","m","buildMarkedInstance","md","use","firstHeading","bold","heading","codespan","strong","em","italic","blockquote","paragraph","body","hr","repeat","link","href","_title","undefined","list","ordered","n","String","listitem","itemText","reflowText","showSectionPrefix","width","Math","min","tab","renderer","code","token","rawLang","lang","colonIdx","indexOf","subtitle","renderBarChart","renderDiff","isCommandOutput","highlightLang","cw","headerWidth","max","displayLang","header","shortSub","pad","lineCount","gutterW","gutterOverhead","maxLineWidth","truncatedCode","map","line","join","highlighted","hLines","l","numbered","i","num","padStart","table","renderTable","buildDiffStyles","diffAddedBg","bgHex","white","diffRemovedBg","diffWordAdded","whiteBright","diffWordRemoved","d","wordDiff","oldLine","newLine","changes","oldSegs","newSegs","change","added","push","value","changed","removed","oldChanged","filter","s","reduce","newChanged","old","new","renderSegments","segs","wordStyle","lineStyle","lines","tw","segments","oldLineNo","newLineNo","seenDiff","hunkMatch","match","parseInt","type","content","lineNo","maxLineNo","out","seg","removes","adds","pairCount","j","r","rPrefix","a","aPrefix","wd","rPad","aPad","raw","prefix","buildBarGradient","teal","barGradient","trim","title","dataLines","entries","label","abs","parseFloat","isNaN","maxVal","e","maxRaw","idealLabelW","fixedOverhead","spaceForLabelAndBar","maxLabelW","floor","barWidth","compact","displayTitle","colorVal","includes","color","labelStr","ratio","filled","round","bar","val","getRowTone","cells","cell","t","isNumericColumn","rows","colIndex","numericCount","total","row","blendHex","b","parse","h","c","ar","ag","ab","br","bg","bb","g","bv","toString","colorizeCell","isHeader","trimmed","badgeMatch","icon","endsWith","getCellText","tokens","headers","N","MIN_COL","minBoxWidth","renderTableCards","overhead","availableForContent","minCol","maxPerCol","numericCols","_","colWidths","dataMax","totalWidth","w","excess","maxIdx","borderColor","border","headerBg","panel","evenRowBg","oddRowBg","positiveBg","negativeBg","hdrCells","padded","padEnd","rowIdx","tone","rowBg","colored","extraPad","innerW","divider","maxHdrLen","hdr","maxValLen","displayVal","valStr","rebuildMarkdownRenderer","getNonFencedText","input","inFence","trimStart","getNonCodeText","closeIncompleteFences","result","outside","forBacktick","unmatched","forBold","boldCount","forItalic","italicCount","renderMarkdown","streaming","safe"],"sources":["../../../src/cli/shared/markdown.ts"],"sourcesContent":["/**\n * Markdown rendering — polished terminal output with shiki syntax highlighting\n *\n * Uses shiki for VS Code-quality syntax highlighting.\n * All chalk instances are rebuilt on theme switch via rebuildMarkdownRenderer().\n * Uses marked + marked-terminal for markdown structure.\n */\n\nimport { Marked } from \"marked\";\nimport { markedTerminal } from \"marked-terminal\";\nimport chalk from \"chalk\";\nimport { colors } from \"./Theme.js\";\nimport { highlightCode, setRebuildCallback } from \"./theme-manager.js\";\nimport { diffWords } from \"diff\";\n\n// Note: chalk.level is auto-detected by supports-color.\n// Apple_Terminal → level 2 (256-color), iTerm.app v3+ → level 3 (24-bit).\n// Do NOT force level 3 — Terminal.app can't render 24-bit codes (shows gray).\n\n// ============================================================================\n// Palette factory — rebuilt on theme switch\n// ============================================================================\n\nfunction buildPalette() {\n return {\n systemBlue: chalk.hex(colors.brand),\n systemCyan: chalk.hex(colors.info),\n systemPink: chalk.hex(colors.pink),\n systemPurple: chalk.hex(colors.purple),\n systemIndigo: chalk.hex(colors.indigo),\n systemGreen: chalk.hex(colors.success),\n systemMint: chalk.hex(colors.mint),\n systemRed: chalk.hex(colors.error),\n systemOrange: chalk.hex(colors.warning),\n text: chalk.hex(colors.text),\n secondary: chalk.hex(colors.secondary),\n tertiary: chalk.hex(colors.tertiary),\n separator: chalk.hex(colors.separator),\n lavender: chalk.hex(colors.lavender),\n roseGold: chalk.hex(colors.roseGold),\n };\n}\n\nlet p = buildPalette();\n\n// ============================================================================\n// Terminal width helpers — single source of truth for layout widths\n// ============================================================================\n\n/** Raw terminal width — use for elements at the outermost level (separators). */\nexport function termWidth(): number {\n return process.stdout.columns || 80;\n}\n\n/** Width for assistant message text (outer padding=2 + message marginLeft=2 = 4). */\nexport function contentWidth(): number {\n return termWidth() - 4;\n}\n\n/** Width for content nested inside tool results (MessageList=2 + ToolIndicator=2 + safety=2) */\nexport function toolContentWidth(): number {\n return termWidth() - 6;\n}\n\n// ============================================================================\n// OSC 8 hyperlinks — only in terminals that support them\n// ============================================================================\n\n/** Detect if terminal supports OSC 8 clickable hyperlinks */\nconst supportsOsc8 = (() => {\n const tp = process.env.TERM_PROGRAM || \"\";\n if (/iterm|wezterm|kitty|hyper|warp|foot|alacritty/i.test(tp)) return true;\n if (process.env.VTE_VERSION) return true; // GNOME Terminal, Tilix\n if (process.env.WT_SESSION) return true; // Windows Terminal\n if (process.env.KONSOLE_VERSION) return true; // Konsole\n // Apple Terminal.app does NOT support OSC 8\n return false;\n})();\n\nfunction hyperlink(url: string, text?: string): string {\n // mailto: → clean email address, no protocol prefix, no OSC 8\n if (url.startsWith(\"mailto:\")) {\n const email = text || url.slice(7);\n return p.systemCyan(email);\n }\n\n // tel: → clean phone number\n if (url.startsWith(\"tel:\")) {\n return p.systemCyan(text || url.slice(4));\n }\n\n const display = text || url;\n\n // OSC 8 clickable links — only where terminal supports them\n if (supportsOsc8) {\n return `\\x1B]8;;${url}\\x07${p.systemCyan.underline(display)}\\x1B]8;;\\x07`;\n }\n\n // Fallback: colored underlined text (no escape sequences)\n return p.systemCyan.underline(display);\n}\n\n// ============================================================================\n// Path helpers\n// ============================================================================\n\n/** Shorten a file path for code block headers */\nfunction shortenPathForHeader(fullPath: string, maxLen = 40): string {\n let fp = fullPath;\n const cwd = process.cwd();\n const home = process.env.HOME || \"\";\n if (fp.startsWith(cwd + \"/\")) fp = fp.slice(cwd.length + 1);\n else if (fp.startsWith(cwd)) fp = fp.slice(cwd.length);\n else if (home && fp.startsWith(home)) fp = \"~\" + fp.slice(home.length);\n if (fp.length <= maxLen) return fp;\n const parts = fp.split(\"/\");\n const file = parts.pop()!;\n if (file.length >= maxLen - 4) return \"…/\" + file.slice(-(maxLen - 4));\n const parent = parts.pop();\n return parent ? \"…/\" + parent + \"/\" + file : \"…/\" + file;\n}\n\n// ============================================================================\n// Financial coloring\n// ============================================================================\n\nfunction colorizeFinancials(str: string): string {\n return str\n // NOTE: URL hyperlinking is handled by marked's GFM autolink + link/href handlers.\n // Do NOT add URL patterns here — it causes links to render 3-5x.\n // Negative dollar amounts → red (-$1,234.56) — require digit after $\n .replace(/(-\\$\\d[\\d,]*\\.?\\d*)/g, (m) => p.systemRed(m))\n // Positive dollar amounts → green ($1,234.56) — require digit after $\n .replace(/((?:^|[^-])\\$\\d[\\d,]*\\.?\\d*)/g, (m) => p.systemGreen(m))\n // Negative percentages → red\n .replace(/(-\\d+\\.?\\d*%)/g, (m) => p.systemRed(m))\n // Positive percentages → cyan\n .replace(/((?:^|[^-])\\d+\\.?\\d*%)/g, (m) => p.systemCyan(m))\n // Explicit positive → green\n .replace(/(\\+\\$?[\\d,]+\\.?\\d*)/g, (m) => p.systemGreen(m))\n // Financial-specific words → green (no generic words like running/ready/started)\n .replace(/\\b(profit|revenue|gain|in stock|available)\\b/gi, (m) => p.systemGreen(m))\n // Financial/status negatives → red\n .replace(/\\b(loss|deduction|deficit|expense|out of stock|low stock|overdue|expired|cancelled|failed|error|crashed|EADDRINUSE|ENOENT)\\b/gi, (m) => p.systemRed(m));\n}\n\n// ============================================================================\n// Markdown renderer factory — rebuilt on theme switch\n// ============================================================================\n\nfunction buildMarkedInstance(): Marked {\n const md = new Marked();\n\n md.use(\n markedTerminal({\n // Headings — bold blue\n firstHeading: p.systemBlue.bold,\n heading: p.systemBlue.bold,\n\n // Inline\n codespan: p.systemPink,\n strong: p.text.bold,\n em: p.lavender.italic,\n\n // Blocks\n blockquote: p.secondary.italic,\n paragraph: (body: string) => colorizeFinancials(body),\n hr: () => p.separator(\"─\".repeat(50)),\n\n // Links — OSC 8 clickable (single source of truth for URL rendering)\n // NOTE: Only use `link` handler, NOT `href` — having both causes double-hyperlinking\n link: (href: string, _title: string, text: string) => hyperlink(href, text !== href ? text : undefined),\n\n // Lists — purple bullets, financial-aware\n list: (body: string, ordered: boolean) => {\n if (ordered) {\n let n = 0;\n return body.replace(/^\\* /gm, () => {\n n++;\n return `${p.systemIndigo(String(n) + \".\")} `;\n });\n }\n return body.replace(/^\\* /gm, `${p.systemPurple(\"●\")} `);\n },\n listitem: (itemText: string) => {\n return colorizeFinancials(itemText);\n },\n\n // Layout — adapt to terminal width\n reflowText: false,\n showSectionPrefix: false,\n width: Math.min(120, contentWidth()),\n tab: 2,\n })\n );\n\n // Register chart + table + code block extensions\n md.use({\n renderer: {\n code(this: unknown, token: { lang?: string; text: string }) {\n const rawLang = token.lang || \"\";\n const code = token.text;\n\n // Parse lang:subtitle (e.g. \"typescript:src/foo.ts\")\n const colonIdx = rawLang.indexOf(\":\");\n const lang = colonIdx > 0 ? rawLang.slice(0, colonIdx) : rawLang;\n const subtitle = colonIdx > 0 ? rawLang.slice(colonIdx + 1) : \"\";\n\n if (lang === \"chart\" || lang === \"bar\") {\n return renderBarChart(code);\n }\n if (lang === \"diff\") {\n return renderDiff(code);\n }\n {\n // Command output mode: bash without subtitle = run_command output\n // → no line numbers, wider content area, clean indent\n const isCommandOutput = (lang === \"bash\" || lang === \"terminal\") && !subtitle;\n const highlightLang = lang === \"terminal\" ? \"bash\" : lang;\n\n // Build header: ── lang ── subtitle ──────\n const cw = contentWidth();\n const headerWidth = Math.max(20, cw - 6);\n const displayLang = isCommandOutput ? \"bash\" : lang;\n let header: string;\n if (displayLang && subtitle) {\n const shortSub = shortenPathForHeader(subtitle, headerWidth - displayLang.length - 10);\n const pad = Math.max(2, headerWidth - displayLang.length - shortSub.length - 6);\n header = p.separator(\" ── \") + p.tertiary(displayLang) + p.separator(\" ── \") + p.secondary(shortSub) + p.separator(` ${\"─\".repeat(pad)}`);\n } else if (displayLang) {\n const pad = Math.max(2, headerWidth - displayLang.length - 3);\n header = p.separator(\" ── \") + p.tertiary(displayLang) + p.separator(` ${\"─\".repeat(pad)}`);\n } else {\n header = p.separator(\" ──\" + \"─\".repeat(headerWidth - 2));\n }\n\n // Calculate max line width to prevent wrapping\n const lineCount = code.split(\"\\n\").length;\n const gutterW = isCommandOutput ? 0 : String(lineCount).length;\n const gutterOverhead = isCommandOutput ? 4 : (2 + gutterW + 3); // \" \" or \" 123 │ \"\n const maxLineWidth = Math.max(20, cw - gutterOverhead - 2);\n\n // Pre-truncate lines BEFORE highlighting (avoids cutting ANSI codes)\n const truncatedCode = code.split(\"\\n\").map((line: string) => {\n if (line.length > maxLineWidth) {\n return line.slice(0, maxLineWidth - 1) + \"…\";\n }\n return line;\n }).join(\"\\n\");\n\n // Highlight with shiki\n const highlighted = highlightLang\n ? highlightCode(truncatedCode, highlightLang)\n : truncatedCode;\n\n const hLines = highlighted.split(\"\\n\");\n\n if (isCommandOutput) {\n // Command output: no line numbers, 4-space indent\n const body = hLines.map(l => \" \" + l).join(\"\\n\");\n return \"\\n\" + header + \"\\n\" + body + \"\\n\";\n } else {\n // Code with line numbers + gutter\n const numbered = hLines.map((l, i) => {\n const num = p.tertiary(String(i + 1).padStart(gutterW));\n return \" \" + num + p.separator(\" │ \") + l;\n }).join(\"\\n\");\n return \"\\n\" + header + \"\\n\" + numbered + \"\\n\";\n }\n }\n },\n table(this: unknown, token: unknown) {\n return renderTable(token);\n },\n },\n });\n\n return md;\n}\n\nlet md = buildMarkedInstance();\n\n// ============================================================================\n// Diff renderer — background colors + word-level diff (Claude Code parity)\n// ============================================================================\n\nfunction buildDiffStyles() {\n return {\n diffAddedBg: chalk.bgHex(colors.diffAddedBg).white,\n diffRemovedBg: chalk.bgHex(colors.diffRemovedBg).white,\n diffWordAdded: chalk.bgHex(colors.diffWordAdded).whiteBright.bold,\n diffWordRemoved: chalk.bgHex(colors.diffWordRemoved).whiteBright.bold,\n };\n}\n\nlet d = buildDiffStyles();\n\n/** Compute word-level diff between two lines using the `diff` library. */\nfunction wordDiff(oldLine: string, newLine: string): { old: {text: string; changed: boolean}[]; new: {text: string; changed: boolean}[] } {\n const changes = diffWords(oldLine, newLine);\n const oldSegs: {text: string; changed: boolean}[] = [];\n const newSegs: {text: string; changed: boolean}[] = [];\n\n for (const change of changes) {\n if (change.added) {\n newSegs.push({ text: change.value, changed: true });\n } else if (change.removed) {\n oldSegs.push({ text: change.value, changed: true });\n } else {\n oldSegs.push({ text: change.value, changed: false });\n newSegs.push({ text: change.value, changed: false });\n }\n }\n\n // If >60% of either line changed, fall back to full-line highlight\n const oldChanged = oldSegs.filter(s => s.changed).reduce((n, s) => n + s.text.length, 0);\n const newChanged = newSegs.filter(s => s.changed).reduce((n, s) => n + s.text.length, 0);\n if ((oldLine.length > 0 && oldChanged / oldLine.length > 0.6) ||\n (newLine.length > 0 && newChanged / newLine.length > 0.6)) {\n return { old: [{text: oldLine, changed: true}], new: [{text: newLine, changed: true}] };\n }\n\n return { old: oldSegs, new: newSegs };\n}\n\n/** Render segments with word-level highlighting */\nfunction renderSegments(segs: {text: string; changed: boolean}[], wordStyle: (s: string) => string, lineStyle: (s: string) => string): string {\n return segs.map(s => s.changed ? wordStyle(s.text) : lineStyle(s.text)).join(\"\");\n}\n\nfunction renderDiff(code: string): string {\n const lines = code.split(\"\\n\");\n const tw = toolContentWidth();\n\n // Parse into segments from unified diff format\n type Seg = { type: \"remove\" | \"add\" | \"context\"; content: string; lineNo: number };\n const segments: Seg[] = [];\n let oldLineNo = 1, newLineNo = 1;\n let seenDiff = false;\n\n for (const line of lines) {\n // Skip file headers (--- a/file, +++ b/file)\n if (line.startsWith(\"---\") || line.startsWith(\"+++\")) continue;\n\n // Hunk header — extract line numbers\n const hunkMatch = line.match(/^@@\\s*-(\\d+)(?:,\\d+)?\\s*\\+(\\d+)(?:,\\d+)?\\s*@@/);\n if (hunkMatch) {\n oldLineNo = parseInt(hunkMatch[1]);\n newLineNo = parseInt(hunkMatch[2]);\n seenDiff = true;\n continue;\n }\n\n // Skip non-diff header lines (e.g., \"File edited:\", \"Applied N edits\")\n if (!seenDiff && !line.startsWith(\"-\") && !line.startsWith(\"+\") && !line.startsWith(\" \")) {\n continue;\n }\n seenDiff = true;\n\n if (line.startsWith(\"-\")) {\n segments.push({ type: \"remove\", content: line.slice(1), lineNo: oldLineNo });\n oldLineNo++;\n } else if (line.startsWith(\"+\")) {\n segments.push({ type: \"add\", content: line.slice(1), lineNo: newLineNo });\n newLineNo++;\n } else {\n const content = line.startsWith(\" \") ? line.slice(1) : line;\n segments.push({ type: \"context\", content, lineNo: newLineNo });\n oldLineNo++;\n newLineNo++;\n }\n }\n\n if (segments.length === 0) return code; // fallback\n\n // Gutter width from max line number\n const maxLineNo = segments.reduce((max, s) => Math.max(max, s.lineNo), 0);\n const gutterW = Math.max(3, String(maxLineNo).length);\n\n const out: string[] = [];\n let i = 0;\n\n while (i < segments.length) {\n const seg = segments[i];\n\n if (seg.type === \"remove\") {\n // Collect consecutive removes\n const removes: Seg[] = [];\n while (i < segments.length && segments[i].type === \"remove\") {\n removes.push(segments[i]);\n i++;\n }\n // Collect consecutive adds\n const adds: Seg[] = [];\n while (i < segments.length && segments[i].type === \"add\") {\n adds.push(segments[i]);\n i++;\n }\n\n // Pair for word-level diff\n const pairCount = Math.min(removes.length, adds.length);\n\n for (let j = 0; j < removes.length; j++) {\n const r = removes[j];\n const rPrefix = `${String(r.lineNo).padStart(gutterW)} - `;\n\n if (j < pairCount) {\n const a = adds[j];\n const aPrefix = `${String(a.lineNo).padStart(gutterW)} + `;\n const wd = wordDiff(r.content, a.content);\n\n // Removed line with word highlights\n const rPad = Math.max(0, tw - rPrefix.length - r.content.length);\n out.push(d.diffRemovedBg(rPrefix) + renderSegments(wd.old, d.diffWordRemoved, d.diffRemovedBg) + d.diffRemovedBg(\" \".repeat(rPad)));\n\n // Added line with word highlights\n const aPad = Math.max(0, tw - aPrefix.length - a.content.length);\n out.push(d.diffAddedBg(aPrefix) + renderSegments(wd.new, d.diffWordAdded, d.diffAddedBg) + d.diffAddedBg(\" \".repeat(aPad)));\n } else {\n // Unpaired remove\n const raw = rPrefix + r.content;\n const pad = Math.max(0, tw - raw.length);\n out.push(d.diffRemovedBg(raw + \" \".repeat(pad)));\n }\n }\n\n // Unpaired adds\n for (let j = pairCount; j < adds.length; j++) {\n const a = adds[j];\n const prefix = `${String(a.lineNo).padStart(gutterW)} + `;\n const raw = prefix + a.content;\n const pad = Math.max(0, tw - raw.length);\n out.push(d.diffAddedBg(raw + \" \".repeat(pad)));\n }\n continue;\n }\n\n if (seg.type === \"add\") {\n // Standalone add (no preceding remove)\n const prefix = `${String(seg.lineNo).padStart(gutterW)} + `;\n const raw = prefix + seg.content;\n const pad = Math.max(0, tw - raw.length);\n out.push(d.diffAddedBg(raw + \" \".repeat(pad)));\n i++;\n continue;\n }\n\n // Context line — dim line number, plain content, no background\n const prefix = p.tertiary(`${String(seg.lineNo).padStart(gutterW)} `);\n out.push(prefix + seg.content);\n i++;\n }\n\n return out.join(\"\\n\") + \"\\n\";\n}\n\n// ============================================================================\n// Bar chart renderer — ```chart code blocks\n// ============================================================================\n\nfunction buildBarGradient() {\n return [\n chalk.hex(colors.purple),\n chalk.hex(colors.indigo),\n chalk.hex(colors.brand),\n chalk.hex(colors.info),\n chalk.hex(colors.teal),\n chalk.hex(colors.success),\n chalk.hex(colors.warning),\n chalk.hex(colors.pink),\n ];\n}\n\nlet barGradient = buildBarGradient();\n\ninterface ChartEntry {\n label: string;\n value: number;\n raw: string;\n}\n\nfunction renderBarChart(code: string): string {\n const lines = code.trim().split(\"\\n\").filter(l => l.trim());\n\n // Optional title — first line without \"label: number\" pattern\n let title = \"\";\n let dataLines = lines;\n if (lines.length > 1 && !/:\\s*[$\\-+]?[\\d,]+/.test(lines[0])) {\n title = lines[0].trim();\n dataLines = lines.slice(1);\n }\n\n // Parse \"Label: $1,234.56\" or \"Label: 42%\" or \"Label: 1000\"\n const entries: ChartEntry[] = [];\n for (const line of dataLines) {\n const m = line.match(/^(.+?):\\s*([+\\-]?\\$?[\\d,]+\\.?\\d*%?)\\s*$/);\n if (!m) continue;\n const label = m[1].trim();\n const raw = m[2].trim();\n const value = Math.abs(parseFloat(raw.replace(/[$,%]/g, \"\")));\n if (!isNaN(value)) entries.push({ label, value, raw });\n }\n\n if (entries.length === 0) return code;\n\n const maxVal = Math.max(...entries.map(e => e.value));\n const maxRaw = Math.max(...entries.map(e => e.raw.length));\n const cw = contentWidth();\n\n // Responsive label width — truncate labels to fit\n const idealLabelW = Math.max(...entries.map(e => e.label.length));\n // Fixed overhead: indent(2) + gap(2) + gap(2) + value(maxRaw) + safety(2)\n const fixedOverhead = 2 + 2 + 2 + maxRaw + 2;\n const spaceForLabelAndBar = cw - fixedOverhead;\n\n // Allocate: label gets up to half, bar gets the rest (min 4)\n const maxLabelW = Math.min(idealLabelW, Math.max(6, Math.floor(spaceForLabelAndBar * 0.4)));\n const barWidth = Math.max(4, spaceForLabelAndBar - maxLabelW);\n\n // If even 4-char bars don't fit, fall back to compact list (no bars)\n const compact = spaceForLabelAndBar < 12;\n\n const out: string[] = [];\n\n if (title) {\n const displayTitle = title.length > cw - 4 ? title.slice(0, cw - 5) + \"…\" : title;\n out.push(` ${p.systemBlue.bold(displayTitle)}`);\n out.push(\"\");\n }\n\n function colorVal(raw: string): string {\n return raw.includes(\"$\") ? p.systemGreen(raw)\n : raw.includes(\"%\") ? p.systemCyan(raw)\n : p.systemMint(raw);\n }\n\n if (compact) {\n // Compact mode: just \"label value\" with color dot\n for (let i = 0; i < entries.length; i++) {\n const e = entries[i];\n const color = barGradient[i % barGradient.length];\n const labelStr = e.label.length > cw - maxRaw - 8\n ? e.label.slice(0, cw - maxRaw - 9) + \"…\"\n : e.label;\n out.push(` ${color(\"●\")} ${p.secondary(labelStr)} ${colorVal(e.raw)}`);\n }\n } else {\n for (let i = 0; i < entries.length; i++) {\n const e = entries[i];\n const ratio = maxVal > 0 ? e.value / maxVal : 0;\n const filled = Math.round(ratio * barWidth);\n const color = barGradient[i % barGradient.length];\n\n const labelStr = e.label.length > maxLabelW\n ? e.label.slice(0, maxLabelW - 1) + \"…\"\n : e.label;\n const label = p.secondary(labelStr.padStart(maxLabelW));\n const bar = color(\"█\".repeat(filled)) + chalk.hex(\"#2C2C2E\")(\"░\".repeat(barWidth - filled));\n const val = colorVal(e.raw.padStart(maxRaw));\n\n out.push(` ${label} ${bar} ${val}`);\n }\n }\n\n return \"\\n\" + out.join(\"\\n\") + \"\\n\";\n}\n\n// ============================================================================\n// Table renderer — polished TUI tables with theme-aware styling\n// ============================================================================\n\n// Row tone detection for background tinting\ntype RowTone = \"positive\" | \"negative\" | \"neutral\";\n\nfunction getRowTone(cells: string[]): RowTone {\n for (const cell of cells) {\n const t = cell.trim();\n if (/^-\\$[\\d,]+/.test(t) || /^-\\d+\\.?\\d*%/.test(t)) return \"negative\";\n if (/^\\+\\d/.test(t) || /^\\+\\$/.test(t)) return \"positive\";\n if (/^`?[✕✗]/.test(t) || /cancelled|failed|rejected|error|out of stock|low stock/i.test(t)) return \"negative\";\n if (/^`?[✓●]/.test(t) || /completed|received|approved|active|success|paid|published/i.test(t)) return \"positive\";\n }\n return \"neutral\";\n}\n\n/** Detect if a column is numeric (for right-alignment) */\nfunction isNumericColumn(rows: string[][], colIndex: number): boolean {\n let numericCount = 0;\n let total = 0;\n for (const row of rows) {\n const val = (row[colIndex] || \"\").trim();\n if (!val) continue;\n total++;\n if (/^[+\\-]?\\$?[\\d,]+\\.?\\d*%?$/.test(val)) numericCount++;\n }\n return total > 0 && numericCount / total > 0.5;\n}\n\n/** Blend two hex colors by ratio (0 = colorA, 1 = colorB) */\nfunction blendHex(a: string, b: string, ratio: number): string {\n const parse = (h: string) => {\n const c = h.replace(\"#\", \"\");\n return [parseInt(c.slice(0, 2), 16), parseInt(c.slice(2, 4), 16), parseInt(c.slice(4, 6), 16)];\n };\n const [ar, ag, ab] = parse(a);\n const [br, bg, bb] = parse(b);\n const r = Math.round(ar + (br - ar) * ratio);\n const g = Math.round(ag + (bg - ag) * ratio);\n const bv = Math.round(ab + (bb - ab) * ratio);\n return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${bv.toString(16).padStart(2, \"0\")}`;\n}\n\nfunction colorizeCell(val: string, isHeader: boolean): string {\n const trimmed = val.trim();\n if (!trimmed) return p.text(\"\");\n if (isHeader) return p.systemBlue.bold(trimmed);\n\n // Badge format: `✓ status` or `◆ status` or `○ status` or `✕ status`\n const badgeMatch = trimmed.match(/^`([✓●◆○✕◦])\\s+(.+)`$/);\n if (badgeMatch) {\n const [, icon, label] = badgeMatch;\n if (icon === \"✓\" || icon === \"●\") return p.systemGreen(`${icon} ${label}`);\n if (icon === \"◆\") return p.systemCyan(`${icon} ${label}`);\n if (icon === \"○\") return p.systemOrange(`${icon} ${label}`);\n if (icon === \"✕\") return p.systemRed(`${icon} ${label}`);\n return p.secondary(`${icon} ${label}`);\n }\n\n // Inline code (UUID, SKU, transfer number)\n if (trimmed.startsWith(\"`\") && trimmed.endsWith(\"`\")) {\n return p.systemPurple(trimmed.slice(1, -1));\n }\n\n // Bold text\n if (trimmed.startsWith(\"**\") && trimmed.endsWith(\"**\")) {\n return p.text.bold(trimmed.slice(2, -2));\n }\n\n // Negative values → red\n if (/^-\\$?[\\d,]+\\.?\\d*$/.test(trimmed) || /^-\\d+\\.?\\d*%$/.test(trimmed)) {\n return p.systemRed(trimmed);\n }\n // Positive financial → green\n if (/^\\+?\\$[\\d,]+\\.?\\d*$/.test(trimmed) || /^\\$[\\d,]+\\.?\\d*$/.test(trimmed)) {\n return p.systemGreen(trimmed);\n }\n // Percentages → cyan\n if (/^\\d+\\.?\\d*%$/.test(trimmed)) {\n return p.systemCyan(trimmed);\n }\n // Plain numbers → mint\n if (/^[\\d,]+\\.?\\d*$/.test(trimmed)) {\n return p.systemMint(trimmed);\n }\n // Status words\n if (/^(active|success|complete|approved|in stock|available)/i.test(trimmed)) {\n return p.systemGreen(trimmed);\n }\n if (/^(inactive|error|failed|cancelled|out of stock|low|overdue|expired)/i.test(trimmed)) {\n return p.systemRed(trimmed);\n }\n if (/^(pending|draft|processing)/i.test(trimmed)) {\n return p.systemOrange(trimmed);\n }\n\n return p.text(trimmed);\n}\n\nfunction renderTable(token: any): string {\n function getCellText(cell: any): string {\n if (!cell) return \"\";\n if (typeof cell === \"string\") return cell;\n if (cell.text !== undefined) return String(cell.text);\n if (cell.tokens) {\n return cell.tokens.map((t: any) => t.raw || t.text || \"\").join(\"\");\n }\n return String(cell);\n }\n\n const headers: string[] = (token.header || []).map((h: any) => getCellText(h));\n const rows: string[][] = (token.rows || []).map((row: any) =>\n row.map((cell: any) => getCellText(cell))\n );\n\n if (headers.length === 0) return \"\";\n\n const cw = contentWidth();\n const N = headers.length;\n\n // ── Check if box table can fit ──\n // Minimum box table width: indent(2) + borders(N+1) + N * (minCol + 2 padding)\n const MIN_COL = 3;\n const minBoxWidth = 2 + (N + 1) + N * (MIN_COL + 2);\n\n if (minBoxWidth > cw) {\n // ── Card layout — graceful fallback for narrow terminals ──\n return renderTableCards(headers, rows, cw);\n }\n\n // ── Box table layout ──\n const overhead = 2 + 1 + (N - 1) + 1 + (N * 2);\n const availableForContent = cw - overhead;\n const minCol = cw < 70 ? MIN_COL : cw < 90 ? 5 : 6;\n const maxPerCol = Math.max(minCol, Math.floor(availableForContent / N));\n\n // Detect numeric columns for right-alignment\n const numericCols = headers.map((_, i) => isNumericColumn(rows, i));\n\n // Size columns: fit content up to maxPerCol, respect minCol\n const colWidths = headers.map((h: string, i: number) => {\n const dataMax = rows.reduce((max: number, row: string[]) =>\n Math.max(max, (row[i] || \"\").length), 0);\n return Math.min(maxPerCol, Math.max(minCol, h.length, dataMax) + 2);\n });\n\n // Double-check total width won't overflow (defensive)\n const totalWidth = 2 + 1 + colWidths.reduce((s, w) => s + w + 2, 0) + (N - 1) + 1;\n if (totalWidth > cw) {\n // Shrink largest columns until we fit\n let excess = totalWidth - cw;\n while (excess > 0) {\n const maxIdx = colWidths.indexOf(Math.max(...colWidths));\n if (colWidths[maxIdx] <= MIN_COL) break; // can't shrink further\n colWidths[maxIdx]--;\n excess--;\n }\n }\n\n // ── Colors ──\n const borderColor = blendHex(colors.separator, colors.brand, 0.25);\n const border = chalk.hex(borderColor);\n const headerBg = chalk.bgHex(blendHex(colors.panel, colors.brand, 0.15));\n const evenRowBg = chalk.bgHex(blendHex(colors.panel, colors.text, 0.04));\n const oddRowBg = chalk.bgHex(colors.panel);\n const positiveBg = chalk.bgHex(blendHex(colors.panel, colors.success, 0.12));\n const negativeBg = chalk.bgHex(blendHex(colors.panel, colors.error, 0.12));\n\n const out: string[] = [];\n\n // Top border\n out.push(border(\" ╭\" + colWidths.map((w: number) => \"─\".repeat(w + 2)).join(\"┬\") + \"╮\"));\n\n // Header row\n const hdrCells = headers.map((h: string, i: number) => {\n const display = h.length > colWidths[i] ? h.slice(0, colWidths[i] - 1) + \"…\" : h;\n const padded = numericCols[i] ? display.padStart(colWidths[i]) : display.padEnd(colWidths[i]);\n return headerBg(\" \" + chalk.hex(colors.brand).bold(padded) + \" \");\n }).join(border(\"│\"));\n out.push(border(\" │\") + hdrCells + border(\"│\"));\n\n // Header divider\n out.push(border(\" ├\" + colWidths.map((w: number) => \"━\".repeat(w + 2)).join(\"┿\") + \"┤\"));\n\n // Data rows\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n const row = rows[rowIdx];\n const tone = getRowTone(row);\n const rowBg = tone === \"positive\" ? positiveBg\n : tone === \"negative\" ? negativeBg\n : rowIdx % 2 === 0 ? evenRowBg : oddRowBg;\n\n const cells = headers.map((_: string, i: number) => {\n const raw = row[i] || \"\";\n const display = raw.length > colWidths[i] ? raw.slice(0, colWidths[i] - 1) + \"…\" : raw;\n const colored = colorizeCell(display, false);\n const extraPad = Math.max(0, colWidths[i] - display.length);\n if (numericCols[i]) {\n return rowBg(\" \".repeat(extraPad) + \" \" + colored + \" \");\n }\n return rowBg(\" \" + colored + \" \".repeat(extraPad) + \" \");\n }).join(border(\"│\"));\n out.push(border(\" │\") + cells + border(\"│\"));\n }\n\n // Bottom border\n out.push(border(\" ╰\" + colWidths.map((w: number) => \"─\".repeat(w + 2)).join(\"┴\") + \"╯\"));\n\n return \"\\n\" + out.join(\"\\n\") + \"\\n\";\n}\n\n/** Card layout fallback — renders each row as a key: value block. Never overflows. */\nfunction renderTableCards(headers: string[], rows: string[][], cw: number): string {\n const border = chalk.hex(blendHex(colors.separator, colors.brand, 0.25));\n const out: string[] = [];\n const innerW = Math.max(8, cw - 6); // indent(2) + border(2) + padding(2)\n const divider = border(\" \" + \"─\".repeat(innerW + 2));\n\n // Find longest header for label alignment\n const maxHdrLen = Math.min(\n Math.max(...headers.map(h => h.length)),\n Math.floor(innerW * 0.4),\n );\n\n out.push(divider);\n\n for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n const row = rows[rowIdx];\n if (rowIdx > 0) out.push(divider);\n\n for (let i = 0; i < headers.length; i++) {\n const hdr = headers[i].length > maxHdrLen\n ? headers[i].slice(0, maxHdrLen - 1) + \"…\"\n : headers[i];\n const val = row[i] || \"\";\n const maxValLen = innerW - maxHdrLen - 3; // \" label value\"\n const displayVal = val.length > maxValLen\n ? val.slice(0, maxValLen - 1) + \"…\"\n : val;\n\n const labelStr = p.tertiary(hdr.padEnd(maxHdrLen));\n const valStr = colorizeCell(displayVal, false);\n out.push(` ${labelStr} ${valStr}`);\n }\n }\n\n out.push(divider);\n return \"\\n\" + out.join(\"\\n\") + \"\\n\";\n}\n\n// ============================================================================\n// Rebuild — called on theme switch to refresh all chalk instances\n// ============================================================================\n\nexport function rebuildMarkdownRenderer(): void {\n p = buildPalette();\n d = buildDiffStyles();\n barGradient = buildBarGradient();\n md = buildMarkedInstance();\n}\n\n// Register rebuild callback with theme manager\nsetRebuildCallback(rebuildMarkdownRenderer);\n\n// ============================================================================\n// Streaming fence closure — state-tracking approach\n// ============================================================================\n\n/** Extract text outside fenced code blocks */\nfunction getNonFencedText(input: string): string {\n const lines = input.split(\"\\n\");\n const parts: string[] = [];\n let inFence = false;\n for (const line of lines) {\n if (line.trimStart().startsWith(\"```\")) {\n inFence = !inFence;\n continue;\n }\n if (!inFence) parts.push(line);\n }\n return parts.join(\"\\n\");\n}\n\n/** Strip complete inline code spans from text */\nfunction getNonCodeText(t: string): string {\n return t.replace(/``[^`]*``/g, \"\").replace(/`[^`\\n]*`/g, \"\");\n}\n\n/**\n * Close incomplete markdown fences for safe streaming rendering.\n * State-tracking approach: handles nested fences, escaped markers, double-backtick spans.\n */\nexport function closeIncompleteFences(input: string): string {\n let result = input;\n\n // 1. Code fences — walk lines, track open/close state\n let inFence = false;\n for (const line of result.split(\"\\n\")) {\n const trimmed = line.trimStart();\n if (trimmed.startsWith(\"```\")) {\n inFence = !inFence;\n }\n }\n if (inFence) {\n result += \"\\n```\";\n }\n\n // 2. For inline markers, only examine text OUTSIDE fenced code blocks\n const outside = getNonFencedText(result);\n\n // 3. Inline backticks — remove escaped, remove complete spans, count remainder\n let forBacktick = outside.replace(/\\\\`/g, \"\");\n forBacktick = forBacktick.replace(/``[^`]*``/g, \"\"); // double-backtick spans\n forBacktick = forBacktick.replace(/`[^`\\n]*`/g, \"\"); // single-backtick spans\n const unmatched = (forBacktick.match(/`/g) || []).length;\n if (unmatched % 2 !== 0) {\n result += \"`\";\n }\n\n // 4. Bold — count ** in non-code text\n const forBold = getNonCodeText(outside);\n const boldCount = (forBold.match(/\\*\\*/g) || []).length;\n if (boldCount % 2 !== 0) {\n result += \"**\";\n }\n\n // 5. Italic — count standalone * (not part of **) with escape awareness\n const forItalic = forBold.replace(/\\*\\*/g, \"\");\n const italicCount = (forItalic.match(/(?<!\\\\)\\*/g) || []).length;\n if (italicCount % 2 !== 0) {\n result += \"*\";\n }\n\n return result;\n}\n\n/**\n * Render markdown to ANSI-styled terminal string.\n * Optionally applies streaming-safe fence closing.\n */\nexport function renderMarkdown(input: string, streaming = false): string {\n const safe = streaming ? closeIncompleteFences(input) : input;\n const result = md.parse(safe) as string;\n return result.replace(/\\n+$/, \"\");\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=marked-terminal.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marked-terminal.d.js","names":[],"sources":["../../../src/cli/shared/marked-terminal.d.ts"],"sourcesContent":["declare module \"marked-terminal\" {\n import type { MarkedExtension } from \"marked\";\n\n interface TerminalRendererOptions {\n code?: (code: string) => string;\n blockquote?: (quote: string) => string;\n html?: (html: string) => string;\n heading?: (text: string, level: number) => string;\n firstHeading?: (text: string, level: number) => string;\n hr?: () => string;\n list?: (body: string, ordered: boolean) => string;\n listitem?: (text: string) => string;\n paragraph?: (text: string) => string;\n table?: (header: string, body: string) => string;\n tablerow?: (content: string) => string;\n tablecell?: (content: string, flags: object) => string;\n strong?: (text: string) => string;\n em?: (text: string) => string;\n codespan?: (code: string) => string;\n del?: (text: string) => string;\n link?: (href: string, title: string, text: string) => string;\n href?: (href: string) => string;\n image?: (href: string, title: string, text: string) => string;\n reflowText?: boolean;\n showSectionPrefix?: boolean;\n width?: number;\n tab?: number;\n unescape?: boolean;\n emoji?: boolean;\n }\n\n export function markedTerminal(\n options?: TerminalRendererOptions,\n highlightOptions?: object\n ): MarkedExtension;\n\n export default class Renderer {\n constructor(options?: TerminalRendererOptions, highlightOptions?: object);\n }\n}\n"],"mappings":"","ignoreList":[]}
@@ -4,15 +4,18 @@
4
4
  * Synchronous shiki highlighter using the JavaScript regex engine.
5
5
  * Manages active theme state and persists preference to config store.
6
6
  */
7
+
7
8
  import chalk from "chalk";
8
9
  import { createHighlighterCoreSync } from "shiki/core";
9
10
  import { createJavaScriptRegexEngine } from "shiki/engine/javascript";
11
+
10
12
  // Bundled themes (tree-shaken imports)
11
13
  import catppuccinMocha from "shiki/themes/catppuccin-mocha.mjs";
12
14
  import tokyoNight from "shiki/themes/tokyo-night.mjs";
13
15
  import dracula from "shiki/themes/dracula.mjs";
14
16
  import nord from "shiki/themes/nord.mjs";
15
17
  import oneDarkPro from "shiki/themes/one-dark-pro.mjs";
18
+
16
19
  // Bundled languages (tree-shaken imports)
17
20
  import langTypescript from "shiki/langs/typescript.mjs";
18
21
  import langJavascript from "shiki/langs/javascript.mjs";
@@ -35,144 +38,150 @@ import langDiff from "shiki/langs/diff.mjs";
35
38
  import { colors } from "./Theme.js";
36
39
  import { THEME_PRESETS, DEFAULT_THEME_ID, getPresetById } from "./theme-presets.js";
37
40
  import { loadPreferences, savePreferences } from "../services/config-store.js";
41
+
38
42
  // ============================================================================
39
43
  // Shiki highlighter — created synchronously at module load
40
44
  // ============================================================================
45
+
41
46
  const allThemes = [catppuccinMocha, tokyoNight, dracula, nord, oneDarkPro];
42
- const allLangs = [
43
- langTypescript, langJavascript, langTsx, langJsx,
44
- langPython, langJson, langBash, langCss, langHtml, langXml,
45
- langRust, langGo, langSql, langYaml, langToml,
46
- langMarkdown, langSwift, langDiff,
47
- ];
47
+ const allLangs = [langTypescript, langJavascript, langTsx, langJsx, langPython, langJson, langBash, langCss, langHtml, langXml, langRust, langGo, langSql, langYaml, langToml, langMarkdown, langSwift, langDiff];
48
48
  const highlighter = createHighlighterCoreSync({
49
- themes: [...allThemes],
50
- langs: [...allLangs],
51
- engine: createJavaScriptRegexEngine(),
49
+ themes: [...allThemes],
50
+ langs: [...allLangs],
51
+ engine: createJavaScriptRegexEngine()
52
52
  });
53
+
53
54
  // Set of known language IDs for fast lookup
54
55
  const KNOWN_LANGS = new Set(highlighter.getLoadedLanguages());
56
+
55
57
  // Map common aliases to shiki language IDs
56
58
  const LANG_ALIASES = {
57
- ts: "typescript",
58
- js: "javascript",
59
- py: "python",
60
- rb: "ruby",
61
- sh: "bash",
62
- shell: "bash",
63
- zsh: "bash",
64
- yml: "yaml",
65
- md: "markdown",
66
- rs: "rust",
67
- htm: "html",
68
- jsonc: "json",
69
- terminal: "bash",
59
+ ts: "typescript",
60
+ js: "javascript",
61
+ py: "python",
62
+ rb: "ruby",
63
+ sh: "bash",
64
+ shell: "bash",
65
+ zsh: "bash",
66
+ yml: "yaml",
67
+ md: "markdown",
68
+ rs: "rust",
69
+ htm: "html",
70
+ jsonc: "json",
71
+ terminal: "bash"
70
72
  };
73
+
71
74
  // ============================================================================
72
75
  // State
73
76
  // ============================================================================
77
+
74
78
  let currentThemeId = DEFAULT_THEME_ID;
79
+
75
80
  // ============================================================================
76
81
  // Syntax highlighting
77
82
  // ============================================================================
83
+
78
84
  /**
79
85
  * Highlight code synchronously using shiki.
80
86
  * Returns ANSI-colored string. Falls back to plain text for unknown languages.
81
87
  */
82
88
  export function highlightCode(code, lang) {
83
- // Resolve language alias
84
- const resolvedLang = LANG_ALIASES[lang] || lang;
85
- if (!resolvedLang || !KNOWN_LANGS.has(resolvedLang)) {
86
- return code; // plain text fallback
87
- }
88
- const preset = getPresetById(currentThemeId);
89
- const shikiTheme = preset?.shikiTheme || "catppuccin-mocha";
90
- try {
91
- const result = highlighter.codeToTokens(code, {
92
- lang: resolvedLang,
93
- theme: shikiTheme,
94
- });
95
- // Convert tokens to chalk ANSI
96
- const lines = [];
97
- for (const tokenLine of result.tokens) {
98
- const parts = [];
99
- for (const token of tokenLine) {
100
- if (token.color) {
101
- let styled = chalk.hex(token.color)(token.content);
102
- // Apply font styles
103
- if (token.fontStyle) {
104
- if (token.fontStyle & 1)
105
- styled = chalk.italic(chalk.hex(token.color)(token.content));
106
- if (token.fontStyle & 2)
107
- styled = chalk.bold(chalk.hex(token.color)(token.content));
108
- }
109
- parts.push(styled);
110
- }
111
- else {
112
- parts.push(token.content);
113
- }
114
- }
115
- lines.push(parts.join(""));
89
+ // Resolve language alias
90
+ const resolvedLang = LANG_ALIASES[lang] || lang;
91
+ if (!resolvedLang || !KNOWN_LANGS.has(resolvedLang)) {
92
+ return code; // plain text fallback
93
+ }
94
+ const preset = getPresetById(currentThemeId);
95
+ const shikiTheme = preset?.shikiTheme || "catppuccin-mocha";
96
+ try {
97
+ const result = highlighter.codeToTokens(code, {
98
+ lang: resolvedLang,
99
+ theme: shikiTheme
100
+ });
101
+
102
+ // Convert tokens to chalk ANSI
103
+ const lines = [];
104
+ for (const tokenLine of result.tokens) {
105
+ const parts = [];
106
+ for (const token of tokenLine) {
107
+ if (token.color) {
108
+ let styled = chalk.hex(token.color)(token.content);
109
+ // Apply font styles
110
+ if (token.fontStyle) {
111
+ if (token.fontStyle & 1) styled = chalk.italic(chalk.hex(token.color)(token.content));
112
+ if (token.fontStyle & 2) styled = chalk.bold(chalk.hex(token.color)(token.content));
113
+ }
114
+ parts.push(styled);
115
+ } else {
116
+ parts.push(token.content);
116
117
  }
117
- return lines.join("\n");
118
- }
119
- catch {
120
- return code; // fallback on any error
118
+ }
119
+ lines.push(parts.join(""));
121
120
  }
121
+ return lines.join("\n");
122
+ } catch {
123
+ return code; // fallback on any error
124
+ }
122
125
  }
126
+
123
127
  // ============================================================================
124
128
  // Theme switching
125
129
  // ============================================================================
130
+
126
131
  /** Rebuild callback — set by markdown.ts to rebuild chalk instances */
127
132
  let rebuildCallback = null;
128
133
  export function setRebuildCallback(cb) {
129
- rebuildCallback = cb;
134
+ rebuildCallback = cb;
130
135
  }
136
+
131
137
  /**
132
138
  * Switch the active theme. Mutates `colors` in place so all importers see the change.
133
139
  * Returns true if theme was found and applied.
134
140
  */
135
141
  export function switchTheme(presetId) {
136
- const preset = getPresetById(presetId);
137
- if (!preset)
138
- return false;
139
- currentThemeId = preset.id;
140
- // Mutate colors in place — all modules import the same object
141
- Object.assign(colors, preset.chrome);
142
- // Persist preference
143
- try {
144
- const prefs = loadPreferences();
145
- prefs.theme = preset.id;
146
- savePreferences(prefs);
147
- }
148
- catch { /* best effort */ }
149
- // Rebuild markdown renderer chalk instances
150
- if (rebuildCallback)
151
- rebuildCallback();
152
- return true;
142
+ const preset = getPresetById(presetId);
143
+ if (!preset) return false;
144
+ currentThemeId = preset.id;
145
+
146
+ // Mutate colors in place — all modules import the same object
147
+ Object.assign(colors, preset.chrome);
148
+
149
+ // Persist preference
150
+ try {
151
+ const prefs = loadPreferences();
152
+ prefs.theme = preset.id;
153
+ savePreferences(prefs);
154
+ } catch {/* best effort */}
155
+
156
+ // Rebuild markdown renderer chalk instances
157
+ if (rebuildCallback) rebuildCallback();
158
+ return true;
153
159
  }
160
+
154
161
  /** Get the current theme ID */
155
162
  export function getCurrentThemeId() {
156
- return currentThemeId;
163
+ return currentThemeId;
157
164
  }
165
+
158
166
  /** Get all available theme presets */
159
167
  export function getThemePresets() {
160
- return THEME_PRESETS;
168
+ return THEME_PRESETS;
161
169
  }
170
+
162
171
  /**
163
172
  * Initialize theme from saved preference. Call once at startup.
164
173
  */
165
174
  export function initTheme() {
166
- try {
167
- const prefs = loadPreferences();
168
- if (prefs.theme) {
169
- const preset = getPresetById(prefs.theme);
170
- if (preset) {
171
- currentThemeId = preset.id;
172
- Object.assign(colors, preset.chrome);
173
- // Rebuild will be called after markdown module loads
174
- }
175
- }
175
+ try {
176
+ const prefs = loadPreferences();
177
+ if (prefs.theme) {
178
+ const preset = getPresetById(prefs.theme);
179
+ if (preset) {
180
+ currentThemeId = preset.id;
181
+ Object.assign(colors, preset.chrome);
182
+ // Rebuild will be called after markdown module loads
183
+ }
176
184
  }
177
- catch { /* use default */ }
185
+ } catch {/* use default */}
178
186
  }
187
+ //# sourceMappingURL=theme-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-manager.js","names":["chalk","createHighlighterCoreSync","createJavaScriptRegexEngine","catppuccinMocha","tokyoNight","dracula","nord","oneDarkPro","langTypescript","langJavascript","langTsx","langJsx","langPython","langJson","langBash","langCss","langHtml","langXml","langRust","langGo","langSql","langYaml","langToml","langMarkdown","langSwift","langDiff","colors","THEME_PRESETS","DEFAULT_THEME_ID","getPresetById","loadPreferences","savePreferences","allThemes","allLangs","highlighter","themes","langs","engine","KNOWN_LANGS","Set","getLoadedLanguages","LANG_ALIASES","ts","js","py","rb","sh","shell","zsh","yml","md","rs","htm","jsonc","terminal","currentThemeId","highlightCode","code","lang","resolvedLang","has","preset","shikiTheme","result","codeToTokens","theme","lines","tokenLine","tokens","parts","token","color","styled","hex","content","fontStyle","italic","bold","push","join","rebuildCallback","setRebuildCallback","cb","switchTheme","presetId","id","Object","assign","chrome","prefs","getCurrentThemeId","getThemePresets","initTheme"],"sources":["../../../src/cli/shared/theme-manager.ts"],"sourcesContent":["/**\n * Theme Manager — shiki syntax highlighting + theme switching\n *\n * Synchronous shiki highlighter using the JavaScript regex engine.\n * Manages active theme state and persists preference to config store.\n */\n\nimport chalk from \"chalk\";\nimport { createHighlighterCoreSync } from \"shiki/core\";\nimport { createJavaScriptRegexEngine } from \"shiki/engine/javascript\";\n\n// Bundled themes (tree-shaken imports)\nimport catppuccinMocha from \"shiki/themes/catppuccin-mocha.mjs\";\nimport tokyoNight from \"shiki/themes/tokyo-night.mjs\";\nimport dracula from \"shiki/themes/dracula.mjs\";\nimport nord from \"shiki/themes/nord.mjs\";\nimport oneDarkPro from \"shiki/themes/one-dark-pro.mjs\";\n\n// Bundled languages (tree-shaken imports)\nimport langTypescript from \"shiki/langs/typescript.mjs\";\nimport langJavascript from \"shiki/langs/javascript.mjs\";\nimport langTsx from \"shiki/langs/tsx.mjs\";\nimport langJsx from \"shiki/langs/jsx.mjs\";\nimport langPython from \"shiki/langs/python.mjs\";\nimport langJson from \"shiki/langs/json.mjs\";\nimport langBash from \"shiki/langs/bash.mjs\";\nimport langCss from \"shiki/langs/css.mjs\";\nimport langHtml from \"shiki/langs/html.mjs\";\nimport langXml from \"shiki/langs/xml.mjs\";\nimport langRust from \"shiki/langs/rust.mjs\";\nimport langGo from \"shiki/langs/go.mjs\";\nimport langSql from \"shiki/langs/sql.mjs\";\nimport langYaml from \"shiki/langs/yaml.mjs\";\nimport langToml from \"shiki/langs/toml.mjs\";\nimport langMarkdown from \"shiki/langs/markdown.mjs\";\nimport langSwift from \"shiki/langs/swift.mjs\";\nimport langDiff from \"shiki/langs/diff.mjs\";\n\nimport { colors, DEFAULT_COLORS } from \"./Theme.js\";\nimport { THEME_PRESETS, DEFAULT_THEME_ID, getPresetById, type ThemePreset } from \"./theme-presets.js\";\nexport type { ThemePreset } from \"./theme-presets.js\";\nimport { loadPreferences, savePreferences } from \"../services/config-store.js\";\n\n// ============================================================================\n// Shiki highlighter — created synchronously at module load\n// ============================================================================\n\nconst allThemes = [catppuccinMocha, tokyoNight, dracula, nord, oneDarkPro] as const;\nconst allLangs = [\n langTypescript, langJavascript, langTsx, langJsx,\n langPython, langJson, langBash, langCss, langHtml, langXml,\n langRust, langGo, langSql, langYaml, langToml,\n langMarkdown, langSwift, langDiff,\n] as const;\n\nconst highlighter = createHighlighterCoreSync({\n themes: [...allThemes],\n langs: [...allLangs],\n engine: createJavaScriptRegexEngine(),\n});\n\n// Set of known language IDs for fast lookup\nconst KNOWN_LANGS = new Set(highlighter.getLoadedLanguages());\n\n// Map common aliases to shiki language IDs\nconst LANG_ALIASES: Record<string, string> = {\n ts: \"typescript\",\n js: \"javascript\",\n py: \"python\",\n rb: \"ruby\",\n sh: \"bash\",\n shell: \"bash\",\n zsh: \"bash\",\n yml: \"yaml\",\n md: \"markdown\",\n rs: \"rust\",\n htm: \"html\",\n jsonc: \"json\",\n terminal: \"bash\",\n};\n\n// ============================================================================\n// State\n// ============================================================================\n\nlet currentThemeId = DEFAULT_THEME_ID;\n\n// ============================================================================\n// Syntax highlighting\n// ============================================================================\n\n/**\n * Highlight code synchronously using shiki.\n * Returns ANSI-colored string. Falls back to plain text for unknown languages.\n */\nexport function highlightCode(code: string, lang: string): string {\n // Resolve language alias\n const resolvedLang = LANG_ALIASES[lang] || lang;\n\n if (!resolvedLang || !KNOWN_LANGS.has(resolvedLang)) {\n return code; // plain text fallback\n }\n\n const preset = getPresetById(currentThemeId);\n const shikiTheme = preset?.shikiTheme || \"catppuccin-mocha\";\n\n try {\n const result = highlighter.codeToTokens(code, {\n lang: resolvedLang,\n theme: shikiTheme,\n });\n\n // Convert tokens to chalk ANSI\n const lines: string[] = [];\n for (const tokenLine of result.tokens) {\n const parts: string[] = [];\n for (const token of tokenLine) {\n if (token.color) {\n let styled = chalk.hex(token.color)(token.content);\n // Apply font styles\n if (token.fontStyle) {\n if (token.fontStyle & 1) styled = chalk.italic(chalk.hex(token.color)(token.content));\n if (token.fontStyle & 2) styled = chalk.bold(chalk.hex(token.color)(token.content));\n }\n parts.push(styled);\n } else {\n parts.push(token.content);\n }\n }\n lines.push(parts.join(\"\"));\n }\n return lines.join(\"\\n\");\n } catch {\n return code; // fallback on any error\n }\n}\n\n// ============================================================================\n// Theme switching\n// ============================================================================\n\n/** Rebuild callback — set by markdown.ts to rebuild chalk instances */\nlet rebuildCallback: (() => void) | null = null;\n\nexport function setRebuildCallback(cb: () => void): void {\n rebuildCallback = cb;\n}\n\n/**\n * Switch the active theme. Mutates `colors` in place so all importers see the change.\n * Returns true if theme was found and applied.\n */\nexport function switchTheme(presetId: string): boolean {\n const preset = getPresetById(presetId);\n if (!preset) return false;\n\n currentThemeId = preset.id;\n\n // Mutate colors in place — all modules import the same object\n Object.assign(colors, preset.chrome);\n\n // Persist preference\n try {\n const prefs = loadPreferences();\n prefs.theme = preset.id;\n savePreferences(prefs);\n } catch { /* best effort */ }\n\n // Rebuild markdown renderer chalk instances\n if (rebuildCallback) rebuildCallback();\n\n return true;\n}\n\n/** Get the current theme ID */\nexport function getCurrentThemeId(): string {\n return currentThemeId;\n}\n\n/** Get all available theme presets */\nexport function getThemePresets(): ThemePreset[] {\n return THEME_PRESETS;\n}\n\n/**\n * Initialize theme from saved preference. Call once at startup.\n */\nexport function initTheme(): void {\n try {\n const prefs = loadPreferences();\n if (prefs.theme) {\n const preset = getPresetById(prefs.theme);\n if (preset) {\n currentThemeId = preset.id;\n Object.assign(colors, preset.chrome);\n // Rebuild will be called after markdown module loads\n }\n }\n } catch { /* use default */ }\n}\n"],"mappings":"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","ignoreList":[]}