@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,267 @@
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
+ import chalk from "chalk";
11
+ import { getContextWindow as getContextWindowBase, getModelDisplayName as getModelDisplayNameBase, MODEL_DISPLAY_NAMES, } from "../../../../core/models.js";
12
+ // ============================================
13
+ // VERSION INFO
14
+ // ============================================
15
+ export const VERSION = "0.2.0";
16
+ export const BUILD_TIME = new Date().toISOString();
17
+ // ============================================
18
+ // PERMISSION MODE DISPLAY
19
+ // ============================================
20
+ const permissionModeDisplay = {
21
+ default: { symbol: "○", label: "default", color: "gray" },
22
+ acceptEdits: { symbol: "●", label: "accept edits", color: "green" },
23
+ bypassPermissions: { symbol: "⏵⏵", label: "bypass permissions", color: "yellow" },
24
+ plan: { symbol: "◐", label: "plan", color: "cyan" },
25
+ dontAsk: { symbol: "■", label: "don't ask", color: "red" },
26
+ interactive: { symbol: "◉", label: "interactive", color: "blue" },
27
+ };
28
+ /**
29
+ * Get display info for a permission mode
30
+ */
31
+ export function getPermissionModeDisplay(mode) {
32
+ return permissionModeDisplay[mode] || permissionModeDisplay.default;
33
+ }
34
+ /**
35
+ * Format permission mode with cycle hint
36
+ */
37
+ export function formatPermissionMode(mode) {
38
+ const display = getPermissionModeDisplay(mode);
39
+ const colorFn = chalk[display.color] ?? chalk.gray;
40
+ // Show cycle hint only for certain modes
41
+ const cycleHint = mode === "bypassPermissions" || mode === "acceptEdits"
42
+ ? chalk.dim(" (shift+tab to cycle)")
43
+ : "";
44
+ return `${colorFn(display.symbol)} ${colorFn(display.label + " on")}${cycleHint}`;
45
+ }
46
+ /**
47
+ * Format permission mode without cycle hint (simplified)
48
+ */
49
+ function formatPermissionModeSimple(mode) {
50
+ const display = getPermissionModeDisplay(mode);
51
+ const colorFn = chalk[display.color] ?? chalk.gray;
52
+ return `${colorFn(display.symbol)} ${colorFn(display.label)}`;
53
+ }
54
+ // ============================================
55
+ // CONTEXT CALCULATIONS
56
+ // ============================================
57
+ /** Context window sizes by model */
58
+ const modelContextWindows = {
59
+ "claude-opus-4-6": 200_000,
60
+ "claude-sonnet-4-6": 200_000,
61
+ "claude-haiku-4-5-20251001": 200_000,
62
+ "claude-haiku-4-5": 200_000,
63
+ "claude-opus-4-5": 200_000,
64
+ "claude-sonnet-4-5": 200_000,
65
+ "claude-3-5-sonnet": 200_000,
66
+ "claude-3-opus": 200_000,
67
+ "claude-3-sonnet": 200_000,
68
+ "claude-3-haiku": 200_000,
69
+ "glm-5": 200_000, // GLM-5: 200K context, 128K max output
70
+ };
71
+ /** Default context window if model not found */
72
+ const DEFAULT_CONTEXT_WINDOW = 200_000;
73
+ /** Buffer percentage for auto-compact (compact when < 8% remaining) */
74
+ const AUTO_COMPACT_THRESHOLD = 0.08;
75
+ /**
76
+ * Get the context window size for a model
77
+ */
78
+ export function getContextWindow(model) {
79
+ // Check for exact match first
80
+ if (modelContextWindows[model]) {
81
+ return modelContextWindows[model];
82
+ }
83
+ // Check for partial matches (e.g., "opus" in model name)
84
+ const modelLower = model.toLowerCase();
85
+ for (const [key, value] of Object.entries(modelContextWindows)) {
86
+ if (modelLower.includes(key.split("-")[1] ?? "")) {
87
+ return value;
88
+ }
89
+ }
90
+ return DEFAULT_CONTEXT_WINDOW;
91
+ }
92
+ /**
93
+ * Calculate context information
94
+ */
95
+ export function calculateContextInfo(tokensUsed, model) {
96
+ const maxTokens = getContextWindow(model);
97
+ const remaining = maxTokens - tokensUsed;
98
+ const percentRemaining = Math.max(0, Math.min(100, (remaining / maxTokens) * 100));
99
+ return {
100
+ percentRemaining: Math.round(percentRemaining * 10) / 10,
101
+ tokenDisplay: formatTokenCount(tokensUsed),
102
+ isLow: percentRemaining < 15,
103
+ isCritical: percentRemaining < 8,
104
+ };
105
+ }
106
+ /**
107
+ * Format token count for display
108
+ */
109
+ export function formatTokenCount(tokens) {
110
+ if (tokens < 1000) {
111
+ return `${tokens} tokens`;
112
+ }
113
+ else if (tokens < 1_000_000) {
114
+ return `${(tokens / 1000).toFixed(1)}k tokens`;
115
+ }
116
+ else {
117
+ return `${(tokens / 1_000_000).toFixed(2)}M tokens`;
118
+ }
119
+ }
120
+ /**
121
+ * Format context remaining percentage
122
+ */
123
+ export function formatContextPercent(percentRemaining) {
124
+ if (percentRemaining < 5) {
125
+ return chalk.red(`${percentRemaining.toFixed(1)}%`);
126
+ }
127
+ else if (percentRemaining < 15) {
128
+ return chalk.yellow(`${percentRemaining.toFixed(1)}%`);
129
+ }
130
+ else if (percentRemaining < 30) {
131
+ return chalk.dim(`${percentRemaining.toFixed(1)}%`);
132
+ }
133
+ return chalk.dim(`${percentRemaining.toFixed(1)}%`);
134
+ }
135
+ // ============================================
136
+ // STATUS LINE RENDERING
137
+ // ============================================
138
+ /**
139
+ * Render the full status line
140
+ * Simplified format: "Context left until auto-compact: 8%, 0 tokens, ○ default"
141
+ */
142
+ export function renderStatusLine(options) {
143
+ const { tokensUsed, model, permissionMode, isLoading = false, } = options;
144
+ const contextInfo = calculateContextInfo(tokensUsed, model);
145
+ // Build status parts
146
+ const parts = [];
147
+ // 1. Context left until auto-compact (with color based on remaining %)
148
+ const contextValue = contextInfo.isCritical
149
+ ? chalk.red(`${contextInfo.percentRemaining.toFixed(0)}%`)
150
+ : contextInfo.isLow
151
+ ? chalk.yellow(`${contextInfo.percentRemaining.toFixed(0)}%`)
152
+ : `${contextInfo.percentRemaining.toFixed(0)}%`;
153
+ parts.push(`Context left until auto-compact: ${contextValue}`);
154
+ parts.push(tokensUsed === 0 ? "0 tokens" : `${tokensUsed} tokens`);
155
+ // 2. Add permission mode
156
+ parts.push(formatPermissionMode(permissionMode));
157
+ // Join with comma-space
158
+ let statusLine = parts.join(", ");
159
+ // Add loading indicator
160
+ if (isLoading) {
161
+ statusLine = `${chalk.cyan("⠋")} ${statusLine}`;
162
+ }
163
+ return statusLine;
164
+ }
165
+ /**
166
+ * Render a compact status line for narrow displays
167
+ */
168
+ export function renderCompactStatusLine(options) {
169
+ const { tokensUsed, model, isLoading = false } = options;
170
+ const contextInfo = calculateContextInfo(tokensUsed, model);
171
+ // Compact: "8% | 0 tokens"
172
+ const parts = [
173
+ formatContextPercent(contextInfo.percentRemaining),
174
+ contextInfo.tokenDisplay.split(" ")[0] ?? "0", // Just the number
175
+ ];
176
+ let line = parts.join(chalk.dim(" | "));
177
+ if (isLoading) {
178
+ line = `${chalk.cyan("⠋")} ${line}`;
179
+ }
180
+ return line;
181
+ }
182
+ /**
183
+ * Render minimal status (just context percentage)
184
+ */
185
+ export function renderMinimalStatusLine(permissionMode) {
186
+ // Just return empty or a simple indicator - permission mode no longer shown
187
+ return "";
188
+ }
189
+ // ============================================
190
+ // AUTO-COMPACT WARNING
191
+ // ============================================
192
+ /**
193
+ * Check if auto-compact warning should be shown
194
+ */
195
+ export function shouldShowAutoCompactWarning(contextInfo) {
196
+ return contextInfo.percentRemaining < 15;
197
+ }
198
+ /**
199
+ * Render auto-compact warning message
200
+ */
201
+ export function renderAutoCompactWarning(contextInfo) {
202
+ if (contextInfo.isCritical) {
203
+ return chalk.red(`\n⚠ Context critical: ${contextInfo.percentRemaining.toFixed(1)}% remaining. Auto-compact imminent.`);
204
+ }
205
+ else if (contextInfo.isLow) {
206
+ return chalk.yellow(`\n⚠ Context low: ${contextInfo.percentRemaining.toFixed(1)}% remaining.`);
207
+ }
208
+ return "";
209
+ }
210
+ // ============================================
211
+ // FOOTER STATUS
212
+ // ============================================
213
+ /**
214
+ * Render footer status line (shown at bottom of screen)
215
+ */
216
+ export function renderFooterStatus(options) {
217
+ const { permissionMode, tokensUsed, model, isLoading = false } = options;
218
+ const contextInfo = calculateContextInfo(tokensUsed, model);
219
+ const permDisplay = getPermissionModeDisplay(permissionMode);
220
+ const colorFn = chalk[permDisplay.color] ?? chalk.gray;
221
+ // Build compact footer
222
+ const contextStr = contextInfo.isCritical
223
+ ? chalk.red(`${contextInfo.percentRemaining.toFixed(0)}%`)
224
+ : contextInfo.isLow
225
+ ? chalk.yellow(`${contextInfo.percentRemaining.toFixed(0)}%`)
226
+ : chalk.dim(`${contextInfo.percentRemaining.toFixed(0)}%`);
227
+ const permStr = `${colorFn(permDisplay.symbol)} ${permDisplay.label}`;
228
+ const parts = [
229
+ `Context: ${contextStr}`,
230
+ permStr,
231
+ ];
232
+ let footer = parts.join(chalk.dim(" | "));
233
+ if (isLoading) {
234
+ footer = `${chalk.cyan("⠋")} ${footer}`;
235
+ }
236
+ return footer;
237
+ }
238
+ // ============================================
239
+ // MODEL DISPLAY
240
+ // ============================================
241
+ /**
242
+ * Get display name for a model
243
+ * Re-exports from models.ts for backwards compatibility
244
+ */
245
+ export function getModelDisplayName(model) {
246
+ return getModelDisplayNameBase(model);
247
+ }
248
+ // ============================================
249
+ // EXPORTS
250
+ // ============================================
251
+ export default {
252
+ VERSION,
253
+ BUILD_TIME,
254
+ renderStatusLine,
255
+ renderCompactStatusLine,
256
+ renderMinimalStatusLine,
257
+ renderFooterStatus,
258
+ renderAutoCompactWarning,
259
+ calculateContextInfo,
260
+ formatPermissionMode,
261
+ formatTokenCount,
262
+ formatContextPercent,
263
+ getContextWindow,
264
+ shouldShowAutoCompactWarning,
265
+ getModelDisplayName,
266
+ getPermissionModeDisplay,
267
+ };
@@ -0,0 +1,38 @@
1
+ /**
2
+ * System Prompt Building
3
+ * Shared between CLI and TUI modes
4
+ */
5
+ export interface GitStatusInfo {
6
+ branch: string;
7
+ ahead: number;
8
+ behind: number;
9
+ staged: string[];
10
+ unstaged: string[];
11
+ untracked: string[];
12
+ }
13
+ /**
14
+ * Build the default system prompt with optional git status and CLAUDE.md content
15
+ */
16
+ export declare function buildDefaultSystemPrompt(workingDirectory: string, options?: {
17
+ gitStatus?: GitStatusInfo | null;
18
+ teammateMode?: boolean;
19
+ agentId?: string;
20
+ agentName?: string;
21
+ teamName?: string;
22
+ }): Promise<string>;
23
+ /**
24
+ * Get git status for the working directory
25
+ */
26
+ export declare function fetchGitStatus(workingDirectory: string): Promise<GitStatusInfo | null>;
27
+ /**
28
+ * Build complete system prompt with all options
29
+ */
30
+ export declare function buildCompleteSystemPrompt(workingDirectory: string, options?: {
31
+ systemPrompt?: string;
32
+ appendSystemPrompt?: string;
33
+ teammateMode?: boolean;
34
+ agentId?: string;
35
+ agentName?: string;
36
+ teamName?: string;
37
+ }): Promise<string>;
38
+ //# sourceMappingURL=system-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/shared/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAO5F;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,MAAM,CAAC,CA4BjB"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * System Prompt Building
3
+ * Shared between CLI and TUI modes
4
+ */
5
+ import { loadClaudeMd, buildClaudeMdPrompt } from "../../../../core/claude-md.js";
6
+ import { getGitStatus } from "../../../../core/git-status.js";
7
+ // ============================================
8
+ // SYSTEM PROMPT BUILDER
9
+ // ============================================
10
+ /**
11
+ * Build the default system prompt with optional git status and CLAUDE.md content
12
+ */
13
+ export async function buildDefaultSystemPrompt(workingDirectory, options) {
14
+ let prompt = `You are Coder, an AI coding assistant.
15
+
16
+ You help users with software engineering tasks:
17
+ - Reading, writing, and editing code
18
+ - Running commands and scripts
19
+ - Searching and exploring codebases
20
+ - Debugging and fixing issues
21
+
22
+ Guidelines:
23
+ 1. Be helpful, direct, and thorough
24
+ 2. Explain your reasoning when asked
25
+ 3. Follow user preferences and project conventions
26
+ 4. Use tools effectively to accomplish tasks
27
+ 5. Ask clarifying questions when needed
28
+
29
+ Available tools:
30
+ - Read: Read file contents
31
+ - Write: Write new files
32
+ - Edit: Make precise edits to files
33
+ - Bash: Execute shell commands
34
+ - Glob: Find files by pattern
35
+ - Grep: Search file contents
36
+
37
+ Working directory: ${workingDirectory}`;
38
+ // Add git status information if available
39
+ if (options?.gitStatus) {
40
+ const { branch, ahead, behind, staged, unstaged, untracked } = options.gitStatus;
41
+ prompt += `\n\nGit Status:`;
42
+ prompt += `\nBranch: ${branch}`;
43
+ if (ahead > 0 || behind > 0) {
44
+ prompt += ` (${ahead} ahead, ${behind} behind)`;
45
+ }
46
+ if (staged.length > 0 || unstaged.length > 0 || untracked.length > 0) {
47
+ prompt += `\nChanges: ${staged.length} staged, ${unstaged.length} unstaged, ${untracked.length} untracked`;
48
+ }
49
+ }
50
+ // Load CLAUDE.md files
51
+ const claudeMdContent = await buildClaudeMdPrompt();
52
+ if (claudeMdContent) {
53
+ prompt += `\n\n${claudeMdContent}`;
54
+ }
55
+ // Teammate mode adjustments
56
+ if (options?.teammateMode && options.teamName) {
57
+ prompt += `\n\nYou are running as a teammate agent in the "${options.teamName}" team.`;
58
+ prompt += `\nAgent ID: ${options.agentId}`;
59
+ prompt += `\nAgent Name: ${options.agentName}`;
60
+ }
61
+ return prompt;
62
+ }
63
+ /**
64
+ * Get git status for the working directory
65
+ */
66
+ export async function fetchGitStatus(workingDirectory) {
67
+ try {
68
+ const status = await getGitStatus(workingDirectory);
69
+ return status;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ /**
76
+ * Build complete system prompt with all options
77
+ */
78
+ export async function buildCompleteSystemPrompt(workingDirectory, options) {
79
+ // Use custom system prompt if provided
80
+ if (options?.systemPrompt) {
81
+ let prompt = options.systemPrompt;
82
+ if (options.appendSystemPrompt) {
83
+ prompt += `\n\n${options.appendSystemPrompt}`;
84
+ }
85
+ return prompt;
86
+ }
87
+ // Get git status
88
+ const gitStatus = await fetchGitStatus(workingDirectory);
89
+ // Build default prompt
90
+ let prompt = await buildDefaultSystemPrompt(workingDirectory, {
91
+ gitStatus,
92
+ teammateMode: options?.teammateMode,
93
+ agentId: options?.agentId,
94
+ agentName: options?.agentName,
95
+ teamName: options?.teamName,
96
+ });
97
+ // Append additional prompt if provided
98
+ if (options?.appendSystemPrompt) {
99
+ prompt += `\n\n${options.appendSystemPrompt}`;
100
+ }
101
+ return prompt;
102
+ }
@@ -0,0 +1,39 @@
1
+ /** @jsx React.createElement */
2
+ /**
3
+ * Help Panel Component
4
+ * Displays contextual help with tabbed sections
5
+ */
6
+ import React from "react";
7
+ /**
8
+ * Help section definition
9
+ */
10
+ export interface HelpSection {
11
+ id: string;
12
+ title: string;
13
+ content: string;
14
+ }
15
+ /**
16
+ * Help panel props
17
+ */
18
+ export interface HelpPanelProps {
19
+ activeSection?: string;
20
+ onClose?: () => void;
21
+ }
22
+ /**
23
+ * Help Panel Component
24
+ */
25
+ export declare function HelpPanel({ activeSection, onClose }: HelpPanelProps): React.JSX.Element | null;
26
+ /**
27
+ * Get all help sections
28
+ */
29
+ export declare function getHelpSections(): HelpSection[];
30
+ /**
31
+ * Get help text for a specific section (for non-interactive display)
32
+ */
33
+ export declare function getHelpText(section?: string): string;
34
+ /**
35
+ * Get compact help text (single line per command)
36
+ */
37
+ export declare function getCompactHelpText(): string;
38
+ export default HelpPanel;
39
+ //# sourceMappingURL=HelpPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HelpPanel.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/tui/HelpPanel.tsx"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B;;;GAGG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAgJD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EAAE,aAAyB,EAAE,OAAO,EAAE,EAAE,cAAc,4BAwD/E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,215 @@
1
+ /** @jsx React.createElement */
2
+ /**
3
+ * Help Panel Component
4
+ * Displays contextual help with tabbed sections
5
+ */
6
+ import React, { useState, useEffect } from "react";
7
+ import { Box, Text, useStdout } from "ink";
8
+ import chalk from "chalk";
9
+ /**
10
+ * General help section - basic usage
11
+ */
12
+ const GENERAL_HELP = `
13
+ ${chalk.bold.cyan("Claude understands your codebase, makes edits with your permission,")}
14
+ ${chalk.bold.cyan("and executes commands — right from your terminal.")}
15
+
16
+ ${chalk.gray("─").repeat(60)}
17
+
18
+ ${chalk.yellow("Input Features:")}
19
+ ${chalk.green("@")} <path> ${chalk.gray("Reference files or directories")}
20
+ ${chalk.green("&")} ${chalk.gray("Run command in background")}
21
+ ${chalk.green("#")} <memory> ${chalk.gray("Add to persistent memory")}
22
+
23
+ ${chalk.yellow("Keyboard Shortcuts:")}
24
+ ${chalk.cyan("ctrl + o")} ${chalk.gray("Toggle verbose output")}
25
+ ${chalk.cyan("meta + o")} ${chalk.gray("Toggle fast mode")}
26
+ ${chalk.cyan("shift + ⏎")} ${chalk.gray("Insert newline")}
27
+ ${chalk.cyan("ctrl + c")} ${chalk.gray("Exit session")}
28
+ ${chalk.cyan("ctrl + b")} ${chalk.gray("Background task menu")}
29
+
30
+ ${chalk.gray("─").repeat(60)}
31
+
32
+ ${chalk.dim("For more help:")} ${chalk.blue.underline("https://code.claude.com/docs/en/overview")}
33
+ `;
34
+ /**
35
+ * Commands help section
36
+ */
37
+ const COMMANDS_HELP = `
38
+ ${chalk.bold.yellow("Session Commands:")}
39
+ ${chalk.green("/help")}, ${chalk.green("/?")} Show this help
40
+ ${chalk.green("/exit")}, ${chalk.green("/q")} Exit the session
41
+ ${chalk.green("/new")} Start a fresh session
42
+ ${chalk.green("/clear")} Clear conversation history
43
+ ${chalk.green("/status")} Show session status
44
+ ${chalk.green("/cost")} Show total cost
45
+
46
+ ${chalk.bold.yellow("Model Commands:")}
47
+ ${chalk.green("/model")} <name> Switch model
48
+ ${chalk.green("/models")} List available models
49
+ ${chalk.green("/tools")} List available tools
50
+
51
+ ${chalk.bold.yellow("Context Commands:")}
52
+ ${chalk.green("/compact")} Force context compaction
53
+ ${chalk.green("/export")} [fmt] Export session (json/md/jsonl)
54
+
55
+ ${chalk.bold.yellow("Session Management:")}
56
+ ${chalk.green("/resume")} [id] Resume session
57
+ ${chalk.green("/sessions")} List recent sessions
58
+ `;
59
+ /**
60
+ * Checkpoint commands help section
61
+ */
62
+ const CHECKPOINTS_HELP = `
63
+ ${chalk.bold.magenta("Checkpoint Commands:")}
64
+ ${chalk.gray("Save and restore conversation + code state")}
65
+
66
+ ${chalk.green("/checkpoint")} <label> Save checkpoint
67
+ ${chalk.green("/checkpoints")} List saved checkpoints
68
+ ${chalk.green("/restore")} <id> Restore checkpoint
69
+ ${chalk.green("/restore-chat")} <id> Restore chat only
70
+ ${chalk.green("/undo")} Go back to previous state
71
+ ${chalk.green("/redo")} Go forward
72
+ ${chalk.green("/cps-status")} Navigation status
73
+
74
+ ${chalk.gray("─").repeat(60)}
75
+
76
+ ${chalk.dim("Checkpoints capture:")}
77
+ ${chalk.gray("• Conversation history")}
78
+ ${chalk.gray("• File snapshots")}
79
+ ${chalk.gray("• Git state")}
80
+ ${chalk.gray("• Cost/tokens used")}
81
+ `;
82
+ /**
83
+ * Custom commands help section
84
+ */
85
+ const CUSTOM_HELP = `
86
+ ${chalk.bold.blue("Custom Commands & Skills:")}
87
+ ${chalk.gray("Extend Coder with your own commands")}
88
+
89
+ ${chalk.yellow("Skills:")}
90
+ ${chalk.green("/commit")} Create a git commit
91
+ ${chalk.green("/review-pr")} Review a pull request
92
+ ${chalk.green("/git")} Git workflow helper
93
+ ${chalk.green("/mcp-builder")} Build MCP servers
94
+
95
+ ${chalk.yellow("Configuration:")}
96
+ ${chalk.cyan("~/.claude/CLAUDE.md")} ${chalk.gray("Global instructions")}
97
+ ${chalk.cyan(".claude/CLAUDE.md")} ${chalk.gray("Project instructions")}
98
+ ${chalk.cyan("~/.claude.json")} ${chalk.gray("MCP servers config")}
99
+ ${chalk.cyan("~/.claude/settings.json")} ${chalk.gray("Hooks & permissions")}
100
+ ${chalk.cyan("~/.claude/keybindings.json")} ${chalk.gray("Custom keybindings")}
101
+
102
+ ${chalk.gray("─").repeat(60)}
103
+
104
+ ${chalk.dim("Create custom skills in:")} ${chalk.cyan("~/.claude/skills/")}
105
+ `;
106
+ /**
107
+ * Keybindings help section
108
+ */
109
+ const KEYBINDINGS_HELP = `
110
+ ${chalk.bold.green("Keyboard Shortcuts")}
111
+
112
+ ${chalk.yellow("Input Editing:")}
113
+ ${chalk.cyan("← →")} Move cursor
114
+ ${chalk.cyan("Home / End")} Jump to start/end
115
+ ${chalk.cyan("ctrl + a")} Jump to start
116
+ ${chalk.cyan("ctrl + e")} Jump to end
117
+ ${chalk.cyan("ctrl + u")} Clear line
118
+ ${chalk.cyan("ctrl + w")} Delete word
119
+
120
+ ${chalk.yellow("Navigation:")}
121
+ ${chalk.cyan("Page Up / Down")} Scroll messages
122
+ ${chalk.cyan("shift + ↑ ↓")} Scroll one line
123
+ ${chalk.cyan("tab")} Cycle help sections
124
+ ${chalk.cyan("← →")} Cycle sections (in help)
125
+
126
+ ${chalk.yellow("Session:")}
127
+ ${chalk.cyan("ctrl + c")} Exit session
128
+ ${chalk.cyan("ctrl + d")} Exit (alternative)
129
+ ${chalk.cyan("ctrl + b")} Background tasks
130
+
131
+ ${chalk.gray("─").repeat(60)}
132
+
133
+ ${chalk.dim("Customize:")} ${chalk.green("/keybindings")}
134
+ `;
135
+ /**
136
+ * All help sections
137
+ */
138
+ const HELP_SECTIONS = [
139
+ { id: "general", title: "general", content: GENERAL_HELP },
140
+ { id: "commands", title: "commands", content: COMMANDS_HELP },
141
+ { id: "checkpoints", title: "checkpoints", content: CHECKPOINTS_HELP },
142
+ { id: "custom", title: "custom-commands", content: CUSTOM_HELP },
143
+ { id: "keybindings", title: "keybindings", content: KEYBINDINGS_HELP },
144
+ ];
145
+ /**
146
+ * Help Panel Component
147
+ */
148
+ export function HelpPanel({ activeSection = "general", onClose }) {
149
+ const [currentSection, setCurrentSection] = useState(0);
150
+ const { stdout } = useStdout();
151
+ // Find initial section index
152
+ useEffect(() => {
153
+ const index = HELP_SECTIONS.findIndex(s => s.id === activeSection);
154
+ if (index >= 0) {
155
+ setCurrentSection(index);
156
+ }
157
+ }, [activeSection]);
158
+ const section = HELP_SECTIONS[currentSection];
159
+ if (!section)
160
+ return null;
161
+ // Build tab bar
162
+ const tabBar = HELP_SECTIONS.map((s, i) => {
163
+ const isActive = i === currentSection;
164
+ const label = s.title;
165
+ if (isActive) {
166
+ return chalk.bgCyan.black(` ${label} `);
167
+ }
168
+ return chalk.dim(` ${label} `);
169
+ }).join(chalk.gray("│"));
170
+ // Navigation hint
171
+ const navHint = chalk.dim("←/→ or tab to cycle");
172
+ return (React.createElement(Box, { flexDirection: "column", width: stdout.columns || 80 },
173
+ React.createElement(Box, null,
174
+ React.createElement(Text, null,
175
+ chalk.gray("─").repeat(3),
176
+ chalk.bold.cyan(" Coder "),
177
+ chalk.gray("v0.2.0 ─ "),
178
+ tabBar,
179
+ chalk.gray(" ─ "),
180
+ navHint,
181
+ chalk.gray("─".repeat(Math.max(0, (stdout.columns || 80) - 60))))),
182
+ React.createElement(Box, { flexDirection: "column", paddingX: 1 },
183
+ React.createElement(Text, null, section.content)),
184
+ React.createElement(Box, null,
185
+ React.createElement(Text, { dimColor: true }, chalk.gray("─").repeat(Math.min((stdout.columns || 80), 80))))));
186
+ }
187
+ /**
188
+ * Get all help sections
189
+ */
190
+ export function getHelpSections() {
191
+ return HELP_SECTIONS;
192
+ }
193
+ /**
194
+ * Get help text for a specific section (for non-interactive display)
195
+ */
196
+ export function getHelpText(section) {
197
+ if (section) {
198
+ const s = HELP_SECTIONS.find(s => s.id === section || s.title === section);
199
+ if (s)
200
+ return s.content;
201
+ }
202
+ // Return all sections combined
203
+ return HELP_SECTIONS.map(s => s.content).join("\n");
204
+ }
205
+ /**
206
+ * Get compact help text (single line per command)
207
+ */
208
+ export function getCompactHelpText() {
209
+ return `
210
+ Commands: /help /exit /new /clear /compact /model /models /tools /cost /status /resume
211
+ Checkpoints: /checkpoint /checkpoints /restore /undo /redo /cps-status
212
+ Export: /export [json|md|jsonl]
213
+ `;
214
+ }
215
+ export default HelpPanel;