@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
111 lines • 4.16 kB
TypeScript
/**
* BuildInfoService - Provides build and runtime information
* Separated from main index.ts to avoid making that file larger
*
* SECURITY FIX (PR #614):
* 1. DMCP-SEC-004: FALSE POSITIVE SUPPRESSION - No user input Unicode normalization needed
* This service only processes system information (git, package.json, environment variables)
* The MCP tool 'get_build_info' takes NO parameters (empty inputSchema)
* No user-provided data flows through this service that requires Unicode normalization
*/
import { IFileOperationsService } from './FileOperationsService.js';
import type { StartupTimer, StartupReport } from '../telemetry/StartupTimer.js';
import { type PermissionHookDiagnosticRecord, type PermissionHookHealthSummary, type PermissionHookStartupRepairSummary } from '../utils/permissionHooks.js';
export interface BuildInfo {
sessionId: string;
runtimeSessionId: string;
sessionSource: 'env' | 'derived';
package: {
name: string;
version: string;
};
build: {
timestamp?: string;
type: 'git' | 'npm' | 'unknown';
gitCommit?: string;
gitBranch?: string;
};
runtime: {
nodeVersion: string;
platform: string;
arch: string;
uptime: number;
memoryUsage: NodeJS.MemoryUsage;
};
environment: {
nodeEnv?: string;
isProduction: boolean;
isDevelopment: boolean;
isDebug: boolean;
isDocker: boolean;
dockerInfo?: string;
};
server: {
startTime: Date;
uptime: number;
mcpConnection: boolean;
};
permissionHooks?: {
health: PermissionHookHealthSummary;
installedHosts: string[];
currentHosts: string[];
repairedHosts: string[];
needsRepairHosts: string[];
diagnosticsPath: string;
lastDiagnostic: PermissionHookDiagnosticRecord | null;
lastStartupRepair: PermissionHookStartupRepairSummary | null;
};
/** Issue #706: Startup timing and readiness status. */
startup?: {
status: 'ready' | 'initializing';
deferredSetupComplete: boolean;
uptimeMs: number;
startupTimingMs?: StartupReport;
};
}
export declare class BuildInfoService {
private readonly startTime;
private readonly fileOperations;
/** Issue #706: Optional startup timer for timing instrumentation. */
private startupTimer;
/** Issue #706: Callback to check deferred setup status. */
private deferredSetupChecker;
constructor(fileOperations: IFileOperationsService);
/**
* Issue #706: Wire in startup instrumentation after DI is ready.
* Called from Container to avoid circular dependency at registration time.
*/
setStartupTimer(timer: StartupTimer): void;
/**
* Issue #706: Wire in deferred setup status checker.
*/
setDeferredSetupChecker(checker: () => boolean): void;
/**
* Get comprehensive build information
* SECURITY NOTE: This method processes only system-generated data
* No user input is involved - all data comes from filesystem, git, and Node.js process
*
* Uses Promise.allSettled to collect partial results even if some sources fail,
* providing maximum information availability with graceful degradation.
*/
getBuildInfo(): Promise<BuildInfo>;
/**
* Format build info as user-friendly markdown
* SECURITY NOTE: Only formats system-generated data - no user input processing
* All input data comes from getBuildInfo() which only reads system information
*/
formatBuildInfo(info: BuildInfo): string;
/**
* SECURITY NOTE: No Unicode normalization needed - executes system git commands
* Data source: Git CLI output (system-controlled), no user input
*/
private getGitInfo;
/**
* SECURITY NOTE: No Unicode normalization needed - reads container runtime files
* Data source: System cgroup files (container-controlled), no user input
*/
private getDockerInfo;
private formatUptime;
private formatMemory;
}
//# sourceMappingURL=BuildInfoService.d.ts.map