rlm-analyzer 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +226 -0
- package/dist/analyzer.d.ts +58 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +203 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/cli.d.ts +28 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +442 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +118 -0
- package/dist/config.js.map +1 -0
- package/dist/executor.d.ts +71 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +315 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +126 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +19 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +336 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/models.d.ts +101 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +202 -0
- package/dist/models.js.map +1 -0
- package/dist/orchestrator.d.ts +61 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +325 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/prompts.d.ts +48 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +220 -0
- package/dist/prompts.js.map +1 -0
- package/dist/types.d.ts +125 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +87 -0
- package/dist/types.js.map +1 -0
- package/package.json +77 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RLM Analyzer
|
|
3
|
+
* Recursive Language Model code analysis tool
|
|
4
|
+
*
|
|
5
|
+
* Based on MIT CSAIL research: arXiv:2512.24601v1
|
|
6
|
+
* "Recursive Language Models: A Paradigm for Processing Arbitrarily Long Inputs"
|
|
7
|
+
*/
|
|
8
|
+
// Types
|
|
9
|
+
export * from './types.js';
|
|
10
|
+
// Configuration
|
|
11
|
+
export { getApiKey, getAIClient, initConfig, hasApiKey } from './config.js';
|
|
12
|
+
// Model configuration (new in v1.1)
|
|
13
|
+
export {
|
|
14
|
+
// Resolution functions
|
|
15
|
+
resolveModelConfig, getDefaultModel, getFallbackModel, resolveModelAlias, isModelAlias,
|
|
16
|
+
// Display helpers
|
|
17
|
+
getModelConfigDisplay, getAliasesDisplay,
|
|
18
|
+
// Constants
|
|
19
|
+
MODEL_ALIASES, AVAILABLE_MODELS,
|
|
20
|
+
// Backward compatibility (deprecated)
|
|
21
|
+
DEFAULT_MODEL, FALLBACK_MODEL, } from './models.js';
|
|
22
|
+
// Core components
|
|
23
|
+
export { RLMExecutor } from './executor.js';
|
|
24
|
+
export { RLMOrchestrator } from './orchestrator.js';
|
|
25
|
+
// High-level analysis functions
|
|
26
|
+
export { loadFiles, analyzeCodebase, analyzeArchitecture, analyzeDependencies, analyzeSecurity, analyzePerformance, analyzeRefactoring, summarizeCodebase, findUsages, explainFile, askQuestion, } from './analyzer.js';
|
|
27
|
+
// Prompts
|
|
28
|
+
export { CODE_ANALYSIS_PROMPT, ARCHITECTURE_PROMPT, DEPENDENCY_PROMPT, SECURITY_PROMPT, PERFORMANCE_PROMPT, REFACTOR_PROMPT, SUMMARY_PROMPT, getSystemPrompt, getAnalysisPrompt, buildContextMessage, } from './prompts.js';
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Factory Functions for IDE Integration (Claude Code, Codex, Cursor)
|
|
31
|
+
// ============================================================================
|
|
32
|
+
import { RLMOrchestrator } from './orchestrator.js';
|
|
33
|
+
import { analyzeCodebase } from './analyzer.js';
|
|
34
|
+
import { resolveModelConfig } from './models.js';
|
|
35
|
+
import { getDefaultRLMConfig } from './types.js';
|
|
36
|
+
/**
|
|
37
|
+
* Create an analyzer instance for IDE integration
|
|
38
|
+
*
|
|
39
|
+
* This is the recommended way to use RLM Analyzer programmatically.
|
|
40
|
+
* It handles model resolution using the priority chain and returns
|
|
41
|
+
* a configured analyzer ready for use.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* import { createAnalyzer } from 'rlm-analyzer';
|
|
46
|
+
*
|
|
47
|
+
* // Use default configuration
|
|
48
|
+
* const analyzer = createAnalyzer();
|
|
49
|
+
* const result = await analyzer.analyze('./my-project');
|
|
50
|
+
*
|
|
51
|
+
* // Use specific model
|
|
52
|
+
* const fastAnalyzer = createAnalyzer({ model: 'fast' });
|
|
53
|
+
* const result = await fastAnalyzer.analyze('./my-project');
|
|
54
|
+
*
|
|
55
|
+
* // Access the orchestrator directly
|
|
56
|
+
* const orchestrator = analyzer.orchestrator;
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @param options - Configuration options
|
|
60
|
+
* @returns Analyzer instance with analyze function and orchestrator
|
|
61
|
+
*/
|
|
62
|
+
export function createAnalyzer(options = {}) {
|
|
63
|
+
const modelConfig = resolveModelConfig({
|
|
64
|
+
model: options.model,
|
|
65
|
+
fallbackModel: options.fallbackModel,
|
|
66
|
+
});
|
|
67
|
+
const config = getDefaultRLMConfig(modelConfig.defaultModel);
|
|
68
|
+
// Apply any config overrides
|
|
69
|
+
if (options.config) {
|
|
70
|
+
Object.assign(config, options.config);
|
|
71
|
+
}
|
|
72
|
+
const orchestrator = new RLMOrchestrator(config, options.verbose);
|
|
73
|
+
const analyze = async (directory, analysisOptions = {}) => {
|
|
74
|
+
return analyzeCodebase({
|
|
75
|
+
directory,
|
|
76
|
+
...analysisOptions,
|
|
77
|
+
model: modelConfig.defaultModel,
|
|
78
|
+
verbose: options.verbose,
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
analyze,
|
|
83
|
+
orchestrator,
|
|
84
|
+
config,
|
|
85
|
+
modelConfig,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a configured RLMOrchestrator instance
|
|
90
|
+
*
|
|
91
|
+
* Use this when you need direct access to the orchestrator
|
|
92
|
+
* for custom workflows or advanced use cases.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* import { createOrchestrator, loadFiles } from 'rlm-analyzer';
|
|
97
|
+
*
|
|
98
|
+
* const orchestrator = createOrchestrator({ model: 'smart' });
|
|
99
|
+
* const files = await loadFiles('./src');
|
|
100
|
+
* const result = await orchestrator.processQuery(
|
|
101
|
+
* 'Explain this codebase',
|
|
102
|
+
* { files, variables: {}, mode: 'code-analysis' }
|
|
103
|
+
* );
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* @param options - Configuration options
|
|
107
|
+
* @returns Configured RLMOrchestrator instance
|
|
108
|
+
*/
|
|
109
|
+
export function createOrchestrator(options = {}) {
|
|
110
|
+
const modelConfig = resolveModelConfig({ model: options.model });
|
|
111
|
+
const config = getDefaultRLMConfig(modelConfig.defaultModel);
|
|
112
|
+
// Apply any config overrides
|
|
113
|
+
if (options.config) {
|
|
114
|
+
Object.assign(config, options.config);
|
|
115
|
+
}
|
|
116
|
+
return new RLMOrchestrator(config, options.verbose);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get resolved model configuration
|
|
120
|
+
*
|
|
121
|
+
* Use this to check what models will be used based on
|
|
122
|
+
* the current environment, config file, and any overrides.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```typescript
|
|
126
|
+
* import { getModelConfig } from 'rlm-analyzer';
|
|
127
|
+
*
|
|
128
|
+
* const config = getModelConfig();
|
|
129
|
+
* console.log(`Default model: ${config.defaultModel}`);
|
|
130
|
+
* console.log(`Source: ${config.defaultSource}`);
|
|
131
|
+
*
|
|
132
|
+
* // With override
|
|
133
|
+
* const custom = getModelConfig({ model: 'fast' });
|
|
134
|
+
* ```
|
|
135
|
+
*
|
|
136
|
+
* @param options - Optional model overrides
|
|
137
|
+
* @returns Resolved model configuration with source information
|
|
138
|
+
*/
|
|
139
|
+
export function getModelConfig(options = {}) {
|
|
140
|
+
return resolveModelConfig(options);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RLM Analyzer MCP Server
|
|
4
|
+
* Exposes RLM analysis capabilities via Model Context Protocol
|
|
5
|
+
*
|
|
6
|
+
* Usage with Claude Code:
|
|
7
|
+
* Add to ~/.claude/claude_desktop_config.json:
|
|
8
|
+
* {
|
|
9
|
+
* "mcpServers": {
|
|
10
|
+
* "rlm-analyzer": {
|
|
11
|
+
* "command": "npx",
|
|
12
|
+
* "args": ["rlm-analyzer-mcp"],
|
|
13
|
+
* "env": { "GEMINI_API_KEY": "your_key" }
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RLM Analyzer MCP Server
|
|
4
|
+
* Exposes RLM analysis capabilities via Model Context Protocol
|
|
5
|
+
*
|
|
6
|
+
* Usage with Claude Code:
|
|
7
|
+
* Add to ~/.claude/claude_desktop_config.json:
|
|
8
|
+
* {
|
|
9
|
+
* "mcpServers": {
|
|
10
|
+
* "rlm-analyzer": {
|
|
11
|
+
* "command": "npx",
|
|
12
|
+
* "args": ["rlm-analyzer-mcp"],
|
|
13
|
+
* "env": { "GEMINI_API_KEY": "your_key" }
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
19
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
20
|
+
import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
21
|
+
import { analyzeCodebase, analyzeArchitecture, analyzeDependencies, analyzeSecurity, analyzeRefactoring, summarizeCodebase, askQuestion, } from './analyzer.js';
|
|
22
|
+
import { resolveModelConfig, resolveModelAlias } from './models.js';
|
|
23
|
+
import { hasApiKey } from './config.js';
|
|
24
|
+
// Tool definitions
|
|
25
|
+
const TOOLS = [
|
|
26
|
+
{
|
|
27
|
+
name: 'rlm_analyze',
|
|
28
|
+
description: 'Analyze a codebase using recursive LLM analysis. Can answer complex questions about code architecture, patterns, and implementation details by recursively examining files.',
|
|
29
|
+
inputSchema: {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {
|
|
32
|
+
directory: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
description: 'Absolute path to the directory to analyze',
|
|
35
|
+
},
|
|
36
|
+
query: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'Question or analysis request about the codebase',
|
|
39
|
+
},
|
|
40
|
+
analysisType: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
enum: ['architecture', 'dependencies', 'security', 'performance', 'refactor', 'summary', 'custom'],
|
|
43
|
+
description: 'Type of analysis to perform (default: custom if query provided, summary otherwise)',
|
|
44
|
+
},
|
|
45
|
+
model: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Model to use: fast, smart, or full model ID (default: from environment)',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
required: ['directory'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'rlm_summarize',
|
|
55
|
+
description: 'Get a comprehensive summary of a codebase including purpose, tech stack, architecture, and key components.',
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: 'object',
|
|
58
|
+
properties: {
|
|
59
|
+
directory: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
description: 'Absolute path to the directory to analyze',
|
|
62
|
+
},
|
|
63
|
+
model: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
required: ['directory'],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'rlm_architecture',
|
|
73
|
+
description: 'Analyze the architecture and structure of a codebase. Identifies patterns, layers, components, and their relationships.',
|
|
74
|
+
inputSchema: {
|
|
75
|
+
type: 'object',
|
|
76
|
+
properties: {
|
|
77
|
+
directory: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Absolute path to the directory to analyze',
|
|
80
|
+
},
|
|
81
|
+
model: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
required: ['directory'],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'rlm_security',
|
|
91
|
+
description: 'Perform security analysis on a codebase. Identifies potential vulnerabilities, insecure patterns, and security best practice violations.',
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
directory: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Absolute path to the directory to analyze',
|
|
98
|
+
},
|
|
99
|
+
model: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
required: ['directory'],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'rlm_dependencies',
|
|
109
|
+
description: 'Analyze dependencies in a codebase. Maps internal and external dependencies, identifies circular dependencies and coupling issues.',
|
|
110
|
+
inputSchema: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {
|
|
113
|
+
directory: {
|
|
114
|
+
type: 'string',
|
|
115
|
+
description: 'Absolute path to the directory to analyze',
|
|
116
|
+
},
|
|
117
|
+
model: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
required: ['directory'],
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'rlm_refactor',
|
|
127
|
+
description: 'Find refactoring opportunities in a codebase. Identifies code duplication, complex functions, and improvement opportunities.',
|
|
128
|
+
inputSchema: {
|
|
129
|
+
type: 'object',
|
|
130
|
+
properties: {
|
|
131
|
+
directory: {
|
|
132
|
+
type: 'string',
|
|
133
|
+
description: 'Absolute path to the directory to analyze',
|
|
134
|
+
},
|
|
135
|
+
model: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
required: ['directory'],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: 'rlm_ask',
|
|
145
|
+
description: 'Ask a specific question about a codebase. The AI will analyze relevant files to answer your question.',
|
|
146
|
+
inputSchema: {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties: {
|
|
149
|
+
directory: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
description: 'Absolute path to the directory to analyze',
|
|
152
|
+
},
|
|
153
|
+
question: {
|
|
154
|
+
type: 'string',
|
|
155
|
+
description: 'The question to answer about the codebase',
|
|
156
|
+
},
|
|
157
|
+
model: {
|
|
158
|
+
type: 'string',
|
|
159
|
+
description: 'Model to use: fast, smart, or full model ID',
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
required: ['directory', 'question'],
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'rlm_config',
|
|
167
|
+
description: 'Get current RLM Analyzer configuration including model settings and API key status.',
|
|
168
|
+
inputSchema: {
|
|
169
|
+
type: 'object',
|
|
170
|
+
properties: {},
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
];
|
|
174
|
+
// Create server
|
|
175
|
+
const server = new Server({ name: 'rlm-analyzer', version: '1.1.0' }, { capabilities: { tools: {} } });
|
|
176
|
+
// Handle tool listing
|
|
177
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
178
|
+
return { tools: TOOLS };
|
|
179
|
+
});
|
|
180
|
+
// Handle tool calls
|
|
181
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
182
|
+
const { name, arguments: args } = request.params;
|
|
183
|
+
try {
|
|
184
|
+
// Check API key for analysis tools
|
|
185
|
+
if (name !== 'rlm_config' && !hasApiKey()) {
|
|
186
|
+
return {
|
|
187
|
+
content: [{
|
|
188
|
+
type: 'text',
|
|
189
|
+
text: 'Error: GEMINI_API_KEY not configured. Set it in the MCP server environment.',
|
|
190
|
+
}],
|
|
191
|
+
isError: true,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const model = args?.model ? resolveModelAlias(args.model) : undefined;
|
|
195
|
+
const options = model ? { model } : {};
|
|
196
|
+
switch (name) {
|
|
197
|
+
case 'rlm_analyze': {
|
|
198
|
+
const { directory, query, analysisType } = args;
|
|
199
|
+
const result = await analyzeCodebase({
|
|
200
|
+
directory,
|
|
201
|
+
query,
|
|
202
|
+
analysisType: analysisType || (query ? 'custom' : 'summary'),
|
|
203
|
+
...options,
|
|
204
|
+
});
|
|
205
|
+
return {
|
|
206
|
+
content: [{
|
|
207
|
+
type: 'text',
|
|
208
|
+
text: result.success
|
|
209
|
+
? result.answer || 'Analysis complete but no answer generated.'
|
|
210
|
+
: `Error: ${result.error}`,
|
|
211
|
+
}],
|
|
212
|
+
isError: !result.success,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
case 'rlm_summarize': {
|
|
216
|
+
const { directory } = args;
|
|
217
|
+
const result = await summarizeCodebase(directory, options);
|
|
218
|
+
return {
|
|
219
|
+
content: [{
|
|
220
|
+
type: 'text',
|
|
221
|
+
text: result.success
|
|
222
|
+
? result.answer || 'Summary complete but no content generated.'
|
|
223
|
+
: `Error: ${result.error}`,
|
|
224
|
+
}],
|
|
225
|
+
isError: !result.success,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
case 'rlm_architecture': {
|
|
229
|
+
const { directory } = args;
|
|
230
|
+
const result = await analyzeArchitecture(directory, options);
|
|
231
|
+
return {
|
|
232
|
+
content: [{
|
|
233
|
+
type: 'text',
|
|
234
|
+
text: result.success
|
|
235
|
+
? result.answer || 'Architecture analysis complete.'
|
|
236
|
+
: `Error: ${result.error}`,
|
|
237
|
+
}],
|
|
238
|
+
isError: !result.success,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
case 'rlm_security': {
|
|
242
|
+
const { directory } = args;
|
|
243
|
+
const result = await analyzeSecurity(directory, options);
|
|
244
|
+
return {
|
|
245
|
+
content: [{
|
|
246
|
+
type: 'text',
|
|
247
|
+
text: result.success
|
|
248
|
+
? result.answer || 'Security analysis complete.'
|
|
249
|
+
: `Error: ${result.error}`,
|
|
250
|
+
}],
|
|
251
|
+
isError: !result.success,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
case 'rlm_dependencies': {
|
|
255
|
+
const { directory } = args;
|
|
256
|
+
const result = await analyzeDependencies(directory, options);
|
|
257
|
+
return {
|
|
258
|
+
content: [{
|
|
259
|
+
type: 'text',
|
|
260
|
+
text: result.success
|
|
261
|
+
? result.answer || 'Dependency analysis complete.'
|
|
262
|
+
: `Error: ${result.error}`,
|
|
263
|
+
}],
|
|
264
|
+
isError: !result.success,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
case 'rlm_refactor': {
|
|
268
|
+
const { directory } = args;
|
|
269
|
+
const result = await analyzeRefactoring(directory, options);
|
|
270
|
+
return {
|
|
271
|
+
content: [{
|
|
272
|
+
type: 'text',
|
|
273
|
+
text: result.success
|
|
274
|
+
? result.answer || 'Refactoring analysis complete.'
|
|
275
|
+
: `Error: ${result.error}`,
|
|
276
|
+
}],
|
|
277
|
+
isError: !result.success,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
case 'rlm_ask': {
|
|
281
|
+
const { directory, question } = args;
|
|
282
|
+
const result = await askQuestion(directory, question, options);
|
|
283
|
+
return {
|
|
284
|
+
content: [{
|
|
285
|
+
type: 'text',
|
|
286
|
+
text: result.success
|
|
287
|
+
? result.answer || 'Question answered but no content generated.'
|
|
288
|
+
: `Error: ${result.error}`,
|
|
289
|
+
}],
|
|
290
|
+
isError: !result.success,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
case 'rlm_config': {
|
|
294
|
+
const config = resolveModelConfig();
|
|
295
|
+
const apiKeyStatus = hasApiKey() ? 'configured' : 'NOT CONFIGURED';
|
|
296
|
+
return {
|
|
297
|
+
content: [{
|
|
298
|
+
type: 'text',
|
|
299
|
+
text: `RLM Analyzer Configuration:
|
|
300
|
+
- API Key: ${apiKeyStatus}
|
|
301
|
+
- Default Model: ${config.defaultModel} (source: ${config.defaultSource})
|
|
302
|
+
- Fallback Model: ${config.fallbackModel} (source: ${config.fallbackSource})
|
|
303
|
+
|
|
304
|
+
Model Aliases:
|
|
305
|
+
- fast → gemini-3-flash-preview
|
|
306
|
+
- smart → gemini-3-pro-preview
|
|
307
|
+
- pro → gemini-3-pro-preview`,
|
|
308
|
+
}],
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
default:
|
|
312
|
+
return {
|
|
313
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
314
|
+
isError: true,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
320
|
+
return {
|
|
321
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
322
|
+
isError: true,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
// Start server
|
|
327
|
+
async function main() {
|
|
328
|
+
const transport = new StdioServerTransport();
|
|
329
|
+
await server.connect(transport);
|
|
330
|
+
console.error('RLM Analyzer MCP server running on stdio');
|
|
331
|
+
}
|
|
332
|
+
main().catch((error) => {
|
|
333
|
+
console.error('Failed to start MCP server:', error);
|
|
334
|
+
process.exit(1);
|
|
335
|
+
});
|
|
336
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/models.d.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Configuration Module
|
|
3
|
+
* Handles model resolution with configurable priority chain
|
|
4
|
+
*
|
|
5
|
+
* Priority chain for model resolution:
|
|
6
|
+
* 1. CLI --model flag (highest)
|
|
7
|
+
* 2. Environment variables: RLM_DEFAULT_MODEL, RLM_FALLBACK_MODEL
|
|
8
|
+
* 3. Config file: ~/.rlm-analyzer/config.json
|
|
9
|
+
* 4. Programmatic API: createAnalyzer({ model: '...' })
|
|
10
|
+
* 5. Built-in defaults (lowest, internal only)
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Model aliases for convenience
|
|
14
|
+
* Users can specify aliases instead of full model IDs
|
|
15
|
+
*/
|
|
16
|
+
export declare const MODEL_ALIASES: Record<string, string>;
|
|
17
|
+
/**
|
|
18
|
+
* Available model options (for display in help)
|
|
19
|
+
*/
|
|
20
|
+
export declare const AVAILABLE_MODELS: {
|
|
21
|
+
id: string;
|
|
22
|
+
description: string;
|
|
23
|
+
}[];
|
|
24
|
+
export interface ModelConfigOptions {
|
|
25
|
+
/** Model specified via CLI flag or programmatic API */
|
|
26
|
+
model?: string;
|
|
27
|
+
/** Fallback model specified via CLI flag or programmatic API */
|
|
28
|
+
fallbackModel?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ResolvedModelConfig {
|
|
31
|
+
/** The resolved default model ID */
|
|
32
|
+
defaultModel: string;
|
|
33
|
+
/** The resolved fallback model ID */
|
|
34
|
+
fallbackModel: string;
|
|
35
|
+
/** Source of the default model resolution */
|
|
36
|
+
defaultSource: 'cli' | 'env' | 'config' | 'api' | 'builtin';
|
|
37
|
+
/** Source of the fallback model resolution */
|
|
38
|
+
fallbackSource: 'cli' | 'env' | 'config' | 'api' | 'builtin';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a model alias to its full model ID
|
|
42
|
+
* If the input is not an alias, returns it unchanged
|
|
43
|
+
*
|
|
44
|
+
* @param modelOrAlias - Model ID or alias
|
|
45
|
+
* @returns Full model ID
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveModelAlias(modelOrAlias: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Check if a string is a known model alias
|
|
50
|
+
*/
|
|
51
|
+
export declare function isModelAlias(value: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve full model configuration using priority chain
|
|
54
|
+
*
|
|
55
|
+
* Priority:
|
|
56
|
+
* 1. CLI/API options (highest)
|
|
57
|
+
* 2. Environment variables: RLM_DEFAULT_MODEL, RLM_FALLBACK_MODEL
|
|
58
|
+
* 3. Config file: ~/.rlm-analyzer/config.json
|
|
59
|
+
* 4. Built-in defaults (lowest)
|
|
60
|
+
*
|
|
61
|
+
* @param options - Optional overrides from CLI or programmatic API
|
|
62
|
+
* @returns Resolved model configuration with source information
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveModelConfig(options?: ModelConfigOptions): ResolvedModelConfig;
|
|
65
|
+
/**
|
|
66
|
+
* Get the default model ID using the priority chain
|
|
67
|
+
* Convenience function for getting just the default model
|
|
68
|
+
*
|
|
69
|
+
* @param options - Optional overrides
|
|
70
|
+
* @returns Resolved default model ID
|
|
71
|
+
*/
|
|
72
|
+
export declare function getDefaultModel(options?: ModelConfigOptions): string;
|
|
73
|
+
/**
|
|
74
|
+
* Get the fallback model ID using the priority chain
|
|
75
|
+
* Convenience function for getting just the fallback model
|
|
76
|
+
*
|
|
77
|
+
* @param options - Optional overrides
|
|
78
|
+
* @returns Resolved fallback model ID
|
|
79
|
+
*/
|
|
80
|
+
export declare function getFallbackModel(options?: ModelConfigOptions): string;
|
|
81
|
+
/**
|
|
82
|
+
* @deprecated Use `getDefaultModel()` instead for dynamic resolution
|
|
83
|
+
* This is computed at import time and won't reflect runtime changes
|
|
84
|
+
*/
|
|
85
|
+
export declare const DEFAULT_MODEL: string;
|
|
86
|
+
/**
|
|
87
|
+
* @deprecated Use `getFallbackModel()` instead for dynamic resolution
|
|
88
|
+
* This is computed at import time and won't reflect runtime changes
|
|
89
|
+
*/
|
|
90
|
+
export declare const FALLBACK_MODEL: string;
|
|
91
|
+
/**
|
|
92
|
+
* Get formatted string showing current model configuration
|
|
93
|
+
* Useful for CLI help text and debugging
|
|
94
|
+
*/
|
|
95
|
+
export declare function getModelConfigDisplay(options?: ModelConfigOptions): string;
|
|
96
|
+
/**
|
|
97
|
+
* Get formatted string showing available aliases
|
|
98
|
+
* Useful for CLI help text
|
|
99
|
+
*/
|
|
100
|
+
export declare function getAliasesDisplay(): string;
|
|
101
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;GAK5B,CAAC;AAMF,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,aAAa,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;IAC5D,8CAA8C;IAC9C,cAAc,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;CAC9D;AAwCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,kBAAuB,GAAG,mBAAmB,CAmDxF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAEzE;AAMD;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAoB,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAqB,CAAC;AAMjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAO9E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C"}
|