@phmotad/fire-code 0.2.8 → 0.3.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 (111) hide show
  1. package/dist/cli/commands/index-cmd.d.ts +3 -0
  2. package/dist/cli/commands/index-cmd.d.ts.map +1 -1
  3. package/dist/cli/commands/index-cmd.js +94 -19
  4. package/dist/cli/commands/index-cmd.js.map +1 -1
  5. package/dist/cli/commands/install.d.ts.map +1 -1
  6. package/dist/cli/commands/install.js +12 -0
  7. package/dist/cli/commands/install.js.map +1 -1
  8. package/dist/cli/index.js +10 -3
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/core/ExecutionEngine.d.ts +3 -1
  11. package/dist/core/ExecutionEngine.d.ts.map +1 -1
  12. package/dist/core/ExecutionEngine.js +36 -17
  13. package/dist/core/ExecutionEngine.js.map +1 -1
  14. package/dist/db/DatabaseManager.d.ts +7 -2
  15. package/dist/db/DatabaseManager.d.ts.map +1 -1
  16. package/dist/db/DatabaseManager.js +51 -26
  17. package/dist/db/DatabaseManager.js.map +1 -1
  18. package/dist/db/SqlJsAdapter.d.ts +32 -0
  19. package/dist/db/SqlJsAdapter.d.ts.map +1 -0
  20. package/dist/db/SqlJsAdapter.js +130 -0
  21. package/dist/db/SqlJsAdapter.js.map +1 -0
  22. package/dist/db/schema.d.ts +1 -1
  23. package/dist/db/schema.d.ts.map +1 -1
  24. package/dist/db/schema.js +30 -44
  25. package/dist/db/schema.js.map +1 -1
  26. package/dist/git/GitManager.d.ts +10 -0
  27. package/dist/git/GitManager.d.ts.map +1 -1
  28. package/dist/git/GitManager.js +46 -0
  29. package/dist/git/GitManager.js.map +1 -1
  30. package/dist/graph/GraphStore.d.ts +6 -1
  31. package/dist/graph/GraphStore.d.ts.map +1 -1
  32. package/dist/graph/InMemoryGraphStore.d.ts +1 -0
  33. package/dist/graph/InMemoryGraphStore.d.ts.map +1 -1
  34. package/dist/graph/InMemoryGraphStore.js +13 -2
  35. package/dist/graph/InMemoryGraphStore.js.map +1 -1
  36. package/dist/graph/SQLiteGraphStore.d.ts +4 -2
  37. package/dist/graph/SQLiteGraphStore.d.ts.map +1 -1
  38. package/dist/graph/SQLiteGraphStore.js +24 -2
  39. package/dist/graph/SQLiteGraphStore.js.map +1 -1
  40. package/dist/indexing/ASTParser.d.ts +1 -1
  41. package/dist/indexing/ASTParser.d.ts.map +1 -1
  42. package/dist/indexing/ASTParser.js +7 -1
  43. package/dist/indexing/ASTParser.js.map +1 -1
  44. package/dist/indexing/EmbeddingGenerator.d.ts.map +1 -1
  45. package/dist/indexing/EmbeddingGenerator.js +2 -25
  46. package/dist/indexing/EmbeddingGenerator.js.map +1 -1
  47. package/dist/indexing/FileScanner.d.ts.map +1 -1
  48. package/dist/indexing/FileScanner.js +2 -1
  49. package/dist/indexing/FileScanner.js.map +1 -1
  50. package/dist/indexing/GitIndexer.d.ts +4 -0
  51. package/dist/indexing/GitIndexer.d.ts.map +1 -0
  52. package/dist/indexing/GitIndexer.js +59 -0
  53. package/dist/indexing/GitIndexer.js.map +1 -0
  54. package/dist/indexing/GraphBuilder.d.ts.map +1 -1
  55. package/dist/indexing/GraphBuilder.js +21 -1
  56. package/dist/indexing/GraphBuilder.js.map +1 -1
  57. package/dist/indexing/Indexer.d.ts +3 -2
  58. package/dist/indexing/Indexer.d.ts.map +1 -1
  59. package/dist/indexing/Indexer.js +31 -9
  60. package/dist/indexing/Indexer.js.map +1 -1
  61. package/dist/mcp/server.d.ts.map +1 -1
  62. package/dist/mcp/server.js +22 -7
  63. package/dist/mcp/server.js.map +1 -1
  64. package/dist/mcp/tools/execute.d.ts +3 -0
  65. package/dist/mcp/tools/execute.d.ts.map +1 -1
  66. package/dist/mcp/tools/execute.js +2 -0
  67. package/dist/mcp/tools/execute.js.map +1 -1
  68. package/dist/mcp/tools/find_similar.d.ts +17 -0
  69. package/dist/mcp/tools/find_similar.d.ts.map +1 -0
  70. package/dist/mcp/tools/find_similar.js +95 -0
  71. package/dist/mcp/tools/find_similar.js.map +1 -0
  72. package/dist/mcp/tools/get_context.d.ts +3 -0
  73. package/dist/mcp/tools/get_context.d.ts.map +1 -1
  74. package/dist/mcp/tools/get_context.js +68 -7
  75. package/dist/mcp/tools/get_context.js.map +1 -1
  76. package/dist/mcp/tools/search_code.d.ts.map +1 -1
  77. package/dist/mcp/tools/search_code.js +22 -4
  78. package/dist/mcp/tools/search_code.js.map +1 -1
  79. package/dist/mcp/tools/smart_search.d.ts.map +1 -1
  80. package/dist/mcp/tools/smart_search.js +122 -29
  81. package/dist/mcp/tools/smart_search.js.map +1 -1
  82. package/dist/memory/HybridMemory.d.ts +4 -0
  83. package/dist/memory/HybridMemory.d.ts.map +1 -1
  84. package/dist/memory/HybridMemory.js +120 -29
  85. package/dist/memory/HybridMemory.js.map +1 -1
  86. package/dist/utils/gitHooks.d.ts +7 -0
  87. package/dist/utils/gitHooks.d.ts.map +1 -0
  88. package/dist/utils/gitHooks.js +77 -0
  89. package/dist/utils/gitHooks.js.map +1 -0
  90. package/dist/utils/modelManager.d.ts +37 -0
  91. package/dist/utils/modelManager.d.ts.map +1 -0
  92. package/dist/utils/modelManager.js +90 -0
  93. package/dist/utils/modelManager.js.map +1 -0
  94. package/dist/utils/workerPool.d.ts +8 -0
  95. package/dist/utils/workerPool.d.ts.map +1 -0
  96. package/dist/utils/workerPool.js +75 -0
  97. package/dist/utils/workerPool.js.map +1 -0
  98. package/dist/vector/MemoryVectorStore.d.ts.map +1 -1
  99. package/dist/vector/MemoryVectorStore.js +19 -13
  100. package/dist/vector/MemoryVectorStore.js.map +1 -1
  101. package/dist/vector/SQLiteVectorStore.d.ts +13 -0
  102. package/dist/vector/SQLiteVectorStore.d.ts.map +1 -0
  103. package/dist/vector/SQLiteVectorStore.js +111 -0
  104. package/dist/vector/SQLiteVectorStore.js.map +1 -0
  105. package/dist/vector/VectorStore.d.ts +0 -1
  106. package/dist/vector/VectorStore.d.ts.map +1 -1
  107. package/dist/workers/embeddingWorker.d.ts +2 -0
  108. package/dist/workers/embeddingWorker.d.ts.map +1 -0
  109. package/dist/workers/embeddingWorker.js +42 -0
  110. package/dist/workers/embeddingWorker.js.map +1 -0
  111. package/package.json +5 -3
@@ -5,11 +5,14 @@ const fs_1 = require("fs");
5
5
  const FileScanner_js_1 = require("./FileScanner.js");
6
6
  const ASTParser_js_1 = require("./ASTParser.js");
7
7
  const GraphBuilder_js_1 = require("./GraphBuilder.js");
8
+ const GitIndexer_js_1 = require("./GitIndexer.js");
8
9
  const EmbeddingGenerator_js_1 = require("./EmbeddingGenerator.js");
9
10
  const paths_js_1 = require("../utils/paths.js");
10
11
  const errors_js_1 = require("../utils/errors.js");
11
12
  const logger_js_1 = require("../utils/logger.js");
12
13
  const path_1 = require("path");
14
+ const DatabaseManager_js_1 = require("../db/DatabaseManager.js");
15
+ const GitManager_js_1 = require("../git/GitManager.js");
13
16
  function getProjectName(cwd) {
14
17
  try {
15
18
  const { readFileSync } = require('fs');
@@ -30,20 +33,25 @@ async function indexProject(cwd, config, graphStore, vectorStore) {
30
33
  logger_js_1.logger.info({ count: files.length }, 'Files scanned');
31
34
  // 2. Parse AST
32
35
  const parsed = (0, ASTParser_js_1.parseFiles)(files);
33
- const functionsFound = parsed.reduce((acc, f) => acc + f.functions.length, 0);
36
+ const functionsFound = parsed.reduce((acc, f) => acc + f.functions.length + f.classes.reduce((s, cls) => s + cls.methods.length, 0), 0);
34
37
  logger_js_1.logger.info({ files: parsed.length, functions: functionsFound }, 'AST parsed');
35
- // 3. Build graph (clears previous data for this project, then re-inserts)
36
- graphStore.clear();
37
- (0, GraphBuilder_js_1.buildGraphFromParsed)(parsed, graphStore);
38
+ // 3. Build graph wrapped in one transaction so we flush only once
39
+ graphStore.runBatch(() => {
40
+ graphStore.clear();
41
+ (0, GraphBuilder_js_1.buildGraphFromParsed)(parsed, graphStore);
42
+ });
43
+ // 4. Index git history (CommitNodes + commit→file edges)
44
+ const commitsIndexed = await (0, GitIndexer_js_1.indexGitHistory)(cwd, config.git, graphStore);
45
+ if (commitsIndexed > 0) {
46
+ logger_js_1.logger.info({ commits: commitsIndexed }, 'Git history indexed');
47
+ }
38
48
  const stats = graphStore.getStats();
39
49
  logger_js_1.logger.info(stats, 'Graph built');
40
- // 4. Build embeddings
50
+ // 5. Build embeddings
41
51
  const docs = (0, EmbeddingGenerator_js_1.buildDocumentsFromFiles)(files);
42
52
  const withEmbeddings = await (0, EmbeddingGenerator_js_1.generateEmbeddings)(docs);
43
53
  await vectorStore.add(withEmbeddings);
44
54
  logger_js_1.logger.info({ count: withEmbeddings.length }, 'Embeddings generated');
45
- // 5. Persist vectors (graph already persisted in SQLite)
46
- (0, fs_1.writeFileSync)((0, paths_js_1.getVectorsPath)(cwd), vectorStore.serialize());
47
55
  const durationMs = Date.now() - start;
48
56
  const result = {
49
57
  filesIndexed: files.length,
@@ -51,11 +59,25 @@ async function indexProject(cwd, config, graphStore, vectorStore) {
51
59
  nodesCreated: stats.nodes,
52
60
  edgesCreated: stats.edges,
53
61
  embeddingsGenerated: withEmbeddings.length,
62
+ commitsIndexed,
54
63
  durationMs,
55
64
  };
56
- // 6. Bootstrap log terse format to minimise tokens on SessionStart injection
65
+ // 7. Persist HEAD hash so get_context can detect stale index
66
+ try {
67
+ const db = DatabaseManager_js_1.DatabaseManager.getInstance((0, paths_js_1.getFireCodeDir)(cwd));
68
+ const project = getProjectName(cwd);
69
+ const git = new GitManager_js_1.GitManager(cwd, config.git);
70
+ const headHash = await git.getHeadHash();
71
+ if (headHash) {
72
+ db.setProjectMeta(project, 'indexed_at_hash', headHash);
73
+ db.setProjectMeta(project, 'indexed_at', Date.now().toString());
74
+ }
75
+ db.flush(); // persist all accumulated writes (metadata + any non-transacted ops)
76
+ }
77
+ catch { /* non-fatal */ }
78
+ // 8. Bootstrap log
57
79
  const ts = new Date().toISOString().replace('T', ' ').slice(0, 16);
58
- const logLine = `${ts} | ${files.length}f ${functionsFound}fn ${withEmbeddings.length}emb | ${(durationMs / 1000).toFixed(1)}s\n`;
80
+ const logLine = `${ts} | ${files.length}f ${functionsFound}fn ${commitsIndexed}commits ${withEmbeddings.length}emb | ${(durationMs / 1000).toFixed(1)}s\n`;
59
81
  (0, fs_1.appendFileSync)((0, paths_js_1.getBootstrapLogPath)(cwd), logLine);
60
82
  logger_js_1.logger.info(result, 'Indexing complete');
61
83
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"Indexer.js","sourceRoot":"","sources":["../../src/indexing/Indexer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Indexer.js","sourceRoot":"","sources":["../../src/indexing/Indexer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAoBA,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqJ/E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmK/E"}
@@ -14,10 +14,13 @@ const smart_outline_js_1 = require("./tools/smart_outline.js");
14
14
  const smart_search_js_1 = require("./tools/smart_search.js");
15
15
  const observations_js_1 = require("./tools/observations.js");
16
16
  const corpus_search_js_1 = require("./tools/corpus_search.js");
17
+ const find_similar_js_1 = require("./tools/find_similar.js");
17
18
  const logger_js_1 = require("../utils/logger.js");
18
19
  const errors_js_1 = require("../utils/errors.js");
19
20
  const zodToJsonSchema_js_1 = require("../utils/zodToJsonSchema.js");
21
+ const SqlJsAdapter_js_1 = require("../db/SqlJsAdapter.js");
20
22
  async function startMcpServer(cwd = process.cwd()) {
23
+ await (0, SqlJsAdapter_js_1.initSqlJs)();
21
24
  const config = await (0, loader_js_1.loadConfig)(cwd);
22
25
  const provider = (0, ProviderFactory_js_1.createProvider)(config.llm);
23
26
  const server = new index_js_1.Server({ name: 'fire-code', version: '0.1.0' }, { capabilities: { tools: {} } });
@@ -29,12 +32,13 @@ async function startMcpServer(cwd = process.cwd()) {
29
32
  description: `RECOMMENDED WORKFLOW (token-efficient):
30
33
  1. firecode.smart_search(query) → find files/symbols (compact index)
31
34
  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.
35
+ 3. firecode.find_similar(description) → check if similar code already exists (avoid duplication)
36
+ 4. firecode.get_context(query) → semantic + graph context for a task
37
+ 5. firecode.corpus_search(query) → search project docs/decisions/architecture notes
38
+ 6. firecode.get_graph(filter) → dependency relationships
39
+ 7. firecode.observations(query) → history of what was built/fixed/decided
40
+ 8. firecode.execute(task) make changes with Git traceability
41
+ Never call execute without first calling find_similar + get_context.
38
42
  Private content (<private>…</private>) is automatically redacted.`,
39
43
  inputSchema: { type: 'object', properties: {} },
40
44
  },
@@ -65,7 +69,13 @@ Private content (<private>…</private>) is automatically redacted.`,
65
69
  description: 'Query the structural dependency graph. Returns nodes (files, functions) and edges (imports, calls).',
66
70
  inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(get_graph_js_1.GetGraphInputSchema),
67
71
  },
68
- // ── Tier 2b: Memory history ──────────────────────────────────────────
72
+ // ── Tier 2b: Duplicate prevention ────────────────────────────────────
73
+ {
74
+ name: 'firecode.find_similar',
75
+ description: 'Check if similar code already exists before implementing. Returns matching functions/classes by name (graph) and by content (semantic). Call before writing new functions to avoid duplication.',
76
+ inputSchema: (0, zodToJsonSchema_js_1.zodToJsonSchema)(find_similar_js_1.FindSimilarInputSchema),
77
+ },
78
+ // ── Tier 2c: Memory history ──────────────────────────────────────────
69
79
  {
70
80
  name: 'firecode.observations',
71
81
  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).',
@@ -114,6 +124,11 @@ Private content (<private>…</private>) is automatically redacted.`,
114
124
  result = await (0, search_code_js_1.searchCodeTool)(input, cwd);
115
125
  break;
116
126
  }
127
+ case 'firecode.find_similar': {
128
+ const input = find_similar_js_1.FindSimilarInputSchema.parse(args);
129
+ result = await (0, find_similar_js_1.findSimilarTool)(input, cwd);
130
+ break;
131
+ }
117
132
  case 'firecode.observations': {
118
133
  const input = observations_js_1.ObservationsInputSchema.parse(args);
119
134
  result = await (0, observations_js_1.observationsTool)(input, cwd);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,19 @@ export declare const ExecuteInputSchema: z.ZodObject<{
6
6
  type: z.ZodOptional<z.ZodEnum<["feature", "fix", "refactor", "docs"]>>;
7
7
  mode: z.ZodOptional<z.ZodEnum<["safe", "aggressive"]>>;
8
8
  agent: z.ZodOptional<z.ZodEnum<["supervisor", "dev", "review"]>>;
9
+ scaffold: z.ZodOptional<z.ZodBoolean>;
9
10
  }, "strip", z.ZodTypeAny, {
10
11
  task: string;
11
12
  type?: "fix" | "refactor" | "docs" | "feature" | undefined;
12
13
  mode?: "safe" | "aggressive" | undefined;
13
14
  agent?: "supervisor" | "dev" | "review" | undefined;
15
+ scaffold?: boolean | undefined;
14
16
  }, {
15
17
  task: string;
16
18
  type?: "fix" | "refactor" | "docs" | "feature" | undefined;
17
19
  mode?: "safe" | "aggressive" | undefined;
18
20
  agent?: "supervisor" | "dev" | "review" | undefined;
21
+ scaffold?: boolean | undefined;
19
22
  }>;
20
23
  export type ExecuteInput = z.infer<typeof ExecuteInputSchema>;
21
24
  export declare function executeTool(input: ExecuteInput, config: FireCodeConfig, provider: LLMProvider, cwd: string): Promise<string>;
@@ -1 +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;AAIlE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAO7B,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,CAyBjB"}
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;AAIlE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAU7B,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,CA0BjB"}
@@ -10,6 +10,7 @@ exports.ExecuteInputSchema = zod_1.z.object({
10
10
  type: zod_1.z.enum(['feature', 'fix', 'refactor', 'docs']).optional().describe('Task type (auto-detected if omitted)'),
11
11
  mode: zod_1.z.enum(['safe', 'aggressive']).optional().describe('Execution mode'),
12
12
  agent: zod_1.z.enum(['supervisor', 'dev', 'review']).optional().describe('Agent role — sets branch prefix: firecode/supervisor/*, firecode/dev/*, firecode/review/*'),
13
+ scaffold: zod_1.z.boolean().optional().describe('Scaffold mode: create branch and surface relevant context, then return control to the host agent for implementation. Use this instead of the default sub-agent when you want to implement the task yourself.'),
13
14
  });
14
15
  async function executeTool(input, config, provider, cwd) {
15
16
  try {
@@ -20,6 +21,7 @@ async function executeTool(input, config, provider, cwd) {
20
21
  mode: input.mode,
21
22
  cwd,
22
23
  agentRole: input.agent,
24
+ scaffoldOnly: input.scaffold,
23
25
  });
24
26
  return JSON.stringify({
25
27
  success: result.success,
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":";;;AAkBA,kCA8BC;AAhDD,6BAAwB;AACxB,sEAAgE;AAIhE,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;IAC1E,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAChE,2FAA2F,CAC5F;CACF,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;YACH,SAAS,EAAE,KAAK,CAAC,KAA8B;SAChD,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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":";;;AAqBA,kCA+BC;AApDD,6BAAwB;AACxB,sEAAgE;AAIhE,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;IAC1E,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAChE,2FAA2F,CAC5F;IACD,QAAQ,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACvC,8MAA8M,CAC/M;CACF,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;YACH,SAAS,EAAE,KAAK,CAAC,KAA8B;YAC/C,YAAY,EAAE,KAAK,CAAC,QAAQ;SAC7B,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 FindSimilarInputSchema: z.ZodObject<{
3
+ description: z.ZodString;
4
+ type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["function", "class", "any"]>>>;
5
+ k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ type: "function" | "class" | "any";
8
+ description: string;
9
+ k: number;
10
+ }, {
11
+ description: string;
12
+ type?: "function" | "class" | "any" | undefined;
13
+ k?: number | undefined;
14
+ }>;
15
+ export type FindSimilarInput = z.infer<typeof FindSimilarInputSchema>;
16
+ export declare function findSimilarTool(input: FindSimilarInput, cwd: string): Promise<string>;
17
+ //# sourceMappingURL=find_similar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_similar.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/find_similar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAQjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAStE,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgF3F"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FindSimilarInputSchema = void 0;
4
+ exports.findSimilarTool = findSimilarTool;
5
+ const zod_1 = require("zod");
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
9
+ const errors_js_1 = require("../../utils/errors.js");
10
+ const paths_js_1 = require("../../utils/paths.js");
11
+ exports.FindSimilarInputSchema = zod_1.z.object({
12
+ description: zod_1.z.string().min(1).describe('Describe what you want to implement — in natural language or as a symbol name'),
13
+ type: zod_1.z.enum(['function', 'class', 'any']).optional().default('any').describe('Restrict to a specific symbol type'),
14
+ k: zod_1.z.number().int().positive().optional().default(5).describe('Max results to return'),
15
+ });
16
+ function getProjectName(cwd) {
17
+ try {
18
+ const pkg = JSON.parse((0, fs_1.readFileSync)(require('path').join(cwd, 'package.json'), 'utf8'));
19
+ return pkg.name ?? (0, path_1.basename)(cwd);
20
+ }
21
+ catch {
22
+ return (0, path_1.basename)(cwd);
23
+ }
24
+ }
25
+ async function findSimilarTool(input, cwd) {
26
+ try {
27
+ const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
28
+ if (!(0, fs_1.existsSync)(firedotDir)) {
29
+ return 'Projeto não indexado. Execute `fire-code index` primeiro.';
30
+ }
31
+ const project = getProjectName(cwd);
32
+ const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
33
+ const vectorStore = db.getVectorStore(project);
34
+ const graphStore = db.getGraphStore(project);
35
+ // 1. Symbol lookup in graph — extract keywords and search by name
36
+ const keywords = input.description
37
+ .split(/\W+/)
38
+ .filter(w => w.length > 2)
39
+ .slice(0, 5);
40
+ const graphMatches = [];
41
+ const seen = new Set();
42
+ for (const keyword of keywords) {
43
+ const nodeType = input.type === 'class' ? 'function' : 'function';
44
+ const nodes = graphStore.query({ type: nodeType, label: keyword });
45
+ for (const node of nodes) {
46
+ if (node.type === 'function' && !seen.has(node.id)) {
47
+ seen.add(node.id);
48
+ graphMatches.push(node);
49
+ }
50
+ }
51
+ }
52
+ // 2. Vector/text search for semantically similar code chunks
53
+ const vectorResults = vectorStore.size() > 0
54
+ ? await vectorStore.search(input.description, input.k)
55
+ : [];
56
+ const lines = [
57
+ '# Código Similar Encontrado\n',
58
+ '> Verifique se estas implementações já atendem sua necessidade antes de criar algo novo.\n',
59
+ ];
60
+ let found = false;
61
+ if (graphMatches.length > 0) {
62
+ found = true;
63
+ lines.push('## Símbolos por Nome (grafo)\n');
64
+ for (const fn of graphMatches.slice(0, input.k)) {
65
+ const params = fn.parameters.join(', ');
66
+ const ret = fn.returnType ? `: ${fn.returnType}` : '';
67
+ const cls = fn.parentClass ? ` ← \`${fn.parentClass}\`` : '';
68
+ const relPath = fn.filePath.replace(/\\/g, '/');
69
+ lines.push(`### \`${fn.label}(${params})${ret}\`${cls}`);
70
+ lines.push(`📍 ${relPath}:${fn.line} ${fn.isExported ? '(exportado)' : '(interno)'}\n`);
71
+ }
72
+ }
73
+ const relevantVec = vectorResults.filter(r => r.score > 0.05);
74
+ if (relevantVec.length > 0) {
75
+ found = true;
76
+ lines.push('## Código Similar por Conteúdo (busca semântica)\n');
77
+ for (const r of relevantVec) {
78
+ const path = String(r.document.metadata.relativePath ?? r.document.metadata.path ?? 'unknown');
79
+ lines.push(`### ${path} (relevância: ${(r.score * 100).toFixed(0)}%)`);
80
+ lines.push('```');
81
+ lines.push(r.document.text.slice(0, 400).trimEnd());
82
+ lines.push('```\n');
83
+ }
84
+ }
85
+ if (!found) {
86
+ lines.push('✅ Nenhum código similar encontrado — pode implementar com segurança.');
87
+ }
88
+ return lines.join('\n');
89
+ }
90
+ catch (err) {
91
+ const e = (0, errors_js_1.toFireCodeError)(err);
92
+ return `Erro em find_similar: ${e.message}`;
93
+ }
94
+ }
95
+ //# sourceMappingURL=find_similar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find_similar.js","sourceRoot":"","sources":["../../../src/mcp/tools/find_similar.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,17 @@ export declare const GetContextInputSchema: z.ZodObject<{
3
3
  query: z.ZodString;
4
4
  k: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
5
  includeGraph: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
6
+ includeGitDiff: z.ZodOptional<z.ZodBoolean>;
6
7
  }, "strip", z.ZodTypeAny, {
7
8
  query: string;
8
9
  k: number;
9
10
  includeGraph: boolean;
11
+ includeGitDiff?: boolean | undefined;
10
12
  }, {
11
13
  query: string;
12
14
  k?: number | undefined;
13
15
  includeGraph?: boolean | undefined;
16
+ includeGitDiff?: boolean | undefined;
14
17
  }>;
15
18
  export type GetContextInput = z.infer<typeof GetContextInputSchema>;
16
19
  export declare function getContextTool(input: GetContextInput, cwd: string): Promise<string>;
@@ -1 +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"}
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;AAWxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAsCpE,wBAAsB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDzF"}
@@ -7,14 +7,16 @@ const path_1 = require("path");
7
7
  const HybridMemory_js_1 = require("../../memory/HybridMemory.js");
8
8
  const FallbackMemory_js_1 = require("../../memory/FallbackMemory.js");
9
9
  const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
10
- const MemoryVectorStore_js_1 = require("../../vector/MemoryVectorStore.js");
10
+ const GitManager_js_1 = require("../../git/GitManager.js");
11
11
  const errors_js_1 = require("../../utils/errors.js");
12
12
  const fs_1 = require("fs");
13
13
  const paths_js_1 = require("../../utils/paths.js");
14
+ const defaults_js_1 = require("../../config/defaults.js");
14
15
  exports.GetContextInputSchema = zod_1.z.object({
15
16
  query: zod_1.z.string().min(1).describe('Query to retrieve relevant context for'),
16
17
  k: zod_1.z.number().int().positive().optional().default(5).describe('Number of results to return'),
17
18
  includeGraph: zod_1.z.boolean().optional().default(true).describe('Include structural graph context'),
19
+ includeGitDiff: zod_1.z.boolean().optional().describe('Include uncommitted git diff in context (default: true)'),
18
20
  });
19
21
  function getProjectName(cwd) {
20
22
  try {
@@ -25,22 +27,81 @@ function getProjectName(cwd) {
25
27
  return (0, path_1.basename)(cwd);
26
28
  }
27
29
  }
30
+ async function getWorkingDiff(cwd) {
31
+ try {
32
+ const defaults = (0, defaults_js_1.getDefaults)();
33
+ const git = new GitManager_js_1.GitManager(cwd, defaults.git);
34
+ if (!(await git.isRepo()))
35
+ return '';
36
+ return await git.getWorkingDiff(2000);
37
+ }
38
+ catch {
39
+ return '';
40
+ }
41
+ }
42
+ async function buildStaleWarning(cwd, db, project) {
43
+ try {
44
+ const defaults = (0, defaults_js_1.getDefaults)();
45
+ const git = new GitManager_js_1.GitManager(cwd, defaults.git);
46
+ if (!(await git.isRepo()))
47
+ return '';
48
+ const [currentHead, indexedHead] = await Promise.all([
49
+ git.getHeadHash(),
50
+ Promise.resolve(db.getProjectMeta(project, 'indexed_at_hash')),
51
+ ]);
52
+ if (currentHead && indexedHead && currentHead !== indexedHead) {
53
+ return `> **Warning:** Index is stale. Indexed at \`${indexedHead.slice(0, 8)}\`, current HEAD is \`${currentHead.slice(0, 8)}\`. Run \`npx firecode index\` for accurate context.\n\n`;
54
+ }
55
+ return '';
56
+ }
57
+ catch {
58
+ return '';
59
+ }
60
+ }
28
61
  async function getContextTool(input, cwd) {
29
62
  try {
30
63
  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)) {
64
+ const diffPromise = input.includeGitDiff !== false ? getWorkingDiff(cwd) : Promise.resolve('');
65
+ if (!(0, fs_1.existsSync)(firedotDir)) {
33
66
  const fallback = new FallbackMemory_js_1.FallbackMemory(cwd);
34
- const ctx = await fallback.retrieve(input.query, input.k);
67
+ const [ctx, diff] = await Promise.all([
68
+ fallback.retrieve(input.query, input.k),
69
+ diffPromise,
70
+ ]);
71
+ if (diff)
72
+ return ctx.combined + `\n## Uncommitted Changes\n\`\`\`diff\n${diff}\n\`\`\`\n`;
35
73
  return ctx.combined;
36
74
  }
37
75
  const project = getProjectName(cwd);
38
76
  const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
39
77
  const graphStore = db.getGraphStore(project);
40
- const vectorStore = MemoryVectorStore_js_1.MemoryVectorStore.deserialize((0, fs_1.readFileSync)(vectorsPath, 'utf8'));
78
+ const vectorStore = db.getVectorStore(project);
79
+ if (vectorStore.size() === 0) {
80
+ const fallback = new FallbackMemory_js_1.FallbackMemory(cwd);
81
+ const [ctx, diff] = await Promise.all([
82
+ fallback.retrieve(input.query, input.k),
83
+ diffPromise,
84
+ ]);
85
+ if (diff)
86
+ return ctx.combined + `\n## Uncommitted Changes\n\`\`\`diff\n${diff}\n\`\`\`\n`;
87
+ return ctx.combined;
88
+ }
41
89
  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;
90
+ const [ctx, workingDiff, staleWarning] = await Promise.all([
91
+ memory.retrieve(input.query, { k: input.k, includeGraph: input.includeGraph }),
92
+ diffPromise,
93
+ buildStaleWarning(cwd, db, project),
94
+ ]);
95
+ // Re-retrieve with working diff if there's something uncommitted
96
+ if (workingDiff) {
97
+ const ctxWithDiff = await memory.retrieve(input.query, {
98
+ k: input.k,
99
+ includeGraph: input.includeGraph,
100
+ workingDiff,
101
+ });
102
+ return staleWarning + ctxWithDiff.combined;
103
+ }
104
+ return staleWarning + ctx.combined;
44
105
  }
45
106
  catch (err) {
46
107
  const e = (0, errors_js_1.toFireCodeError)(err);
@@ -1 +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"}
1
+ {"version":3,"file":"get_context.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_context.ts"],"names":[],"mappings":";;;AAwDA,wCAqDC;AA7GD,6BAAwB;AACxB,+BAAgC;AAChC,kEAA4D;AAC5D,sEAAgE;AAChE,oEAA8D;AAC9D,2DAAqD;AACrD,qDAAwD;AACxD,2BAA8C;AAC9C,mDAAsD;AACtD,0DAAuD;AAE1C,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;IAC/F,cAAc,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;CAC3G,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;AAED,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,0BAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,OAAO,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,EAAmB,EAAE,OAAe;IAChF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,0BAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnD,GAAG,CAAC,WAAW,EAAE;YACjB,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;SAC/D,CAAC,CAAC;QACH,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAC9D,OAAO,+CAA+C,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,yBAAyB,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,0DAA0D,CAAC;QAC1L,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,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,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE/F,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,kCAAc,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvC,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,IAAI;gBAAE,OAAO,GAAG,CAAC,QAAQ,GAAG,yCAAyC,IAAI,YAAY,CAAC;YAC1F,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,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,kCAAc,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACvC,WAAW;aACZ,CAAC,CAAC;YACH,IAAI,IAAI;gBAAE,OAAO,GAAG,CAAC,QAAQ,GAAG,yCAAyC,IAAI,YAAY,CAAC;YAC1F,OAAO,GAAG,CAAC,QAAQ,CAAC;QACtB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,8BAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEzD,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACzD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;YAC9E,WAAW;YACX,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC;SACpC,CAAC,CAAC;QAEH,iEAAiE;QACjE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;gBACrD,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,WAAW;aACZ,CAAC,CAAC;YACH,OAAO,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC;QAC7C,CAAC;QAED,OAAO,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;IACrC,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"}
@@ -1 +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"}
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;AASxB,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,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,CAkCzF"}
@@ -3,24 +3,42 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SearchCodeInputSchema = void 0;
4
4
  exports.searchCodeTool = searchCodeTool;
5
5
  const zod_1 = require("zod");
6
- const MemoryVectorStore_js_1 = require("../../vector/MemoryVectorStore.js");
6
+ const DatabaseManager_js_1 = require("../../db/DatabaseManager.js");
7
7
  const FallbackMemory_js_1 = require("../../memory/FallbackMemory.js");
8
8
  const errors_js_1 = require("../../utils/errors.js");
9
9
  const fs_1 = require("fs");
10
10
  const paths_js_1 = require("../../utils/paths.js");
11
+ const path_1 = require("path");
12
+ const fs_2 = require("fs");
11
13
  exports.SearchCodeInputSchema = zod_1.z.object({
12
14
  query: zod_1.z.string().min(1).describe('Semantic search query for code'),
13
15
  k: zod_1.z.number().int().positive().optional().default(5).describe('Number of results'),
14
16
  });
17
+ function getProjectName(cwd) {
18
+ try {
19
+ const pkg = JSON.parse((0, fs_2.readFileSync)(require('path').join(cwd, 'package.json'), 'utf8'));
20
+ return pkg.name ?? (0, path_1.basename)(cwd);
21
+ }
22
+ catch {
23
+ return (0, path_1.basename)(cwd);
24
+ }
25
+ }
15
26
  async function searchCodeTool(input, cwd) {
16
27
  try {
17
- const vectorsPath = (0, paths_js_1.getVectorsPath)(cwd);
18
- if (!(0, fs_1.existsSync)(vectorsPath)) {
28
+ const firedotDir = (0, paths_js_1.getFireCodeDir)(cwd);
29
+ if (!(0, fs_1.existsSync)(firedotDir)) {
30
+ const fallback = new FallbackMemory_js_1.FallbackMemory(cwd);
31
+ const ctx = await fallback.retrieve(input.query, input.k);
32
+ return ctx.combined;
33
+ }
34
+ const project = getProjectName(cwd);
35
+ const db = DatabaseManager_js_1.DatabaseManager.getInstance(firedotDir);
36
+ const vectorStore = db.getVectorStore(project);
37
+ if (vectorStore.size() === 0) {
19
38
  const fallback = new FallbackMemory_js_1.FallbackMemory(cwd);
20
39
  const ctx = await fallback.retrieve(input.query, input.k);
21
40
  return ctx.combined;
22
41
  }
23
- const vectorStore = MemoryVectorStore_js_1.MemoryVectorStore.deserialize((0, fs_1.readFileSync)(vectorsPath, 'utf8'));
24
42
  const results = await vectorStore.search(input.query, input.k);
25
43
  if (results.length === 0)
26
44
  return 'No results found.';
@@ -1 +1 @@
1
- {"version":3,"file":"search_code.js","sourceRoot":"","sources":["../../../src/mcp/tools/search_code.ts"],"names":[],"mappings":";;;AAcA,wCAyBC;AAvCD,6BAAwB;AACxB,4EAAsE;AACtE,sEAAgE;AAChE,qDAAwD;AACxD,2BAA8C;AAC9C,mDAAsD;AAEzC,QAAA,qBAAqB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACnE,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACnF,CAAC,CAAC;AAII,KAAK,UAAU,cAAc,CAAC,KAAsB,EAAE,GAAW;IACtE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,yBAAc,EAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,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,WAAW,GAAG,wCAAiB,CAAC,WAAW,CAAC,IAAA,iBAAY,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAE/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,mBAAmB,CAAC;QAErD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC;YACvF,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC;QACxH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,IAAA,2BAAe,EAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,yBAAyB,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"search_code.js","sourceRoot":"","sources":["../../../src/mcp/tools/search_code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"smart_search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/smart_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA4DtE,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmE3F"}
1
+ {"version":3,"file":"smart_search.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/smart_search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAuHtE,wBAAsB,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgG3F"}