@nimrobo/mcporter-remote 0.1.0

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 (741) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/.gitattributes +2 -0
  3. package/.github/workflows/ci.yml +26 -0
  4. package/AGENTS.md +109 -0
  5. package/CHANGELOG.md +361 -0
  6. package/LICENSE +21 -0
  7. package/README.md +449 -0
  8. package/bin/git +180 -0
  9. package/biome.json +43 -0
  10. package/config/mcporter.json +134 -0
  11. package/dist/cli/adhoc-server.d.ts +21 -0
  12. package/dist/cli/adhoc-server.d.ts.map +1 -0
  13. package/dist/cli/adhoc-server.js +228 -0
  14. package/dist/cli/adhoc-server.js.map +1 -0
  15. package/dist/cli/auth-command.d.ts +6 -0
  16. package/dist/cli/auth-command.d.ts.map +1 -0
  17. package/dist/cli/auth-command.js +257 -0
  18. package/dist/cli/auth-command.js.map +1 -0
  19. package/dist/cli/call-argument-expression.d.ts +5 -0
  20. package/dist/cli/call-argument-expression.d.ts.map +1 -0
  21. package/dist/cli/call-argument-expression.js +57 -0
  22. package/dist/cli/call-argument-expression.js.map +1 -0
  23. package/dist/cli/call-argument-values.d.ts +10 -0
  24. package/dist/cli/call-argument-values.d.ts.map +1 -0
  25. package/dist/cli/call-argument-values.js +83 -0
  26. package/dist/cli/call-argument-values.js.map +1 -0
  27. package/dist/cli/call-arguments.d.ts +17 -0
  28. package/dist/cli/call-arguments.d.ts.map +1 -0
  29. package/dist/cli/call-arguments.js +183 -0
  30. package/dist/cli/call-arguments.js.map +1 -0
  31. package/dist/cli/call-command.d.ts +5 -0
  32. package/dist/cli/call-command.d.ts.map +1 -0
  33. package/dist/cli/call-command.js +371 -0
  34. package/dist/cli/call-command.js.map +1 -0
  35. package/dist/cli/call-expression-parser.d.ts +9 -0
  36. package/dist/cli/call-expression-parser.d.ts.map +1 -0
  37. package/dist/cli/call-expression-parser.js +177 -0
  38. package/dist/cli/call-expression-parser.js.map +1 -0
  39. package/dist/cli/cli-factory.d.ts +16 -0
  40. package/dist/cli/cli-factory.d.ts.map +1 -0
  41. package/dist/cli/cli-factory.js +37 -0
  42. package/dist/cli/cli-factory.js.map +1 -0
  43. package/dist/cli/command-inference.d.ts +12 -0
  44. package/dist/cli/command-inference.d.ts.map +1 -0
  45. package/dist/cli/command-inference.js +75 -0
  46. package/dist/cli/command-inference.js.map +1 -0
  47. package/dist/cli/config/add.d.ts +23 -0
  48. package/dist/cli/config/add.d.ts.map +1 -0
  49. package/dist/cli/config/add.js +267 -0
  50. package/dist/cli/config/add.js.map +1 -0
  51. package/dist/cli/config/auth.d.ts +4 -0
  52. package/dist/cli/config/auth.d.ts.map +1 -0
  53. package/dist/cli/config/auth.js +21 -0
  54. package/dist/cli/config/auth.js.map +1 -0
  55. package/dist/cli/config/doctor.d.ts +3 -0
  56. package/dist/cli/config/doctor.d.ts.map +1 -0
  57. package/dist/cli/config/doctor.js +26 -0
  58. package/dist/cli/config/doctor.js.map +1 -0
  59. package/dist/cli/config/get.d.ts +3 -0
  60. package/dist/cli/config/get.d.ts.map +1 -0
  61. package/dist/cli/config/get.js +45 -0
  62. package/dist/cli/config/get.js.map +1 -0
  63. package/dist/cli/config/help.d.ts +18 -0
  64. package/dist/cli/config/help.d.ts.map +1 -0
  65. package/dist/cli/config/help.js +193 -0
  66. package/dist/cli/config/help.js.map +1 -0
  67. package/dist/cli/config/import.d.ts +9 -0
  68. package/dist/cli/config/import.d.ts.map +1 -0
  69. package/dist/cli/config/import.js +88 -0
  70. package/dist/cli/config/import.js.map +1 -0
  71. package/dist/cli/config/index.d.ts +2 -0
  72. package/dist/cli/config/index.d.ts.map +1 -0
  73. package/dist/cli/config/index.js +2 -0
  74. package/dist/cli/config/index.js.map +1 -0
  75. package/dist/cli/config/list.d.ts +7 -0
  76. package/dist/cli/config/list.d.ts.map +1 -0
  77. package/dist/cli/config/list.js +71 -0
  78. package/dist/cli/config/list.js.map +1 -0
  79. package/dist/cli/config/remove.d.ts +3 -0
  80. package/dist/cli/config/remove.d.ts.map +1 -0
  81. package/dist/cli/config/remove.js +19 -0
  82. package/dist/cli/config/remove.js.map +1 -0
  83. package/dist/cli/config/render.d.ts +26 -0
  84. package/dist/cli/config/render.d.ts.map +1 -0
  85. package/dist/cli/config/render.js +99 -0
  86. package/dist/cli/config/render.js.map +1 -0
  87. package/dist/cli/config/shared.d.ts +21 -0
  88. package/dist/cli/config/shared.d.ts.map +1 -0
  89. package/dist/cli/config/shared.js +130 -0
  90. package/dist/cli/config/shared.js.map +1 -0
  91. package/dist/cli/config/types.d.ts +7 -0
  92. package/dist/cli/config/types.d.ts.map +1 -0
  93. package/dist/cli/config/types.js +2 -0
  94. package/dist/cli/config/types.js.map +1 -0
  95. package/dist/cli/config-command.d.ts +7 -0
  96. package/dist/cli/config-command.d.ts.map +1 -0
  97. package/dist/cli/config-command.js +67 -0
  98. package/dist/cli/config-command.js.map +1 -0
  99. package/dist/cli/daemon-command.d.ts +8 -0
  100. package/dist/cli/daemon-command.d.ts.map +1 -0
  101. package/dist/cli/daemon-command.js +219 -0
  102. package/dist/cli/daemon-command.js.map +1 -0
  103. package/dist/cli/emit-ts-command.d.ts +31 -0
  104. package/dist/cli/emit-ts-command.d.ts.map +1 -0
  105. package/dist/cli/emit-ts-command.js +217 -0
  106. package/dist/cli/emit-ts-command.js.map +1 -0
  107. package/dist/cli/emit-ts-templates.d.ts +23 -0
  108. package/dist/cli/emit-ts-templates.d.ts.map +1 -0
  109. package/dist/cli/emit-ts-templates.js +130 -0
  110. package/dist/cli/emit-ts-templates.js.map +1 -0
  111. package/dist/cli/ephemeral-flags.d.ts +7 -0
  112. package/dist/cli/ephemeral-flags.d.ts.map +1 -0
  113. package/dist/cli/ephemeral-flags.js +108 -0
  114. package/dist/cli/ephemeral-flags.js.map +1 -0
  115. package/dist/cli/ephemeral-target.d.ts +16 -0
  116. package/dist/cli/ephemeral-target.d.ts.map +1 -0
  117. package/dist/cli/ephemeral-target.js +105 -0
  118. package/dist/cli/ephemeral-target.js.map +1 -0
  119. package/dist/cli/errors.d.ts +4 -0
  120. package/dist/cli/errors.d.ts.map +1 -0
  121. package/dist/cli/errors.js +7 -0
  122. package/dist/cli/errors.js.map +1 -0
  123. package/dist/cli/flag-utils.d.ts +4 -0
  124. package/dist/cli/flag-utils.d.ts.map +1 -0
  125. package/dist/cli/flag-utils.js +27 -0
  126. package/dist/cli/flag-utils.js.map +1 -0
  127. package/dist/cli/generate/artifacts.d.ts +15 -0
  128. package/dist/cli/generate/artifacts.d.ts.map +1 -0
  129. package/dist/cli/generate/artifacts.js +247 -0
  130. package/dist/cli/generate/artifacts.js.map +1 -0
  131. package/dist/cli/generate/definition.d.ts +22 -0
  132. package/dist/cli/generate/definition.d.ts.map +1 -0
  133. package/dist/cli/generate/definition.js +265 -0
  134. package/dist/cli/generate/definition.js.map +1 -0
  135. package/dist/cli/generate/flag-parser.d.ts +11 -0
  136. package/dist/cli/generate/flag-parser.d.ts.map +1 -0
  137. package/dist/cli/generate/flag-parser.js +41 -0
  138. package/dist/cli/generate/flag-parser.js.map +1 -0
  139. package/dist/cli/generate/flags.d.ts +20 -0
  140. package/dist/cli/generate/flags.d.ts.map +1 -0
  141. package/dist/cli/generate/flags.js +220 -0
  142. package/dist/cli/generate/flags.js.map +1 -0
  143. package/dist/cli/generate/fs-helpers.d.ts +3 -0
  144. package/dist/cli/generate/fs-helpers.d.ts.map +1 -0
  145. package/dist/cli/generate/fs-helpers.js +34 -0
  146. package/dist/cli/generate/fs-helpers.js.map +1 -0
  147. package/dist/cli/generate/name-utils.d.ts +5 -0
  148. package/dist/cli/generate/name-utils.d.ts.map +1 -0
  149. package/dist/cli/generate/name-utils.js +170 -0
  150. package/dist/cli/generate/name-utils.js.map +1 -0
  151. package/dist/cli/generate/output.d.ts +5 -0
  152. package/dist/cli/generate/output.d.ts.map +1 -0
  153. package/dist/cli/generate/output.js +24 -0
  154. package/dist/cli/generate/output.js.map +1 -0
  155. package/dist/cli/generate/runtime.d.ts +3 -0
  156. package/dist/cli/generate/runtime.d.ts.map +1 -0
  157. package/dist/cli/generate/runtime.js +34 -0
  158. package/dist/cli/generate/runtime.js.map +1 -0
  159. package/dist/cli/generate/server-utils.d.ts +3 -0
  160. package/dist/cli/generate/server-utils.d.ts.map +1 -0
  161. package/dist/cli/generate/server-utils.js +33 -0
  162. package/dist/cli/generate/server-utils.js.map +1 -0
  163. package/dist/cli/generate/template-data.d.ts +25 -0
  164. package/dist/cli/generate/template-data.d.ts.map +1 -0
  165. package/dist/cli/generate/template-data.js +90 -0
  166. package/dist/cli/generate/template-data.js.map +1 -0
  167. package/dist/cli/generate/template-help.d.ts +2 -0
  168. package/dist/cli/generate/template-help.d.ts.map +1 -0
  169. package/dist/cli/generate/template-help.js +113 -0
  170. package/dist/cli/generate/template-help.js.map +1 -0
  171. package/dist/cli/generate/template.d.ts +30 -0
  172. package/dist/cli/generate/template.d.ts.map +1 -0
  173. package/dist/cli/generate/template.js +366 -0
  174. package/dist/cli/generate/template.js.map +1 -0
  175. package/dist/cli/generate/tools.d.ts +46 -0
  176. package/dist/cli/generate/tools.d.ts.map +1 -0
  177. package/dist/cli/generate/tools.js +304 -0
  178. package/dist/cli/generate/tools.js.map +1 -0
  179. package/dist/cli/generate/types.d.ts +5 -0
  180. package/dist/cli/generate/types.d.ts.map +1 -0
  181. package/dist/cli/generate/types.js +2 -0
  182. package/dist/cli/generate/types.js.map +1 -0
  183. package/dist/cli/generate-cli-runner.d.ts +3 -0
  184. package/dist/cli/generate-cli-runner.d.ts.map +1 -0
  185. package/dist/cli/generate-cli-runner.js +72 -0
  186. package/dist/cli/generate-cli-runner.js.map +1 -0
  187. package/dist/cli/help-output.d.ts +6 -0
  188. package/dist/cli/help-output.d.ts.map +1 -0
  189. package/dist/cli/help-output.js +186 -0
  190. package/dist/cli/help-output.js.map +1 -0
  191. package/dist/cli/http-utils.d.ts +9 -0
  192. package/dist/cli/http-utils.d.ts.map +1 -0
  193. package/dist/cli/http-utils.js +88 -0
  194. package/dist/cli/http-utils.js.map +1 -0
  195. package/dist/cli/identifier-helpers.d.ts +20 -0
  196. package/dist/cli/identifier-helpers.d.ts.map +1 -0
  197. package/dist/cli/identifier-helpers.js +84 -0
  198. package/dist/cli/identifier-helpers.js.map +1 -0
  199. package/dist/cli/image-output.d.ts +3 -0
  200. package/dist/cli/image-output.d.ts.map +1 -0
  201. package/dist/cli/image-output.js +57 -0
  202. package/dist/cli/image-output.js.map +1 -0
  203. package/dist/cli/inspect-cli-command.d.ts +11 -0
  204. package/dist/cli/inspect-cli-command.d.ts.map +1 -0
  205. package/dist/cli/inspect-cli-command.js +78 -0
  206. package/dist/cli/inspect-cli-command.js.map +1 -0
  207. package/dist/cli/json-output.d.ts +23 -0
  208. package/dist/cli/json-output.d.ts.map +1 -0
  209. package/dist/cli/json-output.js +38 -0
  210. package/dist/cli/json-output.js.map +1 -0
  211. package/dist/cli/list-command.d.ts +15 -0
  212. package/dist/cli/list-command.d.ts.map +1 -0
  213. package/dist/cli/list-command.js +372 -0
  214. package/dist/cli/list-command.js.map +1 -0
  215. package/dist/cli/list-detail-helpers.d.ts +41 -0
  216. package/dist/cli/list-detail-helpers.d.ts.map +1 -0
  217. package/dist/cli/list-detail-helpers.js +99 -0
  218. package/dist/cli/list-detail-helpers.js.map +1 -0
  219. package/dist/cli/list-doc-comments.d.ts +6 -0
  220. package/dist/cli/list-doc-comments.d.ts.map +1 -0
  221. package/dist/cli/list-doc-comments.js +114 -0
  222. package/dist/cli/list-doc-comments.js.map +1 -0
  223. package/dist/cli/list-format.d.ts +38 -0
  224. package/dist/cli/list-format.d.ts.map +1 -0
  225. package/dist/cli/list-format.js +98 -0
  226. package/dist/cli/list-format.js.map +1 -0
  227. package/dist/cli/list-output.d.ts +39 -0
  228. package/dist/cli/list-output.d.ts.map +1 -0
  229. package/dist/cli/list-output.js +159 -0
  230. package/dist/cli/list-output.js.map +1 -0
  231. package/dist/cli/list-signature.d.ts +26 -0
  232. package/dist/cli/list-signature.d.ts.map +1 -0
  233. package/dist/cli/list-signature.js +176 -0
  234. package/dist/cli/list-signature.js.map +1 -0
  235. package/dist/cli/logger-context.d.ts +9 -0
  236. package/dist/cli/logger-context.d.ts.map +1 -0
  237. package/dist/cli/logger-context.js +29 -0
  238. package/dist/cli/logger-context.js.map +1 -0
  239. package/dist/cli/output-format.d.ts +11 -0
  240. package/dist/cli/output-format.d.ts.map +1 -0
  241. package/dist/cli/output-format.js +51 -0
  242. package/dist/cli/output-format.js.map +1 -0
  243. package/dist/cli/output-utils.d.ts +5 -0
  244. package/dist/cli/output-utils.d.ts.map +1 -0
  245. package/dist/cli/output-utils.js +143 -0
  246. package/dist/cli/output-utils.js.map +1 -0
  247. package/dist/cli/path-utils.d.ts +2 -0
  248. package/dist/cli/path-utils.d.ts.map +1 -0
  249. package/dist/cli/path-utils.js +12 -0
  250. package/dist/cli/path-utils.js.map +1 -0
  251. package/dist/cli/runtime-debug.d.ts +4 -0
  252. package/dist/cli/runtime-debug.d.ts.map +1 -0
  253. package/dist/cli/runtime-debug.js +134 -0
  254. package/dist/cli/runtime-debug.js.map +1 -0
  255. package/dist/cli/server-lookup.d.ts +3 -0
  256. package/dist/cli/server-lookup.d.ts.map +1 -0
  257. package/dist/cli/server-lookup.js +21 -0
  258. package/dist/cli/server-lookup.js.map +1 -0
  259. package/dist/cli/terminal.d.ts +10 -0
  260. package/dist/cli/terminal.d.ts.map +1 -0
  261. package/dist/cli/terminal.js +33 -0
  262. package/dist/cli/terminal.js.map +1 -0
  263. package/dist/cli/timeouts.d.ts +9 -0
  264. package/dist/cli/timeouts.d.ts.map +1 -0
  265. package/dist/cli/timeouts.js +55 -0
  266. package/dist/cli/timeouts.js.map +1 -0
  267. package/dist/cli/tool-cache.d.ts +9 -0
  268. package/dist/cli/tool-cache.d.ts.map +1 -0
  269. package/dist/cli/tool-cache.js +31 -0
  270. package/dist/cli/tool-cache.js.map +1 -0
  271. package/dist/cli/transport-utils.d.ts +3 -0
  272. package/dist/cli/transport-utils.d.ts.map +1 -0
  273. package/dist/cli/transport-utils.js +9 -0
  274. package/dist/cli/transport-utils.js.map +1 -0
  275. package/dist/cli-metadata.d.ts +57 -0
  276. package/dist/cli-metadata.d.ts.map +1 -0
  277. package/dist/cli-metadata.js +92 -0
  278. package/dist/cli-metadata.js.map +1 -0
  279. package/dist/cli.d.ts +10 -0
  280. package/dist/cli.d.ts.map +1 -0
  281. package/dist/cli.js +217 -0
  282. package/dist/cli.js.map +1 -0
  283. package/dist/config/imports/external.d.ts +8 -0
  284. package/dist/config/imports/external.d.ts.map +1 -0
  285. package/dist/config/imports/external.js +231 -0
  286. package/dist/config/imports/external.js.map +1 -0
  287. package/dist/config/imports/paths-utils.d.ts +3 -0
  288. package/dist/config/imports/paths-utils.d.ts.map +1 -0
  289. package/dist/config/imports/paths-utils.js +27 -0
  290. package/dist/config/imports/paths-utils.js.map +1 -0
  291. package/dist/config/imports/paths.d.ts +3 -0
  292. package/dist/config/imports/paths.d.ts.map +1 -0
  293. package/dist/config/imports/paths.js +135 -0
  294. package/dist/config/imports/paths.js.map +1 -0
  295. package/dist/config/imports/shared.d.ts +4 -0
  296. package/dist/config/imports/shared.d.ts.map +1 -0
  297. package/dist/config/imports/shared.js +25 -0
  298. package/dist/config/imports/shared.js.map +1 -0
  299. package/dist/config/path-discovery.d.ts +11 -0
  300. package/dist/config/path-discovery.d.ts.map +1 -0
  301. package/dist/config/path-discovery.js +65 -0
  302. package/dist/config/path-discovery.js.map +1 -0
  303. package/dist/config/read-config.d.ts +9 -0
  304. package/dist/config/read-config.d.ts.map +1 -0
  305. package/dist/config/read-config.js +74 -0
  306. package/dist/config/read-config.js.map +1 -0
  307. package/dist/config-imports.d.ts +7 -0
  308. package/dist/config-imports.d.ts.map +1 -0
  309. package/dist/config-imports.js +8 -0
  310. package/dist/config-imports.js.map +1 -0
  311. package/dist/config-normalize.d.ts +8 -0
  312. package/dist/config-normalize.d.ts.map +1 -0
  313. package/dist/config-normalize.js +184 -0
  314. package/dist/config-normalize.js.map +1 -0
  315. package/dist/config-schema.d.ts +164 -0
  316. package/dist/config-schema.d.ts.map +1 -0
  317. package/dist/config-schema.js +103 -0
  318. package/dist/config-schema.js.map +1 -0
  319. package/dist/config.d.ts +17 -0
  320. package/dist/config.d.ts.map +1 -0
  321. package/dist/config.js +91 -0
  322. package/dist/config.js.map +1 -0
  323. package/dist/daemon/client.d.ts +34 -0
  324. package/dist/daemon/client.d.ts.map +1 -0
  325. package/dist/daemon/client.js +291 -0
  326. package/dist/daemon/client.js.map +1 -0
  327. package/dist/daemon/config-layers.d.ts +7 -0
  328. package/dist/daemon/config-layers.d.ts.map +1 -0
  329. package/dist/daemon/config-layers.js +20 -0
  330. package/dist/daemon/config-layers.js.map +1 -0
  331. package/dist/daemon/host.d.ts +32 -0
  332. package/dist/daemon/host.d.ts.map +1 -0
  333. package/dist/daemon/host.js +345 -0
  334. package/dist/daemon/host.js.map +1 -0
  335. package/dist/daemon/launch.d.ts +10 -0
  336. package/dist/daemon/launch.d.ts.map +1 -0
  337. package/dist/daemon/launch.js +35 -0
  338. package/dist/daemon/launch.js.map +1 -0
  339. package/dist/daemon/log-context.d.ts +18 -0
  340. package/dist/daemon/log-context.d.ts.map +1 -0
  341. package/dist/daemon/log-context.js +64 -0
  342. package/dist/daemon/log-context.js.map +1 -0
  343. package/dist/daemon/paths.d.ts +5 -0
  344. package/dist/daemon/paths.d.ts.map +1 -0
  345. package/dist/daemon/paths.js +30 -0
  346. package/dist/daemon/paths.js.map +1 -0
  347. package/dist/daemon/protocol.d.ts +51 -0
  348. package/dist/daemon/protocol.d.ts.map +1 -0
  349. package/dist/daemon/protocol.js +2 -0
  350. package/dist/daemon/protocol.js.map +1 -0
  351. package/dist/daemon/request-utils.d.ts +12 -0
  352. package/dist/daemon/request-utils.d.ts.map +1 -0
  353. package/dist/daemon/request-utils.js +52 -0
  354. package/dist/daemon/request-utils.js.map +1 -0
  355. package/dist/daemon/runtime-wrapper.d.ts +9 -0
  356. package/dist/daemon/runtime-wrapper.d.ts.map +1 -0
  357. package/dist/daemon/runtime-wrapper.js +110 -0
  358. package/dist/daemon/runtime-wrapper.js.map +1 -0
  359. package/dist/env.d.ts +5 -0
  360. package/dist/env.d.ts.map +1 -0
  361. package/dist/env.js +93 -0
  362. package/dist/env.js.map +1 -0
  363. package/dist/error-classifier.d.ts +11 -0
  364. package/dist/error-classifier.d.ts.map +1 -0
  365. package/dist/error-classifier.js +141 -0
  366. package/dist/error-classifier.js.map +1 -0
  367. package/dist/fs-json.d.ts +3 -0
  368. package/dist/fs-json.d.ts.map +1 -0
  369. package/dist/fs-json.js +21 -0
  370. package/dist/fs-json.js.map +1 -0
  371. package/dist/generate-cli.d.ts +32 -0
  372. package/dist/generate-cli.d.ts.map +1 -0
  373. package/dist/generate-cli.js +155 -0
  374. package/dist/generate-cli.js.map +1 -0
  375. package/dist/index.d.ts +9 -0
  376. package/dist/index.d.ts.map +1 -0
  377. package/dist/index.js +5 -0
  378. package/dist/index.js.map +1 -0
  379. package/dist/lifecycle.d.ts +8 -0
  380. package/dist/lifecycle.d.ts.map +1 -0
  381. package/dist/lifecycle.js +106 -0
  382. package/dist/lifecycle.js.map +1 -0
  383. package/dist/logging.d.ts +19 -0
  384. package/dist/logging.d.ts.map +1 -0
  385. package/dist/logging.js +76 -0
  386. package/dist/logging.js.map +1 -0
  387. package/dist/oauth-manual.d.ts +9 -0
  388. package/dist/oauth-manual.d.ts.map +1 -0
  389. package/dist/oauth-manual.js +84 -0
  390. package/dist/oauth-manual.js.map +1 -0
  391. package/dist/oauth-persistence.d.ts +20 -0
  392. package/dist/oauth-persistence.d.ts.map +1 -0
  393. package/dist/oauth-persistence.js +254 -0
  394. package/dist/oauth-persistence.js.map +1 -0
  395. package/dist/oauth-vault.d.ts +19 -0
  396. package/dist/oauth-vault.d.ts.map +1 -0
  397. package/dist/oauth-vault.js +100 -0
  398. package/dist/oauth-vault.js.map +1 -0
  399. package/dist/oauth.d.ts +31 -0
  400. package/dist/oauth.d.ts.map +1 -0
  401. package/dist/oauth.js +414 -0
  402. package/dist/oauth.js.map +1 -0
  403. package/dist/result-utils.d.ts +22 -0
  404. package/dist/result-utils.d.ts.map +1 -0
  405. package/dist/result-utils.js +229 -0
  406. package/dist/result-utils.js.map +1 -0
  407. package/dist/runtime/errors.d.ts +2 -0
  408. package/dist/runtime/errors.d.ts.map +1 -0
  409. package/dist/runtime/errors.js +16 -0
  410. package/dist/runtime/errors.js.map +1 -0
  411. package/dist/runtime/http-transport.d.ts +15 -0
  412. package/dist/runtime/http-transport.d.ts.map +1 -0
  413. package/dist/runtime/http-transport.js +91 -0
  414. package/dist/runtime/http-transport.js.map +1 -0
  415. package/dist/runtime/manual-oauth.d.ts +8 -0
  416. package/dist/runtime/manual-oauth.d.ts.map +1 -0
  417. package/dist/runtime/manual-oauth.js +81 -0
  418. package/dist/runtime/manual-oauth.js.map +1 -0
  419. package/dist/runtime/oauth.d.ts +22 -0
  420. package/dist/runtime/oauth.d.ts.map +1 -0
  421. package/dist/runtime/oauth.js +83 -0
  422. package/dist/runtime/oauth.js.map +1 -0
  423. package/dist/runtime/transport.d.ts +24 -0
  424. package/dist/runtime/transport.d.ts.map +1 -0
  425. package/dist/runtime/transport.js +165 -0
  426. package/dist/runtime/transport.js.map +1 -0
  427. package/dist/runtime/utils.d.ts +5 -0
  428. package/dist/runtime/utils.d.ts.map +1 -0
  429. package/dist/runtime/utils.js +47 -0
  430. package/dist/runtime/utils.js.map +1 -0
  431. package/dist/runtime-header-utils.d.ts +2 -0
  432. package/dist/runtime-header-utils.d.ts.map +1 -0
  433. package/dist/runtime-header-utils.js +19 -0
  434. package/dist/runtime-header-utils.js.map +1 -0
  435. package/dist/runtime-oauth-support.d.ts +5 -0
  436. package/dist/runtime-oauth-support.d.ts.map +1 -0
  437. package/dist/runtime-oauth-support.js +21 -0
  438. package/dist/runtime-oauth-support.js.map +1 -0
  439. package/dist/runtime-process-utils.d.ts +11 -0
  440. package/dist/runtime-process-utils.d.ts.map +1 -0
  441. package/dist/runtime-process-utils.js +299 -0
  442. package/dist/runtime-process-utils.js.map +1 -0
  443. package/dist/runtime.d.ts +55 -0
  444. package/dist/runtime.d.ts.map +1 -0
  445. package/dist/runtime.js +245 -0
  446. package/dist/runtime.js.map +1 -0
  447. package/dist/schema-cache.d.ts +10 -0
  448. package/dist/schema-cache.d.ts.map +1 -0
  449. package/dist/schema-cache.js +40 -0
  450. package/dist/schema-cache.js.map +1 -0
  451. package/dist/sdk-patches.d.ts +5 -0
  452. package/dist/sdk-patches.d.ts.map +1 -0
  453. package/dist/sdk-patches.js +399 -0
  454. package/dist/sdk-patches.js.map +1 -0
  455. package/dist/server-proxy.d.ts +17 -0
  456. package/dist/server-proxy.d.ts.map +1 -0
  457. package/dist/server-proxy.js +342 -0
  458. package/dist/server-proxy.js.map +1 -0
  459. package/docs/RELEASE.md +96 -0
  460. package/docs/adhoc.md +76 -0
  461. package/docs/call-heuristic.md +31 -0
  462. package/docs/call-syntax.md +75 -0
  463. package/docs/cli-generator.md +116 -0
  464. package/docs/cli-reference.md +76 -0
  465. package/docs/config.md +208 -0
  466. package/docs/daemon.md +95 -0
  467. package/docs/emit-ts.md +98 -0
  468. package/docs/hang-debug.md +88 -0
  469. package/docs/import.md +59 -0
  470. package/docs/known-issues.md +33 -0
  471. package/docs/livetests.md +31 -0
  472. package/docs/local.md +73 -0
  473. package/docs/logging.md +67 -0
  474. package/docs/manual-testing.md +78 -0
  475. package/docs/mcp.md +44 -0
  476. package/docs/migration.md +77 -0
  477. package/docs/pnpm-mcp-migration.md +15 -0
  478. package/docs/refactor.md +76 -0
  479. package/docs/shortcuts.md +31 -0
  480. package/docs/spec.md +86 -0
  481. package/docs/subagent.md +39 -0
  482. package/docs/supabase-auth-issue.md +53 -0
  483. package/docs/tmux.md +30 -0
  484. package/docs/tool-calling.md +73 -0
  485. package/docs/windows.md +25 -0
  486. package/examples/context7-headlines.ts +72 -0
  487. package/git +3 -0
  488. package/mcporter.png +0 -0
  489. package/mcporter.schema.json +263 -0
  490. package/package.json +105 -0
  491. package/pnpm-workspace.yaml +2 -0
  492. package/runner +13 -0
  493. package/scripts/agent-send.ts +179 -0
  494. package/scripts/build-bun.ts +125 -0
  495. package/scripts/committer +53 -0
  496. package/scripts/docs-list.ts +132 -0
  497. package/scripts/generate-json-schema.ts +50 -0
  498. package/scripts/git-policy.ts +165 -0
  499. package/scripts/mcp_signoz_retry_patch.cjs +9 -0
  500. package/scripts/release.sh +86 -0
  501. package/scripts/runner.ts +1556 -0
  502. package/scripts/test-runner.js +39 -0
  503. package/src/cli/adhoc-server.ts +263 -0
  504. package/src/cli/auth-command.ts +290 -0
  505. package/src/cli/call-argument-expression.ts +61 -0
  506. package/src/cli/call-argument-values.ts +95 -0
  507. package/src/cli/call-arguments.ts +246 -0
  508. package/src/cli/call-command.ts +478 -0
  509. package/src/cli/call-expression-parser.ts +210 -0
  510. package/src/cli/cli-factory.ts +51 -0
  511. package/src/cli/command-inference.ts +99 -0
  512. package/src/cli/config/add.ts +308 -0
  513. package/src/cli/config/auth.ts +23 -0
  514. package/src/cli/config/doctor.ts +27 -0
  515. package/src/cli/config/get.ts +47 -0
  516. package/src/cli/config/help.ts +213 -0
  517. package/src/cli/config/import.ts +97 -0
  518. package/src/cli/config/index.ts +1 -0
  519. package/src/cli/config/list.ts +81 -0
  520. package/src/cli/config/remove.ts +20 -0
  521. package/src/cli/config/render.ts +119 -0
  522. package/src/cli/config/shared.ts +159 -0
  523. package/src/cli/config/types.ts +8 -0
  524. package/src/cli/config-command.ts +72 -0
  525. package/src/cli/daemon-command.ts +260 -0
  526. package/src/cli/emit-ts-command.ts +260 -0
  527. package/src/cli/emit-ts-templates.ts +161 -0
  528. package/src/cli/ephemeral-flags.ts +128 -0
  529. package/src/cli/ephemeral-target.ts +134 -0
  530. package/src/cli/errors.ts +6 -0
  531. package/src/cli/flag-utils.ts +29 -0
  532. package/src/cli/generate/artifacts.ts +308 -0
  533. package/src/cli/generate/definition.ts +325 -0
  534. package/src/cli/generate/flag-parser.ts +50 -0
  535. package/src/cli/generate/flags.ts +248 -0
  536. package/src/cli/generate/fs-helpers.ts +34 -0
  537. package/src/cli/generate/name-utils.ts +176 -0
  538. package/src/cli/generate/output.ts +27 -0
  539. package/src/cli/generate/runtime.ts +38 -0
  540. package/src/cli/generate/server-utils.ts +38 -0
  541. package/src/cli/generate/template-data.ts +126 -0
  542. package/src/cli/generate/template-help.ts +112 -0
  543. package/src/cli/generate/template.ts +407 -0
  544. package/src/cli/generate/tools.ts +354 -0
  545. package/src/cli/generate/types.ts +1 -0
  546. package/src/cli/generate-cli-runner.ts +82 -0
  547. package/src/cli/help-output.ts +207 -0
  548. package/src/cli/http-utils.ts +89 -0
  549. package/src/cli/identifier-helpers.ts +107 -0
  550. package/src/cli/image-output.ts +62 -0
  551. package/src/cli/inspect-cli-command.ts +89 -0
  552. package/src/cli/json-output.ts +60 -0
  553. package/src/cli/list-command.ts +432 -0
  554. package/src/cli/list-detail-helpers.ts +179 -0
  555. package/src/cli/list-doc-comments.ts +129 -0
  556. package/src/cli/list-format.ts +150 -0
  557. package/src/cli/list-output.ts +224 -0
  558. package/src/cli/list-signature.ts +217 -0
  559. package/src/cli/logger-context.ts +36 -0
  560. package/src/cli/output-format.ts +63 -0
  561. package/src/cli/output-utils.ts +161 -0
  562. package/src/cli/path-utils.ts +13 -0
  563. package/src/cli/runtime-debug.ts +141 -0
  564. package/src/cli/server-lookup.ts +22 -0
  565. package/src/cli/terminal.ts +41 -0
  566. package/src/cli/timeouts.ts +67 -0
  567. package/src/cli/tool-cache.ts +43 -0
  568. package/src/cli/transport-utils.ts +10 -0
  569. package/src/cli-metadata.ts +164 -0
  570. package/src/cli.ts +234 -0
  571. package/src/config/imports/external.ts +284 -0
  572. package/src/config/imports/paths-utils.ts +29 -0
  573. package/src/config/imports/paths.ts +145 -0
  574. package/src/config/imports/shared.ts +27 -0
  575. package/src/config/path-discovery.ts +79 -0
  576. package/src/config/read-config.ts +91 -0
  577. package/src/config-imports.ts +12 -0
  578. package/src/config-normalize.ts +220 -0
  579. package/src/config-schema.ts +175 -0
  580. package/src/config.ts +136 -0
  581. package/src/daemon/client.ts +350 -0
  582. package/src/daemon/config-layers.ts +23 -0
  583. package/src/daemon/host.ts +455 -0
  584. package/src/daemon/launch.ts +45 -0
  585. package/src/daemon/log-context.ts +78 -0
  586. package/src/daemon/paths.ts +35 -0
  587. package/src/daemon/protocol.ts +57 -0
  588. package/src/daemon/request-utils.ts +67 -0
  589. package/src/daemon/runtime-wrapper.ts +135 -0
  590. package/src/env.ts +107 -0
  591. package/src/error-classifier.ts +158 -0
  592. package/src/fs-json.ts +21 -0
  593. package/src/generate-cli.ts +211 -0
  594. package/src/index.ts +14 -0
  595. package/src/lifecycle.ts +138 -0
  596. package/src/logging.ts +93 -0
  597. package/src/oauth-manual.ts +103 -0
  598. package/src/oauth-persistence.ts +316 -0
  599. package/src/oauth-vault.ts +128 -0
  600. package/src/oauth.ts +494 -0
  601. package/src/result-utils.ts +278 -0
  602. package/src/runtime/errors.ts +17 -0
  603. package/src/runtime/oauth.ts +112 -0
  604. package/src/runtime/transport.ts +198 -0
  605. package/src/runtime/utils.ts +54 -0
  606. package/src/runtime-header-utils.ts +23 -0
  607. package/src/runtime-oauth-support.ts +24 -0
  608. package/src/runtime-process-utils.ts +324 -0
  609. package/src/runtime.ts +321 -0
  610. package/src/schema-cache.ts +49 -0
  611. package/src/sdk-patches.ts +498 -0
  612. package/src/server-proxy.ts +407 -0
  613. package/tests/adhoc-server.test.ts +49 -0
  614. package/tests/call-arguments.test.ts +111 -0
  615. package/tests/cli-auth-help.test.ts +43 -0
  616. package/tests/cli-auth-retry.test.ts +41 -0
  617. package/tests/cli-auth.test.ts +96 -0
  618. package/tests/cli-call-args.test.ts +69 -0
  619. package/tests/cli-call-errors.test.ts +27 -0
  620. package/tests/cli-call-execution.test.ts +279 -0
  621. package/tests/cli-call-help.test.ts +43 -0
  622. package/tests/cli-command-inference.test.ts +73 -0
  623. package/tests/cli-config-command.test.ts +371 -0
  624. package/tests/cli-config-fallback.test.ts +259 -0
  625. package/tests/cli-config-routing.test.ts +20 -0
  626. package/tests/cli-ephemeral-flags.test.ts +54 -0
  627. package/tests/cli-flag-utils.test.ts +17 -0
  628. package/tests/cli-generate-artifacts.test.ts +52 -0
  629. package/tests/cli-generate-cli.integration.test.ts +675 -0
  630. package/tests/cli-generate-runner.test.ts +156 -0
  631. package/tests/cli-global-flags.test.ts +61 -0
  632. package/tests/cli-help-shortcuts.test.ts +42 -0
  633. package/tests/cli-image-output.test.ts +65 -0
  634. package/tests/cli-inspect-command.test.ts +15 -0
  635. package/tests/cli-list-classification.test.ts +291 -0
  636. package/tests/cli-list-flags.test.ts +83 -0
  637. package/tests/cli-list-formatting.test.ts +358 -0
  638. package/tests/cli-list-help.test.ts +43 -0
  639. package/tests/cli-list-json.test.ts +55 -0
  640. package/tests/cli-list-stdio-logs.test.ts +108 -0
  641. package/tests/cli-list-verbose-e2e.test.ts +83 -0
  642. package/tests/cli-oauth-timeout-flag.test.ts +94 -0
  643. package/tests/cli-output-utils.test.ts +129 -0
  644. package/tests/cli-regenerate.test.ts +261 -0
  645. package/tests/cli-version.test.ts +24 -0
  646. package/tests/config-add-dry-run.test.ts +45 -0
  647. package/tests/config-add-flags.test.ts +61 -0
  648. package/tests/config-add-imports.test.ts +28 -0
  649. package/tests/config-add-persist.test.ts +27 -0
  650. package/tests/config-add-scope-behavior.test.ts +46 -0
  651. package/tests/config-add-scope.test.ts +101 -0
  652. package/tests/config-add-sse.test.ts +23 -0
  653. package/tests/config-command-string.test.ts +96 -0
  654. package/tests/config-doctor.test.ts +45 -0
  655. package/tests/config-get-json.test.ts +24 -0
  656. package/tests/config-import-dedupe.test.ts +27 -0
  657. package/tests/config-import-paths.test.ts +49 -0
  658. package/tests/config-import.test.ts +64 -0
  659. package/tests/config-imports-unit.test.ts +337 -0
  660. package/tests/config-imports.test.ts +417 -0
  661. package/tests/config-layered.test.ts +178 -0
  662. package/tests/config-list-text-footer.test.ts +33 -0
  663. package/tests/config-list.test.ts +62 -0
  664. package/tests/config-missing.test.ts +140 -0
  665. package/tests/config-normalize.test.ts +71 -0
  666. package/tests/config-remove.test.ts +44 -0
  667. package/tests/config-render.test.ts +61 -0
  668. package/tests/config-resolution.test.ts +94 -0
  669. package/tests/config-schema-file.test.ts +29 -0
  670. package/tests/config-shared.test.ts +41 -0
  671. package/tests/config-sources.test.ts +58 -0
  672. package/tests/daemon-cli-command.test.ts +112 -0
  673. package/tests/daemon-client-config-stale.test.ts +222 -0
  674. package/tests/daemon-client-timeout.test.ts +114 -0
  675. package/tests/daemon-client.test.ts +61 -0
  676. package/tests/daemon-host.test.ts +33 -0
  677. package/tests/daemon.integration.test.ts +175 -0
  678. package/tests/emit-ts.test.ts +125 -0
  679. package/tests/ephemeral-target.test.ts +26 -0
  680. package/tests/error-classifier.test.ts +46 -0
  681. package/tests/fixtures/ansi.ts +18 -0
  682. package/tests/fixtures/cli-list-fixtures.ts +43 -0
  683. package/tests/fixtures/config-fixture.ts +29 -0
  684. package/tests/fixtures/imports/.claude/mcp.json +8 -0
  685. package/tests/fixtures/imports/.claude/settings.json +10 -0
  686. package/tests/fixtures/imports/.claude/settings.local.json +10 -0
  687. package/tests/fixtures/imports/.codeium/windsurf/mcp_config.json +14 -0
  688. package/tests/fixtures/imports/.codex/config.toml +7 -0
  689. package/tests/fixtures/imports/.config/opencode/opencode.jsonc +10 -0
  690. package/tests/fixtures/imports/.cursor/mcp.json +14 -0
  691. package/tests/fixtures/imports/Library/Application Support/Code/User/mcp.json +11 -0
  692. package/tests/fixtures/imports/config/mcporter.json +11 -0
  693. package/tests/fixtures/imports/home/.claude/settings.json +7 -0
  694. package/tests/fixtures/imports/home/.codeium/windsurf/mcp_config.json +14 -0
  695. package/tests/fixtures/imports/home/.codex/config.toml +7 -0
  696. package/tests/fixtures/imports/home/Library/Application Support/Code/User/mcp.json +11 -0
  697. package/tests/fixtures/imports/opencode.jsonc +11 -0
  698. package/tests/fixtures/mcporter.json +64 -0
  699. package/tests/fixtures/stdio-filesystem-server.mjs +63 -0
  700. package/tests/fixtures/stdio-memory-server.mjs +58 -0
  701. package/tests/fixtures/test-helpers.ts +24 -0
  702. package/tests/fixtures/tool-fixtures.ts +35 -0
  703. package/tests/fs-json.test.ts +35 -0
  704. package/tests/generate-cli-helpers.test.ts +162 -0
  705. package/tests/generate-cli.test.ts +595 -0
  706. package/tests/generate-definition.test.ts +25 -0
  707. package/tests/generator-flag-parser.test.ts +19 -0
  708. package/tests/index-api.test.ts +136 -0
  709. package/tests/keep-alive-runtime.test.ts +152 -0
  710. package/tests/lifecycle.test.ts +29 -0
  711. package/tests/list-detail-helpers.test.ts +204 -0
  712. package/tests/list-format.test.ts +40 -0
  713. package/tests/list-inline-stdio.test.ts +71 -0
  714. package/tests/list-output.test.ts +138 -0
  715. package/tests/live/deepwiki-live.test.ts +53 -0
  716. package/tests/oauth-callback.test.ts +108 -0
  717. package/tests/oauth-open-external.test.ts +29 -0
  718. package/tests/oauth-persistence.test.ts +146 -0
  719. package/tests/oauth-session.test.ts +216 -0
  720. package/tests/result-utils.test.ts +254 -0
  721. package/tests/runtime-call-timeout.test.ts +75 -0
  722. package/tests/runtime-compose.test.ts +298 -0
  723. package/tests/runtime-error-reset.test.ts +65 -0
  724. package/tests/runtime-header-utils.test.ts +36 -0
  725. package/tests/runtime-integration.test.ts +113 -0
  726. package/tests/runtime-oauth-connect.test.ts +72 -0
  727. package/tests/runtime-oauth-detection.test.ts +72 -0
  728. package/tests/runtime-oauth-timeout.test.ts +60 -0
  729. package/tests/runtime-oauth-utils.test.ts +14 -0
  730. package/tests/runtime-process-utils.test.ts +53 -0
  731. package/tests/runtime-transport.test.ts +69 -0
  732. package/tests/runtime-utils.test.ts +31 -0
  733. package/tests/runtime.test.ts +94 -0
  734. package/tests/sdk-patches.test.ts +24 -0
  735. package/tests/server-proxy.test.ts +336 -0
  736. package/tests/stdio-servers.integration.test.ts +139 -0
  737. package/tests/tool-cache.test.ts +42 -0
  738. package/tests/version-consistency.test.ts +11 -0
  739. package/tsconfig.build.json +11 -0
  740. package/tsconfig.json +17 -0
  741. package/vitest.config.ts +18 -0
@@ -0,0 +1,278 @@
1
+ import { analyzeConnectionError, type ConnectionIssue } from './error-classifier.js';
2
+
3
+ export interface ImageContent {
4
+ data: string;
5
+ mimeType: string;
6
+ }
7
+
8
+ export interface CallResult<T = unknown> {
9
+ raw: T;
10
+ text(joiner?: string): string | null;
11
+ markdown(joiner?: string): string | null;
12
+ json<J = unknown>(): J | null;
13
+ images(): ImageContent[] | null;
14
+ content(): unknown[] | null;
15
+ structuredContent(): unknown;
16
+ }
17
+
18
+ interface ExtractedEnvelope {
19
+ content: unknown[] | null;
20
+ structuredContent: unknown;
21
+ }
22
+
23
+ interface CollectedCallContent {
24
+ content: unknown[] | null;
25
+ structuredContent: unknown;
26
+ textEntries: string[];
27
+ markdownEntries: string[];
28
+ jsonCandidates: unknown[];
29
+ images: ImageContent[];
30
+ }
31
+
32
+ function extractEnvelope(raw: unknown): ExtractedEnvelope {
33
+ if (!raw || typeof raw !== 'object') {
34
+ return { content: null, structuredContent: null };
35
+ }
36
+
37
+ const obj = raw as Record<string, unknown>;
38
+ let content: unknown[] | null = null;
39
+ let structuredContent: unknown = null;
40
+
41
+ if ('content' in obj && Array.isArray(obj.content)) {
42
+ content = obj.content as unknown[];
43
+ }
44
+ if ('structuredContent' in obj) {
45
+ structuredContent = obj.structuredContent;
46
+ }
47
+
48
+ if ('raw' in obj && obj.raw && typeof obj.raw === 'object') {
49
+ const nested = obj.raw as Record<string, unknown>;
50
+ if (!content && 'content' in nested && Array.isArray(nested.content)) {
51
+ content = nested.content as unknown[];
52
+ }
53
+ if (structuredContent === null && 'structuredContent' in nested) {
54
+ structuredContent = nested.structuredContent;
55
+ }
56
+ }
57
+
58
+ return { content, structuredContent };
59
+ }
60
+
61
+ // asString converts known content/value shapes into plain strings.
62
+ function asString(value: unknown): string | null {
63
+ if (typeof value === 'string') {
64
+ return value;
65
+ }
66
+ if (value && typeof value === 'object' && 'text' in value) {
67
+ const text = (value as Record<string, unknown>).text;
68
+ return typeof text === 'string' ? text : null;
69
+ }
70
+ return null;
71
+ }
72
+
73
+ function collectCallContent(raw: unknown): CollectedCallContent {
74
+ const envelope = extractEnvelope(raw);
75
+ const textEntries: string[] = [];
76
+ const markdownEntries: string[] = [];
77
+ const jsonCandidates: unknown[] = [];
78
+ const images: ImageContent[] = [];
79
+
80
+ if (!envelope.content) {
81
+ return {
82
+ content: envelope.content,
83
+ structuredContent: envelope.structuredContent,
84
+ textEntries,
85
+ markdownEntries,
86
+ jsonCandidates,
87
+ images,
88
+ };
89
+ }
90
+
91
+ for (const entry of envelope.content) {
92
+ if (typeof entry === 'string') {
93
+ const parsed = tryParseJson(entry);
94
+ if (parsed !== null) {
95
+ jsonCandidates.push(parsed);
96
+ }
97
+ continue;
98
+ }
99
+ if (!entry || typeof entry !== 'object' || !('type' in entry)) {
100
+ continue;
101
+ }
102
+
103
+ const typedEntry = entry as Record<string, unknown>;
104
+ if (typedEntry.type === 'json') {
105
+ const parsed = tryParseJson(entry);
106
+ if (parsed !== null) {
107
+ jsonCandidates.push(parsed);
108
+ }
109
+ continue;
110
+ }
111
+ if (typedEntry.type === 'image') {
112
+ const data = typedEntry.data;
113
+ const mimeType = typedEntry.mimeType ?? 'image/png';
114
+ if (typeof data === 'string' && typeof mimeType === 'string') {
115
+ images.push({ data, mimeType });
116
+ }
117
+ continue;
118
+ }
119
+ if (typedEntry.type !== 'text' && typedEntry.type !== 'markdown') {
120
+ continue;
121
+ }
122
+
123
+ const text = asString(entry);
124
+ if (!text) {
125
+ continue;
126
+ }
127
+ textEntries.push(text);
128
+ if (typedEntry.type === 'markdown') {
129
+ markdownEntries.push(text);
130
+ }
131
+ const parsed = tryParseJson(text);
132
+ if (parsed !== null) {
133
+ jsonCandidates.push(parsed);
134
+ }
135
+ }
136
+
137
+ return {
138
+ content: envelope.content,
139
+ structuredContent: envelope.structuredContent,
140
+ textEntries,
141
+ markdownEntries,
142
+ jsonCandidates,
143
+ images,
144
+ };
145
+ }
146
+
147
+ function collectText(entries: string[], joiner: string): string | null {
148
+ if (entries.length === 0) {
149
+ return null;
150
+ }
151
+ return entries.join(joiner);
152
+ }
153
+
154
+ function collectImages(images: ImageContent[]): ImageContent[] | null {
155
+ if (images.length === 0) {
156
+ return null;
157
+ }
158
+ return images;
159
+ }
160
+
161
+ // tryParseJson pulls JSON payloads out of structured responses or raw strings.
162
+ function tryParseJson(value: unknown): unknown {
163
+ if (value === undefined || value === null) {
164
+ return null;
165
+ }
166
+ if (typeof value === 'object') {
167
+ if ('json' in (value as Record<string, unknown>)) {
168
+ return (value as Record<string, unknown>).json ?? null;
169
+ }
170
+ if ('data' in (value as Record<string, unknown>)) {
171
+ return (value as Record<string, unknown>).data ?? null;
172
+ }
173
+ }
174
+ if (typeof value === 'string') {
175
+ try {
176
+ return JSON.parse(value);
177
+ } catch {
178
+ return null;
179
+ }
180
+ }
181
+ return null;
182
+ }
183
+
184
+ // createCallResult wraps a tool response with helpers for common content types.
185
+ export function createCallResult<T = unknown>(raw: T): CallResult<T> {
186
+ let cachedContent: CollectedCallContent | undefined;
187
+ const getCollectedContent = (): CollectedCallContent => {
188
+ if (cachedContent) {
189
+ return cachedContent;
190
+ }
191
+ cachedContent = collectCallContent(raw);
192
+ return cachedContent;
193
+ };
194
+
195
+ return {
196
+ raw,
197
+ text(joiner = '\n') {
198
+ if (raw == null) {
199
+ return null;
200
+ }
201
+ if (typeof raw === 'string') {
202
+ return raw;
203
+ }
204
+
205
+ const collected = getCollectedContent();
206
+ const combinedText = collectText(collected.textEntries, joiner);
207
+ if (combinedText) {
208
+ return combinedText;
209
+ }
210
+ return asString(collected.structuredContent);
211
+ },
212
+ markdown(joiner = '\n') {
213
+ const collected = getCollectedContent();
214
+ const structured = collected.structuredContent;
215
+ if (structured && typeof structured === 'object') {
216
+ const markdown = (structured as Record<string, unknown>).markdown;
217
+ if (typeof markdown === 'string') {
218
+ return markdown;
219
+ }
220
+ }
221
+ return collectText(collected.markdownEntries, joiner);
222
+ },
223
+ json<J = unknown>() {
224
+ const collected = getCollectedContent();
225
+ const parsedStructured = tryParseJson(collected.structuredContent);
226
+ if (parsedStructured !== null) {
227
+ return parsedStructured as J;
228
+ }
229
+ if (collected.jsonCandidates.length === 1) {
230
+ return collected.jsonCandidates[0] as J;
231
+ }
232
+ if (collected.jsonCandidates.length > 1) {
233
+ return collected.jsonCandidates as J;
234
+ }
235
+ if (typeof raw === 'string') {
236
+ const parsedRaw = tryParseJson(raw);
237
+ if (parsedRaw !== null) {
238
+ return parsedRaw as J;
239
+ }
240
+ }
241
+ const textContent = this.text?.();
242
+ if (typeof textContent === 'string') {
243
+ const parsedText = tryParseJson(textContent);
244
+ if (parsedText !== null) {
245
+ return parsedText as J;
246
+ }
247
+ }
248
+ const markdownContent = this.markdown?.();
249
+ if (typeof markdownContent === 'string') {
250
+ const parsedMarkdown = tryParseJson(markdownContent);
251
+ if (parsedMarkdown !== null) {
252
+ return parsedMarkdown as J;
253
+ }
254
+ }
255
+ return null;
256
+ },
257
+ images() {
258
+ const collected = getCollectedContent();
259
+ return collectImages(collected.images);
260
+ },
261
+ content() {
262
+ return getCollectedContent().content;
263
+ },
264
+ structuredContent() {
265
+ return getCollectedContent().structuredContent;
266
+ },
267
+ };
268
+ }
269
+
270
+ export type { ConnectionIssue } from './error-classifier.js';
271
+
272
+ export function describeConnectionIssue(error: unknown): ConnectionIssue {
273
+ return analyzeConnectionError(error);
274
+ }
275
+
276
+ export function wrapCallResult<T = unknown>(raw: T): { raw: T; callResult: CallResult<T> } {
277
+ return { raw, callResult: createCallResult(raw) };
278
+ }
@@ -0,0 +1,17 @@
1
+ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
2
+
3
+ const NON_FATAL_MCP_ERROR_CODES = new Set([
4
+ ErrorCode.InvalidRequest,
5
+ ErrorCode.MethodNotFound,
6
+ ErrorCode.InvalidParams,
7
+ ]);
8
+
9
+ export function shouldResetConnection(error: unknown): boolean {
10
+ if (!error) {
11
+ return false;
12
+ }
13
+ if (error instanceof McpError) {
14
+ return !NON_FATAL_MCP_ERROR_CODES.has(error.code);
15
+ }
16
+ return error instanceof Error;
17
+ }
@@ -0,0 +1,112 @@
1
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
3
+ import type { Logger } from '../logging.js';
4
+ import type { OAuthSession } from '../oauth.js';
5
+ import { isUnauthorizedError } from '../runtime-oauth-support.js';
6
+
7
+ export const DEFAULT_OAUTH_CODE_TIMEOUT_MS = 60_000;
8
+
9
+ export class OAuthTimeoutError extends Error {
10
+ public readonly timeoutMs: number;
11
+ public readonly serverName: string;
12
+
13
+ constructor(serverName: string, timeoutMs: number) {
14
+ const seconds = Math.round(timeoutMs / 1000);
15
+ super(`OAuth authorization for '${serverName}' timed out after ${seconds}s; aborting.`);
16
+ this.name = 'OAuthTimeoutError';
17
+ this.timeoutMs = timeoutMs;
18
+ this.serverName = serverName;
19
+ }
20
+ }
21
+
22
+ export async function connectWithAuth(
23
+ client: Client,
24
+ transport: Transport & {
25
+ close(): Promise<void>;
26
+ finishAuth?: (authorizationCode: string) => Promise<void>;
27
+ },
28
+ session: OAuthSession | undefined,
29
+ logger: Logger,
30
+ options: { serverName?: string; maxAttempts?: number; oauthTimeoutMs?: number } = {}
31
+ ): Promise<void> {
32
+ const { serverName, maxAttempts = 3, oauthTimeoutMs = DEFAULT_OAUTH_CODE_TIMEOUT_MS } = options;
33
+ let attempt = 0;
34
+ while (true) {
35
+ try {
36
+ await client.connect(transport);
37
+ return;
38
+ } catch (error) {
39
+ if (!isUnauthorizedError(error) || !session) {
40
+ throw error;
41
+ }
42
+ attempt += 1;
43
+ if (attempt > maxAttempts) {
44
+ throw error;
45
+ }
46
+ logger.warn(`OAuth authorization required for '${serverName ?? 'unknown'}'. Waiting for browser approval...`);
47
+ try {
48
+ const code = await waitForAuthorizationCodeWithTimeout(
49
+ session,
50
+ logger,
51
+ serverName,
52
+ oauthTimeoutMs ?? DEFAULT_OAUTH_CODE_TIMEOUT_MS
53
+ );
54
+ if (typeof transport.finishAuth === 'function') {
55
+ await transport.finishAuth(code);
56
+ logger.info('Authorization code accepted. Retrying connection...');
57
+ } else {
58
+ logger.warn('Transport does not support finishAuth; cannot complete OAuth flow automatically.');
59
+ throw error;
60
+ }
61
+ } catch (authError) {
62
+ logger.error('OAuth authorization failed while waiting for callback.', authError);
63
+ throw authError;
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ // Race the pending OAuth browser handshake so the runtime can't sit on an unresolved promise forever.
70
+ export function waitForAuthorizationCodeWithTimeout(
71
+ session: OAuthSession,
72
+ logger: Logger,
73
+ serverName?: string,
74
+ timeoutMs = DEFAULT_OAUTH_CODE_TIMEOUT_MS
75
+ ): Promise<string> {
76
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
77
+ return session.waitForAuthorizationCode();
78
+ }
79
+ const displayName = serverName ?? 'unknown';
80
+ return new Promise<string>((resolve, reject) => {
81
+ const timer = setTimeout(() => {
82
+ const error = new OAuthTimeoutError(displayName, timeoutMs);
83
+ logger.warn(error.message);
84
+ reject(error);
85
+ }, timeoutMs);
86
+ session.waitForAuthorizationCode().then(
87
+ (code) => {
88
+ clearTimeout(timer);
89
+ resolve(code);
90
+ },
91
+ (error) => {
92
+ clearTimeout(timer);
93
+ reject(error);
94
+ }
95
+ );
96
+ });
97
+ }
98
+
99
+ export function parseOAuthTimeout(raw: string | undefined): number {
100
+ if (!raw) {
101
+ return DEFAULT_OAUTH_CODE_TIMEOUT_MS;
102
+ }
103
+ const parsed = Number.parseInt(raw, 10);
104
+ if (!Number.isFinite(parsed) || parsed <= 0) {
105
+ return DEFAULT_OAUTH_CODE_TIMEOUT_MS;
106
+ }
107
+ return parsed;
108
+ }
109
+
110
+ export function resolveOAuthTimeoutFromEnv(): number {
111
+ return parseOAuthTimeout(process.env.MCPORTER_OAUTH_TIMEOUT_MS ?? process.env.MCPORTER_OAUTH_TIMEOUT);
112
+ }
@@ -0,0 +1,198 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
3
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
4
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
5
+ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
6
+ import type { ServerDefinition } from '../config.js';
7
+ import { resolveEnvValue, withEnvOverrides } from '../env.js';
8
+ import type { Logger } from '../logging.js';
9
+ import { createOAuthSession, type OAuthSession } from '../oauth.js';
10
+ import { readCachedAccessToken } from '../oauth-persistence.js';
11
+ import { materializeHeaders } from '../runtime-header-utils.js';
12
+ import { isUnauthorizedError, maybeEnableOAuth } from '../runtime-oauth-support.js';
13
+ import { closeTransportAndWait } from '../runtime-process-utils.js';
14
+ import { connectWithAuth, OAuthTimeoutError } from './oauth.js';
15
+ import { resolveCommandArgument, resolveCommandArguments } from './utils.js';
16
+
17
+ const STDIO_TRACE_ENABLED = process.env.MCPORTER_STDIO_TRACE === '1';
18
+
19
+ function attachStdioTraceLogging(_transport: StdioClientTransport, _label?: string): void {
20
+ // STDIO instrumentation is handled via sdk-patches side effects. This helper remains
21
+ // so runtime callers can opt-in without sprinkling conditional checks everywhere.
22
+ }
23
+
24
+ export interface ClientContext {
25
+ readonly client: Client;
26
+ readonly transport: Transport & { close(): Promise<void> };
27
+ readonly definition: ServerDefinition;
28
+ readonly oauthSession?: OAuthSession;
29
+ }
30
+
31
+ export interface CreateClientContextOptions {
32
+ readonly maxOAuthAttempts?: number;
33
+ readonly oauthTimeoutMs?: number;
34
+ readonly onDefinitionPromoted?: (definition: ServerDefinition) => void;
35
+ readonly allowCachedAuth?: boolean;
36
+ }
37
+
38
+ export async function createClientContext(
39
+ definition: ServerDefinition,
40
+ logger: Logger,
41
+ clientInfo: { name: string; version: string },
42
+ options: CreateClientContextOptions = {}
43
+ ): Promise<ClientContext> {
44
+ const client = new Client(clientInfo);
45
+ let activeDefinition = definition;
46
+
47
+ if (options.allowCachedAuth && activeDefinition.auth === 'oauth' && activeDefinition.command.kind === 'http') {
48
+ try {
49
+ const cached = await readCachedAccessToken(activeDefinition, logger);
50
+ if (cached) {
51
+ const existingHeaders = activeDefinition.command.headers ?? {};
52
+ if (!('Authorization' in existingHeaders)) {
53
+ activeDefinition = {
54
+ ...activeDefinition,
55
+ command: {
56
+ ...activeDefinition.command,
57
+ headers: {
58
+ ...existingHeaders,
59
+ Authorization: `Bearer ${cached}`,
60
+ },
61
+ },
62
+ };
63
+ logger.debug?.(`Using cached OAuth access token for '${activeDefinition.name}' (non-interactive).`);
64
+ }
65
+ }
66
+ } catch (error) {
67
+ logger.debug?.(
68
+ `Failed to read cached OAuth token for '${activeDefinition.name}': ${
69
+ error instanceof Error ? error.message : String(error)
70
+ }`
71
+ );
72
+ }
73
+ }
74
+
75
+ return withEnvOverrides(activeDefinition.env, async () => {
76
+ if (activeDefinition.command.kind === 'stdio') {
77
+ const resolvedEnvOverrides =
78
+ activeDefinition.env && Object.keys(activeDefinition.env).length > 0
79
+ ? Object.fromEntries(
80
+ Object.entries(activeDefinition.env)
81
+ .map(([key, raw]) => [key, resolveEnvValue(raw)])
82
+ .filter(([, value]) => value !== '')
83
+ )
84
+ : undefined;
85
+ const mergedEnv =
86
+ resolvedEnvOverrides && Object.keys(resolvedEnvOverrides).length > 0
87
+ ? { ...process.env, ...resolvedEnvOverrides }
88
+ : { ...process.env };
89
+ const transport = new StdioClientTransport({
90
+ command: resolveCommandArgument(activeDefinition.command.command),
91
+ args: resolveCommandArguments(activeDefinition.command.args),
92
+ cwd: activeDefinition.command.cwd,
93
+ env: mergedEnv,
94
+ });
95
+ if (STDIO_TRACE_ENABLED) {
96
+ attachStdioTraceLogging(transport, activeDefinition.name ?? activeDefinition.command.command);
97
+ }
98
+ try {
99
+ await client.connect(transport);
100
+ } catch (error) {
101
+ await closeTransportAndWait(logger, transport).catch(() => {});
102
+ throw error;
103
+ }
104
+ return { client, transport, definition: activeDefinition, oauthSession: undefined };
105
+ }
106
+
107
+ while (true) {
108
+ const command = activeDefinition.command;
109
+ if (command.kind !== 'http') {
110
+ throw new Error(`Server '${activeDefinition.name}' is not configured for HTTP transport.`);
111
+ }
112
+ let oauthSession: OAuthSession | undefined;
113
+ const shouldEstablishOAuth = activeDefinition.auth === 'oauth' && options.maxOAuthAttempts !== 0;
114
+ if (shouldEstablishOAuth) {
115
+ oauthSession = await createOAuthSession(activeDefinition, logger);
116
+ }
117
+
118
+ const resolvedHeaders = materializeHeaders(command.headers, activeDefinition.name);
119
+ const requestInit: RequestInit | undefined = resolvedHeaders
120
+ ? { headers: resolvedHeaders as HeadersInit }
121
+ : undefined;
122
+ const baseOptions = {
123
+ requestInit,
124
+ authProvider: oauthSession?.provider,
125
+ };
126
+
127
+ const attemptConnect = async () => {
128
+ const streamableTransport = new StreamableHTTPClientTransport(command.url, baseOptions);
129
+ try {
130
+ await connectWithAuth(client, streamableTransport, oauthSession, logger, {
131
+ serverName: activeDefinition.name,
132
+ maxAttempts: options.maxOAuthAttempts,
133
+ oauthTimeoutMs: options.oauthTimeoutMs,
134
+ });
135
+ return {
136
+ client,
137
+ transport: streamableTransport,
138
+ definition: activeDefinition,
139
+ oauthSession,
140
+ } as ClientContext;
141
+ } catch (error) {
142
+ await closeTransportAndWait(logger, streamableTransport).catch(() => {});
143
+ throw error;
144
+ }
145
+ };
146
+
147
+ try {
148
+ return await attemptConnect();
149
+ } catch (primaryError) {
150
+ if (isUnauthorizedError(primaryError)) {
151
+ await oauthSession?.close().catch(() => {});
152
+ oauthSession = undefined;
153
+ if (options.maxOAuthAttempts !== 0) {
154
+ const promoted = maybeEnableOAuth(activeDefinition, logger);
155
+ if (promoted) {
156
+ activeDefinition = promoted;
157
+ options.onDefinitionPromoted?.(promoted);
158
+ continue;
159
+ }
160
+ }
161
+ }
162
+ if (primaryError instanceof OAuthTimeoutError) {
163
+ await oauthSession?.close().catch(() => {});
164
+ throw primaryError;
165
+ }
166
+ if (primaryError instanceof Error) {
167
+ logger.info(`Falling back to SSE transport for '${activeDefinition.name}': ${primaryError.message}`);
168
+ }
169
+ const sseTransport = new SSEClientTransport(command.url, {
170
+ ...baseOptions,
171
+ });
172
+ try {
173
+ await connectWithAuth(client, sseTransport, oauthSession, logger, {
174
+ serverName: activeDefinition.name,
175
+ maxAttempts: options.maxOAuthAttempts,
176
+ oauthTimeoutMs: options.oauthTimeoutMs,
177
+ });
178
+ return { client, transport: sseTransport, definition: activeDefinition, oauthSession };
179
+ } catch (sseError) {
180
+ await closeTransportAndWait(logger, sseTransport).catch(() => {});
181
+ await oauthSession?.close().catch(() => {});
182
+ if (sseError instanceof OAuthTimeoutError) {
183
+ throw sseError;
184
+ }
185
+ if (isUnauthorizedError(sseError) && options.maxOAuthAttempts !== 0) {
186
+ const promoted = maybeEnableOAuth(activeDefinition, logger);
187
+ if (promoted) {
188
+ activeDefinition = promoted;
189
+ options.onDefinitionPromoted?.(promoted);
190
+ continue;
191
+ }
192
+ }
193
+ throw sseError;
194
+ }
195
+ }
196
+ }
197
+ });
198
+ }
@@ -0,0 +1,54 @@
1
+ import { resolveEnvPlaceholders } from '../env.js';
2
+
3
+ const ENV_PLACEHOLDER_PATTERN = /\$\{[A-Za-z_][A-Za-z0-9_]*\}/;
4
+
5
+ export function resolveCommandArgument(value: string): string {
6
+ if (!value) {
7
+ return value;
8
+ }
9
+ if (!value.includes('$')) {
10
+ return value;
11
+ }
12
+ const needsInterpolation = value.startsWith('$env:') || ENV_PLACEHOLDER_PATTERN.test(value);
13
+ if (!needsInterpolation) {
14
+ return value;
15
+ }
16
+ return resolveEnvPlaceholders(value);
17
+ }
18
+
19
+ export function resolveCommandArguments(args: readonly string[]): string[] {
20
+ if (!args || args.length === 0) {
21
+ return [];
22
+ }
23
+ return args.map((arg) => resolveCommandArgument(arg));
24
+ }
25
+
26
+ export function normalizeTimeout(raw?: number): number | undefined {
27
+ if (raw == null) {
28
+ return undefined;
29
+ }
30
+ if (!Number.isFinite(raw)) {
31
+ return undefined;
32
+ }
33
+ const coerced = Math.trunc(raw);
34
+ return coerced > 0 ? coerced : undefined;
35
+ }
36
+
37
+ export function raceWithTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
38
+ return new Promise<T>((resolve, reject) => {
39
+ const timer = setTimeout(() => {
40
+ // Reject with a Timeout error; higher-level catch blocks decide whether to recycle the transport.
41
+ reject(new Error('Timeout'));
42
+ }, timeoutMs);
43
+ promise.then(
44
+ (value) => {
45
+ clearTimeout(timer);
46
+ resolve(value);
47
+ },
48
+ (error) => {
49
+ clearTimeout(timer);
50
+ reject(error);
51
+ }
52
+ );
53
+ });
54
+ }
@@ -0,0 +1,23 @@
1
+ import { resolveEnvPlaceholders } from './env.js';
2
+
3
+ // materializeHeaders resolves environment placeholders in server header definitions.
4
+ export function materializeHeaders(
5
+ headers: Record<string, string> | undefined,
6
+ serverName: string
7
+ ): Record<string, string> | undefined {
8
+ if (!headers) {
9
+ return undefined;
10
+ }
11
+
12
+ const resolved: Record<string, string> = {};
13
+ for (const [key, value] of Object.entries(headers)) {
14
+ try {
15
+ resolved[key] = resolveEnvPlaceholders(value);
16
+ } catch (error) {
17
+ const message = error instanceof Error ? error.message : String(error);
18
+ throw new Error(`Failed to resolve header '${key}' for server '${serverName}': ${message}`);
19
+ }
20
+ }
21
+
22
+ return resolved;
23
+ }