mcp-chrome-bridge
Version:
Chrome Native-Messaging host (Node)
134 lines (133 loc) • 4.4 kB
TypeScript
import type { AgentAttachment, RealtimeEvent } from '../types';
import type { CodexEngineConfig } from 'chrome-mcp-shared';
export interface EngineInitOptions {
sessionId: string;
instruction: string;
model?: string;
projectRoot?: string;
requestId: string;
/**
* AbortSignal for cancellation support.
*/
signal?: AbortSignal;
/**
* Optional attachments (images/files) to include with the instruction.
* Note: When using persisted attachments, use resolvedImagePaths instead.
*/
attachments?: AgentAttachment[];
/**
* Resolved absolute paths to persisted image files.
* These are used by engines instead of writing temp files from base64.
* Set by chat-service after saving attachments to persistent storage.
*/
resolvedImagePaths?: string[];
/**
* Optional project ID for session persistence.
* When provided, engines can use this to save/load session state.
*/
projectId?: string;
/**
* Optional database session ID (sessions.id) for session-scoped configuration and persistence.
*/
dbSessionId?: string;
/**
* Optional session-scoped permission mode override (Claude SDK option).
*/
permissionMode?: string;
/**
* Optional session-scoped permission bypass override (Claude SDK option).
*/
allowDangerouslySkipPermissions?: boolean;
/**
* Optional session-scoped system prompt configuration.
*/
systemPromptConfig?: unknown;
/**
* Optional session-scoped engine option overrides.
*/
optionsConfig?: unknown;
/**
* Optional Claude session ID (UUID) for resuming a previous session.
* Only applicable to ClaudeEngine; retrieved from sessions.engineSessionId (preferred)
* or project's activeClaudeSessionId (legacy fallback).
*/
resumeClaudeSessionId?: string;
/**
* Whether to use Claude Code Router (CCR) for this request.
* Only applicable to ClaudeEngine; when true, CCR will be auto-detected.
*/
useCcr?: boolean;
/**
* Optional Codex-specific configuration overrides.
* Only applicable to CodexEngine; merged with DEFAULT_CODEX_CONFIG.
*/
codexConfig?: Partial<CodexEngineConfig>;
}
/**
* Callback to persist Claude session ID after initialization.
*/
export type ClaudeSessionPersistCallback = (sessionId: string) => Promise<void>;
/**
* Management information extracted from Claude SDK system:init message.
*/
export interface ClaudeManagementInfo {
tools?: string[];
agents?: string[];
/** Plugins with name and path (SDK returns { name, path }[]) */
plugins?: Array<{
name: string;
path?: string;
}>;
skills?: string[];
mcpServers?: Array<{
name: string;
status: string;
}>;
slashCommands?: string[];
model?: string;
permissionMode?: string;
cwd?: string;
outputStyle?: string;
betas?: string[];
claudeCodeVersion?: string;
apiKeySource?: string;
}
/**
* Callback to persist management information after SDK initialization.
*/
export type ManagementInfoPersistCallback = (info: ClaudeManagementInfo) => Promise<void>;
export type EngineName = 'claude' | 'codex' | 'cursor' | 'qwen' | 'glm';
export interface EngineExecutionContext {
/**
* Emit a realtime event to all connected clients for the current session.
*/
emit(event: RealtimeEvent): void;
/**
* Optional callback to persist Claude session ID after SDK initialization.
* Only called by ClaudeEngine when projectId is provided.
*/
persistClaudeSessionId?: ClaudeSessionPersistCallback;
/**
* Optional callback to persist management information after SDK initialization.
* Only called by ClaudeEngine when dbSessionId is provided.
*/
persistManagementInfo?: ManagementInfoPersistCallback;
}
export interface AgentEngine {
name: EngineName;
/**
* Whether this engine can act as an MCP client natively.
*/
supportsMcp?: boolean;
initializeAndRun(options: EngineInitOptions, ctx: EngineExecutionContext): Promise<void>;
}
/**
* Represents a running engine execution that can be cancelled.
*/
export interface RunningExecution {
requestId: string;
sessionId: string;
engineName: EngineName;
abortController: AbortController;
startedAt: Date;
}