diff --git a/packages/cli/src/config/settingsSchema.ts b/packages/cli/src/config/settingsSchema.ts index fcfd604e3a..1dc969daf2 100644 --- a/packages/cli/src/config/settingsSchema.ts +++ b/packages/cli/src/config/settingsSchema.ts @@ -2217,6 +2217,15 @@ const SETTINGS_SCHEMA = { 'Enable the experimental Topic & Update communication model for reduced chattiness and structured progress reporting.', showInDialog: true, }, + 'enable-awesome': { + type: 'boolean', + label: 'Enable Awesome', + category: 'Experimental', + requiresRestart: false, + default: false, + description: "When enabled, the ASCII art says 'matt'.", + showInDialog: true, + }, }, }, extensions: { diff --git a/packages/cli/src/test-utils/mockConfig.ts b/packages/cli/src/test-utils/mockConfig.ts index 0cf4112d58..f65475bd04 100644 --- a/packages/cli/src/test-utils/mockConfig.ts +++ b/packages/cli/src/test-utils/mockConfig.ts @@ -121,6 +121,7 @@ export const createMockConfig = (overrides: Partial = {}): Config => getCompressionThreshold: vi.fn().mockResolvedValue(undefined), getUserCaching: vi.fn().mockResolvedValue(false), isNumericalRoutingEnabled: vi.fn().mockReturnValue(false), + isAwesomeEnabled: vi.fn().mockReturnValue(false), getClassifierThreshold: vi.fn().mockResolvedValue(undefined), getBannerTextNoCapacityIssues: vi.fn().mockResolvedValue(''), getBannerTextCapacityIssues: vi.fn().mockResolvedValue(''), diff --git a/packages/cli/src/ui/components/AsciiArt.ts b/packages/cli/src/ui/components/AsciiArt.ts index 40f0eb8296..4295471ea9 100644 --- a/packages/cli/src/ui/components/AsciiArt.ts +++ b/packages/cli/src/ui/components/AsciiArt.ts @@ -57,3 +57,14 @@ export const tinyAsciiLogoCompactText = ` ▝█▖ ▜█▘ ▝▀▀▀▀ `; + +export const mattAsciiLogo = ` + ██████ ██████ ██████ ███████████ ███████████ +░░██████ ░░██████ ░░██████░█░░░███░░░█░█░░░███░░░█ + ░███░███ ███░███ ░███░███░ ░███ ░ ░ ░███ ░ + ░███░░███░███░███ ░███░░███ ░███ ░███ + ░███ ░░███░ ░███ ░███ ░░███ ░███ ░███ + ░███ ░░███ ░███ ░███ ░░███ ░███ ░███ + █████ ░░█ █████ █████ ░░█████████ █████ +░░░░░ ░ ░░░░░ ░░░░░ ░░░░░░░░░ ░░░░░ +`; diff --git a/packages/cli/src/ui/components/Header.tsx b/packages/cli/src/ui/components/Header.tsx index 2bf260148e..daef7aff4a 100644 --- a/packages/cli/src/ui/components/Header.tsx +++ b/packages/cli/src/ui/components/Header.tsx @@ -7,10 +7,16 @@ import type React from 'react'; import { Box } from 'ink'; import { ThemedGradient } from './ThemedGradient.js'; -import { shortAsciiLogo, longAsciiLogo, tinyAsciiLogo } from './AsciiArt.js'; +import { + shortAsciiLogo, + longAsciiLogo, + tinyAsciiLogo, + mattAsciiLogo, +} from './AsciiArt.js'; import { getAsciiArtWidth } from '../utils/textUtils.js'; import { useTerminalSize } from '../hooks/useTerminalSize.js'; import { useSnowfall } from '../hooks/useSnowfall.js'; +import { useConfig } from '../contexts/ConfigContext.js'; interface HeaderProps { customAsciiArt?: string; // For user-defined ASCII art @@ -23,6 +29,7 @@ export const Header: React.FC = ({ version, nightly, }) => { + const config = useConfig(); const { columns: terminalWidth } = useTerminalSize(); let displayTitle; const widthOfLongLogo = getAsciiArtWidth(longAsciiLogo); @@ -30,6 +37,8 @@ export const Header: React.FC = ({ if (customAsciiArt) { displayTitle = customAsciiArt; + } else if (config.isAwesomeEnabled()) { + displayTitle = mattAsciiLogo; } else if (terminalWidth >= widthOfLongLogo) { displayTitle = longAsciiLogo; } else if (terminalWidth >= widthOfShortLogo) { diff --git a/packages/core/src/code_assist/experiments/flagNames.ts b/packages/core/src/code_assist/experiments/flagNames.ts index 7e3931f0d9..411001aa39 100644 --- a/packages/core/src/code_assist/experiments/flagNames.ts +++ b/packages/core/src/code_assist/experiments/flagNames.ts @@ -20,6 +20,7 @@ export const ExperimentFlags = { PRO_MODEL_NO_ACCESS: 45768879, GEMINI_3_1_FLASH_LITE_LAUNCHED: 45771641, DEFAULT_REQUEST_TIMEOUT: 45773134, + ENABLE_AWESOME: 45758820, } as const; export type ExperimentFlagName = @@ -87,6 +88,11 @@ export const ExperimentMetadata: Record = { type: 'boolean', defaultValue: true, }, + [ExperimentFlags.ENABLE_AWESOME]: { + description: "When enabled, the ASCII art says 'matt'.", + type: 'boolean', + defaultValue: false, + }, }; /** diff --git a/packages/core/src/config/config.experiment.test.ts b/packages/core/src/config/config.experiment.test.ts index b044b35030..69d501aad4 100644 --- a/packages/core/src/config/config.experiment.test.ts +++ b/packages/core/src/config/config.experiment.test.ts @@ -126,4 +126,17 @@ describe('Config getExperimentValue', () => { config.getExperimentValue(ExperimentFlags.CLASSIFIER_THRESHOLD), ).toBe(0.7); }); + + it('should return true for isAwesomeEnabled when flag is set', () => { + const config = new Config({ + sessionId, + targetDir, + cwd, + model, + debugMode: false, + experimentalCliArgs: { 'enable-awesome': true }, + }); + + expect(config.isAwesomeEnabled()).toBe(true); + }); }); diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index a3c0549c23..4908f9753f 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -3079,6 +3079,7 @@ export class Config implements McpContext, AgentLoopContext { ); } +<<<<<<< HEAD /** * Returns whether the user has access to Pro models. * This is determined by the PRO_MODEL_NO_ACCESS experiment flag. @@ -3197,6 +3198,11 @@ export class Config implements McpContext, AgentLoopContext { return ( this.experiments?.flags[ExperimentFlags.GEMINI_3_1_FLASH_LITE_LAUNCHED] ?.boolValue ?? false +======= + isAwesomeEnabled(): boolean { + return ( + this.getExperimentValue(ExperimentFlags.ENABLE_AWESOME) ?? false +>>>>>>> d2ce1460f (feat(config): add enable-awesome experiment to show custom ASCII art) ); } diff --git a/schemas/settings.schema.json b/schemas/settings.schema.json index 98bc786410..94e284cae5 100644 --- a/schemas/settings.schema.json +++ b/schemas/settings.schema.json @@ -2877,6 +2877,7 @@ "default": false, "type": "boolean" }, +<<<<<<< HEAD "directWebFetch": { "title": "Direct Web Fetch", "description": "Enable web fetch behavior that bypasses LLM summarization.", @@ -2959,6 +2960,13 @@ "markdownDescription": "Enable the experimental Topic & Update communication model for reduced chattiness and structured progress reporting.\n\n- Category: `Experimental`\n- Requires restart: `no`\n- Default: `false`", "default": false, "type": "boolean" + }, + "enable-awesome": { + "title": "Enable Awesome", + "description": "When enabled, the ASCII art says 'matt'.", + "markdownDescription": "When enabled, the ASCII art says 'matt'.\n\n- Category: `Experimental`\n- Requires restart: `no`\n- Default: `false`", + "default": false, + "type": "boolean" } }, "additionalProperties": false