@unlimiting/qsc 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.
Files changed (117) hide show
  1. package/dist/chunker/ast.d.ts +7 -0
  2. package/dist/chunker/ast.d.ts.map +1 -0
  3. package/dist/chunker/ast.js +302 -0
  4. package/dist/chunker/ast.js.map +1 -0
  5. package/dist/chunker/index.d.ts +15 -0
  6. package/dist/chunker/index.d.ts.map +1 -0
  7. package/dist/chunker/index.js +26 -0
  8. package/dist/chunker/index.js.map +1 -0
  9. package/dist/chunker/languages/dart.d.ts +3 -0
  10. package/dist/chunker/languages/dart.d.ts.map +1 -0
  11. package/dist/chunker/languages/dart.js +22 -0
  12. package/dist/chunker/languages/dart.js.map +1 -0
  13. package/dist/chunker/languages/go.d.ts +3 -0
  14. package/dist/chunker/languages/go.d.ts.map +1 -0
  15. package/dist/chunker/languages/go.js +20 -0
  16. package/dist/chunker/languages/go.js.map +1 -0
  17. package/dist/chunker/languages/index.d.ts +12 -0
  18. package/dist/chunker/languages/index.d.ts.map +1 -0
  19. package/dist/chunker/languages/index.js +35 -0
  20. package/dist/chunker/languages/index.js.map +1 -0
  21. package/dist/chunker/languages/kotlin.d.ts +3 -0
  22. package/dist/chunker/languages/kotlin.d.ts.map +1 -0
  23. package/dist/chunker/languages/kotlin.js +23 -0
  24. package/dist/chunker/languages/kotlin.js.map +1 -0
  25. package/dist/chunker/languages/python.d.ts +3 -0
  26. package/dist/chunker/languages/python.d.ts.map +1 -0
  27. package/dist/chunker/languages/python.js +21 -0
  28. package/dist/chunker/languages/python.js.map +1 -0
  29. package/dist/chunker/languages/swift.d.ts +3 -0
  30. package/dist/chunker/languages/swift.d.ts.map +1 -0
  31. package/dist/chunker/languages/swift.js +24 -0
  32. package/dist/chunker/languages/swift.js.map +1 -0
  33. package/dist/chunker/languages/typescript.d.ts +4 -0
  34. package/dist/chunker/languages/typescript.d.ts.map +1 -0
  35. package/dist/chunker/languages/typescript.js +34 -0
  36. package/dist/chunker/languages/typescript.js.map +1 -0
  37. package/dist/chunker/token.d.ts +6 -0
  38. package/dist/chunker/token.d.ts.map +1 -0
  39. package/dist/chunker/token.js +107 -0
  40. package/dist/chunker/token.js.map +1 -0
  41. package/dist/collection.d.ts +22 -0
  42. package/dist/collection.d.ts.map +1 -0
  43. package/dist/collection.js +154 -0
  44. package/dist/collection.js.map +1 -0
  45. package/dist/config/index.d.ts +95 -0
  46. package/dist/config/index.d.ts.map +1 -0
  47. package/dist/config/index.js +103 -0
  48. package/dist/config/index.js.map +1 -0
  49. package/dist/embedder/index.d.ts +14 -0
  50. package/dist/embedder/index.d.ts.map +1 -0
  51. package/dist/embedder/index.js +18 -0
  52. package/dist/embedder/index.js.map +1 -0
  53. package/dist/embedder/local.d.ts +11 -0
  54. package/dist/embedder/local.d.ts.map +1 -0
  55. package/dist/embedder/local.js +60 -0
  56. package/dist/embedder/local.js.map +1 -0
  57. package/dist/embedder/openai.d.ts +10 -0
  58. package/dist/embedder/openai.d.ts.map +1 -0
  59. package/dist/embedder/openai.js +69 -0
  60. package/dist/embedder/openai.js.map +1 -0
  61. package/dist/index.d.ts +3 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +824 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/llm/index.d.ts +17 -0
  66. package/dist/llm/index.d.ts.map +1 -0
  67. package/dist/llm/index.js +18 -0
  68. package/dist/llm/index.js.map +1 -0
  69. package/dist/llm/local.d.ts +10 -0
  70. package/dist/llm/local.d.ts.map +1 -0
  71. package/dist/llm/local.js +76 -0
  72. package/dist/llm/local.js.map +1 -0
  73. package/dist/llm/openai.d.ts +10 -0
  74. package/dist/llm/openai.d.ts.map +1 -0
  75. package/dist/llm/openai.js +76 -0
  76. package/dist/llm/openai.js.map +1 -0
  77. package/dist/mcp.d.ts +3 -0
  78. package/dist/mcp.d.ts.map +1 -0
  79. package/dist/mcp.js +393 -0
  80. package/dist/mcp.js.map +1 -0
  81. package/dist/scanner/git.d.ts +26 -0
  82. package/dist/scanner/git.d.ts.map +1 -0
  83. package/dist/scanner/git.js +134 -0
  84. package/dist/scanner/git.js.map +1 -0
  85. package/dist/scanner/index.d.ts +17 -0
  86. package/dist/scanner/index.d.ts.map +1 -0
  87. package/dist/scanner/index.js +174 -0
  88. package/dist/scanner/index.js.map +1 -0
  89. package/dist/search/bm25.d.ts +17 -0
  90. package/dist/search/bm25.d.ts.map +1 -0
  91. package/dist/search/bm25.js +27 -0
  92. package/dist/search/bm25.js.map +1 -0
  93. package/dist/search/expander.d.ts +12 -0
  94. package/dist/search/expander.d.ts.map +1 -0
  95. package/dist/search/expander.js +60 -0
  96. package/dist/search/expander.js.map +1 -0
  97. package/dist/search/fusion.d.ts +32 -0
  98. package/dist/search/fusion.d.ts.map +1 -0
  99. package/dist/search/fusion.js +80 -0
  100. package/dist/search/fusion.js.map +1 -0
  101. package/dist/search/index.d.ts +61 -0
  102. package/dist/search/index.d.ts.map +1 -0
  103. package/dist/search/index.js +137 -0
  104. package/dist/search/index.js.map +1 -0
  105. package/dist/search/reranker.d.ts +18 -0
  106. package/dist/search/reranker.d.ts.map +1 -0
  107. package/dist/search/reranker.js +56 -0
  108. package/dist/search/reranker.js.map +1 -0
  109. package/dist/search/vector.d.ts +23 -0
  110. package/dist/search/vector.d.ts.map +1 -0
  111. package/dist/search/vector.js +47 -0
  112. package/dist/search/vector.js.map +1 -0
  113. package/dist/store.d.ts +119 -0
  114. package/dist/store.d.ts.map +1 -0
  115. package/dist/store.js +500 -0
  116. package/dist/store.js.map +1 -0
  117. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { LLMProvider } from "../llm/index.js";
2
+ import type { FusedResult } from "./fusion.js";
3
+ export interface RerankedResult extends FusedResult {
4
+ scores: FusedResult["scores"] & {
5
+ rerank?: number;
6
+ };
7
+ }
8
+ /**
9
+ * Rerank fused results using an LLM for relevance scoring.
10
+ * If no LLM is provided, returns the input results unchanged.
11
+ *
12
+ * Uses position-aware blending: top-ranked items keep more of their RRF score,
13
+ * while lower-ranked items rely more on the reranker score.
14
+ */
15
+ export declare function rerank(query: string, results: FusedResult[], llm?: LLMProvider, options?: {
16
+ topN?: number;
17
+ }): Promise<RerankedResult[]>;
18
+ //# sourceMappingURL=reranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/search/reranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,WAAW,EAAE,EACtB,GAAG,CAAC,EAAE,WAAW,EACjB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAuD3B"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Rerank fused results using an LLM for relevance scoring.
3
+ * If no LLM is provided, returns the input results unchanged.
4
+ *
5
+ * Uses position-aware blending: top-ranked items keep more of their RRF score,
6
+ * while lower-ranked items rely more on the reranker score.
7
+ */
8
+ export async function rerank(query, results, llm, options = {}) {
9
+ if (!llm || results.length === 0) {
10
+ return results.map((r) => ({ ...r }));
11
+ }
12
+ const topN = options.topN ?? results.length;
13
+ const toRerank = results.slice(0, topN);
14
+ const rest = results.slice(topN);
15
+ try {
16
+ // Use LLM rerank API: pass documents and get relevance scores
17
+ const documents = toRerank.map((r) => {
18
+ const header = r.name
19
+ ? `[${r.chunkType ?? "chunk"}] ${r.name} (${r.filePath})`
20
+ : `[${r.chunkType ?? "chunk"}] ${r.filePath}`;
21
+ return `${header}\n${r.content}`;
22
+ });
23
+ const scores = await llm.rerank(query, documents);
24
+ // Normalize rerank scores to 0–1
25
+ const maxScore = Math.max(...scores, 1);
26
+ const normalizedScores = scores.map((s) => Math.max(0, s / maxScore));
27
+ // Position-aware blending: blend RRF and rerank scores
28
+ const reranked = toRerank.map((r, i) => {
29
+ const rerankScore = normalizedScores[i] ?? 0;
30
+ // Weight shifts from RRF to rerank as position increases
31
+ const position = i / Math.max(toRerank.length - 1, 1);
32
+ const rrfWeight = 1 - position * 0.5; // 1.0 at top, 0.5 at bottom
33
+ const rerankWeight = 0.5 + position * 0.5; // 0.5 at top, 1.0 at bottom
34
+ const blendedScore = (rrfWeight * r.score + rerankWeight * rerankScore) /
35
+ (rrfWeight + rerankWeight);
36
+ return {
37
+ ...r,
38
+ score: blendedScore,
39
+ scores: {
40
+ ...r.scores,
41
+ rerank: rerankScore,
42
+ },
43
+ };
44
+ });
45
+ // Sort by blended score
46
+ reranked.sort((a, b) => b.score - a.score);
47
+ // Append non-reranked items
48
+ const restMapped = rest.map((r) => ({ ...r }));
49
+ return [...reranked, ...restMapped];
50
+ }
51
+ catch {
52
+ // LLM failure: graceful fallback to original ordering
53
+ return results.map((r) => ({ ...r }));
54
+ }
55
+ }
56
+ //# sourceMappingURL=reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/search/reranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Store } from "../store.js";
2
+ import type { Embedder } from "../embedder/index.js";
3
+ export interface VectorSearchResult {
4
+ chunkId: number;
5
+ fileId: number;
6
+ filePath: string;
7
+ content: string;
8
+ startLine: number | null;
9
+ endLine: number | null;
10
+ chunkType: string | null;
11
+ name: string | null;
12
+ score: number;
13
+ }
14
+ /**
15
+ * Perform vector similarity search.
16
+ * Embeds the query text using the provided Embedder, then searches via Store.searchVector.
17
+ */
18
+ export declare function searchVector(store: Store, embedder: Embedder, query: string, limit?: number): Promise<VectorSearchResult[]>;
19
+ /**
20
+ * Perform vector search with a pre-computed embedding.
21
+ */
22
+ export declare function searchVectorWithEmbedding(store: Store, embedding: number[], limit?: number): VectorSearchResult[];
23
+ //# sourceMappingURL=vector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/search/vector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AASD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAkB/B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,SAAK,GACT,kBAAkB,EAAE,CAetB"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Convert cosine distance to similarity score (0–1, higher is better).
3
+ */
4
+ function distanceToScore(distance) {
5
+ return Math.max(0, 1 - distance);
6
+ }
7
+ /**
8
+ * Perform vector similarity search.
9
+ * Embeds the query text using the provided Embedder, then searches via Store.searchVector.
10
+ */
11
+ export async function searchVector(store, embedder, query, limit = 20) {
12
+ const [embedding] = await embedder.embed([query]);
13
+ if (!embedding || embedding.length === 0)
14
+ return [];
15
+ const float32 = new Float32Array(embedding);
16
+ const raw = store.searchVector(float32, limit);
17
+ return raw.map((r) => ({
18
+ chunkId: r.chunk_id,
19
+ fileId: r.file_id,
20
+ filePath: r.file_path,
21
+ content: r.content,
22
+ startLine: r.start_line,
23
+ endLine: r.end_line,
24
+ chunkType: r.chunk_type,
25
+ name: r.name,
26
+ score: distanceToScore(r.distance),
27
+ }));
28
+ }
29
+ /**
30
+ * Perform vector search with a pre-computed embedding.
31
+ */
32
+ export function searchVectorWithEmbedding(store, embedding, limit = 20) {
33
+ const float32 = new Float32Array(embedding);
34
+ const raw = store.searchVector(float32, limit);
35
+ return raw.map((r) => ({
36
+ chunkId: r.chunk_id,
37
+ fileId: r.file_id,
38
+ filePath: r.file_path,
39
+ content: r.content,
40
+ startLine: r.start_line,
41
+ endLine: r.end_line,
42
+ chunkType: r.chunk_type,
43
+ name: r.name,
44
+ score: distanceToScore(r.distance),
45
+ }));
46
+ }
47
+ //# sourceMappingURL=vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/search/vector.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAY,EACZ,QAAkB,EAClB,KAAa,EACb,KAAK,GAAG,EAAE;IAEV,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAmB,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE/D,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAY,EACZ,SAAmB,EACnB,KAAK,GAAG,EAAE;IAEV,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAmB,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE/D,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,SAAS,EAAE,CAAC,CAAC,UAAU;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,119 @@
1
+ export interface RepositoryRow {
2
+ id: string;
3
+ path: string;
4
+ last_commit?: string | null;
5
+ indexed_at?: string | null;
6
+ config?: string | null;
7
+ }
8
+ export interface FileRow {
9
+ id: number;
10
+ repo_id: string;
11
+ path: string;
12
+ hash: string;
13
+ language?: string | null;
14
+ active: number;
15
+ indexed_at?: string | null;
16
+ }
17
+ export interface ChunkInput {
18
+ hash: string;
19
+ seq: number;
20
+ start_line?: number | null;
21
+ end_line?: number | null;
22
+ chunk_type?: string | null;
23
+ name?: string | null;
24
+ content: string;
25
+ metadata?: string | null;
26
+ }
27
+ export interface ChunkRow {
28
+ id: number;
29
+ file_id: number;
30
+ hash: string;
31
+ seq: number;
32
+ start_line: number | null;
33
+ end_line: number | null;
34
+ chunk_type: string | null;
35
+ name: string | null;
36
+ content: string;
37
+ metadata: string | null;
38
+ }
39
+ export interface UnembeddedChunk {
40
+ chunk_id: number;
41
+ content: string;
42
+ name: string | null;
43
+ chunk_type: string | null;
44
+ file_path: string;
45
+ language: string | null;
46
+ repo_id: string;
47
+ }
48
+ export interface EmbeddingInput {
49
+ chunk_id: number;
50
+ embedding: Float32Array;
51
+ model: string;
52
+ }
53
+ export interface BM25Result {
54
+ chunk_id: number;
55
+ file_id: number;
56
+ content: string;
57
+ name: string | null;
58
+ chunk_type: string | null;
59
+ start_line: number | null;
60
+ end_line: number | null;
61
+ file_path: string;
62
+ repo_id: string;
63
+ rank: number;
64
+ }
65
+ export interface VectorResult {
66
+ chunk_id: number;
67
+ file_id: number;
68
+ content: string;
69
+ name: string | null;
70
+ chunk_type: string | null;
71
+ start_line: number | null;
72
+ end_line: number | null;
73
+ file_path: string;
74
+ repo_id: string;
75
+ distance: number;
76
+ }
77
+ export interface StoreStats {
78
+ repositories: number;
79
+ files: number;
80
+ active_files: number;
81
+ chunks: number;
82
+ embedded_chunks: number;
83
+ pending_chunks: number;
84
+ }
85
+ export interface Store {
86
+ initDb(dimensions: number): void;
87
+ upsertRepository(repo: RepositoryRow): void;
88
+ upsertFile(file: Omit<FileRow, "id">): {
89
+ id: number;
90
+ changed: boolean;
91
+ };
92
+ insertChunks(fileId: number, chunks: ChunkInput[]): number[];
93
+ getUnembeddedChunks(limit?: number): UnembeddedChunk[];
94
+ insertEmbeddings(embeddings: EmbeddingInput[]): void;
95
+ searchBM25(query: string, limit?: number): BM25Result[];
96
+ searchVector(embedding: Float32Array, limit?: number): VectorResult[];
97
+ deactivateFiles(repoId: string, paths: string[]): void;
98
+ cleanup(): {
99
+ deletedChunks: number;
100
+ deletedVectors: number;
101
+ };
102
+ getStats(): StoreStats;
103
+ getRepository(repoId: string): RepositoryRow | undefined;
104
+ getActiveFiles(repoId: string): FileRow[];
105
+ getFileByPath(repoId: string, path: string): FileRow | undefined;
106
+ getChunksByFileId(fileId: number): ChunkRow[];
107
+ close(): void;
108
+ }
109
+ /**
110
+ * Format a chunk with contextual metadata for embedding.
111
+ * The resulting string includes file path, language, chunk type, and name
112
+ * as a prefix before the actual code content, so that the embedding model
113
+ * captures contextual information alongside the raw code.
114
+ *
115
+ * Format: "file: <path> | language: <lang> | type: <type> | name: <name> | code: <content>"
116
+ */
117
+ export declare function formatChunkForEmbedding(chunk: UnembeddedChunk): string;
118
+ export declare function createStore(dbPath: string): Store;
119
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}