@tienne/gestalt 0.76.1 → 0.77.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 (55) hide show
  1. package/CLAUDE.md +4 -3
  2. package/dist/package.json +1 -1
  3. package/dist/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +2 -2
  4. package/dist/plugin/role-agents/code-review-responder/AGENT.md +1 -1
  5. package/dist/plugin/role-agents/code-review-writer/AGENT.md +3 -2
  6. package/dist/plugin/role-agents/explainer/AGENT.md +1 -1
  7. package/dist/plugin/role-agents/explainer/references/audience.md +1 -1
  8. package/dist/plugin/skills/blast-radius/SKILL.md +58 -9
  9. package/dist/plugin/skills/build-graph/SKILL.md +28 -3
  10. package/dist/plugin/skills/diff-radius/SKILL.md +44 -6
  11. package/dist/src/code-graph/blast-radius.d.ts +3 -3
  12. package/dist/src/code-graph/blast-radius.d.ts.map +1 -1
  13. package/dist/src/code-graph/blast-radius.js +111 -6
  14. package/dist/src/code-graph/blast-radius.js.map +1 -1
  15. package/dist/src/code-graph/cochange.d.ts +117 -0
  16. package/dist/src/code-graph/cochange.d.ts.map +1 -0
  17. package/dist/src/code-graph/cochange.js +444 -0
  18. package/dist/src/code-graph/cochange.js.map +1 -0
  19. package/dist/src/code-graph/engine.d.ts +13 -1
  20. package/dist/src/code-graph/engine.d.ts.map +1 -1
  21. package/dist/src/code-graph/engine.js +58 -4
  22. package/dist/src/code-graph/engine.js.map +1 -1
  23. package/dist/src/code-graph/index.d.ts +5 -2
  24. package/dist/src/code-graph/index.d.ts.map +1 -1
  25. package/dist/src/code-graph/index.js +2 -1
  26. package/dist/src/code-graph/index.js.map +1 -1
  27. package/dist/src/code-graph/storage.d.ts +93 -1
  28. package/dist/src/code-graph/storage.d.ts.map +1 -1
  29. package/dist/src/code-graph/storage.js +213 -0
  30. package/dist/src/code-graph/storage.js.map +1 -1
  31. package/dist/src/code-graph/types.d.ts +141 -0
  32. package/dist/src/code-graph/types.d.ts.map +1 -1
  33. package/dist/src/mcp/schemas.d.ts +12 -3
  34. package/dist/src/mcp/schemas.d.ts.map +1 -1
  35. package/dist/src/mcp/schemas.js +26 -3
  36. package/dist/src/mcp/schemas.js.map +1 -1
  37. package/dist/src/mcp/server.d.ts.map +1 -1
  38. package/dist/src/mcp/server.js +10 -4
  39. package/dist/src/mcp/server.js.map +1 -1
  40. package/dist/src/mcp/tools/code-graph-passthrough.d.ts +4 -1
  41. package/dist/src/mcp/tools/code-graph-passthrough.d.ts.map +1 -1
  42. package/dist/src/mcp/tools/code-graph-passthrough.js +23 -0
  43. package/dist/src/mcp/tools/code-graph-passthrough.js.map +1 -1
  44. package/package.json +1 -1
  45. package/plugin/.codex-plugin/plugin.json +1 -1
  46. package/plugin/.mcp.json +1 -1
  47. package/plugin/mcp.json +1 -1
  48. package/plugin/role-agents/_shared/references/ai-tell-quick-rules.md +2 -2
  49. package/plugin/role-agents/code-review-responder/AGENT.md +1 -1
  50. package/plugin/role-agents/code-review-writer/AGENT.md +3 -2
  51. package/plugin/role-agents/explainer/AGENT.md +1 -1
  52. package/plugin/role-agents/explainer/references/audience.md +1 -1
  53. package/plugin/skills/blast-radius/SKILL.md +58 -9
  54. package/plugin/skills/build-graph/SKILL.md +28 -3
  55. package/plugin/skills/diff-radius/SKILL.md +44 -6
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AA+CD,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAqC;IAEvD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW;IA+G7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,iBAAiB;IAuB/E;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,iBAAiB;IA8B7E;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IA6D3E;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAMvC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAInC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IASxC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA0BhE;;;OAGG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAuCzF;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BnF;;;OAGG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC;IAyEhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,kBAAkB;CAiB3B;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,cAAc,EAEd,cAAc,EAEf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AA+CD,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAqC;IAEvD,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAQhB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW;IA8H7D;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,kBAAuB,GAAG,iBAAiB;IAyB/E;;;;;OAKG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,iBAAiB;IA+B7E;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,cAAc;IAK3E;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IA6D3E;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAMvC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAInC;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IASxC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA0BhE;;;OAGG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAuCzF;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4BnF;;;OAGG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC;IAyEhC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,kBAAkB;CAiB3B;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -5,6 +5,7 @@ import { execSync } from 'node:child_process';
5
5
  import { CodeGraphStore } from './storage.js';
6
6
  import { computeBlastRadius } from './blast-radius.js';
7
7
  import { getPluginForFile } from './plugins/index.js';
8
+ import { syncCoChange, queryCoChange, buildCoChangeLookup } from './cochange.js';
8
9
  import { NodeKind } from './types.js';
9
10
  import { logger } from '../core/logger.js';
10
11
  function getFilesRecursively(repoRoot, excludePatterns, include) {
@@ -145,6 +146,19 @@ export class CodeGraphEngine {
145
146
  files: skippedFiles.slice(0, 10).map((f) => f.filePath),
146
147
  });
147
148
  }
149
+ // git 이력 신호는 노드나 엣지와 독립이다. 실패해도 그래프 빌드까지
150
+ // 무너뜨리면 안 되므로 여기서 가둔다.
151
+ let coChange;
152
+ try {
153
+ coChange = syncCoChange(store, repoRoot, { mode });
154
+ }
155
+ catch (e) {
156
+ logger.warn('code_graph.cochange_failed', {
157
+ module: 'code-graph/engine',
158
+ repoRoot,
159
+ reason: e instanceof Error ? e.message : String(e),
160
+ });
161
+ }
148
162
  const timeTakenMs = Date.now() - start;
149
163
  logger.info('code_graph.build_completed', {
150
164
  module: 'code-graph/engine',
@@ -152,6 +166,7 @@ export class CodeGraphEngine {
152
166
  nodesBuilt,
153
167
  edgesBuilt,
154
168
  skippedCount: skippedFiles.length,
169
+ coChangePairs: coChange?.pairs,
155
170
  durationMs: timeTakenMs,
156
171
  });
157
172
  return {
@@ -160,6 +175,7 @@ export class CodeGraphEngine {
160
175
  timeTakenMs,
161
176
  installedHook: false, // Hook installation handled separately via GitHookManager
162
177
  skippedFiles,
178
+ coChange,
163
179
  };
164
180
  }
165
181
  /**
@@ -168,20 +184,22 @@ export class CodeGraphEngine {
168
184
  */
169
185
  blastRadius(repoRoot, opts = {}) {
170
186
  const store = this.getStore(repoRoot);
171
- const { changedFiles, base = 'HEAD~1', maxDepth = 2 } = opts;
187
+ const { changedFiles, base = 'HEAD~1', maxDepth = 2, coChange } = opts;
172
188
  let files = changedFiles;
173
189
  if (!files || files.length === 0) {
174
190
  files = this.getGitChangedFiles(repoRoot, base);
175
191
  }
176
192
  // Convert to absolute paths
177
193
  const absoluteFiles = files.map((f) => (f.startsWith('/') ? f : resolve(repoRoot, f)));
178
- const result = computeBlastRadius(store, absoluteFiles, maxDepth);
194
+ const lookup = this.safeCoChangeLookup(store, repoRoot, absoluteFiles, coChange);
195
+ const result = computeBlastRadius(store, absoluteFiles, maxDepth, lookup);
179
196
  logger.info('code_graph.blast_radius_completed', {
180
197
  module: 'code-graph/engine',
181
198
  repoRoot,
182
199
  base,
183
200
  changedFiles: absoluteFiles.length,
184
201
  riskScore: result.riskScore,
202
+ coChangeAvailable: result.coChangeAvailable,
185
203
  });
186
204
  return result;
187
205
  }
@@ -192,7 +210,7 @@ export class CodeGraphEngine {
192
210
  * - all (default): git diff HEAD --name-only
193
211
  */
194
212
  diffRadius(repoRoot, opts = {}) {
195
- const { mode = 'all', maxDepth = 2 } = opts;
213
+ const { mode = 'all', maxDepth = 2, coChange } = opts;
196
214
  const store = this.getStore(repoRoot);
197
215
  const gitCmd = mode === 'staged'
198
216
  ? 'git diff --cached --name-only'
@@ -215,7 +233,43 @@ export class CodeGraphEngine {
215
233
  catch {
216
234
  files = [];
217
235
  }
218
- return computeBlastRadius(store, files, maxDepth);
236
+ const lookup = this.safeCoChangeLookup(store, repoRoot, files, coChange);
237
+ return computeBlastRadius(store, files, maxDepth, lookup);
238
+ }
239
+ /**
240
+ * git 이력에서 함께 바뀐 파일을 조회한다.
241
+ * target을 주면 그 파일의 이웃, 생략하면 상위 페어 전역 목록.
242
+ */
243
+ coChange(repoRoot, opts = {}) {
244
+ const store = this.getStore(repoRoot);
245
+ return queryCoChange(store, repoRoot, opts);
246
+ }
247
+ /**
248
+ * co-change 조회 실패가 blast-radius 전체를 막지 않게 가둔다.
249
+ * 실패는 undefined가 아니라 available:false로 내려보내 "수집 안 됨"이
250
+ * "함께 바뀐 게 없음"으로 읽히지 않게 한다.
251
+ */
252
+ safeCoChangeLookup(store, repoRoot, seeds, tuning = {}) {
253
+ try {
254
+ return buildCoChangeLookup(store, repoRoot, seeds, tuning);
255
+ }
256
+ catch (e) {
257
+ const reason = e instanceof Error ? e.message : String(e);
258
+ logger.warn('code_graph.cochange_lookup_failed', {
259
+ module: 'code-graph/engine',
260
+ repoRoot,
261
+ reason,
262
+ });
263
+ return {
264
+ available: false,
265
+ reason,
266
+ pairsInDb: 0,
267
+ neighbors: [],
268
+ totalMatched: 0,
269
+ truncated: false,
270
+ matchedCapped: false,
271
+ };
272
+ }
219
273
  }
220
274
  /**
221
275
  * Query the graph with a specific pattern.
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  export { CodeGraphEngine, codeGraphEngine } from './engine.js';
2
- export { CodeGraphStore } from './storage.js';
2
+ export { CodeGraphStore, MAX_MATCHED_ROWS } from './storage.js';
3
+ export type { CoChangeScan, CoChangeNeighborRow, CoChangePairRow } from './storage.js';
3
4
  export { computeBlastRadius } from './blast-radius.js';
5
+ export { syncCoChange, queryCoChange, buildCoChangeLookup, parseGitLog, countPairs, scoreNeighbor, MAX_FILES_PER_COMMIT, MIN_FILES_PER_COMMIT, MIN_PAIR_COUNT, DEFAULT_MIN_CONFIDENCE, DEFAULT_NEIGHBOR_LIMIT, DEFAULT_PAIR_LIMIT, CONFIDENCE_DECIMALS, LIFT_DECIMALS, } from './cochange.js';
6
+ export type { CoChangeQueryOptions, CoChangeSyncOptions, CommitRecord } from './cochange.js';
4
7
  export { getPluginForFile, pluginRegistry } from './plugins/index.js';
5
- export type { CodeGraphNode, CodeGraphEdge, BlastRadiusResult, BlastRadiusNode, BlastRadiusOptions, BuildOptions, BuildResult, QueryPattern, QueryResult, CodeGraphStats, AnalyzerPlugin, ParseResult, } from './types.js';
8
+ export type { CodeGraphNode, CodeGraphEdge, BlastRadiusResult, BlastRadiusNode, BlastRadiusOptions, BuildOptions, BuildResult, QueryPattern, QueryResult, CodeGraphStats, AnalyzerPlugin, ParseResult, ImpactOrigin, RankedImpactFile, CoChangeNeighbor, CoChangePair, CoChangeResult, CoChangeLookup, CoChangeBuildSummary, CoChangeMeta, CoChangeTuning, } from './types.js';
6
9
  export { NodeKind, EdgeKind } from './types.js';
7
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/code-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { CodeGraphEngine, codeGraphEngine } from './engine.js';
2
- export { CodeGraphStore } from './storage.js';
2
+ export { CodeGraphStore, MAX_MATCHED_ROWS } from './storage.js';
3
3
  export { computeBlastRadius } from './blast-radius.js';
4
+ export { syncCoChange, queryCoChange, buildCoChangeLookup, parseGitLog, countPairs, scoreNeighbor, MAX_FILES_PER_COMMIT, MIN_FILES_PER_COMMIT, MIN_PAIR_COUNT, DEFAULT_MIN_CONFIDENCE, DEFAULT_NEIGHBOR_LIMIT, DEFAULT_PAIR_LIMIT, CONFIDENCE_DECIMALS, LIFT_DECIMALS, } from './cochange.js';
4
5
  export { getPluginForFile, pluginRegistry } from './plugins/index.js';
5
6
  export { NodeKind, EdgeKind } from './types.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/code-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAetE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/code-graph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAwBtE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -1,5 +1,76 @@
1
- import type { CodeGraphNode, CodeGraphEdge, CodeGraphStats } from './types.js';
1
+ import type { CodeGraphNode, CodeGraphEdge, CodeGraphStats, CoChangeMeta } from './types.js';
2
2
  import type { CodeNodeEmbedding } from './embedding-provider.js';
3
+ export interface CoChangeNeighborRow {
4
+ other: string;
5
+ pairCount: number;
6
+ soloOther: number;
7
+ }
8
+ export interface CoChangePairRow {
9
+ fileA: string;
10
+ fileB: string;
11
+ pairCount: number;
12
+ soloA: number;
13
+ soloB: number;
14
+ }
15
+ /**
16
+ * 임계를 통과한 행의 절대 천장. 두 임계는 외부 입력이고 둘 다 0이 허용되므로
17
+ * 임계만으로는 조회가 읽는 행이 안 막힌다. 출력 `limit`은 랭킹을 다 세운
18
+ * 뒤에 걸려서 읽는 행과 워킹트리 stat 팬아웃을 못 막는다. 그 자리를 메운다.
19
+ *
20
+ * 10,000인 근거는 셋이다.
21
+ * 1. 정상 질의에 절대 안 걸린다. 이 레포는 임계를 둘 다 0으로 내려 전량을
22
+ * 떠도 4,597행이라 두 배 넘게 남는다 (`c927188` 기준 — 커밋이 쌓이면
23
+ * 함께 움직이는 스냅숏이다)
24
+ * 2. 출력 상한(`limit` 최대 500)의 20배다. 천장이 사용자가 보는 목록을
25
+ * 결정하는 자리가 되면 안 된다
26
+ * 3. 천장에 걸려도 동기 stat 호출 수가 유한하다. 호출은 천장을 통과한 행에만
27
+ * 붙고 전역 경로는 페어당 파일이 둘이라 최악이 천장의 두 배다. 행 수가
28
+ * 아니라 천장이 이 팬아웃을 묶는다는 건 테스트가 지킨다
29
+ *
30
+ * 천장에 걸리면 접두사 보장이 깨지고 `totalMatched`가 다시 하한이 된다.
31
+ * 그래서 `capped`로 따로 알린다 — 출력 `limit`에 잘린 것과 사유가 다르다.
32
+ */
33
+ export declare const MAX_MATCHED_ROWS = 10000;
34
+ /**
35
+ * 질의문을 상수로 뽑아둔다. `EXPLAIN QUERY PLAN` 테스트가 이 문자열을 그대로
36
+ * 설명해야 실제로 도는 질의의 계획을 고정하는 것이 된다. 테스트가 SQL을
37
+ * 베껴 쓰면 베낀 쪽만 검사하게 된다.
38
+ *
39
+ * 두 질의는 `pair_count` 범위와 `file_a`/`file_b` 동등 비교로 인덱스를 탄다.
40
+ * 인덱스를 건드리면 계획이 조용히 전체 스캔으로 떨어질 수 있어 테스트로 박았다.
41
+ */
42
+ export declare const CO_CHANGE_NEIGHBORS_SQL: string;
43
+ export declare const CO_CHANGE_PAIRS_SQL: string;
44
+ /**
45
+ * `capped`는 천장에 걸려 `rows`가 임계 통과분 전부가 아니라는 뜻이다.
46
+ * 개수를 돌려받는 쪽이 "전부"인지 "일부"인지 구분 못 하면 하한을 정확한
47
+ * 수로 보고하게 된다.
48
+ */
49
+ export interface CoChangeScan<Row> {
50
+ rows: Row[];
51
+ capped: boolean;
52
+ }
53
+ export interface CoChangeMergeInput {
54
+ pairs: {
55
+ fileA: string;
56
+ fileB: string;
57
+ count: number;
58
+ }[];
59
+ solos: {
60
+ filePath: string;
61
+ count: number;
62
+ }[];
63
+ meta: {
64
+ headSha: string;
65
+ commitsUsed: number;
66
+ commitsScanned: number;
67
+ maxFilesPerCommit: number;
68
+ /** 수집 임계가 아니다. 빌드 시점의 조회 기본값을 기록만 한다 */
69
+ defaultMinPairCount: number;
70
+ };
71
+ /** true면 세 테이블을 비우고 새로 쓴다 (전량 재수집). false면 카운터를 더한다 */
72
+ reset: boolean;
73
+ }
3
74
  export declare class CodeGraphStore {
4
75
  private db;
5
76
  constructor(dbPath: string);
@@ -26,6 +97,27 @@ export declare class CodeGraphStore {
26
97
  getAllEmbeddings(): CodeNodeEmbedding[];
27
98
  deleteEmbedding(nodeId: string): void;
28
99
  deleteEmbeddingsByFile(filePath: string): void;
100
+ mergeCoChange(input: CoChangeMergeInput): void;
101
+ getCoChangeMeta(): CoChangeMeta | null;
102
+ countCoChangePairs(): number;
103
+ getCoChangeSolo(filePath: string): number;
104
+ /**
105
+ * 무방향 페어라 file_a/file_b 양쪽을 합쳐야 한 파일의 이웃이 전부 나온다.
106
+ *
107
+ * 임계를 통과한 행을 전부 돌려준다. 점수순 개수 창이 없는 게 의도다 — 랭킹
108
+ * 키가 confidence × lift라 `pair_count` 순으로 먼저 자르면 점수 상위가 창
109
+ * 밖으로 빠진다. 대신 두 임계를 질의로 내려 호출부가 버릴 행을 애초에 안
110
+ * 뜬다. 기본 임계에서 seed당 22행, 임계를 전부 0으로 내려도 133행이다
111
+ * (`c927188` 기준 — 커밋이 쌓이면 함께 움직이는 스냅숏이다).
112
+ *
113
+ * `maxRows`는 그 위에 얹은 절대 천장이라 성격이 다르다. 임계가 0이어도
114
+ * 읽는 행이 유한하도록 막는 자리고 정상 질의에는 안 걸린다. 걸리면
115
+ * `capped`로 알린다 — 조용히 자르면 하한이 정확한 수로 둔갑한다.
116
+ * 천장이 SQL에 있어야 호출부의 워킹트리 stat 팬아웃까지 함께 막힌다.
117
+ */
118
+ getCoChangeNeighbors(filePath: string, minPairCount: number, minConfidence: number, soloSelf: number, maxRows?: number): CoChangeScan<CoChangeNeighborRow>;
119
+ /** 이웃 조회와 같은 규율이다 — 임계는 질의가 걸고 점수순 창은 두지 않는다 */
120
+ getCoChangePairs(minPairCount: number, minConfidence: number, maxRows?: number): CoChangeScan<CoChangePairRow>;
29
121
  close(): void;
30
122
  }
31
123
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AA2FjE,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,MAAM;IAa1B,OAAO,CAAC,UAAU;IAwClB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQjD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAQ7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAY/C,WAAW,IAAI,aAAa,EAAE;IAQ9B,WAAW,IAAI,aAAa,EAAE;IAQ9B,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAmBrC,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAarC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBpC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAoCxC,eAAe,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAenD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAMtD,gBAAgB,IAAI,iBAAiB,EAAE;IAMvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI9C,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/code-graph/storage.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,68 @@ function toEdge(row) {
43
43
  updatedAt: row.updated_at,
44
44
  };
45
45
  }
46
+ /**
47
+ * 임계를 통과한 행의 절대 천장. 두 임계는 외부 입력이고 둘 다 0이 허용되므로
48
+ * 임계만으로는 조회가 읽는 행이 안 막힌다. 출력 `limit`은 랭킹을 다 세운
49
+ * 뒤에 걸려서 읽는 행과 워킹트리 stat 팬아웃을 못 막는다. 그 자리를 메운다.
50
+ *
51
+ * 10,000인 근거는 셋이다.
52
+ * 1. 정상 질의에 절대 안 걸린다. 이 레포는 임계를 둘 다 0으로 내려 전량을
53
+ * 떠도 4,597행이라 두 배 넘게 남는다 (`c927188` 기준 — 커밋이 쌓이면
54
+ * 함께 움직이는 스냅숏이다)
55
+ * 2. 출력 상한(`limit` 최대 500)의 20배다. 천장이 사용자가 보는 목록을
56
+ * 결정하는 자리가 되면 안 된다
57
+ * 3. 천장에 걸려도 동기 stat 호출 수가 유한하다. 호출은 천장을 통과한 행에만
58
+ * 붙고 전역 경로는 페어당 파일이 둘이라 최악이 천장의 두 배다. 행 수가
59
+ * 아니라 천장이 이 팬아웃을 묶는다는 건 테스트가 지킨다
60
+ *
61
+ * 천장에 걸리면 접두사 보장이 깨지고 `totalMatched`가 다시 하한이 된다.
62
+ * 그래서 `capped`로 따로 알린다 — 출력 `limit`에 잘린 것과 사유가 다르다.
63
+ */
64
+ export const MAX_MATCHED_ROWS = 10_000;
65
+ /**
66
+ * 질의문을 상수로 뽑아둔다. `EXPLAIN QUERY PLAN` 테스트가 이 문자열을 그대로
67
+ * 설명해야 실제로 도는 질의의 계획을 고정하는 것이 된다. 테스트가 SQL을
68
+ * 베껴 쓰면 베낀 쪽만 검사하게 된다.
69
+ *
70
+ * 두 질의는 `pair_count` 범위와 `file_a`/`file_b` 동등 비교로 인덱스를 탄다.
71
+ * 인덱스를 건드리면 계획이 조용히 전체 스캔으로 떨어질 수 있어 테스트로 박았다.
72
+ */
73
+ export const CO_CHANGE_NEIGHBORS_SQL = `
74
+ SELECT other, pair_count, solo_other FROM (
75
+ SELECT p.other AS other, p.pair_count AS pair_count, COALESCE(s.solo_count, 0) AS solo_other
76
+ FROM (
77
+ SELECT file_b AS other, pair_count FROM cg_cochange
78
+ WHERE file_a = @path AND pair_count >= @minPairCount
79
+ UNION ALL
80
+ SELECT file_a AS other, pair_count FROM cg_cochange
81
+ WHERE file_b = @path AND pair_count >= @minPairCount
82
+ ) p
83
+ LEFT JOIN cg_cochange_solo s ON s.file_path = p.other
84
+ )
85
+ WHERE ${CONFIDENCE_SQL('@soloSelf', 'solo_other')} >= @minConfidence
86
+ LIMIT @scanLimit
87
+ `;
88
+ export const CO_CHANGE_PAIRS_SQL = `
89
+ SELECT file_a, file_b, pair_count, solo_a, solo_b FROM (
90
+ SELECT c.file_a AS file_a, c.file_b AS file_b, c.pair_count AS pair_count,
91
+ COALESCE(sa.solo_count, 0) AS solo_a, COALESCE(sb.solo_count, 0) AS solo_b
92
+ FROM cg_cochange c
93
+ LEFT JOIN cg_cochange_solo sa ON sa.file_path = c.file_a
94
+ LEFT JOIN cg_cochange_solo sb ON sb.file_path = c.file_b
95
+ WHERE c.pair_count >= @minPairCount
96
+ )
97
+ WHERE ${CONFIDENCE_SQL('solo_a', 'solo_b')} >= @minConfidence
98
+ LIMIT @scanLimit
99
+ `;
100
+ function CONFIDENCE_SQL(soloSelf, soloOther) {
101
+ return `CASE
102
+ WHEN ${soloSelf} > 0 AND ${soloOther} > 0 THEN CAST(pair_count AS REAL) / MIN(${soloSelf}, ${soloOther})
103
+ WHEN ${soloSelf} > 0 THEN CAST(pair_count AS REAL) / ${soloSelf}
104
+ WHEN ${soloOther} > 0 THEN CAST(pair_count AS REAL) / ${soloOther}
105
+ ELSE 0.0
106
+ END`;
107
+ }
46
108
  export class CodeGraphStore {
47
109
  db;
48
110
  constructor(dbPath) {
@@ -94,6 +156,37 @@ export class CodeGraphStore {
94
156
  created_at INTEGER NOT NULL
95
157
  );
96
158
  CREATE INDEX IF NOT EXISTS idx_embeddings_file ON node_embeddings(file_path);
159
+
160
+ CREATE TABLE IF NOT EXISTS cg_cochange (
161
+ file_a TEXT NOT NULL,
162
+ file_b TEXT NOT NULL,
163
+ pair_count INTEGER NOT NULL,
164
+ updated_at REAL NOT NULL,
165
+ PRIMARY KEY (file_a, file_b)
166
+ );
167
+ CREATE INDEX IF NOT EXISTS idx_cg_cochange_b ON cg_cochange(file_b);
168
+ -- getCoChangePairs가 pair_count로 거른다. 이게 없으면 전역 페어 조회가
169
+ -- 매번 전체 스캔이다. 기본 임계(3회)에서 이 레포는 4,597행 중 485행만
170
+ -- 남는다 (\`c927188\` 기준 — 커밋이 쌓이면 함께 움직이는 스냅숏이다).
171
+ -- 계획이 이 인덱스를 타는지는 EXPLAIN QUERY PLAN 테스트가 고정한다.
172
+ CREATE INDEX IF NOT EXISTS idx_cg_cochange_count ON cg_cochange(pair_count);
173
+
174
+ CREATE TABLE IF NOT EXISTS cg_cochange_solo (
175
+ file_path TEXT PRIMARY KEY,
176
+ solo_count INTEGER NOT NULL
177
+ );
178
+
179
+ CREATE TABLE IF NOT EXISTS cg_cochange_meta (
180
+ id INTEGER PRIMARY KEY CHECK (id = 1),
181
+ head_sha TEXT NOT NULL,
182
+ commits_used INTEGER NOT NULL,
183
+ commits_scanned INTEGER NOT NULL,
184
+ max_files_per_commit INTEGER NOT NULL,
185
+ -- 수집이 강제하는 값이 아니다. 빌드 시점의 조회 기본 임계를 남겨둔
186
+ -- 기록일 뿐이라 실제 질의에 쓰인 값과 다를 수 있다.
187
+ min_pair_count INTEGER NOT NULL,
188
+ built_at REAL NOT NULL
189
+ );
97
190
  `);
98
191
  }
99
192
  getNodesByFile(filePath) {
@@ -243,6 +336,126 @@ export class CodeGraphStore {
243
336
  deleteEmbeddingsByFile(filePath) {
244
337
  this.db.prepare(`DELETE FROM node_embeddings WHERE file_path = ?`).run(filePath);
245
338
  }
339
+ // ─── Co-Change ─────────────────────────────────────────────────
340
+ //
341
+ // 점수(confidence/lift)는 저장하지 않고 조회 시점에 계산한다. lift 분모가
342
+ // commits_used라서 커밋 하나만 더 반영해도 저장된 점수가 전부 무효가 된다.
343
+ // 그러면 증분 갱신이 매번 전량 재계산으로 떨어진다. 원시 카운트만 두면
344
+ // 증분이 카운터 덧셈으로 끝난다.
345
+ mergeCoChange(input) {
346
+ const now = Date.now();
347
+ const deletePairs = this.db.prepare(`DELETE FROM cg_cochange`);
348
+ const deleteSolos = this.db.prepare(`DELETE FROM cg_cochange_solo`);
349
+ const deleteMeta = this.db.prepare(`DELETE FROM cg_cochange_meta`);
350
+ const upsertPair = this.db.prepare(`
351
+ INSERT INTO cg_cochange (file_a, file_b, pair_count, updated_at)
352
+ VALUES (?, ?, ?, ?)
353
+ ON CONFLICT(file_a, file_b) DO UPDATE SET
354
+ pair_count = pair_count + excluded.pair_count,
355
+ updated_at = excluded.updated_at
356
+ `);
357
+ const upsertSolo = this.db.prepare(`
358
+ INSERT INTO cg_cochange_solo (file_path, solo_count)
359
+ VALUES (?, ?)
360
+ ON CONFLICT(file_path) DO UPDATE SET solo_count = solo_count + excluded.solo_count
361
+ `);
362
+ const upsertMeta = this.db.prepare(`
363
+ INSERT INTO cg_cochange_meta
364
+ (id, head_sha, commits_used, commits_scanned, max_files_per_commit, min_pair_count, built_at)
365
+ VALUES (1, ?, ?, ?, ?, ?, ?)
366
+ ON CONFLICT(id) DO UPDATE SET
367
+ head_sha = excluded.head_sha,
368
+ commits_used = commits_used + excluded.commits_used,
369
+ commits_scanned = commits_scanned + excluded.commits_scanned,
370
+ max_files_per_commit = excluded.max_files_per_commit,
371
+ min_pair_count = excluded.min_pair_count,
372
+ built_at = excluded.built_at
373
+ `);
374
+ const run = this.db.transaction(() => {
375
+ if (input.reset) {
376
+ deletePairs.run();
377
+ deleteSolos.run();
378
+ deleteMeta.run();
379
+ }
380
+ for (const pair of input.pairs) {
381
+ upsertPair.run(pair.fileA, pair.fileB, pair.count, now);
382
+ }
383
+ for (const solo of input.solos) {
384
+ upsertSolo.run(solo.filePath, solo.count);
385
+ }
386
+ upsertMeta.run(input.meta.headSha, input.meta.commitsUsed, input.meta.commitsScanned, input.meta.maxFilesPerCommit, input.meta.defaultMinPairCount, now);
387
+ });
388
+ run();
389
+ }
390
+ getCoChangeMeta() {
391
+ const row = this.db.prepare(`SELECT * FROM cg_cochange_meta WHERE id = 1`).get();
392
+ if (!row)
393
+ return null;
394
+ return {
395
+ headSha: row.head_sha,
396
+ commitsUsed: row.commits_used,
397
+ commitsScanned: row.commits_scanned,
398
+ maxFilesPerCommit: row.max_files_per_commit,
399
+ defaultMinPairCount: row.min_pair_count,
400
+ builtAt: row.built_at,
401
+ };
402
+ }
403
+ countCoChangePairs() {
404
+ const row = this.db.prepare(`SELECT COUNT(*) AS cnt FROM cg_cochange`).get();
405
+ return row.cnt;
406
+ }
407
+ getCoChangeSolo(filePath) {
408
+ const row = this.db
409
+ .prepare(`SELECT solo_count FROM cg_cochange_solo WHERE file_path = ?`)
410
+ .get(filePath);
411
+ return row?.solo_count ?? 0;
412
+ }
413
+ /**
414
+ * 무방향 페어라 file_a/file_b 양쪽을 합쳐야 한 파일의 이웃이 전부 나온다.
415
+ *
416
+ * 임계를 통과한 행을 전부 돌려준다. 점수순 개수 창이 없는 게 의도다 — 랭킹
417
+ * 키가 confidence × lift라 `pair_count` 순으로 먼저 자르면 점수 상위가 창
418
+ * 밖으로 빠진다. 대신 두 임계를 질의로 내려 호출부가 버릴 행을 애초에 안
419
+ * 뜬다. 기본 임계에서 seed당 22행, 임계를 전부 0으로 내려도 133행이다
420
+ * (`c927188` 기준 — 커밋이 쌓이면 함께 움직이는 스냅숏이다).
421
+ *
422
+ * `maxRows`는 그 위에 얹은 절대 천장이라 성격이 다르다. 임계가 0이어도
423
+ * 읽는 행이 유한하도록 막는 자리고 정상 질의에는 안 걸린다. 걸리면
424
+ * `capped`로 알린다 — 조용히 자르면 하한이 정확한 수로 둔갑한다.
425
+ * 천장이 SQL에 있어야 호출부의 워킹트리 stat 팬아웃까지 함께 막힌다.
426
+ */
427
+ getCoChangeNeighbors(filePath, minPairCount, minConfidence, soloSelf, maxRows = MAX_MATCHED_ROWS) {
428
+ const rows = this.db
429
+ .prepare(CO_CHANGE_NEIGHBORS_SQL)
430
+ // 한 행을 더 떠야 천장에 "닿은 것"과 "넘은 것"이 갈린다.
431
+ .all({ path: filePath, minPairCount, minConfidence, soloSelf, scanLimit: maxRows + 1 });
432
+ const capped = rows.length > maxRows;
433
+ return {
434
+ rows: (capped ? rows.slice(0, maxRows) : rows).map((r) => ({
435
+ other: r.other,
436
+ pairCount: r.pair_count,
437
+ soloOther: r.solo_other,
438
+ })),
439
+ capped,
440
+ };
441
+ }
442
+ /** 이웃 조회와 같은 규율이다 — 임계는 질의가 걸고 점수순 창은 두지 않는다 */
443
+ getCoChangePairs(minPairCount, minConfidence, maxRows = MAX_MATCHED_ROWS) {
444
+ const rows = this.db
445
+ .prepare(CO_CHANGE_PAIRS_SQL)
446
+ .all({ minPairCount, minConfidence, scanLimit: maxRows + 1 });
447
+ const capped = rows.length > maxRows;
448
+ return {
449
+ rows: (capped ? rows.slice(0, maxRows) : rows).map((r) => ({
450
+ fileA: r.file_a,
451
+ fileB: r.file_b,
452
+ pairCount: r.pair_count,
453
+ soloA: r.solo_a,
454
+ soloB: r.solo_b,
455
+ })),
456
+ capped,
457
+ };
458
+ }
246
459
  close() {
247
460
  this.db.close();
248
461
  }