diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts index b7857de1..40178748 100644 --- a/app/lib/runtime/action-runner.ts +++ b/app/lib/runtime/action-runner.ts @@ -10,7 +10,7 @@ import { validateCode } from './code-validator'; const logger = createScopedLogger('ActionRunner'); -export type ActionStatus = 'pending' | 'running' | 'complete' | 'aborted' | 'failed'; +export type ActionStatus = 'pending' | 'running' | 'complete' | 'aborted' | 'failed' | 'awaiting-approval'; export type BaseActionState = BoltAction & { status: Exclude; diff --git a/app/lib/stores/settings.ts b/app/lib/stores/settings.ts index a31c49a9..390d2b5b 100644 --- a/app/lib/stores/settings.ts +++ b/app/lib/stores/settings.ts @@ -131,6 +131,9 @@ const SETTINGS_KEYS = { EVENT_LOGS: 'isEventLogsEnabled', PROMPT_ID: 'promptId', DEVELOPER_MODE: 'isDeveloperMode', + LIVE_ACTION_CONSOLE: 'liveActionConsoleEnabled', + DIFF_APPROVAL: 'diffApprovalEnabled', + VISUAL_CONTEXT_INDICATOR: 'visualContextIndicatorEnabled', } as const; // Initialize settings from localStorage or defaults @@ -160,6 +163,9 @@ const getInitialSettings = () => { eventLogs: getStoredBoolean(SETTINGS_KEYS.EVENT_LOGS, true), promptId: isBrowser ? localStorage.getItem(SETTINGS_KEYS.PROMPT_ID) || 'default' : 'default', developerMode: getStoredBoolean(SETTINGS_KEYS.DEVELOPER_MODE, false), + liveActionConsole: getStoredBoolean(SETTINGS_KEYS.LIVE_ACTION_CONSOLE, true), + diffApproval: getStoredBoolean(SETTINGS_KEYS.DIFF_APPROVAL, false), + visualContextIndicator: getStoredBoolean(SETTINGS_KEYS.VISUAL_CONTEXT_INDICATOR, true), }; }; @@ -171,6 +177,9 @@ export const autoSelectStarterTemplate = atom(initialSettings.autoSelec export const enableContextOptimizationStore = atom(initialSettings.contextOptimization); export const isEventLogsEnabled = atom(initialSettings.eventLogs); export const promptStore = atom(initialSettings.promptId); +export const liveActionConsoleStore = atom(initialSettings.liveActionConsole); +export const diffApprovalStore = atom(initialSettings.diffApproval); +export const visualContextIndicatorStore = atom(initialSettings.visualContextIndicator); // Helper functions to update settings with persistence export const updateLatestBranch = (enabled: boolean) => { @@ -198,6 +207,21 @@ export const updatePromptId = (id: string) => { localStorage.setItem(SETTINGS_KEYS.PROMPT_ID, id); }; +export const updateLiveActionConsole = (enabled: boolean) => { + liveActionConsoleStore.set(enabled); + localStorage.setItem(SETTINGS_KEYS.LIVE_ACTION_CONSOLE, JSON.stringify(enabled)); +}; + +export const updateDiffApproval = (enabled: boolean) => { + diffApprovalStore.set(enabled); + localStorage.setItem(SETTINGS_KEYS.DIFF_APPROVAL, JSON.stringify(enabled)); +}; + +export const updateVisualContextIndicator = (enabled: boolean) => { + visualContextIndicatorStore.set(enabled); + localStorage.setItem(SETTINGS_KEYS.VISUAL_CONTEXT_INDICATOR, JSON.stringify(enabled)); +}; + // Initialize tab configuration from localStorage or defaults const getInitialTabConfiguration = (): TabWindowConfig => { const defaultConfig: TabWindowConfig = { diff --git a/app/types/actions.ts b/app/types/actions.ts index 0d54aa38..a2494dd6 100644 --- a/app/types/actions.ts +++ b/app/types/actions.ts @@ -46,6 +46,9 @@ export interface ActionAlert { timestamp?: number; command?: string; exitCode?: number; + isStreaming?: boolean; + streamingOutput?: string; + progress?: number; } export interface SupabaseAlert { diff --git a/app/types/context.ts b/app/types/context.ts index 00b72ac2..4373d3f3 100644 --- a/app/types/context.ts +++ b/app/types/context.ts @@ -1,7 +1,12 @@ +export type FileCategory = 'component' | 'config' | 'style' | 'test' | 'api' | 'util' | 'other'; + export type ContextAnnotation = | { type: 'codeContext'; files: string[]; + categories?: Record; + relevanceScores?: Record; + selectionReason?: string; } | { type: 'chatSummary';