@ebowwa/coder 0.7.63 → 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 (341) hide show
  1. package/dist/core/__tests__/permissions.test.d.ts +12 -0
  2. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  3. package/dist/core/__tests__/permissions.test.js +851 -0
  4. package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
  5. package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
  6. package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
  7. package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
  8. package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
  9. package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
  10. package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
  11. package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
  12. package/dist/core/agent-loop/__tests__/index.test.js +121 -0
  13. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
  14. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
  15. package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
  16. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
  17. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
  18. package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
  19. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
  20. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
  21. package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
  22. package/dist/core/agent-loop/compaction.d.ts +39 -0
  23. package/dist/core/agent-loop/compaction.d.ts.map +1 -0
  24. package/dist/core/agent-loop/compaction.js +51 -0
  25. package/dist/core/agent-loop/formatters.d.ts +21 -0
  26. package/dist/core/agent-loop/formatters.d.ts.map +1 -0
  27. package/dist/core/agent-loop/formatters.js +42 -0
  28. package/dist/core/agent-loop/index.d.ts +25 -0
  29. package/dist/core/agent-loop/index.d.ts.map +1 -0
  30. package/dist/core/agent-loop/index.js +83 -0
  31. package/dist/core/agent-loop/loop-state.d.ts +74 -0
  32. package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
  33. package/dist/core/agent-loop/loop-state.js +147 -0
  34. package/dist/core/agent-loop/message-builder.d.ts +13 -0
  35. package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
  36. package/dist/core/agent-loop/message-builder.js +49 -0
  37. package/dist/core/agent-loop/tool-executor.d.ts +23 -0
  38. package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
  39. package/dist/core/agent-loop/tool-executor.js +152 -0
  40. package/dist/core/agent-loop/turn-executor.d.ts +57 -0
  41. package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
  42. package/dist/core/agent-loop/turn-executor.js +124 -0
  43. package/dist/core/agent-loop/types.d.ts +141 -0
  44. package/dist/core/agent-loop/types.d.ts.map +1 -0
  45. package/dist/core/agent-loop/types.js +4 -0
  46. package/dist/core/agent-loop.d.ts +17 -0
  47. package/dist/core/agent-loop.d.ts.map +1 -0
  48. package/dist/core/agent-loop.js +16 -0
  49. package/dist/core/api-client-impl.d.ts +62 -0
  50. package/dist/core/api-client-impl.d.ts.map +1 -0
  51. package/dist/core/api-client-impl.js +479 -0
  52. package/dist/core/api-client.d.ts +6 -0
  53. package/dist/core/api-client.d.ts.map +1 -0
  54. package/dist/core/api-client.js +5 -0
  55. package/dist/core/checkpoints.d.ts +128 -0
  56. package/dist/core/checkpoints.d.ts.map +1 -0
  57. package/dist/core/checkpoints.js +438 -0
  58. package/dist/core/claude-md.d.ts +71 -0
  59. package/dist/core/claude-md.d.ts.map +1 -0
  60. package/dist/core/claude-md.js +198 -0
  61. package/dist/core/cognitive-security/hooks.d.ts +138 -0
  62. package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
  63. package/dist/core/cognitive-security/hooks.js +389 -0
  64. package/dist/core/cognitive-security/index.d.ts +751 -0
  65. package/dist/core/cognitive-security/index.d.ts.map +1 -0
  66. package/dist/core/cognitive-security/index.js +1123 -0
  67. package/dist/core/cognitive-security/middleware.d.ts +136 -0
  68. package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
  69. package/dist/core/cognitive-security/middleware.js +376 -0
  70. package/dist/core/config-loader.d.ts +127 -0
  71. package/dist/core/config-loader.d.ts.map +1 -0
  72. package/dist/core/config-loader.js +219 -0
  73. package/dist/core/context-compaction.d.ts +87 -0
  74. package/dist/core/context-compaction.d.ts.map +1 -0
  75. package/dist/core/context-compaction.js +428 -0
  76. package/dist/core/git-status.d.ts +25 -0
  77. package/dist/core/git-status.d.ts.map +1 -0
  78. package/dist/core/git-status.js +204 -0
  79. package/dist/core/image.d.ts +69 -0
  80. package/dist/core/image.d.ts.map +1 -0
  81. package/dist/core/image.js +290 -0
  82. package/dist/core/image.test.d.ts +2 -0
  83. package/dist/core/image.test.d.ts.map +1 -0
  84. package/dist/core/image.test.js +149 -0
  85. package/dist/core/models.d.ts +123 -0
  86. package/dist/core/models.d.ts.map +1 -0
  87. package/dist/core/models.js +325 -0
  88. package/dist/core/permissions.d.ts +81 -0
  89. package/dist/core/permissions.d.ts.map +1 -0
  90. package/dist/core/permissions.js +327 -0
  91. package/dist/core/retry.d.ts +25 -0
  92. package/dist/core/retry.d.ts.map +1 -0
  93. package/dist/core/retry.js +121 -0
  94. package/dist/core/session-store.d.ts +9 -0
  95. package/dist/core/session-store.d.ts.map +1 -0
  96. package/dist/core/session-store.js +10 -0
  97. package/dist/core/sessions/export.d.ts +47 -0
  98. package/dist/core/sessions/export.d.ts.map +1 -0
  99. package/dist/core/sessions/export.js +256 -0
  100. package/dist/core/sessions/index.d.ts +132 -0
  101. package/dist/core/sessions/index.d.ts.map +1 -0
  102. package/dist/core/sessions/index.js +442 -0
  103. package/dist/core/sessions/metadata.d.ts +77 -0
  104. package/dist/core/sessions/metadata.d.ts.map +1 -0
  105. package/dist/core/sessions/metadata.js +233 -0
  106. package/dist/core/sessions/persistence.d.ts +72 -0
  107. package/dist/core/sessions/persistence.d.ts.map +1 -0
  108. package/dist/core/sessions/persistence.js +201 -0
  109. package/dist/core/sessions/types.d.ts +110 -0
  110. package/dist/core/sessions/types.d.ts.map +1 -0
  111. package/dist/core/sessions/types.js +4 -0
  112. package/dist/core/stream-highlighter.d.ts +18 -0
  113. package/dist/core/stream-highlighter.d.ts.map +1 -0
  114. package/dist/core/stream-highlighter.js +916 -0
  115. package/dist/core/system-reminders.d.ts +89 -0
  116. package/dist/core/system-reminders.d.ts.map +1 -0
  117. package/dist/core/system-reminders.js +285 -0
  118. package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
  119. package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
  120. package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
  121. package/dist/ecosystem/hooks/index.d.ts +59 -0
  122. package/dist/ecosystem/hooks/index.d.ts.map +1 -0
  123. package/dist/ecosystem/hooks/index.js +294 -0
  124. package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
  125. package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
  126. package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
  127. package/dist/ecosystem/skills/index.d.ts +55 -0
  128. package/dist/ecosystem/skills/index.d.ts.map +1 -0
  129. package/dist/ecosystem/skills/index.js +258 -0
  130. package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
  131. package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
  132. package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
  133. package/dist/ecosystem/tools/index.d.ts +24 -0
  134. package/dist/ecosystem/tools/index.d.ts.map +1 -0
  135. package/dist/ecosystem/tools/index.js +1709 -0
  136. package/dist/index.d.ts +24 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +32 -52192
  139. package/dist/interfaces/mcp/client.d.ts +40 -0
  140. package/dist/interfaces/mcp/client.d.ts.map +1 -0
  141. package/dist/interfaces/mcp/client.js +309 -0
  142. package/dist/interfaces/ui/index.d.ts +36 -0
  143. package/dist/interfaces/ui/index.d.ts.map +1 -0
  144. package/dist/interfaces/ui/index.js +61 -0
  145. package/dist/interfaces/ui/spinner.d.ts +140 -0
  146. package/dist/interfaces/ui/spinner.d.ts.map +1 -0
  147. package/dist/interfaces/ui/spinner.js +342 -0
  148. package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
  149. package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
  150. package/dist/interfaces/ui/terminal/cli/index.js +159 -52768
  151. package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
  152. package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
  153. package/dist/interfaces/ui/terminal/shared/args.js +176 -0
  154. package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
  155. package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
  156. package/dist/interfaces/ui/terminal/shared/index.js +16 -0
  157. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
  158. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
  159. package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
  160. package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
  161. package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
  162. package/dist/interfaces/ui/terminal/shared/query.js +100 -0
  163. package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
  164. package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
  165. package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
  166. package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
  167. package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
  168. package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
  169. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
  170. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
  171. package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
  172. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
  173. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
  174. package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
  175. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
  176. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
  177. package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
  178. package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
  179. package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
  180. package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
  181. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
  182. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
  183. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
  184. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
  185. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
  186. package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
  187. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
  188. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
  189. package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
  190. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
  191. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
  192. package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
  193. package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
  194. package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
  195. package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
  196. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
  197. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
  198. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
  199. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
  200. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
  201. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
  202. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
  203. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
  204. package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
  205. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
  206. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
  207. package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
  208. package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
  209. package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
  210. package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
  211. package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
  212. package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
  213. package/dist/interfaces/ui/terminal/tui/console.js +46 -0
  214. package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
  215. package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
  216. package/dist/interfaces/ui/terminal/tui/index.js +28 -0
  217. package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
  218. package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
  219. package/dist/interfaces/ui/terminal/tui/run.js +31 -0
  220. package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
  221. package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
  222. package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
  223. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
  224. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
  225. package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
  226. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
  227. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
  228. package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
  229. package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
  230. package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
  231. package/dist/interfaces/ui/terminal/tui/types.js +5 -0
  232. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
  233. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
  234. package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
  235. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
  236. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
  237. package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
  238. package/dist/native/index.d.ts +480 -0
  239. package/dist/native/index.d.ts.map +1 -0
  240. package/dist/native/index.js +1625 -0
  241. package/dist/teammates/index.d.ts +161 -0
  242. package/dist/teammates/index.d.ts.map +1 -0
  243. package/dist/teammates/index.js +827 -0
  244. package/dist/types/index.d.ts +482 -0
  245. package/dist/types/index.d.ts.map +1 -0
  246. package/dist/types/index.js +52 -0
  247. package/package.json +4 -2
  248. package/packages/src/core/__tests__/permissions.test.ts +1091 -0
  249. package/packages/src/core/agent-loop/__tests__/compaction.test.ts +280 -0
  250. package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
  251. package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
  252. package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
  253. package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
  254. package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
  255. package/packages/src/core/agent-loop/compaction.ts +88 -0
  256. package/packages/src/core/agent-loop/formatters.ts +50 -0
  257. package/packages/src/core/agent-loop/index.ts +135 -0
  258. package/packages/src/core/agent-loop/loop-state.ts +187 -0
  259. package/packages/src/core/agent-loop/message-builder.ts +62 -0
  260. package/packages/src/core/agent-loop/tool-executor.ts +211 -0
  261. package/packages/src/core/agent-loop/turn-executor.ts +222 -0
  262. package/packages/src/core/agent-loop/types.ts +148 -0
  263. package/packages/src/core/agent-loop.ts +18 -0
  264. package/packages/src/core/api-client-impl.ts +619 -0
  265. package/packages/src/core/api-client.ts +6 -0
  266. package/packages/src/core/checkpoints.ts +606 -0
  267. package/packages/src/core/claude-md.ts +272 -0
  268. package/packages/src/core/cognitive-security/hooks.ts +590 -0
  269. package/packages/src/core/cognitive-security/index.ts +2041 -0
  270. package/packages/src/core/cognitive-security/middleware.ts +536 -0
  271. package/packages/src/core/config-loader.ts +324 -0
  272. package/packages/src/core/context-compaction.ts +578 -0
  273. package/packages/src/core/git-status.ts +262 -0
  274. package/packages/src/core/image.test.ts +180 -0
  275. package/packages/src/core/image.ts +350 -0
  276. package/packages/src/core/lmdb.db +0 -0
  277. package/packages/src/core/lmdb.db-lock +0 -0
  278. package/packages/src/core/models.ts +430 -0
  279. package/packages/src/core/normalizers/todo +4 -0
  280. package/packages/src/core/permissions.ts +431 -0
  281. package/packages/src/core/retry.ts +170 -0
  282. package/packages/src/core/session-store.ts +36 -0
  283. package/packages/src/core/sessions/export.ts +329 -0
  284. package/packages/src/core/sessions/index.ts +587 -0
  285. package/packages/src/core/sessions/metadata.ts +309 -0
  286. package/packages/src/core/sessions/persistence.ts +244 -0
  287. package/packages/src/core/sessions/types.ts +169 -0
  288. package/packages/src/core/stream-highlighter.ts +1123 -0
  289. package/packages/src/core/system-reminders.ts +402 -0
  290. package/packages/src/core/todo +8 -0
  291. package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
  292. package/packages/src/ecosystem/hooks/index.ts +341 -0
  293. package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
  294. package/packages/src/ecosystem/skills/index.ts +295 -0
  295. package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
  296. package/packages/src/ecosystem/tools/index.ts +1877 -0
  297. package/packages/src/index.ts +120 -0
  298. package/packages/src/interfaces/mcp/client.ts +389 -0
  299. package/packages/src/interfaces/ui/Screenshot 2026-03-02 at 9.23.10/342/200/257PM.png +0 -0
  300. package/packages/src/interfaces/ui/Screenshot 2026-03-03 at 10.55.11/342/200/257AM.png +0 -0
  301. package/packages/src/interfaces/ui/index.ts +161 -0
  302. package/packages/src/interfaces/ui/lmdb.db +0 -0
  303. package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
  304. package/packages/src/interfaces/ui/spinner.ts +451 -0
  305. package/packages/src/interfaces/ui/terminal/cli/index.ts +228 -0
  306. package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
  307. package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
  308. package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
  309. package/packages/src/interfaces/ui/terminal/shared/index.ts +71 -0
  310. package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
  311. package/packages/src/interfaces/ui/terminal/shared/query.ts +146 -0
  312. package/packages/src/interfaces/ui/terminal/shared/setup.ts +295 -0
  313. package/packages/src/interfaces/ui/terminal/shared/status-line.ts +358 -0
  314. package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
  315. package/packages/src/interfaces/ui/terminal/tui/HelpPanel.tsx +262 -0
  316. package/packages/src/interfaces/ui/terminal/tui/InputContext.tsx +232 -0
  317. package/packages/src/interfaces/ui/terminal/tui/InputField.tsx +62 -0
  318. package/packages/src/interfaces/ui/terminal/tui/InteractiveTUI.tsx +537 -0
  319. package/packages/src/interfaces/ui/terminal/tui/MessageArea.tsx +107 -0
  320. package/packages/src/interfaces/ui/terminal/tui/MessageStore.tsx +240 -0
  321. package/packages/src/interfaces/ui/terminal/tui/StatusBar.tsx +54 -0
  322. package/packages/src/interfaces/ui/terminal/tui/commands.ts +438 -0
  323. package/packages/src/interfaces/ui/terminal/tui/components/InteractiveElements.tsx +584 -0
  324. package/packages/src/interfaces/ui/terminal/tui/components/MultilineInput.tsx +614 -0
  325. package/packages/src/interfaces/ui/terminal/tui/components/PaneManager.tsx +333 -0
  326. package/packages/src/interfaces/ui/terminal/tui/components/Sidebar.tsx +604 -0
  327. package/packages/src/interfaces/ui/terminal/tui/components/index.ts +118 -0
  328. package/packages/src/interfaces/ui/terminal/tui/console.ts +49 -0
  329. package/packages/src/interfaces/ui/terminal/tui/index.ts +90 -0
  330. package/packages/src/interfaces/ui/terminal/tui/run.tsx +42 -0
  331. package/packages/src/interfaces/ui/terminal/tui/spinner.ts +69 -0
  332. package/packages/src/interfaces/ui/terminal/tui/tui-app.tsx +390 -0
  333. package/packages/src/interfaces/ui/terminal/tui/tui-footer.ts +422 -0
  334. package/packages/src/interfaces/ui/terminal/tui/types.ts +186 -0
  335. package/packages/src/interfaces/ui/terminal/tui/useInputHandler.ts +104 -0
  336. package/packages/src/interfaces/ui/terminal/tui/useNativeInput.ts +239 -0
  337. package/packages/src/lmdb.db +0 -0
  338. package/packages/src/lmdb.db-lock +0 -0
  339. package/packages/src/native/index.ts +2345 -0
  340. package/packages/src/teammates/index.ts +982 -0
  341. package/packages/src/types/index.ts +722 -0
@@ -0,0 +1,442 @@
1
+ /**
2
+ * Session Store - Composable session management
3
+ * Composes persistence, metadata, and export modules
4
+ */
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ import { SessionPersistence } from "./persistence.js";
8
+ import { SessionMetadataManager } from "./metadata.js";
9
+ import { SessionExporter } from "./export.js";
10
+ // Re-export types for convenience
11
+ export * from "./types.js";
12
+ export { SessionPersistence } from "./persistence.js";
13
+ export { SessionMetadataManager } from "./metadata.js";
14
+ export { SessionExporter } from "./export.js";
15
+ /**
16
+ * Main SessionStore class
17
+ * Composes persistence, metadata, and export functionality
18
+ */
19
+ export class SessionStore {
20
+ persistence;
21
+ metadataManager;
22
+ exporter;
23
+ currentSessionId = null;
24
+ currentMetadata = null;
25
+ eventHandlers = new Set();
26
+ constructor(sessionsDir) {
27
+ const dir = sessionsDir ?? join(homedir(), ".claude", "sessions");
28
+ this.persistence = new SessionPersistence(dir);
29
+ this.metadataManager = new SessionMetadataManager(this.persistence);
30
+ this.exporter = new SessionExporter(this.persistence);
31
+ }
32
+ // ============================================
33
+ // INITIALIZATION
34
+ // ============================================
35
+ /**
36
+ * Initialize the sessions directory
37
+ */
38
+ async init() {
39
+ await this.persistence.init();
40
+ }
41
+ /**
42
+ * Get the sessions directory path
43
+ */
44
+ getSessionsDir() {
45
+ return this.persistence.getSessionsDir();
46
+ }
47
+ /**
48
+ * Get the file path for a specific session
49
+ */
50
+ getSessionPath(sessionId) {
51
+ return this.persistence.getSessionPath(sessionId);
52
+ }
53
+ // ============================================
54
+ // EVENT HANDLING
55
+ // ============================================
56
+ /**
57
+ * Subscribe to session events
58
+ */
59
+ onEvent(handler) {
60
+ this.eventHandlers.add(handler);
61
+ return () => this.eventHandlers.delete(handler);
62
+ }
63
+ /**
64
+ * Emit a session event
65
+ */
66
+ async emit(type) {
67
+ const event = { ...type, timestamp: type.timestamp ?? Date.now() };
68
+ await Promise.all([...this.eventHandlers].map((handler) => handler(event)));
69
+ }
70
+ // ============================================
71
+ // SESSION CREATION & MANAGEMENT
72
+ // ============================================
73
+ /**
74
+ * Create a new session (or reuse existing empty session)
75
+ */
76
+ async createSession(options) {
77
+ await this.init();
78
+ // Try to find an existing empty session to reuse
79
+ const sessions = await this.listSessions(20);
80
+ const emptySession = sessions.find((s) => s.messageCount === 0);
81
+ if (emptySession) {
82
+ // Reuse the empty session
83
+ this.currentSessionId = emptySession.id;
84
+ this.currentMetadata = this.metadataManager.createMetadata({
85
+ id: emptySession.id,
86
+ ...options,
87
+ });
88
+ await this.persistence.append(emptySession.id, this.currentMetadata);
89
+ await this.emit({
90
+ type: "resumed",
91
+ sessionId: emptySession.id,
92
+ timestamp: Date.now(),
93
+ data: { reused: true },
94
+ });
95
+ return emptySession.id;
96
+ }
97
+ // No empty session found, create new
98
+ const sessionId = this.metadataManager.generateId();
99
+ this.currentSessionId = sessionId;
100
+ this.currentMetadata = this.metadataManager.createMetadata({
101
+ id: sessionId,
102
+ ...options,
103
+ });
104
+ await this.persistence.append(sessionId, this.currentMetadata);
105
+ // Write context entry
106
+ const context = {
107
+ type: "context",
108
+ timestamp: Date.now(),
109
+ workingDirectory: options.workingDirectory,
110
+ };
111
+ await this.persistence.append(sessionId, context);
112
+ await this.emit({
113
+ type: "created",
114
+ sessionId,
115
+ timestamp: Date.now(),
116
+ data: this.currentMetadata,
117
+ });
118
+ return sessionId;
119
+ }
120
+ /**
121
+ * Resume an existing session
122
+ */
123
+ async resumeSession(sessionId) {
124
+ const entries = await this.persistence.read(sessionId);
125
+ if (entries.length === 0) {
126
+ return null;
127
+ }
128
+ const session = this.parseEntries(entries);
129
+ session.metadata.id = sessionId; // Ensure ID is set
130
+ this.currentSessionId = sessionId;
131
+ this.currentMetadata = session.metadata;
132
+ await this.emit({
133
+ type: "resumed",
134
+ sessionId,
135
+ timestamp: Date.now(),
136
+ data: session.metadata,
137
+ });
138
+ return session;
139
+ }
140
+ /**
141
+ * Parse session entries into structured session
142
+ */
143
+ parseEntries(entries) {
144
+ let metadata = null;
145
+ const messages = [];
146
+ const tools = [];
147
+ const metrics = [];
148
+ let context = null;
149
+ const checkpoints = [];
150
+ for (const entry of entries) {
151
+ // All entries have explicit type field now
152
+ switch (entry.type) {
153
+ case "metadata":
154
+ metadata = entry;
155
+ break;
156
+ case "message":
157
+ messages.push(entry.data);
158
+ break;
159
+ case "tool_use":
160
+ tools.push(entry);
161
+ break;
162
+ case "metrics":
163
+ metrics.push(entry.data);
164
+ break;
165
+ case "context":
166
+ context = entry;
167
+ break;
168
+ case "checkpoint":
169
+ checkpoints.push(entry);
170
+ break;
171
+ }
172
+ }
173
+ if (!metadata) {
174
+ metadata = this.metadataManager.createMetadata({
175
+ model: "claude-sonnet-4-6",
176
+ workingDirectory: process.cwd(),
177
+ });
178
+ }
179
+ return {
180
+ metadata,
181
+ messages,
182
+ tools,
183
+ metrics,
184
+ context,
185
+ checkpoints,
186
+ };
187
+ }
188
+ /**
189
+ * Delete a session
190
+ */
191
+ async deleteSession(sessionId) {
192
+ const deleted = await this.persistence.delete(sessionId);
193
+ if (deleted) {
194
+ await this.emit({
195
+ type: "deleted",
196
+ sessionId,
197
+ timestamp: Date.now(),
198
+ });
199
+ if (this.currentSessionId === sessionId) {
200
+ this.currentSessionId = null;
201
+ this.currentMetadata = null;
202
+ }
203
+ }
204
+ return deleted;
205
+ }
206
+ // ============================================
207
+ // DATA SAVING
208
+ // ============================================
209
+ /**
210
+ * Save a message to the current session
211
+ */
212
+ async saveMessage(message) {
213
+ if (!this.currentSessionId) {
214
+ throw new Error("No active session");
215
+ }
216
+ const entry = {
217
+ type: "message",
218
+ timestamp: Date.now(),
219
+ data: message,
220
+ };
221
+ await this.persistence.append(this.currentSessionId, entry);
222
+ await this.emit({
223
+ type: "message_saved",
224
+ sessionId: this.currentSessionId,
225
+ timestamp: Date.now(),
226
+ data: message,
227
+ });
228
+ }
229
+ /**
230
+ * Save a tool use to the current session
231
+ */
232
+ async saveToolUse(toolId, toolName, input, result, isError) {
233
+ if (!this.currentSessionId) {
234
+ throw new Error("No active session");
235
+ }
236
+ const entry = {
237
+ type: "tool_use",
238
+ timestamp: Date.now(),
239
+ toolId,
240
+ toolName,
241
+ input,
242
+ result,
243
+ isError,
244
+ };
245
+ await this.persistence.append(this.currentSessionId, entry);
246
+ }
247
+ /**
248
+ * Save metrics to the current session
249
+ */
250
+ async saveMetrics(metrics) {
251
+ if (!this.currentSessionId) {
252
+ throw new Error("No active session");
253
+ }
254
+ const entry = {
255
+ type: "metrics",
256
+ timestamp: Date.now(),
257
+ data: metrics,
258
+ };
259
+ await this.persistence.append(this.currentSessionId, entry);
260
+ // Update running totals in metadata
261
+ if (this.currentMetadata) {
262
+ this.currentMetadata.totalCost =
263
+ (this.currentMetadata.totalCost ?? 0) + metrics.costUSD;
264
+ this.currentMetadata.totalTokens = {
265
+ input: (this.currentMetadata.totalTokens?.input ?? 0) +
266
+ metrics.usage.input_tokens,
267
+ output: (this.currentMetadata.totalTokens?.output ?? 0) +
268
+ metrics.usage.output_tokens,
269
+ };
270
+ }
271
+ await this.emit({
272
+ type: "metrics_saved",
273
+ sessionId: this.currentSessionId,
274
+ timestamp: Date.now(),
275
+ data: metrics,
276
+ });
277
+ }
278
+ // ============================================
279
+ // LISTING & QUERYING
280
+ // ============================================
281
+ /**
282
+ * List recent sessions
283
+ */
284
+ async listSessions(limit = 20, filter) {
285
+ await this.init();
286
+ const files = await this.persistence.listFiles();
287
+ // Get modification times for sorting
288
+ const modTimes = await this.persistence.getModificationTimes(files);
289
+ // Sort by modification time (newest first)
290
+ const sortedFiles = files.sort((a, b) => {
291
+ const timeA = modTimes.get(a)?.getTime() ?? 0;
292
+ const timeB = modTimes.get(b)?.getTime() ?? 0;
293
+ return timeB - timeA;
294
+ });
295
+ // Parse summaries
296
+ const sessions = [];
297
+ for (const sessionId of sortedFiles.slice(0, limit * 2)) {
298
+ const summary = await this.metadataManager.getSummary(sessionId);
299
+ if (summary) {
300
+ sessions.push(summary);
301
+ }
302
+ }
303
+ // Apply filter if provided
304
+ const filtered = filter
305
+ ? this.metadataManager.filterSessions(sessions, filter)
306
+ : sessions;
307
+ // Sort by last activity
308
+ const sorted = this.metadataManager.sortSessions(filtered, "lastActivity", "desc");
309
+ return sorted.slice(0, limit);
310
+ }
311
+ /**
312
+ * Get session summary by ID
313
+ */
314
+ async getSessionSummary(sessionId) {
315
+ return this.metadataManager.getSummary(sessionId);
316
+ }
317
+ /**
318
+ * Find empty sessions
319
+ */
320
+ async findEmptySessions() {
321
+ const sessions = await this.listSessions(100);
322
+ return this.metadataManager.findEmptySessions(sessions);
323
+ }
324
+ /**
325
+ * Clean up empty sessions (delete them)
326
+ */
327
+ async cleanupEmptySessions() {
328
+ const empty = await this.findEmptySessions();
329
+ let deleted = 0;
330
+ for (const session of empty) {
331
+ // Don't delete the current session even if empty
332
+ if (session.id === this.currentSessionId) {
333
+ continue;
334
+ }
335
+ const success = await this.deleteSession(session.id);
336
+ if (success) {
337
+ deleted++;
338
+ }
339
+ }
340
+ return deleted;
341
+ }
342
+ // ============================================
343
+ // EXPORT
344
+ // ============================================
345
+ /**
346
+ * Export session to a file
347
+ */
348
+ async exportSession(sessionId, format, outputPath) {
349
+ const session = await this.resumeSession(sessionId);
350
+ if (!session) {
351
+ throw new Error(`Session not found: ${sessionId}`);
352
+ }
353
+ let content;
354
+ let defaultExt;
355
+ switch (format) {
356
+ case "jsonl": {
357
+ const sessionFile = this.persistence.getSessionPath(sessionId);
358
+ content = await Bun.file(sessionFile).text();
359
+ defaultExt = "jsonl";
360
+ break;
361
+ }
362
+ case "json": {
363
+ content = this.exporter.export(session, "json");
364
+ defaultExt = "json";
365
+ break;
366
+ }
367
+ case "markdown": {
368
+ content = this.exporter.export(session, "markdown");
369
+ defaultExt = "md";
370
+ break;
371
+ }
372
+ default:
373
+ throw new Error(`Unsupported format: ${format}`);
374
+ }
375
+ const finalPath = outputPath ?? join(process.cwd(), `session-${sessionId}.${defaultExt}`);
376
+ await Bun.write(finalPath, content);
377
+ return finalPath;
378
+ }
379
+ // ============================================
380
+ // CURRENT SESSION ACCESSORS
381
+ // ============================================
382
+ /**
383
+ * Get the current session ID
384
+ */
385
+ getCurrentSessionId() {
386
+ return this.currentSessionId;
387
+ }
388
+ /**
389
+ * Get the current session metadata
390
+ */
391
+ getCurrentMetadata() {
392
+ return this.currentMetadata;
393
+ }
394
+ /**
395
+ * Update current session metadata
396
+ */
397
+ updateMetadata(updates) {
398
+ if (this.currentMetadata) {
399
+ this.currentMetadata = this.metadataManager.merge(this.currentMetadata, updates);
400
+ }
401
+ }
402
+ // ============================================
403
+ // UTILITY
404
+ // ============================================
405
+ /**
406
+ * Check if a session exists
407
+ */
408
+ async sessionExists(sessionId) {
409
+ return this.persistence.exists(sessionId);
410
+ }
411
+ /**
412
+ * Get session statistics
413
+ */
414
+ async getStats() {
415
+ const sessions = await this.listSessions(1000);
416
+ const stats = this.metadataManager.calculateStats(sessions);
417
+ const empty = this.metadataManager.findEmptySessions(sessions);
418
+ return {
419
+ totalSessions: stats.totalSessions,
420
+ totalMessages: stats.totalMessages,
421
+ totalCost: stats.totalCost,
422
+ emptySessions: empty.length,
423
+ };
424
+ }
425
+ }
426
+ // ============================================
427
+ // HELPER FUNCTIONS (for CLI compatibility)
428
+ // ============================================
429
+ /**
430
+ * Format a session summary for display
431
+ */
432
+ export function formatSessionSummary(session) {
433
+ return SessionExporter.formatSummary(session);
434
+ }
435
+ /**
436
+ * Print sessions list for CLI
437
+ */
438
+ export function printSessionsList(sessions) {
439
+ SessionExporter.printList(sessions);
440
+ }
441
+ // Default export for convenience
442
+ export default SessionStore;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Session Metadata - Manage session metadata and summaries
3
+ */
4
+ import type { SessionMetadata, SessionSummary, SessionEntry, SessionFilter } from "./types.js";
5
+ import { SessionPersistence } from "./persistence.js";
6
+ export declare class SessionMetadataManager {
7
+ private persistence;
8
+ constructor(persistence: SessionPersistence);
9
+ /**
10
+ * Generate a new session ID
11
+ */
12
+ generateId(): string;
13
+ /**
14
+ * Create metadata for a new session
15
+ */
16
+ createMetadata(options: {
17
+ id?: string;
18
+ model: string;
19
+ workingDirectory: string;
20
+ agentName?: string;
21
+ agentColor?: string;
22
+ teamName?: string;
23
+ }): SessionMetadata;
24
+ /**
25
+ * Update metadata timestamps
26
+ */
27
+ touch(metadata: SessionMetadata): SessionMetadata;
28
+ /**
29
+ * Merge updated fields into metadata
30
+ */
31
+ merge(metadata: SessionMetadata, updates: Partial<SessionMetadata>): SessionMetadata;
32
+ /**
33
+ * Get summary from session entries
34
+ */
35
+ getSummary(sessionId: string): Promise<SessionSummary | null>;
36
+ /**
37
+ * Convert entries to summary
38
+ */
39
+ entriesToSummary(sessionId: string, entries: SessionEntry[]): SessionSummary | null;
40
+ /**
41
+ * Filter sessions based on criteria
42
+ */
43
+ filterSessions(sessions: SessionSummary[], filter: SessionFilter): SessionSummary[];
44
+ /**
45
+ * Sort sessions by various criteria
46
+ */
47
+ sortSessions(sessions: SessionSummary[], sortBy?: "created" | "updated" | "lastActivity" | "messageCount" | "cost", order?: "asc" | "desc"): SessionSummary[];
48
+ /**
49
+ * Find empty sessions (no messages)
50
+ */
51
+ findEmptySessions(sessions: SessionSummary[]): SessionSummary[];
52
+ /**
53
+ * Find sessions by partial ID match
54
+ */
55
+ findById(sessions: SessionSummary[], partialId: string): SessionSummary | undefined;
56
+ /**
57
+ * Get unique models from sessions
58
+ */
59
+ getUniqueModels(sessions: SessionSummary[]): string[];
60
+ /**
61
+ * Get unique working directories from sessions
62
+ */
63
+ getUniqueDirectories(sessions: SessionSummary[]): string[];
64
+ /**
65
+ * Calculate aggregate statistics
66
+ */
67
+ calculateStats(sessions: SessionSummary[]): {
68
+ totalSessions: number;
69
+ totalMessages: number;
70
+ totalCost: number;
71
+ totalInputTokens: number;
72
+ totalOutputTokens: number;
73
+ averageMessagesPerSession: number;
74
+ averageCostPerSession: number;
75
+ };
76
+ }
77
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../packages/src/core/sessions/metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,YAAY,EAGZ,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,WAAW,EAAE,kBAAkB;IAI3C;;OAEG;IACH,UAAU,IAAI,MAAM;IAMpB;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE;QACtB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,eAAe;IAgBnB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe;IAOjD;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,eAAe;IAQlB;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAKnE;;OAEG;IACH,gBAAgB,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,GACtB,cAAc,GAAG,IAAI;IAyExB;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,cAAc,EAAE,EAC1B,MAAM,EAAE,aAAa,GACpB,cAAc,EAAE;IAqCnB;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,MAAM,GAAE,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,cAAc,GAAG,MAAuB,EACzF,KAAK,GAAE,KAAK,GAAG,MAAe,GAC7B,cAAc,EAAE;IA0BnB;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IAI/D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInF;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE;IAKrD;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE;IAK1D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG;QAC1C,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,yBAAyB,EAAE,MAAM,CAAC;QAClC,qBAAqB,EAAE,MAAM,CAAC;KAC/B;CAuBF"}