feat: add MCP and LSP tooling support

Add global MCP/LSP settings, per-session Activity toggles, sidecar runtime integration, tests, and documentation updates.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-23 22:51:03 +01:00
co-authored by Copilot
parent 50a8e5dfbe
commit efa5c44e07
26 changed files with 3196 additions and 47 deletions
+5
View File
@@ -8,6 +8,11 @@ export const ipcChannels = {
savePattern: 'patterns:save',
deletePattern: 'patterns:delete',
setPatternFavorite: 'patterns:set-favorite',
saveMcpServer: 'tooling:mcp:save',
deleteMcpServer: 'tooling:mcp:delete',
saveLspProfile: 'tooling:lsp:save',
deleteLspProfile: 'tooling:lsp:delete',
updateSessionTooling: 'sessions:update-tooling',
createSession: 'sessions:create',
duplicateSession: 'sessions:duplicate',
renameSession: 'sessions:rename',
+22
View File
@@ -3,6 +3,11 @@ import type { PatternDefinition, ReasoningEffort } from '@shared/domain/pattern'
import type { ProjectRecord } from '@shared/domain/project';
import type { QuerySessionsInput, SessionQueryResult } from '@shared/domain/sessionLibrary';
import type { SessionEventRecord } from '@shared/domain/event';
import type {
LspProfileDefinition,
McpServerDefinition,
SessionToolingSelection,
} from '@shared/domain/tooling';
import type { WorkspaceState } from '@shared/domain/workspace';
export interface CreateSessionInput {
@@ -49,6 +54,18 @@ export interface SetPatternFavoriteInput {
isFavorite: boolean;
}
export interface SaveMcpServerInput {
server: McpServerDefinition;
}
export interface SaveLspProfileInput {
profile: LspProfileDefinition;
}
export interface UpdateSessionToolingInput extends SessionToolingSelection {
sessionId: string;
}
export interface ElectronApi {
describeSidecarCapabilities(): Promise<SidecarCapabilities>;
refreshSidecarCapabilities(): Promise<SidecarCapabilities>;
@@ -58,6 +75,11 @@ export interface ElectronApi {
refreshProjectGitContext(projectId?: string): Promise<WorkspaceState>;
savePattern(input: SavePatternInput): Promise<WorkspaceState>;
deletePattern(patternId: string): Promise<WorkspaceState>;
saveMcpServer(input: SaveMcpServerInput): Promise<WorkspaceState>;
deleteMcpServer(serverId: string): Promise<WorkspaceState>;
saveLspProfile(input: SaveLspProfileInput): Promise<WorkspaceState>;
deleteLspProfile(profileId: string): Promise<WorkspaceState>;
updateSessionTooling(input: UpdateSessionToolingInput): Promise<WorkspaceState>;
createSession(input: CreateSessionInput): Promise<WorkspaceState>;
duplicateSession(input: DuplicateSessionInput): Promise<WorkspaceState>;
renameSession(input: RenameSessionInput): Promise<WorkspaceState>;
+37
View File
@@ -73,10 +73,47 @@ export interface RunTurnCommand {
workspaceKind?: 'project' | 'scratchpad';
pattern: PatternDefinition;
messages: ChatMessageRecord[];
tooling?: RunTurnToolingConfig;
}
export type SidecarCommand = DescribeCapabilitiesCommand | ValidatePatternCommand | RunTurnCommand;
export interface RunTurnLocalMcpServerConfig {
id: string;
name: string;
transport: 'local';
tools: string[];
timeoutMs?: number;
command: string;
args: string[];
cwd?: string;
}
export interface RunTurnRemoteMcpServerConfig {
id: string;
name: string;
transport: 'http' | 'sse';
tools: string[];
timeoutMs?: number;
url: string;
}
export type RunTurnMcpServerConfig = RunTurnLocalMcpServerConfig | RunTurnRemoteMcpServerConfig;
export interface RunTurnLspProfileConfig {
id: string;
name: string;
command: string;
args: string[];
languageId: string;
fileExtensions: string[];
}
export interface RunTurnToolingConfig {
mcpServers: RunTurnMcpServerConfig[];
lspProfiles: RunTurnLspProfileConfig[];
}
export interface CapabilitiesEvent {
type: 'capabilities';
requestId: string;