@compass-ai/nova 1.0.72 → 1.0.74

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 (974) hide show
  1. package/dist/acp/agent.d.ts +318 -0
  2. package/dist/acp/agent.d.ts.map +1 -0
  3. package/dist/acp/agent.js +795 -0
  4. package/dist/acp/agent.js.map +1 -0
  5. package/dist/acp/backpressure-writer.d.ts +49 -0
  6. package/dist/acp/backpressure-writer.d.ts.map +1 -0
  7. package/dist/acp/backpressure-writer.js +153 -0
  8. package/dist/acp/backpressure-writer.js.map +1 -0
  9. package/dist/acp/event-adapter.d.ts +242 -0
  10. package/dist/acp/event-adapter.d.ts.map +1 -0
  11. package/dist/acp/event-adapter.js +456 -0
  12. package/dist/acp/event-adapter.js.map +1 -0
  13. package/dist/acp/index.d.ts +30 -0
  14. package/dist/acp/index.d.ts.map +1 -0
  15. package/dist/acp/index.js +36 -0
  16. package/dist/acp/index.js.map +1 -0
  17. package/dist/acp/modes.d.ts +56 -0
  18. package/dist/acp/modes.d.ts.map +1 -0
  19. package/dist/acp/modes.js +135 -0
  20. package/dist/acp/modes.js.map +1 -0
  21. package/dist/acp/session-manager.d.ts +170 -0
  22. package/dist/acp/session-manager.d.ts.map +1 -0
  23. package/dist/acp/session-manager.js +381 -0
  24. package/dist/acp/session-manager.js.map +1 -0
  25. package/dist/acp/text-coalescer.d.ts +45 -0
  26. package/dist/acp/text-coalescer.d.ts.map +1 -0
  27. package/dist/acp/text-coalescer.js +110 -0
  28. package/dist/acp/text-coalescer.js.map +1 -0
  29. package/dist/acp/tool-bridge.d.ts +156 -0
  30. package/dist/acp/tool-bridge.d.ts.map +1 -0
  31. package/dist/acp/tool-bridge.js +381 -0
  32. package/dist/acp/tool-bridge.js.map +1 -0
  33. package/dist/acp/types.d.ts +314 -0
  34. package/dist/acp/types.d.ts.map +1 -0
  35. package/dist/acp/types.js +8 -0
  36. package/dist/acp/types.js.map +1 -0
  37. package/dist/cli.d.ts +9 -0
  38. package/dist/cli.d.ts.map +1 -0
  39. package/dist/cli.js +185 -184
  40. package/dist/cli.js.map +1 -0
  41. package/dist/commands/acp.d.ts +26 -0
  42. package/dist/commands/acp.d.ts.map +1 -0
  43. package/dist/commands/acp.js +492 -0
  44. package/dist/commands/acp.js.map +1 -0
  45. package/dist/commands/cache.d.ts +33 -0
  46. package/dist/commands/cache.d.ts.map +1 -0
  47. package/dist/commands/cache.js +537 -0
  48. package/dist/commands/cache.js.map +1 -0
  49. package/dist/commands/config.d.ts +10 -0
  50. package/dist/commands/config.d.ts.map +1 -0
  51. package/dist/commands/config.js +367 -0
  52. package/dist/commands/config.js.map +1 -0
  53. package/dist/commands/consent.d.ts +21 -0
  54. package/dist/commands/consent.d.ts.map +1 -0
  55. package/dist/commands/consent.js +334 -0
  56. package/dist/commands/consent.js.map +1 -0
  57. package/dist/commands/data.d.ts +24 -0
  58. package/dist/commands/data.d.ts.map +1 -0
  59. package/dist/commands/data.js +586 -0
  60. package/dist/commands/data.js.map +1 -0
  61. package/dist/commands/index.d.ts +145 -0
  62. package/dist/commands/index.d.ts.map +1 -0
  63. package/dist/commands/index.js +210 -0
  64. package/dist/commands/index.js.map +1 -0
  65. package/dist/commands/init.d.ts +106 -0
  66. package/dist/commands/init.d.ts.map +1 -0
  67. package/dist/commands/init.js +349 -0
  68. package/dist/commands/init.js.map +1 -0
  69. package/dist/commands/logs.d.ts +13 -0
  70. package/dist/commands/logs.d.ts.map +1 -0
  71. package/dist/commands/logs.js +359 -0
  72. package/dist/commands/logs.js.map +1 -0
  73. package/dist/commands/mcp.d.ts +20 -0
  74. package/dist/commands/mcp.d.ts.map +1 -0
  75. package/dist/commands/mcp.js +687 -0
  76. package/dist/commands/mcp.js.map +1 -0
  77. package/dist/commands/reset.d.ts +20 -0
  78. package/dist/commands/reset.d.ts.map +1 -0
  79. package/dist/commands/reset.js +372 -0
  80. package/dist/commands/reset.js.map +1 -0
  81. package/dist/commands/setup.d.ts +74 -0
  82. package/dist/commands/setup.d.ts.map +1 -0
  83. package/dist/commands/setup.js +863 -0
  84. package/dist/commands/setup.js.map +1 -0
  85. package/dist/commands/slash/agents.d.ts +40 -0
  86. package/dist/commands/slash/agents.d.ts.map +1 -0
  87. package/dist/commands/slash/agents.js +519 -0
  88. package/dist/commands/slash/agents.js.map +1 -0
  89. package/dist/commands/slash/approve.d.ts +46 -0
  90. package/dist/commands/slash/approve.d.ts.map +1 -0
  91. package/dist/commands/slash/approve.js +239 -0
  92. package/dist/commands/slash/approve.js.map +1 -0
  93. package/dist/commands/slash/attach.d.ts +70 -0
  94. package/dist/commands/slash/attach.d.ts.map +1 -0
  95. package/dist/commands/slash/attach.js +333 -0
  96. package/dist/commands/slash/attach.js.map +1 -0
  97. package/dist/commands/slash/clear.d.ts +47 -0
  98. package/dist/commands/slash/clear.d.ts.map +1 -0
  99. package/dist/commands/slash/clear.js +261 -0
  100. package/dist/commands/slash/clear.js.map +1 -0
  101. package/dist/commands/slash/commit.d.ts +40 -0
  102. package/dist/commands/slash/commit.d.ts.map +1 -0
  103. package/dist/commands/slash/commit.js +337 -0
  104. package/dist/commands/slash/commit.js.map +1 -0
  105. package/dist/commands/slash/compact.d.ts +48 -0
  106. package/dist/commands/slash/compact.d.ts.map +1 -0
  107. package/dist/commands/slash/compact.js +288 -0
  108. package/dist/commands/slash/compact.js.map +1 -0
  109. package/dist/commands/slash/config.d.ts +20 -0
  110. package/dist/commands/slash/config.d.ts.map +1 -0
  111. package/dist/commands/slash/config.js +136 -0
  112. package/dist/commands/slash/config.js.map +1 -0
  113. package/dist/commands/slash/context.d.ts +49 -0
  114. package/dist/commands/slash/context.d.ts.map +1 -0
  115. package/dist/commands/slash/context.js +430 -0
  116. package/dist/commands/slash/context.js.map +1 -0
  117. package/dist/commands/slash/cost.d.ts +34 -0
  118. package/dist/commands/slash/cost.d.ts.map +1 -0
  119. package/dist/commands/slash/cost.js +312 -0
  120. package/dist/commands/slash/cost.js.map +1 -0
  121. package/dist/commands/slash/custom.d.ts +41 -0
  122. package/dist/commands/slash/custom.d.ts.map +1 -0
  123. package/dist/commands/slash/custom.js +126 -0
  124. package/dist/commands/slash/custom.js.map +1 -0
  125. package/dist/commands/slash/exit.d.ts +25 -0
  126. package/dist/commands/slash/exit.d.ts.map +1 -0
  127. package/dist/commands/slash/exit.js +186 -0
  128. package/dist/commands/slash/exit.js.map +1 -0
  129. package/dist/commands/slash/export.d.ts +27 -0
  130. package/dist/commands/slash/export.d.ts.map +1 -0
  131. package/dist/commands/slash/export.js +318 -0
  132. package/dist/commands/slash/export.js.map +1 -0
  133. package/dist/commands/slash/files.d.ts +47 -0
  134. package/dist/commands/slash/files.d.ts.map +1 -0
  135. package/dist/commands/slash/files.js +521 -0
  136. package/dist/commands/slash/files.js.map +1 -0
  137. package/dist/commands/slash/help.d.ts +50 -0
  138. package/dist/commands/slash/help.d.ts.map +1 -0
  139. package/dist/commands/slash/help.js +282 -0
  140. package/dist/commands/slash/help.js.map +1 -0
  141. package/dist/commands/slash/index-cmd.d.ts +41 -0
  142. package/dist/commands/slash/index-cmd.d.ts.map +1 -0
  143. package/dist/commands/slash/index-cmd.js +349 -0
  144. package/dist/commands/slash/index-cmd.js.map +1 -0
  145. package/dist/commands/slash/index.d.ts +97 -0
  146. package/dist/commands/slash/index.d.ts.map +1 -0
  147. package/dist/commands/slash/index.js +251 -0
  148. package/dist/commands/slash/index.js.map +1 -0
  149. package/dist/commands/slash/login.d.ts +23 -0
  150. package/dist/commands/slash/login.d.ts.map +1 -0
  151. package/dist/commands/slash/login.js +175 -0
  152. package/dist/commands/slash/login.js.map +1 -0
  153. package/dist/commands/slash/logout.d.ts +23 -0
  154. package/dist/commands/slash/logout.d.ts.map +1 -0
  155. package/dist/commands/slash/logout.js +153 -0
  156. package/dist/commands/slash/logout.js.map +1 -0
  157. package/dist/commands/slash/logs.d.ts +29 -0
  158. package/dist/commands/slash/logs.d.ts.map +1 -0
  159. package/dist/commands/slash/logs.js +423 -0
  160. package/dist/commands/slash/logs.js.map +1 -0
  161. package/dist/commands/slash/mcp.d.ts +29 -0
  162. package/dist/commands/slash/mcp.d.ts.map +1 -0
  163. package/dist/commands/slash/mcp.js +1026 -0
  164. package/dist/commands/slash/mcp.js.map +1 -0
  165. package/dist/commands/slash/model.d.ts +60 -0
  166. package/dist/commands/slash/model.d.ts.map +1 -0
  167. package/dist/commands/slash/model.js +466 -0
  168. package/dist/commands/slash/model.js.map +1 -0
  169. package/dist/commands/slash/personality.d.ts +40 -0
  170. package/dist/commands/slash/personality.d.ts.map +1 -0
  171. package/dist/commands/slash/personality.js +272 -0
  172. package/dist/commands/slash/personality.js.map +1 -0
  173. package/dist/commands/slash/purge.d.ts +42 -0
  174. package/dist/commands/slash/purge.d.ts.map +1 -0
  175. package/dist/commands/slash/purge.js +233 -0
  176. package/dist/commands/slash/purge.js.map +1 -0
  177. package/dist/commands/slash/reset.d.ts +44 -0
  178. package/dist/commands/slash/reset.d.ts.map +1 -0
  179. package/dist/commands/slash/reset.js +326 -0
  180. package/dist/commands/slash/reset.js.map +1 -0
  181. package/dist/commands/slash/skills.d.ts +40 -0
  182. package/dist/commands/slash/skills.d.ts.map +1 -0
  183. package/dist/commands/slash/skills.js +207 -0
  184. package/dist/commands/slash/skills.js.map +1 -0
  185. package/dist/commands/slash/tokens.d.ts +34 -0
  186. package/dist/commands/slash/tokens.d.ts.map +1 -0
  187. package/dist/commands/slash/tokens.js +205 -0
  188. package/dist/commands/slash/tokens.js.map +1 -0
  189. package/dist/commands/slash/unleash.d.ts +50 -0
  190. package/dist/commands/slash/unleash.d.ts.map +1 -0
  191. package/dist/commands/slash/unleash.js +262 -0
  192. package/dist/commands/slash/unleash.js.map +1 -0
  193. package/dist/commands/slash/update.d.ts +34 -0
  194. package/dist/commands/slash/update.d.ts.map +1 -0
  195. package/dist/commands/slash/update.js +364 -0
  196. package/dist/commands/slash/update.js.map +1 -0
  197. package/dist/commands/slash/wrap.d.ts +18 -0
  198. package/dist/commands/slash/wrap.d.ts.map +1 -0
  199. package/dist/commands/slash/wrap.js +21 -0
  200. package/dist/commands/slash/wrap.js.map +1 -0
  201. package/dist/commands/tokens.d.ts +26 -0
  202. package/dist/commands/tokens.d.ts.map +1 -0
  203. package/dist/commands/tokens.js +245 -0
  204. package/dist/commands/tokens.js.map +1 -0
  205. package/dist/constants/builtin-agents.d.ts +27 -0
  206. package/dist/constants/builtin-agents.d.ts.map +1 -0
  207. package/dist/constants/builtin-agents.js +710 -0
  208. package/dist/constants/builtin-agents.js.map +1 -0
  209. package/dist/constants/builtin-skills.d.ts +32 -0
  210. package/dist/constants/builtin-skills.d.ts.map +1 -0
  211. package/dist/constants/builtin-skills.js +389 -0
  212. package/dist/constants/builtin-skills.js.map +1 -0
  213. package/dist/constants/defaults.d.ts +448 -0
  214. package/dist/constants/defaults.d.ts.map +1 -0
  215. package/dist/constants/defaults.js +829 -0
  216. package/dist/constants/defaults.js.map +1 -0
  217. package/dist/constants/index.d.ts +27 -0
  218. package/dist/constants/index.d.ts.map +1 -0
  219. package/dist/constants/index.js +85 -0
  220. package/dist/constants/index.js.map +1 -0
  221. package/dist/constants/install-hints.d.ts +7 -0
  222. package/dist/constants/install-hints.d.ts.map +1 -0
  223. package/dist/constants/install-hints.js +123 -0
  224. package/dist/constants/install-hints.js.map +1 -0
  225. package/dist/constants/models.d.ts +255 -0
  226. package/dist/constants/models.d.ts.map +1 -0
  227. package/dist/constants/models.js +596 -0
  228. package/dist/constants/models.js.map +1 -0
  229. package/dist/constants/schedule.d.ts +43 -0
  230. package/dist/constants/schedule.d.ts.map +1 -0
  231. package/dist/constants/schedule.js +110 -0
  232. package/dist/constants/schedule.js.map +1 -0
  233. package/dist/constants/system-utilities.d.ts +57 -0
  234. package/dist/constants/system-utilities.d.ts.map +1 -0
  235. package/dist/constants/system-utilities.js +421 -0
  236. package/dist/constants/system-utilities.js.map +1 -0
  237. package/dist/constants/token-limits.d.ts +102 -0
  238. package/dist/constants/token-limits.d.ts.map +1 -0
  239. package/dist/constants/token-limits.js +286 -0
  240. package/dist/constants/token-limits.js.map +1 -0
  241. package/dist/core/autocomplete.d.ts +132 -0
  242. package/dist/core/autocomplete.d.ts.map +1 -0
  243. package/dist/core/autocomplete.js +653 -0
  244. package/dist/core/autocomplete.js.map +1 -0
  245. package/dist/core/command-parser.d.ts +301 -0
  246. package/dist/core/command-parser.d.ts.map +1 -0
  247. package/dist/core/command-parser.js +526 -0
  248. package/dist/core/command-parser.js.map +1 -0
  249. package/dist/core/context-builder.d.ts +264 -0
  250. package/dist/core/context-builder.d.ts.map +1 -0
  251. package/dist/core/context-builder.js +1018 -0
  252. package/dist/core/context-builder.js.map +1 -0
  253. package/dist/core/event-emitter.d.ts +411 -0
  254. package/dist/core/event-emitter.d.ts.map +1 -0
  255. package/dist/core/event-emitter.js +138 -0
  256. package/dist/core/event-emitter.js.map +1 -0
  257. package/dist/core/history-manager.d.ts +62 -0
  258. package/dist/core/history-manager.d.ts.map +1 -0
  259. package/dist/core/history-manager.js +151 -0
  260. package/dist/core/history-manager.js.map +1 -0
  261. package/dist/core/slash-command-handler.d.ts +352 -0
  262. package/dist/core/slash-command-handler.d.ts.map +1 -0
  263. package/dist/core/slash-command-handler.js +563 -0
  264. package/dist/core/slash-command-handler.js.map +1 -0
  265. package/dist/core/task-processor.d.ts +179 -0
  266. package/dist/core/task-processor.d.ts.map +1 -0
  267. package/dist/core/task-processor.js +519 -0
  268. package/dist/core/task-processor.js.map +1 -0
  269. package/dist/index.d.ts +90 -0
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.js +4 -3
  272. package/dist/index.js.map +1 -0
  273. package/dist/prompts/agent-prompt-generator.d.ts +26 -0
  274. package/dist/prompts/agent-prompt-generator.d.ts.map +1 -0
  275. package/dist/prompts/agent-prompt-generator.js +244 -0
  276. package/dist/prompts/agent-prompt-generator.js.map +1 -0
  277. package/dist/prompts/commit-message.d.ts +35 -0
  278. package/dist/prompts/commit-message.d.ts.map +1 -0
  279. package/dist/prompts/commit-message.js +187 -0
  280. package/dist/prompts/commit-message.js.map +1 -0
  281. package/dist/prompts/conversation.d.ts +51 -0
  282. package/dist/prompts/conversation.d.ts.map +1 -0
  283. package/dist/prompts/conversation.js +115 -0
  284. package/dist/prompts/conversation.js.map +1 -0
  285. package/dist/prompts/index.d.ts +39 -0
  286. package/dist/prompts/index.d.ts.map +1 -0
  287. package/dist/prompts/index.js +74 -0
  288. package/dist/prompts/index.js.map +1 -0
  289. package/dist/prompts/memory.d.ts +6 -0
  290. package/dist/prompts/memory.d.ts.map +1 -0
  291. package/dist/prompts/memory.js +29 -0
  292. package/dist/prompts/memory.js.map +1 -0
  293. package/dist/prompts/personality.d.ts +77 -0
  294. package/dist/prompts/personality.d.ts.map +1 -0
  295. package/dist/prompts/personality.js +393 -0
  296. package/dist/prompts/personality.js.map +1 -0
  297. package/dist/prompts/plan-generator.d.ts +144 -0
  298. package/dist/prompts/plan-generator.d.ts.map +1 -0
  299. package/dist/prompts/plan-generator.js +553 -0
  300. package/dist/prompts/plan-generator.js.map +1 -0
  301. package/dist/prompts/system.d.ts +95 -0
  302. package/dist/prompts/system.d.ts.map +1 -0
  303. package/dist/prompts/system.js +461 -0
  304. package/dist/prompts/system.js.map +1 -0
  305. package/dist/prompts/task-processor.d.ts +94 -0
  306. package/dist/prompts/task-processor.d.ts.map +1 -0
  307. package/dist/prompts/task-processor.js +554 -0
  308. package/dist/prompts/task-processor.js.map +1 -0
  309. package/dist/prompts/unguarded.d.ts +78 -0
  310. package/dist/prompts/unguarded.d.ts.map +1 -0
  311. package/dist/prompts/unguarded.js +418 -0
  312. package/dist/prompts/unguarded.js.map +1 -0
  313. package/dist/prompts/utils.d.ts +73 -0
  314. package/dist/prompts/utils.d.ts.map +1 -0
  315. package/dist/prompts/utils.js +114 -0
  316. package/dist/prompts/utils.js.map +1 -0
  317. package/dist/prompts/workflow.d.ts +241 -0
  318. package/dist/prompts/workflow.d.ts.map +1 -0
  319. package/dist/prompts/workflow.js +608 -0
  320. package/dist/prompts/workflow.js.map +1 -0
  321. package/dist/services/action-logger.d.ts +383 -0
  322. package/dist/services/action-logger.d.ts.map +1 -0
  323. package/dist/services/action-logger.js +544 -0
  324. package/dist/services/action-logger.js.map +1 -0
  325. package/dist/services/agent-budget-allocator.d.ts +111 -0
  326. package/dist/services/agent-budget-allocator.d.ts.map +1 -0
  327. package/dist/services/agent-budget-allocator.js +278 -0
  328. package/dist/services/agent-budget-allocator.js.map +1 -0
  329. package/dist/services/agent-manager.d.ts +181 -0
  330. package/dist/services/agent-manager.d.ts.map +1 -0
  331. package/dist/services/agent-manager.js +749 -0
  332. package/dist/services/agent-manager.js.map +1 -0
  333. package/dist/services/agent-spawner.d.ts +138 -0
  334. package/dist/services/agent-spawner.d.ts.map +1 -0
  335. package/dist/services/agent-spawner.js +748 -0
  336. package/dist/services/agent-spawner.js.map +1 -0
  337. package/dist/services/agent-state-service.d.ts +145 -0
  338. package/dist/services/agent-state-service.d.ts.map +1 -0
  339. package/dist/services/agent-state-service.js +247 -0
  340. package/dist/services/agent-state-service.js.map +1 -0
  341. package/dist/services/anthropic-client.d.ts +357 -0
  342. package/dist/services/anthropic-client.d.ts.map +1 -0
  343. package/dist/services/anthropic-client.js +1451 -0
  344. package/dist/services/anthropic-client.js.map +1 -0
  345. package/dist/services/approval-manager.d.ts +385 -0
  346. package/dist/services/approval-manager.d.ts.map +1 -0
  347. package/dist/services/approval-manager.js +1044 -0
  348. package/dist/services/approval-manager.js.map +1 -0
  349. package/dist/services/audit-logger.d.ts +245 -0
  350. package/dist/services/audit-logger.d.ts.map +1 -0
  351. package/dist/services/audit-logger.js +324 -0
  352. package/dist/services/audit-logger.js.map +1 -0
  353. package/dist/services/backup-manager.d.ts +136 -0
  354. package/dist/services/backup-manager.d.ts.map +1 -0
  355. package/dist/services/backup-manager.js +260 -0
  356. package/dist/services/backup-manager.js.map +1 -0
  357. package/dist/services/cache-service.d.ts +247 -0
  358. package/dist/services/cache-service.d.ts.map +1 -0
  359. package/dist/services/cache-service.js +558 -0
  360. package/dist/services/cache-service.js.map +1 -0
  361. package/dist/services/chat-archival-service.d.ts +108 -0
  362. package/dist/services/chat-archival-service.d.ts.map +1 -0
  363. package/dist/services/chat-archival-service.js +465 -0
  364. package/dist/services/chat-archival-service.js.map +1 -0
  365. package/dist/services/codebase-indexer.d.ts +272 -0
  366. package/dist/services/codebase-indexer.d.ts.map +1 -0
  367. package/dist/services/codebase-indexer.js +863 -0
  368. package/dist/services/codebase-indexer.js.map +1 -0
  369. package/dist/services/compass-auth-service.d.ts +204 -0
  370. package/dist/services/compass-auth-service.d.ts.map +1 -0
  371. package/dist/services/compass-auth-service.js +391 -0
  372. package/dist/services/compass-auth-service.js.map +1 -0
  373. package/dist/services/complexity-classifier.d.ts +208 -0
  374. package/dist/services/complexity-classifier.d.ts.map +1 -0
  375. package/dist/services/complexity-classifier.js +1410 -0
  376. package/dist/services/complexity-classifier.js.map +1 -0
  377. package/dist/services/config-manager.d.ts +278 -0
  378. package/dist/services/config-manager.d.ts.map +1 -0
  379. package/dist/services/config-manager.js +651 -0
  380. package/dist/services/config-manager.js.map +1 -0
  381. package/dist/services/consent-manager.d.ts +239 -0
  382. package/dist/services/consent-manager.d.ts.map +1 -0
  383. package/dist/services/consent-manager.js +516 -0
  384. package/dist/services/consent-manager.js.map +1 -0
  385. package/dist/services/conversation-compactor.d.ts +223 -0
  386. package/dist/services/conversation-compactor.d.ts.map +1 -0
  387. package/dist/services/conversation-compactor.js +750 -0
  388. package/dist/services/conversation-compactor.js.map +1 -0
  389. package/dist/services/cost-tracker.d.ts +167 -0
  390. package/dist/services/cost-tracker.d.ts.map +1 -0
  391. package/dist/services/cost-tracker.js +199 -0
  392. package/dist/services/cost-tracker.js.map +1 -0
  393. package/dist/services/credential-store.d.ts +273 -0
  394. package/dist/services/credential-store.d.ts.map +1 -0
  395. package/dist/services/credential-store.js +877 -0
  396. package/dist/services/credential-store.js.map +1 -0
  397. package/dist/services/custom-command-service.d.ts +112 -0
  398. package/dist/services/custom-command-service.d.ts.map +1 -0
  399. package/dist/services/custom-command-service.js +464 -0
  400. package/dist/services/custom-command-service.js.map +1 -0
  401. package/dist/services/default-statusline-renderer.d.ts +60 -0
  402. package/dist/services/default-statusline-renderer.d.ts.map +1 -0
  403. package/dist/services/default-statusline-renderer.js +110 -0
  404. package/dist/services/default-statusline-renderer.js.map +1 -0
  405. package/dist/services/enhanced-context-gatherer.d.ts +116 -0
  406. package/dist/services/enhanced-context-gatherer.d.ts.map +1 -0
  407. package/dist/services/enhanced-context-gatherer.js +605 -0
  408. package/dist/services/enhanced-context-gatherer.js.map +1 -0
  409. package/dist/services/file-hash-tracker.d.ts +95 -0
  410. package/dist/services/file-hash-tracker.d.ts.map +1 -0
  411. package/dist/services/file-hash-tracker.js +199 -0
  412. package/dist/services/file-hash-tracker.js.map +1 -0
  413. package/dist/services/file-service.d.ts +274 -0
  414. package/dist/services/file-service.d.ts.map +1 -0
  415. package/dist/services/file-service.js +876 -0
  416. package/dist/services/file-service.js.map +1 -0
  417. package/dist/services/git-service.d.ts +536 -0
  418. package/dist/services/git-service.d.ts.map +1 -0
  419. package/dist/services/git-service.js +1215 -0
  420. package/dist/services/git-service.js.map +1 -0
  421. package/dist/services/hook-service.d.ts +148 -0
  422. package/dist/services/hook-service.d.ts.map +1 -0
  423. package/dist/services/hook-service.js +705 -0
  424. package/dist/services/hook-service.js.map +1 -0
  425. package/dist/services/ide-state-service.d.ts +114 -0
  426. package/dist/services/ide-state-service.d.ts.map +1 -0
  427. package/dist/services/ide-state-service.js +204 -0
  428. package/dist/services/ide-state-service.js.map +1 -0
  429. package/dist/services/interactive-clarifier.d.ts +90 -0
  430. package/dist/services/interactive-clarifier.d.ts.map +1 -0
  431. package/dist/services/interactive-clarifier.js +446 -0
  432. package/dist/services/interactive-clarifier.js.map +1 -0
  433. package/dist/services/iteration-scoper.d.ts +225 -0
  434. package/dist/services/iteration-scoper.d.ts.map +1 -0
  435. package/dist/services/iteration-scoper.js +387 -0
  436. package/dist/services/iteration-scoper.js.map +1 -0
  437. package/dist/services/llm-plan-generator.d.ts +44 -0
  438. package/dist/services/llm-plan-generator.d.ts.map +1 -0
  439. package/dist/services/llm-plan-generator.js +863 -0
  440. package/dist/services/llm-plan-generator.js.map +1 -0
  441. package/dist/services/llm-system-prompt-generator.d.ts +85 -0
  442. package/dist/services/llm-system-prompt-generator.d.ts.map +1 -0
  443. package/dist/services/llm-system-prompt-generator.js +257 -0
  444. package/dist/services/llm-system-prompt-generator.js.map +1 -0
  445. package/dist/services/log-interpreter.d.ts +190 -0
  446. package/dist/services/log-interpreter.d.ts.map +1 -0
  447. package/dist/services/log-interpreter.js +520 -0
  448. package/dist/services/log-interpreter.js.map +1 -0
  449. package/dist/services/mcp-config-manager.d.ts +141 -0
  450. package/dist/services/mcp-config-manager.d.ts.map +1 -0
  451. package/dist/services/mcp-config-manager.js +678 -0
  452. package/dist/services/mcp-config-manager.js.map +1 -0
  453. package/dist/services/mcp-oauth-service.d.ts +170 -0
  454. package/dist/services/mcp-oauth-service.d.ts.map +1 -0
  455. package/dist/services/mcp-oauth-service.js +892 -0
  456. package/dist/services/mcp-oauth-service.js.map +1 -0
  457. package/dist/services/mcp-plugin-support.d.ts +81 -0
  458. package/dist/services/mcp-plugin-support.d.ts.map +1 -0
  459. package/dist/services/mcp-plugin-support.js +305 -0
  460. package/dist/services/mcp-plugin-support.js.map +1 -0
  461. package/dist/services/mcp-server-manager.d.ts +134 -0
  462. package/dist/services/mcp-server-manager.d.ts.map +1 -0
  463. package/dist/services/mcp-server-manager.js +613 -0
  464. package/dist/services/mcp-server-manager.js.map +1 -0
  465. package/dist/services/mcp-tool-integration.d.ts +119 -0
  466. package/dist/services/mcp-tool-integration.d.ts.map +1 -0
  467. package/dist/services/mcp-tool-integration.js +381 -0
  468. package/dist/services/mcp-tool-integration.js.map +1 -0
  469. package/dist/services/mcp-transport.d.ts +105 -0
  470. package/dist/services/mcp-transport.d.ts.map +1 -0
  471. package/dist/services/mcp-transport.js +1316 -0
  472. package/dist/services/mcp-transport.js.map +1 -0
  473. package/dist/services/memory-service.d.ts +55 -0
  474. package/dist/services/memory-service.d.ts.map +1 -0
  475. package/dist/services/memory-service.js +251 -0
  476. package/dist/services/memory-service.js.map +1 -0
  477. package/dist/services/model-availability.d.ts +64 -0
  478. package/dist/services/model-availability.d.ts.map +1 -0
  479. package/dist/services/model-availability.js +114 -0
  480. package/dist/services/model-availability.js.map +1 -0
  481. package/dist/services/plan-generator.d.ts +98 -0
  482. package/dist/services/plan-generator.d.ts.map +1 -0
  483. package/dist/services/plan-generator.js +658 -0
  484. package/dist/services/plan-generator.js.map +1 -0
  485. package/dist/services/plan-mode-fallback.d.ts +80 -0
  486. package/dist/services/plan-mode-fallback.d.ts.map +1 -0
  487. package/dist/services/plan-mode-fallback.js +307 -0
  488. package/dist/services/plan-mode-fallback.js.map +1 -0
  489. package/dist/services/plan-mode-handler.d.ts +42 -0
  490. package/dist/services/plan-mode-handler.d.ts.map +1 -0
  491. package/dist/services/plan-mode-handler.js +388 -0
  492. package/dist/services/plan-mode-handler.js.map +1 -0
  493. package/dist/services/plan-persistence.d.ts +203 -0
  494. package/dist/services/plan-persistence.d.ts.map +1 -0
  495. package/dist/services/plan-persistence.js +538 -0
  496. package/dist/services/plan-persistence.js.map +1 -0
  497. package/dist/services/prompt-preprocessor.d.ts +73 -0
  498. package/dist/services/prompt-preprocessor.d.ts.map +1 -0
  499. package/dist/services/prompt-preprocessor.js +146 -0
  500. package/dist/services/prompt-preprocessor.js.map +1 -0
  501. package/dist/services/rating-service.d.ts +84 -0
  502. package/dist/services/rating-service.d.ts.map +1 -0
  503. package/dist/services/rating-service.js +171 -0
  504. package/dist/services/rating-service.js.map +1 -0
  505. package/dist/services/rating-state-manager.d.ts +131 -0
  506. package/dist/services/rating-state-manager.d.ts.map +1 -0
  507. package/dist/services/rating-state-manager.js +270 -0
  508. package/dist/services/rating-state-manager.js.map +1 -0
  509. package/dist/services/sdk-runner.d.ts +113 -0
  510. package/dist/services/sdk-runner.d.ts.map +1 -0
  511. package/dist/services/sdk-runner.js +1424 -0
  512. package/dist/services/sdk-runner.js.map +1 -0
  513. package/dist/services/session-manager.d.ts +528 -0
  514. package/dist/services/session-manager.d.ts.map +1 -0
  515. package/dist/services/session-manager.js +1184 -0
  516. package/dist/services/session-manager.js.map +1 -0
  517. package/dist/services/shell-executor.d.ts +337 -0
  518. package/dist/services/shell-executor.d.ts.map +1 -0
  519. package/dist/services/shell-executor.js +1201 -0
  520. package/dist/services/shell-executor.js.map +1 -0
  521. package/dist/services/skill-service.d.ts +149 -0
  522. package/dist/services/skill-service.d.ts.map +1 -0
  523. package/dist/services/skill-service.js +594 -0
  524. package/dist/services/skill-service.js.map +1 -0
  525. package/dist/services/statusline-executor.d.ts +102 -0
  526. package/dist/services/statusline-executor.d.ts.map +1 -0
  527. package/dist/services/statusline-executor.js +305 -0
  528. package/dist/services/statusline-executor.js.map +1 -0
  529. package/dist/services/step-tracker.d.ts +356 -0
  530. package/dist/services/step-tracker.d.ts.map +1 -0
  531. package/dist/services/step-tracker.js +634 -0
  532. package/dist/services/step-tracker.js.map +1 -0
  533. package/dist/services/system-event-logger.d.ts +473 -0
  534. package/dist/services/system-event-logger.d.ts.map +1 -0
  535. package/dist/services/system-event-logger.js +790 -0
  536. package/dist/services/system-event-logger.js.map +1 -0
  537. package/dist/services/system-utility-detector.d.ts +91 -0
  538. package/dist/services/system-utility-detector.d.ts.map +1 -0
  539. package/dist/services/system-utility-detector.js +238 -0
  540. package/dist/services/system-utility-detector.js.map +1 -0
  541. package/dist/services/team-context-store.d.ts +100 -0
  542. package/dist/services/team-context-store.d.ts.map +1 -0
  543. package/dist/services/team-context-store.js +513 -0
  544. package/dist/services/team-context-store.js.map +1 -0
  545. package/dist/services/temp-file-service.d.ts +164 -0
  546. package/dist/services/temp-file-service.d.ts.map +1 -0
  547. package/dist/services/temp-file-service.js +303 -0
  548. package/dist/services/temp-file-service.js.map +1 -0
  549. package/dist/services/token-limit-enforcer.d.ts +53 -0
  550. package/dist/services/token-limit-enforcer.d.ts.map +1 -0
  551. package/dist/services/token-limit-enforcer.js +90 -0
  552. package/dist/services/token-limit-enforcer.js.map +1 -0
  553. package/dist/services/token-limit-store.d.ts +105 -0
  554. package/dist/services/token-limit-store.d.ts.map +1 -0
  555. package/dist/services/token-limit-store.js +288 -0
  556. package/dist/services/token-limit-store.js.map +1 -0
  557. package/dist/services/token-tracker.d.ts +290 -0
  558. package/dist/services/token-tracker.d.ts.map +1 -0
  559. package/dist/services/token-tracker.js +751 -0
  560. package/dist/services/token-tracker.js.map +1 -0
  561. package/dist/services/tool-registry.d.ts +302 -0
  562. package/dist/services/tool-registry.d.ts.map +1 -0
  563. package/dist/services/tool-registry.js +606 -0
  564. package/dist/services/tool-registry.js.map +1 -0
  565. package/dist/services/tools-logger.d.ts +152 -0
  566. package/dist/services/tools-logger.d.ts.map +1 -0
  567. package/dist/services/tools-logger.js +222 -0
  568. package/dist/services/tools-logger.js.map +1 -0
  569. package/dist/services/update-plan-handler.d.ts +56 -0
  570. package/dist/services/update-plan-handler.d.ts.map +1 -0
  571. package/dist/services/update-plan-handler.js +372 -0
  572. package/dist/services/update-plan-handler.js.map +1 -0
  573. package/dist/services/update-service.d.ts +197 -0
  574. package/dist/services/update-service.d.ts.map +1 -0
  575. package/dist/services/update-service.js +749 -0
  576. package/dist/services/update-service.js.map +1 -0
  577. package/dist/services/verifier.d.ts +113 -0
  578. package/dist/services/verifier.d.ts.map +1 -0
  579. package/dist/services/verifier.js +541 -0
  580. package/dist/services/verifier.js.map +1 -0
  581. package/dist/services/workflow-manager.d.ts +277 -0
  582. package/dist/services/workflow-manager.d.ts.map +1 -0
  583. package/dist/services/workflow-manager.js +616 -0
  584. package/dist/services/workflow-manager.js.map +1 -0
  585. package/dist/services/workflow-orchestrator.d.ts +148 -0
  586. package/dist/services/workflow-orchestrator.d.ts.map +1 -0
  587. package/dist/services/workflow-orchestrator.js +617 -0
  588. package/dist/services/workflow-orchestrator.js.map +1 -0
  589. package/dist/services/worktree-manager.d.ts +36 -0
  590. package/dist/services/worktree-manager.d.ts.map +1 -0
  591. package/dist/services/worktree-manager.js +185 -0
  592. package/dist/services/worktree-manager.js.map +1 -0
  593. package/dist/templates/ascii-art.d.ts +136 -0
  594. package/dist/templates/ascii-art.d.ts.map +1 -0
  595. package/dist/templates/ascii-art.js +286 -0
  596. package/dist/templates/ascii-art.js.map +1 -0
  597. package/dist/templates/help.d.ts +186 -0
  598. package/dist/templates/help.d.ts.map +1 -0
  599. package/dist/templates/help.js +588 -0
  600. package/dist/templates/help.js.map +1 -0
  601. package/dist/templates/prompts/workflow-prompts.d.ts +9 -0
  602. package/dist/templates/prompts/workflow-prompts.d.ts.map +1 -0
  603. package/dist/templates/prompts/workflow-prompts.js +9 -0
  604. package/dist/templates/prompts/workflow-prompts.js.map +1 -0
  605. package/dist/tools/agent-tools.d.ts +9 -0
  606. package/dist/tools/agent-tools.d.ts.map +1 -0
  607. package/dist/tools/agent-tools.js +349 -0
  608. package/dist/tools/agent-tools.js.map +1 -0
  609. package/dist/tools/edit-replacers.d.ts +90 -0
  610. package/dist/tools/edit-replacers.d.ts.map +1 -0
  611. package/dist/tools/edit-replacers.js +553 -0
  612. package/dist/tools/edit-replacers.js.map +1 -0
  613. package/dist/tools/file-tools.d.ts +13 -0
  614. package/dist/tools/file-tools.d.ts.map +1 -0
  615. package/dist/tools/file-tools.js +954 -0
  616. package/dist/tools/file-tools.js.map +1 -0
  617. package/dist/tools/git-tools.d.ts +9 -0
  618. package/dist/tools/git-tools.d.ts.map +1 -0
  619. package/dist/tools/git-tools.js +261 -0
  620. package/dist/tools/git-tools.js.map +1 -0
  621. package/dist/tools/index.d.ts +13 -0
  622. package/dist/tools/index.d.ts.map +1 -0
  623. package/dist/tools/index.js +70 -0
  624. package/dist/tools/index.js.map +1 -0
  625. package/dist/tools/network-tools.d.ts +8 -0
  626. package/dist/tools/network-tools.d.ts.map +1 -0
  627. package/dist/tools/network-tools.js +261 -0
  628. package/dist/tools/network-tools.js.map +1 -0
  629. package/dist/tools/openai-tools.d.ts +16 -0
  630. package/dist/tools/openai-tools.d.ts.map +1 -0
  631. package/dist/tools/openai-tools.js +385 -0
  632. package/dist/tools/openai-tools.js.map +1 -0
  633. package/dist/tools/plan-tools.d.ts +9 -0
  634. package/dist/tools/plan-tools.d.ts.map +1 -0
  635. package/dist/tools/plan-tools.js +223 -0
  636. package/dist/tools/plan-tools.js.map +1 -0
  637. package/dist/tools/schedule-tools.d.ts +9 -0
  638. package/dist/tools/schedule-tools.d.ts.map +1 -0
  639. package/dist/tools/schedule-tools.js +405 -0
  640. package/dist/tools/schedule-tools.js.map +1 -0
  641. package/dist/tools/search-tools.d.ts +8 -0
  642. package/dist/tools/search-tools.d.ts.map +1 -0
  643. package/dist/tools/search-tools.js +357 -0
  644. package/dist/tools/search-tools.js.map +1 -0
  645. package/dist/tools/shared-utils.d.ts +91 -0
  646. package/dist/tools/shared-utils.d.ts.map +1 -0
  647. package/dist/tools/shared-utils.js +385 -0
  648. package/dist/tools/shared-utils.js.map +1 -0
  649. package/dist/tools/shell-tools.d.ts +9 -0
  650. package/dist/tools/shell-tools.d.ts.map +1 -0
  651. package/dist/tools/shell-tools.js +409 -0
  652. package/dist/tools/shell-tools.js.map +1 -0
  653. package/dist/tools/skill-tools.d.ts +13 -0
  654. package/dist/tools/skill-tools.d.ts.map +1 -0
  655. package/dist/tools/skill-tools.js +244 -0
  656. package/dist/tools/skill-tools.js.map +1 -0
  657. package/dist/tools/swarm-tools.d.ts +9 -0
  658. package/dist/tools/swarm-tools.d.ts.map +1 -0
  659. package/dist/tools/swarm-tools.js +422 -0
  660. package/dist/tools/swarm-tools.js.map +1 -0
  661. package/dist/tools/user-tools.d.ts +13 -0
  662. package/dist/tools/user-tools.d.ts.map +1 -0
  663. package/dist/tools/user-tools.js +232 -0
  664. package/dist/tools/user-tools.js.map +1 -0
  665. package/dist/types/agent-process.d.ts +244 -0
  666. package/dist/types/agent-process.d.ts.map +1 -0
  667. package/dist/types/agent-process.js +93 -0
  668. package/dist/types/agent-process.js.map +1 -0
  669. package/dist/types/agent.d.ts +358 -0
  670. package/dist/types/agent.d.ts.map +1 -0
  671. package/dist/types/agent.js +171 -0
  672. package/dist/types/agent.js.map +1 -0
  673. package/dist/types/anthropic.d.ts +438 -0
  674. package/dist/types/anthropic.d.ts.map +1 -0
  675. package/dist/types/anthropic.js +9 -0
  676. package/dist/types/anthropic.js.map +1 -0
  677. package/dist/types/approval.d.ts +332 -0
  678. package/dist/types/approval.d.ts.map +1 -0
  679. package/dist/types/approval.js +44 -0
  680. package/dist/types/approval.js.map +1 -0
  681. package/dist/types/autocomplete.d.ts +57 -0
  682. package/dist/types/autocomplete.d.ts.map +1 -0
  683. package/dist/types/autocomplete.js +7 -0
  684. package/dist/types/autocomplete.js.map +1 -0
  685. package/dist/types/chat-archive.d.ts +161 -0
  686. package/dist/types/chat-archive.d.ts.map +1 -0
  687. package/dist/types/chat-archive.js +36 -0
  688. package/dist/types/chat-archive.js.map +1 -0
  689. package/dist/types/config.d.ts +268 -0
  690. package/dist/types/config.d.ts.map +1 -0
  691. package/dist/types/config.js +188 -0
  692. package/dist/types/config.js.map +1 -0
  693. package/dist/types/consent.d.ts +191 -0
  694. package/dist/types/consent.d.ts.map +1 -0
  695. package/dist/types/consent.js +119 -0
  696. package/dist/types/consent.js.map +1 -0
  697. package/dist/types/custom-command.d.ts +139 -0
  698. package/dist/types/custom-command.d.ts.map +1 -0
  699. package/dist/types/custom-command.js +7 -0
  700. package/dist/types/custom-command.js.map +1 -0
  701. package/dist/types/git.d.ts +20 -0
  702. package/dist/types/git.d.ts.map +1 -0
  703. package/dist/types/git.js +2 -0
  704. package/dist/types/git.js.map +1 -0
  705. package/dist/types/hook.d.ts +342 -0
  706. package/dist/types/hook.d.ts.map +1 -0
  707. package/dist/types/hook.js +84 -0
  708. package/dist/types/hook.js.map +1 -0
  709. package/dist/types/index.d.ts +86 -0
  710. package/dist/types/index.d.ts.map +1 -0
  711. package/dist/types/index.js +71 -0
  712. package/dist/types/index.js.map +1 -0
  713. package/dist/types/mcp.d.ts +456 -0
  714. package/dist/types/mcp.d.ts.map +1 -0
  715. package/dist/types/mcp.js +94 -0
  716. package/dist/types/mcp.js.map +1 -0
  717. package/dist/types/rating.d.ts +110 -0
  718. package/dist/types/rating.d.ts.map +1 -0
  719. package/dist/types/rating.js +53 -0
  720. package/dist/types/rating.js.map +1 -0
  721. package/dist/types/schedule.d.ts +91 -0
  722. package/dist/types/schedule.d.ts.map +1 -0
  723. package/dist/types/schedule.js +8 -0
  724. package/dist/types/schedule.js.map +1 -0
  725. package/dist/types/session.d.ts +361 -0
  726. package/dist/types/session.d.ts.map +1 -0
  727. package/dist/types/session.js +9 -0
  728. package/dist/types/session.js.map +1 -0
  729. package/dist/types/skill.d.ts +258 -0
  730. package/dist/types/skill.d.ts.map +1 -0
  731. package/dist/types/skill.js +79 -0
  732. package/dist/types/skill.js.map +1 -0
  733. package/dist/types/statusline.d.ts +212 -0
  734. package/dist/types/statusline.d.ts.map +1 -0
  735. package/dist/types/statusline.js +8 -0
  736. package/dist/types/statusline.js.map +1 -0
  737. package/dist/types/stream.d.ts +61 -0
  738. package/dist/types/stream.d.ts.map +1 -0
  739. package/dist/types/stream.js +17 -0
  740. package/dist/types/stream.js.map +1 -0
  741. package/dist/types/swarm.d.ts +132 -0
  742. package/dist/types/swarm.d.ts.map +1 -0
  743. package/dist/types/swarm.js +21 -0
  744. package/dist/types/swarm.js.map +1 -0
  745. package/dist/types/token-limits.d.ts +107 -0
  746. package/dist/types/token-limits.d.ts.map +1 -0
  747. package/dist/types/token-limits.js +57 -0
  748. package/dist/types/token-limits.js.map +1 -0
  749. package/dist/types/token.d.ts +329 -0
  750. package/dist/types/token.d.ts.map +1 -0
  751. package/dist/types/token.js +9 -0
  752. package/dist/types/token.js.map +1 -0
  753. package/dist/types/update.d.ts +189 -0
  754. package/dist/types/update.d.ts.map +1 -0
  755. package/dist/types/update.js +55 -0
  756. package/dist/types/update.js.map +1 -0
  757. package/dist/types/workflow.d.ts +396 -0
  758. package/dist/types/workflow.d.ts.map +1 -0
  759. package/dist/types/workflow.js +46 -0
  760. package/dist/types/workflow.js.map +1 -0
  761. package/dist/ui/App.d.ts +62 -0
  762. package/dist/ui/App.d.ts.map +1 -0
  763. package/dist/ui/App.js +511 -0
  764. package/dist/ui/App.js.map +1 -0
  765. package/dist/ui/InteractiveSession.d.ts +34 -0
  766. package/dist/ui/InteractiveSession.d.ts.map +1 -0
  767. package/dist/ui/InteractiveSession.js +3611 -0
  768. package/dist/ui/InteractiveSession.js.map +1 -0
  769. package/dist/ui/MCPApprovalPrompt.d.ts +27 -0
  770. package/dist/ui/MCPApprovalPrompt.d.ts.map +1 -0
  771. package/dist/ui/MCPApprovalPrompt.js +51 -0
  772. package/dist/ui/MCPApprovalPrompt.js.map +1 -0
  773. package/dist/ui/SetupWizard.d.ts +26 -0
  774. package/dist/ui/SetupWizard.d.ts.map +1 -0
  775. package/dist/ui/SetupWizard.js +396 -0
  776. package/dist/ui/SetupWizard.js.map +1 -0
  777. package/dist/ui/components/AgentCreationWizard.d.ts +36 -0
  778. package/dist/ui/components/AgentCreationWizard.d.ts.map +1 -0
  779. package/dist/ui/components/AgentCreationWizard.js +619 -0
  780. package/dist/ui/components/AgentCreationWizard.js.map +1 -0
  781. package/dist/ui/components/AgentManager.d.ts +41 -0
  782. package/dist/ui/components/AgentManager.d.ts.map +1 -0
  783. package/dist/ui/components/AgentManager.js +343 -0
  784. package/dist/ui/components/AgentManager.js.map +1 -0
  785. package/dist/ui/components/ApprovalDialog.d.ts +18 -0
  786. package/dist/ui/components/ApprovalDialog.d.ts.map +1 -0
  787. package/dist/ui/components/ApprovalDialog.js +439 -0
  788. package/dist/ui/components/ApprovalDialog.js.map +1 -0
  789. package/dist/ui/components/AsciiArt.d.ts +54 -0
  790. package/dist/ui/components/AsciiArt.d.ts.map +1 -0
  791. package/dist/ui/components/AsciiArt.js +89 -0
  792. package/dist/ui/components/AsciiArt.js.map +1 -0
  793. package/dist/ui/components/ClarificationWizard.d.ts +36 -0
  794. package/dist/ui/components/ClarificationWizard.d.ts.map +1 -0
  795. package/dist/ui/components/ClarificationWizard.js +407 -0
  796. package/dist/ui/components/ClarificationWizard.js.map +1 -0
  797. package/dist/ui/components/CompassSpinner.d.ts +15 -0
  798. package/dist/ui/components/CompassSpinner.d.ts.map +1 -0
  799. package/dist/ui/components/CompassSpinner.js +50 -0
  800. package/dist/ui/components/CompassSpinner.js.map +1 -0
  801. package/dist/ui/components/ConfirmationSelector.d.ts +45 -0
  802. package/dist/ui/components/ConfirmationSelector.d.ts.map +1 -0
  803. package/dist/ui/components/ConfirmationSelector.js +106 -0
  804. package/dist/ui/components/ConfirmationSelector.js.map +1 -0
  805. package/dist/ui/components/ContextUsage.d.ts +76 -0
  806. package/dist/ui/components/ContextUsage.d.ts.map +1 -0
  807. package/dist/ui/components/ContextUsage.js +188 -0
  808. package/dist/ui/components/ContextUsage.js.map +1 -0
  809. package/dist/ui/components/DiffPreview.d.ts +13 -0
  810. package/dist/ui/components/DiffPreview.d.ts.map +1 -0
  811. package/dist/ui/components/DiffPreview.js +30 -0
  812. package/dist/ui/components/DiffPreview.js.map +1 -0
  813. package/dist/ui/components/ExecutionModeSelector.d.ts +45 -0
  814. package/dist/ui/components/ExecutionModeSelector.d.ts.map +1 -0
  815. package/dist/ui/components/ExecutionModeSelector.js +120 -0
  816. package/dist/ui/components/ExecutionModeSelector.js.map +1 -0
  817. package/dist/ui/components/FileTree.d.ts +47 -0
  818. package/dist/ui/components/FileTree.d.ts.map +1 -0
  819. package/dist/ui/components/FileTree.js +258 -0
  820. package/dist/ui/components/FileTree.js.map +1 -0
  821. package/dist/ui/components/HelpMenu.d.ts +49 -0
  822. package/dist/ui/components/HelpMenu.d.ts.map +1 -0
  823. package/dist/ui/components/HelpMenu.js +91 -0
  824. package/dist/ui/components/HelpMenu.js.map +1 -0
  825. package/dist/ui/components/InterleavedStream.d.ts +42 -0
  826. package/dist/ui/components/InterleavedStream.d.ts.map +1 -0
  827. package/dist/ui/components/InterleavedStream.js +1500 -0
  828. package/dist/ui/components/InterleavedStream.js.map +1 -0
  829. package/dist/ui/components/ModelSelector.d.ts +81 -0
  830. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  831. package/dist/ui/components/ModelSelector.js +305 -0
  832. package/dist/ui/components/ModelSelector.js.map +1 -0
  833. package/dist/ui/components/PlanApprovalDialog.d.ts +21 -0
  834. package/dist/ui/components/PlanApprovalDialog.d.ts.map +1 -0
  835. package/dist/ui/components/PlanApprovalDialog.js +189 -0
  836. package/dist/ui/components/PlanApprovalDialog.js.map +1 -0
  837. package/dist/ui/components/PlanExecutionTracker.d.ts +53 -0
  838. package/dist/ui/components/PlanExecutionTracker.d.ts.map +1 -0
  839. package/dist/ui/components/PlanExecutionTracker.js +113 -0
  840. package/dist/ui/components/PlanExecutionTracker.js.map +1 -0
  841. package/dist/ui/components/ProgressIndicator.d.ts +151 -0
  842. package/dist/ui/components/ProgressIndicator.d.ts.map +1 -0
  843. package/dist/ui/components/ProgressIndicator.js +171 -0
  844. package/dist/ui/components/ProgressIndicator.js.map +1 -0
  845. package/dist/ui/components/Prompt.d.ts +47 -0
  846. package/dist/ui/components/Prompt.d.ts.map +1 -0
  847. package/dist/ui/components/Prompt.js +632 -0
  848. package/dist/ui/components/Prompt.js.map +1 -0
  849. package/dist/ui/components/RatingPanel.d.ts +45 -0
  850. package/dist/ui/components/RatingPanel.d.ts.map +1 -0
  851. package/dist/ui/components/RatingPanel.js +119 -0
  852. package/dist/ui/components/RatingPanel.js.map +1 -0
  853. package/dist/ui/components/StatusLine.d.ts +43 -0
  854. package/dist/ui/components/StatusLine.d.ts.map +1 -0
  855. package/dist/ui/components/StatusLine.js +44 -0
  856. package/dist/ui/components/StatusLine.js.map +1 -0
  857. package/dist/ui/components/StreamingResponse.d.ts +45 -0
  858. package/dist/ui/components/StreamingResponse.d.ts.map +1 -0
  859. package/dist/ui/components/StreamingResponse.js +56 -0
  860. package/dist/ui/components/StreamingResponse.js.map +1 -0
  861. package/dist/ui/components/TokenUsage.d.ts +89 -0
  862. package/dist/ui/components/TokenUsage.d.ts.map +1 -0
  863. package/dist/ui/components/TokenUsage.js +99 -0
  864. package/dist/ui/components/TokenUsage.js.map +1 -0
  865. package/dist/ui/components/ToolSummary.d.ts +77 -0
  866. package/dist/ui/components/ToolSummary.d.ts.map +1 -0
  867. package/dist/ui/components/ToolSummary.js +162 -0
  868. package/dist/ui/components/ToolSummary.js.map +1 -0
  869. package/dist/ui/components/UpdateNotification.d.ts +65 -0
  870. package/dist/ui/components/UpdateNotification.d.ts.map +1 -0
  871. package/dist/ui/components/UpdateNotification.js +166 -0
  872. package/dist/ui/components/UpdateNotification.js.map +1 -0
  873. package/dist/ui/diff-renderer.d.ts +18 -0
  874. package/dist/ui/diff-renderer.d.ts.map +1 -0
  875. package/dist/ui/diff-renderer.js +206 -0
  876. package/dist/ui/diff-renderer.js.map +1 -0
  877. package/dist/ui/themes/markdown-theme.d.ts +48 -0
  878. package/dist/ui/themes/markdown-theme.d.ts.map +1 -0
  879. package/dist/ui/themes/markdown-theme.js +79 -0
  880. package/dist/ui/themes/markdown-theme.js.map +1 -0
  881. package/dist/ui/themes/ui-theme.d.ts +301 -0
  882. package/dist/ui/themes/ui-theme.d.ts.map +1 -0
  883. package/dist/ui/themes/ui-theme.js +204 -0
  884. package/dist/ui/themes/ui-theme.js.map +1 -0
  885. package/dist/utils/attachment-handler.d.ts +129 -0
  886. package/dist/utils/attachment-handler.d.ts.map +1 -0
  887. package/dist/utils/attachment-handler.js +280 -0
  888. package/dist/utils/attachment-handler.js.map +1 -0
  889. package/dist/utils/backup-cleanup.d.ts +28 -0
  890. package/dist/utils/backup-cleanup.d.ts.map +1 -0
  891. package/dist/utils/backup-cleanup.js +99 -0
  892. package/dist/utils/backup-cleanup.js.map +1 -0
  893. package/dist/utils/clipboard-handler.d.ts +82 -0
  894. package/dist/utils/clipboard-handler.d.ts.map +1 -0
  895. package/dist/utils/clipboard-handler.js +311 -0
  896. package/dist/utils/clipboard-handler.js.map +1 -0
  897. package/dist/utils/cloud-detection.d.ts +14 -0
  898. package/dist/utils/cloud-detection.d.ts.map +1 -0
  899. package/dist/utils/cloud-detection.js +92 -0
  900. package/dist/utils/cloud-detection.js.map +1 -0
  901. package/dist/utils/command-parser.d.ts +56 -0
  902. package/dist/utils/command-parser.d.ts.map +1 -0
  903. package/dist/utils/command-parser.js +206 -0
  904. package/dist/utils/command-parser.js.map +1 -0
  905. package/dist/utils/console-capture.d.ts +30 -0
  906. package/dist/utils/console-capture.d.ts.map +1 -0
  907. package/dist/utils/console-capture.js +88 -0
  908. package/dist/utils/console-capture.js.map +1 -0
  909. package/dist/utils/cron-parser.d.ts +52 -0
  910. package/dist/utils/cron-parser.d.ts.map +1 -0
  911. package/dist/utils/cron-parser.js +455 -0
  912. package/dist/utils/cron-parser.js.map +1 -0
  913. package/dist/utils/crypto.d.ts +351 -0
  914. package/dist/utils/crypto.d.ts.map +1 -0
  915. package/dist/utils/crypto.js +615 -0
  916. package/dist/utils/crypto.js.map +1 -0
  917. package/dist/utils/diff.d.ts +311 -0
  918. package/dist/utils/diff.d.ts.map +1 -0
  919. package/dist/utils/diff.js +566 -0
  920. package/dist/utils/diff.js.map +1 -0
  921. package/dist/utils/editor.d.ts +12 -0
  922. package/dist/utils/editor.d.ts.map +1 -0
  923. package/dist/utils/editor.js +30 -0
  924. package/dist/utils/editor.js.map +1 -0
  925. package/dist/utils/file-system.d.ts +512 -0
  926. package/dist/utils/file-system.d.ts.map +1 -0
  927. package/dist/utils/file-system.js +798 -0
  928. package/dist/utils/file-system.js.map +1 -0
  929. package/dist/utils/format.d.ts +318 -0
  930. package/dist/utils/format.d.ts.map +1 -0
  931. package/dist/utils/format.js +587 -0
  932. package/dist/utils/format.js.map +1 -0
  933. package/dist/utils/ignore-patterns.d.ts +93 -0
  934. package/dist/utils/ignore-patterns.d.ts.map +1 -0
  935. package/dist/utils/ignore-patterns.js +710 -0
  936. package/dist/utils/ignore-patterns.js.map +1 -0
  937. package/dist/utils/log-cleanup.d.ts +16 -0
  938. package/dist/utils/log-cleanup.d.ts.map +1 -0
  939. package/dist/utils/log-cleanup.js +51 -0
  940. package/dist/utils/log-cleanup.js.map +1 -0
  941. package/dist/utils/logger.d.ts +305 -0
  942. package/dist/utils/logger.d.ts.map +1 -0
  943. package/dist/utils/logger.js +447 -0
  944. package/dist/utils/logger.js.map +1 -0
  945. package/dist/utils/path.d.ts +406 -0
  946. package/dist/utils/path.d.ts.map +1 -0
  947. package/dist/utils/path.js +549 -0
  948. package/dist/utils/path.js.map +1 -0
  949. package/dist/utils/schedule-file.d.ts +63 -0
  950. package/dist/utils/schedule-file.d.ts.map +1 -0
  951. package/dist/utils/schedule-file.js +244 -0
  952. package/dist/utils/schedule-file.js.map +1 -0
  953. package/dist/utils/task-id.d.ts +29 -0
  954. package/dist/utils/task-id.d.ts.map +1 -0
  955. package/dist/utils/task-id.js +53 -0
  956. package/dist/utils/task-id.js.map +1 -0
  957. package/dist/utils/temp-cleanup.d.ts +46 -0
  958. package/dist/utils/temp-cleanup.d.ts.map +1 -0
  959. package/dist/utils/temp-cleanup.js +95 -0
  960. package/dist/utils/temp-cleanup.js.map +1 -0
  961. package/dist/utils/terminal-output.d.ts +34 -0
  962. package/dist/utils/terminal-output.d.ts.map +1 -0
  963. package/dist/utils/terminal-output.js +40 -0
  964. package/dist/utils/terminal-output.js.map +1 -0
  965. package/dist/utils/token-counter.d.ts +224 -0
  966. package/dist/utils/token-counter.d.ts.map +1 -0
  967. package/dist/utils/token-counter.js +332 -0
  968. package/dist/utils/token-counter.js.map +1 -0
  969. package/dist/utils/tool-mapper.d.ts +70 -0
  970. package/dist/utils/tool-mapper.d.ts.map +1 -0
  971. package/dist/utils/tool-mapper.js +234 -0
  972. package/dist/utils/tool-mapper.js.map +1 -0
  973. package/package.json +2 -1
  974. package/scripts/preuninstall.mjs +99 -0
@@ -0,0 +1,1316 @@
1
+ /**
2
+ * MCP Transport Services.
3
+ *
4
+ * This module provides transport layer implementations for connecting to MCP servers
5
+ * using different protocols: HTTP, SSE (Server-Sent Events), and stdio (local processes).
6
+ */
7
+ import { spawn } from 'child_process';
8
+ import { logger } from '../utils/logger.js';
9
+ import { getMCPOAuthService } from './mcp-oauth-service.js';
10
+ import { DEFAULT_MCP_TIMEOUT, isMCPHttpConfig, isMCPSseConfig, isMCPStdioConfig, normalizeServerConfig, } from '../types/mcp.js';
11
+ /**
12
+ * Error thrown when MCP server requires authentication (HTTP 401).
13
+ */
14
+ export class AuthenticationRequiredError extends Error {
15
+ serverName;
16
+ serverUrl;
17
+ constructor(serverName, serverUrl) {
18
+ super(`Authentication required for MCP server '${serverName}'`);
19
+ this.name = 'AuthenticationRequiredError';
20
+ this.serverName = serverName;
21
+ this.serverUrl = serverUrl;
22
+ }
23
+ }
24
+ /**
25
+ * Creates a simple HTTP-based MCP client.
26
+ */
27
+ class SimpleMCPClient {
28
+ url;
29
+ headers;
30
+ connected = false;
31
+ capabilities = {};
32
+ requestTimeout;
33
+ serverName;
34
+ constructor(url, headers = {}, timeout = 30000, serverName = 'unknown') {
35
+ this.url = url;
36
+ this.serverName = serverName;
37
+ this.headers = {
38
+ 'Content-Type': 'application/json',
39
+ 'Accept': 'application/json, text/event-stream',
40
+ ...headers,
41
+ };
42
+ this.requestTimeout = timeout;
43
+ }
44
+ /**
45
+ * Parses a JSON-RPC response from either a plain JSON body or an SSE stream.
46
+ * MCP Streamable HTTP servers may respond with text/event-stream containing
47
+ * SSE-formatted JSON-RPC messages.
48
+ */
49
+ async parseResponse(response) {
50
+ const contentType = response.headers.get('content-type') || '';
51
+ if (contentType.includes('text/event-stream')) {
52
+ const text = await response.text();
53
+ // Parse SSE: find "data:" lines and extract JSON from the last message event
54
+ const lines = text.split('\n');
55
+ let lastData = '';
56
+ for (const line of lines) {
57
+ if (line.startsWith('data:')) {
58
+ const data = line.slice(5).trim();
59
+ if (data) {
60
+ lastData = data;
61
+ }
62
+ }
63
+ }
64
+ if (!lastData) {
65
+ throw new Error('No data found in SSE response');
66
+ }
67
+ return JSON.parse(lastData);
68
+ }
69
+ return (await response.json());
70
+ }
71
+ async connect() {
72
+ // Attempt to connect and get server info
73
+ try {
74
+ const abortController = new AbortController();
75
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
76
+ const response = await fetch(this.url, {
77
+ method: 'POST',
78
+ headers: this.headers,
79
+ body: JSON.stringify({
80
+ jsonrpc: '2.0',
81
+ id: 1,
82
+ method: 'initialize',
83
+ params: {
84
+ protocolVersion: '2024-11-05',
85
+ capabilities: {},
86
+ clientInfo: { name: 'compass-cli', version: '1.0.0' },
87
+ },
88
+ }),
89
+ signal: abortController.signal,
90
+ });
91
+ clearTimeout(timeoutId);
92
+ if (response.ok) {
93
+ const result = await this.parseResponse(response);
94
+ if (result.result?.capabilities) {
95
+ this.capabilities = {
96
+ tools: !!result.result.capabilities.tools,
97
+ resources: !!result.result.capabilities.resources,
98
+ prompts: !!result.result.capabilities.prompts,
99
+ logging: !!result.result.capabilities.logging,
100
+ };
101
+ }
102
+ this.connected = true;
103
+ }
104
+ else if (response.status === 401) {
105
+ // Authentication required - log response details for debugging
106
+ const responseText = await response.text().catch(() => '');
107
+ const wwwAuth = response.headers.get('WWW-Authenticate') || '';
108
+ logger.debug(`401 response from ${this.serverName}: body=${responseText.slice(0, 200)}, WWW-Authenticate=${wwwAuth}`);
109
+ throw new AuthenticationRequiredError(this.serverName, this.url);
110
+ }
111
+ else {
112
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
113
+ }
114
+ }
115
+ catch (error) {
116
+ // Rethrow AuthenticationRequiredError as-is for OAuth flow handling
117
+ if (error instanceof AuthenticationRequiredError) {
118
+ throw error;
119
+ }
120
+ if (error.name === 'AbortError') {
121
+ throw new Error('Connection timeout');
122
+ }
123
+ const msg = error instanceof Error ? error.message : String(error);
124
+ throw new Error(`Failed to connect: ${msg}`);
125
+ }
126
+ }
127
+ async close() {
128
+ this.connected = false;
129
+ }
130
+ async listTools() {
131
+ if (!this.connected) {
132
+ return { tools: [] };
133
+ }
134
+ try {
135
+ const abortController = new AbortController();
136
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
137
+ const response = await fetch(this.url, {
138
+ method: 'POST',
139
+ headers: this.headers,
140
+ body: JSON.stringify({
141
+ jsonrpc: '2.0',
142
+ id: 2,
143
+ method: 'tools/list',
144
+ params: {},
145
+ }),
146
+ signal: abortController.signal,
147
+ });
148
+ clearTimeout(timeoutId);
149
+ if (response.ok) {
150
+ const result = await this.parseResponse(response);
151
+ return { tools: result.result?.tools || [] };
152
+ }
153
+ }
154
+ catch (error) {
155
+ logger.warn('Failed to list tools:', error);
156
+ }
157
+ return { tools: [] };
158
+ }
159
+ async listResources() {
160
+ if (!this.connected) {
161
+ return { resources: [] };
162
+ }
163
+ try {
164
+ const abortController = new AbortController();
165
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
166
+ const response = await fetch(this.url, {
167
+ method: 'POST',
168
+ headers: this.headers,
169
+ body: JSON.stringify({
170
+ jsonrpc: '2.0',
171
+ id: 3,
172
+ method: 'resources/list',
173
+ params: {},
174
+ }),
175
+ signal: abortController.signal,
176
+ });
177
+ clearTimeout(timeoutId);
178
+ if (response.ok) {
179
+ const result = await this.parseResponse(response);
180
+ return { resources: result.result?.resources || [] };
181
+ }
182
+ }
183
+ catch (error) {
184
+ logger.warn('Failed to list resources:', error);
185
+ }
186
+ return { resources: [] };
187
+ }
188
+ async listPrompts() {
189
+ if (!this.connected) {
190
+ return { prompts: [] };
191
+ }
192
+ try {
193
+ const abortController = new AbortController();
194
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
195
+ const response = await fetch(this.url, {
196
+ method: 'POST',
197
+ headers: this.headers,
198
+ body: JSON.stringify({
199
+ jsonrpc: '2.0',
200
+ id: 4,
201
+ method: 'prompts/list',
202
+ params: {},
203
+ }),
204
+ signal: abortController.signal,
205
+ });
206
+ clearTimeout(timeoutId);
207
+ if (response.ok) {
208
+ const result = await this.parseResponse(response);
209
+ return { prompts: result.result?.prompts || [] };
210
+ }
211
+ }
212
+ catch (error) {
213
+ logger.warn('Failed to list prompts:', error);
214
+ }
215
+ return { prompts: [] };
216
+ }
217
+ async callTool(params) {
218
+ if (!this.connected) {
219
+ return { success: false, error: 'Not connected' };
220
+ }
221
+ try {
222
+ const abortController = new AbortController();
223
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
224
+ const response = await fetch(this.url, {
225
+ method: 'POST',
226
+ headers: this.headers,
227
+ body: JSON.stringify({
228
+ jsonrpc: '2.0',
229
+ id: 5,
230
+ method: 'tools/call',
231
+ params: {
232
+ name: params.name,
233
+ arguments: params.arguments,
234
+ },
235
+ }),
236
+ signal: abortController.signal,
237
+ });
238
+ clearTimeout(timeoutId);
239
+ if (response.ok) {
240
+ const result = await this.parseResponse(response);
241
+ if (result.error) {
242
+ return { success: false, error: result.error.message };
243
+ }
244
+ return {
245
+ success: true,
246
+ content: result.result?.content || [],
247
+ isError: result.result?.isError,
248
+ };
249
+ }
250
+ return { success: false, error: `HTTP ${response.status}` };
251
+ }
252
+ catch (error) {
253
+ const msg = error instanceof Error ? error.message : String(error);
254
+ return { success: false, error: msg };
255
+ }
256
+ }
257
+ async readResource(params) {
258
+ if (!this.connected) {
259
+ return { contents: [] };
260
+ }
261
+ try {
262
+ const abortController = new AbortController();
263
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
264
+ const response = await fetch(this.url, {
265
+ method: 'POST',
266
+ headers: this.headers,
267
+ body: JSON.stringify({
268
+ jsonrpc: '2.0',
269
+ id: 6,
270
+ method: 'resources/read',
271
+ params: { uri: params.uri },
272
+ }),
273
+ signal: abortController.signal,
274
+ });
275
+ clearTimeout(timeoutId);
276
+ if (response.ok) {
277
+ const result = await this.parseResponse(response);
278
+ return { contents: result.result?.contents || [] };
279
+ }
280
+ }
281
+ catch (error) {
282
+ logger.warn('Failed to read resource:', error);
283
+ }
284
+ return { contents: [] };
285
+ }
286
+ async getPrompt(params) {
287
+ if (!this.connected) {
288
+ return { messages: [] };
289
+ }
290
+ try {
291
+ const abortController = new AbortController();
292
+ const timeoutId = setTimeout(() => abortController.abort(), this.requestTimeout);
293
+ const response = await fetch(this.url, {
294
+ method: 'POST',
295
+ headers: this.headers,
296
+ body: JSON.stringify({
297
+ jsonrpc: '2.0',
298
+ id: 7,
299
+ method: 'prompts/get',
300
+ params,
301
+ }),
302
+ signal: abortController.signal,
303
+ });
304
+ clearTimeout(timeoutId);
305
+ if (response.ok) {
306
+ const result = await this.parseResponse(response);
307
+ const messages = (result.result?.messages || []).map((msg) => ({
308
+ role: msg.role,
309
+ content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
310
+ }));
311
+ return { messages };
312
+ }
313
+ }
314
+ catch (error) {
315
+ logger.warn('Failed to get prompt:', error);
316
+ }
317
+ return { messages: [] };
318
+ }
319
+ getServerCapabilities() {
320
+ return this.connected ? this.capabilities : null;
321
+ }
322
+ }
323
+ /**
324
+ * Creates an MCP client that communicates via SSE (Server-Sent Events).
325
+ * Uses GET to establish SSE stream, POST to send messages to server-provided endpoint.
326
+ *
327
+ * Per MCP spec: https://modelcontextprotocol.io/docs/concepts/transports#server-sent-events-sse
328
+ * 1. Client opens GET request to SSE endpoint
329
+ * 2. Server sends 'endpoint' event with URL for posting messages
330
+ * 3. Client sends JSON-RPC via POST to that endpoint
331
+ * 4. Server sends responses back via SSE stream
332
+ */
333
+ class SseMCPClient {
334
+ sseUrl;
335
+ headers;
336
+ connected = false;
337
+ capabilities = {};
338
+ messageEndpoint = null;
339
+ requestId = 0;
340
+ pendingRequests = new Map();
341
+ abortController = null;
342
+ connectionTimeout;
343
+ constructor(url, headers = {}, timeout = 30000) {
344
+ this.sseUrl = url;
345
+ this.headers = headers;
346
+ this.connectionTimeout = timeout;
347
+ }
348
+ async connect() {
349
+ return new Promise((resolve, reject) => {
350
+ const timeoutId = setTimeout(() => {
351
+ this.abortController?.abort();
352
+ reject(new Error('SSE connection timeout'));
353
+ }, this.connectionTimeout);
354
+ this.establishSseConnection()
355
+ .then(async () => {
356
+ clearTimeout(timeoutId);
357
+ // Wait for endpoint to be received (with timeout)
358
+ const endpointTimeout = setTimeout(() => {
359
+ reject(new Error('Timeout waiting for endpoint event from SSE server'));
360
+ }, 10000);
361
+ // Poll for endpoint (it should arrive via SSE event)
362
+ const checkEndpoint = async () => {
363
+ if (this.messageEndpoint) {
364
+ clearTimeout(endpointTimeout);
365
+ // Now send initialize request
366
+ try {
367
+ const result = await this.sendRequest('initialize', {
368
+ protocolVersion: '2024-11-05',
369
+ capabilities: {},
370
+ clientInfo: { name: 'compass-cli', version: '1.0.0' },
371
+ });
372
+ if (result.result?.capabilities) {
373
+ this.capabilities = {
374
+ tools: !!result.result.capabilities.tools,
375
+ resources: !!result.result.capabilities.resources,
376
+ prompts: !!result.result.capabilities.prompts,
377
+ logging: !!result.result.capabilities.logging,
378
+ };
379
+ }
380
+ // Send initialized notification
381
+ await this.sendNotification('notifications/initialized', {});
382
+ this.connected = true;
383
+ resolve();
384
+ }
385
+ catch (initError) {
386
+ reject(initError);
387
+ }
388
+ }
389
+ else {
390
+ setTimeout(checkEndpoint, 100);
391
+ }
392
+ };
393
+ checkEndpoint();
394
+ })
395
+ .catch((err) => {
396
+ clearTimeout(timeoutId);
397
+ reject(err);
398
+ });
399
+ });
400
+ }
401
+ async establishSseConnection() {
402
+ this.abortController = new AbortController();
403
+ try {
404
+ const response = await fetch(this.sseUrl, {
405
+ method: 'GET',
406
+ headers: {
407
+ 'Accept': 'text/event-stream',
408
+ 'Cache-Control': 'no-cache',
409
+ ...this.headers,
410
+ },
411
+ signal: this.abortController.signal,
412
+ });
413
+ if (!response.ok) {
414
+ throw new Error(`SSE connection failed: HTTP ${response.status} ${response.statusText}`);
415
+ }
416
+ if (!response.body) {
417
+ throw new Error('SSE response has no body');
418
+ }
419
+ // Start reading the SSE stream in the background
420
+ this.readSseStream(response.body);
421
+ }
422
+ catch (error) {
423
+ if (error.name === 'AbortError') {
424
+ throw new Error('SSE connection aborted');
425
+ }
426
+ throw error;
427
+ }
428
+ }
429
+ async readSseStream(body) {
430
+ const reader = body.getReader();
431
+ const decoder = new TextDecoder();
432
+ let buffer = '';
433
+ let currentEvent = '';
434
+ let currentData = '';
435
+ try {
436
+ // eslint-disable-next-line no-constant-condition
437
+ while (true) {
438
+ const { done, value } = await reader.read();
439
+ if (done) {
440
+ logger.debug('SSE stream ended');
441
+ this.connected = false;
442
+ break;
443
+ }
444
+ buffer += decoder.decode(value, { stream: true });
445
+ const lines = buffer.split(/\r?\n/); // Handle both \n and \r\n line endings
446
+ buffer = lines.pop() || ''; // Keep incomplete line in buffer
447
+ for (const line of lines) {
448
+ const trimmedLine = line.trim(); // Trim to handle any extra whitespace
449
+ if (trimmedLine.startsWith('event:')) {
450
+ currentEvent = trimmedLine.slice(6).trim();
451
+ }
452
+ else if (trimmedLine.startsWith('data:')) {
453
+ currentData += trimmedLine.slice(5).trim();
454
+ }
455
+ else if (trimmedLine === '') {
456
+ // Empty line = end of event
457
+ if (currentEvent || currentData) {
458
+ this.handleSseEvent(currentEvent, currentData);
459
+ currentEvent = '';
460
+ currentData = '';
461
+ }
462
+ }
463
+ }
464
+ }
465
+ }
466
+ catch (error) {
467
+ if (error.name !== 'AbortError') {
468
+ logger.error('SSE stream error:', error);
469
+ }
470
+ this.connected = false;
471
+ // Reject all pending requests
472
+ for (const [id, pending] of this.pendingRequests) {
473
+ pending.reject(new Error('SSE connection closed'));
474
+ this.pendingRequests.delete(id);
475
+ }
476
+ }
477
+ }
478
+ handleSseEvent(event, data) {
479
+ logger.debug(`SSE event received: ${event || 'message'}, data: ${data.substring(0, 100)}...`);
480
+ if (event === 'endpoint') {
481
+ // Server is telling us where to POST messages
482
+ // The data might be a relative or absolute URL
483
+ try {
484
+ // Check if it's an absolute URL
485
+ if (data.startsWith('http://') || data.startsWith('https://')) {
486
+ this.messageEndpoint = data;
487
+ }
488
+ else {
489
+ // It's relative, resolve against the SSE URL
490
+ const baseUrl = new URL(this.sseUrl);
491
+ this.messageEndpoint = new URL(data, baseUrl).toString();
492
+ }
493
+ logger.debug(`SSE message endpoint set to: ${this.messageEndpoint}`);
494
+ }
495
+ catch (urlError) {
496
+ logger.error('Failed to parse endpoint URL:', urlError);
497
+ }
498
+ }
499
+ else if (event === 'message' || event === '') {
500
+ // JSON-RPC response from server
501
+ if (data) {
502
+ try {
503
+ const response = JSON.parse(data);
504
+ this.handleJsonRpcResponse(response);
505
+ }
506
+ catch (parseError) {
507
+ logger.debug(`Failed to parse SSE message data: ${data}`);
508
+ }
509
+ }
510
+ }
511
+ }
512
+ handleJsonRpcResponse(response) {
513
+ if (response.id !== undefined && response.id !== null) {
514
+ const pending = this.pendingRequests.get(response.id);
515
+ if (pending) {
516
+ this.pendingRequests.delete(response.id);
517
+ pending.resolve(response);
518
+ }
519
+ }
520
+ // Notifications (no id) are logged but not handled for now
521
+ }
522
+ async sendRequest(method, params) {
523
+ if (!this.messageEndpoint) {
524
+ throw new Error('Message endpoint not available - SSE connection may not be established');
525
+ }
526
+ const id = ++this.requestId;
527
+ const request = {
528
+ jsonrpc: '2.0',
529
+ id,
530
+ method,
531
+ params,
532
+ };
533
+ return new Promise((resolve, reject) => {
534
+ this.pendingRequests.set(id, { resolve, reject });
535
+ // Set timeout for request
536
+ const timeoutId = setTimeout(() => {
537
+ if (this.pendingRequests.has(id)) {
538
+ this.pendingRequests.delete(id);
539
+ reject(new Error(`Request timeout: ${method}`));
540
+ }
541
+ }, this.connectionTimeout);
542
+ // Send via POST to message endpoint
543
+ fetch(this.messageEndpoint, {
544
+ method: 'POST',
545
+ headers: {
546
+ 'Content-Type': 'application/json',
547
+ ...this.headers,
548
+ },
549
+ body: JSON.stringify(request),
550
+ })
551
+ .then((response) => {
552
+ if (!response.ok) {
553
+ clearTimeout(timeoutId);
554
+ this.pendingRequests.delete(id);
555
+ reject(new Error(`HTTP ${response.status}: ${response.statusText}`));
556
+ }
557
+ // Response will come via SSE stream, not HTTP response body
558
+ // Some servers may return 202 Accepted or similar
559
+ })
560
+ .catch((error) => {
561
+ clearTimeout(timeoutId);
562
+ this.pendingRequests.delete(id);
563
+ reject(error);
564
+ });
565
+ });
566
+ }
567
+ async sendNotification(method, params) {
568
+ if (!this.messageEndpoint) {
569
+ return;
570
+ }
571
+ const notification = {
572
+ jsonrpc: '2.0',
573
+ method,
574
+ params,
575
+ };
576
+ try {
577
+ await fetch(this.messageEndpoint, {
578
+ method: 'POST',
579
+ headers: {
580
+ 'Content-Type': 'application/json',
581
+ ...this.headers,
582
+ },
583
+ body: JSON.stringify(notification),
584
+ });
585
+ }
586
+ catch (error) {
587
+ logger.debug('Failed to send notification:', error);
588
+ }
589
+ }
590
+ async close() {
591
+ this.connected = false;
592
+ this.abortController?.abort();
593
+ this.abortController = null;
594
+ this.messageEndpoint = null;
595
+ // Clear pending requests
596
+ for (const [id, pending] of this.pendingRequests) {
597
+ pending.reject(new Error('Client closed'));
598
+ this.pendingRequests.delete(id);
599
+ }
600
+ }
601
+ async listTools() {
602
+ if (!this.connected) {
603
+ return { tools: [] };
604
+ }
605
+ try {
606
+ const result = await this.sendRequest('tools/list', {});
607
+ return { tools: result.result?.tools || [] };
608
+ }
609
+ catch (error) {
610
+ logger.warn('Failed to list tools:', error);
611
+ return { tools: [] };
612
+ }
613
+ }
614
+ async listResources() {
615
+ if (!this.connected) {
616
+ return { resources: [] };
617
+ }
618
+ try {
619
+ const result = await this.sendRequest('resources/list', {});
620
+ return { resources: result.result?.resources || [] };
621
+ }
622
+ catch (error) {
623
+ logger.warn('Failed to list resources:', error);
624
+ return { resources: [] };
625
+ }
626
+ }
627
+ async listPrompts() {
628
+ if (!this.connected) {
629
+ return { prompts: [] };
630
+ }
631
+ try {
632
+ const result = await this.sendRequest('prompts/list', {});
633
+ return { prompts: result.result?.prompts || [] };
634
+ }
635
+ catch (error) {
636
+ logger.warn('Failed to list prompts:', error);
637
+ return { prompts: [] };
638
+ }
639
+ }
640
+ async callTool(params) {
641
+ if (!this.connected) {
642
+ return { success: false, error: 'Not connected' };
643
+ }
644
+ try {
645
+ const result = await this.sendRequest('tools/call', {
646
+ name: params.name,
647
+ arguments: params.arguments,
648
+ });
649
+ if (result.error) {
650
+ return { success: false, error: result.error.message };
651
+ }
652
+ return {
653
+ success: true,
654
+ content: result.result?.content || [],
655
+ isError: result.result?.isError,
656
+ };
657
+ }
658
+ catch (error) {
659
+ const msg = error instanceof Error ? error.message : String(error);
660
+ return { success: false, error: msg };
661
+ }
662
+ }
663
+ async readResource(params) {
664
+ if (!this.connected) {
665
+ return { contents: [] };
666
+ }
667
+ try {
668
+ const result = await this.sendRequest('resources/read', { uri: params.uri });
669
+ return { contents: result.result?.contents || [] };
670
+ }
671
+ catch (error) {
672
+ logger.warn('Failed to read resource:', error);
673
+ return { contents: [] };
674
+ }
675
+ }
676
+ async getPrompt(params) {
677
+ if (!this.connected) {
678
+ return { messages: [] };
679
+ }
680
+ try {
681
+ const result = await this.sendRequest('prompts/get', params);
682
+ const messages = (result.result?.messages || []).map((msg) => ({
683
+ role: msg.role,
684
+ content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
685
+ }));
686
+ return { messages };
687
+ }
688
+ catch (error) {
689
+ logger.warn('Failed to get prompt:', error);
690
+ return { messages: [] };
691
+ }
692
+ }
693
+ getServerCapabilities() {
694
+ return this.connected ? this.capabilities : null;
695
+ }
696
+ }
697
+ /**
698
+ * Creates an MCP client that communicates via stdio (stdin/stdout).
699
+ * Spawns a child process and uses JSON-RPC 2.0 over newline-delimited JSON.
700
+ */
701
+ class StdioMCPClient {
702
+ command;
703
+ args;
704
+ cwd;
705
+ env;
706
+ requestTimeout;
707
+ process = null;
708
+ connected = false;
709
+ capabilities = {};
710
+ requestId = 0;
711
+ pendingRequests = new Map();
712
+ buffer = '';
713
+ /** Captures the last critical error from stderr for better error reporting */
714
+ lastStderrError = null;
715
+ constructor(command, args = [], cwd, env, requestTimeout = 30000) {
716
+ this.command = command;
717
+ this.args = args;
718
+ this.cwd = cwd;
719
+ this.env = env;
720
+ this.requestTimeout = requestTimeout;
721
+ }
722
+ async connect() {
723
+ return new Promise((resolve, reject) => {
724
+ // Track whether we've already settled the promise
725
+ let settled = false;
726
+ const safeReject = (error) => {
727
+ if (!settled) {
728
+ settled = true;
729
+ reject(error);
730
+ }
731
+ };
732
+ const safeResolve = () => {
733
+ if (!settled) {
734
+ settled = true;
735
+ resolve();
736
+ }
737
+ };
738
+ try {
739
+ // Merge environment variables
740
+ const processEnv = {
741
+ ...process.env,
742
+ ...this.env,
743
+ };
744
+ logger.debug(`Spawning stdio MCP server: ${this.command} ${this.args.join(' ')}`);
745
+ this.process = spawn(this.command, this.args, {
746
+ cwd: this.cwd || process.cwd(),
747
+ env: processEnv,
748
+ stdio: ['pipe', 'pipe', 'pipe'],
749
+ shell: true,
750
+ });
751
+ if (!this.process.stdout || !this.process.stdin) {
752
+ safeReject(new Error('Failed to create stdio streams'));
753
+ return;
754
+ }
755
+ // Handle stdout (responses from server)
756
+ this.process.stdout.on('data', (data) => {
757
+ this.handleStdoutData(data);
758
+ });
759
+ // Handle stderr (logging from server)
760
+ this.process.stderr?.on('data', (data) => {
761
+ const message = data.toString().trim();
762
+ if (message) {
763
+ // All MCP server stderr goes to debug level
764
+ logger.debug(`[MCP Server stderr]: ${message}`);
765
+ // Capture critical errors for better error reporting
766
+ if (message.includes('EADDRINUSE')) {
767
+ // Extract port number from error message if present
768
+ const portMatch = message.match(/port[:\s]*(\d+)|:(\d+)/i);
769
+ const port = portMatch?.[1] || portMatch?.[2] || 'unknown';
770
+ this.lastStderrError = `Port ${port} is already in use. A previous MCP server process may still be running. ` +
771
+ `Try killing the process using this port or wait for it to terminate.`;
772
+ }
773
+ else if (message.includes('ECONNREFUSED')) {
774
+ this.lastStderrError = 'Connection refused. The target server may not be running.';
775
+ }
776
+ else if (message.includes('ETIMEDOUT') || message.includes('timeout')) {
777
+ this.lastStderrError = 'Connection timed out while trying to reach the server.';
778
+ }
779
+ else if (message.includes('ENOTFOUND')) {
780
+ this.lastStderrError = 'Server hostname not found. Please check the URL.';
781
+ }
782
+ else if (message.includes('Error:') && !this.lastStderrError) {
783
+ // Capture generic errors if no specific error captured yet
784
+ const errorMatch = message.match(/Error:\s*(.+?)(?:\n|$)/);
785
+ if (errorMatch) {
786
+ this.lastStderrError = errorMatch[1].trim();
787
+ }
788
+ }
789
+ }
790
+ });
791
+ // Handle process exit
792
+ this.process.on('exit', (code, signal) => {
793
+ logger.debug(`MCP server process exited with code ${code}, signal ${signal}`);
794
+ this.connected = false;
795
+ this.process = null;
796
+ // Build error message - prefer captured stderr error over generic exit code
797
+ let errorMessage;
798
+ if (this.lastStderrError) {
799
+ errorMessage = this.lastStderrError;
800
+ // Log the detailed error at error level for visibility
801
+ logger.error(`MCP server failed: ${errorMessage}`);
802
+ }
803
+ else if (code !== 0) {
804
+ errorMessage = `Process exited with code ${code}`;
805
+ }
806
+ else if (signal) {
807
+ errorMessage = `Process terminated by signal ${signal}`;
808
+ }
809
+ else {
810
+ errorMessage = 'Process exited unexpectedly';
811
+ }
812
+ // Reject all pending requests with the detailed error
813
+ for (const [id, pending] of this.pendingRequests) {
814
+ pending.reject(new Error(errorMessage));
815
+ this.pendingRequests.delete(id);
816
+ }
817
+ // Also reject the connect promise if it hasn't been resolved yet
818
+ // This handles the case where the process exits before initialization completes
819
+ safeReject(new Error(errorMessage));
820
+ });
821
+ this.process.on('error', (error) => {
822
+ logger.error('MCP server process error:', error);
823
+ this.connected = false;
824
+ safeReject(error);
825
+ });
826
+ // Give the process a moment to start, then send initialize
827
+ setTimeout(async () => {
828
+ // Check if process is still running before trying to initialize
829
+ if (!this.process || settled) {
830
+ return; // Process already exited or promise already settled
831
+ }
832
+ try {
833
+ const result = await this.sendRequest('initialize', {
834
+ protocolVersion: '2024-11-05',
835
+ capabilities: {},
836
+ clientInfo: { name: 'compass-cli', version: '1.0.0' },
837
+ });
838
+ if (result.result?.capabilities) {
839
+ this.capabilities = {
840
+ tools: !!result.result.capabilities.tools,
841
+ resources: !!result.result.capabilities.resources,
842
+ prompts: !!result.result.capabilities.prompts,
843
+ logging: !!result.result.capabilities.logging,
844
+ };
845
+ }
846
+ // Send initialized notification
847
+ this.sendNotification('notifications/initialized', {});
848
+ this.connected = true;
849
+ logger.debug(`Stdio MCP server connected: ${this.command}`);
850
+ safeResolve();
851
+ }
852
+ catch (initError) {
853
+ safeReject(initError instanceof Error ? initError : new Error(String(initError)));
854
+ }
855
+ }, 100);
856
+ }
857
+ catch (error) {
858
+ safeReject(error instanceof Error ? error : new Error(String(error)));
859
+ }
860
+ });
861
+ }
862
+ handleStdoutData(data) {
863
+ this.buffer += data.toString();
864
+ // Process complete lines (newline-delimited JSON)
865
+ let newlineIndex;
866
+ while ((newlineIndex = this.buffer.indexOf('\n')) !== -1) {
867
+ const line = this.buffer.substring(0, newlineIndex).trim();
868
+ this.buffer = this.buffer.substring(newlineIndex + 1);
869
+ if (line) {
870
+ try {
871
+ const response = JSON.parse(line);
872
+ this.handleResponse(response);
873
+ }
874
+ catch (parseError) {
875
+ logger.debug(`Failed to parse MCP response: ${line}`);
876
+ }
877
+ }
878
+ }
879
+ }
880
+ handleResponse(response) {
881
+ if (response.id !== undefined && response.id !== null) {
882
+ const pending = this.pendingRequests.get(response.id);
883
+ if (pending) {
884
+ this.pendingRequests.delete(response.id);
885
+ pending.resolve(response);
886
+ }
887
+ }
888
+ // Notifications (no id) are logged but not handled
889
+ }
890
+ sendRequest(method, params) {
891
+ return new Promise((resolve, reject) => {
892
+ if (!this.process?.stdin) {
893
+ reject(new Error('Process not running'));
894
+ return;
895
+ }
896
+ const id = ++this.requestId;
897
+ const request = {
898
+ jsonrpc: '2.0',
899
+ id,
900
+ method,
901
+ params,
902
+ };
903
+ this.pendingRequests.set(id, { resolve, reject });
904
+ const requestStr = JSON.stringify(request) + '\n';
905
+ this.process.stdin.write(requestStr, (error) => {
906
+ if (error) {
907
+ this.pendingRequests.delete(id);
908
+ reject(error);
909
+ }
910
+ });
911
+ // Timeout after configured duration (default 30 seconds, extended for npx)
912
+ setTimeout(() => {
913
+ if (this.pendingRequests.has(id)) {
914
+ this.pendingRequests.delete(id);
915
+ reject(new Error(`Request timeout: ${method}`));
916
+ }
917
+ }, this.requestTimeout);
918
+ });
919
+ }
920
+ sendNotification(method, params) {
921
+ if (!this.process?.stdin) {
922
+ return;
923
+ }
924
+ const notification = {
925
+ jsonrpc: '2.0',
926
+ method,
927
+ params,
928
+ };
929
+ const notificationStr = JSON.stringify(notification) + '\n';
930
+ this.process.stdin.write(notificationStr);
931
+ }
932
+ async close() {
933
+ this.connected = false;
934
+ if (this.process) {
935
+ // Send shutdown request
936
+ try {
937
+ this.sendNotification('notifications/cancelled', { reason: 'Client closing' });
938
+ }
939
+ catch {
940
+ // Ignore errors during shutdown
941
+ }
942
+ // Kill the process
943
+ this.process.kill('SIGTERM');
944
+ // Force kill after 2 seconds if still running
945
+ setTimeout(() => {
946
+ if (this.process && !this.process.killed) {
947
+ this.process.kill('SIGKILL');
948
+ }
949
+ }, 2000);
950
+ this.process = null;
951
+ }
952
+ // Clear pending requests
953
+ for (const [id, pending] of this.pendingRequests) {
954
+ pending.reject(new Error('Client closed'));
955
+ this.pendingRequests.delete(id);
956
+ }
957
+ }
958
+ async listTools() {
959
+ if (!this.connected) {
960
+ return { tools: [] };
961
+ }
962
+ try {
963
+ const result = await this.sendRequest('tools/list', {});
964
+ return { tools: result.result?.tools || [] };
965
+ }
966
+ catch (error) {
967
+ logger.warn('Failed to list tools:', error);
968
+ return { tools: [] };
969
+ }
970
+ }
971
+ async listResources() {
972
+ if (!this.connected) {
973
+ return { resources: [] };
974
+ }
975
+ try {
976
+ const result = await this.sendRequest('resources/list', {});
977
+ return { resources: result.result?.resources || [] };
978
+ }
979
+ catch (error) {
980
+ logger.warn('Failed to list resources:', error);
981
+ return { resources: [] };
982
+ }
983
+ }
984
+ async listPrompts() {
985
+ if (!this.connected) {
986
+ return { prompts: [] };
987
+ }
988
+ try {
989
+ const result = await this.sendRequest('prompts/list', {});
990
+ return { prompts: result.result?.prompts || [] };
991
+ }
992
+ catch (error) {
993
+ logger.warn('Failed to list prompts:', error);
994
+ return { prompts: [] };
995
+ }
996
+ }
997
+ async callTool(params) {
998
+ if (!this.connected) {
999
+ return { success: false, error: 'Not connected' };
1000
+ }
1001
+ try {
1002
+ const result = await this.sendRequest('tools/call', {
1003
+ name: params.name,
1004
+ arguments: params.arguments,
1005
+ });
1006
+ if (result.error) {
1007
+ return { success: false, error: result.error.message };
1008
+ }
1009
+ return {
1010
+ success: true,
1011
+ content: result.result?.content || [],
1012
+ isError: result.result?.isError,
1013
+ };
1014
+ }
1015
+ catch (error) {
1016
+ const msg = error instanceof Error ? error.message : String(error);
1017
+ return { success: false, error: msg };
1018
+ }
1019
+ }
1020
+ async readResource(params) {
1021
+ if (!this.connected) {
1022
+ return { contents: [] };
1023
+ }
1024
+ try {
1025
+ const result = await this.sendRequest('resources/read', { uri: params.uri });
1026
+ return { contents: result.result?.contents || [] };
1027
+ }
1028
+ catch (error) {
1029
+ logger.warn('Failed to read resource:', error);
1030
+ return { contents: [] };
1031
+ }
1032
+ }
1033
+ async getPrompt(params) {
1034
+ if (!this.connected) {
1035
+ return { messages: [] };
1036
+ }
1037
+ try {
1038
+ const result = await this.sendRequest('prompts/get', params);
1039
+ const messages = (result.result?.messages || []).map((msg) => ({
1040
+ role: msg.role,
1041
+ content: typeof msg.content === 'string' ? msg.content : msg.content.text || '',
1042
+ }));
1043
+ return { messages };
1044
+ }
1045
+ catch (error) {
1046
+ logger.warn('Failed to get prompt:', error);
1047
+ return { messages: [] };
1048
+ }
1049
+ }
1050
+ getServerCapabilities() {
1051
+ return this.connected ? this.capabilities : null;
1052
+ }
1053
+ isConnected() {
1054
+ return this.connected && this.process !== null;
1055
+ }
1056
+ }
1057
+ /**
1058
+ * Creates and connects to an MCP server using the appropriate transport.
1059
+ */
1060
+ export async function createTransportConnection(config, timeout) {
1061
+ // Priority: function parameter > config.timeout > environment variable > default
1062
+ const configTimeout = config.timeout;
1063
+ const connectionTimeout = timeout || configTimeout || parseInt(process.env.MCP_TIMEOUT || '') || DEFAULT_MCP_TIMEOUT;
1064
+ // Normalize config to infer missing type field
1065
+ const normalizedConfig = normalizeServerConfig(config);
1066
+ // Log if type was inferred
1067
+ if (!config.type && normalizedConfig.type) {
1068
+ logger.debug(`Inferred transport type '${normalizedConfig.type}' for server '${normalizedConfig.name}' (missing 'type' field in config)`);
1069
+ }
1070
+ if (isMCPHttpConfig(normalizedConfig)) {
1071
+ return createHttpConnection(normalizedConfig, connectionTimeout);
1072
+ }
1073
+ if (isMCPSseConfig(normalizedConfig)) {
1074
+ return createSseConnection(normalizedConfig, connectionTimeout);
1075
+ }
1076
+ if (isMCPStdioConfig(normalizedConfig)) {
1077
+ return createStdioConnection(normalizedConfig, connectionTimeout);
1078
+ }
1079
+ const serverName = normalizedConfig?.name || 'unknown';
1080
+ throw new Error(`Unknown transport type for server: ${serverName}. ` +
1081
+ `Config must have 'type' field set to 'http', 'sse', or 'stdio', ` +
1082
+ `or have 'url' (for sse) or 'command' (for stdio) fields to infer the type.`);
1083
+ }
1084
+ /**
1085
+ * Creates an HTTP transport connection.
1086
+ */
1087
+ async function createHttpConnection(config, timeout) {
1088
+ logger.debug(`Creating HTTP connection to ${config.name} at ${config.url}`);
1089
+ // Check for existing OAuth tokens and inject Authorization header
1090
+ const oauthService = await getMCPOAuthService();
1091
+ const authHeader = oauthService.getAuthHeader(config.name);
1092
+ const headers = {
1093
+ ...config.headers,
1094
+ ...(authHeader ? { 'Authorization': authHeader } : {}),
1095
+ };
1096
+ logger.debug(`HTTP connection headers for ${config.name}: Authorization=${authHeader ? 'Bearer ***' + authHeader.slice(-8) : 'none'}`);
1097
+ const client = new SimpleMCPClient(config.url, headers, timeout, config.name);
1098
+ let status = 'connecting';
1099
+ let error;
1100
+ try {
1101
+ await client.connect();
1102
+ status = 'connected';
1103
+ logger.info(`Connected to HTTP MCP server: ${config.name}`);
1104
+ return {
1105
+ client,
1106
+ close: async () => {
1107
+ await client.close();
1108
+ },
1109
+ status,
1110
+ };
1111
+ }
1112
+ catch (err) {
1113
+ // Rethrow AuthenticationRequiredError for server manager to handle OAuth flow
1114
+ if (err instanceof AuthenticationRequiredError) {
1115
+ throw err;
1116
+ }
1117
+ error = err instanceof Error ? err.message : String(err);
1118
+ status = 'error';
1119
+ logger.error(`Failed to connect to HTTP MCP server ${config.name}:`, err);
1120
+ return {
1121
+ client,
1122
+ close: async () => {
1123
+ try {
1124
+ await client.close();
1125
+ }
1126
+ catch {
1127
+ // Ignore close errors
1128
+ }
1129
+ },
1130
+ status,
1131
+ error,
1132
+ };
1133
+ }
1134
+ }
1135
+ /**
1136
+ * Creates an SSE transport connection.
1137
+ * Uses proper SSE protocol: GET for event stream, POST for sending messages.
1138
+ */
1139
+ async function createSseConnection(config, timeout) {
1140
+ logger.debug(`Creating SSE connection to ${config.name} at ${config.url}`);
1141
+ const client = new SseMCPClient(config.url, config.headers, timeout);
1142
+ let status = 'connecting';
1143
+ let error;
1144
+ try {
1145
+ await client.connect();
1146
+ status = 'connected';
1147
+ logger.info(`Connected to SSE MCP server: ${config.name}`);
1148
+ return {
1149
+ client,
1150
+ close: async () => {
1151
+ await client.close();
1152
+ },
1153
+ status,
1154
+ };
1155
+ }
1156
+ catch (err) {
1157
+ error = err instanceof Error ? err.message : String(err);
1158
+ status = 'error';
1159
+ logger.error(`Failed to connect to SSE MCP server ${config.name}:`, err);
1160
+ return {
1161
+ client,
1162
+ close: async () => {
1163
+ try {
1164
+ await client.close();
1165
+ }
1166
+ catch {
1167
+ // Ignore close errors
1168
+ }
1169
+ },
1170
+ status,
1171
+ error,
1172
+ };
1173
+ }
1174
+ }
1175
+ /**
1176
+ * Creates a stdio transport connection.
1177
+ * Spawns a child process and communicates via JSON-RPC over stdin/stdout.
1178
+ */
1179
+ async function createStdioConnection(config, timeout) {
1180
+ logger.debug(`Creating stdio connection to ${config.name} with command: ${config.command}`);
1181
+ // Use longer timeout for npx commands (they may need to download packages)
1182
+ const effectiveTimeout = config.command === 'npx' ? Math.max(timeout, 60000) : timeout;
1183
+ if (config.command === 'npx' && effectiveTimeout > timeout) {
1184
+ logger.debug(`Using extended timeout (60s) for npx command - first run may download packages`);
1185
+ }
1186
+ const client = new StdioMCPClient(config.command, config.args || [], config.cwd, config.env, effectiveTimeout);
1187
+ let status = 'connecting';
1188
+ let error;
1189
+ try {
1190
+ await Promise.race([
1191
+ client.connect(),
1192
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout')), effectiveTimeout)),
1193
+ ]);
1194
+ status = 'connected';
1195
+ logger.debug(`Connected to stdio MCP server: ${config.name}`);
1196
+ return {
1197
+ client,
1198
+ close: async () => {
1199
+ await client.close();
1200
+ },
1201
+ status,
1202
+ };
1203
+ }
1204
+ catch (err) {
1205
+ error = err instanceof Error ? err.message : String(err);
1206
+ status = 'error';
1207
+ logger.error(`Failed to connect to stdio MCP server ${config.name}:`, err);
1208
+ return {
1209
+ client,
1210
+ close: async () => {
1211
+ try {
1212
+ await client.close();
1213
+ }
1214
+ catch {
1215
+ // Ignore close errors
1216
+ }
1217
+ },
1218
+ status,
1219
+ error,
1220
+ };
1221
+ }
1222
+ }
1223
+ /**
1224
+ * Fetches available tools from an MCP server.
1225
+ */
1226
+ export async function fetchServerTools(client) {
1227
+ try {
1228
+ const result = await client.listTools();
1229
+ return result.tools || [];
1230
+ }
1231
+ catch (error) {
1232
+ logger.error('Failed to fetch MCP tools:', error);
1233
+ return [];
1234
+ }
1235
+ }
1236
+ /**
1237
+ * Fetches available resources from an MCP server.
1238
+ */
1239
+ export async function fetchServerResources(client) {
1240
+ try {
1241
+ const result = await client.listResources();
1242
+ return result.resources || [];
1243
+ }
1244
+ catch (error) {
1245
+ logger.error('Failed to fetch MCP resources:', error);
1246
+ return [];
1247
+ }
1248
+ }
1249
+ /**
1250
+ * Fetches available prompts from an MCP server.
1251
+ */
1252
+ export async function fetchServerPrompts(client) {
1253
+ try {
1254
+ const result = await client.listPrompts();
1255
+ return result.prompts || [];
1256
+ }
1257
+ catch (error) {
1258
+ logger.error('Failed to fetch MCP prompts:', error);
1259
+ return [];
1260
+ }
1261
+ }
1262
+ /**
1263
+ * Fetches server capabilities.
1264
+ */
1265
+ export async function fetchServerCapabilities(client) {
1266
+ try {
1267
+ const capabilities = client.getServerCapabilities();
1268
+ return capabilities || {};
1269
+ }
1270
+ catch (error) {
1271
+ logger.error('Failed to fetch MCP server capabilities:', error);
1272
+ return {};
1273
+ }
1274
+ }
1275
+ /**
1276
+ * Calls a tool on an MCP server.
1277
+ */
1278
+ export async function callMCPTool(client, toolName, args) {
1279
+ try {
1280
+ return await client.callTool({ name: toolName, arguments: args });
1281
+ }
1282
+ catch (error) {
1283
+ const errorMessage = error instanceof Error ? error.message : String(error);
1284
+ logger.error(`Failed to call MCP tool ${toolName}:`, error);
1285
+ return { success: false, error: errorMessage };
1286
+ }
1287
+ }
1288
+ /**
1289
+ * Reads a resource from an MCP server.
1290
+ */
1291
+ export async function readMCPResource(client, uri) {
1292
+ try {
1293
+ const result = await client.readResource({ uri });
1294
+ return { content: result.contents || [] };
1295
+ }
1296
+ catch (error) {
1297
+ const errorMessage = error instanceof Error ? error.message : String(error);
1298
+ logger.error(`Failed to read MCP resource ${uri}:`, error);
1299
+ return { content: [], error: errorMessage };
1300
+ }
1301
+ }
1302
+ /**
1303
+ * Gets a prompt from an MCP server.
1304
+ */
1305
+ export async function getMCPPrompt(client, name, args) {
1306
+ try {
1307
+ const result = await client.getPrompt({ name, arguments: args });
1308
+ return { messages: result.messages || [] };
1309
+ }
1310
+ catch (error) {
1311
+ const errorMessage = error instanceof Error ? error.message : String(error);
1312
+ logger.error(`Failed to get MCP prompt ${name}:`, error);
1313
+ return { messages: [], error: errorMessage };
1314
+ }
1315
+ }
1316
+ //# sourceMappingURL=mcp-transport.js.map