@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,358 @@
1
+ /**
2
+ * Status Line Component for Coder CLI
3
+ *
4
+ * Displays:
5
+ * - Context left until auto-compact (%)
6
+ * - Token count
7
+ * - Permission mode (with cycle hint)
8
+ * - Version number
9
+ */
10
+
11
+ import chalk from "chalk";
12
+ import type { PermissionMode } from "../../../../types/index.js";
13
+ import {
14
+ getContextWindow as getContextWindowBase,
15
+ getModelDisplayName as getModelDisplayNameBase,
16
+ MODEL_DISPLAY_NAMES,
17
+ } from "../../../../core/models.js";
18
+
19
+ // ============================================
20
+ // VERSION INFO
21
+ // ============================================
22
+
23
+ export const VERSION = "0.2.0";
24
+ export const BUILD_TIME = new Date().toISOString();
25
+
26
+ // ============================================
27
+ // TYPES
28
+ // ============================================
29
+
30
+ export interface StatusLineOptions {
31
+ /** Current permission mode */
32
+ permissionMode: PermissionMode;
33
+ /** Total tokens used in context */
34
+ tokensUsed: number;
35
+ /** Maximum context tokens */
36
+ maxTokens: number;
37
+ /** Current model */
38
+ model: string;
39
+ /** Is loading/spinning */
40
+ isLoading?: boolean;
41
+ /** Is in plan mode */
42
+ isPlanMode?: boolean;
43
+ /** Show verbose status */
44
+ verbose?: boolean;
45
+ /** Terminal width */
46
+ terminalWidth?: number;
47
+ }
48
+
49
+ export interface ContextInfo {
50
+ /** Percentage of context remaining (0-100) */
51
+ percentRemaining: number;
52
+ /** Human-readable token count */
53
+ tokenDisplay: string;
54
+ /** Whether auto-compact is imminent (< 10%) */
55
+ isLow: boolean;
56
+ /** Whether context is critical (< 5%) */
57
+ isCritical: boolean;
58
+ }
59
+
60
+ // ============================================
61
+ // PERMISSION MODE DISPLAY
62
+ // ============================================
63
+
64
+ const permissionModeDisplay: Record<PermissionMode, { symbol: string; label: string; color: string }> = {
65
+ default: { symbol: "○", label: "default", color: "gray" },
66
+ acceptEdits: { symbol: "●", label: "accept edits", color: "green" },
67
+ bypassPermissions: { symbol: "⏵⏵", label: "bypass permissions", color: "yellow" },
68
+ plan: { symbol: "◐", label: "plan", color: "cyan" },
69
+ dontAsk: { symbol: "■", label: "don't ask", color: "red" },
70
+ interactive: { symbol: "◉", label: "interactive", color: "blue" },
71
+ };
72
+
73
+ /**
74
+ * Get display info for a permission mode
75
+ */
76
+ export function getPermissionModeDisplay(mode: PermissionMode): { symbol: string; label: string; color: string } {
77
+ return permissionModeDisplay[mode] || permissionModeDisplay.default;
78
+ }
79
+
80
+ /**
81
+ * Format permission mode with cycle hint
82
+ */
83
+ export function formatPermissionMode(mode: PermissionMode): string {
84
+ const display = getPermissionModeDisplay(mode);
85
+ const colorFn = ((chalk as unknown) as Record<string, unknown>)[display.color] as ((s: string) => string) | undefined ?? chalk.gray;
86
+
87
+ // Show cycle hint only for certain modes
88
+ const cycleHint = mode === "bypassPermissions" || mode === "acceptEdits"
89
+ ? chalk.dim(" (shift+tab to cycle)")
90
+ : "";
91
+
92
+ return `${colorFn(display.symbol)} ${colorFn(display.label + " on")}${cycleHint}`;
93
+ }
94
+
95
+ /**
96
+ * Format permission mode without cycle hint (simplified)
97
+ */
98
+ function formatPermissionModeSimple(mode: PermissionMode): string {
99
+ const display = getPermissionModeDisplay(mode);
100
+ const colorFn = ((chalk as unknown) as Record<string, unknown>)[display.color] as ((s: string) => string) | undefined ?? chalk.gray;
101
+ return `${colorFn(display.symbol)} ${colorFn(display.label)}`;
102
+ }
103
+
104
+ // ============================================
105
+ // CONTEXT CALCULATIONS
106
+ // ============================================
107
+
108
+ /** Context window sizes by model */
109
+ const modelContextWindows: Record<string, number> = {
110
+ "claude-opus-4-6": 200_000,
111
+ "claude-sonnet-4-6": 200_000,
112
+ "claude-haiku-4-5-20251001": 200_000,
113
+ "claude-haiku-4-5": 200_000,
114
+ "claude-opus-4-5": 200_000,
115
+ "claude-sonnet-4-5": 200_000,
116
+ "claude-3-5-sonnet": 200_000,
117
+ "claude-3-opus": 200_000,
118
+ "claude-3-sonnet": 200_000,
119
+ "claude-3-haiku": 200_000,
120
+ "glm-5": 200_000, // GLM-5: 200K context, 128K max output
121
+ };
122
+
123
+ /** Default context window if model not found */
124
+ const DEFAULT_CONTEXT_WINDOW = 200_000;
125
+
126
+ /** Buffer percentage for auto-compact (compact when < 8% remaining) */
127
+ const AUTO_COMPACT_THRESHOLD = 0.08;
128
+
129
+ /**
130
+ * Get the context window size for a model
131
+ */
132
+ export function getContextWindow(model: string): number {
133
+ // Check for exact match first
134
+ if (modelContextWindows[model]) {
135
+ return modelContextWindows[model];
136
+ }
137
+
138
+ // Check for partial matches (e.g., "opus" in model name)
139
+ const modelLower = model.toLowerCase();
140
+ for (const [key, value] of Object.entries(modelContextWindows)) {
141
+ if (modelLower.includes(key.split("-")[1] ?? "")) {
142
+ return value;
143
+ }
144
+ }
145
+
146
+ return DEFAULT_CONTEXT_WINDOW;
147
+ }
148
+
149
+ /**
150
+ * Calculate context information
151
+ */
152
+ export function calculateContextInfo(tokensUsed: number, model: string): ContextInfo {
153
+ const maxTokens = getContextWindow(model);
154
+ const remaining = maxTokens - tokensUsed;
155
+ const percentRemaining = Math.max(0, Math.min(100, (remaining / maxTokens) * 100));
156
+
157
+ return {
158
+ percentRemaining: Math.round(percentRemaining * 10) / 10,
159
+ tokenDisplay: formatTokenCount(tokensUsed),
160
+ isLow: percentRemaining < 15,
161
+ isCritical: percentRemaining < 8,
162
+ };
163
+ }
164
+
165
+ /**
166
+ * Format token count for display
167
+ */
168
+ export function formatTokenCount(tokens: number): string {
169
+ if (tokens < 1000) {
170
+ return `${tokens} tokens`;
171
+ } else if (tokens < 1_000_000) {
172
+ return `${(tokens / 1000).toFixed(1)}k tokens`;
173
+ } else {
174
+ return `${(tokens / 1_000_000).toFixed(2)}M tokens`;
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Format context remaining percentage
180
+ */
181
+ export function formatContextPercent(percentRemaining: number): string {
182
+ if (percentRemaining < 5) {
183
+ return chalk.red(`${percentRemaining.toFixed(1)}%`);
184
+ } else if (percentRemaining < 15) {
185
+ return chalk.yellow(`${percentRemaining.toFixed(1)}%`);
186
+ } else if (percentRemaining < 30) {
187
+ return chalk.dim(`${percentRemaining.toFixed(1)}%`);
188
+ }
189
+ return chalk.dim(`${percentRemaining.toFixed(1)}%`);
190
+ }
191
+
192
+ // ============================================
193
+ // STATUS LINE RENDERING
194
+ // ============================================
195
+
196
+ /**
197
+ * Render the full status line
198
+ * Simplified format: "Context left until auto-compact: 8%, 0 tokens, ○ default"
199
+ */
200
+ export function renderStatusLine(options: StatusLineOptions): string {
201
+ const {
202
+ tokensUsed,
203
+ model,
204
+ permissionMode,
205
+ isLoading = false,
206
+ } = options;
207
+
208
+ const contextInfo = calculateContextInfo(tokensUsed, model);
209
+
210
+ // Build status parts
211
+ const parts: string[] = [];
212
+
213
+ // 1. Context left until auto-compact (with color based on remaining %)
214
+ const contextValue = contextInfo.isCritical
215
+ ? chalk.red(`${contextInfo.percentRemaining.toFixed(0)}%`)
216
+ : contextInfo.isLow
217
+ ? chalk.yellow(`${contextInfo.percentRemaining.toFixed(0)}%`)
218
+ : `${contextInfo.percentRemaining.toFixed(0)}%`;
219
+
220
+ parts.push(`Context left until auto-compact: ${contextValue}`);
221
+ parts.push(tokensUsed === 0 ? "0 tokens" : `${tokensUsed} tokens`);
222
+
223
+ // 2. Add permission mode
224
+ parts.push(formatPermissionMode(permissionMode));
225
+
226
+ // Join with comma-space
227
+ let statusLine = parts.join(", ");
228
+
229
+ // Add loading indicator
230
+ if (isLoading) {
231
+ statusLine = `${chalk.cyan("⠋")} ${statusLine}`;
232
+ }
233
+
234
+ return statusLine;
235
+ }
236
+
237
+ /**
238
+ * Render a compact status line for narrow displays
239
+ */
240
+ export function renderCompactStatusLine(options: StatusLineOptions): string {
241
+ const { tokensUsed, model, isLoading = false } = options;
242
+ const contextInfo = calculateContextInfo(tokensUsed, model);
243
+
244
+ // Compact: "8% | 0 tokens"
245
+ const parts = [
246
+ formatContextPercent(contextInfo.percentRemaining),
247
+ contextInfo.tokenDisplay.split(" ")[0] ?? "0", // Just the number
248
+ ];
249
+
250
+ let line = parts.join(chalk.dim(" | "));
251
+
252
+ if (isLoading) {
253
+ line = `${chalk.cyan("⠋")} ${line}`;
254
+ }
255
+
256
+ return line;
257
+ }
258
+
259
+ /**
260
+ * Render minimal status (just context percentage)
261
+ */
262
+ export function renderMinimalStatusLine(permissionMode: PermissionMode): string {
263
+ // Just return empty or a simple indicator - permission mode no longer shown
264
+ return "";
265
+ }
266
+
267
+ // ============================================
268
+ // AUTO-COMPACT WARNING
269
+ // ============================================
270
+
271
+ /**
272
+ * Check if auto-compact warning should be shown
273
+ */
274
+ export function shouldShowAutoCompactWarning(contextInfo: ContextInfo): boolean {
275
+ return contextInfo.percentRemaining < 15;
276
+ }
277
+
278
+ /**
279
+ * Render auto-compact warning message
280
+ */
281
+ export function renderAutoCompactWarning(contextInfo: ContextInfo): string {
282
+ if (contextInfo.isCritical) {
283
+ return chalk.red(`\n⚠ Context critical: ${contextInfo.percentRemaining.toFixed(1)}% remaining. Auto-compact imminent.`);
284
+ } else if (contextInfo.isLow) {
285
+ return chalk.yellow(`\n⚠ Context low: ${contextInfo.percentRemaining.toFixed(1)}% remaining.`);
286
+ }
287
+ return "";
288
+ }
289
+
290
+ // ============================================
291
+ // FOOTER STATUS
292
+ // ============================================
293
+
294
+ /**
295
+ * Render footer status line (shown at bottom of screen)
296
+ */
297
+ export function renderFooterStatus(options: StatusLineOptions): string {
298
+ const { permissionMode, tokensUsed, model, isLoading = false } = options;
299
+ const contextInfo = calculateContextInfo(tokensUsed, model);
300
+ const permDisplay = getPermissionModeDisplay(permissionMode);
301
+ const colorFn = ((chalk as unknown) as Record<string, unknown>)[permDisplay.color] as ((s: string) => string) | undefined ?? chalk.gray;
302
+
303
+ // Build compact footer
304
+ const contextStr = contextInfo.isCritical
305
+ ? chalk.red(`${contextInfo.percentRemaining.toFixed(0)}%`)
306
+ : contextInfo.isLow
307
+ ? chalk.yellow(`${contextInfo.percentRemaining.toFixed(0)}%`)
308
+ : chalk.dim(`${contextInfo.percentRemaining.toFixed(0)}%`);
309
+
310
+ const permStr = `${colorFn(permDisplay.symbol)} ${permDisplay.label}`;
311
+
312
+ const parts = [
313
+ `Context: ${contextStr}`,
314
+ permStr,
315
+ ];
316
+
317
+ let footer = parts.join(chalk.dim(" | "));
318
+
319
+ if (isLoading) {
320
+ footer = `${chalk.cyan("⠋")} ${footer}`;
321
+ }
322
+
323
+ return footer;
324
+ }
325
+
326
+ // ============================================
327
+ // MODEL DISPLAY
328
+ // ============================================
329
+
330
+ /**
331
+ * Get display name for a model
332
+ * Re-exports from models.ts for backwards compatibility
333
+ */
334
+ export function getModelDisplayName(model: string): string {
335
+ return getModelDisplayNameBase(model);
336
+ }
337
+
338
+ // ============================================
339
+ // EXPORTS
340
+ // ============================================
341
+
342
+ export default {
343
+ VERSION,
344
+ BUILD_TIME,
345
+ renderStatusLine,
346
+ renderCompactStatusLine,
347
+ renderMinimalStatusLine,
348
+ renderFooterStatus,
349
+ renderAutoCompactWarning,
350
+ calculateContextInfo,
351
+ formatPermissionMode,
352
+ formatTokenCount,
353
+ formatContextPercent,
354
+ getContextWindow,
355
+ shouldShowAutoCompactWarning,
356
+ getModelDisplayName,
357
+ getPermissionModeDisplay,
358
+ };
@@ -0,0 +1,146 @@
1
+ /**
2
+ * System Prompt Building
3
+ * Shared between CLI and TUI modes
4
+ */
5
+
6
+ import { loadClaudeMd, buildClaudeMdPrompt } from "../../../../core/claude-md.js";
7
+ import { getGitStatus } from "../../../../core/git-status.js";
8
+
9
+ // ============================================
10
+ // GIT STATUS TYPE
11
+ // ============================================
12
+
13
+ export interface GitStatusInfo {
14
+ branch: string;
15
+ ahead: number;
16
+ behind: number;
17
+ staged: string[];
18
+ unstaged: string[];
19
+ untracked: string[];
20
+ }
21
+
22
+ // ============================================
23
+ // SYSTEM PROMPT BUILDER
24
+ // ============================================
25
+
26
+ /**
27
+ * Build the default system prompt with optional git status and CLAUDE.md content
28
+ */
29
+ export async function buildDefaultSystemPrompt(
30
+ workingDirectory: string,
31
+ options?: {
32
+ gitStatus?: GitStatusInfo | null;
33
+ teammateMode?: boolean;
34
+ agentId?: string;
35
+ agentName?: string;
36
+ teamName?: string;
37
+ }
38
+ ): Promise<string> {
39
+ let prompt = `You are Coder, an AI coding assistant.
40
+
41
+ You help users with software engineering tasks:
42
+ - Reading, writing, and editing code
43
+ - Running commands and scripts
44
+ - Searching and exploring codebases
45
+ - Debugging and fixing issues
46
+
47
+ Guidelines:
48
+ 1. Be helpful, direct, and thorough
49
+ 2. Explain your reasoning when asked
50
+ 3. Follow user preferences and project conventions
51
+ 4. Use tools effectively to accomplish tasks
52
+ 5. Ask clarifying questions when needed
53
+
54
+ Available tools:
55
+ - Read: Read file contents
56
+ - Write: Write new files
57
+ - Edit: Make precise edits to files
58
+ - Bash: Execute shell commands
59
+ - Glob: Find files by pattern
60
+ - Grep: Search file contents
61
+
62
+ Working directory: ${workingDirectory}`;
63
+
64
+ // Add git status information if available
65
+ if (options?.gitStatus) {
66
+ const { branch, ahead, behind, staged, unstaged, untracked } = options.gitStatus;
67
+ prompt += `\n\nGit Status:`;
68
+ prompt += `\nBranch: ${branch}`;
69
+ if (ahead > 0 || behind > 0) {
70
+ prompt += ` (${ahead} ahead, ${behind} behind)`;
71
+ }
72
+ if (staged.length > 0 || unstaged.length > 0 || untracked.length > 0) {
73
+ prompt += `\nChanges: ${staged.length} staged, ${unstaged.length} unstaged, ${untracked.length} untracked`;
74
+ }
75
+ }
76
+
77
+ // Load CLAUDE.md files
78
+ const claudeMdContent = await buildClaudeMdPrompt();
79
+ if (claudeMdContent) {
80
+ prompt += `\n\n${claudeMdContent}`;
81
+ }
82
+
83
+ // Teammate mode adjustments
84
+ if (options?.teammateMode && options.teamName) {
85
+ prompt += `\n\nYou are running as a teammate agent in the "${options.teamName}" team.`;
86
+ prompt += `\nAgent ID: ${options.agentId}`;
87
+ prompt += `\nAgent Name: ${options.agentName}`;
88
+ }
89
+
90
+ return prompt;
91
+ }
92
+
93
+ /**
94
+ * Get git status for the working directory
95
+ */
96
+ export async function fetchGitStatus(workingDirectory: string): Promise<GitStatusInfo | null> {
97
+ try {
98
+ const status = await getGitStatus(workingDirectory);
99
+ return status;
100
+ } catch {
101
+ return null;
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Build complete system prompt with all options
107
+ */
108
+ export async function buildCompleteSystemPrompt(
109
+ workingDirectory: string,
110
+ options?: {
111
+ systemPrompt?: string;
112
+ appendSystemPrompt?: string;
113
+ teammateMode?: boolean;
114
+ agentId?: string;
115
+ agentName?: string;
116
+ teamName?: string;
117
+ }
118
+ ): Promise<string> {
119
+ // Use custom system prompt if provided
120
+ if (options?.systemPrompt) {
121
+ let prompt = options.systemPrompt;
122
+ if (options.appendSystemPrompt) {
123
+ prompt += `\n\n${options.appendSystemPrompt}`;
124
+ }
125
+ return prompt;
126
+ }
127
+
128
+ // Get git status
129
+ const gitStatus = await fetchGitStatus(workingDirectory);
130
+
131
+ // Build default prompt
132
+ let prompt = await buildDefaultSystemPrompt(workingDirectory, {
133
+ gitStatus,
134
+ teammateMode: options?.teammateMode,
135
+ agentId: options?.agentId,
136
+ agentName: options?.agentName,
137
+ teamName: options?.teamName,
138
+ });
139
+
140
+ // Append additional prompt if provided
141
+ if (options?.appendSystemPrompt) {
142
+ prompt += `\n\n${options.appendSystemPrompt}`;
143
+ }
144
+
145
+ return prompt;
146
+ }