@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.
Files changed (248) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +379 -0
  3. package/dist/agents/BaseAgent.d.ts +32 -0
  4. package/dist/agents/BaseAgent.d.ts.map +1 -0
  5. package/dist/agents/BaseAgent.js +19 -0
  6. package/dist/agents/BaseAgent.js.map +1 -0
  7. package/dist/agents/CodeAgent.d.ts +7 -0
  8. package/dist/agents/CodeAgent.d.ts.map +1 -0
  9. package/dist/agents/CodeAgent.js +130 -0
  10. package/dist/agents/CodeAgent.js.map +1 -0
  11. package/dist/cli/commands/corpus.d.ts +20 -0
  12. package/dist/cli/commands/corpus.d.ts.map +1 -0
  13. package/dist/cli/commands/corpus.js +60 -0
  14. package/dist/cli/commands/corpus.js.map +1 -0
  15. package/dist/cli/commands/daemon.d.ts +5 -0
  16. package/dist/cli/commands/daemon.d.ts.map +1 -0
  17. package/dist/cli/commands/daemon.js +79 -0
  18. package/dist/cli/commands/daemon.js.map +1 -0
  19. package/dist/cli/commands/dev.d.ts +2 -0
  20. package/dist/cli/commands/dev.d.ts.map +1 -0
  21. package/dist/cli/commands/dev.js +20 -0
  22. package/dist/cli/commands/dev.js.map +1 -0
  23. package/dist/cli/commands/index-cmd.d.ts +6 -0
  24. package/dist/cli/commands/index-cmd.d.ts.map +1 -0
  25. package/dist/cli/commands/index-cmd.js +57 -0
  26. package/dist/cli/commands/index-cmd.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts +2 -0
  28. package/dist/cli/commands/init.d.ts.map +1 -0
  29. package/dist/cli/commands/init.js +173 -0
  30. package/dist/cli/commands/init.js.map +1 -0
  31. package/dist/cli/commands/install.d.ts +8 -0
  32. package/dist/cli/commands/install.d.ts.map +1 -0
  33. package/dist/cli/commands/install.js +154 -0
  34. package/dist/cli/commands/install.js.map +1 -0
  35. package/dist/cli/commands/observe.d.ts +19 -0
  36. package/dist/cli/commands/observe.d.ts.map +1 -0
  37. package/dist/cli/commands/observe.js +86 -0
  38. package/dist/cli/commands/observe.js.map +1 -0
  39. package/dist/cli/index.d.ts +3 -0
  40. package/dist/cli/index.d.ts.map +1 -0
  41. package/dist/cli/index.js +162 -0
  42. package/dist/cli/index.js.map +1 -0
  43. package/dist/config/defaults.d.ts +3 -0
  44. package/dist/config/defaults.d.ts.map +1 -0
  45. package/dist/config/defaults.js +8 -0
  46. package/dist/config/defaults.js.map +1 -0
  47. package/dist/config/loader.d.ts +3 -0
  48. package/dist/config/loader.d.ts.map +1 -0
  49. package/dist/config/loader.js +96 -0
  50. package/dist/config/loader.js.map +1 -0
  51. package/dist/config/types.d.ts +436 -0
  52. package/dist/config/types.d.ts.map +1 -0
  53. package/dist/config/types.js +73 -0
  54. package/dist/config/types.js.map +1 -0
  55. package/dist/core/ExecutionEngine.d.ts +26 -0
  56. package/dist/core/ExecutionEngine.d.ts.map +1 -0
  57. package/dist/core/ExecutionEngine.js +102 -0
  58. package/dist/core/ExecutionEngine.js.map +1 -0
  59. package/dist/core/TaskRouter.d.ts +3 -0
  60. package/dist/core/TaskRouter.d.ts.map +1 -0
  61. package/dist/core/TaskRouter.js +29 -0
  62. package/dist/core/TaskRouter.js.map +1 -0
  63. package/dist/daemon/DaemonClient.d.ts +8 -0
  64. package/dist/daemon/DaemonClient.d.ts.map +1 -0
  65. package/dist/daemon/DaemonClient.js +61 -0
  66. package/dist/daemon/DaemonClient.js.map +1 -0
  67. package/dist/daemon/DaemonServer.d.ts +17 -0
  68. package/dist/daemon/DaemonServer.d.ts.map +1 -0
  69. package/dist/daemon/DaemonServer.js +235 -0
  70. package/dist/daemon/DaemonServer.js.map +1 -0
  71. package/dist/db/DatabaseManager.d.ts +79 -0
  72. package/dist/db/DatabaseManager.d.ts.map +1 -0
  73. package/dist/db/DatabaseManager.js +212 -0
  74. package/dist/db/DatabaseManager.js.map +1 -0
  75. package/dist/db/schema.d.ts +2 -0
  76. package/dist/db/schema.d.ts.map +1 -0
  77. package/dist/db/schema.js +127 -0
  78. package/dist/db/schema.js.map +1 -0
  79. package/dist/git/CommitFormatter.d.ts +19 -0
  80. package/dist/git/CommitFormatter.d.ts.map +1 -0
  81. package/dist/git/CommitFormatter.js +47 -0
  82. package/dist/git/CommitFormatter.js.map +1 -0
  83. package/dist/git/GitManager.d.ts +28 -0
  84. package/dist/git/GitManager.d.ts.map +1 -0
  85. package/dist/git/GitManager.js +147 -0
  86. package/dist/git/GitManager.js.map +1 -0
  87. package/dist/graph/GraphStore.d.ts +54 -0
  88. package/dist/graph/GraphStore.d.ts.map +1 -0
  89. package/dist/graph/GraphStore.js +3 -0
  90. package/dist/graph/GraphStore.js.map +1 -0
  91. package/dist/graph/InMemoryGraphStore.d.ts +16 -0
  92. package/dist/graph/InMemoryGraphStore.d.ts.map +1 -0
  93. package/dist/graph/InMemoryGraphStore.js +75 -0
  94. package/dist/graph/InMemoryGraphStore.js.map +1 -0
  95. package/dist/graph/SQLiteGraphStore.d.ts +31 -0
  96. package/dist/graph/SQLiteGraphStore.d.ts.map +1 -0
  97. package/dist/graph/SQLiteGraphStore.js +158 -0
  98. package/dist/graph/SQLiteGraphStore.js.map +1 -0
  99. package/dist/index.d.ts +16 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +32 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/indexing/ASTParser.d.ts +32 -0
  104. package/dist/indexing/ASTParser.d.ts.map +1 -0
  105. package/dist/indexing/ASTParser.js +185 -0
  106. package/dist/indexing/ASTParser.js.map +1 -0
  107. package/dist/indexing/EmbeddingGenerator.d.ts +15 -0
  108. package/dist/indexing/EmbeddingGenerator.d.ts.map +1 -0
  109. package/dist/indexing/EmbeddingGenerator.js +66 -0
  110. package/dist/indexing/EmbeddingGenerator.js.map +1 -0
  111. package/dist/indexing/FileScanner.d.ts +10 -0
  112. package/dist/indexing/FileScanner.d.ts.map +1 -0
  113. package/dist/indexing/FileScanner.js +58 -0
  114. package/dist/indexing/FileScanner.js.map +1 -0
  115. package/dist/indexing/GraphBuilder.d.ts +4 -0
  116. package/dist/indexing/GraphBuilder.d.ts.map +1 -0
  117. package/dist/indexing/GraphBuilder.js +51 -0
  118. package/dist/indexing/GraphBuilder.js.map +1 -0
  119. package/dist/indexing/Indexer.d.ts +13 -0
  120. package/dist/indexing/Indexer.d.ts.map +1 -0
  121. package/dist/indexing/Indexer.js +68 -0
  122. package/dist/indexing/Indexer.js.map +1 -0
  123. package/dist/mcp/server.d.ts +2 -0
  124. package/dist/mcp/server.d.ts.map +1 -0
  125. package/dist/mcp/server.js +155 -0
  126. package/dist/mcp/server.js.map +1 -0
  127. package/dist/mcp/tools/corpus_search.d.ts +14 -0
  128. package/dist/mcp/tools/corpus_search.d.ts.map +1 -0
  129. package/dist/mcp/tools/corpus_search.js +33 -0
  130. package/dist/mcp/tools/corpus_search.js.map +1 -0
  131. package/dist/mcp/tools/execute.d.ts +19 -0
  132. package/dist/mcp/tools/execute.d.ts.map +1 -0
  133. package/dist/mcp/tools/execute.js +38 -0
  134. package/dist/mcp/tools/execute.js.map +1 -0
  135. package/dist/mcp/tools/get_context.d.ts +17 -0
  136. package/dist/mcp/tools/get_context.d.ts.map +1 -0
  137. package/dist/mcp/tools/get_context.js +50 -0
  138. package/dist/mcp/tools/get_context.js.map +1 -0
  139. package/dist/mcp/tools/get_graph.d.ts +26 -0
  140. package/dist/mcp/tools/get_graph.d.ts.map +1 -0
  141. package/dist/mcp/tools/get_graph.js +68 -0
  142. package/dist/mcp/tools/get_graph.js.map +1 -0
  143. package/dist/mcp/tools/observations.d.ts +23 -0
  144. package/dist/mcp/tools/observations.d.ts.map +1 -0
  145. package/dist/mcp/tools/observations.js +72 -0
  146. package/dist/mcp/tools/observations.js.map +1 -0
  147. package/dist/mcp/tools/search_code.d.ts +14 -0
  148. package/dist/mcp/tools/search_code.d.ts.map +1 -0
  149. package/dist/mcp/tools/search_code.js +38 -0
  150. package/dist/mcp/tools/search_code.js.map +1 -0
  151. package/dist/mcp/tools/smart_outline.d.ts +14 -0
  152. package/dist/mcp/tools/smart_outline.d.ts.map +1 -0
  153. package/dist/mcp/tools/smart_outline.js +99 -0
  154. package/dist/mcp/tools/smart_outline.js.map +1 -0
  155. package/dist/mcp/tools/smart_search.d.ts +20 -0
  156. package/dist/mcp/tools/smart_search.d.ts.map +1 -0
  157. package/dist/mcp/tools/smart_search.js +131 -0
  158. package/dist/mcp/tools/smart_search.js.map +1 -0
  159. package/dist/memory/FallbackMemory.d.ts +9 -0
  160. package/dist/memory/FallbackMemory.d.ts.map +1 -0
  161. package/dist/memory/FallbackMemory.js +70 -0
  162. package/dist/memory/FallbackMemory.js.map +1 -0
  163. package/dist/memory/HybridMemory.d.ts +20 -0
  164. package/dist/memory/HybridMemory.d.ts.map +1 -0
  165. package/dist/memory/HybridMemory.js +74 -0
  166. package/dist/memory/HybridMemory.js.map +1 -0
  167. package/dist/providers/AgentSDKProvider.d.ts +13 -0
  168. package/dist/providers/AgentSDKProvider.d.ts.map +1 -0
  169. package/dist/providers/AgentSDKProvider.js +64 -0
  170. package/dist/providers/AgentSDKProvider.js.map +1 -0
  171. package/dist/providers/AnthropicProvider.d.ts +11 -0
  172. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  173. package/dist/providers/AnthropicProvider.js +61 -0
  174. package/dist/providers/AnthropicProvider.js.map +1 -0
  175. package/dist/providers/LLMProvider.d.ts +12 -0
  176. package/dist/providers/LLMProvider.d.ts.map +1 -0
  177. package/dist/providers/LLMProvider.js +3 -0
  178. package/dist/providers/LLMProvider.js.map +1 -0
  179. package/dist/providers/OllamaProvider.d.ts +11 -0
  180. package/dist/providers/OllamaProvider.d.ts.map +1 -0
  181. package/dist/providers/OllamaProvider.js +71 -0
  182. package/dist/providers/OllamaProvider.js.map +1 -0
  183. package/dist/providers/OpenAIProvider.d.ts +11 -0
  184. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  185. package/dist/providers/OpenAIProvider.js +63 -0
  186. package/dist/providers/OpenAIProvider.js.map +1 -0
  187. package/dist/providers/OpenRouterProvider.d.ts +12 -0
  188. package/dist/providers/OpenRouterProvider.d.ts.map +1 -0
  189. package/dist/providers/OpenRouterProvider.js +89 -0
  190. package/dist/providers/OpenRouterProvider.js.map +1 -0
  191. package/dist/providers/ProviderFactory.d.ts +4 -0
  192. package/dist/providers/ProviderFactory.d.ts.map +1 -0
  193. package/dist/providers/ProviderFactory.js +27 -0
  194. package/dist/providers/ProviderFactory.js.map +1 -0
  195. package/dist/services/CorpusService.d.ts +27 -0
  196. package/dist/services/CorpusService.d.ts.map +1 -0
  197. package/dist/services/CorpusService.js +142 -0
  198. package/dist/services/CorpusService.js.map +1 -0
  199. package/dist/services/ObservationService.d.ts +17 -0
  200. package/dist/services/ObservationService.d.ts.map +1 -0
  201. package/dist/services/ObservationService.js +101 -0
  202. package/dist/services/ObservationService.js.map +1 -0
  203. package/dist/services/SessionService.d.ts +10 -0
  204. package/dist/services/SessionService.d.ts.map +1 -0
  205. package/dist/services/SessionService.js +38 -0
  206. package/dist/services/SessionService.js.map +1 -0
  207. package/dist/services/SummarizationService.d.ts +8 -0
  208. package/dist/services/SummarizationService.d.ts.map +1 -0
  209. package/dist/services/SummarizationService.js +65 -0
  210. package/dist/services/SummarizationService.js.map +1 -0
  211. package/dist/utils/errors.d.ts +26 -0
  212. package/dist/utils/errors.d.ts.map +1 -0
  213. package/dist/utils/errors.js +72 -0
  214. package/dist/utils/errors.js.map +1 -0
  215. package/dist/utils/logger.d.ts +4 -0
  216. package/dist/utils/logger.d.ts.map +1 -0
  217. package/dist/utils/logger.js +16 -0
  218. package/dist/utils/logger.js.map +1 -0
  219. package/dist/utils/paths.d.ts +10 -0
  220. package/dist/utils/paths.d.ts.map +1 -0
  221. package/dist/utils/paths.js +43 -0
  222. package/dist/utils/paths.js.map +1 -0
  223. package/dist/utils/privacy.d.ts +5 -0
  224. package/dist/utils/privacy.d.ts.map +1 -0
  225. package/dist/utils/privacy.js +39 -0
  226. package/dist/utils/privacy.js.map +1 -0
  227. package/dist/utils/zodToJsonSchema.d.ts +23 -0
  228. package/dist/utils/zodToJsonSchema.d.ts.map +1 -0
  229. package/dist/utils/zodToJsonSchema.js +52 -0
  230. package/dist/utils/zodToJsonSchema.js.map +1 -0
  231. package/dist/vector/MemoryVectorStore.d.ts +16 -0
  232. package/dist/vector/MemoryVectorStore.d.ts.map +1 -0
  233. package/dist/vector/MemoryVectorStore.js +97 -0
  234. package/dist/vector/MemoryVectorStore.js.map +1 -0
  235. package/dist/vector/VectorStore.d.ts +19 -0
  236. package/dist/vector/VectorStore.d.ts.map +1 -0
  237. package/dist/vector/VectorStore.js +3 -0
  238. package/dist/vector/VectorStore.js.map +1 -0
  239. package/dist/vector/VectraVectorStore.d.ts +23 -0
  240. package/dist/vector/VectraVectorStore.d.ts.map +1 -0
  241. package/dist/vector/VectraVectorStore.js +93 -0
  242. package/dist/vector/VectraVectorStore.js.map +1 -0
  243. package/examples/firecode.config.example.ts +87 -0
  244. package/package.json +111 -0
  245. package/plugin/.claude-plugin/plugin.json +17 -0
  246. package/plugin/hooks/hooks.json +86 -0
  247. package/plugin/scripts/context-inject.js +208 -0
  248. 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":";;;AAyBA,oCA4CC;AArED,6BAAwB;AACxB,+BAAgC;AAChC,oEAA8D;AAC9D,qDAAwD;AACxD,2BAA8C;AAC9C,mDAAsD;AAEzC,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACvF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACxE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC3E,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACzF,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACtF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CAC1F,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,YAAY,CAAC,KAAoB,EAAE,GAAW;IAClE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,uDAAuD,CAAC;QACjE,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,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEpC,uCAAuC;QACvC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACrF,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAEzB,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9E,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnG,CAAC,CAAC;SACJ,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,2BAA2B,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC;AACH,CAAC"}
@@ -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"}