@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,180 @@
1
+ /**
2
+ * Retry Logic - Exponential backoff with jitter for API failures
3
+ * Handles rate limits, network errors, and transient failures
4
+ */
5
+
6
+ export interface RetryOptions {
7
+ maxRetries?: number;
8
+ baseDelayMs?: number;
9
+ maxDelayMs?: number;
10
+ jitterFactor?: number;
11
+ retryableStatusCodes?: number[];
12
+ onRetry?: (attempt: number, error: Error, delayMs: number) => void;
13
+ }
14
+
15
+ const DEFAULT_RETRY_OPTIONS = {
16
+ maxRetries: 3,
17
+ baseDelayMs: 1000,
18
+ maxDelayMs: 30000,
19
+ jitterFactor: 0.2,
20
+ retryableStatusCodes: [429, 500, 502, 503, 504, 529],
21
+ onRetry: undefined as ((attempt: number, error: Error, delayMs: number) => void) | undefined,
22
+ };
23
+
24
+ /**
25
+ * Calculate delay with exponential backoff and jitter
26
+ */
27
+ function calculateDelay(
28
+ attempt: number,
29
+ baseDelayMs: number,
30
+ maxDelayMs: number,
31
+ jitterFactor: number
32
+ ): number {
33
+ // Exponential backoff: baseDelay * 2^attempt
34
+ const exponentialDelay = baseDelayMs * Math.pow(2, attempt);
35
+
36
+ // Add jitter to prevent thundering herd
37
+ const jitter = exponentialDelay * jitterFactor * (Math.random() * 2 - 1);
38
+
39
+ // Cap at max delay
40
+ return Math.min(exponentialDelay + jitter, maxDelayMs);
41
+ }
42
+
43
+ /**
44
+ * Check if an error is retryable
45
+ */
46
+ function isRetryableError(
47
+ error: Error,
48
+ retryableStatusCodes: number[]
49
+ ): boolean {
50
+ // Check for rate limit errors
51
+ if (error.message.includes("429") || error.message.includes("rate limit")) {
52
+ return true;
53
+ }
54
+
55
+ // Check for server errors
56
+ if (error.message.includes("500") ||
57
+ error.message.includes("502") ||
58
+ error.message.includes("503") ||
59
+ error.message.includes("504")) {
60
+ return true;
61
+ }
62
+
63
+ // Check for network errors
64
+ if (error.message.includes("ECONNREFUSED") ||
65
+ error.message.includes("ENOTFOUND") ||
66
+ error.message.includes("ETIMEDOUT") ||
67
+ error.message.includes("network") ||
68
+ error.message.includes("fetch failed")) {
69
+ return true;
70
+ }
71
+
72
+ // Check for transient API errors (empty/malformed responses)
73
+ if (error.message.includes("No message received") ||
74
+ error.message.includes("empty response") ||
75
+ error.message.includes("invalid response") ||
76
+ error.message.includes("unexpected EOF") ||
77
+ error.message.includes("connection reset") ||
78
+ error.message.includes("aborted")) {
79
+ return true;
80
+ }
81
+
82
+ // Check for specific status codes in error message
83
+ for (const code of retryableStatusCodes) {
84
+ if (error.message.includes(String(code))) {
85
+ return true;
86
+ }
87
+ }
88
+
89
+ return false;
90
+ }
91
+
92
+ /**
93
+ * Sleep for a given number of milliseconds
94
+ */
95
+ function sleep(ms: number): Promise<void> {
96
+ return new Promise((resolve) => setTimeout(resolve, ms));
97
+ }
98
+
99
+ /**
100
+ * Execute a function with retry logic
101
+ */
102
+ export async function withRetry<T>(
103
+ fn: () => Promise<T>,
104
+ options: RetryOptions = {}
105
+ ): Promise<T> {
106
+ const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
107
+ let lastError: Error | null = null;
108
+
109
+ for (let attempt = 0; attempt <= opts.maxRetries!; attempt++) {
110
+ try {
111
+ return await fn();
112
+ } catch (error) {
113
+ lastError = error instanceof Error ? error : new Error(String(error));
114
+
115
+ // Check if we should retry
116
+ if (attempt < opts.maxRetries! && isRetryableError(lastError, opts.retryableStatusCodes!)) {
117
+ const delayMs = calculateDelay(
118
+ attempt,
119
+ opts.baseDelayMs!,
120
+ opts.maxDelayMs!,
121
+ opts.jitterFactor!
122
+ );
123
+
124
+ // Log retry attempt
125
+ if (opts.onRetry) {
126
+ opts.onRetry(attempt + 1, lastError, delayMs);
127
+ } else {
128
+ console.warn(
129
+ `\x1b[33mRetry ${attempt + 1}/${opts.maxRetries} after ${delayMs}ms: ${lastError.message}\x1b[0m`
130
+ );
131
+ }
132
+
133
+ await sleep(delayMs);
134
+ } else {
135
+ // Non-retryable error or max retries reached
136
+ throw lastError;
137
+ }
138
+ }
139
+ }
140
+
141
+ throw lastError || new Error("Max retries exceeded");
142
+ }
143
+
144
+ /**
145
+ * Create a retry wrapper for fetch
146
+ */
147
+ export function createFetchWithRetry(
148
+ options: RetryOptions = {}
149
+ ): (url: string, init?: RequestInit) => Promise<Response> {
150
+ return async (url: string, init?: RequestInit): Promise<Response> => {
151
+ return withRetry(
152
+ async () => {
153
+ const response = await fetch(url, init);
154
+
155
+ // Check for retryable status codes
156
+ if (options.retryableStatusCodes?.includes(response.status)) {
157
+ const text = await response.text();
158
+ throw new Error(`API error: ${response.status} - ${text}`);
159
+ }
160
+
161
+ return response;
162
+ },
163
+ options
164
+ );
165
+ };
166
+ }
167
+
168
+ /**
169
+ * Parse retry-after header from rate limit response
170
+ */
171
+ export function parseRetryAfter(response: Response): number | null {
172
+ const retryAfter = response.headers.get("retry-after");
173
+ if (retryAfter) {
174
+ const seconds = parseInt(retryAfter, 10);
175
+ if (!isNaN(seconds)) {
176
+ return seconds * 1000; // Convert to milliseconds
177
+ }
178
+ }
179
+ return null;
180
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Session Store - Backward compatibility layer
3
+ * Re-exports from composable sessions module
4
+ *
5
+ * @deprecated Import from "./sessions/index.js" instead for composable access
6
+ */
7
+
8
+ // Re-export everything from the new composable module
9
+ export {
10
+ SessionStore,
11
+ SessionPersistence,
12
+ SessionMetadataManager,
13
+ SessionExporter,
14
+ formatSessionSummary,
15
+ printSessionsList,
16
+ // Types
17
+ type SessionMetadata,
18
+ type SessionMessage,
19
+ type SessionToolUse,
20
+ type SessionMetrics,
21
+ type SessionContext,
22
+ type SessionCheckpoint,
23
+ type SessionEntry,
24
+ type LoadedSession,
25
+ type SessionSummary,
26
+ type SessionFilter,
27
+ type SessionEvent,
28
+ type SessionEventType,
29
+ type SessionEventHandler,
30
+ type ExportFormat,
31
+ type ISessionPersistence,
32
+ type ISessionExporter,
33
+ } from "./sessions/index.js";
34
+
35
+ // Default export
36
+ export { SessionStore as default } from "./sessions/index.js";
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Session Export - Export sessions to various formats
3
+ * Supports JSONL, JSON, and Markdown
4
+ */
5
+
6
+ import { join } from "path";
7
+ import type {
8
+ LoadedSession,
9
+ SessionSummary,
10
+ ExportFormat,
11
+ ISessionExporter,
12
+ SessionToolUse,
13
+ } from "./types.js";
14
+ import type { ContentBlock, ToolUseBlock, ToolResultBlock } from "../../types/index.js";
15
+ import { SessionPersistence } from "./persistence.js";
16
+
17
+ export class SessionExporter implements ISessionExporter {
18
+ private persistence: SessionPersistence;
19
+
20
+ constructor(persistence: SessionPersistence) {
21
+ this.persistence = persistence;
22
+ }
23
+
24
+ /**
25
+ * Export a loaded session to the specified format
26
+ */
27
+ export(session: LoadedSession, format: ExportFormat): string {
28
+ switch (format) {
29
+ case "jsonl":
30
+ return this.toJsonl(session);
31
+ case "json":
32
+ return this.toJson(session);
33
+ case "markdown":
34
+ return this.toMarkdown(session);
35
+ default:
36
+ throw new Error(`Unsupported export format: ${format}`);
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Export a session to a file
42
+ */
43
+ async exportToFile(
44
+ sessionId: string,
45
+ format: ExportFormat,
46
+ outputPath?: string
47
+ ): Promise<string> {
48
+ const sessionFile = this.persistence.getSessionPath(sessionId);
49
+
50
+ // For JSONL, just return the original file
51
+ if (format === "jsonl") {
52
+ const content = await Bun.file(sessionFile).text();
53
+ const finalPath = outputPath ?? join(process.cwd(), `session-${sessionId}.jsonl`);
54
+ await Bun.write(finalPath, content);
55
+ return finalPath;
56
+ }
57
+
58
+ // For other formats, we'd need to load and convert
59
+ // This is handled by the SessionStore which has access to the full session
60
+ throw new Error("Use SessionStore.exportSession for full export functionality");
61
+ }
62
+
63
+ /**
64
+ * Export to JSONL format (raw session file)
65
+ */
66
+ private toJsonl(session: LoadedSession): string {
67
+ const lines: string[] = [];
68
+
69
+ // Metadata first (with explicit type)
70
+ lines.push(JSON.stringify({ ...session.metadata, type: "metadata" }));
71
+
72
+ // Context
73
+ if (session.context) {
74
+ lines.push(JSON.stringify(session.context));
75
+ }
76
+
77
+ // Messages
78
+ for (const msg of session.messages) {
79
+ lines.push(JSON.stringify({ type: "message", timestamp: Date.now(), data: msg }));
80
+ }
81
+
82
+ // Tools
83
+ for (const tool of session.tools) {
84
+ lines.push(JSON.stringify(tool));
85
+ }
86
+
87
+ // Metrics
88
+ for (const metric of session.metrics) {
89
+ lines.push(JSON.stringify({ type: "metrics", timestamp: Date.now(), data: metric }));
90
+ }
91
+
92
+ // Checkpoints
93
+ for (const checkpoint of session.checkpoints) {
94
+ lines.push(JSON.stringify(checkpoint));
95
+ }
96
+
97
+ return lines.join("\n");
98
+ }
99
+
100
+ /**
101
+ * Export to JSON format (pretty-printed)
102
+ */
103
+ private toJson(session: LoadedSession): string {
104
+ return JSON.stringify(session, null, 2);
105
+ }
106
+
107
+ /**
108
+ * Export to Markdown format
109
+ */
110
+ private toMarkdown(session: LoadedSession): string {
111
+ const lines: string[] = [];
112
+
113
+ // Header
114
+ lines.push(`# Session: ${session.metadata.id}`);
115
+ lines.push("");
116
+ lines.push(`**Created:** ${new Date(session.metadata.created).toISOString()}`);
117
+ lines.push(`**Model:** ${session.metadata.model}`);
118
+ lines.push(`**Working Directory:** ${session.metadata.workingDirectory}`);
119
+
120
+ if (session.metadata.agentName) {
121
+ lines.push(`**Agent:** ${session.metadata.agentName}`);
122
+ }
123
+
124
+ if (session.metadata.teamName) {
125
+ lines.push(`**Team:** ${session.metadata.teamName}`);
126
+ }
127
+
128
+ lines.push("");
129
+
130
+ // Messages
131
+ lines.push("## Conversation");
132
+ lines.push("");
133
+
134
+ for (const message of session.messages) {
135
+ const role = message.role === "user" ? "**User**" : "**Claude**";
136
+ lines.push(`### ${role}`);
137
+ lines.push("");
138
+
139
+ for (const block of message.content) {
140
+ this.formatBlock(block, lines);
141
+ }
142
+ }
143
+
144
+ // Tools
145
+ if (session.tools.length > 0) {
146
+ lines.push("## Tool Calls");
147
+ lines.push("");
148
+
149
+ for (const tool of session.tools) {
150
+ lines.push(`### ${tool.toolName}`);
151
+ lines.push("");
152
+ lines.push("**Input:**");
153
+ lines.push("```json");
154
+ lines.push(JSON.stringify(tool.input, null, 2));
155
+ lines.push("```");
156
+
157
+ if (tool.result) {
158
+ lines.push("");
159
+ lines.push(`**Result:**${tool.isError ? " (error)" : ""}`);
160
+ lines.push("```");
161
+ lines.push(tool.result);
162
+ lines.push("```");
163
+ }
164
+ lines.push("");
165
+ }
166
+ }
167
+
168
+ // Metrics
169
+ if (session.metrics.length > 0) {
170
+ lines.push("## Metrics");
171
+ lines.push("");
172
+
173
+ const totalCost = session.metrics.reduce((sum, m) => sum + m.costUSD, 0);
174
+ const totalInput = session.metrics.reduce(
175
+ (sum, m) => sum + m.usage.input_tokens,
176
+ 0
177
+ );
178
+ const totalOutput = session.metrics.reduce(
179
+ (sum, m) => sum + m.usage.output_tokens,
180
+ 0
181
+ );
182
+
183
+ lines.push(`- **Total Cost:** $${totalCost.toFixed(4)}`);
184
+ lines.push(`- **Total Input Tokens:** ${totalInput.toLocaleString()}`);
185
+ lines.push(`- **Total Output Tokens:** ${totalOutput.toLocaleString()}`);
186
+ lines.push(`- **API Calls:** ${session.metrics.length}`);
187
+ }
188
+
189
+ // Checkpoints
190
+ if (session.checkpoints.length > 0) {
191
+ lines.push("");
192
+ lines.push("## Checkpoints");
193
+ lines.push("");
194
+
195
+ for (const cp of session.checkpoints) {
196
+ const date = new Date(cp.timestamp).toISOString();
197
+ lines.push(`- ${cp.label ?? cp.checkpointId} (${date}) - ${cp.messageCount} messages`);
198
+ }
199
+ }
200
+
201
+ return lines.join("\n");
202
+ }
203
+
204
+ /**
205
+ * Format a content block for markdown
206
+ */
207
+ private formatBlock(block: ContentBlock, lines: string[]): void {
208
+ switch (block.type) {
209
+ case "text":
210
+ lines.push(block.text);
211
+ lines.push("");
212
+ break;
213
+
214
+ case "tool_use": {
215
+ const tool = block as ToolUseBlock;
216
+ lines.push(`\`\`\`tool:${tool.name}`);
217
+ lines.push(JSON.stringify(tool.input, null, 2));
218
+ lines.push("```");
219
+ lines.push("");
220
+ break;
221
+ }
222
+
223
+ case "tool_result": {
224
+ const result = block as ToolResultBlock;
225
+ lines.push(`**Result**${result.is_error ? " (error)" : ""}:`);
226
+ lines.push("```");
227
+ lines.push(
228
+ typeof result.content === "string"
229
+ ? result.content
230
+ : JSON.stringify(result.content, null, 2)
231
+ );
232
+ lines.push("```");
233
+ lines.push("");
234
+ break;
235
+ }
236
+
237
+ case "thinking":
238
+ lines.push("> **Thinking**");
239
+ lines.push(`> ${block.thinking.replace(/\n/g, "\n> ")}`);
240
+ lines.push("");
241
+ break;
242
+
243
+ case "image":
244
+ lines.push("*(Image)*");
245
+ lines.push("");
246
+ break;
247
+
248
+ default:
249
+ break;
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Format a session summary for display
255
+ */
256
+ static formatSummary(session: SessionSummary): string {
257
+ const created = new Date(session.created);
258
+ const updated = session.lastActivity
259
+ ? new Date(session.lastActivity)
260
+ : new Date(session.updated);
261
+ const age = this.formatRelativeTime(updated);
262
+
263
+ const lines: string[] = [];
264
+
265
+ // Session ID and age
266
+ lines.push(`\x1b[1m${session.id}\x1b[0m (${age})`);
267
+
268
+ // Model and message count
269
+ lines.push(` Model: ${session.model} | Messages: ${session.messageCount}`);
270
+
271
+ // Cost and tokens
272
+ const cost =
273
+ session.totalCost < 0.01
274
+ ? `$${session.totalCost.toFixed(4)}`
275
+ : `$${session.totalCost.toFixed(2)}`;
276
+ lines.push(
277
+ ` Cost: ${cost} | Tokens: ${session.totalTokens.input.toLocaleString()} in, ${session.totalTokens.output.toLocaleString()} out`
278
+ );
279
+
280
+ // First message preview
281
+ if (session.firstMessage) {
282
+ lines.push(` Preview: ${session.firstMessage}`);
283
+ }
284
+
285
+ // Working directory
286
+ lines.push(` Directory: ${session.workingDirectory}`);
287
+
288
+ return lines.join("\n");
289
+ }
290
+
291
+ /**
292
+ * Format relative time
293
+ */
294
+ static formatRelativeTime(date: Date): string {
295
+ const now = new Date();
296
+ const diffMs = now.getTime() - date.getTime();
297
+ const diffMins = Math.floor(diffMs / 60000);
298
+ const diffHours = Math.floor(diffMs / 3600000);
299
+ const diffDays = Math.floor(diffMs / 86400000);
300
+
301
+ if (diffMins < 1) return "just now";
302
+ if (diffMins < 60) return `${diffMins}m ago`;
303
+ if (diffHours < 24) return `${diffHours}h ago`;
304
+ if (diffDays < 7) return `${diffDays}d ago`;
305
+
306
+ return date.toLocaleDateString();
307
+ }
308
+
309
+ /**
310
+ * Print sessions list for CLI
311
+ */
312
+ static printList(sessions: SessionSummary[]): void {
313
+ if (sessions.length === 0) {
314
+ console.log("No sessions found.");
315
+ console.log("\nStart a new conversation to create a session.");
316
+ return;
317
+ }
318
+
319
+ console.log(`\x1b[1mRecent Sessions (${sessions.length})\x1b[0m\n`);
320
+
321
+ for (const session of sessions) {
322
+ console.log(this.formatSummary(session));
323
+ console.log("");
324
+ }
325
+
326
+ console.log("To resume a session:");
327
+ console.log(" coder --resume <session-id>");
328
+ }
329
+ }