@devflow-tools/context-engine 0.15.0 → 0.16.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 (49) hide show
  1. package/dist/claude-rerank.d.ts +0 -3
  2. package/dist/claude-rerank.d.ts.map +1 -1
  3. package/dist/claude-rerank.js +0 -88
  4. package/dist/claude-rerank.js.map +1 -1
  5. package/dist/compressor.d.ts +8 -1
  6. package/dist/compressor.d.ts.map +1 -1
  7. package/dist/compressor.js +186 -19
  8. package/dist/compressor.js.map +1 -1
  9. package/dist/context-engine.d.ts +9 -0
  10. package/dist/context-engine.d.ts.map +1 -1
  11. package/dist/context-engine.js +158 -31
  12. package/dist/context-engine.js.map +1 -1
  13. package/dist/create-engines.d.ts +5 -2
  14. package/dist/create-engines.d.ts.map +1 -1
  15. package/dist/create-engines.js +28 -13
  16. package/dist/create-engines.js.map +1 -1
  17. package/dist/index.d.ts +4 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/indexer-adapter.d.ts +3 -1
  22. package/dist/indexer-adapter.d.ts.map +1 -1
  23. package/dist/indexer-adapter.js +31 -15
  24. package/dist/indexer-adapter.js.map +1 -1
  25. package/dist/intent-parser.js +2 -2
  26. package/dist/intent-parser.js.map +1 -1
  27. package/dist/onboarding-pack-builder.d.ts +31 -3
  28. package/dist/onboarding-pack-builder.d.ts.map +1 -1
  29. package/dist/onboarding-pack-builder.js +124 -7
  30. package/dist/onboarding-pack-builder.js.map +1 -1
  31. package/dist/retrieval-handlers.d.ts +42 -0
  32. package/dist/retrieval-handlers.d.ts.map +1 -0
  33. package/dist/retrieval-handlers.js +74 -0
  34. package/dist/retrieval-handlers.js.map +1 -0
  35. package/dist/symbol-embedder.d.ts +24 -2
  36. package/dist/symbol-embedder.d.ts.map +1 -1
  37. package/dist/symbol-embedder.js +149 -50
  38. package/dist/symbol-embedder.js.map +1 -1
  39. package/dist/symbol-vector-store.d.ts +10 -5
  40. package/dist/symbol-vector-store.d.ts.map +1 -1
  41. package/dist/symbol-vector-store.js +59 -16
  42. package/dist/symbol-vector-store.js.map +1 -1
  43. package/dist/types.d.ts +2 -1
  44. package/dist/types.d.ts.map +1 -1
  45. package/package.json +6 -6
  46. package/dist/llm-translator.d.ts +0 -6
  47. package/dist/llm-translator.d.ts.map +0 -1
  48. package/dist/llm-translator.js +0 -143
  49. package/dist/llm-translator.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import type { CanonicalGetMemoryResult, GetKnowledgeResult, GetMemoryOptions, GetMemoryResult, GetProjectContextResult, KnowledgeEntry, TaskContextResult } from '@devflow-tools/sdk';
2
+ export interface ProjectContextRetriever {
3
+ buildTaskContext(query: string, options?: {
4
+ maxTokens?: number;
5
+ mode?: 'fast' | 'deep';
6
+ sessionId?: string;
7
+ }): Promise<TaskContextResult>;
8
+ }
9
+ export interface MemoryRetriever {
10
+ getAll(options?: string | GetMemoryOptions): Promise<GetMemoryResult>;
11
+ }
12
+ export interface KnowledgeRetriever {
13
+ getScopes?(): string[];
14
+ search(query: string, options?: {
15
+ sources?: string[];
16
+ budgetTokens?: number;
17
+ }): Promise<KnowledgeEntry[]>;
18
+ searchWithStatus?(query: string, options: {
19
+ sources?: string[];
20
+ budgetTokens?: number;
21
+ }): Promise<{
22
+ entries: KnowledgeEntry[];
23
+ warnings: string[];
24
+ budgetTokens?: number;
25
+ tokenCount?: number;
26
+ truncatedCount?: number;
27
+ }>;
28
+ }
29
+ export interface GetProjectContextArgs {
30
+ query: string;
31
+ mode?: 'fast' | 'deep';
32
+ maxTokens?: number;
33
+ sessionId?: string;
34
+ }
35
+ export declare function getProjectContextResult(context: ProjectContextRetriever, args: GetProjectContextArgs, freshnessMs: number): Promise<GetProjectContextResult>;
36
+ export declare function getMemoryResult(memory: MemoryRetriever, options: GetMemoryOptions): Promise<CanonicalGetMemoryResult>;
37
+ export declare function getKnowledgeResult(knowledge: KnowledgeRetriever, args: {
38
+ query: string;
39
+ scope?: string;
40
+ budgetTokens?: number;
41
+ }): Promise<GetKnowledgeResult>;
42
+ //# sourceMappingURL=retrieval-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval-handlers.d.ts","sourceRoot":"","sources":["../src/retrieval-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3E,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1G,gBAAgB,CAAC,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GACrD,OAAO,CAAC;QACT,OAAO,EAAE,cAAc,EAAE,CAAC;QAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,qBAAqB,EAC3B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAyBlC;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAenC;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,kBAAkB,CAAC,CAgC7B"}
@@ -0,0 +1,74 @@
1
+ export async function getProjectContextResult(context, args, freshnessMs) {
2
+ const result = await context.buildTaskContext(args.query, {
3
+ mode: args.mode ?? 'fast',
4
+ maxTokens: args.maxTokens,
5
+ sessionId: args.sessionId,
6
+ });
7
+ const fallback = Boolean(result._devflow?.fallback);
8
+ return {
9
+ ...result,
10
+ _devflow_unique: {
11
+ search_method: result.warnings?.length ? 'bm25_semantic' : 'bm25_vector_rrf',
12
+ task_oriented: true,
13
+ risk_aware: true,
14
+ memory_injected: true,
15
+ knowledge_injected: true,
16
+ token_estimated: true,
17
+ required_vs_optional: true,
18
+ },
19
+ _accuracy: {
20
+ data_freshness_ms: freshnessMs,
21
+ source_layer: 'composite',
22
+ degradation: fallback ? 'fallback' : 'none',
23
+ },
24
+ };
25
+ }
26
+ export async function getMemoryResult(memory, options) {
27
+ const result = await memory.getAll(options);
28
+ return {
29
+ ...result,
30
+ _devflow_unique: {
31
+ memory_version: 1,
32
+ structured_storage: true,
33
+ project_context_included: true,
34
+ },
35
+ _accuracy: {
36
+ data_freshness_ms: 0,
37
+ source_layer: 'memory',
38
+ degradation: 'none',
39
+ },
40
+ };
41
+ }
42
+ export async function getKnowledgeResult(knowledge, args) {
43
+ const scopeName = args.scope?.trim() || 'all';
44
+ const availableScopes = knowledge.getScopes?.() ?? [];
45
+ if (scopeName !== 'all' && availableScopes.length > 0 && !availableScopes.includes(scopeName)) {
46
+ throw new Error(`Unknown knowledge scope ${JSON.stringify(scopeName)}. Available scopes: ${availableScopes.join(', ')}`);
47
+ }
48
+ const searchOptions = {
49
+ sources: scopeName === 'all' ? undefined : [scopeName],
50
+ };
51
+ if (args.budgetTokens !== undefined)
52
+ searchOptions.budgetTokens = args.budgetTokens;
53
+ const detailed = knowledge.searchWithStatus
54
+ ? await knowledge.searchWithStatus(args.query, searchOptions)
55
+ : { entries: await knowledge.search(args.query, searchOptions), warnings: [] };
56
+ return {
57
+ results: detailed.entries,
58
+ warnings: detailed.warnings,
59
+ budgetTokens: detailed.budgetTokens ?? args.budgetTokens ?? 3000,
60
+ tokenCount: detailed.tokenCount,
61
+ truncatedCount: detailed.truncatedCount ?? 0,
62
+ _devflow_unique: {
63
+ source_versioned: true,
64
+ code_examples_included: true,
65
+ search_scope: scopeName,
66
+ },
67
+ _accuracy: {
68
+ data_freshness_ms: 0,
69
+ source_layer: 'knowledge',
70
+ degradation: detailed.warnings.length > 0 ? 'bm25_only' : 'none',
71
+ },
72
+ };
73
+ }
74
+ //# sourceMappingURL=retrieval-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval-handlers.js","sourceRoot":"","sources":["../src/retrieval-handlers.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,38 @@
1
1
  import type { CodeGraph } from "@colbymchenry/codegraph";
2
2
  import type { EmbeddingProvider } from "@devflow-tools/memory-engine";
3
3
  import type { SymbolVectorStore } from "./symbol-vector-store.js";
4
+ export interface SymbolEmbeddingStatus {
5
+ state: "idle" | "building" | "ready" | "failed";
6
+ vectorCount: number;
7
+ nodeCount: number;
8
+ error?: string;
9
+ }
4
10
  export declare class SymbolEmbedder {
5
11
  private cg;
6
12
  private embedder;
7
13
  private store;
14
+ private buildPromise;
15
+ private mutationTail;
16
+ private status;
8
17
  constructor(cg: CodeGraph, embedder: EmbeddingProvider, store: SymbolVectorStore);
9
- buildAll(onProgress?: (p: {
18
+ getStatus(): SymbolEmbeddingStatus;
19
+ buildAllIfNeeded(onProgress?: (progress: {
20
+ current: number;
21
+ total: number;
22
+ }) => void): Promise<void>;
23
+ buildAll(onProgress?: (progress: {
10
24
  current: number;
11
25
  total: number;
12
26
  }) => void): Promise<void>;
13
27
  updateForFiles(filePaths: string[]): Promise<void>;
14
- isBuilt(): Promise<boolean>;
28
+ isBuilt(): boolean;
29
+ private runBuildIfNeeded;
30
+ private recoverLoadedProvider;
31
+ private getAllNodes;
32
+ private buildAllNodes;
33
+ private embedNodes;
34
+ private createEntries;
35
+ private enqueueMutation;
36
+ private setStatus;
15
37
  }
16
38
  //# sourceMappingURL=symbol-embedder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-embedder.d.ts","sourceRoot":"","sources":["../src/symbol-embedder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQlE,qBAAa,cAAc;IAEvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;gBAFL,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,iBAAiB;IAG5B,QAAQ,CACZ,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAC3D,OAAO,CAAC,IAAI,CAAC;IAgCV,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgClD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;CAKlC"}
1
+ {"version":3,"file":"symbol-embedder.d.ts","sourceRoot":"","sources":["../src/symbol-embedder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAEV,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,cAAc;IAUvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,KAAK;IAXf,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,MAAM,CAIZ;gBAGQ,EAAE,EAAE,SAAS,EACb,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,iBAAiB;IAGlC,SAAS,IAAI,qBAAqB;IAQlC,gBAAgB,CACd,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAClE,OAAO,CAAC,IAAI,CAAC;IAiCV,QAAQ,CACZ,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAClE,OAAO,CAAC,IAAI,CAAC;IAYV,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BxD,OAAO,IAAI,OAAO;YAUJ,gBAAgB;YAgBhB,qBAAqB;IASnC,OAAO,CAAC,WAAW;YAQL,aAAa;YAcb,UAAU;YAKV,aAAa;IAe3B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,SAAS;CAWlB"}
@@ -1,75 +1,174 @@
1
1
  const BATCH_SIZE = 32;
2
+ const HEALTHY_COVERAGE = 0.9;
2
3
  function buildNodeText(node) {
3
4
  return `${node.name} ${node.kind} ${node.signature ?? ""} ${node.filePath}`;
4
5
  }
6
+ function errorMessage(error) {
7
+ return error instanceof Error ? error.message : String(error);
8
+ }
5
9
  export class SymbolEmbedder {
6
10
  cg;
7
11
  embedder;
8
12
  store;
13
+ buildPromise = null;
14
+ mutationTail = Promise.resolve();
15
+ status = {
16
+ state: "idle",
17
+ vectorCount: 0,
18
+ nodeCount: 0,
19
+ };
9
20
  constructor(cg, embedder, store) {
10
21
  this.cg = cg;
11
22
  this.embedder = embedder;
12
23
  this.store = store;
13
24
  }
14
- async buildAll(onProgress) {
15
- if (!this.embedder.isReady()) {
16
- await this.embedder.initialize();
17
- }
18
- const files = this.cg.getFiles();
19
- const allNodes = [];
20
- for (const file of files) {
21
- const nodes = this.cg.getNodesInFile(file.path);
22
- allNodes.push(...nodes);
25
+ getStatus() {
26
+ return {
27
+ ...this.status,
28
+ vectorCount: this.store.count(),
29
+ nodeCount: this.cg.getStats().nodeCount,
30
+ };
31
+ }
32
+ buildAllIfNeeded(onProgress) {
33
+ if (this.buildPromise)
34
+ return this.buildPromise;
35
+ if (this.status.state === "ready" && this.isBuilt()) {
36
+ if (this.embedder.getStatus() === "ready") {
37
+ return Promise.resolve();
38
+ }
39
+ const recovery = this.enqueueMutation(() => this.recoverLoadedProvider())
40
+ .catch((error) => {
41
+ this.setStatus("failed", errorMessage(error));
42
+ throw error;
43
+ })
44
+ .finally(() => {
45
+ this.buildPromise = null;
46
+ });
47
+ this.buildPromise = recovery;
48
+ return recovery;
23
49
  }
24
- const total = allNodes.length;
25
- const batches = [];
26
- for (let i = 0; i < total; i += BATCH_SIZE) {
27
- batches.push(allNodes.slice(i, i + BATCH_SIZE));
50
+ this.setStatus("building");
51
+ const build = this.enqueueMutation(async () => {
52
+ await this.runBuildIfNeeded(onProgress);
53
+ })
54
+ .catch((error) => {
55
+ this.setStatus("failed", errorMessage(error));
56
+ throw error;
57
+ })
58
+ .finally(() => {
59
+ this.buildPromise = null;
60
+ });
61
+ this.buildPromise = build;
62
+ return build;
63
+ }
64
+ async buildAll(onProgress) {
65
+ await this.enqueueMutation(async () => {
66
+ const warmed = await this.embedder.warmup();
67
+ if (!warmed) {
68
+ throw new Error(this.embedder.getLastError() ?? "Embedding model warmup failed");
69
+ }
70
+ await this.buildAllNodes(onProgress);
71
+ });
72
+ }
73
+ async updateForFiles(filePaths) {
74
+ const changedFiles = [...new Set(filePaths)];
75
+ if (changedFiles.length === 0)
76
+ return;
77
+ await this.enqueueMutation(async () => {
78
+ this.setStatus("building");
79
+ this.store.deleteByFiles(changedFiles);
80
+ try {
81
+ const warmed = await this.embedder.warmup();
82
+ if (!warmed) {
83
+ throw new Error(this.embedder.getLastError() ?? "Embedding model warmup failed");
84
+ }
85
+ for (const filePath of changedFiles) {
86
+ const nodes = this.cg.getNodesInFile(filePath);
87
+ for (let offset = 0; offset < nodes.length; offset += BATCH_SIZE) {
88
+ await this.embedNodes(nodes.slice(offset, offset + BATCH_SIZE));
89
+ }
90
+ }
91
+ this.setStatus(this.isBuilt() ? "ready" : "idle");
92
+ }
93
+ catch (error) {
94
+ this.setStatus("failed", errorMessage(error));
95
+ throw error;
96
+ }
97
+ });
98
+ }
99
+ isBuilt() {
100
+ const nodeCount = this.cg.getStats().nodeCount;
101
+ const vectorCount = this.store.count();
102
+ const sourceCount = this.store.countSources();
103
+ const requiredCount = nodeCount * HEALTHY_COVERAGE;
104
+ return vectorCount === sourceCount
105
+ && vectorCount >= requiredCount
106
+ && sourceCount >= requiredCount;
107
+ }
108
+ async runBuildIfNeeded(onProgress) {
109
+ const warmed = await this.embedder.warmup();
110
+ if (!warmed) {
111
+ throw new Error(this.embedder.getLastError() ?? "Embedding model warmup failed");
28
112
  }
29
- let processed = 0;
30
- for (const batch of batches) {
31
- const texts = batch.map(buildNodeText);
32
- const embeddings = await this.embedder.embedBatch(texts);
33
- const entries = batch.map((node, i) => ({
34
- id: node.id,
35
- embedding: embeddings[i],
36
- }));
37
- this.store.upsertBatch(entries);
38
- processed += batch.length;
39
- onProgress?.({ current: processed, total });
113
+ if (!this.isBuilt()) {
114
+ await this.buildAllNodes(onProgress);
40
115
  }
116
+ this.setStatus("ready");
41
117
  }
42
- async updateForFiles(filePaths) {
43
- if (!this.embedder.isReady()) {
44
- await this.embedder.initialize();
118
+ async recoverLoadedProvider() {
119
+ const warmed = await this.embedder.warmup();
120
+ if (!warmed) {
121
+ throw new Error(this.embedder.getLastError() ?? "Embedding model warmup failed");
45
122
  }
46
- // Delete old embeddings for changed files
47
- const idsToDelete = [];
48
- for (const fp of filePaths) {
49
- const nodes = this.cg.getNodesInFile(fp);
50
- idsToDelete.push(...nodes.map((n) => n.id));
123
+ }
124
+ getAllNodes() {
125
+ const allNodes = [];
126
+ for (const file of this.cg.getFiles()) {
127
+ allNodes.push(...this.cg.getNodesInFile(file.path));
51
128
  }
52
- if (idsToDelete.length > 0) {
53
- this.store.delete(idsToDelete);
129
+ return allNodes;
130
+ }
131
+ async buildAllNodes(onProgress) {
132
+ const allNodes = this.getAllNodes();
133
+ const total = allNodes.length;
134
+ const entries = [];
135
+ for (let offset = 0; offset < total; offset += BATCH_SIZE) {
136
+ const batch = allNodes.slice(offset, offset + BATCH_SIZE);
137
+ entries.push(...await this.createEntries(batch));
138
+ onProgress?.({ current: offset + batch.length, total });
54
139
  }
55
- // Re-embed changed files
56
- for (const fp of filePaths) {
57
- const nodes = this.cg.getNodesInFile(fp);
58
- const batches = [];
59
- for (let i = 0; i < nodes.length; i += BATCH_SIZE) {
60
- batches.push(nodes.slice(i, i + BATCH_SIZE));
61
- }
62
- for (const batch of batches) {
63
- const texts = batch.map(buildNodeText);
64
- const embeddings = await this.embedder.embedBatch(texts);
65
- this.store.upsertBatch(batch.map((node, i) => ({ id: node.id, embedding: embeddings[i] })));
66
- }
140
+ this.store.replaceAll(entries);
141
+ }
142
+ async embedNodes(nodes) {
143
+ if (nodes.length === 0)
144
+ return;
145
+ this.store.upsertBatch(await this.createEntries(nodes));
146
+ }
147
+ async createEntries(nodes) {
148
+ if (nodes.length === 0)
149
+ return [];
150
+ const embeddings = await this.embedder.embedBatch(nodes.map(buildNodeText));
151
+ if (embeddings.length !== nodes.length) {
152
+ throw new Error(`Embedding model returned ${embeddings.length} vectors for ${nodes.length} symbols`);
67
153
  }
154
+ return nodes.map((node, index) => ({
155
+ id: node.id,
156
+ filePath: node.filePath,
157
+ embedding: embeddings[index],
158
+ }));
159
+ }
160
+ enqueueMutation(operation) {
161
+ const result = this.mutationTail.then(operation, operation);
162
+ this.mutationTail = result.then(() => undefined, () => undefined);
163
+ return result;
68
164
  }
69
- async isBuilt() {
70
- const stats = this.cg.getStats();
71
- const storeCount = this.store.count();
72
- return storeCount > 0 && storeCount >= stats.nodeCount * 0.9;
165
+ setStatus(state, error) {
166
+ this.status = {
167
+ state,
168
+ vectorCount: this.store.count(),
169
+ nodeCount: this.cg.getStats().nodeCount,
170
+ ...(error ? { error } : {}),
171
+ };
73
172
  }
74
173
  }
75
174
  //# sourceMappingURL=symbol-embedder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-embedder.js","sourceRoot":"","sources":["../src/symbol-embedder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbol-embedder.js","sourceRoot":"","sources":["../src/symbol-embedder.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,25 @@
1
+ export interface SymbolVectorEntry {
2
+ id: string;
3
+ filePath: string;
4
+ embedding: Float32Array;
5
+ }
1
6
  export declare class SymbolVectorStore {
2
7
  private db;
3
8
  private initialized;
4
9
  constructor(projectRoot: string);
5
10
  initialize(): void;
6
- upsert(id: string, embedding: Float32Array): void;
7
- upsertBatch(entries: Array<{
8
- id: string;
9
- embedding: Float32Array;
10
- }>): void;
11
+ upsert(id: string, filePath: string, embedding: Float32Array): void;
12
+ upsertBatch(entries: SymbolVectorEntry[]): void;
13
+ replaceAll(entries: SymbolVectorEntry[]): void;
11
14
  search(embedding: Float32Array, limit: number): Array<{
12
15
  id: string;
13
16
  distance: number;
14
17
  }>;
15
18
  delete(ids: string[]): void;
19
+ deleteByFiles(filePaths: string[]): void;
16
20
  get(id: string): Buffer | null;
17
21
  count(): number;
22
+ countSources(): number;
18
23
  close(): void;
19
24
  }
20
25
  //# sourceMappingURL=symbol-vector-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-vector-store.d.ts","sourceRoot":"","sources":["../src/symbol-vector-store.ts"],"names":[],"mappings":"AAKA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAS/B,UAAU,IAAI,IAAI;IAYlB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAQjD,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG,IAAI;IAe1E,MAAM,CACJ,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAY1C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO9B,KAAK,IAAI,MAAM;IAOf,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"symbol-vector-store.d.ts","sourceRoot":"","sources":["../src/symbol-vector-store.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,CAAC;CACzB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAS/B,UAAU,IAAI,IAAI;IAkBlB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAKnE,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAuB/C,UAAU,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAuB9C,MAAM,CACJ,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAgB1C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAc3B,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAWxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO9B,KAAK,IAAI,MAAM;IAOf,YAAY,IAAI,MAAM;IAOtB,KAAK,IAAI,IAAI;CAGd"}
@@ -22,32 +22,54 @@ export class SymbolVectorStore {
22
22
  CREATE VIRTUAL TABLE IF NOT EXISTS symbols_vec USING vec0(
23
23
  id TEXT PRIMARY KEY,
24
24
  embedding FLOAT[384]
25
- )
25
+ );
26
+ CREATE TABLE IF NOT EXISTS symbol_sources (
27
+ id TEXT PRIMARY KEY,
28
+ file_path TEXT NOT NULL
29
+ );
30
+ CREATE INDEX IF NOT EXISTS idx_symbol_sources_file
31
+ ON symbol_sources(file_path);
26
32
  `);
27
33
  this.initialized = true;
28
34
  }
29
- upsert(id, embedding) {
30
- this.db.prepare("DELETE FROM symbols_vec WHERE id = ?").run(id);
31
- const buffer = Buffer.from(embedding.buffer);
32
- this.db
33
- .prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)")
34
- .run(id, buffer);
35
+ upsert(id, filePath, embedding) {
36
+ this.upsertBatch([{ id, filePath, embedding }]);
35
37
  }
36
38
  upsertBatch(entries) {
37
39
  if (entries.length === 0)
38
40
  return;
39
- const deleteStmt = this.db.prepare("DELETE FROM symbols_vec WHERE id = ?");
40
- const insert = this.db.prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)");
41
+ const deleteVector = this.db.prepare("DELETE FROM symbols_vec WHERE id = ?");
42
+ const insertVector = this.db.prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)");
43
+ const upsertSource = this.db.prepare(`
44
+ INSERT INTO symbol_sources(id, file_path) VALUES (?, ?)
45
+ ON CONFLICT(id) DO UPDATE SET file_path = excluded.file_path
46
+ `);
41
47
  const runAll = this.db.transaction(() => {
42
- for (const { id, embedding } of entries) {
43
- deleteStmt.run(id);
44
- insert.run(id, Buffer.from(embedding.buffer));
48
+ for (const { id, filePath, embedding } of entries) {
49
+ deleteVector.run(id);
50
+ insertVector.run(id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
51
+ upsertSource.run(id, filePath);
45
52
  }
46
53
  });
47
54
  runAll();
48
55
  }
56
+ replaceAll(entries) {
57
+ const deleteVectors = this.db.prepare("DELETE FROM symbols_vec");
58
+ const deleteSources = this.db.prepare("DELETE FROM symbol_sources");
59
+ const insertVector = this.db.prepare("INSERT INTO symbols_vec(id, embedding) VALUES (?, ?)");
60
+ const insertSource = this.db.prepare("INSERT INTO symbol_sources(id, file_path) VALUES (?, ?)");
61
+ const replace = this.db.transaction(() => {
62
+ deleteVectors.run();
63
+ deleteSources.run();
64
+ for (const { id, filePath, embedding } of entries) {
65
+ insertVector.run(id, Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength));
66
+ insertSource.run(id, filePath);
67
+ }
68
+ });
69
+ replace();
70
+ }
49
71
  search(embedding, limit) {
50
- const buffer = Buffer.from(embedding.buffer);
72
+ const buffer = Buffer.from(embedding.buffer, embedding.byteOffset, embedding.byteLength);
51
73
  return this.db
52
74
  .prepare(`SELECT id, vec_distance_cosine(embedding, ?) as distance
53
75
  FROM symbols_vec
@@ -59,9 +81,24 @@ export class SymbolVectorStore {
59
81
  if (ids.length === 0)
60
82
  return;
61
83
  const placeholders = ids.map(() => "?").join(",");
62
- this.db
63
- .prepare(`DELETE FROM symbols_vec WHERE id IN (${placeholders})`)
64
- .run(...ids);
84
+ const deleteRows = this.db.transaction(() => {
85
+ this.db
86
+ .prepare(`DELETE FROM symbols_vec WHERE id IN (${placeholders})`)
87
+ .run(...ids);
88
+ this.db
89
+ .prepare(`DELETE FROM symbol_sources WHERE id IN (${placeholders})`)
90
+ .run(...ids);
91
+ });
92
+ deleteRows();
93
+ }
94
+ deleteByFiles(filePaths) {
95
+ if (filePaths.length === 0)
96
+ return;
97
+ const placeholders = filePaths.map(() => "?").join(",");
98
+ const rows = this.db
99
+ .prepare(`SELECT id FROM symbol_sources WHERE file_path IN (${placeholders})`)
100
+ .all(...filePaths);
101
+ this.delete(rows.map(({ id }) => id));
65
102
  }
66
103
  get(id) {
67
104
  const row = this.db
@@ -75,6 +112,12 @@ export class SymbolVectorStore {
75
112
  .get();
76
113
  return row.c;
77
114
  }
115
+ countSources() {
116
+ const row = this.db
117
+ .prepare("SELECT COUNT(*) as c FROM symbol_sources")
118
+ .get();
119
+ return row.c;
120
+ }
78
121
  close() {
79
122
  this.db.close();
80
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-vector-store.js","sourceRoot":"","sources":["../src/symbol-vector-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbol-vector-store.js","sourceRoot":"","sources":["../src/symbol-vector-store.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,7 +16,8 @@ export type TaskType = "debug" | "feature" | "understand" | "review" | "refactor
16
16
  export interface OnboardingPack {
17
17
  projectName: string;
18
18
  createdAt: string;
19
- root: string;
19
+ rootPath: string;
20
+ projectHash: string;
20
21
  stats: {
21
22
  files: number;
22
23
  symbols: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChG,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChG,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,kBAAkB,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B"}