get_session_diff
Compare file changes and snapshot information between Claude Code conversation sessions to track project evolution and modifications.
Instructions
Get diff summary for a session including file changes and snapshot info
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes | Project folder name | |
| session_id | Yes | Session ID |
Implementation Reference
- src/lib/session.ts:468-525 (handler)Core implementation of getSessionDiffSummary: reads session messages, derives session title from first human message, iterates through messages to find file-history-snapshot events, extracts unique file changes with backup previews, counts snapshots, and returns a structured summary.export const getSessionDiffSummary = (projectName: string, sessionId: string) => Effect.gen(function* () { const messages = yield* readSession(projectName, sessionId) // Extract title const title = pipe( messages, A.findFirst((m) => m.type === 'human'), O.map((m) => { const msg = m.message as { content?: string } | undefined const content = msg?.content ?? '' return content.slice(0, 50) + (content.length > 50 ? '...' : '') }), O.getOrElse(() => 'Untitled') ) const changes: FileDiffSummary['changes'] = [] const seenFiles = new Set<string>() let snapshotCount = 0 for (const msg of messages) { if (msg.type === 'file-history-snapshot') { snapshotCount++ const snapshot = msg as { type: string snapshot?: { trackedFileBackups?: Record<string, { content?: string }> } } const backups = snapshot.snapshot?.trackedFileBackups if (backups && typeof backups === 'object') { for (const [filePath, backup] of Object.entries(backups)) { if (!seenFiles.has(filePath)) { seenFiles.add(filePath) const backupData = backup as { content?: string } | undefined const content = backupData?.content ?? '' changes.push({ path: filePath, action: 'modified', hasBackup: content.length > 0, backupPreview: content.slice(0, 100) + (content.length > 100 ? '...' : ''), }) } } } } } return { sessionId, projectName, title, changes, totalFiles: changes.length, snapshotCount, } satisfies FileDiffSummary })
- src/mcp/index.ts:154-167 (registration)Registers the MCP tool 'get_session_diff' with server.tool, providing description, input schema, and a thin handler that invokes the core getSessionDiffSummary function and returns JSON response.server.tool( 'get_session_diff', 'Get diff summary for a session including file changes and snapshot info', { project_name: z.string().describe('Project folder name'), session_id: z.string().describe('Session ID'), }, async ({ project_name, session_id }) => { const result = await Effect.runPromise(session.getSessionDiffSummary(project_name, session_id)) return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], } } )
- src/mcp/index.ts:157-160 (schema)Zod input schema defining required string parameters: project_name and session_id for the get_session_diff tool.{ project_name: z.string().describe('Project folder name'), session_id: z.string().describe('Session ID'), },