hoomanjs 1.18.0 → 1.18.1

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 (536) hide show
  1. package/README.md +22 -26
  2. package/dist/acp/acp-agent.d.ts +69 -0
  3. package/dist/acp/acp-agent.js +628 -0
  4. package/dist/acp/acp-agent.js.map +1 -0
  5. package/dist/acp/approvals.d.ts +5 -0
  6. package/dist/acp/approvals.js +130 -0
  7. package/dist/acp/approvals.js.map +1 -0
  8. package/dist/acp/index.d.ts +1 -0
  9. package/dist/acp/index.js +2 -0
  10. package/dist/acp/index.js.map +1 -0
  11. package/dist/acp/mcp-servers.d.ts +7 -0
  12. package/dist/acp/mcp-servers.js +57 -0
  13. package/dist/acp/mcp-servers.js.map +1 -0
  14. package/dist/acp/meta/system-prompt.d.ts +12 -0
  15. package/dist/acp/meta/system-prompt.js +41 -0
  16. package/dist/acp/meta/system-prompt.js.map +1 -0
  17. package/dist/acp/meta/user-id.d.ts +12 -0
  18. package/dist/acp/meta/user-id.js +43 -0
  19. package/dist/acp/meta/user-id.js.map +1 -0
  20. package/dist/acp/prompt-invoke.d.ts +10 -0
  21. package/dist/acp/prompt-invoke.js +131 -0
  22. package/dist/acp/prompt-invoke.js.map +1 -0
  23. package/dist/acp/sessions/config-options.d.ts +7 -0
  24. package/dist/acp/sessions/config-options.js +101 -0
  25. package/dist/acp/sessions/config-options.js.map +1 -0
  26. package/dist/acp/sessions/replay.d.ts +7 -0
  27. package/dist/acp/sessions/replay.js +117 -0
  28. package/dist/acp/sessions/replay.js.map +1 -0
  29. package/dist/acp/sessions/store.d.ts +24 -0
  30. package/dist/acp/sessions/store.js +96 -0
  31. package/dist/acp/sessions/store.js.map +1 -0
  32. package/dist/acp/sessions/title.d.ts +5 -0
  33. package/dist/acp/sessions/title.js +22 -0
  34. package/dist/acp/sessions/title.js.map +1 -0
  35. package/dist/acp/utils/paths.d.ts +2 -0
  36. package/{src/acp/utils/paths.ts → dist/acp/utils/paths.js} +2 -2
  37. package/dist/acp/utils/paths.js.map +1 -0
  38. package/dist/acp/utils/tool-kind.d.ts +6 -0
  39. package/dist/acp/utils/tool-kind.js +53 -0
  40. package/dist/acp/utils/tool-kind.js.map +1 -0
  41. package/dist/acp/utils/tool-locations.d.ts +3 -0
  42. package/dist/acp/utils/tool-locations.js +44 -0
  43. package/dist/acp/utils/tool-locations.js.map +1 -0
  44. package/dist/acp/utils/tool-result-content.d.ts +8 -0
  45. package/dist/acp/utils/tool-result-content.js +14 -0
  46. package/dist/acp/utils/tool-result-content.js.map +1 -0
  47. package/dist/chat/app.d.ts +15 -0
  48. package/dist/chat/app.js +458 -0
  49. package/dist/chat/app.js.map +1 -0
  50. package/dist/chat/approvals.d.ts +15 -0
  51. package/dist/chat/approvals.js +74 -0
  52. package/dist/chat/approvals.js.map +1 -0
  53. package/dist/chat/components/ApprovalPrompt.d.ts +6 -0
  54. package/dist/chat/components/ApprovalPrompt.js +11 -0
  55. package/dist/chat/components/ApprovalPrompt.js.map +1 -0
  56. package/dist/chat/components/ChatMessage.d.ts +7 -0
  57. package/dist/chat/components/ChatMessage.js +19 -0
  58. package/dist/chat/components/ChatMessage.js.map +1 -0
  59. package/dist/chat/components/Composer.d.ts +11 -0
  60. package/dist/chat/components/Composer.js +9 -0
  61. package/dist/chat/components/Composer.js.map +1 -0
  62. package/dist/chat/components/EmptyChatBanner.d.ts +2 -0
  63. package/dist/chat/components/EmptyChatBanner.js +8 -0
  64. package/dist/chat/components/EmptyChatBanner.js.map +1 -0
  65. package/dist/chat/components/PromptInput.d.ts +11 -0
  66. package/dist/chat/components/PromptInput.js +26 -0
  67. package/dist/chat/components/PromptInput.js.map +1 -0
  68. package/dist/chat/components/QueuedPrompts.d.ts +10 -0
  69. package/dist/chat/components/QueuedPrompts.js +38 -0
  70. package/dist/chat/components/QueuedPrompts.js.map +1 -0
  71. package/dist/chat/components/ReasoningStrip.d.ts +6 -0
  72. package/dist/chat/components/ReasoningStrip.js +13 -0
  73. package/dist/chat/components/ReasoningStrip.js.map +1 -0
  74. package/dist/chat/components/ScrollView.d.ts +101 -0
  75. package/dist/chat/components/ScrollView.js +74 -0
  76. package/dist/chat/components/ScrollView.js.map +1 -0
  77. package/dist/chat/components/Spinner.d.ts +8 -0
  78. package/dist/chat/components/Spinner.js +19 -0
  79. package/dist/chat/components/Spinner.js.map +1 -0
  80. package/dist/chat/components/StatusBar.d.ts +20 -0
  81. package/dist/chat/components/StatusBar.js +20 -0
  82. package/dist/chat/components/StatusBar.js.map +1 -0
  83. package/dist/chat/components/ThinkingStatus.d.ts +1 -0
  84. package/dist/chat/components/ThinkingStatus.js +119 -0
  85. package/dist/chat/components/ThinkingStatus.js.map +1 -0
  86. package/dist/chat/components/TodoPanel.d.ts +6 -0
  87. package/dist/chat/components/TodoPanel.js +27 -0
  88. package/dist/chat/components/TodoPanel.js.map +1 -0
  89. package/dist/chat/components/ToolEvent.d.ts +6 -0
  90. package/dist/chat/components/ToolEvent.js +18 -0
  91. package/dist/chat/components/ToolEvent.js.map +1 -0
  92. package/dist/chat/components/ToolEventFileResult.d.ts +9 -0
  93. package/dist/chat/components/ToolEventFileResult.js +50 -0
  94. package/dist/chat/components/ToolEventFileResult.js.map +1 -0
  95. package/dist/chat/components/Transcript.d.ts +7 -0
  96. package/dist/chat/components/Transcript.js +9 -0
  97. package/dist/chat/components/Transcript.js.map +1 -0
  98. package/dist/chat/components/TranscriptViewport.d.ts +9 -0
  99. package/dist/chat/components/TranscriptViewport.js +124 -0
  100. package/dist/chat/components/TranscriptViewport.js.map +1 -0
  101. package/dist/chat/components/ascii-logo.d.ts +1 -0
  102. package/{src/chat/components/ascii-logo.ts → dist/chat/components/ascii-logo.js} +3 -2
  103. package/dist/chat/components/ascii-logo.js.map +1 -0
  104. package/dist/chat/components/file-tool-diff/file-tool-result.d.ts +26 -0
  105. package/dist/chat/components/file-tool-diff/file-tool-result.js +73 -0
  106. package/dist/chat/components/file-tool-diff/file-tool-result.js.map +1 -0
  107. package/dist/chat/components/markdown/BlockRenderer.d.ts +8 -0
  108. package/dist/chat/components/markdown/BlockRenderer.js +87 -0
  109. package/dist/chat/components/markdown/BlockRenderer.js.map +1 -0
  110. package/dist/chat/components/markdown/CodeBlock.d.ts +7 -0
  111. package/dist/chat/components/markdown/CodeBlock.js +55 -0
  112. package/dist/chat/components/markdown/CodeBlock.js.map +1 -0
  113. package/dist/chat/components/markdown/InlineRenderer.d.ts +8 -0
  114. package/dist/chat/components/markdown/InlineRenderer.js +96 -0
  115. package/dist/chat/components/markdown/InlineRenderer.js.map +1 -0
  116. package/dist/chat/components/markdown/MarkdownMessage.d.ts +6 -0
  117. package/dist/chat/components/markdown/MarkdownMessage.js +13 -0
  118. package/dist/chat/components/markdown/MarkdownMessage.js.map +1 -0
  119. package/dist/chat/components/markdown/MarkdownTable.d.ts +6 -0
  120. package/dist/chat/components/markdown/MarkdownTable.js +12 -0
  121. package/dist/chat/components/markdown/MarkdownTable.js.map +1 -0
  122. package/dist/chat/components/markdown/hooks/useMarkdownTableLayout.d.ts +7 -0
  123. package/dist/chat/components/markdown/hooks/useMarkdownTableLayout.js +186 -0
  124. package/dist/chat/components/markdown/hooks/useMarkdownTableLayout.js.map +1 -0
  125. package/dist/chat/components/markdown/hooks/useMarkdownTokens.d.ts +9 -0
  126. package/dist/chat/components/markdown/hooks/useMarkdownTokens.js +25 -0
  127. package/dist/chat/components/markdown/hooks/useMarkdownTokens.js.map +1 -0
  128. package/dist/chat/components/markdown/lexer.d.ts +7 -0
  129. package/dist/chat/components/markdown/lexer.js +89 -0
  130. package/dist/chat/components/markdown/lexer.js.map +1 -0
  131. package/dist/chat/components/prompt-input/clipboard-image.d.ts +1 -0
  132. package/dist/chat/components/prompt-input/clipboard-image.js +112 -0
  133. package/dist/chat/components/prompt-input/clipboard-image.js.map +1 -0
  134. package/dist/chat/components/prompt-input/hooks/usePromptInputController.d.ts +1 -0
  135. package/dist/chat/components/prompt-input/hooks/usePromptInputController.js +2 -0
  136. package/dist/chat/components/prompt-input/hooks/usePromptInputController.js.map +1 -0
  137. package/dist/chat/components/prompt-input/input-model.d.ts +28 -0
  138. package/dist/chat/components/prompt-input/input-model.js +231 -0
  139. package/dist/chat/components/prompt-input/input-model.js.map +1 -0
  140. package/dist/chat/components/prompt-input/paste.d.ts +11 -0
  141. package/dist/chat/components/prompt-input/paste.js +85 -0
  142. package/dist/chat/components/prompt-input/paste.js.map +1 -0
  143. package/dist/chat/components/prompt-input/render.d.ts +13 -0
  144. package/dist/chat/components/prompt-input/render.js +54 -0
  145. package/dist/chat/components/prompt-input/render.js.map +1 -0
  146. package/dist/chat/components/prompt-input/usePromptInputController.d.ts +17 -0
  147. package/dist/chat/components/prompt-input/usePromptInputController.js +366 -0
  148. package/dist/chat/components/prompt-input/usePromptInputController.js.map +1 -0
  149. package/dist/chat/components/shared.d.ts +6 -0
  150. package/dist/chat/components/shared.js +66 -0
  151. package/dist/chat/components/shared.js.map +1 -0
  152. package/dist/chat/index.d.ts +13 -0
  153. package/dist/chat/index.js +18 -0
  154. package/dist/chat/index.js.map +1 -0
  155. package/dist/chat/mouse.d.ts +5 -0
  156. package/dist/chat/mouse.js +9 -0
  157. package/dist/chat/mouse.js.map +1 -0
  158. package/dist/chat/types.d.ts +20 -0
  159. package/dist/chat/types.js +2 -0
  160. package/dist/chat/types.js.map +1 -0
  161. package/dist/cli.d.ts +2 -0
  162. package/dist/cli.js +126 -0
  163. package/dist/cli.js.map +1 -0
  164. package/dist/configure/app.d.ts +3 -0
  165. package/dist/configure/app.js +1036 -0
  166. package/dist/configure/app.js.map +1 -0
  167. package/dist/configure/components/BusyScreen.d.ts +6 -0
  168. package/dist/configure/components/BusyScreen.js +7 -0
  169. package/dist/configure/components/BusyScreen.js.map +1 -0
  170. package/dist/configure/components/HomeScreen.d.ts +12 -0
  171. package/dist/configure/components/HomeScreen.js +7 -0
  172. package/dist/configure/components/HomeScreen.js.map +1 -0
  173. package/dist/configure/components/MenuScreen.d.ts +10 -0
  174. package/dist/configure/components/MenuScreen.js +15 -0
  175. package/dist/configure/components/MenuScreen.js.map +1 -0
  176. package/dist/configure/components/PromptForm.d.ts +8 -0
  177. package/dist/configure/components/PromptForm.js +12 -0
  178. package/dist/configure/components/PromptForm.js.map +1 -0
  179. package/dist/configure/components/SelectMenuItem.d.ts +7 -0
  180. package/dist/configure/components/SelectMenuItem.js +18 -0
  181. package/dist/configure/components/SelectMenuItem.js.map +1 -0
  182. package/dist/configure/index.d.ts +1 -0
  183. package/dist/configure/index.js +28 -0
  184. package/dist/configure/index.js.map +1 -0
  185. package/dist/configure/open-in-editor.d.ts +8 -0
  186. package/dist/configure/open-in-editor.js +120 -0
  187. package/dist/configure/open-in-editor.js.map +1 -0
  188. package/dist/configure/types.d.ts +63 -0
  189. package/dist/configure/types.js +2 -0
  190. package/dist/configure/types.js.map +1 -0
  191. package/dist/configure/utils.d.ts +19 -0
  192. package/dist/configure/utils.js +108 -0
  193. package/dist/configure/utils.js.map +1 -0
  194. package/dist/core/agent/index.d.ts +13 -0
  195. package/dist/core/agent/index.js +70 -0
  196. package/dist/core/agent/index.js.map +1 -0
  197. package/dist/core/agents/definitions.d.ts +12 -0
  198. package/dist/core/agents/definitions.js +35 -0
  199. package/dist/core/agents/definitions.js.map +1 -0
  200. package/dist/core/agents/index.d.ts +4 -0
  201. package/dist/core/agents/index.js +5 -0
  202. package/dist/core/agents/index.js.map +1 -0
  203. package/dist/core/agents/registry.d.ts +5 -0
  204. package/dist/core/agents/registry.js +84 -0
  205. package/dist/core/agents/registry.js.map +1 -0
  206. package/dist/core/agents/runner.d.ts +36 -0
  207. package/dist/core/agents/runner.js +275 -0
  208. package/dist/core/agents/runner.js.map +1 -0
  209. package/dist/core/agents/tools.d.ts +20 -0
  210. package/dist/core/agents/tools.js +66 -0
  211. package/dist/core/agents/tools.js.map +1 -0
  212. package/dist/core/config.d.ts +272 -0
  213. package/dist/core/config.js +334 -0
  214. package/dist/core/config.js.map +1 -0
  215. package/dist/core/index.d.ts +23 -0
  216. package/dist/core/index.js +21 -0
  217. package/dist/core/index.js.map +1 -0
  218. package/dist/core/mcp/config.d.ts +44 -0
  219. package/dist/core/mcp/config.js +65 -0
  220. package/dist/core/mcp/config.js.map +1 -0
  221. package/dist/core/mcp/index.d.ts +8 -0
  222. package/dist/core/mcp/index.js +12 -0
  223. package/dist/core/mcp/index.js.map +1 -0
  224. package/dist/core/mcp/manager.d.ts +69 -0
  225. package/dist/core/mcp/manager.js +376 -0
  226. package/dist/core/mcp/manager.js.map +1 -0
  227. package/dist/core/mcp/prefixed-mcp-tool.d.ts +14 -0
  228. package/dist/core/mcp/prefixed-mcp-tool.js +38 -0
  229. package/dist/core/mcp/prefixed-mcp-tool.js.map +1 -0
  230. package/dist/core/mcp/tools.d.ts +5 -0
  231. package/dist/core/mcp/tools.js +82 -0
  232. package/dist/core/mcp/tools.js.map +1 -0
  233. package/dist/core/mcp/types.d.ts +40 -0
  234. package/dist/core/mcp/types.js +28 -0
  235. package/dist/core/mcp/types.js.map +1 -0
  236. package/dist/core/memory/index.d.ts +3 -0
  237. package/dist/core/memory/index.js +3 -0
  238. package/dist/core/memory/index.js.map +1 -0
  239. package/dist/core/memory/ltm/embed.d.ts +16 -0
  240. package/dist/core/memory/ltm/embed.js +49 -0
  241. package/dist/core/memory/ltm/embed.js.map +1 -0
  242. package/dist/core/memory/ltm/index.d.ts +3 -0
  243. package/dist/core/memory/ltm/index.js +3 -0
  244. package/dist/core/memory/ltm/index.js.map +1 -0
  245. package/dist/core/memory/ltm/store.d.ts +20 -0
  246. package/dist/core/memory/ltm/store.js +271 -0
  247. package/dist/core/memory/ltm/store.js.map +1 -0
  248. package/dist/core/memory/ltm/tools.d.ts +21 -0
  249. package/dist/core/memory/ltm/tools.js +127 -0
  250. package/dist/core/memory/ltm/tools.js.map +1 -0
  251. package/dist/core/memory/ltm/types.d.ts +79 -0
  252. package/dist/core/memory/ltm/types.js +2 -0
  253. package/dist/core/memory/ltm/types.js.map +1 -0
  254. package/dist/core/memory/ltm/utils.d.ts +40 -0
  255. package/dist/core/memory/ltm/utils.js +145 -0
  256. package/dist/core/memory/ltm/utils.js.map +1 -0
  257. package/dist/core/memory/stm/flat-file-storage.d.ts +27 -0
  258. package/dist/core/memory/stm/flat-file-storage.js +63 -0
  259. package/dist/core/memory/stm/flat-file-storage.js.map +1 -0
  260. package/dist/core/memory/stm/index.d.ts +13 -0
  261. package/dist/core/memory/stm/index.js +24 -0
  262. package/dist/core/memory/stm/index.js.map +1 -0
  263. package/dist/core/memory/stm/lazy-session-manager.d.ts +37 -0
  264. package/dist/core/memory/stm/lazy-session-manager.js +163 -0
  265. package/dist/core/memory/stm/lazy-session-manager.js.map +1 -0
  266. package/dist/core/models/anthropic.d.ts +10 -0
  267. package/dist/core/models/anthropic.js +38 -0
  268. package/dist/core/models/anthropic.js.map +1 -0
  269. package/dist/core/models/bedrock.d.ts +21 -0
  270. package/dist/core/models/bedrock.js +24 -0
  271. package/dist/core/models/bedrock.js.map +1 -0
  272. package/dist/core/models/google.d.ts +10 -0
  273. package/dist/core/models/google.js +36 -0
  274. package/dist/core/models/google.js.map +1 -0
  275. package/dist/core/models/groq.d.ts +10 -0
  276. package/dist/core/models/groq.js +33 -0
  277. package/dist/core/models/groq.js.map +1 -0
  278. package/dist/core/models/index.d.ts +5 -0
  279. package/dist/core/models/index.js +11 -0
  280. package/dist/core/models/index.js.map +1 -0
  281. package/dist/core/models/moonshot.d.ts +11 -0
  282. package/dist/core/models/moonshot.js +39 -0
  283. package/dist/core/models/moonshot.js.map +1 -0
  284. package/dist/core/models/ollama/index.d.ts +3 -0
  285. package/dist/core/models/ollama/index.js +9 -0
  286. package/dist/core/models/ollama/index.js.map +1 -0
  287. package/dist/core/models/ollama/strands-ollama.d.ts +30 -0
  288. package/dist/core/models/ollama/strands-ollama.js +336 -0
  289. package/dist/core/models/ollama/strands-ollama.js.map +1 -0
  290. package/dist/core/models/openai.d.ts +4 -0
  291. package/dist/core/models/openai.js +9 -0
  292. package/dist/core/models/openai.js.map +1 -0
  293. package/dist/core/models/xai.d.ts +10 -0
  294. package/dist/core/models/xai.js +33 -0
  295. package/dist/core/models/xai.js.map +1 -0
  296. package/dist/core/prompts/environment.d.ts +11 -0
  297. package/dist/core/prompts/environment.js +51 -0
  298. package/dist/core/prompts/environment.js.map +1 -0
  299. package/dist/core/prompts/index.d.ts +7 -0
  300. package/dist/core/prompts/index.js +14 -0
  301. package/dist/core/prompts/index.js.map +1 -0
  302. package/dist/core/prompts/skills.d.ts +15 -0
  303. package/dist/core/prompts/skills.js +86 -0
  304. package/dist/core/prompts/skills.js.map +1 -0
  305. package/dist/core/prompts/system.d.ts +22 -0
  306. package/dist/core/prompts/system.js +164 -0
  307. package/dist/core/prompts/system.js.map +1 -0
  308. package/dist/core/skills/built-in/hooman-config/SKILL.md +9 -0
  309. package/dist/core/skills/index.d.ts +2 -0
  310. package/dist/core/skills/index.js +3 -0
  311. package/dist/core/skills/index.js.map +1 -0
  312. package/dist/core/skills/metadata.d.ts +8 -0
  313. package/dist/core/skills/metadata.js +20 -0
  314. package/dist/core/skills/metadata.js.map +1 -0
  315. package/dist/core/skills/registry.d.ts +38 -0
  316. package/dist/core/skills/registry.js +165 -0
  317. package/dist/core/skills/registry.js.map +1 -0
  318. package/dist/core/skills/tools.d.ts +9 -0
  319. package/dist/core/skills/tools.js +73 -0
  320. package/dist/core/skills/tools.js.map +1 -0
  321. package/dist/core/state/file-tool-display.d.ts +20 -0
  322. package/dist/core/state/file-tool-display.js +35 -0
  323. package/dist/core/state/file-tool-display.js.map +1 -0
  324. package/dist/core/state/thought-process.d.ts +18 -0
  325. package/dist/core/state/thought-process.js +21 -0
  326. package/dist/core/state/thought-process.js.map +1 -0
  327. package/dist/core/state/todos.d.ts +39 -0
  328. package/dist/core/state/todos.js +53 -0
  329. package/dist/core/state/todos.js.map +1 -0
  330. package/dist/core/state/tool-approvals.d.ts +12 -0
  331. package/dist/core/state/tool-approvals.js +81 -0
  332. package/dist/core/state/tool-approvals.js.map +1 -0
  333. package/dist/core/tools/fetch.d.ts +9 -0
  334. package/dist/core/tools/fetch.js +228 -0
  335. package/dist/core/tools/fetch.js.map +1 -0
  336. package/dist/core/tools/filesystem.d.ts +35 -0
  337. package/dist/core/tools/filesystem.js +791 -0
  338. package/dist/core/tools/filesystem.js.map +1 -0
  339. package/dist/core/tools/index.d.ts +9 -0
  340. package/dist/core/tools/index.js +10 -0
  341. package/dist/core/tools/index.js.map +1 -0
  342. package/dist/core/tools/shell.d.ts +18 -0
  343. package/dist/core/tools/shell.js +308 -0
  344. package/dist/core/tools/shell.js.map +1 -0
  345. package/dist/core/tools/sleep.d.ts +4 -0
  346. package/dist/core/tools/sleep.js +46 -0
  347. package/dist/core/tools/sleep.js.map +1 -0
  348. package/dist/core/tools/thinking.d.ts +12 -0
  349. package/dist/core/tools/thinking.js +119 -0
  350. package/dist/core/tools/thinking.js.map +1 -0
  351. package/dist/core/tools/time.d.ts +8 -0
  352. package/dist/core/tools/time.js +94 -0
  353. package/dist/core/tools/time.js.map +1 -0
  354. package/dist/core/tools/todo.d.ts +9 -0
  355. package/dist/core/tools/todo.js +33 -0
  356. package/dist/core/tools/todo.js.map +1 -0
  357. package/dist/core/tools/web-search.d.ts +11 -0
  358. package/dist/core/tools/web-search.js +211 -0
  359. package/dist/core/tools/web-search.js.map +1 -0
  360. package/dist/core/tools/wiki.d.ts +11 -0
  361. package/dist/core/tools/wiki.js +566 -0
  362. package/dist/core/tools/wiki.js.map +1 -0
  363. package/dist/core/utils/attachments.d.ts +23 -0
  364. package/dist/core/utils/attachments.js +125 -0
  365. package/dist/core/utils/attachments.js.map +1 -0
  366. package/dist/core/utils/cwd-context.d.ts +2 -0
  367. package/dist/core/utils/cwd-context.js +9 -0
  368. package/dist/core/utils/cwd-context.js.map +1 -0
  369. package/dist/core/utils/file-formats.d.ts +4 -0
  370. package/dist/core/utils/file-formats.js +48 -0
  371. package/dist/core/utils/file-formats.js.map +1 -0
  372. package/dist/core/utils/paths.d.ts +7 -0
  373. package/dist/core/utils/paths.js +25 -0
  374. package/dist/core/utils/paths.js.map +1 -0
  375. package/dist/daemon/approvals.d.ts +5 -0
  376. package/dist/daemon/approvals.js +95 -0
  377. package/dist/daemon/approvals.js.map +1 -0
  378. package/dist/daemon/index.d.ts +11 -0
  379. package/dist/daemon/index.js +106 -0
  380. package/dist/daemon/index.js.map +1 -0
  381. package/dist/daemon/queue.d.ts +5 -0
  382. package/dist/daemon/queue.js +38 -0
  383. package/dist/daemon/queue.js.map +1 -0
  384. package/dist/exec/approvals.d.ts +6 -0
  385. package/dist/exec/approvals.js +74 -0
  386. package/dist/exec/approvals.js.map +1 -0
  387. package/package.json +20 -9
  388. package/.github/screenshot.png +0 -0
  389. package/.github/workflows/build-publish.yml +0 -49
  390. package/docker-compose.yml +0 -13
  391. package/src/acp/acp-agent.ts +0 -814
  392. package/src/acp/approvals.ts +0 -146
  393. package/src/acp/index.ts +0 -1
  394. package/src/acp/mcp-servers.ts +0 -64
  395. package/src/acp/meta/system-prompt.ts +0 -44
  396. package/src/acp/meta/user-id.ts +0 -44
  397. package/src/acp/prompt-invoke.ts +0 -149
  398. package/src/acp/sessions/config-options.ts +0 -120
  399. package/src/acp/sessions/replay.ts +0 -131
  400. package/src/acp/sessions/store.ts +0 -161
  401. package/src/acp/sessions/title.ts +0 -22
  402. package/src/acp/utils/tool-kind.ts +0 -61
  403. package/src/acp/utils/tool-locations.ts +0 -48
  404. package/src/acp/utils/tool-result-content.ts +0 -27
  405. package/src/chat/app.tsx +0 -636
  406. package/src/chat/approvals.ts +0 -97
  407. package/src/chat/components/ApprovalPrompt.tsx +0 -25
  408. package/src/chat/components/ChatMessage.tsx +0 -50
  409. package/src/chat/components/Composer.tsx +0 -45
  410. package/src/chat/components/EmptyChatBanner.tsx +0 -26
  411. package/src/chat/components/PromptInput.tsx +0 -62
  412. package/src/chat/components/QueuedPrompts.tsx +0 -76
  413. package/src/chat/components/ReasoningStrip.tsx +0 -30
  414. package/src/chat/components/Spinner.tsx +0 -34
  415. package/src/chat/components/StatusBar.tsx +0 -67
  416. package/src/chat/components/ThinkingStatus.tsx +0 -128
  417. package/src/chat/components/TodoPanel.tsx +0 -49
  418. package/src/chat/components/ToolEvent.tsx +0 -41
  419. package/src/chat/components/ToolEventFileResult.tsx +0 -116
  420. package/src/chat/components/Transcript.tsx +0 -34
  421. package/src/chat/components/TranscriptViewport.tsx +0 -170
  422. package/src/chat/components/file-tool-diff/file-tool-result.ts +0 -155
  423. package/src/chat/components/markdown/BlockRenderer.tsx +0 -207
  424. package/src/chat/components/markdown/CodeBlock.tsx +0 -100
  425. package/src/chat/components/markdown/InlineRenderer.tsx +0 -122
  426. package/src/chat/components/markdown/MarkdownMessage.tsx +0 -35
  427. package/src/chat/components/markdown/MarkdownTable.tsx +0 -23
  428. package/src/chat/components/markdown/hooks/useMarkdownTableLayout.ts +0 -242
  429. package/src/chat/components/markdown/hooks/useMarkdownTokens.ts +0 -46
  430. package/src/chat/components/markdown/lexer.ts +0 -100
  431. package/src/chat/components/prompt-input/clipboard-image.ts +0 -119
  432. package/src/chat/components/prompt-input/hooks/usePromptInputController.ts +0 -4
  433. package/src/chat/components/prompt-input/input-model.ts +0 -294
  434. package/src/chat/components/prompt-input/paste.ts +0 -105
  435. package/src/chat/components/prompt-input/render.ts +0 -83
  436. package/src/chat/components/prompt-input/usePromptInputController.ts +0 -498
  437. package/src/chat/components/shared.ts +0 -70
  438. package/src/chat/index.tsx +0 -41
  439. package/src/chat/mouse.ts +0 -17
  440. package/src/chat/types.ts +0 -24
  441. package/src/cli.ts +0 -181
  442. package/src/configure/app.tsx +0 -1349
  443. package/src/configure/components/BusyScreen.tsx +0 -22
  444. package/src/configure/components/HomeScreen.tsx +0 -43
  445. package/src/configure/components/MenuScreen.tsx +0 -44
  446. package/src/configure/components/PromptForm.tsx +0 -40
  447. package/src/configure/components/SelectMenuItem.tsx +0 -30
  448. package/src/configure/index.tsx +0 -43
  449. package/src/configure/open-in-editor.ts +0 -133
  450. package/src/configure/types.ts +0 -51
  451. package/src/configure/utils.ts +0 -134
  452. package/src/core/agent/index.ts +0 -108
  453. package/src/core/agents/definitions.ts +0 -48
  454. package/src/core/agents/index.ts +0 -15
  455. package/src/core/agents/registry.ts +0 -106
  456. package/src/core/agents/runner.ts +0 -375
  457. package/src/core/agents/tools.ts +0 -100
  458. package/src/core/config.ts +0 -377
  459. package/src/core/index.ts +0 -60
  460. package/src/core/mcp/config.ts +0 -80
  461. package/src/core/mcp/index.ts +0 -33
  462. package/src/core/mcp/manager.ts +0 -491
  463. package/src/core/mcp/prefixed-mcp-tool.ts +0 -45
  464. package/src/core/mcp/tools.ts +0 -92
  465. package/src/core/mcp/types.ts +0 -37
  466. package/src/core/memory/index.ts +0 -17
  467. package/src/core/memory/ltm/embed.ts +0 -67
  468. package/src/core/memory/ltm/index.ts +0 -18
  469. package/src/core/memory/ltm/store.ts +0 -376
  470. package/src/core/memory/ltm/tools.ts +0 -146
  471. package/src/core/memory/ltm/types.ts +0 -111
  472. package/src/core/memory/ltm/utils.ts +0 -218
  473. package/src/core/memory/stm/flat-file-storage.ts +0 -89
  474. package/src/core/memory/stm/index.ts +0 -32
  475. package/src/core/memory/stm/lazy-session-manager.ts +0 -220
  476. package/src/core/models/anthropic.ts +0 -53
  477. package/src/core/models/bedrock.ts +0 -54
  478. package/src/core/models/google.ts +0 -51
  479. package/src/core/models/groq.ts +0 -48
  480. package/src/core/models/index.ts +0 -19
  481. package/src/core/models/moonshot.ts +0 -54
  482. package/src/core/models/ollama/index.ts +0 -13
  483. package/src/core/models/ollama/strands-ollama.ts +0 -439
  484. package/src/core/models/openai.ts +0 -12
  485. package/src/core/models/xai.ts +0 -47
  486. package/src/core/prompts/environment.ts +0 -71
  487. package/src/core/prompts/index.ts +0 -22
  488. package/src/core/prompts/skills.ts +0 -66
  489. package/src/core/prompts/system.ts +0 -183
  490. package/src/core/skills/index.ts +0 -2
  491. package/src/core/skills/registry.ts +0 -239
  492. package/src/core/skills/tools.ts +0 -80
  493. package/src/core/state/file-tool-display.ts +0 -70
  494. package/src/core/state/thought-process.ts +0 -49
  495. package/src/core/state/todos.ts +0 -84
  496. package/src/core/state/tool-approvals.ts +0 -100
  497. package/src/core/tools/fetch.ts +0 -288
  498. package/src/core/tools/filesystem.ts +0 -1105
  499. package/src/core/tools/index.ts +0 -9
  500. package/src/core/tools/shell.ts +0 -426
  501. package/src/core/tools/sleep.ts +0 -51
  502. package/src/core/tools/thinking.ts +0 -149
  503. package/src/core/tools/time.ts +0 -121
  504. package/src/core/tools/todo.ts +0 -44
  505. package/src/core/tools/web-search.ts +0 -278
  506. package/src/core/tools/wiki.ts +0 -703
  507. package/src/core/utils/attachments.ts +0 -201
  508. package/src/core/utils/cwd-context.ts +0 -11
  509. package/src/core/utils/file-formats.ts +0 -60
  510. package/src/core/utils/paths.ts +0 -37
  511. package/src/daemon/approvals.ts +0 -127
  512. package/src/daemon/index.ts +0 -153
  513. package/src/daemon/queue.ts +0 -48
  514. package/src/exec/approvals.ts +0 -90
  515. package/tsconfig.json +0 -30
  516. /package/{src → dist}/core/prompts/agents/plan.md +0 -0
  517. /package/{src → dist}/core/prompts/agents/research.md +0 -0
  518. /package/{src → dist}/core/prompts/harness/behaviour.md +0 -0
  519. /package/{src → dist}/core/prompts/harness/communication.md +0 -0
  520. /package/{src → dist}/core/prompts/harness/engineering.md +0 -0
  521. /package/{src → dist}/core/prompts/harness/execution.md +0 -0
  522. /package/{src → dist}/core/prompts/harness/guardrails.md +0 -0
  523. /package/{src → dist}/core/prompts/static/daemon.md +0 -0
  524. /package/{src → dist}/core/prompts/static/environment.md +0 -0
  525. /package/{src → dist}/core/prompts/static/fetch.md +0 -0
  526. /package/{src → dist}/core/prompts/static/filesystem.md +0 -0
  527. /package/{src → dist}/core/prompts/static/identity.md +0 -0
  528. /package/{src → dist}/core/prompts/static/ltm.md +0 -0
  529. /package/{src → dist}/core/prompts/static/shell.md +0 -0
  530. /package/{src → dist}/core/prompts/static/skills.md +0 -0
  531. /package/{src → dist}/core/prompts/static/sleep.md +0 -0
  532. /package/{src → dist}/core/prompts/static/subagents.md +0 -0
  533. /package/{src → dist}/core/prompts/static/thinking.md +0 -0
  534. /package/{src → dist}/core/prompts/static/todo.md +0 -0
  535. /package/{src → dist}/core/prompts/static/web-search.md +0 -0
  536. /package/{src → dist}/core/prompts/static/wiki.md +0 -0
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Text } from "ink";
3
+ function plainFromToken(token) {
4
+ switch (token.type) {
5
+ case "text":
6
+ return token.text ?? "";
7
+ case "codespan":
8
+ return token.text ?? "";
9
+ case "escape":
10
+ return token.text ?? "";
11
+ case "link": {
12
+ const label = inlineToPlainText(token.tokens);
13
+ return label || token.href || "";
14
+ }
15
+ case "strong":
16
+ case "em":
17
+ case "del":
18
+ return inlineToPlainText(token.tokens);
19
+ case "image":
20
+ return token.text || token.href || "";
21
+ case "br":
22
+ return "\n";
23
+ default:
24
+ return token.raw ?? "";
25
+ }
26
+ }
27
+ export function inlineToPlainText(tokens) {
28
+ if (!tokens || tokens.length === 0) {
29
+ return "";
30
+ }
31
+ return tokens.map((token) => plainFromToken(token)).join("");
32
+ }
33
+ export function renderInlineTokens(tokens, options = {}) {
34
+ if (!tokens || tokens.length === 0) {
35
+ return [];
36
+ }
37
+ const prefix = options.keyPrefix ?? "inline";
38
+ return tokens.flatMap((token, index) => {
39
+ const key = `${prefix}-${index}`;
40
+ switch (token.type) {
41
+ case "text":
42
+ return [token.text ?? ""];
43
+ case "escape":
44
+ return [token.text ?? token.raw ?? ""];
45
+ case "codespan":
46
+ return [
47
+ _jsx(Text, { color: "green", children: token.text ?? "" }, key),
48
+ ];
49
+ case "strong":
50
+ return [
51
+ _jsx(Text, { bold: true, children: renderInlineTokens(token.tokens, { keyPrefix: key }) }, key),
52
+ ];
53
+ case "em":
54
+ return [
55
+ _jsx(Text, { italic: true, children: renderInlineTokens(token.tokens, { keyPrefix: key }) }, key),
56
+ ];
57
+ case "del":
58
+ return [
59
+ _jsx(Text, { dimColor: true, children: renderInlineTokens(token.tokens, { keyPrefix: key }) }, key),
60
+ ];
61
+ case "link": {
62
+ const href = token.href ?? "";
63
+ const text = inlineToPlainText(token.tokens).trim();
64
+ const label = text || href;
65
+ const shouldShowHref = Boolean(href) && label !== href;
66
+ return [
67
+ _jsx(Text, { color: "blue", underline: true, children: label }, `${key}-label`),
68
+ ...(shouldShowHref
69
+ ? [
70
+ _jsx(Text, { color: "gray", children: ` (${href})` }, `${key}-href`),
71
+ ]
72
+ : []),
73
+ ];
74
+ }
75
+ case "image": {
76
+ const label = token.text?.trim() || "image";
77
+ const href = token.href ?? "";
78
+ return [
79
+ _jsx(Text, { color: "magenta", children: `[${label}]` }, `${key}-img-label`),
80
+ ...(href
81
+ ? [
82
+ _jsx(Text, { color: "gray", children: ` (${href})` }, `${key}-img-href`),
83
+ ]
84
+ : []),
85
+ ];
86
+ }
87
+ case "br":
88
+ return [_jsx(Text, { children: "\n" }, key)];
89
+ default: {
90
+ const fallback = plainFromToken(token);
91
+ return fallback ? [fallback] : [];
92
+ }
93
+ }
94
+ });
95
+ }
96
+ //# sourceMappingURL=InlineRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineRenderer.js","sourceRoot":"","sources":["../../../../src/chat/components/markdown/InlineRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ type MarkdownMessageProps = {
2
+ children: string;
3
+ streaming?: boolean;
4
+ };
5
+ export declare function MarkdownMessage({ children, streaming, }: MarkdownMessageProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from "ink";
3
+ import { BlockRenderer } from "./BlockRenderer.js";
4
+ import { useMarkdownTokens } from "./hooks/useMarkdownTokens.js";
5
+ export function MarkdownMessage({ children, streaming = false, }) {
6
+ const content = children ?? "";
7
+ const { fullTokens, stablePrefix, unstableSuffix, stableTokens, unstableTokens, } = useMarkdownTokens(content, streaming);
8
+ if (!streaming) {
9
+ return _jsx(BlockRenderer, { tokens: fullTokens });
10
+ }
11
+ return (_jsxs(Box, { flexDirection: "column", children: [stablePrefix ? _jsx(BlockRenderer, { tokens: stableTokens }) : null, unstableSuffix ? (_jsx(BlockRenderer, { tokens: unstableTokens, streaming: true })) : null] }));
12
+ }
13
+ //# sourceMappingURL=MarkdownMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownMessage.js","sourceRoot":"","sources":["../../../../src/chat/components/markdown/MarkdownMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAOjE,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAAG,KAAK,GACI;IACrB,MAAM,OAAO,GAAG,QAAQ,IAAI,EAAE,CAAC;IAC/B,MAAM,EACJ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,GACf,GAAG,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAC,aAAa,IAAC,MAAM,EAAE,UAAU,GAAI,CAAC;IAC/C,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,YAAY,CAAC,CAAC,CAAC,KAAC,aAAa,IAAC,MAAM,EAAE,YAAY,GAAI,CAAC,CAAC,CAAC,IAAI,EAC7D,cAAc,CAAC,CAAC,CAAC,CAChB,KAAC,aAAa,IAAC,MAAM,EAAE,cAAc,EAAE,SAAS,SAAG,CACpD,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Tokens } from "marked";
2
+ type MarkdownTableProps = {
3
+ token: Tokens.Table;
4
+ };
5
+ export declare function MarkdownTable({ token }: MarkdownTableProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text, useWindowSize } from "ink";
3
+ import { useMarkdownTableLayout } from "./hooks/useMarkdownTableLayout.js";
4
+ export function MarkdownTable({ token }) {
5
+ const { columns } = useWindowSize();
6
+ const layout = useMarkdownTableLayout(token, columns);
7
+ if (layout.lines.length === 0) {
8
+ return null;
9
+ }
10
+ return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: layout.lines.map((line, index) => (_jsx(Text, { children: line }, index))) }));
11
+ }
12
+ //# sourceMappingURL=MarkdownTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownTable.js","sourceRoot":"","sources":["../../../../src/chat/components/markdown/MarkdownTable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAE/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAM3E,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAsB;IACzD,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YACxC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,KAAC,IAAI,cAAc,IAAI,IAAZ,KAAK,CAAe,CAChC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Tokens } from "marked";
2
+ type TableLayout = {
3
+ mode: "horizontal" | "vertical";
4
+ lines: string[];
5
+ };
6
+ export declare function useMarkdownTableLayout(token: Tokens.Table, terminalWidth: number): TableLayout;
7
+ export {};
@@ -0,0 +1,186 @@
1
+ import { useMemo } from "react";
2
+ import { inlineToPlainText } from "../InlineRenderer.js";
3
+ const MIN_COLUMN_WIDTH = 3;
4
+ const MAX_ROW_LINES = 4;
5
+ const SAFETY_MARGIN = 4;
6
+ function displayWidth(value) {
7
+ return Array.from(value).length;
8
+ }
9
+ function longestWordWidth(value) {
10
+ const words = value.split(/\s+/).filter(Boolean);
11
+ if (words.length === 0) {
12
+ return MIN_COLUMN_WIDTH;
13
+ }
14
+ return Math.max(...words.map((word) => displayWidth(word)), MIN_COLUMN_WIDTH);
15
+ }
16
+ function wrapText(value, width) {
17
+ if (width <= 0) {
18
+ return [value];
19
+ }
20
+ const normalized = value.replace(/\r\n/g, "\n").trimEnd();
21
+ const sourceLines = normalized.length > 0 ? normalized.split("\n") : [""];
22
+ const wrapped = sourceLines.flatMap((line) => {
23
+ const words = line.split(/\s+/).filter(Boolean);
24
+ if (words.length === 0) {
25
+ return [""];
26
+ }
27
+ const output = [];
28
+ let current = "";
29
+ for (const word of words) {
30
+ const candidate = current ? `${current} ${word}` : word;
31
+ if (displayWidth(candidate) <= width) {
32
+ current = candidate;
33
+ continue;
34
+ }
35
+ if (current) {
36
+ output.push(current);
37
+ }
38
+ if (displayWidth(word) <= width) {
39
+ current = word;
40
+ continue;
41
+ }
42
+ let remaining = word;
43
+ while (displayWidth(remaining) > width) {
44
+ output.push(Array.from(remaining).slice(0, width).join(""));
45
+ remaining = Array.from(remaining).slice(width).join("");
46
+ }
47
+ current = remaining;
48
+ }
49
+ if (current) {
50
+ output.push(current);
51
+ }
52
+ return output.length > 0 ? output : [""];
53
+ });
54
+ return wrapped.length > 0 ? wrapped : [""];
55
+ }
56
+ function padAligned(value, width, align) {
57
+ const padding = Math.max(0, width - displayWidth(value));
58
+ if (align === "center") {
59
+ const leftPad = Math.floor(padding / 2);
60
+ return `${" ".repeat(leftPad)}${value}${" ".repeat(padding - leftPad)}`;
61
+ }
62
+ if (align === "right") {
63
+ return `${" ".repeat(padding)}${value}`;
64
+ }
65
+ return `${value}${" ".repeat(padding)}`;
66
+ }
67
+ function rowToCells(row) {
68
+ return row.map((cell) => inlineToPlainText(cell.tokens).trim());
69
+ }
70
+ function getVerticalLayout(header, rows, terminalWidth) {
71
+ const lines = [];
72
+ const separator = "─".repeat(Math.min(Math.max(terminalWidth - 1, 10), 40));
73
+ rows.forEach((row, rowIndex) => {
74
+ if (rowIndex > 0) {
75
+ lines.push(separator);
76
+ }
77
+ row.forEach((cell, columnIndex) => {
78
+ const label = header[columnIndex] || `Column ${columnIndex + 1}`;
79
+ const compact = cell.replace(/\s+/g, " ").trim();
80
+ const wrapped = wrapText(compact, Math.max(10, terminalWidth - displayWidth(label) - 3));
81
+ lines.push(`${label}: ${wrapped[0] ?? ""}`);
82
+ for (let index = 1; index < wrapped.length; index += 1) {
83
+ lines.push(` ${wrapped[index]}`);
84
+ }
85
+ });
86
+ });
87
+ return { mode: "vertical", lines };
88
+ }
89
+ export function useMarkdownTableLayout(token, terminalWidth) {
90
+ return useMemo(() => {
91
+ const header = rowToCells(token.header);
92
+ const rows = token.rows.map((row) => rowToCells(row));
93
+ const columnCount = header.length;
94
+ if (columnCount === 0) {
95
+ return { mode: "horizontal", lines: [] };
96
+ }
97
+ const minWidths = header.map((_, columnIndex) => {
98
+ let max = longestWordWidth(header[columnIndex] ?? "");
99
+ for (const row of rows) {
100
+ max = Math.max(max, longestWordWidth(row[columnIndex] ?? ""));
101
+ }
102
+ return max;
103
+ });
104
+ const idealWidths = header.map((_, columnIndex) => {
105
+ let max = Math.max(displayWidth(header[columnIndex] ?? ""), MIN_COLUMN_WIDTH);
106
+ for (const row of rows) {
107
+ max = Math.max(max, displayWidth(row[columnIndex] ?? ""));
108
+ }
109
+ return max;
110
+ });
111
+ const borderOverhead = 1 + columnCount * 3;
112
+ const availableWidth = Math.max(terminalWidth - borderOverhead - SAFETY_MARGIN, columnCount * MIN_COLUMN_WIDTH);
113
+ const totalMin = minWidths.reduce((sum, width) => sum + width, 0);
114
+ const totalIdeal = idealWidths.reduce((sum, width) => sum + width, 0);
115
+ let columnWidths;
116
+ if (totalIdeal <= availableWidth) {
117
+ columnWidths = idealWidths;
118
+ }
119
+ else if (totalMin <= availableWidth) {
120
+ const remaining = availableWidth - totalMin;
121
+ const overflows = idealWidths.map((ideal, index) => ideal - minWidths[index]);
122
+ const totalOverflow = overflows.reduce((sum, overflow) => sum + overflow, 0);
123
+ columnWidths = minWidths.map((minWidth, index) => {
124
+ if (totalOverflow === 0) {
125
+ return minWidth;
126
+ }
127
+ const extra = Math.floor((overflows[index] / totalOverflow) * remaining);
128
+ return minWidth + extra;
129
+ });
130
+ }
131
+ else {
132
+ const ratio = availableWidth / totalMin;
133
+ columnWidths = minWidths.map((width) => Math.max(Math.floor(width * ratio), MIN_COLUMN_WIDTH));
134
+ }
135
+ const maxRowLines = [header, ...rows]
136
+ .map((row) => row.reduce((max, cell, index) => {
137
+ const wrapped = wrapText(cell, columnWidths[index]);
138
+ return Math.max(max, wrapped.length);
139
+ }, 1))
140
+ .reduce((max, count) => Math.max(max, count), 1);
141
+ if (maxRowLines > MAX_ROW_LINES) {
142
+ return getVerticalLayout(header, rows, terminalWidth);
143
+ }
144
+ function border(type) {
145
+ const chars = {
146
+ top: ["┌", "─", "┬", "┐"],
147
+ middle: ["├", "─", "┼", "┤"],
148
+ bottom: ["└", "─", "┴", "┘"],
149
+ }[type];
150
+ const [left, line, cross, right] = chars;
151
+ return `${left}${columnWidths
152
+ .map((width) => line.repeat(width + 2))
153
+ .join(cross)}${right}`;
154
+ }
155
+ function renderRow(row, isHeader, align) {
156
+ const cells = row.map((cell, index) => wrapText(cell, columnWidths[index]));
157
+ const lineCount = Math.max(...cells.map((lines) => lines.length), 1);
158
+ const output = [];
159
+ for (let lineIndex = 0; lineIndex < lineCount; lineIndex += 1) {
160
+ let line = "│";
161
+ for (let columnIndex = 0; columnIndex < row.length; columnIndex += 1) {
162
+ const value = cells[columnIndex]?.[lineIndex] ?? "";
163
+ const cellAlign = isHeader ? "center" : align[columnIndex];
164
+ line += ` ${padAligned(value, columnWidths[columnIndex], cellAlign)} │`;
165
+ }
166
+ output.push(line);
167
+ }
168
+ return output;
169
+ }
170
+ const alignments = token.align ?? [];
171
+ const lines = [
172
+ border("top"),
173
+ ...renderRow(header, true, alignments),
174
+ border("middle"),
175
+ ];
176
+ rows.forEach((row, rowIndex) => {
177
+ lines.push(...renderRow(row, false, alignments));
178
+ if (rowIndex < rows.length - 1) {
179
+ lines.push(border("middle"));
180
+ }
181
+ });
182
+ lines.push(border("bottom"));
183
+ return { mode: "horizontal", lines };
184
+ }, [terminalWidth, token]);
185
+ }
186
+ //# sourceMappingURL=useMarkdownTableLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkdownTableLayout.js","sourceRoot":"","sources":["../../../../../src/chat/components/markdown/hooks/useMarkdownTableLayout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Token } from "marked";
2
+ export type MarkdownTokenPlan = {
3
+ fullTokens: Token[];
4
+ stablePrefix: string;
5
+ unstableSuffix: string;
6
+ stableTokens: Token[];
7
+ unstableTokens: Token[];
8
+ };
9
+ export declare function useMarkdownTokens(content: string, streaming: boolean): MarkdownTokenPlan;
@@ -0,0 +1,25 @@
1
+ import { useMemo, useRef } from "react";
2
+ import { lexMarkdown, splitStreamingMarkdown } from "../lexer.js";
3
+ export function useMarkdownTokens(content, streaming) {
4
+ const stablePrefixRef = useRef("");
5
+ const fullTokens = useMemo(() => lexMarkdown(content), [content]);
6
+ const streamSegments = streaming
7
+ ? splitStreamingMarkdown(content, stablePrefixRef.current)
8
+ : { stablePrefix: "", unstableSuffix: "" };
9
+ const stableTokens = useMemo(() => lexMarkdown(streamSegments.stablePrefix), [streamSegments.stablePrefix]);
10
+ const unstableTokens = useMemo(() => lexMarkdown(streamSegments.unstableSuffix), [streamSegments.unstableSuffix]);
11
+ if (!streaming) {
12
+ stablePrefixRef.current = "";
13
+ }
14
+ else {
15
+ stablePrefixRef.current = streamSegments.stablePrefix;
16
+ }
17
+ return {
18
+ fullTokens,
19
+ stablePrefix: streamSegments.stablePrefix,
20
+ unstableSuffix: streamSegments.unstableSuffix,
21
+ stableTokens,
22
+ unstableTokens,
23
+ };
24
+ }
25
+ //# sourceMappingURL=useMarkdownTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkdownTokens.js","sourceRoot":"","sources":["../../../../../src/chat/components/markdown/hooks/useMarkdownTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAUlE,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,SAAkB;IAElB,MAAM,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAElE,MAAM,cAAc,GAAG,SAAS;QAC9B,CAAC,CAAC,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;QAC1D,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,CAAC,EAC9C,CAAC,cAAc,CAAC,YAAY,CAAC,CAC9B,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,EAChD,CAAC,cAAc,CAAC,cAAc,CAAC,CAChC,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,eAAe,CAAC,OAAO,GAAG,EAAE,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,eAAe,CAAC,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC;IACxD,CAAC;IAED,OAAO;QACL,UAAU;QACV,YAAY,EAAE,cAAc,CAAC,YAAY;QACzC,cAAc,EAAE,cAAc,CAAC,cAAc;QAC7C,YAAY;QACZ,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type Token } from "marked";
2
+ export declare function configureMarked(): void;
3
+ export declare function lexMarkdown(content: string): Token[];
4
+ export declare function splitStreamingMarkdown(content: string, stablePrefix: string): {
5
+ stablePrefix: string;
6
+ unstableSuffix: string;
7
+ };
@@ -0,0 +1,89 @@
1
+ import { marked } from "marked";
2
+ const TOKEN_CACHE_MAX = 500;
3
+ const tokenCache = new Map();
4
+ let markedConfigured = false;
5
+ const MD_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /;
6
+ function hashContent(input) {
7
+ let hash = 5381;
8
+ for (let index = 0; index < input.length; index += 1) {
9
+ hash = (hash * 33) ^ input.charCodeAt(index);
10
+ }
11
+ return (hash >>> 0).toString(36);
12
+ }
13
+ function hasMarkdownSyntax(value) {
14
+ const sample = value.length > 500 ? value.slice(0, 500) : value;
15
+ return MD_SYNTAX_RE.test(sample);
16
+ }
17
+ function paragraphToken(value) {
18
+ return [
19
+ {
20
+ type: "paragraph",
21
+ raw: value,
22
+ text: value,
23
+ tokens: [
24
+ {
25
+ type: "text",
26
+ raw: value,
27
+ text: value,
28
+ },
29
+ ],
30
+ },
31
+ ];
32
+ }
33
+ function lexer(content) {
34
+ configureMarked();
35
+ if (!hasMarkdownSyntax(content)) {
36
+ return paragraphToken(content);
37
+ }
38
+ return marked.lexer(content);
39
+ }
40
+ export function configureMarked() {
41
+ if (markedConfigured) {
42
+ return;
43
+ }
44
+ markedConfigured = true;
45
+ marked.use({ gfm: true, breaks: false });
46
+ }
47
+ export function lexMarkdown(content) {
48
+ const key = hashContent(content);
49
+ const hit = tokenCache.get(key);
50
+ if (hit) {
51
+ tokenCache.delete(key);
52
+ tokenCache.set(key, hit);
53
+ return hit;
54
+ }
55
+ const tokens = lexer(content);
56
+ if (tokenCache.size >= TOKEN_CACHE_MAX) {
57
+ const oldest = tokenCache.keys().next().value;
58
+ if (oldest !== undefined) {
59
+ tokenCache.delete(oldest);
60
+ }
61
+ }
62
+ tokenCache.set(key, tokens);
63
+ return tokens;
64
+ }
65
+ export function splitStreamingMarkdown(content, stablePrefix) {
66
+ configureMarked();
67
+ let currentStablePrefix = stablePrefix;
68
+ if (!content.startsWith(currentStablePrefix)) {
69
+ currentStablePrefix = "";
70
+ }
71
+ const boundary = currentStablePrefix.length;
72
+ const tokens = lexer(content.slice(boundary));
73
+ let lastContentIndex = tokens.length - 1;
74
+ while (lastContentIndex >= 0 && tokens[lastContentIndex]?.type === "space") {
75
+ lastContentIndex -= 1;
76
+ }
77
+ let advance = 0;
78
+ for (let index = 0; index < lastContentIndex; index += 1) {
79
+ advance += tokens[index]?.raw.length ?? 0;
80
+ }
81
+ if (advance > 0) {
82
+ currentStablePrefix = content.slice(0, boundary + advance);
83
+ }
84
+ return {
85
+ stablePrefix: currentStablePrefix,
86
+ unstableSuffix: content.slice(currentStablePrefix.length),
87
+ };
88
+ }
89
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../../src/chat/components/markdown/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function saveClipboardImageAsAttachment(): Promise<string | null>;
@@ -0,0 +1,112 @@
1
+ import { execFile } from "node:child_process";
2
+ import { randomUUID } from "node:crypto";
3
+ import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+ import { attachmentsPath } from "../../../core/utils/paths.js";
7
+ const execFileAsync = promisify(execFile);
8
+ function appleScriptString(value) {
9
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
10
+ }
11
+ async function createClipboardImagePath() {
12
+ const root = attachmentsPath();
13
+ await mkdir(root, { recursive: true });
14
+ return join(root, `${randomUUID()}-clipboard.png`);
15
+ }
16
+ async function fileHasContent(path) {
17
+ try {
18
+ const data = await readFile(path);
19
+ return data.length > 0;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ async function saveMacClipboardImage() {
26
+ const outputPath = await createClipboardImagePath();
27
+ const outputPathLiteral = appleScriptString(outputPath);
28
+ try {
29
+ await execFileAsync("osascript", [
30
+ "-e",
31
+ "set png_data to (the clipboard as «class PNGf»)",
32
+ "-e",
33
+ `set fp to open for access POSIX file ${outputPathLiteral} with write permission`,
34
+ "-e",
35
+ "set eof fp to 0",
36
+ "-e",
37
+ "write png_data to fp",
38
+ "-e",
39
+ "close access fp",
40
+ ]);
41
+ return (await fileHasContent(outputPath)) ? outputPath : null;
42
+ }
43
+ catch {
44
+ await unlink(outputPath).catch(() => undefined);
45
+ return null;
46
+ }
47
+ }
48
+ async function saveLinuxClipboardImage() {
49
+ const outputPath = await createClipboardImagePath();
50
+ const candidates = [
51
+ ["wl-paste", ["--type", "image/png"]],
52
+ ["xclip", ["-selection", "clipboard", "-t", "image/png", "-o"]],
53
+ ["xclip", ["-selection", "clipboard", "-t", "image/jpeg", "-o"]],
54
+ ["xclip", ["-selection", "clipboard", "-t", "image/webp", "-o"]],
55
+ ["xsel", ["--clipboard", "--output"]],
56
+ ];
57
+ for (const [command, args] of candidates) {
58
+ try {
59
+ const { stdout } = await execFileAsync(command, args, {
60
+ encoding: "buffer",
61
+ maxBuffer: 20 * 1024 * 1024,
62
+ });
63
+ if (!Buffer.isBuffer(stdout) || stdout.length === 0) {
64
+ continue;
65
+ }
66
+ await writeFile(outputPath, stdout);
67
+ return outputPath;
68
+ }
69
+ catch {
70
+ // Try the next clipboard utility.
71
+ }
72
+ }
73
+ await unlink(outputPath).catch(() => undefined);
74
+ return null;
75
+ }
76
+ async function saveWindowsClipboardImage() {
77
+ const outputPath = await createClipboardImagePath();
78
+ const escapedPath = outputPath.replace(/'/g, "''");
79
+ const script = [
80
+ "Add-Type -AssemblyName System.Windows.Forms",
81
+ "Add-Type -AssemblyName System.Drawing",
82
+ "$img = [System.Windows.Forms.Clipboard]::GetImage()",
83
+ "if ($null -eq $img) { exit 1 }",
84
+ `$img.Save('${escapedPath}', [System.Drawing.Imaging.ImageFormat]::Png)`,
85
+ ].join("; ");
86
+ try {
87
+ await execFileAsync("powershell.exe", [
88
+ "-NoProfile",
89
+ "-NonInteractive",
90
+ "-Command",
91
+ script,
92
+ ]);
93
+ return (await fileHasContent(outputPath)) ? outputPath : null;
94
+ }
95
+ catch {
96
+ await unlink(outputPath).catch(() => undefined);
97
+ return null;
98
+ }
99
+ }
100
+ export async function saveClipboardImageAsAttachment() {
101
+ switch (process.platform) {
102
+ case "darwin":
103
+ return saveMacClipboardImage();
104
+ case "linux":
105
+ return saveLinuxClipboardImage();
106
+ case "win32":
107
+ return saveWindowsClipboardImage();
108
+ default:
109
+ return null;
110
+ }
111
+ }
112
+ //# sourceMappingURL=clipboard-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-image.js","sourceRoot":"","sources":["../../../../src/chat/components/prompt-input/clipboard-image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { usePromptInputController, type PromptSubmission, } from "../usePromptInputController.js";
@@ -0,0 +1,2 @@
1
+ export { usePromptInputController, } from "../usePromptInputController.js";
2
+ //# sourceMappingURL=usePromptInputController.js.map