@monoes/monograph 2.24.1 → 2.25.1

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 (103) hide show
  1. package/dist/src/embeddings/store.d.ts +38 -0
  2. package/dist/src/embeddings/store.d.ts.map +1 -0
  3. package/dist/src/embeddings/store.js +147 -0
  4. package/dist/src/embeddings/store.js.map +1 -0
  5. package/dist/src/embeddings/transformers-embedder.d.ts +19 -0
  6. package/dist/src/embeddings/transformers-embedder.d.ts.map +1 -0
  7. package/dist/src/embeddings/transformers-embedder.js +48 -0
  8. package/dist/src/embeddings/transformers-embedder.js.map +1 -0
  9. package/dist/src/index.d.ts +4 -0
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +4 -0
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/mcp-tools/brief.d.ts +40 -0
  14. package/dist/src/mcp-tools/brief.d.ts.map +1 -0
  15. package/dist/src/mcp-tools/brief.js +65 -0
  16. package/dist/src/mcp-tools/brief.js.map +1 -0
  17. package/dist/src/mcp-tools/context.d.ts +9 -0
  18. package/dist/src/mcp-tools/context.d.ts.map +1 -1
  19. package/dist/src/mcp-tools/context.js +20 -0
  20. package/dist/src/mcp-tools/context.js.map +1 -1
  21. package/dist/src/mcp-tools/impact.d.ts +9 -0
  22. package/dist/src/mcp-tools/impact.d.ts.map +1 -1
  23. package/dist/src/mcp-tools/impact.js +37 -0
  24. package/dist/src/mcp-tools/impact.js.map +1 -1
  25. package/dist/src/mcp-tools/index.d.ts +1 -0
  26. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  27. package/dist/src/mcp-tools/index.js +1 -0
  28. package/dist/src/mcp-tools/index.js.map +1 -1
  29. package/dist/src/pipeline/manifest.d.ts +34 -0
  30. package/dist/src/pipeline/manifest.d.ts.map +1 -0
  31. package/dist/src/pipeline/manifest.js +38 -0
  32. package/dist/src/pipeline/manifest.js.map +1 -0
  33. package/dist/src/pipeline/orchestrator.d.ts.map +1 -1
  34. package/dist/src/pipeline/orchestrator.js +15 -0
  35. package/dist/src/pipeline/orchestrator.js.map +1 -1
  36. package/dist/src/pipeline/phases/agent-registry.d.ts +33 -0
  37. package/dist/src/pipeline/phases/agent-registry.d.ts.map +1 -0
  38. package/dist/src/pipeline/phases/agent-registry.js +153 -0
  39. package/dist/src/pipeline/phases/agent-registry.js.map +1 -0
  40. package/dist/src/pipeline/phases/cross-file.d.ts.map +1 -1
  41. package/dist/src/pipeline/phases/cross-file.js +8 -2
  42. package/dist/src/pipeline/phases/cross-file.js.map +1 -1
  43. package/dist/src/pipeline/phases/god-nodes.d.ts +8 -0
  44. package/dist/src/pipeline/phases/god-nodes.d.ts.map +1 -1
  45. package/dist/src/pipeline/phases/god-nodes.js +8 -0
  46. package/dist/src/pipeline/phases/god-nodes.js.map +1 -1
  47. package/dist/src/pipeline/phases/parse.d.ts.map +1 -1
  48. package/dist/src/pipeline/phases/parse.js +18 -2
  49. package/dist/src/pipeline/phases/parse.js.map +1 -1
  50. package/dist/src/pipeline/phases/summaries.d.ts +22 -0
  51. package/dist/src/pipeline/phases/summaries.d.ts.map +1 -0
  52. package/dist/src/pipeline/phases/summaries.js +196 -0
  53. package/dist/src/pipeline/phases/summaries.js.map +1 -0
  54. package/dist/src/pipeline/phases/tests-edges.d.ts +16 -0
  55. package/dist/src/pipeline/phases/tests-edges.d.ts.map +1 -0
  56. package/dist/src/pipeline/phases/tests-edges.js +44 -0
  57. package/dist/src/pipeline/phases/tests-edges.js.map +1 -0
  58. package/dist/src/pipeline/runner.d.ts.map +1 -1
  59. package/dist/src/pipeline/runner.js +5 -0
  60. package/dist/src/pipeline/runner.js.map +1 -1
  61. package/dist/src/search/eval.d.ts +44 -0
  62. package/dist/src/search/eval.d.ts.map +1 -0
  63. package/dist/src/search/eval.js +35 -0
  64. package/dist/src/search/eval.js.map +1 -0
  65. package/dist/src/search/fused-search.d.ts +22 -0
  66. package/dist/src/search/fused-search.d.ts.map +1 -0
  67. package/dist/src/search/fused-search.js +103 -0
  68. package/dist/src/search/fused-search.js.map +1 -0
  69. package/dist/src/search/hybrid-query.d.ts +29 -2
  70. package/dist/src/search/hybrid-query.d.ts.map +1 -1
  71. package/dist/src/search/hybrid-query.js +113 -2
  72. package/dist/src/search/hybrid-query.js.map +1 -1
  73. package/dist/src/staleness/git-staleness.d.ts.map +1 -1
  74. package/dist/src/staleness/git-staleness.js +2 -0
  75. package/dist/src/staleness/git-staleness.js.map +1 -1
  76. package/dist/src/storage/db.d.ts.map +1 -1
  77. package/dist/src/storage/db.js +3 -2
  78. package/dist/src/storage/db.js.map +1 -1
  79. package/dist/src/storage/fts-store-hybrid.d.ts +2 -2
  80. package/dist/src/storage/fts-store-hybrid.d.ts.map +1 -1
  81. package/dist/src/storage/fts-store-hybrid.js +4 -3
  82. package/dist/src/storage/fts-store-hybrid.js.map +1 -1
  83. package/dist/src/storage/fts-store-search.d.ts +14 -1
  84. package/dist/src/storage/fts-store-search.d.ts.map +1 -1
  85. package/dist/src/storage/fts-store-search.js +25 -8
  86. package/dist/src/storage/fts-store-search.js.map +1 -1
  87. package/dist/src/storage/fts-store-terms.d.ts +1 -0
  88. package/dist/src/storage/fts-store-terms.d.ts.map +1 -1
  89. package/dist/src/storage/fts-store-terms.js +1 -1
  90. package/dist/src/storage/fts-store-terms.js.map +1 -1
  91. package/dist/src/storage/schema.d.ts +14 -2
  92. package/dist/src/storage/schema.d.ts.map +1 -1
  93. package/dist/src/storage/schema.js +22 -5
  94. package/dist/src/storage/schema.js.map +1 -1
  95. package/dist/src/storage/summary-search.d.ts +13 -0
  96. package/dist/src/storage/summary-search.d.ts.map +1 -0
  97. package/dist/src/storage/summary-search.js +58 -0
  98. package/dist/src/storage/summary-search.js.map +1 -0
  99. package/dist/src/types.d.ts +2 -2
  100. package/dist/src/types.d.ts.map +1 -1
  101. package/dist/src/types.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +1 -1
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Lexical + semantic retrieval, fused.
3
+ *
4
+ * Lexical search (names, stemmed summaries) is exact and fast but only finds
5
+ * what shares words with the query. Embeddings find "which agent should handle
6
+ * a task" -> `pickAgents` but blur exact identifiers. Reciprocal-rank fusion
7
+ * keeps the strengths of both; the weights follow the query's style, and an
8
+ * exact name match is always pinned first.
9
+ *
10
+ * Degrades to plain lexical search when no embedder is supplied, nothing has
11
+ * been embedded yet, or the query only concerns documentation.
12
+ */
13
+ import { semanticSearch } from '../embeddings/store.js';
14
+ import { AGENT_SCOPE_LABELS, CODE_SCOPE_LABELS, searchGraph, TEST_FACTOR, TEST_INTENT, TEST_PATH, } from './hybrid-query.js';
15
+ const RRF_K = 60;
16
+ /** How many of keyword search's top hits are never dropped by fusion. */
17
+ const PROTECTED_LEXICAL = 2;
18
+ /** [lexical, semantic] weights. */
19
+ const WEIGHTS_IDENTIFIER = [2, 1];
20
+ const WEIGHTS_NATURAL = [1, 2];
21
+ /** A single token (`UserService`, `agent-pick`, `fts-store.ts`) is a name, not a question. */
22
+ export function isIdentifierQuery(query) {
23
+ return !/\s/.test(query.trim());
24
+ }
25
+ function semanticLabels(options) {
26
+ if (options.label)
27
+ return options.label;
28
+ if (options.scope === 'code')
29
+ return CODE_SCOPE_LABELS;
30
+ if (options.scope === 'agents')
31
+ return AGENT_SCOPE_LABELS;
32
+ if (options.scope === 'docs')
33
+ return ['Document'];
34
+ return undefined;
35
+ }
36
+ export async function searchGraphFused(db, query, options = {}) {
37
+ const { embedder, ...base } = options;
38
+ const limit = base.limit ?? 20;
39
+ const q = (query ?? '').trim();
40
+ if (limit <= 0 || !q)
41
+ return [];
42
+ const pool = Math.max(limit * 5, 50);
43
+ const lexical = searchGraph(db, q, { ...base, limit: pool });
44
+ if (!embedder)
45
+ return lexical.slice(0, limit);
46
+ let sem = [];
47
+ try {
48
+ sem = semanticSearch(db, await embedder.embedQuery(q), pool, semanticLabels(base));
49
+ }
50
+ catch {
51
+ return lexical.slice(0, limit);
52
+ }
53
+ if (sem.length === 0)
54
+ return lexical.slice(0, limit);
55
+ const [wl, ws] = isIdentifierQuery(q) ? WEIGHTS_IDENTIFIER : WEIGHTS_NATURAL;
56
+ const wantsTests = TEST_INTENT.test(q);
57
+ const fused = new Map();
58
+ const add = (hit, rank, weight) => {
59
+ const penalty = !wantsTests && hit.filePath && TEST_PATH.test(hit.filePath) ? TEST_FACTOR : 1;
60
+ const entry = fused.get(hit.id) ?? { hit, score: 0 };
61
+ entry.score += (weight * penalty) / (RRF_K + rank + 1);
62
+ fused.set(hit.id, entry);
63
+ };
64
+ lexical.forEach((hit, i) => add(hit, i, wl));
65
+ sem.forEach((s, i) => add({
66
+ id: s.id,
67
+ name: s.name,
68
+ normLabel: s.normLabel,
69
+ filePath: s.filePath,
70
+ label: s.label,
71
+ relevance: 0,
72
+ startLine: s.startLine,
73
+ endLine: s.endLine,
74
+ matchStrategy: 'semantic',
75
+ }, i, ws));
76
+ const ceiling = (wl + ws) / (RRF_K + 1);
77
+ const ranked = [...fused.values()]
78
+ .sort((a, b) => b.score - a.score)
79
+ .map(({ hit, score }) => ({ ...hit, relevance: score / ceiling }));
80
+ // An exact name match is what the caller typed; nothing the fusion adds outranks it.
81
+ const lower = q.toLowerCase();
82
+ const exact = ranked.filter((r) => r.name.toLowerCase() === lower);
83
+ const rest = ranked.filter((r) => r.name.toLowerCase() !== lower);
84
+ const final = [...exact, ...rest].slice(0, limit);
85
+ // Keyword search's two best hits stay in the results even when the semantic lane crowds
86
+ // them out (a sentence that contains a real name — "share a meeting" -> shareRoutes —
87
+ // is exactly where a keyword hit is right and the embedding is only roughly so).
88
+ const present = new Set(final.map((r) => r.id));
89
+ const protectedHits = lexical.slice(0, PROTECTED_LEXICAL).filter((h) => !present.has(h.id));
90
+ for (const hit of protectedHits) {
91
+ if (final.length >= limit) {
92
+ if (final.length <= exact.length)
93
+ break; // never evict an exact name match
94
+ final.pop();
95
+ }
96
+ final.push({
97
+ ...(ranked.find((r) => r.id === hit.id) ?? hit),
98
+ relevance: final.at(-1)?.relevance ?? 0,
99
+ });
100
+ }
101
+ return final;
102
+ }
103
+ //# sourceMappingURL=fused-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fused-search.js","sourceRoot":"","sources":["../../../src/search/fused-search.ts"],"names":[],"mappings":"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"}
@@ -30,9 +30,32 @@ import type { RankedResult } from './rrf.js';
30
30
  * wants pure lexical ranking with no heuristic bonuses.
31
31
  */
32
32
  export type RetrievalMode = 'bm25' | 'hybrid';
33
+ /**
34
+ * Which part of the graph a search covers.
35
+ *
36
+ * - `code` — symbols, files, routes and tools.
37
+ * - `docs` — markdown sections, documents and concepts.
38
+ * - `agents` — agent and skill definitions.
39
+ * - `all` — everything, ranked purely by relevance.
40
+ * - `auto` (default) — code first, with documentation filling any slots the
41
+ * code left empty; a query that is plainly about documentation flips that
42
+ * order. Doc sections outnumber code symbols roughly 1:2 in this repo, so
43
+ * without this an abstract task query is answered entirely by headings.
44
+ */
45
+ export type SearchScope = 'code' | 'docs' | 'agents' | 'all' | 'auto';
46
+ export declare const CODE_SCOPE_LABELS: readonly string[];
47
+ export declare const DOC_SCOPE_LABELS: readonly string[];
48
+ export declare const AGENT_SCOPE_LABELS: readonly string[];
49
+ /** True when the query is asking which agent or skill to use. */
50
+ export declare function hasAgentIntent(query: string): boolean;
51
+ /** True when the query is plainly asking about documentation rather than code. */
52
+ export declare function hasDocIntent(query: string): boolean;
33
53
  export interface GraphSearchOptions {
34
54
  limit?: number;
35
- label?: string;
55
+ /** Exact node label (or labels). Overrides `scope`. */
56
+ label?: string | readonly string[];
57
+ /** Part of the graph to search (default: `auto`). */
58
+ scope?: SearchScope;
36
59
  /** Retrieval strategy (default: `hybrid`). */
37
60
  mode?: RetrievalMode;
38
61
  }
@@ -49,7 +72,7 @@ export interface GraphSearchResult {
49
72
  /** Last line of the symbol in its source file (1-based, null if unknown). */
50
73
  endLine: number | null;
51
74
  /** Which retrieval strategy surfaced this row. */
52
- matchStrategy: 'fts' | 'like' | 'fuzzy';
75
+ matchStrategy: 'fts' | 'like' | 'fuzzy' | 'semantic';
53
76
  }
54
77
  /**
55
78
  * Run a lexical search over the graph and return results under the
@@ -68,6 +91,10 @@ export interface GraphSearchResult {
68
91
  * would break the LIKE fallback against a capitalized name.
69
92
  */
70
93
  export declare function searchGraph(db: Database.Database, query: string, options?: GraphSearchOptions): GraphSearchResult[];
94
+ /** Tests restate the code they exercise; they rank below it unless asked for. */
95
+ export declare const TEST_PATH: RegExp;
96
+ export declare const TEST_INTENT: RegExp;
97
+ export declare const TEST_FACTOR = 0.6;
71
98
  export interface BM25QueryOptions {
72
99
  limit?: number;
73
100
  label?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-query.d.ts","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kDAAkD;IAClD,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,EAAE,CAqCrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uIAAuI;IACvI,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yGAAyG;AACzG,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAElD,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,UAAU,EAAE,CAAC,CAYvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,kBAAY,CAAC"}
1
+ {"version":3,"file":"hybrid-query.d.ts","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtE,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAM9C,CAAC;AACF,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAuC,CAAC;AACtF,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAuB,CAAC;AAOxE,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,qDAAqD;IACrD,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kDAAkD;IAClD,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;CACtD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,EAAE,CAyCrB;AASD,iFAAiF;AACjF,eAAO,MAAM,SAAS,QAAuD,CAAC;AAC9E,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,MAAM,CAAC;AA6F/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uIAAuI;IACvI,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,yGAAyG;AACzG,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAElD,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,UAAU,EAAE,CAAC,CAYvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,kBAAY,CAAC"}
@@ -19,6 +19,28 @@
19
19
  * practice (the embeddings table stayed empty) and did a JS cosine full scan.
20
20
  */
21
21
  import { ftsSearch, hybridSearch, relevanceFromFtsRank } from '../storage/fts-store.js';
22
+ import { contentWords, summarySearch } from '../storage/summary-search.js';
23
+ import { SYMBOL_NODE_LABELS } from '../types.js';
24
+ export const CODE_SCOPE_LABELS = [
25
+ ...SYMBOL_NODE_LABELS,
26
+ 'File',
27
+ 'Module',
28
+ 'Route',
29
+ 'Tool',
30
+ ];
31
+ export const DOC_SCOPE_LABELS = ['Section', 'Document', 'Concept'];
32
+ export const AGENT_SCOPE_LABELS = ['Agent', 'Skill'];
33
+ // Whole words in a multi-word question — not `agent` inside `agent-pick` or `AgentSpawn`.
34
+ const AGENT_INTENT = /(?:^|\s)(?:agents?|subagents?|skills?)(?:\s|$)/i;
35
+ const DOC_INTENT = /\b(docs?|documentation|readme|guide|adr|changelog|tutorial|concept|explain(?:s|ed)?)\b/i;
36
+ /** True when the query is asking which agent or skill to use. */
37
+ export function hasAgentIntent(query) {
38
+ return /\s/.test(query.trim()) && AGENT_INTENT.test(query);
39
+ }
40
+ /** True when the query is plainly asking about documentation rather than code. */
41
+ export function hasDocIntent(query) {
42
+ return DOC_INTENT.test(query);
43
+ }
22
44
  /**
23
45
  * Run a lexical search over the graph and return results under the
24
46
  * higher-is-better score convention.
@@ -36,12 +58,101 @@ import { ftsSearch, hybridSearch, relevanceFromFtsRank } from '../storage/fts-st
36
58
  * would break the LIKE fallback against a capitalized name.
37
59
  */
38
60
  export function searchGraph(db, query, options = {}) {
39
- const { limit = 20, label, mode = 'hybrid' } = options;
61
+ const { limit = 20, label, mode = 'hybrid', scope = 'auto' } = options;
40
62
  if (limit <= 0)
41
63
  return [];
42
64
  const normalizedQuery = (query ?? '').trim();
43
65
  if (!normalizedQuery)
44
66
  return [];
67
+ if (label || scope === 'all')
68
+ return searchLabels(db, normalizedQuery, limit, mode, label);
69
+ if (scope === 'code')
70
+ return searchLabels(db, normalizedQuery, limit, mode, CODE_SCOPE_LABELS);
71
+ if (scope === 'docs')
72
+ return searchLabels(db, normalizedQuery, limit, mode, DOC_SCOPE_LABELS);
73
+ if (scope === 'agents')
74
+ return searchLabels(db, normalizedQuery, limit, mode, AGENT_SCOPE_LABELS);
75
+ const order = hasDocIntent(normalizedQuery)
76
+ ? [DOC_SCOPE_LABELS, CODE_SCOPE_LABELS, AGENT_SCOPE_LABELS]
77
+ : [CODE_SCOPE_LABELS, DOC_SCOPE_LABELS, AGENT_SCOPE_LABELS];
78
+ const results = [];
79
+ const seen = new Set();
80
+ // A question about agents or skills gets up to half the slots first; the
81
+ // code that matches it (an agent *picker*, say) keeps the rest.
82
+ if (hasAgentIntent(normalizedQuery)) {
83
+ for (const r of searchLabels(db, normalizedQuery, Math.ceil(limit / 2), mode, AGENT_SCOPE_LABELS)) {
84
+ results.push(r);
85
+ seen.add(r.id);
86
+ }
87
+ }
88
+ for (const labels of order) {
89
+ if (results.length >= limit)
90
+ break;
91
+ for (const r of searchLabels(db, normalizedQuery, limit - results.length, mode, labels)) {
92
+ if (seen.has(r.id))
93
+ continue;
94
+ results.push(r);
95
+ seen.add(r.id);
96
+ }
97
+ }
98
+ return results.slice(0, limit);
99
+ }
100
+ /**
101
+ * Summary hits sit below an exact lexical hit (whose relevance can exceed 1)
102
+ * but above weak fuzzy ones; a node found by both signals gets the summary
103
+ * score added, since two independent signals agreeing is the strongest evidence.
104
+ */
105
+ const SUMMARY_WEIGHT = 0.8;
106
+ const LEXICAL_ONLY_FACTOR = 0.25;
107
+ /** Tests restate the code they exercise; they rank below it unless asked for. */
108
+ export const TEST_PATH = /(\.test\.|\.spec\.|__tests__|__mocks__|\/tests?\/)/;
109
+ export const TEST_INTENT = /\b(tests?|specs?|mocks?|fixtures?)\b/i;
110
+ export const TEST_FACTOR = 0.6;
111
+ function searchLabels(db, normalizedQuery, limit, mode, label) {
112
+ const lexical = searchLexical(db, normalizedQuery, limit, mode, label);
113
+ // Documents carry a body excerpt in their summary, so a single word is a
114
+ // meaningful query there (#698); for code a bare word is the lexical path's job.
115
+ const described = summarySearch(db, normalizedQuery, limit * 2, label, label === DOC_SCOPE_LABELS ? 1 : 2);
116
+ if (described.length === 0)
117
+ return lexical;
118
+ // A multi-word question is not an identifier: a lexical-only hit is then
119
+ // usually a substring accident ("handle" inside handleTasksStatus), so it
120
+ // counts for less than a hit the descriptions also support.
121
+ if (contentWords(normalizedQuery).length >= 2) {
122
+ const supported = new Set(described.map((r) => r.id));
123
+ for (const r of lexical)
124
+ if (!supported.has(r.id))
125
+ r.relevance *= LEXICAL_ONLY_FACTOR;
126
+ }
127
+ const byId = new Map(lexical.map((r) => [r.id, r]));
128
+ for (const row of described) {
129
+ const score = SUMMARY_WEIGHT * relevanceFromFtsRank(row.rank);
130
+ const hit = byId.get(row.id);
131
+ if (hit) {
132
+ hit.relevance += score;
133
+ }
134
+ else {
135
+ byId.set(row.id, {
136
+ id: row.id,
137
+ name: row.name,
138
+ normLabel: row.normLabel,
139
+ filePath: row.filePath,
140
+ label: row.label,
141
+ relevance: score,
142
+ startLine: row.startLine,
143
+ endLine: row.endLine,
144
+ matchStrategy: 'fts',
145
+ });
146
+ }
147
+ }
148
+ const wantsTests = TEST_INTENT.test(normalizedQuery);
149
+ for (const r of byId.values()) {
150
+ if (!wantsTests && r.filePath && TEST_PATH.test(r.filePath))
151
+ r.relevance *= TEST_FACTOR;
152
+ }
153
+ return [...byId.values()].sort((a, b) => b.relevance - a.relevance).slice(0, limit);
154
+ }
155
+ function searchLexical(db, normalizedQuery, limit, mode, label) {
45
156
  if (mode === 'bm25') {
46
157
  // Over-fetch a little: FTS5's own ordering is what we keep, but a wider
47
158
  // window gives the caller's label filter something to bite on.
@@ -81,7 +192,7 @@ export function searchGraph(db, query, options = {}) {
81
192
  */
82
193
  export async function bm25Query(db, query, options = {}) {
83
194
  const { limit = 20, label } = options;
84
- return searchGraph(db, query, { limit, label, mode: 'bm25' }).map((r) => ({
195
+ return searchGraph(db, query, { limit, label, mode: 'bm25', scope: 'all' }).map((r) => ({
85
196
  id: r.id,
86
197
  name: r.name,
87
198
  normLabel: r.normLabel,
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-query.js","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hybrid-query.js","sourceRoot":"","sources":["../../../src/search/hybrid-query.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKzF,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAoJD,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA4HjF"}
1
+ {"version":3,"file":"git-staleness.d.ts","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAKzF,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,6DAA6D;IAC7D,KAAK,EAAE,mBAAmB,CAAC;IAC3B,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,qEAAqE;IACrE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,wDAAwD;IACxD,eAAe,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,eAAe,EAAE,OAAO,CAAC;CAC1B;AAqJD,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA6HjF"}
@@ -53,6 +53,7 @@ function checkDirtyWorktree(repoPath) {
53
53
  cwd: repoPath,
54
54
  encoding: 'utf8',
55
55
  maxBuffer: 8 * 1024 * 1024,
56
+ env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' }, // #681: never take .git/index.lock
56
57
  stdio: ['ignore', 'pipe', 'pipe'], // #371
57
58
  });
58
59
  // Porcelain v1 lines are `XY <path>`; ignored files are excluded by default.
@@ -208,6 +209,7 @@ export function checkStaleness(db, repoPath) {
208
209
  const diff = execSync(`git diff --name-only ${indexedCommitFull}..HEAD`, {
209
210
  cwd: repoPath,
210
211
  encoding: 'utf8',
212
+ env: { ...process.env, GIT_OPTIONAL_LOCKS: '0' }, // #681
211
213
  });
212
214
  changedSince = diff.trim().split('\n').filter(Boolean);
213
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-staleness.js","sourceRoot":"","sources":["../../../src/staleness/git-staleness.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAmBtC,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,WAAW,CAwB/E;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE7C;AAoCD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAgCtF"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAoBtC,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,WAAW,CAwB/E;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAE7C;AAqCD,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAgCtF"}
@@ -2,7 +2,7 @@ import { existsSync, mkdirSync, renameSync, unlinkSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
3
  import Database from 'better-sqlite3';
4
4
  import { MonographError } from '../types.js';
5
- import { CREATE_AGENT_INTERACTIONS, CREATE_AGENT_INTERACTIONS_IDX, CREATE_AGENT_INTERACTIONS_ORG_IDX, CREATE_AGENT_INTERACTIONS_TS_IDX, CREATE_AGENT_INTERACTIONS_TYPE_IDX, CREATE_COMMUNITIES, CREATE_EDGES, CREATE_EMBEDDINGS, CREATE_INDEX_META, CREATE_INDEXES, CREATE_NODES, CREATE_NODES_FTS, CREATE_WIKI_PAGES, FTS_SYNC_TRIGGERS, } from './schema.js';
5
+ import { CREATE_AGENT_INTERACTIONS, CREATE_AGENT_INTERACTIONS_IDX, CREATE_AGENT_INTERACTIONS_ORG_IDX, CREATE_AGENT_INTERACTIONS_TS_IDX, CREATE_AGENT_INTERACTIONS_TYPE_IDX, CREATE_COMMUNITIES, CREATE_EDGES, CREATE_INDEX_META, CREATE_INDEXES, CREATE_NODE_EMBEDDINGS, CREATE_NODE_SUMMARIES_FTS, CREATE_NODES, CREATE_NODES_FTS, CREATE_WIKI_PAGES, FTS_SYNC_TRIGGERS, } from './schema.js';
6
6
  export function openDb(dbPath, options = {}) {
7
7
  if (options.fileMustExist && !existsSync(dbPath)) {
8
8
  throw new MonographError(`Monograph database does not exist at ${dbPath}. Run monograph build first.`);
@@ -36,10 +36,11 @@ function applyMigrations(db) {
36
36
  db.exec(CREATE_COMMUNITIES);
37
37
  db.exec(CREATE_INDEX_META);
38
38
  db.exec(CREATE_NODES_FTS);
39
+ db.exec(CREATE_NODE_SUMMARIES_FTS);
40
+ db.exec(CREATE_NODE_EMBEDDINGS);
39
41
  for (const idx of CREATE_INDEXES)
40
42
  db.exec(idx);
41
43
  db.exec(FTS_SYNC_TRIGGERS);
42
- db.exec(CREATE_EMBEDDINGS);
43
44
  db.exec(CREATE_WIKI_PAGES);
44
45
  db.exec(CREATE_AGENT_INTERACTIONS);
45
46
  db.exec(CREATE_AGENT_INTERACTIONS_IDX);
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAiBrB,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,OAAO,GAAkB,EAAE;IAChE,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,cAAc,CACtB,wCAAwC,MAAM,8BAA8B,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/B,0EAA0E;QAC1E,8EAA8E;QAC9E,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClC,6EAA6E;QAC7E,+EAA+E;QAC/E,4EAA4E;QAC5E,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACrC,eAAe,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,8BAA8B,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAe;IACrC,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,EAAe;IACtC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtB,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,cAAc;QAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACnC,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACvC,EAAE,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC3C,EAAE,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC5C,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAE1C,8DAA8D;IAC9D,EAAE,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACnF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,GAAG,EAEzE,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,mCAAmC;QACnC,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAkC;IAC9E,MAAM,OAAO,GAAG,GAAG,MAAM,MAAM,CAAC;IAChC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,CAAC;QACZ,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,4EAA4E;QAC5E,6EAA6E;QAC7E,yEAAyE;QACzE,4DAA4D;QAC5D,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,UAAU,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/db.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type Database from 'better-sqlite3';
2
- import { type FtsResult } from './fts-store-search.js';
2
+ import { type FtsResult, type LabelFilter } from './fts-store-search.js';
3
3
  export interface HybridSearchResult extends FtsResult {
4
4
  combinedScore: number;
5
5
  matchStrategy: 'fts' | 'like' | 'fuzzy';
@@ -13,5 +13,5 @@ export interface HybridSearchResult extends FtsResult {
13
13
  * Results are deduped by id (highest combinedScore wins), re-ranked, and
14
14
  * trimmed to `limit`. The existing `ftsSearch` is left unchanged.
15
15
  */
16
- export declare function hybridSearch(db: Database.Database, query: string, limit: number, label?: string): HybridSearchResult[];
16
+ export declare function hybridSearch(db: Database.Database, query: string, limit: number, label?: LabelFilter): HybridSearchResult[];
17
17
  //# sourceMappingURL=fts-store-hybrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fts-store-hybrid.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,KAAK,SAAS,EAAmC,MAAM,uBAAuB,CAAC;AAExF,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,kBAAkB,EAAE,CA2EtB"}
1
+ {"version":3,"file":"fts-store-hybrid.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,WAAW,EAGjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAyCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,WAAW,GAClB,kBAAkB,EAAE,CA4EtB"}
@@ -1,7 +1,7 @@
1
1
  // ── Hybrid search ─────────────────────────────────────────────────────────────
2
2
  // File-size sweep: split out of fts-store.ts.
3
3
  import { NOT_ANONYMOUS_CLOSURE_SQL } from './anonymous-closure.js';
4
- import { ftsSearch, relevanceFromFtsRank } from './fts-store-search.js';
4
+ import { ftsSearch, labelClause, relevanceFromFtsRank, } from './fts-store-search.js';
5
5
  /**
6
6
  * Computes an in-memory fuzzy sequence score for `query` against `name`.
7
7
  * Walks through query chars left-to-right, finding each in `name` sequentially.
@@ -88,8 +88,9 @@ export function hybridSearch(db, query, limit, label) {
88
88
  `;
89
89
  const likeParams = [likePattern, likePattern];
90
90
  if (label) {
91
- likeSql += ' AND n.label = ?';
92
- likeParams.push(label);
91
+ const lc = labelClause(label);
92
+ likeSql += lc.sql;
93
+ likeParams.push(...lc.params);
93
94
  }
94
95
  likeSql += ' LIMIT ?';
95
96
  likeParams.push(limit * 2);
@@ -1 +1 @@
1
- {"version":3,"file":"fts-store-hybrid.js","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fts-store-hybrid.js","sourceRoot":"","sources":["../../../src/storage/fts-store-hybrid.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,18 @@ export interface FtsResult {
25
25
  * additive fuzzy/node-type bonuses without one term swamping the others.
26
26
  */
27
27
  export declare function relevanceFromFtsRank(rank: number): number;
28
- export declare function ftsSearch(db: Database.Database, query: string, limit: number, label?: string): FtsResult[];
28
+ /** A single node label, or any of several (e.g. every code-symbol label). */
29
+ export type LabelFilter = string | readonly string[];
30
+ /** SQL fragment + params restricting `n.label`; expects the `n` alias. */
31
+ export declare function labelClause(label: LabelFilter): {
32
+ sql: string;
33
+ params: string[];
34
+ };
35
+ /**
36
+ * Keyword search over node names and file paths (FTS5 trigram index), best
37
+ * match first. A plain-language query that matches nothing is retried on the
38
+ * identifier-like words extracted from it, and a short or malformed query falls
39
+ * back to a substring (LIKE) match, so a search never fails on its syntax.
40
+ */
41
+ export declare function ftsSearch(db: Database.Database, query: string, limit: number, label?: LabelFilter): FtsResult[];
29
42
  //# sourceMappingURL=fts-store-search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fts-store-search.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAgBD,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,SAAS,EAAE,CAgKb"}
1
+ {"version":3,"file":"fts-store-search.d.ts","sourceRoot":"","sources":["../../../src/storage/fts-store-search.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,6EAA6E;AAC7E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;AAErD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAIjF;AAgBD;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,WAAW,GAClB,SAAS,EAAE,CAoKb"}
@@ -18,6 +18,13 @@ export function relevanceFromFtsRank(rank) {
18
18
  const magnitude = Math.abs(rank);
19
19
  return magnitude / (1 + magnitude);
20
20
  }
21
+ /** SQL fragment + params restricting `n.label`; expects the `n` alias. */
22
+ export function labelClause(label) {
23
+ const labels = typeof label === 'string' ? [label] : [...label];
24
+ if (labels.length === 1)
25
+ return { sql: ' AND n.label = ?', params: labels };
26
+ return { sql: ` AND n.label IN (${labels.map(() => '?').join(',')})`, params: labels };
27
+ }
21
28
  /**
22
29
  * Quote a single FTS5 search term as a string literal when it contains characters
23
30
  * that would otherwise be parsed as FTS5 syntax (quotes, parens, boolean keywords
@@ -32,6 +39,12 @@ function quoteFtsTerm(term) {
32
39
  const escaped = term.replace(/"/g, '""');
33
40
  return `"${escaped}"`;
34
41
  }
42
+ /**
43
+ * Keyword search over node names and file paths (FTS5 trigram index), best
44
+ * match first. A plain-language query that matches nothing is retried on the
45
+ * identifier-like words extracted from it, and a short or malformed query falls
46
+ * back to a substring (LIKE) match, so a search never fails on its syntax.
47
+ */
35
48
  export function ftsSearch(db, query, limit, label) {
36
49
  // Sanitize: strip only characters that break FTS5 MATCH syntax (* still stripped,
37
50
  // trigram handles substring natively; " is now preserved since trigram doesn't need it removed)
@@ -51,8 +64,9 @@ export function ftsSearch(db, query, limit, label) {
51
64
  `;
52
65
  const matchParams = [ftsQuery];
53
66
  if (label) {
54
- matchSql += ' AND n.label = ?';
55
- matchParams.push(label);
67
+ const lc = labelClause(label);
68
+ matchSql += lc.sql;
69
+ matchParams.push(...lc.params);
56
70
  }
57
71
  matchSql += ' ORDER BY nodes_fts.rank LIMIT ?';
58
72
  matchParams.push(limit);
@@ -79,8 +93,9 @@ export function ftsSearch(db, query, limit, label) {
79
93
  `;
80
94
  const termParams = [termFtsQuery];
81
95
  if (label) {
82
- termSql += ' AND n.label = ?';
83
- termParams.push(label);
96
+ const lc = labelClause(label);
97
+ termSql += lc.sql;
98
+ termParams.push(...lc.params);
84
99
  }
85
100
  termSql += ' ORDER BY nodes_fts.rank LIMIT ?';
86
101
  termParams.push(limit * 2);
@@ -107,8 +122,9 @@ export function ftsSearch(db, query, limit, label) {
107
122
  `;
108
123
  const termLikeParams = [pat, pat];
109
124
  if (label) {
110
- termLikeSql += ' AND n.label = ?';
111
- termLikeParams.push(label);
125
+ const lc = labelClause(label);
126
+ termLikeSql += lc.sql;
127
+ termLikeParams.push(...lc.params);
112
128
  }
113
129
  termLikeSql += ' LIMIT ?';
114
130
  termLikeParams.push(limit);
@@ -150,8 +166,9 @@ export function ftsSearch(db, query, limit, label) {
150
166
  }
151
167
  likeSql += `) AND ${NOT_ANONYMOUS_CLOSURE_SQL}`;
152
168
  if (label) {
153
- likeSql += ' AND n.label = ?';
154
- likeParams.push(label);
169
+ const lc = labelClause(label);
170
+ likeSql += lc.sql;
171
+ likeParams.push(...lc.params);
155
172
  }
156
173
  likeSql += ' LIMIT ?';
157
174
  likeParams.push(limit);