From a3f5dafdabd9951cd4e5ecb881688bc3803d5abf Mon Sep 17 00:00:00 2001 From: matt Date: Thu, 12 Feb 2026 09:12:49 +0900 Subject: [PATCH] feat(01-01): thread FileSystemProvider through SessionParser and SubagentResolver - Add getFileSystemProvider() getter to ProjectScanner - Update SessionParser.parseSessionFile() to pass provider to parseJsonlFile() - Update SessionParser.parseSubagentFile() to pass provider to parseJsonlFile() - Update SubagentResolver.parseSubagentFile() to pass provider to parseJsonlFile() - Update SessionParser test mock to include getFileSystemProvider method Co-Authored-By: Claude Opus 4.6 --- src/main/services/discovery/ProjectScanner.ts | 7 +++++++ src/main/services/discovery/SubagentResolver.ts | 2 +- src/main/services/parsing/SessionParser.ts | 4 ++-- test/main/services/parsing/SessionParser.test.ts | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/services/discovery/ProjectScanner.ts b/src/main/services/discovery/ProjectScanner.ts index e118dd7b..c8e454e4 100644 --- a/src/main/services/discovery/ProjectScanner.ts +++ b/src/main/services/discovery/ProjectScanner.ts @@ -756,6 +756,13 @@ export class ProjectScanner { return this.todosDir; } + /** + * Gets the FileSystemProvider instance used by this scanner. + */ + getFileSystemProvider(): FileSystemProvider { + return this.fsProvider; + } + /** * Checks if the projects directory exists. */ diff --git a/src/main/services/discovery/SubagentResolver.ts b/src/main/services/discovery/SubagentResolver.ts index 66b11391..ee11c960 100644 --- a/src/main/services/discovery/SubagentResolver.ts +++ b/src/main/services/discovery/SubagentResolver.ts @@ -85,7 +85,7 @@ export class SubagentResolver { */ private async parseSubagentFile(filePath: string): Promise { try { - const messages = await parseJsonlFile(filePath); + const messages = await parseJsonlFile(filePath, this.projectScanner.getFileSystemProvider()); if (messages.length === 0) { return null; diff --git a/src/main/services/parsing/SessionParser.ts b/src/main/services/parsing/SessionParser.ts index e9c00547..b0fb3f0c 100644 --- a/src/main/services/parsing/SessionParser.ts +++ b/src/main/services/parsing/SessionParser.ts @@ -74,7 +74,7 @@ export class SessionParser { * Parse a JSONL file at the given path. */ async parseSessionFile(filePath: string): Promise { - const messages = await parseJsonlFile(filePath); + const messages = await parseJsonlFile(filePath, this.projectScanner.getFileSystemProvider()); return this.processMessages(messages); } @@ -339,7 +339,7 @@ export class SessionParser { messages: ParsedMessage[]; metrics: SessionMetrics; }> { - const messages = await parseJsonlFile(filePath); + const messages = await parseJsonlFile(filePath, this.projectScanner.getFileSystemProvider()); const metrics = calculateMetrics(messages); return { messages, metrics }; diff --git a/test/main/services/parsing/SessionParser.test.ts b/test/main/services/parsing/SessionParser.test.ts index c80ec8dd..f511d471 100644 --- a/test/main/services/parsing/SessionParser.test.ts +++ b/test/main/services/parsing/SessionParser.test.ts @@ -16,6 +16,7 @@ import { type ParsedSession, } from '../../../../src/main/services/parsing/SessionParser'; import type { ParsedMessage } from '../../../../src/main/types'; +import { LocalFileSystemProvider } from '../../../../src/main/services/infrastructure/LocalFileSystemProvider'; // ============================================================================= // Mock ProjectScanner @@ -30,6 +31,7 @@ const mockProjectScanner = { getSession: vi.fn(), listWorktreeSessions: vi.fn(), scanWithWorktreeGrouping: vi.fn(), + getFileSystemProvider: vi.fn().mockReturnValue(new LocalFileSystemProvider()), }; // =============================================================================