UNPKG

claude-code-emacs-mcp-server

Version:

MCP server for Claude Code Emacs integration

204 lines 7.71 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.diffTools = void 0; exports.handleOpenDiffFile = handleOpenDiffFile; exports.handleOpenRevisionDiff = handleOpenRevisionDiff; exports.handleOpenCurrentChanges = handleOpenCurrentChanges; exports.handleOpenDiffContent = handleOpenDiffContent; const diff_schema_js_1 = require("../schemas/diff-schema.js"); // Helper function for openDiffFile async function handleOpenDiffFile(bridge, params) { if (!bridge.isConnected()) { return { content: [{ type: 'text', text: 'Error: Emacs is not connected' }], structuredContent: { status: 'error', message: 'Emacs is not connected' }, isError: true }; } try { const response = await bridge.request('openDiffFile', { fileA: params.fileA, fileB: params.fileB }); if (response.status === 'error') { return { content: [{ type: 'text', text: `Error: ${response.message}` }], structuredContent: response, isError: true }; } return { content: [{ type: 'text', text: `Opened diff comparison for files: ${params.fileA} and ${params.fileB}` }], structuredContent: response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: 'text', text: `Error opening diff: ${errorMessage}` }], structuredContent: { status: 'error', message: errorMessage }, isError: true }; } } // Helper function for openRevisionDiff async function handleOpenRevisionDiff(bridge, params) { if (!bridge.isConnected()) { return { content: [{ type: 'text', text: 'Error: Emacs is not connected' }], structuredContent: { status: 'error', message: 'Emacs is not connected' }, isError: true }; } try { const revision = params.revision || 'HEAD'; const response = await bridge.request('openRevisionDiff', { file: params.file, revision }); if (response.status === 'error') { return { content: [{ type: 'text', text: `Error: ${response.message}` }], structuredContent: response, isError: true }; } return { content: [{ type: 'text', text: `Comparing ${params.file} with revision ${revision}` }], structuredContent: response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: 'text', text: `Error opening revision diff: ${errorMessage}` }], structuredContent: { status: 'error', message: errorMessage }, isError: true }; } } // Helper function for openCurrentChanges async function handleOpenCurrentChanges(bridge, params) { if (!bridge.isConnected()) { return { content: [{ type: 'text', text: 'Error: Emacs is not connected' }], structuredContent: { status: 'error', message: 'Emacs is not connected' }, isError: true }; } try { const response = await bridge.request('openCurrentChanges', params); if (response.status === 'error') { return { content: [{ type: 'text', text: `Error: ${response.message}` }], structuredContent: response, isError: true }; } const fileName = response.file || params.file || 'current file'; return { content: [{ type: 'text', text: `Showing uncommitted changes for ${fileName}` }], structuredContent: response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: 'text', text: `Error showing current changes: ${errorMessage}` }], structuredContent: { status: 'error', message: errorMessage }, isError: true }; } } // Helper function for openDiffContent async function handleOpenDiffContent(bridge, params) { if (!bridge.isConnected()) { return { content: [{ type: 'text', text: 'Error: Emacs is not connected' }], structuredContent: { status: 'error', message: 'Emacs is not connected' }, isError: true }; } try { const response = await bridge.request('openDiffContent', { contentA: params.contentA, contentB: params.contentB, titleA: params.titleA, titleB: params.titleB }); if (response.status === 'error') { return { content: [{ type: 'text', text: `Error: ${response.message}` }], structuredContent: response, isError: true }; } return { content: [{ type: 'text', text: `Opened diff comparison for: ${params.titleA} and ${params.titleB}` }], structuredContent: response }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; return { content: [{ type: 'text', text: `Error opening diff content: ${errorMessage}` }], structuredContent: { status: 'error', message: errorMessage }, isError: true }; } } exports.diffTools = { openDiffFile: { name: 'openDiffFile', description: 'Compare two DIFFERENT files side-by-side in Emacs ediff. Use this to see differences between two distinct files. For comparing a file with its git history, use openRevisionDiff instead.', inputSchema: diff_schema_js_1.openDiffFileInputSchema, outputSchema: diff_schema_js_1.diffToolOutputSchema, handler: handleOpenDiffFile }, openRevisionDiff: { name: 'openRevisionDiff', description: 'Compare a file with its previous version from git history. Use this when you want to see what changed in a file over time, not for comparing two different files.', inputSchema: diff_schema_js_1.openRevisionDiffInputSchema, outputSchema: diff_schema_js_1.diffToolOutputSchema, handler: handleOpenRevisionDiff }, openCurrentChanges: { name: 'openCurrentChanges', description: 'Show uncommitted git changes for a file in ediff. This compares the working copy with the last committed version (git diff).', inputSchema: diff_schema_js_1.openCurrentChangesInputSchema, outputSchema: diff_schema_js_1.diffToolOutputSchema, handler: handleOpenCurrentChanges }, openDiffContent: { name: 'openDiffContent', description: 'Compare two text snippets or code blocks in temporary buffers. Use this for comparing content that is not saved in files, such as different versions of code snippets, API responses, or generated content.', inputSchema: diff_schema_js_1.openDiffContentInputSchema, outputSchema: diff_schema_js_1.diffToolOutputSchema, handler: handleOpenDiffContent } }; //# sourceMappingURL=diff-tools.js.map