mastracode 0.45.0-alpha.2 → 0.45.0-alpha.4

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command-BSpvG0ws.cjs","names":["PROVIDER_REGISTRY","AuthStorage","openUrlInBrowser","Writable"],"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 { seedProviderOMDefault } from '@mastra/code-sdk/onboarding/om-settings';\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 seedProviderOMDefault(provider.id);\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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"}
@@ -0,0 +1,100 @@
1
+ import { AuthStorage, getOAuthProviders } from "@mastra/code-sdk/auth/storage";
2
+ import { Writable } from "stream";
3
+ import { openUrlInBrowser } from "@mastra/code-sdk/utils/open-url";
4
+ import { parseArgs } from "util";
5
+ import { seedProviderOMDefault } from "@mastra/code-sdk/onboarding/om-settings";
6
+ import { PROVIDER_REGISTRY } from "@mastra/core/llm";
7
+ import { createInterface } from "readline";
8
+ //#region src/login-command.ts
9
+ async function choose(ask, labels, say) {
10
+ labels.forEach((label, index) => say(` ${index + 1}. ${label}`));
11
+ const index = Number((await ask("Choose an option: ")).trim()) - 1;
12
+ return Number.isInteger(index) && index >= 0 && index < labels.length ? index : void 0;
13
+ }
14
+ async function signIn(ask, provider, authStorage, openUrl, say) {
15
+ const modes = provider.authModes ?? [];
16
+ let authMode;
17
+ if (modes.length > 1) {
18
+ const index = await choose(ask, modes.map((mode) => mode.name), say);
19
+ if (index === void 0) throw new Error("No sign-in method selected");
20
+ authMode = modes[index].id;
21
+ }
22
+ await authStorage.login(provider.id, {
23
+ authMode,
24
+ onAuth: ({ url, instructions }) => {
25
+ say(`Open ${url} to sign in`);
26
+ if (instructions) say(instructions);
27
+ openUrl(url);
28
+ },
29
+ onPrompt: ({ message, placeholder }) => ask(`${message}${placeholder ? ` (${placeholder})` : ""} `),
30
+ onProgress: say
31
+ });
32
+ seedProviderOMDefault(provider.id);
33
+ say(`Signed in to ${provider.name}`);
34
+ }
35
+ async function addApiKey(ask, authStorage, say) {
36
+ const providerId = (await ask("Provider (for example anthropic, openai, google): ")).trim();
37
+ if (!(providerId in PROVIDER_REGISTRY)) throw new Error(`Unknown provider: ${providerId}`);
38
+ const key = (await ask("API key: ", { secret: true })).trim();
39
+ say("");
40
+ if (!key) throw new Error("No API key entered");
41
+ authStorage.setStoredApiKey(providerId, key);
42
+ say(`Saved the ${providerId} API key`);
43
+ }
44
+ async function runLoginCommand({ args = [], input = process.stdin, output = process.stdout, authStorage = new AuthStorage(), openUrl = openUrlInBrowser } = {}) {
45
+ let echo = false;
46
+ const rl = createInterface({
47
+ input,
48
+ output: new Writable({ write(chunk, encoding, callback) {
49
+ if (echo) output.write(chunk, encoding);
50
+ callback();
51
+ } }),
52
+ prompt: "",
53
+ terminal: Boolean(input.isTTY)
54
+ });
55
+ rl.on("line", () => {
56
+ echo = false;
57
+ });
58
+ const lines = rl[Symbol.asyncIterator]();
59
+ const say = (line) => output.write(`${line}\n`);
60
+ const ask = async (prompt, { secret = false } = {}) => {
61
+ output.write(prompt);
62
+ echo = !secret;
63
+ const line = await lines.next();
64
+ echo = false;
65
+ if (line.done) throw new Error("Input ended before sign-in finished");
66
+ return line.value;
67
+ };
68
+ try {
69
+ const providers = getOAuthProviders();
70
+ const { values } = parseArgs({
71
+ args,
72
+ options: { provider: { type: "string" } }
73
+ });
74
+ if (values.provider !== void 0) {
75
+ const provider = providers.find(({ id }) => id === values.provider);
76
+ if (!provider) {
77
+ const ids = providers.map(({ id }) => id).join(", ");
78
+ throw new Error(`Unknown provider: ${values.provider}. Use one of: ${ids}`);
79
+ }
80
+ await signIn(ask, provider, authStorage, openUrl, say);
81
+ return 0;
82
+ }
83
+ say("Sign in to Mastra Code");
84
+ const index = await choose(ask, [...providers.map((provider) => provider.name), "Add an API key"], say);
85
+ if (index === void 0) throw new Error("No option selected");
86
+ const provider = providers[index];
87
+ if (provider) await signIn(ask, provider, authStorage, openUrl, say);
88
+ else await addApiKey(ask, authStorage, say);
89
+ return 0;
90
+ } catch (error) {
91
+ say(`Sign-in failed: ${error instanceof Error ? error.message : String(error)}`);
92
+ return 1;
93
+ } finally {
94
+ rl.close();
95
+ }
96
+ }
97
+ //#endregion
98
+ export { runLoginCommand };
99
+
100
+ //# sourceMappingURL=login-command-C0Ro4glG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command-C0Ro4glG.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 { seedProviderOMDefault } from '@mastra/code-sdk/onboarding/om-settings';\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 seedProviderOMDefault(provider.id);\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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"}
@@ -0,0 +1,14 @@
1
+ import type { Readable } from 'node:stream';
2
+ import { AuthStorage } from '@mastra/code-sdk/auth/storage';
3
+ interface LoginCommandOptions {
4
+ args?: string[];
5
+ input?: Readable & {
6
+ isTTY?: boolean;
7
+ };
8
+ output?: NodeJS.WritableStream;
9
+ authStorage?: AuthStorage;
10
+ openUrl?: (url: string) => void;
11
+ }
12
+ export declare function runLoginCommand({ args, input, output, authStorage, openUrl, }?: LoginCommandOptions): Promise<number>;
13
+ export {};
14
+ //# sourceMappingURL=login-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command.d.ts","sourceRoot":"","sources":["../src/login-command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAqB,MAAM,+BAA+B,CAAC;AAQ/E,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAkDD,wBAAsB,eAAe,CAAC,EACpC,IAAS,EACT,KAAqB,EACrB,MAAuB,EACvB,WAA+B,EAC/B,OAA0B,GAC3B,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsD5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"om-defaults.d.ts","sourceRoot":"","sources":["../../src/tui/om-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,uFAAuF;AACvF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,sGAAsG;AACtG,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;AAID,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"om-defaults.d.ts","sourceRoot":"","sources":["../../src/tui/om-defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,uFAAuF;AACvF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,sGAAsG;AACtG,wBAAsB,oCAAoC,CACxD,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7B;AAID,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,OAAO,CAAC,IAAI,CAAC,CAOf"}
@@ -25,6 +25,7 @@ import { DeepgramVoice } from "@mastra/voice-deepgram";
25
25
  import { OpenAIVoice } from "@mastra/voice-openai";
26
26
  import { THINK_COMMAND_DESCRIPTOR, getAvailableThinkingLevelsForModel, isThinkingLevelSetting, parseThinkCommand } from "@mastra/code-sdk/thinking";
27
27
  import { VALID_EVENTS } from "@mastra/code-sdk/hooks/index";
28
+ import { openUrlInBrowser } from "@mastra/code-sdk/utils/open-url";
28
29
  import { parseError } from "@mastra/code-sdk/utils/errors";
29
30
  import { formatSkillActivation } from "@mastra/core/workspace";
30
31
  import { approvePlanFile, readPlanFile, resolvePlanPath } from "@mastra/code-sdk/utils/plans";
@@ -42,11 +43,11 @@ import { highlight } from "cli-highlight";
42
43
  import { TOOL_CATEGORIES, getToolCategory } from "@mastra/code-sdk/permissions";
43
44
  import { parse } from "jsonriver";
44
45
  import { stripVTControlCharacters } from "util";
45
- import { getAvailableModePacks as getAvailableModePacks$1, getBuiltinModePack, resolveModePackFallbackChain, resolveProviderOMDefault } from "@mastra/code-sdk/onboarding/packs";
46
+ import { getAvailableModePacks as getAvailableModePacks$1, getBuiltinModePack, resolveModePackFallbackChain } from "@mastra/code-sdk/onboarding/packs";
46
47
  import { getClipboardImage, getClipboardText, setClipboardText } from "@mastra/code-sdk/clipboard/index";
47
48
  import { removeCustomPackFromSettings } from "@mastra/code-sdk/onboarding/custom-packs";
48
49
  import { removeCustomProviderFromSettings, upsertCustomProviderInSettings } from "@mastra/code-sdk/onboarding/custom-providers";
49
- import { applyOMDefaultIfUnconfigured, applyOmRoleOverride, persistOmObserveAttachments } from "@mastra/code-sdk/onboarding/om-settings";
50
+ import { applyOmRoleOverride, persistOmObserveAttachments, seedProviderOMDefault } from "@mastra/code-sdk/onboarding/om-settings";
50
51
  import { access, mkdir, mkdtemp, readFile, rm, stat, writeFile } from "fs/promises";
51
52
  import { remapOpenAIModelForCodexOAuth } from "@mastra/code-sdk/providers/model-ids";
52
53
  import { STAGEHAND_MODEL_PROVIDERS } from "@mastra/stagehand";
@@ -4910,32 +4911,6 @@ function runPermissionHooksForEvent(state, event) {
4910
4911
  }
4911
4912
  }
4912
4913
  //#endregion
4913
- //#region src/tui/open-url.ts
4914
- /**
4915
- * Best-effort browser opening for OAuth and other login flows.
4916
- */
4917
- /**
4918
- * Open a URL in the default browser without going through a shell.
4919
- * Only well-formed http(s) URLs are opened; anything else is ignored
4920
- * (the URL is still displayed for the user to open manually).
4921
- */
4922
- function openUrlInBrowser(url) {
4923
- let parsed;
4924
- try {
4925
- parsed = new URL(url);
4926
- } catch {
4927
- return;
4928
- }
4929
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return;
4930
- const [cmd, args] = process.platform === "darwin" ? ["open", [url]] : process.platform === "win32" ? ["rundll32", ["url.dll,FileProtocolHandler", url]] : ["xdg-open", [url]];
4931
- const child = spawn(cmd, args, {
4932
- stdio: "ignore",
4933
- detached: true
4934
- });
4935
- child.on("error", () => {});
4936
- child.unref();
4937
- }
4938
- //#endregion
4939
4914
  //#region src/tui/commands/mcp.ts
4940
4915
  async function handleMcpCommand(ctx, args) {
4941
4916
  const mm = ctx.mcpManager;
@@ -18130,11 +18105,8 @@ async function applyOMModelToSession(state, modelId) {
18130
18105
  }
18131
18106
  /** Seed OM from a provider login, preserving explicit settings; undefined when nothing was seeded. */
18132
18107
  async function applyProviderOMDefaultIfUnconfigured(state, providerId) {
18133
- const pack = resolveProviderOMDefault(providerId);
18134
- if (pack.id === "custom") return void 0;
18135
- const settings = loadSettings();
18136
- if (!applyOMDefaultIfUnconfigured(settings, pack)) return void 0;
18137
- saveSettings(settings);
18108
+ const pack = seedProviderOMDefault(providerId);
18109
+ if (!pack) return void 0;
18138
18110
  await applyOMModelToSession(state, pack.modelId);
18139
18111
  return pack;
18140
18112
  }
@@ -28295,4 +28267,4 @@ var MastraTUI = class MastraTUI {
28295
28267
  //#endregion
28296
28268
  export { mastraBrand as _, OMProgressComponent as a, TUI_CO_AUTHOR as b, ToolExecutionComponentEnhanced as c, detectTerminalTheme as d, applyThemeMode as f, mastra as g, getThemeMode as h, LoginDialogComponent as i, ModelSelectorComponent as l, getMarkdownTheme as m, createTUIState as n, formatOMStatus as o, getEditorTheme as p, LoginSelectorComponent as r, UserMessageComponent as s, MastraTUI as t, AssistantMessageComponent as u, restoreTerminalForeground as v, theme as y };
28297
28269
 
28298
- //# sourceMappingURL=tui-CUNuxs-4.js.map
28270
+ //# sourceMappingURL=tui-Boav6A4H.js.map