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,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { PromptInput } from "./PromptInput.js";
4
+ export function Composer({ input, running, disabled, hint, onChange, onSubmit, }) {
5
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Text, { color: "gray", children: "> " }), _jsx(PromptInput, { value: input, onChange: onChange, onSubmit: onSubmit, placeholder: running
6
+ ? "Type a message (queued after current turn)"
7
+ : "Type a message", focus: !disabled, maxVisibleLines: 4 })] }), _jsx(Box, { children: _jsx(Text, { color: "gray", children: hint }) })] }));
8
+ }
9
+ //# sourceMappingURL=Composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../src/chat/components/Composer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAY/C,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,QAAQ,GACM;IACd,OAAO,CACL,8BACE,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aACrD,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,IAAI,GAAQ,EAChC,KAAC,WAAW,IACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EACT,OAAO;4BACL,CAAC,CAAC,4CAA4C;4BAC9C,CAAC,CAAC,gBAAgB,EAEtB,KAAK,EAAE,CAAC,QAAQ,EAChB,eAAe,EAAE,CAAC,GAClB,IACE,EAEN,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,IAAI,GAAQ,GAC5B,IACL,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare function EmptyChatBanner(): React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text, useWindowSize } from "ink";
3
+ import { ASCII_ART } from "./ascii-logo.js";
4
+ export function EmptyChatBanner() {
5
+ const { columns } = useWindowSize();
6
+ return (_jsx(Box, { flexDirection: "column", width: columns, children: _jsx(Box, { width: columns, flexDirection: "row", justifyContent: "center", paddingY: 2, children: _jsx(Box, { flexDirection: "column", children: ASCII_ART.map((line, i) => (_jsx(Text, { color: "cyan", bold: true, children: line }, i))) }) }) }));
7
+ }
8
+ //# sourceMappingURL=EmptyChatBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyChatBanner.js","sourceRoot":"","sources":["../../../src/chat/components/EmptyChatBanner.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IAEpC,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,OAAO,YACxC,KAAC,GAAG,IACF,KAAK,EAAE,OAAO,EACd,aAAa,EAAC,KAAK,EACnB,cAAc,EAAC,QAAQ,EACvB,QAAQ,EAAE,CAAC,YAEX,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAAS,KAAK,EAAC,MAAM,EAAC,IAAI,kBAC5B,IAAI,IADI,CAAC,CAEL,CACR,CAAC,GACE,GACF,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { type PromptSubmission } from "./prompt-input/hooks/usePromptInputController.js";
3
+ export type PromptInputProps = {
4
+ value: string;
5
+ onChange: (value: string) => void;
6
+ onSubmit: (value: PromptSubmission) => void;
7
+ placeholder?: string;
8
+ focus?: boolean;
9
+ maxVisibleLines?: number;
10
+ };
11
+ export declare function PromptInput({ value, onChange, onSubmit, placeholder, focus, maxVisibleLines, }: PromptInputProps): React.JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { splitLineAtCursor } from "./prompt-input/render.js";
4
+ import { usePromptInputController, } from "./prompt-input/hooks/usePromptInputController.js";
5
+ export function PromptInput({ value, onChange, onSubmit, placeholder = "", focus = true, maxVisibleLines = 4, }) {
6
+ const { view } = usePromptInputController({
7
+ value,
8
+ onChange,
9
+ onSubmit,
10
+ focus,
11
+ maxVisibleLines,
12
+ });
13
+ if (view.showPlaceholder) {
14
+ return (_jsxs(Text, { children: [focus ? _jsx(Text, { inverse: true, children: " " }) : null, placeholder ? _jsx(Text, { color: "gray", children: placeholder }) : null] }));
15
+ }
16
+ return (_jsx(Box, { flexDirection: "column", children: view.visibleLines.map((line, index) => {
17
+ const isCursorLine = focus && index === view.cursorLineInView;
18
+ if (!isCursorLine) {
19
+ return _jsx(Text, { children: line }, `${view.lineOffset + index}`);
20
+ }
21
+ const safeColumn = Math.min(Math.max(0, view.cursorCol), line.length);
22
+ const parts = splitLineAtCursor(line, safeColumn);
23
+ return (_jsxs(Text, { children: [parts.left, _jsx(Text, { inverse: true, children: parts.at }), parts.right] }, `${view.lineOffset + index}`));
24
+ }) }));
25
+ }
26
+ //# sourceMappingURL=PromptInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptInput.js","sourceRoot":"","sources":["../../../src/chat/components/PromptInput.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,wBAAwB,GAEzB,MAAM,kDAAkD,CAAC;AAW1D,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,EAAE,EAChB,KAAK,GAAG,IAAI,EACZ,eAAe,GAAG,CAAC,GACF;IACjB,MAAM,EAAE,IAAI,EAAE,GAAG,wBAAwB,CAAC;QACxC,KAAK;QACL,QAAQ;QACR,QAAQ;QACR,KAAK;QACL,eAAe;KAChB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CACL,MAAC,IAAI,eACF,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,OAAO,wBAAS,CAAC,CAAC,CAAC,IAAI,EACrC,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IACxD,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,CAAC;YAC9D,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,OAAO,KAAC,IAAI,cAAqC,IAAI,IAAnC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,CAAe,CAAC;YAChE,CAAC;YACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClD,OAAO,CACL,MAAC,IAAI,eACF,KAAK,CAAC,IAAI,EACX,KAAC,IAAI,IAAC,OAAO,kBAAE,KAAK,CAAC,EAAE,GAAQ,EAC9B,KAAK,CAAC,KAAK,KAHH,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,CAIhC,CACR,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { PromptSubmission } from "./prompt-input/hooks/usePromptInputController.js";
3
+ type QueuedPromptsProps = {
4
+ prompts: readonly {
5
+ id: string;
6
+ prompt: PromptSubmission;
7
+ }[];
8
+ };
9
+ export declare function QueuedPrompts({ prompts, }: QueuedPromptsProps): React.JSX.Element | null;
10
+ export {};
@@ -0,0 +1,38 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useStdout } from "ink";
3
+ const MIN_PROMPT_PREVIEW_CHARS = 16;
4
+ const MAX_PROMPT_PREVIEW_CHARS = 120;
5
+ const ELLIPSIS = "...";
6
+ function normalizePrompt(prompt) {
7
+ return prompt.replace(/\s+/g, " ").trim();
8
+ }
9
+ function promptPreview(prompt) {
10
+ const text = normalizePrompt(prompt.text);
11
+ if (prompt.attachments.length === 0) {
12
+ return text;
13
+ }
14
+ const suffix = `${prompt.attachments.length} attachment${prompt.attachments.length === 1 ? "" : "s"}`;
15
+ return text ? `${text} (${suffix})` : suffix;
16
+ }
17
+ function truncatePrompt(prompt, maxChars) {
18
+ if (prompt.length <= maxChars) {
19
+ return prompt;
20
+ }
21
+ if (maxChars <= ELLIPSIS.length) {
22
+ return ELLIPSIS.slice(0, maxChars);
23
+ }
24
+ return `${prompt.slice(0, maxChars - ELLIPSIS.length)}${ELLIPSIS}`;
25
+ }
26
+ export function QueuedPrompts({ prompts, }) {
27
+ const { stdout } = useStdout();
28
+ if (prompts.length === 0) {
29
+ return null;
30
+ }
31
+ const columns = stdout?.columns ?? 80;
32
+ const maxPromptChars = Math.max(MIN_PROMPT_PREVIEW_CHARS, Math.min(MAX_PROMPT_PREVIEW_CHARS, columns - 8));
33
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsxs(Text, { color: "gray", children: ["queued ", prompts.length === 1 ? "prompt" : "prompts"] }), prompts.map((item) => {
34
+ const preview = truncatePrompt(promptPreview(item.prompt), maxPromptChars);
35
+ return (_jsxs(Text, { color: "gray", children: ["\u25cb ", preview] }, item.id));
36
+ })] }));
37
+ }
38
+ //# sourceMappingURL=QueuedPrompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueuedPrompts.js","sourceRoot":"","sources":["../../../src/chat/components/QueuedPrompts.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAO3C,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,QAAQ,GAAG,KAAK,CAAC;AAEvB,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB;IAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,cACzC,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACzC,EAAE,CAAC;IACH,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,MAAc,EAAE,QAAgB;IACtD,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,GACY;IACnB,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,wBAAwB,EACxB,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,OAAO,GAAG,CAAC,CAAC,CAChD,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEX,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBACR,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAC9C,EACN,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpB,MAAM,OAAO,GAAG,cAAc,CAC5B,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAC1B,cAAc,CACf,CAAC;gBACF,OAAO,CACL,MAAC,IAAI,IAAe,KAAK,EAAC,MAAM,aAC7B,SAAS,EACT,OAAO,KAFC,IAAI,CAAC,EAAE,CAGX,CACR,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ type ReasoningStripProps = {
2
+ text: string;
3
+ maxVisibleLines?: number;
4
+ };
5
+ export declare function ReasoningStrip({ text, maxVisibleLines, }: ReasoningStripProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text, useWindowSize } from "ink";
3
+ import { wrapTextToLines } from "./shared.js";
4
+ export function ReasoningStrip({ text, maxVisibleLines = 2, }) {
5
+ const { columns } = useWindowSize();
6
+ const wrapped = wrapTextToLines(text, Math.max(20, columns - 6));
7
+ const visibleLines = wrapped.slice(-maxVisibleLines);
8
+ if (visibleLines.length === 0) {
9
+ return null;
10
+ }
11
+ return (_jsx(Box, { flexDirection: "column", children: visibleLines.map((line, index) => (_jsx(Text, { color: "gray", wrap: "wrap", children: line || " " }, index))) }));
12
+ }
13
+ //# sourceMappingURL=ReasoningStrip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReasoningStrip.js","sourceRoot":"","sources":["../../../src/chat/components/ReasoningStrip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,eAAe,GAAG,CAAC,GACC;IACpB,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;IAErD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,KAAC,IAAI,IAAa,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,MAAM,YACvC,IAAI,IAAI,GAAG,IADH,KAAK,CAET,CACR,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,101 @@
1
+ import React from "react";
2
+ export type ScrollViewRef = {
3
+ scrollTo: (offset: number) => void;
4
+ scrollToTop: () => void;
5
+ scrollToBottom: () => void;
6
+ getScrollOffset: () => number;
7
+ getViewportHeight: () => number;
8
+ getBottomOffset: () => number;
9
+ remeasure: () => void;
10
+ };
11
+ export declare const ScrollView: React.ForwardRefExoticComponent<{
12
+ readonly position?: "absolute" | "relative" | "static" | undefined;
13
+ readonly top?: number | string | undefined;
14
+ readonly right?: number | string | undefined;
15
+ readonly bottom?: number | string | undefined;
16
+ readonly left?: number | string | undefined;
17
+ readonly columnGap?: number | undefined;
18
+ readonly rowGap?: number | undefined;
19
+ readonly gap?: number | undefined;
20
+ readonly margin?: number | undefined;
21
+ readonly marginX?: number | undefined;
22
+ readonly marginY?: number | undefined;
23
+ readonly marginTop?: number | undefined;
24
+ readonly marginBottom?: number | undefined;
25
+ readonly marginLeft?: number | undefined;
26
+ readonly marginRight?: number | undefined;
27
+ readonly padding?: number | undefined;
28
+ readonly paddingX?: number | undefined;
29
+ readonly paddingY?: number | undefined;
30
+ readonly paddingTop?: number | undefined;
31
+ readonly paddingBottom?: number | undefined;
32
+ readonly paddingLeft?: number | undefined;
33
+ readonly paddingRight?: number | undefined;
34
+ readonly flexGrow?: number | undefined;
35
+ readonly flexShrink?: number | undefined;
36
+ readonly flexDirection?: "row" | "column" | "row-reverse" | "column-reverse" | undefined;
37
+ readonly flexBasis?: number | string | undefined;
38
+ readonly flexWrap?: "nowrap" | "wrap" | "wrap-reverse" | undefined;
39
+ readonly alignItems?: "flex-start" | "center" | "flex-end" | "stretch" | "baseline" | undefined;
40
+ readonly alignSelf?: "flex-start" | "center" | "flex-end" | "auto" | "stretch" | "baseline" | undefined;
41
+ readonly alignContent?: "flex-start" | "flex-end" | "center" | "stretch" | "space-between" | "space-around" | "space-evenly" | undefined;
42
+ readonly justifyContent?: "flex-start" | "flex-end" | "space-between" | "space-around" | "space-evenly" | "center" | undefined;
43
+ readonly width?: number | string | undefined;
44
+ readonly height?: number | string | undefined;
45
+ readonly minWidth?: number | string | undefined;
46
+ readonly minHeight?: number | string | undefined;
47
+ readonly maxWidth?: number | string | undefined;
48
+ readonly maxHeight?: number | string | undefined;
49
+ readonly aspectRatio?: number | undefined;
50
+ readonly display?: "flex" | "none" | undefined;
51
+ readonly borderStyle?: (keyof import("cli-boxes").Boxes | import("cli-boxes").BoxStyle) | undefined;
52
+ readonly borderTop?: boolean | undefined;
53
+ readonly borderBottom?: boolean | undefined;
54
+ readonly borderLeft?: boolean | undefined;
55
+ readonly borderRight?: boolean | undefined;
56
+ readonly borderColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
57
+ readonly borderTopColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
58
+ readonly borderBottomColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
59
+ readonly borderLeftColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
60
+ readonly borderRightColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
61
+ readonly borderDimColor?: boolean | undefined;
62
+ readonly borderTopDimColor?: boolean | undefined;
63
+ readonly borderBottomDimColor?: boolean | undefined;
64
+ readonly borderLeftDimColor?: boolean | undefined;
65
+ readonly borderRightDimColor?: boolean | undefined;
66
+ readonly borderBackgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
67
+ readonly borderTopBackgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
68
+ readonly borderBottomBackgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
69
+ readonly borderLeftBackgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
70
+ readonly borderRightBackgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
71
+ readonly overflow?: "visible" | "hidden" | undefined;
72
+ readonly overflowX?: "visible" | "hidden" | undefined;
73
+ readonly overflowY?: "visible" | "hidden" | undefined;
74
+ readonly backgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
75
+ } & {
76
+ readonly 'aria-label'?: string;
77
+ readonly 'aria-hidden'?: boolean;
78
+ readonly 'aria-role'?: "button" | "checkbox" | "combobox" | "list" | "listbox" | "listitem" | "menu" | "menuitem" | "option" | "progressbar" | "radio" | "radiogroup" | "tab" | "tablist" | "table" | "textbox" | "timer" | "toolbar";
79
+ readonly 'aria-state'?: {
80
+ readonly busy?: boolean;
81
+ readonly checked?: boolean;
82
+ readonly disabled?: boolean;
83
+ readonly expanded?: boolean;
84
+ readonly multiline?: boolean;
85
+ readonly multiselectable?: boolean;
86
+ readonly readonly?: boolean;
87
+ readonly required?: boolean;
88
+ readonly selected?: boolean;
89
+ };
90
+ } & {
91
+ onScroll?: (offset: number) => void;
92
+ onViewportSizeChange?: (size: {
93
+ width: number;
94
+ height: number;
95
+ }, previousSize: {
96
+ width: number;
97
+ height: number;
98
+ }) => void;
99
+ onContentHeightChange?: (height: number, previousHeight: number) => void;
100
+ children?: React.ReactNode;
101
+ } & React.RefAttributes<ScrollViewRef>>;
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useCallback, useImperativeHandle, useLayoutEffect, useRef, useState, } from "react";
3
+ import { Box, measureElement } from "ink";
4
+ function clamp(offset, bottomOffset) {
5
+ return Math.max(0, Math.min(offset, bottomOffset));
6
+ }
7
+ export const ScrollView = forwardRef(({ children, onScroll, onViewportSizeChange, onContentHeightChange, ...boxProps }, ref) => {
8
+ const viewportRef = useRef(null);
9
+ const contentRef = useRef(null);
10
+ const [scrollOffset, setScrollOffset] = useState(0);
11
+ const [viewportSize, setViewportSize] = useState({ width: 0, height: 0 });
12
+ const [contentHeight, setContentHeight] = useState(0);
13
+ const stateRef = useRef({ scrollOffset, viewportSize, contentHeight });
14
+ stateRef.current = { scrollOffset, viewportSize, contentHeight };
15
+ const bottomOffset = useCallback(() => {
16
+ const { viewportSize, contentHeight } = stateRef.current;
17
+ return Math.max(0, contentHeight - viewportSize.height);
18
+ }, []);
19
+ const scrollTo = useCallback((offset) => {
20
+ setScrollOffset((current) => {
21
+ const next = clamp(offset, bottomOffset());
22
+ if (next !== current) {
23
+ onScroll?.(next);
24
+ }
25
+ return next;
26
+ });
27
+ }, [bottomOffset, onScroll]);
28
+ const remeasure = useCallback(() => {
29
+ if (viewportRef.current) {
30
+ const size = measureElement(viewportRef.current);
31
+ const previousSize = stateRef.current.viewportSize;
32
+ if (size.width !== previousSize.width ||
33
+ size.height !== previousSize.height) {
34
+ const nextSize = { width: size.width, height: size.height };
35
+ stateRef.current = {
36
+ ...stateRef.current,
37
+ viewportSize: nextSize,
38
+ };
39
+ setViewportSize(nextSize);
40
+ onViewportSizeChange?.(nextSize, previousSize);
41
+ }
42
+ }
43
+ if (contentRef.current) {
44
+ const { height } = measureElement(contentRef.current);
45
+ const previousHeight = stateRef.current.contentHeight;
46
+ if (height !== previousHeight) {
47
+ stateRef.current = {
48
+ ...stateRef.current,
49
+ contentHeight: height,
50
+ };
51
+ setContentHeight(height);
52
+ onContentHeightChange?.(height, previousHeight);
53
+ }
54
+ }
55
+ }, [onContentHeightChange, onViewportSizeChange]);
56
+ useLayoutEffect(() => {
57
+ remeasure();
58
+ });
59
+ useLayoutEffect(() => {
60
+ setScrollOffset((current) => clamp(current, bottomOffset()));
61
+ }, [bottomOffset, contentHeight, viewportSize.height]);
62
+ useImperativeHandle(ref, () => ({
63
+ scrollTo,
64
+ scrollToTop: () => scrollTo(0),
65
+ scrollToBottom: () => scrollTo(bottomOffset()),
66
+ getScrollOffset: () => stateRef.current.scrollOffset,
67
+ getViewportHeight: () => stateRef.current.viewportSize.height,
68
+ getBottomOffset: bottomOffset,
69
+ remeasure,
70
+ }), [bottomOffset, remeasure, scrollTo]);
71
+ return (_jsx(Box, { flexDirection: "column", flexShrink: 1, overflow: "hidden", ...boxProps, children: _jsx(Box, { ref: viewportRef, flexDirection: "column", flexGrow: 1, flexShrink: 1, minHeight: 1, overflow: "hidden", width: "100%", children: _jsx(Box, { ref: contentRef, flexDirection: "column", marginTop: -scrollOffset, flexShrink: 0, width: "100%", children: children }) }) }));
72
+ });
73
+ ScrollView.displayName = "ScrollView";
74
+ //# sourceMappingURL=ScrollView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollView.js","sourceRoot":"","sources":["../../../src/chat/components/ScrollView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type SpinnerName } from "cli-spinners";
2
+ type SpinnerProps = {
3
+ type?: SpinnerName;
4
+ color?: string;
5
+ bold?: boolean;
6
+ };
7
+ export declare function Spinner({ type, color, bold, }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { Text } from "ink";
4
+ import cliSpinners from "cli-spinners";
5
+ export function Spinner({ type = "star", color = "cyan", bold = true, }) {
6
+ const spinner = cliSpinners[type] || cliSpinners.dots;
7
+ const { frames, interval } = spinner;
8
+ const [index, setIndex] = useState(0);
9
+ useEffect(() => {
10
+ const timer = setInterval(() => {
11
+ setIndex((value) => (value + 1) % frames.length);
12
+ }, interval);
13
+ return () => {
14
+ clearInterval(timer);
15
+ };
16
+ }, [frames.length, interval]);
17
+ return (_jsx(Text, { color: color, bold: bold, children: frames[index] }));
18
+ }
19
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../src/chat/components/Spinner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,WAAiC,MAAM,cAAc,CAAC;AAQ7D,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,GAAG,MAAM,EACb,KAAK,GAAG,MAAM,EACd,IAAI,GAAG,IAAI,GACE;IACb,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;IACtD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE9B,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,YAC3B,MAAM,CAAC,KAAK,CAAC,GACT,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Manager as McpManager } from "../../core/mcp/index.js";
2
+ type StatusBarProps = {
3
+ running: boolean;
4
+ status: string;
5
+ statusLabel?: string;
6
+ sessionId: string;
7
+ elapsedLabel: string;
8
+ turnCount: number;
9
+ totalTools: number;
10
+ skillsFound: number;
11
+ manager: McpManager;
12
+ usage: {
13
+ inputTokens: number;
14
+ outputTokens: number;
15
+ totalTokens: number;
16
+ latencyMs: number;
17
+ };
18
+ };
19
+ export declare function StatusBar({ running, status, statusLabel, sessionId, elapsedLabel, turnCount, totalTools, skillsFound, manager, usage, }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
20
+ export {};
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ /** Ink color for the live status token only (labels stay `gray`). */
4
+ function statusValueColor(status) {
5
+ switch (status) {
6
+ case "ready":
7
+ return "green";
8
+ case "thinking":
9
+ case "streaming":
10
+ case "running tool":
11
+ case "cancel requested":
12
+ return "yellow";
13
+ default:
14
+ return "gray";
15
+ }
16
+ }
17
+ export function StatusBar({ running, status, statusLabel, sessionId, elapsedLabel, turnCount, totalTools, skillsFound, manager, usage, }) {
18
+ return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "gray", children: "status: " }), _jsx(Text, { color: statusValueColor(status), children: statusLabel ?? status }), _jsxs(Text, { color: "gray", children: [" \u2022 session: ", sessionId] })] }), _jsxs(Text, { color: "gray", children: ["turns: ", turnCount, " \u2022 tokens in/out/total: ", usage.inputTokens, "/", usage.outputTokens, "/", usage.totalTokens, usage.latencyMs > 0 ? ` • latency: ${usage.latencyMs}ms` : "", running ? _jsxs(Text, { color: "gray", children: [" \u2022 elapsed ", elapsedLabel] }) : null] }), _jsx(Text, { color: "gray", children: `mcp servers: ${manager.clients.size} • tools: ${totalTools} • skills: ${skillsFound}` })] }));
19
+ }
20
+ //# sourceMappingURL=StatusBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/chat/components/StatusBar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAqBhC,qEAAqE;AACrE,SAAS,gBAAgB,CAAC,MAAc;IACtC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW,CAAC;QACjB,KAAK,cAAc,CAAC;QACpB,KAAK,kBAAkB;YACrB,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,MAAM,EACN,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,OAAO,EACP,KAAK,GACU;IACf,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAgB,EAClC,KAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,YAAG,WAAW,IAAI,MAAM,GAAQ,EACrE,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,kCAAc,SAAS,IAAQ,IAC5C,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBACR,SAAS,mCAA0B,KAAK,CAAC,WAAW,OAC3D,KAAK,CAAC,YAAY,OAAG,KAAK,CAAC,WAAW,EACtC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,EAC7D,OAAO,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iCAAa,YAAY,IAAQ,CAAC,CAAC,CAAC,IAAI,IAChE,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YACf,gBAAgB,OAAO,CAAC,OAAO,CAAC,IAAI,aAAa,UAAU,cAAc,WAAW,EAAE,GAClF,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function ThinkingStatus(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,119 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { Box, Text } from "ink";
4
+ import { Spinner } from "./Spinner.js";
5
+ const THINKING_VERBS = [
6
+ "is thinking",
7
+ "is analyzing contextual data",
8
+ "is pondering",
9
+ "is exploring possibilities",
10
+ "is synthesizing ideas",
11
+ "is computing paths",
12
+ "is resolving logic",
13
+ "is parsing semantics",
14
+ "is constructing responses",
15
+ "is interpreting intent",
16
+ "is weaving thoughts",
17
+ "is processing inputs",
18
+ "is evaluating constraints",
19
+ "is assembling paradigms",
20
+ "is calibrating tensors",
21
+ "is indexing memories",
22
+ "is extrapolating vectors",
23
+ "is connecting dots",
24
+ "is deciphering queries",
25
+ "is aligning objectives",
26
+ "is routing thoughts",
27
+ "is optimizing heuristic bounds",
28
+ "is unrolling loops",
29
+ "is querying knowledge graphs",
30
+ "is bridging concepts",
31
+ "is formulating strategies",
32
+ "is reviewing context windows",
33
+ "is distilling facts",
34
+ "is structuring syntax",
35
+ "is generating potential worlds",
36
+ "is rendering concepts",
37
+ "is simulating outcomes",
38
+ "is drafting narratives",
39
+ "is tracing execution flows",
40
+ "is projecting scenarios",
41
+ "is expanding context networks",
42
+ "is cross-referencing archives",
43
+ "is mapping algorithms",
44
+ "is building semantic bridges",
45
+ "is decoding symbols",
46
+ "is unwinding recursive thoughts",
47
+ "is fetching relevant insights",
48
+ "is analyzing edge cases",
49
+ "is establishing connections",
50
+ "is evaluating syntax trees",
51
+ "is navigating logical gates",
52
+ "is deducing conclusions",
53
+ "is searching the latent space",
54
+ "is inferring implicit meaning",
55
+ "is mapping dimensions",
56
+ "is assessing probability",
57
+ "is calculating next steps",
58
+ "is traversing conceptual graphs",
59
+ "is examining edge variables",
60
+ "is verifying constraints",
61
+ "is scanning mental databases",
62
+ "is aggregating ideas",
63
+ "is refining logic structures",
64
+ "is projecting logic",
65
+ "is analyzing potential solutions",
66
+ "is calculating vector spaces",
67
+ "is synthesizing paradigms",
68
+ "is reviewing previous statements",
69
+ "is mapping causal links",
70
+ "is deriving corollaries",
71
+ "is simulating dialogue",
72
+ "is mapping logical spaces",
73
+ "is assembling puzzle pieces",
74
+ "is generating possibilities",
75
+ "is weighing alternatives",
76
+ "is constructing arguments",
77
+ "is decoding ambiguity",
78
+ "is inferring patterns",
79
+ "is clustering relevant topics",
80
+ "is exploring latent variables",
81
+ "is extracting semantic cores",
82
+ "is balancing equations",
83
+ "is translating concepts",
84
+ "is modeling realities",
85
+ "is connecting synapses",
86
+ "is activating neural pathways",
87
+ "is fine-tuning outputs",
88
+ "is tracing linguistic roots",
89
+ "is measuring semantic proximity",
90
+ "is formulating plans",
91
+ "is constructing frameworks",
92
+ "is organizing thought streams",
93
+ "is linking references",
94
+ "is analyzing tone",
95
+ "is scanning knowledge bases",
96
+ "is piecing together models",
97
+ "is building cognitive structures",
98
+ "is generating insights",
99
+ "is forecasting responses",
100
+ "is evaluating trade-offs",
101
+ "is mapping inference paths",
102
+ "is predicting user intent",
103
+ "is resolving paradoxes",
104
+ "is unpacking meaning",
105
+ "is tracing references",
106
+ ];
107
+ export function ThinkingStatus() {
108
+ const [verbIndex, setVerbIndex] = useState(() => Math.floor(Math.random() * THINKING_VERBS.length));
109
+ useEffect(() => {
110
+ const timer = setInterval(() => {
111
+ setVerbIndex((value) => (value + 1) % THINKING_VERBS.length);
112
+ }, 1500);
113
+ return () => {
114
+ clearInterval(timer);
115
+ };
116
+ }, []);
117
+ return (_jsxs(Box, { marginLeft: 1, children: [_jsx(Spinner, { type: "star", color: "cyan" }), _jsx(Text, { color: "gray", children: ` ${THINKING_VERBS[verbIndex]}...` })] }));
118
+ }
119
+ //# sourceMappingURL=ThinkingStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThinkingStatus.js","sourceRoot":"","sources":["../../../src/chat/components/ThinkingStatus.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TodoItem } from "../../core/state/todos.js";
2
+ type TodoPanelProps = {
3
+ todos: TodoItem[];
4
+ };
5
+ export declare function TodoPanel({ todos }: TodoPanelProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ function markerForStatus(status) {
4
+ switch (status) {
5
+ case "completed":
6
+ return "[x]";
7
+ case "in_progress":
8
+ return "[~]";
9
+ case "pending":
10
+ return "[ ]";
11
+ }
12
+ }
13
+ export function TodoPanel({ todos }) {
14
+ if (todos.length === 0) {
15
+ return null;
16
+ }
17
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Todos" }), todos.map((todo, index) => {
18
+ const completed = todo.status === "completed";
19
+ const inProgress = todo.status === "in_progress";
20
+ const marker = markerForStatus(todo.status);
21
+ const suffix = inProgress && todo.activeForm.trim().length > 0
22
+ ? ` — ${todo.activeForm}`
23
+ : "";
24
+ return (_jsx(Text, { dimColor: completed, bold: inProgress, children: `${index + 1}. ${marker} ${todo.content}${suffix}` }, `${index}-${todo.content}`));
25
+ })] }));
26
+ }
27
+ //# sourceMappingURL=TodoPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TodoPanel.js","sourceRoot":"","sources":["../../../src/chat/components/TodoPanel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAOhC,SAAS,eAAe,CAAC,MAA0B;IACjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;QACf,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAkB;IACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,sBAEhB,EACN,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;gBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;gBACjD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM,MAAM,GACV,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;oBAC7C,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;oBACzB,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,CACL,KAAC,IAAI,IAEH,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,UAAU,YAEf,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,IAJ9C,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAK1B,CACR,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ChatLine } from "../types.js";
2
+ type ToolEventProps = {
3
+ line: ChatLine;
4
+ };
5
+ export declare function ToolEvent({ line }: ToolEventProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ import { useFileToolResult } from "./file-tool-diff/file-tool-result.js";
4
+ import { compactInline, formatToolArgs } from "./shared.js";
5
+ import { Spinner } from "./Spinner.js";
6
+ import { ToolEventFileResult } from "./ToolEventFileResult.js";
7
+ export function ToolEvent({ line }) {
8
+ const fileToolResult = useFileToolResult(line);
9
+ if (fileToolResult) {
10
+ return _jsx(ToolEventFileResult, { line: line, result: fileToolResult });
11
+ }
12
+ const args = formatToolArgs(line.content)[0] ?? "";
13
+ const result = line.resultContent
14
+ ? compactInline(line.resultContent, 256)
15
+ : null;
16
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "Tool" }), _jsxs(Text, { children: [_jsx(Text, { bold: true, children: line.toolName ?? "unknown" }), _jsx(Text, { children: args ? `: ${args}` : "" })] }), line.phase === "running" ? (_jsxs(Box, { flexDirection: "row", children: [_jsx(Spinner, { type: "dots", color: "yellow" }), _jsx(Text, { color: "gray", children: " running..." })] })) : null, result ? _jsx(Text, { children: result }) : null] }));
17
+ }
18
+ //# sourceMappingURL=ToolEvent.js.map