diff --git a/package-lock.json b/package-lock.json index 31201853..21c0c1b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "maestro", - "version": "0.13.0", + "version": "0.13.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "maestro", - "version": "0.13.0", + "version": "0.13.1", "hasInstallScript": true, "license": "AGPL 3.0", "dependencies": { diff --git a/src/main/index.ts b/src/main/index.ts index fd68a0c4..d6035ffb 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -12,7 +12,7 @@ import { tunnelManager } from './tunnel-manager'; import { getThemeById } from './themes'; import Store from 'electron-store'; import { getHistoryManager } from './history-manager'; -import { registerGitHandlers, registerAutorunHandlers, registerPlaybooksHandlers, registerHistoryHandlers, registerAgentsHandlers, registerProcessHandlers, registerPersistenceHandlers, registerSystemHandlers, registerClaudeHandlers, registerAgentSessionsHandlers, registerGroupChatHandlers, registerDebugHandlers, registerSpeckitHandlers, registerOpenSpecHandlers, registerContextHandlers, registerMarketplaceHandlers, registerStatsHandlers, setupLoggerEventForwarding, cleanupAllGroomingSessions, getActiveGroomingSessionCount } from './ipc/handlers'; +import { registerGitHandlers, registerAutorunHandlers, registerPlaybooksHandlers, registerHistoryHandlers, registerAgentsHandlers, registerProcessHandlers, registerPersistenceHandlers, registerSystemHandlers, registerClaudeHandlers, registerAgentSessionsHandlers, registerGroupChatHandlers, registerDebugHandlers, registerSpeckitHandlers, registerOpenSpecHandlers, registerContextHandlers, registerMarketplaceHandlers, registerStatsHandlers, registerDocumentGraphHandlers, registerSshRemoteHandlers, setupLoggerEventForwarding, cleanupAllGroomingSessions, getActiveGroomingSessionCount } from './ipc/handlers'; import { initializeStatsDB, closeStatsDB, getStatsDB } from './stats-db'; import { groupChatEmitters } from './ipc/handlers/groupChat'; import { routeModeratorResponse, routeAgentResponse, setGetSessionsCallback, setGetCustomEnvVarsCallback, setGetAgentConfigCallback, markParticipantResponded, spawnModeratorSynthesis, getGroupChatReadOnlyState, respawnParticipantWithRecovery } from './group-chat/group-chat-router'; @@ -1110,6 +1110,17 @@ function setupIpcHandlers() { settingsStore: store, }); + // Register Document Graph handlers for file watching + registerDocumentGraphHandlers({ + getMainWindow: () => mainWindow, + app, + }); + + // Register SSH Remote handlers for managing SSH configurations + registerSshRemoteHandlers({ + settingsStore: store, + }); + // Set up callback for group chat router to lookup sessions for auto-add @mentions setGetSessionsCallback(() => { const sessions = sessionsStore.get('sessions', []); diff --git a/src/renderer/components/SettingsModal.tsx b/src/renderer/components/SettingsModal.tsx index af36b11d..95347138 100644 --- a/src/renderer/components/SettingsModal.tsx +++ b/src/renderer/components/SettingsModal.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect, useRef, memo } from 'react'; -import { X, Key, Moon, Sun, Keyboard, Check, Terminal, Bell, Cpu, Settings, Palette, Sparkles, History, Download, Bug, Cloud, FolderSync, RotateCcw, Folder, ChevronDown, Plus, Trash2, Brain, AlertTriangle, FlaskConical, Database } from 'lucide-react'; +import { X, Key, Moon, Sun, Keyboard, Check, Terminal, Bell, Cpu, Settings, Palette, Sparkles, History, Download, Bug, Cloud, FolderSync, RotateCcw, Folder, ChevronDown, Plus, Trash2, Brain, AlertTriangle, FlaskConical, Database, Server } from 'lucide-react'; import { useSettings } from '../hooks'; import type { Theme, ThemeColors, ThemeId, Shortcut, ShellInfo, CustomAICommand, LLMProvider } from '../types'; import { CustomThemeBuilder } from './CustomThemeBuilder'; @@ -220,7 +220,7 @@ interface SettingsModalProps { setCrashReportingEnabled: (value: boolean) => void; customAICommands: CustomAICommand[]; setCustomAICommands: (commands: CustomAICommand[]) => void; - initialTab?: 'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands'; + initialTab?: 'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands' | 'ssh'; hasNoAgents?: boolean; onThemeImportError?: (message: string) => void; onThemeImportSuccess?: (message: string) => void; @@ -247,7 +247,7 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro setDefaultStatsTimeRange, } = useSettings(); - const [activeTab, setActiveTab] = useState<'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands'>('general'); + const [activeTab, setActiveTab] = useState<'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands' | 'ssh'>('general'); const [systemFonts, setSystemFonts] = useState([]); const [customFonts, setCustomFonts] = useState([]); const [fontLoading, setFontLoading] = useState(false); @@ -375,9 +375,9 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro if (!isOpen) return; const handleTabNavigation = (e: KeyboardEvent) => { - const tabs: Array<'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands'> = FEATURE_FLAGS.LLM_SETTINGS - ? ['general', 'llm', 'shortcuts', 'theme', 'notifications', 'aicommands'] - : ['general', 'shortcuts', 'theme', 'notifications', 'aicommands']; + const tabs: Array<'general' | 'llm' | 'shortcuts' | 'theme' | 'notifications' | 'aicommands' | 'ssh'> = FEATURE_FLAGS.LLM_SETTINGS + ? ['general', 'llm', 'shortcuts', 'theme', 'notifications', 'aicommands', 'ssh'] + : ['general', 'shortcuts', 'theme', 'notifications', 'aicommands', 'ssh']; const currentIndex = tabs.indexOf(activeTab); if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key === '[') { @@ -764,6 +764,10 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro {activeTab === 'aicommands' && AI Commands} +
@@ -1592,9 +1596,6 @@ export const SettingsModal = memo(function SettingsModal(props: SettingsModalPro - {/* SSH Remote Hosts */} - - {/* Settings Storage Location */}
)} + + {activeTab === 'ssh' && ( +
+ +
+ )}