@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,438 @@
1
+ /**
2
+ * TUI Commands
3
+ * Command handlers for slash commands in the TUI
4
+ */
5
+
6
+ import type { ClaudeModel, Message as ApiMessage } from "../../../../types/index.js";
7
+ import {
8
+ createCheckpoint,
9
+ registerCheckpoint,
10
+ restoreCheckpoint,
11
+ applyCheckpoint,
12
+ listCheckpoints,
13
+ undoCheckpoint,
14
+ redoCheckpoint,
15
+ getNavigationStatus,
16
+ getCheckpointSummary,
17
+ formatCheckpoint,
18
+ } from "../../../../core/checkpoints.js";
19
+ import { formatCost } from "../../../../core/api-client.js";
20
+ import type { CommandContext, UIMessage } from "./types.js";
21
+ import { VERSION as CODER_VERSION, getContextWindow } from "../shared/status-line.js";
22
+ import {
23
+ AVAILABLE_MODELS,
24
+ getContextWindow as getModelContextWindow,
25
+ getMaxOutput,
26
+ } from "../../../../core/models.js";
27
+ import { getHelpText as getSectionedHelpText, getCompactHelpText, type HelpSection } from "./HelpPanel.js";
28
+
29
+ // Debug mode state (module-level)
30
+ let debugMode = false;
31
+
32
+ /**
33
+ * Get help text for commands
34
+ * @param section - Optional section to display
35
+ */
36
+ export function getHelpText(section?: string): string {
37
+ return getSectionedHelpText(section);
38
+ }
39
+
40
+ /**
41
+ * Get all help sections
42
+ */
43
+ export function getHelpSections(): HelpSection[] {
44
+ return [
45
+ { id: "general", title: "general", content: "" },
46
+ { id: "commands", title: "commands", content: "" },
47
+ { id: "checkpoints", title: "checkpoints", content: "" },
48
+ { id: "custom", title: "custom-commands", content: "" },
49
+ { id: "keybindings", title: "keybindings", content: "" },
50
+ ];
51
+ }
52
+
53
+ /**
54
+ * Handle a slash command
55
+ * Returns true if the command was handled
56
+ */
57
+ export async function handleCommand(cmd: string, context: CommandContext): Promise<boolean> {
58
+ const parts = cmd.slice(1).split(" ");
59
+ const command = parts[0]?.toLowerCase();
60
+ const rest = parts.slice(1).join(" ");
61
+
62
+ const {
63
+ sessionId,
64
+ setSessionId,
65
+ model,
66
+ setModel,
67
+ apiMessages,
68
+ setApiMessages,
69
+ setMessages,
70
+ processedCountRef,
71
+ totalCost,
72
+ setTotalCost,
73
+ totalTokens,
74
+ setTotalTokens,
75
+ permissionMode,
76
+ tools,
77
+ workingDirectory,
78
+ sessionStore,
79
+ addSystemMessage,
80
+ messagesLength,
81
+ onExit,
82
+ exit,
83
+ setSessionSelectMode,
84
+ setSelectableSessions,
85
+ helpMode,
86
+ setHelpMode,
87
+ helpSection,
88
+ setHelpSection,
89
+ } = context;
90
+
91
+ switch (command) {
92
+ case "exit":
93
+ case "quit":
94
+ case "q":
95
+ onExit();
96
+ exit();
97
+ return true;
98
+
99
+ case "help":
100
+ case "?":
101
+ // If section specified, show that section; otherwise enter help mode
102
+ if (rest) {
103
+ addSystemMessage(getHelpText(rest));
104
+ } else {
105
+ // Enter interactive help mode
106
+ setHelpMode(true);
107
+ setHelpSection(0);
108
+ }
109
+ return true;
110
+
111
+ case "keybindings":
112
+ case "keys":
113
+ addSystemMessage(getHelpText("keybindings"));
114
+ return true;
115
+
116
+ case "clear":
117
+ setApiMessages([]);
118
+ setMessages([]);
119
+ processedCountRef.current = 0;
120
+ addSystemMessage("Conversation cleared.");
121
+ return true;
122
+
123
+ case "new":
124
+ try {
125
+ // Create a new session
126
+ const newSessionId = await sessionStore.createSession({
127
+ model,
128
+ workingDirectory,
129
+ });
130
+
131
+ // Clear all state
132
+ setSessionId(newSessionId);
133
+ setApiMessages([]);
134
+ setMessages([]);
135
+ processedCountRef.current = 0;
136
+ setTotalCost(0);
137
+ setTotalTokens(0);
138
+
139
+ addSystemMessage(`Started new session: ${newSessionId}`);
140
+ } catch (error) {
141
+ const errorMessage = error instanceof Error ? error.message : String(error);
142
+ addSystemMessage(`Failed to create new session: ${errorMessage}`);
143
+ }
144
+ return true;
145
+
146
+ case "compact":
147
+ addSystemMessage("Forcing context compaction...");
148
+ return true;
149
+
150
+ case "model":
151
+ if (rest) {
152
+ setModel(rest as ClaudeModel);
153
+ addSystemMessage(`Switched to model: ${rest}`);
154
+ } else {
155
+ addSystemMessage(`Current model: ${model}`);
156
+ }
157
+ return true;
158
+
159
+ case "tools": {
160
+ const toolList = tools.map((t) => ` ${t.name}: ${t.description.split(".")[0]}`).join("\n");
161
+ addSystemMessage(`Available tools:\n${toolList}`);
162
+ return true;
163
+ }
164
+
165
+ case "cost":
166
+ addSystemMessage(`Total cost: ${formatCost(totalCost)}`);
167
+ return true;
168
+
169
+ case "status":
170
+ case "session":
171
+ addSystemMessage(`Session Status:
172
+ ID: ${sessionId}
173
+ Model: ${model}
174
+ Messages: ${apiMessages.length}
175
+ Total cost: ${formatCost(totalCost)}
176
+ Permission mode: ${permissionMode}
177
+ Tokens: ${totalTokens}
178
+ Debug mode: ${debugMode ? "on" : "off"}`);
179
+ return true;
180
+
181
+ case "version":
182
+ case "ver":
183
+ addSystemMessage(`Coder v${CODER_VERSION}
184
+ Model: ${model}
185
+ Context: ${getContextWindow(model).toLocaleString()} tokens
186
+ Node: ${process.version}
187
+ Platform: ${process.platform} ${process.arch}`);
188
+ return true;
189
+
190
+ case "models":
191
+ const modelList = AVAILABLE_MODELS.map(
192
+ (m) => {
193
+ const contextStr = `${(m.contextWindow / 1000).toFixed(0)}k context`;
194
+ const outputStr = m.maxOutput ? `, ${(m.maxOutput / 1000).toFixed(0)}k output` : "";
195
+ return ` ${m.id.padEnd(22)} ${m.fullName} (${contextStr}${outputStr})`;
196
+ }
197
+ ).join("\n");
198
+ addSystemMessage(`Available models:\n${modelList}\n\nUse /model <id> to switch`);
199
+ return true;
200
+
201
+ case "debug":
202
+ debugMode = !debugMode;
203
+ addSystemMessage(`Debug mode: ${debugMode ? "ON" : "OFF"}`);
204
+ return true;
205
+
206
+ case "export":
207
+ try {
208
+ const format = (rest || "markdown") as "jsonl" | "json" | "markdown";
209
+ const outputPath = await sessionStore.exportSession(sessionId, format);
210
+ addSystemMessage(`Session exported to: ${outputPath}`);
211
+ } catch (error) {
212
+ const errorMessage = error instanceof Error ? error.message : String(error);
213
+ addSystemMessage(`Export failed: ${errorMessage}`);
214
+ }
215
+ return true;
216
+
217
+ case "checkpoint":
218
+ case "cp":
219
+ if (!rest) {
220
+ addSystemMessage("Usage: /checkpoint <label>\nExample: /checkpoint before-refactor");
221
+ return true;
222
+ }
223
+ try {
224
+ const checkpoint = await createCheckpoint(sessionId, apiMessages, {
225
+ label: rest,
226
+ model,
227
+ workingDirectory,
228
+ totalCost,
229
+ trackFiles: true,
230
+ });
231
+
232
+ await registerCheckpoint(sessionId, checkpoint.id);
233
+ const summary = getCheckpointSummary(checkpoint);
234
+
235
+ addSystemMessage(`✓ Checkpoint saved: ${formatCheckpoint(checkpoint)}${summary ? `\n ${summary}` : ""}`);
236
+ } catch (error) {
237
+ const errorMessage = error instanceof Error ? error.message : String(error);
238
+ addSystemMessage(`Failed to create checkpoint: ${errorMessage}`);
239
+ }
240
+ return true;
241
+
242
+ case "checkpoints":
243
+ case "cps":
244
+ try {
245
+ const checkpoints = await listCheckpoints(sessionId);
246
+ if (checkpoints.length === 0) {
247
+ addSystemMessage("No checkpoints saved.");
248
+ } else {
249
+ const list = checkpoints.map((cp) => ` ${formatCheckpoint(cp)}`).join("\n");
250
+ addSystemMessage(`Checkpoints:\n${list}`);
251
+ }
252
+ } catch (error) {
253
+ const errorMessage = error instanceof Error ? error.message : String(error);
254
+ addSystemMessage(`Failed to list checkpoints: ${errorMessage}`);
255
+ }
256
+ return true;
257
+
258
+ case "restore":
259
+ case "rollback":
260
+ case "rewind":
261
+ if (!rest) {
262
+ addSystemMessage("Usage: /restore <checkpoint-id>\nUse /checkpoints to see available checkpoints");
263
+ return true;
264
+ }
265
+ try {
266
+ const checkpointId = rest.trim();
267
+ const checkpoint = await restoreCheckpoint(sessionId, checkpointId);
268
+
269
+ if (!checkpoint) {
270
+ addSystemMessage(`Checkpoint not found: ${checkpointId}`);
271
+ return true;
272
+ }
273
+
274
+ // Apply checkpoint without files (for TUI simplicity)
275
+ const result = await applyCheckpoint(checkpoint, {
276
+ restoreFiles: false,
277
+ restoreMessages: true,
278
+ });
279
+
280
+ setApiMessages(result.messages);
281
+ processedCountRef.current = result.messages.length;
282
+ setTotalCost(checkpoint.metadata.totalCost);
283
+
284
+ addSystemMessage(`✓ Checkpoint restored: ${result.messages.length} messages (no files changed)`);
285
+ } catch (error) {
286
+ const errorMessage = error instanceof Error ? error.message : String(error);
287
+ addSystemMessage(`Failed to restore checkpoint: ${errorMessage}`);
288
+ }
289
+ return true;
290
+
291
+ case "restore-chat":
292
+ if (!rest) {
293
+ addSystemMessage("Usage: /restore-chat <checkpoint-id>");
294
+ return true;
295
+ }
296
+ try {
297
+ const checkpointId = rest.trim();
298
+ const checkpoint = await restoreCheckpoint(sessionId, checkpointId);
299
+
300
+ if (!checkpoint) {
301
+ addSystemMessage(`Checkpoint not found: ${checkpointId}`);
302
+ return true;
303
+ }
304
+
305
+ const result = await applyCheckpoint(checkpoint, {
306
+ restoreFiles: false,
307
+ restoreMessages: true,
308
+ });
309
+
310
+ setApiMessages(result.messages);
311
+ processedCountRef.current = result.messages.length;
312
+ setTotalCost(checkpoint.metadata.totalCost);
313
+
314
+ addSystemMessage(`✓ Chat restored: ${result.messages.length} messages`);
315
+ } catch (error) {
316
+ const errorMessage = error instanceof Error ? error.message : String(error);
317
+ addSystemMessage(`Failed to restore chat: ${errorMessage}`);
318
+ }
319
+ return true;
320
+
321
+ case "undo":
322
+ try {
323
+ const result = await undoCheckpoint(sessionId);
324
+
325
+ if (!result.checkpoint) {
326
+ addSystemMessage("Nothing to undo");
327
+ return true;
328
+ }
329
+
330
+ const applyResult = await applyCheckpoint(result.checkpoint, {
331
+ restoreFiles: false,
332
+ restoreMessages: true,
333
+ });
334
+
335
+ setApiMessages(applyResult.messages);
336
+ processedCountRef.current = applyResult.messages.length;
337
+ setTotalCost(result.checkpoint.metadata.totalCost);
338
+
339
+ addSystemMessage(`✓ Undone to: ${formatCheckpoint(result.checkpoint)}${result.canRedo ? "\nUse /redo to go forward" : ""}`);
340
+ } catch (error) {
341
+ const errorMessage = error instanceof Error ? error.message : String(error);
342
+ addSystemMessage(`Undo failed: ${errorMessage}`);
343
+ }
344
+ return true;
345
+
346
+ case "redo":
347
+ try {
348
+ const result = await redoCheckpoint(sessionId);
349
+
350
+ if (!result.checkpoint) {
351
+ addSystemMessage("Nothing to redo");
352
+ return true;
353
+ }
354
+
355
+ const applyResult = await applyCheckpoint(result.checkpoint, {
356
+ restoreFiles: false,
357
+ restoreMessages: true,
358
+ });
359
+
360
+ setApiMessages(applyResult.messages);
361
+ processedCountRef.current = applyResult.messages.length;
362
+ setTotalCost(result.checkpoint.metadata.totalCost);
363
+
364
+ addSystemMessage(`✓ Redone to: ${formatCheckpoint(result.checkpoint)}`);
365
+ } catch (error) {
366
+ const errorMessage = error instanceof Error ? error.message : String(error);
367
+ addSystemMessage(`Redo failed: ${errorMessage}`);
368
+ }
369
+ return true;
370
+
371
+ case "checkpoint-status":
372
+ case "cps-status":
373
+ try {
374
+ const status = await getNavigationStatus(sessionId);
375
+ addSystemMessage(`Checkpoint Navigation:
376
+ Position: ${status.current}/${status.total}
377
+ Can undo: ${status.canUndo ? "yes" : "no"}
378
+ Can redo: ${status.canRedo ? "yes" : "no"}
379
+ Current: ${status.currentId || "none"}`);
380
+ } catch (error) {
381
+ const errorMessage = error instanceof Error ? error.message : String(error);
382
+ addSystemMessage(`Failed to get status: ${errorMessage}`);
383
+ }
384
+ return true;
385
+
386
+ case "sessions":
387
+ case "resume": {
388
+ try {
389
+ // If ID provided directly, try to resume
390
+ if (rest) {
391
+ const loaded = await sessionStore.resumeSession(rest.trim());
392
+ if (loaded) {
393
+ setApiMessages(loaded.messages);
394
+ processedCountRef.current = loaded.messages.length;
395
+ setMessages([]); // Clear UI messages, will be rebuilt from apiMessages
396
+ const loadedModel = loaded.metadata?.model as ClaudeModel | undefined;
397
+ if (loadedModel) setModel(loadedModel);
398
+ const loadedCost = loaded.metadata?.totalCost as number | undefined;
399
+ if (typeof loadedCost === "number") setTotalCost(loadedCost);
400
+ const loadedTokens = loaded.metadata?.totalTokens as number | undefined;
401
+ if (typeof loadedTokens === "number") setTotalTokens(loadedTokens);
402
+ addSystemMessage(`Resumed session: ${rest.trim()} (${loaded.messages.length} messages)`);
403
+ } else {
404
+ addSystemMessage(`Session not found: ${rest.trim()}`);
405
+ }
406
+ return true;
407
+ }
408
+
409
+ // Otherwise, list sessions with numbers for selection
410
+ const sessions = await sessionStore.listSessions(15);
411
+ if (sessions.length === 0) {
412
+ addSystemMessage("No recent sessions found.");
413
+ } else {
414
+ // Store sessions for selection
415
+ setSelectableSessions(sessions);
416
+ setSessionSelectMode(true);
417
+
418
+ const list = sessions.map((s, i) => {
419
+ const id = s.id || "unknown";
420
+ const model = (s.metadata as Record<string, unknown>)?.model || "unknown";
421
+ const msgs = s.messageCount || 0;
422
+ const date = s.lastActivity ? new Date(s.lastActivity).toLocaleDateString() : "unknown";
423
+ return ` ${String(i + 1).padStart(2)}. ${String(id).slice(0, 8)} ${String(model).padEnd(20)} ${String(msgs).padStart(3)} msgs ${date}`;
424
+ }).join("\n");
425
+ addSystemMessage(`Select a session to resume:\n${list}\n\nType the number (1-${sessions.length}) to resume, or any other key to cancel.`);
426
+ }
427
+ } catch (error) {
428
+ const errorMessage = error instanceof Error ? error.message : String(error);
429
+ addSystemMessage(`Failed to list sessions: ${errorMessage}`);
430
+ }
431
+ return true;
432
+ }
433
+
434
+ default:
435
+ addSystemMessage(`Unknown command: /${command}\nType /help for available commands.`);
436
+ return true;
437
+ }
438
+ }