claude-code-emacs-mcp-server
Version:
MCP server for Claude Code Emacs integration
204 lines • 7.71 kB
JavaScript
;
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