@opensip-cli/graph 0.1.11 → 0.1.13

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 (236) hide show
  1. package/README.md +3 -3
  2. package/dist/__tests__/baseline-plane.test.js +8 -3
  3. package/dist/__tests__/baseline-plane.test.js.map +1 -1
  4. package/dist/__tests__/cache/engine-version.test.js +4 -4
  5. package/dist/__tests__/cache/engine-version.test.js.map +1 -1
  6. package/dist/__tests__/cli/graph-execute.test.js +25 -12
  7. package/dist/__tests__/cli/graph-execute.test.js.map +1 -1
  8. package/dist/__tests__/cli/graph.test.js +36 -21
  9. package/dist/__tests__/cli/graph.test.js.map +1 -1
  10. package/dist/__tests__/cli/language-mismatch.test.js +7 -2
  11. package/dist/__tests__/cli/language-mismatch.test.js.map +1 -1
  12. package/dist/__tests__/cli/lookup.test.js +32 -29
  13. package/dist/__tests__/cli/lookup.test.js.map +1 -1
  14. package/dist/__tests__/cli/session-contract.test.js +5 -1
  15. package/dist/__tests__/cli/session-contract.test.js.map +1 -1
  16. package/dist/__tests__/cli/symbol-index.test.js +9 -2
  17. package/dist/__tests__/cli/symbol-index.test.js.map +1 -1
  18. package/dist/__tests__/cli/tool-show-mode.test.js +7 -1
  19. package/dist/__tests__/cli/tool-show-mode.test.js.map +1 -1
  20. package/dist/__tests__/public-api.test.js +10 -0
  21. package/dist/__tests__/public-api.test.js.map +1 -1
  22. package/dist/__tests__/report-failure-mock.d.ts +8 -0
  23. package/dist/__tests__/report-failure-mock.d.ts.map +1 -0
  24. package/dist/__tests__/report-failure-mock.js +19 -0
  25. package/dist/__tests__/report-failure-mock.js.map +1 -0
  26. package/dist/__tests__/rules/registry.test.js +1 -0
  27. package/dist/__tests__/rules/registry.test.js.map +1 -1
  28. package/dist/__tests__/tool-branches.test.js +9 -2
  29. package/dist/__tests__/tool-branches.test.js.map +1 -1
  30. package/dist/__tests__/tool-register.test.js +26 -15
  31. package/dist/__tests__/tool-register.test.js.map +1 -1
  32. package/dist/baseline-strategy.d.ts +1 -2
  33. package/dist/baseline-strategy.d.ts.map +1 -1
  34. package/dist/baseline-strategy.js +6 -1
  35. package/dist/baseline-strategy.js.map +1 -1
  36. package/dist/cache/engine-version.d.ts.map +1 -1
  37. package/dist/cache/engine-version.js +5 -1
  38. package/dist/cache/engine-version.js.map +1 -1
  39. package/dist/cli/__tests__/dispatch-envelope.test.js +5 -1
  40. package/dist/cli/__tests__/dispatch-envelope.test.js.map +1 -1
  41. package/dist/cli/__tests__/dispatch-suppression-root.test.js +1 -0
  42. package/dist/cli/__tests__/dispatch-suppression-root.test.js.map +1 -1
  43. package/dist/cli/__tests__/equivalence-diagnostic.test.d.ts +7 -0
  44. package/dist/cli/__tests__/equivalence-diagnostic.test.d.ts.map +1 -0
  45. package/dist/cli/__tests__/equivalence-diagnostic.test.js +136 -0
  46. package/dist/cli/__tests__/equivalence-diagnostic.test.js.map +1 -0
  47. package/dist/cli/__tests__/graph-gate-mode.test.js +6 -0
  48. package/dist/cli/__tests__/graph-gate-mode.test.js.map +1 -1
  49. package/dist/cli/__tests__/graph-recipes.test.js +2 -2
  50. package/dist/cli/__tests__/graph-recipes.test.js.map +1 -1
  51. package/dist/cli/__tests__/list-files.test.js +45 -12
  52. package/dist/cli/__tests__/list-files.test.js.map +1 -1
  53. package/dist/cli/__tests__/live-suppression-parity.test.js +5 -1
  54. package/dist/cli/__tests__/live-suppression-parity.test.js.map +1 -1
  55. package/dist/cli/__tests__/lookup-result.test.d.ts +2 -0
  56. package/dist/cli/__tests__/lookup-result.test.d.ts.map +1 -0
  57. package/dist/cli/__tests__/lookup-result.test.js +119 -0
  58. package/dist/cli/__tests__/lookup-result.test.js.map +1 -0
  59. package/dist/cli/__tests__/shard-worker.test.js +2 -0
  60. package/dist/cli/__tests__/shard-worker.test.js.map +1 -1
  61. package/dist/cli/detect.d.ts.map +1 -1
  62. package/dist/cli/detect.js +4 -3
  63. package/dist/cli/detect.js.map +1 -1
  64. package/dist/cli/equivalence-check-command.d.ts.map +1 -1
  65. package/dist/cli/equivalence-check-command.js +64 -9
  66. package/dist/cli/equivalence-check-command.js.map +1 -1
  67. package/dist/cli/equivalence-diagnostic.d.ts +100 -0
  68. package/dist/cli/equivalence-diagnostic.d.ts.map +1 -0
  69. package/dist/cli/equivalence-diagnostic.js +138 -0
  70. package/dist/cli/equivalence-diagnostic.js.map +1 -0
  71. package/dist/cli/graph/graph-aux-command-specs.d.ts +2 -2
  72. package/dist/cli/graph/graph-aux-command-specs.d.ts.map +1 -1
  73. package/dist/cli/graph/graph-aux-command-specs.js +85 -51
  74. package/dist/cli/graph/graph-aux-command-specs.js.map +1 -1
  75. package/dist/cli/graph/graph-command-spec.d.ts.map +1 -1
  76. package/dist/cli/graph/graph-command-spec.js +3 -0
  77. package/dist/cli/graph/graph-command-spec.js.map +1 -1
  78. package/dist/cli/graph-config-schema.d.ts +3 -0
  79. package/dist/cli/graph-config-schema.d.ts.map +1 -1
  80. package/dist/cli/graph-config-schema.js +11 -0
  81. package/dist/cli/graph-config-schema.js.map +1 -1
  82. package/dist/cli/graph-config.d.ts.map +1 -1
  83. package/dist/cli/graph-config.js +9 -12
  84. package/dist/cli/graph-config.js.map +1 -1
  85. package/dist/cli/graph-envelope-view.d.ts.map +1 -1
  86. package/dist/cli/graph-envelope-view.js +1 -0
  87. package/dist/cli/graph-envelope-view.js.map +1 -1
  88. package/dist/cli/graph-modes.d.ts +5 -4
  89. package/dist/cli/graph-modes.d.ts.map +1 -1
  90. package/dist/cli/graph-modes.js +15 -18
  91. package/dist/cli/graph-modes.js.map +1 -1
  92. package/dist/cli/graph-recipes.d.ts.map +1 -1
  93. package/dist/cli/graph-recipes.js +12 -5
  94. package/dist/cli/graph-recipes.js.map +1 -1
  95. package/dist/cli/graph-result-delivery.d.ts.map +1 -1
  96. package/dist/cli/graph-result-delivery.js +11 -10
  97. package/dist/cli/graph-result-delivery.js.map +1 -1
  98. package/dist/cli/graph-single-run-mode.d.ts.map +1 -1
  99. package/dist/cli/graph-single-run-mode.js +3 -2
  100. package/dist/cli/graph-single-run-mode.js.map +1 -1
  101. package/dist/cli/graph-worker.d.ts.map +1 -1
  102. package/dist/cli/graph-worker.js +9 -2
  103. package/dist/cli/graph-worker.js.map +1 -1
  104. package/dist/cli/graph-workspace-mode.d.ts.map +1 -1
  105. package/dist/cli/graph-workspace-mode.js +3 -2
  106. package/dist/cli/graph-workspace-mode.js.map +1 -1
  107. package/dist/cli/graph.d.ts +2 -2
  108. package/dist/cli/graph.d.ts.map +1 -1
  109. package/dist/cli/graph.js +26 -28
  110. package/dist/cli/graph.js.map +1 -1
  111. package/dist/cli/heap-preflight.d.ts.map +1 -1
  112. package/dist/cli/heap-preflight.js +6 -5
  113. package/dist/cli/heap-preflight.js.map +1 -1
  114. package/dist/cli/list-files.d.ts.map +1 -1
  115. package/dist/cli/list-files.js +9 -4
  116. package/dist/cli/list-files.js.map +1 -1
  117. package/dist/cli/lookup-result.d.ts +4 -0
  118. package/dist/cli/lookup-result.d.ts.map +1 -0
  119. package/dist/cli/lookup-result.js +44 -0
  120. package/dist/cli/lookup-result.js.map +1 -0
  121. package/dist/cli/lookup.d.ts +12 -1
  122. package/dist/cli/lookup.d.ts.map +1 -1
  123. package/dist/cli/lookup.js +31 -30
  124. package/dist/cli/lookup.js.map +1 -1
  125. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js +76 -0
  126. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js.map +1 -1
  127. package/dist/cli/orchestrate/catalog-stats.d.ts.map +1 -1
  128. package/dist/cli/orchestrate/catalog-stats.js +0 -1
  129. package/dist/cli/orchestrate/catalog-stats.js.map +1 -1
  130. package/dist/cli/orchestrate/cross-shard-resolve.d.ts.map +1 -1
  131. package/dist/cli/orchestrate/cross-shard-resolve.js +77 -2
  132. package/dist/cli/orchestrate/cross-shard-resolve.js.map +1 -1
  133. package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts.map +1 -1
  134. package/dist/cli/orchestrate/flat-monorepo-strategy.js +0 -1
  135. package/dist/cli/orchestrate/flat-monorepo-strategy.js.map +1 -1
  136. package/dist/cli/orchestrate/incremental-merge.d.ts.map +1 -1
  137. package/dist/cli/orchestrate/incremental-merge.js +3 -2
  138. package/dist/cli/orchestrate/incremental-merge.js.map +1 -1
  139. package/dist/cli/positional-paths.d.ts.map +1 -1
  140. package/dist/cli/positional-paths.js +3 -2
  141. package/dist/cli/positional-paths.js.map +1 -1
  142. package/dist/cli/pressure-monitor.d.ts +2 -0
  143. package/dist/cli/pressure-monitor.d.ts.map +1 -1
  144. package/dist/cli/pressure-monitor.js +15 -0
  145. package/dist/cli/pressure-monitor.js.map +1 -1
  146. package/dist/cli/report-data.d.ts.map +1 -1
  147. package/dist/cli/report-data.js +0 -1
  148. package/dist/cli/report-data.js.map +1 -1
  149. package/dist/cli/sarif-export.d.ts.map +1 -1
  150. package/dist/cli/sarif-export.js +4 -3
  151. package/dist/cli/sarif-export.js.map +1 -1
  152. package/dist/cli/symbol-index.d.ts.map +1 -1
  153. package/dist/cli/symbol-index.js +15 -14
  154. package/dist/cli/symbol-index.js.map +1 -1
  155. package/dist/cli/workspace-runner.d.ts.map +1 -1
  156. package/dist/cli/workspace-runner.js +5 -4
  157. package/dist/cli/workspace-runner.js.map +1 -1
  158. package/dist/index.d.ts +4 -0
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +5 -0
  161. package/dist/index.js.map +1 -1
  162. package/dist/lang-adapter/__tests__/language-of-file.test.d.ts +2 -0
  163. package/dist/lang-adapter/__tests__/language-of-file.test.d.ts.map +1 -0
  164. package/dist/lang-adapter/__tests__/language-of-file.test.js +36 -0
  165. package/dist/lang-adapter/__tests__/language-of-file.test.js.map +1 -0
  166. package/dist/lang-adapter/__tests__/near-duplicate-signature.test.d.ts +2 -0
  167. package/dist/lang-adapter/__tests__/near-duplicate-signature.test.d.ts.map +1 -0
  168. package/dist/lang-adapter/__tests__/near-duplicate-signature.test.js +78 -0
  169. package/dist/lang-adapter/__tests__/near-duplicate-signature.test.js.map +1 -0
  170. package/dist/lang-adapter/body-digest.d.ts +9 -41
  171. package/dist/lang-adapter/body-digest.d.ts.map +1 -1
  172. package/dist/lang-adapter/body-digest.js +9 -44
  173. package/dist/lang-adapter/body-digest.js.map +1 -1
  174. package/dist/lang-adapter/language-of-file.d.ts +15 -0
  175. package/dist/lang-adapter/language-of-file.d.ts.map +1 -0
  176. package/dist/lang-adapter/language-of-file.js +43 -0
  177. package/dist/lang-adapter/language-of-file.js.map +1 -0
  178. package/dist/lang-adapter/near-duplicate-signature.d.ts +12 -0
  179. package/dist/lang-adapter/near-duplicate-signature.d.ts.map +1 -0
  180. package/dist/lang-adapter/near-duplicate-signature.js +12 -0
  181. package/dist/lang-adapter/near-duplicate-signature.js.map +1 -0
  182. package/dist/lang-adapter/read-source.d.ts.map +1 -1
  183. package/dist/lang-adapter/read-source.js +0 -1
  184. package/dist/lang-adapter/read-source.js.map +1 -1
  185. package/dist/lang-adapter/registry.d.ts.map +1 -1
  186. package/dist/lang-adapter/registry.js +0 -1
  187. package/dist/lang-adapter/registry.js.map +1 -1
  188. package/dist/persistence/catalog-repo.d.ts.map +1 -1
  189. package/dist/persistence/catalog-repo.js +88 -81
  190. package/dist/persistence/catalog-repo.js.map +1 -1
  191. package/dist/persistence/session-payload.d.ts.map +1 -1
  192. package/dist/persistence/session-payload.js +0 -1
  193. package/dist/persistence/session-payload.js.map +1 -1
  194. package/dist/persistence/session-replay.d.ts.map +1 -1
  195. package/dist/persistence/session-replay.js +15 -25
  196. package/dist/persistence/session-replay.js.map +1 -1
  197. package/dist/pipeline/feature-deps.d.ts.map +1 -1
  198. package/dist/pipeline/feature-deps.js +0 -1
  199. package/dist/pipeline/feature-deps.js.map +1 -1
  200. package/dist/pipeline/features.d.ts.map +1 -1
  201. package/dist/pipeline/features.js +0 -1
  202. package/dist/pipeline/features.js.map +1 -1
  203. package/dist/pipeline/indexes.d.ts.map +1 -1
  204. package/dist/pipeline/indexes.js +0 -1
  205. package/dist/pipeline/indexes.js.map +1 -1
  206. package/dist/recipes/__tests__/resolve.test.js +7 -0
  207. package/dist/recipes/__tests__/resolve.test.js.map +1 -1
  208. package/dist/render/rule-id-mapping.d.ts.map +1 -1
  209. package/dist/render/rule-id-mapping.js +1 -0
  210. package/dist/render/rule-id-mapping.js.map +1 -1
  211. package/dist/rules/__tests__/fingerprint-golden.test.js +1 -1
  212. package/dist/rules/__tests__/fingerprint-golden.test.js.map +1 -1
  213. package/dist/rules/__tests__/near-duplicate-function-body.test.d.ts +2 -0
  214. package/dist/rules/__tests__/near-duplicate-function-body.test.d.ts.map +1 -0
  215. package/dist/rules/__tests__/near-duplicate-function-body.test.js +142 -0
  216. package/dist/rules/__tests__/near-duplicate-function-body.test.js.map +1 -0
  217. package/dist/rules/_entry-points.d.ts.map +1 -1
  218. package/dist/rules/_entry-points.js +0 -1
  219. package/dist/rules/_entry-points.js.map +1 -1
  220. package/dist/rules/duplicated-function-body.d.ts +12 -34
  221. package/dist/rules/duplicated-function-body.d.ts.map +1 -1
  222. package/dist/rules/duplicated-function-body.js +83 -233
  223. package/dist/rules/duplicated-function-body.js.map +1 -1
  224. package/dist/rules/near-duplicate-function-body.d.ts +11 -0
  225. package/dist/rules/near-duplicate-function-body.d.ts.map +1 -0
  226. package/dist/rules/near-duplicate-function-body.js +74 -0
  227. package/dist/rules/near-duplicate-function-body.js.map +1 -0
  228. package/dist/rules/registry.d.ts.map +1 -1
  229. package/dist/rules/registry.js +2 -1
  230. package/dist/rules/registry.js.map +1 -1
  231. package/dist/tool.d.ts.map +1 -1
  232. package/dist/tool.js +3 -1
  233. package/dist/tool.js.map +1 -1
  234. package/dist/types.d.ts +20 -0
  235. package/dist/types.d.ts.map +1 -1
  236. package/package.json +15 -13
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-index.d.ts","sourceRoot":"","sources":["../../src/cli/symbol-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAYH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACzD;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAqDf;AAiBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAgBnE"}
1
+ {"version":3,"file":"symbol-index.d.ts","sourceRoot":"","sources":["../../src/cli/symbol-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAWH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CACzD;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAmDf;AAiBD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAgBnE"}
@@ -23,14 +23,14 @@
23
23
  * Bidirectional like codeindex (name→file and file→names), but enriched
24
24
  * with kind/visibility/bodyHash since we already have that data.
25
25
  */
26
- import { mkdirSync, writeFileSync } from 'node:fs';
27
- import { dirname, resolve } from 'node:path';
26
+ import { resolve } from 'node:path';
28
27
  import { EXIT_CODES } from '@opensip-cli/contracts';
29
- import { ConfigurationError, logger } from '@opensip-cli/core';
28
+ import { createToolLogger, ConfigurationError, ToolError } from '@opensip-cli/core';
30
29
  import { CatalogRepo } from '../persistence/catalog-repo.js';
31
30
  import { loadGraphConfig, runGraph } from './orchestrate.js';
31
+ const log = createToolLogger('graph:cli');
32
32
  export async function executeSymbolIndex(opts, cli) {
33
- logger.info({
33
+ log.info({
34
34
  evt: 'graph.cli.symbol-index.start',
35
35
  module: 'graph:cli',
36
36
  build: opts.build === true,
@@ -48,16 +48,12 @@ export async function executeSymbolIndex(opts, cli) {
48
48
  }
49
49
  const artifact = buildArtifact(catalog);
50
50
  const outPath = resolve(opts.cwd, opts.out);
51
- // Create the parent dir before writing so a nested --out
52
- // (e.g. reports/symbolindex.json) doesn't throw ENOENT — matches
53
- // the sibling writers (sarif-export, baseline-export, catalog-json).
54
- mkdirSync(dirname(outPath), { recursive: true });
55
- writeFileSync(outPath, `${JSON.stringify(artifact, null, 2)}\n`, 'utf8');
51
+ await cli.writeArtifact(outPath, `${JSON.stringify(artifact, null, 2)}\n`);
56
52
  const symbolCount = Object.values(artifact.symbols).reduce((n, arr) => n + arr.length, 0);
57
53
  const fileCount = Object.keys(artifact.fileSymbols).length;
58
54
  process.stdout.write(`wrote ${String(symbolCount)} symbol(s) across ${String(fileCount)} file(s) to ${outPath}\n`);
59
55
  cli.setExitCode(EXIT_CODES.SUCCESS);
60
- logger.info({
56
+ log.info({
61
57
  evt: 'graph.cli.symbol-index.complete',
62
58
  module: 'graph:cli',
63
59
  symbols: symbolCount,
@@ -65,15 +61,20 @@ export async function executeSymbolIndex(opts, cli) {
65
61
  });
66
62
  }
67
63
  catch (error) {
68
- logger.error({
64
+ log.error({
69
65
  evt: 'graph.cli.symbol-index.error',
70
66
  module: 'graph:cli',
71
67
  err: error instanceof Error ? error.message : String(error),
72
68
  });
73
- cli.setExitCode(error instanceof ConfigurationError
69
+ const exitCode = error instanceof ConfigurationError
74
70
  ? EXIT_CODES.CONFIGURATION_ERROR
75
- : EXIT_CODES.RUNTIME_ERROR);
76
- process.stderr.write(`graph symbol-index: ${error instanceof Error ? error.message : String(error)}\n`);
71
+ : EXIT_CODES.RUNTIME_ERROR;
72
+ await cli.reportFailure({
73
+ message: `graph symbol-index: ${error instanceof Error ? error.message : String(error)}`,
74
+ exitCode,
75
+ ...(error instanceof ToolError ? { error } : {}),
76
+ jsonRequested: false,
77
+ });
77
78
  }
78
79
  }
79
80
  async function resolveCatalogForIndex(opts, datastore) {
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-index.js","sourceRoot":"","sources":["../../src/cli/symbol-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAkC7D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAA+B,EAC/B,GAAmB;IAEnB,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,8BAA8B;QACnC,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAA2B,CAAC;QACjE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAAC,4DAA4D,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAC1B,IAAI,CAAC,KAAK,KAAK,IAAI;gBACjB,CAAC,CAAC,0CAA0C;gBAC5C,CAAC,CAAC,qFAAqF,CAC1F,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,yDAAyD;QACzD,iEAAiE;QACjE,qEAAqE;QACrE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,MAAM,CAAC,WAAW,CAAC,qBAAqB,MAAM,CAAC,SAAS,CAAC,eAAe,OAAO,IAAI,CAC7F,CAAC;QACF,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,EAAE,iCAAiC;YACtC,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC;YACX,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,WAAW;YACnB,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC5D,CAAC,CAAC;QACH,GAAG,CAAC,WAAW,CACb,KAAK,YAAY,kBAAkB;YACjC,CAAC,CAAC,UAAU,CAAC,mBAAmB;YAChC,CAAC,CAAC,UAAU,CAAC,aAAa,CAC7B,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAA+B,EAC/B,SAAoB;IAEpB,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS;YACT,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;SAClC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,eAAe,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAClD,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,OAAO;QACP,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAQG,EACH,IAAY,EACZ,WAAqC;IAErC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QACzC,OAAO,CAAC,IAAI,CAAC;YACX,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC,CAAC;QACH,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAC1B,WAAqC,EACrC,QAAgB,EAChB,IAAY;IAEZ,IAAI,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,EAAE,CAAC;QACZ,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"symbol-index.js","sourceRoot":"","sources":["../../src/cli/symbol-index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-runner.d.ts","sourceRoot":"","sources":["../../src/cli/workspace-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CASnC;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA0ClC"}
1
+ {"version":3,"file":"workspace-runner.d.ts","sourceRoot":"","sources":["../../src/cli/workspace-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,eAAe,EAAE,GACnC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CASnC;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA0ClC"}
@@ -17,7 +17,8 @@
17
17
  import { spawn } from 'node:child_process';
18
18
  import { cpus } from 'node:os';
19
19
  import { relative } from 'node:path';
20
- import { ConfigurationError, logger, } from '@opensip-cli/core';
20
+ import { createToolLogger, ConfigurationError, } from '@opensip-cli/core';
21
+ const log = createToolLogger('graph:cli');
21
22
  import { runWorkerPool } from './orchestrate/worker-pool.js';
22
23
  /**
23
24
  * Aggregate WorkspaceUnits across all adapters that implement the
@@ -49,7 +50,7 @@ export async function runWorkspaceUnitsInParallel(input) {
49
50
  throw new ConfigurationError('--workspace: no workspace units found. Use `opensip graph` for whole-project analysis.');
50
51
  }
51
52
  const concurrency = Math.max(1, input.concurrency ?? Math.max(1, cpus().length - 1));
52
- logger.info({
53
+ log.info({
53
54
  evt: 'graph.cli.workspace.start',
54
55
  module: 'graph:cli',
55
56
  units: input.units.length,
@@ -70,7 +71,7 @@ export async function runWorkspaceUnitsInParallel(input) {
70
71
  // Sort for deterministic display order regardless of completion
71
72
  // order — units finish in unpredictable order under parallelism.
72
73
  results.sort((a, b) => a.rootDir.localeCompare(b.rootDir));
73
- logger.info({
74
+ log.info({
74
75
  evt: 'graph.cli.workspace.complete',
75
76
  module: 'graph:cli',
76
77
  units: input.units.length,
@@ -150,7 +151,7 @@ function parseChildSignals(stdout, rootDir, stderr) {
150
151
  }
151
152
  catch (error) {
152
153
  /* v8 ignore start */
153
- logger.warn({
154
+ log.warn({
154
155
  evt: 'graph.cli.workspace.parse-error',
155
156
  module: 'graph:cli',
156
157
  rootDir,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-runner.js","sourceRoot":"","sources":["../../src/cli/workspace-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-runner.js","sourceRoot":"","sources":["../../src/cli/workspace-runner.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,10 @@ export { truncateForCallEdge, CALL_EDGE_TEXT_MAX, CREATION_EDGE_PREFIX, CREATION
20
20
  export type { EdgePosition, EdgeSink, MutableStats } from './lang-adapter/edge-helpers.js';
21
21
  export { normalizeWhitespace, hashBody } from './lang-adapter/body-digest.js';
22
22
  export type { BodyDigest } from './lang-adapter/body-digest.js';
23
+ export { NEAR_DUP_SIGNATURE_K, NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS, shingle, bodySignature, estimateJaccard, lshBandHashes, digestCanonicalBody, } from './lang-adapter/near-duplicate-signature.js';
24
+ export type { BodyDigestWithSignature } from './lang-adapter/near-duplicate-signature.js';
25
+ export { languageOfFile } from './lang-adapter/language-of-file.js';
26
+ export { isTestFilePath } from '@opensip-cli/clone-detection';
23
27
  export { ownerEdgeKey } from './owner-key.js';
24
28
  export { buildExportIndex, buildPackageManifestIndex, buildPackageManifestIndexFromRoots, resolveSpecifierToPackage, } from './cross-package/export-index.js';
25
29
  export type { ExportIndex, PackageManifest, PackageManifestIndex, ResolvedSpecifier, } from './cross-package/export-index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,yBAAyB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAgB5D,YAAY,EACV,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,KAAK,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,eAAe,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AA0BpB,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,cAAc,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAMlE,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AASxC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAS3F,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9E,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAUhE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,kCAAkC,EAClC,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACnF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,6 +35,11 @@ export { truncateForCallEdge, CALL_EDGE_TEXT_MAX, CREATION_EDGE_PREFIX, CREATION
35
35
  // only its language-specific comment stripper / normalizer (round-3
36
36
  // audit 2026-05-30, finding D). Mirrors the edge-helpers rationale.
37
37
  export { normalizeWhitespace, hashBody } from './lang-adapter/body-digest.js';
38
+ export { NEAR_DUP_SIGNATURE_K, NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS, shingle, bodySignature, estimateJaccard, lshBandHashes, digestCanonicalBody, } from './lang-adapter/near-duplicate-signature.js';
39
+ export { languageOfFile } from './lang-adapter/language-of-file.js';
40
+ // Canonical TS/JS test-file predicate, single-sourced in the shared substrate (ADR-0064,
41
+ // D1). Re-exported so graph-typescript reaches it via the engine barrel (no new dep).
42
+ export { isTestFilePath } from '@opensip-cli/clone-detection';
38
43
  // PR 3 of plan 2026-05-23-plan-graph-adapter-package-split.md:
39
44
  // first-party adapters live in their own graph-* packages, so the
40
45
  // engine no longer re-exports any adapter, parsed-project type, or
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iEAAiE;AACjE,kEAAkE;AAClE,wBAAwB;AACxB,OAAO,yBAAyB,CAAC;AAGjC,mEAAmE;AACnE,qEAAqE;AACrE,6DAA6D;AAC7D,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,oEAAoE;AACpE,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAsF5D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0BAA0B;AAC1B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAWxC,qEAAqE;AACrE,EAAE;AACF,oEAAoE;AACpE,qEAAqE;AACrE,wEAAwE;AACxE,oEAAoE;AACpE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAG9E,+DAA+D;AAC/D,kEAAkE;AAClE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,4EAA4E;AAC5E,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,sEAAsE;AACtE,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,kCAAkC,EAClC,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEnF,6EAA6E;AAC7E,qEAAqE;AACrE,6EAA6E;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,sEAAsE;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,iEAAiE;AACjE,kEAAkE;AAClE,wBAAwB;AACxB,OAAO,yBAAyB,CAAC;AAGjC,mEAAmE;AACnE,qEAAqE;AACrE,6DAA6D;AAC7D,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,oEAAoE;AACpE,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAsF5D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,0BAA0B;AAC1B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAWxC,qEAAqE;AACrE,EAAE;AACF,oEAAoE;AACpE,qEAAqE;AACrE,wEAAwE;AACxE,oEAAoE;AACpE,oEAAoE;AACpE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,aAAa,EACb,eAAe,EACf,aAAa,EACb,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,yFAAyF;AACzF,sFAAsF;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,+DAA+D;AAC/D,kEAAkE;AAClE,mEAAmE;AACnE,qEAAqE;AACrE,gBAAgB;AAEhB,4EAA4E;AAC5E,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,sEAAsE;AACtE,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,0EAA0E;AAC1E,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,kCAAkC,EAClC,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAEnF,6EAA6E;AAC7E,qEAAqE;AACrE,6EAA6E;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,sEAAsE;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAOvD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=language-of-file.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-of-file.test.d.ts","sourceRoot":"","sources":["../../../src/lang-adapter/__tests__/language-of-file.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { languageOfFile } from '../language-of-file.js';
3
+ describe('languageOfFile', () => {
4
+ it('maps TypeScript extensions', () => {
5
+ expect(languageOfFile('src/a.ts')).toBe('typescript');
6
+ expect(languageOfFile('src/a.tsx')).toBe('typescript');
7
+ expect(languageOfFile('src/a.mts')).toBe('typescript');
8
+ expect(languageOfFile('src/a.cts')).toBe('typescript');
9
+ });
10
+ it('maps JavaScript extensions to typescript (same adapter; .ts↔.js clones are real)', () => {
11
+ expect(languageOfFile('src/a.js')).toBe('typescript');
12
+ expect(languageOfFile('src/a.jsx')).toBe('typescript');
13
+ expect(languageOfFile('src/a.mjs')).toBe('typescript');
14
+ expect(languageOfFile('src/a.cjs')).toBe('typescript');
15
+ // A .ts and a .js file are the same language → clones between them are detected.
16
+ expect(languageOfFile('a.ts')).toBe(languageOfFile('b.js'));
17
+ });
18
+ it('maps Python extensions without truncating .pyi', () => {
19
+ expect(languageOfFile('mod.py')).toBe('python');
20
+ expect(languageOfFile('stub.pyi')).toBe('python');
21
+ });
22
+ it('maps Go, Java, and Rust', () => {
23
+ expect(languageOfFile('main.go')).toBe('go');
24
+ expect(languageOfFile('App.java')).toBe('java');
25
+ expect(languageOfFile('lib.rs')).toBe('rust');
26
+ });
27
+ it('returns undefined for unknown extensions', () => {
28
+ expect(languageOfFile('readme.md')).toBeUndefined();
29
+ expect(languageOfFile('noext')).toBeUndefined();
30
+ });
31
+ it('two files share a language iff languageOfFile is equal', () => {
32
+ expect(languageOfFile('a.ts')).toBe(languageOfFile('b.tsx'));
33
+ expect(languageOfFile('a.go')).not.toBe(languageOfFile('b.ts'));
34
+ });
35
+ });
36
+ //# sourceMappingURL=language-of-file.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-of-file.test.js","sourceRoot":"","sources":["../../../src/lang-adapter/__tests__/language-of-file.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,iFAAiF;QACjF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=near-duplicate-signature.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-duplicate-signature.test.d.ts","sourceRoot":"","sources":["../../../src/lang-adapter/__tests__/near-duplicate-signature.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS, NEAR_DUP_SIGNATURE_K, bodySignature, digestCanonicalBody, estimateJaccard, lshBandHashes, shingle, } from '../near-duplicate-signature.js';
3
+ describe('near-duplicate-signature', () => {
4
+ const base = 'function processItems(items) { const out = []; for (const item of items) { out.push(transform(item)); } return out; }';
5
+ const nearEdit = 'function processItems(items) { const result = []; for (const item of items) { result.push(transform(item)); } return result; }';
6
+ const unrelated = 'export function validateConfig(cfg) { if (!cfg.apiKey) throw new Error("missing"); return cfg; }';
7
+ it('identical canonical text yields Jaccard 1.0', () => {
8
+ const a = bodySignature(base);
9
+ const b = bodySignature(base);
10
+ expect(estimateJaccard(a, b)).toBe(1);
11
+ });
12
+ it('one-token edit yields high but sub-1.0 Jaccard', () => {
13
+ const j = estimateJaccard(bodySignature(base), bodySignature(nearEdit));
14
+ expect(j).toBeGreaterThan(0.5);
15
+ expect(j).toBeLessThan(1);
16
+ });
17
+ it('unrelated bodies yield low Jaccard', () => {
18
+ expect(estimateJaccard(bodySignature(base), bodySignature(unrelated))).toBeLessThan(0.5);
19
+ });
20
+ it('signatures are stable across runs', () => {
21
+ expect(bodySignature(base)).toEqual(bodySignature(base));
22
+ });
23
+ it('bands × rows equals k', () => {
24
+ expect(NEAR_DUP_LSH_BANDS * NEAR_DUP_LSH_ROWS).toBe(NEAR_DUP_SIGNATURE_K);
25
+ });
26
+ it('LSH knee is near the 0.85 threshold', () => {
27
+ const knee = (1 / NEAR_DUP_LSH_BANDS) ** (1 / NEAR_DUP_LSH_ROWS);
28
+ expect(knee).toBeCloseTo(0.878, 2);
29
+ });
30
+ it('shingle emits char 5-grams', () => {
31
+ expect(shingle('abcdef').size).toBe(2);
32
+ expect(shingle('ab').size).toBe(1);
33
+ expect(shingle('').size).toBe(0);
34
+ });
35
+ it('digestCanonicalBody returns hash, size, and signature', () => {
36
+ const d = digestCanonicalBody(base);
37
+ expect(d.hash).toMatch(/^[a-f0-9]{64}$/);
38
+ expect(d.size).toBeGreaterThan(0);
39
+ expect(d.signature?.length).toBe(NEAR_DUP_SIGNATURE_K);
40
+ });
41
+ it('lshBandHashes returns one hash per band', () => {
42
+ const sig = bodySignature(base);
43
+ expect(lshBandHashes(sig, NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS).length).toBe(NEAR_DUP_LSH_BANDS);
44
+ });
45
+ it('bodySignature returns empty for empty canonical (no shingles)', () => {
46
+ expect(bodySignature('')).toEqual([]);
47
+ });
48
+ it('bodySignature with custom k derives k seeds and returns k values', () => {
49
+ const sig = bodySignature(base, 32);
50
+ expect(sig.length).toBe(32);
51
+ // Custom-k path is deterministic and stable across calls.
52
+ expect(bodySignature(base, 32)).toEqual(sig);
53
+ // Identical body still self-matches under a custom k.
54
+ expect(estimateJaccard(sig, bodySignature(base, 32))).toBe(1);
55
+ });
56
+ it('bodySignature produces a full-width signature for sub-gram bodies', () => {
57
+ // Body shorter than the gram size yields a single whole-string shingle,
58
+ // exercising the single-base MinHash loop across all k positions.
59
+ const short = bodySignature('ab');
60
+ expect(short.length).toBe(NEAR_DUP_SIGNATURE_K);
61
+ expect(short.every((v) => Number.isInteger(v))).toBe(true);
62
+ });
63
+ it('estimateJaccard returns 0 when either signature is empty', () => {
64
+ const sig = bodySignature(base);
65
+ expect(estimateJaccard([], sig)).toBe(0);
66
+ expect(estimateJaccard(sig, [])).toBe(0);
67
+ expect(estimateJaccard([], [])).toBe(0);
68
+ });
69
+ it('estimateJaccard returns 0 for mismatched signature lengths', () => {
70
+ expect(estimateJaccard(bodySignature(base), bodySignature(base, 32))).toBe(0);
71
+ });
72
+ it('digestCanonicalBody omits signature for empty canonical', () => {
73
+ const d = digestCanonicalBody('');
74
+ expect(d.hash).toMatch(/^[a-f0-9]{64}$/);
75
+ expect(d.signature).toBeUndefined();
76
+ });
77
+ });
78
+ //# sourceMappingURL=near-duplicate-signature.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-duplicate-signature.test.js","sourceRoot":"","sources":["../../../src/lang-adapter/__tests__/near-duplicate-signature.test.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,14 @@
1
1
  /**
2
- * @fileoverview Shared body-digest primitives for GraphLanguageAdapters.
2
+ * @fileoverview Body-digest primitives relocated to `@opensip-cli/clone-detection`.
3
3
  *
4
- * The catalog's `bodyHash` contract is "reduce a function body to a
5
- * canonical string, then SHA-256 it." The normalize-to-hash TAIL of that
6
- * pipeline the `BodyDigest` shape, the whitespace-collapse normalizer,
7
- * and the hash+size step was byte-identical across every adapter that
8
- * hashes bodies (go/java/rust real bodies, plus the synthetic-body path
9
- * in all four tree-sitter packs). Per the round-3 modular-monolith audit
10
- * (2026-05-30, finding D) it lives here on the contract layer instead of
11
- * being copy-pasted into each pack.
4
+ * The hash/normalize tail (`BodyDigest`, `normalizeWhitespace`, `hashBody`) moved to
5
+ * the shared layer-2 substrate (ADR-0064) so both graph and yagni single-source it and
6
+ * cannot diverge. This module re-exports the same symbols verbatim so every existing
7
+ * graph-engine + adapter importer of `'../lang-adapter/body-digest.js'` is unchanged
8
+ * and `bodyHash` values stay byte-identical.
12
9
  *
13
- * This mirrors edge-helpers.ts exactly: tiny utilities that used to be
14
- * duplicated under each adapter now sit in lang-adapter/, which adapters
15
- * already import types from — so importing one more helper is
16
- * structurally consistent and violates no layering rule (lang-* adapters
17
- * may not import each OTHER, but lang-adapter/ is fair game).
18
- *
19
- * What deliberately STAYS in each adapter pack: the language-specific
20
- * comment stripper (Go rune literals vs Java text blocks vs Rust nested
21
- * block comments) and any language-specific normalization. Python, for
22
- * example, substitutes its own `normalizePythonBody` for real bodies
23
- * because indentation is semantically significant there — it still
24
- * composes `hashBody` + `normalizeWhitespace` for synthetic bodies. The
25
- * primitives are intentionally low-level (not a single `digestBody(text,
26
- * stripFn)`) precisely so a pack can swap the normalization step.
27
- */
28
- /** Catalog body fingerprint: SHA-256 hex hash + canonical-text length. */
29
- export interface BodyDigest {
30
- readonly hash: string;
31
- readonly size: number;
32
- }
33
- /**
34
- * Collapse every run of whitespace to a single space and trim. The
35
- * default body normalization for whitespace-insensitive languages
36
- * (Go/Java/Rust) and for synthetic (module-init) bodies in every pack.
37
- */
38
- export declare function normalizeWhitespace(s: string): string;
39
- /**
40
- * SHA-256 an already-normalized ("canonical") body string into a
41
- * `BodyDigest`. `size` is the canonical-text length so it tracks the
42
- * hashed content, not the raw source. Callers normalize first — via
43
- * `normalizeWhitespace` or a language-specific normalizer.
10
+ * Language-specific comment strippers / normalizers still live in each adapter pack;
11
+ * only the canonical-string→hash tail is shared (see the package).
44
12
  */
45
- export declare function hashBody(canonical: string): BodyDigest;
13
+ export { normalizeWhitespace, hashBody, type BodyDigest } from '@opensip-cli/clone-detection';
46
14
  //# sourceMappingURL=body-digest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"body-digest.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/body-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAKtD"}
1
+ {"version":3,"file":"body-digest.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/body-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC"}
@@ -1,49 +1,14 @@
1
1
  /**
2
- * @fileoverview Shared body-digest primitives for GraphLanguageAdapters.
2
+ * @fileoverview Body-digest primitives relocated to `@opensip-cli/clone-detection`.
3
3
  *
4
- * The catalog's `bodyHash` contract is "reduce a function body to a
5
- * canonical string, then SHA-256 it." The normalize-to-hash TAIL of that
6
- * pipeline the `BodyDigest` shape, the whitespace-collapse normalizer,
7
- * and the hash+size step was byte-identical across every adapter that
8
- * hashes bodies (go/java/rust real bodies, plus the synthetic-body path
9
- * in all four tree-sitter packs). Per the round-3 modular-monolith audit
10
- * (2026-05-30, finding D) it lives here on the contract layer instead of
11
- * being copy-pasted into each pack.
4
+ * The hash/normalize tail (`BodyDigest`, `normalizeWhitespace`, `hashBody`) moved to
5
+ * the shared layer-2 substrate (ADR-0064) so both graph and yagni single-source it and
6
+ * cannot diverge. This module re-exports the same symbols verbatim so every existing
7
+ * graph-engine + adapter importer of `'../lang-adapter/body-digest.js'` is unchanged
8
+ * and `bodyHash` values stay byte-identical.
12
9
  *
13
- * This mirrors edge-helpers.ts exactly: tiny utilities that used to be
14
- * duplicated under each adapter now sit in lang-adapter/, which adapters
15
- * already import types from — so importing one more helper is
16
- * structurally consistent and violates no layering rule (lang-* adapters
17
- * may not import each OTHER, but lang-adapter/ is fair game).
18
- *
19
- * What deliberately STAYS in each adapter pack: the language-specific
20
- * comment stripper (Go rune literals vs Java text blocks vs Rust nested
21
- * block comments) and any language-specific normalization. Python, for
22
- * example, substitutes its own `normalizePythonBody` for real bodies
23
- * because indentation is semantically significant there — it still
24
- * composes `hashBody` + `normalizeWhitespace` for synthetic bodies. The
25
- * primitives are intentionally low-level (not a single `digestBody(text,
26
- * stripFn)`) precisely so a pack can swap the normalization step.
27
- */
28
- import { createHash } from 'node:crypto';
29
- /**
30
- * Collapse every run of whitespace to a single space and trim. The
31
- * default body normalization for whitespace-insensitive languages
32
- * (Go/Java/Rust) and for synthetic (module-init) bodies in every pack.
33
- */
34
- export function normalizeWhitespace(s) {
35
- return s.replaceAll(/\s+/g, ' ').trim();
36
- }
37
- /**
38
- * SHA-256 an already-normalized ("canonical") body string into a
39
- * `BodyDigest`. `size` is the canonical-text length so it tracks the
40
- * hashed content, not the raw source. Callers normalize first — via
41
- * `normalizeWhitespace` or a language-specific normalizer.
10
+ * Language-specific comment strippers / normalizers still live in each adapter pack;
11
+ * only the canonical-string→hash tail is shared (see the package).
42
12
  */
43
- export function hashBody(canonical) {
44
- return {
45
- hash: createHash('sha256').update(canonical, 'utf8').digest('hex'),
46
- size: canonical.length,
47
- };
48
- }
13
+ export { normalizeWhitespace, hashBody } from '@opensip-cli/clone-detection';
49
14
  //# sourceMappingURL=body-digest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"body-digest.js","sourceRoot":"","sources":["../../src/lang-adapter/body-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAClE,IAAI,EAAE,SAAS,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"body-digest.js","sourceRoot":"","sources":["../../src/lang-adapter/body-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAmB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Canonical language id by file extension — engine-homed for rule gating.
3
+ *
4
+ * The near-clone rule must gate candidate pairs to the same language. The
5
+ * equivalent filter in graph-adapter-common cannot be imported from the engine
6
+ * rule layer (adapter-common depends on the engine). This module is the
7
+ * canonical extension map consumed by rules; adapter-common may delegate here
8
+ * in a follow-up.
9
+ */
10
+ /**
11
+ * Return the canonical language id for `filePath` by extension, or `undefined`
12
+ * when the extension is not recognized.
13
+ */
14
+ export declare function languageOfFile(filePath: string): string | undefined;
15
+ //# sourceMappingURL=language-of-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-of-file.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/language-of-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0BH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKnE"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Canonical language id by file extension — engine-homed for rule gating.
3
+ *
4
+ * The near-clone rule must gate candidate pairs to the same language. The
5
+ * equivalent filter in graph-adapter-common cannot be imported from the engine
6
+ * rule layer (adapter-common depends on the engine). This module is the
7
+ * canonical extension map consumed by rules; adapter-common may delegate here
8
+ * in a follow-up.
9
+ */
10
+ /**
11
+ * Extension suffix → canonical graph language id. Longest-match first per path.
12
+ * `.js`/`.jsx`/`.mjs`/`.cjs` map to `typescript` because the graph-typescript
13
+ * adapter analyzes them and a `.ts`↔`.js` (or `.js`↔`.js`) near-clone is a real,
14
+ * actionable clone — omitting them would silently skip every JS clone pair.
15
+ */
16
+ const EXTENSION_TO_LANGUAGE = {
17
+ '.tsx': 'typescript',
18
+ '.mts': 'typescript',
19
+ '.cts': 'typescript',
20
+ '.ts': 'typescript',
21
+ '.jsx': 'typescript',
22
+ '.mjs': 'typescript',
23
+ '.cjs': 'typescript',
24
+ '.js': 'typescript',
25
+ '.pyi': 'python',
26
+ '.py': 'python',
27
+ '.java': 'java',
28
+ '.go': 'go',
29
+ '.rs': 'rust',
30
+ };
31
+ const SORTED_EXTENSIONS = Object.keys(EXTENSION_TO_LANGUAGE).sort((a, b) => b.length - a.length);
32
+ /**
33
+ * Return the canonical language id for `filePath` by extension, or `undefined`
34
+ * when the extension is not recognized.
35
+ */
36
+ export function languageOfFile(filePath) {
37
+ for (const ext of SORTED_EXTENSIONS) {
38
+ if (filePath.endsWith(ext))
39
+ return EXTENSION_TO_LANGUAGE[ext];
40
+ }
41
+ return undefined;
42
+ }
43
+ //# sourceMappingURL=language-of-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-of-file.js","sourceRoot":"","sources":["../../src/lang-adapter/language-of-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;GAKG;AACH,MAAM,qBAAqB,GAAqC;IAC9D,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,MAAM;IACf,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,MAAM;CACd,CAAC;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjG;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Near-duplicate MinHash/LSH primitives — relocated to
3
+ * `@opensip-cli/clone-detection`.
4
+ *
5
+ * The signature constants + digest tail moved to the shared layer-2 substrate
6
+ * (ADR-0064) so graph and yagni single-source them. This module re-exports the same
7
+ * symbols verbatim so existing importers of `'../lang-adapter/near-duplicate-signature.js'`
8
+ * are unchanged and signature VALUES (and the `sig=` cache-key segment) stay
9
+ * byte-identical. `NEAR_DUP_SIGNATURE_VERSION` is unchanged by the move.
10
+ */
11
+ export { NEAR_DUP_SIGNATURE_K, NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS, NEAR_DUP_SIGNATURE_VERSION, shingle, bodySignature, estimateJaccard, lshBandHashes, digestCanonicalBody, type BodyDigestWithSignature, } from '@opensip-cli/clone-detection';
12
+ //# sourceMappingURL=near-duplicate-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-duplicate-signature.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/near-duplicate-signature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,aAAa,EACb,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @fileoverview Near-duplicate MinHash/LSH primitives — relocated to
3
+ * `@opensip-cli/clone-detection`.
4
+ *
5
+ * The signature constants + digest tail moved to the shared layer-2 substrate
6
+ * (ADR-0064) so graph and yagni single-source them. This module re-exports the same
7
+ * symbols verbatim so existing importers of `'../lang-adapter/near-duplicate-signature.js'`
8
+ * are unchanged and signature VALUES (and the `sig=` cache-key segment) stay
9
+ * byte-identical. `NEAR_DUP_SIGNATURE_VERSION` is unchanged by the move.
10
+ */
11
+ export { NEAR_DUP_SIGNATURE_K, NEAR_DUP_LSH_BANDS, NEAR_DUP_LSH_ROWS, NEAR_DUP_SIGNATURE_VERSION, shingle, bodySignature, estimateJaccard, lshBandHashes, digestCanonicalBody, } from '@opensip-cli/clone-detection';
12
+ //# sourceMappingURL=near-duplicate-signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"near-duplicate-signature.js","sourceRoot":"","sources":["../../src/lang-adapter/near-duplicate-signature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,OAAO,EACP,aAAa,EACb,eAAe,EACf,aAAa,EACb,mBAAmB,GAEpB,MAAM,8BAA8B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-source.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/read-source.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAa,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA8B,GACvC,MAAM,CAYR"}
1
+ {"version":3,"file":"read-source.d.ts","sourceRoot":"","sources":["../../src/lang-adapter/read-source.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAa,CAAC;AAEhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA8B,GACvC,MAAM,CAYR"}