@mastra/code-sdk 0.0.0-aggregate-trace-20261015182851

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 (749) hide show
  1. package/LICENSE.md +32 -0
  2. package/README.md +284 -0
  3. package/dist/acp/agent.d.ts +48 -0
  4. package/dist/acp/agent.d.ts.map +1 -0
  5. package/dist/acp/agent.js +416 -0
  6. package/dist/acp/agent.js.map +1 -0
  7. package/dist/acp/errors.d.ts +3 -0
  8. package/dist/acp/errors.d.ts.map +1 -0
  9. package/dist/acp/errors.js +14 -0
  10. package/dist/acp/errors.js.map +1 -0
  11. package/dist/acp/event-mapper.d.ts +28 -0
  12. package/dist/acp/event-mapper.d.ts.map +1 -0
  13. package/dist/acp/event-mapper.js +279 -0
  14. package/dist/acp/event-mapper.js.map +1 -0
  15. package/dist/acp/index.d.ts +9 -0
  16. package/dist/acp/index.d.ts.map +1 -0
  17. package/dist/acp/index.js +24 -0
  18. package/dist/acp/index.js.map +1 -0
  19. package/dist/acp/runtime.d.ts +5 -0
  20. package/dist/acp/runtime.d.ts.map +1 -0
  21. package/dist/acp/runtime.js +91 -0
  22. package/dist/acp/runtime.js.map +1 -0
  23. package/dist/acp/server.d.ts +4 -0
  24. package/dist/acp/server.d.ts.map +1 -0
  25. package/dist/acp/server.js +38 -0
  26. package/dist/acp/server.js.map +1 -0
  27. package/dist/acp/skills.d.ts +6 -0
  28. package/dist/acp/skills.d.ts.map +1 -0
  29. package/dist/acp/skills.js +33 -0
  30. package/dist/acp/skills.js.map +1 -0
  31. package/dist/acp.d.ts +2 -0
  32. package/dist/acp.d.ts.map +1 -0
  33. package/dist/acp.js +2 -0
  34. package/dist/agent-connections/messaging-processor.d.ts +17 -0
  35. package/dist/agent-connections/messaging-processor.d.ts.map +1 -0
  36. package/dist/agent-connections/messaging-processor.js +134 -0
  37. package/dist/agent-connections/messaging-processor.js.map +1 -0
  38. package/dist/agent-connections/ownership.d.ts +24 -0
  39. package/dist/agent-connections/ownership.d.ts.map +1 -0
  40. package/dist/agent-connections/ownership.js +99 -0
  41. package/dist/agent-connections/ownership.js.map +1 -0
  42. package/dist/agent-connections/registry.d.ts +20 -0
  43. package/dist/agent-connections/registry.d.ts.map +1 -0
  44. package/dist/agent-connections/registry.js +170 -0
  45. package/dist/agent-connections/registry.js.map +1 -0
  46. package/dist/agent-connections/session-advertisement.d.ts +27 -0
  47. package/dist/agent-connections/session-advertisement.d.ts.map +1 -0
  48. package/dist/agent-connections/session-advertisement.js +89 -0
  49. package/dist/agent-connections/session-advertisement.js.map +1 -0
  50. package/dist/agent-connections/signal-provider.d.ts +141 -0
  51. package/dist/agent-connections/signal-provider.d.ts.map +1 -0
  52. package/dist/agent-connections/signal-provider.js +38 -0
  53. package/dist/agent-connections/signal-provider.js.map +1 -0
  54. package/dist/agent-connections/state-processor.d.ts +23 -0
  55. package/dist/agent-connections/state-processor.d.ts.map +1 -0
  56. package/dist/agent-connections/state-processor.js +273 -0
  57. package/dist/agent-connections/state-processor.js.map +1 -0
  58. package/dist/agent-connections/thread-state.d.ts +41 -0
  59. package/dist/agent-connections/thread-state.d.ts.map +1 -0
  60. package/dist/agent-connections/thread-state.js +160 -0
  61. package/dist/agent-connections/thread-state.js.map +1 -0
  62. package/dist/agent-connections/tools.d.ts +133 -0
  63. package/dist/agent-connections/tools.d.ts.map +1 -0
  64. package/dist/agent-connections/tools.js +552 -0
  65. package/dist/agent-connections/tools.js.map +1 -0
  66. package/dist/agent-connections/types.d.ts +99 -0
  67. package/dist/agent-connections/types.d.ts.map +1 -0
  68. package/dist/agent-connections/types.js +7 -0
  69. package/dist/agent-connections/types.js.map +1 -0
  70. package/dist/agent-connections/untrusted-text.d.ts +5 -0
  71. package/dist/agent-connections/untrusted-text.d.ts.map +1 -0
  72. package/dist/agent-connections/untrusted-text.js +22 -0
  73. package/dist/agent-connections/untrusted-text.js.map +1 -0
  74. package/dist/agents/background-completion-events.d.ts +16 -0
  75. package/dist/agents/background-completion-events.d.ts.map +1 -0
  76. package/dist/agents/background-completion-events.js +19 -0
  77. package/dist/agents/background-completion-events.js.map +1 -0
  78. package/dist/agents/background-completion.d.ts +9 -0
  79. package/dist/agents/background-completion.d.ts.map +1 -0
  80. package/dist/agents/background-completion.js +59 -0
  81. package/dist/agents/background-completion.js.map +1 -0
  82. package/dist/agents/context-audit.d.ts +84 -0
  83. package/dist/agents/context-audit.d.ts.map +1 -0
  84. package/dist/agents/context-audit.js +118 -0
  85. package/dist/agents/context-audit.js.map +1 -0
  86. package/dist/agents/credential-resolver.d.ts +67 -0
  87. package/dist/agents/credential-resolver.d.ts.map +1 -0
  88. package/dist/agents/credential-resolver.js +136 -0
  89. package/dist/agents/credential-resolver.js.map +1 -0
  90. package/dist/agents/custom-provider-source.d.ts +35 -0
  91. package/dist/agents/custom-provider-source.d.ts.map +1 -0
  92. package/dist/agents/custom-provider-source.js +25 -0
  93. package/dist/agents/custom-provider-source.js.map +1 -0
  94. package/dist/agents/instructions.d.ts +40 -0
  95. package/dist/agents/instructions.d.ts.map +1 -0
  96. package/dist/agents/instructions.js +63 -0
  97. package/dist/agents/instructions.js.map +1 -0
  98. package/dist/agents/mastracode-gateway.d.ts +76 -0
  99. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  100. package/dist/agents/mastracode-gateway.js +434 -0
  101. package/dist/agents/mastracode-gateway.js.map +1 -0
  102. package/dist/agents/memory.d.ts +39 -0
  103. package/dist/agents/memory.d.ts.map +1 -0
  104. package/dist/agents/memory.js +266 -0
  105. package/dist/agents/memory.js.map +1 -0
  106. package/dist/agents/model.d.ts +123 -0
  107. package/dist/agents/model.d.ts.map +1 -0
  108. package/dist/agents/model.js +295 -0
  109. package/dist/agents/model.js.map +1 -0
  110. package/dist/agents/modes/build.d.ts +12 -0
  111. package/dist/agents/modes/build.d.ts.map +1 -0
  112. package/dist/agents/modes/build.js +36 -0
  113. package/dist/agents/modes/build.js.map +1 -0
  114. package/dist/agents/modes/explore.d.ts +10 -0
  115. package/dist/agents/modes/explore.d.ts.map +1 -0
  116. package/dist/agents/modes/explore.js +28 -0
  117. package/dist/agents/modes/explore.js.map +1 -0
  118. package/dist/agents/modes/plan.d.ts +8 -0
  119. package/dist/agents/modes/plan.d.ts.map +1 -0
  120. package/dist/agents/modes/plan.js +46 -0
  121. package/dist/agents/modes/plan.js.map +1 -0
  122. package/dist/agents/prompts/agent-instructions.d.ts +99 -0
  123. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  124. package/dist/agents/prompts/agent-instructions.js +275 -0
  125. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  126. package/dist/agents/prompts/build.d.ts +12 -0
  127. package/dist/agents/prompts/build.d.ts.map +1 -0
  128. package/dist/agents/prompts/build.js +76 -0
  129. package/dist/agents/prompts/build.js.map +1 -0
  130. package/dist/agents/prompts/fast.d.ts +5 -0
  131. package/dist/agents/prompts/fast.d.ts.map +1 -0
  132. package/dist/agents/prompts/fast.js +26 -0
  133. package/dist/agents/prompts/fast.js.map +1 -0
  134. package/dist/agents/prompts/index.d.ts +54 -0
  135. package/dist/agents/prompts/index.d.ts.map +1 -0
  136. package/dist/agents/prompts/index.js +127 -0
  137. package/dist/agents/prompts/index.js.map +1 -0
  138. package/dist/agents/prompts/model.d.ts +5 -0
  139. package/dist/agents/prompts/model.d.ts.map +1 -0
  140. package/dist/agents/prompts/model.js +23 -0
  141. package/dist/agents/prompts/model.js.map +1 -0
  142. package/dist/agents/prompts/plan.d.ts +8 -0
  143. package/dist/agents/prompts/plan.d.ts.map +1 -0
  144. package/dist/agents/prompts/plan.js +129 -0
  145. package/dist/agents/prompts/plan.js.map +1 -0
  146. package/dist/agents/prompts/tool-guidance.d.ts +18 -0
  147. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  148. package/dist/agents/prompts/tool-guidance.js +181 -0
  149. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  150. package/dist/agents/sandbox-filesystem.d.ts +151 -0
  151. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  152. package/dist/agents/sandbox-filesystem.js +581 -0
  153. package/dist/agents/sandbox-filesystem.js.map +1 -0
  154. package/dist/agents/subagents/execute.d.ts +3 -0
  155. package/dist/agents/subagents/execute.d.ts.map +1 -0
  156. package/dist/agents/subagents/execute.js +27 -0
  157. package/dist/agents/subagents/execute.js.map +1 -0
  158. package/dist/agents/subagents/explore.d.ts +3 -0
  159. package/dist/agents/subagents/explore.d.ts.map +1 -0
  160. package/dist/agents/subagents/explore.js +18 -0
  161. package/dist/agents/subagents/explore.js.map +1 -0
  162. package/dist/agents/subagents/plan.d.ts +3 -0
  163. package/dist/agents/subagents/plan.d.ts.map +1 -0
  164. package/dist/agents/subagents/plan.js +18 -0
  165. package/dist/agents/subagents/plan.js.map +1 -0
  166. package/dist/agents/thread-caveman-state.d.ts +17 -0
  167. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  168. package/dist/agents/thread-caveman-state.js +107 -0
  169. package/dist/agents/thread-caveman-state.js.map +1 -0
  170. package/dist/agents/tool-availability.d.ts +12 -0
  171. package/dist/agents/tool-availability.d.ts.map +1 -0
  172. package/dist/agents/tool-availability.js +129 -0
  173. package/dist/agents/tool-availability.js.map +1 -0
  174. package/dist/agents/tools.d.ts +37 -0
  175. package/dist/agents/tools.d.ts.map +1 -0
  176. package/dist/agents/tools.js +131 -0
  177. package/dist/agents/tools.js.map +1 -0
  178. package/dist/agents/workflow-builder-agent.d.ts +2 -0
  179. package/dist/agents/workflow-builder-agent.d.ts.map +1 -0
  180. package/dist/agents/workflow-builder-agent.js +82 -0
  181. package/dist/agents/workflow-builder-agent.js.map +1 -0
  182. package/dist/agents/workspace.d.ts +33 -0
  183. package/dist/agents/workspace.d.ts.map +1 -0
  184. package/dist/agents/workspace.js +208 -0
  185. package/dist/agents/workspace.js.map +1 -0
  186. package/dist/analytics.d.ts +18 -0
  187. package/dist/analytics.d.ts.map +1 -0
  188. package/dist/analytics.js +162 -0
  189. package/dist/analytics.js.map +1 -0
  190. package/dist/auth/account-rotation-processor.d.ts +182 -0
  191. package/dist/auth/account-rotation-processor.d.ts.map +1 -0
  192. package/dist/auth/account-rotation-processor.js +609 -0
  193. package/dist/auth/account-rotation-processor.js.map +1 -0
  194. package/dist/auth/account-routing-context.d.ts +13 -0
  195. package/dist/auth/account-routing-context.d.ts.map +1 -0
  196. package/dist/auth/account-routing-context.js +41 -0
  197. package/dist/auth/account-routing-context.js.map +1 -0
  198. package/dist/auth/authorization-input.d.ts +16 -0
  199. package/dist/auth/authorization-input.d.ts.map +1 -0
  200. package/dist/auth/authorization-input.js +42 -0
  201. package/dist/auth/authorization-input.js.map +1 -0
  202. package/dist/auth/device-code.d.ts +93 -0
  203. package/dist/auth/device-code.d.ts.map +1 -0
  204. package/dist/auth/device-code.js +129 -0
  205. package/dist/auth/device-code.js.map +1 -0
  206. package/dist/auth/index.d.ts +13 -0
  207. package/dist/auth/index.d.ts.map +1 -0
  208. package/dist/auth/index.js +9 -0
  209. package/dist/auth/pkce.d.ts +13 -0
  210. package/dist/auth/pkce.d.ts.map +1 -0
  211. package/dist/auth/pkce.js +32 -0
  212. package/dist/auth/pkce.js.map +1 -0
  213. package/dist/auth/provider-auth-error.d.ts +12 -0
  214. package/dist/auth/provider-auth-error.d.ts.map +1 -0
  215. package/dist/auth/provider-auth-error.js +16 -0
  216. package/dist/auth/provider-auth-error.js.map +1 -0
  217. package/dist/auth/providers/anthropic.d.ts +40 -0
  218. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  219. package/dist/auth/providers/anthropic.js +120 -0
  220. package/dist/auth/providers/anthropic.js.map +1 -0
  221. package/dist/auth/providers/github-copilot.d.ts +154 -0
  222. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  223. package/dist/auth/providers/github-copilot.js +362 -0
  224. package/dist/auth/providers/github-copilot.js.map +1 -0
  225. package/dist/auth/providers/kimi-coding.d.ts +38 -0
  226. package/dist/auth/providers/kimi-coding.d.ts.map +1 -0
  227. package/dist/auth/providers/kimi-coding.js +228 -0
  228. package/dist/auth/providers/kimi-coding.js.map +1 -0
  229. package/dist/auth/providers/openai-codex.d.ts +141 -0
  230. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  231. package/dist/auth/providers/openai-codex.js +533 -0
  232. package/dist/auth/providers/openai-codex.js.map +1 -0
  233. package/dist/auth/providers/xai.d.ts +64 -0
  234. package/dist/auth/providers/xai.d.ts.map +1 -0
  235. package/dist/auth/providers/xai.js +226 -0
  236. package/dist/auth/providers/xai.js.map +1 -0
  237. package/dist/auth/storage.d.ts +214 -0
  238. package/dist/auth/storage.d.ts.map +1 -0
  239. package/dist/auth/storage.js +774 -0
  240. package/dist/auth/storage.js.map +1 -0
  241. package/dist/auth/types.d.ts +164 -0
  242. package/dist/auth/types.d.ts.map +1 -0
  243. package/dist/auth/types.js +1 -0
  244. package/dist/clipboard/index.d.ts +26 -0
  245. package/dist/clipboard/index.d.ts.map +1 -0
  246. package/dist/clipboard/index.js +226 -0
  247. package/dist/clipboard/index.js.map +1 -0
  248. package/dist/constants.d.ts +12 -0
  249. package/dist/constants.d.ts.map +1 -0
  250. package/dist/constants.js +20 -0
  251. package/dist/constants.js.map +1 -0
  252. package/dist/error-classification.d.ts +10 -0
  253. package/dist/error-classification.d.ts.map +1 -0
  254. package/dist/error-classification.js +22 -0
  255. package/dist/error-classification.js.map +1 -0
  256. package/dist/evals/context-builder.d.ts +41 -0
  257. package/dist/evals/context-builder.d.ts.map +1 -0
  258. package/dist/evals/context-builder.js +161 -0
  259. package/dist/evals/context-builder.js.map +1 -0
  260. package/dist/evals/index.d.ts +4 -0
  261. package/dist/evals/index.d.ts.map +1 -0
  262. package/dist/evals/index.js +5 -0
  263. package/dist/evals/scorers/classify-command.d.ts +31 -0
  264. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  265. package/dist/evals/scorers/classify-command.js +73 -0
  266. package/dist/evals/scorers/classify-command.js.map +1 -0
  267. package/dist/evals/scorers/efficiency.d.ts +44 -0
  268. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  269. package/dist/evals/scorers/efficiency.js +259 -0
  270. package/dist/evals/scorers/efficiency.js.map +1 -0
  271. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  272. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  273. package/dist/evals/scorers/extract-tools.js +60 -0
  274. package/dist/evals/scorers/extract-tools.js.map +1 -0
  275. package/dist/evals/scorers/index.d.ts +3 -0
  276. package/dist/evals/scorers/index.d.ts.map +1 -0
  277. package/dist/evals/scorers/index.js +3 -0
  278. package/dist/evals/scorers/outcome.d.ts +49 -0
  279. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  280. package/dist/evals/scorers/outcome.js +347 -0
  281. package/dist/evals/scorers/outcome.js.map +1 -0
  282. package/dist/experimental-agent.d.ts +11 -0
  283. package/dist/experimental-agent.d.ts.map +1 -0
  284. package/dist/experimental-agent.js +36 -0
  285. package/dist/experimental-agent.js.map +1 -0
  286. package/dist/goal-manager.d.ts +114 -0
  287. package/dist/goal-manager.d.ts.map +1 -0
  288. package/dist/goal-manager.js +354 -0
  289. package/dist/goal-manager.js.map +1 -0
  290. package/dist/goal-signal.d.ts +14 -0
  291. package/dist/goal-signal.d.ts.map +1 -0
  292. package/dist/goal-signal.js +17 -0
  293. package/dist/goal-signal.js.map +1 -0
  294. package/dist/headless/cli.d.ts +48 -0
  295. package/dist/headless/cli.d.ts.map +1 -0
  296. package/dist/headless/cli.js +239 -0
  297. package/dist/headless/cli.js.map +1 -0
  298. package/dist/headless/flags.d.ts +33 -0
  299. package/dist/headless/flags.d.ts.map +1 -0
  300. package/dist/headless/flags.js +203 -0
  301. package/dist/headless/flags.js.map +1 -0
  302. package/dist/headless/format.d.ts +39 -0
  303. package/dist/headless/format.d.ts.map +1 -0
  304. package/dist/headless/format.js +85 -0
  305. package/dist/headless/format.js.map +1 -0
  306. package/dist/headless/index.d.ts +25 -0
  307. package/dist/headless/index.d.ts.map +1 -0
  308. package/dist/headless/index.js +6 -0
  309. package/dist/headless/policy.d.ts +17 -0
  310. package/dist/headless/policy.d.ts.map +1 -0
  311. package/dist/headless/policy.js +42 -0
  312. package/dist/headless/policy.js.map +1 -0
  313. package/dist/headless/run-mc.d.ts +7 -0
  314. package/dist/headless/run-mc.d.ts.map +1 -0
  315. package/dist/headless/run-mc.js +408 -0
  316. package/dist/headless/run-mc.js.map +1 -0
  317. package/dist/headless/types.d.ts +174 -0
  318. package/dist/headless/types.d.ts.map +1 -0
  319. package/dist/headless/types.js +19 -0
  320. package/dist/headless/types.js.map +1 -0
  321. package/dist/hooks/config.d.ts +11 -0
  322. package/dist/hooks/config.d.ts.map +1 -0
  323. package/dist/hooks/config.js +80 -0
  324. package/dist/hooks/config.js.map +1 -0
  325. package/dist/hooks/executor.d.ts +13 -0
  326. package/dist/hooks/executor.d.ts.map +1 -0
  327. package/dist/hooks/executor.js +129 -0
  328. package/dist/hooks/executor.js.map +1 -0
  329. package/dist/hooks/index.d.ts +6 -0
  330. package/dist/hooks/index.d.ts.map +1 -0
  331. package/dist/hooks/index.js +5 -0
  332. package/dist/hooks/manager.d.ts +54 -0
  333. package/dist/hooks/manager.d.ts.map +1 -0
  334. package/dist/hooks/manager.js +241 -0
  335. package/dist/hooks/manager.js.map +1 -0
  336. package/dist/hooks/types.d.ts +172 -0
  337. package/dist/hooks/types.d.ts.map +1 -0
  338. package/dist/hooks/types.js +8 -0
  339. package/dist/hooks/types.js.map +1 -0
  340. package/dist/index.d.ts +463 -0
  341. package/dist/index.d.ts.map +1 -0
  342. package/dist/index.js +1305 -0
  343. package/dist/index.js.map +1 -0
  344. package/dist/ipc/ipc-reporter.d.ts +14 -0
  345. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  346. package/dist/ipc/ipc-reporter.js +21 -0
  347. package/dist/ipc/ipc-reporter.js.map +1 -0
  348. package/dist/knowledge-inspector.d.ts +123 -0
  349. package/dist/knowledge-inspector.d.ts.map +1 -0
  350. package/dist/knowledge-inspector.js +516 -0
  351. package/dist/knowledge-inspector.js.map +1 -0
  352. package/dist/knowledge-scope.d.ts +35 -0
  353. package/dist/knowledge-scope.d.ts.map +1 -0
  354. package/dist/knowledge-scope.js +47 -0
  355. package/dist/knowledge-scope.js.map +1 -0
  356. package/dist/lsp/client.d.ts +56 -0
  357. package/dist/lsp/client.d.ts.map +1 -0
  358. package/dist/lsp/client.js +251 -0
  359. package/dist/lsp/client.js.map +1 -0
  360. package/dist/lsp/index.d.ts +4 -0
  361. package/dist/lsp/index.d.ts.map +1 -0
  362. package/dist/lsp/index.js +4 -0
  363. package/dist/lsp/language.d.ts +9 -0
  364. package/dist/lsp/language.d.ts.map +1 -0
  365. package/dist/lsp/language.js +44 -0
  366. package/dist/lsp/language.js.map +1 -0
  367. package/dist/lsp/manager.d.ts +34 -0
  368. package/dist/lsp/manager.d.ts.map +1 -0
  369. package/dist/lsp/manager.js +82 -0
  370. package/dist/lsp/manager.js.map +1 -0
  371. package/dist/lsp/server.d.ts +27 -0
  372. package/dist/lsp/server.d.ts.map +1 -0
  373. package/dist/lsp/server.js +159 -0
  374. package/dist/lsp/server.js.map +1 -0
  375. package/dist/lsp/workspace.d.ts +9 -0
  376. package/dist/lsp/workspace.d.ts.map +1 -0
  377. package/dist/lsp/workspace.js +55 -0
  378. package/dist/lsp/workspace.js.map +1 -0
  379. package/dist/mcp/config.d.ts +77 -0
  380. package/dist/mcp/config.d.ts.map +1 -0
  381. package/dist/mcp/config.js +316 -0
  382. package/dist/mcp/config.js.map +1 -0
  383. package/dist/mcp/index.d.ts +6 -0
  384. package/dist/mcp/index.d.ts.map +1 -0
  385. package/dist/mcp/index.js +3 -0
  386. package/dist/mcp/manager.d.ts +102 -0
  387. package/dist/mcp/manager.d.ts.map +1 -0
  388. package/dist/mcp/manager.js +650 -0
  389. package/dist/mcp/manager.js.map +1 -0
  390. package/dist/mcp/state.d.ts +35 -0
  391. package/dist/mcp/state.d.ts.map +1 -0
  392. package/dist/mcp/state.js +97 -0
  393. package/dist/mcp/state.js.map +1 -0
  394. package/dist/mcp/types.d.ts +139 -0
  395. package/dist/mcp/types.d.ts.map +1 -0
  396. package/dist/mcp/types.js +1 -0
  397. package/dist/onboarding/custom-packs.d.ts +7 -0
  398. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  399. package/dist/onboarding/custom-packs.js +20 -0
  400. package/dist/onboarding/custom-packs.js.map +1 -0
  401. package/dist/onboarding/custom-providers.d.ts +4 -0
  402. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  403. package/dist/onboarding/custom-providers.js +30 -0
  404. package/dist/onboarding/custom-providers.js.map +1 -0
  405. package/dist/onboarding/index.d.ts +5 -0
  406. package/dist/onboarding/index.d.ts.map +1 -0
  407. package/dist/onboarding/index.js +3 -0
  408. package/dist/onboarding/om-settings.d.ts +47 -0
  409. package/dist/onboarding/om-settings.d.ts.map +1 -0
  410. package/dist/onboarding/om-settings.js +83 -0
  411. package/dist/onboarding/om-settings.js.map +1 -0
  412. package/dist/onboarding/pack-activation.d.ts +52 -0
  413. package/dist/onboarding/pack-activation.d.ts.map +1 -0
  414. package/dist/onboarding/pack-activation.js +108 -0
  415. package/dist/onboarding/pack-activation.js.map +1 -0
  416. package/dist/onboarding/packs.d.ts +102 -0
  417. package/dist/onboarding/packs.d.ts.map +1 -0
  418. package/dist/onboarding/packs.js +278 -0
  419. package/dist/onboarding/packs.js.map +1 -0
  420. package/dist/onboarding/settings.d.ts +538 -0
  421. package/dist/onboarding/settings.d.ts.map +1 -0
  422. package/dist/onboarding/settings.js +1060 -0
  423. package/dist/onboarding/settings.js.map +1 -0
  424. package/dist/permissions.d.ts +55 -0
  425. package/dist/permissions.d.ts.map +1 -0
  426. package/dist/permissions.js +142 -0
  427. package/dist/permissions.js.map +1 -0
  428. package/dist/plugin.d.ts +156 -0
  429. package/dist/plugin.d.ts.map +1 -0
  430. package/dist/plugin.js +30 -0
  431. package/dist/plugin.js.map +1 -0
  432. package/dist/plugins/dependencies.d.ts +9 -0
  433. package/dist/plugins/dependencies.d.ts.map +1 -0
  434. package/dist/plugins/dependencies.js +87 -0
  435. package/dist/plugins/dependencies.js.map +1 -0
  436. package/dist/plugins/install.d.ts +21 -0
  437. package/dist/plugins/install.d.ts.map +1 -0
  438. package/dist/plugins/install.js +190 -0
  439. package/dist/plugins/install.js.map +1 -0
  440. package/dist/plugins/loader.d.ts +19 -0
  441. package/dist/plugins/loader.d.ts.map +1 -0
  442. package/dist/plugins/loader.js +260 -0
  443. package/dist/plugins/loader.js.map +1 -0
  444. package/dist/plugins/manager.d.ts +98 -0
  445. package/dist/plugins/manager.d.ts.map +1 -0
  446. package/dist/plugins/manager.js +456 -0
  447. package/dist/plugins/manager.js.map +1 -0
  448. package/dist/plugins/manifest.d.ts +14 -0
  449. package/dist/plugins/manifest.d.ts.map +1 -0
  450. package/dist/plugins/manifest.js +50 -0
  451. package/dist/plugins/manifest.js.map +1 -0
  452. package/dist/plugins/package-link.d.ts +3 -0
  453. package/dist/plugins/package-link.d.ts.map +1 -0
  454. package/dist/plugins/package-link.js +61 -0
  455. package/dist/plugins/package-link.js.map +1 -0
  456. package/dist/plugins/paths.d.ts +10 -0
  457. package/dist/plugins/paths.d.ts.map +1 -0
  458. package/dist/plugins/paths.js +25 -0
  459. package/dist/plugins/paths.js.map +1 -0
  460. package/dist/plugins/registry.d.ts +8 -0
  461. package/dist/plugins/registry.d.ts.map +1 -0
  462. package/dist/plugins/registry.js +112 -0
  463. package/dist/plugins/registry.js.map +1 -0
  464. package/dist/plugins/scaffold.d.ts +10 -0
  465. package/dist/plugins/scaffold.d.ts.map +1 -0
  466. package/dist/plugins/scaffold.js +116 -0
  467. package/dist/plugins/scaffold.js.map +1 -0
  468. package/dist/plugins/signal-lane.d.ts +58 -0
  469. package/dist/plugins/signal-lane.d.ts.map +1 -0
  470. package/dist/plugins/signal-lane.js +166 -0
  471. package/dist/plugins/signal-lane.js.map +1 -0
  472. package/dist/plugins/types.d.ts +81 -0
  473. package/dist/plugins/types.d.ts.map +1 -0
  474. package/dist/plugins/types.js +1 -0
  475. package/dist/process-memory-diagnostics.d.ts +135 -0
  476. package/dist/process-memory-diagnostics.d.ts.map +1 -0
  477. package/dist/process-memory-diagnostics.js +499 -0
  478. package/dist/process-memory-diagnostics.js.map +1 -0
  479. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  480. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  481. package/dist/processors/plan-rejection-abort.js +54 -0
  482. package/dist/processors/plan-rejection-abort.js.map +1 -0
  483. package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
  484. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  485. package/dist/providers/amazon-bedrock-gateway.js +144 -0
  486. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  487. package/dist/providers/amazon-bedrock.d.ts +28 -0
  488. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  489. package/dist/providers/amazon-bedrock.js +102 -0
  490. package/dist/providers/amazon-bedrock.js.map +1 -0
  491. package/dist/providers/anthropic-prompt-cache.d.ts +19 -0
  492. package/dist/providers/anthropic-prompt-cache.d.ts.map +1 -0
  493. package/dist/providers/anthropic-prompt-cache.js +11 -0
  494. package/dist/providers/anthropic-prompt-cache.js.map +1 -0
  495. package/dist/providers/anthropic-thinking.d.ts +5 -0
  496. package/dist/providers/anthropic-thinking.d.ts.map +1 -0
  497. package/dist/providers/anthropic-thinking.js +25 -0
  498. package/dist/providers/anthropic-thinking.js.map +1 -0
  499. package/dist/providers/claude-max.d.ts +67 -0
  500. package/dist/providers/claude-max.d.ts.map +1 -0
  501. package/dist/providers/claude-max.js +226 -0
  502. package/dist/providers/claude-max.js.map +1 -0
  503. package/dist/providers/github-copilot-gateway.d.ts +35 -0
  504. package/dist/providers/github-copilot-gateway.d.ts.map +1 -0
  505. package/dist/providers/github-copilot-gateway.js +61 -0
  506. package/dist/providers/github-copilot-gateway.js.map +1 -0
  507. package/dist/providers/github-copilot.d.ts +60 -0
  508. package/dist/providers/github-copilot.d.ts.map +1 -0
  509. package/dist/providers/github-copilot.js +318 -0
  510. package/dist/providers/github-copilot.js.map +1 -0
  511. package/dist/providers/google-thinking.d.ts +31 -0
  512. package/dist/providers/google-thinking.d.ts.map +1 -0
  513. package/dist/providers/google-thinking.js +67 -0
  514. package/dist/providers/google-thinking.js.map +1 -0
  515. package/dist/providers/kimi-coding.d.ts +14 -0
  516. package/dist/providers/kimi-coding.d.ts.map +1 -0
  517. package/dist/providers/kimi-coding.js +78 -0
  518. package/dist/providers/kimi-coding.js.map +1 -0
  519. package/dist/providers/model-ids.d.ts +30 -0
  520. package/dist/providers/model-ids.d.ts.map +1 -0
  521. package/dist/providers/model-ids.js +79 -0
  522. package/dist/providers/model-ids.js.map +1 -0
  523. package/dist/providers/openai-codex.d.ts +84 -0
  524. package/dist/providers/openai-codex.d.ts.map +1 -0
  525. package/dist/providers/openai-codex.js +347 -0
  526. package/dist/providers/openai-codex.js.map +1 -0
  527. package/dist/providers/provider-thinking.d.ts +23 -0
  528. package/dist/providers/provider-thinking.d.ts.map +1 -0
  529. package/dist/providers/provider-thinking.js +64 -0
  530. package/dist/providers/provider-thinking.js.map +1 -0
  531. package/dist/providers/thinking-request.d.ts +14 -0
  532. package/dist/providers/thinking-request.d.ts.map +1 -0
  533. package/dist/providers/thinking-request.js +90 -0
  534. package/dist/providers/thinking-request.js.map +1 -0
  535. package/dist/providers/xai.d.ts +33 -0
  536. package/dist/providers/xai.d.ts.map +1 -0
  537. package/dist/providers/xai.js +71 -0
  538. package/dist/providers/xai.js.map +1 -0
  539. package/dist/schedules/index.d.ts +10 -0
  540. package/dist/schedules/index.d.ts.map +1 -0
  541. package/dist/schedules/index.js +6 -0
  542. package/dist/schedules/interval.d.ts +49 -0
  543. package/dist/schedules/interval.d.ts.map +1 -0
  544. package/dist/schedules/interval.js +215 -0
  545. package/dist/schedules/interval.js.map +1 -0
  546. package/dist/schedules/prompt.d.ts +36 -0
  547. package/dist/schedules/prompt.d.ts.map +1 -0
  548. package/dist/schedules/prompt.js +39 -0
  549. package/dist/schedules/prompt.js.map +1 -0
  550. package/dist/schedules/run-script.d.ts +8 -0
  551. package/dist/schedules/run-script.d.ts.map +1 -0
  552. package/dist/schedules/run-script.js +83 -0
  553. package/dist/schedules/run-script.js.map +1 -0
  554. package/dist/schedules/scheduler.d.ts +101 -0
  555. package/dist/schedules/scheduler.d.ts.map +1 -0
  556. package/dist/schedules/scheduler.js +169 -0
  557. package/dist/schedules/scheduler.js.map +1 -0
  558. package/dist/schedules/tools.d.ts +57 -0
  559. package/dist/schedules/tools.d.ts.map +1 -0
  560. package/dist/schedules/tools.js +220 -0
  561. package/dist/schedules/tools.js.map +1 -0
  562. package/dist/schema.d.ts +499 -0
  563. package/dist/schema.d.ts.map +1 -0
  564. package/dist/schema.js +134 -0
  565. package/dist/schema.js.map +1 -0
  566. package/dist/theme-palette.d.ts +17 -0
  567. package/dist/theme-palette.d.ts.map +1 -0
  568. package/dist/theme-palette.js +21 -0
  569. package/dist/theme-palette.js.map +1 -0
  570. package/dist/thinking-catalog.d.ts +4 -0
  571. package/dist/thinking-catalog.d.ts.map +1 -0
  572. package/dist/thinking-catalog.js +13 -0
  573. package/dist/thinking-catalog.js.map +1 -0
  574. package/dist/thinking.d.ts +37 -0
  575. package/dist/thinking.d.ts.map +1 -0
  576. package/dist/thinking.js +137 -0
  577. package/dist/thinking.js.map +1 -0
  578. package/dist/tool-names.d.ts +77 -0
  579. package/dist/tool-names.d.ts.map +1 -0
  580. package/dist/tool-names.js +56 -0
  581. package/dist/tool-names.js.map +1 -0
  582. package/dist/tools/index.d.ts +6 -0
  583. package/dist/tools/index.d.ts.map +1 -0
  584. package/dist/tools/index.js +3 -0
  585. package/dist/tools/request-sandbox-access.d.ts +6 -0
  586. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  587. package/dist/tools/request-sandbox-access.js +80 -0
  588. package/dist/tools/request-sandbox-access.js.map +1 -0
  589. package/dist/tools/utils.d.ts +20 -0
  590. package/dist/tools/utils.d.ts.map +1 -0
  591. package/dist/tools/utils.js +32 -0
  592. package/dist/tools/utils.js.map +1 -0
  593. package/dist/tools/web-search.d.ts +114 -0
  594. package/dist/tools/web-search.d.ts.map +1 -0
  595. package/dist/tools/web-search.js +155 -0
  596. package/dist/tools/web-search.js.map +1 -0
  597. package/dist/tools/workflows/create-workflow.d.ts +7 -0
  598. package/dist/tools/workflows/create-workflow.d.ts.map +1 -0
  599. package/dist/tools/workflows/create-workflow.js +81 -0
  600. package/dist/tools/workflows/create-workflow.js.map +1 -0
  601. package/dist/tools/workflows/delete-workflow.d.ts +7 -0
  602. package/dist/tools/workflows/delete-workflow.d.ts.map +1 -0
  603. package/dist/tools/workflows/delete-workflow.js +21 -0
  604. package/dist/tools/workflows/delete-workflow.js.map +1 -0
  605. package/dist/tools/workflows/ephemeral-memory.d.ts +28 -0
  606. package/dist/tools/workflows/ephemeral-memory.d.ts.map +1 -0
  607. package/dist/tools/workflows/ephemeral-memory.js +44 -0
  608. package/dist/tools/workflows/ephemeral-memory.js.map +1 -0
  609. package/dist/tools/workflows/extract-json-schema.d.ts +12 -0
  610. package/dist/tools/workflows/extract-json-schema.d.ts.map +1 -0
  611. package/dist/tools/workflows/extract-json-schema.js +22 -0
  612. package/dist/tools/workflows/extract-json-schema.js.map +1 -0
  613. package/dist/tools/workflows/get-workflow.d.ts +11 -0
  614. package/dist/tools/workflows/get-workflow.d.ts.map +1 -0
  615. package/dist/tools/workflows/get-workflow.js +34 -0
  616. package/dist/tools/workflows/get-workflow.js.map +1 -0
  617. package/dist/tools/workflows/list-available-agents.d.ts +8 -0
  618. package/dist/tools/workflows/list-available-agents.d.ts.map +1 -0
  619. package/dist/tools/workflows/list-available-agents.js +32 -0
  620. package/dist/tools/workflows/list-available-agents.js.map +1 -0
  621. package/dist/tools/workflows/list-available-classifiers.d.ts +19 -0
  622. package/dist/tools/workflows/list-available-classifiers.d.ts.map +1 -0
  623. package/dist/tools/workflows/list-available-classifiers.js +56 -0
  624. package/dist/tools/workflows/list-available-classifiers.js.map +1 -0
  625. package/dist/tools/workflows/list-available-tools.d.ts +9 -0
  626. package/dist/tools/workflows/list-available-tools.d.ts.map +1 -0
  627. package/dist/tools/workflows/list-available-tools.js +40 -0
  628. package/dist/tools/workflows/list-available-tools.js.map +1 -0
  629. package/dist/tools/workflows/list-available-workflows.d.ts +9 -0
  630. package/dist/tools/workflows/list-available-workflows.d.ts.map +1 -0
  631. package/dist/tools/workflows/list-available-workflows.js +32 -0
  632. package/dist/tools/workflows/list-available-workflows.js.map +1 -0
  633. package/dist/tools/workflows/list-workflows.d.ts +9 -0
  634. package/dist/tools/workflows/list-workflows.d.ts.map +1 -0
  635. package/dist/tools/workflows/list-workflows.js +33 -0
  636. package/dist/tools/workflows/list-workflows.js.map +1 -0
  637. package/dist/tools/workflows/run-workflow.d.ts +9 -0
  638. package/dist/tools/workflows/run-workflow.d.ts.map +1 -0
  639. package/dist/tools/workflows/run-workflow.js +52 -0
  640. package/dist/tools/workflows/run-workflow.js.map +1 -0
  641. package/dist/tools/workflows/save-workflow.d.ts +1125 -0
  642. package/dist/tools/workflows/save-workflow.d.ts.map +1 -0
  643. package/dist/tools/workflows/save-workflow.js +28 -0
  644. package/dist/tools/workflows/save-workflow.js.map +1 -0
  645. package/dist/tools/workflows/tool-ids.d.ts +16 -0
  646. package/dist/tools/workflows/tool-ids.d.ts.map +1 -0
  647. package/dist/tools/workflows/tool-ids.js +20 -0
  648. package/dist/tools/workflows/tool-ids.js.map +1 -0
  649. package/dist/utils/binaries.d.ts +7 -0
  650. package/dist/utils/binaries.d.ts.map +1 -0
  651. package/dist/utils/binaries.js +78 -0
  652. package/dist/utils/binaries.js.map +1 -0
  653. package/dist/utils/debug-log.d.ts +12 -0
  654. package/dist/utils/debug-log.d.ts.map +1 -0
  655. package/dist/utils/debug-log.js +59 -0
  656. package/dist/utils/debug-log.js.map +1 -0
  657. package/dist/utils/discarding-scores-storage.d.ts +33 -0
  658. package/dist/utils/discarding-scores-storage.d.ts.map +1 -0
  659. package/dist/utils/discarding-scores-storage.js +54 -0
  660. package/dist/utils/discarding-scores-storage.js.map +1 -0
  661. package/dist/utils/errors.d.ts +36 -0
  662. package/dist/utils/errors.d.ts.map +1 -0
  663. package/dist/utils/errors.js +196 -0
  664. package/dist/utils/errors.js.map +1 -0
  665. package/dist/utils/gateway-sync.d.ts +26 -0
  666. package/dist/utils/gateway-sync.d.ts.map +1 -0
  667. package/dist/utils/gateway-sync.js +61 -0
  668. package/dist/utils/gateway-sync.js.map +1 -0
  669. package/dist/utils/maintenance-lock.d.ts +42 -0
  670. package/dist/utils/maintenance-lock.d.ts.map +1 -0
  671. package/dist/utils/maintenance-lock.js +199 -0
  672. package/dist/utils/maintenance-lock.js.map +1 -0
  673. package/dist/utils/notification-dispatch.d.ts +59 -0
  674. package/dist/utils/notification-dispatch.d.ts.map +1 -0
  675. package/dist/utils/notification-dispatch.js +109 -0
  676. package/dist/utils/notification-dispatch.js.map +1 -0
  677. package/dist/utils/open-url.d.ts +10 -0
  678. package/dist/utils/open-url.d.ts.map +1 -0
  679. package/dist/utils/open-url.js +30 -0
  680. package/dist/utils/open-url.js.map +1 -0
  681. package/dist/utils/path-security.d.ts +2 -0
  682. package/dist/utils/path-security.d.ts.map +1 -0
  683. package/dist/utils/path-security.js +10 -0
  684. package/dist/utils/path-security.js.map +1 -0
  685. package/dist/utils/plan-diff.d.ts +25 -0
  686. package/dist/utils/plan-diff.d.ts.map +1 -0
  687. package/dist/utils/plan-diff.js +62 -0
  688. package/dist/utils/plan-diff.js.map +1 -0
  689. package/dist/utils/plans.d.ts +59 -0
  690. package/dist/utils/plans.d.ts.map +1 -0
  691. package/dist/utils/plans.js +117 -0
  692. package/dist/utils/plans.js.map +1 -0
  693. package/dist/utils/project.d.ts +160 -0
  694. package/dist/utils/project.d.ts.map +1 -0
  695. package/dist/utils/project.js +364 -0
  696. package/dist/utils/project.js.map +1 -0
  697. package/dist/utils/prune-cli.d.ts +24 -0
  698. package/dist/utils/prune-cli.d.ts.map +1 -0
  699. package/dist/utils/prune-cli.js +125 -0
  700. package/dist/utils/prune-cli.js.map +1 -0
  701. package/dist/utils/signals-pubsub.d.ts +101 -0
  702. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  703. package/dist/utils/signals-pubsub.js +410 -0
  704. package/dist/utils/signals-pubsub.js.map +1 -0
  705. package/dist/utils/slash-command-loader.d.ts +52 -0
  706. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  707. package/dist/utils/slash-command-loader.js +142 -0
  708. package/dist/utils/slash-command-loader.js.map +1 -0
  709. package/dist/utils/slash-command-processor.d.ts +14 -0
  710. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  711. package/dist/utils/slash-command-processor.js +109 -0
  712. package/dist/utils/slash-command-processor.js.map +1 -0
  713. package/dist/utils/stdin-pipe.d.ts +33 -0
  714. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  715. package/dist/utils/stdin-pipe.js +96 -0
  716. package/dist/utils/stdin-pipe.js.map +1 -0
  717. package/dist/utils/storage-factory.d.ts +50 -0
  718. package/dist/utils/storage-factory.d.ts.map +1 -0
  719. package/dist/utils/storage-factory.js +121 -0
  720. package/dist/utils/storage-factory.js.map +1 -0
  721. package/dist/utils/storage-maintenance.d.ts +121 -0
  722. package/dist/utils/storage-maintenance.d.ts.map +1 -0
  723. package/dist/utils/storage-maintenance.js +355 -0
  724. package/dist/utils/storage-maintenance.js.map +1 -0
  725. package/dist/utils/thread-lock.d.ts +26 -0
  726. package/dist/utils/thread-lock.d.ts.map +1 -0
  727. package/dist/utils/thread-lock.js +112 -0
  728. package/dist/utils/thread-lock.js.map +1 -0
  729. package/dist/utils/token-estimator.d.ts +3 -0
  730. package/dist/utils/token-estimator.d.ts.map +1 -0
  731. package/dist/utils/token-estimator.js +21 -0
  732. package/dist/utils/token-estimator.js.map +1 -0
  733. package/dist/utils/update-check.d.ts +151 -0
  734. package/dist/utils/update-check.d.ts.map +1 -0
  735. package/dist/utils/update-check.js +432 -0
  736. package/dist/utils/update-check.js.map +1 -0
  737. package/dist/voice/stt-registry.d.ts +64 -0
  738. package/dist/voice/stt-registry.d.ts.map +1 -0
  739. package/dist/voice/stt-registry.js +144 -0
  740. package/dist/voice/stt-registry.js.map +1 -0
  741. package/dist/workflows/register-primitives.d.ts +52 -0
  742. package/dist/workflows/register-primitives.d.ts.map +1 -0
  743. package/dist/workflows/register-primitives.js +40 -0
  744. package/dist/workflows/register-primitives.js.map +1 -0
  745. package/dist/workflows/service.d.ts +64 -0
  746. package/dist/workflows/service.d.ts.map +1 -0
  747. package/dist/workflows/service.js +53 -0
  748. package/dist/workflows/service.js.map +1 -0
  749. package/package.json +107 -0
@@ -0,0 +1,318 @@
1
+ import { COPILOT_HEADERS, fetchCopilotModels, getGitHubCopilotBaseUrl } from "../auth/providers/github-copilot.js";
2
+ import { AuthStorage } from "../auth/storage.js";
3
+ import { ProviderAuthRequiredError } from "../auth/provider-auth-error.js";
4
+ import { wrapLanguageModel } from "ai";
5
+ import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
6
+ import { GoogleSchemaCompatLayer, applyCompatLayer } from "@mastra/schema-compat";
7
+ //#region src/providers/github-copilot.ts
8
+ /**
9
+ * GitHub Copilot OAuth Provider
10
+ *
11
+ * Uses OAuth tokens from AuthStorage to authenticate with GitHub Copilot's chat API.
12
+ * The Copilot API speaks an OpenAI-compatible chat format, so we plug
13
+ * `@ai-sdk/openai-compatible` into Copilot's API URL and use a custom fetch to inject
14
+ * the bearer token and Copilot-specific headers.
15
+ *
16
+ * Inspired by:
17
+ * - opencode: https://github.com/anomalyco/opencode/blob/dev/packages/opencode/src/plugin/github-copilot/copilot.ts
18
+ * - pi-mono: https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/utils/oauth/github-copilot.ts
19
+ */
20
+ const COPILOT_PROVIDER_ID = "github-copilot";
21
+ let authStorageInstance = null;
22
+ /** Get or create the shared AuthStorage instance. */
23
+ function getAuthStorage() {
24
+ if (!authStorageInstance) authStorageInstance = new AuthStorage();
25
+ return authStorageInstance;
26
+ }
27
+ /** Set a custom AuthStorage instance (useful for tests / TUI integration). */
28
+ function setAuthStorage(storage) {
29
+ authStorageInstance = storage ?? null;
30
+ }
31
+ /**
32
+ * Heuristic: did this request come from the agent (e.g. tool result follow-ups) rather
33
+ * than a fresh user turn? Mirrors opencode's `isAgent` logic — Copilot bills these
34
+ * differently via the `x-initiator` header.
35
+ */
36
+ function detectIsAgent(body) {
37
+ if (!body || typeof body !== "object") return false;
38
+ const obj = body;
39
+ const messages = obj.messages;
40
+ if (Array.isArray(messages) && messages.length > 0) {
41
+ const last = messages[messages.length - 1];
42
+ if (last?.role && last.role !== "user") return true;
43
+ if (Array.isArray(last?.content)) {
44
+ if (last.content.some((part) => part && typeof part === "object" && part.type === "tool_result")) return true;
45
+ }
46
+ }
47
+ const input = obj.input;
48
+ if (Array.isArray(input) && input.length > 0) {
49
+ const last = input[input.length - 1];
50
+ if (last?.role && last.role !== "user") return true;
51
+ }
52
+ return false;
53
+ }
54
+ /** Detect image/vision content in a request body. */
55
+ function detectIsVision(body) {
56
+ if (!body || typeof body !== "object") return false;
57
+ const obj = body;
58
+ const matchPart = (part) => {
59
+ if (!part || typeof part !== "object") return false;
60
+ const t = part.type;
61
+ return t === "image" || t === "image_url" || t === "input_image";
62
+ };
63
+ const messages = obj.messages;
64
+ if (Array.isArray(messages)) return messages.some((msg) => msg && typeof msg === "object" && Array.isArray(msg.content) && msg.content.some(matchPart));
65
+ const input = obj.input;
66
+ if (Array.isArray(input)) return input.some((item) => item && typeof item === "object" && Array.isArray(item.content) && item.content.some(matchPart));
67
+ return false;
68
+ }
69
+ /**
70
+ * Build a fetch wrapper that authenticates with GitHub Copilot OAuth.
71
+ *
72
+ * - Injects the short-lived Copilot bearer token (auto-refreshed by AuthStorage).
73
+ * - Adds the VS Code-like Copilot headers required by the API.
74
+ * - Rewrites the request URL onto the per-token API base when `rewriteUrl` is true.
75
+ */
76
+ function buildGitHubCopilotOAuthFetch(opts = {}) {
77
+ return (async (url, init) => {
78
+ const { headers: initHeaders, ...requestInit } = init ?? {};
79
+ const request = new Request(url, requestInit);
80
+ const storage = opts.authStorage ?? getAuthStorage();
81
+ storage.reload();
82
+ const cred = storage.get(COPILOT_PROVIDER_ID);
83
+ if (!cred || cred.type !== "oauth") throw new ProviderAuthRequiredError("Not logged in to GitHub Copilot.");
84
+ let accessToken;
85
+ let activeCred;
86
+ if (storage.getOAuthCredential) {
87
+ activeCred = await storage.getOAuthCredential(COPILOT_PROVIDER_ID);
88
+ accessToken = activeCred?.access;
89
+ } else {
90
+ accessToken = await storage.getApiKey(COPILOT_PROVIDER_ID);
91
+ storage.reload();
92
+ const reloaded = storage.get(COPILOT_PROVIDER_ID);
93
+ activeCred = reloaded?.type === "oauth" ? {
94
+ ...reloaded,
95
+ access: accessToken ?? reloaded.access
96
+ } : void 0;
97
+ }
98
+ if (!accessToken || !activeCred) throw new ProviderAuthRequiredError("Failed to refresh the GitHub Copilot token.");
99
+ const enterpriseUrl = activeCred.enterpriseUrl;
100
+ let parsedBody;
101
+ try {
102
+ const body = await request.clone().text();
103
+ parsedBody = body ? JSON.parse(body) : void 0;
104
+ } catch {
105
+ parsedBody = void 0;
106
+ }
107
+ const isAgent = detectIsAgent(parsedBody);
108
+ const isVision = detectIsVision(parsedBody);
109
+ const headers = new Headers(url instanceof Request ? url.headers : void 0);
110
+ if (initHeaders) new Headers(initHeaders).forEach((value, key) => headers.set(key, value));
111
+ headers.delete("authorization");
112
+ headers.delete("x-api-key");
113
+ headers.set("Authorization", `Bearer ${accessToken}`);
114
+ headers.set("x-initiator", isAgent ? "agent" : "user");
115
+ headers.set("Openai-Intent", "conversation-edits");
116
+ if (isVision) headers.set("Copilot-Vision-Request", "true");
117
+ for (const [key, value] of Object.entries(COPILOT_HEADERS)) if (!headers.has(key)) headers.set(key, value);
118
+ const finalUrl = opts.rewriteUrl !== false ? rewriteToCopilotBase(request, accessToken, enterpriseUrl) : new URL(request.url);
119
+ const body = request.method === "GET" || request.method === "HEAD" ? void 0 : request.body;
120
+ const finalRequest = new Request(finalUrl, {
121
+ method: request.method,
122
+ headers,
123
+ body,
124
+ signal: request.signal,
125
+ redirect: request.redirect,
126
+ integrity: request.integrity,
127
+ ...body ? { duplex: "half" } : {}
128
+ });
129
+ try {
130
+ return await fetch(finalRequest);
131
+ } catch (error) {
132
+ if (error && typeof error === "object") Object.assign(error, { requestUrl: finalUrl.toString() });
133
+ throw error;
134
+ }
135
+ });
136
+ }
137
+ function rewriteToCopilotBase(url, token, enterpriseDomain) {
138
+ const original = url instanceof URL ? url : new URL(typeof url === "string" ? url : url.url);
139
+ const base = new URL(getGitHubCopilotBaseUrl(token, enterpriseDomain));
140
+ const pathname = original.pathname.replace(/^\/v1(\/|$)/, "/");
141
+ return new URL(`${pathname}${original.search}`, base);
142
+ }
143
+ function isGeminiModel(modelId) {
144
+ return modelId.startsWith("gemini-");
145
+ }
146
+ function applyGeminiSchemaCompatToTools(modelId, tools) {
147
+ if (!Array.isArray(tools)) return tools;
148
+ const compatLayer = new GoogleSchemaCompatLayer({
149
+ provider: COPILOT_PROVIDER_ID,
150
+ modelId,
151
+ supportsStructuredOutputs: false
152
+ });
153
+ return tools.map((tool) => {
154
+ if (!tool || typeof tool !== "object" || tool.type !== "function") return tool;
155
+ const functionTool = tool;
156
+ if (!functionTool.inputSchema) return tool;
157
+ return {
158
+ ...functionTool,
159
+ inputSchema: applyCompatLayer({
160
+ schema: functionTool.inputSchema,
161
+ compatLayers: [compatLayer],
162
+ mode: "aiSdkSchema"
163
+ }).jsonSchema
164
+ };
165
+ });
166
+ }
167
+ /** Middleware that prevents sending parameters Copilot's endpoint rejects. */
168
+ function createCopilotMiddleware(modelId) {
169
+ return {
170
+ specificationVersion: "v3",
171
+ transformParams: async ({ params }) => {
172
+ if (params.temperature !== void 0 && params.temperature !== null) delete params.topP;
173
+ if (isGeminiModel(modelId)) params.tools = applyGeminiSchemaCompatToTools(modelId, params.tools);
174
+ return params;
175
+ }
176
+ };
177
+ }
178
+ /**
179
+ * Creates a model that talks to GitHub Copilot using OAuth credentials.
180
+ *
181
+ * Copilot's `/chat/completions` endpoint is OpenAI-compatible, but GitHub Copilot
182
+ * is not OpenAI. Use the generic OpenAI-compatible adapter with Copilot's base URL
183
+ * instead of the OpenAI provider plus URL rewriting.
184
+ */
185
+ function githubCopilotProvider(modelId = "gpt-4.1", options) {
186
+ const headers = options?.headers;
187
+ return wrapLanguageModel({
188
+ model: createOpenAICompatible({
189
+ name: COPILOT_PROVIDER_ID,
190
+ baseURL: "https://api.githubcopilot.com",
191
+ apiKey: process.env.NODE_ENV === "test" || process.env.VITEST ? "test-api-key" : "oauth-placeholder",
192
+ headers,
193
+ fetch: process.env.NODE_ENV === "test" || process.env.VITEST ? void 0 : buildGitHubCopilotOAuthFetch({
194
+ rewriteUrl: false,
195
+ authStorage: options?.authStorage
196
+ })
197
+ }).chatModel(modelId),
198
+ middleware: [createCopilotMiddleware(modelId)]
199
+ });
200
+ }
201
+ /**
202
+ * Hard-coded fallback advertised when the live `/models` request fails (network
203
+ * down, expired token, etc.). Keep this conservative because the live catalog is
204
+ * the source of truth for the user's currently-enabled Copilot models.
205
+ *
206
+ * Available across all paid Copilot tiers and free of premium-request charges.
207
+ */
208
+ const COPILOT_FALLBACK_MODELS = [{
209
+ id: "gpt-4.1",
210
+ name: "GPT-4.1",
211
+ vendor: "OpenAI",
212
+ supportedEndpoints: ["/chat/completions"],
213
+ isAnthropicShaped: false,
214
+ supportsVision: true,
215
+ supportsToolCalls: true
216
+ }];
217
+ const CATALOG_TTL_MS = 600 * 1e3;
218
+ const CATALOG_FAILURE_TTL_MS = 60 * 1e3;
219
+ const CATALOG_FETCH_TIMEOUT_MS = 5e3;
220
+ const catalogCache = /* @__PURE__ */ new Map();
221
+ const inflightFetches = /* @__PURE__ */ new Map();
222
+ /**
223
+ * Resolve the account identity for a credential read through `getApiKey`, which
224
+ * may await a refresh with a rotation landing inside it. The registry is
225
+ * consulted on both sides of that await, and only an id that survived it names
226
+ * the account that produced the token: an id that moved describes whichever
227
+ * account is active *now*, so trusting it would file this fetch's models under
228
+ * the wrong account and serve them to it. Unidentified is the safe answer — the
229
+ * caller then skips the TTL cache, exactly as it does when the store exposes no
230
+ * registry at all. (`AuthStorage` never needs this: its snapshots name their
231
+ * account.)
232
+ */
233
+ function readStableAccountId(storage, idBeforeToken) {
234
+ const idAfterToken = storage.getActiveAccount?.(COPILOT_PROVIDER_ID)?.id;
235
+ return idBeforeToken !== void 0 && idBeforeToken === idAfterToken ? idAfterToken : void 0;
236
+ }
237
+ /** Reset the in-process Copilot catalog cache (test seam, also useful after logout). */
238
+ function clearCopilotCatalogCache() {
239
+ catalogCache.clear();
240
+ inflightFetches.clear();
241
+ }
242
+ /**
243
+ * Return the user's currently-available Copilot models.
244
+ *
245
+ * - Returns `[]` when the user is not logged in to GitHub Copilot.
246
+ * - Returns the cached list when a recent fetch succeeded.
247
+ * - On the cache-miss / expired path, fetches `/models` with a 5s timeout, filters
248
+ * to picker-enabled and non-policy-disabled models, then caches for 10 minutes.
249
+ * - On fetch failure, returns a small hard-coded fallback (so packs still work
250
+ * offline) and caches that for 1 minute to avoid hammering the API.
251
+ *
252
+ * Concurrent calls during a fetch share the inflight promise.
253
+ */
254
+ async function getCopilotModelCatalog(opts = {}) {
255
+ const storage = opts.authStorage ?? getAuthStorage();
256
+ let accessToken;
257
+ let accountInstanceId;
258
+ let enterpriseUrl;
259
+ if (storage.getOAuthCredential) {
260
+ const credential = await storage.getOAuthCredential(COPILOT_PROVIDER_ID);
261
+ if (!credential || credential.type !== "oauth") return [];
262
+ accessToken = credential.access;
263
+ accountInstanceId = credential.accountInstanceId;
264
+ enterpriseUrl = credential.enterpriseUrl;
265
+ } else {
266
+ const idBeforeToken = storage.getActiveAccount?.(COPILOT_PROVIDER_ID)?.id;
267
+ accessToken = await storage.getApiKey(COPILOT_PROVIDER_ID);
268
+ if (!accessToken) return [];
269
+ accountInstanceId = readStableAccountId(storage, idBeforeToken);
270
+ const stored = storage.get(COPILOT_PROVIDER_ID);
271
+ if (stored?.type === "oauth") enterpriseUrl = stored.enterpriseUrl;
272
+ }
273
+ const baseUrl = getGitHubCopilotBaseUrl(accessToken, enterpriseUrl);
274
+ const credentialKey = accountInstanceId === void 0 ? void 0 : `${accountInstanceId}\0${baseUrl}`;
275
+ const dedupeKey = credentialKey;
276
+ const now = Date.now();
277
+ const cached = credentialKey ? catalogCache.get(credentialKey) : void 0;
278
+ if (cached && now - cached.fetchedAt < cached.ttl) return cached.models;
279
+ const existingFetch = dedupeKey === void 0 ? void 0 : inflightFetches.get(dedupeKey);
280
+ if (existingFetch) return existingFetch;
281
+ const fetchPromise = (async () => {
282
+ try {
283
+ const controller = new AbortController();
284
+ const timer = setTimeout(() => controller.abort(), CATALOG_FETCH_TIMEOUT_MS);
285
+ try {
286
+ const models = await fetchCopilotModels({
287
+ baseUrl,
288
+ bearerToken: accessToken,
289
+ signal: controller.signal
290
+ });
291
+ if (credentialKey) catalogCache.set(credentialKey, {
292
+ fetchedAt: Date.now(),
293
+ ttl: CATALOG_TTL_MS,
294
+ models
295
+ });
296
+ return models;
297
+ } finally {
298
+ clearTimeout(timer);
299
+ }
300
+ } catch (error) {
301
+ if (credentialKey) catalogCache.set(credentialKey, {
302
+ fetchedAt: Date.now(),
303
+ ttl: CATALOG_FAILURE_TTL_MS,
304
+ models: COPILOT_FALLBACK_MODELS
305
+ });
306
+ console.warn("Failed to fetch live GitHub Copilot models, using fallback list:", error instanceof Error ? error.message : error);
307
+ return COPILOT_FALLBACK_MODELS;
308
+ } finally {
309
+ if (dedupeKey !== void 0) inflightFetches.delete(dedupeKey);
310
+ }
311
+ })();
312
+ if (dedupeKey !== void 0) inflightFetches.set(dedupeKey, fetchPromise);
313
+ return fetchPromise;
314
+ }
315
+ //#endregion
316
+ export { buildGitHubCopilotOAuthFetch, clearCopilotCatalogCache, getAuthStorage, getCopilotModelCatalog, githubCopilotProvider, setAuthStorage };
317
+
318
+ //# sourceMappingURL=github-copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-copilot.js","names":[],"sources":["../../src/providers/github-copilot.ts"],"sourcesContent":["/**\n * GitHub Copilot OAuth Provider\n *\n * Uses OAuth tokens from AuthStorage to authenticate with GitHub Copilot's chat API.\n * The Copilot API speaks an OpenAI-compatible chat format, so we plug\n * `@ai-sdk/openai-compatible` into Copilot's API URL and use a custom fetch to inject\n * the bearer token and Copilot-specific headers.\n *\n * Inspired by:\n * - opencode: https://github.com/anomalyco/opencode/blob/dev/packages/opencode/src/plugin/github-copilot/copilot.ts\n * - pi-mono: https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/utils/oauth/github-copilot.ts\n */\n\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible';\nimport type { MastraModelConfig } from '@mastra/core/llm';\nimport type { JSONSchema7 } from '@mastra/schema-compat';\nimport { applyCompatLayer, GoogleSchemaCompatLayer } from '@mastra/schema-compat';\nimport { wrapLanguageModel } from 'ai';\nimport type { LanguageModelMiddleware } from 'ai';\nimport { ProviderAuthRequiredError } from '../auth/provider-auth-error.js';\nimport { COPILOT_HEADERS, fetchCopilotModels, getGitHubCopilotBaseUrl } from '../auth/providers/github-copilot.js';\nimport type { CopilotModelEntry, GitHubCopilotCredentials } from '../auth/providers/github-copilot.js';\nimport { AuthStorage } from '../auth/storage.js';\nimport type { CredentialStore, OAuthCredential } from '../auth/types.js';\n\nconst COPILOT_PROVIDER_ID = 'github-copilot';\n\n// Singleton auth storage instance (shared with claude-max.ts / openai-codex.ts when not overridden).\nlet authStorageInstance: AuthStorage | null = null;\n\n/** Get or create the shared AuthStorage instance. */\nexport function getAuthStorage(): AuthStorage {\n if (!authStorageInstance) {\n authStorageInstance = new AuthStorage();\n }\n return authStorageInstance;\n}\n\n/** Set a custom AuthStorage instance (useful for tests / TUI integration). */\nexport function setAuthStorage(storage: AuthStorage | undefined): void {\n authStorageInstance = storage ?? null;\n}\n\n/**\n * Heuristic: did this request come from the agent (e.g. tool result follow-ups) rather\n * than a fresh user turn? Mirrors opencode's `isAgent` logic — Copilot bills these\n * differently via the `x-initiator` header.\n */\nfunction detectIsAgent(body: unknown): boolean {\n if (!body || typeof body !== 'object') return false;\n const obj = body as Record<string, unknown>;\n\n const messages = obj.messages;\n if (Array.isArray(messages) && messages.length > 0) {\n const last = messages[messages.length - 1] as { role?: string; content?: unknown };\n if (last?.role && last.role !== 'user') return true;\n if (Array.isArray(last?.content)) {\n // If the last user turn carries any tool_result parts, treat it as an agent turn.\n const hasToolResult = last.content.some(\n (part: unknown) => part && typeof part === 'object' && (part as { type?: string }).type === 'tool_result',\n );\n if (hasToolResult) return true;\n }\n }\n\n const input = obj.input;\n if (Array.isArray(input) && input.length > 0) {\n const last = input[input.length - 1] as { role?: string };\n if (last?.role && last.role !== 'user') return true;\n }\n\n return false;\n}\n\n/** Detect image/vision content in a request body. */\nfunction detectIsVision(body: unknown): boolean {\n if (!body || typeof body !== 'object') return false;\n const obj = body as Record<string, unknown>;\n\n const matchPart = (part: unknown): boolean => {\n if (!part || typeof part !== 'object') return false;\n const t = (part as { type?: string }).type;\n return t === 'image' || t === 'image_url' || t === 'input_image';\n };\n\n const messages = obj.messages;\n if (Array.isArray(messages)) {\n return messages.some(\n (msg: unknown) =>\n msg &&\n typeof msg === 'object' &&\n Array.isArray((msg as { content?: unknown }).content) &&\n ((msg as { content: unknown[] }).content as unknown[]).some(matchPart),\n );\n }\n\n const input = obj.input;\n if (Array.isArray(input)) {\n return input.some(\n (item: unknown) =>\n item &&\n typeof item === 'object' &&\n Array.isArray((item as { content?: unknown }).content) &&\n ((item as { content: unknown[] }).content as unknown[]).some(matchPart),\n );\n }\n\n return false;\n}\n\n/**\n * Build a fetch wrapper that authenticates with GitHub Copilot OAuth.\n *\n * - Injects the short-lived Copilot bearer token (auto-refreshed by AuthStorage).\n * - Adds the VS Code-like Copilot headers required by the API.\n * - Rewrites the request URL onto the per-token API base when `rewriteUrl` is true.\n */\nexport function buildGitHubCopilotOAuthFetch(\n opts: { authStorage?: CredentialStore; rewriteUrl?: boolean } = {},\n): typeof fetch {\n return (async (url: string | URL | Request, init?: Parameters<typeof fetch>[1]) => {\n const { headers: initHeaders, ...requestInit } = init ?? {};\n const request = new Request(url, requestInit);\n const storage = opts.authStorage ?? getAuthStorage();\n storage.reload();\n\n const cred = storage.get(COPILOT_PROVIDER_ID);\n if (!cred || cred.type !== 'oauth') {\n throw new ProviderAuthRequiredError('Not logged in to GitHub Copilot.');\n }\n\n let accessToken: string | undefined;\n let activeCred: OAuthCredential | undefined;\n if (storage.getOAuthCredential) {\n activeCred = await storage.getOAuthCredential(COPILOT_PROVIDER_ID);\n accessToken = activeCred?.access;\n } else {\n accessToken = await storage.getApiKey(COPILOT_PROVIDER_ID);\n storage.reload();\n const reloaded = storage.get(COPILOT_PROVIDER_ID);\n activeCred = reloaded?.type === 'oauth' ? { ...reloaded, access: accessToken ?? reloaded.access } : undefined;\n }\n if (!accessToken || !activeCred) {\n throw new ProviderAuthRequiredError('Failed to refresh the GitHub Copilot token.');\n }\n const enterpriseUrl = (activeCred as GitHubCopilotCredentials).enterpriseUrl;\n\n let parsedBody: unknown;\n try {\n const body = await request.clone().text();\n parsedBody = body ? JSON.parse(body) : undefined;\n } catch {\n parsedBody = undefined;\n }\n const isAgent = detectIsAgent(parsedBody);\n const isVision = detectIsVision(parsedBody);\n\n const headers = new Headers(url instanceof Request ? url.headers : undefined);\n if (initHeaders) new Headers(initHeaders).forEach((value, key) => headers.set(key, value));\n headers.delete('authorization');\n headers.delete('x-api-key');\n headers.set('Authorization', `Bearer ${accessToken}`);\n headers.set('x-initiator', isAgent ? 'agent' : 'user');\n headers.set('Openai-Intent', 'conversation-edits');\n if (isVision) {\n headers.set('Copilot-Vision-Request', 'true');\n }\n for (const [key, value] of Object.entries(COPILOT_HEADERS)) {\n // Only set if caller didn't already provide it (allow overrides for tests).\n if (!headers.has(key)) {\n headers.set(key, value);\n }\n }\n\n const finalUrl =\n opts.rewriteUrl !== false ? rewriteToCopilotBase(request, accessToken, enterpriseUrl) : new URL(request.url);\n\n const body = request.method === 'GET' || request.method === 'HEAD' ? undefined : request.body;\n const finalRequest = new Request(finalUrl, {\n method: request.method,\n headers,\n body,\n signal: request.signal,\n redirect: request.redirect,\n integrity: request.integrity,\n ...(body ? ({ duplex: 'half' } as RequestInit) : {}),\n });\n try {\n return await fetch(finalRequest);\n } catch (error) {\n if (error && typeof error === 'object') {\n Object.assign(error as Record<string, unknown>, {\n requestUrl: finalUrl.toString(),\n });\n }\n throw error;\n }\n }) as typeof fetch;\n}\n\nfunction rewriteToCopilotBase(url: string | URL | Request, token: string, enterpriseDomain?: string): URL {\n const original = url instanceof URL ? url : new URL(typeof url === 'string' ? url : (url as Request).url);\n const base = new URL(getGitHubCopilotBaseUrl(token, enterpriseDomain));\n // Copilot's OpenAI-compatible API serves endpoints at the root of the base host\n // (`/chat/completions`, `/responses`, `/models`, ...) — not under a `/v1/` prefix\n // like api.openai.com does. The @ai-sdk/openai default baseURL is\n // `https://api.openai.com/v1`, so the SDK builds requests like\n // `https://api.openai.com/v1/chat/completions`. Strip the leading `/v1` segment\n // when rewriting onto the Copilot base or Copilot will return 404 Not Found.\n const pathname = original.pathname.replace(/^\\/v1(\\/|$)/, '/');\n return new URL(`${pathname}${original.search}`, base);\n}\n\nfunction isGeminiModel(modelId: string): boolean {\n return modelId.startsWith('gemini-');\n}\n\nfunction applyGeminiSchemaCompatToTools(modelId: string, tools: unknown): unknown {\n if (!Array.isArray(tools)) {\n return tools;\n }\n\n const compatLayer = new GoogleSchemaCompatLayer({\n provider: COPILOT_PROVIDER_ID,\n modelId,\n supportsStructuredOutputs: false,\n });\n\n return tools.map(tool => {\n if (!tool || typeof tool !== 'object' || (tool as { type?: unknown }).type !== 'function') {\n return tool;\n }\n\n const functionTool = tool as { inputSchema?: JSONSchema7 };\n if (!functionTool.inputSchema) {\n return tool;\n }\n\n return {\n ...functionTool,\n inputSchema: applyCompatLayer({\n schema: functionTool.inputSchema,\n compatLayers: [compatLayer],\n mode: 'aiSdkSchema',\n }).jsonSchema as JSONSchema7,\n };\n });\n}\n\n/** Middleware that prevents sending parameters Copilot's endpoint rejects. */\nfunction createCopilotMiddleware(modelId: string): LanguageModelMiddleware {\n return {\n specificationVersion: 'v3',\n transformParams: async ({ params }) => {\n if (params.temperature !== undefined && params.temperature !== null) {\n delete params.topP;\n }\n\n if (isGeminiModel(modelId)) {\n (params as { tools?: unknown }).tools = applyGeminiSchemaCompatToTools(\n modelId,\n (params as { tools?: unknown }).tools,\n );\n }\n\n return params;\n },\n };\n}\n\n/**\n * Creates a model that talks to GitHub Copilot using OAuth credentials.\n *\n * Copilot's `/chat/completions` endpoint is OpenAI-compatible, but GitHub Copilot\n * is not OpenAI. Use the generic OpenAI-compatible adapter with Copilot's base URL\n * instead of the OpenAI provider plus URL rewriting.\n */\nexport function githubCopilotProvider(\n modelId: string = 'gpt-4.1',\n options?: { headers?: Record<string, string>; authStorage?: CredentialStore },\n): MastraModelConfig {\n const headers = options?.headers;\n const copilot = createOpenAICompatible({\n name: COPILOT_PROVIDER_ID,\n baseURL: 'https://api.githubcopilot.com',\n apiKey: process.env.NODE_ENV === 'test' || process.env.VITEST ? 'test-api-key' : 'oauth-placeholder',\n headers,\n fetch:\n process.env.NODE_ENV === 'test' || process.env.VITEST\n ? undefined\n : (buildGitHubCopilotOAuthFetch({ rewriteUrl: false, authStorage: options?.authStorage }) as any),\n });\n\n return wrapLanguageModel({\n model: copilot.chatModel(modelId),\n middleware: [createCopilotMiddleware(modelId)],\n });\n}\n\n// ---------------------------------------------------------------------------\n// Live model catalog\n// ---------------------------------------------------------------------------\n\n/**\n * Hard-coded fallback advertised when the live `/models` request fails (network\n * down, expired token, etc.). Keep this conservative because the live catalog is\n * the source of truth for the user's currently-enabled Copilot models.\n *\n * Available across all paid Copilot tiers and free of premium-request charges.\n */\nconst COPILOT_FALLBACK_MODELS: CopilotModelEntry[] = [\n {\n id: 'gpt-4.1',\n name: 'GPT-4.1',\n vendor: 'OpenAI',\n supportedEndpoints: ['/chat/completions'],\n isAnthropicShaped: false,\n supportsVision: true,\n supportsToolCalls: true,\n },\n];\n\nconst CATALOG_TTL_MS = 10 * 60 * 1000;\nconst CATALOG_FAILURE_TTL_MS = 60 * 1000;\nconst CATALOG_FETCH_TIMEOUT_MS = 5_000;\n\ninterface CatalogCacheEntry {\n fetchedAt: number;\n ttl: number;\n models: CopilotModelEntry[];\n}\n\nconst catalogCache = new Map<string, CatalogCacheEntry>();\nconst inflightFetches = new Map<string, Promise<CopilotModelEntry[]>>();\n\n/**\n * Resolve the account identity for a credential read through `getApiKey`, which\n * may await a refresh with a rotation landing inside it. The registry is\n * consulted on both sides of that await, and only an id that survived it names\n * the account that produced the token: an id that moved describes whichever\n * account is active *now*, so trusting it would file this fetch's models under\n * the wrong account and serve them to it. Unidentified is the safe answer — the\n * caller then skips the TTL cache, exactly as it does when the store exposes no\n * registry at all. (`AuthStorage` never needs this: its snapshots name their\n * account.)\n */\nfunction readStableAccountId(storage: CredentialStore, idBeforeToken: string | undefined): string | undefined {\n const idAfterToken = storage.getActiveAccount?.(COPILOT_PROVIDER_ID)?.id;\n return idBeforeToken !== undefined && idBeforeToken === idAfterToken ? idAfterToken : undefined;\n}\n\n/** Reset the in-process Copilot catalog cache (test seam, also useful after logout). */\nexport function clearCopilotCatalogCache(): void {\n catalogCache.clear();\n inflightFetches.clear();\n}\n\n/**\n * Return the user's currently-available Copilot models.\n *\n * - Returns `[]` when the user is not logged in to GitHub Copilot.\n * - Returns the cached list when a recent fetch succeeded.\n * - On the cache-miss / expired path, fetches `/models` with a 5s timeout, filters\n * to picker-enabled and non-policy-disabled models, then caches for 10 minutes.\n * - On fetch failure, returns a small hard-coded fallback (so packs still work\n * offline) and caches that for 1 minute to avoid hammering the API.\n *\n * Concurrent calls during a fetch share the inflight promise.\n */\nexport async function getCopilotModelCatalog(\n opts: { authStorage?: CredentialStore } = {},\n): Promise<CopilotModelEntry[]> {\n const storage = opts.authStorage ?? getAuthStorage();\n\n // Resolve one coherent credential snapshot before consulting the cache so a\n // token can never be paired with another account's enterprise endpoint.\n // `getOAuthCredential` is optional (deployed stores have no local registry),\n // so fall back to the always-present `getApiKey`, taking any enterprise\n // endpoint from the same slot via `get()`.\n let accessToken: string | undefined;\n let accountInstanceId: string | undefined;\n let enterpriseUrl: string | undefined;\n if (storage.getOAuthCredential) {\n const credential = await storage.getOAuthCredential(COPILOT_PROVIDER_ID);\n if (!credential || credential.type !== 'oauth') return [];\n accessToken = credential.access;\n // A snapshot that names its account is coherent by construction — the store\n // read the identity and the token in the same breath. One that does not\n // cannot be attributed to a registry entry we then read afterwards, because\n // a rotation may have landed in between; leave it unnamed so the caller\n // skips the TTL cache instead of guessing. (`AuthStorage` always stamps.)\n accountInstanceId = credential.accountInstanceId;\n enterpriseUrl = (credential as GitHubCopilotCredentials).enterpriseUrl;\n } else {\n // This store republishes its registry but not the OAuth snapshot API, so the\n // identity has to come from the registry. `getApiKey` may await a refresh and\n // a rotation can land inside it, so bracket the fetch: only an id that held\n // still names the account that produced this token.\n const idBeforeToken = storage.getActiveAccount?.(COPILOT_PROVIDER_ID)?.id;\n accessToken = await storage.getApiKey(COPILOT_PROVIDER_ID);\n if (!accessToken) return [];\n accountInstanceId = readStableAccountId(storage, idBeforeToken);\n const stored = storage.get(COPILOT_PROVIDER_ID);\n if (stored?.type === 'oauth') {\n enterpriseUrl = (stored as GitHubCopilotCredentials).enterpriseUrl;\n }\n // The id is non-secret, and keying per account is what keeps entitlements\n // (per account, per `github-copilot-catalog.test.ts`) from leaking across a\n // rotation. Deriving the key from the token is what `cba11389e7` removed.\n }\n const baseUrl = getGitHubCopilotBaseUrl(accessToken, enterpriseUrl);\n // No identity means the store cannot name the account it just served, so the\n // TTL cache cannot be keyed per account — one entry would outlive the request\n // and serve those models to every other account of the store. The in-flight\n // map is no safer: two callers that resolved *different* accounts of an\n // unnamed store would otherwise collide on one key and share whichever\n // catalog was fetched first. So both caches are identified-only, and an\n // unnamed store pays one `/models` request per call.\n const credentialKey = accountInstanceId === undefined ? undefined : `${accountInstanceId}\\0${baseUrl}`;\n const dedupeKey = credentialKey;\n\n const now = Date.now();\n const cached = credentialKey ? catalogCache.get(credentialKey) : undefined;\n if (cached && now - cached.fetchedAt < cached.ttl) return cached.models;\n\n const existingFetch = dedupeKey === undefined ? undefined : inflightFetches.get(dedupeKey);\n if (existingFetch) return existingFetch;\n\n const fetchPromise = (async (): Promise<CopilotModelEntry[]> => {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), CATALOG_FETCH_TIMEOUT_MS);\n try {\n const models = await fetchCopilotModels({\n baseUrl,\n bearerToken: accessToken,\n signal: controller.signal,\n });\n if (credentialKey) catalogCache.set(credentialKey, { fetchedAt: Date.now(), ttl: CATALOG_TTL_MS, models });\n return models;\n } finally {\n clearTimeout(timer);\n }\n } catch (error) {\n if (credentialKey) {\n catalogCache.set(credentialKey, {\n fetchedAt: Date.now(),\n ttl: CATALOG_FAILURE_TTL_MS,\n models: COPILOT_FALLBACK_MODELS,\n });\n }\n console.warn(\n 'Failed to fetch live GitHub Copilot models, using fallback list:',\n error instanceof Error ? error.message : error,\n );\n return COPILOT_FALLBACK_MODELS;\n } finally {\n if (dedupeKey !== undefined) inflightFetches.delete(dedupeKey);\n }\n })();\n if (dedupeKey !== undefined) inflightFetches.set(dedupeKey, fetchPromise);\n return fetchPromise;\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Google (Gemini) thinking-level middleware.
3
+ *
4
+ * Maps the Mastra Code session thinking level (`off|low|medium|high|xhigh|max`)
5
+ * onto the thinking control each Gemini family accepts:
6
+ * - Gemini 3+: `thinkingConfig.thinkingLevel` (Gemini 3 Pro only accepts `low|high`).
7
+ * - Gemini 2.5: `thinkingConfig.thinkingBudget` (token budget).
8
+ * Unknown model families get no thinking config, so requests are unchanged.
9
+ */
10
+ import type { LanguageModelMiddleware } from 'ai';
11
+ import type { ActiveThinkingLevel, ThinkingLevelSetting } from '../thinking.js';
12
+ type GeminiLevel = 'low' | 'medium' | 'high';
13
+ type GoogleThinkingConfig = {
14
+ thinkingLevel: 'minimal' | GeminiLevel;
15
+ } | {
16
+ thinkingBudget: number;
17
+ };
18
+ export declare function runGeminiThinkingLevel(modelId: string, level: ActiveThinkingLevel): ThinkingLevelSetting;
19
+ /**
20
+ * Resolve the Google thinking config for a model and session level.
21
+ * Returns `undefined` for `off`, unset levels, and unrecognized model families.
22
+ */
23
+ export declare function resolveGoogleThinkingConfig(modelId: string, level: ThinkingLevelSetting | undefined): GoogleThinkingConfig | undefined;
24
+ /**
25
+ * Create middleware that injects the resolved config into
26
+ * `providerOptions.google.thinkingConfig`. Returns `undefined` when there is
27
+ * nothing to inject, so callers wrap nothing.
28
+ */
29
+ export declare function createGoogleThinkingMiddleware(modelId: string, level: ThinkingLevelSetting | undefined): LanguageModelMiddleware | undefined;
30
+ export {};
31
+ //# sourceMappingURL=google-thinking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-thinking.d.ts","sourceRoot":"","sources":["../../src/providers/google-thinking.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,IAAI,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,KAAK,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C,KAAK,oBAAoB,GAAG;IAAE,aAAa,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAGxG;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACtC,oBAAoB,GAAG,SAAS,CASlC;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACtC,uBAAuB,GAAG,SAAS,CAkBrC"}
@@ -0,0 +1,67 @@
1
+ //#region src/providers/google-thinking.ts
2
+ const GEMINI_25_BUDGETS = {
3
+ low: 1024,
4
+ medium: 8192,
5
+ high: 24576
6
+ };
7
+ function getGeminiThinkingFamily(modelId) {
8
+ const id = modelId.toLowerCase();
9
+ if (id.startsWith("gemini-2.5")) return "budget";
10
+ if (id.startsWith("gemini-3-pro")) return "low-high";
11
+ if (id.startsWith("gemini-3.1-flash-image") || id.startsWith("gemini-3.1-flash-lite-image")) return "minimal-high";
12
+ if (/^gemini-\d/.test(id) && !id.startsWith("gemini-1") && !id.startsWith("gemini-2")) return "levels";
13
+ }
14
+ function geminiLevelForFamily(family, level) {
15
+ const cappedAtHigh = level === "xhigh" || level === "max" ? "high" : level;
16
+ if ((family === "low-high" || family === "minimal-high") && cappedAtHigh === "medium") return "high";
17
+ return cappedAtHigh;
18
+ }
19
+ function runGeminiThinkingLevel(modelId, level) {
20
+ const family = getGeminiThinkingFamily(modelId);
21
+ return family ? geminiLevelForFamily(family, level) : "off";
22
+ }
23
+ /**
24
+ * Resolve the Google thinking config for a model and session level.
25
+ * Returns `undefined` for `off`, unset levels, and unrecognized model families.
26
+ */
27
+ function resolveGoogleThinkingConfig(modelId, level) {
28
+ if (!level || level === "off") return void 0;
29
+ const family = getGeminiThinkingFamily(modelId);
30
+ if (!family) return void 0;
31
+ const geminiLevel = geminiLevelForFamily(family, level);
32
+ if (family === "budget") return { thinkingBudget: GEMINI_25_BUDGETS[geminiLevel] };
33
+ if (family === "minimal-high") return { thinkingLevel: geminiLevel === "low" ? "minimal" : "high" };
34
+ return { thinkingLevel: geminiLevel };
35
+ }
36
+ /**
37
+ * Create middleware that injects the resolved config into
38
+ * `providerOptions.google.thinkingConfig`. Returns `undefined` when there is
39
+ * nothing to inject, so callers wrap nothing.
40
+ */
41
+ function createGoogleThinkingMiddleware(modelId, level) {
42
+ const config = resolveGoogleThinkingConfig(modelId, level);
43
+ if (!config) return void 0;
44
+ return {
45
+ specificationVersion: "v3",
46
+ transformParams: async ({ params }) => {
47
+ const google = params.providerOptions?.google ?? {};
48
+ const thinkingConfig = google.thinkingConfig ?? {};
49
+ if (thinkingConfig.thinkingBudget !== void 0 || thinkingConfig.thinkingLevel !== void 0) return params;
50
+ params.providerOptions = {
51
+ ...params.providerOptions,
52
+ google: {
53
+ ...google,
54
+ thinkingConfig: {
55
+ ...thinkingConfig,
56
+ ...config
57
+ }
58
+ }
59
+ };
60
+ return params;
61
+ }
62
+ };
63
+ }
64
+ //#endregion
65
+ export { createGoogleThinkingMiddleware, resolveGoogleThinkingConfig, runGeminiThinkingLevel };
66
+
67
+ //# sourceMappingURL=google-thinking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-thinking.js","names":[],"sources":["../../src/providers/google-thinking.ts"],"sourcesContent":["/**\n * Google (Gemini) thinking-level middleware.\n *\n * Maps the Mastra Code session thinking level (`off|low|medium|high|xhigh|max`)\n * onto the thinking control each Gemini family accepts:\n * - Gemini 3+: `thinkingConfig.thinkingLevel` (Gemini 3 Pro only accepts `low|high`).\n * - Gemini 2.5: `thinkingConfig.thinkingBudget` (token budget).\n * Unknown model families get no thinking config, so requests are unchanged.\n */\n\nimport type { LanguageModelMiddleware } from 'ai';\nimport type { ActiveThinkingLevel, ThinkingLevelSetting } from '../thinking.js';\n\ntype GeminiLevel = 'low' | 'medium' | 'high';\ntype GeminiThinkingFamily = 'budget' | 'low-high' | 'minimal-high' | 'levels';\ntype GoogleThinkingConfig = { thinkingLevel: 'minimal' | GeminiLevel } | { thinkingBudget: number };\n\n// Budgets stay within the smallest Gemini 2.5 maximum (24576 for Flash / Flash-Lite).\nconst GEMINI_25_BUDGETS: Record<GeminiLevel, number> = { low: 1024, medium: 8192, high: 24576 };\n\nfunction getGeminiThinkingFamily(modelId: string): GeminiThinkingFamily | undefined {\n const id = modelId.toLowerCase();\n if (id.startsWith('gemini-2.5')) return 'budget';\n // Only Gemini 3 Pro lacks `medium`; Gemini 3.1 Pro accepts it.\n if (id.startsWith('gemini-3-pro')) return 'low-high';\n // Gemini 3.1 Flash Image models only accept `minimal|high`.\n if (id.startsWith('gemini-3.1-flash-image') || id.startsWith('gemini-3.1-flash-lite-image')) return 'minimal-high';\n if (/^gemini-\\d/.test(id) && !id.startsWith('gemini-1') && !id.startsWith('gemini-2')) return 'levels';\n return undefined;\n}\n\nfunction geminiLevelForFamily(family: GeminiThinkingFamily, level: ActiveThinkingLevel): GeminiLevel {\n const cappedAtHigh = level === 'xhigh' || level === 'max' ? 'high' : level;\n const hasNoMedium = family === 'low-high' || family === 'minimal-high';\n if (hasNoMedium && cappedAtHigh === 'medium') return 'high';\n return cappedAtHigh;\n}\n\nexport function runGeminiThinkingLevel(modelId: string, level: ActiveThinkingLevel): ThinkingLevelSetting {\n const family = getGeminiThinkingFamily(modelId);\n return family ? geminiLevelForFamily(family, level) : 'off';\n}\n\n/**\n * Resolve the Google thinking config for a model and session level.\n * Returns `undefined` for `off`, unset levels, and unrecognized model families.\n */\nexport function resolveGoogleThinkingConfig(\n modelId: string,\n level: ThinkingLevelSetting | undefined,\n): GoogleThinkingConfig | undefined {\n if (!level || level === 'off') return undefined;\n const family = getGeminiThinkingFamily(modelId);\n if (!family) return undefined;\n\n const geminiLevel = geminiLevelForFamily(family, level);\n if (family === 'budget') return { thinkingBudget: GEMINI_25_BUDGETS[geminiLevel] };\n if (family === 'minimal-high') return { thinkingLevel: geminiLevel === 'low' ? 'minimal' : 'high' };\n return { thinkingLevel: geminiLevel };\n}\n\n/**\n * Create middleware that injects the resolved config into\n * `providerOptions.google.thinkingConfig`. Returns `undefined` when there is\n * nothing to inject, so callers wrap nothing.\n */\nexport function createGoogleThinkingMiddleware(\n modelId: string,\n level: ThinkingLevelSetting | undefined,\n): LanguageModelMiddleware | undefined {\n const config = resolveGoogleThinkingConfig(modelId, level);\n if (!config) return undefined;\n\n return {\n specificationVersion: 'v3',\n transformParams: async ({ params }) => {\n const google = (params.providerOptions?.google ?? {}) as Record<string, unknown>;\n const thinkingConfig = (google.thinkingConfig ?? {}) as Record<string, unknown>;\n // Explicit caller settings win; Google rejects budget and level together.\n if (thinkingConfig.thinkingBudget !== undefined || thinkingConfig.thinkingLevel !== undefined) return params;\n params.providerOptions = {\n ...params.providerOptions,\n google: { ...google, thinkingConfig: { ...thinkingConfig, ...config } },\n } as typeof params.providerOptions;\n return params;\n },\n };\n}\n"],"mappings":";AAkBA,MAAM,oBAAiD;CAAE,KAAK;CAAM,QAAQ;CAAM,MAAM;AAAM;AAE9F,SAAS,wBAAwB,SAAmD;CAClF,MAAM,KAAK,QAAQ,YAAY;CAC/B,IAAI,GAAG,WAAW,YAAY,GAAG,OAAO;CAExC,IAAI,GAAG,WAAW,cAAc,GAAG,OAAO;CAE1C,IAAI,GAAG,WAAW,wBAAwB,KAAK,GAAG,WAAW,6BAA6B,GAAG,OAAO;CACpG,IAAI,aAAa,KAAK,EAAE,KAAK,CAAC,GAAG,WAAW,UAAU,KAAK,CAAC,GAAG,WAAW,UAAU,GAAG,OAAO;AAEhG;AAEA,SAAS,qBAAqB,QAA8B,OAAyC;CACnG,MAAM,eAAe,UAAU,WAAW,UAAU,QAAQ,SAAS;CAErE,KADoB,WAAW,cAAc,WAAW,mBACrC,iBAAiB,UAAU,OAAO;CACrD,OAAO;AACT;AAEA,SAAgB,uBAAuB,SAAiB,OAAkD;CACxG,MAAM,SAAS,wBAAwB,OAAO;CAC9C,OAAO,SAAS,qBAAqB,QAAQ,KAAK,IAAI;AACxD;;;;;AAMA,SAAgB,4BACd,SACA,OACkC;CAClC,IAAI,CAAC,SAAS,UAAU,OAAO,OAAO,KAAA;CACtC,MAAM,SAAS,wBAAwB,OAAO;CAC9C,IAAI,CAAC,QAAQ,OAAO,KAAA;CAEpB,MAAM,cAAc,qBAAqB,QAAQ,KAAK;CACtD,IAAI,WAAW,UAAU,OAAO,EAAE,gBAAgB,kBAAkB,aAAa;CACjF,IAAI,WAAW,gBAAgB,OAAO,EAAE,eAAe,gBAAgB,QAAQ,YAAY,OAAO;CAClG,OAAO,EAAE,eAAe,YAAY;AACtC;;;;;;AAOA,SAAgB,+BACd,SACA,OACqC;CACrC,MAAM,SAAS,4BAA4B,SAAS,KAAK;CACzD,IAAI,CAAC,QAAQ,OAAO,KAAA;CAEpB,OAAO;EACL,sBAAsB;EACtB,iBAAiB,OAAO,EAAE,aAAa;GACrC,MAAM,SAAU,OAAO,iBAAiB,UAAU,CAAC;GACnD,MAAM,iBAAkB,OAAO,kBAAkB,CAAC;GAElD,IAAI,eAAe,mBAAmB,KAAA,KAAa,eAAe,kBAAkB,KAAA,GAAW,OAAO;GACtG,OAAO,kBAAkB;IACvB,GAAG,OAAO;IACV,QAAQ;KAAE,GAAG;KAAQ,gBAAgB;MAAE,GAAG;MAAgB,GAAG;KAAO;IAAE;GACxE;GACA,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,14 @@
1
+ import type { MastraModelConfig } from '@mastra/core/llm';
2
+ import { AuthStorage } from '../auth/storage.js';
3
+ import type { CredentialStore } from '../auth/types.js';
4
+ export declare function setAuthStorage(storage: AuthStorage | undefined): void;
5
+ export declare function buildKimiCodingOAuthFetch(options?: {
6
+ credentialStore?: CredentialStore;
7
+ }): typeof fetch;
8
+ export declare function buildKimiCodingApiKeyFetch(apiKey: string): typeof fetch;
9
+ export declare function kimiCodingProvider(modelId: string, options: {
10
+ apiKey: string;
11
+ headers?: Record<string, string>;
12
+ credentialStore?: CredentialStore;
13
+ }): MastraModelConfig;
14
+ //# sourceMappingURL=kimi-coding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-coding.d.ts","sourceRoot":"","sources":["../../src/providers/kimi-coding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAC;AASzE,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAErE;AAOD,wBAAgB,yBAAyB,CAAC,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,eAAe,CAAA;CAAO,GAAG,OAAO,KAAK,CAoC3G;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,KAAK,CASvE;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,eAAe,CAAA;CAAE,GAC/F,iBAAiB,CAYnB"}
@@ -0,0 +1,78 @@
1
+ import { getKimiCodingDeviceHeaders, isKimiCodingDeviceId } from "../auth/providers/kimi-coding.js";
2
+ import { AuthStorage } from "../auth/storage.js";
3
+ import { ProviderAuthRequiredError } from "../auth/provider-auth-error.js";
4
+ import { createAnthropic } from "@ai-sdk/anthropic";
5
+ //#region src/providers/kimi-coding.ts
6
+ const PROVIDER_ID = "kimi-for-coding";
7
+ const BASE_URL = "https://api.kimi.com/coding/v1";
8
+ let authStorageInstance = null;
9
+ function setAuthStorage(storage) {
10
+ authStorageInstance = storage ?? null;
11
+ }
12
+ function getAuthStorage() {
13
+ if (!authStorageInstance) authStorageInstance = new AuthStorage();
14
+ return authStorageInstance;
15
+ }
16
+ function buildKimiCodingOAuthFetch(options = {}) {
17
+ return (async (input, init) => {
18
+ const store = options.credentialStore ?? getAuthStorage();
19
+ store.reload();
20
+ const credential = store.get(PROVIDER_ID);
21
+ if (!credential || credential.type !== "oauth") throw new ProviderAuthRequiredError("Not logged in to Kimi For Coding.");
22
+ if (!isKimiCodingDeviceId(credential.deviceId)) throw new ProviderAuthRequiredError("Kimi For Coding credentials are invalid. Please reconnect the account.");
23
+ let token;
24
+ let activeCredential = credential;
25
+ if (store.getOAuthCredential) {
26
+ activeCredential = await store.getOAuthCredential(PROVIDER_ID);
27
+ token = activeCredential?.access;
28
+ } else {
29
+ token = await store.getApiKey(PROVIDER_ID);
30
+ store.reload();
31
+ const reloaded = store.get(PROVIDER_ID);
32
+ activeCredential = reloaded?.type === "oauth" ? {
33
+ ...reloaded,
34
+ access: token ?? reloaded.access
35
+ } : void 0;
36
+ }
37
+ if (!token) throw new ProviderAuthRequiredError("Failed to refresh the Kimi For Coding token.");
38
+ if (!activeCredential || !isKimiCodingDeviceId(activeCredential.deviceId)) throw new ProviderAuthRequiredError("Kimi For Coding credentials are invalid. Please reconnect the account.");
39
+ const deviceHeaders = getKimiCodingDeviceHeaders(activeCredential.deviceId);
40
+ const headers = new Headers(input instanceof Request ? input.headers : void 0);
41
+ if (init?.headers) new Headers(init.headers).forEach((value, key) => headers.set(key, value));
42
+ for (const [key, value] of Object.entries(deviceHeaders)) headers.set(key, value);
43
+ headers.delete("authorization");
44
+ headers.delete("x-api-key");
45
+ headers.set("Authorization", `Bearer ${token}`);
46
+ return fetch(input, {
47
+ ...init,
48
+ headers
49
+ });
50
+ });
51
+ }
52
+ function buildKimiCodingApiKeyFetch(apiKey) {
53
+ return (async (input, init) => {
54
+ const headers = new Headers(input instanceof Request ? input.headers : void 0);
55
+ if (init?.headers) new Headers(init.headers).forEach((value, key) => headers.set(key, value));
56
+ headers.delete("authorization");
57
+ headers.delete("x-api-key");
58
+ headers.set("Authorization", `Bearer ${apiKey}`);
59
+ return fetch(input, {
60
+ ...init,
61
+ headers
62
+ });
63
+ });
64
+ }
65
+ function kimiCodingProvider(modelId, options) {
66
+ const usesOAuth = options.credentialStore?.get(PROVIDER_ID)?.type === "oauth";
67
+ return createAnthropic({
68
+ name: PROVIDER_ID,
69
+ apiKey: "auth-placeholder",
70
+ baseURL: BASE_URL,
71
+ headers: options.headers,
72
+ fetch: usesOAuth ? buildKimiCodingOAuthFetch({ credentialStore: options.credentialStore }) : buildKimiCodingApiKeyFetch(options.apiKey)
73
+ })(modelId);
74
+ }
75
+ //#endregion
76
+ export { buildKimiCodingApiKeyFetch, buildKimiCodingOAuthFetch, kimiCodingProvider, setAuthStorage };
77
+
78
+ //# sourceMappingURL=kimi-coding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kimi-coding.js","names":[],"sources":["../../src/providers/kimi-coding.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\nimport type { MastraModelConfig } from '@mastra/core/llm';\nimport { ProviderAuthRequiredError } from '../auth/provider-auth-error.js';\nimport { getKimiCodingDeviceHeaders, isKimiCodingDeviceId } from '../auth/providers/kimi-coding.js';\nimport { AuthStorage } from '../auth/storage.js';\nimport type { CredentialStore, OAuthCredential } from '../auth/types.js';\n\nconst PROVIDER_ID = 'kimi-for-coding';\n// Pi's provider root is https://api.kimi.com/coding. The AI SDK expects the\n// versioned Anthropic base URL and appends /messages itself.\nconst BASE_URL = 'https://api.kimi.com/coding/v1';\n\nlet authStorageInstance: AuthStorage | null = null;\n\nexport function setAuthStorage(storage: AuthStorage | undefined): void {\n authStorageInstance = storage ?? null;\n}\n\nfunction getAuthStorage(): AuthStorage {\n if (!authStorageInstance) authStorageInstance = new AuthStorage();\n return authStorageInstance;\n}\n\nexport function buildKimiCodingOAuthFetch(options: { credentialStore?: CredentialStore } = {}): typeof fetch {\n return (async (input: string | URL | Request, init?: Parameters<typeof fetch>[1]) => {\n const store = options.credentialStore ?? getAuthStorage();\n store.reload();\n const credential = store.get(PROVIDER_ID);\n if (!credential || credential.type !== 'oauth') {\n throw new ProviderAuthRequiredError('Not logged in to Kimi For Coding.');\n }\n if (!isKimiCodingDeviceId(credential.deviceId)) {\n throw new ProviderAuthRequiredError('Kimi For Coding credentials are invalid. Please reconnect the account.');\n }\n let token: string | undefined;\n let activeCredential: OAuthCredential | undefined = credential;\n if (store.getOAuthCredential) {\n activeCredential = await store.getOAuthCredential(PROVIDER_ID);\n token = activeCredential?.access;\n } else {\n token = await store.getApiKey(PROVIDER_ID);\n store.reload();\n const reloaded = store.get(PROVIDER_ID);\n activeCredential = reloaded?.type === 'oauth' ? { ...reloaded, access: token ?? reloaded.access } : undefined;\n }\n if (!token) throw new ProviderAuthRequiredError('Failed to refresh the Kimi For Coding token.');\n if (!activeCredential || !isKimiCodingDeviceId(activeCredential.deviceId)) {\n throw new ProviderAuthRequiredError('Kimi For Coding credentials are invalid. Please reconnect the account.');\n }\n const deviceHeaders = getKimiCodingDeviceHeaders(activeCredential.deviceId);\n\n const headers = new Headers(input instanceof Request ? input.headers : undefined);\n if (init?.headers) new Headers(init.headers).forEach((value, key) => headers.set(key, value));\n for (const [key, value] of Object.entries(deviceHeaders)) headers.set(key, value);\n headers.delete('authorization');\n headers.delete('x-api-key');\n headers.set('Authorization', `Bearer ${token}`);\n return fetch(input, { ...init, headers });\n }) as typeof fetch;\n}\n\nexport function buildKimiCodingApiKeyFetch(apiKey: string): typeof fetch {\n return (async (input: string | URL | Request, init?: Parameters<typeof fetch>[1]) => {\n const headers = new Headers(input instanceof Request ? input.headers : undefined);\n if (init?.headers) new Headers(init.headers).forEach((value, key) => headers.set(key, value));\n headers.delete('authorization');\n headers.delete('x-api-key');\n headers.set('Authorization', `Bearer ${apiKey}`);\n return fetch(input, { ...init, headers });\n }) as typeof fetch;\n}\n\nexport function kimiCodingProvider(\n modelId: string,\n options: { apiKey: string; headers?: Record<string, string>; credentialStore?: CredentialStore },\n): MastraModelConfig {\n const usesOAuth = options.credentialStore?.get(PROVIDER_ID)?.type === 'oauth';\n const provider = createAnthropic({\n name: PROVIDER_ID,\n apiKey: 'auth-placeholder',\n baseURL: BASE_URL,\n headers: options.headers,\n fetch: usesOAuth\n ? (buildKimiCodingOAuthFetch({ credentialStore: options.credentialStore }) as any)\n : (buildKimiCodingApiKeyFetch(options.apiKey) as any),\n });\n return provider(modelId) as unknown as MastraModelConfig;\n}\n"],"mappings":";;;;;AAOA,MAAM,cAAc;AAGpB,MAAM,WAAW;AAEjB,IAAI,sBAA0C;AAE9C,SAAgB,eAAe,SAAwC;CACrE,sBAAsB,WAAW;AACnC;AAEA,SAAS,iBAA8B;CACrC,IAAI,CAAC,qBAAqB,sBAAsB,IAAI,YAAY;CAChE,OAAO;AACT;AAEA,SAAgB,0BAA0B,UAAiD,CAAC,GAAiB;CAC3G,QAAQ,OAAO,OAA+B,SAAuC;EACnF,MAAM,QAAQ,QAAQ,mBAAmB,eAAe;EACxD,MAAM,OAAO;EACb,MAAM,aAAa,MAAM,IAAI,WAAW;EACxC,IAAI,CAAC,cAAc,WAAW,SAAS,SACrC,MAAM,IAAI,0BAA0B,mCAAmC;EAEzE,IAAI,CAAC,qBAAqB,WAAW,QAAQ,GAC3C,MAAM,IAAI,0BAA0B,wEAAwE;EAE9G,IAAI;EACJ,IAAI,mBAAgD;EACpD,IAAI,MAAM,oBAAoB;GAC5B,mBAAmB,MAAM,MAAM,mBAAmB,WAAW;GAC7D,QAAQ,kBAAkB;EAC5B,OAAO;GACL,QAAQ,MAAM,MAAM,UAAU,WAAW;GACzC,MAAM,OAAO;GACb,MAAM,WAAW,MAAM,IAAI,WAAW;GACtC,mBAAmB,UAAU,SAAS,UAAU;IAAE,GAAG;IAAU,QAAQ,SAAS,SAAS;GAAO,IAAI,KAAA;EACtG;EACA,IAAI,CAAC,OAAO,MAAM,IAAI,0BAA0B,8CAA8C;EAC9F,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,iBAAiB,QAAQ,GACtE,MAAM,IAAI,0BAA0B,wEAAwE;EAE9G,MAAM,gBAAgB,2BAA2B,iBAAiB,QAAQ;EAE1E,MAAM,UAAU,IAAI,QAAQ,iBAAiB,UAAU,MAAM,UAAU,KAAA,CAAS;EAChF,IAAI,MAAM,SAAS,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,QAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;EAC5F,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,aAAa,GAAG,QAAQ,IAAI,KAAK,KAAK;EAChF,QAAQ,OAAO,eAAe;EAC9B,QAAQ,OAAO,WAAW;EAC1B,QAAQ,IAAI,iBAAiB,UAAU,OAAO;EAC9C,OAAO,MAAM,OAAO;GAAE,GAAG;GAAM;EAAQ,CAAC;CAC1C;AACF;AAEA,SAAgB,2BAA2B,QAA8B;CACvE,QAAQ,OAAO,OAA+B,SAAuC;EACnF,MAAM,UAAU,IAAI,QAAQ,iBAAiB,UAAU,MAAM,UAAU,KAAA,CAAS;EAChF,IAAI,MAAM,SAAS,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,QAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;EAC5F,QAAQ,OAAO,eAAe;EAC9B,QAAQ,OAAO,WAAW;EAC1B,QAAQ,IAAI,iBAAiB,UAAU,QAAQ;EAC/C,OAAO,MAAM,OAAO;GAAE,GAAG;GAAM;EAAQ,CAAC;CAC1C;AACF;AAEA,SAAgB,mBACd,SACA,SACmB;CACnB,MAAM,YAAY,QAAQ,iBAAiB,IAAI,WAAW,CAAC,EAAE,SAAS;CAUtE,OATiB,gBAAgB;EAC/B,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS,QAAQ;EACjB,OAAO,YACF,0BAA0B,EAAE,iBAAiB,QAAQ,gBAAgB,CAAC,IACtE,2BAA2B,QAAQ,MAAM;CAChD,CACc,CAAC,CAAC,OAAO;AACzB"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Model-id helpers shared by the model gateway and the browser settings
3
+ * module. Kept dependency-free so neither side has to import the other.
4
+ */
5
+ export declare const OPENAI_PREFIX = "openai/";
6
+ export declare const ANTHROPIC_PREFIX = "anthropic/";
7
+ export declare const MASTRA_GATEWAY_PREFIX = "mastra/";
8
+ /** Anthropic's API only accepts dashed ids (`claude-opus-4-6`), but catalogs may list dotted ones. */
9
+ export declare function normalizeAnthropicModelId(modelId: string): string;
10
+ export declare function stripMastraGatewayPrefix(modelId: string): string;
11
+ /**
12
+ * Kimi For Coding subscriptions are served from `api.kimi.com`, which models.dev
13
+ * lists as `kimi-code-plan-cn`. Mastra Code augments that provider with the
14
+ * Kimi OAuth/API-key credential instead of defining its own.
15
+ */
16
+ export declare const KIMI_CODING_PROVIDER_ID = "kimi-code-plan-cn";
17
+ /** Credential id the Kimi login stores accounts under. */
18
+ export declare const KIMI_CODING_CREDENTIAL_ID = "kimi-for-coding";
19
+ /**
20
+ * Map model ids saved by older Mastra Code versions (packs, OM settings,
21
+ * thread metadata) to the current catalog id:
22
+ * `mastracode/kimi-for-coding/k3` and `kimi-for-coding/k3` → `kimi-code-plan-cn/k3`,
23
+ * `mastracode/github-copilot/<m>` → `github-copilot/<m>`,
24
+ * `mastracode/amazon-bedrock/<m>` → `amazon-bedrock/<m>`.
25
+ */
26
+ export declare function normalizeLegacyModelId(modelId: string): string;
27
+ /** Credential-store id that authenticates a catalog provider id. */
28
+ export declare function getCredentialProviderId(providerId: string): string;
29
+ export declare function remapOpenAIModelForCodexOAuth(modelId: string): string;
30
+ //# sourceMappingURL=model-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-ids.d.ts","sourceRoot":"","sources":["../../src/providers/model-ids.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAC7C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,sGAAsG;AACtG,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE;AAeD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAC3D,0DAA0D;AAC1D,eAAO,MAAM,yBAAyB,oBAAoB,CAAC;AAS3D;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED,oEAAoE;AACpE,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIlE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAoBrE"}