@phmotad/fire-code 0.2.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/LICENSE +21 -0
- package/README.md +379 -0
- package/dist/agents/BaseAgent.d.ts +32 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -0
- package/dist/agents/BaseAgent.js +19 -0
- package/dist/agents/BaseAgent.js.map +1 -0
- package/dist/agents/CodeAgent.d.ts +7 -0
- package/dist/agents/CodeAgent.d.ts.map +1 -0
- package/dist/agents/CodeAgent.js +130 -0
- package/dist/agents/CodeAgent.js.map +1 -0
- package/dist/cli/commands/corpus.d.ts +20 -0
- package/dist/cli/commands/corpus.d.ts.map +1 -0
- package/dist/cli/commands/corpus.js +60 -0
- package/dist/cli/commands/corpus.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +5 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +79 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +2 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +20 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/index-cmd.d.ts +6 -0
- package/dist/cli/commands/index-cmd.d.ts.map +1 -0
- package/dist/cli/commands/index-cmd.js +57 -0
- package/dist/cli/commands/index-cmd.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +173 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +8 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +154 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/observe.d.ts +19 -0
- package/dist/cli/commands/observe.d.ts.map +1 -0
- package/dist/cli/commands/observe.js +86 -0
- package/dist/cli/commands/observe.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +162 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +8 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +96 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +436 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +73 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/ExecutionEngine.d.ts +26 -0
- package/dist/core/ExecutionEngine.d.ts.map +1 -0
- package/dist/core/ExecutionEngine.js +102 -0
- package/dist/core/ExecutionEngine.js.map +1 -0
- package/dist/core/TaskRouter.d.ts +3 -0
- package/dist/core/TaskRouter.d.ts.map +1 -0
- package/dist/core/TaskRouter.js +29 -0
- package/dist/core/TaskRouter.js.map +1 -0
- package/dist/daemon/DaemonClient.d.ts +8 -0
- package/dist/daemon/DaemonClient.d.ts.map +1 -0
- package/dist/daemon/DaemonClient.js +61 -0
- package/dist/daemon/DaemonClient.js.map +1 -0
- package/dist/daemon/DaemonServer.d.ts +17 -0
- package/dist/daemon/DaemonServer.d.ts.map +1 -0
- package/dist/daemon/DaemonServer.js +235 -0
- package/dist/daemon/DaemonServer.js.map +1 -0
- package/dist/db/DatabaseManager.d.ts +79 -0
- package/dist/db/DatabaseManager.d.ts.map +1 -0
- package/dist/db/DatabaseManager.js +212 -0
- package/dist/db/DatabaseManager.js.map +1 -0
- package/dist/db/schema.d.ts +2 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +127 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/git/CommitFormatter.d.ts +19 -0
- package/dist/git/CommitFormatter.d.ts.map +1 -0
- package/dist/git/CommitFormatter.js +47 -0
- package/dist/git/CommitFormatter.js.map +1 -0
- package/dist/git/GitManager.d.ts +28 -0
- package/dist/git/GitManager.d.ts.map +1 -0
- package/dist/git/GitManager.js +147 -0
- package/dist/git/GitManager.js.map +1 -0
- package/dist/graph/GraphStore.d.ts +54 -0
- package/dist/graph/GraphStore.d.ts.map +1 -0
- package/dist/graph/GraphStore.js +3 -0
- package/dist/graph/GraphStore.js.map +1 -0
- package/dist/graph/InMemoryGraphStore.d.ts +16 -0
- package/dist/graph/InMemoryGraphStore.d.ts.map +1 -0
- package/dist/graph/InMemoryGraphStore.js +75 -0
- package/dist/graph/InMemoryGraphStore.js.map +1 -0
- package/dist/graph/SQLiteGraphStore.d.ts +31 -0
- package/dist/graph/SQLiteGraphStore.d.ts.map +1 -0
- package/dist/graph/SQLiteGraphStore.js +158 -0
- package/dist/graph/SQLiteGraphStore.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/ASTParser.d.ts +32 -0
- package/dist/indexing/ASTParser.d.ts.map +1 -0
- package/dist/indexing/ASTParser.js +185 -0
- package/dist/indexing/ASTParser.js.map +1 -0
- package/dist/indexing/EmbeddingGenerator.d.ts +15 -0
- package/dist/indexing/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/indexing/EmbeddingGenerator.js +66 -0
- package/dist/indexing/EmbeddingGenerator.js.map +1 -0
- package/dist/indexing/FileScanner.d.ts +10 -0
- package/dist/indexing/FileScanner.d.ts.map +1 -0
- package/dist/indexing/FileScanner.js +58 -0
- package/dist/indexing/FileScanner.js.map +1 -0
- package/dist/indexing/GraphBuilder.d.ts +4 -0
- package/dist/indexing/GraphBuilder.d.ts.map +1 -0
- package/dist/indexing/GraphBuilder.js +51 -0
- package/dist/indexing/GraphBuilder.js.map +1 -0
- package/dist/indexing/Indexer.d.ts +13 -0
- package/dist/indexing/Indexer.d.ts.map +1 -0
- package/dist/indexing/Indexer.js +68 -0
- package/dist/indexing/Indexer.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +155 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/corpus_search.d.ts +14 -0
- package/dist/mcp/tools/corpus_search.d.ts.map +1 -0
- package/dist/mcp/tools/corpus_search.js +33 -0
- package/dist/mcp/tools/corpus_search.js.map +1 -0
- package/dist/mcp/tools/execute.d.ts +19 -0
- package/dist/mcp/tools/execute.d.ts.map +1 -0
- package/dist/mcp/tools/execute.js +38 -0
- package/dist/mcp/tools/execute.js.map +1 -0
- package/dist/mcp/tools/get_context.d.ts +17 -0
- package/dist/mcp/tools/get_context.d.ts.map +1 -0
- package/dist/mcp/tools/get_context.js +50 -0
- package/dist/mcp/tools/get_context.js.map +1 -0
- package/dist/mcp/tools/get_graph.d.ts +26 -0
- package/dist/mcp/tools/get_graph.d.ts.map +1 -0
- package/dist/mcp/tools/get_graph.js +68 -0
- package/dist/mcp/tools/get_graph.js.map +1 -0
- package/dist/mcp/tools/observations.d.ts +23 -0
- package/dist/mcp/tools/observations.d.ts.map +1 -0
- package/dist/mcp/tools/observations.js +72 -0
- package/dist/mcp/tools/observations.js.map +1 -0
- package/dist/mcp/tools/search_code.d.ts +14 -0
- package/dist/mcp/tools/search_code.d.ts.map +1 -0
- package/dist/mcp/tools/search_code.js +38 -0
- package/dist/mcp/tools/search_code.js.map +1 -0
- package/dist/mcp/tools/smart_outline.d.ts +14 -0
- package/dist/mcp/tools/smart_outline.d.ts.map +1 -0
- package/dist/mcp/tools/smart_outline.js +99 -0
- package/dist/mcp/tools/smart_outline.js.map +1 -0
- package/dist/mcp/tools/smart_search.d.ts +20 -0
- package/dist/mcp/tools/smart_search.d.ts.map +1 -0
- package/dist/mcp/tools/smart_search.js +131 -0
- package/dist/mcp/tools/smart_search.js.map +1 -0
- package/dist/memory/FallbackMemory.d.ts +9 -0
- package/dist/memory/FallbackMemory.d.ts.map +1 -0
- package/dist/memory/FallbackMemory.js +70 -0
- package/dist/memory/FallbackMemory.js.map +1 -0
- package/dist/memory/HybridMemory.d.ts +20 -0
- package/dist/memory/HybridMemory.d.ts.map +1 -0
- package/dist/memory/HybridMemory.js +74 -0
- package/dist/memory/HybridMemory.js.map +1 -0
- package/dist/providers/AgentSDKProvider.d.ts +13 -0
- package/dist/providers/AgentSDKProvider.d.ts.map +1 -0
- package/dist/providers/AgentSDKProvider.js +64 -0
- package/dist/providers/AgentSDKProvider.js.map +1 -0
- package/dist/providers/AnthropicProvider.d.ts +11 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/providers/AnthropicProvider.js +61 -0
- package/dist/providers/AnthropicProvider.js.map +1 -0
- package/dist/providers/LLMProvider.d.ts +12 -0
- package/dist/providers/LLMProvider.d.ts.map +1 -0
- package/dist/providers/LLMProvider.js +3 -0
- package/dist/providers/LLMProvider.js.map +1 -0
- package/dist/providers/OllamaProvider.d.ts +11 -0
- package/dist/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/OllamaProvider.js +71 -0
- package/dist/providers/OllamaProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +11 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +63 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/OpenRouterProvider.d.ts +12 -0
- package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
- package/dist/providers/OpenRouterProvider.js +89 -0
- package/dist/providers/OpenRouterProvider.js.map +1 -0
- package/dist/providers/ProviderFactory.d.ts +4 -0
- package/dist/providers/ProviderFactory.d.ts.map +1 -0
- package/dist/providers/ProviderFactory.js +27 -0
- package/dist/providers/ProviderFactory.js.map +1 -0
- package/dist/services/CorpusService.d.ts +27 -0
- package/dist/services/CorpusService.d.ts.map +1 -0
- package/dist/services/CorpusService.js +142 -0
- package/dist/services/CorpusService.js.map +1 -0
- package/dist/services/ObservationService.d.ts +17 -0
- package/dist/services/ObservationService.d.ts.map +1 -0
- package/dist/services/ObservationService.js +101 -0
- package/dist/services/ObservationService.js.map +1 -0
- package/dist/services/SessionService.d.ts +10 -0
- package/dist/services/SessionService.d.ts.map +1 -0
- package/dist/services/SessionService.js +38 -0
- package/dist/services/SessionService.js.map +1 -0
- package/dist/services/SummarizationService.d.ts +8 -0
- package/dist/services/SummarizationService.d.ts.map +1 -0
- package/dist/services/SummarizationService.js +65 -0
- package/dist/services/SummarizationService.js.map +1 -0
- package/dist/utils/errors.d.ts +26 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +72 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +43 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/privacy.d.ts +5 -0
- package/dist/utils/privacy.d.ts.map +1 -0
- package/dist/utils/privacy.js +39 -0
- package/dist/utils/privacy.js.map +1 -0
- package/dist/utils/zodToJsonSchema.d.ts +23 -0
- package/dist/utils/zodToJsonSchema.d.ts.map +1 -0
- package/dist/utils/zodToJsonSchema.js +52 -0
- package/dist/utils/zodToJsonSchema.js.map +1 -0
- package/dist/vector/MemoryVectorStore.d.ts +16 -0
- package/dist/vector/MemoryVectorStore.d.ts.map +1 -0
- package/dist/vector/MemoryVectorStore.js +97 -0
- package/dist/vector/MemoryVectorStore.js.map +1 -0
- package/dist/vector/VectorStore.d.ts +19 -0
- package/dist/vector/VectorStore.d.ts.map +1 -0
- package/dist/vector/VectorStore.js +3 -0
- package/dist/vector/VectorStore.js.map +1 -0
- package/dist/vector/VectraVectorStore.d.ts +23 -0
- package/dist/vector/VectraVectorStore.d.ts.map +1 -0
- package/dist/vector/VectraVectorStore.js +93 -0
- package/dist/vector/VectraVectorStore.js.map +1 -0
- package/examples/firecode.config.example.ts +87 -0
- package/package.json +111 -0
- package/plugin/.claude-plugin/plugin.json +17 -0
- package/plugin/hooks/hooks.json +86 -0
- package/plugin/scripts/context-inject.js +208 -0
- package/plugin/scripts/smart-install.js +33 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startMcpServer = startMcpServer;
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
+
const loader_js_1 = require("../config/loader.js");
|
|
8
|
+
const ProviderFactory_js_1 = require("../providers/ProviderFactory.js");
|
|
9
|
+
const execute_js_1 = require("./tools/execute.js");
|
|
10
|
+
const get_context_js_1 = require("./tools/get_context.js");
|
|
11
|
+
const search_code_js_1 = require("./tools/search_code.js");
|
|
12
|
+
const get_graph_js_1 = require("./tools/get_graph.js");
|
|
13
|
+
const smart_outline_js_1 = require("./tools/smart_outline.js");
|
|
14
|
+
const smart_search_js_1 = require("./tools/smart_search.js");
|
|
15
|
+
const observations_js_1 = require("./tools/observations.js");
|
|
16
|
+
const corpus_search_js_1 = require("./tools/corpus_search.js");
|
|
17
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
18
|
+
const errors_js_1 = require("../utils/errors.js");
|
|
19
|
+
const zodToJsonSchema_js_1 = require("../utils/zodToJsonSchema.js");
|
|
20
|
+
async function startMcpServer(cwd = process.cwd()) {
|
|
21
|
+
const config = await (0, loader_js_1.loadConfig)(cwd);
|
|
22
|
+
const provider = (0, ProviderFactory_js_1.createProvider)(config.llm);
|
|
23
|
+
const server = new index_js_1.Server({ name: 'fire-code', version: '0.1.0' }, { capabilities: { tools: {} } });
|
|
24
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
25
|
+
tools: [
|
|
26
|
+
// āā Progressive disclosure hint āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
27
|
+
{
|
|
28
|
+
name: 'firecode.__workflow',
|
|
29
|
+
description: `RECOMMENDED WORKFLOW (token-efficient):
|
|
30
|
+
1. firecode.smart_search(query) ā find files/symbols (compact index)
|
|
31
|
+
2. firecode.smart_outline(file_path) ā see all symbols in a file (folded view)
|
|
32
|
+
3. firecode.get_context(query) ā semantic + graph context for a task
|
|
33
|
+
4. firecode.corpus_search(query) ā search project docs/decisions/architecture notes
|
|
34
|
+
5. firecode.get_graph(filter) ā dependency relationships
|
|
35
|
+
6. firecode.observations(query) ā history of what was built/fixed/decided
|
|
36
|
+
7. firecode.execute(task) ā make changes with Git traceability
|
|
37
|
+
Never call execute without first calling get_context or smart_search.
|
|
38
|
+
Private content (<private>ā¦</private>) is automatically redacted.`,
|
|
39
|
+
inputSchema: { type: 'object', properties: {} },
|
|
40
|
+
},
|
|
41
|
+
// āā Tier 1: Fast structural tools (no embedding needed) āāāāāāāāāāāā
|
|
42
|
+
{
|
|
43
|
+
name: 'firecode.smart_search',
|
|
44
|
+
description: 'Search codebase for symbols, functions, and content. Returns compact index with file:line references. Use first to orient.',
|
|
45
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(smart_search_js_1.SmartSearchInputSchema),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'firecode.smart_outline',
|
|
49
|
+
description: 'Get structural outline of a file ā all functions, classes, methods, types with signatures. Much cheaper than reading the full file.',
|
|
50
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(smart_outline_js_1.SmartOutlineInputSchema),
|
|
51
|
+
},
|
|
52
|
+
// āā Tier 2: Memory tools (require indexed project) āāāāāāāāāāāāāāāāāā
|
|
53
|
+
{
|
|
54
|
+
name: 'firecode.get_context',
|
|
55
|
+
description: 'Retrieve relevant code context for a task using hybrid vector+graph memory. Requires: fire-code index to have been run.',
|
|
56
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(get_context_js_1.GetContextInputSchema),
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'firecode.search_code',
|
|
60
|
+
description: 'Semantic search over the indexed codebase. Returns top-K relevant code snippets with scores.',
|
|
61
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(search_code_js_1.SearchCodeInputSchema),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'firecode.get_graph',
|
|
65
|
+
description: 'Query the structural dependency graph. Returns nodes (files, functions) and edges (imports, calls).',
|
|
66
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(get_graph_js_1.GetGraphInputSchema),
|
|
67
|
+
},
|
|
68
|
+
// āā Tier 2b: Memory history āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
69
|
+
{
|
|
70
|
+
name: 'firecode.observations',
|
|
71
|
+
description: 'Search observation history ā what was built, fixed, decided. Use query to search, ids[] to fetch full details (3-step: search ā review IDs ā get_by_ids).',
|
|
72
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(observations_js_1.ObservationsInputSchema),
|
|
73
|
+
},
|
|
74
|
+
// āā Tier 2c: Knowledge Corpus āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
75
|
+
{
|
|
76
|
+
name: 'firecode.corpus_search',
|
|
77
|
+
description: 'Search the project knowledge corpus ā indexed docs, decisions, architecture notes. Run fire-code corpus build to populate.',
|
|
78
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(corpus_search_js_1.CorpusSearchInputSchema),
|
|
79
|
+
},
|
|
80
|
+
// āā Tier 3: Execution (always last) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
81
|
+
{
|
|
82
|
+
name: 'firecode.execute',
|
|
83
|
+
description: 'Execute a coding task: creates Git branch, retrieves context, runs CodeAgent, commits changes. Always call get_context first.',
|
|
84
|
+
inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(execute_js_1.ExecuteInputSchema),
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
}));
|
|
88
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
89
|
+
const { name, arguments: args } = request.params;
|
|
90
|
+
logger_js_1.logger.debug({ tool: name }, 'Tool called');
|
|
91
|
+
try {
|
|
92
|
+
let result;
|
|
93
|
+
switch (name) {
|
|
94
|
+
case 'firecode.__workflow':
|
|
95
|
+
result = 'See tool description for the recommended workflow.';
|
|
96
|
+
break;
|
|
97
|
+
case 'firecode.smart_search': {
|
|
98
|
+
const input = smart_search_js_1.SmartSearchInputSchema.parse(args);
|
|
99
|
+
result = await (0, smart_search_js_1.smartSearchTool)(input, cwd);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'firecode.smart_outline': {
|
|
103
|
+
const input = smart_outline_js_1.SmartOutlineInputSchema.parse(args);
|
|
104
|
+
result = await (0, smart_outline_js_1.smartOutlineTool)(input, cwd);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'firecode.get_context': {
|
|
108
|
+
const input = get_context_js_1.GetContextInputSchema.parse(args);
|
|
109
|
+
result = await (0, get_context_js_1.getContextTool)(input, cwd);
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case 'firecode.search_code': {
|
|
113
|
+
const input = search_code_js_1.SearchCodeInputSchema.parse(args);
|
|
114
|
+
result = await (0, search_code_js_1.searchCodeTool)(input, cwd);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case 'firecode.observations': {
|
|
118
|
+
const input = observations_js_1.ObservationsInputSchema.parse(args);
|
|
119
|
+
result = await (0, observations_js_1.observationsTool)(input, cwd);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case 'firecode.get_graph': {
|
|
123
|
+
const input = get_graph_js_1.GetGraphInputSchema.parse(args);
|
|
124
|
+
result = await (0, get_graph_js_1.getGraphTool)(input, cwd);
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case 'firecode.corpus_search': {
|
|
128
|
+
const input = corpus_search_js_1.CorpusSearchInputSchema.parse(args);
|
|
129
|
+
result = await (0, corpus_search_js_1.corpusSearchTool)(input, cwd);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case 'firecode.execute': {
|
|
133
|
+
const input = execute_js_1.ExecuteInputSchema.parse(args);
|
|
134
|
+
result = await (0, execute_js_1.executeTool)(input, config, provider, cwd);
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
default:
|
|
138
|
+
result = JSON.stringify({ error: `Unknown tool: ${name}` });
|
|
139
|
+
}
|
|
140
|
+
return { content: [{ type: 'text', text: result }] };
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
const e = (0, errors_js_1.toFireCodeError)(err);
|
|
144
|
+
logger_js_1.logger.error({ tool: name, error: e.message }, 'Tool execution failed');
|
|
145
|
+
return {
|
|
146
|
+
content: [{ type: 'text', text: JSON.stringify({ error: e.message, code: e.code }) }],
|
|
147
|
+
isError: true,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
152
|
+
await server.connect(transport);
|
|
153
|
+
logger_js_1.logger.info({ provider: config.llm.provider, model: config.llm.model }, 'Fire Code MCP server started');
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const CorpusSearchInputSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
query: string;
|
|
7
|
+
limit: number;
|
|
8
|
+
}, {
|
|
9
|
+
query: string;
|
|
10
|
+
limit?: number | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
export type CorpusSearchInput = z.infer<typeof CorpusSearchInputSchema>;
|
|
13
|
+
export declare function corpusSearchTool(input: CorpusSearchInput, cwd: string): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=corpus_search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus_search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/corpus_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB7F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CorpusSearchInputSchema = void 0;
|
|
4
|
+
exports.corpusSearchTool = corpusSearchTool;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
|
|
7
|
+
const paths_js_1 = require("../../utils/paths.js");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
exports.CorpusSearchInputSchema = zod_1.z.object({
|
|
10
|
+
query: zod_1.z.string().describe('Search query against the knowledge corpus'),
|
|
11
|
+
limit: zod_1.z.number().optional().default(5).describe('Max results (default 5)'),
|
|
12
|
+
});
|
|
13
|
+
async function corpusSearchTool(input, cwd) {
|
|
14
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
15
|
+
if (!(0, fs_1.existsSync)(firedotDir)) {
|
|
16
|
+
return 'No Fire Code index. Run: fire-code corpus build';
|
|
17
|
+
}
|
|
18
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
19
|
+
const results = db.getCorpus({ query: input.query, limit: input.limit });
|
|
20
|
+
if (results.length === 0) {
|
|
21
|
+
return `No corpus items matching "${input.query}". Run fire-code corpus build to index docs.`;
|
|
22
|
+
}
|
|
23
|
+
const lines = [`# Corpus: "${input.query}" (${results.length} results)\n`];
|
|
24
|
+
for (const r of results) {
|
|
25
|
+
lines.push(`## ${r.title}`);
|
|
26
|
+
if (r.source)
|
|
27
|
+
lines.push(`_source: ${r.source}_`);
|
|
28
|
+
lines.push(r.content.slice(0, 600));
|
|
29
|
+
lines.push('');
|
|
30
|
+
}
|
|
31
|
+
return lines.join('\n');
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=corpus_search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus_search.js","sourceRoot":"","sources":["../../../src/mcp/tools/corpus_search.ts"],"names":[],"mappings":";;;AAYA,4CAqBC;AAjCD,6BAAwB;AACxB,oEAA8D;AAC9D,mDAAsD;AACtD,2BAAgC;AAEnB,QAAA,uBAAuB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACvE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC5E,CAAC,CAAC;AAII,KAAK,UAAU,gBAAgB,CAAC,KAAwB,EAAE,GAAW;IAC1E,MAAM,UAAU,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IAED,MAAM,EAAE,GAAG,oCAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAEzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,6BAA6B,KAAK,CAAC,KAAK,8CAA8C,CAAC;IAChG,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,MAAM,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;IAC3E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { FireCodeConfig } from '../../config/types.js';
|
|
3
|
+
import type { LLMProvider } from '../../providers/LLMProvider.js';
|
|
4
|
+
export declare const ExecuteInputSchema: z.ZodObject<{
|
|
5
|
+
task: z.ZodString;
|
|
6
|
+
type: z.ZodOptional<z.ZodEnum<["feature", "fix", "refactor", "docs"]>>;
|
|
7
|
+
mode: z.ZodOptional<z.ZodEnum<["safe", "aggressive"]>>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
task: string;
|
|
10
|
+
type?: "fix" | "refactor" | "docs" | "feature" | undefined;
|
|
11
|
+
mode?: "safe" | "aggressive" | undefined;
|
|
12
|
+
}, {
|
|
13
|
+
task: string;
|
|
14
|
+
type?: "fix" | "refactor" | "docs" | "feature" | undefined;
|
|
15
|
+
mode?: "safe" | "aggressive" | undefined;
|
|
16
|
+
}>;
|
|
17
|
+
export type ExecuteInput = z.infer<typeof ExecuteInputSchema>;
|
|
18
|
+
export declare function executeTool(input: ExecuteInput, config: FireCodeConfig, provider: LLMProvider, cwd: string): Promise<string>;
|
|
19
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGlE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,wBAAsB,WAAW,CAC/B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,WAAW,EACrB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExecuteInputSchema = void 0;
|
|
4
|
+
exports.executeTool = executeTool;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const ExecutionEngine_js_1 = require("../../core/ExecutionEngine.js");
|
|
7
|
+
const errors_js_1 = require("../../utils/errors.js");
|
|
8
|
+
exports.ExecuteInputSchema = zod_1.z.object({
|
|
9
|
+
task: zod_1.z.string().min(1).describe('Task description for the coding agent'),
|
|
10
|
+
type: zod_1.z.enum(['feature', 'fix', 'refactor', 'docs']).optional().describe('Task type (auto-detected if omitted)'),
|
|
11
|
+
mode: zod_1.z.enum(['safe', 'aggressive']).optional().describe('Execution mode'),
|
|
12
|
+
});
|
|
13
|
+
async function executeTool(input, config, provider, cwd) {
|
|
14
|
+
try {
|
|
15
|
+
const engine = new ExecutionEngine_js_1.ExecutionEngine(config, provider, cwd);
|
|
16
|
+
const result = await engine.run({
|
|
17
|
+
task: input.task,
|
|
18
|
+
type: input.type,
|
|
19
|
+
mode: input.mode,
|
|
20
|
+
cwd,
|
|
21
|
+
});
|
|
22
|
+
return JSON.stringify({
|
|
23
|
+
success: result.success,
|
|
24
|
+
taskId: result.taskId,
|
|
25
|
+
explanation: result.explanation,
|
|
26
|
+
changes: result.changes.map((c) => ({ path: c.path, operation: c.operation })),
|
|
27
|
+
branch: result.branch,
|
|
28
|
+
commit: result.commit,
|
|
29
|
+
durationMs: result.durationMs,
|
|
30
|
+
error: result.error,
|
|
31
|
+
}, null, 2);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const e = (0, errors_js_1.toFireCodeError)(err);
|
|
35
|
+
return JSON.stringify({ success: false, error: e.message, code: e.code }, null, 2);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":";;;AAcA,kCA6BC;AA3CD,6BAAwB;AACxB,sEAAgE;AAGhE,qDAAwD;AAE3C,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzE,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAChH,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC3E,CAAC,CAAC;AAII,KAAK,UAAU,WAAW,CAC/B,KAAmB,EACnB,MAAsB,EACtB,QAAqB,EACrB,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,oCAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG;SACJ,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9E,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,IAAA,2BAAe,EAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const GetContextInputSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
includeGraph: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
query: string;
|
|
8
|
+
k: number;
|
|
9
|
+
includeGraph: boolean;
|
|
10
|
+
}, {
|
|
11
|
+
query: string;
|
|
12
|
+
k?: number | undefined;
|
|
13
|
+
includeGraph?: boolean | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type GetContextInput = z.infer<typeof GetContextInputSchema>;
|
|
16
|
+
export declare function getContextTool(input: GetContextInput, cwd: string): Promise<string>;
|
|
17
|
+
//# sourceMappingURL=get_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_context.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AASpE,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetContextInputSchema = void 0;
|
|
4
|
+
exports.getContextTool = getContextTool;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const HybridMemory_js_1 = require("../../memory/HybridMemory.js");
|
|
8
|
+
const FallbackMemory_js_1 = require("../../memory/FallbackMemory.js");
|
|
9
|
+
const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
|
|
10
|
+
const MemoryVectorStore_js_1 = require("../../vector/MemoryVectorStore.js");
|
|
11
|
+
const errors_js_1 = require("../../utils/errors.js");
|
|
12
|
+
const fs_1 = require("fs");
|
|
13
|
+
const paths_js_1 = require("../../utils/paths.js");
|
|
14
|
+
exports.GetContextInputSchema = zod_1.z.object({
|
|
15
|
+
query: zod_1.z.string().min(1).describe('Query to retrieve relevant context for'),
|
|
16
|
+
k: zod_1.z.number().int().positive().optional().default(5).describe('Number of results to return'),
|
|
17
|
+
includeGraph: zod_1.z.boolean().optional().default(true).describe('Include structural graph context'),
|
|
18
|
+
});
|
|
19
|
+
function getProjectName(cwd) {
|
|
20
|
+
try {
|
|
21
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(require('path').join(cwd, 'package.json'), 'utf8'));
|
|
22
|
+
return pkg.name ?? (0, path_1.basename)(cwd);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return (0, path_1.basename)(cwd);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function getContextTool(input, cwd) {
|
|
29
|
+
try {
|
|
30
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
31
|
+
const vectorsPath = (0, paths_js_1.getVectorsPath)(cwd);
|
|
32
|
+
if (!(0, fs_1.existsSync)(firedotDir) || !(0, fs_1.existsSync)(vectorsPath)) {
|
|
33
|
+
const fallback = new FallbackMemory_js_1.FallbackMemory(cwd);
|
|
34
|
+
const ctx = await fallback.retrieve(input.query, input.k);
|
|
35
|
+
return ctx.combined;
|
|
36
|
+
}
|
|
37
|
+
const project = getProjectName(cwd);
|
|
38
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
39
|
+
const graphStore = db.getGraphStore(project);
|
|
40
|
+
const vectorStore = MemoryVectorStore_js_1.MemoryVectorStore.deserialize((0, fs_1.readFileSync)(vectorsPath, 'utf8'));
|
|
41
|
+
const memory = new HybridMemory_js_1.HybridMemory(vectorStore, graphStore);
|
|
42
|
+
const ctx = await memory.retrieve(input.query, { k: input.k, includeGraph: input.includeGraph });
|
|
43
|
+
return ctx.combined;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const e = (0, errors_js_1.toFireCodeError)(err);
|
|
47
|
+
return `Error retrieving context: ${e.message}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=get_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_context.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_context.ts"],"names":[],"mappings":";;;AAyBA,wCAuBC;AAhDD,6BAAwB;AACxB,+BAAgC;AAChC,kEAA4D;AAC5D,sEAAgE;AAChE,oEAA8D;AAC9D,4EAAsE;AACtE,qDAAwD;AACxD,2BAA8C;AAC9C,mDAAsE;AAEzD,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3E,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC5F,YAAY,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAChG,CAAC,CAAC;AAIH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAsB,CAAC;QAC7G,OAAO,GAAG,CAAC,IAAI,IAAI,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC;IAAC,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,KAAsB,EAAE,GAAW;IACtE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,kCAAc,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,oCAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,wCAAiB,CAAC,WAAW,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,MAAM,MAAM,GAAG,IAAI,8BAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACjG,OAAO,GAAG,CAAC,QAAQ,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,IAAA,2BAAe,EAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,6BAA6B,CAAC,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const GetGraphInputSchema: z.ZodObject<{
|
|
3
|
+
type: z.ZodOptional<z.ZodEnum<["file", "function", "commit"]>>;
|
|
4
|
+
label: z.ZodOptional<z.ZodString>;
|
|
5
|
+
path: z.ZodOptional<z.ZodString>;
|
|
6
|
+
neighbors: z.ZodOptional<z.ZodString>;
|
|
7
|
+
dependants: z.ZodOptional<z.ZodString>;
|
|
8
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
limit: number;
|
|
11
|
+
path?: string | undefined;
|
|
12
|
+
type?: "function" | "commit" | "file" | undefined;
|
|
13
|
+
label?: string | undefined;
|
|
14
|
+
neighbors?: string | undefined;
|
|
15
|
+
dependants?: string | undefined;
|
|
16
|
+
}, {
|
|
17
|
+
path?: string | undefined;
|
|
18
|
+
type?: "function" | "commit" | "file" | undefined;
|
|
19
|
+
limit?: number | undefined;
|
|
20
|
+
label?: string | undefined;
|
|
21
|
+
neighbors?: string | undefined;
|
|
22
|
+
dependants?: string | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export type GetGraphInput = z.infer<typeof GetGraphInputSchema>;
|
|
25
|
+
export declare function getGraphTool(input: GetGraphInput, cwd: string): Promise<string>;
|
|
26
|
+
//# sourceMappingURL=get_graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_graph.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get_graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAShE,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4CrF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GetGraphInputSchema = void 0;
|
|
4
|
+
exports.getGraphTool = getGraphTool;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
|
|
8
|
+
const errors_js_1 = require("../../utils/errors.js");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const paths_js_1 = require("../../utils/paths.js");
|
|
11
|
+
exports.GetGraphInputSchema = zod_1.z.object({
|
|
12
|
+
type: zod_1.z.enum(['file', 'function', 'commit']).optional().describe('Filter by node type'),
|
|
13
|
+
label: zod_1.z.string().optional().describe('Filter by label (partial match)'),
|
|
14
|
+
path: zod_1.z.string().optional().describe('Filter by file path (partial match)'),
|
|
15
|
+
neighbors: zod_1.z.string().optional().describe('Node ID ā return BFS neighbors up to depth 3'),
|
|
16
|
+
dependants: zod_1.z.string().optional().describe('Node ID ā return nodes that depend on it'),
|
|
17
|
+
limit: zod_1.z.number().int().positive().optional().default(20).describe('Max nodes to return'),
|
|
18
|
+
});
|
|
19
|
+
function getProjectName(cwd) {
|
|
20
|
+
try {
|
|
21
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)(require('path').join(cwd, 'package.json'), 'utf8'));
|
|
22
|
+
return pkg.name ?? (0, path_1.basename)(cwd);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return (0, path_1.basename)(cwd);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function getGraphTool(input, cwd) {
|
|
29
|
+
try {
|
|
30
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
31
|
+
if (!(0, fs_1.existsSync)(firedotDir)) {
|
|
32
|
+
return 'No graph data available. Run `fire-code index` first.';
|
|
33
|
+
}
|
|
34
|
+
const project = getProjectName(cwd);
|
|
35
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
36
|
+
const graphStore = db.getGraphStore(project);
|
|
37
|
+
const stats = graphStore.getStats();
|
|
38
|
+
// Graphology-powered traversal queries
|
|
39
|
+
if (input.neighbors) {
|
|
40
|
+
const reachable = graphStore.reachableFrom(input.neighbors, 3).slice(0, input.limit);
|
|
41
|
+
return JSON.stringify({ stats, query: 'reachableFrom', root: input.neighbors, nodes: reachable }, null, 2);
|
|
42
|
+
}
|
|
43
|
+
if (input.dependants) {
|
|
44
|
+
const deps = graphStore.dependantsOf(input.dependants).slice(0, input.limit);
|
|
45
|
+
return JSON.stringify({ stats, query: 'dependantsOf', target: input.dependants, nodes: deps }, null, 2);
|
|
46
|
+
}
|
|
47
|
+
const nodes = graphStore.query({
|
|
48
|
+
type: input.type,
|
|
49
|
+
label: input.label,
|
|
50
|
+
path: input.path,
|
|
51
|
+
}).slice(0, input.limit);
|
|
52
|
+
return JSON.stringify({
|
|
53
|
+
stats,
|
|
54
|
+
nodes: nodes.map((n) => ({
|
|
55
|
+
id: n.id,
|
|
56
|
+
type: n.type,
|
|
57
|
+
label: n.label,
|
|
58
|
+
...(n.type === 'file' ? { path: n.path, exports: n.exports.slice(0, 5) } : {}),
|
|
59
|
+
...(n.type === 'function' ? { filePath: n.filePath, line: n.line, isExported: n.isExported } : {}),
|
|
60
|
+
})),
|
|
61
|
+
}, null, 2);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
const e = (0, errors_js_1.toFireCodeError)(err);
|
|
65
|
+
return `Error retrieving graph: ${e.message}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=get_graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_graph.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ObservationsInputSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodOptional<z.ZodString>;
|
|
4
|
+
type: z.ZodOptional<z.ZodEnum<["change", "bugfix", "feature", "refactor", "decision", "discovery"]>>;
|
|
5
|
+
file: z.ZodOptional<z.ZodString>;
|
|
6
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
ids: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
limit: number;
|
|
10
|
+
type?: "refactor" | "feature" | "change" | "bugfix" | "decision" | "discovery" | undefined;
|
|
11
|
+
file?: string | undefined;
|
|
12
|
+
query?: string | undefined;
|
|
13
|
+
ids?: number[] | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
type?: "refactor" | "feature" | "change" | "bugfix" | "decision" | "discovery" | undefined;
|
|
16
|
+
file?: string | undefined;
|
|
17
|
+
query?: string | undefined;
|
|
18
|
+
limit?: number | undefined;
|
|
19
|
+
ids?: number[] | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type ObservationsInput = z.infer<typeof ObservationsInputSchema>;
|
|
22
|
+
export declare function observationsTool(input: ObservationsInput, cwd: string): Promise<string>;
|
|
23
|
+
//# sourceMappingURL=observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observations.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/observations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;EAMlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B7F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObservationsInputSchema = void 0;
|
|
4
|
+
exports.observationsTool = observationsTool;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
|
|
7
|
+
const paths_js_1 = require("../../utils/paths.js");
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
exports.ObservationsInputSchema = zod_1.z.object({
|
|
10
|
+
query: zod_1.z.string().optional().describe('Full-text search query'),
|
|
11
|
+
type: zod_1.z.enum(['change', 'bugfix', 'feature', 'refactor', 'decision', 'discovery']).optional(),
|
|
12
|
+
file: zod_1.z.string().optional().describe('Filter by file path substring'),
|
|
13
|
+
limit: zod_1.z.number().optional().default(20).describe('Max results (default 20)'),
|
|
14
|
+
ids: zod_1.z.array(zod_1.z.number()).optional().describe('Fetch specific observation IDs'),
|
|
15
|
+
});
|
|
16
|
+
async function observationsTool(input, cwd) {
|
|
17
|
+
const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
|
|
18
|
+
if (!(0, fs_1.existsSync)(firedotDir)) {
|
|
19
|
+
return 'No Fire Code index found. Run: fire-code index';
|
|
20
|
+
}
|
|
21
|
+
const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
|
|
22
|
+
// Fetch by IDs (step 3 of progressive disclosure)
|
|
23
|
+
if (input.ids && input.ids.length > 0) {
|
|
24
|
+
const obs = db.getObservationsByIds(input.ids);
|
|
25
|
+
if (obs.length === 0)
|
|
26
|
+
return `No observations found for IDs: ${input.ids.join(', ')}`;
|
|
27
|
+
return formatObservationsFull(obs);
|
|
28
|
+
}
|
|
29
|
+
// Search / filter
|
|
30
|
+
const obs = db.getObservations({
|
|
31
|
+
query: input.query,
|
|
32
|
+
type: input.type,
|
|
33
|
+
file_path: input.file,
|
|
34
|
+
limit: input.limit ?? 20,
|
|
35
|
+
});
|
|
36
|
+
if (obs.length === 0) {
|
|
37
|
+
const hint = input.query ? `No observations matching "${input.query}"` : 'No observations yet';
|
|
38
|
+
return `${hint}. Use PostToolUse hooks or run fire-code index to build history.`;
|
|
39
|
+
}
|
|
40
|
+
return formatObservationsIndex(obs);
|
|
41
|
+
}
|
|
42
|
+
function formatObservationsIndex(obs) {
|
|
43
|
+
const lines = [`# Observations (${obs.length} results)\n`];
|
|
44
|
+
lines.push('ID Type File Summary');
|
|
45
|
+
lines.push('ā'.repeat(80));
|
|
46
|
+
for (const o of obs) {
|
|
47
|
+
const date = new Date(o.created_at).toLocaleDateString();
|
|
48
|
+
const file = (o.file_path ?? '').slice(-28).padEnd(28);
|
|
49
|
+
const type = o.type.padEnd(10);
|
|
50
|
+
lines.push(`#${String(o.id).padEnd(5)} ${type} ${file} ${o.summary.slice(0, 50)}`);
|
|
51
|
+
}
|
|
52
|
+
lines.push('\nā Use firecode.observations({ ids: [...] }) to fetch full details for specific entries.');
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
function formatObservationsFull(obs) {
|
|
56
|
+
const lines = [];
|
|
57
|
+
for (const o of obs) {
|
|
58
|
+
const date = new Date(o.created_at).toLocaleString();
|
|
59
|
+
const icon = { change: 'āļø', bugfix: 'š', feature: 'āØ', refactor: 'ā»ļø', decision: 'š§', discovery: 'š' }[o.type] ?? 'ā¢';
|
|
60
|
+
lines.push(`${icon} #${o.id} [${o.type}] ā ${date}`);
|
|
61
|
+
if (o.file_path)
|
|
62
|
+
lines.push(` File: ${o.file_path}`);
|
|
63
|
+
if (o.tool)
|
|
64
|
+
lines.push(` Tool: ${o.tool}`);
|
|
65
|
+
lines.push(` ${o.summary}`);
|
|
66
|
+
if (o.detail)
|
|
67
|
+
lines.push(` Detail: ${o.detail.slice(0, 200)}`);
|
|
68
|
+
lines.push('');
|
|
69
|
+
}
|
|
70
|
+
return lines.join('\n');
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observations.js","sourceRoot":"","sources":["../../../src/mcp/tools/observations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const SearchCodeInputSchema: z.ZodObject<{
|
|
3
|
+
query: z.ZodString;
|
|
4
|
+
k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
query: string;
|
|
7
|
+
k: number;
|
|
8
|
+
}, {
|
|
9
|
+
query: string;
|
|
10
|
+
k?: number | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
export type SearchCodeInput = z.infer<typeof SearchCodeInputSchema>;
|
|
13
|
+
export declare function searchCodeTool(input: SearchCodeInput, cwd: string): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=search_code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_code.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search_code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBzF"}
|