@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,246 @@
1
+ /**
2
+ * Loading State Manager for Coder CLI
3
+ * Tracks global loading state across the application
4
+ */
5
+ import { EventEmitter } from "events";
6
+ // ============================================
7
+ // LOADING STATE CLASS
8
+ // ============================================
9
+ export class LoadingState extends EventEmitter {
10
+ state;
11
+ static instance = null;
12
+ constructor() {
13
+ super();
14
+ this.state = {
15
+ isLoading: false,
16
+ phase: "idle",
17
+ message: "",
18
+ startTime: 0,
19
+ activeTools: new Set(),
20
+ activeToolCount: 0,
21
+ hasActiveTools: false,
22
+ responseLength: 0,
23
+ paused: false,
24
+ pausedTime: 0,
25
+ };
26
+ }
27
+ /**
28
+ * Get singleton instance
29
+ */
30
+ static getInstance() {
31
+ if (!LoadingState.instance) {
32
+ LoadingState.instance = new LoadingState();
33
+ }
34
+ return LoadingState.instance;
35
+ }
36
+ /**
37
+ * Reset singleton (for testing)
38
+ */
39
+ static reset() {
40
+ if (LoadingState.instance) {
41
+ LoadingState.instance.removeAllListeners();
42
+ LoadingState.instance = null;
43
+ }
44
+ }
45
+ /**
46
+ * Start loading
47
+ */
48
+ start(phase = "processing", message = "") {
49
+ const previousPhase = this.state.phase;
50
+ this.state.isLoading = true;
51
+ this.state.phase = phase;
52
+ this.state.message = message;
53
+ this.state.startTime = Date.now();
54
+ this.emit("state-change", this.getState());
55
+ if (previousPhase !== phase) {
56
+ this.emit("phase-change", phase, previousPhase);
57
+ }
58
+ }
59
+ /**
60
+ * Stop loading
61
+ */
62
+ stop() {
63
+ const previousPhase = this.state.phase;
64
+ this.state.isLoading = false;
65
+ this.state.phase = "idle";
66
+ this.state.message = "";
67
+ this.state.activeTools.clear();
68
+ this.state.activeToolCount = 0;
69
+ this.state.responseLength = 0;
70
+ this.emit("state-change", this.getState());
71
+ this.emit("phase-change", "idle", previousPhase);
72
+ }
73
+ /**
74
+ * Update phase
75
+ */
76
+ setPhase(phase) {
77
+ const previousPhase = this.state.phase;
78
+ this.state.phase = phase;
79
+ this.emit("phase-change", phase, previousPhase);
80
+ this.emit("state-change", this.getState());
81
+ }
82
+ /**
83
+ * Update message
84
+ */
85
+ setMessage(message) {
86
+ this.state.message = message;
87
+ this.emit("state-change", this.getState());
88
+ }
89
+ /**
90
+ * Update both phase and message
91
+ */
92
+ update(phase, message) {
93
+ const previousPhase = this.state.phase;
94
+ this.state.phase = phase;
95
+ this.state.message = message;
96
+ this.emit("phase-change", phase, previousPhase);
97
+ this.emit("state-change", this.getState());
98
+ }
99
+ /**
100
+ * Report progress
101
+ */
102
+ progress(message) {
103
+ this.state.message = message;
104
+ this.emit("progress", message);
105
+ this.emit("state-change", this.getState());
106
+ }
107
+ /**
108
+ * Mark tool as started
109
+ */
110
+ toolStart(toolName) {
111
+ this.state.activeTools.add(toolName);
112
+ this.state.activeToolCount = this.state.activeTools.size;
113
+ this.state.hasActiveTools = true;
114
+ this.emit("tool-start", toolName);
115
+ this.emit("state-change", this.getState());
116
+ }
117
+ /**
118
+ * Mark tool as completed
119
+ */
120
+ toolEnd(toolName) {
121
+ this.state.activeTools.delete(toolName);
122
+ this.state.activeToolCount = this.state.activeTools.size;
123
+ if (this.state.activeTools.size === 0) {
124
+ this.state.hasActiveTools = false;
125
+ }
126
+ this.emit("tool-end", toolName);
127
+ this.emit("state-change", this.getState());
128
+ }
129
+ /**
130
+ * Update response length (for streaming)
131
+ */
132
+ setResponseLength(length) {
133
+ this.state.responseLength = length;
134
+ this.emit("state-change", this.getState());
135
+ }
136
+ /**
137
+ * Pause loading state
138
+ */
139
+ pause() {
140
+ if (!this.state.paused) {
141
+ this.state.paused = true;
142
+ this.state.pausedTime = Date.now();
143
+ this.emit("state-change", this.getState());
144
+ }
145
+ }
146
+ /**
147
+ * Resume loading state
148
+ */
149
+ resume() {
150
+ if (this.state.paused) {
151
+ this.state.paused = false;
152
+ this.state.pausedTime = 0;
153
+ this.emit("state-change", this.getState());
154
+ }
155
+ }
156
+ /**
157
+ * Get current state (copy)
158
+ */
159
+ getState() {
160
+ return {
161
+ ...this.state,
162
+ activeTools: new Set(this.state.activeTools),
163
+ };
164
+ }
165
+ /**
166
+ * Check if loading
167
+ */
168
+ isLoading() {
169
+ return this.state.isLoading;
170
+ }
171
+ /**
172
+ * Get current phase
173
+ */
174
+ getPhase() {
175
+ return this.state.phase;
176
+ }
177
+ /**
178
+ * Get elapsed time in ms
179
+ */
180
+ getElapsedMs() {
181
+ if (this.state.startTime === 0) {
182
+ return 0;
183
+ }
184
+ return Date.now() - this.state.startTime;
185
+ }
186
+ /**
187
+ * Get active tool names
188
+ */
189
+ getActiveTools() {
190
+ return Array.from(this.state.activeTools);
191
+ }
192
+ /**
193
+ * Check if specific tool is active
194
+ */
195
+ isToolActive(toolName) {
196
+ return this.state.activeTools.has(toolName);
197
+ }
198
+ /**
199
+ * Get formatted state for display
200
+ */
201
+ getFormattedState() {
202
+ if (!this.state.isLoading) {
203
+ return "Ready";
204
+ }
205
+ const parts = [];
206
+ if (this.state.message) {
207
+ parts.push(this.state.message);
208
+ }
209
+ if (this.state.activeToolCount > 0) {
210
+ parts.push(`(${this.state.activeToolCount} tool${this.state.activeToolCount > 1 ? "s" : ""} active)`);
211
+ }
212
+ const elapsed = Math.floor(this.getElapsedMs() / 1000);
213
+ if (elapsed > 0) {
214
+ parts.push(`[${elapsed}s]`);
215
+ }
216
+ return parts.join(" ") || this.state.phase;
217
+ }
218
+ }
219
+ // ============================================
220
+ // CONVENIENCE EXPORTS
221
+ // ============================================
222
+ /**
223
+ * Get the global loading state instance
224
+ */
225
+ export function getLoadingState() {
226
+ return LoadingState.getInstance();
227
+ }
228
+ /**
229
+ * Quick access to loading state methods
230
+ * These call getInstance() each time to handle reset() properly
231
+ */
232
+ export const setLoading = (phase, message) => {
233
+ LoadingState.getInstance().start(phase, message);
234
+ };
235
+ export const stopLoading = () => {
236
+ LoadingState.getInstance().stop();
237
+ };
238
+ export const updateLoading = (message) => {
239
+ LoadingState.getInstance().progress(message);
240
+ };
241
+ export const startTool = (toolName) => {
242
+ LoadingState.getInstance().toolStart(toolName);
243
+ };
244
+ export const endTool = (toolName) => {
245
+ LoadingState.getInstance().toolEnd(toolName);
246
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Single Query Execution
3
+ * Shared query runner for CLI -q mode
4
+ */
5
+ import type { ToolDefinition, GitStatus } from "../../../../types/index.js";
6
+ import { HookManager } from "../../../../ecosystem/hooks/index.js";
7
+ import { SessionStore } from "../../../../core/session-store.js";
8
+ import type { CLIArgs } from "./args.js";
9
+ export interface QueryOptions {
10
+ apiKey: string;
11
+ args: CLIArgs;
12
+ systemPrompt: string;
13
+ tools: ToolDefinition[];
14
+ query: string;
15
+ sessionStore: SessionStore;
16
+ sessionId: string;
17
+ hookManager: HookManager;
18
+ workingDirectory: string;
19
+ gitStatus?: GitStatus | null;
20
+ }
21
+ export declare function runSingleQuery(options: QueryOptions): Promise<void>;
22
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/shared/query.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAW,cAAc,EAA0B,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE7G,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAOjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAMD,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2GzE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Single Query Execution
3
+ * Shared query runner for CLI -q mode
4
+ */
5
+ import { agentLoop, formatCost, formatCostBrief } from "../../../../core/agent-loop.js";
6
+ import { HookManager } from "../../../../ecosystem/hooks/index.js";
7
+ import { SessionStore } from "../../../../core/session-store.js";
8
+ import { createStreamHighlighter } from "../../../../core/stream-highlighter.js";
9
+ import { renderStatusLine, getContextWindow, } from "./status-line.js";
10
+ // ============================================
11
+ // SINGLE QUERY RUNNER
12
+ // ============================================
13
+ export async function runSingleQuery(options) {
14
+ const { apiKey, args, systemPrompt, tools, query, sessionStore, sessionId, hookManager, workingDirectory, gitStatus, } = options;
15
+ // Show initial status line
16
+ const initialStatusOptions = {
17
+ permissionMode: args.permissionMode,
18
+ tokensUsed: 0,
19
+ maxTokens: getContextWindow(args.model),
20
+ model: args.model,
21
+ isLoading: true,
22
+ };
23
+ console.log(`\x1b[90m${renderStatusLine(initialStatusOptions)}\x1b[0m\n`);
24
+ // Track tokens for final status
25
+ let totalTokens = 0;
26
+ const messages = [
27
+ {
28
+ role: "user",
29
+ content: [{ type: "text", text: query }],
30
+ },
31
+ ];
32
+ // Save user message to session
33
+ await sessionStore.saveMessage(messages[0]);
34
+ // Create stream highlighter for code blocks
35
+ const highlighter = createStreamHighlighter();
36
+ // Build extended thinking config
37
+ const extendedThinkingConfig = args.extendedThinking
38
+ ? {
39
+ enabled: true,
40
+ effort: args.effort ?? "medium",
41
+ interleaved: args.interleaved ?? true,
42
+ }
43
+ : undefined;
44
+ try {
45
+ const result = await agentLoop(messages, {
46
+ apiKey,
47
+ model: args.model,
48
+ maxTokens: args.maxTokens,
49
+ systemPrompt,
50
+ tools,
51
+ permissionMode: args.permissionMode,
52
+ workingDirectory,
53
+ gitStatus: gitStatus ?? undefined,
54
+ extendedThinking: extendedThinkingConfig,
55
+ hookManager,
56
+ sessionId,
57
+ onText: (text) => {
58
+ const highlighted = highlighter.process(text);
59
+ if (highlighted) {
60
+ process.stdout.write(highlighted);
61
+ }
62
+ },
63
+ onThinking: (thinking) => {
64
+ process.stdout.write(`\x1b[90m${thinking}\x1b[0m`);
65
+ },
66
+ onMetrics: async (metrics) => {
67
+ // Track tokens for final status
68
+ totalTokens = metrics.usage.input_tokens + metrics.usage.output_tokens;
69
+ console.log(`\n\x1b[90m${formatCostBrief(metrics)}\x1b[0m`);
70
+ await sessionStore.saveMetrics(metrics);
71
+ },
72
+ });
73
+ // Flush any remaining highlighted content
74
+ const remaining = highlighter.flush();
75
+ if (remaining) {
76
+ process.stdout.write(remaining);
77
+ }
78
+ // Save assistant message to session
79
+ const lastMessage = result.messages[result.messages.length - 1];
80
+ if (lastMessage && lastMessage.role === "assistant") {
81
+ await sessionStore.saveMessage(lastMessage);
82
+ }
83
+ // Show final status line
84
+ const finalStatusOptions = {
85
+ permissionMode: args.permissionMode,
86
+ tokensUsed: totalTokens,
87
+ maxTokens: getContextWindow(args.model),
88
+ model: args.model,
89
+ isLoading: false,
90
+ };
91
+ console.log(`\n\x1b[90m${renderStatusLine(finalStatusOptions)}\x1b[0m`);
92
+ console.log(`\x1b[90mSession: ${sessionId}\x1b[0m`);
93
+ console.log(`\x1b[90mTotal cost: ${formatCost(result.totalCost)}\x1b[0m`);
94
+ }
95
+ catch (error) {
96
+ const errorMessage = error instanceof Error ? error.message : String(error);
97
+ console.error(`Error: ${errorMessage}`);
98
+ process.exit(1);
99
+ }
100
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Session Setup
3
+ * Shared initialization logic for CLI and TUI modes
4
+ */
5
+ import type { MCPServerConfig, ToolDefinition, PermissionMode } from "../../../../types/index.js";
6
+ import { MCPClientImpl } from "../../../mcp/client.js";
7
+ import { HookManager } from "../../../../ecosystem/hooks/index.js";
8
+ import { SkillManager } from "../../../../ecosystem/skills/index.js";
9
+ import { TeammateManager } from "../../../../teammates/index.js";
10
+ import { type LoadedConfig, type SettingsConfig } from "../../../../core/config-loader.js";
11
+ import type { CLIArgs } from "./args.js";
12
+ export interface SessionSetup {
13
+ loadedConfig: LoadedConfig;
14
+ mergedSettings: SettingsConfig;
15
+ hookManager: HookManager;
16
+ skillManager: SkillManager;
17
+ teammateManager: TeammateManager;
18
+ mcpClients: Map<string, MCPClientImpl>;
19
+ tools: ToolDefinition[];
20
+ permissionMode: PermissionMode;
21
+ allowedTools: Set<string>;
22
+ disallowedTools: Set<string>;
23
+ }
24
+ export interface SetupOptions {
25
+ args: CLIArgs;
26
+ apiKey: string;
27
+ workingDirectory: string;
28
+ onProgress?: (message: string) => void;
29
+ }
30
+ export declare function loadMCPConfig(configPath: string): Promise<Record<string, MCPServerConfig>>;
31
+ export declare function mcpToolsToToolDefinitions(mcpClients: Map<string, MCPClientImpl>): ToolDefinition[];
32
+ export declare function setupSession(options: SetupOptions): Promise<SessionSetup>;
33
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../../packages/src/interfaces/ui/terminal/shared/setup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAClG,OAAO,EAAE,aAAa,EAAoB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAMD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CA0BhG;AAMD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,cAAc,EAAE,CAuBlG;AAMD,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAoL/E"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Session Setup
3
+ * Shared initialization logic for CLI and TUI modes
4
+ */
5
+ import { MCPClientImpl, createMCPClients } from "../../../mcp/client.js";
6
+ import { HookManager } from "../../../../ecosystem/hooks/index.js";
7
+ import { createPromptEvaluator } from "../../../../ecosystem/hooks/prompt-evaluator.js";
8
+ import { SkillManager } from "../../../../ecosystem/skills/index.js";
9
+ import { TeammateManager } from "../../../../teammates/index.js";
10
+ import { loadAllConfigs, getMergedSettings, getPermissionMode, getAllowedTools, getDisallowedTools, getAllMCPServers, settingsToHookDefinitions, } from "../../../../core/config-loader.js";
11
+ import { createSecurityHookHandlers } from "../../../../core/cognitive-security/hooks.js";
12
+ // ============================================
13
+ // MCP CONFIG LOADER
14
+ // ============================================
15
+ export async function loadMCPConfig(configPath) {
16
+ try {
17
+ const file = Bun.file(configPath);
18
+ const content = await file.text();
19
+ const config = JSON.parse(content);
20
+ // Support both formats:
21
+ // 1. { "servers": { "name": {...} } }
22
+ // 2. { "name": {...} } (direct server config)
23
+ if ("servers" in config && typeof config.servers === "object" && config.servers !== null) {
24
+ return config.servers;
25
+ }
26
+ // Check if it looks like direct server config (has "type" at top level)
27
+ if ("type" in config) {
28
+ // Single server config without "servers" wrapper
29
+ const servers = {};
30
+ servers["default"] = config;
31
+ return servers;
32
+ }
33
+ return config;
34
+ }
35
+ catch (error) {
36
+ const errorMessage = error instanceof Error ? error.message : String(error);
37
+ throw new Error(`Failed to load MCP config from ${configPath}: ${errorMessage}`);
38
+ }
39
+ }
40
+ // ============================================
41
+ // MCP TOOLS CONVERTER
42
+ // ============================================
43
+ export function mcpToolsToToolDefinitions(mcpClients) {
44
+ const tools = [];
45
+ for (const [serverName, client] of mcpClients) {
46
+ for (const mcpTool of client.tools) {
47
+ tools.push({
48
+ name: `mcp__${serverName}__${mcpTool.name}`,
49
+ description: mcpTool.description,
50
+ input_schema: mcpTool.inputSchema,
51
+ handler: async (args, context) => {
52
+ if (!client.connected) {
53
+ return {
54
+ content: `Error: MCP server "${serverName}" is not connected`,
55
+ is_error: true,
56
+ };
57
+ }
58
+ return client.callTool(mcpTool.name, args);
59
+ },
60
+ });
61
+ }
62
+ }
63
+ return tools;
64
+ }
65
+ // ============================================
66
+ // SESSION SETUP
67
+ // ============================================
68
+ export async function setupSession(options) {
69
+ const { args, apiKey, workingDirectory, onProgress } = options;
70
+ const log = (msg) => {
71
+ if (onProgress)
72
+ onProgress(msg);
73
+ else
74
+ console.log(`\x1b[90m${msg}\x1b[0m`);
75
+ };
76
+ // ============================================
77
+ // LOAD CONFIGURATION
78
+ // ============================================
79
+ log("Loading configuration...");
80
+ let loadedConfig;
81
+ try {
82
+ loadedConfig = await loadAllConfigs(workingDirectory);
83
+ }
84
+ catch (error) {
85
+ const errorMessage = error instanceof Error ? error.message : String(error);
86
+ log(`Warning: Failed to load config: ${errorMessage}`);
87
+ // Use empty defaults
88
+ loadedConfig = {
89
+ main: {},
90
+ settings: {},
91
+ keybindings: { bindings: [] },
92
+ projectSettings: {},
93
+ sources: [],
94
+ };
95
+ }
96
+ // Get merged settings (project overrides global)
97
+ const mergedSettings = getMergedSettings(loadedConfig.settings, loadedConfig.projectSettings);
98
+ // Log loaded config sources
99
+ if (loadedConfig.sources.length > 0) {
100
+ log(` Config sources: ${loadedConfig.sources.length} files`);
101
+ }
102
+ // Determine permission mode
103
+ let permissionMode = args.permissionMode;
104
+ if (permissionMode === "default") {
105
+ const configMode = getPermissionMode(mergedSettings);
106
+ if (configMode !== "default") {
107
+ permissionMode = configMode;
108
+ log(` Permission mode: ${configMode} (from config)`);
109
+ }
110
+ }
111
+ // Get allowed/disallowed tools from config
112
+ const allowedTools = getAllowedTools(mergedSettings);
113
+ const disallowedTools = getDisallowedTools(mergedSettings);
114
+ // ============================================
115
+ // INITIALIZE MANAGERS
116
+ // ============================================
117
+ // Create prompt evaluator for LLM-based hooks
118
+ const promptEvaluator = createPromptEvaluator({
119
+ apiKey,
120
+ model: "claude-haiku-4-5", // Fast model for hook evaluation
121
+ maxTokens: 256,
122
+ });
123
+ // Initialize components
124
+ const hookManager = new HookManager(60000, promptEvaluator);
125
+ const skillManager = new SkillManager();
126
+ const teammateManager = new TeammateManager();
127
+ // ============================================
128
+ // REGISTER HOOKS
129
+ // ============================================
130
+ // Register hooks from config
131
+ const hookDefinitions = settingsToHookDefinitions(mergedSettings);
132
+ for (const [event, definitions] of Object.entries(hookDefinitions)) {
133
+ for (const def of definitions) {
134
+ hookManager.register(event, def);
135
+ }
136
+ }
137
+ if (Object.keys(hookDefinitions).length > 0) {
138
+ log(` Hooks registered: ${Object.keys(hookDefinitions).length} events`);
139
+ }
140
+ // Register cognitive security hooks (in-process handlers)
141
+ // When bypassPermissions is set, disable all security checks
142
+ const isBypassMode = permissionMode === "bypassPermissions";
143
+ const securityHandlers = createSecurityHookHandlers({
144
+ enabled: !isBypassMode, // Disable entirely in bypass mode
145
+ checkIntentAlignment: !isBypassMode,
146
+ enforceFlowPolicies: !isBypassMode,
147
+ preventLeaks: !isBypassMode,
148
+ trackTaints: !isBypassMode,
149
+ logEvents: true, // Always log for audit trail
150
+ blockOnViolation: false, // Never block - log only
151
+ minAlignmentScore: 0.3,
152
+ approvalRequiredSensitivities: ["secret", "top_secret"],
153
+ });
154
+ hookManager.registerHandler("SessionStart", securityHandlers.SessionStart);
155
+ hookManager.registerHandler("PreToolUse", securityHandlers.PreToolUse);
156
+ hookManager.registerHandler("PostToolUse", securityHandlers.PostToolUse);
157
+ hookManager.registerHandler("UserPromptSubmit", securityHandlers.UserPromptSubmit);
158
+ hookManager.registerHandler("SessionEnd", securityHandlers.SessionEnd);
159
+ // Load skills from project
160
+ const skillsDir = workingDirectory + "/.claude/skills";
161
+ skillManager.loadFromDirectory(skillsDir, "project");
162
+ // ============================================
163
+ // MCP SETUP
164
+ // ============================================
165
+ const mcpClients = new Map();
166
+ // Get MCP servers from loaded config
167
+ const configServers = getAllMCPServers(loadedConfig.main, workingDirectory);
168
+ // If --mcp-config is specified, it overrides config file servers
169
+ let servers = configServers;
170
+ if (args.mcpConfig) {
171
+ try {
172
+ log(`Loading MCP config from ${args.mcpConfig}...`);
173
+ const fileServers = await loadMCPConfig(args.mcpConfig);
174
+ servers = fileServers;
175
+ }
176
+ catch (error) {
177
+ const errorMessage = error instanceof Error ? error.message : String(error);
178
+ log(`Warning: Failed to load MCP config file: ${errorMessage}`);
179
+ }
180
+ }
181
+ // Connect to MCP servers
182
+ if (Object.keys(servers).length > 0) {
183
+ // Only count enabled servers
184
+ const enabledServers = Object.entries(servers).filter(([_, config]) => !config.disabled);
185
+ const serverCount = enabledServers.length;
186
+ if (serverCount > 0) {
187
+ log(` Connecting to ${serverCount} MCP server(s)...`);
188
+ const connectedClients = await createMCPClients(servers, (message) => {
189
+ log(` ${message}`);
190
+ });
191
+ for (const [name, client] of connectedClients) {
192
+ mcpClients.set(name, client);
193
+ }
194
+ if (mcpClients.size > 0) {
195
+ log(` Connected to ${mcpClients.size} MCP server(s)`);
196
+ }
197
+ else {
198
+ log(` Warning: No MCP servers connected successfully`);
199
+ }
200
+ }
201
+ else if (Object.keys(servers).length > 0) {
202
+ log(` MCP config loaded but all ${Object.keys(servers).length} server(s) are disabled`);
203
+ }
204
+ }
205
+ // ============================================
206
+ // BUILD TOOLS
207
+ // ============================================
208
+ // Import built-in tools dynamically to avoid circular deps
209
+ const { builtInTools } = await import("../../../../ecosystem/tools/index.js");
210
+ const tools = [
211
+ ...builtInTools,
212
+ ...mcpToolsToToolDefinitions(mcpClients),
213
+ ];
214
+ return {
215
+ loadedConfig,
216
+ mergedSettings,
217
+ hookManager,
218
+ skillManager,
219
+ teammateManager,
220
+ mcpClients,
221
+ tools,
222
+ permissionMode,
223
+ allowedTools,
224
+ disallowedTools,
225
+ };
226
+ }