@mastra/code-sdk 0.0.0-livekit-beta-v3-20260709031728

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 (460) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +50 -0
  4. package/dist/acp/agent.d.ts +35 -0
  5. package/dist/acp/agent.d.ts.map +1 -0
  6. package/dist/acp/agent.js +173 -0
  7. package/dist/acp/agent.js.map +1 -0
  8. package/dist/acp/event-mapper.d.ts +22 -0
  9. package/dist/acp/event-mapper.d.ts.map +1 -0
  10. package/dist/acp/event-mapper.js +166 -0
  11. package/dist/acp/event-mapper.js.map +1 -0
  12. package/dist/acp/index.d.ts +8 -0
  13. package/dist/acp/index.d.ts.map +1 -0
  14. package/dist/acp/index.js +54 -0
  15. package/dist/acp/index.js.map +1 -0
  16. package/dist/acp/server.d.ts +7 -0
  17. package/dist/acp/server.d.ts.map +1 -0
  18. package/dist/acp/server.js +34 -0
  19. package/dist/acp/server.js.map +1 -0
  20. package/dist/acp.d.ts +2 -0
  21. package/dist/acp.d.ts.map +1 -0
  22. package/dist/acp.js +5 -0
  23. package/dist/acp.js.map +1 -0
  24. package/dist/agents/instructions.d.ts +6 -0
  25. package/dist/agents/instructions.d.ts.map +1 -0
  26. package/dist/agents/instructions.js +41 -0
  27. package/dist/agents/instructions.js.map +1 -0
  28. package/dist/agents/mastracode-gateway.d.ts +65 -0
  29. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  30. package/dist/agents/mastracode-gateway.js +442 -0
  31. package/dist/agents/mastracode-gateway.js.map +1 -0
  32. package/dist/agents/memory.d.ts +13 -0
  33. package/dist/agents/memory.d.ts.map +1 -0
  34. package/dist/agents/memory.js +107 -0
  35. package/dist/agents/memory.js.map +1 -0
  36. package/dist/agents/model.d.ts +55 -0
  37. package/dist/agents/model.d.ts.map +1 -0
  38. package/dist/agents/model.js +115 -0
  39. package/dist/agents/model.js.map +1 -0
  40. package/dist/agents/modes/build.d.ts +10 -0
  41. package/dist/agents/modes/build.d.ts.map +1 -0
  42. package/dist/agents/modes/build.js +45 -0
  43. package/dist/agents/modes/build.js.map +1 -0
  44. package/dist/agents/modes/explore.d.ts +10 -0
  45. package/dist/agents/modes/explore.d.ts.map +1 -0
  46. package/dist/agents/modes/explore.js +38 -0
  47. package/dist/agents/modes/explore.js.map +1 -0
  48. package/dist/agents/modes/plan.d.ts +6 -0
  49. package/dist/agents/modes/plan.d.ts.map +1 -0
  50. package/dist/agents/modes/plan.js +38 -0
  51. package/dist/agents/modes/plan.js.map +1 -0
  52. package/dist/agents/prompts/agent-instructions.d.ts +20 -0
  53. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  54. package/dist/agents/prompts/agent-instructions.js +82 -0
  55. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  56. package/dist/agents/prompts/build.d.ts +12 -0
  57. package/dist/agents/prompts/build.d.ts.map +1 -0
  58. package/dist/agents/prompts/build.js +73 -0
  59. package/dist/agents/prompts/build.js.map +1 -0
  60. package/dist/agents/prompts/fast.d.ts +5 -0
  61. package/dist/agents/prompts/fast.d.ts.map +1 -0
  62. package/dist/agents/prompts/fast.js +22 -0
  63. package/dist/agents/prompts/fast.js.map +1 -0
  64. package/dist/agents/prompts/index.d.ts +19 -0
  65. package/dist/agents/prompts/index.d.ts.map +1 -0
  66. package/dist/agents/prompts/index.js +57 -0
  67. package/dist/agents/prompts/index.js.map +1 -0
  68. package/dist/agents/prompts/model.d.ts +5 -0
  69. package/dist/agents/prompts/model.d.ts.map +1 -0
  70. package/dist/agents/prompts/model.js +22 -0
  71. package/dist/agents/prompts/model.js.map +1 -0
  72. package/dist/agents/prompts/plan.d.ts +6 -0
  73. package/dist/agents/prompts/plan.d.ts.map +1 -0
  74. package/dist/agents/prompts/plan.js +107 -0
  75. package/dist/agents/prompts/plan.js.map +1 -0
  76. package/dist/agents/prompts/tool-guidance.d.ts +13 -0
  77. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  78. package/dist/agents/prompts/tool-guidance.js +181 -0
  79. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  80. package/dist/agents/sandbox-filesystem.d.ts +89 -0
  81. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  82. package/dist/agents/sandbox-filesystem.js +268 -0
  83. package/dist/agents/sandbox-filesystem.js.map +1 -0
  84. package/dist/agents/sandbox-reattach.d.ts +19 -0
  85. package/dist/agents/sandbox-reattach.d.ts.map +1 -0
  86. package/dist/agents/sandbox-reattach.js +17 -0
  87. package/dist/agents/sandbox-reattach.js.map +1 -0
  88. package/dist/agents/thread-caveman-state.d.ts +17 -0
  89. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  90. package/dist/agents/thread-caveman-state.js +96 -0
  91. package/dist/agents/thread-caveman-state.js.map +1 -0
  92. package/dist/agents/tool-availability.d.ts +10 -0
  93. package/dist/agents/tool-availability.d.ts.map +1 -0
  94. package/dist/agents/tool-availability.js +105 -0
  95. package/dist/agents/tool-availability.js.map +1 -0
  96. package/dist/agents/tools.d.ts +18 -0
  97. package/dist/agents/tools.d.ts.map +1 -0
  98. package/dist/agents/tools.js +126 -0
  99. package/dist/agents/tools.js.map +1 -0
  100. package/dist/agents/workspace.d.ts +22 -0
  101. package/dist/agents/workspace.d.ts.map +1 -0
  102. package/dist/agents/workspace.js +194 -0
  103. package/dist/agents/workspace.js.map +1 -0
  104. package/dist/analytics.d.ts +18 -0
  105. package/dist/analytics.d.ts.map +1 -0
  106. package/dist/analytics.js +152 -0
  107. package/dist/analytics.js.map +1 -0
  108. package/dist/auth/index.d.ts +9 -0
  109. package/dist/auth/index.d.ts.map +1 -0
  110. package/dist/auth/index.js +11 -0
  111. package/dist/auth/index.js.map +1 -0
  112. package/dist/auth/pkce.d.ts +13 -0
  113. package/dist/auth/pkce.d.ts.map +1 -0
  114. package/dist/auth/pkce.js +21 -0
  115. package/dist/auth/pkce.js.map +1 -0
  116. package/dist/auth/providers/anthropic.d.ts +17 -0
  117. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  118. package/dist/auth/providers/anthropic.js +94 -0
  119. package/dist/auth/providers/anthropic.js.map +1 -0
  120. package/dist/auth/providers/github-copilot.d.ts +100 -0
  121. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  122. package/dist/auth/providers/github-copilot.js +302 -0
  123. package/dist/auth/providers/github-copilot.js.map +1 -0
  124. package/dist/auth/providers/openai-codex.d.ts +95 -0
  125. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  126. package/dist/auth/providers/openai-codex.js +527 -0
  127. package/dist/auth/providers/openai-codex.js.map +1 -0
  128. package/dist/auth/storage.d.ts +91 -0
  129. package/dist/auth/storage.d.ts.map +1 -0
  130. package/dist/auth/storage.js +187 -0
  131. package/dist/auth/storage.js.map +1 -0
  132. package/dist/auth/types.d.ts +68 -0
  133. package/dist/auth/types.d.ts.map +1 -0
  134. package/dist/auth/types.js +1 -0
  135. package/dist/auth/types.js.map +1 -0
  136. package/dist/clipboard/index.d.ts +26 -0
  137. package/dist/clipboard/index.d.ts.map +1 -0
  138. package/dist/clipboard/index.js +192 -0
  139. package/dist/clipboard/index.js.map +1 -0
  140. package/dist/constants.d.ts +10 -0
  141. package/dist/constants.d.ts.map +1 -0
  142. package/dist/constants.js +23 -0
  143. package/dist/constants.js.map +1 -0
  144. package/dist/error-classification.d.ts +10 -0
  145. package/dist/error-classification.d.ts.map +1 -0
  146. package/dist/error-classification.js +14 -0
  147. package/dist/error-classification.js.map +1 -0
  148. package/dist/evals/context-builder.d.ts +41 -0
  149. package/dist/evals/context-builder.d.ts.map +1 -0
  150. package/dist/evals/context-builder.js +120 -0
  151. package/dist/evals/context-builder.js.map +1 -0
  152. package/dist/evals/index.d.ts +4 -0
  153. package/dist/evals/index.d.ts.map +1 -0
  154. package/dist/evals/index.js +8 -0
  155. package/dist/evals/index.js.map +1 -0
  156. package/dist/evals/scorers/classify-command.d.ts +31 -0
  157. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  158. package/dist/evals/scorers/classify-command.js +52 -0
  159. package/dist/evals/scorers/classify-command.js.map +1 -0
  160. package/dist/evals/scorers/efficiency.d.ts +44 -0
  161. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  162. package/dist/evals/scorers/efficiency.js +201 -0
  163. package/dist/evals/scorers/efficiency.js.map +1 -0
  164. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  165. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  166. package/dist/evals/scorers/extract-tools.js +56 -0
  167. package/dist/evals/scorers/extract-tools.js.map +1 -0
  168. package/dist/evals/scorers/index.d.ts +3 -0
  169. package/dist/evals/scorers/index.d.ts.map +1 -0
  170. package/dist/evals/scorers/index.js +7 -0
  171. package/dist/evals/scorers/index.js.map +1 -0
  172. package/dist/evals/scorers/outcome.d.ts +49 -0
  173. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  174. package/dist/evals/scorers/outcome.js +238 -0
  175. package/dist/evals/scorers/outcome.js.map +1 -0
  176. package/dist/headless/cli.d.ts +42 -0
  177. package/dist/headless/cli.d.ts.map +1 -0
  178. package/dist/headless/cli.js +196 -0
  179. package/dist/headless/cli.js.map +1 -0
  180. package/dist/headless/flags.d.ts +33 -0
  181. package/dist/headless/flags.d.ts.map +1 -0
  182. package/dist/headless/flags.js +188 -0
  183. package/dist/headless/flags.js.map +1 -0
  184. package/dist/headless/format.d.ts +38 -0
  185. package/dist/headless/format.d.ts.map +1 -0
  186. package/dist/headless/format.js +85 -0
  187. package/dist/headless/format.js.map +1 -0
  188. package/dist/headless/index.d.ts +25 -0
  189. package/dist/headless/index.d.ts.map +1 -0
  190. package/dist/headless/index.js +32 -0
  191. package/dist/headless/index.js.map +1 -0
  192. package/dist/headless/policy.d.ts +17 -0
  193. package/dist/headless/policy.d.ts.map +1 -0
  194. package/dist/headless/policy.js +38 -0
  195. package/dist/headless/policy.js.map +1 -0
  196. package/dist/headless/run-mc.d.ts +7 -0
  197. package/dist/headless/run-mc.d.ts.map +1 -0
  198. package/dist/headless/run-mc.js +296 -0
  199. package/dist/headless/run-mc.js.map +1 -0
  200. package/dist/headless/types.d.ts +134 -0
  201. package/dist/headless/types.d.ts.map +1 -0
  202. package/dist/headless/types.js +9 -0
  203. package/dist/headless/types.js.map +1 -0
  204. package/dist/hooks/config.d.ts +11 -0
  205. package/dist/hooks/config.d.ts.map +1 -0
  206. package/dist/hooks/config.js +78 -0
  207. package/dist/hooks/config.js.map +1 -0
  208. package/dist/hooks/executor.d.ts +13 -0
  209. package/dist/hooks/executor.d.ts.map +1 -0
  210. package/dist/hooks/executor.js +125 -0
  211. package/dist/hooks/executor.js.map +1 -0
  212. package/dist/hooks/index.d.ts +6 -0
  213. package/dist/hooks/index.d.ts.map +1 -0
  214. package/dist/hooks/index.js +16 -0
  215. package/dist/hooks/index.js.map +1 -0
  216. package/dist/hooks/manager.d.ts +47 -0
  217. package/dist/hooks/manager.d.ts.map +1 -0
  218. package/dist/hooks/manager.js +284 -0
  219. package/dist/hooks/manager.js.map +1 -0
  220. package/dist/hooks/types.d.ts +152 -0
  221. package/dist/hooks/types.d.ts.map +1 -0
  222. package/dist/hooks/types.js +7 -0
  223. package/dist/hooks/types.js.map +1 -0
  224. package/dist/index.d.ts +241 -0
  225. package/dist/index.d.ts.map +1 -0
  226. package/dist/index.js +712 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/ipc/ipc-reporter.d.ts +14 -0
  229. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  230. package/dist/ipc/ipc-reporter.js +24 -0
  231. package/dist/ipc/ipc-reporter.js.map +1 -0
  232. package/dist/lsp/client.d.ts +56 -0
  233. package/dist/lsp/client.d.ts.map +1 -0
  234. package/dist/lsp/client.js +309 -0
  235. package/dist/lsp/client.js.map +1 -0
  236. package/dist/lsp/index.d.ts +4 -0
  237. package/dist/lsp/index.d.ts.map +1 -0
  238. package/dist/lsp/index.js +9 -0
  239. package/dist/lsp/index.js.map +1 -0
  240. package/dist/lsp/language.d.ts +9 -0
  241. package/dist/lsp/language.d.ts.map +1 -0
  242. package/dist/lsp/language.js +48 -0
  243. package/dist/lsp/language.js.map +1 -0
  244. package/dist/lsp/manager.d.ts +34 -0
  245. package/dist/lsp/manager.d.ts.map +1 -0
  246. package/dist/lsp/manager.js +97 -0
  247. package/dist/lsp/manager.js.map +1 -0
  248. package/dist/lsp/server.d.ts +27 -0
  249. package/dist/lsp/server.d.ts.map +1 -0
  250. package/dist/lsp/server.js +128 -0
  251. package/dist/lsp/server.js.map +1 -0
  252. package/dist/lsp/workspace.d.ts +9 -0
  253. package/dist/lsp/workspace.d.ts.map +1 -0
  254. package/dist/lsp/workspace.js +52 -0
  255. package/dist/lsp/workspace.js.map +1 -0
  256. package/dist/mcp/config.d.ts +34 -0
  257. package/dist/mcp/config.d.ts.map +1 -0
  258. package/dist/mcp/config.js +205 -0
  259. package/dist/mcp/config.js.map +1 -0
  260. package/dist/mcp/index.d.ts +5 -0
  261. package/dist/mcp/index.d.ts.map +1 -0
  262. package/dist/mcp/index.js +10 -0
  263. package/dist/mcp/index.js.map +1 -0
  264. package/dist/mcp/manager.d.ts +49 -0
  265. package/dist/mcp/manager.d.ts.map +1 -0
  266. package/dist/mcp/manager.js +374 -0
  267. package/dist/mcp/manager.js.map +1 -0
  268. package/dist/mcp/types.d.ts +85 -0
  269. package/dist/mcp/types.d.ts.map +1 -0
  270. package/dist/mcp/types.js +1 -0
  271. package/dist/mcp/types.js.map +1 -0
  272. package/dist/onboarding/custom-packs.d.ts +7 -0
  273. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  274. package/dist/onboarding/custom-packs.js +20 -0
  275. package/dist/onboarding/custom-packs.js.map +1 -0
  276. package/dist/onboarding/custom-providers.d.ts +4 -0
  277. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  278. package/dist/onboarding/custom-providers.js +28 -0
  279. package/dist/onboarding/custom-providers.js.map +1 -0
  280. package/dist/onboarding/index.d.ts +5 -0
  281. package/dist/onboarding/index.d.ts.map +1 -0
  282. package/dist/onboarding/index.js +21 -0
  283. package/dist/onboarding/index.js.map +1 -0
  284. package/dist/onboarding/om-settings.d.ts +20 -0
  285. package/dist/onboarding/om-settings.d.ts.map +1 -0
  286. package/dist/onboarding/om-settings.js +26 -0
  287. package/dist/onboarding/om-settings.js.map +1 -0
  288. package/dist/onboarding/packs.d.ts +48 -0
  289. package/dist/onboarding/packs.d.ts.map +1 -0
  290. package/dist/onboarding/packs.js +111 -0
  291. package/dist/onboarding/packs.js.map +1 -0
  292. package/dist/onboarding/settings.d.ts +323 -0
  293. package/dist/onboarding/settings.d.ts.map +1 -0
  294. package/dist/onboarding/settings.js +594 -0
  295. package/dist/onboarding/settings.js.map +1 -0
  296. package/dist/permissions.d.ts +55 -0
  297. package/dist/permissions.d.ts.map +1 -0
  298. package/dist/permissions.js +119 -0
  299. package/dist/permissions.js.map +1 -0
  300. package/dist/plugin.d.ts +81 -0
  301. package/dist/plugin.d.ts.map +1 -0
  302. package/dist/plugin.js +30 -0
  303. package/dist/plugin.js.map +1 -0
  304. package/dist/plugins/dependencies.d.ts +9 -0
  305. package/dist/plugins/dependencies.d.ts.map +1 -0
  306. package/dist/plugins/dependencies.js +141 -0
  307. package/dist/plugins/dependencies.js.map +1 -0
  308. package/dist/plugins/install.d.ts +21 -0
  309. package/dist/plugins/install.d.ts.map +1 -0
  310. package/dist/plugins/install.js +200 -0
  311. package/dist/plugins/install.js.map +1 -0
  312. package/dist/plugins/loader.d.ts +15 -0
  313. package/dist/plugins/loader.d.ts.map +1 -0
  314. package/dist/plugins/loader.js +221 -0
  315. package/dist/plugins/loader.js.map +1 -0
  316. package/dist/plugins/manager.d.ts +60 -0
  317. package/dist/plugins/manager.d.ts.map +1 -0
  318. package/dist/plugins/manager.js +378 -0
  319. package/dist/plugins/manager.js.map +1 -0
  320. package/dist/plugins/manifest.d.ts +14 -0
  321. package/dist/plugins/manifest.d.ts.map +1 -0
  322. package/dist/plugins/manifest.js +75 -0
  323. package/dist/plugins/manifest.js.map +1 -0
  324. package/dist/plugins/package-link.d.ts +3 -0
  325. package/dist/plugins/package-link.d.ts.map +1 -0
  326. package/dist/plugins/package-link.js +77 -0
  327. package/dist/plugins/package-link.js.map +1 -0
  328. package/dist/plugins/paths.d.ts +10 -0
  329. package/dist/plugins/paths.d.ts.map +1 -0
  330. package/dist/plugins/paths.js +26 -0
  331. package/dist/plugins/paths.js.map +1 -0
  332. package/dist/plugins/registry.d.ts +8 -0
  333. package/dist/plugins/registry.d.ts.map +1 -0
  334. package/dist/plugins/registry.js +96 -0
  335. package/dist/plugins/registry.js.map +1 -0
  336. package/dist/plugins/scaffold.d.ts +10 -0
  337. package/dist/plugins/scaffold.d.ts.map +1 -0
  338. package/dist/plugins/scaffold.js +152 -0
  339. package/dist/plugins/scaffold.js.map +1 -0
  340. package/dist/plugins/types.d.ts +45 -0
  341. package/dist/plugins/types.d.ts.map +1 -0
  342. package/dist/plugins/types.js +1 -0
  343. package/dist/plugins/types.js.map +1 -0
  344. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  345. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  346. package/dist/processors/plan-rejection-abort.js +53 -0
  347. package/dist/processors/plan-rejection-abort.js.map +1 -0
  348. package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
  349. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  350. package/dist/providers/amazon-bedrock-gateway.js +79 -0
  351. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  352. package/dist/providers/amazon-bedrock.d.ts +28 -0
  353. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  354. package/dist/providers/amazon-bedrock.js +62 -0
  355. package/dist/providers/amazon-bedrock.js.map +1 -0
  356. package/dist/providers/claude-max.d.ts +50 -0
  357. package/dist/providers/claude-max.d.ts.map +1 -0
  358. package/dist/providers/claude-max.js +151 -0
  359. package/dist/providers/claude-max.js.map +1 -0
  360. package/dist/providers/github-copilot.d.ts +58 -0
  361. package/dist/providers/github-copilot.d.ts.map +1 -0
  362. package/dist/providers/github-copilot.js +263 -0
  363. package/dist/providers/github-copilot.js.map +1 -0
  364. package/dist/providers/openai-codex.d.ts +70 -0
  365. package/dist/providers/openai-codex.d.ts.map +1 -0
  366. package/dist/providers/openai-codex.js +291 -0
  367. package/dist/providers/openai-codex.js.map +1 -0
  368. package/dist/schema.d.ts +167 -0
  369. package/dist/schema.d.ts.map +1 -0
  370. package/dist/schema.js +92 -0
  371. package/dist/schema.js.map +1 -0
  372. package/dist/theme-palette.d.ts +17 -0
  373. package/dist/theme-palette.d.ts.map +1 -0
  374. package/dist/theme-palette.js +17 -0
  375. package/dist/theme-palette.js.map +1 -0
  376. package/dist/tool-names.d.ts +73 -0
  377. package/dist/tool-names.d.ts.map +1 -0
  378. package/dist/tool-names.js +43 -0
  379. package/dist/tool-names.js.map +1 -0
  380. package/dist/tools/index.d.ts +6 -0
  381. package/dist/tools/index.d.ts.map +1 -0
  382. package/dist/tools/index.js +9 -0
  383. package/dist/tools/index.js.map +1 -0
  384. package/dist/tools/request-sandbox-access.d.ts +6 -0
  385. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  386. package/dist/tools/request-sandbox-access.js +88 -0
  387. package/dist/tools/request-sandbox-access.js.map +1 -0
  388. package/dist/tools/utils.d.ts +20 -0
  389. package/dist/tools/utils.d.ts.map +1 -0
  390. package/dist/tools/utils.js +22 -0
  391. package/dist/tools/utils.js.map +1 -0
  392. package/dist/tools/web-search.d.ts +35 -0
  393. package/dist/tools/web-search.d.ts.map +1 -0
  394. package/dist/tools/web-search.js +65 -0
  395. package/dist/tools/web-search.js.map +1 -0
  396. package/dist/utils/binaries.d.ts +7 -0
  397. package/dist/utils/binaries.d.ts.map +1 -0
  398. package/dist/utils/binaries.js +74 -0
  399. package/dist/utils/binaries.js.map +1 -0
  400. package/dist/utils/debug-log.d.ts +12 -0
  401. package/dist/utils/debug-log.d.ts.map +1 -0
  402. package/dist/utils/debug-log.js +55 -0
  403. package/dist/utils/debug-log.js.map +1 -0
  404. package/dist/utils/errors.d.ts +36 -0
  405. package/dist/utils/errors.d.ts.map +1 -0
  406. package/dist/utils/errors.js +207 -0
  407. package/dist/utils/errors.js.map +1 -0
  408. package/dist/utils/gateway-sync.d.ts +26 -0
  409. package/dist/utils/gateway-sync.d.ts.map +1 -0
  410. package/dist/utils/gateway-sync.js +49 -0
  411. package/dist/utils/gateway-sync.js.map +1 -0
  412. package/dist/utils/plan-diff.d.ts +25 -0
  413. package/dist/utils/plan-diff.d.ts.map +1 -0
  414. package/dist/utils/plan-diff.js +43 -0
  415. package/dist/utils/plan-diff.js.map +1 -0
  416. package/dist/utils/plans.d.ts +56 -0
  417. package/dist/utils/plans.d.ts.map +1 -0
  418. package/dist/utils/plans.js +99 -0
  419. package/dist/utils/plans.js.map +1 -0
  420. package/dist/utils/project.d.ts +161 -0
  421. package/dist/utils/project.d.ts.map +1 -0
  422. package/dist/utils/project.js +302 -0
  423. package/dist/utils/project.js.map +1 -0
  424. package/dist/utils/signals-pubsub.d.ts +41 -0
  425. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  426. package/dist/utils/signals-pubsub.js +104 -0
  427. package/dist/utils/signals-pubsub.js.map +1 -0
  428. package/dist/utils/slash-command-loader.d.ts +48 -0
  429. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  430. package/dist/utils/slash-command-loader.js +155 -0
  431. package/dist/utils/slash-command-loader.js.map +1 -0
  432. package/dist/utils/slash-command-processor.d.ts +14 -0
  433. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  434. package/dist/utils/slash-command-processor.js +96 -0
  435. package/dist/utils/slash-command-processor.js.map +1 -0
  436. package/dist/utils/stdin-pipe.d.ts +33 -0
  437. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  438. package/dist/utils/stdin-pipe.js +72 -0
  439. package/dist/utils/stdin-pipe.js.map +1 -0
  440. package/dist/utils/storage-factory.d.ts +50 -0
  441. package/dist/utils/storage-factory.d.ts.map +1 -0
  442. package/dist/utils/storage-factory.js +98 -0
  443. package/dist/utils/storage-factory.js.map +1 -0
  444. package/dist/utils/thread-lock.d.ts +26 -0
  445. package/dist/utils/thread-lock.d.ts.map +1 -0
  446. package/dist/utils/thread-lock.js +108 -0
  447. package/dist/utils/thread-lock.js.map +1 -0
  448. package/dist/utils/token-estimator.d.ts +3 -0
  449. package/dist/utils/token-estimator.d.ts.map +1 -0
  450. package/dist/utils/token-estimator.js +21 -0
  451. package/dist/utils/token-estimator.js.map +1 -0
  452. package/dist/utils/update-check.d.ts +52 -0
  453. package/dist/utils/update-check.d.ts.map +1 -0
  454. package/dist/utils/update-check.js +177 -0
  455. package/dist/utils/update-check.js.map +1 -0
  456. package/dist/voice/stt-registry.d.ts +64 -0
  457. package/dist/voice/stt-registry.d.ts.map +1 -0
  458. package/dist/voice/stt-registry.js +126 -0
  459. package/dist/voice/stt-registry.js.map +1 -0
  460. package/package.json +92 -0
@@ -0,0 +1,374 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { MCPClient, MCPOAuthClientProvider } from "@mastra/mcp";
4
+ import { DEFAULT_CONFIG_DIR } from "../constants.js";
5
+ import { getAppDataDir } from "../utils/project.js";
6
+ import { loadMcpConfig, getProjectMcpPath, getGlobalMcpPath, getClaudeSettingsPath } from "./config.js";
7
+ const MASTRACODE_MCP_TIMEOUT_MS = 7 * 24 * 60 * 60 * 1e3;
8
+ function getTransport(cfg) {
9
+ return "url" in cfg ? "http" : "stdio";
10
+ }
11
+ class FileOAuthStorage {
12
+ constructor(filePath) {
13
+ this.filePath = filePath;
14
+ }
15
+ filePath;
16
+ get(key) {
17
+ return this.read()[key];
18
+ }
19
+ set(key, value) {
20
+ const data = this.read();
21
+ data[key] = value;
22
+ this.write(data);
23
+ }
24
+ delete(key) {
25
+ const data = this.read();
26
+ delete data[key];
27
+ this.write(data);
28
+ }
29
+ read() {
30
+ if (!existsSync(this.filePath)) return {};
31
+ try {
32
+ return JSON.parse(readFileSync(this.filePath, "utf-8"));
33
+ } catch {
34
+ return {};
35
+ }
36
+ }
37
+ write(data) {
38
+ const dir = dirname(this.filePath);
39
+ if (!existsSync(dir)) {
40
+ mkdirSync(dir, { recursive: true, mode: 448 });
41
+ }
42
+ const tmpPath = `${this.filePath}.tmp`;
43
+ writeFileSync(tmpPath, JSON.stringify(data, null, 2), { encoding: "utf-8", mode: 384 });
44
+ renameSync(tmpPath, this.filePath);
45
+ }
46
+ }
47
+ function getOAuthStoragePath(projectDir, name, cfg) {
48
+ const key = JSON.stringify({
49
+ projectDir,
50
+ name,
51
+ url: cfg.url,
52
+ redirectUrl: cfg.oauth?.redirectUrl,
53
+ clientId: cfg.oauth?.clientId,
54
+ scopes: cfg.oauth?.scopes ?? []
55
+ });
56
+ return join(getAppDataDir(), "mcp-oauth", `${getStorageKeyFingerprint(key)}.json`);
57
+ }
58
+ function getStorageKeyFingerprint(value) {
59
+ let fingerprint = 0xcbf29ce484222325n;
60
+ for (let i = 0; i < value.length; i += 1) {
61
+ fingerprint ^= BigInt(value.charCodeAt(i));
62
+ fingerprint = BigInt.asUintN(64, fingerprint * 0x100000001b3n);
63
+ }
64
+ return fingerprint.toString(16).padStart(16, "0");
65
+ }
66
+ function createMcpManager(projectDir, configDirName = DEFAULT_CONFIG_DIR, extraServers) {
67
+ const applyExtraServers = (base) => {
68
+ if (!extraServers || Object.keys(extraServers).length === 0) return base;
69
+ return { ...base, mcpServers: { ...base.mcpServers, ...extraServers } };
70
+ };
71
+ let config = applyExtraServers(loadMcpConfig(projectDir, configDirName));
72
+ let client = null;
73
+ let tools = {};
74
+ let serverStatuses = /* @__PURE__ */ new Map();
75
+ let stderrLogs = /* @__PURE__ */ new Map();
76
+ let initialized = false;
77
+ const MAX_STDERR_LINES = 200;
78
+ function captureStderr(serverName) {
79
+ if (!client || typeof client.getServerStderr !== "function") return;
80
+ const stream = client.getServerStderr(serverName);
81
+ if (!stream) return;
82
+ let buffer = "";
83
+ const lines = stderrLogs.get(serverName) ?? [];
84
+ stderrLogs.set(serverName, lines);
85
+ stream.on("data", (chunk) => {
86
+ buffer += chunk.toString();
87
+ const parts = buffer.split("\n");
88
+ buffer = parts.pop();
89
+ for (const line of parts) {
90
+ if (line.trim()) {
91
+ lines.push(line);
92
+ if (lines.length > MAX_STDERR_LINES) {
93
+ lines.shift();
94
+ }
95
+ }
96
+ }
97
+ });
98
+ stream.on("end", () => {
99
+ if (buffer.trim()) {
100
+ lines.push(buffer);
101
+ if (lines.length > MAX_STDERR_LINES) {
102
+ lines.shift();
103
+ }
104
+ }
105
+ });
106
+ }
107
+ function createOAuthProvider(name, cfg) {
108
+ if (!cfg.oauth) return void 0;
109
+ return new MCPOAuthClientProvider({
110
+ redirectUrl: cfg.oauth.redirectUrl,
111
+ clientMetadata: {
112
+ redirect_uris: [cfg.oauth.redirectUrl],
113
+ client_name: cfg.oauth.clientName ?? `Mastra Code MCP ${name}`,
114
+ grant_types: ["authorization_code", "refresh_token"],
115
+ response_types: ["code"],
116
+ ...cfg.oauth.scopes?.length ? { scope: cfg.oauth.scopes.join(" ") } : {}
117
+ },
118
+ clientInformation: cfg.oauth.clientId ? {
119
+ client_id: cfg.oauth.clientId,
120
+ ...cfg.oauth.clientSecret ? { client_secret: cfg.oauth.clientSecret } : {}
121
+ } : void 0,
122
+ storage: new FileOAuthStorage(getOAuthStoragePath(projectDir, name, cfg))
123
+ });
124
+ }
125
+ function buildServerDefs(servers) {
126
+ const defs = {};
127
+ for (const [name, cfg] of Object.entries(servers)) {
128
+ if ("url" in cfg) {
129
+ const httpCfg = cfg;
130
+ defs[name] = {
131
+ url: new URL(httpCfg.url),
132
+ requestInit: httpCfg.headers ? { headers: httpCfg.headers } : void 0,
133
+ authProvider: createOAuthProvider(name, httpCfg)
134
+ };
135
+ } else {
136
+ defs[name] = { command: cfg.command, args: cfg.args, env: cfg.env, stderr: "pipe" };
137
+ }
138
+ }
139
+ return defs;
140
+ }
141
+ async function connectAndCollectTools() {
142
+ const servers = config.mcpServers;
143
+ if (!servers || Object.keys(servers).length === 0) {
144
+ return;
145
+ }
146
+ const serverNames = Object.keys(servers);
147
+ for (const name of serverNames) {
148
+ serverStatuses.set(name, {
149
+ name,
150
+ connected: false,
151
+ connecting: true,
152
+ toolCount: 0,
153
+ toolNames: [],
154
+ transport: getTransport(servers[name])
155
+ });
156
+ }
157
+ client = new MCPClient({
158
+ id: "mastra-code-mcp",
159
+ servers: buildServerDefs(servers),
160
+ timeout: MASTRACODE_MCP_TIMEOUT_MS
161
+ });
162
+ try {
163
+ const { toolsets, errors } = await client.listToolsetsWithErrors();
164
+ const typedToolsets = toolsets;
165
+ for (const [serverName, serverTools] of Object.entries(typedToolsets)) {
166
+ for (const [toolName, toolConfig] of Object.entries(serverTools)) {
167
+ tools[`${serverName}_${toolName}`] = toolConfig;
168
+ }
169
+ }
170
+ for (const name of serverNames) {
171
+ const serverTools = typedToolsets[name];
172
+ if (serverTools && Object.keys(serverTools).length > 0) {
173
+ const toolNames = Object.keys(serverTools).map((t) => `${name}_${t}`);
174
+ serverStatuses.set(name, {
175
+ name,
176
+ connected: true,
177
+ toolCount: toolNames.length,
178
+ toolNames,
179
+ transport: getTransport(servers[name])
180
+ });
181
+ } else {
182
+ serverStatuses.set(name, {
183
+ name,
184
+ connected: false,
185
+ toolCount: 0,
186
+ toolNames: [],
187
+ transport: getTransport(servers[name]),
188
+ error: errors[name] ?? "Failed to connect"
189
+ });
190
+ }
191
+ }
192
+ for (const name of serverNames) {
193
+ captureStderr(name);
194
+ }
195
+ } catch (error) {
196
+ const errMsg = error instanceof Error ? error.message : String(error);
197
+ for (const name of serverNames) {
198
+ serverStatuses.set(name, {
199
+ name,
200
+ connected: false,
201
+ toolCount: 0,
202
+ toolNames: [],
203
+ transport: getTransport(servers[name]),
204
+ error: errMsg
205
+ });
206
+ }
207
+ }
208
+ }
209
+ async function disconnect() {
210
+ if (client) {
211
+ try {
212
+ await client.disconnect();
213
+ } catch {
214
+ }
215
+ client = null;
216
+ }
217
+ }
218
+ return {
219
+ async init() {
220
+ if (initialized) return;
221
+ await connectAndCollectTools();
222
+ initialized = true;
223
+ },
224
+ async initInBackground() {
225
+ await this.init();
226
+ const statuses = Array.from(serverStatuses.values());
227
+ const connected = statuses.filter((s) => s.connected);
228
+ const failed = statuses.filter((s) => !s.connected);
229
+ return {
230
+ connected,
231
+ failed,
232
+ skipped: [...config.skippedServers ?? []],
233
+ totalTools: connected.reduce((sum, s) => sum + s.toolCount, 0)
234
+ };
235
+ },
236
+ async reload() {
237
+ await disconnect();
238
+ config = applyExtraServers(loadMcpConfig(projectDir, configDirName));
239
+ tools = {};
240
+ serverStatuses = /* @__PURE__ */ new Map();
241
+ stderrLogs = /* @__PURE__ */ new Map();
242
+ initialized = false;
243
+ await connectAndCollectTools();
244
+ initialized = true;
245
+ },
246
+ async reconnectServer(name) {
247
+ const cfg = config.mcpServers?.[name];
248
+ if (!cfg) {
249
+ return {
250
+ name,
251
+ connected: false,
252
+ toolCount: 0,
253
+ toolNames: [],
254
+ transport: "stdio",
255
+ error: `Server "${name}" not found in config`
256
+ };
257
+ }
258
+ if (!client) {
259
+ return {
260
+ name,
261
+ connected: false,
262
+ toolCount: 0,
263
+ toolNames: [],
264
+ transport: getTransport(cfg),
265
+ error: "MCP client not initialized"
266
+ };
267
+ }
268
+ const transport = getTransport(cfg);
269
+ const prefix = `${name}_`;
270
+ for (const key of Object.keys(tools)) {
271
+ if (key.startsWith(prefix)) {
272
+ delete tools[key];
273
+ }
274
+ }
275
+ stderrLogs.delete(name);
276
+ serverStatuses.set(name, {
277
+ name,
278
+ connected: false,
279
+ connecting: true,
280
+ toolCount: 0,
281
+ toolNames: [],
282
+ transport
283
+ });
284
+ try {
285
+ await client.reconnectServer(name);
286
+ captureStderr(name);
287
+ const { toolsets, errors } = await client.listToolsetsWithErrors();
288
+ const serverTools = toolsets[name];
289
+ const serverError = errors[name];
290
+ if (serverError) {
291
+ const status = {
292
+ name,
293
+ connected: false,
294
+ toolCount: 0,
295
+ toolNames: [],
296
+ transport,
297
+ error: serverError
298
+ };
299
+ serverStatuses.set(name, status);
300
+ return status;
301
+ } else if (serverTools && Object.keys(serverTools).length > 0) {
302
+ const toolNames = Object.keys(serverTools).map((t) => `${name}_${t}`);
303
+ for (const [toolName, toolConfig] of Object.entries(serverTools)) {
304
+ tools[`${name}_${toolName}`] = toolConfig;
305
+ }
306
+ const status = {
307
+ name,
308
+ connected: true,
309
+ toolCount: toolNames.length,
310
+ toolNames,
311
+ transport
312
+ };
313
+ serverStatuses.set(name, status);
314
+ return status;
315
+ } else {
316
+ const status = {
317
+ name,
318
+ connected: false,
319
+ toolCount: 0,
320
+ toolNames: [],
321
+ transport,
322
+ error: "Failed to connect"
323
+ };
324
+ serverStatuses.set(name, status);
325
+ return status;
326
+ }
327
+ } catch (error) {
328
+ const errMsg = error instanceof Error ? error.message : String(error);
329
+ const status = {
330
+ name,
331
+ connected: false,
332
+ toolCount: 0,
333
+ toolNames: [],
334
+ transport,
335
+ error: errMsg
336
+ };
337
+ serverStatuses.set(name, status);
338
+ return status;
339
+ }
340
+ },
341
+ disconnect,
342
+ getTools() {
343
+ return { ...tools };
344
+ },
345
+ hasServers() {
346
+ const hasConfigured = config.mcpServers !== void 0 && Object.keys(config.mcpServers).length > 0;
347
+ const hasSkipped = config.skippedServers !== void 0 && config.skippedServers.length > 0;
348
+ return hasConfigured || hasSkipped;
349
+ },
350
+ getServerStatuses() {
351
+ return Array.from(serverStatuses.values());
352
+ },
353
+ getSkippedServers() {
354
+ return [...config.skippedServers ?? []];
355
+ },
356
+ getConfigPaths() {
357
+ return {
358
+ project: getProjectMcpPath(projectDir, configDirName),
359
+ global: getGlobalMcpPath(configDirName),
360
+ claude: getClaudeSettingsPath(projectDir)
361
+ };
362
+ },
363
+ getConfig() {
364
+ return config;
365
+ },
366
+ getServerLogs(name) {
367
+ return [...stderrLogs.get(name) ?? []];
368
+ }
369
+ };
370
+ }
371
+ export {
372
+ createMcpManager
373
+ };
374
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/mcp/manager.ts"],"sourcesContent":["/**\n * MCP manager — orchestrates MCP server connections using MCPClient directly.\n * Created once at startup, provides tools from connected MCP servers.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { MCPClient, MCPOAuthClientProvider } from '@mastra/mcp';\nimport type { MastraMCPServerDefinition, OAuthClientInformation, OAuthStorage } from '@mastra/mcp';\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { getAppDataDir } from '../utils/project.js';\nimport { loadMcpConfig, getProjectMcpPath, getGlobalMcpPath, getClaudeSettingsPath } from './config.js';\nimport type { McpConfig, McpHttpServerConfig, McpServerConfig, McpServerStatus, McpSkippedServer } from './types.js';\n\nconst MASTRACODE_MCP_TIMEOUT_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\n/** Summary of MCP initialization result. */\nexport interface McpInitResult {\n connected: McpServerStatus[];\n failed: McpServerStatus[];\n skipped: McpSkippedServer[];\n totalTools: number;\n}\n\n/** Public interface for the MCP manager returned by createMcpManager(). */\nexport interface McpManager {\n /** Connect to all configured MCP servers and collect their tools. */\n init(): Promise<void>;\n /** Start init in the background. Returns a promise that resolves with status when done. */\n initInBackground(): Promise<McpInitResult>;\n /** Disconnect all servers, reload config from disk, reconnect. */\n reload(): Promise<void>;\n /** Reconnect a single server by name. Returns updated status. */\n reconnectServer(name: string): Promise<McpServerStatus>;\n /** Disconnect from all MCP servers and clean up. */\n disconnect(): Promise<void>;\n /** Get all tools from connected MCP servers (namespaced as serverName_toolName). */\n getTools(): Record<string, any>;\n /** Check if any MCP servers are configured (or skipped). */\n hasServers(): boolean;\n /** Get status of all servers. */\n getServerStatuses(): McpServerStatus[];\n /** Get servers that were skipped during config loading. */\n getSkippedServers(): McpSkippedServer[];\n /** Get config file paths for display. */\n getConfigPaths(): { project: string; global: string; claude: string };\n /** Get the merged config. */\n getConfig(): McpConfig;\n /** Get captured stderr logs for a server. */\n getServerLogs(name: string): string[];\n}\n\nfunction getTransport(cfg: McpServerConfig): 'stdio' | 'http' {\n return 'url' in cfg ? 'http' : 'stdio';\n}\n\nclass FileOAuthStorage implements OAuthStorage {\n constructor(private filePath: string) {}\n\n get(key: string): string | undefined {\n return this.read()[key];\n }\n\n set(key: string, value: string): void {\n const data = this.read();\n data[key] = value;\n this.write(data);\n }\n\n delete(key: string): void {\n const data = this.read();\n delete data[key];\n this.write(data);\n }\n\n private read(): Record<string, string> {\n if (!existsSync(this.filePath)) return {};\n try {\n return JSON.parse(readFileSync(this.filePath, 'utf-8')) as Record<string, string>;\n } catch {\n return {};\n }\n }\n\n private write(data: Record<string, string>): void {\n const dir = dirname(this.filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n const tmpPath = `${this.filePath}.tmp`;\n writeFileSync(tmpPath, JSON.stringify(data, null, 2), { encoding: 'utf-8', mode: 0o600 });\n renameSync(tmpPath, this.filePath);\n }\n}\n\nfunction getOAuthStoragePath(projectDir: string, name: string, cfg: McpHttpServerConfig): string {\n const key = JSON.stringify({\n projectDir,\n name,\n url: cfg.url,\n redirectUrl: cfg.oauth?.redirectUrl,\n clientId: cfg.oauth?.clientId,\n scopes: cfg.oauth?.scopes ?? [],\n });\n return join(getAppDataDir(), 'mcp-oauth', `${getStorageKeyFingerprint(key)}.json`);\n}\n\nfunction getStorageKeyFingerprint(value: string): string {\n let fingerprint = 0xcbf29ce484222325n;\n for (let i = 0; i < value.length; i += 1) {\n fingerprint ^= BigInt(value.charCodeAt(i));\n fingerprint = BigInt.asUintN(64, fingerprint * 0x100000001b3n);\n }\n return fingerprint.toString(16).padStart(16, '0');\n}\n\n/**\n * Create an MCP manager that wraps MCPClient with config-file discovery\n * and per-server status tracking.\n */\nexport function createMcpManager(\n projectDir: string,\n configDirName = DEFAULT_CONFIG_DIR,\n extraServers?: Record<string, McpServerConfig>,\n): McpManager {\n /** Merge programmatic servers into a base config (highest priority). */\n const applyExtraServers = (base: McpConfig): McpConfig => {\n if (!extraServers || Object.keys(extraServers).length === 0) return base;\n return { ...base, mcpServers: { ...base.mcpServers, ...extraServers } };\n };\n\n let config = applyExtraServers(loadMcpConfig(projectDir, configDirName));\n let client: MCPClient | null = null;\n let tools: Record<string, any> = {};\n let serverStatuses = new Map<string, McpServerStatus>();\n let stderrLogs = new Map<string, string[]>();\n let initialized = false;\n\n const MAX_STDERR_LINES = 200;\n\n /** Hook into a server's stderr stream and buffer its output. */\n function captureStderr(serverName: string): void {\n if (!client || typeof client.getServerStderr !== 'function') return;\n const stream = client.getServerStderr(serverName);\n if (!stream) return;\n\n let buffer = '';\n const lines = stderrLogs.get(serverName) ?? [];\n stderrLogs.set(serverName, lines);\n\n stream.on('data', (chunk: Buffer) => {\n buffer += chunk.toString();\n const parts = buffer.split('\\n');\n // Last element is incomplete line (or empty if ended with \\n)\n buffer = parts.pop()!;\n for (const line of parts) {\n if (line.trim()) {\n lines.push(line);\n if (lines.length > MAX_STDERR_LINES) {\n lines.shift();\n }\n }\n }\n });\n\n stream.on('end', () => {\n if (buffer.trim()) {\n lines.push(buffer);\n if (lines.length > MAX_STDERR_LINES) {\n lines.shift();\n }\n }\n });\n }\n\n function createOAuthProvider(name: string, cfg: McpHttpServerConfig) {\n if (!cfg.oauth) return undefined;\n\n return new MCPOAuthClientProvider({\n redirectUrl: cfg.oauth.redirectUrl,\n clientMetadata: {\n redirect_uris: [cfg.oauth.redirectUrl],\n client_name: cfg.oauth.clientName ?? `Mastra Code MCP ${name}`,\n grant_types: ['authorization_code', 'refresh_token'],\n response_types: ['code'],\n ...(cfg.oauth.scopes?.length ? { scope: cfg.oauth.scopes.join(' ') } : {}),\n },\n clientInformation: cfg.oauth.clientId\n ? ({\n client_id: cfg.oauth.clientId,\n ...(cfg.oauth.clientSecret ? { client_secret: cfg.oauth.clientSecret } : {}),\n } satisfies OAuthClientInformation)\n : undefined,\n storage: new FileOAuthStorage(getOAuthStoragePath(projectDir, name, cfg)),\n });\n }\n\n function buildServerDefs(servers: Record<string, McpServerConfig>): Record<string, MastraMCPServerDefinition> {\n const defs: Record<string, MastraMCPServerDefinition> = {};\n for (const [name, cfg] of Object.entries(servers)) {\n if ('url' in cfg) {\n const httpCfg = cfg as McpHttpServerConfig;\n defs[name] = {\n url: new URL(httpCfg.url),\n requestInit: httpCfg.headers ? { headers: httpCfg.headers } : undefined,\n authProvider: createOAuthProvider(name, httpCfg),\n };\n } else {\n defs[name] = { command: cfg.command, args: cfg.args, env: cfg.env, stderr: 'pipe' };\n }\n }\n return defs;\n }\n\n async function connectAndCollectTools(): Promise<void> {\n const servers = config.mcpServers;\n if (!servers || Object.keys(servers).length === 0) {\n return;\n }\n\n // Pre-populate statuses as \"connecting\" so callers can see in-progress state\n const serverNames = Object.keys(servers);\n for (const name of serverNames) {\n serverStatuses.set(name, {\n name,\n connected: false,\n connecting: true,\n toolCount: 0,\n toolNames: [],\n transport: getTransport(servers[name]!),\n });\n }\n\n client = new MCPClient({\n id: 'mastra-code-mcp',\n servers: buildServerDefs(servers),\n timeout: MASTRACODE_MCP_TIMEOUT_MS,\n });\n\n // Use listToolsetsWithErrors() to get tools grouped by server name,\n // plus per-server error messages for servers that failed to connect.\n\n try {\n const { toolsets, errors } = await client.listToolsetsWithErrors();\n const typedToolsets = toolsets as Record<string, Record<string, any>>;\n\n // Flatten toolsets into the namespaced tools map (serverName_toolName)\n for (const [serverName, serverTools] of Object.entries(typedToolsets)) {\n for (const [toolName, toolConfig] of Object.entries(serverTools)) {\n tools[`${serverName}_${toolName}`] = toolConfig;\n }\n }\n\n for (const name of serverNames) {\n const serverTools = typedToolsets[name];\n if (serverTools && Object.keys(serverTools).length > 0) {\n const toolNames = Object.keys(serverTools).map(t => `${name}_${t}`);\n serverStatuses.set(name, {\n name,\n connected: true,\n toolCount: toolNames.length,\n toolNames,\n transport: getTransport(servers[name]!),\n });\n } else {\n // Server failed — use the real error from listToolsetsWithErrors()\n serverStatuses.set(name, {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport: getTransport(servers[name]!),\n error: errors[name] ?? 'Failed to connect',\n });\n }\n }\n\n // Capture stderr from all stdio servers (connected or failed)\n for (const name of serverNames) {\n captureStderr(name);\n }\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n\n for (const name of serverNames) {\n serverStatuses.set(name, {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport: getTransport(servers[name]!),\n error: errMsg,\n });\n }\n }\n }\n\n async function disconnect(): Promise<void> {\n if (client) {\n try {\n await client.disconnect();\n } catch {\n // Ignore disconnect errors\n }\n client = null;\n }\n }\n\n return {\n async init() {\n if (initialized) return;\n await connectAndCollectTools();\n initialized = true;\n },\n\n async initInBackground(): Promise<McpInitResult> {\n await this.init();\n const statuses = Array.from(serverStatuses.values());\n const connected = statuses.filter(s => s.connected);\n const failed = statuses.filter(s => !s.connected);\n return {\n connected,\n failed,\n skipped: [...(config.skippedServers ?? [])],\n totalTools: connected.reduce((sum, s) => sum + s.toolCount, 0),\n };\n },\n\n async reload() {\n await disconnect();\n config = applyExtraServers(loadMcpConfig(projectDir, configDirName));\n tools = {};\n serverStatuses = new Map();\n stderrLogs = new Map();\n initialized = false;\n await connectAndCollectTools();\n initialized = true;\n },\n\n async reconnectServer(name: string): Promise<McpServerStatus> {\n const cfg = config.mcpServers?.[name];\n if (!cfg) {\n return {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport: 'stdio',\n error: `Server \"${name}\" not found in config`,\n };\n }\n\n if (!client) {\n return {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport: getTransport(cfg),\n error: 'MCP client not initialized',\n };\n }\n\n const transport = getTransport(cfg);\n\n // Remove old tools for this server\n const prefix = `${name}_`;\n for (const key of Object.keys(tools)) {\n if (key.startsWith(prefix)) {\n delete tools[key];\n }\n }\n\n // Clear old logs and mark as connecting\n stderrLogs.delete(name);\n serverStatuses.set(name, {\n name,\n connected: false,\n connecting: true,\n toolCount: 0,\n toolNames: [],\n transport,\n });\n\n try {\n // Use MCPClient's per-server reconnect\n await client.reconnectServer(name);\n\n // Recapture stderr for the reconnected server\n captureStderr(name);\n\n // Fetch updated toolsets to get this server's tools\n const { toolsets, errors } = await client.listToolsetsWithErrors();\n const serverTools = toolsets[name];\n const serverError = errors[name];\n\n if (serverError) {\n const status: McpServerStatus = {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport,\n error: serverError,\n };\n serverStatuses.set(name, status);\n return status;\n } else if (serverTools && Object.keys(serverTools).length > 0) {\n const toolNames = Object.keys(serverTools).map(t => `${name}_${t}`);\n for (const [toolName, toolConfig] of Object.entries(serverTools)) {\n tools[`${name}_${toolName}`] = toolConfig;\n }\n const status: McpServerStatus = {\n name,\n connected: true,\n toolCount: toolNames.length,\n toolNames,\n transport,\n };\n serverStatuses.set(name, status);\n return status;\n } else {\n const status: McpServerStatus = {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport,\n error: 'Failed to connect',\n };\n serverStatuses.set(name, status);\n return status;\n }\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : String(error);\n const status: McpServerStatus = {\n name,\n connected: false,\n toolCount: 0,\n toolNames: [],\n transport,\n error: errMsg,\n };\n serverStatuses.set(name, status);\n return status;\n }\n },\n\n disconnect,\n\n getTools() {\n return { ...tools };\n },\n\n hasServers() {\n const hasConfigured = config.mcpServers !== undefined && Object.keys(config.mcpServers).length > 0;\n const hasSkipped = config.skippedServers !== undefined && config.skippedServers.length > 0;\n return hasConfigured || hasSkipped;\n },\n\n getServerStatuses() {\n return Array.from(serverStatuses.values());\n },\n\n getSkippedServers() {\n return [...(config.skippedServers ?? [])];\n },\n\n getConfigPaths() {\n return {\n project: getProjectMcpPath(projectDir, configDirName),\n global: getGlobalMcpPath(configDirName),\n claude: getClaudeSettingsPath(projectDir),\n };\n },\n\n getConfig() {\n return config;\n },\n\n getServerLogs(name: string) {\n return [...(stderrLogs.get(name) ?? [])];\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Type definitions for the MCP server system.
3
+ * Servers provide external tools via Model Context Protocol.
4
+ */
5
+ /**
6
+ * A stdio-based MCP server configuration entry.
7
+ * Launches a local process that communicates via stdin/stdout.
8
+ */
9
+ export interface McpStdioServerConfig {
10
+ /** The command to launch the MCP server process */
11
+ command: string;
12
+ /** Arguments for the command */
13
+ args?: string[];
14
+ /** Environment variables to set for the server process */
15
+ env?: Record<string, string>;
16
+ }
17
+ /**
18
+ * An HTTP-based MCP server configuration entry.
19
+ * Connects to a remote server via Streamable HTTP or SSE.
20
+ */
21
+ export interface McpHttpServerConfig {
22
+ /** The URL of the remote MCP server endpoint */
23
+ url: string;
24
+ /** Optional HTTP headers (e.g. for authentication) */
25
+ headers?: Record<string, string>;
26
+ /** Optional OAuth configuration for protected HTTP MCP servers */
27
+ oauth?: McpHttpOAuthConfig;
28
+ }
29
+ /**
30
+ * OAuth client configuration for an HTTP MCP server.
31
+ */
32
+ export interface McpHttpOAuthConfig {
33
+ /** Redirect URL controlled by the user/application for OAuth callbacks */
34
+ redirectUrl: string;
35
+ /** Human-readable OAuth client name */
36
+ clientName?: string;
37
+ /** Optional scopes requested during OAuth */
38
+ scopes?: string[];
39
+ /** Optional pre-registered OAuth client ID */
40
+ clientId?: string;
41
+ /** Optional pre-registered OAuth client secret */
42
+ clientSecret?: string;
43
+ }
44
+ /**
45
+ * A single MCP server configuration entry.
46
+ * Detected by the presence of `command` (stdio) or `url` (http).
47
+ */
48
+ export type McpServerConfig = McpStdioServerConfig | McpHttpServerConfig;
49
+ /**
50
+ * An MCP server entry that was skipped during config loading.
51
+ */
52
+ export interface McpSkippedServer {
53
+ /** Server name (from config key) */
54
+ name: string;
55
+ /** Human-readable reason the server was skipped */
56
+ reason: string;
57
+ }
58
+ /**
59
+ * The top-level config object from mcp.json or settings.local.json.
60
+ * Maps server names to their config.
61
+ */
62
+ export interface McpConfig {
63
+ mcpServers?: Record<string, McpServerConfig>;
64
+ skippedServers?: McpSkippedServer[];
65
+ }
66
+ /**
67
+ * Runtime status of a connected MCP server.
68
+ */
69
+ export interface McpServerStatus {
70
+ /** Server name (from config key) */
71
+ name: string;
72
+ /** Whether the server is currently connected */
73
+ connected: boolean;
74
+ /** Whether the server is currently connecting */
75
+ connecting?: boolean;
76
+ /** Number of tools provided by this server */
77
+ toolCount: number;
78
+ /** List of tool names provided */
79
+ toolNames: string[];
80
+ /** Transport type used by the server */
81
+ transport: 'stdio' | 'http';
82
+ /** Error message if connection failed */
83
+ error?: string;
84
+ }
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kEAAkE;IAClE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,wCAAwC;IACxC,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Pure `GlobalSettings` mutation helpers for custom model packs. Shared by the
3
+ * TUI `/models` command and the web settings routes — no UI dependencies.
4
+ */
5
+ import type { GlobalSettings } from './settings.js';
6
+ export declare function removeCustomPackFromSettings(settings: GlobalSettings, packId: string): void;
7
+ //# sourceMappingURL=custom-packs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-packs.d.ts","sourceRoot":"","sources":["../../src/onboarding/custom-packs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAsB3F"}
@@ -0,0 +1,20 @@
1
+ function removeCustomPackFromSettings(settings, packId) {
2
+ if (!packId.startsWith("custom:")) return;
3
+ const packName = packId.slice("custom:".length);
4
+ const removedPack = settings.customModelPacks.find((p) => p.name === packName);
5
+ settings.customModelPacks = settings.customModelPacks.filter((p) => p.name !== packName);
6
+ const modeDefaultsMatchRemovedPack = !!removedPack && settings.models.modeDefaults.plan === removedPack.models.plan && settings.models.modeDefaults.build === removedPack.models.build && settings.models.modeDefaults.fast === removedPack.models.fast;
7
+ if (settings.models.activeModelPackId === packId) {
8
+ settings.models.activeModelPackId = null;
9
+ settings.models.modeDefaults = {};
10
+ } else if (modeDefaultsMatchRemovedPack) {
11
+ settings.models.modeDefaults = {};
12
+ }
13
+ if (settings.onboarding.modePackId === packId) {
14
+ settings.onboarding.modePackId = null;
15
+ }
16
+ }
17
+ export {
18
+ removeCustomPackFromSettings
19
+ };
20
+ //# sourceMappingURL=custom-packs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/onboarding/custom-packs.ts"],"sourcesContent":["/**\n * Pure `GlobalSettings` mutation helpers for custom model packs. Shared by the\n * TUI `/models` command and the web settings routes — no UI dependencies.\n */\nimport type { GlobalSettings } from './settings.js';\n\nexport function removeCustomPackFromSettings(settings: GlobalSettings, packId: string): void {\n if (!packId.startsWith('custom:')) return;\n const packName = packId.slice('custom:'.length);\n const removedPack = settings.customModelPacks.find(p => p.name === packName);\n settings.customModelPacks = settings.customModelPacks.filter(p => p.name !== packName);\n\n const modeDefaultsMatchRemovedPack =\n !!removedPack &&\n settings.models.modeDefaults.plan === removedPack.models.plan &&\n settings.models.modeDefaults.build === removedPack.models.build &&\n settings.models.modeDefaults.fast === removedPack.models.fast;\n\n if (settings.models.activeModelPackId === packId) {\n settings.models.activeModelPackId = null;\n settings.models.modeDefaults = {};\n } else if (modeDefaultsMatchRemovedPack) {\n settings.models.modeDefaults = {};\n }\n\n if (settings.onboarding.modePackId === packId) {\n settings.onboarding.modePackId = null;\n }\n}\n"],"mappings":"AAMO,SAAS,6BAA6B,UAA0B,QAAsB;AAC3F,MAAI,CAAC,OAAO,WAAW,SAAS,EAAG;AACnC,QAAM,WAAW,OAAO,MAAM,UAAU,MAAM;AAC9C,QAAM,cAAc,SAAS,iBAAiB,KAAK,OAAK,EAAE,SAAS,QAAQ;AAC3E,WAAS,mBAAmB,SAAS,iBAAiB,OAAO,OAAK,EAAE,SAAS,QAAQ;AAErF,QAAM,+BACJ,CAAC,CAAC,eACF,SAAS,OAAO,aAAa,SAAS,YAAY,OAAO,QACzD,SAAS,OAAO,aAAa,UAAU,YAAY,OAAO,SAC1D,SAAS,OAAO,aAAa,SAAS,YAAY,OAAO;AAE3D,MAAI,SAAS,OAAO,sBAAsB,QAAQ;AAChD,aAAS,OAAO,oBAAoB;AACpC,aAAS,OAAO,eAAe,CAAC;AAAA,EAClC,WAAW,8BAA8B;AACvC,aAAS,OAAO,eAAe,CAAC;AAAA,EAClC;AAEA,MAAI,SAAS,WAAW,eAAe,QAAQ;AAC7C,aAAS,WAAW,aAAa;AAAA,EACnC;AACF;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { CustomProviderSetting, GlobalSettings } from './settings.js';
2
+ export declare function upsertCustomProviderInSettings(settings: GlobalSettings, provider: CustomProviderSetting, previousProviderId?: string): void;
3
+ export declare function removeCustomProviderFromSettings(settings: GlobalSettings, providerId: string): void;
4
+ //# sourceMappingURL=custom-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-providers.d.ts","sourceRoot":"","sources":["../../src/onboarding/custom-providers.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW3E,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,qBAAqB,EAC/B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,IAAI,CAQN;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAInG"}
@@ -0,0 +1,28 @@
1
+ import { getCustomProviderId } from "./settings.js";
2
+ function normalizeProvider(input) {
3
+ return {
4
+ name: input.name.trim(),
5
+ url: input.url.trim(),
6
+ apiKey: input.apiKey?.trim() || void 0,
7
+ models: [...new Set(input.models.map((model) => model.trim()).filter(Boolean))]
8
+ };
9
+ }
10
+ function upsertCustomProviderInSettings(settings, provider, previousProviderId) {
11
+ const next = normalizeProvider(provider);
12
+ const nextProviderId = getCustomProviderId(next.name);
13
+ const filteredProviders = settings.customProviders.filter((existing) => {
14
+ const id = getCustomProviderId(existing.name);
15
+ return id !== nextProviderId && (!previousProviderId || id !== previousProviderId);
16
+ });
17
+ settings.customProviders = [...filteredProviders, next];
18
+ }
19
+ function removeCustomProviderFromSettings(settings, providerId) {
20
+ settings.customProviders = settings.customProviders.filter(
21
+ (provider) => getCustomProviderId(provider.name) !== providerId
22
+ );
23
+ }
24
+ export {
25
+ removeCustomProviderFromSettings,
26
+ upsertCustomProviderInSettings
27
+ };
28
+ //# sourceMappingURL=custom-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/onboarding/custom-providers.ts"],"sourcesContent":["/**\n * Pure `GlobalSettings` mutation helpers for custom OpenAI-compatible\n * providers. Shared by the TUI `/custom-providers` command and the web\n * settings routes — no UI dependencies.\n */\nimport { getCustomProviderId } from './settings.js';\nimport type { CustomProviderSetting, GlobalSettings } from './settings.js';\n\nfunction normalizeProvider(input: CustomProviderSetting): CustomProviderSetting {\n return {\n name: input.name.trim(),\n url: input.url.trim(),\n apiKey: input.apiKey?.trim() || undefined,\n models: [...new Set(input.models.map(model => model.trim()).filter(Boolean))],\n };\n}\n\nexport function upsertCustomProviderInSettings(\n settings: GlobalSettings,\n provider: CustomProviderSetting,\n previousProviderId?: string,\n): void {\n const next = normalizeProvider(provider);\n const nextProviderId = getCustomProviderId(next.name);\n const filteredProviders = settings.customProviders.filter(existing => {\n const id = getCustomProviderId(existing.name);\n return id !== nextProviderId && (!previousProviderId || id !== previousProviderId);\n });\n settings.customProviders = [...filteredProviders, next];\n}\n\nexport function removeCustomProviderFromSettings(settings: GlobalSettings, providerId: string): void {\n settings.customProviders = settings.customProviders.filter(\n provider => getCustomProviderId(provider.name) !== providerId,\n );\n}\n"],"mappings":"AAKA,SAAS,2BAA2B;AAGpC,SAAS,kBAAkB,OAAqD;AAC9E,SAAO;AAAA,IACL,MAAM,MAAM,KAAK,KAAK;AAAA,IACtB,KAAK,MAAM,IAAI,KAAK;AAAA,IACpB,QAAQ,MAAM,QAAQ,KAAK,KAAK;AAAA,IAChC,QAAQ,CAAC,GAAG,IAAI,IAAI,MAAM,OAAO,IAAI,WAAS,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;AAAA,EAC9E;AACF;AAEO,SAAS,+BACd,UACA,UACA,oBACM;AACN,QAAM,OAAO,kBAAkB,QAAQ;AACvC,QAAM,iBAAiB,oBAAoB,KAAK,IAAI;AACpD,QAAM,oBAAoB,SAAS,gBAAgB,OAAO,cAAY;AACpE,UAAM,KAAK,oBAAoB,SAAS,IAAI;AAC5C,WAAO,OAAO,mBAAmB,CAAC,sBAAsB,OAAO;AAAA,EACjE,CAAC;AACD,WAAS,kBAAkB,CAAC,GAAG,mBAAmB,IAAI;AACxD;AAEO,SAAS,iCAAiC,UAA0B,YAA0B;AACnG,WAAS,kBAAkB,SAAS,gBAAgB;AAAA,IAClD,cAAY,oBAAoB,SAAS,IAAI,MAAM;AAAA,EACrD;AACF;","names":[]}
@@ -0,0 +1,5 @@
1
+ export { getAvailableModePacks, getAvailableOmPacks, ONBOARDING_VERSION } from './packs.js';
2
+ export type { ModePack, OMPack, ProviderAccess, ProviderAccessLevel } from './packs.js';
3
+ export { loadSettings, saveSettings, getSettingsPath, resolveModelDefaults, resolveOmModel, resolveOmRoleModel, } from './settings.js';
4
+ export type { GlobalSettings, CustomPack } from './settings.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/onboarding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5F,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { getAvailableModePacks, getAvailableOmPacks, ONBOARDING_VERSION } from "./packs.js";
2
+ import {
3
+ loadSettings,
4
+ saveSettings,
5
+ getSettingsPath,
6
+ resolveModelDefaults,
7
+ resolveOmModel,
8
+ resolveOmRoleModel
9
+ } from "./settings.js";
10
+ export {
11
+ ONBOARDING_VERSION,
12
+ getAvailableModePacks,
13
+ getAvailableOmPacks,
14
+ getSettingsPath,
15
+ loadSettings,
16
+ resolveModelDefaults,
17
+ resolveOmModel,
18
+ resolveOmRoleModel,
19
+ saveSettings
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/onboarding/index.ts"],"sourcesContent":["export { getAvailableModePacks, getAvailableOmPacks, ONBOARDING_VERSION } from './packs.js';\nexport type { ModePack, OMPack, ProviderAccess, ProviderAccessLevel } from './packs.js';\nexport {\n loadSettings,\n saveSettings,\n getSettingsPath,\n resolveModelDefaults,\n resolveOmModel,\n resolveOmRoleModel,\n} from './settings.js';\nexport type { GlobalSettings, CustomPack } from './settings.js';\n"],"mappings":"AAAA,SAAS,uBAAuB,qBAAqB,0BAA0B;AAE/E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}