codestrate 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -0
- package/dist/constants.d.ts +40 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +145 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +134 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +260 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +173 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/security/guard.d.ts +18 -0
- package/dist/security/guard.d.ts.map +1 -0
- package/dist/security/guard.js +39 -0
- package/dist/security/guard.js.map +1 -0
- package/dist/services/code-searcher.d.ts +22 -0
- package/dist/services/code-searcher.d.ts.map +1 -0
- package/dist/services/code-searcher.js +171 -0
- package/dist/services/code-searcher.js.map +1 -0
- package/dist/services/context-builder.d.ts +22 -0
- package/dist/services/context-builder.d.ts.map +1 -0
- package/dist/services/context-builder.js +232 -0
- package/dist/services/context-builder.js.map +1 -0
- package/dist/services/memory-store.d.ts +31 -0
- package/dist/services/memory-store.d.ts.map +1 -0
- package/dist/services/memory-store.js +27 -0
- package/dist/services/memory-store.js.map +1 -0
- package/dist/services/repository-parser.d.ts +8 -0
- package/dist/services/repository-parser.d.ts.map +1 -0
- package/dist/services/repository-parser.js +255 -0
- package/dist/services/repository-parser.js.map +1 -0
- package/dist/services/symbol-indexer.d.ts +16 -0
- package/dist/services/symbol-indexer.d.ts.map +1 -0
- package/dist/services/symbol-indexer.js +417 -0
- package/dist/services/symbol-indexer.js.map +1 -0
- package/dist/services/tree-sitter.d.ts +22 -0
- package/dist/services/tree-sitter.d.ts.map +1 -0
- package/dist/services/tree-sitter.js +269 -0
- package/dist/services/tree-sitter.js.map +1 -0
- package/dist/services/validation-runner.d.ts +30 -0
- package/dist/services/validation-runner.d.ts.map +1 -0
- package/dist/services/validation-runner.js +159 -0
- package/dist/services/validation-runner.js.map +1 -0
- package/dist/store/index.d.ts +23 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +93 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/interface.d.ts +73 -0
- package/dist/store/interface.d.ts.map +1 -0
- package/dist/store/interface.js +9 -0
- package/dist/store/interface.js.map +1 -0
- package/dist/store/memory.d.ts +21 -0
- package/dist/store/memory.d.ts.map +1 -0
- package/dist/store/memory.js +157 -0
- package/dist/store/memory.js.map +1 -0
- package/dist/store/sqlite.d.ts +95 -0
- package/dist/store/sqlite.d.ts.map +1 -0
- package/dist/store/sqlite.js +1018 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/tools/analyze-impact.d.ts +3 -0
- package/dist/tools/analyze-impact.d.ts.map +1 -0
- package/dist/tools/analyze-impact.js +110 -0
- package/dist/tools/analyze-impact.js.map +1 -0
- package/dist/tools/explore.d.ts +3 -0
- package/dist/tools/explore.d.ts.map +1 -0
- package/dist/tools/explore.js +96 -0
- package/dist/tools/explore.js.map +1 -0
- package/dist/tools/get-context.d.ts +3 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +82 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/inspect-symbol.d.ts +3 -0
- package/dist/tools/inspect-symbol.d.ts.map +1 -0
- package/dist/tools/inspect-symbol.js +146 -0
- package/dist/tools/inspect-symbol.js.map +1 -0
- package/dist/tools/recall-experience.d.ts +3 -0
- package/dist/tools/recall-experience.d.ts.map +1 -0
- package/dist/tools/recall-experience.js +141 -0
- package/dist/tools/recall-experience.js.map +1 -0
- package/dist/tools/record-experience.d.ts +6 -0
- package/dist/tools/record-experience.d.ts.map +1 -0
- package/dist/tools/record-experience.js +68 -0
- package/dist/tools/record-experience.js.map +1 -0
- package/dist/tools/reindex.d.ts +8 -0
- package/dist/tools/reindex.d.ts.map +1 -0
- package/dist/tools/reindex.js +74 -0
- package/dist/tools/reindex.js.map +1 -0
- package/dist/tools/repo-overview.d.ts +7 -0
- package/dist/tools/repo-overview.d.ts.map +1 -0
- package/dist/tools/repo-overview.js +102 -0
- package/dist/tools/repo-overview.js.map +1 -0
- package/dist/tools/run-validation.d.ts +6 -0
- package/dist/tools/run-validation.d.ts.map +1 -0
- package/dist/tools/run-validation.js +115 -0
- package/dist/tools/run-validation.js.map +1 -0
- package/dist/tools/search-code.d.ts +3 -0
- package/dist/tools/search-code.d.ts.map +1 -0
- package/dist/tools/search-code.js +98 -0
- package/dist/tools/search-code.js.map +1 -0
- package/dist/tools/search-history.d.ts +6 -0
- package/dist/tools/search-history.d.ts.map +1 -0
- package/dist/tools/search-history.js +69 -0
- package/dist/tools/search-history.js.map +1 -0
- package/dist/tools/status.d.ts +7 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +98 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/trace-flow.d.ts +3 -0
- package/dist/tools/trace-flow.d.ts.map +1 -0
- package/dist/tools/trace-flow.js +155 -0
- package/dist/tools/trace-flow.js.map +1 -0
- package/dist/types.d.ts +182 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -0
- package/grammars/tree-sitter-python.wasm +0 -0
- package/grammars/tree-sitter-typescript.wasm +0 -0
- package/package.json +48 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Searcher — hybrid search combining ripgrep text search with symbol matching.
|
|
3
|
+
*
|
|
4
|
+
* - Text search: execs `rg --json` with configurable scope/languages
|
|
5
|
+
* - Symbol matching: checks results against indexed symbols for score boost
|
|
6
|
+
* - BM25-like scoring: ranks by term frequency proximity and match type
|
|
7
|
+
*
|
|
8
|
+
* Embedding search is available as an opt-in mode via config (not in MVP).
|
|
9
|
+
*/
|
|
10
|
+
import { execSync } from "child_process";
|
|
11
|
+
import { resolve } from "path";
|
|
12
|
+
import { LANGUAGE_EXTENSIONS } from "../constants.js";
|
|
13
|
+
import { findSymbols } from "../store/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* Execute hybrid search: ripgrep text search BM25-scored, with symbol matching boost.
|
|
16
|
+
*/
|
|
17
|
+
export async function searchCode(opts) {
|
|
18
|
+
const repoPath = resolve(opts.repoPath);
|
|
19
|
+
// Build rg args
|
|
20
|
+
const args = buildRipgrepArgs(opts);
|
|
21
|
+
let rawOutput;
|
|
22
|
+
try {
|
|
23
|
+
rawOutput = execSync(args.join(" "), {
|
|
24
|
+
cwd: repoPath,
|
|
25
|
+
encoding: "utf-8",
|
|
26
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
27
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
28
|
+
timeout: 30_000,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
// rg exits with code 1 when no matches; code 2 = error
|
|
33
|
+
if (typeof error === 'object' && error !== null && 'status' in error && error.status === 1) {
|
|
34
|
+
return { results: [], total: 0 };
|
|
35
|
+
}
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
const stderr = typeof error === 'object' && error !== null && 'stderr' in error
|
|
38
|
+
? String(error.stderr) : '';
|
|
39
|
+
throw new Error(`ripgrep search failed: ${stderr || message}`);
|
|
40
|
+
}
|
|
41
|
+
// Parse JSON output
|
|
42
|
+
const lines = rawOutput.trim().split("\n").filter(Boolean);
|
|
43
|
+
const matches = [];
|
|
44
|
+
for (const line of lines) {
|
|
45
|
+
try {
|
|
46
|
+
const entry = JSON.parse(line);
|
|
47
|
+
if (entry.type === "match") {
|
|
48
|
+
matches.push(entry);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// skip unparseable lines
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Score and deduplicate results
|
|
56
|
+
const scored = scoreResults(matches, opts.query, repoPath);
|
|
57
|
+
// Apply pagination
|
|
58
|
+
const total = scored.length;
|
|
59
|
+
const paged = scored.slice(opts.offset, opts.offset + opts.maxResults);
|
|
60
|
+
return { results: paged, total };
|
|
61
|
+
}
|
|
62
|
+
function buildRipgrepArgs(opts) {
|
|
63
|
+
const args = ["rg", "--json", "-i", "--no-heading", "--color", "never"];
|
|
64
|
+
// Quote the query for shell safety
|
|
65
|
+
args.push("--fixed-strings");
|
|
66
|
+
args.push(opts.query);
|
|
67
|
+
// Language filtering
|
|
68
|
+
if (opts.languages && opts.languages.length > 0) {
|
|
69
|
+
const exts = [];
|
|
70
|
+
for (const lang of opts.languages) {
|
|
71
|
+
const langExts = LANGUAGE_EXTENSIONS[lang];
|
|
72
|
+
if (langExts) {
|
|
73
|
+
exts.push(...langExts.map(e => `-g*.${e.slice(1)}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Filter by type: use glob includes
|
|
77
|
+
const typeGlobs = opts.languages.flatMap(lang => {
|
|
78
|
+
const exts = LANGUAGE_EXTENSIONS[lang];
|
|
79
|
+
return exts ? exts.map(e => `*.${e.slice(1)}`) : [];
|
|
80
|
+
});
|
|
81
|
+
for (const g of typeGlobs) {
|
|
82
|
+
args.push("-g", g);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Scope
|
|
86
|
+
if (opts.scope) {
|
|
87
|
+
args.push("-g", `${opts.scope}/**`);
|
|
88
|
+
}
|
|
89
|
+
// Exclude dirs
|
|
90
|
+
args.push("-g", "!node_modules/**", "-g", "!dist/**", "-g", "!target/**", "-g", "!.git/**");
|
|
91
|
+
// Path
|
|
92
|
+
args.push(".");
|
|
93
|
+
return args;
|
|
94
|
+
}
|
|
95
|
+
function scoreResults(matches, query, repoPath) {
|
|
96
|
+
const scored = [];
|
|
97
|
+
const seen = new Set();
|
|
98
|
+
// Preload indexed symbols for boost
|
|
99
|
+
const indexSymbols = findSymbols(query);
|
|
100
|
+
for (const match of matches) {
|
|
101
|
+
const filePath = match.data.path.text;
|
|
102
|
+
const lineNum = match.data.line_number;
|
|
103
|
+
const lineText = match.data.lines.text.trim();
|
|
104
|
+
const context = lineText.substring(0, 200);
|
|
105
|
+
const key = `${filePath}:${lineNum}`;
|
|
106
|
+
if (seen.has(key))
|
|
107
|
+
continue;
|
|
108
|
+
seen.add(key);
|
|
109
|
+
// Score calculation (BM25-like)
|
|
110
|
+
const queryTerms = query.toLowerCase().split(/\s+/);
|
|
111
|
+
const lineLower = lineText.toLowerCase();
|
|
112
|
+
let score = 0;
|
|
113
|
+
// Term frequency component
|
|
114
|
+
for (const term of queryTerms) {
|
|
115
|
+
const count = (lineLower.match(new RegExp(term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length;
|
|
116
|
+
// BM25-like: tf / (tf + k1*(1-b + b*avgDocLen/docLen))
|
|
117
|
+
// Simplified: count / (count + 1.2)
|
|
118
|
+
score += count / (count + 1.2);
|
|
119
|
+
}
|
|
120
|
+
// Proximity bonus: terms close together = higher score
|
|
121
|
+
for (let i = 0; i < queryTerms.length - 1; i++) {
|
|
122
|
+
const firstIdx = lineLower.indexOf(queryTerms[i]);
|
|
123
|
+
const secondIdx = lineLower.indexOf(queryTerms[i + 1], firstIdx + queryTerms[i].length);
|
|
124
|
+
if (firstIdx >= 0 && secondIdx >= 0) {
|
|
125
|
+
const distance = secondIdx - (firstIdx + queryTerms[i].length);
|
|
126
|
+
score += Math.max(0, 1 - distance / 100);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Normalize score to 0-1 range
|
|
130
|
+
score = Math.min(1, score / Math.max(1, queryTerms.length));
|
|
131
|
+
// Determine match type and boost
|
|
132
|
+
let matchType = "text";
|
|
133
|
+
if (indexSymbols.some(s => s.file === filePath && s.name.toLowerCase().includes(query.toLowerCase()))) {
|
|
134
|
+
matchType = "symbol";
|
|
135
|
+
score = Math.min(1, score + 0.3); // boost for symbol matches
|
|
136
|
+
}
|
|
137
|
+
// File name match boost
|
|
138
|
+
if (filePath.toLowerCase().includes(query.toLowerCase())) {
|
|
139
|
+
matchType = "filename";
|
|
140
|
+
score = Math.min(1, score + 0.4);
|
|
141
|
+
}
|
|
142
|
+
// Find matching symbol name
|
|
143
|
+
const matchedSymbol = indexSymbols.find(s => s.file === filePath && s.signature.toLowerCase().includes(query.toLowerCase()));
|
|
144
|
+
scored.push({
|
|
145
|
+
file: filePath,
|
|
146
|
+
line: lineNum,
|
|
147
|
+
column: match.data.submatches[0]?.start ?? 0,
|
|
148
|
+
context,
|
|
149
|
+
symbol: matchedSymbol?.name ?? null,
|
|
150
|
+
score,
|
|
151
|
+
matchType,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
// Sort by score desc
|
|
155
|
+
scored.sort((a, b) => b.score - a.score);
|
|
156
|
+
return scored;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Simple BM25 text search without ripgrep (fallback for repos without rg).
|
|
160
|
+
*/
|
|
161
|
+
export function simpleTextSearch(text, query) {
|
|
162
|
+
const queryTerms = query.toLowerCase().split(/\s+/).filter(Boolean);
|
|
163
|
+
const textLower = text.toLowerCase();
|
|
164
|
+
let score = 0;
|
|
165
|
+
for (const term of queryTerms) {
|
|
166
|
+
const count = (textLower.match(new RegExp(term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g")) || []).length;
|
|
167
|
+
score += count / (count + 1.2);
|
|
168
|
+
}
|
|
169
|
+
return score / Math.max(1, queryTerms.length);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=code-searcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-searcher.js","sourceRoot":"","sources":["../../src/services/code-searcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ContextBundle } from "../types.js";
|
|
2
|
+
interface BuildOptions {
|
|
3
|
+
task: string;
|
|
4
|
+
tokenBudget: number;
|
|
5
|
+
includeHistory: boolean;
|
|
6
|
+
includeMemory: boolean;
|
|
7
|
+
repoPath: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Build a context bundle for a given task.
|
|
11
|
+
*
|
|
12
|
+
* Pipeline:
|
|
13
|
+
* 1. Classify task → extract key terms
|
|
14
|
+
* 2. Search code for relevant files/symbols
|
|
15
|
+
* 3. Inspect top symbols → get definitions + relations
|
|
16
|
+
* 4. Search git history for related commits
|
|
17
|
+
* 5. Recall experiences for similar past fixes
|
|
18
|
+
* 6. Assemble within token budget
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildContext(opts: BuildOptions): Promise<ContextBundle>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=context-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../../src/services/context-builder.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAgC,MAAM,aAAa,CAAC;AAI/E,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CA+K7E"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Builder — assembles optimal context bundles from search results.
|
|
3
|
+
*
|
|
4
|
+
* Takes a task description, retrieves relevant symbols/files/history/memory,
|
|
5
|
+
* and assembles them within a token budget.
|
|
6
|
+
*/
|
|
7
|
+
import { searchCode } from "./code-searcher.js";
|
|
8
|
+
import { findSymbol, findCallers, findRelatedTests, getIndex } from "../store/index.js";
|
|
9
|
+
import { hybridRecall } from "./memory-store.js";
|
|
10
|
+
import { searchGitHistory } from "./validation-runner.js";
|
|
11
|
+
import { join } from "path";
|
|
12
|
+
import { readFileSync } from "fs";
|
|
13
|
+
// Rough token estimation (characters / 4)
|
|
14
|
+
function estimateTokens(text) {
|
|
15
|
+
return Math.ceil(text.length / 4);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build a context bundle for a given task.
|
|
19
|
+
*
|
|
20
|
+
* Pipeline:
|
|
21
|
+
* 1. Classify task → extract key terms
|
|
22
|
+
* 2. Search code for relevant files/symbols
|
|
23
|
+
* 3. Inspect top symbols → get definitions + relations
|
|
24
|
+
* 4. Search git history for related commits
|
|
25
|
+
* 5. Recall experiences for similar past fixes
|
|
26
|
+
* 6. Assemble within token budget
|
|
27
|
+
*/
|
|
28
|
+
export async function buildContext(opts) {
|
|
29
|
+
const items = [];
|
|
30
|
+
let totalTokens = 0;
|
|
31
|
+
const remaining = () => opts.tokenBudget - totalTokens;
|
|
32
|
+
const budgetTable = [
|
|
33
|
+
{ key: "repoMap", label: "Repository Overview", max: 1000 },
|
|
34
|
+
{ key: "symbol", label: "Symbol Definitions", max: 6000 },
|
|
35
|
+
{ key: "history", label: "Git History", max: 3000 },
|
|
36
|
+
{ key: "memory", label: "Past Experiences", max: 2000 },
|
|
37
|
+
{ key: "rule", label: "Project Rules", max: 1000 },
|
|
38
|
+
];
|
|
39
|
+
// Step 1: Task analysis — extract key terms
|
|
40
|
+
const terms = extractKeyTerms(opts.task);
|
|
41
|
+
const searchQuery = terms.join(" ");
|
|
42
|
+
// Step 2: Repository overview (always include, cheap)
|
|
43
|
+
const index = getIndex();
|
|
44
|
+
if (index.snapshot) {
|
|
45
|
+
const overviewLines = [
|
|
46
|
+
`# Repository: ${index.snapshot.path}`,
|
|
47
|
+
`Branch: ${index.snapshot.branch} Commit: ${index.snapshot.commitSha}`,
|
|
48
|
+
`Build system: ${index.snapshot.buildSystem || "unknown"}`,
|
|
49
|
+
`Frameworks: ${index.snapshot.frameworks.join(", ") || "none detected"}`,
|
|
50
|
+
`Entry points: ${index.snapshot.entryPoints.join(", ") || "none detected"}`,
|
|
51
|
+
`Total files: ${index.snapshot.files.length}`,
|
|
52
|
+
`Symbols indexed: ${index.symbols.length}`,
|
|
53
|
+
].join("\n");
|
|
54
|
+
const item = {
|
|
55
|
+
type: "repo_map",
|
|
56
|
+
label: "Repository Overview",
|
|
57
|
+
content: overviewLines,
|
|
58
|
+
tokens: estimateTokens(overviewLines),
|
|
59
|
+
relevance: 1.0,
|
|
60
|
+
};
|
|
61
|
+
if (totalTokens + item.tokens <= budgetTable[0].max) {
|
|
62
|
+
items.push(item);
|
|
63
|
+
totalTokens += item.tokens;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Step 3: Search code for relevant symbols
|
|
67
|
+
if (remaining() > 2000 && terms.length > 0) {
|
|
68
|
+
try {
|
|
69
|
+
const searchResults = await searchCode({
|
|
70
|
+
query: searchQuery,
|
|
71
|
+
maxResults: 10,
|
|
72
|
+
offset: 0,
|
|
73
|
+
repoPath: opts.repoPath,
|
|
74
|
+
});
|
|
75
|
+
for (const result of searchResults.results.slice(0, 5)) {
|
|
76
|
+
if (remaining() < 500)
|
|
77
|
+
break;
|
|
78
|
+
const symbol = findSymbol(result.symbol || "");
|
|
79
|
+
if (symbol) {
|
|
80
|
+
let content = `## ${symbol.name} (${symbol.kind})\n`;
|
|
81
|
+
content += `File: \`${symbol.file}\`:${symbol.line}\n`;
|
|
82
|
+
content += `Signature: \`${symbol.signature}\`\n\n`;
|
|
83
|
+
if (symbol.calls.length > 0) {
|
|
84
|
+
content += `**Calls:** ${symbol.calls.slice(0, 10).join(", ")}\n`;
|
|
85
|
+
}
|
|
86
|
+
const callers = findCallers(symbol.name);
|
|
87
|
+
if (callers.length > 0) {
|
|
88
|
+
content += `**Called by:** ${callers.slice(0, 10).map(c => c.source).join(", ")}\n`;
|
|
89
|
+
}
|
|
90
|
+
const tests = findRelatedTests(symbol.file);
|
|
91
|
+
if (tests.length > 0) {
|
|
92
|
+
content += `**Related tests:** ${tests.slice(0, 5).join(", ")}\n`;
|
|
93
|
+
}
|
|
94
|
+
// Add code definition if within budget
|
|
95
|
+
if (remaining() > 1000) {
|
|
96
|
+
const defContent = getSymbolDefinition(symbol.file, opts.repoPath, symbol.line);
|
|
97
|
+
if (defContent) {
|
|
98
|
+
content += `\n\`\`\`\n${defContent}\n\`\`\`\n`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const itemTokens = estimateTokens(content);
|
|
102
|
+
items.push({
|
|
103
|
+
type: "symbol",
|
|
104
|
+
label: `${symbol.name} (${symbol.kind})`,
|
|
105
|
+
content,
|
|
106
|
+
tokens: itemTokens,
|
|
107
|
+
relevance: result.score,
|
|
108
|
+
});
|
|
109
|
+
totalTokens += itemTokens;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// search failure isn't fatal
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Step 4: Git history
|
|
118
|
+
if (opts.includeHistory && remaining() > 1000) {
|
|
119
|
+
try {
|
|
120
|
+
const historyResults = searchGitHistory(opts.repoPath, searchQuery, 5);
|
|
121
|
+
if (historyResults.length > 0) {
|
|
122
|
+
const lines = ["## Related Git History\n"];
|
|
123
|
+
for (const h of historyResults) {
|
|
124
|
+
lines.push(`- **${h.commit.substring(0, 8)}** (${h.date}): ${h.message}`);
|
|
125
|
+
if (h.files.length > 0) {
|
|
126
|
+
lines.push(` Files: ${h.files.slice(0, 5).join(", ")}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const content = lines.join("\n");
|
|
130
|
+
const itemTokens = estimateTokens(content);
|
|
131
|
+
items.push({
|
|
132
|
+
type: "history",
|
|
133
|
+
label: "Related Commits",
|
|
134
|
+
content,
|
|
135
|
+
tokens: itemTokens,
|
|
136
|
+
relevance: 0.7,
|
|
137
|
+
});
|
|
138
|
+
totalTokens += itemTokens;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// history search failure isn't fatal
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Step 5: Memory recall
|
|
146
|
+
if (opts.includeMemory && remaining() > 1000) {
|
|
147
|
+
try {
|
|
148
|
+
const memories = hybridRecall(searchQuery, index.repoFingerprint, 3);
|
|
149
|
+
if (memories.length > 0) {
|
|
150
|
+
const lines = ["## Past Experiences\n"];
|
|
151
|
+
for (const m of memories) {
|
|
152
|
+
if ("evidence" in m && m.evidence) {
|
|
153
|
+
lines.push(`### ${m.task}`);
|
|
154
|
+
lines.push(`**Diagnosis:** ${m.diagnosis.substring(0, 200)}`);
|
|
155
|
+
lines.push(`**Solution:** ${m.solution.substring(0, 200)}`);
|
|
156
|
+
lines.push(`**Quality:** ${(m.quality * 100).toFixed(0)}%`);
|
|
157
|
+
if (m.evidence.buildPassed)
|
|
158
|
+
lines.push("✅ Build passed");
|
|
159
|
+
if (m.evidence.testsPassed)
|
|
160
|
+
lines.push("✅ Tests passed");
|
|
161
|
+
lines.push(`**Commit:** ${m.commit.substring(0, 8)}`);
|
|
162
|
+
}
|
|
163
|
+
else if ("content" in m) {
|
|
164
|
+
lines.push(`- **${m.content.substring(0, 100)}** (${m.type})`);
|
|
165
|
+
}
|
|
166
|
+
lines.push("");
|
|
167
|
+
}
|
|
168
|
+
const content = lines.join("\n");
|
|
169
|
+
const itemTokens = estimateTokens(content);
|
|
170
|
+
items.push({
|
|
171
|
+
type: "memory",
|
|
172
|
+
label: "Past Experiences",
|
|
173
|
+
content,
|
|
174
|
+
tokens: itemTokens,
|
|
175
|
+
relevance: 0.8,
|
|
176
|
+
});
|
|
177
|
+
totalTokens += itemTokens;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// memory recall failure isn't fatal
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Summary
|
|
185
|
+
const summaryLines = [
|
|
186
|
+
`Assembled ${items.length} context items using ${totalTokens} / ${opts.tokenBudget} tokens.`,
|
|
187
|
+
items.map(i => `- ${i.type}: "${i.label}" (${i.tokens} tokens, relevance ${(i.relevance * 100).toFixed(0)}%)`).join("\n"),
|
|
188
|
+
];
|
|
189
|
+
return {
|
|
190
|
+
task: opts.task,
|
|
191
|
+
summary: summaryLines.join("\n"),
|
|
192
|
+
items,
|
|
193
|
+
totalTokens,
|
|
194
|
+
hasMore: totalTokens >= opts.tokenBudget,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function extractKeyTerms(task) {
|
|
198
|
+
// Simple extraction: remove common words, split by space/camelCase/snake_case
|
|
199
|
+
const stopWords = new Set([
|
|
200
|
+
"the", "a", "an", "in", "on", "at", "to", "for", "of", "with", "and", "or",
|
|
201
|
+
"is", "are", "was", "were", "be", "been", "being", "have", "has", "had",
|
|
202
|
+
"do", "does", "did", "will", "would", "could", "should", "may", "might",
|
|
203
|
+
"fix", "add", "change", "update", "remove", "implement", "refactor",
|
|
204
|
+
"this", "that", "these", "those", "it", "its", "i", "we", "you", "they",
|
|
205
|
+
"need", "needs", "make", "makes", "getting", "get", "gets", "got",
|
|
206
|
+
]);
|
|
207
|
+
const words = task
|
|
208
|
+
// Split camelCase and snake_case
|
|
209
|
+
.replace(/([a-z])([A-Z])/g, "$1 $2")
|
|
210
|
+
.replace(/[_-]/g, " ")
|
|
211
|
+
// Remove punctuation
|
|
212
|
+
.replace(/[^\w\s]/g, " ")
|
|
213
|
+
.toLowerCase()
|
|
214
|
+
.split(/\s+/)
|
|
215
|
+
.filter(w => w.length > 2 && !stopWords.has(w));
|
|
216
|
+
// Deduplicate
|
|
217
|
+
return [...new Set(words)].slice(0, 20);
|
|
218
|
+
}
|
|
219
|
+
function getSymbolDefinition(file, repoPath, line, contextLines = 10) {
|
|
220
|
+
try {
|
|
221
|
+
const fullPath = join(repoPath, file);
|
|
222
|
+
const content = readFileSync(fullPath, "utf-8");
|
|
223
|
+
const lines = content.split("\n");
|
|
224
|
+
const start = Math.max(0, line - 1 - contextLines);
|
|
225
|
+
const end = Math.min(lines.length, line + contextLines);
|
|
226
|
+
return lines.slice(start, end).map((l, i) => `${start + i + 1}: ${l}`).join("\n");
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=context-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/services/context-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Store Service — business logic for memory/experience management.
|
|
3
|
+
* Delegates persistence to store/memory.ts, adds validation and quality scoring.
|
|
4
|
+
*/
|
|
5
|
+
import { searchExperiences, searchMemories, recallAll, loadMemoryStore, saveMemoryStore } from "../store/memory.js";
|
|
6
|
+
import type { Experience, ExperienceEvidence, Memory, MemoryType } from "../types.js";
|
|
7
|
+
export { loadMemoryStore, saveMemoryStore, searchExperiences, searchMemories, recallAll };
|
|
8
|
+
/**
|
|
9
|
+
* Store a verified experience. Only accepts with complete evidence.
|
|
10
|
+
*/
|
|
11
|
+
export declare function storeExperience(input: {
|
|
12
|
+
task: string;
|
|
13
|
+
diagnosis: string;
|
|
14
|
+
solution: string;
|
|
15
|
+
changedFiles: string[];
|
|
16
|
+
commit: string;
|
|
17
|
+
failedAttempts: string[];
|
|
18
|
+
}, evidence: ExperienceEvidence, repoFingerprint: string): {
|
|
19
|
+
id: string;
|
|
20
|
+
quality: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Store unvalidated knowledge (semantic, procedural, negative).
|
|
24
|
+
*/
|
|
25
|
+
export declare function storeKnowledge(type: MemoryType, content: string, symbols: string[], files: string[], commit: string | null, repo: string): Memory;
|
|
26
|
+
/**
|
|
27
|
+
* Hybrid recall combining experiences and memories.
|
|
28
|
+
*/
|
|
29
|
+
export declare function hybridRecall(query: string, repo?: string, topK?: number, types?: MemoryType[]): (Experience | Memory)[];
|
|
30
|
+
export { getExperience } from "../store/memory.js";
|
|
31
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/services/memory-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,eAAe,EACf,eAAe,EAEhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAE1F;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IACL,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,EACD,QAAQ,EAAE,kBAAkB,EAC5B,eAAe,EAAE,MAAM,GACtB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAGjC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,UAAU,EAAE,GACnB,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAEzB;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Store Service — business logic for memory/experience management.
|
|
3
|
+
* Delegates persistence to store/memory.ts, adds validation and quality scoring.
|
|
4
|
+
*/
|
|
5
|
+
import { addExperience as storeAddExperience, searchExperiences, searchMemories, recallAll, loadMemoryStore, saveMemoryStore, addMemory as storeAddMemory, } from "../store/memory.js";
|
|
6
|
+
export { loadMemoryStore, saveMemoryStore, searchExperiences, searchMemories, recallAll };
|
|
7
|
+
/**
|
|
8
|
+
* Store a verified experience. Only accepts with complete evidence.
|
|
9
|
+
*/
|
|
10
|
+
export function storeExperience(input, evidence, repoFingerprint) {
|
|
11
|
+
const exp = storeAddExperience(input, evidence, repoFingerprint);
|
|
12
|
+
return { id: exp.id, quality: exp.quality };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Store unvalidated knowledge (semantic, procedural, negative).
|
|
16
|
+
*/
|
|
17
|
+
export function storeKnowledge(type, content, symbols, files, commit, repo) {
|
|
18
|
+
return storeAddMemory({ type, content, symbols, files, commit, repo, source: "manual" });
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Hybrid recall combining experiences and memories.
|
|
22
|
+
*/
|
|
23
|
+
export function hybridRecall(query, repo, topK = 5, types) {
|
|
24
|
+
return recallAll(query, repo, topK, types);
|
|
25
|
+
}
|
|
26
|
+
export { getExperience } from "../store/memory.js";
|
|
27
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/services/memory-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,IAAI,kBAAkB,EACnC,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,eAAe,EACf,eAAe,EACf,SAAS,IAAI,cAAc,GAC5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AAE1F;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,KAOC,EACD,QAA4B,EAC5B,eAAuB;IAEvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACjE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAgB,EAChB,OAAe,EACf,OAAiB,EACjB,KAAe,EACf,MAAqB,EACrB,IAAY;IAEZ,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,IAAa,EACb,OAAe,CAAC,EAChB,KAAoB;IAEpB,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-parser.d.ts","sourceRoot":"","sources":["../../src/services/repository-parser.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,aAAa,CAAC;AAExE,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B/E"}
|