@ebowwa/coder 0.7.63 → 0.7.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/dist/core/__tests__/permissions.test.d.ts +12 -0
  2. package/dist/core/__tests__/permissions.test.d.ts.map +1 -0
  3. package/dist/core/__tests__/permissions.test.js +851 -0
  4. package/dist/core/agent-loop/__tests__/compaction.test.d.ts +5 -0
  5. package/dist/core/agent-loop/__tests__/compaction.test.d.ts.map +1 -0
  6. package/dist/core/agent-loop/__tests__/compaction.test.js +209 -0
  7. package/dist/core/agent-loop/__tests__/formatters.test.d.ts +5 -0
  8. package/dist/core/agent-loop/__tests__/formatters.test.d.ts.map +1 -0
  9. package/dist/core/agent-loop/__tests__/formatters.test.js +195 -0
  10. package/dist/core/agent-loop/__tests__/index.test.d.ts +5 -0
  11. package/dist/core/agent-loop/__tests__/index.test.d.ts.map +1 -0
  12. package/dist/core/agent-loop/__tests__/index.test.js +121 -0
  13. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts +5 -0
  14. package/dist/core/agent-loop/__tests__/loop-state.test.d.ts.map +1 -0
  15. package/dist/core/agent-loop/__tests__/loop-state.test.js +340 -0
  16. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts +5 -0
  17. package/dist/core/agent-loop/__tests__/message-builder.test.d.ts.map +1 -0
  18. package/dist/core/agent-loop/__tests__/message-builder.test.js +178 -0
  19. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts +5 -0
  20. package/dist/core/agent-loop/__tests__/tool-executor.test.d.ts.map +1 -0
  21. package/dist/core/agent-loop/__tests__/tool-executor.test.js +331 -0
  22. package/dist/core/agent-loop/compaction.d.ts +39 -0
  23. package/dist/core/agent-loop/compaction.d.ts.map +1 -0
  24. package/dist/core/agent-loop/compaction.js +51 -0
  25. package/dist/core/agent-loop/formatters.d.ts +21 -0
  26. package/dist/core/agent-loop/formatters.d.ts.map +1 -0
  27. package/dist/core/agent-loop/formatters.js +42 -0
  28. package/dist/core/agent-loop/index.d.ts +25 -0
  29. package/dist/core/agent-loop/index.d.ts.map +1 -0
  30. package/dist/core/agent-loop/index.js +83 -0
  31. package/dist/core/agent-loop/loop-state.d.ts +74 -0
  32. package/dist/core/agent-loop/loop-state.d.ts.map +1 -0
  33. package/dist/core/agent-loop/loop-state.js +147 -0
  34. package/dist/core/agent-loop/message-builder.d.ts +13 -0
  35. package/dist/core/agent-loop/message-builder.d.ts.map +1 -0
  36. package/dist/core/agent-loop/message-builder.js +49 -0
  37. package/dist/core/agent-loop/tool-executor.d.ts +23 -0
  38. package/dist/core/agent-loop/tool-executor.d.ts.map +1 -0
  39. package/dist/core/agent-loop/tool-executor.js +152 -0
  40. package/dist/core/agent-loop/turn-executor.d.ts +57 -0
  41. package/dist/core/agent-loop/turn-executor.d.ts.map +1 -0
  42. package/dist/core/agent-loop/turn-executor.js +124 -0
  43. package/dist/core/agent-loop/types.d.ts +141 -0
  44. package/dist/core/agent-loop/types.d.ts.map +1 -0
  45. package/dist/core/agent-loop/types.js +4 -0
  46. package/dist/core/agent-loop.d.ts +17 -0
  47. package/dist/core/agent-loop.d.ts.map +1 -0
  48. package/dist/core/agent-loop.js +16 -0
  49. package/dist/core/api-client-impl.d.ts +62 -0
  50. package/dist/core/api-client-impl.d.ts.map +1 -0
  51. package/dist/core/api-client-impl.js +479 -0
  52. package/dist/core/api-client.d.ts +6 -0
  53. package/dist/core/api-client.d.ts.map +1 -0
  54. package/dist/core/api-client.js +5 -0
  55. package/dist/core/checkpoints.d.ts +128 -0
  56. package/dist/core/checkpoints.d.ts.map +1 -0
  57. package/dist/core/checkpoints.js +438 -0
  58. package/dist/core/claude-md.d.ts +71 -0
  59. package/dist/core/claude-md.d.ts.map +1 -0
  60. package/dist/core/claude-md.js +198 -0
  61. package/dist/core/cognitive-security/hooks.d.ts +138 -0
  62. package/dist/core/cognitive-security/hooks.d.ts.map +1 -0
  63. package/dist/core/cognitive-security/hooks.js +389 -0
  64. package/dist/core/cognitive-security/index.d.ts +751 -0
  65. package/dist/core/cognitive-security/index.d.ts.map +1 -0
  66. package/dist/core/cognitive-security/index.js +1123 -0
  67. package/dist/core/cognitive-security/middleware.d.ts +136 -0
  68. package/dist/core/cognitive-security/middleware.d.ts.map +1 -0
  69. package/dist/core/cognitive-security/middleware.js +376 -0
  70. package/dist/core/config-loader.d.ts +127 -0
  71. package/dist/core/config-loader.d.ts.map +1 -0
  72. package/dist/core/config-loader.js +219 -0
  73. package/dist/core/context-compaction.d.ts +87 -0
  74. package/dist/core/context-compaction.d.ts.map +1 -0
  75. package/dist/core/context-compaction.js +428 -0
  76. package/dist/core/git-status.d.ts +25 -0
  77. package/dist/core/git-status.d.ts.map +1 -0
  78. package/dist/core/git-status.js +204 -0
  79. package/dist/core/image.d.ts +69 -0
  80. package/dist/core/image.d.ts.map +1 -0
  81. package/dist/core/image.js +290 -0
  82. package/dist/core/image.test.d.ts +2 -0
  83. package/dist/core/image.test.d.ts.map +1 -0
  84. package/dist/core/image.test.js +149 -0
  85. package/dist/core/models.d.ts +123 -0
  86. package/dist/core/models.d.ts.map +1 -0
  87. package/dist/core/models.js +325 -0
  88. package/dist/core/permissions.d.ts +81 -0
  89. package/dist/core/permissions.d.ts.map +1 -0
  90. package/dist/core/permissions.js +327 -0
  91. package/dist/core/retry.d.ts +25 -0
  92. package/dist/core/retry.d.ts.map +1 -0
  93. package/dist/core/retry.js +121 -0
  94. package/dist/core/session-store.d.ts +9 -0
  95. package/dist/core/session-store.d.ts.map +1 -0
  96. package/dist/core/session-store.js +10 -0
  97. package/dist/core/sessions/export.d.ts +47 -0
  98. package/dist/core/sessions/export.d.ts.map +1 -0
  99. package/dist/core/sessions/export.js +256 -0
  100. package/dist/core/sessions/index.d.ts +132 -0
  101. package/dist/core/sessions/index.d.ts.map +1 -0
  102. package/dist/core/sessions/index.js +442 -0
  103. package/dist/core/sessions/metadata.d.ts +77 -0
  104. package/dist/core/sessions/metadata.d.ts.map +1 -0
  105. package/dist/core/sessions/metadata.js +233 -0
  106. package/dist/core/sessions/persistence.d.ts +72 -0
  107. package/dist/core/sessions/persistence.d.ts.map +1 -0
  108. package/dist/core/sessions/persistence.js +201 -0
  109. package/dist/core/sessions/types.d.ts +110 -0
  110. package/dist/core/sessions/types.d.ts.map +1 -0
  111. package/dist/core/sessions/types.js +4 -0
  112. package/dist/core/stream-highlighter.d.ts +18 -0
  113. package/dist/core/stream-highlighter.d.ts.map +1 -0
  114. package/dist/core/stream-highlighter.js +916 -0
  115. package/dist/core/system-reminders.d.ts +89 -0
  116. package/dist/core/system-reminders.d.ts.map +1 -0
  117. package/dist/core/system-reminders.js +285 -0
  118. package/dist/ecosystem/hooks/__tests__/index.test.d.ts +5 -0
  119. package/dist/ecosystem/hooks/__tests__/index.test.d.ts.map +1 -0
  120. package/dist/ecosystem/hooks/__tests__/index.test.js +458 -0
  121. package/dist/ecosystem/hooks/index.d.ts +59 -0
  122. package/dist/ecosystem/hooks/index.d.ts.map +1 -0
  123. package/dist/ecosystem/hooks/index.js +294 -0
  124. package/dist/ecosystem/hooks/prompt-evaluator.d.ts +32 -0
  125. package/dist/ecosystem/hooks/prompt-evaluator.d.ts.map +1 -0
  126. package/dist/ecosystem/hooks/prompt-evaluator.js +229 -0
  127. package/dist/ecosystem/skills/index.d.ts +55 -0
  128. package/dist/ecosystem/skills/index.d.ts.map +1 -0
  129. package/dist/ecosystem/skills/index.js +258 -0
  130. package/dist/ecosystem/tools/__tests__/index.test.d.ts +7 -0
  131. package/dist/ecosystem/tools/__tests__/index.test.d.ts.map +1 -0
  132. package/dist/ecosystem/tools/__tests__/index.test.js +856 -0
  133. package/dist/ecosystem/tools/index.d.ts +24 -0
  134. package/dist/ecosystem/tools/index.d.ts.map +1 -0
  135. package/dist/ecosystem/tools/index.js +1709 -0
  136. package/dist/index.d.ts +24 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +33688 -49712
  139. package/dist/interfaces/mcp/client.d.ts +40 -0
  140. package/dist/interfaces/mcp/client.d.ts.map +1 -0
  141. package/dist/interfaces/mcp/client.js +309 -0
  142. package/dist/interfaces/ui/index.d.ts +36 -0
  143. package/dist/interfaces/ui/index.d.ts.map +1 -0
  144. package/dist/interfaces/ui/index.js +61 -0
  145. package/dist/interfaces/ui/spinner.d.ts +140 -0
  146. package/dist/interfaces/ui/spinner.d.ts.map +1 -0
  147. package/dist/interfaces/ui/spinner.js +342 -0
  148. package/dist/interfaces/ui/terminal/cli/index.d.ts +12 -0
  149. package/dist/interfaces/ui/terminal/cli/index.d.ts.map +1 -0
  150. package/dist/interfaces/ui/terminal/cli/index.js +32012 -50526
  151. package/dist/interfaces/ui/terminal/native/README.md +53 -0
  152. package/dist/interfaces/ui/terminal/native/claude_code_native.darwin-x64.node +0 -0
  153. package/dist/interfaces/ui/terminal/native/claude_code_native.dylib +0 -0
  154. package/dist/interfaces/ui/terminal/native/index.d.ts +0 -0
  155. package/dist/interfaces/ui/terminal/native/index.darwin-arm64.node +0 -0
  156. package/dist/interfaces/ui/terminal/native/index.js +43 -0
  157. package/dist/interfaces/ui/terminal/native/index.node +0 -0
  158. package/dist/interfaces/ui/terminal/native/package.json +34 -0
  159. package/dist/interfaces/ui/terminal/shared/args.d.ts +39 -0
  160. package/dist/interfaces/ui/terminal/shared/args.d.ts.map +1 -0
  161. package/dist/interfaces/ui/terminal/shared/args.js +176 -0
  162. package/dist/interfaces/ui/terminal/shared/index.d.ts +11 -0
  163. package/dist/interfaces/ui/terminal/shared/index.d.ts.map +1 -0
  164. package/dist/interfaces/ui/terminal/shared/index.js +16 -0
  165. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts +124 -0
  166. package/dist/interfaces/ui/terminal/shared/loading-state.d.ts.map +1 -0
  167. package/dist/interfaces/ui/terminal/shared/loading-state.js +246 -0
  168. package/dist/interfaces/ui/terminal/shared/query.d.ts +22 -0
  169. package/dist/interfaces/ui/terminal/shared/query.d.ts.map +1 -0
  170. package/dist/interfaces/ui/terminal/shared/query.js +100 -0
  171. package/dist/interfaces/ui/terminal/shared/setup.d.ts +33 -0
  172. package/dist/interfaces/ui/terminal/shared/setup.d.ts.map +1 -0
  173. package/dist/interfaces/ui/terminal/shared/setup.js +226 -0
  174. package/dist/interfaces/ui/terminal/shared/status-line.d.ts +117 -0
  175. package/dist/interfaces/ui/terminal/shared/status-line.d.ts.map +1 -0
  176. package/dist/interfaces/ui/terminal/shared/status-line.js +267 -0
  177. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts +38 -0
  178. package/dist/interfaces/ui/terminal/shared/system-prompt.d.ts.map +1 -0
  179. package/dist/interfaces/ui/terminal/shared/system-prompt.js +102 -0
  180. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts +39 -0
  181. package/dist/interfaces/ui/terminal/tui/HelpPanel.d.ts.map +1 -0
  182. package/dist/interfaces/ui/terminal/tui/HelpPanel.js +215 -0
  183. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts +91 -0
  184. package/dist/interfaces/ui/terminal/tui/InputContext.d.ts.map +1 -0
  185. package/dist/interfaces/ui/terminal/tui/InputContext.js +154 -0
  186. package/dist/interfaces/ui/terminal/tui/InputField.d.ts +18 -0
  187. package/dist/interfaces/ui/terminal/tui/InputField.d.ts.map +1 -0
  188. package/dist/interfaces/ui/terminal/tui/InputField.js +41 -0
  189. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts +16 -0
  190. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.d.ts.map +1 -0
  191. package/dist/interfaces/ui/terminal/tui/InteractiveTUI.js +451 -0
  192. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts +10 -0
  193. package/dist/interfaces/ui/terminal/tui/MessageArea.d.ts.map +1 -0
  194. package/dist/interfaces/ui/terminal/tui/MessageArea.js +91 -0
  195. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts +48 -0
  196. package/dist/interfaces/ui/terminal/tui/MessageStore.d.ts.map +1 -0
  197. package/dist/interfaces/ui/terminal/tui/MessageStore.js +151 -0
  198. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts +9 -0
  199. package/dist/interfaces/ui/terminal/tui/StatusBar.d.ts.map +1 -0
  200. package/dist/interfaces/ui/terminal/tui/StatusBar.js +36 -0
  201. package/dist/interfaces/ui/terminal/tui/commands.d.ts +21 -0
  202. package/dist/interfaces/ui/terminal/tui/commands.d.ts.map +1 -0
  203. package/dist/interfaces/ui/terminal/tui/commands.js +359 -0
  204. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts +115 -0
  205. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.d.ts.map +1 -0
  206. package/dist/interfaces/ui/terminal/tui/components/InteractiveElements.js +306 -0
  207. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts +92 -0
  208. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.d.ts.map +1 -0
  209. package/dist/interfaces/ui/terminal/tui/components/MultilineInput.js +399 -0
  210. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts +59 -0
  211. package/dist/interfaces/ui/terminal/tui/components/PaneManager.d.ts.map +1 -0
  212. package/dist/interfaces/ui/terminal/tui/components/PaneManager.js +139 -0
  213. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts +68 -0
  214. package/dist/interfaces/ui/terminal/tui/components/Sidebar.d.ts.map +1 -0
  215. package/dist/interfaces/ui/terminal/tui/components/Sidebar.js +340 -0
  216. package/dist/interfaces/ui/terminal/tui/components/index.d.ts +23 -0
  217. package/dist/interfaces/ui/terminal/tui/components/index.d.ts.map +1 -0
  218. package/dist/interfaces/ui/terminal/tui/components/index.js +51 -0
  219. package/dist/interfaces/ui/terminal/tui/console.d.ts +20 -0
  220. package/dist/interfaces/ui/terminal/tui/console.d.ts.map +1 -0
  221. package/dist/interfaces/ui/terminal/tui/console.js +46 -0
  222. package/dist/interfaces/ui/terminal/tui/index.d.ts +20 -0
  223. package/dist/interfaces/ui/terminal/tui/index.d.ts.map +1 -0
  224. package/dist/interfaces/ui/terminal/tui/index.js +28 -0
  225. package/dist/interfaces/ui/terminal/tui/run.d.ts +13 -0
  226. package/dist/interfaces/ui/terminal/tui/run.d.ts.map +1 -0
  227. package/dist/interfaces/ui/terminal/tui/run.js +31 -0
  228. package/dist/interfaces/ui/terminal/tui/spinner.d.ts +44 -0
  229. package/dist/interfaces/ui/terminal/tui/spinner.d.ts.map +1 -0
  230. package/dist/interfaces/ui/terminal/tui/spinner.js +59 -0
  231. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts +39 -0
  232. package/dist/interfaces/ui/terminal/tui/tui-app.d.ts.map +1 -0
  233. package/dist/interfaces/ui/terminal/tui/tui-app.js +198 -0
  234. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts +167 -0
  235. package/dist/interfaces/ui/terminal/tui/tui-footer.d.ts.map +1 -0
  236. package/dist/interfaces/ui/terminal/tui/tui-footer.js +330 -0
  237. package/dist/interfaces/ui/terminal/tui/types.d.ts +165 -0
  238. package/dist/interfaces/ui/terminal/tui/types.d.ts.map +1 -0
  239. package/dist/interfaces/ui/terminal/tui/types.js +5 -0
  240. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts +23 -0
  241. package/dist/interfaces/ui/terminal/tui/useInputHandler.d.ts.map +1 -0
  242. package/dist/interfaces/ui/terminal/tui/useInputHandler.js +72 -0
  243. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts +90 -0
  244. package/dist/interfaces/ui/terminal/tui/useNativeInput.d.ts.map +1 -0
  245. package/dist/interfaces/ui/terminal/tui/useNativeInput.js +188 -0
  246. package/dist/native/README.md +53 -0
  247. package/dist/native/claude_code_native.darwin-x64.node +0 -0
  248. package/dist/native/claude_code_native.dylib +0 -0
  249. package/dist/native/index.d.ts +0 -0
  250. package/dist/native/index.d.ts.map +1 -0
  251. package/dist/native/index.darwin-arm64.node +0 -0
  252. package/dist/native/index.js +43 -0
  253. package/dist/native/index.node +0 -0
  254. package/dist/native/package.json +34 -0
  255. package/dist/teammates/index.d.ts +161 -0
  256. package/dist/teammates/index.d.ts.map +1 -0
  257. package/dist/teammates/index.js +827 -0
  258. package/dist/types/index.d.ts +482 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +52 -0
  261. package/native/index.darwin-arm64.node +0 -0
  262. package/native/index.js +33 -19
  263. package/package.json +6 -3
  264. package/packages/src/core/__tests__/permissions.test.ts +1091 -0
  265. package/packages/src/core/agent-loop/__tests__/compaction.test.ts +283 -0
  266. package/packages/src/core/agent-loop/__tests__/formatters.test.ts +234 -0
  267. package/packages/src/core/agent-loop/__tests__/index.test.ts +162 -0
  268. package/packages/src/core/agent-loop/__tests__/loop-state.test.ts +413 -0
  269. package/packages/src/core/agent-loop/__tests__/message-builder.test.ts +229 -0
  270. package/packages/src/core/agent-loop/__tests__/tool-executor.test.ts +457 -0
  271. package/packages/src/core/agent-loop/compaction.ts +92 -0
  272. package/packages/src/core/agent-loop/formatters.ts +50 -0
  273. package/packages/src/core/agent-loop/index.ts +137 -0
  274. package/packages/src/core/agent-loop/loop-state.ts +187 -0
  275. package/packages/src/core/agent-loop/message-builder.ts +62 -0
  276. package/packages/src/core/agent-loop/tool-executor.ts +211 -0
  277. package/packages/src/core/agent-loop/turn-executor.ts +226 -0
  278. package/packages/src/core/agent-loop/types.ts +152 -0
  279. package/packages/src/core/agent-loop.ts +18 -0
  280. package/packages/src/core/api-client-impl.ts +729 -0
  281. package/packages/src/core/api-client.ts +6 -0
  282. package/packages/src/core/checkpoints.ts +606 -0
  283. package/packages/src/core/claude-md.ts +272 -0
  284. package/packages/src/core/cognitive-security/hooks.ts +591 -0
  285. package/packages/src/core/cognitive-security/index.ts +2041 -0
  286. package/packages/src/core/cognitive-security/middleware.ts +536 -0
  287. package/packages/src/core/config/todo +7 -0
  288. package/packages/src/core/config-loader.ts +324 -0
  289. package/packages/src/core/context/__tests__/integration.test.ts +334 -0
  290. package/packages/src/core/context/compaction.ts +170 -0
  291. package/packages/src/core/context/constants.ts +58 -0
  292. package/packages/src/core/context/extraction.ts +85 -0
  293. package/packages/src/core/context/index.ts +66 -0
  294. package/packages/src/core/context/summarization.ts +251 -0
  295. package/packages/src/core/context/token-estimation.ts +98 -0
  296. package/packages/src/core/context/types.ts +59 -0
  297. package/packages/src/core/git-status.ts +262 -0
  298. package/packages/src/core/image.test.ts +180 -0
  299. package/packages/src/core/image.ts +350 -0
  300. package/packages/src/core/lmdb.db +0 -0
  301. package/packages/src/core/lmdb.db-lock +0 -0
  302. package/packages/src/core/models.ts +507 -0
  303. package/packages/src/core/normalizers/todo +8 -0
  304. package/packages/src/core/permissions.ts +431 -0
  305. package/packages/src/core/providers/README.md +230 -0
  306. package/packages/src/core/providers/__tests__/providers.test.ts +135 -0
  307. package/packages/src/core/providers/index.ts +419 -0
  308. package/packages/src/core/providers/types.ts +132 -0
  309. package/packages/src/core/retry.ts +180 -0
  310. package/packages/src/core/session-store.ts +36 -0
  311. package/packages/src/core/sessions/export.ts +329 -0
  312. package/packages/src/core/sessions/index.ts +587 -0
  313. package/packages/src/core/sessions/metadata.ts +309 -0
  314. package/packages/src/core/sessions/persistence.ts +244 -0
  315. package/packages/src/core/sessions/types.ts +169 -0
  316. package/packages/src/core/stream-highlighter.ts +1123 -0
  317. package/packages/src/core/system-reminders.ts +402 -0
  318. package/packages/src/core/todo +8 -0
  319. package/packages/src/ecosystem/hooks/__tests__/index.test.ts +561 -0
  320. package/packages/src/ecosystem/hooks/index.ts +341 -0
  321. package/packages/src/ecosystem/hooks/prompt-evaluator.ts +300 -0
  322. package/packages/src/ecosystem/skills/index.ts +295 -0
  323. package/packages/src/ecosystem/tools/__tests__/index.test.ts +1335 -0
  324. package/packages/src/ecosystem/tools/index.ts +2051 -0
  325. package/packages/src/index.ts +141 -0
  326. package/packages/src/interfaces/mcp/client.ts +389 -0
  327. package/packages/src/interfaces/ui/index.ts +158 -0
  328. package/packages/src/interfaces/ui/lmdb.db +0 -0
  329. package/packages/src/interfaces/ui/lmdb.db-lock +0 -0
  330. package/packages/src/interfaces/ui/spinner.ts +451 -0
  331. package/packages/src/interfaces/ui/terminal/bridge/index.ts +370 -0
  332. package/packages/src/interfaces/ui/terminal/bridge/ipc.ts +829 -0
  333. package/packages/src/interfaces/ui/terminal/bridge/screen-export.ts +968 -0
  334. package/packages/src/interfaces/ui/terminal/bridge/types.ts +226 -0
  335. package/packages/src/interfaces/ui/terminal/bridge/useBridge.ts +210 -0
  336. package/packages/src/interfaces/ui/terminal/cli/bootstrap.ts +132 -0
  337. package/packages/src/interfaces/ui/terminal/cli/index.ts +415 -0
  338. package/packages/src/interfaces/ui/terminal/cli/interactive/index.ts +110 -0
  339. package/packages/src/interfaces/ui/terminal/cli/interactive/input-handler.ts +393 -0
  340. package/packages/src/interfaces/ui/terminal/cli/interactive/interactive-runner.ts +820 -0
  341. package/packages/src/interfaces/ui/terminal/cli/interactive/message-store.ts +299 -0
  342. package/packages/src/interfaces/ui/terminal/cli/interactive/types.ts +274 -0
  343. package/packages/src/interfaces/ui/terminal/lmdb.db +0 -0
  344. package/packages/src/interfaces/ui/terminal/lmdb.db-lock +0 -0
  345. package/packages/src/interfaces/ui/terminal/shared/args.ts +222 -0
  346. package/packages/src/interfaces/ui/terminal/shared/index.ts +84 -0
  347. package/packages/src/interfaces/ui/terminal/shared/loading-state.ts +322 -0
  348. package/packages/src/interfaces/ui/terminal/shared/query.ts +152 -0
  349. package/packages/src/interfaces/ui/terminal/shared/setup.ts +299 -0
  350. package/packages/src/interfaces/ui/terminal/shared/spinner-frames.ts +73 -0
  351. package/packages/src/interfaces/ui/terminal/shared/status-line.ts +366 -0
  352. package/packages/src/interfaces/ui/terminal/shared/system-prompt.ts +146 -0
  353. package/packages/src/lmdb.db +0 -0
  354. package/packages/src/lmdb.db-lock +0 -0
  355. package/packages/src/native/index.ts +2722 -0
  356. package/packages/src/native/tui_v2_types.ts +39 -0
  357. package/packages/src/teammates/coordination.test.ts +279 -0
  358. package/packages/src/teammates/coordination.ts +646 -0
  359. package/packages/src/teammates/index.ts +1052 -0
  360. package/packages/src/teammates/integration.test.ts +272 -0
  361. package/packages/src/teammates/runner.test.ts +235 -0
  362. package/packages/src/teammates/runner.ts +750 -0
  363. package/packages/src/teammates/schemas.ts +673 -0
  364. package/packages/src/types/index.ts +723 -0
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Session Store - Composable session management
3
+ * Composes persistence, metadata, and export modules
4
+ */
5
+
6
+ import { homedir } from "os";
7
+ import { join } from "path";
8
+ import type {
9
+ Message,
10
+ QueryMetrics,
11
+ ContentBlock,
12
+ ToolUseBlock,
13
+ ToolResultBlock,
14
+ } from "../../types/index.js";
15
+ import type {
16
+ SessionMetadata,
17
+ SessionMessage,
18
+ SessionToolUse,
19
+ SessionMetrics,
20
+ SessionContext,
21
+ SessionEntry,
22
+ SessionCheckpoint,
23
+ LoadedSession,
24
+ SessionSummary,
25
+ SessionFilter,
26
+ SessionEventHandler,
27
+ ExportFormat,
28
+ } from "./types.js";
29
+ import { SessionPersistence } from "./persistence.js";
30
+ import { SessionMetadataManager } from "./metadata.js";
31
+ import { SessionExporter } from "./export.js";
32
+
33
+ // Re-export types for convenience
34
+ export * from "./types.js";
35
+ export { SessionPersistence } from "./persistence.js";
36
+ export { SessionMetadataManager } from "./metadata.js";
37
+ export { SessionExporter } from "./export.js";
38
+
39
+ /**
40
+ * Main SessionStore class
41
+ * Composes persistence, metadata, and export functionality
42
+ */
43
+ export class SessionStore {
44
+ private persistence: SessionPersistence;
45
+ private metadataManager: SessionMetadataManager;
46
+ private exporter: SessionExporter;
47
+
48
+ private currentSessionId: string | null = null;
49
+ private currentMetadata: SessionMetadata | null = null;
50
+ private eventHandlers: Set<SessionEventHandler> = new Set();
51
+
52
+ constructor(sessionsDir?: string) {
53
+ const dir = sessionsDir ?? join(homedir(), ".claude", "sessions");
54
+ this.persistence = new SessionPersistence(dir);
55
+ this.metadataManager = new SessionMetadataManager(this.persistence);
56
+ this.exporter = new SessionExporter(this.persistence);
57
+ }
58
+
59
+ // ============================================
60
+ // INITIALIZATION
61
+ // ============================================
62
+
63
+ /**
64
+ * Initialize the sessions directory
65
+ */
66
+ async init(): Promise<void> {
67
+ await this.persistence.init();
68
+ }
69
+
70
+ /**
71
+ * Get the sessions directory path
72
+ */
73
+ getSessionsDir(): string {
74
+ return this.persistence.getSessionsDir();
75
+ }
76
+
77
+ /**
78
+ * Get the file path for a specific session
79
+ */
80
+ getSessionPath(sessionId: string): string {
81
+ return this.persistence.getSessionPath(sessionId);
82
+ }
83
+
84
+ // ============================================
85
+ // EVENT HANDLING
86
+ // ============================================
87
+
88
+ /**
89
+ * Subscribe to session events
90
+ */
91
+ onEvent(handler: SessionEventHandler): () => void {
92
+ this.eventHandlers.add(handler);
93
+ return () => this.eventHandlers.delete(handler);
94
+ }
95
+
96
+ /**
97
+ * Emit a session event
98
+ */
99
+ private async emit(
100
+ type: SessionEventHandler extends (event: infer E) => void ? E : never
101
+ ): Promise<void> {
102
+ const event = { ...type, timestamp: type.timestamp ?? Date.now() };
103
+
104
+ await Promise.all(
105
+ [...this.eventHandlers].map((handler) => handler(event))
106
+ );
107
+ }
108
+
109
+ // ============================================
110
+ // SESSION CREATION & MANAGEMENT
111
+ // ============================================
112
+
113
+ /**
114
+ * Create a new session (or reuse existing empty session)
115
+ */
116
+ async createSession(options: {
117
+ model: string;
118
+ workingDirectory: string;
119
+ agentName?: string;
120
+ agentColor?: string;
121
+ teamName?: string;
122
+ }): Promise<string> {
123
+ await this.init();
124
+
125
+ // Try to find an existing empty session to reuse
126
+ const sessions = await this.listSessions(20);
127
+ const emptySession = sessions.find((s) => s.messageCount === 0);
128
+
129
+ if (emptySession) {
130
+ // Reuse the empty session
131
+ this.currentSessionId = emptySession.id;
132
+ this.currentMetadata = this.metadataManager.createMetadata({
133
+ id: emptySession.id,
134
+ ...options,
135
+ });
136
+
137
+ await this.persistence.append(emptySession.id, this.currentMetadata);
138
+
139
+ await this.emit({
140
+ type: "resumed",
141
+ sessionId: emptySession.id,
142
+ timestamp: Date.now(),
143
+ data: { reused: true },
144
+ });
145
+
146
+ return emptySession.id;
147
+ }
148
+
149
+ // No empty session found, create new
150
+ const sessionId = this.metadataManager.generateId();
151
+ this.currentSessionId = sessionId;
152
+ this.currentMetadata = this.metadataManager.createMetadata({
153
+ id: sessionId,
154
+ ...options,
155
+ });
156
+
157
+ await this.persistence.append(sessionId, this.currentMetadata);
158
+
159
+ // Write context entry
160
+ const context: SessionContext = {
161
+ type: "context",
162
+ timestamp: Date.now(),
163
+ workingDirectory: options.workingDirectory,
164
+ };
165
+ await this.persistence.append(sessionId, context);
166
+
167
+ await this.emit({
168
+ type: "created",
169
+ sessionId,
170
+ timestamp: Date.now(),
171
+ data: this.currentMetadata,
172
+ });
173
+
174
+ return sessionId;
175
+ }
176
+
177
+ /**
178
+ * Resume an existing session
179
+ */
180
+ async resumeSession(sessionId: string): Promise<LoadedSession | null> {
181
+ const entries = await this.persistence.read(sessionId);
182
+
183
+ if (entries.length === 0) {
184
+ return null;
185
+ }
186
+
187
+ const session = this.parseEntries(entries);
188
+ session.metadata.id = sessionId; // Ensure ID is set
189
+
190
+ this.currentSessionId = sessionId;
191
+ this.currentMetadata = session.metadata;
192
+
193
+ await this.emit({
194
+ type: "resumed",
195
+ sessionId,
196
+ timestamp: Date.now(),
197
+ data: session.metadata,
198
+ });
199
+
200
+ return session;
201
+ }
202
+
203
+ /**
204
+ * Parse session entries into structured session
205
+ */
206
+ private parseEntries(entries: SessionEntry[]): LoadedSession {
207
+ let metadata: SessionMetadata | null = null;
208
+ const messages: Message[] = [];
209
+ const tools: SessionToolUse[] = [];
210
+ const metrics: QueryMetrics[] = [];
211
+ let context: SessionContext | null = null;
212
+ const checkpoints: SessionCheckpoint[] = [];
213
+
214
+ for (const entry of entries) {
215
+ // All entries have explicit type field now
216
+ switch (entry.type) {
217
+ case "metadata":
218
+ metadata = entry as SessionMetadata;
219
+ break;
220
+ case "message":
221
+ messages.push((entry as SessionMessage).data);
222
+ break;
223
+ case "tool_use":
224
+ tools.push(entry as SessionToolUse);
225
+ break;
226
+ case "metrics":
227
+ metrics.push((entry as SessionMetrics).data);
228
+ break;
229
+ case "context":
230
+ context = entry as SessionContext;
231
+ break;
232
+ case "checkpoint":
233
+ checkpoints.push(entry as SessionCheckpoint);
234
+ break;
235
+ }
236
+ }
237
+
238
+ if (!metadata) {
239
+ metadata = this.metadataManager.createMetadata({
240
+ model: "claude-sonnet-4-6",
241
+ workingDirectory: process.cwd(),
242
+ });
243
+ }
244
+
245
+ return {
246
+ metadata,
247
+ messages,
248
+ tools,
249
+ metrics,
250
+ context,
251
+ checkpoints,
252
+ };
253
+ }
254
+
255
+ /**
256
+ * Delete a session
257
+ */
258
+ async deleteSession(sessionId: string): Promise<boolean> {
259
+ const deleted = await this.persistence.delete(sessionId);
260
+
261
+ if (deleted) {
262
+ await this.emit({
263
+ type: "deleted",
264
+ sessionId,
265
+ timestamp: Date.now(),
266
+ });
267
+
268
+ if (this.currentSessionId === sessionId) {
269
+ this.currentSessionId = null;
270
+ this.currentMetadata = null;
271
+ }
272
+ }
273
+
274
+ return deleted;
275
+ }
276
+
277
+ // ============================================
278
+ // DATA SAVING
279
+ // ============================================
280
+
281
+ /**
282
+ * Save a message to the current session
283
+ */
284
+ async saveMessage(message: Message): Promise<void> {
285
+ if (!this.currentSessionId) {
286
+ throw new Error("No active session");
287
+ }
288
+
289
+ const entry: SessionMessage = {
290
+ type: "message",
291
+ timestamp: Date.now(),
292
+ data: message,
293
+ };
294
+
295
+ await this.persistence.append(this.currentSessionId, entry);
296
+
297
+ await this.emit({
298
+ type: "message_saved",
299
+ sessionId: this.currentSessionId,
300
+ timestamp: Date.now(),
301
+ data: message,
302
+ });
303
+ }
304
+
305
+ /**
306
+ * Save a tool use to the current session
307
+ */
308
+ async saveToolUse(
309
+ toolId: string,
310
+ toolName: string,
311
+ input: Record<string, unknown>,
312
+ result?: string,
313
+ isError?: boolean
314
+ ): Promise<void> {
315
+ if (!this.currentSessionId) {
316
+ throw new Error("No active session");
317
+ }
318
+
319
+ const entry: SessionToolUse = {
320
+ type: "tool_use",
321
+ timestamp: Date.now(),
322
+ toolId,
323
+ toolName,
324
+ input,
325
+ result,
326
+ isError,
327
+ };
328
+
329
+ await this.persistence.append(this.currentSessionId, entry);
330
+ }
331
+
332
+ /**
333
+ * Save metrics to the current session
334
+ */
335
+ async saveMetrics(metrics: QueryMetrics): Promise<void> {
336
+ if (!this.currentSessionId) {
337
+ throw new Error("No active session");
338
+ }
339
+
340
+ const entry: SessionMetrics = {
341
+ type: "metrics",
342
+ timestamp: Date.now(),
343
+ data: metrics,
344
+ };
345
+
346
+ await this.persistence.append(this.currentSessionId, entry);
347
+
348
+ // Update running totals in metadata
349
+ if (this.currentMetadata) {
350
+ this.currentMetadata.totalCost =
351
+ (this.currentMetadata.totalCost ?? 0) + metrics.costUSD;
352
+ this.currentMetadata.totalTokens = {
353
+ input:
354
+ (this.currentMetadata.totalTokens?.input ?? 0) +
355
+ metrics.usage.input_tokens,
356
+ output:
357
+ (this.currentMetadata.totalTokens?.output ?? 0) +
358
+ metrics.usage.output_tokens,
359
+ };
360
+ }
361
+
362
+ await this.emit({
363
+ type: "metrics_saved",
364
+ sessionId: this.currentSessionId,
365
+ timestamp: Date.now(),
366
+ data: metrics,
367
+ });
368
+ }
369
+
370
+ // ============================================
371
+ // LISTING & QUERYING
372
+ // ============================================
373
+
374
+ /**
375
+ * List recent sessions
376
+ */
377
+ async listSessions(limit: number = 20, filter?: SessionFilter): Promise<SessionSummary[]> {
378
+ await this.init();
379
+
380
+ const files = await this.persistence.listFiles();
381
+
382
+ // Get modification times for sorting
383
+ const modTimes = await this.persistence.getModificationTimes(files);
384
+
385
+ // Sort by modification time (newest first)
386
+ const sortedFiles = files.sort((a, b) => {
387
+ const timeA = modTimes.get(a)?.getTime() ?? 0;
388
+ const timeB = modTimes.get(b)?.getTime() ?? 0;
389
+ return timeB - timeA;
390
+ });
391
+
392
+ // Parse summaries
393
+ const sessions: SessionSummary[] = [];
394
+
395
+ for (const sessionId of sortedFiles.slice(0, limit * 2)) {
396
+ const summary = await this.metadataManager.getSummary(sessionId);
397
+ if (summary) {
398
+ sessions.push(summary);
399
+ }
400
+ }
401
+
402
+ // Apply filter if provided
403
+ const filtered = filter
404
+ ? this.metadataManager.filterSessions(sessions, filter)
405
+ : sessions;
406
+
407
+ // Sort by last activity
408
+ const sorted = this.metadataManager.sortSessions(
409
+ filtered,
410
+ "lastActivity",
411
+ "desc"
412
+ );
413
+
414
+ return sorted.slice(0, limit);
415
+ }
416
+
417
+ /**
418
+ * Get session summary by ID
419
+ */
420
+ async getSessionSummary(sessionId: string): Promise<SessionSummary | null> {
421
+ return this.metadataManager.getSummary(sessionId);
422
+ }
423
+
424
+ /**
425
+ * Find empty sessions
426
+ */
427
+ async findEmptySessions(): Promise<SessionSummary[]> {
428
+ const sessions = await this.listSessions(100);
429
+ return this.metadataManager.findEmptySessions(sessions);
430
+ }
431
+
432
+ /**
433
+ * Clean up empty sessions (delete them)
434
+ */
435
+ async cleanupEmptySessions(): Promise<number> {
436
+ const empty = await this.findEmptySessions();
437
+ let deleted = 0;
438
+
439
+ for (const session of empty) {
440
+ // Don't delete the current session even if empty
441
+ if (session.id === this.currentSessionId) {
442
+ continue;
443
+ }
444
+
445
+ const success = await this.deleteSession(session.id);
446
+ if (success) {
447
+ deleted++;
448
+ }
449
+ }
450
+
451
+ return deleted;
452
+ }
453
+
454
+ // ============================================
455
+ // EXPORT
456
+ // ============================================
457
+
458
+ /**
459
+ * Export session to a file
460
+ */
461
+ async exportSession(
462
+ sessionId: string,
463
+ format: ExportFormat,
464
+ outputPath?: string
465
+ ): Promise<string> {
466
+ const session = await this.resumeSession(sessionId);
467
+ if (!session) {
468
+ throw new Error(`Session not found: ${sessionId}`);
469
+ }
470
+
471
+ let content: string;
472
+ let defaultExt: string;
473
+
474
+ switch (format) {
475
+ case "jsonl": {
476
+ const sessionFile = this.persistence.getSessionPath(sessionId);
477
+ content = await Bun.file(sessionFile).text();
478
+ defaultExt = "jsonl";
479
+ break;
480
+ }
481
+
482
+ case "json": {
483
+ content = this.exporter.export(session, "json");
484
+ defaultExt = "json";
485
+ break;
486
+ }
487
+
488
+ case "markdown": {
489
+ content = this.exporter.export(session, "markdown");
490
+ defaultExt = "md";
491
+ break;
492
+ }
493
+
494
+ default:
495
+ throw new Error(`Unsupported format: ${format}`);
496
+ }
497
+
498
+ const finalPath =
499
+ outputPath ?? join(process.cwd(), `session-${sessionId}.${defaultExt}`);
500
+ await Bun.write(finalPath, content);
501
+
502
+ return finalPath;
503
+ }
504
+
505
+ // ============================================
506
+ // CURRENT SESSION ACCESSORS
507
+ // ============================================
508
+
509
+ /**
510
+ * Get the current session ID
511
+ */
512
+ getCurrentSessionId(): string | null {
513
+ return this.currentSessionId;
514
+ }
515
+
516
+ /**
517
+ * Get the current session metadata
518
+ */
519
+ getCurrentMetadata(): SessionMetadata | null {
520
+ return this.currentMetadata;
521
+ }
522
+
523
+ /**
524
+ * Update current session metadata
525
+ */
526
+ updateMetadata(updates: Partial<SessionMetadata>): void {
527
+ if (this.currentMetadata) {
528
+ this.currentMetadata = this.metadataManager.merge(
529
+ this.currentMetadata,
530
+ updates
531
+ );
532
+ }
533
+ }
534
+
535
+ // ============================================
536
+ // UTILITY
537
+ // ============================================
538
+
539
+ /**
540
+ * Check if a session exists
541
+ */
542
+ async sessionExists(sessionId: string): Promise<boolean> {
543
+ return this.persistence.exists(sessionId);
544
+ }
545
+
546
+ /**
547
+ * Get session statistics
548
+ */
549
+ async getStats(): Promise<{
550
+ totalSessions: number;
551
+ totalMessages: number;
552
+ totalCost: number;
553
+ emptySessions: number;
554
+ }> {
555
+ const sessions = await this.listSessions(1000);
556
+ const stats = this.metadataManager.calculateStats(sessions);
557
+ const empty = this.metadataManager.findEmptySessions(sessions);
558
+
559
+ return {
560
+ totalSessions: stats.totalSessions,
561
+ totalMessages: stats.totalMessages,
562
+ totalCost: stats.totalCost,
563
+ emptySessions: empty.length,
564
+ };
565
+ }
566
+ }
567
+
568
+ // ============================================
569
+ // HELPER FUNCTIONS (for CLI compatibility)
570
+ // ============================================
571
+
572
+ /**
573
+ * Format a session summary for display
574
+ */
575
+ export function formatSessionSummary(session: SessionSummary): string {
576
+ return SessionExporter.formatSummary(session);
577
+ }
578
+
579
+ /**
580
+ * Print sessions list for CLI
581
+ */
582
+ export function printSessionsList(sessions: SessionSummary[]): void {
583
+ SessionExporter.printList(sessions);
584
+ }
585
+
586
+ // Default export for convenience
587
+ export default SessionStore;