@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,233 @@
1
+ /**
2
+ * Session Metadata - Manage session metadata and summaries
3
+ */
4
+ import { SessionPersistence } from "./persistence.js";
5
+ export class SessionMetadataManager {
6
+ persistence;
7
+ constructor(persistence) {
8
+ this.persistence = persistence;
9
+ }
10
+ /**
11
+ * Generate a new session ID
12
+ */
13
+ generateId() {
14
+ const timestamp = Date.now().toString(36);
15
+ const random = Math.random().toString(36).slice(2, 8);
16
+ return `${timestamp}-${random}`;
17
+ }
18
+ /**
19
+ * Create metadata for a new session
20
+ */
21
+ createMetadata(options) {
22
+ return {
23
+ type: "metadata",
24
+ id: options.id ?? this.generateId(),
25
+ created: Date.now(),
26
+ updated: Date.now(),
27
+ model: options.model,
28
+ workingDirectory: options.workingDirectory,
29
+ agentName: options.agentName,
30
+ agentColor: options.agentColor,
31
+ teamName: options.teamName,
32
+ totalCost: 0,
33
+ totalTokens: { input: 0, output: 0 },
34
+ };
35
+ }
36
+ /**
37
+ * Update metadata timestamps
38
+ */
39
+ touch(metadata) {
40
+ return {
41
+ ...metadata,
42
+ updated: Date.now(),
43
+ };
44
+ }
45
+ /**
46
+ * Merge updated fields into metadata
47
+ */
48
+ merge(metadata, updates) {
49
+ return {
50
+ ...metadata,
51
+ ...updates,
52
+ updated: Date.now(),
53
+ };
54
+ }
55
+ /**
56
+ * Get summary from session entries
57
+ */
58
+ async getSummary(sessionId) {
59
+ const entries = await this.persistence.read(sessionId);
60
+ return this.entriesToSummary(sessionId, entries);
61
+ }
62
+ /**
63
+ * Convert entries to summary
64
+ */
65
+ entriesToSummary(sessionId, entries) {
66
+ let metadata = null;
67
+ let messageCount = 0;
68
+ let totalCost = 0;
69
+ let totalInput = 0;
70
+ let totalOutput = 0;
71
+ let firstMessage;
72
+ let lastActivity;
73
+ for (const entry of entries) {
74
+ // All entries have a type field now
75
+ if ("type" in entry) {
76
+ switch (entry.type) {
77
+ case "metadata":
78
+ metadata = entry;
79
+ break;
80
+ case "message":
81
+ messageCount++;
82
+ lastActivity = entry.timestamp;
83
+ const msg = entry.data;
84
+ if (!firstMessage && msg.role === "user") {
85
+ const textBlock = msg.content.find((b) => b.type === "text");
86
+ if (textBlock && "text" in textBlock) {
87
+ firstMessage = textBlock.text.slice(0, 100);
88
+ if (textBlock.text.length > 100) {
89
+ firstMessage += "...";
90
+ }
91
+ }
92
+ }
93
+ break;
94
+ case "metrics":
95
+ const metrics = entry.data;
96
+ totalCost += metrics.costUSD;
97
+ totalInput += metrics.usage.input_tokens;
98
+ totalOutput += metrics.usage.output_tokens;
99
+ lastActivity = entry.timestamp;
100
+ break;
101
+ case "tool_use":
102
+ case "context":
103
+ case "checkpoint":
104
+ lastActivity = entry.timestamp;
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ if (!metadata) {
110
+ return null;
111
+ }
112
+ return {
113
+ id: sessionId,
114
+ created: metadata.created,
115
+ updated: metadata.updated,
116
+ lastActivity,
117
+ model: metadata.model,
118
+ messageCount,
119
+ totalCost,
120
+ totalTokens: { input: totalInput, output: totalOutput },
121
+ firstMessage,
122
+ workingDirectory: metadata.workingDirectory,
123
+ metadata: {
124
+ agentName: metadata.agentName,
125
+ agentColor: metadata.agentColor,
126
+ teamName: metadata.teamName,
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Filter sessions based on criteria
132
+ */
133
+ filterSessions(sessions, filter) {
134
+ return sessions.filter((session) => {
135
+ // Filter by model
136
+ if (filter.model && session.model !== filter.model) {
137
+ return false;
138
+ }
139
+ // Filter by working directory
140
+ if (filter.workingDirectory &&
141
+ session.workingDirectory !== filter.workingDirectory) {
142
+ return false;
143
+ }
144
+ // Filter by minimum messages
145
+ if (filter.minMessages && session.messageCount < filter.minMessages) {
146
+ return false;
147
+ }
148
+ // Filter by age (maxAge = maximum age in ms)
149
+ if (filter.maxAge) {
150
+ const age = Date.now() - session.created;
151
+ if (age > filter.maxAge) {
152
+ return false;
153
+ }
154
+ }
155
+ // Filter by timestamp (since = minimum created timestamp)
156
+ if (filter.since && session.created < filter.since) {
157
+ return false;
158
+ }
159
+ return true;
160
+ });
161
+ }
162
+ /**
163
+ * Sort sessions by various criteria
164
+ */
165
+ sortSessions(sessions, sortBy = "lastActivity", order = "desc") {
166
+ return [...sessions].sort((a, b) => {
167
+ let comparison = 0;
168
+ switch (sortBy) {
169
+ case "created":
170
+ comparison = a.created - b.created;
171
+ break;
172
+ case "updated":
173
+ comparison = a.updated - b.updated;
174
+ break;
175
+ case "lastActivity":
176
+ comparison = (a.lastActivity ?? a.updated) - (b.lastActivity ?? b.updated);
177
+ break;
178
+ case "messageCount":
179
+ comparison = a.messageCount - b.messageCount;
180
+ break;
181
+ case "cost":
182
+ comparison = a.totalCost - b.totalCost;
183
+ break;
184
+ }
185
+ return order === "desc" ? -comparison : comparison;
186
+ });
187
+ }
188
+ /**
189
+ * Find empty sessions (no messages)
190
+ */
191
+ findEmptySessions(sessions) {
192
+ return sessions.filter((s) => s.messageCount === 0);
193
+ }
194
+ /**
195
+ * Find sessions by partial ID match
196
+ */
197
+ findById(sessions, partialId) {
198
+ return sessions.find((s) => s.id.startsWith(partialId) || s.id.includes(partialId));
199
+ }
200
+ /**
201
+ * Get unique models from sessions
202
+ */
203
+ getUniqueModels(sessions) {
204
+ const models = new Set(sessions.map((s) => s.model));
205
+ return [...models].sort();
206
+ }
207
+ /**
208
+ * Get unique working directories from sessions
209
+ */
210
+ getUniqueDirectories(sessions) {
211
+ const dirs = new Set(sessions.map((s) => s.workingDirectory));
212
+ return [...dirs].sort();
213
+ }
214
+ /**
215
+ * Calculate aggregate statistics
216
+ */
217
+ calculateStats(sessions) {
218
+ const totalSessions = sessions.length;
219
+ const totalMessages = sessions.reduce((sum, s) => sum + s.messageCount, 0);
220
+ const totalCost = sessions.reduce((sum, s) => sum + s.totalCost, 0);
221
+ const totalInputTokens = sessions.reduce((sum, s) => sum + s.totalTokens.input, 0);
222
+ const totalOutputTokens = sessions.reduce((sum, s) => sum + s.totalTokens.output, 0);
223
+ return {
224
+ totalSessions,
225
+ totalMessages,
226
+ totalCost,
227
+ totalInputTokens,
228
+ totalOutputTokens,
229
+ averageMessagesPerSession: totalSessions > 0 ? totalMessages / totalSessions : 0,
230
+ averageCostPerSession: totalSessions > 0 ? totalCost / totalSessions : 0,
231
+ };
232
+ }
233
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Session Persistence - File operations for session storage
3
+ * Handles JSONL file I/O with atomic writes and queue management
4
+ */
5
+ import type { SessionEntry, SessionMetadata, ISessionPersistence } from "./types.js";
6
+ export declare class SessionPersistence implements ISessionPersistence {
7
+ private sessionsDir;
8
+ private writeQueues;
9
+ constructor(sessionsDir?: string);
10
+ /**
11
+ * Get the sessions directory path
12
+ */
13
+ getSessionsDir(): string;
14
+ /**
15
+ * Get the file path for a session
16
+ */
17
+ getSessionPath(sessionId: string): string;
18
+ /**
19
+ * Initialize the sessions directory
20
+ */
21
+ init(): Promise<void>;
22
+ /**
23
+ * Check if a session file exists
24
+ */
25
+ exists(sessionId: string): Promise<boolean>;
26
+ /**
27
+ * Read all entries from a session file
28
+ */
29
+ read(sessionId: string): Promise<SessionEntry[]>;
30
+ /**
31
+ * Append an entry to a session file (queued for atomic writes)
32
+ */
33
+ append(sessionId: string, entry: SessionEntry | SessionMetadata): Promise<void>;
34
+ /**
35
+ * Write all entries to a session file (replaces existing)
36
+ */
37
+ writeAll(sessionId: string, entries: SessionEntry[]): Promise<void>;
38
+ /**
39
+ * Delete a session file
40
+ */
41
+ delete(sessionId: string): Promise<boolean>;
42
+ /**
43
+ * List all session files in the directory
44
+ */
45
+ listFiles(): Promise<string[]>;
46
+ /**
47
+ * Get file stats for a session
48
+ */
49
+ getStats(sessionId: string): Promise<{
50
+ exists: boolean;
51
+ size: number;
52
+ mtime: Date | null;
53
+ }>;
54
+ /**
55
+ * Get modification times for multiple sessions
56
+ */
57
+ getModificationTimes(sessionIds: string[]): Promise<Map<string, Date>>;
58
+ /**
59
+ * Read the first line (metadata) of a session file
60
+ */
61
+ readMetadata(sessionId: string): Promise<SessionMetadata | null>;
62
+ /**
63
+ * Read the last N entries from a session file
64
+ */
65
+ readLast(sessionId: string, count: number): Promise<SessionEntry[]>;
66
+ /**
67
+ * Count entries in a session file
68
+ */
69
+ countEntries(sessionId: string): Promise<number>;
70
+ }
71
+ export declare function getSessionPersistence(sessionsDir?: string): SessionPersistence;
72
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../packages/src/core/sessions/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,qBAAa,kBAAmB,YAAW,mBAAmB;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAyC;gBAEhD,WAAW,CAAC,EAAE,MAAM;IAIhC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjD;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA2BtD;;OAEG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAAG,eAAe,GACpC,OAAO,CAAC,IAAI,CAAC;IAyBhB;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzE;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBjD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAYpC;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACzC,MAAM,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;KACpB,CAAC;IAiBF;;OAEG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAe5E;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAatE;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKzE;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIvD;AAKD,wBAAgB,qBAAqB,CACnC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAKpB"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Session Persistence - File operations for session storage
3
+ * Handles JSONL file I/O with atomic writes and queue management
4
+ */
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ export class SessionPersistence {
8
+ sessionsDir;
9
+ writeQueues = new Map();
10
+ constructor(sessionsDir) {
11
+ this.sessionsDir = sessionsDir ?? join(homedir(), ".claude", "sessions");
12
+ }
13
+ /**
14
+ * Get the sessions directory path
15
+ */
16
+ getSessionsDir() {
17
+ return this.sessionsDir;
18
+ }
19
+ /**
20
+ * Get the file path for a session
21
+ */
22
+ getSessionPath(sessionId) {
23
+ return join(this.sessionsDir, `${sessionId}.jsonl`);
24
+ }
25
+ /**
26
+ * Initialize the sessions directory
27
+ */
28
+ async init() {
29
+ try {
30
+ await Bun.write(join(this.sessionsDir, ".gitkeep"), "");
31
+ }
32
+ catch {
33
+ // Directory might already exist
34
+ }
35
+ }
36
+ /**
37
+ * Check if a session file exists
38
+ */
39
+ async exists(sessionId) {
40
+ const file = Bun.file(this.getSessionPath(sessionId));
41
+ return file.exists();
42
+ }
43
+ /**
44
+ * Read all entries from a session file
45
+ */
46
+ async read(sessionId) {
47
+ const sessionFile = this.getSessionPath(sessionId);
48
+ try {
49
+ const content = await Bun.file(sessionFile).text();
50
+ if (!content) {
51
+ return [];
52
+ }
53
+ const entries = [];
54
+ const lines = content.trim().split("\n");
55
+ for (const line of lines) {
56
+ if (!line.trim())
57
+ continue;
58
+ try {
59
+ entries.push(JSON.parse(line));
60
+ }
61
+ catch {
62
+ // Skip malformed lines
63
+ }
64
+ }
65
+ return entries;
66
+ }
67
+ catch {
68
+ return [];
69
+ }
70
+ }
71
+ /**
72
+ * Append an entry to a session file (queued for atomic writes)
73
+ */
74
+ async append(sessionId, entry) {
75
+ const sessionFile = this.getSessionPath(sessionId);
76
+ // Queue writes per session to ensure order
77
+ const existingQueue = this.writeQueues.get(sessionId) || Promise.resolve();
78
+ const newQueue = existingQueue.then(async () => {
79
+ const line = JSON.stringify(entry) + "\n";
80
+ const file = Bun.file(sessionFile);
81
+ const existing = (await file.exists()) ? await file.text() : "";
82
+ await Bun.write(sessionFile, existing + line);
83
+ });
84
+ this.writeQueues.set(sessionId, newQueue);
85
+ try {
86
+ await newQueue;
87
+ }
88
+ finally {
89
+ // Clean up completed queue
90
+ if (this.writeQueues.get(sessionId) === newQueue) {
91
+ this.writeQueues.delete(sessionId);
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Write all entries to a session file (replaces existing)
97
+ */
98
+ async writeAll(sessionId, entries) {
99
+ const sessionFile = this.getSessionPath(sessionId);
100
+ const content = entries.map((e) => JSON.stringify(e)).join("\n") + "\n";
101
+ await Bun.write(sessionFile, content);
102
+ }
103
+ /**
104
+ * Delete a session file
105
+ */
106
+ async delete(sessionId) {
107
+ const sessionFile = this.getSessionPath(sessionId);
108
+ try {
109
+ const file = Bun.file(sessionFile);
110
+ if (await file.exists()) {
111
+ const { unlink } = await import("fs/promises");
112
+ await unlink(sessionFile);
113
+ return true;
114
+ }
115
+ return false;
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * List all session files in the directory
123
+ */
124
+ async listFiles() {
125
+ await this.init();
126
+ try {
127
+ const glob = new Bun.Glob("*.jsonl");
128
+ const files = [...glob.scanSync(this.sessionsDir)];
129
+ return files.map((f) => f.replace(".jsonl", ""));
130
+ }
131
+ catch {
132
+ return [];
133
+ }
134
+ }
135
+ /**
136
+ * Get file stats for a session
137
+ */
138
+ async getStats(sessionId) {
139
+ const sessionFile = this.getSessionPath(sessionId);
140
+ try {
141
+ const file = Bun.file(sessionFile);
142
+ const stat = await file.stat();
143
+ return {
144
+ exists: true,
145
+ size: stat?.size ?? 0,
146
+ mtime: stat?.mtime ?? null,
147
+ };
148
+ }
149
+ catch {
150
+ return { exists: false, size: 0, mtime: null };
151
+ }
152
+ }
153
+ /**
154
+ * Get modification times for multiple sessions
155
+ */
156
+ async getModificationTimes(sessionIds) {
157
+ const times = new Map();
158
+ await Promise.all(sessionIds.map(async (id) => {
159
+ const stats = await this.getStats(id);
160
+ if (stats.exists && stats.mtime) {
161
+ times.set(id, stats.mtime);
162
+ }
163
+ }));
164
+ return times;
165
+ }
166
+ /**
167
+ * Read the first line (metadata) of a session file
168
+ */
169
+ async readMetadata(sessionId) {
170
+ const entries = await this.read(sessionId);
171
+ for (const entry of entries) {
172
+ // Metadata has explicit type field now
173
+ if ("type" in entry && entry.type === "metadata") {
174
+ return entry;
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ /**
180
+ * Read the last N entries from a session file
181
+ */
182
+ async readLast(sessionId, count) {
183
+ const entries = await this.read(sessionId);
184
+ return entries.slice(-count);
185
+ }
186
+ /**
187
+ * Count entries in a session file
188
+ */
189
+ async countEntries(sessionId) {
190
+ const entries = await this.read(sessionId);
191
+ return entries.length;
192
+ }
193
+ }
194
+ // Singleton instance for convenience
195
+ let defaultPersistence = null;
196
+ export function getSessionPersistence(sessionsDir) {
197
+ if (!defaultPersistence) {
198
+ defaultPersistence = new SessionPersistence(sessionsDir);
199
+ }
200
+ return defaultPersistence;
201
+ }
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Session Types - All type definitions for session handling
3
+ */
4
+ import type { Message, QueryMetrics } from "../../types/index.js";
5
+ export interface SessionMetadata {
6
+ type: "metadata";
7
+ id: string;
8
+ created: number;
9
+ updated: number;
10
+ model: string;
11
+ workingDirectory: string;
12
+ agentName?: string;
13
+ agentColor?: string;
14
+ teamName?: string;
15
+ totalCost?: number;
16
+ totalTokens?: {
17
+ input: number;
18
+ output: number;
19
+ };
20
+ }
21
+ export interface SessionMessage {
22
+ type: "message";
23
+ timestamp: number;
24
+ data: Message;
25
+ }
26
+ export interface SessionToolUse {
27
+ type: "tool_use";
28
+ timestamp: number;
29
+ toolId: string;
30
+ toolName: string;
31
+ input: Record<string, unknown>;
32
+ result?: string;
33
+ isError?: boolean;
34
+ }
35
+ export interface SessionMetrics {
36
+ type: "metrics";
37
+ timestamp: number;
38
+ data: QueryMetrics;
39
+ }
40
+ export interface SessionContext {
41
+ type: "context";
42
+ timestamp: number;
43
+ workingDirectory: string;
44
+ gitBranch?: string;
45
+ systemPrompt?: string;
46
+ }
47
+ export interface SessionCheckpoint {
48
+ type: "checkpoint";
49
+ timestamp: number;
50
+ checkpointId: string;
51
+ label?: string;
52
+ messageCount: number;
53
+ }
54
+ export type SessionEntry = SessionMetadata | SessionMessage | SessionToolUse | SessionMetrics | SessionContext | SessionCheckpoint;
55
+ export interface LoadedSession {
56
+ metadata: SessionMetadata;
57
+ messages: Message[];
58
+ tools: SessionToolUse[];
59
+ metrics: QueryMetrics[];
60
+ context: SessionContext | null;
61
+ checkpoints: SessionCheckpoint[];
62
+ }
63
+ export interface SessionSummary {
64
+ id: string;
65
+ created: number;
66
+ updated: number;
67
+ lastActivity?: number;
68
+ model: string;
69
+ messageCount: number;
70
+ totalCost: number;
71
+ totalTokens: {
72
+ input: number;
73
+ output: number;
74
+ };
75
+ firstMessage?: string;
76
+ workingDirectory: string;
77
+ metadata?: Record<string, unknown>;
78
+ agentName?: string;
79
+ agentColor?: string;
80
+ teamName?: string;
81
+ }
82
+ export interface SessionFilter {
83
+ model?: string;
84
+ workingDirectory?: string;
85
+ minMessages?: number;
86
+ maxAge?: number;
87
+ since?: number;
88
+ }
89
+ export type SessionEventType = "created" | "resumed" | "message_saved" | "metrics_saved" | "checkpoint_created" | "deleted";
90
+ export interface SessionEvent {
91
+ type: SessionEventType;
92
+ sessionId: string;
93
+ timestamp: number;
94
+ data?: unknown;
95
+ }
96
+ export type SessionEventHandler = (event: SessionEvent) => void | Promise<void>;
97
+ export interface ISessionPersistence {
98
+ init(): Promise<void>;
99
+ read(sessionId: string): Promise<SessionEntry[]>;
100
+ append(sessionId: string, entry: SessionEntry | SessionMetadata): Promise<void>;
101
+ delete(sessionId: string): Promise<boolean>;
102
+ exists(sessionId: string): Promise<boolean>;
103
+ listFiles(): Promise<string[]>;
104
+ }
105
+ export type ExportFormat = "jsonl" | "json" | "markdown";
106
+ export interface ISessionExporter {
107
+ export(session: LoadedSession, format: ExportFormat): string;
108
+ exportToFile(sessionId: string, format: ExportFormat, outputPath?: string): Promise<string>;
109
+ }
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../packages/src/core/sessions/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Session Types - All type definitions for session handling
3
+ */
4
+ export {};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Streaming text highlighter for code blocks and diffs
3
+ * Buffers text and highlights as content completes during streaming output
4
+ */
5
+ /**
6
+ * Creates a streaming highlighter that detects and highlights code blocks
7
+ * and diffs as they complete during streaming output.
8
+ */
9
+ export declare function createStreamHighlighter(): {
10
+ process: (text: string) => string;
11
+ flush: () => string;
12
+ };
13
+ /**
14
+ * Highlight complete text with code blocks
15
+ * Used for non-streaming contexts or final output
16
+ */
17
+ export declare function highlightTextWithCodeBlocks(text: string): string;
18
+ //# sourceMappingURL=stream-highlighter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-highlighter.d.ts","sourceRoot":"","sources":["../../packages/src/core/stream-highlighter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA02BH;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI;IACzC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,KAAK,EAAE,MAAM,MAAM,CAAC;CACrB,CAiLA;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuDhE"}