@mastra/code-sdk 1.14.0 → 1.15.0-alpha.1
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.
- package/dist/agents/credential-resolver.d.ts +1 -1
- package/dist/agents/credential-resolver.d.ts.map +1 -1
- package/dist/agents/credential-resolver.js.map +1 -1
- package/dist/agents/mastracode-gateway.d.ts +6 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -1
- package/dist/agents/mastracode-gateway.js +11 -1
- package/dist/agents/mastracode-gateway.js.map +1 -1
- package/dist/agents/memory.d.ts.map +1 -1
- package/dist/agents/memory.js +4 -3
- package/dist/agents/memory.js.map +1 -1
- package/dist/agents/model.d.ts +15 -4
- package/dist/agents/model.d.ts.map +1 -1
- package/dist/agents/model.js +31 -7
- package/dist/agents/model.js.map +1 -1
- package/dist/auth/account-rotation-processor.d.ts +6 -0
- package/dist/auth/account-rotation-processor.d.ts.map +1 -1
- package/dist/auth/account-rotation-processor.js +2 -1
- package/dist/auth/account-rotation-processor.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/onboarding/packs.d.ts +6 -2
- package/dist/onboarding/packs.d.ts.map +1 -1
- package/dist/onboarding/packs.js +12 -4
- package/dist/onboarding/packs.js.map +1 -1
- package/package.json +15 -15
|
@@ -93,8 +93,12 @@ export declare function resolveProviderOMDefault(providerId: string, fallbackMod
|
|
|
93
93
|
export declare const MASTRACODE_AUTO_OM_MODELS: Readonly<Record<string, string>>;
|
|
94
94
|
/** The model ID Memory reports for a main-session model ID (without Mastra Code's custom-provider prefix). */
|
|
95
95
|
export declare function toMemoryModelId(modelId: string): string;
|
|
96
|
-
/**
|
|
97
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Preview the concrete model Memory's `'auto'` resolves to for a main-session model ID.
|
|
98
|
+
* Pass `canUseProvider` when credentials are not the server's environment (Factory), so
|
|
99
|
+
* the preview matches what runs pick.
|
|
100
|
+
*/
|
|
101
|
+
export declare function resolveAutoOMModelId(currentModelId?: string, canUseProvider?: (providerId: string) => boolean): string;
|
|
98
102
|
export declare function getAvailableOmPacks(access: ProviderAccess): OMPack[];
|
|
99
103
|
/** Best reachable built-in OM pack: preferred provider, then OAuth, then built-in order. */
|
|
100
104
|
export declare function selectPreferredOMPack(access: ProviderAccess, preferredProviderId?: string): OMPack | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/onboarding/packs.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../src/onboarding/packs.ts"],"names":[],"mappings":"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"}
|
package/dist/onboarding/packs.js
CHANGED
|
@@ -232,11 +232,19 @@ const CUSTOM_PROVIDER_PREFIX = "mastracode/";
|
|
|
232
232
|
function toMemoryModelId(modelId) {
|
|
233
233
|
return modelId.startsWith(CUSTOM_PROVIDER_PREFIX) ? modelId.slice(11) : modelId;
|
|
234
234
|
}
|
|
235
|
-
/**
|
|
236
|
-
|
|
237
|
-
|
|
235
|
+
/**
|
|
236
|
+
* Preview the concrete model Memory's `'auto'` resolves to for a main-session model ID.
|
|
237
|
+
* Pass `canUseProvider` when credentials are not the server's environment (Factory), so
|
|
238
|
+
* the preview matches what runs pick.
|
|
239
|
+
*/
|
|
240
|
+
function resolveAutoOMModelId(currentModelId, canUseProvider) {
|
|
241
|
+
const options = {
|
|
242
|
+
autoModels: MASTRACODE_AUTO_OM_MODELS,
|
|
243
|
+
canUseProvider
|
|
244
|
+
};
|
|
245
|
+
if (!currentModelId) return resolveAutoModelId(void 0, options) ?? DEFAULT_OM_MODEL_ID;
|
|
238
246
|
const memoryModelId = toMemoryModelId(currentModelId);
|
|
239
|
-
const picked = resolveAutoModelId(memoryModelId,
|
|
247
|
+
const picked = resolveAutoModelId(memoryModelId, options);
|
|
240
248
|
return !picked || picked === memoryModelId ? currentModelId : picked;
|
|
241
249
|
}
|
|
242
250
|
function getAvailableOmPacks(access) {
|
|
@@ -1 +1 @@
|
|
|
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 { resolveAutoModelId } from '@mastra/memory';\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 * Optional observational-memory model for both roles while the pack is\n * active: a concrete model ID (with the pack fallback chain), `'auto'`, or\n * unset to follow the per-role `/om` settings.\n */\n memory?: 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\ninterface BuiltinModePack extends Omit<ModePack, 'description'> {\n providerId: string;\n description: (access: Exclude<ProviderAccessLevel, false>) => string;\n}\n\nconst BUILTIN_MODE_PACKS: BuiltinModePack[] = [\n {\n id: 'anthropic',\n providerId: 'anthropic',\n name: 'Anthropic',\n description: access =>\n access === 'oauth' ? 'All Anthropic models via Max subscription' : 'All Anthropic models via API key',\n models: {\n build: 'anthropic/claude-fable-5',\n plan: 'anthropic/claude-fable-5',\n fast: 'anthropic/claude-haiku-4-5',\n },\n },\n {\n id: 'openai',\n providerId: 'openai',\n name: 'OpenAI',\n description: access =>\n access === 'oauth' ? 'All OpenAI models via Codex subscription' : 'All OpenAI models via API key',\n models: {\n build: 'openai/gpt-5.6-sol',\n plan: 'openai/gpt-5.6-sol',\n fast: 'openai/gpt-5.4-mini',\n },\n },\n {\n id: 'github-copilot',\n providerId: '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\nexport function getBuiltinModePack(packId: string): (ModePack & { providerId: string }) | undefined {\n const pack = BUILTIN_MODE_PACKS.find(item => item.id === packId);\n if (!pack) return undefined;\n return {\n id: pack.id,\n providerId: pack.providerId,\n name: pack.name,\n description: pack.description('apikey'),\n models: { ...pack.models },\n };\n}\n\n/**\n * All builtin mode packs regardless of provider access (descriptions use the\n * apikey variant). For resolution-time lookups — fallback chains must resolve\n * even when an access probe is stale; actual auth failures surface through\n * the provider call itself.\n */\nexport function listBuiltinModePacks(): ModePack[] {\n return BUILTIN_MODE_PACKS.map(pack => ({\n id: pack.id,\n name: pack.name,\n description: pack.description('apikey'),\n models: { ...pack.models },\n }));\n}\n\n/** A pack id is known when it is a builtin mode pack or a saved custom pack. */\nexport function isKnownModePackId(packId: string, savedCustomPacks: Array<{ name: string }> = []): boolean {\n if (BUILTIN_MODE_PACKS.some(pack => pack.id === packId)) return true;\n if (!packId.startsWith('custom:')) return false;\n // Settings files are user-editable: a malformed entry (null, or an element\n // without `name`) would throw on `pack.name` and the loader's catch-all would\n // replace the whole saved settings object with defaults. An unusable entry is\n // simply not a known pack id.\n return savedCustomPacks.some(pack => typeof pack?.name === 'string' && `custom:${pack.name}` === packId);\n}\n\n/**\n * Drop pack-fallback entries whose source or target pack no longer exists\n * (e.g. a deleted custom pack). Shape validation happens before this; here we\n * only prune dangling references, with the same tolerance the rest of settings\n * parsing uses.\n */\nexport function pruneUnknownModePackFallbacks(\n fallbacks: Record<string, string>,\n savedCustomPacks: Array<{ name: string }> = [],\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [packId, fallbackId] of Object.entries(fallbacks)) {\n if (isKnownModePackId(packId, savedCustomPacks) && isKnownModePackId(fallbackId, savedCustomPacks)) {\n result[packId] = fallbackId;\n }\n }\n return result;\n}\n\n/** Drop preferred-account bindings for missing packs or models no longer used by that pack. */\nexport function pruneUnknownPackAccountPreferences(\n preferences: Record<string, Record<string, string>>,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n modePackOverrides: Record<string, Record<string, string>> = {},\n): Record<string, Record<string, string>> {\n const packModels = new Map<string, Set<string>>();\n for (const pack of listBuiltinModePacks()) {\n packModels.set(pack.id, new Set(Object.values({ ...pack.models, ...modePackOverrides[pack.id] })));\n }\n for (const pack of savedCustomPacks) {\n // Settings files are user-editable: a malformed entry without `models`\n // would otherwise throw here, and the loader's catch-all would replace the\n // whole saved settings object with defaults. Treat it as having no models.\n const models = pack?.models && typeof pack.models === 'object' ? pack.models : {};\n packModels.set(`custom:${pack.name}`, new Set(Object.values(models)));\n }\n\n const result: Record<string, Record<string, string>> = {};\n for (const [packId, modelPreferences] of Object.entries(preferences)) {\n const models = packModels.get(packId);\n if (!models) continue;\n const validEntries = Object.entries(modelPreferences).filter(([modelId]) => models.has(modelId));\n if (validEntries.length > 0) result[packId] = Object.fromEntries(validEntries);\n }\n return result;\n}\n\n/**\n * Walk `settings.models.packFallbacks` from `startPackId`, returning the pack\n * ids in cascade order starting with the pack itself. Cycles are allowed but\n * the cascade gets exactly one revisit total (Q15: \"full circle then one\n * revisit then surface\"): the walk stops when the next link would add a pack\n * already in the chain after the revisit was consumed, or when a link\n * dangles at an unknown pack. An A⇄B cycle therefore yields [A, B, A#2] and\n * stops. This cap is the cycle handling for both the fallback model chain\n * (request time) and the /models picker's chain display.\n */\nexport function resolveModePackFallbackChain(\n fallbacks: Record<string, string>,\n startPackId: string,\n savedCustomPacks: Array<{ name: string }> = [],\n): string[] {\n const chain = [startPackId];\n let revisitUsed = false;\n let current = startPackId;\n while (true) {\n const next = fallbacks[current];\n if (!next || !isKnownModePackId(next, savedCustomPacks)) break;\n if (chain.includes(next)) {\n if (revisitUsed) break;\n revisitUsed = true;\n }\n chain.push(next);\n current = next;\n }\n return chain;\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[] = BUILTIN_MODE_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 models: { ...pack.models },\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 ...(typeof cp.models.memory === 'string' && cp.models.memory.length > 0 ? { memory: cp.models.memory } : {}),\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-6-luna',\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\n/**\n * Mastra Code's overrides for `@mastra/memory`'s auto model table. Memory owns\n * the auto policy; Mastra Code only keeps its newer Gemini Flash default.\n */\nexport const MASTRACODE_AUTO_OM_MODELS: Readonly<Record<string, string>> = { google: DEFAULT_OM_MODEL_ID };\n\nconst CUSTOM_PROVIDER_PREFIX = 'mastracode/';\n\n/** The model ID Memory reports for a main-session model ID (without Mastra Code's custom-provider prefix). */\nexport function toMemoryModelId(modelId: string): string {\n return modelId.startsWith(CUSTOM_PROVIDER_PREFIX) ? modelId.slice(CUSTOM_PROVIDER_PREFIX.length) : modelId;\n}\n\n/** Preview the concrete model Memory's `'auto'` resolves to for a main-session model ID. */\nexport function resolveAutoOMModelId(currentModelId?: string): string {\n if (!currentModelId)\n return resolveAutoModelId(undefined, { autoModels: MASTRACODE_AUTO_OM_MODELS }) ?? DEFAULT_OM_MODEL_ID;\n const memoryModelId = toMemoryModelId(currentModelId);\n const picked = resolveAutoModelId(memoryModelId, { autoModels: MASTRACODE_AUTO_OM_MODELS });\n return !picked || picked === memoryModelId ? currentModelId : picked;\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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"}
|
|
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 { resolveAutoModelId } from '@mastra/memory';\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 * Optional observational-memory model for both roles while the pack is\n * active: a concrete model ID (with the pack fallback chain), `'auto'`, or\n * unset to follow the per-role `/om` settings.\n */\n memory?: 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\ninterface BuiltinModePack extends Omit<ModePack, 'description'> {\n providerId: string;\n description: (access: Exclude<ProviderAccessLevel, false>) => string;\n}\n\nconst BUILTIN_MODE_PACKS: BuiltinModePack[] = [\n {\n id: 'anthropic',\n providerId: 'anthropic',\n name: 'Anthropic',\n description: access =>\n access === 'oauth' ? 'All Anthropic models via Max subscription' : 'All Anthropic models via API key',\n models: {\n build: 'anthropic/claude-fable-5',\n plan: 'anthropic/claude-fable-5',\n fast: 'anthropic/claude-haiku-4-5',\n },\n },\n {\n id: 'openai',\n providerId: 'openai',\n name: 'OpenAI',\n description: access =>\n access === 'oauth' ? 'All OpenAI models via Codex subscription' : 'All OpenAI models via API key',\n models: {\n build: 'openai/gpt-5.6-sol',\n plan: 'openai/gpt-5.6-sol',\n fast: 'openai/gpt-5.4-mini',\n },\n },\n {\n id: 'github-copilot',\n providerId: '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\nexport function getBuiltinModePack(packId: string): (ModePack & { providerId: string }) | undefined {\n const pack = BUILTIN_MODE_PACKS.find(item => item.id === packId);\n if (!pack) return undefined;\n return {\n id: pack.id,\n providerId: pack.providerId,\n name: pack.name,\n description: pack.description('apikey'),\n models: { ...pack.models },\n };\n}\n\n/**\n * All builtin mode packs regardless of provider access (descriptions use the\n * apikey variant). For resolution-time lookups — fallback chains must resolve\n * even when an access probe is stale; actual auth failures surface through\n * the provider call itself.\n */\nexport function listBuiltinModePacks(): ModePack[] {\n return BUILTIN_MODE_PACKS.map(pack => ({\n id: pack.id,\n name: pack.name,\n description: pack.description('apikey'),\n models: { ...pack.models },\n }));\n}\n\n/** A pack id is known when it is a builtin mode pack or a saved custom pack. */\nexport function isKnownModePackId(packId: string, savedCustomPacks: Array<{ name: string }> = []): boolean {\n if (BUILTIN_MODE_PACKS.some(pack => pack.id === packId)) return true;\n if (!packId.startsWith('custom:')) return false;\n // Settings files are user-editable: a malformed entry (null, or an element\n // without `name`) would throw on `pack.name` and the loader's catch-all would\n // replace the whole saved settings object with defaults. An unusable entry is\n // simply not a known pack id.\n return savedCustomPacks.some(pack => typeof pack?.name === 'string' && `custom:${pack.name}` === packId);\n}\n\n/**\n * Drop pack-fallback entries whose source or target pack no longer exists\n * (e.g. a deleted custom pack). Shape validation happens before this; here we\n * only prune dangling references, with the same tolerance the rest of settings\n * parsing uses.\n */\nexport function pruneUnknownModePackFallbacks(\n fallbacks: Record<string, string>,\n savedCustomPacks: Array<{ name: string }> = [],\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [packId, fallbackId] of Object.entries(fallbacks)) {\n if (isKnownModePackId(packId, savedCustomPacks) && isKnownModePackId(fallbackId, savedCustomPacks)) {\n result[packId] = fallbackId;\n }\n }\n return result;\n}\n\n/** Drop preferred-account bindings for missing packs or models no longer used by that pack. */\nexport function pruneUnknownPackAccountPreferences(\n preferences: Record<string, Record<string, string>>,\n savedCustomPacks: Array<{ name: string; models: Record<string, string> }> = [],\n modePackOverrides: Record<string, Record<string, string>> = {},\n): Record<string, Record<string, string>> {\n const packModels = new Map<string, Set<string>>();\n for (const pack of listBuiltinModePacks()) {\n packModels.set(pack.id, new Set(Object.values({ ...pack.models, ...modePackOverrides[pack.id] })));\n }\n for (const pack of savedCustomPacks) {\n // Settings files are user-editable: a malformed entry without `models`\n // would otherwise throw here, and the loader's catch-all would replace the\n // whole saved settings object with defaults. Treat it as having no models.\n const models = pack?.models && typeof pack.models === 'object' ? pack.models : {};\n packModels.set(`custom:${pack.name}`, new Set(Object.values(models)));\n }\n\n const result: Record<string, Record<string, string>> = {};\n for (const [packId, modelPreferences] of Object.entries(preferences)) {\n const models = packModels.get(packId);\n if (!models) continue;\n const validEntries = Object.entries(modelPreferences).filter(([modelId]) => models.has(modelId));\n if (validEntries.length > 0) result[packId] = Object.fromEntries(validEntries);\n }\n return result;\n}\n\n/**\n * Walk `settings.models.packFallbacks` from `startPackId`, returning the pack\n * ids in cascade order starting with the pack itself. Cycles are allowed but\n * the cascade gets exactly one revisit total (Q15: \"full circle then one\n * revisit then surface\"): the walk stops when the next link would add a pack\n * already in the chain after the revisit was consumed, or when a link\n * dangles at an unknown pack. An A⇄B cycle therefore yields [A, B, A#2] and\n * stops. This cap is the cycle handling for both the fallback model chain\n * (request time) and the /models picker's chain display.\n */\nexport function resolveModePackFallbackChain(\n fallbacks: Record<string, string>,\n startPackId: string,\n savedCustomPacks: Array<{ name: string }> = [],\n): string[] {\n const chain = [startPackId];\n let revisitUsed = false;\n let current = startPackId;\n while (true) {\n const next = fallbacks[current];\n if (!next || !isKnownModePackId(next, savedCustomPacks)) break;\n if (chain.includes(next)) {\n if (revisitUsed) break;\n revisitUsed = true;\n }\n chain.push(next);\n current = next;\n }\n return chain;\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[] = BUILTIN_MODE_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 models: { ...pack.models },\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 ...(typeof cp.models.memory === 'string' && cp.models.memory.length > 0 ? { memory: cp.models.memory } : {}),\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-6-luna',\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\n/**\n * Mastra Code's overrides for `@mastra/memory`'s auto model table. Memory owns\n * the auto policy; Mastra Code only keeps its newer Gemini Flash default.\n */\nexport const MASTRACODE_AUTO_OM_MODELS: Readonly<Record<string, string>> = { google: DEFAULT_OM_MODEL_ID };\n\nconst CUSTOM_PROVIDER_PREFIX = 'mastracode/';\n\n/** The model ID Memory reports for a main-session model ID (without Mastra Code's custom-provider prefix). */\nexport function toMemoryModelId(modelId: string): string {\n return modelId.startsWith(CUSTOM_PROVIDER_PREFIX) ? modelId.slice(CUSTOM_PROVIDER_PREFIX.length) : modelId;\n}\n\n/**\n * Preview the concrete model Memory's `'auto'` resolves to for a main-session model ID.\n * Pass `canUseProvider` when credentials are not the server's environment (Factory), so\n * the preview matches what runs pick.\n */\nexport function resolveAutoOMModelId(\n currentModelId?: string,\n canUseProvider?: (providerId: string) => boolean,\n): string {\n const options = { autoModels: MASTRACODE_AUTO_OM_MODELS, canUseProvider };\n if (!currentModelId) return resolveAutoModelId(undefined, options) ?? DEFAULT_OM_MODEL_ID;\n const memoryModelId = toMemoryModelId(currentModelId);\n const picked = resolveAutoModelId(memoryModelId, options);\n return !picked || picked === memoryModelId ? currentModelId : picked;\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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/code-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0-alpha.1",
|
|
4
4
|
"description": "Mastra Code SDK: the agent core behind Mastra Code (everything except the TUI) — build your own UIs and surfaces on top of it",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -62,20 +62,20 @@
|
|
|
62
62
|
"vscode-languageserver-protocol": "^3.17.5",
|
|
63
63
|
"yaml": "^2.7.1",
|
|
64
64
|
"zod": "^4.6.4",
|
|
65
|
-
"@mastra/agent-browser": "0.5.
|
|
66
|
-
"@mastra/
|
|
67
|
-
"@mastra/
|
|
68
|
-
"@mastra/github-signals": "0.5.
|
|
69
|
-
"@mastra/
|
|
70
|
-
"@mastra/
|
|
71
|
-
"@mastra/
|
|
72
|
-
"@mastra/
|
|
73
|
-
"@mastra/
|
|
74
|
-
"@mastra/
|
|
75
|
-
"@mastra/
|
|
76
|
-
"@mastra/tavily": "1.1.
|
|
77
|
-
"@mastra/schema-compat": "1.3.
|
|
78
|
-
"@mastra/
|
|
65
|
+
"@mastra/agent-browser": "0.5.4-alpha.0",
|
|
66
|
+
"@mastra/core": "1.79.0-alpha.1",
|
|
67
|
+
"@mastra/duckdb": "1.15.0-alpha.1",
|
|
68
|
+
"@mastra/github-signals": "0.5.2-alpha.0",
|
|
69
|
+
"@mastra/fastembed": "1.3.4-alpha.0",
|
|
70
|
+
"@mastra/mcp": "2.4.2-alpha.0",
|
|
71
|
+
"@mastra/memory": "1.39.0-alpha.0",
|
|
72
|
+
"@mastra/parallel": "0.1.3-alpha.0",
|
|
73
|
+
"@mastra/observability": "1.21.0-alpha.1",
|
|
74
|
+
"@mastra/libsql": "1.27.0-alpha.1",
|
|
75
|
+
"@mastra/pg": "1.32.0-alpha.1",
|
|
76
|
+
"@mastra/tavily": "1.1.3-alpha.0",
|
|
77
|
+
"@mastra/schema-compat": "1.3.16-alpha.0",
|
|
78
|
+
"@mastra/stagehand": "0.3.6-alpha.0"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@libsql/client": "^0.18.0",
|