@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,1060 @@
1
+ import { getAppDataDir } from "../utils/project.js";
2
+ import { AuthStorage, PROVIDER_DEFAULT_MODELS } from "../auth/storage.js";
3
+ import { OPENAI_PREFIX, normalizeAnthropicModelId, remapOpenAIModelForCodexOAuth, stripMastraGatewayPrefix } from "../providers/model-ids.js";
4
+ import { THINKING_LEVEL_VALUES, isThinkingLevelSetting, resolveDefaultThinkingLevel as resolveDefaultThinkingLevel$1 } from "../thinking.js";
5
+ import { buildCodexStagehandFetch, createCodexMiddleware } from "../providers/openai-codex.js";
6
+ import { DEFAULT_STT_PROVIDER, resolveSTTModel } from "../voice/stt-registry.js";
7
+ import { pruneUnknownModePackFallbacks, pruneUnknownPackAccountPreferences } from "./packs.js";
8
+ import { dirname, join } from "path";
9
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
10
+ //#region src/onboarding/settings.ts
11
+ /**
12
+ * Persistent global settings stored in the app data directory as settings.json.
13
+ * This file persists onboarding state AND user preferences (model choices, yolo, etc.)
14
+ * so they carry across threads and restarts.
15
+ */
16
+ var ExperimentalAgentSettingsError = class extends Error {
17
+ value;
18
+ constructor(value, settingsPath) {
19
+ super(`Invalid "experimentalAgent" setting${settingsPath ? ` in ${settingsPath}` : ""}: ${JSON.stringify(value)}. Remove the "experimentalAgent" key or set it to "durable", "evented", or null.`);
20
+ this.name = "ExperimentalAgentSettingsError";
21
+ this.value = value;
22
+ }
23
+ };
24
+ /** Gateway provider key used in AuthStorage. */
25
+ const MASTRA_GATEWAY_PROVIDER = "mastra-gateway";
26
+ /** Default gateway URL. */
27
+ const MASTRA_GATEWAY_DEFAULT_URL = "https://gateway-api.mastra.ai";
28
+ /** @deprecated Renamed to {@link MASTRA_GATEWAY_PROVIDER}. */
29
+ const MEMORY_GATEWAY_PROVIDER = MASTRA_GATEWAY_PROVIDER;
30
+ /** @deprecated Renamed to {@link MASTRA_GATEWAY_DEFAULT_URL}. */
31
+ const MEMORY_GATEWAY_DEFAULT_URL = MASTRA_GATEWAY_DEFAULT_URL;
32
+ /** Named viewport sizes offered by `/browser set viewport`. */
33
+ const VIEWPORT_PRESETS = {
34
+ desktop: {
35
+ width: 1280,
36
+ height: 720
37
+ },
38
+ "desktop-hd": {
39
+ width: 1920,
40
+ height: 1080
41
+ },
42
+ laptop: {
43
+ width: 1440,
44
+ height: 900
45
+ },
46
+ tablet: {
47
+ width: 768,
48
+ height: 1024
49
+ },
50
+ mobile: {
51
+ width: 390,
52
+ height: 844
53
+ }
54
+ };
55
+ /**
56
+ * Largest viewport dimension accepted. Guards against typos that would launch a
57
+ * browser far larger than any display.
58
+ */
59
+ const MAX_VIEWPORT_DIMENSION = 1e4;
60
+ function isValidDimension(value) {
61
+ return typeof value === "number" && Number.isInteger(value) && value > 0 && value <= MAX_VIEWPORT_DIMENSION;
62
+ }
63
+ /**
64
+ * Parse a `WIDTHxHEIGHT` string (e.g. `1280x720`), a preset name, or `window`.
65
+ * Returns undefined when the input is not a usable viewport.
66
+ */
67
+ function parseViewportInput(input) {
68
+ const value = input.trim().toLowerCase();
69
+ if (!value) return void 0;
70
+ if (value === "window") return "window";
71
+ if (value in VIEWPORT_PRESETS) return { ...VIEWPORT_PRESETS[value] };
72
+ const match = /^(\d+)\s*[x×]\s*(\d+)$/.exec(value);
73
+ if (!match) return void 0;
74
+ const width = Number(match[1]);
75
+ const height = Number(match[2]);
76
+ if (!isValidDimension(width) || !isValidDimension(height)) return void 0;
77
+ return {
78
+ width,
79
+ height
80
+ };
81
+ }
82
+ /** Auth key prefix for observability tokens stored per-resource in auth.json */
83
+ const OBSERVABILITY_AUTH_PREFIX = "observability:";
84
+ const GITHUB_POLL_INTERVAL_DEFAULT_MS = 3e5;
85
+ const GITHUB_POLL_INTERVAL_MIN_MS = 1e4;
86
+ const GITHUB_POLL_INTERVAL_MAX_MS = 2147483647;
87
+ const STORAGE_DEFAULTS = {
88
+ backend: "libsql",
89
+ libsql: {},
90
+ pg: {}
91
+ };
92
+ /** Default STT engine: on-device macOS recognizer where available, else cloud. */
93
+ function defaultVoiceEngine() {
94
+ return process.platform === "darwin" ? "macos-native" : "cloud";
95
+ }
96
+ const DEFAULTS = {
97
+ onboarding: {
98
+ completedAt: null,
99
+ skippedAt: null,
100
+ version: 0,
101
+ modePackId: null,
102
+ omPackId: null
103
+ },
104
+ models: {
105
+ activeModelPackId: null,
106
+ modePackOverrides: {},
107
+ packFallbacks: {},
108
+ packAccountPreferences: {},
109
+ modeDefaults: {},
110
+ modeThinkingDefaults: {},
111
+ activeOmPackId: null,
112
+ omModelOverride: null,
113
+ observerModelOverride: null,
114
+ observerModelSelection: null,
115
+ reflectorModelOverride: null,
116
+ reflectorModelSelection: null,
117
+ omObservationThreshold: null,
118
+ omReflectionThreshold: null,
119
+ omCavemanObservations: null,
120
+ omObserveAttachments: null,
121
+ subagentModels: {},
122
+ goalJudgeModel: null,
123
+ goalMaxTurns: null
124
+ },
125
+ preferences: {
126
+ yolo: null,
127
+ theme: "auto",
128
+ thinkingLevel: "off",
129
+ subagentsEnabled: false,
130
+ previewLines: 2,
131
+ webSearchProvider: "auto"
132
+ },
133
+ storage: { ...STORAGE_DEFAULTS },
134
+ customModelPacks: [],
135
+ customProviders: [],
136
+ modelUseCounts: {},
137
+ updateDismissedVersion: null,
138
+ memoryGateway: {},
139
+ lsp: false,
140
+ browser: {
141
+ enabled: false,
142
+ provider: "stagehand",
143
+ headless: false,
144
+ viewport: { ...VIEWPORT_PRESETS.desktop },
145
+ stagehand: { env: "LOCAL" }
146
+ },
147
+ shellPassthrough: { mode: "default" },
148
+ voice: {
149
+ enabled: false,
150
+ engine: defaultVoiceEngine(),
151
+ provider: DEFAULT_STT_PROVIDER
152
+ },
153
+ experimentalAgent: null,
154
+ backgroundTools: { enabled: false },
155
+ signals: {
156
+ unixSocketPubSub: false,
157
+ experimentalGithubSignals: false,
158
+ experimentalCrossAgentSignals: false,
159
+ experimentalScheduleTools: false,
160
+ githubPollIntervalMs: GITHUB_POLL_INTERVAL_DEFAULT_MS
161
+ },
162
+ mcp: {
163
+ claudeCodeGlobal: false,
164
+ codexGlobal: false
165
+ },
166
+ observability: {
167
+ resources: {},
168
+ localTracing: false
169
+ }
170
+ };
171
+ const WEB_SEARCH_PROVIDER_VALUES = [
172
+ "auto",
173
+ "tavily",
174
+ "parallel"
175
+ ];
176
+ const PREVIEW_LINES_MAX = 8;
177
+ const loadedSignalSettings = /* @__PURE__ */ new WeakMap();
178
+ function cloneSignalSettings(signals) {
179
+ return { ...signals };
180
+ }
181
+ function rememberLoadedSettings(settings) {
182
+ loadedSignalSettings.set(settings, cloneSignalSettings(settings.signals));
183
+ return settings;
184
+ }
185
+ function signalSettingsEqual(left, right) {
186
+ return left.unixSocketPubSub === right.unixSocketPubSub && left.experimentalGithubSignals === right.experimentalGithubSignals && left.experimentalCrossAgentSignals === right.experimentalCrossAgentSignals && left.experimentalScheduleTools === right.experimentalScheduleTools && left.githubPollIntervalMs === right.githubPollIntervalMs;
187
+ }
188
+ function parseWebSearchProvider(value) {
189
+ return typeof value === "string" && WEB_SEARCH_PROVIDER_VALUES.includes(value) ? value : DEFAULTS.preferences.webSearchProvider;
190
+ }
191
+ function parseThinkingLevel(value) {
192
+ return isThinkingLevelSetting(value) ? value : DEFAULTS.preferences.thinkingLevel;
193
+ }
194
+ function parseModeThinkingDefaults(value) {
195
+ if (!value || typeof value !== "object") return {};
196
+ const result = {};
197
+ for (const [mode, level] of Object.entries(value)) if (isThinkingLevelSetting(level)) result[mode] = level;
198
+ return result;
199
+ }
200
+ function parseModePackOverrides(value) {
201
+ if (!value || typeof value !== "object") return {};
202
+ const result = {};
203
+ for (const [packId, overrides] of Object.entries(value)) {
204
+ if (!overrides || typeof overrides !== "object") continue;
205
+ const parsedOverrides = Object.fromEntries(Object.entries(overrides).filter((entry) => typeof entry[1] === "string" && entry[1].length > 0));
206
+ if (Object.keys(parsedOverrides).length > 0) result[packId] = parsedOverrides;
207
+ }
208
+ return result;
209
+ }
210
+ function parsePackFallbacks(value) {
211
+ if (!value || typeof value !== "object") return {};
212
+ const result = {};
213
+ for (const [packId, fallbackId] of Object.entries(value)) if (typeof fallbackId === "string" && fallbackId.length > 0) result[packId] = fallbackId;
214
+ return result;
215
+ }
216
+ /** Shape-parse + drop entries whose source or target pack no longer exists. */
217
+ function loadPackFallbacks(value, customModelPacks) {
218
+ return pruneUnknownModePackFallbacks(parsePackFallbacks(value), customModelPacks);
219
+ }
220
+ function parsePackAccountPreferences(value) {
221
+ if (!value || typeof value !== "object") return {};
222
+ const result = {};
223
+ for (const [packId, modelPreferences] of Object.entries(value)) {
224
+ if (!modelPreferences || typeof modelPreferences !== "object") continue;
225
+ const parsed = Object.fromEntries(Object.entries(modelPreferences).filter((entry) => entry[0].length > 0 && typeof entry[1] === "string" && entry[1].length > 0));
226
+ if (Object.keys(parsed).length > 0) result[packId] = parsed;
227
+ }
228
+ return result;
229
+ }
230
+ function loadPackAccountPreferences(value, customModelPacks, modePackOverrides) {
231
+ return pruneUnknownPackAccountPreferences(parsePackAccountPreferences(value), customModelPacks, modePackOverrides);
232
+ }
233
+ /** Move persisted routing choices when re-authentication changes an account instance id. */
234
+ function migrateAccountPreferences(settings, previousAccountId, nextAccountId) {
235
+ if (previousAccountId === nextAccountId) return;
236
+ for (const modelPreferences of Object.values(settings.models.packAccountPreferences ?? {})) for (const [modelId, accountInstanceId] of Object.entries(modelPreferences)) if (accountInstanceId === previousAccountId) modelPreferences[modelId] = nextAccountId;
237
+ }
238
+ /** Remove persisted routing choices that point at deleted OAuth account instances. */
239
+ function pruneRemovedAccountPreferences(settings, removedAccountIds) {
240
+ const removed = new Set(removedAccountIds);
241
+ if (removed.size === 0) return;
242
+ const next = {};
243
+ for (const [packId, modelPreferences] of Object.entries(settings.models.packAccountPreferences ?? {})) {
244
+ const retained = Object.fromEntries(Object.entries(modelPreferences).filter(([, accountInstanceId]) => !removed.has(accountInstanceId)));
245
+ if (Object.keys(retained).length > 0) next[packId] = retained;
246
+ }
247
+ settings.models.packAccountPreferences = next;
248
+ }
249
+ function isFiniteNumber(value) {
250
+ return typeof value === "number" && Number.isFinite(value);
251
+ }
252
+ /**
253
+ * Resolves the preview line limit. `previewLines` wins when valid; otherwise the legacy
254
+ * `quietModeMaxToolPreviewLines` key (still written by older Mastra Code versions) is used.
255
+ */
256
+ function parsePreviewLines(raw) {
257
+ const value = isFiniteNumber(raw.previewLines) ? raw.previewLines : isFiniteNumber(raw.quietModeMaxToolPreviewLines) ? raw.quietModeMaxToolPreviewLines : DEFAULTS.preferences.previewLines;
258
+ return Math.min(PREVIEW_LINES_MAX, Math.max(0, Math.floor(value)));
259
+ }
260
+ function parsePreferences(rawPreferences) {
261
+ const raw = rawPreferences && typeof rawPreferences === "object" ? rawPreferences : {};
262
+ return {
263
+ ...DEFAULTS.preferences,
264
+ ...raw,
265
+ thinkingLevel: parseThinkingLevel(raw.thinkingLevel),
266
+ subagentsEnabled: typeof raw.subagentsEnabled === "boolean" ? raw.subagentsEnabled : DEFAULTS.preferences.subagentsEnabled,
267
+ previewLines: parsePreviewLines(raw),
268
+ webSearchProvider: parseWebSearchProvider(raw.webSearchProvider)
269
+ };
270
+ }
271
+ function parseGithubPollIntervalMs(value) {
272
+ if (typeof value !== "number" || !Number.isFinite(value)) return DEFAULTS.signals.githubPollIntervalMs;
273
+ const intervalMs = Math.floor(value);
274
+ if (intervalMs < 1e4) return DEFAULTS.signals.githubPollIntervalMs;
275
+ return Math.min(intervalMs, GITHUB_POLL_INTERVAL_MAX_MS);
276
+ }
277
+ function parseExperimentalAgentSetting(value, settingsPath) {
278
+ if (value === void 0 || value === null) return null;
279
+ if (value === "durable" || value === "evented") return value;
280
+ throw new ExperimentalAgentSettingsError(value, settingsPath);
281
+ }
282
+ function loadExperimentalAgentSetting(value, settingsPath) {
283
+ try {
284
+ return { selection: parseExperimentalAgentSetting(value, settingsPath) };
285
+ } catch (error) {
286
+ if (error instanceof ExperimentalAgentSettingsError) return {
287
+ selection: error.value,
288
+ settingsPath
289
+ };
290
+ throw error;
291
+ }
292
+ }
293
+ function parseBackgroundToolSettings(rawBackgroundTools) {
294
+ const raw = rawBackgroundTools && typeof rawBackgroundTools === "object" ? rawBackgroundTools : {};
295
+ return { enabled: typeof raw.enabled === "boolean" ? raw.enabled : DEFAULTS.backgroundTools.enabled };
296
+ }
297
+ function parseSignalSettings(rawSignals) {
298
+ const raw = rawSignals && typeof rawSignals === "object" ? rawSignals : {};
299
+ return {
300
+ unixSocketPubSub: typeof raw.unixSocketPubSub === "boolean" ? raw.unixSocketPubSub : DEFAULTS.signals.unixSocketPubSub,
301
+ experimentalGithubSignals: typeof raw.experimentalGithubSignals === "boolean" ? raw.experimentalGithubSignals : DEFAULTS.signals.experimentalGithubSignals,
302
+ experimentalCrossAgentSignals: typeof raw.experimentalCrossAgentSignals === "boolean" ? raw.experimentalCrossAgentSignals : DEFAULTS.signals.experimentalCrossAgentSignals,
303
+ experimentalScheduleTools: typeof raw.experimentalScheduleTools === "boolean" ? raw.experimentalScheduleTools : DEFAULTS.signals.experimentalScheduleTools,
304
+ githubPollIntervalMs: parseGithubPollIntervalMs(raw.githubPollIntervalMs)
305
+ };
306
+ }
307
+ function parseMcpDiscoverySettings(rawMcp) {
308
+ const raw = rawMcp && typeof rawMcp === "object" ? rawMcp : {};
309
+ return {
310
+ claudeCodeGlobal: typeof raw.claudeCodeGlobal === "boolean" ? raw.claudeCodeGlobal : DEFAULTS.mcp.claudeCodeGlobal,
311
+ codexGlobal: typeof raw.codexGlobal === "boolean" ? raw.codexGlobal : DEFAULTS.mcp.codexGlobal
312
+ };
313
+ }
314
+ function getSettingsPath() {
315
+ return join(getAppDataDir(), "settings.json");
316
+ }
317
+ function getCustomProviderId(name) {
318
+ return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "provider";
319
+ }
320
+ function toCustomProviderModelId(providerName, modelName) {
321
+ const providerId = getCustomProviderId(providerName);
322
+ const trimmedModelName = modelName.trim();
323
+ const providerPrefix = `${providerId}/`;
324
+ if (trimmedModelName.startsWith(providerPrefix)) return trimmedModelName;
325
+ return `${providerId}/${trimmedModelName}`;
326
+ }
327
+ /**
328
+ * The shared gateway catalog namespaces provider keys under their owning
329
+ * gateway id, so a custom provider's models surface in the `/models` catalog
330
+ * as `mastracode/<providerId>/<model>` instead of the canonical
331
+ * `<providerId>/<model>` that model resolution expects. Persisting the
332
+ * gateway-qualified id verbatim breaks lookup later (the provider is parsed
333
+ * as `mastracode`). Strip the prefix before saving — but only when the
334
+ * middle segment matches one of the user's configured custom providers, so
335
+ * legitimate `mastracode/...` gateway-routed ids are left untouched.
336
+ */
337
+ function stripMastraCodeCustomProviderPrefix(modelId, customProviders) {
338
+ if (!modelId.startsWith("mastracode/")) return modelId;
339
+ const rest = modelId.slice(11);
340
+ const [providerId, ...modelParts] = rest.split("/");
341
+ if (!providerId || modelParts.length === 0 || modelParts.some((part) => part.length === 0)) return modelId;
342
+ return customProviders.some((provider) => getCustomProviderId(provider.name) === providerId) ? rest : modelId;
343
+ }
344
+ function parseCustomProviders(rawProviders) {
345
+ if (!Array.isArray(rawProviders)) return [];
346
+ const parsedProviders = [];
347
+ for (const rawProvider of rawProviders) {
348
+ if (!rawProvider || typeof rawProvider !== "object") continue;
349
+ const candidate = rawProvider;
350
+ const name = typeof candidate.name === "string" ? candidate.name.trim() : "";
351
+ const url = typeof candidate.url === "string" ? candidate.url.trim() : "";
352
+ if (!name || !url) continue;
353
+ const providerId = getCustomProviderId(name);
354
+ const models = Array.isArray(candidate.models) ? [...new Set(candidate.models.filter((model) => typeof model === "string").map((model) => model.trim()).map((model) => {
355
+ const providerPrefix = `${providerId}/`;
356
+ if (model.startsWith(providerPrefix)) return model.slice(providerPrefix.length);
357
+ return model;
358
+ }))].filter((model) => model.length > 0) : [];
359
+ const apiKey = typeof candidate.apiKey === "string" && candidate.apiKey.trim().length > 0 ? candidate.apiKey.trim() : void 0;
360
+ parsedProviders.push({
361
+ name,
362
+ url,
363
+ ...apiKey ? { apiKey } : {},
364
+ models
365
+ });
366
+ }
367
+ return parsedProviders;
368
+ }
369
+ const BROWSER_PROVIDERS = /* @__PURE__ */ new Set(["stagehand", "agent-browser"]);
370
+ const STAGEHAND_ENVS = /* @__PURE__ */ new Set(["LOCAL", "BROWSERBASE"]);
371
+ /**
372
+ * Normalize a Stagehand model id, which must be provider-qualified.
373
+ *
374
+ * Stagehand reads the segment before the first slash as the provider, so a
375
+ * bare id like `gpt-4.1` is rejected as an unknown provider and a trailing
376
+ * slash leaves an empty model name that only fails once a request is made.
377
+ * Neither is usable, so both are dropped here rather than persisted.
378
+ *
379
+ * The provider name itself is checked where the command is issued, which can
380
+ * name the supported providers in an error; this module is on the startup path
381
+ * and only imports Stagehand lazily.
382
+ *
383
+ * @returns the trimmed model id, or undefined when it is unusable.
384
+ */
385
+ function parseStagehandModel(value) {
386
+ if (typeof value !== "string") return void 0;
387
+ const model = value.trim();
388
+ const separator = model.indexOf("/");
389
+ if (separator <= 0) return void 0;
390
+ return model.slice(separator + 1).trim() ? model : void 0;
391
+ }
392
+ /**
393
+ * Validate a viewport read from settings.json, falling back to the default when
394
+ * it is missing or malformed.
395
+ */
396
+ function parseStoredViewport(raw) {
397
+ if (raw === "window") return "window";
398
+ if (raw && typeof raw === "object") {
399
+ const { width, height } = raw;
400
+ if (isValidDimension(width) && isValidDimension(height)) return {
401
+ width,
402
+ height
403
+ };
404
+ }
405
+ return { ...VIEWPORT_PRESETS.desktop };
406
+ }
407
+ /**
408
+ * Validate the `lsp` setting from JSON. Accepts both the boolean opt-in/opt-out
409
+ * form and the full LSPConfig object; anything else is treated as unset.
410
+ */
411
+ function parseLspSettings(raw) {
412
+ if (typeof raw === "boolean") return raw;
413
+ if (raw && typeof raw === "object") return raw;
414
+ }
415
+ /**
416
+ * Resolve the effective LSP config. LSP is opt-in: `false` and an absent
417
+ * setting both mean disabled, `true` means enabled with defaults.
418
+ */
419
+ function resolveLspSetting(lsp) {
420
+ if (lsp === true) return {};
421
+ if (!lsp) return false;
422
+ return lsp;
423
+ }
424
+ /**
425
+ * Deep-merge and validate browser settings from JSON.
426
+ * Explicitly validates types to handle malformed settings.json gracefully.
427
+ */
428
+ function parseBrowserSettings(rawBrowser) {
429
+ const raw = rawBrowser && typeof rawBrowser === "object" ? rawBrowser : {};
430
+ const rawStagehand = raw.stagehand && typeof raw.stagehand === "object" ? raw.stagehand : {};
431
+ const stagehandModel = parseStagehandModel(rawStagehand.model);
432
+ const rawAgentBrowser = raw.agentBrowser && typeof raw.agentBrowser === "object" ? raw.agentBrowser : {};
433
+ return {
434
+ enabled: typeof raw.enabled === "boolean" ? raw.enabled : DEFAULTS.browser.enabled,
435
+ provider: typeof raw.provider === "string" && BROWSER_PROVIDERS.has(raw.provider) ? raw.provider : DEFAULTS.browser.provider,
436
+ headless: typeof raw.headless === "boolean" ? raw.headless : DEFAULTS.browser.headless,
437
+ cdpUrl: typeof raw.cdpUrl === "string" && raw.cdpUrl.trim() ? raw.cdpUrl.trim() : void 0,
438
+ profile: typeof raw.profile === "string" && raw.profile.trim() ? raw.profile.trim() : void 0,
439
+ executablePath: typeof raw.executablePath === "string" && raw.executablePath.trim() ? raw.executablePath.trim() : void 0,
440
+ viewport: parseStoredViewport(raw.viewport),
441
+ scope: typeof raw.scope === "string" && (raw.scope === "shared" || raw.scope === "thread") ? raw.scope : void 0,
442
+ stagehand: {
443
+ env: typeof rawStagehand.env === "string" && STAGEHAND_ENVS.has(rawStagehand.env) ? rawStagehand.env : DEFAULTS.browser.stagehand.env,
444
+ ...typeof rawStagehand.apiKey === "string" && rawStagehand.apiKey.trim() ? { apiKey: rawStagehand.apiKey.trim() } : {},
445
+ ...typeof rawStagehand.projectId === "string" && rawStagehand.projectId.trim() ? { projectId: rawStagehand.projectId.trim() } : {},
446
+ ...stagehandModel ? { model: stagehandModel } : {},
447
+ ...typeof rawStagehand.preserveUserDataDir === "boolean" ? { preserveUserDataDir: rawStagehand.preserveUserDataDir } : {}
448
+ },
449
+ agentBrowser: typeof rawAgentBrowser.storageState === "string" && rawAgentBrowser.storageState.trim() ? { storageState: rawAgentBrowser.storageState.trim() } : void 0
450
+ };
451
+ }
452
+ function parseShellPassthroughSettings(rawShellPassthrough) {
453
+ const raw = rawShellPassthrough && typeof rawShellPassthrough === "object" ? rawShellPassthrough : {};
454
+ const executable = typeof raw.executable === "string" && raw.executable.trim() ? raw.executable.trim() : void 0;
455
+ const family = typeof raw.family === "string" && raw.family.trim() ? raw.family.trim() : void 0;
456
+ const mode = typeof raw.mode === "string" && raw.mode.trim() ? raw.mode.trim() : void 0;
457
+ const defaultMode = executable ? void 0 : DEFAULTS.shellPassthrough.mode;
458
+ return {
459
+ ...mode ?? defaultMode ? { mode: mode ?? defaultMode } : {},
460
+ ...executable ? { executable } : {},
461
+ ...family ? { family } : {}
462
+ };
463
+ }
464
+ function parseVoiceSettings(rawVoice) {
465
+ const raw = rawVoice && typeof rawVoice === "object" ? rawVoice : {};
466
+ const enabled = typeof raw.enabled === "boolean" ? raw.enabled : DEFAULTS.voice.enabled;
467
+ const engine = raw.engine === "macos-native" || raw.engine === "cloud" ? raw.engine : defaultVoiceEngine();
468
+ const resolved = resolveSTTModel(typeof raw.provider === "string" ? raw.provider : DEFAULTS.voice.provider, typeof raw.model === "string" ? raw.model : void 0);
469
+ return {
470
+ enabled,
471
+ engine,
472
+ provider: resolved.provider,
473
+ model: resolved.model
474
+ };
475
+ }
476
+ const VALID_PROJECT_ID = /^[a-zA-Z0-9_-]+$/;
477
+ function parseObservabilitySettings(raw) {
478
+ if (!raw || typeof raw !== "object") return {
479
+ resources: {},
480
+ localTracing: false
481
+ };
482
+ const obj = raw;
483
+ const localTracing = obj.localTracing === true;
484
+ const rawResources = obj.resources;
485
+ if (!rawResources || typeof rawResources !== "object") return {
486
+ resources: {},
487
+ localTracing
488
+ };
489
+ const resources = {};
490
+ for (const [key, val] of Object.entries(rawResources)) if (val && typeof val === "object") {
491
+ const v = val;
492
+ if (typeof v.projectId === "string" && VALID_PROJECT_ID.test(v.projectId)) resources[key] = {
493
+ projectId: v.projectId,
494
+ configuredAt: typeof v.configuredAt === "string" ? v.configuredAt : (/* @__PURE__ */ new Date()).toISOString()
495
+ };
496
+ }
497
+ return {
498
+ resources,
499
+ localTracing
500
+ };
501
+ }
502
+ /**
503
+ * One-time migration: move model-related data from auth.json to settings.json.
504
+ * Reads `_modelRanks`, `_modeModelId_*`, `_subagentModelId*` from auth.json,
505
+ * merges them into settings, removes them from auth.json, and writes both files.
506
+ * No-ops if auth.json has no _ prefixed model data.
507
+ */
508
+ function migrateFromAuth(settingsPath) {
509
+ const authPath = join(getAppDataDir(), "auth.json");
510
+ if (!existsSync(authPath)) return false;
511
+ let authData;
512
+ try {
513
+ authData = JSON.parse(readFileSync(authPath, "utf-8"));
514
+ } catch {
515
+ return false;
516
+ }
517
+ const modelKeys = Object.keys(authData).filter((k) => k.startsWith("_"));
518
+ if (modelKeys.length === 0) return false;
519
+ let settings;
520
+ if (existsSync(settingsPath)) try {
521
+ const raw = JSON.parse(readFileSync(settingsPath, "utf-8"));
522
+ const rawCustomPacks = Array.isArray(raw.customModelPacks) ? raw.customModelPacks : [];
523
+ const modePackOverrides = parseModePackOverrides(raw.models?.modePackOverrides);
524
+ const experimentalAgentSetting = loadExperimentalAgentSetting(raw.experimentalAgent, settingsPath);
525
+ settings = {
526
+ onboarding: {
527
+ ...DEFAULTS.onboarding,
528
+ ...raw.onboarding
529
+ },
530
+ models: {
531
+ ...DEFAULTS.models,
532
+ ...raw.models,
533
+ modePackOverrides,
534
+ modeThinkingDefaults: parseModeThinkingDefaults(raw.models?.modeThinkingDefaults),
535
+ packFallbacks: loadPackFallbacks(raw.models?.packFallbacks, rawCustomPacks),
536
+ packAccountPreferences: loadPackAccountPreferences(raw.models?.packAccountPreferences, rawCustomPacks, modePackOverrides)
537
+ },
538
+ preferences: parsePreferences(raw.preferences),
539
+ storage: {
540
+ ...STORAGE_DEFAULTS,
541
+ ...raw.storage,
542
+ libsql: {
543
+ ...STORAGE_DEFAULTS.libsql,
544
+ ...raw.storage?.libsql
545
+ },
546
+ pg: {
547
+ ...STORAGE_DEFAULTS.pg,
548
+ ...raw.storage?.pg
549
+ }
550
+ },
551
+ customModelPacks: Array.isArray(raw.customModelPacks) ? raw.customModelPacks : [],
552
+ customProviders: parseCustomProviders(raw.customProviders),
553
+ modelUseCounts: raw.modelUseCounts && typeof raw.modelUseCounts === "object" ? raw.modelUseCounts : {},
554
+ updateDismissedVersion: typeof raw.updateDismissedVersion === "string" ? raw.updateDismissedVersion : null,
555
+ memoryGateway: raw.memoryGateway && typeof raw.memoryGateway === "object" ? raw.memoryGateway : {},
556
+ lsp: parseLspSettings(raw.lsp),
557
+ browser: parseBrowserSettings(raw.browser),
558
+ shellPassthrough: parseShellPassthroughSettings(raw.shellPassthrough),
559
+ voice: parseVoiceSettings(raw.voice),
560
+ experimentalAgent: experimentalAgentSetting.selection,
561
+ _experimentalAgentSettingsPath: experimentalAgentSetting.settingsPath,
562
+ backgroundTools: parseBackgroundToolSettings(raw.backgroundTools),
563
+ signals: parseSignalSettings(raw.signals),
564
+ mcp: parseMcpDiscoverySettings(raw.mcp),
565
+ observability: parseObservabilitySettings(raw.observability)
566
+ };
567
+ } catch {
568
+ settings = structuredClone(DEFAULTS);
569
+ }
570
+ else settings = structuredClone(DEFAULTS);
571
+ if (authData._modelRanks && typeof authData._modelRanks === "object") settings.modelUseCounts = {
572
+ ...authData._modelRanks,
573
+ ...settings.modelUseCounts
574
+ };
575
+ for (const key of modelKeys) {
576
+ const modeMatch = key.match(/^_modeModelId_(.+)$/);
577
+ if (modeMatch?.[1] && typeof authData[key] === "string" && !settings.models.modeDefaults[modeMatch[1]]) settings.models.modeDefaults[modeMatch[1]] = authData[key];
578
+ }
579
+ for (const key of modelKeys) {
580
+ if (key === "_subagentModelId" && typeof authData[key] === "string" && !settings.models.subagentModels["default"]) settings.models.subagentModels["default"] = authData[key];
581
+ const saMatch = key.match(/^_subagentModelId_(.+)$/);
582
+ if (saMatch?.[1] && typeof authData[key] === "string" && !settings.models.subagentModels[saMatch[1]]) settings.models.subagentModels[saMatch[1]] = authData[key];
583
+ }
584
+ saveSettings(settings, settingsPath);
585
+ for (const key of modelKeys) delete authData[key];
586
+ try {
587
+ writeFileAtomically(authPath, JSON.stringify(authData, null, 2));
588
+ } catch {}
589
+ return true;
590
+ }
591
+ const LEGACY_VARIED_MODELS = {
592
+ plan: "openai/gpt-5.4",
593
+ build: "anthropic/claude-sonnet-4-5",
594
+ fast: "anthropic/claude-haiku-4-5"
595
+ };
596
+ function migrateLegacyVariedPack(settings) {
597
+ const legacyPackId = "varied";
598
+ const customPackId = "custom:varied";
599
+ if (!(settings.models.activeModelPackId === legacyPackId || settings.onboarding.modePackId === legacyPackId)) return false;
600
+ const existingIdx = settings.customModelPacks.findIndex((p) => p.name === "varied");
601
+ if (existingIdx >= 0) {
602
+ const existing = settings.customModelPacks[existingIdx];
603
+ if (!Object.entries(LEGACY_VARIED_MODELS).every(([k, v]) => existing.models[k] === v)) existing.models = { ...LEGACY_VARIED_MODELS };
604
+ } else settings.customModelPacks.push({
605
+ name: "varied",
606
+ models: { ...LEGACY_VARIED_MODELS },
607
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
608
+ });
609
+ if (settings.models.activeModelPackId === legacyPackId) {
610
+ settings.models.activeModelPackId = customPackId;
611
+ if (Object.keys(settings.models.modeDefaults).length === 0) settings.models.modeDefaults = { ...LEGACY_VARIED_MODELS };
612
+ }
613
+ if (settings.onboarding.modePackId === legacyPackId) settings.onboarding.modePackId = customPackId;
614
+ return true;
615
+ }
616
+ function loadSettings(filePath = getSettingsPath()) {
617
+ migrateFromAuth(filePath);
618
+ if (!existsSync(filePath)) return rememberLoadedSettings(structuredClone(DEFAULTS));
619
+ try {
620
+ const raw = JSON.parse(readFileSync(filePath, "utf-8"));
621
+ const rawCustomPacks = Array.isArray(raw.customModelPacks) ? raw.customModelPacks : [];
622
+ const modePackOverrides = parseModePackOverrides(raw.models?.modePackOverrides);
623
+ const experimentalAgentSetting = loadExperimentalAgentSetting(raw.experimentalAgent, filePath);
624
+ const settings = {
625
+ ...raw,
626
+ onboarding: {
627
+ ...DEFAULTS.onboarding,
628
+ ...raw.onboarding
629
+ },
630
+ models: {
631
+ ...DEFAULTS.models,
632
+ ...raw.models,
633
+ modePackOverrides,
634
+ modeThinkingDefaults: parseModeThinkingDefaults(raw.models?.modeThinkingDefaults),
635
+ packFallbacks: loadPackFallbacks(raw.models?.packFallbacks, rawCustomPacks),
636
+ packAccountPreferences: loadPackAccountPreferences(raw.models?.packAccountPreferences, rawCustomPacks, modePackOverrides)
637
+ },
638
+ preferences: parsePreferences(raw.preferences),
639
+ storage: {
640
+ ...STORAGE_DEFAULTS,
641
+ ...raw.storage,
642
+ libsql: {
643
+ ...STORAGE_DEFAULTS.libsql,
644
+ ...raw.storage?.libsql
645
+ },
646
+ pg: {
647
+ ...STORAGE_DEFAULTS.pg,
648
+ ...raw.storage?.pg
649
+ }
650
+ },
651
+ customModelPacks: Array.isArray(raw.customModelPacks) ? raw.customModelPacks : [],
652
+ customProviders: parseCustomProviders(raw.customProviders),
653
+ modelUseCounts: raw.modelUseCounts && typeof raw.modelUseCounts === "object" ? raw.modelUseCounts : {},
654
+ updateDismissedVersion: typeof raw.updateDismissedVersion === "string" ? raw.updateDismissedVersion : null,
655
+ memoryGateway: raw.memoryGateway && typeof raw.memoryGateway === "object" ? raw.memoryGateway : {},
656
+ lsp: parseLspSettings(raw.lsp),
657
+ browser: parseBrowserSettings(raw.browser),
658
+ shellPassthrough: parseShellPassthroughSettings(raw.shellPassthrough),
659
+ voice: parseVoiceSettings(raw.voice),
660
+ experimentalAgent: experimentalAgentSetting.selection,
661
+ _experimentalAgentSettingsPath: experimentalAgentSetting.settingsPath,
662
+ backgroundTools: parseBackgroundToolSettings(raw.backgroundTools),
663
+ signals: parseSignalSettings(raw.signals),
664
+ mcp: parseMcpDiscoverySettings(raw.mcp),
665
+ observability: parseObservabilitySettings(raw.observability)
666
+ };
667
+ let settingsChanged = false;
668
+ if (!isFiniteNumber(raw.preferences?.previewLines)) settingsChanged = true;
669
+ if (raw.models?.omModelId && !settings.models.omModelOverride) {
670
+ settings.models.omModelOverride = raw.models.omModelId;
671
+ settingsChanged = true;
672
+ }
673
+ if (migrateLegacyVariedPack(settings)) settingsChanged = true;
674
+ if (settingsChanged) saveSettings(settings, filePath);
675
+ return rememberLoadedSettings(settings);
676
+ } catch {
677
+ return rememberLoadedSettings(structuredClone(DEFAULTS));
678
+ }
679
+ }
680
+ const THREAD_ACTIVE_MODEL_PACK_ID_KEY = "activeModelPackId";
681
+ const THREAD_FALLBACK_STATUS_KEY = "mastracodeFallbackStatus";
682
+ function parseThreadSettings(metadata) {
683
+ const modeModelIds = {};
684
+ for (const [key, value] of Object.entries(metadata ?? {})) {
685
+ const modeMatch = key.match(/^modeModelId_(.+)$/);
686
+ if (modeMatch?.[1] && typeof value === "string" && value.length > 0) modeModelIds[modeMatch[1]] = value;
687
+ }
688
+ const rawPackId = metadata?.[THREAD_ACTIVE_MODEL_PACK_ID_KEY];
689
+ return {
690
+ activeModelPackId: typeof rawPackId === "string" && rawPackId.length > 0 ? rawPackId : null,
691
+ modeModelIds
692
+ };
693
+ }
694
+ /**
695
+ * Resolve active model pack id for the current thread.
696
+ *
697
+ * Priority:
698
+ * 1) explicit thread metadata activeModelPackId
699
+ * 2) inferred from thread modeModelId_* values
700
+ * 3) global settings.models.activeModelPackId
701
+ */
702
+ function resolveThreadActiveModelPackId(settings, builtinPacks, metadata) {
703
+ const threadSettings = parseThreadSettings(metadata);
704
+ const isKnownPack = (packId) => {
705
+ if (packId.startsWith("custom:")) {
706
+ const name = packId.slice(7);
707
+ return settings.customModelPacks.some((p) => p.name === name);
708
+ }
709
+ return builtinPacks.some((p) => p.id === packId);
710
+ };
711
+ if (threadSettings.activeModelPackId && isKnownPack(threadSettings.activeModelPackId)) return threadSettings.activeModelPackId;
712
+ const allPacks = [...builtinPacks, ...settings.customModelPacks.map((p) => ({
713
+ id: `custom:${p.name}`,
714
+ models: p.models
715
+ }))];
716
+ for (const pack of allPacks) {
717
+ const packEntries = Object.entries(pack.models);
718
+ const threadEntries = Object.keys(threadSettings.modeModelIds);
719
+ if (packEntries.length === threadEntries.length && packEntries.every(([modeId, modelId]) => threadSettings.modeModelIds[modeId] === modelId)) return pack.id;
720
+ }
721
+ if (settings.models.activeModelPackId && isKnownPack(settings.models.activeModelPackId)) return settings.models.activeModelPackId;
722
+ return null;
723
+ }
724
+ /**
725
+ * Resolve effective per-mode model defaults.
726
+ *
727
+ * If `activeModelPackId` is set, looks up the pack (built-in or custom) and
728
+ * returns its models. Falls back to the explicit `modeDefaults` map.
729
+ *
730
+ * @param settings The loaded global settings.
731
+ * @param builtinPacks Built-in packs for the current provider access
732
+ * (from `getAvailableModePacks`). Pass `[]` if unavailable.
733
+ */
734
+ function resolveModePackModels(settings, pack) {
735
+ if (pack.id.startsWith("custom:") || pack.id === "custom") return pack.models;
736
+ return {
737
+ ...pack.models,
738
+ ...settings.models.modePackOverrides?.[pack.id]
739
+ };
740
+ }
741
+ /**
742
+ * Resolve a session's explicitly active pack when its mode model still matches.
743
+ * Model matching alone is not pack identity: multiple packs may intentionally
744
+ * use the same model, and inference would attach an unrelated fallback chain.
745
+ */
746
+ function findModePackForModel(settings, packs, modelId, modeId, activePackId) {
747
+ const activePack = packs.find((pack) => pack.id === activePackId);
748
+ return activePack && resolveModePackModels(settings, activePack)[modeId] === modelId ? activePack : void 0;
749
+ }
750
+ function resolveModelDefaults(settings, builtinPacks) {
751
+ const { activeModelPackId, modeDefaults } = settings.models;
752
+ if (!activeModelPackId) return modeDefaults;
753
+ if (activeModelPackId.startsWith("custom:")) {
754
+ const name = activeModelPackId.slice(7);
755
+ const pack = settings.customModelPacks.find((p) => p.name === name);
756
+ if (pack) return pack.models;
757
+ return modeDefaults;
758
+ }
759
+ const builtin = builtinPacks.find((p) => p.id === activeModelPackId);
760
+ if (builtin) return resolveModePackModels(settings, builtin);
761
+ return modeDefaults;
762
+ }
763
+ /**
764
+ * Resolve the default reasoning-effort level for a mode.
765
+ *
766
+ * Lookup order:
767
+ * 1. `models.modeThinkingDefaults[mode]` when set for the mode.
768
+ * 2. The global `preferences.thinkingLevel`.
769
+ *
770
+ * Session-level overrides (via /think or the session settings panel) take
771
+ * precedence over both and are handled by the caller.
772
+ */
773
+ function resolveDefaultThinkingLevel(settings, mode) {
774
+ return resolveDefaultThinkingLevel$1({
775
+ globalDefault: settings.preferences.thinkingLevel,
776
+ modeDefaults: settings.models.modeThinkingDefaults
777
+ }, mode);
778
+ }
779
+ /**
780
+ * Resolve the effective model ID for one of the two OM roles.
781
+ *
782
+ * Lookup order:
783
+ * 1. The role-specific override (`observerModelOverride` /
784
+ * `reflectorModelOverride`) if set.
785
+ * 2. If `activeOmPackId` points at a built-in pack, that pack's model.
786
+ * 3. The shared `omModelOverride` fallback.
787
+ *
788
+ * @param settings The loaded global settings.
789
+ * @param role Which OM role to resolve (`'observer'` or `'reflector'`).
790
+ * @param builtinOmPacks Built-in OM packs for the current provider access
791
+ * (from `getAvailableOmPacks`). Pass `[]` if unavailable.
792
+ */
793
+ function resolveOmRoleModel(settings, role, builtinOmPacks) {
794
+ const { activeOmPackId, omModelOverride, observerModelOverride, observerModelSelection, reflectorModelOverride, reflectorModelSelection } = settings.models;
795
+ const model = role === "observer" ? observerModelSelection : reflectorModelSelection;
796
+ if (model === "auto") return null;
797
+ if (model) return model;
798
+ const roleOverride = role === "observer" ? observerModelOverride : reflectorModelOverride;
799
+ if (roleOverride) return roleOverride;
800
+ if (!activeOmPackId) return omModelOverride;
801
+ if (activeOmPackId === "custom") return omModelOverride;
802
+ const pack = builtinOmPacks.find((p) => p.id === activeOmPackId);
803
+ if (pack) return pack.modelId;
804
+ return omModelOverride;
805
+ }
806
+ /**
807
+ * @deprecated Use `resolveOmRoleModel(settings, 'observer' | 'reflector', ...)`.
808
+ * Equivalent to resolving the observer role (existing callers set both observer
809
+ * and reflector to the same value).
810
+ */
811
+ function resolveOmModel(settings, builtinOmPacks) {
812
+ return resolveOmRoleModel(settings, "observer", builtinOmPacks);
813
+ }
814
+ function getSignalSettingsForSave(settings, filePath) {
815
+ const loadedSignals = loadedSignalSettings.get(settings);
816
+ if (!loadedSignals || !signalSettingsEqual(settings.signals, loadedSignals) || !existsSync(filePath)) return settings.signals;
817
+ try {
818
+ const currentSignals = parseSignalSettings(JSON.parse(readFileSync(filePath, "utf-8")).signals);
819
+ if (!signalSettingsEqual(currentSignals, loadedSignals)) return currentSignals;
820
+ } catch {}
821
+ return settings.signals;
822
+ }
823
+ function writeFileAtomically(filePath, content) {
824
+ const tempPath = `${filePath}.${process.pid}.${globalThis.crypto.randomUUID()}.tmp`;
825
+ try {
826
+ writeFileSync(tempPath, content, {
827
+ encoding: "utf-8",
828
+ mode: existsSync(filePath) ? statSync(filePath).mode & 511 : 384
829
+ });
830
+ renameSync(tempPath, filePath);
831
+ } finally {
832
+ rmSync(tempPath, { force: true });
833
+ }
834
+ }
835
+ function saveSettings(settings, filePath = getSettingsPath()) {
836
+ const dir = dirname(filePath);
837
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
838
+ const signals = getSignalSettingsForSave(settings, filePath);
839
+ settings.signals = signals;
840
+ loadedSignalSettings.set(settings, cloneSignalSettings(signals));
841
+ const settingsToSave = { ...settings };
842
+ delete settingsToSave._experimentalAgentSettingsPath;
843
+ writeFileAtomically(filePath, JSON.stringify(settingsToSave, null, 2));
844
+ }
845
+ /** Marker file name to track which provider last used a profile. */
846
+ const PROFILE_PROVIDER_MARKER = ".mastra-provider";
847
+ /**
848
+ * Check which provider last used a profile directory.
849
+ * Returns the provider name if the marker exists, undefined otherwise.
850
+ */
851
+ function getProfileProvider(profilePath) {
852
+ const markerPath = join(profilePath, PROFILE_PROVIDER_MARKER);
853
+ if (!existsSync(markerPath)) return;
854
+ try {
855
+ const content = readFileSync(markerPath, "utf-8").trim();
856
+ if (content === "stagehand" || content === "agent-browser") return content;
857
+ return;
858
+ } catch {
859
+ return;
860
+ }
861
+ }
862
+ /**
863
+ * Write the provider marker to a profile directory.
864
+ * Creates the directory if it doesn't exist.
865
+ */
866
+ function setProfileProvider(profilePath, provider) {
867
+ const markerPath = join(profilePath, PROFILE_PROVIDER_MARKER);
868
+ if (!existsSync(profilePath)) mkdirSync(profilePath, { recursive: true });
869
+ writeFileSync(markerPath, provider, "utf-8");
870
+ }
871
+ /**
872
+ * Check if a profile has a provider mismatch.
873
+ * Returns the existing provider if there's a mismatch, undefined otherwise.
874
+ */
875
+ function checkProfileProviderMismatch(profilePath, targetProvider) {
876
+ if (!profilePath) return;
877
+ const existingProvider = getProfileProvider(profilePath);
878
+ if (existingProvider && existingProvider !== targetProvider) return existingProvider;
879
+ }
880
+ function browserRecordingOptions() {
881
+ return { outputDir: join(getAppDataDir(), "browser-recordings") };
882
+ }
883
+ /**
884
+ * Snapshot of browser settings safe to store in session state (which session clients can read).
885
+ * Strips credentials; keeps everything `/browser status` needs for drift detection.
886
+ */
887
+ function toActiveBrowserSettings(settings) {
888
+ if (!settings.stagehand) return { ...settings };
889
+ const { apiKey: _apiKey, ...stagehand } = settings.stagehand;
890
+ return {
891
+ ...settings,
892
+ stagehand
893
+ };
894
+ }
895
+ /**
896
+ * Env vars Stagehand reads for each provider it can route (mirrors
897
+ * `STAGEHAND_MODEL_PROVIDERS` in `@mastra/stagehand` and Stagehand's own
898
+ * `providerEnvVarMap`). `null` means the provider needs no API key.
899
+ * Kept here instead of importing `@mastra/stagehand`, which would eagerly
900
+ * load the browser stack into every settings consumer.
901
+ */
902
+ const STAGEHAND_PROVIDER_ENV_VARS = {
903
+ openai: ["OPENAI_API_KEY"],
904
+ anthropic: ["ANTHROPIC_API_KEY"],
905
+ google: [
906
+ "GEMINI_API_KEY",
907
+ "GOOGLE_GENERATIVE_AI_API_KEY",
908
+ "GOOGLE_API_KEY"
909
+ ],
910
+ vertex: ["GOOGLE_VERTEX_AI_API_KEY"],
911
+ groq: ["GROQ_API_KEY"],
912
+ cerebras: ["CEREBRAS_API_KEY"],
913
+ togetherai: ["TOGETHER_AI_API_KEY"],
914
+ mistral: ["MISTRAL_API_KEY"],
915
+ deepseek: ["DEEPSEEK_API_KEY"],
916
+ perplexity: ["PERPLEXITY_API_KEY"],
917
+ azure: ["AZURE_API_KEY"],
918
+ xai: ["XAI_API_KEY"],
919
+ gateway: ["AI_GATEWAY_API_KEY"],
920
+ bedrock: null,
921
+ ollama: null
922
+ };
923
+ function hasCodexOAuthLogin(authStorage) {
924
+ return authStorage.get("openai-codex")?.type === "oauth";
925
+ }
926
+ function isOpenAIModel(modelId) {
927
+ return modelId.startsWith(OPENAI_PREFIX);
928
+ }
929
+ /**
930
+ * Stagehand hands the segment after `provider/` straight to the AI SDK provider,
931
+ * so apply the same id normalization the chat gateway does before it does.
932
+ */
933
+ function normalizeForStagehand(modelId) {
934
+ const bare = stripMastraGatewayPrefix(modelId.trim());
935
+ return bare.startsWith("anthropic/") ? normalizeAnthropicModelId(bare) : bare;
936
+ }
937
+ /** Whether Stagehand could run `provider/model` with the credentials available right now. */
938
+ function stagehandCanRoute(modelId, codexOAuth) {
939
+ const provider = modelId.split("/", 1)[0];
940
+ if (!provider || provider === modelId) return false;
941
+ if (provider === "openai" && codexOAuth) return true;
942
+ const envVars = STAGEHAND_PROVIDER_ENV_VARS[provider];
943
+ if (envVars === void 0) return false;
944
+ if (envVars === null) return true;
945
+ return envVars.some((name) => Boolean(process.env[name]?.trim()));
946
+ }
947
+ /**
948
+ * Resolve which model Stagehand will use and why, without creating a browser.
949
+ * Order: configured `browser.stagehand.model` → the launch-time chat model when
950
+ * Stagehand can route it → the Codex login's default model → Stagehand's own
951
+ * default. Mirrors the selection in `createBrowserFromSettings` so the UI can
952
+ * show it.
953
+ */
954
+ function resolveStagehandModel(settings, { chatModelId, authStorage = new AuthStorage() } = {}) {
955
+ if (settings.provider !== "stagehand") return {
956
+ modelName: void 0,
957
+ source: "stagehand-default",
958
+ viaCodexOAuth: false
959
+ };
960
+ const codexOAuth = hasCodexOAuthLogin(authStorage);
961
+ const configured = settings.stagehand?.model ? normalizeForStagehand(settings.stagehand.model) : void 0;
962
+ if (configured) return {
963
+ modelName: configured,
964
+ source: "settings",
965
+ viaCodexOAuth: codexOAuth && isOpenAIModel(configured)
966
+ };
967
+ const chatModel = chatModelId ? normalizeForStagehand(chatModelId) : void 0;
968
+ if (chatModel && stagehandCanRoute(chatModel, codexOAuth)) return {
969
+ modelName: chatModel,
970
+ source: "chat-model",
971
+ viaCodexOAuth: codexOAuth && isOpenAIModel(chatModel)
972
+ };
973
+ if (codexOAuth) return {
974
+ modelName: PROVIDER_DEFAULT_MODELS["openai-codex"],
975
+ source: "codex-oauth",
976
+ viaCodexOAuth: true
977
+ };
978
+ return {
979
+ modelName: void 0,
980
+ source: "stagehand-default",
981
+ viaCodexOAuth: false
982
+ };
983
+ }
984
+ /**
985
+ * Create a browser instance from settings.
986
+ * Shared by startup (main.ts) and live reconfiguration (/browser command).
987
+ * Returns undefined if browser is disabled.
988
+ */
989
+ async function createBrowserFromSettings(settings, { chatModelId } = {}) {
990
+ if (!settings.enabled) return;
991
+ const { provider, headless, viewport, cdpUrl, profile, executablePath, stagehand, agentBrowser } = settings;
992
+ const scope = profile ? "shared" : settings.scope;
993
+ const launchConfig = {
994
+ headless,
995
+ viewport,
996
+ profile,
997
+ executablePath,
998
+ scope
999
+ };
1000
+ if (provider === "stagehand") {
1001
+ const { StagehandBrowser } = await import("@mastra/stagehand");
1002
+ const stagehandOpts = {
1003
+ env: stagehand?.env ?? "LOCAL",
1004
+ apiKey: stagehand?.apiKey ?? process.env.BROWSERBASE_API_KEY,
1005
+ projectId: stagehand?.projectId ?? process.env.BROWSERBASE_PROJECT_ID,
1006
+ preserveUserDataDir: stagehand?.preserveUserDataDir,
1007
+ recording: browserRecordingOptions()
1008
+ };
1009
+ const authStorage = new AuthStorage();
1010
+ const resolved = resolveStagehandModel(settings, {
1011
+ chatModelId,
1012
+ authStorage
1013
+ });
1014
+ if (resolved.modelName && resolved.viaCodexOAuth) {
1015
+ const accountId = authStorage.get("openai-codex")?.accountId;
1016
+ stagehandOpts.model = {
1017
+ modelName: remapOpenAIModelForCodexOAuth(resolved.modelName),
1018
+ apiKey: "codex-oauth",
1019
+ baseURL: "https://chatgpt.com/backend-api/codex",
1020
+ headers: {
1021
+ originator: "mastracode",
1022
+ "User-Agent": "mastracode",
1023
+ ...accountId ? { "ChatGPT-Account-ID": accountId } : {}
1024
+ },
1025
+ fetch: buildCodexStagehandFetch(authStorage),
1026
+ middleware: createCodexMiddleware()
1027
+ };
1028
+ } else if (resolved.modelName) stagehandOpts.model = resolved.modelName;
1029
+ return cdpUrl ? new StagehandBrowser({
1030
+ ...launchConfig,
1031
+ cdpUrl,
1032
+ scope: "shared",
1033
+ ...stagehandOpts
1034
+ }) : new StagehandBrowser({
1035
+ ...launchConfig,
1036
+ ...stagehandOpts
1037
+ });
1038
+ } else if (provider === "agent-browser") {
1039
+ const { AgentBrowser } = await import("@mastra/agent-browser");
1040
+ const agentBrowserOpts = {
1041
+ storageState: agentBrowser?.storageState,
1042
+ recording: browserRecordingOptions()
1043
+ };
1044
+ return cdpUrl ? new AgentBrowser({
1045
+ ...launchConfig,
1046
+ cdpUrl,
1047
+ scope: "shared",
1048
+ ...agentBrowserOpts
1049
+ }) : new AgentBrowser({
1050
+ ...launchConfig,
1051
+ ...agentBrowserOpts,
1052
+ scope
1053
+ });
1054
+ }
1055
+ throw new Error(`Unsupported browser provider: ${provider}`);
1056
+ }
1057
+ //#endregion
1058
+ export { ExperimentalAgentSettingsError, GITHUB_POLL_INTERVAL_DEFAULT_MS, GITHUB_POLL_INTERVAL_MAX_MS, GITHUB_POLL_INTERVAL_MIN_MS, MASTRA_GATEWAY_DEFAULT_URL, MASTRA_GATEWAY_PROVIDER, MEMORY_GATEWAY_DEFAULT_URL, MEMORY_GATEWAY_PROVIDER, OBSERVABILITY_AUTH_PREFIX, STAGEHAND_PROVIDER_ENV_VARS, STORAGE_DEFAULTS, THINKING_LEVEL_VALUES, THREAD_ACTIVE_MODEL_PACK_ID_KEY, THREAD_FALLBACK_STATUS_KEY, VIEWPORT_PRESETS, WEB_SEARCH_PROVIDER_VALUES, checkProfileProviderMismatch, createBrowserFromSettings, defaultVoiceEngine, findModePackForModel, getCustomProviderId, getProfileProvider, getSettingsPath, isThinkingLevelSetting, loadSettings, migrateAccountPreferences, migrateLegacyVariedPack, parseCustomProviders, parseExperimentalAgentSetting, parseThreadSettings, parseViewportInput, pruneRemovedAccountPreferences, resolveDefaultThinkingLevel, resolveLspSetting, resolveModePackModels, resolveModelDefaults, resolveOmModel, resolveOmRoleModel, resolveStagehandModel, resolveThreadActiveModelPackId, saveSettings, setProfileProvider, stripMastraCodeCustomProviderPrefix, toActiveBrowserSettings, toCustomProviderModelId };
1059
+
1060
+ //# sourceMappingURL=settings.js.map