@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,137 @@
1
+ /**
2
+ * Agent Loop - Turn-based processing system
3
+ *
4
+ * This is the main orchestrator that coordinates:
5
+ * - State management (loop-state.ts)
6
+ * - Turn execution (turn-executor.ts)
7
+ * - Tool execution (tool-executor.ts)
8
+ * - Context compaction (compaction.ts)
9
+ * - Message building (message-builder.ts)
10
+ * - Formatting utilities (formatters.ts)
11
+ */
12
+
13
+ import type { Message } from "../../types/index.js";
14
+ import { DEFAULT_CACHE_CONFIG } from "../../types/index.js";
15
+ import { PermissionManager } from "../permissions.js";
16
+ import { DEFAULT_REMINDER_CONFIG } from "../system-reminders.js";
17
+ import type { HookManager } from "../../ecosystem/hooks/index.js";
18
+
19
+ import type { AgentLoopOptions, AgentLoopResult } from "./types.js";
20
+ import { LoopState } from "./loop-state.js";
21
+ import { executeTurn, type TurnExecutorOptions } from "./turn-executor.js";
22
+
23
+ // Re-export types and utilities
24
+ export type { AgentLoopOptions, AgentLoopResult } from "./types.js";
25
+ export { formatCost, formatMetrics, formatCostBrief, formatCacheMetrics } from "./formatters.js";
26
+ export { LoopState } from "./loop-state.js";
27
+ export { executeTurn } from "./turn-executor.js";
28
+ export { executeTools, type ToolExecutionOptions } from "./tool-executor.js";
29
+ export { buildAPIMessages, injectReminderIntoContent } from "./message-builder.js";
30
+ export {
31
+ handleProactiveCompaction,
32
+ handleReactiveCompaction,
33
+ needsCompaction,
34
+ estimateMessagesTokens,
35
+ DEFAULT_PROACTIVE_OPTIONS,
36
+ DEFAULT_REACTIVE_OPTIONS,
37
+ } from "./compaction.js";
38
+
39
+ /**
40
+ * Main agent loop - processes messages in turns until completion
41
+ */
42
+ export async function agentLoop(
43
+ initialMessages: Message[],
44
+ options: AgentLoopOptions
45
+ ): Promise<AgentLoopResult> {
46
+ const {
47
+ apiKey,
48
+ model = "claude-sonnet-4-6",
49
+ maxTokens = 4096,
50
+ systemPrompt,
51
+ tools,
52
+ permissionMode,
53
+ workingDirectory,
54
+ gitStatus = null,
55
+ reminderConfig,
56
+ cacheConfig = DEFAULT_CACHE_CONFIG,
57
+ thinking,
58
+ extendedThinking,
59
+ hookManager,
60
+ sessionId,
61
+ onText,
62
+ onThinking,
63
+ onToolUse,
64
+ onToolResult,
65
+ onMetrics,
66
+ onReminder,
67
+ onRetryStart,
68
+ onPermissionRequest,
69
+ signal,
70
+ } = options;
71
+
72
+ // Initialize state
73
+ const state = new LoopState(initialMessages);
74
+ const permissionManager = new PermissionManager(permissionMode, onPermissionRequest);
75
+ const mergedReminderConfig = { ...DEFAULT_REMINDER_CONFIG, ...reminderConfig };
76
+
77
+ // Execute SessionStart hook
78
+ if (hookManager) {
79
+ await hookManager.execute("SessionStart", {
80
+ session_id: sessionId,
81
+ });
82
+ }
83
+
84
+ let shouldContinue = true;
85
+
86
+ while (shouldContinue) {
87
+ if (signal?.aborted) {
88
+ break;
89
+ }
90
+
91
+ // Build turn executor options
92
+ const turnOptions: TurnExecutorOptions = {
93
+ apiKey,
94
+ model,
95
+ maxTokens,
96
+ systemPrompt,
97
+ tools,
98
+ cacheConfig,
99
+ thinking,
100
+ extendedThinking,
101
+ workingDirectory,
102
+ gitStatus,
103
+ reminderConfig: mergedReminderConfig,
104
+ hookManager,
105
+ sessionId,
106
+ signal,
107
+ onText,
108
+ onThinking,
109
+ onToolUse,
110
+ onReminder,
111
+ onRetryStart,
112
+ permissionMode,
113
+ permissionManager,
114
+ onMetrics,
115
+ onToolResult,
116
+ };
117
+
118
+ // Execute a single turn
119
+ const turnResult = await executeTurn(state, turnOptions);
120
+
121
+ shouldContinue = turnResult.shouldContinue;
122
+
123
+ // Call onMetrics callback with the latest metrics
124
+ if (turnResult.metrics && onMetrics) {
125
+ onMetrics(turnResult.metrics);
126
+ }
127
+ }
128
+
129
+ // Execute SessionEnd hook
130
+ if (hookManager) {
131
+ await hookManager.execute("SessionEnd", {
132
+ session_id: sessionId,
133
+ });
134
+ }
135
+
136
+ return state.toResult();
137
+ }
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Loop State - Mutable state management for the agent loop
3
+ */
4
+
5
+ import type {
6
+ Message,
7
+ ToolUseBlock,
8
+ QueryMetrics,
9
+ CacheMetrics,
10
+ UsageMetrics,
11
+ } from "../../types/index.js";
12
+ import type { CompactionResult, getCompactionStats } from "../context/index.js";
13
+
14
+ /**
15
+ * Creates an initial cache metrics object
16
+ */
17
+ export function createInitialCacheMetrics(): CacheMetrics {
18
+ return {
19
+ cacheHits: 0,
20
+ cacheMisses: 0,
21
+ totalCacheReadTokens: 0,
22
+ totalCacheWriteTokens: 0,
23
+ cacheHitRate: 0,
24
+ estimatedSavingsUSD: 0,
25
+ };
26
+ }
27
+
28
+ /**
29
+ * LoopState class encapsulates all mutable state during the agent loop
30
+ */
31
+ export class LoopState {
32
+ messages: Message[];
33
+ metrics: QueryMetrics[] = [];
34
+ allToolsUsed: ToolUseBlock[] = [];
35
+ totalCost = 0;
36
+ totalDuration = 0;
37
+ turnNumber = 0;
38
+ previousCost = 0;
39
+ compactionCount = 0;
40
+ totalTokensCompacted = 0;
41
+ cacheMetrics: CacheMetrics;
42
+
43
+ constructor(initialMessages: Message[]) {
44
+ this.messages = [...initialMessages];
45
+ this.cacheMetrics = createInitialCacheMetrics();
46
+ }
47
+
48
+ /**
49
+ * Get the latest metrics entry
50
+ */
51
+ get latestMetrics(): QueryMetrics | undefined {
52
+ return this.metrics[this.metrics.length - 1];
53
+ }
54
+
55
+ /**
56
+ * Get usage for reminder building (with fallback)
57
+ */
58
+ get currentUsage(): UsageMetrics {
59
+ return this.latestMetrics?.usage ?? {
60
+ input_tokens: 0,
61
+ output_tokens: 0,
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Add a turn's results to the state
67
+ */
68
+ addTurnResult(result: {
69
+ message: { content: unknown[]; stop_reason: string | null; id: string };
70
+ usage: UsageMetrics;
71
+ cacheMetrics?: CacheMetrics;
72
+ costUSD: number;
73
+ durationMs: number;
74
+ model: string;
75
+ messageCount: number;
76
+ }): QueryMetrics {
77
+ const queryMetrics: QueryMetrics = {
78
+ model: result.model,
79
+ messageCount: result.messageCount,
80
+ messageTokens: result.usage.input_tokens + result.usage.output_tokens,
81
+ usage: result.usage,
82
+ cacheMetrics: result.cacheMetrics,
83
+ durationMs: result.durationMs,
84
+ ttftMs: 0, // Will be set by caller if available
85
+ costUSD: result.costUSD,
86
+ stopReason: result.message.stop_reason as import("../../types/index.js").StopReason,
87
+ requestId: result.message.id,
88
+ };
89
+
90
+ this.metrics.push(queryMetrics);
91
+ this.previousCost = this.totalCost;
92
+ this.totalCost += result.costUSD;
93
+ this.totalDuration += result.durationMs;
94
+
95
+ // Aggregate cache metrics
96
+ if (result.cacheMetrics) {
97
+ this.cacheMetrics.cacheHits += result.cacheMetrics.cacheHits;
98
+ this.cacheMetrics.cacheMisses += result.cacheMetrics.cacheMisses;
99
+ this.cacheMetrics.totalCacheReadTokens += result.cacheMetrics.totalCacheReadTokens;
100
+ this.cacheMetrics.totalCacheWriteTokens += result.cacheMetrics.totalCacheWriteTokens;
101
+ this.cacheMetrics.estimatedSavingsUSD += result.cacheMetrics.estimatedSavingsUSD;
102
+ }
103
+
104
+ // Update cache hit rate
105
+ const totalCacheOps = this.cacheMetrics.cacheHits + this.cacheMetrics.cacheMisses;
106
+ this.cacheMetrics.cacheHitRate = totalCacheOps > 0
107
+ ? this.cacheMetrics.cacheHits / totalCacheOps
108
+ : 0;
109
+
110
+ return queryMetrics;
111
+ }
112
+
113
+ /**
114
+ * Add assistant message to history
115
+ */
116
+ addAssistantMessage(content: unknown[]): void {
117
+ this.messages.push({
118
+ role: "assistant",
119
+ content: content as import("../../types/index.js").ContentBlock[],
120
+ });
121
+ }
122
+
123
+ /**
124
+ * Add user message (tool results) to history
125
+ */
126
+ addUserMessage(content: import("../../types/index.js").ToolResultBlock[]): void {
127
+ this.messages.push({
128
+ role: "user",
129
+ content,
130
+ });
131
+ }
132
+
133
+ /**
134
+ * Track tool usage
135
+ */
136
+ trackToolUse(toolUseBlocks: ToolUseBlock[]): void {
137
+ this.allToolsUsed.push(...toolUseBlocks);
138
+ }
139
+
140
+ /**
141
+ * Apply compaction result to state
142
+ */
143
+ applyCompaction(
144
+ compactionResult: CompactionResult,
145
+ getStats: typeof getCompactionStats
146
+ ): boolean {
147
+ // Only apply compaction if it actually saved tokens
148
+ if (!compactionResult.didCompact || compactionResult.tokensAfter >= compactionResult.tokensBefore) {
149
+ return false;
150
+ }
151
+
152
+ // Replace messages array content
153
+ this.messages.length = 0;
154
+ this.messages.push(...compactionResult.messages);
155
+
156
+ this.compactionCount++;
157
+ const tokensSaved = compactionResult.tokensBefore - compactionResult.tokensAfter;
158
+ this.totalTokensCompacted += tokensSaved;
159
+
160
+ const stats = getStats(compactionResult);
161
+ console.log(`Context compacted: ${stats.reductionPercent}% reduction, ${stats.tokensSaved} tokens saved`);
162
+
163
+ return true;
164
+ }
165
+
166
+ /**
167
+ * Increment turn counter
168
+ */
169
+ incrementTurn(): number {
170
+ return ++this.turnNumber;
171
+ }
172
+
173
+ /**
174
+ * Convert to AgentLoopResult
175
+ */
176
+ toResult(): import("./types.js").AgentLoopResult {
177
+ return {
178
+ messages: this.messages,
179
+ metrics: this.metrics,
180
+ totalCost: this.totalCost,
181
+ totalDuration: this.totalDuration,
182
+ totalCacheMetrics: this.cacheMetrics,
183
+ compactionCount: this.compactionCount,
184
+ totalTokensCompacted: this.totalTokensCompacted,
185
+ };
186
+ }
187
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Message Builder - API message construction with reminder injection
3
+ */
4
+
5
+ import type { Message, ContentBlock, TextBlock } from "../../types/index.js";
6
+
7
+ /**
8
+ * Build API messages with system reminders injected
9
+ */
10
+ export function buildAPIMessages(
11
+ messages: Message[],
12
+ systemPrompt: string,
13
+ systemReminder?: string
14
+ ): Message[] {
15
+ // If we have a system reminder, inject it into the last user message
16
+ if (systemReminder && messages.length > 0) {
17
+ const result = [...messages];
18
+ // Find the last user message
19
+ for (let i = result.length - 1; i >= 0; i--) {
20
+ const msg = result[i];
21
+ if (msg && msg.role === "user") {
22
+ // Clone the message to avoid mutating original
23
+ const updatedMessage: Message = {
24
+ role: "user",
25
+ content: Array.isArray(msg.content)
26
+ ? injectReminderIntoContent(msg.content, systemReminder)
27
+ : [{ type: "text" as const, text: `${String(msg.content)}\n\n${systemReminder}` }],
28
+ };
29
+ result[i] = updatedMessage;
30
+ break;
31
+ }
32
+ }
33
+ return result;
34
+ }
35
+
36
+ return messages;
37
+ }
38
+
39
+ /**
40
+ * Inject system reminder into content blocks
41
+ */
42
+ export function injectReminderIntoContent(
43
+ content: ContentBlock[],
44
+ reminder: string
45
+ ): ContentBlock[] {
46
+ // Check if the last block is a text block we can append to
47
+ if (content.length > 0) {
48
+ const lastBlock = content[content.length - 1];
49
+ if (lastBlock && lastBlock.type === "text") {
50
+ // Append to existing text block
51
+ const textBlock: TextBlock = {
52
+ type: "text",
53
+ text: `${lastBlock.text}\n\n${reminder}`,
54
+ };
55
+ return [...content.slice(0, -1), textBlock];
56
+ }
57
+ }
58
+
59
+ // Add as new text block
60
+ const newBlock: TextBlock = { type: "text", text: `\n\n${reminder}` };
61
+ return [...content, newBlock];
62
+ }
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Tool Executor - Parallel tool execution with hooks and permissions
3
+ */
4
+
5
+ import type {
6
+ ToolDefinition,
7
+ ToolUseBlock,
8
+ ToolResultBlock,
9
+ ToolResult,
10
+ PermissionMode,
11
+ } from "../../types/index.js";
12
+ import type { PermissionManager, PermissionResult } from "../permissions.js";
13
+ import type { HookManager } from "../../ecosystem/hooks/index.js";
14
+ export interface ToolExecutionOptions {
15
+ tools: ToolDefinition[];
16
+ workingDirectory: string;
17
+ permissionMode: PermissionMode;
18
+ hookManager?: HookManager;
19
+ sessionId?: string;
20
+ signal?: AbortSignal;
21
+ permissionManager: import("../permissions.js").PermissionManager;
22
+ onToolResult?: (result: { id: string; result: ToolResult }) => void;
23
+ }
24
+
25
+ /**
26
+ * Internal result of a single tool execution
27
+ */
28
+ interface ToolExecutionResult {
29
+ toolUseId: string;
30
+ result: ToolResultBlock;
31
+ toolResult: { id: string; result: ToolResult } | null;
32
+ }
33
+
34
+ /**
35
+ * Execute a single tool with permission checks and hooks
36
+ */
37
+ async function executeSingleTool(
38
+ toolUse: ToolUseBlock,
39
+ options: ToolExecutionOptions
40
+ ): Promise<ToolExecutionResult> {
41
+ const { tools, workingDirectory, permissionMode, hookManager, sessionId, signal, permissionManager } = options;
42
+
43
+ const tool = tools.find((t) => t.name === toolUse.name);
44
+
45
+ if (!tool) {
46
+ return {
47
+ toolUseId: toolUse.id,
48
+ result: {
49
+ type: "tool_result" as const,
50
+ tool_use_id: toolUse.id,
51
+ content: `Error: Unknown tool "${toolUse.name}"`,
52
+ is_error: true,
53
+ },
54
+ toolResult: null,
55
+ };
56
+ }
57
+
58
+ // Check permissions using PermissionManager
59
+ const permissionResult = await permissionManager.checkPermission(
60
+ tool.name,
61
+ toolUse.input as Record<string, unknown>
62
+ );
63
+
64
+ if (permissionResult.decision === "deny" || permissionResult.decision === "denyAlways") {
65
+ return {
66
+ toolUseId: toolUse.id,
67
+ result: {
68
+ type: "tool_result" as const,
69
+ tool_use_id: toolUse.id,
70
+ content: `Permission denied for tool "${toolUse.name}"${permissionResult.reason ? `: ${permissionResult.reason}` : ""}`,
71
+ is_error: true,
72
+ },
73
+ toolResult: null,
74
+ };
75
+ }
76
+
77
+ // Execute PreToolUse hooks
78
+ if (hookManager) {
79
+ const hookResult = await hookManager.execute("PreToolUse", {
80
+ tool_name: tool.name,
81
+ tool_input: toolUse.input as Record<string, unknown>,
82
+ session_id: sessionId,
83
+ });
84
+
85
+ if (hookResult.decision === "deny" || hookResult.decision === "block") {
86
+ return {
87
+ toolUseId: toolUse.id,
88
+ result: {
89
+ type: "tool_result" as const,
90
+ tool_use_id: toolUse.id,
91
+ content: hookResult.reason || `Tool "${tool.name}" blocked by hook`,
92
+ is_error: true,
93
+ },
94
+ toolResult: null,
95
+ };
96
+ }
97
+
98
+ // Apply modified input if provided
99
+ if (hookResult.modified_input) {
100
+ Object.assign(toolUse.input, hookResult.modified_input);
101
+ }
102
+ }
103
+
104
+ // Execute tool
105
+ try {
106
+ const handlerResult = await tool.handler(toolUse.input as Record<string, unknown>, {
107
+ workingDirectory,
108
+ permissionMode,
109
+ abortSignal: signal,
110
+ });
111
+
112
+ // Execute PostToolUse hooks
113
+ let finalContent = handlerResult.content;
114
+ if (hookManager) {
115
+ const hookResult = await hookManager.execute("PostToolUse", {
116
+ tool_name: tool.name,
117
+ tool_input: toolUse.input as Record<string, unknown>,
118
+ tool_result: handlerResult,
119
+ tool_result_is_error: handlerResult.is_error,
120
+ session_id: sessionId,
121
+ });
122
+
123
+ if (hookResult.decision === "deny" || hookResult.decision === "block") {
124
+ return {
125
+ toolUseId: toolUse.id,
126
+ result: {
127
+ type: "tool_result" as const,
128
+ tool_use_id: toolUse.id,
129
+ content: hookResult.reason || `Tool "${tool.name}" result blocked by hook`,
130
+ is_error: true,
131
+ },
132
+ toolResult: null,
133
+ };
134
+ }
135
+
136
+ // Apply modified output if provided
137
+ if (hookResult.modified_input?.tool_result) {
138
+ finalContent = hookResult.modified_input.tool_result as string;
139
+ }
140
+ }
141
+
142
+ return {
143
+ toolUseId: toolUse.id,
144
+ result: {
145
+ type: "tool_result" as const,
146
+ tool_use_id: toolUse.id,
147
+ content: finalContent,
148
+ is_error: handlerResult.is_error,
149
+ },
150
+ toolResult: {
151
+ id: toolUse.id,
152
+ result: { ...handlerResult, content: finalContent },
153
+ },
154
+ };
155
+ } catch (error) {
156
+ const errorMessage = error instanceof Error ? error.message : String(error);
157
+
158
+ // Execute PostToolUseFailure hooks
159
+ if (hookManager) {
160
+ await hookManager.execute("PostToolUseFailure", {
161
+ tool_name: tool.name,
162
+ tool_input: toolUse.input as Record<string, unknown>,
163
+ error: errorMessage,
164
+ session_id: sessionId,
165
+ });
166
+ }
167
+
168
+ return {
169
+ toolUseId: toolUse.id,
170
+ result: {
171
+ type: "tool_result" as const,
172
+ tool_use_id: toolUse.id,
173
+ content: `Error: ${errorMessage}`,
174
+ is_error: true,
175
+ },
176
+ toolResult: null,
177
+ };
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Execute multiple tools in parallel and collect results
183
+ */
184
+ export async function executeTools(
185
+ toolUseBlocks: ToolUseBlock[],
186
+ options: ToolExecutionOptions
187
+ ): Promise<ToolResultBlock[]> {
188
+ // Check for abort before starting parallel execution
189
+ if (options.signal?.aborted) {
190
+ return [];
191
+ }
192
+
193
+ // Map each tool use to an async operation
194
+ const toolExecutions = toolUseBlocks.map((toolUse) =>
195
+ executeSingleTool(toolUse, options)
196
+ );
197
+
198
+ // Execute all tools in parallel
199
+ const executionResults = await Promise.all(toolExecutions);
200
+
201
+ // Collect results and notify callbacks
202
+ const toolResults: ToolResultBlock[] = [];
203
+ for (const executionResult of executionResults) {
204
+ toolResults.push(executionResult.result);
205
+ if (executionResult.toolResult && options.onToolResult) {
206
+ options.onToolResult(executionResult.toolResult);
207
+ }
208
+ }
209
+
210
+ return toolResults;
211
+ }