mastracode 0.49.1-alpha.0 → 0.50.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/cli.cjs +3 -3
  3. package/dist/cli.js +3 -3
  4. package/dist/docs/SKILL.md +1 -1
  5. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  6. package/dist/{login-command-EvJk2jIW.js → login-command-CT7RA_DY.js} +2 -2
  7. package/dist/{login-command-EvJk2jIW.js.map → login-command-CT7RA_DY.js.map} +1 -1
  8. package/dist/{login-command-COPViada.cjs → login-command-DvbCd7Pz.cjs} +2 -2
  9. package/dist/{login-command-COPViada.cjs.map → login-command-DvbCd7Pz.cjs.map} +1 -1
  10. package/dist/tui/components/github-pr-picker.d.ts +2 -0
  11. package/dist/tui/components/github-pr-picker.d.ts.map +1 -1
  12. package/dist/tui/components/login-account-manager.d.ts +2 -0
  13. package/dist/tui/components/login-account-manager.d.ts.map +1 -1
  14. package/dist/tui/components/login-mode-selector.d.ts +1 -1
  15. package/dist/tui/components/login-mode-selector.d.ts.map +1 -1
  16. package/dist/tui/components/login-selector.d.ts +2 -0
  17. package/dist/tui/components/login-selector.d.ts.map +1 -1
  18. package/dist/tui/components/model-selector.d.ts +2 -1
  19. package/dist/tui/components/model-selector.d.ts.map +1 -1
  20. package/dist/tui/components/picker-list.d.ts +27 -0
  21. package/dist/tui/components/picker-list.d.ts.map +1 -0
  22. package/dist/tui/components/thread-selector.d.ts +2 -1
  23. package/dist/tui/components/thread-selector.d.ts.map +1 -1
  24. package/dist/tui/voice/engines/cloud-engine.d.ts.map +1 -1
  25. package/dist/tui/voice/transcribe.d.ts +4 -54
  26. package/dist/tui/voice/transcribe.d.ts.map +1 -1
  27. package/dist/{tui-D5ou9NB5.js → tui-BR_6DOFR.js} +156 -229
  28. package/dist/tui-BR_6DOFR.js.map +1 -0
  29. package/dist/{tui-C0cxqVft.cjs → tui-BWYR3kLQ.cjs} +155 -228
  30. package/dist/tui-BWYR3kLQ.cjs.map +1 -0
  31. package/dist/tui.cjs +1 -1
  32. package/dist/tui.js +1 -1
  33. package/package.json +8 -10
  34. package/dist/tui-C0cxqVft.cjs.map +0 -1
  35. package/dist/tui-D5ou9NB5.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # mastracode
2
2
 
3
+ ## 0.50.0-alpha.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies:
8
+ - @mastra/core@1.83.0-alpha.2
9
+ - @mastra/code-sdk@1.19.0-alpha.2
10
+
11
+ ## 0.50.0-alpha.1
12
+
13
+ ### Minor Changes
14
+
15
+ - Added Mistral Voxtral as a speech-to-text provider for voice input. Pick `mistral` in `/voice` and set `MISTRAL_API_KEY` (or add a key with `/api-keys`) to dictate with `voxtral-mini-latest`. ([#29363](https://github.com/mastra-ai/mastra/pull/29363))
16
+
17
+ Fixed voice input with Groq and the other OpenAI-compatible hosts failing with "No API key provided for speech model" when `OPENAI_API_KEY` was not set.
18
+
19
+ Fixed voice input with NEAR AI ignoring `NEARAI_API_KEY`. `NEAR_AI_API_KEY` is no longer read; rename it to `NEARAI_API_KEY`.
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [[`a0068a9`](https://github.com/mastra-ai/mastra/commit/a0068a9ad1fb0a31ae60a07ecbeae41a32ea4081), [`bb0fcd6`](https://github.com/mastra-ai/mastra/commit/bb0fcd6211a416cece10c20e11f6f3cb70b4c93b), [`459757f`](https://github.com/mastra-ai/mastra/commit/459757f07de6905c6abdfc3b08a7f48a808dcc6b), [`592a907`](https://github.com/mastra-ai/mastra/commit/592a9071cae12ef7d1defa5f7942f1a9cbdaa340), [`3cf319b`](https://github.com/mastra-ai/mastra/commit/3cf319b5af74aeebb1b70bd29ec539fbd2af4bb8), [`8960f55`](https://github.com/mastra-ai/mastra/commit/8960f55dec7ebf39b460ee8664509d2924065b86), [`b518fc9`](https://github.com/mastra-ai/mastra/commit/b518fc9abeb05093aff4b1bb3e74f018e3612078), [`68869db`](https://github.com/mastra-ai/mastra/commit/68869dbb53034aee5868bccef4691af61bf6656e), [`cd369c3`](https://github.com/mastra-ai/mastra/commit/cd369c334cf5af81597d7d61e7419b390f92365b), [`f94beac`](https://github.com/mastra-ai/mastra/commit/f94beac86288cb94e2973c9ed492c8f0d68b919d), [`544224c`](https://github.com/mastra-ai/mastra/commit/544224c38f61d08a0b9952d202366fb3c6cc5bd9), [`a873e2d`](https://github.com/mastra-ai/mastra/commit/a873e2df4335b4cd7d50d4d2d26b166f976af9e3), [`d6a5f98`](https://github.com/mastra-ai/mastra/commit/d6a5f98df3a1f6d11743e0bdf150358d7db4dd40), [`d6a5f98`](https://github.com/mastra-ai/mastra/commit/d6a5f98df3a1f6d11743e0bdf150358d7db4dd40), [`defb820`](https://github.com/mastra-ai/mastra/commit/defb82048f6e78bde95c10ffa0ca36f20d714f41), [`23308f9`](https://github.com/mastra-ai/mastra/commit/23308f9c193ef852c28f6ec1c6e872f75363c5f7), [`83b6997`](https://github.com/mastra-ai/mastra/commit/83b6997a2ac9e2a3d94bcfe4de181b32a26cf7c6), [`36bbc29`](https://github.com/mastra-ai/mastra/commit/36bbc291292170e68774d6e9a7c76b6a5d930dd8), [`f79db0d`](https://github.com/mastra-ai/mastra/commit/f79db0de42bc8205fe62b39c1fe78932661b5e14), [`e14e5df`](https://github.com/mastra-ai/mastra/commit/e14e5dfb7a50422ef84e3623c823d8b782dec330), [`8d07b0b`](https://github.com/mastra-ai/mastra/commit/8d07b0b293812d84c3f45c2806eb53ed45f58324), [`f7320ab`](https://github.com/mastra-ai/mastra/commit/f7320abd205aa865e3ae467b7bf82373af30a6aa), [`d6a5f98`](https://github.com/mastra-ai/mastra/commit/d6a5f98df3a1f6d11743e0bdf150358d7db4dd40), [`459757f`](https://github.com/mastra-ai/mastra/commit/459757f07de6905c6abdfc3b08a7f48a808dcc6b), [`2f93851`](https://github.com/mastra-ai/mastra/commit/2f93851c37410a9d9740263a636e802ef9ee2f8d), [`75983cd`](https://github.com/mastra-ai/mastra/commit/75983cdb05ffa4f70aac528220c7fbe5cfa2baf3)]:
24
+ - @mastra/core@1.83.0-alpha.1
25
+ - @mastra/code-sdk@1.19.0-alpha.1
26
+ - @mastra/mcp@2.9.0-alpha.1
27
+ - @mastra/pg@1.36.0-alpha.1
28
+ - @mastra/duckdb@1.19.0-alpha.1
29
+ - @mastra/observability@1.23.2-alpha.1
30
+ - @mastra/libsql@1.30.0-alpha.0
31
+
3
32
  ## 0.49.1-alpha.0
4
33
 
5
34
  ### Patch Changes
package/dist/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- const require_tui = require("./tui-C0cxqVft.cjs");
2
+ const require_tui = require("./tui-BWYR3kLQ.cjs");
3
3
  let _mastra_code_sdk = require("@mastra/code-sdk");
4
4
  let child_process = require("child_process");
5
5
  let fs = require("fs");
@@ -265,7 +265,7 @@ async function runUpdateCommand({ args = [], output = process.stdout, errorOutpu
265
265
  }
266
266
  // src/version.ts
267
267
  function getCurrentVersion() {
268
- return "0.49.1-alpha.0";
268
+ return "0.50.0-alpha.2";
269
269
  }
270
270
  /** Whether the invocation is `mastracode --version` or `mastracode -v`. */
271
271
  function isVersionCommand(argv) {
@@ -650,7 +650,7 @@ async function main() {
650
650
  }
651
651
  const loginIndex = process.argv.findIndex((arg, index) => index >= 2 && arg !== "--acp" && arg !== "--dangerous-auto-approve");
652
652
  if (process.argv[loginIndex] === "login") {
653
- const { runLoginCommand } = await Promise.resolve().then(() => require("./login-command-COPViada.cjs"));
653
+ const { runLoginCommand } = await Promise.resolve().then(() => require("./login-command-DvbCd7Pz.cjs"));
654
654
  const code = await runLoginCommand({ args: process.argv.slice(loginIndex + 1) });
655
655
  await new Promise((resolve) => process.stdout.write("", resolve));
656
656
  return process.exit(code);
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { D as closeActiveBrowser, E as activeBrowserGeneration, O as discardBrowser, T as TUI_CO_AUTHOR, _ as normalizeThemePreference, a as formatUpdateHeader, g as applyThemePreference, i as formatUpToDate, k as replaceActiveBrowser, n as formatInstallingLabel, o as formatUpdateOutcome, r as formatRegistryError, t as MastraTUI } from "./tui-D5ou9NB5.js";
2
+ import { D as closeActiveBrowser, E as activeBrowserGeneration, O as discardBrowser, T as TUI_CO_AUTHOR, _ as normalizeThemePreference, a as formatUpdateHeader, g as applyThemePreference, i as formatUpToDate, k as replaceActiveBrowser, n as formatInstallingLabel, o as formatUpdateOutcome, r as formatRegistryError, t as MastraTUI } from "./tui-BR_6DOFR.js";
3
3
  import { createMastraCode, resolveSubagentsSetting } from "@mastra/code-sdk";
4
4
  import { spawn } from "child_process";
5
5
  import fs from "fs";
@@ -264,7 +264,7 @@ async function runUpdateCommand({ args = [], output = process.stdout, errorOutpu
264
264
  }
265
265
  // src/version.ts
266
266
  function getCurrentVersion() {
267
- return "0.49.1-alpha.0";
267
+ return "0.50.0-alpha.2";
268
268
  }
269
269
  /** Whether the invocation is `mastracode --version` or `mastracode -v`. */
270
270
  function isVersionCommand(argv) {
@@ -649,7 +649,7 @@ async function main() {
649
649
  }
650
650
  const loginIndex = process.argv.findIndex((arg, index) => index >= 2 && arg !== "--acp" && arg !== "--dangerous-auto-approve");
651
651
  if (process.argv[loginIndex] === "login") {
652
- const { runLoginCommand } = await import("./login-command-EvJk2jIW.js");
652
+ const { runLoginCommand } = await import("./login-command-CT7RA_DY.js");
653
653
  const code = await runLoginCommand({ args: process.argv.slice(loginIndex + 1) });
654
654
  await new Promise((resolve) => process.stdout.write("", resolve));
655
655
  return process.exit(code);
@@ -3,7 +3,7 @@ name: mastracode
3
3
  description: Documentation for mastracode. Use when working with mastracode APIs, configuration, or implementation.
4
4
  metadata:
5
5
  package: "mastracode"
6
- version: "0.49.1-alpha.0"
6
+ version: "0.50.0-alpha.2"
7
7
  ---
8
8
 
9
9
  ## When to use
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.49.1-alpha.0",
2
+ "version": "0.50.0-alpha.2",
3
3
  "package": "mastracode",
4
4
  "exports": {},
5
5
  "modules": {}
@@ -1,9 +1,9 @@
1
1
  import { AuthStorage, getOAuthProviders } from "@mastra/code-sdk/auth/storage";
2
- import { Writable } from "stream";
3
2
  import { openUrlInBrowser } from "@mastra/code-sdk/utils/open-url";
4
3
  import { parseArgs } from "util";
5
4
  import { PROVIDER_REGISTRY } from "@mastra/core/llm";
6
5
  import { createInterface } from "readline";
6
+ import { Writable } from "stream";
7
7
  // src/login-command.ts
8
8
  async function choose(ask, labels, say) {
9
9
  labels.forEach((label, index) => say(` ${index + 1}. ${label}`));
@@ -94,4 +94,4 @@ async function runLoginCommand({ args = [], input = process.stdin, output = proc
94
94
  }
95
95
  export { runLoginCommand };
96
96
 
97
- //# sourceMappingURL=login-command-EvJk2jIW.js.map
97
+ //# sourceMappingURL=login-command-CT7RA_DY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-command-EvJk2jIW.js","names":[],"sources":["../src/login-command.ts"],"sourcesContent":["import { createInterface } from 'node:readline';\nimport { Writable } from 'node:stream';\nimport type { Readable } from 'node:stream';\nimport { parseArgs } from 'node:util';\nimport { AuthStorage, getOAuthProviders } from '@mastra/code-sdk/auth/storage';\nimport type { OAuthProviderInterface } from '@mastra/code-sdk/auth/types';\nimport { openUrlInBrowser } from '@mastra/code-sdk/utils/open-url';\nimport { PROVIDER_REGISTRY } from '@mastra/core/llm';\n\ntype Ask = (prompt: string, options?: { secret?: boolean }) => Promise<string>;\n\ninterface LoginCommandOptions {\n args?: string[];\n input?: Readable & { isTTY?: boolean };\n output?: NodeJS.WritableStream;\n authStorage?: AuthStorage;\n openUrl?: (url: string) => void;\n}\n\nasync function choose(ask: Ask, labels: string[], say: (line: string) => void): Promise<number | undefined> {\n labels.forEach((label, index) => say(` ${index + 1}. ${label}`));\n const index = Number((await ask('Choose an option: ')).trim()) - 1;\n return Number.isInteger(index) && index >= 0 && index < labels.length ? index : undefined;\n}\n\nasync function signIn(\n ask: Ask,\n provider: OAuthProviderInterface,\n authStorage: AuthStorage,\n openUrl: (url: string) => void,\n say: (line: string) => void,\n): Promise<void> {\n const modes = provider.authModes ?? [];\n let authMode: string | undefined;\n if (modes.length > 1) {\n const index = await choose(\n ask,\n modes.map(mode => mode.name),\n say,\n );\n if (index === undefined) throw new Error('No sign-in method selected');\n authMode = modes[index]!.id;\n }\n await authStorage.login(provider.id, {\n authMode,\n onAuth: ({ url, instructions }) => {\n say(`Open ${url} to sign in`);\n if (instructions) say(instructions);\n openUrl(url);\n },\n onPrompt: ({ message, placeholder }) => ask(`${message}${placeholder ? ` (${placeholder})` : ''} `),\n onProgress: say,\n });\n say(`Signed in to ${provider.name}`);\n}\n\nasync function addApiKey(ask: Ask, authStorage: AuthStorage, say: (line: string) => void): Promise<void> {\n const providerId = (await ask('Provider (for example anthropic, openai, google): ')).trim();\n if (!(providerId in PROVIDER_REGISTRY)) throw new Error(`Unknown provider: ${providerId}`);\n const key = (await ask('API key: ', { secret: true })).trim();\n say('');\n if (!key) throw new Error('No API key entered');\n authStorage.setStoredApiKey(providerId, key);\n say(`Saved the ${providerId} API key`);\n}\n\nexport async function runLoginCommand({\n args = [],\n input = process.stdin,\n output = process.stdout,\n authStorage = new AuthStorage(),\n openUrl = openUrlInBrowser,\n}: LoginCommandOptions = {}): Promise<number> {\n let echo = false;\n const rl = createInterface({\n input,\n output: new Writable({\n write(chunk, encoding, callback) {\n if (echo) output.write(chunk, encoding);\n callback();\n },\n }),\n prompt: '',\n terminal: Boolean(input.isTTY),\n });\n rl.on('line', () => {\n echo = false;\n });\n const lines = rl[Symbol.asyncIterator]();\n const say = (line: string) => output.write(`${line}\\n`);\n const ask: Ask = async (prompt, { secret = false } = {}) => {\n output.write(prompt);\n echo = !secret;\n const line = await lines.next();\n echo = false;\n if (line.done) throw new Error('Input ended before sign-in finished');\n return line.value;\n };\n try {\n const providers = getOAuthProviders();\n const { values } = parseArgs({ args, options: { provider: { type: 'string' } } });\n if (values.provider !== undefined) {\n const provider = providers.find(({ id }) => id === values.provider);\n if (!provider) {\n const ids = providers.map(({ id }) => id).join(', ');\n throw new Error(`Unknown provider: ${values.provider}. Use one of: ${ids}`);\n }\n await signIn(ask, provider, authStorage, openUrl, say);\n return 0;\n }\n say('Sign in to Mastra Code');\n const index = await choose(ask, [...providers.map(provider => provider.name), 'Add an API key'], say);\n if (index === undefined) throw new Error('No option selected');\n const provider = providers[index];\n if (provider) {\n await signIn(ask, provider, authStorage, openUrl, say);\n } else {\n await addApiKey(ask, authStorage, say);\n }\n return 0;\n } catch (error) {\n say(`Sign-in failed: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n } finally {\n rl.close();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"login-command-CT7RA_DY.js","names":[],"sources":["../src/login-command.ts"],"sourcesContent":["import { createInterface } from 'node:readline';\nimport { Writable } from 'node:stream';\nimport type { Readable } from 'node:stream';\nimport { parseArgs } from 'node:util';\nimport { AuthStorage, getOAuthProviders } from '@mastra/code-sdk/auth/storage';\nimport type { OAuthProviderInterface } from '@mastra/code-sdk/auth/types';\nimport { openUrlInBrowser } from '@mastra/code-sdk/utils/open-url';\nimport { PROVIDER_REGISTRY } from '@mastra/core/llm';\n\ntype Ask = (prompt: string, options?: { secret?: boolean }) => Promise<string>;\n\ninterface LoginCommandOptions {\n args?: string[];\n input?: Readable & { isTTY?: boolean };\n output?: NodeJS.WritableStream;\n authStorage?: AuthStorage;\n openUrl?: (url: string) => void;\n}\n\nasync function choose(ask: Ask, labels: string[], say: (line: string) => void): Promise<number | undefined> {\n labels.forEach((label, index) => say(` ${index + 1}. ${label}`));\n const index = Number((await ask('Choose an option: ')).trim()) - 1;\n return Number.isInteger(index) && index >= 0 && index < labels.length ? index : undefined;\n}\n\nasync function signIn(\n ask: Ask,\n provider: OAuthProviderInterface,\n authStorage: AuthStorage,\n openUrl: (url: string) => void,\n say: (line: string) => void,\n): Promise<void> {\n const modes = provider.authModes ?? [];\n let authMode: string | undefined;\n if (modes.length > 1) {\n const index = await choose(\n ask,\n modes.map(mode => mode.name),\n say,\n );\n if (index === undefined) throw new Error('No sign-in method selected');\n authMode = modes[index]!.id;\n }\n await authStorage.login(provider.id, {\n authMode,\n onAuth: ({ url, instructions }) => {\n say(`Open ${url} to sign in`);\n if (instructions) say(instructions);\n openUrl(url);\n },\n onPrompt: ({ message, placeholder }) => ask(`${message}${placeholder ? ` (${placeholder})` : ''} `),\n onProgress: say,\n });\n say(`Signed in to ${provider.name}`);\n}\n\nasync function addApiKey(ask: Ask, authStorage: AuthStorage, say: (line: string) => void): Promise<void> {\n const providerId = (await ask('Provider (for example anthropic, openai, google): ')).trim();\n if (!(providerId in PROVIDER_REGISTRY)) throw new Error(`Unknown provider: ${providerId}`);\n const key = (await ask('API key: ', { secret: true })).trim();\n say('');\n if (!key) throw new Error('No API key entered');\n authStorage.setStoredApiKey(providerId, key);\n say(`Saved the ${providerId} API key`);\n}\n\nexport async function runLoginCommand({\n args = [],\n input = process.stdin,\n output = process.stdout,\n authStorage = new AuthStorage(),\n openUrl = openUrlInBrowser,\n}: LoginCommandOptions = {}): Promise<number> {\n let echo = false;\n const rl = createInterface({\n input,\n output: new Writable({\n write(chunk, encoding, callback) {\n if (echo) output.write(chunk, encoding);\n callback();\n },\n }),\n prompt: '',\n terminal: Boolean(input.isTTY),\n });\n rl.on('line', () => {\n echo = false;\n });\n const lines = rl[Symbol.asyncIterator]();\n const say = (line: string) => output.write(`${line}\\n`);\n const ask: Ask = async (prompt, { secret = false } = {}) => {\n output.write(prompt);\n echo = !secret;\n const line = await lines.next();\n echo = false;\n if (line.done) throw new Error('Input ended before sign-in finished');\n return line.value;\n };\n try {\n const providers = getOAuthProviders();\n const { values } = parseArgs({ args, options: { provider: { type: 'string' } } });\n if (values.provider !== undefined) {\n const provider = providers.find(({ id }) => id === values.provider);\n if (!provider) {\n const ids = providers.map(({ id }) => id).join(', ');\n throw new Error(`Unknown provider: ${values.provider}. Use one of: ${ids}`);\n }\n await signIn(ask, provider, authStorage, openUrl, say);\n return 0;\n }\n say('Sign in to Mastra Code');\n const index = await choose(ask, [...providers.map(provider => provider.name), 'Add an API key'], say);\n if (index === undefined) throw new Error('No option selected');\n const provider = providers[index];\n if (provider) {\n await signIn(ask, provider, authStorage, openUrl, say);\n } else {\n await addApiKey(ask, authStorage, say);\n }\n return 0;\n } catch (error) {\n say(`Sign-in failed: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n } finally {\n rl.close();\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  let _mastra_code_sdk_auth_storage = require("@mastra/code-sdk/auth/storage");
2
- let stream = require("stream");
3
2
  let _mastra_code_sdk_utils_open_url = require("@mastra/code-sdk/utils/open-url");
4
3
  let util = require("util");
5
4
  let _mastra_core_llm = require("@mastra/core/llm");
6
5
  let readline = require("readline");
6
+ let stream = require("stream");
7
7
  // src/login-command.ts
8
8
  async function choose(ask, labels, say) {
9
9
  labels.forEach((label, index) => say(` ${index + 1}. ${label}`));
@@ -94,4 +94,4 @@ async function runLoginCommand({ args = [], input = process.stdin, output = proc
94
94
  }
95
95
  exports.runLoginCommand = runLoginCommand;
96
96
 
97
- //# sourceMappingURL=login-command-COPViada.cjs.map
97
+ //# sourceMappingURL=login-command-DvbCd7Pz.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-command-COPViada.cjs","names":["PROVIDER_REGISTRY","AuthStorage","openUrlInBrowser","createInterface","Writable","getOAuthProviders","parseArgs"],"sources":["../src/login-command.ts"],"sourcesContent":["import { createInterface } from 'node:readline';\nimport { Writable } from 'node:stream';\nimport type { Readable } from 'node:stream';\nimport { parseArgs } from 'node:util';\nimport { AuthStorage, getOAuthProviders } from '@mastra/code-sdk/auth/storage';\nimport type { OAuthProviderInterface } from '@mastra/code-sdk/auth/types';\nimport { openUrlInBrowser } from '@mastra/code-sdk/utils/open-url';\nimport { PROVIDER_REGISTRY } from '@mastra/core/llm';\n\ntype Ask = (prompt: string, options?: { secret?: boolean }) => Promise<string>;\n\ninterface LoginCommandOptions {\n args?: string[];\n input?: Readable & { isTTY?: boolean };\n output?: NodeJS.WritableStream;\n authStorage?: AuthStorage;\n openUrl?: (url: string) => void;\n}\n\nasync function choose(ask: Ask, labels: string[], say: (line: string) => void): Promise<number | undefined> {\n labels.forEach((label, index) => say(` ${index + 1}. ${label}`));\n const index = Number((await ask('Choose an option: ')).trim()) - 1;\n return Number.isInteger(index) && index >= 0 && index < labels.length ? index : undefined;\n}\n\nasync function signIn(\n ask: Ask,\n provider: OAuthProviderInterface,\n authStorage: AuthStorage,\n openUrl: (url: string) => void,\n say: (line: string) => void,\n): Promise<void> {\n const modes = provider.authModes ?? [];\n let authMode: string | undefined;\n if (modes.length > 1) {\n const index = await choose(\n ask,\n modes.map(mode => mode.name),\n say,\n );\n if (index === undefined) throw new Error('No sign-in method selected');\n authMode = modes[index]!.id;\n }\n await authStorage.login(provider.id, {\n authMode,\n onAuth: ({ url, instructions }) => {\n say(`Open ${url} to sign in`);\n if (instructions) say(instructions);\n openUrl(url);\n },\n onPrompt: ({ message, placeholder }) => ask(`${message}${placeholder ? ` (${placeholder})` : ''} `),\n onProgress: say,\n });\n say(`Signed in to ${provider.name}`);\n}\n\nasync function addApiKey(ask: Ask, authStorage: AuthStorage, say: (line: string) => void): Promise<void> {\n const providerId = (await ask('Provider (for example anthropic, openai, google): ')).trim();\n if (!(providerId in PROVIDER_REGISTRY)) throw new Error(`Unknown provider: ${providerId}`);\n const key = (await ask('API key: ', { secret: true })).trim();\n say('');\n if (!key) throw new Error('No API key entered');\n authStorage.setStoredApiKey(providerId, key);\n say(`Saved the ${providerId} API key`);\n}\n\nexport async function runLoginCommand({\n args = [],\n input = process.stdin,\n output = process.stdout,\n authStorage = new AuthStorage(),\n openUrl = openUrlInBrowser,\n}: LoginCommandOptions = {}): Promise<number> {\n let echo = false;\n const rl = createInterface({\n input,\n output: new Writable({\n write(chunk, encoding, callback) {\n if (echo) output.write(chunk, encoding);\n callback();\n },\n }),\n prompt: '',\n terminal: Boolean(input.isTTY),\n });\n rl.on('line', () => {\n echo = false;\n });\n const lines = rl[Symbol.asyncIterator]();\n const say = (line: string) => output.write(`${line}\\n`);\n const ask: Ask = async (prompt, { secret = false } = {}) => {\n output.write(prompt);\n echo = !secret;\n const line = await lines.next();\n echo = false;\n if (line.done) throw new Error('Input ended before sign-in finished');\n return line.value;\n };\n try {\n const providers = getOAuthProviders();\n const { values } = parseArgs({ args, options: { provider: { type: 'string' } } });\n if (values.provider !== undefined) {\n const provider = providers.find(({ id }) => id === values.provider);\n if (!provider) {\n const ids = providers.map(({ id }) => id).join(', ');\n throw new Error(`Unknown provider: ${values.provider}. Use one of: ${ids}`);\n }\n await signIn(ask, provider, authStorage, openUrl, say);\n return 0;\n }\n say('Sign in to Mastra Code');\n const index = await choose(ask, [...providers.map(provider => provider.name), 'Add an API key'], say);\n if (index === undefined) throw new Error('No option selected');\n const provider = providers[index];\n if (provider) {\n await signIn(ask, provider, authStorage, openUrl, say);\n } else {\n await addApiKey(ask, authStorage, say);\n }\n return 0;\n } catch (error) {\n say(`Sign-in failed: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n } finally {\n rl.close();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"login-command-DvbCd7Pz.cjs","names":["PROVIDER_REGISTRY","AuthStorage","openUrlInBrowser","createInterface","Writable","getOAuthProviders","parseArgs"],"sources":["../src/login-command.ts"],"sourcesContent":["import { createInterface } from 'node:readline';\nimport { Writable } from 'node:stream';\nimport type { Readable } from 'node:stream';\nimport { parseArgs } from 'node:util';\nimport { AuthStorage, getOAuthProviders } from '@mastra/code-sdk/auth/storage';\nimport type { OAuthProviderInterface } from '@mastra/code-sdk/auth/types';\nimport { openUrlInBrowser } from '@mastra/code-sdk/utils/open-url';\nimport { PROVIDER_REGISTRY } from '@mastra/core/llm';\n\ntype Ask = (prompt: string, options?: { secret?: boolean }) => Promise<string>;\n\ninterface LoginCommandOptions {\n args?: string[];\n input?: Readable & { isTTY?: boolean };\n output?: NodeJS.WritableStream;\n authStorage?: AuthStorage;\n openUrl?: (url: string) => void;\n}\n\nasync function choose(ask: Ask, labels: string[], say: (line: string) => void): Promise<number | undefined> {\n labels.forEach((label, index) => say(` ${index + 1}. ${label}`));\n const index = Number((await ask('Choose an option: ')).trim()) - 1;\n return Number.isInteger(index) && index >= 0 && index < labels.length ? index : undefined;\n}\n\nasync function signIn(\n ask: Ask,\n provider: OAuthProviderInterface,\n authStorage: AuthStorage,\n openUrl: (url: string) => void,\n say: (line: string) => void,\n): Promise<void> {\n const modes = provider.authModes ?? [];\n let authMode: string | undefined;\n if (modes.length > 1) {\n const index = await choose(\n ask,\n modes.map(mode => mode.name),\n say,\n );\n if (index === undefined) throw new Error('No sign-in method selected');\n authMode = modes[index]!.id;\n }\n await authStorage.login(provider.id, {\n authMode,\n onAuth: ({ url, instructions }) => {\n say(`Open ${url} to sign in`);\n if (instructions) say(instructions);\n openUrl(url);\n },\n onPrompt: ({ message, placeholder }) => ask(`${message}${placeholder ? ` (${placeholder})` : ''} `),\n onProgress: say,\n });\n say(`Signed in to ${provider.name}`);\n}\n\nasync function addApiKey(ask: Ask, authStorage: AuthStorage, say: (line: string) => void): Promise<void> {\n const providerId = (await ask('Provider (for example anthropic, openai, google): ')).trim();\n if (!(providerId in PROVIDER_REGISTRY)) throw new Error(`Unknown provider: ${providerId}`);\n const key = (await ask('API key: ', { secret: true })).trim();\n say('');\n if (!key) throw new Error('No API key entered');\n authStorage.setStoredApiKey(providerId, key);\n say(`Saved the ${providerId} API key`);\n}\n\nexport async function runLoginCommand({\n args = [],\n input = process.stdin,\n output = process.stdout,\n authStorage = new AuthStorage(),\n openUrl = openUrlInBrowser,\n}: LoginCommandOptions = {}): Promise<number> {\n let echo = false;\n const rl = createInterface({\n input,\n output: new Writable({\n write(chunk, encoding, callback) {\n if (echo) output.write(chunk, encoding);\n callback();\n },\n }),\n prompt: '',\n terminal: Boolean(input.isTTY),\n });\n rl.on('line', () => {\n echo = false;\n });\n const lines = rl[Symbol.asyncIterator]();\n const say = (line: string) => output.write(`${line}\\n`);\n const ask: Ask = async (prompt, { secret = false } = {}) => {\n output.write(prompt);\n echo = !secret;\n const line = await lines.next();\n echo = false;\n if (line.done) throw new Error('Input ended before sign-in finished');\n return line.value;\n };\n try {\n const providers = getOAuthProviders();\n const { values } = parseArgs({ args, options: { provider: { type: 'string' } } });\n if (values.provider !== undefined) {\n const provider = providers.find(({ id }) => id === values.provider);\n if (!provider) {\n const ids = providers.map(({ id }) => id).join(', ');\n throw new Error(`Unknown provider: ${values.provider}. Use one of: ${ids}`);\n }\n await signIn(ask, provider, authStorage, openUrl, say);\n return 0;\n }\n say('Sign in to Mastra Code');\n const index = await choose(ask, [...providers.map(provider => provider.name), 'Add an API key'], say);\n if (index === undefined) throw new Error('No option selected');\n const provider = providers[index];\n if (provider) {\n await signIn(ask, provider, authStorage, openUrl, say);\n } else {\n await addApiKey(ask, authStorage, say);\n }\n return 0;\n } catch (error) {\n say(`Sign-in failed: ${error instanceof Error ? error.message : String(error)}`);\n return 1;\n } finally {\n rl.close();\n }\n}\n"],"mappings":"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"}
@@ -30,6 +30,7 @@ export declare function githubPRId(pr: {
30
30
  export declare class GithubPRPickerDialog extends Box implements Focusable {
31
31
  private searchInput;
32
32
  private listContainer;
33
+ private list;
33
34
  private viewTabs;
34
35
  private currentView;
35
36
  private myPullRequests;
@@ -65,6 +66,7 @@ export declare class GithubPRPickerDialog extends Box implements Focusable {
65
66
  private getSelectedPullRequests;
66
67
  private confirmSelection;
67
68
  private updateList;
69
+ private renderPullRequest;
68
70
  handleInput(keyData: string): void;
69
71
  }
70
72
  //# sourceMappingURL=github-pr-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-pr-picker.d.ts","sourceRoot":"","sources":["../../../src/tui/components/github-pr-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA+D,MAAM,wBAAwB,CAAC;AAC1G,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAI7D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AASD,wBAAgB,UAAU,CAAC,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExF;AA6BD,qBAAa,oBAAqB,SAAQ,GAAI,YAAW,SAAS;IAChE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+C;IACjF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,qBAAqB,EAezC;IAED,eAAe,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAUjH;IAED,OAAO,KAAK,eAAe,GAI1B;IAED,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,OAAO;IAwBf,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,UAAU;IA0DlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAyCjC;CACF"}
1
+ {"version":3,"file":"github-pr-picker.d.ts","sourceRoot":"","sources":["../../../src/tui/components/github-pr-picker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA+D,MAAM,wBAAwB,CAAC;AAC1G,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAK7D,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,GAAG,CAAC;IACT,YAAY,EAAE,kBAAkB,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACxD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AASD,wBAAgB,UAAU,CAAC,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExF;AA6BD,qBAAa,oBAAqB,SAAQ,GAAI,YAAW,SAAS;IAChE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+C;IACjF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAa;IAC9C,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,qBAAqB,EAezC;IAED,eAAe,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAUjH;IAED,OAAO,KAAK,eAAe,GAI1B;IAED,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,iBAAiB;IAiBzB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAyCjC;CACF"}
@@ -21,6 +21,7 @@ export interface LoginAccountManagerCallbacks {
21
21
  }
22
22
  export declare class LoginAccountManagerComponent extends Box {
23
23
  private listContainer;
24
+ private list;
24
25
  private mode;
25
26
  private accounts;
26
27
  private selectedIndex;
@@ -34,6 +35,7 @@ export declare class LoginAccountManagerComponent extends Box {
34
35
  private rows;
35
36
  private backToMenu;
36
37
  private updateList;
38
+ private renderRow;
37
39
  handleInput(keyData: string): void;
38
40
  }
39
41
  //# sourceMappingURL=login-account-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-account-manager.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-account-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAA2C,MAAM,wBAAwB,CAAC;AAGtF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,IAAI,IAAI,CAAC;IACrB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,IAAI,IAAI,CAAC;CAChB;AAID,qBAAa,4BAA6B,SAAQ,GAAG;IACnD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,YAAY,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAiBpG;IAED,gFAAgF;IAChF,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,CAQ5C;IAED,OAAO,CAAC,IAAI;IAiDZ,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IA2BlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBjC;CACF"}
1
+ {"version":3,"file":"login-account-manager.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-account-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAA2C,MAAM,wBAAwB,CAAC;AAItF,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,IAAI,IAAI,CAAC;IACrB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,IAAI,IAAI,CAAC;CAChB;AAID,qBAAa,4BAA6B,SAAQ,GAAG;IACnD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,IAAI,CAAoD;IAChE,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,YAAY,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAsBpG;IAED,gFAAgF;IAChF,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,CAQ5C;IAED,OAAO,CAAC,IAAI;IAiDZ,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,SAAS;IAMjB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBjC;CACF"}
@@ -8,7 +8,7 @@ import { Box } from '@earendil-works/pi-tui';
8
8
  import type { TUI } from '@earendil-works/pi-tui';
9
9
  import type { AuthMode } from '@mastra/code-sdk/auth/types';
10
10
  export declare class LoginModeSelectorComponent extends Box {
11
- private listContainer;
11
+ private list;
12
12
  private modes;
13
13
  private selectedIndex;
14
14
  private onSelectCallback;
@@ -1 +1 @@
1
- {"version":3,"file":"login-mode-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-mode-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAA2C,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAI5D,qBAAa,0BAA2B,SAAQ,GAAG;IACjD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAAa;IAErC,YACE,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAClC,QAAQ,EAAE,MAAM,IAAI,EAkBrB;IAED,OAAO,CAAC,UAAU;IAkBlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBjC;CACF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAqBpC"}
1
+ {"version":3,"file":"login-mode-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-mode-selector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAgC,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAK5D,qBAAa,0BAA2B,SAAQ,GAAG;IACjD,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAAa;IAErC,YACE,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAClC,QAAQ,EAAE,MAAM,IAAI,EA4BrB;IAED,OAAO,CAAC,UAAU;IAIlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBjC;CACF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,GACzC,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAqBpC"}
@@ -15,6 +15,7 @@ export interface AuthProviderSource {
15
15
  }
16
16
  export declare class LoginSelectorComponent extends Box {
17
17
  private listContainer;
18
+ private list;
18
19
  private allProviders;
19
20
  private selectedIndex;
20
21
  private mode;
@@ -24,6 +25,7 @@ export declare class LoginSelectorComponent extends Box {
24
25
  constructor(mode: 'login' | 'logout', authSource: AuthProviderSource, onSelect: (providerId: string) => void, onCancel: () => void);
25
26
  private loadProviders;
26
27
  private updateList;
28
+ private renderProvider;
27
29
  handleInput(keyData: string): void;
28
30
  }
29
31
  //# sourceMappingURL=login-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAA2C,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAG1E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,IAAI,sBAAsB,EAAE,CAAC;IAC9C,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,mFAAmF;IACnF,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,qBAAa,sBAAuB,SAAQ,GAAG;IAC7C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAAa;IAErC,YACE,IAAI,EAAE,OAAO,GAAG,QAAQ,EACxB,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EACtC,QAAQ,EAAE,MAAM,IAAI,EA2BrB;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,UAAU;IAmClB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBjC;CACF"}
1
+ {"version":3,"file":"login-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/login-selector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAA2C,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAI1E;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,IAAI,sBAAsB,EAAE,CAAC;IAC9C,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,mFAAmF;IACnF,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,qBAAa,sBAAuB,SAAQ,GAAG;IAC7C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAAa;IAErC,YACE,IAAI,EAAE,OAAO,GAAG,QAAQ,EACxB,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EACtC,QAAQ,EAAE,MAAM,IAAI,EAgCrB;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,cAAc;IAatB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBjC;CACF"}
@@ -57,7 +57,7 @@ export declare function makeCustomModelItem(id: string, models: ModelItem[]): Mo
57
57
  export declare function toCanonicalModelItems(models: ModelItem[]): ModelItem[];
58
58
  export declare class ModelSelectorComponent extends Box implements Focusable {
59
59
  private searchInput;
60
- private listContainer;
60
+ private list;
61
61
  private allModels;
62
62
  private filteredModels;
63
63
  private selectedIndex;
@@ -78,6 +78,7 @@ export declare class ModelSelectorComponent extends Box implements Focusable {
78
78
  private filterModels;
79
79
  private makeCustomModelItem;
80
80
  private updateList;
81
+ private renderRow;
81
82
  handleInput(keyData: string): void;
82
83
  private handleSelect;
83
84
  getSearchInput(): Input;
@@ -1 +1 @@
1
- {"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/model-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAA0C,KAAK,EAAgB,MAAM,wBAAwB,CAAC;AAC1G,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAQ7D,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,GAAG,EAAE,GAAG,CAAC;IACT,+BAA+B;IAC/B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAY9E;AAID;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CActE;AAMD,qBAAa,sBAAuB,SAAQ,GAAI,YAAW,SAAS;IAClE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAC,CAAS;IAG5B,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,oBAAoB,EAexC;IAED,OAAO,CAAC,OAAO;IAmCf,OAAO,CAAC,UAAU;IA+BlB,+DAA+D;IAC/D,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,UAAU;IAwDlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwCjC;IAED,OAAO,CAAC,YAAY;IAIpB,cAAc,IAAI,KAAK,CAEtB;CACF"}
1
+ {"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/model-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAA+B,KAAK,EAAgB,MAAM,wBAAwB,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAS7D,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,GAAG,EAAE,GAAG,CAAC;IACT,+BAA+B;IAC/B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAY9E;AAID;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CActE;AAMD,qBAAa,sBAAuB,SAAQ,GAAI,YAAW,SAAS;IAClE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAgC;IAC5C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAC,CAAS;IAG5B,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,oBAAoB,EAexC;IAED,OAAO,CAAC,OAAO;IAsCf,OAAO,CAAC,UAAU;IA+BlB,+DAA+D;IAC/D,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,SAAS;IAoBjB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwCjC;IAED,OAAO,CAAC,YAAY;IAIpB,cAAc,IAAI,KAAK,CAEtB;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Scrolling list body shared by hand-drawn pickers. The picker keeps its own
3
+ * selection and key handling; this draws the visible window of items, each of
4
+ * which may span several rows, plus the `(n/total)` scroll indicator.
5
+ */
6
+ import type { Component } from '@earendil-works/pi-tui';
7
+ export interface PickerListOptions<T> {
8
+ /** Items shown at once before the list scrolls; omit to show every item. */
9
+ maxVisible?: number;
10
+ /** Lines for one item; each line wraps to the list width like a `Text`. */
11
+ renderItem: (item: T, selected: boolean, index: number) => string[];
12
+ /** Shown when there are no items; omit to render nothing. */
13
+ emptyText?: () => string;
14
+ /** `Text` padding around each line, for pickers that draw rows as padded `Text`s. */
15
+ paddingX?: number;
16
+ paddingY?: number;
17
+ }
18
+ export declare class PickerList<T> implements Component {
19
+ private readonly options;
20
+ /** Rows for the current items, built when items are set (like the hand-drawn loops did) so each `Text` keeps its wrap cache between frames. */
21
+ private rows;
22
+ constructor(options: PickerListOptions<T>);
23
+ setItems(items: T[], selectedIndex: number): void;
24
+ render(width: number): string[];
25
+ invalidate(): void;
26
+ }
27
+ //# sourceMappingURL=picker-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"picker-list.d.ts","sourceRoot":"","sources":["../../../src/tui/components/picker-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACpE,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;IACzB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,SAAS;IAIjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,+IAA+I;IAC/I,OAAO,CAAC,IAAI,CAAc;IAE1B,YAA6B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAI;IAE9D,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAmBhD;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9B;IAED,UAAU,IAAI,IAAI,CAEjB;CACF"}
@@ -25,7 +25,7 @@ export interface ThreadSelectorOptions {
25
25
  }
26
26
  export declare class ThreadSelectorComponent extends Box implements Focusable {
27
27
  private searchInput;
28
- private listContainer;
28
+ private list;
29
29
  private allThreads;
30
30
  private filteredThreads;
31
31
  private selectedIndex;
@@ -57,6 +57,7 @@ export declare class ThreadSelectorComponent extends Box implements Focusable {
57
57
  private filterThreads;
58
58
  private formatTimeAgo;
59
59
  private updateList;
60
+ private renderThread;
60
61
  handleInput(keyData: string): void;
61
62
  }
62
63
  //# sourceMappingURL=thread-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/thread-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAA2E,MAAM,wBAAwB,CAAC;AACtH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAO3E,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4GAA4G;IAC5G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACpG;AAaD,qBAAa,uBAAwB,SAAQ,GAAI,YAAW,SAAS;IACnE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAwD;IAC/E,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,kBAAkB,CAAsE;IAChG,OAAO,CAAC,uBAAuB,CAEjB;IACd,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,yBAAyB,CAAc;IAC/C,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,qBAAqB,EAmBzC;IAED,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,0BAA0B;YAgBpB,mBAAmB;IAwCjC,OAAO,CAAC,OAAO;IAyBf,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,UAAU;IAyDlB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiCjC;CACF"}
1
+ {"version":3,"file":"thread-selector.d.ts","sourceRoot":"","sources":["../../../src/tui/components/thread-selector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAgE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAQ3E,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4GAA4G;IAC5G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,sBAAsB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,uBAAuB,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;CACpG;AAaD,qBAAa,uBAAwB,SAAQ,GAAI,YAAW,SAAS;IACnE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAqC;IACjD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAwD;IAC/E,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,kBAAkB,CAAsE;IAChG,OAAO,CAAC,uBAAuB,CAEjB;IACd,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,yBAAyB,CAAc;IAC/C,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,QAAQ,CAAS;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAGzB;IAED,YAAY,OAAO,EAAE,qBAAqB,EAmBzC;IAED,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,0BAA0B;YAgBpB,mBAAmB;IAwCjC,OAAO,CAAC,OAAO;IA6Bf,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IA0BpB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiCjC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-engine.d.ts","sourceRoot":"","sources":["../../../../src/tui/voice/engines/cloud-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAKjE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAa7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAwID,qBAAa,cAAe,YAAW,SAAS;IAGlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,YAA6B,OAAO,EAAE,kBAAkB,EAAI;IAE5D,UAAU,IAAI,MAAM,GAAG,IAAI,CAQ1B;IAED,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAchD;CACF"}
1
+ {"version":3,"file":"cloud-engine.d.ts","sourceRoot":"","sources":["../../../../src/tui/voice/engines/cloud-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAKjE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAa7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAiID,qBAAa,cAAe,YAAW,SAAS;IAGlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,YAA6B,OAAO,EAAE,kBAAkB,EAAI;IAE5D,UAAU,IAAI,MAAM,GAAG,IAAI,CAM1B;IAED,KAAK,CAAC,SAAS,EAAE,mBAAmB,GAAG,UAAU,CAchD;CACF"}
@@ -1,63 +1,13 @@
1
- /**
2
- * Speech-to-text transcription for push-to-talk voice input (cloud path).
3
- *
4
- * Provider-agnostic: most supported cloud providers speak the OpenAI
5
- * `/audio/transcriptions` shape (see `stt-registry.ts`), so we drive them
6
- * through Mastra's own voice abstraction — `OpenAIVoice` (a `MastraVoice`) from
7
- * `@mastra/voice-openai`. The `openai` provider uses the default endpoint; every
8
- * other OpenAI-compatible host is reached by pointing the underlying client at
9
- * its `baseURL`. Deepgram is not OpenAI-compatible, so it is driven through
10
- * `DeepgramVoice` from `@mastra/voice-deepgram` instead.
11
- *
12
- * Using `MastraVoice.listen()` keeps this aligned with the framework's voice
13
- * ecosystem and normalizes provider responses to a transcript string. The voice
14
- * package constructs its own SDK client internally, so this avoids coupling to a
15
- * specific `@ai-sdk/*` model-spec version.
16
- *
17
- * Note: OpenAI OAuth (Codex) tokens cannot be used for the audio transcription
18
- * REST endpoint, so a real provider API key is required.
19
- */
20
1
  import type { AuthStorage } from '@mastra/code-sdk/auth/storage';
2
+ import type { CloudEngineOptions } from './engines/cloud-engine.js';
3
+ export declare function voiceCredentialMessage(provider: string): string;
21
4
  export declare class VoiceCredentialError extends Error {
22
5
  constructor(provider: string);
23
6
  }
24
- /**
25
- * Resolve an API key for a cloud STT provider.
26
- * Honors the env-overrides-stored-key contract: the provider's env var wins,
27
- * then the stored credential is used as a fallback.
28
- */
29
- export declare function resolveProviderApiKey(provider: string, authStorage?: AuthStorage): string | undefined;
30
- export interface TranscribeOptions {
31
- /** STT provider id (see `stt-registry.ts`). Defaults to the registry default. */
32
- provider?: string;
33
- /** Model id within the provider. Defaults to the provider's default model. */
34
- model?: string;
35
- authStorage?: AuthStorage;
36
- }
37
- /**
38
- * Transcribe recorded WAV audio to text via the configured cloud provider.
39
- * Throws VoiceCredentialError if no API key is available for the provider.
40
- */
41
- export declare function transcribeAudio(audio: Buffer, options?: TranscribeOptions): Promise<string>;
42
- /**
43
- * A reusable transcriber bound to one provider/model. Building the underlying
44
- * `MastraVoice` client once and reusing it across calls lets the HTTP client
45
- * keep its connection to the provider warm (keep-alive), which removes the
46
- * DNS + TLS handshake cost from every live-partial tick — the main reason the
47
- * first dictation streams in slowly while later ones feel instant.
48
- */
49
7
  export interface ReusableTranscriber {
50
8
  transcribe(audio: Buffer): Promise<string>;
51
9
  }
52
- /**
53
- * Create a transcriber that reuses a single provider client across calls.
54
- * Resolves the provider/model and API key once up front (throwing
55
- * `VoiceCredentialError` if no key is available), so a session can build it on
56
- * start and call `transcribe()` per tick without re-resolving or reconnecting.
57
- */
58
- export declare function createTranscriber(options?: TranscribeOptions): ReusableTranscriber;
59
- /**
60
- * Check whether a cloud STT provider has a usable API key, without recording.
61
- */
10
+ /** Throws `VoiceCredentialError` up front when the provider has no key. */
11
+ export declare function createTranscriber(options: CloudEngineOptions): ReusableTranscriber;
62
12
  export declare function hasProviderCredential(provider: string, authStorage?: AuthStorage): boolean;
63
13
  //# sourceMappingURL=transcribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transcribe.d.ts","sourceRoot":"","sources":["../../../src/tui/voice/transcribe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AA6BjE,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,QAAQ,EAAE,MAAM,EAO3B;CACF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAKrG;AA6BD,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAUrG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,mBAAmB,CAetF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAE1F"}
1
+ {"version":3,"file":"transcribe.d.ts","sourceRoot":"","sources":["../../../src/tui/voice/transcribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAIjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,QAAQ,EAAE,MAAM,EAG3B;CACF;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,mBAAmB,CAYlF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAE1F"}