@ebowwa/coder 0.2.1 → 0.7.64

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 (401) hide show
  1. package/README.md +31 -32
  2. package/dist/core/__tests__/permissions.test.d.ts +12 -0
  3. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  4. package/dist/core/__tests__/permissions.test.js +851 -0
  5. package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
  6. package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
  7. package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
  8. package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
  9. package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
  10. package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
  11. package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
  12. package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
  13. package/dist/core/agent-loop/__tests__/index.test.js +121 -0
  14. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
  15. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
  16. package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
  17. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
  18. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
  19. package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
  20. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
  21. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
  22. package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
  23. package/dist/core/agent-loop/compaction.d.ts +39 -0
  24. package/dist/core/agent-loop/compaction.d.ts.map +1 -0
  25. package/dist/core/agent-loop/compaction.js +51 -0
  26. package/dist/core/agent-loop/formatters.d.ts +21 -0
  27. package/dist/core/agent-loop/formatters.d.ts.map +1 -0
  28. package/dist/core/agent-loop/formatters.js +42 -0
  29. package/dist/core/agent-loop/index.d.ts +25 -0
  30. package/dist/core/agent-loop/index.d.ts.map +1 -0
  31. package/dist/core/agent-loop/index.js +83 -0
  32. package/dist/core/agent-loop/loop-state.d.ts +74 -0
  33. package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
  34. package/dist/core/agent-loop/loop-state.js +147 -0
  35. package/dist/core/agent-loop/message-builder.d.ts +13 -0
  36. package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
  37. package/dist/core/agent-loop/message-builder.js +49 -0
  38. package/dist/core/agent-loop/tool-executor.d.ts +23 -0
  39. package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
  40. package/dist/core/agent-loop/tool-executor.js +152 -0
  41. package/dist/core/agent-loop/turn-executor.d.ts +57 -0
  42. package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
  43. package/dist/core/agent-loop/turn-executor.js +124 -0
  44. package/dist/core/agent-loop/types.d.ts +141 -0
  45. package/dist/core/agent-loop/types.d.ts.map +1 -0
  46. package/dist/core/agent-loop/types.js +4 -0
  47. package/dist/core/agent-loop.d.ts +17 -0
  48. package/dist/core/agent-loop.d.ts.map +1 -0
  49. package/dist/core/agent-loop.js +16 -0
  50. package/dist/core/api-client-impl.d.ts +62 -0
  51. package/dist/core/api-client-impl.d.ts.map +1 -0
  52. package/dist/core/api-client-impl.js +479 -0
  53. package/dist/core/api-client.d.ts +6 -0
  54. package/dist/core/api-client.d.ts.map +1 -0
  55. package/dist/core/api-client.js +5 -0
  56. package/dist/core/checkpoints.d.ts +128 -0
  57. package/dist/core/checkpoints.d.ts.map +1 -0
  58. package/dist/core/checkpoints.js +438 -0
  59. package/dist/core/claude-md.d.ts +71 -0
  60. package/dist/core/claude-md.d.ts.map +1 -0
  61. package/dist/core/claude-md.js +198 -0
  62. package/dist/core/cognitive-security/hooks.d.ts +138 -0
  63. package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
  64. package/dist/core/cognitive-security/hooks.js +389 -0
  65. package/dist/core/cognitive-security/index.d.ts +751 -0
  66. package/dist/core/cognitive-security/index.d.ts.map +1 -0
  67. package/dist/core/cognitive-security/index.js +1123 -0
  68. package/dist/core/cognitive-security/middleware.d.ts +136 -0
  69. package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
  70. package/dist/core/cognitive-security/middleware.js +376 -0
  71. package/dist/core/config-loader.d.ts +127 -0
  72. package/dist/core/config-loader.d.ts.map +1 -0
  73. package/dist/core/config-loader.js +219 -0
  74. package/dist/core/context-compaction.d.ts +87 -0
  75. package/dist/core/context-compaction.d.ts.map +1 -0
  76. package/dist/core/context-compaction.js +428 -0
  77. package/dist/core/git-status.d.ts +25 -0
  78. package/dist/core/git-status.d.ts.map +1 -0
  79. package/dist/core/git-status.js +204 -0
  80. package/dist/core/image.d.ts +69 -0
  81. package/dist/core/image.d.ts.map +1 -0
  82. package/dist/core/image.js +290 -0
  83. package/dist/core/image.test.d.ts +2 -0
  84. package/dist/core/image.test.d.ts.map +1 -0
  85. package/dist/core/image.test.js +149 -0
  86. package/dist/core/models.d.ts +123 -0
  87. package/dist/core/models.d.ts.map +1 -0
  88. package/dist/core/models.js +325 -0
  89. package/dist/core/permissions.d.ts +81 -0
  90. package/dist/core/permissions.d.ts.map +1 -0
  91. package/dist/core/permissions.js +327 -0
  92. package/dist/core/retry.d.ts +25 -0
  93. package/dist/core/retry.d.ts.map +1 -0
  94. package/dist/core/retry.js +121 -0
  95. package/dist/core/session-store.d.ts +9 -0
  96. package/dist/core/session-store.d.ts.map +1 -0
  97. package/dist/core/session-store.js +10 -0
  98. package/dist/core/sessions/export.d.ts +47 -0
  99. package/dist/core/sessions/export.d.ts.map +1 -0
  100. package/dist/core/sessions/export.js +256 -0
  101. package/dist/core/sessions/index.d.ts +132 -0
  102. package/dist/core/sessions/index.d.ts.map +1 -0
  103. package/dist/core/sessions/index.js +442 -0
  104. package/dist/core/sessions/metadata.d.ts +77 -0
  105. package/dist/core/sessions/metadata.d.ts.map +1 -0
  106. package/dist/core/sessions/metadata.js +233 -0
  107. package/dist/core/sessions/persistence.d.ts +72 -0
  108. package/dist/core/sessions/persistence.d.ts.map +1 -0
  109. package/dist/core/sessions/persistence.js +201 -0
  110. package/dist/core/sessions/types.d.ts +110 -0
  111. package/dist/core/sessions/types.d.ts.map +1 -0
  112. package/dist/core/sessions/types.js +4 -0
  113. package/dist/core/stream-highlighter.d.ts +18 -0
  114. package/dist/core/stream-highlighter.d.ts.map +1 -0
  115. package/dist/core/stream-highlighter.js +916 -0
  116. package/dist/core/system-reminders.d.ts +89 -0
  117. package/dist/core/system-reminders.d.ts.map +1 -0
  118. package/dist/core/system-reminders.js +285 -0
  119. package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
  120. package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
  121. package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
  122. package/dist/ecosystem/hooks/index.d.ts +59 -0
  123. package/dist/ecosystem/hooks/index.d.ts.map +1 -0
  124. package/dist/ecosystem/hooks/index.js +294 -0
  125. package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
  126. package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
  127. package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
  128. package/dist/ecosystem/skills/index.d.ts +55 -0
  129. package/dist/ecosystem/skills/index.d.ts.map +1 -0
  130. package/dist/ecosystem/skills/index.js +258 -0
  131. package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
  132. package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
  133. package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
  134. package/dist/ecosystem/tools/index.d.ts +24 -0
  135. package/dist/ecosystem/tools/index.d.ts.map +1 -0
  136. package/dist/ecosystem/tools/index.js +1709 -0
  137. package/dist/index.d.ts +24 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/index.js +32 -2
  140. package/dist/interfaces/mcp/client.d.ts +40 -0
  141. package/dist/interfaces/mcp/client.d.ts.map +1 -0
  142. package/dist/interfaces/mcp/client.js +309 -0
  143. package/dist/interfaces/ui/index.d.ts +36 -0
  144. package/dist/interfaces/ui/index.d.ts.map +1 -0
  145. package/dist/interfaces/ui/index.js +61 -0
  146. package/dist/interfaces/ui/spinner.d.ts +140 -0
  147. package/dist/interfaces/ui/spinner.d.ts.map +1 -0
  148. package/dist/interfaces/ui/spinner.js +342 -0
  149. package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
  150. package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
  151. package/dist/interfaces/ui/terminal/cli/index.js +167 -0
  152. package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
  153. package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
  154. package/dist/interfaces/ui/terminal/shared/args.js +176 -0
  155. package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
  156. package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
  157. package/dist/interfaces/ui/terminal/shared/index.js +16 -0
  158. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
  159. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
  160. package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
  161. package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
  162. package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
  163. package/dist/interfaces/ui/terminal/shared/query.js +100 -0
  164. package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
  165. package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
  166. package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
  167. package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
  168. package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
  169. package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
  170. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
  171. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
  172. package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
  173. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
  174. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
  175. package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
  176. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
  177. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
  178. package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
  179. package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
  180. package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
  181. package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
  182. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
  183. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
  184. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
  185. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
  186. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
  187. package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
  188. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
  189. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
  190. package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
  191. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
  192. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
  193. package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
  194. package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
  195. package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
  196. package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
  197. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
  198. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
  199. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
  200. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
  201. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
  202. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
  203. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
  204. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
  205. package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
  206. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
  207. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
  208. package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
  209. package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
  210. package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
  211. package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
  212. package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
  213. package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
  214. package/dist/interfaces/ui/terminal/tui/console.js +46 -0
  215. package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
  216. package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
  217. package/dist/interfaces/ui/terminal/tui/index.js +28 -0
  218. package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
  219. package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
  220. package/dist/interfaces/ui/terminal/tui/run.js +31 -0
  221. package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
  222. package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
  223. package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
  224. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
  225. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
  226. package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
  227. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
  228. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
  229. package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
  230. package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
  231. package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
  232. package/dist/interfaces/ui/terminal/tui/types.js +5 -0
  233. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
  234. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
  235. package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
  236. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
  237. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
  238. package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
  239. package/dist/native/index.d.ts +480 -0
  240. package/dist/native/index.d.ts.map +1 -0
  241. package/dist/native/index.js +1625 -0
  242. package/dist/teammates/index.d.ts +161 -0
  243. package/dist/teammates/index.d.ts.map +1 -0
  244. package/dist/teammates/index.js +827 -0
  245. package/dist/types/index.d.ts +482 -0
  246. package/dist/types/index.d.ts.map +1 -0
  247. package/dist/types/index.js +52 -0
  248. package/native/README.md +5 -5
  249. package/native/index.darwin-arm64.node +0 -0
  250. package/native/index.node +0 -0
  251. package/native/package.json +4 -4
  252. package/package.json +33 -16
  253. package/packages/src/core/__tests__/permissions.test.ts +1091 -0
  254. package/packages/src/core/agent-loop/__tests__/compaction.test.ts +280 -0
  255. package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
  256. package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
  257. package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
  258. package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
  259. package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
  260. package/packages/src/core/agent-loop/compaction.ts +88 -0
  261. package/packages/src/core/agent-loop/formatters.ts +50 -0
  262. package/packages/src/core/agent-loop/index.ts +135 -0
  263. package/packages/src/core/agent-loop/loop-state.ts +187 -0
  264. package/packages/src/core/agent-loop/message-builder.ts +62 -0
  265. package/packages/src/core/agent-loop/tool-executor.ts +211 -0
  266. package/packages/src/core/agent-loop/turn-executor.ts +222 -0
  267. package/packages/src/core/agent-loop/types.ts +148 -0
  268. package/packages/src/core/agent-loop.ts +18 -0
  269. package/packages/src/core/api-client-impl.ts +619 -0
  270. package/packages/src/core/api-client.ts +6 -0
  271. package/packages/src/core/checkpoints.ts +606 -0
  272. package/packages/src/core/claude-md.ts +272 -0
  273. package/packages/src/core/cognitive-security/hooks.ts +590 -0
  274. package/packages/src/core/cognitive-security/index.ts +2041 -0
  275. package/packages/src/core/cognitive-security/middleware.ts +536 -0
  276. package/packages/src/core/config-loader.ts +324 -0
  277. package/packages/src/core/context-compaction.ts +578 -0
  278. package/packages/src/core/git-status.ts +262 -0
  279. package/packages/src/core/image.test.ts +180 -0
  280. package/packages/src/core/image.ts +350 -0
  281. package/packages/src/core/lmdb.db +0 -0
  282. package/packages/src/core/lmdb.db-lock +0 -0
  283. package/packages/src/core/models.ts +430 -0
  284. package/packages/src/core/normalizers/todo +4 -0
  285. package/packages/src/core/permissions.ts +431 -0
  286. package/packages/src/core/retry.ts +170 -0
  287. package/packages/src/core/session-store.ts +36 -0
  288. package/packages/src/core/sessions/export.ts +329 -0
  289. package/packages/src/core/sessions/index.ts +587 -0
  290. package/packages/src/core/sessions/metadata.ts +309 -0
  291. package/packages/src/core/sessions/persistence.ts +244 -0
  292. package/packages/src/core/sessions/types.ts +169 -0
  293. package/packages/src/core/stream-highlighter.ts +1123 -0
  294. package/packages/src/core/system-reminders.ts +402 -0
  295. package/packages/src/core/todo +8 -0
  296. package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
  297. package/packages/src/ecosystem/hooks/index.ts +341 -0
  298. package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
  299. package/packages/src/ecosystem/skills/index.ts +295 -0
  300. package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
  301. package/packages/src/ecosystem/tools/index.ts +1877 -0
  302. package/packages/src/index.ts +120 -0
  303. package/packages/src/interfaces/mcp/client.ts +389 -0
  304. package/packages/src/interfaces/ui/Screenshot 2026-03-02 at 9.23.10/342/200/257PM.png +0 -0
  305. package/packages/src/interfaces/ui/Screenshot 2026-03-03 at 10.55.11/342/200/257AM.png +0 -0
  306. package/packages/src/interfaces/ui/index.ts +161 -0
  307. package/packages/src/interfaces/ui/lmdb.db +0 -0
  308. package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
  309. package/packages/src/interfaces/ui/spinner.ts +451 -0
  310. package/packages/src/interfaces/ui/terminal/cli/index.ts +228 -0
  311. package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
  312. package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
  313. package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
  314. package/packages/src/interfaces/ui/terminal/shared/index.ts +71 -0
  315. package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
  316. package/packages/src/interfaces/ui/terminal/shared/query.ts +146 -0
  317. package/packages/src/interfaces/ui/terminal/shared/setup.ts +295 -0
  318. package/packages/src/interfaces/ui/terminal/shared/status-line.ts +358 -0
  319. package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
  320. package/packages/src/interfaces/ui/terminal/tui/HelpPanel.tsx +262 -0
  321. package/packages/src/interfaces/ui/terminal/tui/InputContext.tsx +232 -0
  322. package/packages/src/interfaces/ui/terminal/tui/InputField.tsx +62 -0
  323. package/packages/src/interfaces/ui/terminal/tui/InteractiveTUI.tsx +537 -0
  324. package/packages/src/interfaces/ui/terminal/tui/MessageArea.tsx +107 -0
  325. package/packages/src/interfaces/ui/terminal/tui/MessageStore.tsx +240 -0
  326. package/packages/src/interfaces/ui/terminal/tui/StatusBar.tsx +54 -0
  327. package/packages/src/interfaces/ui/terminal/tui/commands.ts +438 -0
  328. package/packages/src/interfaces/ui/terminal/tui/components/InteractiveElements.tsx +584 -0
  329. package/packages/src/interfaces/ui/terminal/tui/components/MultilineInput.tsx +614 -0
  330. package/packages/src/interfaces/ui/terminal/tui/components/PaneManager.tsx +333 -0
  331. package/packages/src/interfaces/ui/terminal/tui/components/Sidebar.tsx +604 -0
  332. package/packages/src/interfaces/ui/terminal/tui/components/index.ts +118 -0
  333. package/packages/src/interfaces/ui/terminal/tui/console.ts +49 -0
  334. package/packages/src/interfaces/ui/terminal/tui/index.ts +90 -0
  335. package/packages/src/interfaces/ui/terminal/tui/run.tsx +42 -0
  336. package/packages/src/interfaces/ui/terminal/tui/spinner.ts +69 -0
  337. package/packages/src/interfaces/ui/terminal/tui/tui-app.tsx +390 -0
  338. package/packages/src/interfaces/ui/terminal/tui/tui-footer.ts +422 -0
  339. package/packages/src/interfaces/ui/terminal/tui/types.ts +186 -0
  340. package/packages/src/interfaces/ui/terminal/tui/useInputHandler.ts +104 -0
  341. package/packages/src/interfaces/ui/terminal/tui/useNativeInput.ts +239 -0
  342. package/packages/src/lmdb.db +0 -0
  343. package/packages/src/lmdb.db-lock +0 -0
  344. package/packages/src/native/index.ts +2345 -0
  345. package/packages/src/teammates/index.ts +982 -0
  346. package/packages/src/types/index.ts +722 -0
  347. package/dist/cli.js +0 -148
  348. package/dist/index-0pkak453.js +0 -136
  349. package/dist/index-0qd0x8b4.js +0 -110
  350. package/dist/index-0x3kprq6.js +0 -240
  351. package/dist/index-1eawy937.js +0 -308
  352. package/dist/index-24m2aygy.js +0 -240
  353. package/dist/index-29xcjnne.js +0 -280
  354. package/dist/index-2avyytn5.js +0 -349
  355. package/dist/index-4ms367ey.js +0 -136
  356. package/dist/index-4w2t3b0m.js +0 -240
  357. package/dist/index-4xfgd8nz.js +0 -261
  358. package/dist/index-5acjp9gc.js +0 -157
  359. package/dist/index-5s15hr56.js +0 -136
  360. package/dist/index-6e4wf341.js +0 -349
  361. package/dist/index-6fvnkedw.js +0 -240
  362. package/dist/index-6rqpmd4g.js +0 -128
  363. package/dist/index-77ckwnbm.js +0 -280
  364. package/dist/index-9knxy49k.js +0 -128
  365. package/dist/index-9zrnw4zx.js +0 -128
  366. package/dist/index-bk21w99v.js +0 -280
  367. package/dist/index-c41n76fv.js +0 -240
  368. package/dist/index-cb4ppjdt.js +0 -255
  369. package/dist/index-cfb2edt6.js +0 -240
  370. package/dist/index-cmfa38hh.js +0 -308
  371. package/dist/index-datjz8q1.js +0 -257
  372. package/dist/index-eadf4wvn.js +0 -240
  373. package/dist/index-em5k0m3z.js +0 -345
  374. package/dist/index-gh8r333a.js +0 -110
  375. package/dist/index-gkx6k2tr.js +0 -261
  376. package/dist/index-h5cabfks.js +0 -155
  377. package/dist/index-hcrpwyy3.js +0 -261
  378. package/dist/index-hk7fwwa8.js +0 -257
  379. package/dist/index-jb8cw7f8.js +0 -136
  380. package/dist/index-kbyw4th1.js +0 -347
  381. package/dist/index-kgj5gqnm.js +0 -345
  382. package/dist/index-mdf6xp1z.js +0 -255
  383. package/dist/index-mrhv8kvc.js +0 -280
  384. package/dist/index-mt4743dd.js +0 -161
  385. package/dist/index-qnwsg97q.js +0 -240
  386. package/dist/index-qwdy6x44.js +0 -261
  387. package/dist/index-rmj77261.js +0 -157
  388. package/dist/index-sbbw1a61.js +0 -349
  389. package/dist/index-svy5bcpn.js +0 -345
  390. package/dist/index-tvmy7tm9.js +0 -261
  391. package/dist/index-tzz4vzkj.js +0 -312
  392. package/dist/index-vz80zmhe.js +0 -110
  393. package/dist/index-wed2fk67.js +0 -240
  394. package/dist/index-wksgzz8e.js +0 -280
  395. package/dist/index-wn2m4wma.js +0 -240
  396. package/dist/index-xha05vjc.js +0 -257
  397. package/dist/index-yc6eh8p8.js +0 -136
  398. package/dist/index-ycjxx9ft.js +0 -240
  399. package/dist/index-z0gzd0fc.js +0 -110
  400. package/dist/index-z8cwtf8j.js +0 -240
  401. package/dist/index-zy5mtt00.js +0 -128
@@ -0,0 +1,722 @@
1
+ /**
2
+ * Core Types for Coder
3
+ */
4
+
5
+ // Import types needed for forward references
6
+ import type { PermissionMode as PermissionModeType } from "../core/permissions.js";
7
+
8
+ // ============================================
9
+ // MESSAGE TYPES
10
+ // ============================================
11
+
12
+ export interface Message {
13
+ role: "user" | "assistant";
14
+ content: ContentBlock[];
15
+ }
16
+
17
+ export type ContentBlock =
18
+ | TextBlock
19
+ | ImageBlock
20
+ | ToolUseBlock
21
+ | ToolResultBlock
22
+ | ThinkingBlock
23
+ | RedactedThinkingBlock;
24
+
25
+ export interface TextBlock {
26
+ type: "text";
27
+ text: string;
28
+ cache_control?: CacheControl;
29
+ }
30
+
31
+ export interface ImageBlock {
32
+ type: "image";
33
+ source: {
34
+ type: "base64";
35
+ data: string;
36
+ media_type: MediaType;
37
+ };
38
+ }
39
+
40
+ export interface ToolUseBlock {
41
+ type: "tool_use";
42
+ id: string;
43
+ name: string;
44
+ input: Record<string, unknown>;
45
+ }
46
+
47
+ export interface ToolResultBlock {
48
+ type: "tool_result";
49
+ tool_use_id: string;
50
+ content: string | ContentBlock[];
51
+ is_error?: boolean;
52
+ }
53
+
54
+ export interface ThinkingBlock {
55
+ type: "thinking";
56
+ thinking: string;
57
+ }
58
+
59
+ export interface RedactedThinkingBlock {
60
+ type: "redacted_thinking";
61
+ data: string;
62
+ }
63
+
64
+ export interface CacheControl {
65
+ type: "ephemeral";
66
+ ttl?: CacheTTL;
67
+ }
68
+
69
+ export type CacheTTL = "1h" | "5m";
70
+
71
+ export interface CacheConfig {
72
+ enabled: boolean;
73
+ ttl: CacheTTL;
74
+ cacheSystemPrompt: boolean;
75
+ cacheTools: boolean;
76
+ minTokensForCache: number;
77
+ }
78
+
79
+ export const DEFAULT_CACHE_CONFIG: CacheConfig = {
80
+ enabled: true,
81
+ ttl: "1h",
82
+ cacheSystemPrompt: true,
83
+ cacheTools: true,
84
+ minTokensForCache: 1024,
85
+ };
86
+
87
+ export type MediaType = "image/jpeg" | "image/png" | "image/gif" | "image/webp";
88
+
89
+ // ============================================
90
+ // TOOL DEFINITIONS
91
+ // ============================================
92
+
93
+ export interface ToolDefinition {
94
+ name: string;
95
+ description: string;
96
+ input_schema: JSONSchema;
97
+ handler: ToolHandler;
98
+ }
99
+
100
+ export interface JSONSchema {
101
+ type: "object";
102
+ properties: Record<string, SchemaProperty>;
103
+ required?: string[];
104
+ additionalProperties?: boolean;
105
+ }
106
+
107
+ export interface SchemaProperty {
108
+ type: string;
109
+ description?: string;
110
+ enum?: string[];
111
+ default?: unknown;
112
+ items?: SchemaProperty;
113
+ properties?: Record<string, SchemaProperty>;
114
+ required?: string[];
115
+ minimum?: number;
116
+ maximum?: number;
117
+ minItems?: number;
118
+ maxItems?: number;
119
+ }
120
+
121
+ export type ToolHandler = (
122
+ args: Record<string, unknown>,
123
+ context: ToolContext
124
+ ) => Promise<ToolResult>;
125
+
126
+ export interface ToolContext {
127
+ workingDirectory: string;
128
+ permissionMode: PermissionModeType;
129
+ abortSignal?: AbortSignal;
130
+ onProgress?: (message: string) => void;
131
+ }
132
+
133
+ export interface ToolResult {
134
+ content: string | ContentBlock[];
135
+ is_error?: boolean;
136
+ }
137
+
138
+ // ============================================
139
+ // PERMISSION SYSTEM
140
+ // ============================================
141
+
142
+ // Re-export from the canonical permission system in permissions.ts
143
+ export type {
144
+ PermissionMode,
145
+ PermissionDecision,
146
+ PermissionRequest,
147
+ PermissionResult,
148
+ PermissionCache,
149
+ PermissionPromptCallback,
150
+ } from "../core/permissions.js";
151
+
152
+ // Keep RiskLevel here as it's used in other contexts
153
+ export type RiskLevel = "low" | "medium" | "high";
154
+
155
+ // ============================================
156
+ // CONFIGURATION
157
+ // ============================================
158
+
159
+ export interface ClaudeConfig {
160
+ model: ModelConfig;
161
+ mcp: MCPConfig;
162
+ permissions: PermissionConfig;
163
+ hooks?: HookConfig;
164
+ skills?: SkillConfig;
165
+ telemetry?: TelemetryConfig;
166
+ }
167
+
168
+ export interface ModelConfig {
169
+ model: ClaudeModel;
170
+ maxTokens?: number;
171
+ temperature?: number;
172
+ systemPrompt?: string;
173
+ appendSystemPrompt?: string;
174
+ thinking?: ThinkingConfig;
175
+ effort?: EffortLevel;
176
+ }
177
+
178
+ export type ClaudeModel =
179
+ | "claude-opus-4-6"
180
+ | "claude-sonnet-4-6"
181
+ | "claude-haiku-4-5"
182
+ | string;
183
+
184
+ export type ThinkingConfig =
185
+ | { type: "disabled" }
186
+ | { type: "enabled"; budget_tokens: number }
187
+ | { type: "adaptive" };
188
+
189
+ export type EffortLevel = "low" | "medium" | "high" | "max";
190
+
191
+ /**
192
+ * Extended Thinking configuration with effort levels
193
+ * Budget tokens control how many tokens the model can use for thinking
194
+ */
195
+ export interface ExtendedThinkingConfig {
196
+ /** Enable extended thinking */
197
+ enabled: boolean;
198
+ /** Budget in tokens (1024-100000), or use effort level */
199
+ budgetTokens?: number;
200
+ /** Effort level: low (1k), medium (4k), high (16k), max (100k) */
201
+ effort?: EffortLevel;
202
+ /** Allow interleaved thinking (thinking during tool use) */
203
+ interleaved?: boolean;
204
+ /** Model-specific budget multiplier */
205
+ modelMultiplier?: number;
206
+ }
207
+
208
+ /**
209
+ * Map effort levels to budget tokens
210
+ */
211
+ export const EFFORT_TO_BUDGET: Record<EffortLevel, number> = {
212
+ low: 1024, // ~1k tokens - quick thinking
213
+ medium: 4096, // ~4k tokens - standard thinking
214
+ high: 16384, // ~16k tokens - deep reasoning
215
+ max: 100000, // ~100k tokens - maximum reasoning
216
+ };
217
+
218
+ /**
219
+ * Default extended thinking config
220
+ */
221
+ export const DEFAULT_THINKING_CONFIG: ExtendedThinkingConfig = {
222
+ enabled: false,
223
+ effort: "medium",
224
+ interleaved: true,
225
+ };
226
+
227
+ /**
228
+ * Calculate budget tokens from config
229
+ */
230
+ export function calculateBudgetTokens(
231
+ config: ExtendedThinkingConfig,
232
+ model: string
233
+ ): number {
234
+ if (config.budgetTokens) {
235
+ return config.budgetTokens;
236
+ }
237
+
238
+ const effort = config.effort || "medium";
239
+ const baseBudget = EFFORT_TO_BUDGET[effort];
240
+
241
+ // Apply model multiplier (Opus gets more thinking budget by default)
242
+ const multiplier = config.modelMultiplier ?? (model.includes("opus") ? 2 : 1);
243
+
244
+ return Math.min(baseBudget * multiplier, 100000);
245
+ }
246
+
247
+ /**
248
+ * Check if model supports extended thinking
249
+ */
250
+ export function supportsExtendedThinking(model: string): boolean {
251
+ // Extended thinking is supported on Claude 4.x models
252
+ return model.includes("claude-opus-4") ||
253
+ model.includes("claude-sonnet-4") ||
254
+ model.includes("claude-haiku-4") ||
255
+ model.includes("claude-4");
256
+ }
257
+
258
+ export interface MCPConfig {
259
+ servers: Record<string, MCPServerConfig>;
260
+ }
261
+
262
+ export interface MCPServerConfig {
263
+ type: "stdio" | "http" | "sse" | "ws";
264
+ command?: string;
265
+ args?: string[];
266
+ url?: string;
267
+ env?: Record<string, string>;
268
+ headers?: Record<string, string>;
269
+ timeout?: number;
270
+ disabled?: boolean;
271
+ }
272
+
273
+ export interface PermissionConfig {
274
+ mode: PermissionModeType;
275
+ allowedTools?: string[];
276
+ disallowedTools?: string[];
277
+ }
278
+
279
+ export interface TelemetryConfig {
280
+ enabled: boolean;
281
+ endpoint?: string;
282
+ }
283
+
284
+ // ============================================
285
+ // HOOK SYSTEM
286
+ // ============================================
287
+
288
+ export type HookEvent =
289
+ | "PreToolUse"
290
+ | "PostToolUse"
291
+ | "PostToolUseFailure"
292
+ | "Stop"
293
+ | "UserPromptSubmit"
294
+ | "SessionStart"
295
+ | "SessionEnd"
296
+ | "Notification"
297
+ | "ConfigChange"
298
+ | "WorktreeCreate";
299
+
300
+ export interface HookDefinition {
301
+ event: HookEvent;
302
+ command: string;
303
+ /** Prompt template for LLM-based hooks (alternative to command) */
304
+ prompt?: string;
305
+ /** Timeout for LLM evaluation (default: 30000) */
306
+ timeout?: number;
307
+ enabled?: boolean;
308
+ /** Matcher pattern for filtering which tools this hook applies to */
309
+ matcher?: string;
310
+ }
311
+
312
+ export interface HookConfig {
313
+ hooks: Record<HookEvent, HookDefinition[]>;
314
+ }
315
+
316
+ export interface HookInput {
317
+ event: HookEvent;
318
+ tool_name?: string;
319
+ tool_input?: Record<string, unknown>;
320
+ tool_result?: ToolResult;
321
+ tool_result_is_error?: boolean;
322
+ error?: string;
323
+ session_id?: string;
324
+ prompt?: string;
325
+ timestamp: number;
326
+ }
327
+
328
+ export interface HookOutput {
329
+ decision?: "allow" | "block" | "deny";
330
+ reason?: string;
331
+ modified_input?: Record<string, unknown>;
332
+ errors?: string[];
333
+ }
334
+
335
+ // ============================================
336
+ // SKILL SYSTEM
337
+ // ============================================
338
+
339
+ export interface SkillDefinition {
340
+ name: string;
341
+ description: string;
342
+ prompt: string;
343
+ tools?: string[];
344
+ model?: ClaudeModel;
345
+ color?: string;
346
+ source: "built-in" | "project" | "user";
347
+ }
348
+
349
+ export interface SkillConfig {
350
+ skills: Record<string, SkillDefinition>;
351
+ }
352
+
353
+ // ============================================
354
+ // TEAMMATE SYSTEM
355
+ // ============================================
356
+
357
+ export interface Teammate {
358
+ teammateId: string;
359
+ name: string;
360
+ teamName: string;
361
+ color: string;
362
+ prompt: string;
363
+ planModeRequired: boolean;
364
+ paneId?: string;
365
+ status: TeammateStatus;
366
+ }
367
+
368
+ export type TeammateStatus =
369
+ | "pending"
370
+ | "in_progress"
371
+ | "idle"
372
+ | "completed"
373
+ | "failed";
374
+
375
+ export interface Team {
376
+ name: string;
377
+ description: string;
378
+ teammates: Teammate[];
379
+ taskListId: string;
380
+ status: "active" | "paused" | "completed" | "archived";
381
+ coordination: CoordinationSettings;
382
+ }
383
+
384
+ export interface CoordinationSettings {
385
+ dependencyOrder: string[];
386
+ communicationProtocol: "broadcast" | "direct" | "mixed";
387
+ taskAssignmentStrategy: "manual" | "auto" | "priority";
388
+ }
389
+
390
+ export interface TeammateMessage {
391
+ type: "broadcast" | "direct" | "notification";
392
+ from: string;
393
+ to?: string;
394
+ content: string;
395
+ timestamp: number;
396
+ }
397
+
398
+ // ============================================
399
+ // API TYPES
400
+ // ============================================
401
+
402
+ export interface APIRequest {
403
+ model: string;
404
+ max_tokens: number;
405
+ messages: Message[];
406
+ system?: string | SystemBlock[];
407
+ tools?: APITool[];
408
+ tool_choice?: ToolChoice;
409
+ thinking?: ThinkingConfig;
410
+ stream?: boolean;
411
+ }
412
+
413
+ export interface SystemBlock {
414
+ type: "text";
415
+ text: string;
416
+ cache_control?: CacheControl;
417
+ }
418
+
419
+ export interface APITool {
420
+ name: string;
421
+ description: string;
422
+ input_schema: JSONSchema;
423
+ }
424
+
425
+ export type ToolChoice =
426
+ | { type: "auto" }
427
+ | { type: "any" }
428
+ | { type: "tool"; name: string }
429
+ | undefined;
430
+
431
+ export interface APIResponse {
432
+ id: string;
433
+ type: "message";
434
+ role: "assistant";
435
+ content: ContentBlock[];
436
+ model: string;
437
+ stop_reason: StopReason;
438
+ stop_sequence: string | null;
439
+ usage: UsageMetrics;
440
+ }
441
+
442
+ export type StopReason =
443
+ | "end_turn"
444
+ | "max_tokens"
445
+ | "stop_sequence"
446
+ | "tool_use"
447
+ | null;
448
+
449
+ export interface UsageMetrics {
450
+ input_tokens: number;
451
+ output_tokens: number;
452
+ cache_creation_input_tokens?: number;
453
+ cache_read_input_tokens?: number;
454
+ cache_creation?: CacheCreation;
455
+ /** Extended thinking tokens used */
456
+ thinking_tokens?: number;
457
+ /** Redacted thinking tokens (counted but not exposed) */
458
+ redacted_thinking_tokens?: number;
459
+ }
460
+
461
+ export interface CacheCreation {
462
+ ephemeral_1h_input_tokens: number;
463
+ ephemeral_5m_input_tokens: number;
464
+ }
465
+
466
+ export interface CacheMetrics {
467
+ cacheHits: number;
468
+ cacheMisses: number;
469
+ totalCacheReadTokens: number;
470
+ totalCacheWriteTokens: number;
471
+ cacheHitRate: number;
472
+ estimatedSavingsUSD: number;
473
+ }
474
+
475
+ // ============================================
476
+ // STREAMING TYPES
477
+ // ============================================
478
+
479
+ export type SSEEvent =
480
+ | "message_start"
481
+ | "content_block_start"
482
+ | "content_block_delta"
483
+ | "content_block_stop"
484
+ | "message_delta"
485
+ | "message_stop"
486
+ | "error";
487
+
488
+ export interface SSEMessage {
489
+ event: SSEEvent;
490
+ data: string;
491
+ }
492
+
493
+ export interface MessageStartEvent {
494
+ type: "message_start";
495
+ message: APIResponse;
496
+ }
497
+
498
+ export interface ContentBlockStartEvent {
499
+ type: "content_block_start";
500
+ index: number;
501
+ content_block: ContentBlock;
502
+ }
503
+
504
+ export interface ContentBlockDeltaEvent {
505
+ type: "content_block_delta";
506
+ index: number;
507
+ delta: TextDelta | ToolUseDelta | ThinkingDelta;
508
+ }
509
+
510
+ export interface TextDelta {
511
+ type: "text_delta";
512
+ text: string;
513
+ }
514
+
515
+ export interface ToolUseDelta {
516
+ type: "input_json_delta";
517
+ partial_json: string;
518
+ }
519
+
520
+ export interface ThinkingDelta {
521
+ type: "thinking_delta";
522
+ thinking: string;
523
+ }
524
+
525
+ export interface RedactedThinkingDelta {
526
+ type: "redacted_thinking_delta";
527
+ data: string;
528
+ }
529
+
530
+ export type ContentDelta = TextDelta | ToolUseDelta | ThinkingDelta | RedactedThinkingDelta;
531
+
532
+ // ============================================
533
+ // AGENT LOOP TYPES
534
+ // ============================================
535
+
536
+ export interface AgentState {
537
+ messages: Message[];
538
+ tools: ToolDefinition[];
539
+ context: ContextSnapshot;
540
+ metrics: QueryMetrics;
541
+ abortController: AbortController;
542
+ }
543
+
544
+ export interface ContextSnapshot {
545
+ workingDirectory: string;
546
+ gitStatus?: GitStatus;
547
+ fileHistory: FileHistorySnapshot[];
548
+ systemPrompt: string;
549
+ systemReminders: string[];
550
+ }
551
+
552
+ export interface GitStatus {
553
+ branch: string;
554
+ ahead: number;
555
+ behind: number;
556
+ staged: string[];
557
+ unstaged: string[];
558
+ untracked: string[];
559
+ conflicted: string[];
560
+ }
561
+
562
+ export interface FileHistorySnapshot {
563
+ path: string;
564
+ content: string;
565
+ timestamp: number;
566
+ }
567
+
568
+ export interface QueryMetrics {
569
+ model: string;
570
+ messageCount: number;
571
+ messageTokens: number;
572
+ usage: UsageMetrics;
573
+ cacheMetrics?: CacheMetrics;
574
+ durationMs: number;
575
+ ttftMs: number;
576
+ costUSD: number;
577
+ stopReason: StopReason;
578
+ requestId: string;
579
+ }
580
+
581
+ // ============================================
582
+ // SESSION TYPES
583
+ // ============================================
584
+
585
+ export interface SessionState {
586
+ sessionId: string;
587
+ messages: Message[];
588
+ context: ContextSnapshot;
589
+ fileHistory: FileHistorySnapshot[];
590
+ agentName?: string;
591
+ agentColor?: string;
592
+ timestamp: number;
593
+ }
594
+
595
+ export interface SessionStorage {
596
+ path: string;
597
+ format: "jsonl" | "json";
598
+ compression: boolean;
599
+ }
600
+
601
+ // ============================================
602
+ // COST TRACKING
603
+ // ============================================
604
+
605
+ export interface ModelPricing {
606
+ input: number;
607
+ output: number;
608
+ cache_write: number;
609
+ cache_read: number;
610
+ }
611
+
612
+ // Re-export MODEL_PRICING from models.ts for backwards compatibility
613
+ export { MODEL_PRICING } from "../core/models.js";
614
+
615
+ // ============================================
616
+ // MCP TYPES
617
+ // ============================================
618
+
619
+ export interface JSONRPCRequest {
620
+ jsonrpc: "2.0";
621
+ id: string | number;
622
+ method: string;
623
+ params?: unknown;
624
+ }
625
+
626
+ export interface JSONRPCResponse {
627
+ jsonrpc: "2.0";
628
+ id: string | number;
629
+ result?: unknown;
630
+ error?: JSONRPCError;
631
+ }
632
+
633
+ export interface JSONRPCError {
634
+ code: number;
635
+ message: string;
636
+ data?: unknown;
637
+ }
638
+
639
+ export interface JSONRPCNotification {
640
+ jsonrpc: "2.0";
641
+ method: string;
642
+ params?: unknown;
643
+ }
644
+
645
+ export interface MCPTool {
646
+ name: string;
647
+ description: string;
648
+ inputSchema: JSONSchema;
649
+ }
650
+
651
+ export interface MCPClient {
652
+ name: string;
653
+ config: MCPServerConfig;
654
+ connected: boolean;
655
+ tools: MCPTool[];
656
+ }
657
+
658
+ // ============================================
659
+ // UI TYPES
660
+ // ============================================
661
+
662
+ export type SpinnerColor =
663
+ | "cyan"
664
+ | "green"
665
+ | "yellow"
666
+ | "blue"
667
+ | "magenta"
668
+ | "red"
669
+ | "white"
670
+ | "gray";
671
+
672
+ export interface SpinnerOptions {
673
+ /** Tip text shown below spinner */
674
+ tip?: string;
675
+ /** Color override */
676
+ color?: SpinnerColor;
677
+ /** Show elapsed time */
678
+ showTime?: boolean;
679
+ /** Tool activity indicator */
680
+ hasActiveTools?: boolean;
681
+ /** Suffix text after spinner */
682
+ suffix?: string;
683
+ /** Verbose mode - show more details */
684
+ verbose?: boolean;
685
+ /** Spinner text prefix */
686
+ prefix?: string;
687
+ /** Disable spinner (for --no-progress) */
688
+ disabled?: boolean;
689
+ }
690
+
691
+ export type LoadingPhase =
692
+ | "idle"
693
+ | "initializing"
694
+ | "loading-config"
695
+ | "connecting-mcp"
696
+ | "api-request"
697
+ | "streaming"
698
+ | "tool-execution"
699
+ | "processing"
700
+ | "checkpointing";
701
+
702
+ export interface LoadingStateData {
703
+ isLoading: boolean;
704
+ phase: LoadingPhase;
705
+ message: string;
706
+ startTime: number;
707
+ activeTools: Set<string>;
708
+ activeToolCount: number;
709
+ responseLength: number;
710
+ paused: boolean;
711
+ pausedTime: number;
712
+ }
713
+
714
+ export interface ProgressUpdate {
715
+ toolName: string;
716
+ status: "pending" | "running" | "complete" | "error";
717
+ message?: string;
718
+ progress?: number; // 0-100
719
+ timestamp: number;
720
+ }
721
+
722
+ export type ProgressCallback = (update: ProgressUpdate) => void;