@mastra/code-sdk 1.0.3-alpha.0 → 1.1.0-alpha.2

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 (258) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/acp/agent.js +155 -167
  3. package/dist/acp/agent.js.map +1 -1
  4. package/dist/acp/event-mapper.js +193 -168
  5. package/dist/acp/event-mapper.js.map +1 -1
  6. package/dist/acp/index.js +60 -49
  7. package/dist/acp/index.js.map +1 -1
  8. package/dist/acp/server.js +31 -30
  9. package/dist/acp/server.js.map +1 -1
  10. package/dist/acp.js +1 -4
  11. package/dist/agents/credential-resolver.js +40 -29
  12. package/dist/agents/credential-resolver.js.map +1 -1
  13. package/dist/agents/custom-provider-source.js +16 -9
  14. package/dist/agents/custom-provider-source.js.map +1 -1
  15. package/dist/agents/instructions.js +27 -36
  16. package/dist/agents/instructions.js.map +1 -1
  17. package/dist/agents/mastracode-gateway.js +355 -428
  18. package/dist/agents/mastracode-gateway.js.map +1 -1
  19. package/dist/agents/memory.js +87 -78
  20. package/dist/agents/memory.js.map +1 -1
  21. package/dist/agents/model.js +114 -119
  22. package/dist/agents/model.js.map +1 -1
  23. package/dist/agents/modes/build.js +12 -13
  24. package/dist/agents/modes/build.js.map +1 -1
  25. package/dist/agents/modes/explore.js +14 -13
  26. package/dist/agents/modes/explore.js.map +1 -1
  27. package/dist/agents/modes/plan.js +14 -15
  28. package/dist/agents/modes/plan.js.map +1 -1
  29. package/dist/agents/prompts/agent-instructions.js +78 -69
  30. package/dist/agents/prompts/agent-instructions.js.map +1 -1
  31. package/dist/agents/prompts/build.js +19 -16
  32. package/dist/agents/prompts/build.js.map +1 -1
  33. package/dist/agents/prompts/fast.js +8 -4
  34. package/dist/agents/prompts/fast.js.map +1 -1
  35. package/dist/agents/prompts/index.js +48 -47
  36. package/dist/agents/prompts/index.js.map +1 -1
  37. package/dist/agents/prompts/model.js +6 -5
  38. package/dist/agents/prompts/model.js.map +1 -1
  39. package/dist/agents/prompts/plan.js +20 -16
  40. package/dist/agents/prompts/plan.js.map +1 -1
  41. package/dist/agents/prompts/tool-guidance.js +77 -109
  42. package/dist/agents/prompts/tool-guidance.js.map +1 -1
  43. package/dist/agents/sandbox-filesystem.js +245 -259
  44. package/dist/agents/sandbox-filesystem.js.map +1 -1
  45. package/dist/agents/sandbox-reattach.js +9 -11
  46. package/dist/agents/sandbox-reattach.js.map +1 -1
  47. package/dist/agents/thread-caveman-state.js +92 -81
  48. package/dist/agents/thread-caveman-state.js.map +1 -1
  49. package/dist/agents/tool-availability.js +62 -80
  50. package/dist/agents/tool-availability.js.map +1 -1
  51. package/dist/agents/tools.js +99 -139
  52. package/dist/agents/tools.js.map +1 -1
  53. package/dist/agents/workspace.js +232 -225
  54. package/dist/agents/workspace.js.map +1 -1
  55. package/dist/analytics.js +139 -128
  56. package/dist/analytics.js.map +1 -1
  57. package/dist/auth/authorization-input.js +39 -25
  58. package/dist/auth/authorization-input.js.map +1 -1
  59. package/dist/auth/device-code.js +112 -80
  60. package/dist/auth/device-code.js.map +1 -1
  61. package/dist/auth/index.js +2 -9
  62. package/dist/auth/pkce.js +27 -16
  63. package/dist/auth/pkce.js.map +1 -1
  64. package/dist/auth/providers/anthropic.js +107 -93
  65. package/dist/auth/providers/anthropic.js.map +1 -1
  66. package/dist/auth/providers/github-copilot.js +304 -293
  67. package/dist/auth/providers/github-copilot.js.map +1 -1
  68. package/dist/auth/providers/openai-codex.js +442 -460
  69. package/dist/auth/providers/openai-codex.js.map +1 -1
  70. package/dist/auth/providers/xai.js +179 -145
  71. package/dist/auth/providers/xai.js.map +1 -1
  72. package/dist/auth/storage.js +182 -175
  73. package/dist/auth/storage.js.map +1 -1
  74. package/dist/auth/types.js +1 -1
  75. package/dist/clipboard/index.js +206 -172
  76. package/dist/clipboard/index.js.map +1 -1
  77. package/dist/constants.js +11 -16
  78. package/dist/constants.js.map +1 -1
  79. package/dist/error-classification.js +19 -11
  80. package/dist/error-classification.js.map +1 -1
  81. package/dist/evals/context-builder.js +145 -104
  82. package/dist/evals/context-builder.js.map +1 -1
  83. package/dist/evals/index.js +4 -7
  84. package/dist/evals/scorers/classify-command.js +62 -41
  85. package/dist/evals/scorers/classify-command.js.map +1 -1
  86. package/dist/evals/scorers/efficiency.js +239 -181
  87. package/dist/evals/scorers/efficiency.js.map +1 -1
  88. package/dist/evals/scorers/extract-tools.js +51 -47
  89. package/dist/evals/scorers/extract-tools.js.map +1 -1
  90. package/dist/evals/scorers/index.js +1 -5
  91. package/dist/evals/scorers/outcome.js +321 -212
  92. package/dist/evals/scorers/outcome.js.map +1 -1
  93. package/dist/goal-manager.js +266 -261
  94. package/dist/goal-manager.js.map +1 -1
  95. package/dist/goal-signal.js +14 -13
  96. package/dist/goal-signal.js.map +1 -1
  97. package/dist/headless/cli.js +153 -154
  98. package/dist/headless/cli.js.map +1 -1
  99. package/dist/headless/flags.js +180 -178
  100. package/dist/headless/flags.js.map +1 -1
  101. package/dist/headless/format.js +72 -71
  102. package/dist/headless/format.js.map +1 -1
  103. package/dist/headless/index.js +5 -31
  104. package/dist/headless/policy.js +35 -31
  105. package/dist/headless/policy.js.map +1 -1
  106. package/dist/headless/run-mc.js +332 -334
  107. package/dist/headless/run-mc.js.map +1 -1
  108. package/dist/headless/types.js +16 -7
  109. package/dist/headless/types.js.map +1 -1
  110. package/dist/hooks/config.js +56 -61
  111. package/dist/hooks/config.js.map +1 -1
  112. package/dist/hooks/executor.js +118 -116
  113. package/dist/hooks/executor.js.map +1 -1
  114. package/dist/hooks/index.js +4 -15
  115. package/dist/hooks/manager.js +221 -280
  116. package/dist/hooks/manager.js.map +1 -1
  117. package/dist/hooks/types.js +5 -4
  118. package/dist/hooks/types.js.map +1 -1
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +632 -712
  121. package/dist/index.js.map +1 -1
  122. package/dist/ipc/ipc-reporter.js +19 -22
  123. package/dist/ipc/ipc-reporter.js.map +1 -1
  124. package/dist/lsp/client.js +248 -306
  125. package/dist/lsp/client.js.map +1 -1
  126. package/dist/lsp/index.js +1 -6
  127. package/dist/lsp/language.js +39 -43
  128. package/dist/lsp/language.js.map +1 -1
  129. package/dist/lsp/manager.js +78 -93
  130. package/dist/lsp/manager.js.map +1 -1
  131. package/dist/lsp/server.js +151 -120
  132. package/dist/lsp/server.js.map +1 -1
  133. package/dist/lsp/workspace.js +50 -47
  134. package/dist/lsp/workspace.js.map +1 -1
  135. package/dist/mcp/config.js +210 -199
  136. package/dist/mcp/config.js.map +1 -1
  137. package/dist/mcp/index.js +2 -9
  138. package/dist/mcp/manager.js +482 -475
  139. package/dist/mcp/manager.js.map +1 -1
  140. package/dist/mcp/types.js +1 -1
  141. package/dist/onboarding/custom-packs.js +14 -17
  142. package/dist/onboarding/custom-packs.js.map +1 -1
  143. package/dist/onboarding/custom-providers.js +22 -20
  144. package/dist/onboarding/custom-providers.js.map +1 -1
  145. package/dist/onboarding/index.d.ts +1 -1
  146. package/dist/onboarding/index.d.ts.map +1 -1
  147. package/dist/onboarding/index.js +3 -21
  148. package/dist/onboarding/om-settings.d.ts +5 -0
  149. package/dist/onboarding/om-settings.d.ts.map +1 -1
  150. package/dist/onboarding/om-settings.js +41 -20
  151. package/dist/onboarding/om-settings.js.map +1 -1
  152. package/dist/onboarding/packs.d.ts +4 -6
  153. package/dist/onboarding/packs.d.ts.map +1 -1
  154. package/dist/onboarding/packs.js +154 -105
  155. package/dist/onboarding/packs.js.map +1 -1
  156. package/dist/onboarding/settings.js +575 -517
  157. package/dist/onboarding/settings.js.map +1 -1
  158. package/dist/permissions.js +112 -99
  159. package/dist/permissions.js.map +1 -1
  160. package/dist/plugin.js +21 -23
  161. package/dist/plugin.js.map +1 -1
  162. package/dist/plugins/dependencies.js +64 -87
  163. package/dist/plugins/dependencies.js.map +1 -1
  164. package/dist/plugins/install.js +159 -169
  165. package/dist/plugins/install.js.map +1 -1
  166. package/dist/plugins/loader.js +170 -185
  167. package/dist/plugins/loader.js.map +1 -1
  168. package/dist/plugins/manager.js +374 -380
  169. package/dist/plugins/manager.js.map +1 -1
  170. package/dist/plugins/manifest.js +38 -63
  171. package/dist/plugins/manifest.js.map +1 -1
  172. package/dist/plugins/package-link.js +48 -64
  173. package/dist/plugins/package-link.js.map +1 -1
  174. package/dist/plugins/paths.js +18 -19
  175. package/dist/plugins/paths.js.map +1 -1
  176. package/dist/plugins/registry.js +97 -81
  177. package/dist/plugins/registry.js.map +1 -1
  178. package/dist/plugins/scaffold.js +62 -98
  179. package/dist/plugins/scaffold.js.map +1 -1
  180. package/dist/plugins/types.js +1 -1
  181. package/dist/processors/plan-rejection-abort.js +45 -44
  182. package/dist/processors/plan-rejection-abort.js.map +1 -1
  183. package/dist/providers/amazon-bedrock-gateway.js +134 -125
  184. package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
  185. package/dist/providers/amazon-bedrock.js +68 -47
  186. package/dist/providers/amazon-bedrock.js.map +1 -1
  187. package/dist/providers/claude-max.js +153 -133
  188. package/dist/providers/claude-max.js.map +1 -1
  189. package/dist/providers/github-copilot.js +232 -230
  190. package/dist/providers/github-copilot.js.map +1 -1
  191. package/dist/providers/openai-codex.js +271 -260
  192. package/dist/providers/openai-codex.js.map +1 -1
  193. package/dist/providers/xai.js +57 -50
  194. package/dist/providers/xai.js.map +1 -1
  195. package/dist/schema.js +91 -89
  196. package/dist/schema.js.map +1 -1
  197. package/dist/theme-palette.js +18 -14
  198. package/dist/theme-palette.js.map +1 -1
  199. package/dist/tool-names.js +46 -37
  200. package/dist/tool-names.js.map +1 -1
  201. package/dist/tools/index.js +2 -8
  202. package/dist/tools/request-sandbox-access.js +71 -80
  203. package/dist/tools/request-sandbox-access.js.map +1 -1
  204. package/dist/tools/utils.js +26 -16
  205. package/dist/tools/utils.js.map +1 -1
  206. package/dist/tools/web-search.js +51 -55
  207. package/dist/tools/web-search.js.map +1 -1
  208. package/dist/utils/binaries.js +65 -61
  209. package/dist/utils/binaries.js.map +1 -1
  210. package/dist/utils/debug-log.js +51 -47
  211. package/dist/utils/debug-log.js.map +1 -1
  212. package/dist/utils/errors.js +157 -192
  213. package/dist/utils/errors.js.map +1 -1
  214. package/dist/utils/gateway-sync.js +49 -37
  215. package/dist/utils/gateway-sync.js.map +1 -1
  216. package/dist/utils/path-security.js +7 -6
  217. package/dist/utils/path-security.js.map +1 -1
  218. package/dist/utils/plan-diff.js +58 -39
  219. package/dist/utils/plan-diff.js.map +1 -1
  220. package/dist/utils/plans.js +92 -74
  221. package/dist/utils/plans.js.map +1 -1
  222. package/dist/utils/project.js +318 -256
  223. package/dist/utils/project.js.map +1 -1
  224. package/dist/utils/signals-pubsub.js +117 -99
  225. package/dist/utils/signals-pubsub.js.map +1 -1
  226. package/dist/utils/slash-command-loader.js +118 -154
  227. package/dist/utils/slash-command-loader.js.map +1 -1
  228. package/dist/utils/slash-command-processor.js +92 -83
  229. package/dist/utils/slash-command-processor.js.map +1 -1
  230. package/dist/utils/stdin-pipe.js +87 -63
  231. package/dist/utils/stdin-pipe.js.map +1 -1
  232. package/dist/utils/storage-factory.js +104 -84
  233. package/dist/utils/storage-factory.js.map +1 -1
  234. package/dist/utils/storage-maintenance.js +249 -211
  235. package/dist/utils/storage-maintenance.js.map +1 -1
  236. package/dist/utils/thread-lock.js +96 -92
  237. package/dist/utils/thread-lock.js.map +1 -1
  238. package/dist/utils/token-estimator.js +12 -12
  239. package/dist/utils/token-estimator.js.map +1 -1
  240. package/dist/utils/update-check.d.ts +1 -1
  241. package/dist/utils/update-check.js +341 -259
  242. package/dist/utils/update-check.js.map +1 -1
  243. package/dist/voice/stt-registry.js +131 -113
  244. package/dist/voice/stt-registry.js.map +1 -1
  245. package/package.json +11 -11
  246. package/dist/acp.js.map +0 -1
  247. package/dist/auth/index.js.map +0 -1
  248. package/dist/auth/types.js.map +0 -1
  249. package/dist/evals/index.js.map +0 -1
  250. package/dist/evals/scorers/index.js.map +0 -1
  251. package/dist/headless/index.js.map +0 -1
  252. package/dist/hooks/index.js.map +0 -1
  253. package/dist/lsp/index.js.map +0 -1
  254. package/dist/mcp/index.js.map +0 -1
  255. package/dist/mcp/types.js.map +0 -1
  256. package/dist/onboarding/index.js.map +0 -1
  257. package/dist/plugins/types.js.map +0 -1
  258. package/dist/tools/index.js.map +0 -1
@@ -1,111 +1,160 @@
1
+ import { DEFAULT_OM_MODEL_ID } from "../constants.js";
2
+ //#region src/onboarding/packs.ts
3
+ /**
4
+ * Onboarding "packs" — predefined model configurations for each mode.
5
+ *
6
+ * Each pack assigns a default model to the build, plan, and fast modes,
7
+ * plus an OM (observational memory) model.
8
+ */
9
+ /**
10
+ * Build the list of available mode packs based on which providers the user
11
+ * can actually reach (API key or OAuth login).
12
+ *
13
+ * @param savedCustomPacks Previously saved custom packs from settings.json.
14
+ * These are inserted before the "New Custom" option.
15
+ */
1
16
  function getAvailableModePacks(access, savedCustomPacks = []) {
2
- const packs = [];
3
- const openaiCodex = "openai/gpt-5.6";
4
- const openaiFast = "openai/gpt-5.4-mini";
5
- const anthropicBuild = "anthropic/claude-fable-5";
6
- if (access.anthropic) {
7
- packs.push({
8
- id: "anthropic",
9
- name: "Anthropic",
10
- description: access.anthropic === "oauth" ? "All Anthropic models via Max subscription" : "All Anthropic models via API key",
11
- models: {
12
- build: anthropicBuild,
13
- plan: anthropicBuild,
14
- fast: "anthropic/claude-haiku-4-5"
15
- }
16
- });
17
- }
18
- if (access.openai) {
19
- packs.push({
20
- id: "openai",
21
- name: "OpenAI",
22
- description: access.openai === "oauth" ? "All OpenAI models via Codex subscription" : "All OpenAI models via API key",
23
- models: {
24
- build: openaiCodex,
25
- plan: openaiCodex,
26
- fast: openaiFast
27
- }
28
- });
29
- }
30
- if (access["github-copilot"]) {
31
- packs.push({
32
- id: "github-copilot",
33
- name: "GitHub Copilot",
34
- description: "GitHub Copilot subscription",
35
- models: {
36
- build: "github-copilot/gpt-4.1",
37
- plan: "github-copilot/gemini-2.5-pro",
38
- fast: "github-copilot/grok-code-fast-1"
39
- }
40
- });
41
- }
42
- for (const cp of savedCustomPacks) {
43
- packs.push({
44
- id: `custom:${cp.name}`,
45
- name: cp.name,
46
- description: "Saved custom pack",
47
- models: {
48
- build: cp.models.build ?? "",
49
- plan: cp.models.plan ?? "",
50
- fast: cp.models.fast ?? ""
51
- }
52
- });
53
- }
54
- const hasCustom = savedCustomPacks.length > 0;
55
- packs.push({
56
- id: "custom",
57
- name: hasCustom ? "New Custom" : "Custom",
58
- description: "Choose a model for each mode",
59
- models: { build: "", plan: "", fast: "" }
60
- });
61
- return packs;
17
+ const packs = [];
18
+ const openaiCodex = "openai/gpt-5.6";
19
+ const openaiFast = "openai/gpt-5.4-mini";
20
+ const anthropicBuild = "anthropic/claude-fable-5";
21
+ if (access.anthropic) packs.push({
22
+ id: "anthropic",
23
+ name: "Anthropic",
24
+ description: access.anthropic === "oauth" ? "All Anthropic models via Max subscription" : "All Anthropic models via API key",
25
+ models: {
26
+ build: anthropicBuild,
27
+ plan: anthropicBuild,
28
+ fast: "anthropic/claude-haiku-4-5"
29
+ }
30
+ });
31
+ if (access.openai) packs.push({
32
+ id: "openai",
33
+ name: "OpenAI",
34
+ description: access.openai === "oauth" ? "All OpenAI models via Codex subscription" : "All OpenAI models via API key",
35
+ models: {
36
+ build: openaiCodex,
37
+ plan: openaiCodex,
38
+ fast: openaiFast
39
+ }
40
+ });
41
+ if (access["github-copilot"]) packs.push({
42
+ id: "github-copilot",
43
+ name: "GitHub Copilot",
44
+ description: "GitHub Copilot subscription",
45
+ models: {
46
+ build: "github-copilot/gpt-4.1",
47
+ plan: "github-copilot/gemini-2.5-pro",
48
+ fast: "github-copilot/grok-code-fast-1"
49
+ }
50
+ });
51
+ for (const cp of savedCustomPacks) packs.push({
52
+ id: `custom:${cp.name}`,
53
+ name: cp.name,
54
+ description: "Saved custom pack",
55
+ models: {
56
+ build: cp.models.build ?? "",
57
+ plan: cp.models.plan ?? "",
58
+ fast: cp.models.fast ?? ""
59
+ }
60
+ });
61
+ const hasCustom = savedCustomPacks.length > 0;
62
+ packs.push({
63
+ id: "custom",
64
+ name: hasCustom ? "New Custom" : "Custom",
65
+ description: "Choose a model for each mode",
66
+ models: {
67
+ build: "",
68
+ plan: "",
69
+ fast: ""
70
+ }
71
+ });
72
+ return packs;
73
+ }
74
+ const BUILTIN_OM_PACKS = [
75
+ {
76
+ id: "gemini",
77
+ providerId: "google",
78
+ name: "Gemini Flash",
79
+ modelId: "google/gemini-3.5-flash",
80
+ description: (access) => access === "oauth" ? "Via Google OAuth" : "Via Google API key"
81
+ },
82
+ {
83
+ id: "anthropic",
84
+ providerId: "anthropic",
85
+ name: "Claude Haiku",
86
+ modelId: "anthropic/claude-haiku-4-5",
87
+ description: (access) => access === "oauth" ? "Via Max subscription" : "Via Anthropic API key"
88
+ },
89
+ {
90
+ id: "openai",
91
+ providerId: "openai",
92
+ name: "OpenAI Mini",
93
+ modelId: "openai/gpt-5.4-mini",
94
+ description: (access) => access === "oauth" ? "Via Codex subscription" : "Via OpenAI API key"
95
+ },
96
+ {
97
+ id: "deepseek",
98
+ providerId: "deepseek",
99
+ name: "DeepSeek",
100
+ modelId: "deepseek/deepseek-v4-flash",
101
+ description: () => "Via DeepSeek API key"
102
+ }
103
+ ];
104
+ function normalizeOMProviderId(providerId) {
105
+ return providerId === "openai-codex" ? "openai" : providerId;
106
+ }
107
+ /** A provider's low-cost OM pack, or a custom pack on `fallbackModelId` when it has none. */
108
+ function resolveProviderOMDefault(providerId, fallbackModelId = DEFAULT_OM_MODEL_ID) {
109
+ const normalizedProviderId = normalizeOMProviderId(providerId);
110
+ const builtin = BUILTIN_OM_PACKS.find((pack) => pack.providerId === normalizedProviderId);
111
+ if (builtin) return {
112
+ id: builtin.id,
113
+ name: builtin.name,
114
+ description: builtin.description("apikey"),
115
+ modelId: builtin.modelId
116
+ };
117
+ return {
118
+ id: "custom",
119
+ name: "Custom",
120
+ description: "Uses the selected provider model",
121
+ modelId: fallbackModelId || DEFAULT_OM_MODEL_ID
122
+ };
62
123
  }
63
124
  function getAvailableOmPacks(access) {
64
- const packs = [];
65
- if (access.google) {
66
- packs.push({
67
- id: "gemini",
68
- name: "Gemini Flash",
69
- description: access.google === "oauth" ? "Via Google OAuth" : "Via Google API key",
70
- modelId: "google/gemini-3.5-flash"
71
- });
72
- }
73
- if (access.anthropic) {
74
- packs.push({
75
- id: "anthropic",
76
- name: "Claude Haiku",
77
- description: access.anthropic === "oauth" ? "Via Max subscription" : "Via Anthropic API key",
78
- modelId: "anthropic/claude-haiku-4-5"
79
- });
80
- }
81
- if (access.openai) {
82
- packs.push({
83
- id: "openai",
84
- name: "OpenAI Mini",
85
- description: access.openai === "oauth" ? "Via Codex subscription" : "Via OpenAI API key",
86
- modelId: "openai/gpt-5.4-mini"
87
- });
88
- }
89
- if (access.deepseek) {
90
- packs.push({
91
- id: "deepseek",
92
- name: "DeepSeek",
93
- description: "Via DeepSeek API key",
94
- modelId: "deepseek/deepseek-v4-flash"
95
- });
96
- }
97
- packs.push({
98
- id: "custom",
99
- name: "Custom",
100
- description: "Choose any available model",
101
- modelId: ""
102
- });
103
- return packs;
125
+ const packs = BUILTIN_OM_PACKS.flatMap((pack) => {
126
+ const providerAccess = access[pack.providerId];
127
+ if (!providerAccess) return [];
128
+ return [{
129
+ id: pack.id,
130
+ name: pack.name,
131
+ description: pack.description(providerAccess),
132
+ modelId: pack.modelId
133
+ }];
134
+ });
135
+ packs.push({
136
+ id: "custom",
137
+ name: "Custom",
138
+ description: "Choose any available model",
139
+ modelId: ""
140
+ });
141
+ return packs;
142
+ }
143
+ /** Best reachable built-in OM pack: preferred provider, then OAuth, then built-in order. */
144
+ function selectPreferredOMPack(access, preferredProviderId) {
145
+ const available = getAvailableOmPacks(access).filter((pack) => pack.id !== "custom");
146
+ if (preferredProviderId) {
147
+ const preferredPackId = resolveProviderOMDefault(preferredProviderId).id;
148
+ const preferred = available.find((pack) => pack.id === preferredPackId);
149
+ if (preferred) return preferred;
150
+ }
151
+ return available.find((pack) => {
152
+ const definition = BUILTIN_OM_PACKS.find((candidate) => candidate.id === pack.id);
153
+ return definition ? access[definition.providerId] === "oauth" : false;
154
+ }) ?? available[0];
104
155
  }
105
156
  const ONBOARDING_VERSION = 1;
106
- export {
107
- ONBOARDING_VERSION,
108
- getAvailableModePacks,
109
- getAvailableOmPacks
110
- };
157
+ //#endregion
158
+ export { ONBOARDING_VERSION, getAvailableModePacks, getAvailableOmPacks, resolveProviderOMDefault, selectPreferredOMPack };
159
+
111
160
  //# sourceMappingURL=packs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/onboarding/packs.ts"],"sourcesContent":["/**\n * Onboarding \"packs\" — predefined model configurations for each mode.\n *\n * Each pack assigns a default model to the build, plan, and fast modes,\n * plus an OM (observational memory) model.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ModePack {\n id: string;\n name: string;\n description: string;\n models: {\n build: string;\n plan: string;\n fast: string;\n };\n}\n\nexport interface OMPack {\n id: string;\n name: string;\n description: string;\n modelId: string;\n}\n\n/** How a provider is accessed: OAuth subscription, API key, or not at all. */\nexport type ProviderAccessLevel = 'oauth' | 'apikey' | false;\n\n/** Which providers the user has access to and how. */\nexport interface ProviderAccess {\n anthropic: ProviderAccessLevel;\n openai: ProviderAccessLevel;\n cerebras: ProviderAccessLevel;\n google: ProviderAccessLevel;\n deepseek: ProviderAccessLevel;\n 'github-copilot': ProviderAccessLevel;\n [provider: string]: ProviderAccessLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Mode Packs\n// ---------------------------------------------------------------------------\n\n/**\n * Build the list of available mode packs based on which providers the user\n * can actually reach (API key or OAuth login).\n *\n * @param savedCustomPacks Previously saved custom packs from settings.json.\n * These are inserted before the \"New Custom\" option.\n */\nexport function getAvailableModePacks(\n access: ProviderAccess,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n): ModePack[] {\n const packs: ModePack[] = [];\n\n const openaiCodex = 'openai/gpt-5.6';\n const openaiFast = 'openai/gpt-5.4-mini';\n const anthropicBuild = 'anthropic/claude-fable-5';\n\n if (access.anthropic) {\n packs.push({\n id: 'anthropic',\n name: 'Anthropic',\n description:\n access.anthropic === 'oauth' ? 'All Anthropic models via Max subscription' : 'All Anthropic models via API key',\n models: {\n build: anthropicBuild,\n plan: anthropicBuild,\n fast: 'anthropic/claude-haiku-4-5',\n },\n });\n }\n\n if (access.openai) {\n packs.push({\n id: 'openai',\n name: 'OpenAI',\n description:\n access.openai === 'oauth' ? 'All OpenAI models via Codex subscription' : 'All OpenAI models via API key',\n models: {\n build: openaiCodex,\n plan: openaiCodex,\n fast: openaiFast,\n },\n });\n }\n\n if (access['github-copilot']) {\n packs.push({\n id: 'github-copilot',\n name: 'GitHub Copilot',\n description: 'GitHub Copilot subscription',\n models: {\n build: 'github-copilot/gpt-4.1',\n plan: 'github-copilot/gemini-2.5-pro',\n fast: 'github-copilot/grok-code-fast-1',\n },\n });\n }\n\n // Saved custom packs — inserted before the \"New Custom\" option\n for (const cp of savedCustomPacks) {\n packs.push({\n id: `custom:${cp.name}`,\n name: cp.name,\n description: 'Saved custom pack',\n models: {\n build: cp.models.build ?? '',\n plan: cp.models.plan ?? '',\n fast: cp.models.fast ?? '',\n },\n });\n }\n\n // New Custom — always available; user picks each model individually\n const hasCustom = savedCustomPacks.length > 0;\n packs.push({\n id: 'custom',\n name: hasCustom ? 'New Custom' : 'Custom',\n description: 'Choose a model for each mode',\n models: { build: '', plan: '', fast: '' },\n });\n\n return packs;\n}\n\n// ---------------------------------------------------------------------------\n// OM Packs\n// ---------------------------------------------------------------------------\n\nexport function getAvailableOmPacks(access: ProviderAccess): OMPack[] {\n const packs: OMPack[] = [];\n\n if (access.google) {\n packs.push({\n id: 'gemini',\n name: 'Gemini Flash',\n description: access.google === 'oauth' ? 'Via Google OAuth' : 'Via Google API key',\n modelId: 'google/gemini-3.5-flash',\n });\n }\n\n if (access.anthropic) {\n packs.push({\n id: 'anthropic',\n name: 'Claude Haiku',\n description: access.anthropic === 'oauth' ? 'Via Max subscription' : 'Via Anthropic API key',\n modelId: 'anthropic/claude-haiku-4-5',\n });\n }\n\n if (access.openai) {\n packs.push({\n id: 'openai',\n name: 'OpenAI Mini',\n description: access.openai === 'oauth' ? 'Via Codex subscription' : 'Via OpenAI API key',\n modelId: 'openai/gpt-5.4-mini',\n });\n }\n\n if (access.deepseek) {\n packs.push({\n id: 'deepseek',\n name: 'DeepSeek',\n description: 'Via DeepSeek API key',\n modelId: 'deepseek/deepseek-v4-flash',\n });\n }\n\n // Custom — always available; user picks any model\n packs.push({\n id: 'custom',\n name: 'Custom',\n description: 'Choose any available model',\n modelId: '',\n });\n\n return packs;\n}\n\n// ---------------------------------------------------------------------------\n// Current onboarding version — bump when adding new steps\n// ---------------------------------------------------------------------------\n\nexport const ONBOARDING_VERSION = 1;\n"],"mappings":"AAsDO,SAAS,sBACd,QACA,mBAA4E,CAAC,GACjE;AACZ,QAAM,QAAoB,CAAC;AAE3B,QAAM,cAAc;AACpB,QAAM,aAAa;AACnB,QAAM,iBAAiB;AAEvB,MAAI,OAAO,WAAW;AACpB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aACE,OAAO,cAAc,UAAU,8CAA8C;AAAA,MAC/E,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aACE,OAAO,WAAW,UAAU,6CAA6C;AAAA,MAC3E,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,gBAAgB,GAAG;AAC5B,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAAA,EACH;AAGA,aAAW,MAAM,kBAAkB;AACjC,UAAM,KAAK;AAAA,MACT,IAAI,UAAU,GAAG,IAAI;AAAA,MACrB,MAAM,GAAG;AAAA,MACT,aAAa;AAAA,MACb,QAAQ;AAAA,QACN,OAAO,GAAG,OAAO,SAAS;AAAA,QAC1B,MAAM,GAAG,OAAO,QAAQ;AAAA,QACxB,MAAM,GAAG,OAAO,QAAQ;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AAGA,QAAM,YAAY,iBAAiB,SAAS;AAC5C,QAAM,KAAK;AAAA,IACT,IAAI;AAAA,IACJ,MAAM,YAAY,eAAe;AAAA,IACjC,aAAa;AAAA,IACb,QAAQ,EAAE,OAAO,IAAI,MAAM,IAAI,MAAM,GAAG;AAAA,EAC1C,CAAC;AAED,SAAO;AACT;AAMO,SAAS,oBAAoB,QAAkC;AACpE,QAAM,QAAkB,CAAC;AAEzB,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,WAAW,UAAU,qBAAqB;AAAA,MAC9D,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,WAAW;AACpB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,cAAc,UAAU,yBAAyB;AAAA,MACrE,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,QAAQ;AACjB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa,OAAO,WAAW,UAAU,2BAA2B;AAAA,MACpE,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,UAAU;AACnB,UAAM,KAAK;AAAA,MACT,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAGA,QAAM,KAAK;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC;AAED,SAAO;AACT;AAMO,MAAM,qBAAqB;","names":[]}
1
+ {"version":3,"file":"packs.js","names":[],"sources":["../../src/onboarding/packs.ts"],"sourcesContent":["/**\n * Onboarding \"packs\" — predefined model configurations for each mode.\n *\n * Each pack assigns a default model to the build, plan, and fast modes,\n * plus an OM (observational memory) model.\n */\nimport { DEFAULT_OM_MODEL_ID } from '../constants.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ModePack {\n id: string;\n name: string;\n description: string;\n models: {\n build: string;\n plan: string;\n fast: string;\n };\n}\n\nexport interface OMPack {\n id: string;\n name: string;\n description: string;\n modelId: string;\n}\n\ninterface BuiltinOMPack {\n id: string;\n providerId: string;\n name: string;\n modelId: string;\n description: (access: Exclude<ProviderAccessLevel, false>) => string;\n}\n\n/** How a provider is accessed: OAuth subscription, API key, or not at all. */\nexport type ProviderAccessLevel = 'oauth' | 'apikey' | false;\n\n/** Which providers the user has access to and how. */\nexport interface ProviderAccess {\n anthropic: ProviderAccessLevel;\n openai: ProviderAccessLevel;\n cerebras: ProviderAccessLevel;\n google: ProviderAccessLevel;\n deepseek: ProviderAccessLevel;\n 'github-copilot': ProviderAccessLevel;\n [provider: string]: ProviderAccessLevel;\n}\n\n// ---------------------------------------------------------------------------\n// Mode Packs\n// ---------------------------------------------------------------------------\n\n/**\n * Build the list of available mode packs based on which providers the user\n * can actually reach (API key or OAuth login).\n *\n * @param savedCustomPacks Previously saved custom packs from settings.json.\n * These are inserted before the \"New Custom\" option.\n */\nexport function getAvailableModePacks(\n access: ProviderAccess,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n): ModePack[] {\n const packs: ModePack[] = [];\n\n const openaiCodex = 'openai/gpt-5.6';\n const openaiFast = 'openai/gpt-5.4-mini';\n const anthropicBuild = 'anthropic/claude-fable-5';\n\n if (access.anthropic) {\n packs.push({\n id: 'anthropic',\n name: 'Anthropic',\n description:\n access.anthropic === 'oauth' ? 'All Anthropic models via Max subscription' : 'All Anthropic models via API key',\n models: {\n build: anthropicBuild,\n plan: anthropicBuild,\n fast: 'anthropic/claude-haiku-4-5',\n },\n });\n }\n\n if (access.openai) {\n packs.push({\n id: 'openai',\n name: 'OpenAI',\n description:\n access.openai === 'oauth' ? 'All OpenAI models via Codex subscription' : 'All OpenAI models via API key',\n models: {\n build: openaiCodex,\n plan: openaiCodex,\n fast: openaiFast,\n },\n });\n }\n\n if (access['github-copilot']) {\n packs.push({\n id: 'github-copilot',\n name: 'GitHub Copilot',\n description: 'GitHub Copilot subscription',\n models: {\n build: 'github-copilot/gpt-4.1',\n plan: 'github-copilot/gemini-2.5-pro',\n fast: 'github-copilot/grok-code-fast-1',\n },\n });\n }\n\n // Saved custom packs — inserted before the \"New Custom\" option\n for (const cp of savedCustomPacks) {\n packs.push({\n id: `custom:${cp.name}`,\n name: cp.name,\n description: 'Saved custom pack',\n models: {\n build: cp.models.build ?? '',\n plan: cp.models.plan ?? '',\n fast: cp.models.fast ?? '',\n },\n });\n }\n\n // New Custom — always available; user picks each model individually\n const hasCustom = savedCustomPacks.length > 0;\n packs.push({\n id: 'custom',\n name: hasCustom ? 'New Custom' : 'Custom',\n description: 'Choose a model for each mode',\n models: { build: '', plan: '', fast: '' },\n });\n\n return packs;\n}\n\n// ---------------------------------------------------------------------------\n// OM Packs\n// ---------------------------------------------------------------------------\n\nconst BUILTIN_OM_PACKS: BuiltinOMPack[] = [\n {\n id: 'gemini',\n providerId: 'google',\n name: 'Gemini Flash',\n modelId: 'google/gemini-3.5-flash',\n description: access => (access === 'oauth' ? 'Via Google OAuth' : 'Via Google API key'),\n },\n {\n id: 'anthropic',\n providerId: 'anthropic',\n name: 'Claude Haiku',\n modelId: 'anthropic/claude-haiku-4-5',\n description: access => (access === 'oauth' ? 'Via Max subscription' : 'Via Anthropic API key'),\n },\n {\n id: 'openai',\n providerId: 'openai',\n name: 'OpenAI Mini',\n modelId: 'openai/gpt-5.4-mini',\n description: access => (access === 'oauth' ? 'Via Codex subscription' : 'Via OpenAI API key'),\n },\n {\n id: 'deepseek',\n providerId: 'deepseek',\n name: 'DeepSeek',\n modelId: 'deepseek/deepseek-v4-flash',\n description: () => 'Via DeepSeek API key',\n },\n];\n\nfunction normalizeOMProviderId(providerId: string): string {\n return providerId === 'openai-codex' ? 'openai' : providerId;\n}\n\n/** A provider's low-cost OM pack, or a custom pack on `fallbackModelId` when it has none. */\nexport function resolveProviderOMDefault(providerId: string, fallbackModelId = DEFAULT_OM_MODEL_ID): OMPack {\n const normalizedProviderId = normalizeOMProviderId(providerId);\n const builtin = BUILTIN_OM_PACKS.find(pack => pack.providerId === normalizedProviderId);\n if (builtin) {\n return {\n id: builtin.id,\n name: builtin.name,\n description: builtin.description('apikey'),\n modelId: builtin.modelId,\n };\n }\n\n return {\n id: 'custom',\n name: 'Custom',\n description: 'Uses the selected provider model',\n modelId: fallbackModelId || DEFAULT_OM_MODEL_ID,\n };\n}\n\nexport function getAvailableOmPacks(access: ProviderAccess): OMPack[] {\n const packs = BUILTIN_OM_PACKS.flatMap(pack => {\n const providerAccess = access[pack.providerId];\n if (!providerAccess) return [];\n return [\n {\n id: pack.id,\n name: pack.name,\n description: pack.description(providerAccess),\n modelId: pack.modelId,\n },\n ];\n });\n\n // Custom — always available; user picks any model\n packs.push({\n id: 'custom',\n name: 'Custom',\n description: 'Choose any available model',\n modelId: '',\n });\n\n return packs;\n}\n\n/** Best reachable built-in OM pack: preferred provider, then OAuth, then built-in order. */\nexport function selectPreferredOMPack(access: ProviderAccess, preferredProviderId?: string): OMPack | undefined {\n const available = getAvailableOmPacks(access).filter(pack => pack.id !== 'custom');\n\n if (preferredProviderId) {\n const preferredPackId = resolveProviderOMDefault(preferredProviderId).id;\n const preferred = available.find(pack => pack.id === preferredPackId);\n if (preferred) return preferred;\n }\n\n const oauth = available.find(pack => {\n const definition = BUILTIN_OM_PACKS.find(candidate => candidate.id === pack.id);\n return definition ? access[definition.providerId] === 'oauth' : false;\n });\n return oauth ?? available[0];\n}\n\n// ---------------------------------------------------------------------------\n// Current onboarding version — bump when adding new steps\n// ---------------------------------------------------------------------------\n\nexport const ONBOARDING_VERSION = 1;\n"],"mappings":"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"}