@ebowwa/coder 0.7.63 → 0.7.65

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 (364) hide show
  1. package/dist/core/__tests__/permissions.test.d.ts +12 -0
  2. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  3. package/dist/core/__tests__/permissions.test.js +851 -0
  4. package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
  5. package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
  6. package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
  7. package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
  8. package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
  9. package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
  10. package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
  11. package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
  12. package/dist/core/agent-loop/__tests__/index.test.js +121 -0
  13. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
  14. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
  15. package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
  16. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
  17. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
  18. package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
  19. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
  20. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
  21. package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
  22. package/dist/core/agent-loop/compaction.d.ts +39 -0
  23. package/dist/core/agent-loop/compaction.d.ts.map +1 -0
  24. package/dist/core/agent-loop/compaction.js +51 -0
  25. package/dist/core/agent-loop/formatters.d.ts +21 -0
  26. package/dist/core/agent-loop/formatters.d.ts.map +1 -0
  27. package/dist/core/agent-loop/formatters.js +42 -0
  28. package/dist/core/agent-loop/index.d.ts +25 -0
  29. package/dist/core/agent-loop/index.d.ts.map +1 -0
  30. package/dist/core/agent-loop/index.js +83 -0
  31. package/dist/core/agent-loop/loop-state.d.ts +74 -0
  32. package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
  33. package/dist/core/agent-loop/loop-state.js +147 -0
  34. package/dist/core/agent-loop/message-builder.d.ts +13 -0
  35. package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
  36. package/dist/core/agent-loop/message-builder.js +49 -0
  37. package/dist/core/agent-loop/tool-executor.d.ts +23 -0
  38. package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
  39. package/dist/core/agent-loop/tool-executor.js +152 -0
  40. package/dist/core/agent-loop/turn-executor.d.ts +57 -0
  41. package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
  42. package/dist/core/agent-loop/turn-executor.js +124 -0
  43. package/dist/core/agent-loop/types.d.ts +141 -0
  44. package/dist/core/agent-loop/types.d.ts.map +1 -0
  45. package/dist/core/agent-loop/types.js +4 -0
  46. package/dist/core/agent-loop.d.ts +17 -0
  47. package/dist/core/agent-loop.d.ts.map +1 -0
  48. package/dist/core/agent-loop.js +16 -0
  49. package/dist/core/api-client-impl.d.ts +62 -0
  50. package/dist/core/api-client-impl.d.ts.map +1 -0
  51. package/dist/core/api-client-impl.js +479 -0
  52. package/dist/core/api-client.d.ts +6 -0
  53. package/dist/core/api-client.d.ts.map +1 -0
  54. package/dist/core/api-client.js +5 -0
  55. package/dist/core/checkpoints.d.ts +128 -0
  56. package/dist/core/checkpoints.d.ts.map +1 -0
  57. package/dist/core/checkpoints.js +438 -0
  58. package/dist/core/claude-md.d.ts +71 -0
  59. package/dist/core/claude-md.d.ts.map +1 -0
  60. package/dist/core/claude-md.js +198 -0
  61. package/dist/core/cognitive-security/hooks.d.ts +138 -0
  62. package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
  63. package/dist/core/cognitive-security/hooks.js +389 -0
  64. package/dist/core/cognitive-security/index.d.ts +751 -0
  65. package/dist/core/cognitive-security/index.d.ts.map +1 -0
  66. package/dist/core/cognitive-security/index.js +1123 -0
  67. package/dist/core/cognitive-security/middleware.d.ts +136 -0
  68. package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
  69. package/dist/core/cognitive-security/middleware.js +376 -0
  70. package/dist/core/config-loader.d.ts +127 -0
  71. package/dist/core/config-loader.d.ts.map +1 -0
  72. package/dist/core/config-loader.js +219 -0
  73. package/dist/core/context-compaction.d.ts +87 -0
  74. package/dist/core/context-compaction.d.ts.map +1 -0
  75. package/dist/core/context-compaction.js +428 -0
  76. package/dist/core/git-status.d.ts +25 -0
  77. package/dist/core/git-status.d.ts.map +1 -0
  78. package/dist/core/git-status.js +204 -0
  79. package/dist/core/image.d.ts +69 -0
  80. package/dist/core/image.d.ts.map +1 -0
  81. package/dist/core/image.js +290 -0
  82. package/dist/core/image.test.d.ts +2 -0
  83. package/dist/core/image.test.d.ts.map +1 -0
  84. package/dist/core/image.test.js +149 -0
  85. package/dist/core/models.d.ts +123 -0
  86. package/dist/core/models.d.ts.map +1 -0
  87. package/dist/core/models.js +325 -0
  88. package/dist/core/permissions.d.ts +81 -0
  89. package/dist/core/permissions.d.ts.map +1 -0
  90. package/dist/core/permissions.js +327 -0
  91. package/dist/core/retry.d.ts +25 -0
  92. package/dist/core/retry.d.ts.map +1 -0
  93. package/dist/core/retry.js +121 -0
  94. package/dist/core/session-store.d.ts +9 -0
  95. package/dist/core/session-store.d.ts.map +1 -0
  96. package/dist/core/session-store.js +10 -0
  97. package/dist/core/sessions/export.d.ts +47 -0
  98. package/dist/core/sessions/export.d.ts.map +1 -0
  99. package/dist/core/sessions/export.js +256 -0
  100. package/dist/core/sessions/index.d.ts +132 -0
  101. package/dist/core/sessions/index.d.ts.map +1 -0
  102. package/dist/core/sessions/index.js +442 -0
  103. package/dist/core/sessions/metadata.d.ts +77 -0
  104. package/dist/core/sessions/metadata.d.ts.map +1 -0
  105. package/dist/core/sessions/metadata.js +233 -0
  106. package/dist/core/sessions/persistence.d.ts +72 -0
  107. package/dist/core/sessions/persistence.d.ts.map +1 -0
  108. package/dist/core/sessions/persistence.js +201 -0
  109. package/dist/core/sessions/types.d.ts +110 -0
  110. package/dist/core/sessions/types.d.ts.map +1 -0
  111. package/dist/core/sessions/types.js +4 -0
  112. package/dist/core/stream-highlighter.d.ts +18 -0
  113. package/dist/core/stream-highlighter.d.ts.map +1 -0
  114. package/dist/core/stream-highlighter.js +916 -0
  115. package/dist/core/system-reminders.d.ts +89 -0
  116. package/dist/core/system-reminders.d.ts.map +1 -0
  117. package/dist/core/system-reminders.js +285 -0
  118. package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
  119. package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
  120. package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
  121. package/dist/ecosystem/hooks/index.d.ts +59 -0
  122. package/dist/ecosystem/hooks/index.d.ts.map +1 -0
  123. package/dist/ecosystem/hooks/index.js +294 -0
  124. package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
  125. package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
  126. package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
  127. package/dist/ecosystem/skills/index.d.ts +55 -0
  128. package/dist/ecosystem/skills/index.d.ts.map +1 -0
  129. package/dist/ecosystem/skills/index.js +258 -0
  130. package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
  131. package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
  132. package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
  133. package/dist/ecosystem/tools/index.d.ts +24 -0
  134. package/dist/ecosystem/tools/index.d.ts.map +1 -0
  135. package/dist/ecosystem/tools/index.js +1709 -0
  136. package/dist/index.d.ts +24 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +33688 -49712
  139. package/dist/interfaces/mcp/client.d.ts +40 -0
  140. package/dist/interfaces/mcp/client.d.ts.map +1 -0
  141. package/dist/interfaces/mcp/client.js +309 -0
  142. package/dist/interfaces/ui/index.d.ts +36 -0
  143. package/dist/interfaces/ui/index.d.ts.map +1 -0
  144. package/dist/interfaces/ui/index.js +61 -0
  145. package/dist/interfaces/ui/spinner.d.ts +140 -0
  146. package/dist/interfaces/ui/spinner.d.ts.map +1 -0
  147. package/dist/interfaces/ui/spinner.js +342 -0
  148. package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
  149. package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
  150. package/dist/interfaces/ui/terminal/cli/index.js +32012 -50526
  151. package/dist/interfaces/ui/terminal/native/README.md +53 -0
  152. package/dist/interfaces/ui/terminal/native/claude_code_native.darwin-x64.node +0 -0
  153. package/dist/interfaces/ui/terminal/native/claude_code_native.dylib +0 -0
  154. package/dist/interfaces/ui/terminal/native/index.d.ts +0 -0
  155. package/dist/interfaces/ui/terminal/native/index.darwin-arm64.node +0 -0
  156. package/dist/interfaces/ui/terminal/native/index.js +43 -0
  157. package/dist/interfaces/ui/terminal/native/index.node +0 -0
  158. package/dist/interfaces/ui/terminal/native/package.json +34 -0
  159. package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
  160. package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
  161. package/dist/interfaces/ui/terminal/shared/args.js +176 -0
  162. package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
  163. package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
  164. package/dist/interfaces/ui/terminal/shared/index.js +16 -0
  165. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
  166. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
  167. package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
  168. package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
  169. package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
  170. package/dist/interfaces/ui/terminal/shared/query.js +100 -0
  171. package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
  172. package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
  173. package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
  174. package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
  175. package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
  176. package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
  177. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
  178. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
  179. package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
  180. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
  181. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
  182. package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
  183. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
  184. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
  185. package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
  186. package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
  187. package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
  188. package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
  189. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
  190. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
  191. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
  192. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
  193. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
  194. package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
  195. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
  196. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
  197. package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
  198. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
  199. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
  200. package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
  201. package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
  202. package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
  203. package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
  204. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
  205. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
  206. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
  207. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
  208. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
  209. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
  210. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
  211. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
  212. package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
  213. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
  214. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
  215. package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
  216. package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
  217. package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
  218. package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
  219. package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
  220. package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
  221. package/dist/interfaces/ui/terminal/tui/console.js +46 -0
  222. package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
  223. package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
  224. package/dist/interfaces/ui/terminal/tui/index.js +28 -0
  225. package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
  226. package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
  227. package/dist/interfaces/ui/terminal/tui/run.js +31 -0
  228. package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
  229. package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
  230. package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
  231. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
  232. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
  233. package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
  234. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
  235. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
  236. package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
  237. package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
  238. package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
  239. package/dist/interfaces/ui/terminal/tui/types.js +5 -0
  240. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
  241. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
  242. package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
  243. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
  244. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
  245. package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
  246. package/dist/native/README.md +53 -0
  247. package/dist/native/claude_code_native.darwin-x64.node +0 -0
  248. package/dist/native/claude_code_native.dylib +0 -0
  249. package/dist/native/index.d.ts +0 -0
  250. package/dist/native/index.d.ts.map +1 -0
  251. package/dist/native/index.darwin-arm64.node +0 -0
  252. package/dist/native/index.js +43 -0
  253. package/dist/native/index.node +0 -0
  254. package/dist/native/package.json +34 -0
  255. package/dist/teammates/index.d.ts +161 -0
  256. package/dist/teammates/index.d.ts.map +1 -0
  257. package/dist/teammates/index.js +827 -0
  258. package/dist/types/index.d.ts +482 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +52 -0
  261. package/native/index.darwin-arm64.node +0 -0
  262. package/native/index.js +33 -19
  263. package/package.json +6 -3
  264. package/packages/src/core/__tests__/permissions.test.ts +1091 -0
  265. package/packages/src/core/agent-loop/__tests__/compaction.test.ts +283 -0
  266. package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
  267. package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
  268. package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
  269. package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
  270. package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
  271. package/packages/src/core/agent-loop/compaction.ts +92 -0
  272. package/packages/src/core/agent-loop/formatters.ts +50 -0
  273. package/packages/src/core/agent-loop/index.ts +137 -0
  274. package/packages/src/core/agent-loop/loop-state.ts +187 -0
  275. package/packages/src/core/agent-loop/message-builder.ts +62 -0
  276. package/packages/src/core/agent-loop/tool-executor.ts +211 -0
  277. package/packages/src/core/agent-loop/turn-executor.ts +226 -0
  278. package/packages/src/core/agent-loop/types.ts +152 -0
  279. package/packages/src/core/agent-loop.ts +18 -0
  280. package/packages/src/core/api-client-impl.ts +729 -0
  281. package/packages/src/core/api-client.ts +6 -0
  282. package/packages/src/core/checkpoints.ts +606 -0
  283. package/packages/src/core/claude-md.ts +272 -0
  284. package/packages/src/core/cognitive-security/hooks.ts +591 -0
  285. package/packages/src/core/cognitive-security/index.ts +2041 -0
  286. package/packages/src/core/cognitive-security/middleware.ts +536 -0
  287. package/packages/src/core/config/todo +7 -0
  288. package/packages/src/core/config-loader.ts +324 -0
  289. package/packages/src/core/context/__tests__/integration.test.ts +334 -0
  290. package/packages/src/core/context/compaction.ts +170 -0
  291. package/packages/src/core/context/constants.ts +58 -0
  292. package/packages/src/core/context/extraction.ts +85 -0
  293. package/packages/src/core/context/index.ts +66 -0
  294. package/packages/src/core/context/summarization.ts +251 -0
  295. package/packages/src/core/context/token-estimation.ts +98 -0
  296. package/packages/src/core/context/types.ts +59 -0
  297. package/packages/src/core/git-status.ts +262 -0
  298. package/packages/src/core/image.test.ts +180 -0
  299. package/packages/src/core/image.ts +350 -0
  300. package/packages/src/core/lmdb.db +0 -0
  301. package/packages/src/core/lmdb.db-lock +0 -0
  302. package/packages/src/core/models.ts +507 -0
  303. package/packages/src/core/normalizers/todo +8 -0
  304. package/packages/src/core/permissions.ts +431 -0
  305. package/packages/src/core/providers/README.md +230 -0
  306. package/packages/src/core/providers/__tests__/providers.test.ts +135 -0
  307. package/packages/src/core/providers/index.ts +419 -0
  308. package/packages/src/core/providers/types.ts +132 -0
  309. package/packages/src/core/retry.ts +180 -0
  310. package/packages/src/core/session-store.ts +36 -0
  311. package/packages/src/core/sessions/export.ts +329 -0
  312. package/packages/src/core/sessions/index.ts +587 -0
  313. package/packages/src/core/sessions/metadata.ts +309 -0
  314. package/packages/src/core/sessions/persistence.ts +244 -0
  315. package/packages/src/core/sessions/types.ts +169 -0
  316. package/packages/src/core/stream-highlighter.ts +1123 -0
  317. package/packages/src/core/system-reminders.ts +402 -0
  318. package/packages/src/core/todo +8 -0
  319. package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
  320. package/packages/src/ecosystem/hooks/index.ts +341 -0
  321. package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
  322. package/packages/src/ecosystem/skills/index.ts +295 -0
  323. package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
  324. package/packages/src/ecosystem/tools/index.ts +2051 -0
  325. package/packages/src/index.ts +141 -0
  326. package/packages/src/interfaces/mcp/client.ts +389 -0
  327. package/packages/src/interfaces/ui/index.ts +158 -0
  328. package/packages/src/interfaces/ui/lmdb.db +0 -0
  329. package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
  330. package/packages/src/interfaces/ui/spinner.ts +451 -0
  331. package/packages/src/interfaces/ui/terminal/bridge/index.ts +370 -0
  332. package/packages/src/interfaces/ui/terminal/bridge/ipc.ts +829 -0
  333. package/packages/src/interfaces/ui/terminal/bridge/screen-export.ts +968 -0
  334. package/packages/src/interfaces/ui/terminal/bridge/types.ts +226 -0
  335. package/packages/src/interfaces/ui/terminal/bridge/useBridge.ts +210 -0
  336. package/packages/src/interfaces/ui/terminal/cli/bootstrap.ts +132 -0
  337. package/packages/src/interfaces/ui/terminal/cli/index.ts +415 -0
  338. package/packages/src/interfaces/ui/terminal/cli/interactive/index.ts +110 -0
  339. package/packages/src/interfaces/ui/terminal/cli/interactive/input-handler.ts +393 -0
  340. package/packages/src/interfaces/ui/terminal/cli/interactive/interactive-runner.ts +820 -0
  341. package/packages/src/interfaces/ui/terminal/cli/interactive/message-store.ts +299 -0
  342. package/packages/src/interfaces/ui/terminal/cli/interactive/types.ts +274 -0
  343. package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
  344. package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
  345. package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
  346. package/packages/src/interfaces/ui/terminal/shared/index.ts +84 -0
  347. package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
  348. package/packages/src/interfaces/ui/terminal/shared/query.ts +152 -0
  349. package/packages/src/interfaces/ui/terminal/shared/setup.ts +299 -0
  350. package/packages/src/interfaces/ui/terminal/shared/spinner-frames.ts +73 -0
  351. package/packages/src/interfaces/ui/terminal/shared/status-line.ts +366 -0
  352. package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
  353. package/packages/src/lmdb.db +0 -0
  354. package/packages/src/lmdb.db-lock +0 -0
  355. package/packages/src/native/index.ts +2722 -0
  356. package/packages/src/native/tui_v2_types.ts +39 -0
  357. package/packages/src/teammates/coordination.test.ts +279 -0
  358. package/packages/src/teammates/coordination.ts +646 -0
  359. package/packages/src/teammates/index.ts +1052 -0
  360. package/packages/src/teammates/integration.test.ts +272 -0
  361. package/packages/src/teammates/runner.test.ts +235 -0
  362. package/packages/src/teammates/runner.ts +750 -0
  363. package/packages/src/teammates/schemas.ts +673 -0
  364. package/packages/src/types/index.ts +723 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Coder - AI-powered terminal coding assistant
3
+ * Main entry point
4
+ */
5
+
6
+ // Types
7
+ export * from "./types/index.js";
8
+
9
+ // Core
10
+ export {
11
+ createMessageStream,
12
+ calculateCost,
13
+ buildSystemPrompt,
14
+ buildCachedMessages,
15
+ calculateCacheMetrics,
16
+ } from "./core/api-client.js";
17
+ export type { StreamOptionsType as StreamOptions, StreamResultType as StreamResult } from "./core/api-client.js";
18
+ export {
19
+ agentLoop,
20
+ formatCost,
21
+ formatMetrics,
22
+ formatCostBrief,
23
+ formatCacheMetrics,
24
+ } from "./core/agent-loop.js";
25
+ export type { AgentLoopOptions, AgentLoopResult } from "./core/agent-loop.js";
26
+
27
+ // Permissions (types are re-exported via ./types/index.js)
28
+ export {
29
+ PermissionManager,
30
+ assessRiskLevel,
31
+ generateDescription,
32
+ isReadOnlyTool,
33
+ isFileEditTool,
34
+ isSystemTool,
35
+ TOOL_CATEGORIES,
36
+ } from "./core/permissions.js";
37
+
38
+ // Session Store
39
+ export {
40
+ SessionStore,
41
+ formatSessionSummary,
42
+ printSessionsList,
43
+ } from "./core/session-store.js";
44
+ export type {
45
+ SessionMetadata,
46
+ SessionMessage,
47
+ SessionToolUse,
48
+ SessionMetrics,
49
+ SessionContext,
50
+ SessionEntry,
51
+ SessionSummary,
52
+ LoadedSession,
53
+ } from "./core/session-store.js";
54
+
55
+ // Tools
56
+ export * from "./ecosystem/tools/index.js";
57
+
58
+ // MCP (renamed to avoid conflict with MCPClient type)
59
+ export { MCPClientImpl } from "./interfaces/mcp/client.js";
60
+ export { MCPClientImpl as MCPClient } from "./interfaces/mcp/client.js";
61
+
62
+ // Hooks
63
+ export * from "./ecosystem/hooks/index.js";
64
+
65
+ // Skills
66
+ export * from "./ecosystem/skills/index.js";
67
+
68
+ // Teammates
69
+ export * from "./teammates/index.js";
70
+
71
+ // Cognitive Security
72
+ export * from "./core/cognitive-security/index.js";
73
+
74
+ // Providers
75
+ export {
76
+ PROVIDERS,
77
+ getProvider,
78
+ getProviderForModel,
79
+ resolveProvider,
80
+ isProviderHealthy,
81
+ getHealthyProviders,
82
+ getNextHealthyProvider,
83
+ recordProviderSuccess,
84
+ recordProviderFailure,
85
+ getProviderHealth,
86
+ } from "./core/providers/index.js";
87
+ export type {
88
+ ProviderName,
89
+ ProviderConfig,
90
+ ProviderHealth,
91
+ ResolvedProvider,
92
+ ProviderRoutingConfig,
93
+ } from "./core/providers/index.js";
94
+
95
+ // UI Components (exclude types that are already in types/index.js)
96
+ export {
97
+ Spinner,
98
+ getSpinner,
99
+ resetSpinner,
100
+ defaultFrames,
101
+ dotFrames,
102
+ arrowFrames,
103
+ defaultTips,
104
+ toolTips,
105
+ streamingTips,
106
+ type SpinnerOptions,
107
+ type SpinnerColor,
108
+ type SpinnerState,
109
+ LoadingState,
110
+ getLoadingState,
111
+ setLoading,
112
+ stopLoading,
113
+ updateLoading,
114
+ startTool,
115
+ endTool,
116
+ type LoadingStateEvents,
117
+ type ProgressUpdate,
118
+ type ProgressCallback,
119
+ createProgressCallback,
120
+ formatElapsedTime,
121
+ formatLoadingMessage,
122
+ } from "./interfaces/ui/index.js";
123
+
124
+ // Native module (Rust)
125
+ export * from "./native/index.js";
126
+
127
+ // Context Compaction
128
+ export {
129
+ estimateTokens,
130
+ estimateMessagesTokens,
131
+ compactMessages,
132
+ needsCompaction,
133
+ summarizeMessages,
134
+ summarizeWithLLM,
135
+ getCompactionStats,
136
+ } from "./core/context/index.js";
137
+ export type {
138
+ CompactionOptions,
139
+ CompactionResult,
140
+ LLMSummarizationOptions,
141
+ } from "./core/context/index.js";
@@ -0,0 +1,389 @@
1
+ /**
2
+ * MCP Client - Model Context Protocol implementation
3
+ */
4
+
5
+ import type {
6
+ MCPServerConfig,
7
+ MCPTool,
8
+ JSONRPCRequest,
9
+ JSONRPCResponse,
10
+ JSONRPCNotification,
11
+ JSONSchema,
12
+ ToolResult,
13
+ } from "../../types/index.js";
14
+ import { spawn, type ChildProcess } from "child_process";
15
+ import WebSocket from "ws";
16
+
17
+ export interface MCPClientOptions {
18
+ name: string;
19
+ config: MCPServerConfig;
20
+ onLog?: (message: string) => void;
21
+ }
22
+
23
+ export class MCPClientImpl {
24
+ // Alias for backwards compatibility
25
+ static readonly MCPClient = MCPClientImpl;
26
+ name: string;
27
+ config: MCPServerConfig;
28
+ connected = false;
29
+ tools: MCPTool[] = [];
30
+
31
+ private process: ChildProcess | null = null;
32
+ private websocket: WebSocket | null = null;
33
+ private requestId = 0;
34
+ private pendingRequests = new Map<
35
+ string | number,
36
+ {
37
+ resolve: (value: unknown) => void;
38
+ reject: (error: Error) => void;
39
+ }
40
+ >();
41
+ private buffer = "";
42
+ private onLog?: (message: string) => void;
43
+
44
+ constructor(options: MCPClientOptions) {
45
+ this.name = options.name;
46
+ this.config = options.config;
47
+ this.onLog = options.onLog;
48
+ }
49
+
50
+ async connect(): Promise<void> {
51
+ if (this.config.type === "stdio") {
52
+ await this.connectStdio();
53
+ } else if (this.config.type === "http" || this.config.type === "sse") {
54
+ await this.connectHttp();
55
+ } else if (this.config.type === "ws") {
56
+ await this.connectWebSocket();
57
+ }
58
+ }
59
+
60
+ private async connectStdio(): Promise<void> {
61
+ if (!this.config.command) {
62
+ throw new Error("No command specified for stdio transport");
63
+ }
64
+
65
+ this.log(`Starting stdio transport: ${this.config.command}`);
66
+
67
+ this.process = spawn(this.config.command, this.config.args || [], {
68
+ env: { ...process.env, ...this.config.env },
69
+ stdio: ["pipe", "pipe", "pipe"],
70
+ });
71
+
72
+ this.process.stdout?.on("data", (data: Buffer) => {
73
+ this.handleData(data.toString());
74
+ });
75
+
76
+ this.process.stderr?.on("data", (data: Buffer) => {
77
+ this.log(`stderr: ${data.toString()}`);
78
+ });
79
+
80
+ this.process.on("error", (error: Error) => {
81
+ this.log(`Process error: ${error.message}`);
82
+ });
83
+
84
+ this.process.on("close", (code: number) => {
85
+ this.log(`Process closed with code ${code}`);
86
+ this.connected = false;
87
+ });
88
+
89
+ // Wait for process to start
90
+ await new Promise((resolve) => setTimeout(resolve, 100));
91
+
92
+ // Initialize connection
93
+ await this.initialize();
94
+ }
95
+
96
+ private async connectHttp(): Promise<void> {
97
+ if (!this.config.url) {
98
+ throw new Error("No URL specified for HTTP transport");
99
+ }
100
+
101
+ this.log(`Starting HTTP transport: ${this.config.url}`);
102
+
103
+ // For HTTP transport, we just validate the endpoint
104
+ try {
105
+ const response = await fetch(this.config.url, {
106
+ method: "POST",
107
+ headers: {
108
+ "Content-Type": "application/json",
109
+ ...this.config.headers,
110
+ },
111
+ body: JSON.stringify({
112
+ jsonrpc: "2.0",
113
+ id: 1,
114
+ method: "initialize",
115
+ params: {
116
+ protocolVersion: "2024-11-05",
117
+ capabilities: {},
118
+ clientInfo: {
119
+ name: "coder",
120
+ version: "0.1.0",
121
+ },
122
+ },
123
+ }),
124
+ });
125
+
126
+ if (!response.ok) {
127
+ throw new Error(`HTTP error: ${response.status}`);
128
+ }
129
+
130
+ const result = (await response.json()) as JSONRPCResponse;
131
+ this.connected = true;
132
+
133
+ // Get tools
134
+ await this.loadTools();
135
+ } catch (error) {
136
+ const errorMessage = error instanceof Error ? error.message : String(error);
137
+ throw new Error(`Failed to connect to HTTP server: ${errorMessage}`);
138
+ }
139
+ }
140
+
141
+ private async connectWebSocket(): Promise<void> {
142
+ if (!this.config.url) {
143
+ throw new Error("No URL specified for WebSocket transport");
144
+ }
145
+
146
+ const url = this.config.url;
147
+ this.log(`Starting WebSocket transport: ${url}`);
148
+
149
+ return new Promise((resolve, reject) => {
150
+ const headers: Record<string, string> = {
151
+ ...this.config.headers,
152
+ };
153
+
154
+ const ws = new WebSocket(url, {
155
+ headers,
156
+ handshakeTimeout: this.config.timeout || 30000,
157
+ });
158
+
159
+ ws.on("open", () => {
160
+ this.log("WebSocket connection established");
161
+ this.websocket = ws;
162
+ this.connected = true;
163
+
164
+ // Initialize the MCP connection
165
+ this.initialize()
166
+ .then(() => resolve())
167
+ .catch((error) => {
168
+ const errorMessage = error instanceof Error ? error.message : String(error);
169
+ this.log(`Initialization failed: ${errorMessage}`);
170
+ reject(error);
171
+ });
172
+ });
173
+
174
+ ws.on("message", (data: WebSocket.RawData, isBinary: boolean) => {
175
+ const message = isBinary ? data.toString() : data.toString();
176
+ this.handleData(message);
177
+ });
178
+
179
+ ws.on("error", (error: Error) => {
180
+ this.log(`WebSocket error: ${error.message}`);
181
+ if (!this.connected) {
182
+ reject(new Error(`WebSocket connection failed: ${error.message}`));
183
+ }
184
+ });
185
+
186
+ ws.on("close", (code: number, reason: Buffer) => {
187
+ this.log(`WebSocket closed: code=${code}, reason=${reason.toString()}`);
188
+ this.connected = false;
189
+ this.websocket = null;
190
+
191
+ // Reject any pending requests
192
+ for (const [id, pending] of this.pendingRequests) {
193
+ this.pendingRequests.delete(id);
194
+ pending.reject(new Error(`WebSocket closed: ${reason.toString()}`));
195
+ }
196
+ });
197
+
198
+ ws.on("ping", () => {
199
+ ws.pong();
200
+ });
201
+ });
202
+ }
203
+
204
+ private async initialize(): Promise<void> {
205
+ const result = await this.request("initialize", {
206
+ protocolVersion: "2024-11-05",
207
+ capabilities: {
208
+ tools: {},
209
+ resources: {},
210
+ prompts: {},
211
+ },
212
+ clientInfo: {
213
+ name: "coder",
214
+ version: "0.1.0",
215
+ },
216
+ });
217
+
218
+ this.log(`Initialized with: ${JSON.stringify(result)}`);
219
+ this.connected = true;
220
+
221
+ // Send initialized notification
222
+ this.notify("notifications/initialized", {});
223
+
224
+ // Load tools
225
+ await this.loadTools();
226
+ }
227
+
228
+ private async loadTools(): Promise<void> {
229
+ try {
230
+ const result = (await this.request("tools/list", {})) as {
231
+ tools: Array<{
232
+ name: string;
233
+ description: string;
234
+ inputSchema: JSONSchema;
235
+ }>;
236
+ };
237
+
238
+ this.tools = result.tools.map((tool) => ({
239
+ name: tool.name,
240
+ description: tool.description,
241
+ inputSchema: tool.inputSchema,
242
+ }));
243
+
244
+ this.log(`Loaded ${this.tools.length} tools`);
245
+ } catch (error) {
246
+ this.log(`Failed to load tools: ${error}`);
247
+ }
248
+ }
249
+
250
+ async callTool(name: string, args: Record<string, unknown>): Promise<ToolResult> {
251
+ const result = (await this.request("tools/call", {
252
+ name,
253
+ arguments: args,
254
+ })) as { content: Array<{ type: string; text?: string }> };
255
+
256
+ const text = result.content
257
+ .filter((c) => c.type === "text")
258
+ .map((c) => c.text || "")
259
+ .join("\n");
260
+
261
+ return {
262
+ content: text,
263
+ };
264
+ }
265
+
266
+ async request(method: string, params: unknown): Promise<unknown> {
267
+ const id = ++this.requestId;
268
+
269
+ const request: JSONRPCRequest = {
270
+ jsonrpc: "2.0",
271
+ id,
272
+ method,
273
+ params,
274
+ };
275
+
276
+ return new Promise((resolve, reject) => {
277
+ this.pendingRequests.set(id, { resolve, reject });
278
+
279
+ const message = JSON.stringify(request);
280
+
281
+ // Send via WebSocket or stdio depending on transport type
282
+ if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
283
+ this.websocket.send(message);
284
+ } else if (this.process?.stdin?.writable) {
285
+ this.process.stdin.write(message + "\n");
286
+ } else {
287
+ this.pendingRequests.delete(id);
288
+ reject(new Error("No active connection to send request"));
289
+ return;
290
+ }
291
+
292
+ // Timeout
293
+ setTimeout(() => {
294
+ if (this.pendingRequests.has(id)) {
295
+ this.pendingRequests.delete(id);
296
+ reject(new Error(`Request timeout for ${method}`));
297
+ }
298
+ }, this.config.timeout || 120000);
299
+ });
300
+ }
301
+
302
+ notify(method: string, params: unknown): void {
303
+ const notification: JSONRPCNotification = {
304
+ jsonrpc: "2.0",
305
+ method,
306
+ params,
307
+ };
308
+
309
+ const message = JSON.stringify(notification);
310
+
311
+ // Send via WebSocket or stdio depending on transport type
312
+ if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
313
+ this.websocket.send(message);
314
+ } else if (this.process?.stdin?.writable) {
315
+ this.process.stdin.write(message + "\n");
316
+ }
317
+ }
318
+
319
+ private handleData(data: string): void {
320
+ this.buffer += data;
321
+
322
+ const lines = this.buffer.split("\n");
323
+ this.buffer = lines.pop() || "";
324
+
325
+ for (const line of lines) {
326
+ if (!line.trim()) continue;
327
+
328
+ try {
329
+ const response = JSON.parse(line) as JSONRPCResponse;
330
+
331
+ if (response.id !== undefined) {
332
+ const pending = this.pendingRequests.get(response.id);
333
+ if (pending) {
334
+ this.pendingRequests.delete(response.id);
335
+ if (response.error) {
336
+ pending.reject(new Error(response.error.message));
337
+ } else {
338
+ pending.resolve(response.result);
339
+ }
340
+ }
341
+ }
342
+ } catch (error) {
343
+ this.log(`Parse error: ${error}`);
344
+ }
345
+ }
346
+ }
347
+
348
+ async close(): Promise<void> {
349
+ if (this.websocket) {
350
+ this.websocket.close();
351
+ this.websocket = null;
352
+ }
353
+ if (this.process) {
354
+ this.process.kill();
355
+ this.process = null;
356
+ }
357
+ this.connected = false;
358
+ }
359
+
360
+ private log(message: string): void {
361
+ this.onLog?.(`[MCP:${this.name}] ${message}`);
362
+ }
363
+ }
364
+
365
+ /**
366
+ * Create MCP clients from config
367
+ */
368
+ export async function createMCPClients(
369
+ servers: Record<string, MCPServerConfig>,
370
+ onLog?: (message: string) => void
371
+ ): Promise<Map<string, MCPClientImpl>> {
372
+ const clients = new Map<string, MCPClientImpl>();
373
+
374
+ for (const [name, config] of Object.entries(servers)) {
375
+ if (config.disabled) continue;
376
+
377
+ const client = new MCPClientImpl({ name, config, onLog });
378
+
379
+ try {
380
+ await client.connect();
381
+ clients.set(name, client);
382
+ } catch (error) {
383
+ const errorMessage = error instanceof Error ? error.message : String(error);
384
+ onLog?.(`[MCP:${name}] Failed to connect: ${errorMessage}`);
385
+ }
386
+ }
387
+
388
+ return clients;
389
+ }
@@ -0,0 +1,158 @@
1
+ /**
2
+ * UI Components for Coder CLI
3
+ */
4
+
5
+ // Spinner
6
+ export {
7
+ Spinner,
8
+ getSpinner,
9
+ resetSpinner,
10
+ defaultFrames,
11
+ dotFrames,
12
+ arrowFrames,
13
+ defaultTips,
14
+ toolTips,
15
+ streamingTips,
16
+ type SpinnerOptions,
17
+ type SpinnerColor,
18
+ type SpinnerState,
19
+ } from "./spinner.js";
20
+
21
+ // Loading State (from shared)
22
+ export {
23
+ LoadingState,
24
+ getLoadingState,
25
+ setLoading,
26
+ stopLoading,
27
+ updateLoading,
28
+ startTool,
29
+ endTool,
30
+ type LoadingPhase,
31
+ type LoadingStateData,
32
+ type LoadingStateEvents,
33
+ } from "./terminal/shared/loading-state.js";
34
+
35
+ // Status Line (from shared)
36
+ export {
37
+ VERSION,
38
+ BUILD_TIME,
39
+ renderStatusLine,
40
+ renderCompactStatusLine,
41
+ renderMinimalStatusLine,
42
+ renderFooterStatus,
43
+ renderAutoCompactWarning,
44
+ calculateContextInfo,
45
+ formatPermissionMode,
46
+ formatTokenCount,
47
+ formatContextPercent,
48
+ getContextWindow,
49
+ shouldShowAutoCompactWarning,
50
+ getModelDisplayName,
51
+ getPermissionModeDisplay,
52
+ type StatusLineOptions,
53
+ type ContextInfo,
54
+ } from "./terminal/shared/status-line.js";
55
+
56
+ // Interactive CLI (non-React, from interactive module)
57
+ export {
58
+ InteractiveRunner,
59
+ runInteractiveMode,
60
+ MessageStoreImpl,
61
+ InputManagerImpl,
62
+ KeyEvents,
63
+ InputPriority,
64
+ type InteractiveRunnerProps,
65
+ type InteractiveState,
66
+ type UIMessage,
67
+ type MessageSubType,
68
+ type MessageStore,
69
+ type InputManager,
70
+ type InputHandler,
71
+ type InputHandlerOptions,
72
+ type NativeKeyEvent,
73
+ } from "./terminal/cli/interactive/index.js";
74
+
75
+ // ============================================
76
+ // PROGRESS CALLBACK TYPES
77
+ // ============================================
78
+
79
+ /**
80
+ * Progress update for tool execution
81
+ */
82
+ export interface ProgressUpdate {
83
+ toolName: string;
84
+ status: "pending" | "running" | "complete" | "error";
85
+ message?: string;
86
+ progress?: number; // 0-100
87
+ timestamp: number;
88
+ }
89
+
90
+ /**
91
+ * Progress callback type for tool context
92
+ */
93
+ export type ProgressCallback = (update: ProgressUpdate) => void;
94
+
95
+ /**
96
+ * Create a progress callback for a specific tool
97
+ */
98
+ export function createProgressCallback(
99
+ toolName: string,
100
+ onProgress?: (message: string) => void
101
+ ): ProgressCallback {
102
+ return (update: ProgressUpdate) => {
103
+ if (onProgress) {
104
+ const message = update.message || `${update.toolName}: ${update.status}`;
105
+ onProgress(message);
106
+ }
107
+ };
108
+ }
109
+
110
+ // ============================================
111
+ // UTILITY FUNCTIONS
112
+ // ============================================
113
+
114
+ /**
115
+ * Format elapsed time for display
116
+ */
117
+ export function formatElapsedTime(ms: number): string {
118
+ if (ms < 1000) {
119
+ return `${ms}ms`;
120
+ }
121
+
122
+ const seconds = Math.floor(ms / 1000);
123
+ if (seconds < 60) {
124
+ return `${seconds}s`;
125
+ }
126
+
127
+ const minutes = Math.floor(seconds / 60);
128
+ const remainingSeconds = seconds % 60;
129
+
130
+ if (minutes < 60) {
131
+ return `${minutes}m${remainingSeconds}s`;
132
+ }
133
+
134
+ const hours = Math.floor(minutes / 60);
135
+ const remainingMinutes = minutes % 60;
136
+ return `${hours}h${remainingMinutes}m`;
137
+ }
138
+
139
+ /**
140
+ * Format a loading message with optional phase
141
+ */
142
+ export function formatLoadingMessage(
143
+ phase: string,
144
+ message?: string,
145
+ elapsedTime?: number
146
+ ): string {
147
+ let result = phase;
148
+
149
+ if (message) {
150
+ result = `${result}: ${message}`;
151
+ }
152
+
153
+ if (elapsedTime !== undefined && elapsedTime > 0) {
154
+ result = `${result} [${formatElapsedTime(elapsedTime)}]`;
155
+ }
156
+
157
+ return result;
158
+ }