fix: replace any types with proper TypeScript types

Replace all `any` types with properly defined TypeScript interfaces and types throughout the codebase to improve type safety and eliminate type-related code quality issues.

Changes:
- Define ElectronSafeStorage interface for Electron's safeStorage API
- Create LegacySettings interface for settings migration in main.ts
- Define JSONValue, JSONRPCParams types for JSON-RPC protocol
- Define JSONSchemaProperty for tool input schemas
- Create YAMLValue type for frontmatter values
- Define FrontmatterValue type for adapter interfaces
- Update middleware to use proper Express NextFunction and JSONRPCResponse types
- Fix tool registry to handle args with proper typing (with eslint-disable for dynamic dispatch)
- Fix notifications to use proper types with eslint-disable where dynamic access is needed
- Add proper null safety assertions where appropriate
- Fix TFolder stat access with proper type extension

All type errors resolved. TypeScript compilation passes with --skipLibCheck.
This commit is contained in:
2025-11-07 11:10:52 -05:00
parent b0fc0be629
commit 2a7fce45af
13 changed files with 127 additions and 50 deletions

View File

@@ -1,22 +1,39 @@
// MCP Protocol Types
/**
* JSON-RPC compatible value types
*/
export type JSONValue =
| string
| number
| boolean
| null
| JSONValue[]
| { [key: string]: JSONValue };
/**
* JSON-RPC parameters can be an object or array
*/
export type JSONRPCParams = { [key: string]: JSONValue } | JSONValue[];
export interface JSONRPCRequest {
jsonrpc: "2.0";
id?: string | number;
method: string;
params?: any;
params?: JSONRPCParams;
}
export interface JSONRPCResponse {
jsonrpc: "2.0";
id: string | number | null;
result?: any;
result?: JSONValue;
error?: JSONRPCError;
}
export interface JSONRPCError {
code: number;
message: string;
data?: any;
data?: JSONValue;
}
export enum ErrorCodes {
@@ -38,12 +55,25 @@ export interface InitializeResult {
};
}
/**
* JSON Schema property definition
*/
export interface JSONSchemaProperty {
type: string;
description?: string;
enum?: string[];
items?: JSONSchemaProperty;
properties?: Record<string, JSONSchemaProperty>;
required?: string[];
[key: string]: string | string[] | JSONSchemaProperty | Record<string, JSONSchemaProperty> | undefined;
}
export interface Tool {
name: string;
description: string;
inputSchema: {
type: string;
properties: Record<string, any>;
properties: Record<string, JSONSchemaProperty>;
required?: string[];
};
}
@@ -160,7 +190,7 @@ export interface FrontmatterSummary {
title?: string;
tags?: string[];
aliases?: string[];
[key: string]: any;
[key: string]: JSONValue | undefined;
}
export interface FileMetadataWithFrontmatter extends FileMetadata {
@@ -179,7 +209,7 @@ export interface ParsedNote {
path: string;
hasFrontmatter: boolean;
frontmatter?: string;
parsedFrontmatter?: Record<string, any>;
parsedFrontmatter?: Record<string, JSONValue>;
content: string;
contentWithoutFrontmatter?: string;
wordCount?: number;
@@ -200,9 +230,9 @@ export interface ExcalidrawMetadata {
hasCompressedData?: boolean;
/** Drawing metadata including appState and version */
metadata?: {
appState?: Record<string, any>;
appState?: Record<string, JSONValue>;
version?: number;
[key: string]: any;
[key: string]: JSONValue | undefined;
};
/** Preview text extracted from text elements section (when includePreview=true) */
preview?: string;