@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.
- package/CHANGELOG.md +49 -0
- package/dist/acp/agent.js +155 -167
- package/dist/acp/agent.js.map +1 -1
- package/dist/acp/event-mapper.js +193 -168
- package/dist/acp/event-mapper.js.map +1 -1
- package/dist/acp/index.js +60 -49
- package/dist/acp/index.js.map +1 -1
- package/dist/acp/server.js +31 -30
- package/dist/acp/server.js.map +1 -1
- package/dist/acp.js +1 -4
- package/dist/agents/credential-resolver.js +40 -29
- package/dist/agents/credential-resolver.js.map +1 -1
- package/dist/agents/custom-provider-source.js +16 -9
- package/dist/agents/custom-provider-source.js.map +1 -1
- package/dist/agents/instructions.js +27 -36
- package/dist/agents/instructions.js.map +1 -1
- package/dist/agents/mastracode-gateway.js +355 -428
- package/dist/agents/mastracode-gateway.js.map +1 -1
- package/dist/agents/memory.js +87 -78
- package/dist/agents/memory.js.map +1 -1
- package/dist/agents/model.js +114 -119
- package/dist/agents/model.js.map +1 -1
- package/dist/agents/modes/build.js +12 -13
- package/dist/agents/modes/build.js.map +1 -1
- package/dist/agents/modes/explore.js +14 -13
- package/dist/agents/modes/explore.js.map +1 -1
- package/dist/agents/modes/plan.js +14 -15
- package/dist/agents/modes/plan.js.map +1 -1
- package/dist/agents/prompts/agent-instructions.js +78 -69
- package/dist/agents/prompts/agent-instructions.js.map +1 -1
- package/dist/agents/prompts/build.js +19 -16
- package/dist/agents/prompts/build.js.map +1 -1
- package/dist/agents/prompts/fast.js +8 -4
- package/dist/agents/prompts/fast.js.map +1 -1
- package/dist/agents/prompts/index.js +48 -47
- package/dist/agents/prompts/index.js.map +1 -1
- package/dist/agents/prompts/model.js +6 -5
- package/dist/agents/prompts/model.js.map +1 -1
- package/dist/agents/prompts/plan.js +20 -16
- package/dist/agents/prompts/plan.js.map +1 -1
- package/dist/agents/prompts/tool-guidance.js +77 -109
- package/dist/agents/prompts/tool-guidance.js.map +1 -1
- package/dist/agents/sandbox-filesystem.js +245 -259
- package/dist/agents/sandbox-filesystem.js.map +1 -1
- package/dist/agents/sandbox-reattach.js +9 -11
- package/dist/agents/sandbox-reattach.js.map +1 -1
- package/dist/agents/thread-caveman-state.js +92 -81
- package/dist/agents/thread-caveman-state.js.map +1 -1
- package/dist/agents/tool-availability.js +62 -80
- package/dist/agents/tool-availability.js.map +1 -1
- package/dist/agents/tools.js +99 -139
- package/dist/agents/tools.js.map +1 -1
- package/dist/agents/workspace.js +232 -225
- package/dist/agents/workspace.js.map +1 -1
- package/dist/analytics.js +139 -128
- package/dist/analytics.js.map +1 -1
- package/dist/auth/authorization-input.js +39 -25
- package/dist/auth/authorization-input.js.map +1 -1
- package/dist/auth/device-code.js +112 -80
- package/dist/auth/device-code.js.map +1 -1
- package/dist/auth/index.js +2 -9
- package/dist/auth/pkce.js +27 -16
- package/dist/auth/pkce.js.map +1 -1
- package/dist/auth/providers/anthropic.js +107 -93
- package/dist/auth/providers/anthropic.js.map +1 -1
- package/dist/auth/providers/github-copilot.js +304 -293
- package/dist/auth/providers/github-copilot.js.map +1 -1
- package/dist/auth/providers/openai-codex.js +442 -460
- package/dist/auth/providers/openai-codex.js.map +1 -1
- package/dist/auth/providers/xai.js +179 -145
- package/dist/auth/providers/xai.js.map +1 -1
- package/dist/auth/storage.js +182 -175
- package/dist/auth/storage.js.map +1 -1
- package/dist/auth/types.js +1 -1
- package/dist/clipboard/index.js +206 -172
- package/dist/clipboard/index.js.map +1 -1
- package/dist/constants.js +11 -16
- package/dist/constants.js.map +1 -1
- package/dist/error-classification.js +19 -11
- package/dist/error-classification.js.map +1 -1
- package/dist/evals/context-builder.js +145 -104
- package/dist/evals/context-builder.js.map +1 -1
- package/dist/evals/index.js +4 -7
- package/dist/evals/scorers/classify-command.js +62 -41
- package/dist/evals/scorers/classify-command.js.map +1 -1
- package/dist/evals/scorers/efficiency.js +239 -181
- package/dist/evals/scorers/efficiency.js.map +1 -1
- package/dist/evals/scorers/extract-tools.js +51 -47
- package/dist/evals/scorers/extract-tools.js.map +1 -1
- package/dist/evals/scorers/index.js +1 -5
- package/dist/evals/scorers/outcome.js +321 -212
- package/dist/evals/scorers/outcome.js.map +1 -1
- package/dist/goal-manager.js +266 -261
- package/dist/goal-manager.js.map +1 -1
- package/dist/goal-signal.js +14 -13
- package/dist/goal-signal.js.map +1 -1
- package/dist/headless/cli.js +153 -154
- package/dist/headless/cli.js.map +1 -1
- package/dist/headless/flags.js +180 -178
- package/dist/headless/flags.js.map +1 -1
- package/dist/headless/format.js +72 -71
- package/dist/headless/format.js.map +1 -1
- package/dist/headless/index.js +5 -31
- package/dist/headless/policy.js +35 -31
- package/dist/headless/policy.js.map +1 -1
- package/dist/headless/run-mc.js +332 -334
- package/dist/headless/run-mc.js.map +1 -1
- package/dist/headless/types.js +16 -7
- package/dist/headless/types.js.map +1 -1
- package/dist/hooks/config.js +56 -61
- package/dist/hooks/config.js.map +1 -1
- package/dist/hooks/executor.js +118 -116
- package/dist/hooks/executor.js.map +1 -1
- package/dist/hooks/index.js +4 -15
- package/dist/hooks/manager.js +221 -280
- package/dist/hooks/manager.js.map +1 -1
- package/dist/hooks/types.js +5 -4
- package/dist/hooks/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +632 -712
- package/dist/index.js.map +1 -1
- package/dist/ipc/ipc-reporter.js +19 -22
- package/dist/ipc/ipc-reporter.js.map +1 -1
- package/dist/lsp/client.js +248 -306
- package/dist/lsp/client.js.map +1 -1
- package/dist/lsp/index.js +1 -6
- package/dist/lsp/language.js +39 -43
- package/dist/lsp/language.js.map +1 -1
- package/dist/lsp/manager.js +78 -93
- package/dist/lsp/manager.js.map +1 -1
- package/dist/lsp/server.js +151 -120
- package/dist/lsp/server.js.map +1 -1
- package/dist/lsp/workspace.js +50 -47
- package/dist/lsp/workspace.js.map +1 -1
- package/dist/mcp/config.js +210 -199
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/index.js +2 -9
- package/dist/mcp/manager.js +482 -475
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/types.js +1 -1
- package/dist/onboarding/custom-packs.js +14 -17
- package/dist/onboarding/custom-packs.js.map +1 -1
- package/dist/onboarding/custom-providers.js +22 -20
- package/dist/onboarding/custom-providers.js.map +1 -1
- package/dist/onboarding/index.d.ts +1 -1
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +3 -21
- package/dist/onboarding/om-settings.d.ts +5 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -1
- package/dist/onboarding/om-settings.js +41 -20
- package/dist/onboarding/om-settings.js.map +1 -1
- package/dist/onboarding/packs.d.ts +4 -6
- package/dist/onboarding/packs.d.ts.map +1 -1
- package/dist/onboarding/packs.js +154 -105
- package/dist/onboarding/packs.js.map +1 -1
- package/dist/onboarding/settings.js +575 -517
- package/dist/onboarding/settings.js.map +1 -1
- package/dist/permissions.js +112 -99
- package/dist/permissions.js.map +1 -1
- package/dist/plugin.js +21 -23
- package/dist/plugin.js.map +1 -1
- package/dist/plugins/dependencies.js +64 -87
- package/dist/plugins/dependencies.js.map +1 -1
- package/dist/plugins/install.js +159 -169
- package/dist/plugins/install.js.map +1 -1
- package/dist/plugins/loader.js +170 -185
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/manager.js +374 -380
- package/dist/plugins/manager.js.map +1 -1
- package/dist/plugins/manifest.js +38 -63
- package/dist/plugins/manifest.js.map +1 -1
- package/dist/plugins/package-link.js +48 -64
- package/dist/plugins/package-link.js.map +1 -1
- package/dist/plugins/paths.js +18 -19
- package/dist/plugins/paths.js.map +1 -1
- package/dist/plugins/registry.js +97 -81
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/scaffold.js +62 -98
- package/dist/plugins/scaffold.js.map +1 -1
- package/dist/plugins/types.js +1 -1
- package/dist/processors/plan-rejection-abort.js +45 -44
- package/dist/processors/plan-rejection-abort.js.map +1 -1
- package/dist/providers/amazon-bedrock-gateway.js +134 -125
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -1
- package/dist/providers/amazon-bedrock.js +68 -47
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/claude-max.js +153 -133
- package/dist/providers/claude-max.js.map +1 -1
- package/dist/providers/github-copilot.js +232 -230
- package/dist/providers/github-copilot.js.map +1 -1
- package/dist/providers/openai-codex.js +271 -260
- package/dist/providers/openai-codex.js.map +1 -1
- package/dist/providers/xai.js +57 -50
- package/dist/providers/xai.js.map +1 -1
- package/dist/schema.js +91 -89
- package/dist/schema.js.map +1 -1
- package/dist/theme-palette.js +18 -14
- package/dist/theme-palette.js.map +1 -1
- package/dist/tool-names.js +46 -37
- package/dist/tool-names.js.map +1 -1
- package/dist/tools/index.js +2 -8
- package/dist/tools/request-sandbox-access.js +71 -80
- package/dist/tools/request-sandbox-access.js.map +1 -1
- package/dist/tools/utils.js +26 -16
- package/dist/tools/utils.js.map +1 -1
- package/dist/tools/web-search.js +51 -55
- package/dist/tools/web-search.js.map +1 -1
- package/dist/utils/binaries.js +65 -61
- package/dist/utils/binaries.js.map +1 -1
- package/dist/utils/debug-log.js +51 -47
- package/dist/utils/debug-log.js.map +1 -1
- package/dist/utils/errors.js +157 -192
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/gateway-sync.js +49 -37
- package/dist/utils/gateway-sync.js.map +1 -1
- package/dist/utils/path-security.js +7 -6
- package/dist/utils/path-security.js.map +1 -1
- package/dist/utils/plan-diff.js +58 -39
- package/dist/utils/plan-diff.js.map +1 -1
- package/dist/utils/plans.js +92 -74
- package/dist/utils/plans.js.map +1 -1
- package/dist/utils/project.js +318 -256
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/signals-pubsub.js +117 -99
- package/dist/utils/signals-pubsub.js.map +1 -1
- package/dist/utils/slash-command-loader.js +118 -154
- package/dist/utils/slash-command-loader.js.map +1 -1
- package/dist/utils/slash-command-processor.js +92 -83
- package/dist/utils/slash-command-processor.js.map +1 -1
- package/dist/utils/stdin-pipe.js +87 -63
- package/dist/utils/stdin-pipe.js.map +1 -1
- package/dist/utils/storage-factory.js +104 -84
- package/dist/utils/storage-factory.js.map +1 -1
- package/dist/utils/storage-maintenance.js +249 -211
- package/dist/utils/storage-maintenance.js.map +1 -1
- package/dist/utils/thread-lock.js +96 -92
- package/dist/utils/thread-lock.js.map +1 -1
- package/dist/utils/token-estimator.js +12 -12
- package/dist/utils/token-estimator.js.map +1 -1
- package/dist/utils/update-check.d.ts +1 -1
- package/dist/utils/update-check.js +341 -259
- package/dist/utils/update-check.js.map +1 -1
- package/dist/voice/stt-registry.js +131 -113
- package/dist/voice/stt-registry.js.map +1 -1
- package/package.json +11 -11
- package/dist/acp.js.map +0 -1
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.js.map +0 -1
- package/dist/evals/index.js.map +0 -1
- package/dist/evals/scorers/index.js.map +0 -1
- package/dist/headless/index.js.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/lsp/index.js.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/types.js.map +0 -1
- package/dist/onboarding/index.js.map +0 -1
- package/dist/plugins/types.js.map +0 -1
- package/dist/tools/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/update-check.ts"],"sourcesContent":["/**\n * Check for newer versions of mastracode on npm.\n */\n\nimport { execFile } from 'node:child_process';\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ndeclare const MASTRACODE_VERSION: string | undefined;\n\nconst PACKAGE_NAME = 'mastracode';\nconst NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;\n\n/** Timeout for the npm registry fetch (ms). */\nconst FETCH_TIMEOUT_MS = 5_000;\n\n// Package managers and vp are .cmd shims on Windows; execFile can't spawn those without a shell (EINVAL).\nconst USE_SHELL = process.platform === 'win32';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nfunction matchPM(str: string): PackageManager | null {\n // Order matters: check pnpm before npm since \"npm\" is a substring of some paths\n if (/pnpm/i.test(str)) return 'pnpm';\n if (/\\byarn\\b/i.test(str)) return 'yarn';\n if (/\\bbun\\b/i.test(str)) return 'bun';\n if (/\\bnpm\\b/i.test(str)) return 'npm';\n return null;\n}\n\n/**\n * Detect which package manager was used to install mastracode globally.\n *\n * Uses a multi-tier approach:\n * 1. npm_config_user_agent env var (set when run via `pnpm run`, `npm run`, etc.)\n * 2. npm_execpath env var (fallback for script-based invocation)\n * 3. NODE_PATH env var (set by pnpm global bin stubs)\n * 4. Resolved path of the running script (process.argv[1])\n * 5. Shell-out to `pnpm list -g` to check if pnpm manages the package\n * 6. Falls back to 'npm'\n */\nexport async function detectPackageManager(): Promise<PackageManager> {\n // Tier 1: npm_config_user_agent (most reliable when available)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n const pm = matchPM(userAgent);\n if (pm) return pm;\n }\n\n // Tier 2: npm_execpath\n const execPath = process.env.npm_execpath;\n if (execPath) {\n const pm = matchPM(execPath);\n if (pm) return pm;\n }\n\n // Tier 3: NODE_PATH (pnpm global stubs set this to paths containing .pnpm)\n const nodePath = process.env.NODE_PATH;\n if (nodePath) {\n if (/[/\\\\]\\.pnpm[/\\\\]/.test(nodePath) || /[/\\\\]pnpm[/\\\\]/.test(nodePath)) return 'pnpm';\n if (/[/\\\\]\\.yarn[/\\\\]/.test(nodePath)) return 'yarn';\n if (/[/\\\\]\\.bun[/\\\\]/.test(nodePath)) return 'bun';\n }\n\n // Tier 4: Resolved script path\n try {\n const scriptPath = realpathSync(process.argv[1] ?? '');\n if (/[/\\\\]\\.?pnpm[/\\\\]/.test(scriptPath)) return 'pnpm';\n if (/[/\\\\]\\.?yarn[/\\\\]/.test(scriptPath)) return 'yarn';\n if (/[/\\\\]\\.?bun[/\\\\]/.test(scriptPath)) return 'bun';\n } catch {\n // realpathSync can fail if argv[1] is missing/broken — fall through\n }\n\n // Tier 5: Check if the package is in pnpm's global store (non-blocking)\n const pnpmResult = await new Promise<boolean>(resolve => {\n execFile(\n 'pnpm',\n ['list', '-g', '--depth=0', PACKAGE_NAME],\n { timeout: 3_000, shell: USE_SHELL },\n (error, stdout) => {\n resolve(!error && stdout.includes(PACKAGE_NAME));\n },\n );\n });\n if (pnpmResult) return 'pnpm';\n\n return 'npm';\n}\n\n/**\n * Build the shell command string a user would run to install/update globally.\n */\nexport function getInstallCommand(pm: PackageManager, version?: string): string {\n const pkg = version ? `${PACKAGE_NAME}@${version}` : `${PACKAGE_NAME}@latest`;\n switch (pm) {\n case 'pnpm':\n return `pnpm add -g ${pkg}`;\n case 'yarn':\n return `yarn global add ${pkg}`;\n case 'bun':\n return `bun add -g ${pkg}`;\n default:\n return `npm install -g ${pkg}`;\n }\n}\n\n/**\n * Read the current version, injected at build time by tsup's `define` option.\n * Falls back to reading package.json at runtime (e.g. when running from source with tsx).\n */\nexport function getCurrentVersion(): string {\n if (typeof MASTRACODE_VERSION !== 'undefined') {\n return MASTRACODE_VERSION;\n }\n // Fallback for running from source (e.g. pnpx tsx mastracode/src/main.ts)\n const dir = dirname(fileURLToPath(import.meta.url));\n const pkgPath = resolve(dir, '../../package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n}\n\n/**\n * Fetch the latest published version from npm.\n * Returns null if the fetch fails (network error, timeout, etc.).\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n if (process.env.MASTRACODE_UPDATE_LATEST_VERSION) return process.env.MASTRACODE_UPDATE_LATEST_VERSION;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(NPM_REGISTRY_URL, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Simple semver comparison: returns true if `latest` is newer than `current`.\n * Handles standard x.y.z versions. Ignores pre-release tags.\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const parse = (v: string) =>\n v\n .replace(/^v/, '')\n .split('-')[0]!\n .split('.')\n .map(s => {\n const n = Number(s);\n return Number.isFinite(n) ? n : 0;\n });\n const [cMajor = 0, cMinor = 0, cPatch = 0] = parse(current);\n const [lMajor = 0, lMinor = 0, lPatch = 0] = parse(latest);\n if (lMajor !== cMajor) return lMajor > cMajor;\n if (lMinor !== cMinor) return lMinor > cMinor;\n return lPatch > cPatch;\n}\n\n/** Max entries to show in the changelog summary. */\nconst MAX_CHANGELOG_ENTRIES = 20;\n\n/**\n * Fetch the CHANGELOG.md for a specific published version from the npm CDN\n * and extract a human-readable summary of changes.\n * Returns null if the fetch fails or the changelog can't be parsed.\n */\nexport async function fetchChangelog(version: string): Promise<string | null> {\n if (process.env.MASTRACODE_UPDATE_CHANGELOG) return process.env.MASTRACODE_UPDATE_CHANGELOG;\n\n try {\n const url = `https://unpkg.com/${PACKAGE_NAME}@${version}/CHANGELOG.md`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(url, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const text = await res.text();\n return parseChangelog(text, version);\n } catch {\n return null;\n }\n}\n\n/**\n * Extract the changelog section for a specific version and format it\n * as a concise bullet list suitable for terminal display.\n */\nexport function parseChangelog(markdown: string, version: string): string | null {\n const versionHeader = `## ${version}`;\n const startIdx = markdown.indexOf(versionHeader);\n if (startIdx === -1) return null;\n\n const afterHeader = startIdx + versionHeader.length;\n const nextHeaderIdx = markdown.indexOf('\\n## ', afterHeader);\n const section = nextHeaderIdx === -1 ? markdown.slice(afterHeader) : markdown.slice(afterHeader, nextHeaderIdx);\n\n const lines = section.split('\\n');\n const entries: string[] = [];\n let skipIndented = false;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i]!;\n const trimmed = raw.trim();\n\n // Only match top-level entries (no leading whitespace before \"- \")\n const isTopLevel = raw === trimmed && trimmed.startsWith('- ');\n if (!isTopLevel) {\n // Skip indented sub-items (e.g. dependency list entries)\n if (skipIndented && /^\\s+-\\s/.test(raw)) continue;\n skipIndented = false;\n continue;\n }\n\n // Skip dependency update entries and their sub-items\n if (/^- Updated dependenc/i.test(trimmed)) {\n skipIndented = true;\n continue;\n }\n skipIndented = false;\n\n let entry = trimmed.slice(2);\n // Strip markdown links: [text](url) → text\n entry = entry.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1');\n // Strip PR references like (#15760)\n entry = entry.replace(/\\s*\\(#\\d+\\)\\s*/g, ' ');\n // Strip commit SHA references like (`abc123`)\n entry = entry.replace(/\\s*\\(`[a-f0-9]+`\\)\\s*/g, ' ');\n // Trim trailing periods for cleaner bullet display\n entry = entry.replace(/\\.\\s*$/, '');\n entry = entry.trim();\n if (entry) entries.push(entry);\n if (entries.length >= MAX_CHANGELOG_ENTRIES) break;\n }\n\n if (entries.length === 0) return null;\n return entries.map(e => ` • ${e}`).join('\\n');\n}\n\n/** Result of attempting an auto-update: exit status plus captured stderr. */\nexport interface UpdateResult {\n ok: boolean;\n stderr?: string;\n}\n\n/**\n * Run the appropriate global install command to update mastracode.\n * Exit code 0 does not prove the running binary changed (the install may land\n * in a location the PATH shim doesn't use) — verify with {@link locateOwnInstall}.\n */\nexport function runUpdate(pm: PackageManager, targetVersion: string): Promise<UpdateResult> {\n return execUpdate(pm, buildInstallArgs(pm, targetVersion));\n}\n\nfunction execUpdate(cmd: string, args: string[]): Promise<UpdateResult> {\n return new Promise(resolve => {\n execFile(cmd, args, { timeout: 60_000, shell: USE_SHELL }, (error, _stdout, stderr) => {\n const captured = (stderr ?? '').trim();\n if (error) {\n resolve({ ok: false, stderr: captured || error.message });\n } else {\n resolve({ ok: true, stderr: captured || undefined });\n }\n });\n });\n}\n\nfunction buildInstallArgs(pm: PackageManager, version: string): string[] {\n const pkg = `${PACKAGE_NAME}@${version}`;\n switch (pm) {\n case 'pnpm':\n return ['add', '-g', pkg];\n case 'yarn':\n return ['global', 'add', pkg];\n case 'bun':\n return ['add', '-g', pkg];\n default:\n return ['install', '-g', pkg];\n }\n}\n\n/** Max stderr lines to surface when an update fails. */\nconst MAX_UPDATE_ERROR_LINES = 5;\n\nfunction formatUpdaterError(stderr: string | undefined): string | null {\n if (!stderr) return null;\n const lines = stderr\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(line => line.trim().length > 0);\n if (lines.length === 0) return null;\n return lines.slice(-MAX_UPDATE_ERROR_LINES).join('\\n');\n}\n\n/**\n * Find the installed mastracode package the running binary belongs to (walking\n * up from `process.argv[1]`) and read its version fresh from disk. Returns\n * null when it can't be determined, e.g. when running from source.\n */\nexport function locateOwnInstall(): { dir: string; version: string | null } | null {\n const entry = process.argv[1];\n if (!entry) return null;\n\n let dir: string;\n try {\n dir = dirname(realpathSync(entry));\n } catch {\n return null;\n }\n\n let previous = '';\n while (dir && dir !== previous) {\n try {\n const pkg = JSON.parse(readFileSync(resolve(dir, 'package.json'), 'utf-8')) as {\n name?: string;\n version?: string;\n };\n if (pkg.name === PACKAGE_NAME) {\n return { dir, version: typeof pkg.version === 'string' ? pkg.version : null };\n }\n } catch {\n // Not a readable manifest — keep walking up.\n }\n previous = dir;\n dir = dirname(dir);\n }\n\n return null;\n}\n\nexport type UpdateOutcome =\n | { status: 'updated'; message: string }\n | { status: 'unchanged'; message: string }\n | { status: 'failed'; message: string };\n\n/**\n * Decide what to tell the user after {@link runUpdate}: `updated` when the\n * on-disk version matches the target (or can't be determined), `unchanged`\n * when the package manager succeeded but the running install didn't change,\n * `failed` on error (with the package manager's stderr).\n */\nexport function resolveUpdateOutcome(opts: {\n pm: PackageManager;\n targetVersion: string;\n result: UpdateResult;\n install: { dir: string; version: string | null } | null;\n /** Overrides the suggested manual command, e.g. when the update was delegated to the owning tool. */\n manualCommand?: string;\n}): UpdateOutcome {\n const { pm, targetVersion, result, install } = opts;\n const cmd = opts.manualCommand ?? getInstallCommand(pm, targetVersion);\n\n if (!result.ok) {\n const details = formatUpdaterError(result.stderr);\n let message = `Auto-update failed. Run \\`${cmd}\\` manually.`;\n if (details) message += `\\n\\n${details}`;\n return { status: 'failed', message };\n }\n\n if (install?.version != null && install.version !== targetVersion) {\n const message = opts.manualCommand\n ? `The update ran, but the Mastra Code you are running (at ${install.dir}) is still ` +\n `v${install.version}. Try \\`${cmd}\\` manually.`\n : `The update installed, but the Mastra Code you are running (at ${install.dir}) is still ` +\n `v${install.version} — it looks like it is managed by another tool. Update it with that tool, ` +\n `or try \\`${cmd}\\`.`;\n return { status: 'unchanged', message };\n }\n\n return { status: 'updated', message: `Updated to v${targetVersion}. Please restart Mastra Code.` };\n}\n\n/** Global node_modules directory the package manager installs into, or null when unknown. */\nfunction getGlobalRoot(pm: PackageManager): Promise<string | null> {\n const args = pm === 'yarn' ? ['global', 'dir'] : ['root', '-g'];\n return new Promise(res => {\n execFile(pm, args, { timeout: 10_000, shell: USE_SHELL }, (error, stdout) => {\n const out = (stdout ?? '').trim().split('\\n').pop()?.trim();\n if (error || !out) return res(null);\n res(pm === 'yarn' ? resolve(out, 'node_modules') : out);\n });\n });\n}\n\n/**\n * Whether updating via `pm` would touch the install the running binary uses.\n * Fail-open: returns true when either side can't be determined, so the update\n * proceeds and the post-install verification has the final word.\n */\nasync function isOwnInstallManagedBy(pm: PackageManager, install: { dir: string } | null): Promise<boolean> {\n if (!install) return true;\n const root = await getGlobalRoot(pm);\n if (!root) return true;\n try {\n return realpathSync(resolve(root, PACKAGE_NAME)) === install.dir;\n } catch {\n // Package absent from the pm's global root: installing there can't affect the running binary.\n return false;\n }\n}\n\n/** A tool other than a package manager that owns the running install, matched by path. */\ninterface InstallOwner {\n name: string;\n /** Command to run to delegate the update; omitted when we only suggest `command` to the user. */\n exec?: { cmd: string; args: string[] };\n command: string;\n}\n\nfunction findInstallOwner(dir: string, version: string): InstallOwner | null {\n if (dir.startsWith(join(homedir(), '.vite-plus') + sep)) {\n return {\n name: 'vite-plus',\n exec: { cmd: 'vp', args: ['install', '-g', `${PACKAGE_NAME}@${version}`] },\n command: `vp install -g ${PACKAGE_NAME}@${version}`,\n };\n }\n // Homebrew keeps formulas under <prefix>/Cellar/ whatever the prefix, so match the path segment.\n if (dir.split(sep).includes('Cellar')) {\n // Suggest-only: brew formulas lag npm, and `brew upgrade` can pull unrelated updates.\n return { name: 'Homebrew', command: `brew upgrade ${PACKAGE_NAME}` };\n }\n return null;\n}\n\n/**\n * Update mastracode and verify the result: delegates to the tool that owns the\n * running install when we recognize it, skips the install when it isn't\n * managed by `pm`, otherwise runs the package manager. Every executed update\n * is verified against the on-disk version.\n */\nexport async function performUpdate(pm: PackageManager, targetVersion: string): Promise<UpdateOutcome> {\n // The registry-provided version reaches shell commands on Windows — accept only version tokens.\n if (!/^[\\w.+-]+$/.test(targetVersion)) {\n return { status: 'failed', message: `Auto-update aborted: unexpected version \"${targetVersion}\".` };\n }\n\n const install = locateOwnInstall();\n\n const owner = install ? findInstallOwner(install.dir, targetVersion) : null;\n if (owner) {\n if (!owner.exec) {\n const message =\n `Your Mastra Code install (at ${install!.dir}) is managed by ${owner.name}. ` +\n `Update it with \\`${owner.command}\\`.`;\n return { status: 'unchanged', message };\n }\n const result = await execUpdate(owner.exec.cmd, owner.exec.args);\n return resolveUpdateOutcome({\n pm,\n targetVersion,\n result,\n install: locateOwnInstall(),\n manualCommand: owner.command,\n });\n }\n\n if (!(await isOwnInstallManagedBy(pm, install))) {\n const message =\n `Your Mastra Code install (at ${install!.dir}) is not managed by ${pm} — it looks like it was ` +\n `installed by another tool. Update it with that tool, or try \\`${getInstallCommand(pm, targetVersion)}\\`.`;\n return { status: 'unchanged', message };\n }\n\n const result = await runUpdate(pm, targetVersion);\n // Re-locate so the version reflects what the install just wrote to disk.\n return resolveUpdateOutcome({ pm, targetVersion, result, install: locateOwnInstall() });\n}\n"],"mappings":"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","names":["resolve","result"]}
|
|
1
|
+
{"version":3,"file":"update-check.js","names":[],"sources":["../../src/utils/update-check.ts"],"sourcesContent":["/**\n * Check for newer versions of mastracode on npm.\n */\n\nimport { execFile } from 'node:child_process';\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { dirname, join, resolve, sep } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ndeclare const MASTRACODE_VERSION: string | undefined;\n\nconst PACKAGE_NAME = 'mastracode';\nconst NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;\n\n/** Timeout for the npm registry fetch (ms). */\nconst FETCH_TIMEOUT_MS = 5_000;\n\n// Package managers and vp are .cmd shims on Windows; execFile can't spawn those without a shell (EINVAL).\nconst USE_SHELL = process.platform === 'win32';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nfunction matchPM(str: string): PackageManager | null {\n // Order matters: check pnpm before npm since \"npm\" is a substring of some paths\n if (/pnpm/i.test(str)) return 'pnpm';\n if (/\\byarn\\b/i.test(str)) return 'yarn';\n if (/\\bbun\\b/i.test(str)) return 'bun';\n if (/\\bnpm\\b/i.test(str)) return 'npm';\n return null;\n}\n\n/**\n * Detect which package manager was used to install mastracode globally.\n *\n * Uses a multi-tier approach:\n * 1. npm_config_user_agent env var (set when run via `pnpm run`, `npm run`, etc.)\n * 2. npm_execpath env var (fallback for script-based invocation)\n * 3. NODE_PATH env var (set by pnpm global bin stubs)\n * 4. Resolved path of the running script (process.argv[1])\n * 5. Shell-out to `pnpm list -g` to check if pnpm manages the package\n * 6. Falls back to 'npm'\n */\nexport async function detectPackageManager(): Promise<PackageManager> {\n // Tier 1: npm_config_user_agent (most reliable when available)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n const pm = matchPM(userAgent);\n if (pm) return pm;\n }\n\n // Tier 2: npm_execpath\n const execPath = process.env.npm_execpath;\n if (execPath) {\n const pm = matchPM(execPath);\n if (pm) return pm;\n }\n\n // Tier 3: NODE_PATH (pnpm global stubs set this to paths containing .pnpm)\n const nodePath = process.env.NODE_PATH;\n if (nodePath) {\n if (/[/\\\\]\\.pnpm[/\\\\]/.test(nodePath) || /[/\\\\]pnpm[/\\\\]/.test(nodePath)) return 'pnpm';\n if (/[/\\\\]\\.yarn[/\\\\]/.test(nodePath)) return 'yarn';\n if (/[/\\\\]\\.bun[/\\\\]/.test(nodePath)) return 'bun';\n }\n\n // Tier 4: Resolved script path\n try {\n const scriptPath = realpathSync(process.argv[1] ?? '');\n if (/[/\\\\]\\.?pnpm[/\\\\]/.test(scriptPath)) return 'pnpm';\n if (/[/\\\\]\\.?yarn[/\\\\]/.test(scriptPath)) return 'yarn';\n if (/[/\\\\]\\.?bun[/\\\\]/.test(scriptPath)) return 'bun';\n } catch {\n // realpathSync can fail if argv[1] is missing/broken — fall through\n }\n\n // Tier 5: Check if the package is in pnpm's global store (non-blocking)\n const pnpmResult = await new Promise<boolean>(resolve => {\n execFile(\n 'pnpm',\n ['list', '-g', '--depth=0', PACKAGE_NAME],\n { timeout: 3_000, shell: USE_SHELL },\n (error, stdout) => {\n resolve(!error && stdout.includes(PACKAGE_NAME));\n },\n );\n });\n if (pnpmResult) return 'pnpm';\n\n return 'npm';\n}\n\n/**\n * Build the shell command string a user would run to install/update globally.\n */\nexport function getInstallCommand(pm: PackageManager, version?: string): string {\n const pkg = version ? `${PACKAGE_NAME}@${version}` : `${PACKAGE_NAME}@latest`;\n switch (pm) {\n case 'pnpm':\n return `pnpm add -g ${pkg}`;\n case 'yarn':\n return `yarn global add ${pkg}`;\n case 'bun':\n return `bun add -g ${pkg}`;\n default:\n return `npm install -g ${pkg}`;\n }\n}\n\n/**\n * Read the current version, injected at build time by tsdown's `define` option.\n * Falls back to reading package.json at runtime (e.g. when running from source with tsx).\n */\nexport function getCurrentVersion(): string {\n if (typeof MASTRACODE_VERSION !== 'undefined') {\n return MASTRACODE_VERSION;\n }\n // Fallback for running from source (e.g. pnpx tsx mastracode/src/main.ts)\n const dir = dirname(fileURLToPath(import.meta.url));\n const pkgPath = resolve(dir, '../../package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n}\n\n/**\n * Fetch the latest published version from npm.\n * Returns null if the fetch fails (network error, timeout, etc.).\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n if (process.env.MASTRACODE_UPDATE_LATEST_VERSION) return process.env.MASTRACODE_UPDATE_LATEST_VERSION;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(NPM_REGISTRY_URL, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Simple semver comparison: returns true if `latest` is newer than `current`.\n * Handles standard x.y.z versions. Ignores pre-release tags.\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const parse = (v: string) =>\n v\n .replace(/^v/, '')\n .split('-')[0]!\n .split('.')\n .map(s => {\n const n = Number(s);\n return Number.isFinite(n) ? n : 0;\n });\n const [cMajor = 0, cMinor = 0, cPatch = 0] = parse(current);\n const [lMajor = 0, lMinor = 0, lPatch = 0] = parse(latest);\n if (lMajor !== cMajor) return lMajor > cMajor;\n if (lMinor !== cMinor) return lMinor > cMinor;\n return lPatch > cPatch;\n}\n\n/** Max entries to show in the changelog summary. */\nconst MAX_CHANGELOG_ENTRIES = 20;\n\n/**\n * Fetch the CHANGELOG.md for a specific published version from the npm CDN\n * and extract a human-readable summary of changes.\n * Returns null if the fetch fails or the changelog can't be parsed.\n */\nexport async function fetchChangelog(version: string): Promise<string | null> {\n if (process.env.MASTRACODE_UPDATE_CHANGELOG) return process.env.MASTRACODE_UPDATE_CHANGELOG;\n\n try {\n const url = `https://unpkg.com/${PACKAGE_NAME}@${version}/CHANGELOG.md`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(url, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const text = await res.text();\n return parseChangelog(text, version);\n } catch {\n return null;\n }\n}\n\n/**\n * Extract the changelog section for a specific version and format it\n * as a concise bullet list suitable for terminal display.\n */\nexport function parseChangelog(markdown: string, version: string): string | null {\n const versionHeader = `## ${version}`;\n const startIdx = markdown.indexOf(versionHeader);\n if (startIdx === -1) return null;\n\n const afterHeader = startIdx + versionHeader.length;\n const nextHeaderIdx = markdown.indexOf('\\n## ', afterHeader);\n const section = nextHeaderIdx === -1 ? markdown.slice(afterHeader) : markdown.slice(afterHeader, nextHeaderIdx);\n\n const lines = section.split('\\n');\n const entries: string[] = [];\n let skipIndented = false;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i]!;\n const trimmed = raw.trim();\n\n // Only match top-level entries (no leading whitespace before \"- \")\n const isTopLevel = raw === trimmed && trimmed.startsWith('- ');\n if (!isTopLevel) {\n // Skip indented sub-items (e.g. dependency list entries)\n if (skipIndented && /^\\s+-\\s/.test(raw)) continue;\n skipIndented = false;\n continue;\n }\n\n // Skip dependency update entries and their sub-items\n if (/^- Updated dependenc/i.test(trimmed)) {\n skipIndented = true;\n continue;\n }\n skipIndented = false;\n\n let entry = trimmed.slice(2);\n // Strip markdown links: [text](url) → text\n entry = entry.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1');\n // Strip PR references like (#15760)\n entry = entry.replace(/\\s*\\(#\\d+\\)\\s*/g, ' ');\n // Strip commit SHA references like (`abc123`)\n entry = entry.replace(/\\s*\\(`[a-f0-9]+`\\)\\s*/g, ' ');\n // Trim trailing periods for cleaner bullet display\n entry = entry.replace(/\\.\\s*$/, '');\n entry = entry.trim();\n if (entry) entries.push(entry);\n if (entries.length >= MAX_CHANGELOG_ENTRIES) break;\n }\n\n if (entries.length === 0) return null;\n return entries.map(e => ` • ${e}`).join('\\n');\n}\n\n/** Result of attempting an auto-update: exit status plus captured stderr. */\nexport interface UpdateResult {\n ok: boolean;\n stderr?: string;\n}\n\n/**\n * Run the appropriate global install command to update mastracode.\n * Exit code 0 does not prove the running binary changed (the install may land\n * in a location the PATH shim doesn't use) — verify with {@link locateOwnInstall}.\n */\nexport function runUpdate(pm: PackageManager, targetVersion: string): Promise<UpdateResult> {\n return execUpdate(pm, buildInstallArgs(pm, targetVersion));\n}\n\nfunction execUpdate(cmd: string, args: string[]): Promise<UpdateResult> {\n return new Promise(resolve => {\n execFile(cmd, args, { timeout: 60_000, shell: USE_SHELL }, (error, _stdout, stderr) => {\n const captured = (stderr ?? '').trim();\n if (error) {\n resolve({ ok: false, stderr: captured || error.message });\n } else {\n resolve({ ok: true, stderr: captured || undefined });\n }\n });\n });\n}\n\nfunction buildInstallArgs(pm: PackageManager, version: string): string[] {\n const pkg = `${PACKAGE_NAME}@${version}`;\n switch (pm) {\n case 'pnpm':\n return ['add', '-g', pkg];\n case 'yarn':\n return ['global', 'add', pkg];\n case 'bun':\n return ['add', '-g', pkg];\n default:\n return ['install', '-g', pkg];\n }\n}\n\n/** Max stderr lines to surface when an update fails. */\nconst MAX_UPDATE_ERROR_LINES = 5;\n\nfunction formatUpdaterError(stderr: string | undefined): string | null {\n if (!stderr) return null;\n const lines = stderr\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(line => line.trim().length > 0);\n if (lines.length === 0) return null;\n return lines.slice(-MAX_UPDATE_ERROR_LINES).join('\\n');\n}\n\n/**\n * Find the installed mastracode package the running binary belongs to (walking\n * up from `process.argv[1]`) and read its version fresh from disk. Returns\n * null when it can't be determined, e.g. when running from source.\n */\nexport function locateOwnInstall(): { dir: string; version: string | null } | null {\n const entry = process.argv[1];\n if (!entry) return null;\n\n let dir: string;\n try {\n dir = dirname(realpathSync(entry));\n } catch {\n return null;\n }\n\n let previous = '';\n while (dir && dir !== previous) {\n try {\n const pkg = JSON.parse(readFileSync(resolve(dir, 'package.json'), 'utf-8')) as {\n name?: string;\n version?: string;\n };\n if (pkg.name === PACKAGE_NAME) {\n return { dir, version: typeof pkg.version === 'string' ? pkg.version : null };\n }\n } catch {\n // Not a readable manifest — keep walking up.\n }\n previous = dir;\n dir = dirname(dir);\n }\n\n return null;\n}\n\nexport type UpdateOutcome =\n | { status: 'updated'; message: string }\n | { status: 'unchanged'; message: string }\n | { status: 'failed'; message: string };\n\n/**\n * Decide what to tell the user after {@link runUpdate}: `updated` when the\n * on-disk version matches the target (or can't be determined), `unchanged`\n * when the package manager succeeded but the running install didn't change,\n * `failed` on error (with the package manager's stderr).\n */\nexport function resolveUpdateOutcome(opts: {\n pm: PackageManager;\n targetVersion: string;\n result: UpdateResult;\n install: { dir: string; version: string | null } | null;\n /** Overrides the suggested manual command, e.g. when the update was delegated to the owning tool. */\n manualCommand?: string;\n}): UpdateOutcome {\n const { pm, targetVersion, result, install } = opts;\n const cmd = opts.manualCommand ?? getInstallCommand(pm, targetVersion);\n\n if (!result.ok) {\n const details = formatUpdaterError(result.stderr);\n let message = `Auto-update failed. Run \\`${cmd}\\` manually.`;\n if (details) message += `\\n\\n${details}`;\n return { status: 'failed', message };\n }\n\n if (install?.version != null && install.version !== targetVersion) {\n const message = opts.manualCommand\n ? `The update ran, but the Mastra Code you are running (at ${install.dir}) is still ` +\n `v${install.version}. Try \\`${cmd}\\` manually.`\n : `The update installed, but the Mastra Code you are running (at ${install.dir}) is still ` +\n `v${install.version} — it looks like it is managed by another tool. Update it with that tool, ` +\n `or try \\`${cmd}\\`.`;\n return { status: 'unchanged', message };\n }\n\n return { status: 'updated', message: `Updated to v${targetVersion}. Please restart Mastra Code.` };\n}\n\n/** Global node_modules directory the package manager installs into, or null when unknown. */\nfunction getGlobalRoot(pm: PackageManager): Promise<string | null> {\n const args = pm === 'yarn' ? ['global', 'dir'] : ['root', '-g'];\n return new Promise(res => {\n execFile(pm, args, { timeout: 10_000, shell: USE_SHELL }, (error, stdout) => {\n const out = (stdout ?? '').trim().split('\\n').pop()?.trim();\n if (error || !out) return res(null);\n res(pm === 'yarn' ? resolve(out, 'node_modules') : out);\n });\n });\n}\n\n/**\n * Whether updating via `pm` would touch the install the running binary uses.\n * Fail-open: returns true when either side can't be determined, so the update\n * proceeds and the post-install verification has the final word.\n */\nasync function isOwnInstallManagedBy(pm: PackageManager, install: { dir: string } | null): Promise<boolean> {\n if (!install) return true;\n const root = await getGlobalRoot(pm);\n if (!root) return true;\n try {\n return realpathSync(resolve(root, PACKAGE_NAME)) === install.dir;\n } catch {\n // Package absent from the pm's global root: installing there can't affect the running binary.\n return false;\n }\n}\n\n/** A tool other than a package manager that owns the running install, matched by path. */\ninterface InstallOwner {\n name: string;\n /** Command to run to delegate the update; omitted when we only suggest `command` to the user. */\n exec?: { cmd: string; args: string[] };\n command: string;\n}\n\nfunction findInstallOwner(dir: string, version: string): InstallOwner | null {\n if (dir.startsWith(join(homedir(), '.vite-plus') + sep)) {\n return {\n name: 'vite-plus',\n exec: { cmd: 'vp', args: ['install', '-g', `${PACKAGE_NAME}@${version}`] },\n command: `vp install -g ${PACKAGE_NAME}@${version}`,\n };\n }\n // Homebrew keeps formulas under <prefix>/Cellar/ whatever the prefix, so match the path segment.\n if (dir.split(sep).includes('Cellar')) {\n // Suggest-only: brew formulas lag npm, and `brew upgrade` can pull unrelated updates.\n return { name: 'Homebrew', command: `brew upgrade ${PACKAGE_NAME}` };\n }\n return null;\n}\n\n/**\n * Update mastracode and verify the result: delegates to the tool that owns the\n * running install when we recognize it, skips the install when it isn't\n * managed by `pm`, otherwise runs the package manager. Every executed update\n * is verified against the on-disk version.\n */\nexport async function performUpdate(pm: PackageManager, targetVersion: string): Promise<UpdateOutcome> {\n // The registry-provided version reaches shell commands on Windows — accept only version tokens.\n if (!/^[\\w.+-]+$/.test(targetVersion)) {\n return { status: 'failed', message: `Auto-update aborted: unexpected version \"${targetVersion}\".` };\n }\n\n const install = locateOwnInstall();\n\n const owner = install ? findInstallOwner(install.dir, targetVersion) : null;\n if (owner) {\n if (!owner.exec) {\n const message =\n `Your Mastra Code install (at ${install!.dir}) is managed by ${owner.name}. ` +\n `Update it with \\`${owner.command}\\`.`;\n return { status: 'unchanged', message };\n }\n const result = await execUpdate(owner.exec.cmd, owner.exec.args);\n return resolveUpdateOutcome({\n pm,\n targetVersion,\n result,\n install: locateOwnInstall(),\n manualCommand: owner.command,\n });\n }\n\n if (!(await isOwnInstallManagedBy(pm, install))) {\n const message =\n `Your Mastra Code install (at ${install!.dir}) is not managed by ${pm} — it looks like it was ` +\n `installed by another tool. Update it with that tool, or try \\`${getInstallCommand(pm, targetVersion)}\\`.`;\n return { status: 'unchanged', message };\n }\n\n const result = await runUpdate(pm, targetVersion);\n // Re-locate so the version reflects what the install just wrote to disk.\n return resolveUpdateOutcome({ pm, targetVersion, result, install: locateOwnInstall() });\n}\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAe;AACrB,MAAM,mBAAmB,8BAA8B,aAAa;;AAGpE,MAAM,mBAAmB;AAGzB,MAAM,YAAY,QAAQ,aAAa;AAIvC,SAAS,QAAQ,KAAoC;CAEnD,IAAI,QAAQ,KAAK,GAAG,GAAG,OAAO;CAC9B,IAAI,YAAY,KAAK,GAAG,GAAG,OAAO;CAClC,IAAI,WAAW,KAAK,GAAG,GAAG,OAAO;CACjC,IAAI,WAAW,KAAK,GAAG,GAAG,OAAO;CACjC,OAAO;AACT;;;;;;;;;;;;AAaA,eAAsB,uBAAgD;CAEpE,MAAM,YAAY,QAAQ,IAAI;CAC9B,IAAI,WAAW;EACb,MAAM,KAAK,QAAQ,SAAS;EAC5B,IAAI,IAAI,OAAO;CACjB;CAGA,MAAM,WAAW,QAAQ,IAAI;CAC7B,IAAI,UAAU;EACZ,MAAM,KAAK,QAAQ,QAAQ;EAC3B,IAAI,IAAI,OAAO;CACjB;CAGA,MAAM,WAAW,QAAQ,IAAI;CAC7B,IAAI,UAAU;EACZ,IAAI,mBAAmB,KAAK,QAAQ,KAAK,iBAAiB,KAAK,QAAQ,GAAG,OAAO;EACjF,IAAI,mBAAmB,KAAK,QAAQ,GAAG,OAAO;EAC9C,IAAI,kBAAkB,KAAK,QAAQ,GAAG,OAAO;CAC/C;CAGA,IAAI;EACF,MAAM,aAAa,aAAa,QAAQ,KAAK,MAAM,EAAE;EACrD,IAAI,oBAAoB,KAAK,UAAU,GAAG,OAAO;EACjD,IAAI,oBAAoB,KAAK,UAAU,GAAG,OAAO;EACjD,IAAI,mBAAmB,KAAK,UAAU,GAAG,OAAO;CAClD,QAAQ,CAER;CAaA,IAAI,MAVqB,IAAI,SAAiB,YAAW;EACvD,SACE,QACA;GAAC;GAAQ;GAAM;GAAa;EAAY,GACxC;GAAE,SAAS;GAAO,OAAO;EAAU,IAClC,OAAO,WAAW;GACjB,QAAQ,CAAC,SAAS,OAAO,SAAS,YAAY,CAAC;EACjD,CACF;CACF,CAAC,GACe,OAAO;CAEvB,OAAO;AACT;;;;AAKA,SAAgB,kBAAkB,IAAoB,SAA0B;CAC9E,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa;CACrE,QAAQ,IAAR;EACE,KAAK,QACH,OAAO,eAAe;EACxB,KAAK,QACH,OAAO,mBAAmB;EAC5B,KAAK,OACH,OAAO,cAAc;EACvB,SACE,OAAO,kBAAkB;CAC7B;AACF;;;;;AAMA,SAAgB,oBAA4B;CAC1C,IAAI,OAAO,uBAAuB,aAChC,OAAO;CAIT,MAAM,UAAU,QADJ,QAAQ,cAAc,OAAO,KAAK,GAAG,CACvB,GAAG,oBAAoB;CAEjD,OADY,KAAK,MAAM,aAAa,SAAS,OAAO,CAC3C,CAAC,CAAC;AACb;;;;;AAMA,eAAsB,qBAA6C;CACjE,IAAI,QAAQ,IAAI,kCAAkC,OAAO,QAAQ,IAAI;CAErE,IAAI;EACF,MAAM,aAAa,IAAI,gBAAgB;EACvC,MAAM,UAAU,iBAAiB,WAAW,MAAM,GAAG,gBAAgB;EACrE,MAAM,MAAM,MAAM,MAAM,kBAAkB,EAAE,QAAQ,WAAW,OAAO,CAAC;EACvE,aAAa,OAAO;EACpB,IAAI,CAAC,IAAI,IAAI,OAAO;EAEpB,QAAO,MADa,IAAI,KAAK,EAAA,CACjB,WAAW;CACzB,QAAQ;EACN,OAAO;CACT;AACF;;;;;AAMA,SAAgB,eAAe,SAAiB,QAAyB;CACvE,MAAM,SAAS,MACb,EACG,QAAQ,MAAM,EAAE,CAAC,CACjB,MAAM,GAAG,CAAC,CAAC,EAAE,CACb,MAAM,GAAG,CAAC,CACV,KAAI,MAAK;EACR,MAAM,IAAI,OAAO,CAAC;EAClB,OAAO,OAAO,SAAS,CAAC,IAAI,IAAI;CAClC,CAAC;CACL,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,KAAK,MAAM,OAAO;CAC1D,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,KAAK,MAAM,MAAM;CACzD,IAAI,WAAW,QAAQ,OAAO,SAAS;CACvC,IAAI,WAAW,QAAQ,OAAO,SAAS;CACvC,OAAO,SAAS;AAClB;;AAGA,MAAM,wBAAwB;;;;;;AAO9B,eAAsB,eAAe,SAAyC;CAC5E,IAAI,QAAQ,IAAI,6BAA6B,OAAO,QAAQ,IAAI;CAEhE,IAAI;EACF,MAAM,MAAM,qBAAqB,aAAa,GAAG,QAAQ;EACzD,MAAM,aAAa,IAAI,gBAAgB;EACvC,MAAM,UAAU,iBAAiB,WAAW,MAAM,GAAG,gBAAgB;EACrE,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,WAAW,OAAO,CAAC;EAC1D,aAAa,OAAO;EACpB,IAAI,CAAC,IAAI,IAAI,OAAO;EAEpB,OAAO,eAAe,MADH,IAAI,KAAK,GACA,OAAO;CACrC,QAAQ;EACN,OAAO;CACT;AACF;;;;;AAMA,SAAgB,eAAe,UAAkB,SAAgC;CAC/E,MAAM,gBAAgB,MAAM;CAC5B,MAAM,WAAW,SAAS,QAAQ,aAAa;CAC/C,IAAI,aAAa,IAAI,OAAO;CAE5B,MAAM,cAAc,WAAW,cAAc;CAC7C,MAAM,gBAAgB,SAAS,QAAQ,SAAS,WAAW;CAG3D,MAAM,SAFU,kBAAkB,KAAK,SAAS,MAAM,WAAW,IAAI,SAAS,MAAM,aAAa,aAAa,EAAA,CAExF,MAAM,IAAI;CAChC,MAAM,UAAoB,CAAC;CAC3B,IAAI,eAAe;CAEnB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,MAAM,MAAM,MAAM;EAClB,MAAM,UAAU,IAAI,KAAK;EAIzB,IAAI,EADe,QAAQ,WAAW,QAAQ,WAAW,IAAI,IAC5C;GAEf,IAAI,gBAAgB,UAAU,KAAK,GAAG,GAAG;GACzC,eAAe;GACf;EACF;EAGA,IAAI,wBAAwB,KAAK,OAAO,GAAG;GACzC,eAAe;GACf;EACF;EACA,eAAe;EAEf,IAAI,QAAQ,QAAQ,MAAM,CAAC;EAE3B,QAAQ,MAAM,QAAQ,0BAA0B,IAAI;EAEpD,QAAQ,MAAM,QAAQ,mBAAmB,GAAG;EAE5C,QAAQ,MAAM,QAAQ,0BAA0B,GAAG;EAEnD,QAAQ,MAAM,QAAQ,UAAU,EAAE;EAClC,QAAQ,MAAM,KAAK;EACnB,IAAI,OAAO,QAAQ,KAAK,KAAK;EAC7B,IAAI,QAAQ,UAAU,uBAAuB;CAC/C;CAEA,IAAI,QAAQ,WAAW,GAAG,OAAO;CACjC,OAAO,QAAQ,KAAI,MAAK,OAAO,GAAG,CAAC,CAAC,KAAK,IAAI;AAC/C;;;;;;AAaA,SAAgB,UAAU,IAAoB,eAA8C;CAC1F,OAAO,WAAW,IAAI,iBAAiB,IAAI,aAAa,CAAC;AAC3D;AAEA,SAAS,WAAW,KAAa,MAAuC;CACtE,OAAO,IAAI,SAAQ,YAAW;EAC5B,SAAS,KAAK,MAAM;GAAE,SAAS;GAAQ,OAAO;EAAU,IAAI,OAAO,SAAS,WAAW;GACrF,MAAM,YAAY,UAAU,GAAA,CAAI,KAAK;GACrC,IAAI,OACF,QAAQ;IAAE,IAAI;IAAO,QAAQ,YAAY,MAAM;GAAQ,CAAC;QAExD,QAAQ;IAAE,IAAI;IAAM,QAAQ,YAAY,KAAA;GAAU,CAAC;EAEvD,CAAC;CACH,CAAC;AACH;AAEA,SAAS,iBAAiB,IAAoB,SAA2B;CACvE,MAAM,MAAM,GAAG,aAAa,GAAG;CAC/B,QAAQ,IAAR;EACE,KAAK,QACH,OAAO;GAAC;GAAO;GAAM;EAAG;EAC1B,KAAK,QACH,OAAO;GAAC;GAAU;GAAO;EAAG;EAC9B,KAAK,OACH,OAAO;GAAC;GAAO;GAAM;EAAG;EAC1B,SACE,OAAO;GAAC;GAAW;GAAM;EAAG;CAChC;AACF;AAKA,SAAS,mBAAmB,QAA2C;CACrE,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,QAAQ,OACX,MAAM,IAAI,CAAC,CACX,KAAI,SAAQ,KAAK,QAAQ,CAAC,CAAC,CAC3B,QAAO,SAAQ,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC;CACxC,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,OAAO,MAAM,MAAM,EAAuB,CAAC,CAAC,KAAK,IAAI;AACvD;;;;;;AAOA,SAAgB,mBAAmE;CACjF,MAAM,QAAQ,QAAQ,KAAK;CAC3B,IAAI,CAAC,OAAO,OAAO;CAEnB,IAAI;CACJ,IAAI;EACF,MAAM,QAAQ,aAAa,KAAK,CAAC;CACnC,QAAQ;EACN,OAAO;CACT;CAEA,IAAI,WAAW;CACf,OAAO,OAAO,QAAQ,UAAU;EAC9B,IAAI;GACF,MAAM,MAAM,KAAK,MAAM,aAAa,QAAQ,KAAK,cAAc,GAAG,OAAO,CAAC;GAI1E,IAAI,IAAI,SAAS,cACf,OAAO;IAAE;IAAK,SAAS,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;GAAK;EAEhF,QAAQ,CAER;EACA,WAAW;EACX,MAAM,QAAQ,GAAG;CACnB;CAEA,OAAO;AACT;;;;;;;AAaA,SAAgB,qBAAqB,MAOnB;CAChB,MAAM,EAAE,IAAI,eAAe,QAAQ,YAAY;CAC/C,MAAM,MAAM,KAAK,iBAAiB,kBAAkB,IAAI,aAAa;CAErE,IAAI,CAAC,OAAO,IAAI;EACd,MAAM,UAAU,mBAAmB,OAAO,MAAM;EAChD,IAAI,UAAU,6BAA6B,IAAI;EAC/C,IAAI,SAAS,WAAW,OAAO;EAC/B,OAAO;GAAE,QAAQ;GAAU;EAAQ;CACrC;CAEA,IAAI,SAAS,WAAW,QAAQ,QAAQ,YAAY,eAOlD,OAAO;EAAE,QAAQ;EAAa,SANd,KAAK,gBACjB,2DAA2D,QAAQ,IAAI,cACnE,QAAQ,QAAQ,UAAU,IAAI,gBAClC,iEAAiE,QAAQ,IAAI,cACzE,QAAQ,QAAQ,qFACR,IAAI;CACkB;CAGxC,OAAO;EAAE,QAAQ;EAAW,SAAS,eAAe,cAAc;CAA+B;AACnG;;AAGA,SAAS,cAAc,IAA4C;CACjE,MAAM,OAAO,OAAO,SAAS,CAAC,UAAU,KAAK,IAAI,CAAC,QAAQ,IAAI;CAC9D,OAAO,IAAI,SAAQ,QAAO;EACxB,SAAS,IAAI,MAAM;GAAE,SAAS;GAAQ,OAAO;EAAU,IAAI,OAAO,WAAW;GAC3E,MAAM,OAAO,UAAU,GAAA,CAAI,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK;GAC1D,IAAI,SAAS,CAAC,KAAK,OAAO,IAAI,IAAI;GAClC,IAAI,OAAO,SAAS,QAAQ,KAAK,cAAc,IAAI,GAAG;EACxD,CAAC;CACH,CAAC;AACH;;;;;;AAOA,eAAe,sBAAsB,IAAoB,SAAmD;CAC1G,IAAI,CAAC,SAAS,OAAO;CACrB,MAAM,OAAO,MAAM,cAAc,EAAE;CACnC,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI;EACF,OAAO,aAAa,QAAQ,MAAM,YAAY,CAAC,MAAM,QAAQ;CAC/D,QAAQ;EAEN,OAAO;CACT;AACF;AAUA,SAAS,iBAAiB,KAAa,SAAsC;CAC3E,IAAI,IAAI,WAAW,KAAK,QAAQ,GAAG,YAAY,IAAI,GAAG,GACpD,OAAO;EACL,MAAM;EACN,MAAM;GAAE,KAAK;GAAM,MAAM;IAAC;IAAW;IAAM,GAAG,aAAa,GAAG;GAAS;EAAE;EACzE,SAAS,iBAAiB,aAAa,GAAG;CAC5C;CAGF,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,QAAQ,GAElC,OAAO;EAAE,MAAM;EAAY,SAAS,gBAAgB;CAAe;CAErE,OAAO;AACT;;;;;;;AAQA,eAAsB,cAAc,IAAoB,eAA+C;CAErG,IAAI,CAAC,aAAa,KAAK,aAAa,GAClC,OAAO;EAAE,QAAQ;EAAU,SAAS,4CAA4C,cAAc;CAAI;CAGpG,MAAM,UAAU,iBAAiB;CAEjC,MAAM,QAAQ,UAAU,iBAAiB,QAAQ,KAAK,aAAa,IAAI;CACvE,IAAI,OAAO;EACT,IAAI,CAAC,MAAM,MAIT,OAAO;GAAE,QAAQ;GAAa,SAAA,gCAFI,QAAS,IAAI,kBAAkB,MAAM,KAAK,qBACtD,MAAM,QAAQ;EACE;EAGxC,OAAO,qBAAqB;GAC1B;GACA;GACA,QAAA,MAJmB,WAAW,MAAM,KAAK,KAAK,MAAM,KAAK,IAAI;GAK7D,SAAS,iBAAiB;GAC1B,eAAe,MAAM;EACvB,CAAC;CACH;CAEA,IAAI,CAAE,MAAM,sBAAsB,IAAI,OAAO,GAI3C,OAAO;EAAE,QAAQ;EAAa,SAAA,gCAFI,QAAS,IAAI,sBAAsB,GAAG,wFACL,kBAAkB,IAAI,aAAa,EAAE;CAClE;CAKxC,OAAO,qBAAqB;EAAE;EAAI;EAAe,QAAA,MAF5B,UAAU,IAAI,aAAa;EAES,SAAS,iBAAiB;CAAE,CAAC;AACxF"}
|
|
@@ -1,126 +1,144 @@
|
|
|
1
|
+
//#region src/voice/stt-registry.ts
|
|
2
|
+
/**
|
|
3
|
+
* The curated STT catalog. Order matters: the first entry for a provider is its
|
|
4
|
+
* default model, and the first overall entry (`openai`/`whisper-1`) is the
|
|
5
|
+
* global default.
|
|
6
|
+
*/
|
|
1
7
|
const STT_MODELS = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
8
|
+
{
|
|
9
|
+
provider: "openai",
|
|
10
|
+
model: "whisper-1",
|
|
11
|
+
label: "OpenAI Whisper",
|
|
12
|
+
resolver: "openai"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
provider: "openai",
|
|
16
|
+
model: "gpt-4o-transcribe",
|
|
17
|
+
label: "OpenAI GPT-4o Transcribe",
|
|
18
|
+
resolver: "openai"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
provider: "openai",
|
|
22
|
+
model: "gpt-4o-mini-transcribe",
|
|
23
|
+
label: "OpenAI GPT-4o mini Transcribe",
|
|
24
|
+
resolver: "openai"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
provider: "groq",
|
|
28
|
+
model: "whisper-large-v3-turbo",
|
|
29
|
+
label: "Groq Whisper Large v3 Turbo",
|
|
30
|
+
resolver: "openai-compatible",
|
|
31
|
+
baseURL: "https://api.groq.com/openai/v1"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
provider: "groq",
|
|
35
|
+
model: "whisper-large-v3",
|
|
36
|
+
label: "Groq Whisper Large v3",
|
|
37
|
+
resolver: "openai-compatible",
|
|
38
|
+
baseURL: "https://api.groq.com/openai/v1"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
provider: "deepgram",
|
|
42
|
+
model: "nova-3",
|
|
43
|
+
label: "Deepgram Nova-3",
|
|
44
|
+
resolver: "deepgram"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
provider: "alibaba",
|
|
48
|
+
model: "qwen3-asr-flash",
|
|
49
|
+
label: "Alibaba Qwen3 ASR Flash",
|
|
50
|
+
resolver: "openai-compatible",
|
|
51
|
+
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
provider: "alibaba-cn",
|
|
55
|
+
model: "qwen3-asr-flash",
|
|
56
|
+
label: "Alibaba Qwen3 ASR Flash (China)",
|
|
57
|
+
resolver: "openai-compatible",
|
|
58
|
+
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
provider: "scaleway",
|
|
62
|
+
model: "whisper-large-v3",
|
|
63
|
+
label: "Scaleway Whisper Large v3",
|
|
64
|
+
resolver: "openai-compatible",
|
|
65
|
+
baseURL: "https://api.scaleway.ai/v1"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
provider: "nvidia",
|
|
69
|
+
model: "openai/whisper-large-v3",
|
|
70
|
+
label: "Nvidia Whisper Large v3",
|
|
71
|
+
resolver: "openai-compatible",
|
|
72
|
+
baseURL: "https://integrate.api.nvidia.com/v1"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
provider: "nearai",
|
|
76
|
+
model: "openai/whisper-large-v3",
|
|
77
|
+
label: "NEAR AI Whisper Large v3",
|
|
78
|
+
resolver: "openai-compatible",
|
|
79
|
+
baseURL: "https://cloud-api.near.ai/v1"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
provider: "evroc",
|
|
83
|
+
model: "openai/whisper-large-v3-turbo",
|
|
84
|
+
label: "evroc Whisper Large v3 Turbo",
|
|
85
|
+
resolver: "openai-compatible",
|
|
86
|
+
baseURL: "https://models.think.evroc.com/v1"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
provider: "evroc",
|
|
90
|
+
model: "openai/whisper-large-v3",
|
|
91
|
+
label: "evroc Whisper Large v3",
|
|
92
|
+
resolver: "openai-compatible",
|
|
93
|
+
baseURL: "https://models.think.evroc.com/v1"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
provider: "evroc",
|
|
97
|
+
model: "KBLab/kb-whisper-large",
|
|
98
|
+
label: "evroc KB-Whisper Large",
|
|
99
|
+
resolver: "openai-compatible",
|
|
100
|
+
baseURL: "https://models.think.evroc.com/v1"
|
|
101
|
+
}
|
|
86
102
|
];
|
|
103
|
+
/** The global default STT model (first registry entry). */
|
|
87
104
|
const DEFAULT_STT_MODEL = STT_MODELS[0];
|
|
105
|
+
/** The default STT provider when none is configured. */
|
|
88
106
|
const DEFAULT_STT_PROVIDER = DEFAULT_STT_MODEL.provider;
|
|
107
|
+
/** Unique provider ids in registry order. */
|
|
89
108
|
function sttProviders() {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
return out;
|
|
109
|
+
const seen = /* @__PURE__ */ new Set();
|
|
110
|
+
const out = [];
|
|
111
|
+
for (const m of STT_MODELS) if (!seen.has(m.provider)) {
|
|
112
|
+
seen.add(m.provider);
|
|
113
|
+
out.push(m.provider);
|
|
114
|
+
}
|
|
115
|
+
return out;
|
|
99
116
|
}
|
|
117
|
+
/** All models offered for a provider, in registry order. */
|
|
100
118
|
function sttModelsForProvider(provider) {
|
|
101
|
-
|
|
119
|
+
return STT_MODELS.filter((m) => m.provider === provider);
|
|
102
120
|
}
|
|
121
|
+
/** The default (first) model for a provider, or undefined if unknown. */
|
|
103
122
|
function defaultModelForProvider(provider) {
|
|
104
|
-
|
|
123
|
+
return STT_MODELS.find((m) => m.provider === provider);
|
|
105
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Resolve a provider/model pair to a concrete registry entry.
|
|
127
|
+
* Falls back to the provider default (then the global default) so callers
|
|
128
|
+
* always get a usable entry even if settings name an unknown model.
|
|
129
|
+
*/
|
|
106
130
|
function resolveSTTModel(provider, model) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
131
|
+
if (provider) {
|
|
132
|
+
if (model) {
|
|
133
|
+
const exact = STT_MODELS.find((m) => m.provider === provider && m.model === model);
|
|
134
|
+
if (exact) return exact;
|
|
135
|
+
}
|
|
136
|
+
const providerDefault = defaultModelForProvider(provider);
|
|
137
|
+
if (providerDefault) return providerDefault;
|
|
138
|
+
}
|
|
139
|
+
return DEFAULT_STT_MODEL;
|
|
116
140
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
STT_MODELS,
|
|
121
|
-
defaultModelForProvider,
|
|
122
|
-
resolveSTTModel,
|
|
123
|
-
sttModelsForProvider,
|
|
124
|
-
sttProviders
|
|
125
|
-
};
|
|
141
|
+
//#endregion
|
|
142
|
+
export { DEFAULT_STT_MODEL, DEFAULT_STT_PROVIDER, STT_MODELS, defaultModelForProvider, resolveSTTModel, sttModelsForProvider, sttProviders };
|
|
143
|
+
|
|
126
144
|
//# sourceMappingURL=stt-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/voice/stt-registry.ts"],"sourcesContent":["/**\n * Speech-to-text (STT) model registry for push-to-talk voice input.\n *\n * This is the single source of truth shared by the `/voice` settings picker,\n * settings validation, and the cloud transcription resolver. Entries are\n * derived from models.dev (https://models.dev/api.json): a model is treated as\n * STT when its modalities are audio-in / text-out with no text input.\n *\n * Most cloud providers here speak the OpenAI `/audio/transcriptions` shape, so\n * the cloud engine resolves them through Mastra's `OpenAIVoice` (`MastraVoice`)\n * built on the OpenAI client — `openai` uses the default endpoint, every other\n * OpenAI-compatible host supplies its `baseURL`. Deepgram is the exception: it\n * is not OpenAI-compatible, so it resolves through `@mastra/voice-deepgram`\n * (`DeepgramVoice`). Deepgram is not in the models.dev STT snapshot but is a\n * first-class hosted STT provider, so it is added deliberately.\n *\n * The accompanying snapshot test (`__tests__/stt-registry.test.ts`) re-derives\n * the models.dev-backed entries from a checked-in snapshot so this list stays\n * honest and can be refreshed deliberately rather than drifting by hand.\n */\n\n/**\n * How a provider's transcription model is constructed.\n * - `openai`: `OpenAIVoice` with the default OpenAI endpoint.\n * - `openai-compatible`: `OpenAIVoice` pointed at the host's `baseURL`\n * (its `/audio/transcriptions` endpoint follows the OpenAI shape).\n * - `deepgram`: `DeepgramVoice` from `@mastra/voice-deepgram` (not\n * OpenAI-compatible; uses the Deepgram SDK).\n */\nexport type STTResolver = 'openai' | 'openai-compatible' | 'deepgram';\n\nexport interface STTModel {\n /** models.dev provider id (also the AuthStorage key for the API key). */\n provider: string;\n /** Bare model id passed to the provider's transcription factory. */\n model: string;\n /** Human-friendly label for the picker. */\n label: string;\n /** How to build the transcription model. */\n resolver: STTResolver;\n /** Base URL for `openai-compatible` providers (from models.dev `api`). */\n baseURL?: string;\n}\n\n/**\n * The curated STT catalog. Order matters: the first entry for a provider is its\n * default model, and the first overall entry (`openai`/`whisper-1`) is the\n * global default.\n */\nexport const STT_MODELS: readonly STTModel[] = [\n // OpenAI — default provider.\n { provider: 'openai', model: 'whisper-1', label: 'OpenAI Whisper', resolver: 'openai' },\n { provider: 'openai', model: 'gpt-4o-transcribe', label: 'OpenAI GPT-4o Transcribe', resolver: 'openai' },\n {\n provider: 'openai',\n model: 'gpt-4o-mini-transcribe',\n label: 'OpenAI GPT-4o mini Transcribe',\n resolver: 'openai',\n },\n // Groq — fast, cheap whisper hosting via its OpenAI-compatible endpoint.\n {\n provider: 'groq',\n model: 'whisper-large-v3-turbo',\n label: 'Groq Whisper Large v3 Turbo',\n resolver: 'openai-compatible',\n baseURL: 'https://api.groq.com/openai/v1',\n },\n {\n provider: 'groq',\n model: 'whisper-large-v3',\n label: 'Groq Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://api.groq.com/openai/v1',\n },\n // Deepgram — dedicated STT provider (not OpenAI-compatible); via @mastra/voice-deepgram.\n { provider: 'deepgram', model: 'nova-3', label: 'Deepgram Nova-3', resolver: 'deepgram' },\n // Alibaba Qwen ASR (OpenAI-compatible endpoints).\n {\n provider: 'alibaba',\n model: 'qwen3-asr-flash',\n label: 'Alibaba Qwen3 ASR Flash',\n resolver: 'openai-compatible',\n baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',\n },\n {\n provider: 'alibaba-cn',\n model: 'qwen3-asr-flash',\n label: 'Alibaba Qwen3 ASR Flash (China)',\n resolver: 'openai-compatible',\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n },\n // Whisper hosts (OpenAI-compatible endpoints).\n {\n provider: 'scaleway',\n model: 'whisper-large-v3',\n label: 'Scaleway Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://api.scaleway.ai/v1',\n },\n {\n provider: 'nvidia',\n model: 'openai/whisper-large-v3',\n label: 'Nvidia Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://integrate.api.nvidia.com/v1',\n },\n {\n provider: 'nearai',\n model: 'openai/whisper-large-v3',\n label: 'NEAR AI Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://cloud-api.near.ai/v1',\n },\n {\n provider: 'evroc',\n model: 'openai/whisper-large-v3-turbo',\n label: 'evroc Whisper Large v3 Turbo',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n {\n provider: 'evroc',\n model: 'openai/whisper-large-v3',\n label: 'evroc Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n {\n provider: 'evroc',\n model: 'KBLab/kb-whisper-large',\n label: 'evroc KB-Whisper Large',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n] as const;\n\n/** The global default STT model (first registry entry). */\nexport const DEFAULT_STT_MODEL: STTModel = STT_MODELS[0]!;\n\n/** The default STT provider when none is configured. */\nexport const DEFAULT_STT_PROVIDER = DEFAULT_STT_MODEL.provider;\n\n/** Unique provider ids in registry order. */\nexport function sttProviders(): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const m of STT_MODELS) {\n if (!seen.has(m.provider)) {\n seen.add(m.provider);\n out.push(m.provider);\n }\n }\n return out;\n}\n\n/** All models offered for a provider, in registry order. */\nexport function sttModelsForProvider(provider: string): STTModel[] {\n return STT_MODELS.filter(m => m.provider === provider);\n}\n\n/** The default (first) model for a provider, or undefined if unknown. */\nexport function defaultModelForProvider(provider: string): STTModel | undefined {\n return STT_MODELS.find(m => m.provider === provider);\n}\n\n/**\n * Resolve a provider/model pair to a concrete registry entry.\n * Falls back to the provider default (then the global default) so callers\n * always get a usable entry even if settings name an unknown model.\n */\nexport function resolveSTTModel(provider?: string, model?: string): STTModel {\n if (provider) {\n if (model) {\n const exact = STT_MODELS.find(m => m.provider === provider && m.model === model);\n if (exact) return exact;\n }\n const providerDefault = defaultModelForProvider(provider);\n if (providerDefault) return providerDefault;\n }\n return DEFAULT_STT_MODEL;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"stt-registry.js","names":[],"sources":["../../src/voice/stt-registry.ts"],"sourcesContent":["/**\n * Speech-to-text (STT) model registry for push-to-talk voice input.\n *\n * This is the single source of truth shared by the `/voice` settings picker,\n * settings validation, and the cloud transcription resolver. Entries are\n * derived from models.dev (https://models.dev/api.json): a model is treated as\n * STT when its modalities are audio-in / text-out with no text input.\n *\n * Most cloud providers here speak the OpenAI `/audio/transcriptions` shape, so\n * the cloud engine resolves them through Mastra's `OpenAIVoice` (`MastraVoice`)\n * built on the OpenAI client — `openai` uses the default endpoint, every other\n * OpenAI-compatible host supplies its `baseURL`. Deepgram is the exception: it\n * is not OpenAI-compatible, so it resolves through `@mastra/voice-deepgram`\n * (`DeepgramVoice`). Deepgram is not in the models.dev STT snapshot but is a\n * first-class hosted STT provider, so it is added deliberately.\n *\n * The accompanying snapshot test (`__tests__/stt-registry.test.ts`) re-derives\n * the models.dev-backed entries from a checked-in snapshot so this list stays\n * honest and can be refreshed deliberately rather than drifting by hand.\n */\n\n/**\n * How a provider's transcription model is constructed.\n * - `openai`: `OpenAIVoice` with the default OpenAI endpoint.\n * - `openai-compatible`: `OpenAIVoice` pointed at the host's `baseURL`\n * (its `/audio/transcriptions` endpoint follows the OpenAI shape).\n * - `deepgram`: `DeepgramVoice` from `@mastra/voice-deepgram` (not\n * OpenAI-compatible; uses the Deepgram SDK).\n */\nexport type STTResolver = 'openai' | 'openai-compatible' | 'deepgram';\n\nexport interface STTModel {\n /** models.dev provider id (also the AuthStorage key for the API key). */\n provider: string;\n /** Bare model id passed to the provider's transcription factory. */\n model: string;\n /** Human-friendly label for the picker. */\n label: string;\n /** How to build the transcription model. */\n resolver: STTResolver;\n /** Base URL for `openai-compatible` providers (from models.dev `api`). */\n baseURL?: string;\n}\n\n/**\n * The curated STT catalog. Order matters: the first entry for a provider is its\n * default model, and the first overall entry (`openai`/`whisper-1`) is the\n * global default.\n */\nexport const STT_MODELS: readonly STTModel[] = [\n // OpenAI — default provider.\n { provider: 'openai', model: 'whisper-1', label: 'OpenAI Whisper', resolver: 'openai' },\n { provider: 'openai', model: 'gpt-4o-transcribe', label: 'OpenAI GPT-4o Transcribe', resolver: 'openai' },\n {\n provider: 'openai',\n model: 'gpt-4o-mini-transcribe',\n label: 'OpenAI GPT-4o mini Transcribe',\n resolver: 'openai',\n },\n // Groq — fast, cheap whisper hosting via its OpenAI-compatible endpoint.\n {\n provider: 'groq',\n model: 'whisper-large-v3-turbo',\n label: 'Groq Whisper Large v3 Turbo',\n resolver: 'openai-compatible',\n baseURL: 'https://api.groq.com/openai/v1',\n },\n {\n provider: 'groq',\n model: 'whisper-large-v3',\n label: 'Groq Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://api.groq.com/openai/v1',\n },\n // Deepgram — dedicated STT provider (not OpenAI-compatible); via @mastra/voice-deepgram.\n { provider: 'deepgram', model: 'nova-3', label: 'Deepgram Nova-3', resolver: 'deepgram' },\n // Alibaba Qwen ASR (OpenAI-compatible endpoints).\n {\n provider: 'alibaba',\n model: 'qwen3-asr-flash',\n label: 'Alibaba Qwen3 ASR Flash',\n resolver: 'openai-compatible',\n baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',\n },\n {\n provider: 'alibaba-cn',\n model: 'qwen3-asr-flash',\n label: 'Alibaba Qwen3 ASR Flash (China)',\n resolver: 'openai-compatible',\n baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',\n },\n // Whisper hosts (OpenAI-compatible endpoints).\n {\n provider: 'scaleway',\n model: 'whisper-large-v3',\n label: 'Scaleway Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://api.scaleway.ai/v1',\n },\n {\n provider: 'nvidia',\n model: 'openai/whisper-large-v3',\n label: 'Nvidia Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://integrate.api.nvidia.com/v1',\n },\n {\n provider: 'nearai',\n model: 'openai/whisper-large-v3',\n label: 'NEAR AI Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://cloud-api.near.ai/v1',\n },\n {\n provider: 'evroc',\n model: 'openai/whisper-large-v3-turbo',\n label: 'evroc Whisper Large v3 Turbo',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n {\n provider: 'evroc',\n model: 'openai/whisper-large-v3',\n label: 'evroc Whisper Large v3',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n {\n provider: 'evroc',\n model: 'KBLab/kb-whisper-large',\n label: 'evroc KB-Whisper Large',\n resolver: 'openai-compatible',\n baseURL: 'https://models.think.evroc.com/v1',\n },\n] as const;\n\n/** The global default STT model (first registry entry). */\nexport const DEFAULT_STT_MODEL: STTModel = STT_MODELS[0]!;\n\n/** The default STT provider when none is configured. */\nexport const DEFAULT_STT_PROVIDER = DEFAULT_STT_MODEL.provider;\n\n/** Unique provider ids in registry order. */\nexport function sttProviders(): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const m of STT_MODELS) {\n if (!seen.has(m.provider)) {\n seen.add(m.provider);\n out.push(m.provider);\n }\n }\n return out;\n}\n\n/** All models offered for a provider, in registry order. */\nexport function sttModelsForProvider(provider: string): STTModel[] {\n return STT_MODELS.filter(m => m.provider === provider);\n}\n\n/** The default (first) model for a provider, or undefined if unknown. */\nexport function defaultModelForProvider(provider: string): STTModel | undefined {\n return STT_MODELS.find(m => m.provider === provider);\n}\n\n/**\n * Resolve a provider/model pair to a concrete registry entry.\n * Falls back to the provider default (then the global default) so callers\n * always get a usable entry even if settings name an unknown model.\n */\nexport function resolveSTTModel(provider?: string, model?: string): STTModel {\n if (provider) {\n if (model) {\n const exact = STT_MODELS.find(m => m.provider === provider && m.model === model);\n if (exact) return exact;\n }\n const providerDefault = defaultModelForProvider(provider);\n if (providerDefault) return providerDefault;\n }\n return DEFAULT_STT_MODEL;\n}\n"],"mappings":";;;;;;AAiDA,MAAa,aAAkC;CAE7C;EAAE,UAAU;EAAU,OAAO;EAAa,OAAO;EAAkB,UAAU;CAAS;CACtF;EAAE,UAAU;EAAU,OAAO;EAAqB,OAAO;EAA4B,UAAU;CAAS;CACxG;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;CACZ;CAEA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CAEA;EAAE,UAAU;EAAY,OAAO;EAAU,OAAO;EAAmB,UAAU;CAAW;CAExF;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CAEA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;CACA;EACE,UAAU;EACV,OAAO;EACP,OAAO;EACP,UAAU;EACV,SAAS;CACX;AACF;;AAGA,MAAa,oBAA8B,WAAW;;AAGtD,MAAa,uBAAuB,kBAAkB;;AAGtD,SAAgB,eAAyB;CACvC,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,MAAgB,CAAC;CACvB,KAAK,MAAM,KAAK,YACd,IAAI,CAAC,KAAK,IAAI,EAAE,QAAQ,GAAG;EACzB,KAAK,IAAI,EAAE,QAAQ;EACnB,IAAI,KAAK,EAAE,QAAQ;CACrB;CAEF,OAAO;AACT;;AAGA,SAAgB,qBAAqB,UAA8B;CACjE,OAAO,WAAW,QAAO,MAAK,EAAE,aAAa,QAAQ;AACvD;;AAGA,SAAgB,wBAAwB,UAAwC;CAC9E,OAAO,WAAW,MAAK,MAAK,EAAE,aAAa,QAAQ;AACrD;;;;;;AAOA,SAAgB,gBAAgB,UAAmB,OAA0B;CAC3E,IAAI,UAAU;EACZ,IAAI,OAAO;GACT,MAAM,QAAQ,WAAW,MAAK,MAAK,EAAE,aAAa,YAAY,EAAE,UAAU,KAAK;GAC/E,IAAI,OAAO,OAAO;EACpB;EACA,MAAM,kBAAkB,wBAAwB,QAAQ;EACxD,IAAI,iBAAiB,OAAO;CAC9B;CACA,OAAO;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/code-sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0-alpha.2",
|
|
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": {
|
|
@@ -56,25 +56,25 @@
|
|
|
56
56
|
"vscode-languageserver-protocol": "^3.17.5",
|
|
57
57
|
"yaml": "^2.7.1",
|
|
58
58
|
"zod": "^4.3.6",
|
|
59
|
-
"@mastra/core": "1.54.0-alpha.0",
|
|
60
59
|
"@mastra/agent-browser": "0.4.1",
|
|
60
|
+
"@mastra/core": "1.54.0-alpha.2",
|
|
61
|
+
"@mastra/duckdb": "1.5.2-alpha.0",
|
|
61
62
|
"@mastra/fastembed": "1.2.0",
|
|
62
|
-
"@mastra/github-signals": "0.2.2",
|
|
63
|
-
"@mastra/duckdb": "1.5.1",
|
|
64
|
-
"@mastra/libsql": "1.18.0-alpha.0",
|
|
65
63
|
"@mastra/mcp": "1.15.0",
|
|
66
|
-
"@mastra/
|
|
67
|
-
"@mastra/schema-compat": "1.3.4",
|
|
68
|
-
"@mastra/pg": "1.18.0-alpha.0",
|
|
69
|
-
"@mastra/stagehand": "0.3.1",
|
|
64
|
+
"@mastra/libsql": "1.18.0-alpha.1",
|
|
70
65
|
"@mastra/memory": "1.24.0-alpha.0",
|
|
66
|
+
"@mastra/github-signals": "0.2.2",
|
|
67
|
+
"@mastra/observability": "1.16.3-alpha.0",
|
|
68
|
+
"@mastra/pg": "1.18.0-alpha.2",
|
|
69
|
+
"@mastra/stagehand": "0.3.1",
|
|
70
|
+
"@mastra/schema-compat": "1.3.4",
|
|
71
71
|
"@mastra/tavily": "1.1.1"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@libsql/client": "^0.17.4",
|
|
75
75
|
"@types/node": "22.20.1",
|
|
76
76
|
"eslint": "^10.7.0",
|
|
77
|
-
"
|
|
77
|
+
"tsdown": "0.22.9",
|
|
78
78
|
"tsx": "^4.23.1",
|
|
79
79
|
"typescript": "^6.0.3",
|
|
80
80
|
"typescript-eslint": "^8.57.0",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"node": ">=22.19.0"
|
|
87
87
|
},
|
|
88
88
|
"scripts": {
|
|
89
|
-
"build:lib": "
|
|
89
|
+
"build:lib": "tsdown --silent --config tsdown.config.ts",
|
|
90
90
|
"check": "tsc --noEmit",
|
|
91
91
|
"test": "vitest run",
|
|
92
92
|
"lint": "oxlint . && eslint .",
|
package/dist/acp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/acp.ts"],"sourcesContent":["export { MastraCodeAcpAgent } from './acp/agent.js';\n"],"mappings":"AAAA,SAAS,0BAA0B;","names":[]}
|
package/dist/auth/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/auth/index.ts"],"sourcesContent":["/**\n * OAuth credential management for AI providers.\n */\n\nexport * from './types.js';\nexport * from './storage.js';\nexport { anthropicOAuthProvider } from './providers/anthropic.js';\nexport { githubCopilotOAuthProvider } from './providers/github-copilot.js';\nexport { openaiCodexOAuthProvider } from './providers/openai-codex.js';\nexport { xaiOAuthProvider } from './providers/xai.js';\n"],"mappings":"AAIA,cAAc;AACd,cAAc;AACd,SAAS,8BAA8B;AACvC,SAAS,kCAAkC;AAC3C,SAAS,gCAAgC;AACzC,SAAS,wBAAwB;","names":[]}
|
package/dist/auth/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/evals/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/evals/index.ts"],"sourcesContent":["export { buildEvalContext } from './context-builder.js';\nexport type { MastraCodeEvalContext, BuildContextOptions } from './context-builder.js';\nexport { createOutcomeScorer, createEfficiencyScorer } from './scorers/index.js';\n"],"mappings":"AAAA,SAAS,wBAAwB;AAEjC,SAAS,qBAAqB,8BAA8B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/evals/scorers/index.ts"],"sourcesContent":["export { createOutcomeScorer } from './outcome.js';\nexport { createEfficiencyScorer } from './efficiency.js';\n"],"mappings":"AAAA,SAAS,2BAA2B;AACpC,SAAS,8BAA8B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/headless/index.ts"],"sourcesContent":["/**\n * Public headless / programmatic API for MastraCode.\n *\n * Programmatic (CI / Node) usage:\n * ```ts\n * import { createMastraCode } from 'mastracode';\n * import { runMC } from 'mastracode/headless';\n *\n * const { controller, session } = await createMastraCode({ settingsPath });\n * const run = runMC({ controller, session, prompt: 'Fix the bug' });\n * for await (const event of run) { ... } // optional live events\n * const result = await run.result; // typed RunMCResult\n * ```\n *\n * The CLI adapter (`runMCCli`) wraps the same `createMastraCode` → `runMC` flow.\n */\n\n// Core runner\nexport { runMC } from './run-mc.js';\n\n// Resolution policy\nexport { autoApprovePolicy, denyPolicy, permissionModeToPolicy } from './policy.js';\n\n// Formatters (pure, sink-agnostic)\nexport {\n formatHuman,\n formatJsonl,\n renderTextResult,\n renderJsonResult,\n createHumanFormatState,\n truncate,\n} from './format.js';\nexport type { FormattedOutput, HumanFormatState } from './format.js';\n\n// CLI adapter\nexport { runMCCli, hasHeadlessFlag, parseHeadlessArgs, printHeadlessUsage } from './cli.js';\nexport type { HeadlessArgs, OutputMode } from './cli.js';\n\n// Shared types\nexport type {\n RunMCOptions,\n RunMCResult,\n RunMCStatus,\n RunMCUsage,\n RunMCToolCall,\n RunMCToolResult,\n RunMCError,\n RunMCThreadOptions,\n MCRun,\n RunMCGoalOptions,\n ResolutionPolicy,\n RunMode,\n ThinkingLevel,\n PermissionMode,\n} from './types.js';\nexport { VALID_MODES, VALID_THINKING_LEVELS, VALID_PERMISSION_MODES } from './types.js';\n"],"mappings":"AAkBA,SAAS,aAAa;AAGtB,SAAS,mBAAmB,YAAY,8BAA8B;AAGtE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP,SAAS,UAAU,iBAAiB,mBAAmB,0BAA0B;AAoBjF,SAAS,aAAa,uBAAuB,8BAA8B;","names":[]}
|
package/dist/hooks/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/index.ts"],"sourcesContent":["export { HookManager } from './manager.js';\nexport { loadHooksConfig, getProjectHooksPath, getGlobalHooksPath, VALID_EVENTS } from './config.js';\nexport { executeHook, runHooksForEvent, matchesHook } from './executor.js';\nexport { isBlockingEvent } from './types.js';\nexport type {\n HookEventName,\n HookDefinition,\n HookMatcher,\n HooksConfig,\n HookStdin,\n HookStdinBase,\n HookStdinToolEvent,\n HookStdinUserPrompt,\n HookStdinStop,\n HookStdinSession,\n HookStdinNotification,\n HookStdinAgentStart,\n HookStdinAgentEnd,\n HookStdinPermissionRequest,\n HookStdinPermissionResult,\n HookStdinInterrupt,\n HookStdinSubagentStart,\n HookStdinSubagentEnd,\n HookStdout,\n HookResult,\n HookEventResult,\n BlockingHookEvent,\n LifecycleHookEvent,\n PermissionKind,\n PermissionDecision,\n InterruptReason,\n} from './types.js';\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB,qBAAqB,oBAAoB,oBAAoB;AACvF,SAAS,aAAa,kBAAkB,mBAAmB;AAC3D,SAAS,uBAAuB;","names":[]}
|
package/dist/lsp/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lsp/index.ts"],"sourcesContent":["export { LSPClient } from './client.js';\nexport { getServersForFile } from './server.js';\nexport { lspManager } from './manager.js';\n"],"mappings":"AAAA,SAAS,iBAAiB;AAC1B,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;","names":[]}
|
package/dist/mcp/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/index.ts"],"sourcesContent":["export { createMcpManager } from './manager.js';\nexport type { McpManager, McpInitResult } from './manager.js';\nexport { loadMcpConfig, getProjectMcpPath, getGlobalMcpPath, getClaudeSettingsPath } from './config.js';\nexport type {\n McpConfig,\n McpServerConfig,\n McpStdioServerConfig,\n McpHttpServerConfig,\n McpSkippedServer,\n McpServerStatus,\n} from './types.js';\n"],"mappings":"AAAA,SAAS,wBAAwB;AAEjC,SAAS,eAAe,mBAAmB,kBAAkB,6BAA6B;","names":[]}
|
package/dist/mcp/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/onboarding/index.ts"],"sourcesContent":["export { getAvailableModePacks, getAvailableOmPacks, ONBOARDING_VERSION } from './packs.js';\nexport type { ModePack, OMPack, ProviderAccess, ProviderAccessLevel } from './packs.js';\nexport {\n loadSettings,\n saveSettings,\n getSettingsPath,\n resolveModelDefaults,\n resolveOmModel,\n resolveOmRoleModel,\n} from './settings.js';\nexport type { GlobalSettings, CustomPack } from './settings.js';\n"],"mappings":"AAAA,SAAS,uBAAuB,qBAAqB,0BAA0B;AAE/E;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/tools/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tools/index.ts"],"sourcesContent":["/**\n * Tool exports for Mastra Code\n */\n\nexport { createWebSearchTool, createWebExtractTool, hasTavilyKey } from './web-search.js';\nexport { requestSandboxAccessTool } from './request-sandbox-access.js';\n"],"mappings":"AAIA,SAAS,qBAAqB,sBAAsB,oBAAoB;AACxE,SAAS,gCAAgC;","names":[]}
|