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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE.md +30 -0
  3. package/README.md +50 -0
  4. package/dist/acp/agent.d.ts +35 -0
  5. package/dist/acp/agent.d.ts.map +1 -0
  6. package/dist/acp/agent.js +173 -0
  7. package/dist/acp/agent.js.map +1 -0
  8. package/dist/acp/event-mapper.d.ts +22 -0
  9. package/dist/acp/event-mapper.d.ts.map +1 -0
  10. package/dist/acp/event-mapper.js +166 -0
  11. package/dist/acp/event-mapper.js.map +1 -0
  12. package/dist/acp/index.d.ts +8 -0
  13. package/dist/acp/index.d.ts.map +1 -0
  14. package/dist/acp/index.js +54 -0
  15. package/dist/acp/index.js.map +1 -0
  16. package/dist/acp/server.d.ts +7 -0
  17. package/dist/acp/server.d.ts.map +1 -0
  18. package/dist/acp/server.js +34 -0
  19. package/dist/acp/server.js.map +1 -0
  20. package/dist/acp.d.ts +2 -0
  21. package/dist/acp.d.ts.map +1 -0
  22. package/dist/acp.js +5 -0
  23. package/dist/acp.js.map +1 -0
  24. package/dist/agents/instructions.d.ts +6 -0
  25. package/dist/agents/instructions.d.ts.map +1 -0
  26. package/dist/agents/instructions.js +41 -0
  27. package/dist/agents/instructions.js.map +1 -0
  28. package/dist/agents/mastracode-gateway.d.ts +65 -0
  29. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  30. package/dist/agents/mastracode-gateway.js +442 -0
  31. package/dist/agents/mastracode-gateway.js.map +1 -0
  32. package/dist/agents/memory.d.ts +13 -0
  33. package/dist/agents/memory.d.ts.map +1 -0
  34. package/dist/agents/memory.js +107 -0
  35. package/dist/agents/memory.js.map +1 -0
  36. package/dist/agents/model.d.ts +55 -0
  37. package/dist/agents/model.d.ts.map +1 -0
  38. package/dist/agents/model.js +115 -0
  39. package/dist/agents/model.js.map +1 -0
  40. package/dist/agents/modes/build.d.ts +10 -0
  41. package/dist/agents/modes/build.d.ts.map +1 -0
  42. package/dist/agents/modes/build.js +45 -0
  43. package/dist/agents/modes/build.js.map +1 -0
  44. package/dist/agents/modes/explore.d.ts +10 -0
  45. package/dist/agents/modes/explore.d.ts.map +1 -0
  46. package/dist/agents/modes/explore.js +38 -0
  47. package/dist/agents/modes/explore.js.map +1 -0
  48. package/dist/agents/modes/plan.d.ts +6 -0
  49. package/dist/agents/modes/plan.d.ts.map +1 -0
  50. package/dist/agents/modes/plan.js +38 -0
  51. package/dist/agents/modes/plan.js.map +1 -0
  52. package/dist/agents/prompts/agent-instructions.d.ts +20 -0
  53. package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
  54. package/dist/agents/prompts/agent-instructions.js +82 -0
  55. package/dist/agents/prompts/agent-instructions.js.map +1 -0
  56. package/dist/agents/prompts/build.d.ts +12 -0
  57. package/dist/agents/prompts/build.d.ts.map +1 -0
  58. package/dist/agents/prompts/build.js +73 -0
  59. package/dist/agents/prompts/build.js.map +1 -0
  60. package/dist/agents/prompts/fast.d.ts +5 -0
  61. package/dist/agents/prompts/fast.d.ts.map +1 -0
  62. package/dist/agents/prompts/fast.js +22 -0
  63. package/dist/agents/prompts/fast.js.map +1 -0
  64. package/dist/agents/prompts/index.d.ts +19 -0
  65. package/dist/agents/prompts/index.d.ts.map +1 -0
  66. package/dist/agents/prompts/index.js +57 -0
  67. package/dist/agents/prompts/index.js.map +1 -0
  68. package/dist/agents/prompts/model.d.ts +5 -0
  69. package/dist/agents/prompts/model.d.ts.map +1 -0
  70. package/dist/agents/prompts/model.js +22 -0
  71. package/dist/agents/prompts/model.js.map +1 -0
  72. package/dist/agents/prompts/plan.d.ts +6 -0
  73. package/dist/agents/prompts/plan.d.ts.map +1 -0
  74. package/dist/agents/prompts/plan.js +107 -0
  75. package/dist/agents/prompts/plan.js.map +1 -0
  76. package/dist/agents/prompts/tool-guidance.d.ts +13 -0
  77. package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
  78. package/dist/agents/prompts/tool-guidance.js +181 -0
  79. package/dist/agents/prompts/tool-guidance.js.map +1 -0
  80. package/dist/agents/sandbox-filesystem.d.ts +89 -0
  81. package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
  82. package/dist/agents/sandbox-filesystem.js +268 -0
  83. package/dist/agents/sandbox-filesystem.js.map +1 -0
  84. package/dist/agents/sandbox-reattach.d.ts +19 -0
  85. package/dist/agents/sandbox-reattach.d.ts.map +1 -0
  86. package/dist/agents/sandbox-reattach.js +17 -0
  87. package/dist/agents/sandbox-reattach.js.map +1 -0
  88. package/dist/agents/thread-caveman-state.d.ts +17 -0
  89. package/dist/agents/thread-caveman-state.d.ts.map +1 -0
  90. package/dist/agents/thread-caveman-state.js +96 -0
  91. package/dist/agents/thread-caveman-state.js.map +1 -0
  92. package/dist/agents/tool-availability.d.ts +10 -0
  93. package/dist/agents/tool-availability.d.ts.map +1 -0
  94. package/dist/agents/tool-availability.js +105 -0
  95. package/dist/agents/tool-availability.js.map +1 -0
  96. package/dist/agents/tools.d.ts +18 -0
  97. package/dist/agents/tools.d.ts.map +1 -0
  98. package/dist/agents/tools.js +126 -0
  99. package/dist/agents/tools.js.map +1 -0
  100. package/dist/agents/workspace.d.ts +22 -0
  101. package/dist/agents/workspace.d.ts.map +1 -0
  102. package/dist/agents/workspace.js +194 -0
  103. package/dist/agents/workspace.js.map +1 -0
  104. package/dist/analytics.d.ts +18 -0
  105. package/dist/analytics.d.ts.map +1 -0
  106. package/dist/analytics.js +152 -0
  107. package/dist/analytics.js.map +1 -0
  108. package/dist/auth/index.d.ts +9 -0
  109. package/dist/auth/index.d.ts.map +1 -0
  110. package/dist/auth/index.js +11 -0
  111. package/dist/auth/index.js.map +1 -0
  112. package/dist/auth/pkce.d.ts +13 -0
  113. package/dist/auth/pkce.d.ts.map +1 -0
  114. package/dist/auth/pkce.js +21 -0
  115. package/dist/auth/pkce.js.map +1 -0
  116. package/dist/auth/providers/anthropic.d.ts +17 -0
  117. package/dist/auth/providers/anthropic.d.ts.map +1 -0
  118. package/dist/auth/providers/anthropic.js +94 -0
  119. package/dist/auth/providers/anthropic.js.map +1 -0
  120. package/dist/auth/providers/github-copilot.d.ts +100 -0
  121. package/dist/auth/providers/github-copilot.d.ts.map +1 -0
  122. package/dist/auth/providers/github-copilot.js +302 -0
  123. package/dist/auth/providers/github-copilot.js.map +1 -0
  124. package/dist/auth/providers/openai-codex.d.ts +95 -0
  125. package/dist/auth/providers/openai-codex.d.ts.map +1 -0
  126. package/dist/auth/providers/openai-codex.js +527 -0
  127. package/dist/auth/providers/openai-codex.js.map +1 -0
  128. package/dist/auth/storage.d.ts +91 -0
  129. package/dist/auth/storage.d.ts.map +1 -0
  130. package/dist/auth/storage.js +187 -0
  131. package/dist/auth/storage.js.map +1 -0
  132. package/dist/auth/types.d.ts +68 -0
  133. package/dist/auth/types.d.ts.map +1 -0
  134. package/dist/auth/types.js +1 -0
  135. package/dist/auth/types.js.map +1 -0
  136. package/dist/clipboard/index.d.ts +26 -0
  137. package/dist/clipboard/index.d.ts.map +1 -0
  138. package/dist/clipboard/index.js +192 -0
  139. package/dist/clipboard/index.js.map +1 -0
  140. package/dist/constants.d.ts +10 -0
  141. package/dist/constants.d.ts.map +1 -0
  142. package/dist/constants.js +23 -0
  143. package/dist/constants.js.map +1 -0
  144. package/dist/error-classification.d.ts +10 -0
  145. package/dist/error-classification.d.ts.map +1 -0
  146. package/dist/error-classification.js +14 -0
  147. package/dist/error-classification.js.map +1 -0
  148. package/dist/evals/context-builder.d.ts +41 -0
  149. package/dist/evals/context-builder.d.ts.map +1 -0
  150. package/dist/evals/context-builder.js +120 -0
  151. package/dist/evals/context-builder.js.map +1 -0
  152. package/dist/evals/index.d.ts +4 -0
  153. package/dist/evals/index.d.ts.map +1 -0
  154. package/dist/evals/index.js +8 -0
  155. package/dist/evals/index.js.map +1 -0
  156. package/dist/evals/scorers/classify-command.d.ts +31 -0
  157. package/dist/evals/scorers/classify-command.d.ts.map +1 -0
  158. package/dist/evals/scorers/classify-command.js +52 -0
  159. package/dist/evals/scorers/classify-command.js.map +1 -0
  160. package/dist/evals/scorers/efficiency.d.ts +44 -0
  161. package/dist/evals/scorers/efficiency.d.ts.map +1 -0
  162. package/dist/evals/scorers/efficiency.js +201 -0
  163. package/dist/evals/scorers/efficiency.js.map +1 -0
  164. package/dist/evals/scorers/extract-tools.d.ts +25 -0
  165. package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
  166. package/dist/evals/scorers/extract-tools.js +56 -0
  167. package/dist/evals/scorers/extract-tools.js.map +1 -0
  168. package/dist/evals/scorers/index.d.ts +3 -0
  169. package/dist/evals/scorers/index.d.ts.map +1 -0
  170. package/dist/evals/scorers/index.js +7 -0
  171. package/dist/evals/scorers/index.js.map +1 -0
  172. package/dist/evals/scorers/outcome.d.ts +49 -0
  173. package/dist/evals/scorers/outcome.d.ts.map +1 -0
  174. package/dist/evals/scorers/outcome.js +238 -0
  175. package/dist/evals/scorers/outcome.js.map +1 -0
  176. package/dist/headless/cli.d.ts +42 -0
  177. package/dist/headless/cli.d.ts.map +1 -0
  178. package/dist/headless/cli.js +196 -0
  179. package/dist/headless/cli.js.map +1 -0
  180. package/dist/headless/flags.d.ts +33 -0
  181. package/dist/headless/flags.d.ts.map +1 -0
  182. package/dist/headless/flags.js +188 -0
  183. package/dist/headless/flags.js.map +1 -0
  184. package/dist/headless/format.d.ts +38 -0
  185. package/dist/headless/format.d.ts.map +1 -0
  186. package/dist/headless/format.js +85 -0
  187. package/dist/headless/format.js.map +1 -0
  188. package/dist/headless/index.d.ts +25 -0
  189. package/dist/headless/index.d.ts.map +1 -0
  190. package/dist/headless/index.js +32 -0
  191. package/dist/headless/index.js.map +1 -0
  192. package/dist/headless/policy.d.ts +17 -0
  193. package/dist/headless/policy.d.ts.map +1 -0
  194. package/dist/headless/policy.js +38 -0
  195. package/dist/headless/policy.js.map +1 -0
  196. package/dist/headless/run-mc.d.ts +7 -0
  197. package/dist/headless/run-mc.d.ts.map +1 -0
  198. package/dist/headless/run-mc.js +296 -0
  199. package/dist/headless/run-mc.js.map +1 -0
  200. package/dist/headless/types.d.ts +134 -0
  201. package/dist/headless/types.d.ts.map +1 -0
  202. package/dist/headless/types.js +9 -0
  203. package/dist/headless/types.js.map +1 -0
  204. package/dist/hooks/config.d.ts +11 -0
  205. package/dist/hooks/config.d.ts.map +1 -0
  206. package/dist/hooks/config.js +78 -0
  207. package/dist/hooks/config.js.map +1 -0
  208. package/dist/hooks/executor.d.ts +13 -0
  209. package/dist/hooks/executor.d.ts.map +1 -0
  210. package/dist/hooks/executor.js +125 -0
  211. package/dist/hooks/executor.js.map +1 -0
  212. package/dist/hooks/index.d.ts +6 -0
  213. package/dist/hooks/index.d.ts.map +1 -0
  214. package/dist/hooks/index.js +16 -0
  215. package/dist/hooks/index.js.map +1 -0
  216. package/dist/hooks/manager.d.ts +47 -0
  217. package/dist/hooks/manager.d.ts.map +1 -0
  218. package/dist/hooks/manager.js +284 -0
  219. package/dist/hooks/manager.js.map +1 -0
  220. package/dist/hooks/types.d.ts +152 -0
  221. package/dist/hooks/types.d.ts.map +1 -0
  222. package/dist/hooks/types.js +7 -0
  223. package/dist/hooks/types.js.map +1 -0
  224. package/dist/index.d.ts +241 -0
  225. package/dist/index.d.ts.map +1 -0
  226. package/dist/index.js +712 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/ipc/ipc-reporter.d.ts +14 -0
  229. package/dist/ipc/ipc-reporter.d.ts.map +1 -0
  230. package/dist/ipc/ipc-reporter.js +24 -0
  231. package/dist/ipc/ipc-reporter.js.map +1 -0
  232. package/dist/lsp/client.d.ts +56 -0
  233. package/dist/lsp/client.d.ts.map +1 -0
  234. package/dist/lsp/client.js +309 -0
  235. package/dist/lsp/client.js.map +1 -0
  236. package/dist/lsp/index.d.ts +4 -0
  237. package/dist/lsp/index.d.ts.map +1 -0
  238. package/dist/lsp/index.js +9 -0
  239. package/dist/lsp/index.js.map +1 -0
  240. package/dist/lsp/language.d.ts +9 -0
  241. package/dist/lsp/language.d.ts.map +1 -0
  242. package/dist/lsp/language.js +48 -0
  243. package/dist/lsp/language.js.map +1 -0
  244. package/dist/lsp/manager.d.ts +34 -0
  245. package/dist/lsp/manager.d.ts.map +1 -0
  246. package/dist/lsp/manager.js +97 -0
  247. package/dist/lsp/manager.js.map +1 -0
  248. package/dist/lsp/server.d.ts +27 -0
  249. package/dist/lsp/server.d.ts.map +1 -0
  250. package/dist/lsp/server.js +128 -0
  251. package/dist/lsp/server.js.map +1 -0
  252. package/dist/lsp/workspace.d.ts +9 -0
  253. package/dist/lsp/workspace.d.ts.map +1 -0
  254. package/dist/lsp/workspace.js +52 -0
  255. package/dist/lsp/workspace.js.map +1 -0
  256. package/dist/mcp/config.d.ts +34 -0
  257. package/dist/mcp/config.d.ts.map +1 -0
  258. package/dist/mcp/config.js +205 -0
  259. package/dist/mcp/config.js.map +1 -0
  260. package/dist/mcp/index.d.ts +5 -0
  261. package/dist/mcp/index.d.ts.map +1 -0
  262. package/dist/mcp/index.js +10 -0
  263. package/dist/mcp/index.js.map +1 -0
  264. package/dist/mcp/manager.d.ts +49 -0
  265. package/dist/mcp/manager.d.ts.map +1 -0
  266. package/dist/mcp/manager.js +374 -0
  267. package/dist/mcp/manager.js.map +1 -0
  268. package/dist/mcp/types.d.ts +85 -0
  269. package/dist/mcp/types.d.ts.map +1 -0
  270. package/dist/mcp/types.js +1 -0
  271. package/dist/mcp/types.js.map +1 -0
  272. package/dist/onboarding/custom-packs.d.ts +7 -0
  273. package/dist/onboarding/custom-packs.d.ts.map +1 -0
  274. package/dist/onboarding/custom-packs.js +20 -0
  275. package/dist/onboarding/custom-packs.js.map +1 -0
  276. package/dist/onboarding/custom-providers.d.ts +4 -0
  277. package/dist/onboarding/custom-providers.d.ts.map +1 -0
  278. package/dist/onboarding/custom-providers.js +28 -0
  279. package/dist/onboarding/custom-providers.js.map +1 -0
  280. package/dist/onboarding/index.d.ts +5 -0
  281. package/dist/onboarding/index.d.ts.map +1 -0
  282. package/dist/onboarding/index.js +21 -0
  283. package/dist/onboarding/index.js.map +1 -0
  284. package/dist/onboarding/om-settings.d.ts +20 -0
  285. package/dist/onboarding/om-settings.d.ts.map +1 -0
  286. package/dist/onboarding/om-settings.js +26 -0
  287. package/dist/onboarding/om-settings.js.map +1 -0
  288. package/dist/onboarding/packs.d.ts +48 -0
  289. package/dist/onboarding/packs.d.ts.map +1 -0
  290. package/dist/onboarding/packs.js +111 -0
  291. package/dist/onboarding/packs.js.map +1 -0
  292. package/dist/onboarding/settings.d.ts +323 -0
  293. package/dist/onboarding/settings.d.ts.map +1 -0
  294. package/dist/onboarding/settings.js +594 -0
  295. package/dist/onboarding/settings.js.map +1 -0
  296. package/dist/permissions.d.ts +55 -0
  297. package/dist/permissions.d.ts.map +1 -0
  298. package/dist/permissions.js +119 -0
  299. package/dist/permissions.js.map +1 -0
  300. package/dist/plugin.d.ts +81 -0
  301. package/dist/plugin.d.ts.map +1 -0
  302. package/dist/plugin.js +30 -0
  303. package/dist/plugin.js.map +1 -0
  304. package/dist/plugins/dependencies.d.ts +9 -0
  305. package/dist/plugins/dependencies.d.ts.map +1 -0
  306. package/dist/plugins/dependencies.js +141 -0
  307. package/dist/plugins/dependencies.js.map +1 -0
  308. package/dist/plugins/install.d.ts +21 -0
  309. package/dist/plugins/install.d.ts.map +1 -0
  310. package/dist/plugins/install.js +200 -0
  311. package/dist/plugins/install.js.map +1 -0
  312. package/dist/plugins/loader.d.ts +15 -0
  313. package/dist/plugins/loader.d.ts.map +1 -0
  314. package/dist/plugins/loader.js +221 -0
  315. package/dist/plugins/loader.js.map +1 -0
  316. package/dist/plugins/manager.d.ts +60 -0
  317. package/dist/plugins/manager.d.ts.map +1 -0
  318. package/dist/plugins/manager.js +378 -0
  319. package/dist/plugins/manager.js.map +1 -0
  320. package/dist/plugins/manifest.d.ts +14 -0
  321. package/dist/plugins/manifest.d.ts.map +1 -0
  322. package/dist/plugins/manifest.js +75 -0
  323. package/dist/plugins/manifest.js.map +1 -0
  324. package/dist/plugins/package-link.d.ts +3 -0
  325. package/dist/plugins/package-link.d.ts.map +1 -0
  326. package/dist/plugins/package-link.js +77 -0
  327. package/dist/plugins/package-link.js.map +1 -0
  328. package/dist/plugins/paths.d.ts +10 -0
  329. package/dist/plugins/paths.d.ts.map +1 -0
  330. package/dist/plugins/paths.js +26 -0
  331. package/dist/plugins/paths.js.map +1 -0
  332. package/dist/plugins/registry.d.ts +8 -0
  333. package/dist/plugins/registry.d.ts.map +1 -0
  334. package/dist/plugins/registry.js +96 -0
  335. package/dist/plugins/registry.js.map +1 -0
  336. package/dist/plugins/scaffold.d.ts +10 -0
  337. package/dist/plugins/scaffold.d.ts.map +1 -0
  338. package/dist/plugins/scaffold.js +152 -0
  339. package/dist/plugins/scaffold.js.map +1 -0
  340. package/dist/plugins/types.d.ts +45 -0
  341. package/dist/plugins/types.d.ts.map +1 -0
  342. package/dist/plugins/types.js +1 -0
  343. package/dist/plugins/types.js.map +1 -0
  344. package/dist/processors/plan-rejection-abort.d.ts +12 -0
  345. package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
  346. package/dist/processors/plan-rejection-abort.js +53 -0
  347. package/dist/processors/plan-rejection-abort.js.map +1 -0
  348. package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
  349. package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
  350. package/dist/providers/amazon-bedrock-gateway.js +79 -0
  351. package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
  352. package/dist/providers/amazon-bedrock.d.ts +28 -0
  353. package/dist/providers/amazon-bedrock.d.ts.map +1 -0
  354. package/dist/providers/amazon-bedrock.js +62 -0
  355. package/dist/providers/amazon-bedrock.js.map +1 -0
  356. package/dist/providers/claude-max.d.ts +50 -0
  357. package/dist/providers/claude-max.d.ts.map +1 -0
  358. package/dist/providers/claude-max.js +151 -0
  359. package/dist/providers/claude-max.js.map +1 -0
  360. package/dist/providers/github-copilot.d.ts +58 -0
  361. package/dist/providers/github-copilot.d.ts.map +1 -0
  362. package/dist/providers/github-copilot.js +263 -0
  363. package/dist/providers/github-copilot.js.map +1 -0
  364. package/dist/providers/openai-codex.d.ts +70 -0
  365. package/dist/providers/openai-codex.d.ts.map +1 -0
  366. package/dist/providers/openai-codex.js +291 -0
  367. package/dist/providers/openai-codex.js.map +1 -0
  368. package/dist/schema.d.ts +167 -0
  369. package/dist/schema.d.ts.map +1 -0
  370. package/dist/schema.js +92 -0
  371. package/dist/schema.js.map +1 -0
  372. package/dist/theme-palette.d.ts +17 -0
  373. package/dist/theme-palette.d.ts.map +1 -0
  374. package/dist/theme-palette.js +17 -0
  375. package/dist/theme-palette.js.map +1 -0
  376. package/dist/tool-names.d.ts +73 -0
  377. package/dist/tool-names.d.ts.map +1 -0
  378. package/dist/tool-names.js +43 -0
  379. package/dist/tool-names.js.map +1 -0
  380. package/dist/tools/index.d.ts +6 -0
  381. package/dist/tools/index.d.ts.map +1 -0
  382. package/dist/tools/index.js +9 -0
  383. package/dist/tools/index.js.map +1 -0
  384. package/dist/tools/request-sandbox-access.d.ts +6 -0
  385. package/dist/tools/request-sandbox-access.d.ts.map +1 -0
  386. package/dist/tools/request-sandbox-access.js +88 -0
  387. package/dist/tools/request-sandbox-access.js.map +1 -0
  388. package/dist/tools/utils.d.ts +20 -0
  389. package/dist/tools/utils.d.ts.map +1 -0
  390. package/dist/tools/utils.js +22 -0
  391. package/dist/tools/utils.js.map +1 -0
  392. package/dist/tools/web-search.d.ts +35 -0
  393. package/dist/tools/web-search.d.ts.map +1 -0
  394. package/dist/tools/web-search.js +65 -0
  395. package/dist/tools/web-search.js.map +1 -0
  396. package/dist/utils/binaries.d.ts +7 -0
  397. package/dist/utils/binaries.d.ts.map +1 -0
  398. package/dist/utils/binaries.js +74 -0
  399. package/dist/utils/binaries.js.map +1 -0
  400. package/dist/utils/debug-log.d.ts +12 -0
  401. package/dist/utils/debug-log.d.ts.map +1 -0
  402. package/dist/utils/debug-log.js +55 -0
  403. package/dist/utils/debug-log.js.map +1 -0
  404. package/dist/utils/errors.d.ts +36 -0
  405. package/dist/utils/errors.d.ts.map +1 -0
  406. package/dist/utils/errors.js +207 -0
  407. package/dist/utils/errors.js.map +1 -0
  408. package/dist/utils/gateway-sync.d.ts +26 -0
  409. package/dist/utils/gateway-sync.d.ts.map +1 -0
  410. package/dist/utils/gateway-sync.js +49 -0
  411. package/dist/utils/gateway-sync.js.map +1 -0
  412. package/dist/utils/plan-diff.d.ts +25 -0
  413. package/dist/utils/plan-diff.d.ts.map +1 -0
  414. package/dist/utils/plan-diff.js +43 -0
  415. package/dist/utils/plan-diff.js.map +1 -0
  416. package/dist/utils/plans.d.ts +56 -0
  417. package/dist/utils/plans.d.ts.map +1 -0
  418. package/dist/utils/plans.js +99 -0
  419. package/dist/utils/plans.js.map +1 -0
  420. package/dist/utils/project.d.ts +161 -0
  421. package/dist/utils/project.d.ts.map +1 -0
  422. package/dist/utils/project.js +302 -0
  423. package/dist/utils/project.js.map +1 -0
  424. package/dist/utils/signals-pubsub.d.ts +41 -0
  425. package/dist/utils/signals-pubsub.d.ts.map +1 -0
  426. package/dist/utils/signals-pubsub.js +104 -0
  427. package/dist/utils/signals-pubsub.js.map +1 -0
  428. package/dist/utils/slash-command-loader.d.ts +48 -0
  429. package/dist/utils/slash-command-loader.d.ts.map +1 -0
  430. package/dist/utils/slash-command-loader.js +155 -0
  431. package/dist/utils/slash-command-loader.js.map +1 -0
  432. package/dist/utils/slash-command-processor.d.ts +14 -0
  433. package/dist/utils/slash-command-processor.d.ts.map +1 -0
  434. package/dist/utils/slash-command-processor.js +96 -0
  435. package/dist/utils/slash-command-processor.js.map +1 -0
  436. package/dist/utils/stdin-pipe.d.ts +33 -0
  437. package/dist/utils/stdin-pipe.d.ts.map +1 -0
  438. package/dist/utils/stdin-pipe.js +72 -0
  439. package/dist/utils/stdin-pipe.js.map +1 -0
  440. package/dist/utils/storage-factory.d.ts +50 -0
  441. package/dist/utils/storage-factory.d.ts.map +1 -0
  442. package/dist/utils/storage-factory.js +98 -0
  443. package/dist/utils/storage-factory.js.map +1 -0
  444. package/dist/utils/thread-lock.d.ts +26 -0
  445. package/dist/utils/thread-lock.d.ts.map +1 -0
  446. package/dist/utils/thread-lock.js +108 -0
  447. package/dist/utils/thread-lock.js.map +1 -0
  448. package/dist/utils/token-estimator.d.ts +3 -0
  449. package/dist/utils/token-estimator.d.ts.map +1 -0
  450. package/dist/utils/token-estimator.js +21 -0
  451. package/dist/utils/token-estimator.js.map +1 -0
  452. package/dist/utils/update-check.d.ts +52 -0
  453. package/dist/utils/update-check.d.ts.map +1 -0
  454. package/dist/utils/update-check.js +177 -0
  455. package/dist/utils/update-check.js.map +1 -0
  456. package/dist/voice/stt-registry.d.ts +64 -0
  457. package/dist/voice/stt-registry.d.ts.map +1 -0
  458. package/dist/voice/stt-registry.js +126 -0
  459. package/dist/voice/stt-registry.js.map +1 -0
  460. package/package.json +92 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Credential storage for API keys and OAuth tokens.
3
+ * Handles loading, saving, and refreshing credentials from auth.json.
4
+ */
5
+ import type { AuthCredential, OAuthLoginCallbacks, OAuthProviderId, OAuthProviderInterface } from './types.js';
6
+ /**
7
+ * Best/default models for each OAuth provider.
8
+ * Used when auto-selecting a model after login.
9
+ */
10
+ export declare const PROVIDER_DEFAULT_MODELS: Record<OAuthProviderId, string>;
11
+ /**
12
+ * Get an OAuth provider by ID
13
+ */
14
+ export declare function getOAuthProvider(id: OAuthProviderId): OAuthProviderInterface | undefined;
15
+ /**
16
+ * Get all registered OAuth providers
17
+ */
18
+ export declare function getOAuthProviders(): OAuthProviderInterface[];
19
+ /**
20
+ * Credential storage backed by a JSON file.
21
+ */
22
+ export declare class AuthStorage {
23
+ private authPath;
24
+ private data;
25
+ constructor(authPath?: string);
26
+ /**
27
+ * Reload credentials from disk.
28
+ */
29
+ reload(): void;
30
+ /**
31
+ * Save credentials to disk.
32
+ */
33
+ private save;
34
+ /**
35
+ * Get credential for a provider.
36
+ */
37
+ get(provider: string): AuthCredential | undefined;
38
+ /**
39
+ * Set credential for a provider.
40
+ */
41
+ set(provider: string, credential: AuthCredential): void;
42
+ /**
43
+ * Remove credential for a provider.
44
+ */
45
+ remove(provider: string): void;
46
+ /**
47
+ * List all providers with credentials.
48
+ */
49
+ list(): string[];
50
+ /**
51
+ * Check if credentials exist for a provider.
52
+ */
53
+ has(provider: string): boolean;
54
+ /**
55
+ * Check if logged in via OAuth for a provider.
56
+ */
57
+ isLoggedIn(provider: string): boolean;
58
+ /**
59
+ * Check if a stored API key exists for a provider.
60
+ * Keys are stored under `apikey:<provider>` in auth.json.
61
+ */
62
+ hasStoredApiKey(provider: string): boolean;
63
+ /**
64
+ * Get a stored API key for a provider, if any.
65
+ */
66
+ getStoredApiKey(provider: string): string | undefined;
67
+ /**
68
+ * Store an API key for a provider.
69
+ * Also sets the corresponding environment variable so model resolution can find it.
70
+ */
71
+ setStoredApiKey(provider: string, key: string, envVar?: string): void;
72
+ /**
73
+ * Load all stored API keys into process.env.
74
+ * Called at startup so model resolution can find stored keys.
75
+ * Only sets env vars that aren't already set (env vars take precedence).
76
+ */
77
+ loadStoredApiKeysIntoEnv(providerEnvVars: Record<string, string | undefined>): void;
78
+ /**
79
+ * Login to an OAuth provider.
80
+ */
81
+ login(providerId: OAuthProviderId, callbacks: OAuthLoginCallbacks): Promise<void>;
82
+ /**
83
+ * Logout from a provider.
84
+ */
85
+ logout(provider: string): void;
86
+ /**
87
+ * Get API key for a provider, auto-refreshing OAuth tokens if needed.
88
+ */
89
+ getApiKey(providerId: string): Promise<string | undefined>;
90
+ }
91
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/auth/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EACV,cAAc,EAEd,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAOnE,CAAC;AASF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,eAAe,GAAG,sBAAsB,GAAG,SAAS,CAExF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,sBAAsB,EAAE,CAE5D;AAED;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,IAAI,CAAuB;gBAEf,QAAQ,GAAE,MAA2C;IAIzE;;OAEG;IACH,MAAM,IAAI,IAAI;IAYd;;OAEG;IACH,OAAO,CAAC,IAAI;IASZ;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIjD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI;IAKvD;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKrC;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK1C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKrD;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAOrE;;;;OAIG;IACH,wBAAwB,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI;IAWnF;;OAEG;IACG,KAAK,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvF;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CA8BjE"}
@@ -0,0 +1,187 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { getAppDataDir } from "../utils/project.js";
4
+ import { anthropicOAuthProvider } from "./providers/anthropic.js";
5
+ import { githubCopilotOAuthProvider } from "./providers/github-copilot.js";
6
+ import { openaiCodexOAuthProvider } from "./providers/openai-codex.js";
7
+ const PROVIDER_DEFAULT_MODELS = {
8
+ anthropic: "anthropic/claude-opus-4-6",
9
+ "openai-codex": "openai/gpt-5.5",
10
+ // gpt-4.1 routes through `/chat/completions` (which our OpenAI-compatible
11
+ // adapter handles); Anthropic-shaped Copilot models (Claude on `/v1/messages`)
12
+ // are not yet wired up, so picking one as the post-login default would error.
13
+ "github-copilot": "github-copilot/gpt-4.1"
14
+ };
15
+ const oauthProviderRegistry = /* @__PURE__ */ new Map([
16
+ [anthropicOAuthProvider.id, anthropicOAuthProvider],
17
+ [openaiCodexOAuthProvider.id, openaiCodexOAuthProvider],
18
+ [githubCopilotOAuthProvider.id, githubCopilotOAuthProvider]
19
+ ]);
20
+ function getOAuthProvider(id) {
21
+ return oauthProviderRegistry.get(id);
22
+ }
23
+ function getOAuthProviders() {
24
+ return Array.from(oauthProviderRegistry.values());
25
+ }
26
+ class AuthStorage {
27
+ constructor(authPath = join(getAppDataDir(), "auth.json")) {
28
+ this.authPath = authPath;
29
+ this.reload();
30
+ }
31
+ authPath;
32
+ data = {};
33
+ /**
34
+ * Reload credentials from disk.
35
+ */
36
+ reload() {
37
+ if (!existsSync(this.authPath)) {
38
+ this.data = {};
39
+ return;
40
+ }
41
+ try {
42
+ this.data = JSON.parse(readFileSync(this.authPath, "utf-8"));
43
+ } catch {
44
+ this.data = {};
45
+ }
46
+ }
47
+ /**
48
+ * Save credentials to disk.
49
+ */
50
+ save() {
51
+ const dir = dirname(this.authPath);
52
+ if (!existsSync(dir)) {
53
+ mkdirSync(dir, { recursive: true, mode: 448 });
54
+ }
55
+ writeFileSync(this.authPath, JSON.stringify(this.data, null, 2), "utf-8");
56
+ chmodSync(this.authPath, 384);
57
+ }
58
+ /**
59
+ * Get credential for a provider.
60
+ */
61
+ get(provider) {
62
+ return this.data[provider] ?? void 0;
63
+ }
64
+ /**
65
+ * Set credential for a provider.
66
+ */
67
+ set(provider, credential) {
68
+ this.data[provider] = credential;
69
+ this.save();
70
+ }
71
+ /**
72
+ * Remove credential for a provider.
73
+ */
74
+ remove(provider) {
75
+ delete this.data[provider];
76
+ this.save();
77
+ }
78
+ /**
79
+ * List all providers with credentials.
80
+ */
81
+ list() {
82
+ return Object.keys(this.data);
83
+ }
84
+ /**
85
+ * Check if credentials exist for a provider.
86
+ */
87
+ has(provider) {
88
+ return provider in this.data;
89
+ }
90
+ /**
91
+ * Check if logged in via OAuth for a provider.
92
+ */
93
+ isLoggedIn(provider) {
94
+ const cred = this.data[provider];
95
+ return cred?.type === "oauth";
96
+ }
97
+ /**
98
+ * Check if a stored API key exists for a provider.
99
+ * Keys are stored under `apikey:<provider>` in auth.json.
100
+ */
101
+ hasStoredApiKey(provider) {
102
+ const cred = this.data[`apikey:${provider}`];
103
+ return cred?.type === "api_key" && cred.key.length > 0;
104
+ }
105
+ /**
106
+ * Get a stored API key for a provider, if any.
107
+ */
108
+ getStoredApiKey(provider) {
109
+ const cred = this.data[`apikey:${provider}`];
110
+ return cred?.type === "api_key" && cred.key.length > 0 ? cred.key : void 0;
111
+ }
112
+ /**
113
+ * Store an API key for a provider.
114
+ * Also sets the corresponding environment variable so model resolution can find it.
115
+ */
116
+ setStoredApiKey(provider, key, envVar) {
117
+ this.set(`apikey:${provider}`, { type: "api_key", key });
118
+ if (envVar) {
119
+ process.env[envVar] = key;
120
+ }
121
+ }
122
+ /**
123
+ * Load all stored API keys into process.env.
124
+ * Called at startup so model resolution can find stored keys.
125
+ * Only sets env vars that aren't already set (env vars take precedence).
126
+ */
127
+ loadStoredApiKeysIntoEnv(providerEnvVars) {
128
+ for (const [key, cred] of Object.entries(this.data)) {
129
+ if (!key.startsWith("apikey:") || cred.type !== "api_key" || !cred.key) continue;
130
+ const provider = key.substring("apikey:".length);
131
+ const envVar = providerEnvVars[provider];
132
+ if (envVar && !process.env[envVar]) {
133
+ process.env[envVar] = cred.key;
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Login to an OAuth provider.
139
+ */
140
+ async login(providerId, callbacks) {
141
+ const provider = getOAuthProvider(providerId);
142
+ if (!provider) {
143
+ throw new Error(`Unknown OAuth provider: ${providerId}`);
144
+ }
145
+ const credentials = await provider.login(callbacks);
146
+ this.set(providerId, { type: "oauth", ...credentials });
147
+ }
148
+ /**
149
+ * Logout from a provider.
150
+ */
151
+ logout(provider) {
152
+ this.remove(provider);
153
+ }
154
+ /**
155
+ * Get API key for a provider, auto-refreshing OAuth tokens if needed.
156
+ */
157
+ async getApiKey(providerId) {
158
+ const cred = this.data[providerId];
159
+ if (cred?.type === "api_key") {
160
+ return cred.key;
161
+ }
162
+ if (cred?.type === "oauth") {
163
+ const provider = getOAuthProvider(providerId);
164
+ if (!provider) {
165
+ return void 0;
166
+ }
167
+ if (Date.now() >= cred.expires) {
168
+ try {
169
+ const newCreds = await provider.refreshToken(cred);
170
+ this.set(providerId, { type: "oauth", ...newCreds });
171
+ return provider.getApiKey(newCreds);
172
+ } catch {
173
+ return void 0;
174
+ }
175
+ }
176
+ return provider.getApiKey(cred);
177
+ }
178
+ return void 0;
179
+ }
180
+ }
181
+ export {
182
+ AuthStorage,
183
+ PROVIDER_DEFAULT_MODELS,
184
+ getOAuthProvider,
185
+ getOAuthProviders
186
+ };
187
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/auth/storage.ts"],"sourcesContent":["/**\n * Credential storage for API keys and OAuth tokens.\n * Handles loading, saving, and refreshing credentials from auth.json.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, chmodSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { getAppDataDir } from '../utils/project.js';\nimport { anthropicOAuthProvider } from './providers/anthropic.js';\nimport { githubCopilotOAuthProvider } from './providers/github-copilot.js';\nimport { openaiCodexOAuthProvider } from './providers/openai-codex.js';\nimport type {\n AuthCredential,\n AuthStorageData,\n OAuthLoginCallbacks,\n OAuthProviderId,\n OAuthProviderInterface,\n} from './types.js';\n\n/**\n * Best/default models for each OAuth provider.\n * Used when auto-selecting a model after login.\n */\nexport const PROVIDER_DEFAULT_MODELS: Record<OAuthProviderId, string> = {\n anthropic: 'anthropic/claude-opus-4-6',\n 'openai-codex': 'openai/gpt-5.5',\n // gpt-4.1 routes through `/chat/completions` (which our OpenAI-compatible\n // adapter handles); Anthropic-shaped Copilot models (Claude on `/v1/messages`)\n // are not yet wired up, so picking one as the post-login default would error.\n 'github-copilot': 'github-copilot/gpt-4.1',\n};\n\n// Provider registry\nconst oauthProviderRegistry = new Map<string, OAuthProviderInterface>([\n [anthropicOAuthProvider.id, anthropicOAuthProvider],\n [openaiCodexOAuthProvider.id, openaiCodexOAuthProvider],\n [githubCopilotOAuthProvider.id, githubCopilotOAuthProvider],\n]);\n\n/**\n * Get an OAuth provider by ID\n */\nexport function getOAuthProvider(id: OAuthProviderId): OAuthProviderInterface | undefined {\n return oauthProviderRegistry.get(id);\n}\n\n/**\n * Get all registered OAuth providers\n */\nexport function getOAuthProviders(): OAuthProviderInterface[] {\n return Array.from(oauthProviderRegistry.values());\n}\n\n/**\n * Credential storage backed by a JSON file.\n */\nexport class AuthStorage {\n private data: AuthStorageData = {};\n\n constructor(private authPath: string = join(getAppDataDir(), 'auth.json')) {\n this.reload();\n }\n\n /**\n * Reload credentials from disk.\n */\n reload(): void {\n if (!existsSync(this.authPath)) {\n this.data = {};\n return;\n }\n try {\n this.data = JSON.parse(readFileSync(this.authPath, 'utf-8'));\n } catch {\n this.data = {};\n }\n }\n\n /**\n * Save credentials to disk.\n */\n private save(): void {\n const dir = dirname(this.authPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n writeFileSync(this.authPath, JSON.stringify(this.data, null, 2), 'utf-8');\n chmodSync(this.authPath, 0o600);\n }\n\n /**\n * Get credential for a provider.\n */\n get(provider: string): AuthCredential | undefined {\n return this.data[provider] ?? undefined;\n }\n\n /**\n * Set credential for a provider.\n */\n set(provider: string, credential: AuthCredential): void {\n this.data[provider] = credential;\n this.save();\n }\n\n /**\n * Remove credential for a provider.\n */\n remove(provider: string): void {\n delete this.data[provider];\n this.save();\n }\n\n /**\n * List all providers with credentials.\n */\n list(): string[] {\n return Object.keys(this.data);\n }\n\n /**\n * Check if credentials exist for a provider.\n */\n has(provider: string): boolean {\n return provider in this.data;\n }\n\n /**\n * Check if logged in via OAuth for a provider.\n */\n isLoggedIn(provider: string): boolean {\n const cred = this.data[provider];\n return cred?.type === 'oauth';\n }\n\n /**\n * Check if a stored API key exists for a provider.\n * Keys are stored under `apikey:<provider>` in auth.json.\n */\n hasStoredApiKey(provider: string): boolean {\n const cred = this.data[`apikey:${provider}`];\n return cred?.type === 'api_key' && cred.key.length > 0;\n }\n\n /**\n * Get a stored API key for a provider, if any.\n */\n getStoredApiKey(provider: string): string | undefined {\n const cred = this.data[`apikey:${provider}`];\n return cred?.type === 'api_key' && cred.key.length > 0 ? cred.key : undefined;\n }\n\n /**\n * Store an API key for a provider.\n * Also sets the corresponding environment variable so model resolution can find it.\n */\n setStoredApiKey(provider: string, key: string, envVar?: string): void {\n this.set(`apikey:${provider}`, { type: 'api_key', key });\n if (envVar) {\n process.env[envVar] = key;\n }\n }\n\n /**\n * Load all stored API keys into process.env.\n * Called at startup so model resolution can find stored keys.\n * Only sets env vars that aren't already set (env vars take precedence).\n */\n loadStoredApiKeysIntoEnv(providerEnvVars: Record<string, string | undefined>): void {\n for (const [key, cred] of Object.entries(this.data)) {\n if (!key.startsWith('apikey:') || cred.type !== 'api_key' || !cred.key) continue;\n const provider = key.substring('apikey:'.length);\n const envVar = providerEnvVars[provider];\n if (envVar && !process.env[envVar]) {\n process.env[envVar] = cred.key;\n }\n }\n }\n\n /**\n * Login to an OAuth provider.\n */\n async login(providerId: OAuthProviderId, callbacks: OAuthLoginCallbacks): Promise<void> {\n const provider = getOAuthProvider(providerId);\n if (!provider) {\n throw new Error(`Unknown OAuth provider: ${providerId}`);\n }\n\n const credentials = await provider.login(callbacks);\n this.set(providerId, { type: 'oauth', ...credentials });\n }\n\n /**\n * Logout from a provider.\n */\n logout(provider: string): void {\n this.remove(provider);\n }\n\n /**\n * Get API key for a provider, auto-refreshing OAuth tokens if needed.\n */\n async getApiKey(providerId: string): Promise<string | undefined> {\n const cred = this.data[providerId];\n\n if (cred?.type === 'api_key') {\n return cred.key;\n }\n\n if (cred?.type === 'oauth') {\n const provider = getOAuthProvider(providerId);\n if (!provider) {\n return undefined;\n }\n\n // Check if token needs refresh\n if (Date.now() >= cred.expires) {\n try {\n const newCreds = await provider.refreshToken(cred);\n this.set(providerId, { type: 'oauth', ...newCreds });\n return provider.getApiKey(newCreds);\n } catch {\n // Refresh failed - user needs to re-login\n return undefined;\n }\n }\n\n return provider.getApiKey(cred);\n }\n\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * OAuth types for authentication providers
3
+ */
4
+ export interface OAuthCredentials {
5
+ refresh: string;
6
+ access: string;
7
+ expires: number;
8
+ [key: string]: unknown;
9
+ }
10
+ export type OAuthProviderId = string;
11
+ export interface OAuthAuthInfo {
12
+ url: string;
13
+ instructions?: string;
14
+ }
15
+ export interface OAuthPrompt {
16
+ message: string;
17
+ placeholder?: string;
18
+ allowEmpty?: boolean;
19
+ }
20
+ /**
21
+ * A selectable authentication mode for an OAuth provider.
22
+ * Providers that support multiple flows (e.g. browser callback vs. device code)
23
+ * advertise them via `OAuthProviderInterface.authModes`. The TUI shows a
24
+ * sub-selector when more than one mode is available so users don't need to
25
+ * discover the flow through environment variables.
26
+ */
27
+ export interface AuthMode {
28
+ id: string;
29
+ name: string;
30
+ description?: string;
31
+ }
32
+ export interface OAuthLoginCallbacks {
33
+ onAuth: (info: OAuthAuthInfo) => void;
34
+ onPrompt: (prompt: OAuthPrompt) => Promise<string>;
35
+ onProgress?: (message: string) => void;
36
+ onManualCodeInput?: () => Promise<string>;
37
+ signal?: AbortSignal;
38
+ /** Selected authentication mode id (matches one of `OAuthProviderInterface.authModes`). */
39
+ authMode?: string;
40
+ }
41
+ export interface OAuthProviderInterface {
42
+ readonly id: OAuthProviderId;
43
+ readonly name: string;
44
+ /** Whether this provider uses a local callback server (vs manual code paste) */
45
+ readonly usesCallbackServer?: boolean;
46
+ /**
47
+ * Optional list of selectable auth flows. When set with two or more entries,
48
+ * the TUI prompts the user to pick a mode before starting the login flow and
49
+ * forwards the choice via `OAuthLoginCallbacks.authMode`.
50
+ */
51
+ readonly authModes?: ReadonlyArray<AuthMode>;
52
+ /** Run the login flow, return credentials to persist */
53
+ login(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
54
+ /** Refresh expired credentials, return updated credentials to persist */
55
+ refreshToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;
56
+ /** Convert credentials to API key string for the provider */
57
+ getApiKey(credentials: OAuthCredentials): string;
58
+ }
59
+ export type ApiKeyCredential = {
60
+ type: 'api_key';
61
+ key: string;
62
+ };
63
+ export type OAuthCredential = {
64
+ type: 'oauth';
65
+ } & OAuthCredentials;
66
+ export type AuthCredential = ApiKeyCredential | OAuthCredential;
67
+ export type AuthStorageData = Record<string, AuthCredential>;
68
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,gFAAgF;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAEtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE7C,wDAAwD;IACxD,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjE,yEAAyE;IACzE,YAAY,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEvE,6DAA6D;IAC7D,SAAS,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,gBAAgB,CAAC;AAErB,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Platform-specific clipboard image extraction.
3
+ *
4
+ * Checks the system clipboard for image data and returns it as base64.
5
+ * Uses synchronous execution (execSync) since this only runs on paste events.
6
+ */
7
+ export interface ClipboardImage {
8
+ data: string;
9
+ mimeType: string;
10
+ }
11
+ /**
12
+ * Read plain text from the system clipboard.
13
+ * Returns null if clipboard is empty or reading fails.
14
+ */
15
+ export declare function getClipboardText(): string | null;
16
+ /**
17
+ * Write plain text to the system clipboard.
18
+ * Returns true on success, false on failure.
19
+ */
20
+ export declare function setClipboardText(text: string): boolean;
21
+ /**
22
+ * Check the system clipboard for image data and return it as base64.
23
+ * Returns null if no image data is found or extraction fails.
24
+ */
25
+ export declare function getClipboardImage(): ClipboardImage | null;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clipboard/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAgChD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CA+BtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAYzD"}
@@ -0,0 +1,192 @@
1
+ import { execSync } from "node:child_process";
2
+ import { readFileSync, unlinkSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ function getClipboardText() {
6
+ try {
7
+ if (process.platform === "darwin") {
8
+ const text = execSync("pbpaste", {
9
+ encoding: "utf-8",
10
+ timeout: 3e3,
11
+ stdio: ["pipe", "pipe", "pipe"]
12
+ });
13
+ return text.length > 0 ? text : null;
14
+ }
15
+ if (process.platform === "linux") {
16
+ try {
17
+ const text = execSync("xclip -selection clipboard -o", {
18
+ encoding: "utf-8",
19
+ timeout: 3e3,
20
+ stdio: ["pipe", "pipe", "pipe"]
21
+ });
22
+ return text.length > 0 ? text : null;
23
+ } catch {
24
+ const text = execSync("wl-paste", {
25
+ encoding: "utf-8",
26
+ timeout: 3e3,
27
+ stdio: ["pipe", "pipe", "pipe"]
28
+ });
29
+ return text.length > 0 ? text : null;
30
+ }
31
+ }
32
+ return null;
33
+ } catch {
34
+ return null;
35
+ }
36
+ }
37
+ function setClipboardText(text) {
38
+ try {
39
+ if (process.platform === "darwin") {
40
+ execSync("pbcopy", {
41
+ input: text,
42
+ timeout: 3e3,
43
+ stdio: ["pipe", "pipe", "pipe"]
44
+ });
45
+ return true;
46
+ }
47
+ if (process.platform === "linux") {
48
+ try {
49
+ execSync("xclip -selection clipboard", {
50
+ input: text,
51
+ timeout: 3e3,
52
+ stdio: ["pipe", "pipe", "pipe"]
53
+ });
54
+ return true;
55
+ } catch {
56
+ execSync("wl-copy", {
57
+ input: text,
58
+ timeout: 3e3,
59
+ stdio: ["pipe", "pipe", "pipe"]
60
+ });
61
+ return true;
62
+ }
63
+ }
64
+ return false;
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
69
+ function getClipboardImage() {
70
+ try {
71
+ if (process.platform === "darwin") {
72
+ return getMacClipboardImage();
73
+ }
74
+ if (process.platform === "linux") {
75
+ return getLinuxClipboardImage();
76
+ }
77
+ return null;
78
+ } catch {
79
+ return null;
80
+ }
81
+ }
82
+ function getMacClipboardImage() {
83
+ return tryReadMacClipboardImage({
84
+ coercion: "\xABclass PNGf\xBB",
85
+ extension: "png",
86
+ mimeType: "image/png"
87
+ }) ?? tryReadMacClipboardImage({
88
+ coercion: "TIFF picture",
89
+ extension: "tiff",
90
+ mimeType: "image/tiff"
91
+ }) ?? tryReadMacClipboardImage({
92
+ coercion: "\xABclass TIFF\xBB",
93
+ extension: "tiff",
94
+ mimeType: "image/tiff"
95
+ });
96
+ }
97
+ function tryReadMacClipboardImage({
98
+ coercion,
99
+ extension,
100
+ mimeType
101
+ }) {
102
+ const tmpFile = join(tmpdir(), `mastra-clipboard-${Date.now()}.${extension}`);
103
+ try {
104
+ const script = `
105
+ set theImage to the clipboard as ${coercion}
106
+ set theFile to open for access POSIX file "${tmpFile}" with write permission
107
+ write theImage to theFile
108
+ close access theFile
109
+ `;
110
+ execSync(`osascript -e '${script.replace(/'/g, "'\\''")}'`, {
111
+ timeout: 5e3,
112
+ stdio: ["pipe", "pipe", "pipe"]
113
+ });
114
+ const buffer = readFileSync(tmpFile);
115
+ if (!Buffer.isBuffer(buffer) || buffer.length === 0) {
116
+ return null;
117
+ }
118
+ return {
119
+ data: buffer.toString("base64"),
120
+ mimeType
121
+ };
122
+ } catch {
123
+ return null;
124
+ } finally {
125
+ try {
126
+ unlinkSync(tmpFile);
127
+ } catch {
128
+ }
129
+ }
130
+ }
131
+ function getLinuxClipboardImage() {
132
+ return getLinuxClipboardImageXclip() ?? getLinuxClipboardImageWlPaste();
133
+ }
134
+ function getLinuxClipboardImageXclip() {
135
+ try {
136
+ const targets = execSync("xclip -selection clipboard -target TARGETS -o", {
137
+ encoding: "utf-8",
138
+ timeout: 3e3,
139
+ stdio: ["pipe", "pipe", "pipe"]
140
+ });
141
+ if (!targets.includes("image/png")) {
142
+ return null;
143
+ }
144
+ const buffer = execSync("xclip -selection clipboard -target image/png -o", {
145
+ timeout: 5e3,
146
+ stdio: ["pipe", "pipe", "pipe"],
147
+ maxBuffer: 50 * 1024 * 1024
148
+ // 50MB max
149
+ });
150
+ if (!Buffer.isBuffer(buffer) || buffer.length === 0) {
151
+ return null;
152
+ }
153
+ return {
154
+ data: buffer.toString("base64"),
155
+ mimeType: "image/png"
156
+ };
157
+ } catch {
158
+ return null;
159
+ }
160
+ }
161
+ function getLinuxClipboardImageWlPaste() {
162
+ try {
163
+ const types = execSync("wl-paste --list-types", {
164
+ encoding: "utf-8",
165
+ timeout: 3e3,
166
+ stdio: ["pipe", "pipe", "pipe"]
167
+ });
168
+ if (!types.includes("image/png")) {
169
+ return null;
170
+ }
171
+ const buffer = execSync("wl-paste --type image/png", {
172
+ timeout: 5e3,
173
+ stdio: ["pipe", "pipe", "pipe"],
174
+ maxBuffer: 50 * 1024 * 1024
175
+ });
176
+ if (!Buffer.isBuffer(buffer) || buffer.length === 0) {
177
+ return null;
178
+ }
179
+ return {
180
+ data: buffer.toString("base64"),
181
+ mimeType: "image/png"
182
+ };
183
+ } catch {
184
+ return null;
185
+ }
186
+ }
187
+ export {
188
+ getClipboardImage,
189
+ getClipboardText,
190
+ setClipboardText
191
+ };
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/clipboard/index.ts"],"sourcesContent":["/**\n * Platform-specific clipboard image extraction.\n *\n * Checks the system clipboard for image data and returns it as base64.\n * Uses synchronous execution (execSync) since this only runs on paste events.\n */\n\nimport { execSync } from 'node:child_process';\nimport { readFileSync, unlinkSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface ClipboardImage {\n data: string; // base64-encoded image data or a remote image URL\n mimeType: string;\n}\n\n/**\n * Read plain text from the system clipboard.\n * Returns null if clipboard is empty or reading fails.\n */\nexport function getClipboardText(): string | null {\n try {\n if (process.platform === 'darwin') {\n const text = execSync('pbpaste', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n }\n if (process.platform === 'linux') {\n // Try xclip first, then wl-paste\n try {\n const text = execSync('xclip -selection clipboard -o', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n } catch {\n const text = execSync('wl-paste', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Write plain text to the system clipboard.\n * Returns true on success, false on failure.\n */\nexport function setClipboardText(text: string): boolean {\n try {\n if (process.platform === 'darwin') {\n execSync('pbcopy', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n }\n if (process.platform === 'linux') {\n try {\n execSync('xclip -selection clipboard', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n } catch {\n execSync('wl-copy', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n }\n }\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Check the system clipboard for image data and return it as base64.\n * Returns null if no image data is found or extraction fails.\n */\nexport function getClipboardImage(): ClipboardImage | null {\n try {\n if (process.platform === 'darwin') {\n return getMacClipboardImage();\n }\n if (process.platform === 'linux') {\n return getLinuxClipboardImage();\n }\n return null;\n } catch {\n return null;\n }\n}\n\n// =============================================================================\n// macOS\n// =============================================================================\n\nfunction getMacClipboardImage(): ClipboardImage | null {\n return (\n tryReadMacClipboardImage({\n coercion: '«class PNGf»',\n extension: 'png',\n mimeType: 'image/png',\n }) ??\n tryReadMacClipboardImage({\n coercion: 'TIFF picture',\n extension: 'tiff',\n mimeType: 'image/tiff',\n }) ??\n tryReadMacClipboardImage({\n coercion: '«class TIFF»',\n extension: 'tiff',\n mimeType: 'image/tiff',\n })\n );\n}\n\nfunction tryReadMacClipboardImage({\n coercion,\n extension,\n mimeType,\n}: {\n coercion: string;\n extension: string;\n mimeType: string;\n}): ClipboardImage | null {\n const tmpFile = join(tmpdir(), `mastra-clipboard-${Date.now()}.${extension}`);\n\n try {\n const script = `\n\t\t\tset theImage to the clipboard as ${coercion}\n\t\t\tset theFile to open for access POSIX file \"${tmpFile}\" with write permission\n\t\t\twrite theImage to theFile\n\t\t\tclose access theFile\n\t\t`;\n execSync(`osascript -e '${script.replace(/'/g, \"'\\\\''\")}'`, {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const buffer = readFileSync(tmpFile);\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType,\n };\n } catch {\n return null;\n } finally {\n try {\n unlinkSync(tmpFile);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n// =============================================================================\n// Linux\n// =============================================================================\n\nfunction getLinuxClipboardImage(): ClipboardImage | null {\n // Try xclip first, then wl-paste (Wayland)\n return getLinuxClipboardImageXclip() ?? getLinuxClipboardImageWlPaste();\n}\n\nfunction getLinuxClipboardImageXclip(): ClipboardImage | null {\n try {\n // Check available targets\n const targets = execSync('xclip -selection clipboard -target TARGETS -o', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (!targets.includes('image/png')) {\n return null;\n }\n\n // Extract PNG data\n const buffer = execSync('xclip -selection clipboard -target image/png -o', {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n maxBuffer: 50 * 1024 * 1024, // 50MB max\n });\n\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType: 'image/png',\n };\n } catch {\n return null;\n }\n}\n\nfunction getLinuxClipboardImageWlPaste(): ClipboardImage | null {\n try {\n // Check if wl-paste is available and clipboard has image\n const types = execSync('wl-paste --list-types', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (!types.includes('image/png')) {\n return null;\n }\n\n // Extract PNG data\n const buffer = execSync('wl-paste --type image/png', {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n maxBuffer: 50 * 1024 * 1024,\n });\n\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType: 'image/png',\n };\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ export declare const DEFAULT_CONFIG_DIR = ".mastracode";
2
+ /**
3
+ * Validate that a configDirName is a safe single directory name.
4
+ * Rejects absolute paths, path separators, and traversal components.
5
+ */
6
+ export declare function validateConfigDirName(configDirName: string): void;
7
+ export declare const DEFAULT_OM_MODEL_ID: string;
8
+ export declare const DEFAULT_OBS_THRESHOLD = 30000;
9
+ export declare const DEFAULT_REF_THRESHOLD = 40000;
10
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAgBjE;AAGD,eAAO,MAAM,mBAAmB,QAA+D,CAAC;AAGhG,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,qBAAqB,QAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as path from "node:path";
2
+ const DEFAULT_CONFIG_DIR = ".mastracode";
3
+ function validateConfigDirName(configDirName) {
4
+ if (configDirName.trim().length === 0) {
5
+ throw new Error("configDirName must be a non-empty directory name");
6
+ }
7
+ if (path.isAbsolute(configDirName) || configDirName.includes("/") || configDirName.includes("\\") || configDirName === ".." || configDirName === ".") {
8
+ throw new Error(
9
+ `configDirName must be a single directory name without path separators or traversal components, got: "${configDirName}"`
10
+ );
11
+ }
12
+ }
13
+ const DEFAULT_OM_MODEL_ID = process.env.DEFAULT_OM_MODEL_ID ?? "google/gemini-2.5-flash";
14
+ const DEFAULT_OBS_THRESHOLD = 3e4;
15
+ const DEFAULT_REF_THRESHOLD = 4e4;
16
+ export {
17
+ DEFAULT_CONFIG_DIR,
18
+ DEFAULT_OBS_THRESHOLD,
19
+ DEFAULT_OM_MODEL_ID,
20
+ DEFAULT_REF_THRESHOLD,
21
+ validateConfigDirName
22
+ };
23
+ //# sourceMappingURL=constants.js.map