@easynet/agent-tool-buildin 0.0.67 → 0.0.69

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 (60) hide show
  1. package/dist/agent-tool-extension-compat.d.ts.map +1 -1
  2. package/dist/agent-tool-extension-compat.js +14 -4
  3. package/dist/agent-tool-extension-compat.js.map +1 -1
  4. package/dist/core-tools-manifest.json +6 -503
  5. package/dist/src/analyze/analyzeProjectRepo.constants.d.ts +6 -0
  6. package/dist/src/analyze/analyzeProjectRepo.constants.d.ts.map +1 -0
  7. package/dist/src/analyze/analyzeProjectRepo.constants.js +53 -0
  8. package/dist/src/analyze/analyzeProjectRepo.constants.js.map +1 -0
  9. package/dist/src/analyze/analyzeProjectRepo.d.ts +4 -9
  10. package/dist/src/analyze/analyzeProjectRepo.d.ts.map +1 -1
  11. package/dist/src/analyze/analyzeProjectRepo.js +100 -122
  12. package/dist/src/analyze/analyzeProjectRepo.js.map +1 -1
  13. package/dist/src/analyze/askProjectRepo.d.ts +0 -2
  14. package/dist/src/analyze/askProjectRepo.d.ts.map +1 -1
  15. package/dist/src/analyze/askProjectRepo.helpers.d.ts +57 -0
  16. package/dist/src/analyze/askProjectRepo.helpers.d.ts.map +1 -0
  17. package/dist/src/analyze/askProjectRepo.helpers.js +233 -0
  18. package/dist/src/analyze/askProjectRepo.helpers.js.map +1 -0
  19. package/dist/src/analyze/askProjectRepo.js +132 -354
  20. package/dist/src/analyze/askProjectRepo.js.map +1 -1
  21. package/dist/src/exec/runCommand.d.ts +1 -6
  22. package/dist/src/exec/runCommand.d.ts.map +1 -1
  23. package/dist/src/exec/runCommand.js +88 -69
  24. package/dist/src/exec/runCommand.js.map +1 -1
  25. package/dist/src/http/downloadFile.d.ts +1 -3
  26. package/dist/src/http/downloadFile.d.ts.map +1 -1
  27. package/dist/src/http/downloadFile.js +99 -56
  28. package/dist/src/http/downloadFile.js.map +1 -1
  29. package/dist/src/http/duckduckgoSearch.d.ts +0 -9
  30. package/dist/src/http/duckduckgoSearch.d.ts.map +1 -1
  31. package/dist/src/http/duckduckgoSearch.js +104 -94
  32. package/dist/src/http/duckduckgoSearch.js.map +1 -1
  33. package/dist/src/http/fetchJson.d.ts +1 -2
  34. package/dist/src/http/fetchJson.d.ts.map +1 -1
  35. package/dist/src/http/fetchJson.js +91 -53
  36. package/dist/src/http/fetchJson.js.map +1 -1
  37. package/dist/src/http/fetchPageMainContent.d.ts +1 -3
  38. package/dist/src/http/fetchPageMainContent.d.ts.map +1 -1
  39. package/dist/src/http/fetchPageMainContent.js +80 -66
  40. package/dist/src/http/fetchPageMainContent.js.map +1 -1
  41. package/dist/src/http/fetchText.d.ts +1 -2
  42. package/dist/src/http/fetchText.d.ts.map +1 -1
  43. package/dist/src/http/fetchText.js +100 -67
  44. package/dist/src/http/fetchText.js.map +1 -1
  45. package/dist/src/http/yahooFinance.d.ts +1 -4
  46. package/dist/src/http/yahooFinance.d.ts.map +1 -1
  47. package/dist/src/http/yahooFinance.js +122 -93
  48. package/dist/src/http/yahooFinance.js.map +1 -1
  49. package/dist/src/iterm/itermRunCommandInSession.d.ts +0 -18
  50. package/dist/src/iterm/itermRunCommandInSession.d.ts.map +1 -1
  51. package/dist/src/iterm/itermRunCommandInSession.js +57 -86
  52. package/dist/src/iterm/itermRunCommandInSession.js.map +1 -1
  53. package/dist/src/platform/securityCompat.d.ts.map +1 -1
  54. package/dist/src/platform/securityCompat.js +14 -6
  55. package/dist/src/platform/securityCompat.js.map +1 -1
  56. package/dist/src/reminders/remindersSyncFromCalendar.d.ts +0 -6
  57. package/dist/src/reminders/remindersSyncFromCalendar.d.ts.map +1 -1
  58. package/dist/src/reminders/remindersSyncFromCalendar.js +62 -57
  59. package/dist/src/reminders/remindersSyncFromCalendar.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
1
  import { join } from "node:path";
3
2
  import { createTaggedError } from "@easynet/agent-tool/runtime";
4
3
  import { resolveSandboxedPath } from "../platform/securityCompat.js";
5
4
  import { getExtensionContext } from "../../index.js";
6
5
  import { overrideWithConfig } from "../util/overrideWithConfig.js";
6
+ import { buildFallbackAnswer, countTokenHits, deepReadMatchedFiles, loadIndexedFiles, scoreFile, searchRepoFilesDirectly, selectInformativeTokens, tokenize, } from "./askProjectRepo.helpers.js";
7
7
  import { DEFAULT_OPENAI_BASE_URL, DEFAULT_OPENAI_MODEL, DEFAULT_OPENAI_TIMEOUT_MS, } from "./defaults.js";
8
8
  const DEFAULT_TOP_K_FILES = 20;
9
9
  const DEFAULT_MAX_SNIPPET_CHARS = 1200;
@@ -29,8 +29,8 @@ const DEFAULT_FALLBACK_EXCLUDE_DIRS = [
29
29
  const DEFAULT_FALLBACK_INCLUDE_EXTENSIONS = [];
30
30
  function isLocalBaseUrl(url) {
31
31
  try {
32
- const u = new URL(url);
33
- const host = u.hostname.toLowerCase();
32
+ const parsed = new URL(url);
33
+ const host = parsed.hostname.toLowerCase();
34
34
  return host === "localhost" || host === "127.0.0.1" || host === "::1";
35
35
  }
36
36
  catch {
@@ -60,9 +60,7 @@ async function callOpenAI(apiKey, baseUrl, model, prompt, timeoutMs) {
60
60
  catch (err) {
61
61
  clearTimeout(timer);
62
62
  if (err instanceof Error && err.name === "AbortError") {
63
- throw createTaggedError("ANALYZE_TIMEOUT", `OpenAI request timed out after ${timeoutMs}ms`, {
64
- timeoutMs,
65
- });
63
+ throw createTaggedError("ANALYZE_TIMEOUT", `OpenAI request timed out after ${timeoutMs}ms`, { timeoutMs });
66
64
  }
67
65
  throw createTaggedError("UPSTREAM_ERROR", `OpenAI request failed: ${err instanceof Error ? err.message : String(err)}`, {});
68
66
  }
@@ -78,249 +76,127 @@ async function callOpenAI(apiKey, baseUrl, model, prompt, timeoutMs) {
78
76
  }
79
77
  return content;
80
78
  }
81
- function tokenize(text) {
82
- const normalized = text.toLowerCase();
83
- const englishTokens = normalized
84
- .split(/[^a-z0-9_]+/)
85
- .map((s) => s.trim())
86
- .filter((s) => s.length > 1);
87
- const cjkTokens = text.match(/[\u4e00-\u9fff]{2,}/g) ?? [];
88
- return [...new Set([...englishTokens, ...cjkTokens])];
89
- }
90
- function tokenExistsInFile(token, file) {
91
- const haystack = `${file.path}\n${file.preview.slice(0, 5000)}`.toLowerCase();
92
- return haystack.includes(token);
93
- }
94
- function selectInformativeTokens(questionTokens, files) {
95
- if (questionTokens.length <= 2 || files.length === 0)
96
- return questionTokens;
97
- const sampledFiles = files.slice(0, 800);
98
- const maxDfRatio = 0.6;
99
- const minTokenLength = 3;
100
- const scored = questionTokens.map((token) => {
101
- let df = 0;
102
- for (const f of sampledFiles) {
103
- if (tokenExistsInFile(token, f))
104
- df += 1;
105
- }
106
- const dfRatio = sampledFiles.length > 0 ? df / sampledFiles.length : 0;
107
- const lengthBoost = token.length >= 8 ? 0.15 : 0;
108
- const score = (1 - dfRatio) + lengthBoost;
109
- return { token, dfRatio, score };
110
- });
111
- const filtered = scored
112
- .filter((x) => x.token.length >= minTokenLength)
113
- .filter((x) => x.dfRatio <= maxDfRatio)
114
- .sort((a, b) => b.score - a.score)
115
- .map((x) => x.token);
116
- if (filtered.length > 0)
117
- return filtered;
118
- return scored
119
- .sort((a, b) => b.score - a.score)
120
- .slice(0, Math.max(1, Math.min(4, questionTokens.length)))
121
- .map((x) => x.token);
122
- }
123
- function countTokenHits(questionTokens, file) {
124
- const haystack = `${file.path}\n${file.preview.slice(0, 5000)}`.toLowerCase();
125
- let hits = 0;
126
- for (const t of questionTokens) {
127
- if (haystack.includes(t))
128
- hits += 1;
129
- }
130
- return hits;
131
- }
132
- function buildFallbackAnswer(args) {
133
- const topDirCount = new Map();
134
- for (const item of args.ranked) {
135
- const d = item.file.path.split("/")[0]?.trim();
136
- if (!d)
137
- continue;
138
- topDirCount.set(d, (topDirCount.get(d) ?? 0) + 1);
139
- }
140
- const topDirs = [...topDirCount.entries()]
141
- .sort((a, b) => b[1] - a[1])
142
- .slice(0, 10)
143
- .map(([dir, cnt]) => `Module area inferred from path: ${dir} (matched files: ${cnt})`);
144
- const stopwords = new Set([
145
- "the", "and", "for", "with", "from", "that", "this", "into", "your", "file",
146
- "lines", "source", "snippet", "path", "score", "question", "project", "list",
147
- "major", "feature", "features", "please", "use", "中文", "major",
148
- ]);
149
- const tokenCount = new Map();
150
- const corpus = args.promptSnippets.map((s) => s.snippet).join("\n").toLowerCase();
151
- for (const tok of corpus.split(/[^a-z0-9_./-]+/)) {
152
- const t = tok.trim();
153
- if (!t || t.length < 3 || t.length > 40)
154
- continue;
155
- if (stopwords.has(t))
156
- continue;
157
- if (/^\d+$/.test(t))
158
- continue;
159
- tokenCount.set(t, (tokenCount.get(t) ?? 0) + 1);
160
- }
161
- const topTokens = [...tokenCount.entries()]
162
- .sort((a, b) => b[1] - a[1])
163
- .slice(0, 12)
164
- .map(([t, c]) => `${t}(${c})`);
165
- const features = [];
166
- features.push(...topDirs);
167
- if (topTokens.length > 0) {
168
- features.push(`Keyword themes inferred from snippets: ${topTokens.slice(0, 6).join(", ")}`);
169
- if (topTokens.length > 6) {
170
- features.push(`Additional keyword themes: ${topTokens.slice(6, 12).join(", ")}`);
171
- }
79
+ function resolvePathAndQuestion(args) {
80
+ const rawPath = (args.path ?? args.repoPath ?? args.projectPath)?.trim();
81
+ const question = (args.question ?? args.query ?? args.q ?? "").trim();
82
+ if (!rawPath) {
83
+ throw createTaggedError("ANALYZE_INVALID", "path is required (pass 'path', 'repoPath', or 'projectPath')", {});
172
84
  }
173
- for (const item of args.ranked) {
174
- if (features.length >= 10)
175
- break;
176
- features.push(`Code area inferred from retrieved file: ${item.file.path}`);
85
+ if (!question) {
86
+ throw createTaggedError("ANALYZE_INVALID", "question is required (pass 'question', 'query', or 'q')", {});
177
87
  }
178
- if (features.length === 0) {
179
- features.push("Insufficient retrieval signals to infer features.");
88
+ return { rawPath, question };
89
+ }
90
+ function buildRankedFromIndex(indexedFiles, effectiveTokens) {
91
+ const ranked = indexedFiles
92
+ .map((file) => ({
93
+ file: { ...file, source: "index" },
94
+ tokenHits: 0,
95
+ score: 0,
96
+ }))
97
+ .sort((a, b) => b.score - a.score);
98
+ for (const item of ranked) {
99
+ item.tokenHits = countTokenHits(effectiveTokens, item.file);
100
+ item.score = scoreFile(effectiveTokens, item.file);
180
101
  }
181
- const topFiles = args.ranked.slice(0, 8).map((r, i) => `${i + 1}. ${r.file.path} (score=${r.score})`);
182
- return [
183
- "Non-LLM fallback answer generated from retrieved repository evidence.",
184
- `Question: ${args.question}`,
185
- "Top feature candidates (best-effort from matched files/snippets):",
186
- ...features.slice(0, 10).map((f, i) => `${i + 1}. ${f}`),
187
- "Evidence files:",
188
- ...topFiles,
189
- ].join("\n");
102
+ ranked.sort((a, b) => b.score - a.score);
103
+ return ranked;
190
104
  }
191
- function scoreFile(questionTokens, file) {
192
- const tokenHits = countTokenHits(questionTokens, file);
193
- let score = tokenHits;
194
- if (file.path.toLowerCase().includes(questionTokens[0] ?? ""))
195
- score += 1;
196
- return score;
105
+ function shouldRunFallback(rankedFromIndex, effectiveTokens, indexTruncated, fallbackTriggerMinScore) {
106
+ const topIndexScore = rankedFromIndex[0]?.score ?? 0;
107
+ const topTokenHits = rankedFromIndex[0]?.tokenHits ?? 0;
108
+ const minTokenHitsForConfidence = effectiveTokens.length >= 2 ? 2 : 1;
109
+ const weakIndexMatch = topIndexScore < fallbackTriggerMinScore || topTokenHits < minTokenHitsForConfidence;
110
+ return rankedFromIndex.length === 0 || weakIndexMatch || indexTruncated;
197
111
  }
198
- function extractRelevantSnippetsFromFullText(filePath, fullText, questionTokens, maxSnippetChars, maxSnippets) {
199
- const lines = fullText.split("\n");
200
- const hits = [];
201
- const lowered = lines.map((l) => l.toLowerCase());
202
- const tokens = questionTokens.filter((t) => t.length >= 3).slice(0, 12);
203
- for (let i = 0; i < lowered.length; i++) {
204
- const line = lowered[i];
205
- if (tokens.some((t) => line.includes(t))) {
206
- hits.push(i);
207
- }
208
- }
209
- if (hits.length === 0) {
210
- const head = fullText.slice(0, maxSnippetChars);
211
- return [`FILE: ${filePath}\n${head}`];
212
- }
213
- const snippets = [];
214
- const usedRanges = [];
215
- for (const hit of hits) {
216
- if (snippets.length >= maxSnippets)
217
- break;
218
- const start = Math.max(0, hit - 12);
219
- const end = Math.min(lines.length, hit + 20);
220
- if (usedRanges.some((r) => start <= r.end && end >= r.start)) {
221
- continue;
222
- }
223
- usedRanges.push({ start, end });
224
- const block = lines.slice(start, end).join("\n").slice(0, maxSnippetChars);
225
- snippets.push(`FILE: ${filePath}\nLINES ~${start + 1}-${end}\n${block}`);
226
- }
227
- return snippets;
112
+ function resolveFallbackIncludeExtensions(raw) {
113
+ const normalized = (Array.isArray(raw) ? raw : [])
114
+ .map((value) => String(value).trim())
115
+ .filter(Boolean);
116
+ if (normalized.length === 0)
117
+ return undefined;
118
+ return new Set(normalized.map((ext) => (ext.startsWith(".") ? ext.toLowerCase() : `.${ext.toLowerCase()}`)));
228
119
  }
229
- async function deepReadMatchedFiles(args) {
230
- const out = [];
231
- const deepReadPaths = [];
232
- const candidates = args.ranked.slice(0, Math.max(1, args.topFiles));
233
- for (const item of candidates) {
234
- const relPath = item.file.path;
235
- const fullPath = join(args.repoRoot, relPath);
236
- try {
237
- const text = await readFile(fullPath, "utf-8");
238
- const limited = text.slice(0, args.maxFileBytes);
239
- const snippets = extractRelevantSnippetsFromFullText(relPath, limited, args.questionTokens, args.maxSnippetChars, args.maxSnippets);
240
- for (const s of snippets) {
241
- out.push({
242
- path: relPath,
243
- source: "deep_read",
244
- snippet: `FILE: ${relPath}\nSOURCE: deep_read\n${s}`,
245
- });
246
- }
247
- deepReadPaths.push(relPath);
248
- }
249
- catch {
250
- // best effort
251
- }
252
- }
253
- return { snippets: out, deepReadPaths };
120
+ async function runFallbackScanIfNeeded(args) {
121
+ if (!args.needFallback)
122
+ return [];
123
+ const includeExtensions = resolveFallbackIncludeExtensions(args.cfg.fallbackIncludeExtensions ?? DEFAULT_FALLBACK_INCLUDE_EXTENSIONS);
124
+ const rawExcludeDirs = Array.isArray(args.cfg.fallbackExcludeDirs)
125
+ ? args.cfg.fallbackExcludeDirs
126
+ : DEFAULT_FALLBACK_EXCLUDE_DIRS;
127
+ const excludeDirs = new Set(rawExcludeDirs.map((dir) => String(dir).trim()).filter(Boolean));
128
+ return searchRepoFilesDirectly({
129
+ repoRoot: args.repoRoot,
130
+ questionTokens: args.effectiveTokens,
131
+ maxFilesToScan: args.cfg.fallbackMaxFilesToScan ?? DEFAULT_FALLBACK_MAX_FILES_TO_SCAN,
132
+ maxReadBytes: args.cfg.fallbackMaxReadBytes ?? DEFAULT_FALLBACK_MAX_READ_BYTES,
133
+ excludeDirs,
134
+ includeExtensions,
135
+ });
254
136
  }
255
- async function searchRepoFilesDirectly(args) {
256
- const out = [];
257
- let scanned = 0;
258
- async function walk(current, relPrefix) {
259
- if (scanned >= args.maxFilesToScan)
260
- return;
261
- const entries = await readdir(current, { withFileTypes: true });
262
- for (const entry of entries) {
263
- if (scanned >= args.maxFilesToScan)
264
- return;
265
- if (entry.name.startsWith("."))
266
- continue;
267
- const fullPath = join(current, entry.name);
268
- const relPath = relPrefix ? `${relPrefix}/${entry.name}` : entry.name;
269
- if (entry.isDirectory()) {
270
- if (args.excludeDirs.has(entry.name))
271
- continue;
272
- await walk(fullPath, relPath);
273
- continue;
274
- }
275
- if (!entry.isFile())
276
- continue;
277
- scanned += 1;
278
- const dot = entry.name.lastIndexOf(".");
279
- const ext = dot >= 0 ? entry.name.slice(dot).toLowerCase() : "";
280
- const includeExts = args.includeExtensions;
281
- const shouldFilterByExtension = includeExts !== undefined && includeExts.size > 0;
282
- if (shouldFilterByExtension && !includeExts.has(ext) && dot >= 0)
283
- continue;
284
- let text = "";
285
- try {
286
- text = await readFile(fullPath, "utf-8");
287
- }
288
- catch {
289
- continue;
290
- }
291
- const preview = text.slice(0, args.maxReadBytes);
292
- const pseudoFile = { path: relPath, ext, preview };
293
- const score = scoreFile(args.questionTokens, pseudoFile);
294
- if (score <= 0)
295
- continue;
296
- out.push({
297
- ...pseudoFile,
298
- source: "live_scan",
299
- });
137
+ function mergeAndRankFiles(rankedFromIndex, fallbackFiles, effectiveTokens, topK) {
138
+ const combined = new Map();
139
+ for (const item of rankedFromIndex)
140
+ combined.set(item.file.path, item);
141
+ for (const file of fallbackFiles) {
142
+ const score = scoreFile(effectiveTokens, file);
143
+ const previous = combined.get(file.path);
144
+ if (!previous || score > previous.score) {
145
+ combined.set(file.path, { file, score });
300
146
  }
301
147
  }
302
- await walk(args.repoRoot, "");
303
- return out;
148
+ return [...combined.values()]
149
+ .sort((a, b) => b.score - a.score)
150
+ .slice(0, Math.max(1, topK));
304
151
  }
305
- async function loadIndexedFiles(indexPath) {
306
- const raw = await readFile(indexPath, "utf-8");
307
- const main = JSON.parse(raw);
308
- const repoRoot = main.repoRoot ?? "";
309
- if (Array.isArray(main.files)) {
310
- return { repoRoot, files: main.files, truncated: Boolean(main.truncated) };
311
- }
312
- if (!main.filesSplit || !Array.isArray(main.partPaths) || main.partPaths.length === 0) {
313
- throw createTaggedError("ANALYZE_INVALID_INDEX", `Invalid project index: ${indexPath}`, {});
152
+ function buildPromptSnippets(ranked, maxSnippetChars) {
153
+ return ranked.map(({ file }, index) => {
154
+ const preview = file.preview.length > maxSnippetChars ? `${file.preview.slice(0, maxSnippetChars)}...` : file.preview;
155
+ return {
156
+ path: file.path,
157
+ source: file.source,
158
+ snippet: `[#${index + 1}] FILE: ${file.path}\nSOURCE: ${file.source}\nSNIPPET:\n${preview}`,
159
+ };
160
+ });
161
+ }
162
+ async function enrichWithDeepRead(args) {
163
+ if (!(args.cfg.deepReadEnabled ?? DEFAULT_DEEP_READ_ENABLED)) {
164
+ return { deepReadUsed: false, deepReadPaths: [] };
165
+ }
166
+ const deep = await deepReadMatchedFiles({
167
+ repoRoot: args.repoRoot,
168
+ ranked: args.ranked,
169
+ questionTokens: args.effectiveTokens,
170
+ topFiles: args.cfg.deepReadTopFiles ?? DEFAULT_DEEP_READ_TOP_FILES,
171
+ maxFileBytes: args.cfg.deepReadMaxFileBytes ?? DEFAULT_DEEP_READ_MAX_FILE_BYTES,
172
+ maxSnippetChars: args.maxSnippetChars,
173
+ maxSnippets: args.cfg.deepReadMaxSnippets ?? DEFAULT_DEEP_READ_MAX_SNIPPETS,
174
+ });
175
+ if (deep.snippets.length === 0) {
176
+ return { deepReadUsed: false, deepReadPaths: [] };
314
177
  }
315
- const merged = [];
316
- for (const partPath of main.partPaths) {
317
- const partRaw = await readFile(partPath, "utf-8");
318
- const part = JSON.parse(partRaw);
319
- if (Array.isArray(part.files)) {
320
- merged.push(...part.files);
321
- }
178
+ args.promptSnippets.push(...deep.snippets);
179
+ return { deepReadUsed: true, deepReadPaths: deep.deepReadPaths };
180
+ }
181
+ function buildModelPrompt(question, promptSnippets) {
182
+ const snippets = promptSnippets.map((item) => item.snippet).join("\n\n");
183
+ return `You are analyzing files under a project path.
184
+ Answer the user question based on the snippets.
185
+ Prioritize deep-read snippets when present because they come from direct source reading.
186
+ If snippets are insufficient, clearly say what is missing.
187
+ Always mention the most relevant file paths you used and explain your reasoning chain.
188
+
189
+ Question:\n${question}
190
+
191
+ Snippets:\n${snippets}`;
192
+ }
193
+ async function generateAnswer(args) {
194
+ const baseUrl = (args.cfg.openaiBaseUrl ?? DEFAULT_OPENAI_BASE_URL).replace(/\/$/, "");
195
+ const apiKey = (args.cfg.openaiApiKey ?? "").trim();
196
+ if (!apiKey && !isLocalBaseUrl(baseUrl)) {
197
+ return buildFallbackAnswer({ question: args.question, ranked: args.ranked, promptSnippets: args.promptSnippets });
322
198
  }
323
- return { repoRoot, files: merged, truncated: Boolean(main.truncated) };
199
+ return callOpenAI(apiKey, baseUrl, args.model, args.prompt, args.timeoutMs);
324
200
  }
325
201
  /**
326
202
  * Ask a concrete question about a repository based on .project-index.json (or split parts).
@@ -346,20 +222,11 @@ export async function askProjectRepo(args) {
346
222
  fallbackIncludeExtensions: DEFAULT_FALLBACK_INCLUDE_EXTENSIONS,
347
223
  sandboxRoot: "",
348
224
  };
349
- const ctx = getExtensionContext();
350
- const cfg = overrideWithConfig(defaults, ctx.config);
351
- const rawPath = (args.path ?? args.repoPath ?? args.projectPath)?.trim();
352
- const question = (args.question ?? args.query ?? args.q ?? "").trim();
353
- if (!rawPath) {
354
- throw createTaggedError("ANALYZE_INVALID", "path is required (pass 'path', 'repoPath', or 'projectPath')", {});
355
- }
356
- if (!question) {
357
- throw createTaggedError("ANALYZE_INVALID", "question is required (pass 'question', 'query', or 'q')", {});
358
- }
359
- const sandboxRoot = cfg.sandboxRoot ?? "";
360
- const repoRoot = await resolveSandboxedPath(rawPath, sandboxRoot);
225
+ const cfg = overrideWithConfig(defaults, getExtensionContext().config);
226
+ const { rawPath, question } = resolvePathAndQuestion(args);
227
+ const repoRoot = await resolveSandboxedPath(rawPath, cfg.sandboxRoot ?? "");
361
228
  const indexPath = args.indexPath?.trim()
362
- ? await resolveSandboxedPath(args.indexPath, sandboxRoot)
229
+ ? await resolveSandboxedPath(args.indexPath, cfg.sandboxRoot ?? "")
363
230
  : join(repoRoot, ".project-index.json");
364
231
  const questionTokens = tokenize(question);
365
232
  const topK = args.topK ?? cfg.topK ?? DEFAULT_TOP_K_FILES;
@@ -374,117 +241,28 @@ export async function askProjectRepo(args) {
374
241
  }
375
242
  catch {
376
243
  indexedFiles = [];
377
- indexTruncated = false;
378
244
  }
379
- const rankedFromIndex = indexedFiles
380
- .map((f) => ({
381
- file: { ...f, source: "index" },
382
- tokenHits: 0,
383
- score: 0,
384
- }))
385
- .sort((a, b) => b.score - a.score);
386
245
  const effectiveTokens = selectInformativeTokens(questionTokens, indexedFiles);
387
- for (const item of rankedFromIndex) {
388
- item.tokenHits = countTokenHits(effectiveTokens, item.file);
389
- item.score = scoreFile(effectiveTokens, item.file);
390
- }
391
- rankedFromIndex.sort((a, b) => b.score - a.score);
392
- const topIndexScore = rankedFromIndex[0]?.score ?? 0;
393
- const topTokenHits = rankedFromIndex[0]?.tokenHits ?? 0;
394
- const minTokenHitsForConfidence = effectiveTokens.length >= 2 ? 2 : 1;
395
- const weakIndexMatch = topIndexScore < fallbackTriggerMinScore || topTokenHits < minTokenHitsForConfidence;
396
- const needFallback = rankedFromIndex.length === 0 || weakIndexMatch || indexTruncated;
397
- let fallbackFiles = [];
398
- if (needFallback) {
399
- const rawFallbackIncludeExtensions = cfg.fallbackIncludeExtensions ?? DEFAULT_FALLBACK_INCLUDE_EXTENSIONS;
400
- const normalizedFallbackIncludeExtensions = (Array.isArray(rawFallbackIncludeExtensions)
401
- ? rawFallbackIncludeExtensions
402
- : [])
403
- .map((e) => String(e).trim())
404
- .filter(Boolean);
405
- const fallbackIncludeExtensions = normalizedFallbackIncludeExtensions.length > 0
406
- ? new Set(normalizedFallbackIncludeExtensions.map((e) => e.startsWith(".") ? e.toLowerCase() : `.${e.toLowerCase()}`))
407
- : undefined;
408
- const fallbackExcludeDirs = new Set((cfg.fallbackExcludeDirs ?? DEFAULT_FALLBACK_EXCLUDE_DIRS)
409
- .map((d) => d.trim())
410
- .filter(Boolean));
411
- fallbackFiles = await searchRepoFilesDirectly({
412
- repoRoot,
413
- questionTokens: effectiveTokens,
414
- maxFilesToScan: cfg.fallbackMaxFilesToScan ?? DEFAULT_FALLBACK_MAX_FILES_TO_SCAN,
415
- maxReadBytes: cfg.fallbackMaxReadBytes ?? DEFAULT_FALLBACK_MAX_READ_BYTES,
416
- excludeDirs: fallbackExcludeDirs,
417
- includeExtensions: fallbackIncludeExtensions,
418
- });
419
- }
420
- const combinedMap = new Map();
421
- for (const item of rankedFromIndex) {
422
- combinedMap.set(item.file.path, item);
423
- }
424
- for (const file of fallbackFiles) {
425
- const score = scoreFile(effectiveTokens, file);
426
- const prev = combinedMap.get(file.path);
427
- if (!prev || score > prev.score) {
428
- combinedMap.set(file.path, { file, score });
429
- }
430
- }
431
- const ranked = [...combinedMap.values()]
432
- .sort((a, b) => b.score - a.score)
433
- .slice(0, Math.max(1, topK));
246
+ const rankedFromIndex = buildRankedFromIndex(indexedFiles, effectiveTokens);
247
+ const needFallback = shouldRunFallback(rankedFromIndex, effectiveTokens, indexTruncated, fallbackTriggerMinScore);
248
+ const fallbackFiles = await runFallbackScanIfNeeded({ needFallback, repoRoot, effectiveTokens, cfg });
249
+ const ranked = mergeAndRankFiles(rankedFromIndex, fallbackFiles, effectiveTokens, topK);
434
250
  if (!ranked.length) {
435
251
  throw createTaggedError("ANALYZE_NOT_FOUND", "No relevant files found from index or live scan for this question", {});
436
252
  }
437
- const promptSnippets = ranked.map(({ file }, i) => {
438
- const preview = file.preview.length > maxSnippetChars
439
- ? `${file.preview.slice(0, maxSnippetChars)}...`
440
- : file.preview;
441
- return {
442
- path: file.path,
443
- source: file.source,
444
- snippet: `[#${i + 1}] FILE: ${file.path}\nSOURCE: ${file.source}\nSNIPPET:\n${preview}`,
445
- };
253
+ const promptSnippets = buildPromptSnippets(ranked, maxSnippetChars);
254
+ const { deepReadUsed, deepReadPaths } = await enrichWithDeepRead({
255
+ cfg,
256
+ repoRoot,
257
+ ranked,
258
+ effectiveTokens,
259
+ maxSnippetChars,
260
+ promptSnippets,
446
261
  });
447
- let deepReadUsed = false;
448
- let deepReadPaths = [];
449
- if (cfg.deepReadEnabled ?? DEFAULT_DEEP_READ_ENABLED) {
450
- const deep = await deepReadMatchedFiles({
451
- repoRoot,
452
- ranked,
453
- questionTokens: effectiveTokens,
454
- topFiles: cfg.deepReadTopFiles ?? DEFAULT_DEEP_READ_TOP_FILES,
455
- maxFileBytes: cfg.deepReadMaxFileBytes ?? DEFAULT_DEEP_READ_MAX_FILE_BYTES,
456
- maxSnippetChars,
457
- maxSnippets: cfg.deepReadMaxSnippets ?? DEFAULT_DEEP_READ_MAX_SNIPPETS,
458
- });
459
- if (deep.snippets.length > 0) {
460
- deepReadUsed = true;
461
- deepReadPaths = deep.deepReadPaths;
462
- promptSnippets.push(...deep.snippets);
463
- }
464
- }
465
- const snippets = promptSnippets
466
- .map((s) => s.snippet)
467
- .join("\n\n");
468
- const prompt = `You are analyzing files under a project path.
469
- Answer the user question based on the snippets.
470
- Prioritize deep-read snippets when present because they come from direct source reading.
471
- If snippets are insufficient, clearly say what is missing.
472
- Always mention the most relevant file paths you used and explain your reasoning chain.
473
-
474
- Question:\n${question}
475
-
476
- Snippets:\n${snippets}`;
477
- const baseUrl = (cfg.openaiBaseUrl ?? DEFAULT_OPENAI_BASE_URL).replace(/\/$/, "");
478
- const apiKey = (cfg.openaiApiKey ?? "").trim();
479
262
  const model = args.model ?? cfg.model ?? DEFAULT_OPENAI_MODEL;
480
263
  const timeoutMs = args.timeoutMs ?? cfg.timeoutMs ?? DEFAULT_OPENAI_TIMEOUT_MS;
481
- let answer = "";
482
- if (!apiKey && !isLocalBaseUrl(baseUrl)) {
483
- answer = buildFallbackAnswer({ question, ranked, promptSnippets });
484
- }
485
- else {
486
- answer = await callOpenAI(apiKey, baseUrl, model, prompt, timeoutMs);
487
- }
264
+ const prompt = buildModelPrompt(question, promptSnippets);
265
+ const answer = await generateAnswer({ cfg, model, timeoutMs, prompt, question, ranked, promptSnippets });
488
266
  return {
489
267
  result: {
490
268
  repoRoot,
@@ -492,7 +270,7 @@ Snippets:\n${snippets}`;
492
270
  question,
493
271
  model,
494
272
  answer,
495
- matchedFiles: ranked.map((r) => ({ path: r.file.path, score: r.score, source: r.file.source })),
273
+ matchedFiles: ranked.map((item) => ({ path: item.file.path, score: item.score, source: item.file.source })),
496
274
  retrievalMode: needFallback ? "index+live_scan" : "index_only",
497
275
  deepReadUsed,
498
276
  deepReadPaths,
@@ -1 +1 @@
1
- {"version":3,"file":"askProjectRepo.js","sourceRoot":"","sources":["../../../src/analyze/askProjectRepo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"askProjectRepo.js","sourceRoot":"","sources":["../../../src/analyze/askProjectRepo.ts"],"names":[],"mappings":"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"}