whale-code 6.5.5 → 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 (847) 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 +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  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 +976 -688
  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.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. 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":[]}