scip-query 0.8.1 → 0.9.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 (82) hide show
  1. package/README.md +22 -9
  2. package/dist/{chunk-2EC4JTHC.js → chunk-2DVVHNC3.js} +2 -2
  3. package/dist/{chunk-HVGNOUYP.js → chunk-2Y2WIJI4.js} +2 -2
  4. package/dist/{chunk-GMEBYEMU.js → chunk-3YQO3S5D.js} +2 -2
  5. package/dist/chunk-44G4P3GJ.js +2 -0
  6. package/dist/{chunk-ZIIQ55VK.js → chunk-6HP3BKIP.js} +2 -2
  7. package/dist/chunk-B32FX5KB.js +2 -0
  8. package/dist/{chunk-MKE7SEEX.js → chunk-FYT2PE7C.js} +2 -2
  9. package/dist/{chunk-66ORT3LS.js → chunk-HDA2V5DC.js} +2 -2
  10. package/dist/{chunk-4A4JFNWG.js → chunk-I66MQD5U.js} +2 -2
  11. package/dist/chunk-IBM6FXOQ.js +3 -0
  12. package/dist/{chunk-4B7YLRXX.js → chunk-ITUU3VE3.js} +2 -2
  13. package/dist/{chunk-QYQXPPDI.js → chunk-K3V6XUTL.js} +2 -2
  14. package/dist/{chunk-XSZ5NC4O.js → chunk-L6TOEQ2M.js} +2 -2
  15. package/dist/{chunk-JAMU6FLN.js → chunk-LBAMALDV.js} +2 -2
  16. package/dist/chunk-LR7E2ATW.js +8 -0
  17. package/dist/chunk-NM3BZXHA.js +2 -0
  18. package/dist/{chunk-NOVKLH2F.js → chunk-NO2TPMCQ.js} +1 -1
  19. package/dist/{chunk-SSINY7HL.js → chunk-OMNT7E2T.js} +2 -2
  20. package/dist/chunk-R3G6ERW7.js +7 -0
  21. package/dist/{chunk-7UZWNW4E.js → chunk-SEZZ24IG.js} +2 -2
  22. package/dist/{chunk-DJTJ3DLZ.js → chunk-SLX5XBCD.js} +2 -2
  23. package/dist/{chunk-K4Z3FCUJ.js → chunk-SQ6VENQY.js} +3 -3
  24. package/dist/chunk-T4AK46CM.js +16 -0
  25. package/dist/{chunk-FIPE5AQT.js → chunk-TA4DDU7J.js} +2 -2
  26. package/dist/{chunk-UQE3DSXY.js → chunk-TCCUWKH4.js} +2 -2
  27. package/dist/{chunk-HVXIXDLV.js → chunk-U254PV4S.js} +2 -2
  28. package/dist/chunk-UIWAZ2NT.js +2 -0
  29. package/dist/{chunk-K6YIGVL7.js → chunk-VHENVDS2.js} +2 -2
  30. package/dist/{chunk-SB6I6O3P.js → chunk-VQGQHIAT.js} +2 -2
  31. package/dist/{chunk-FTBT4RP2.js → chunk-VTF5EH22.js} +2 -2
  32. package/dist/{chunk-SLOIQKY7.js → chunk-Y3RUPPIU.js} +2 -2
  33. package/dist/{chunk-OIMM7KMI.js → chunk-YO6DU7QZ.js} +2 -2
  34. package/dist/{chunk-EM2PPDN7.js → chunk-YSSTUCNS.js} +2 -2
  35. package/dist/cli.js +167 -149
  36. package/dist/index.js +1 -1
  37. package/dist/postinstall.js +2 -2
  38. package/dist/queries/bottlenecks.js +1 -1
  39. package/dist/queries/change-surface.js +1 -1
  40. package/dist/queries/cleanup-plan.js +1 -1
  41. package/dist/queries/co-change.js +1 -1
  42. package/dist/queries/complexity-hotspots.js +1 -1
  43. package/dist/queries/complexity.js +1 -1
  44. package/dist/queries/dead.js +1 -1
  45. package/dist/queries/diff-gate.d.ts +4 -1
  46. package/dist/queries/diff-gate.js +1 -1
  47. package/dist/queries/diff-impact.d.ts +3 -1
  48. package/dist/queries/diff-impact.js +1 -1
  49. package/dist/queries/doc-drift.js +1 -1
  50. package/dist/queries/drift.js +1 -1
  51. package/dist/queries/extract-candidates.js +1 -1
  52. package/dist/queries/health.js +1 -1
  53. package/dist/queries/incomplete-migration.d.ts +71 -0
  54. package/dist/queries/incomplete-migration.js +2 -0
  55. package/dist/queries/index.d.ts +1 -0
  56. package/dist/queries/index.js +1 -1
  57. package/dist/queries/isolated.js +1 -1
  58. package/dist/queries/members.js +1 -1
  59. package/dist/queries/methods.js +1 -1
  60. package/dist/queries/passthrough-candidates.js +1 -1
  61. package/dist/queries/plan-context.js +1 -1
  62. package/dist/queries/recent-duplicates.js +1 -1
  63. package/dist/queries/redundant-reexports.js +1 -1
  64. package/dist/queries/self-audit.js +1 -1
  65. package/dist/queries/similar-files.js +1 -1
  66. package/dist/queries/similar.d.ts +15 -1
  67. package/dist/queries/similar.js +1 -1
  68. package/dist/queries/slice.js +1 -1
  69. package/dist/queries/stale-abstractions.js +1 -1
  70. package/dist/queries/surface.js +1 -1
  71. package/dist/queries/unused-params.js +1 -1
  72. package/dist/queries/wrapper-candidates.js +1 -1
  73. package/dist/runtime.js +1 -1
  74. package/package.json +5 -1
  75. package/skills/scip-ai-cleanup/SKILL.md +1 -1
  76. package/skills/scip-query/SKILL.md +79 -0
  77. package/dist/chunk-6P5W4U6G.js +0 -16
  78. package/dist/chunk-GTZAU7OL.js +0 -2
  79. package/dist/chunk-N5D5ZCBW.js +0 -7
  80. package/dist/chunk-OQSV6OS2.js +0 -2
  81. package/dist/chunk-RKTDEIHF.js +0 -2
  82. package/dist/chunk-XBFLIGWU.js +0 -3
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a}from"./chunk-TKDJQ2WD.js";import{a as s}from"./chunk-NOVKLH2F.js";import"./chunk-TQTVM27C.js";import"./chunk-RIXOMSOR.js";import"./chunk-EAU4RDFG.js";import"./chunk-PCMVXWDC.js";import"./chunk-6ZFKI5EP.js";import"./chunk-64UY7VTR.js";import"./chunk-7I6KNKE3.js";import"./chunk-APLCSDXL.js";import"./chunk-WEJYUS5O.js";import"./chunk-PBGTMPJ7.js";import{a as i,c as n,d as l}from"./chunk-SOGLYIJ4.js";import"./chunk-WQFOZIID.js";import"./chunk-NN3O7TPH.js";import"./chunk-VDZL45XI.js";import c from"better-sqlite3";var d=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],o=class{db;config;pathFilter;constructor(t,e){this.config=t,this.pathFilter=e??null,this.db=new c(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
1
+ import{a}from"./chunk-TKDJQ2WD.js";import{a as s}from"./chunk-NO2TPMCQ.js";import"./chunk-TQTVM27C.js";import"./chunk-RIXOMSOR.js";import"./chunk-EAU4RDFG.js";import"./chunk-PCMVXWDC.js";import"./chunk-6ZFKI5EP.js";import"./chunk-64UY7VTR.js";import"./chunk-7I6KNKE3.js";import"./chunk-APLCSDXL.js";import"./chunk-WEJYUS5O.js";import"./chunk-PBGTMPJ7.js";import{a as i,c as n,d as l}from"./chunk-SOGLYIJ4.js";import"./chunk-WQFOZIID.js";import"./chunk-NN3O7TPH.js";import"./chunk-VDZL45XI.js";import c from"better-sqlite3";var d=["node_modules",".git","dist","build","out","coverage","target",".next",".nuxt",".cache",".turbo",".scipquery-cache","__pycache__",".venv","venv"],o=class{db;config;pathFilter;constructor(t,e){this.config=t,this.pathFilter=e??null,this.db=new c(t.dbPath,{readonly:!0}),this.db.pragma("busy_timeout = 5000")}isIgnored(t){return this.pathFilter?.isIgnored(t)??!1}get localSymbolPredicate(){return`(
2
2
  EXISTS (
3
3
  SELECT 1
4
4
  FROM defn_enclosing_ranges local_der
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{b as k,c as g,d as f,e as m}from"./chunk-LWYIGRHR.js";import{existsSync as p,mkdirSync as L,symlinkSync as v,readlinkSync as b,unlinkSync as C}from"fs";import{join as s,dirname as S,resolve as d}from"path";import{homedir as u,platform as q}from"os";import{fileURLToPath as N}from"url";var R=q()==="win32",T=["concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function A(n={}){let e=n.quiet?()=>{}:console.log,o=N(import.meta.url),I=d(S(o),"..","skills"),$=[s(u(),".claude","skills"),s(u(),".codex","skills"),s(u(),".agents","skills")],t={installed:[],skipped:[],alreadyLinked:[]};for(let r of $){let h=S(r);if(!p(h))continue;L(r,{recursive:!0});let l=j(r);for(let i of T){let a=s(I,i),c=s(r,i);if(!p(a)){t.skipped.push(`${l}/${i}`);continue}if(p(c)){try{let x=b(c);if(d(x)===d(a)){t.alreadyLinked.push(`${l}/${i}`),e(` ok: ${i} \u2192 ${l} (already linked)`);continue}}catch{t.skipped.push(`${l}/${i}`),e(` skip: ${i} \u2192 ${l} (exists, not a symlink)`);continue}C(c)}v(a,c,R?"junction":"dir"),t.installed.push(`${l}/${i}`),e(` done: ${i} \u2192 ${l}`)}}return t}function j(n){return n.includes(".codex")?"Codex":n.includes(".agents")?"Agents":"Claude"}function y(){console.log("scip-query: installing skills...");let n=A({quiet:!1});if(n.installed.length+n.alreadyLinked.length>0&&console.log(`
2
+ import{b as k,c as g,d as f,e as m}from"./chunk-LWYIGRHR.js";import{existsSync as p,mkdirSync as L,symlinkSync as v,readlinkSync as b,unlinkSync as q}from"fs";import{join as t,dirname as y,resolve as d}from"path";import{homedir as u,platform as C}from"os";import{fileURLToPath as N}from"url";var R=C()==="win32",T=["scip-query","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function A(n={}){let e=n.quiet?()=>{}:console.log,o=N(import.meta.url),I=d(y(o),"..","skills"),$=[t(u(),".claude","skills"),t(u(),".codex","skills"),t(u(),".agents","skills")],s={installed:[],skipped:[],alreadyLinked:[]};for(let r of $){let h=y(r);if(!p(h))continue;L(r,{recursive:!0});let l=j(r);for(let i of T){let a=t(I,i),c=t(r,i);if(!p(a)){s.skipped.push(`${l}/${i}`);continue}if(p(c)){try{let x=b(c);if(d(x)===d(a)){s.alreadyLinked.push(`${l}/${i}`),e(` ok: ${i} \u2192 ${l} (already linked)`);continue}}catch{s.skipped.push(`${l}/${i}`),e(` skip: ${i} \u2192 ${l} (exists, not a symlink)`);continue}q(c)}v(a,c,R?"junction":"dir"),s.installed.push(`${l}/${i}`),e(` done: ${i} \u2192 ${l}`)}}return s}function j(n){return n.includes(".codex")?"Codex":n.includes(".agents")?"Agents":"Claude"}function S(){console.log("scip-query: installing skills...");let n=A({quiet:!1});if(n.installed.length+n.alreadyLinked.length>0&&console.log(`
3
3
  ${n.installed.length} skill(s) installed, ${n.alreadyLinked.length} already linked.`),!k())console.log(`
4
4
  scip CLI not found on PATH. Attempting auto-install...`),m(console.log)||f();else{let o=g();console.log(`
5
- scip CLI: ${o??"installed"}`)}console.log("")}y();
5
+ scip CLI: ${o??"installed"}`)}console.log("")}S();
6
6
  //# sourceMappingURL=postinstall.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-XSZ5NC4O.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as bottlenecks};
1
+ import{a}from"../chunk-L6TOEQ2M.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as bottlenecks};
2
2
  //# sourceMappingURL=bottlenecks.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-4B7YLRXX.js";import"../chunk-WC43FMAB.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as changeSurface};
1
+ import{a}from"../chunk-ITUU3VE3.js";import"../chunk-WC43FMAB.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as changeSurface};
2
2
  //# sourceMappingURL=change-surface.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-FTBT4RP2.js";import"../chunk-OIMM7KMI.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{b as RemovedRangeIndex,a as cleanupPlan};
1
+ import{a,b}from"../chunk-VTF5EH22.js";import"../chunk-YO6DU7QZ.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{b as RemovedRangeIndex,a as cleanupPlan};
2
2
  //# sourceMappingURL=cleanup-plan.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-4A4JFNWG.js";import"../chunk-N5D5ZCBW.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{b as coChange,a as isCoChangeNoiseFile};
1
+ import{a,b}from"../chunk-I66MQD5U.js";import"../chunk-R3G6ERW7.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{b as coChange,a as isCoChangeNoiseFile};
2
2
  //# sourceMappingURL=co-change.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-K6YIGVL7.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as complexityHotspots};
1
+ import{a}from"../chunk-VHENVDS2.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as complexityHotspots};
2
2
  //# sourceMappingURL=complexity-hotspots.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-EM2PPDN7.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as complexity};
1
+ import{a}from"../chunk-YSSTUCNS.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as complexity};
2
2
  //# sourceMappingURL=complexity.js.map
@@ -1,2 +1,2 @@
1
- import{b as a}from"../chunk-OIMM7KMI.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as dead};
1
+ import{b as a}from"../chunk-YO6DU7QZ.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as dead};
2
2
  //# sourceMappingURL=dead.js.map
@@ -2,7 +2,7 @@ import { S as ScipDatabase } from '../db-DdTPetj5.js';
2
2
  import 'better-sqlite3';
3
3
  import '../config-types-CGIeLEpY.js';
4
4
 
5
- type DiffGateCheck = 'echo' | 'co-change-partner' | 'doc-reference' | 'unused-params' | 'new-dead' | 'baseline';
5
+ type DiffGateCheck = 'echo' | 'incomplete-migration' | 'co-change-partner' | 'doc-reference' | 'unused-params' | 'new-dead' | 'baseline';
6
6
  interface DiffGateFinding {
7
7
  check: DiffGateCheck;
8
8
  message: string;
@@ -30,6 +30,9 @@ interface DiffGateResult {
30
30
  * Checks:
31
31
  * - echo: a symbol this diff touched closely resembles
32
32
  * established code elsewhere — likely re-implementation.
33
+ * - incomplete-migration: a helper added in this diff was wired into some
34
+ * sites, but similar un-migrated sites remain elsewhere
35
+ * — the extraction stopped partway.
33
36
  * - co-change-partner: a changed file's strong historical partner is NOT in
34
37
  * the diff — the change-graph contract says they move
35
38
  * together (auto-derived sync enforcement).
@@ -1,2 +1,2 @@
1
- import{d as a}from"../chunk-XBFLIGWU.js";import"../chunk-HVGNOUYP.js";import"../chunk-AQYBOORI.js";import"../chunk-DJTJ3DLZ.js";import"../chunk-SSINY7HL.js";import"../chunk-CVRXOP6M.js";import"../chunk-QYQXPPDI.js";import"../chunk-SLOIQKY7.js";import"../chunk-K4Z3FCUJ.js";import"../chunk-RKTDEIHF.js";import"../chunk-HVXIXDLV.js";import"../chunk-6P5W4U6G.js";import"../chunk-OQSV6OS2.js";import"../chunk-2EC4JTHC.js";import"../chunk-OIMM7KMI.js";import"../chunk-4A4JFNWG.js";import"../chunk-N5D5ZCBW.js";import"../chunk-V76FCF5F.js";import"../chunk-EKP7XJ6L.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as diffGate};
1
+ import{d as a}from"../chunk-IBM6FXOQ.js";import"../chunk-2Y2WIJI4.js";import"../chunk-B32FX5KB.js";import"../chunk-OMNT7E2T.js";import"../chunk-AQYBOORI.js";import"../chunk-SLX5XBCD.js";import"../chunk-CVRXOP6M.js";import"../chunk-K3V6XUTL.js";import"../chunk-Y3RUPPIU.js";import"../chunk-U254PV4S.js";import"../chunk-LR7E2ATW.js";import"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import"../chunk-T4AK46CM.js";import"../chunk-44G4P3GJ.js";import"../chunk-2DVVHNC3.js";import"../chunk-YO6DU7QZ.js";import"../chunk-I66MQD5U.js";import"../chunk-R3G6ERW7.js";import"../chunk-V76FCF5F.js";import"../chunk-EKP7XJ6L.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as diffGate};
2
2
  //# sourceMappingURL=diff-gate.js.map
@@ -27,6 +27,8 @@ interface DiffImpactPlan {
27
27
  changedFiles: string[];
28
28
  note?: string;
29
29
  }
30
+ /** Plan note when git itself failed (not a repo, bad ref) — vs an empty diff. */
31
+ declare const GIT_DIFF_UNAVAILABLE_NOTE = "Unable to compute git diff.";
30
32
  interface DiffImpactPartial {
31
33
  changedSymbols: ChangedSymbol[];
32
34
  consumerEntries: Array<{
@@ -48,4 +50,4 @@ declare function diffImpactPlan(db: ScipDatabase, opts?: {
48
50
  declare function diffImpactPartial(db: ScipDatabase, filesToAnalyze: readonly string[], allChangedFiles: readonly string[]): DiffImpactPartial;
49
51
  declare function mergeDiffImpactPartials(changedFiles: readonly string[], partials: readonly DiffImpactPartial[]): DiffImpactResult;
50
52
 
51
- export { type DiffImpactPartial, type DiffImpactPlan, type DiffImpactResult, diffImpact, diffImpactPartial, diffImpactPlan, mergeDiffImpactPartials };
53
+ export { type DiffImpactPartial, type DiffImpactPlan, type DiffImpactResult, GIT_DIFF_UNAVAILABLE_NOTE, diffImpact, diffImpactPartial, diffImpactPlan, mergeDiffImpactPartials };
@@ -1,2 +1,2 @@
1
- import{a,b,c,d}from"../chunk-6P5W4U6G.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as diffImpact,c as diffImpactPartial,b as diffImpactPlan,d as mergeDiffImpactPartials};
1
+ import{a,b,c,d,e}from"../chunk-T4AK46CM.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as GIT_DIFF_UNAVAILABLE_NOTE,b as diffImpact,d as diffImpactPartial,c as diffImpactPlan,e as mergeDiffImpactPartials};
2
2
  //# sourceMappingURL=diff-impact.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c}from"../chunk-OQSV6OS2.js";import"../chunk-N5D5ZCBW.js";import"../chunk-VDZL45XI.js";export{b as docDrift,c as docsCitingFiles,a as isArchivalDoc};
1
+ import{a,b,c}from"../chunk-44G4P3GJ.js";import"../chunk-R3G6ERW7.js";import"../chunk-VDZL45XI.js";export{b as docDrift,c as docsCitingFiles,a as isArchivalDoc};
2
2
  //# sourceMappingURL=doc-drift.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-2EC4JTHC.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as drift};
1
+ import{a}from"../chunk-2DVVHNC3.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as drift};
2
2
  //# sourceMappingURL=drift.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-HVXIXDLV.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as extractCandidates};
1
+ import{a}from"../chunk-U254PV4S.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as extractCandidates};
2
2
  //# sourceMappingURL=extract-candidates.js.map
@@ -1,2 +1,2 @@
1
- import{a,b,c,d}from"../chunk-GTZAU7OL.js";import"../chunk-JTCEWV7Q.js";import"../chunk-AQYBOORI.js";import"../chunk-DJTJ3DLZ.js";import"../chunk-SSINY7HL.js";import"../chunk-CVRXOP6M.js";import"../chunk-QYQXPPDI.js";import"../chunk-SLOIQKY7.js";import"../chunk-K4Z3FCUJ.js";import"../chunk-RKTDEIHF.js";import"../chunk-HVXIXDLV.js";import"../chunk-2EC4JTHC.js";import"../chunk-OIMM7KMI.js";import"../chunk-4A4JFNWG.js";import"../chunk-N5D5ZCBW.js";import"../chunk-K6YIGVL7.js";import"../chunk-V76FCF5F.js";import"../chunk-EKP7XJ6L.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as HEALTH_PHASES,b as health,c as healthPhase,d as healthReportFromPhases};
1
+ import{a,b,c,d}from"../chunk-NM3BZXHA.js";import"../chunk-JTCEWV7Q.js";import"../chunk-B32FX5KB.js";import"../chunk-OMNT7E2T.js";import"../chunk-AQYBOORI.js";import"../chunk-SLX5XBCD.js";import"../chunk-CVRXOP6M.js";import"../chunk-K3V6XUTL.js";import"../chunk-Y3RUPPIU.js";import"../chunk-U254PV4S.js";import"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import"../chunk-2DVVHNC3.js";import"../chunk-YO6DU7QZ.js";import"../chunk-I66MQD5U.js";import"../chunk-R3G6ERW7.js";import"../chunk-VHENVDS2.js";import"../chunk-V76FCF5F.js";import"../chunk-EKP7XJ6L.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as HEALTH_PHASES,b as health,c as healthPhase,d as healthReportFromPhases};
2
2
  //# sourceMappingURL=health.js.map
@@ -0,0 +1,71 @@
1
+ import { S as ScipDatabase } from '../db-DdTPetj5.js';
2
+ import 'better-sqlite3';
3
+ import '../config-types-CGIeLEpY.js';
4
+
5
+ interface IncompleteMigrationLeftover {
6
+ symbol: string;
7
+ shortName: string;
8
+ file: string;
9
+ /** |helper callees ∩ site callees| / |helper callees| (0-1). */
10
+ containment: number;
11
+ sharedCallees: string[];
12
+ }
13
+ interface IncompleteMigrationFinding {
14
+ helperSymbol: string;
15
+ helperShortName: string;
16
+ helperFile: string;
17
+ /** Files referencing the helper. The helper is new, so every one of these references landed in this diff. */
18
+ migratedFiles: string[];
19
+ /** Un-migrated sites: contain the helper's callee set inline, don't call it. */
20
+ leftovers: IncompleteMigrationLeftover[];
21
+ }
22
+ interface IncompleteMigrationSkip {
23
+ helperShortName: string;
24
+ helperFile: string;
25
+ reason: string;
26
+ }
27
+ interface IncompleteMigrationResult {
28
+ /** False when git history is unavailable (not a repo, bad base ref). */
29
+ available: boolean;
30
+ base: string;
31
+ changedFiles: string[];
32
+ /** New helpers that passed the callee/reference gates and were scored. */
33
+ helpersChecked: number;
34
+ /** New helpers that could not be scored, with reasons — no silent caps. */
35
+ skipped: IncompleteMigrationSkip[];
36
+ findings: IncompleteMigrationFinding[];
37
+ note?: string;
38
+ }
39
+ /**
40
+ * Incomplete extractions: an agent adds a helper, rewires a site or two into
41
+ * it, and misses the remaining sites that still hold the same logic inline.
42
+ *
43
+ * The signature of a missed site is asymmetric: its callee set CONTAINS the
44
+ * helper's callee set (plus its own surrounding logic), so symmetric cosine
45
+ * (`similar`) under-scores exactly the sites we're after. This detector:
46
+ *
47
+ * 1. finds production callables in the diff whose name is absent at `base`
48
+ * (the new helpers),
49
+ * 2. keeps those with at least one reference — the wired-in evidence
50
+ * (zero-reference helpers belong to diff-gate's new-dead check),
51
+ * 3. reports established, untouched functions whose callees contain the
52
+ * helper's callees at >= minContainment and that do NOT call the helper,
53
+ * requiring at least one non-ubiquitous shared callee so project-wide
54
+ * infrastructure overlap alone can't fire. (Deliberately NOT median-IDF
55
+ * significance: the more sites a pattern was duplicated across, the more
56
+ * common its callees are in the corpus — an IDF gate suppresses exactly
57
+ * the widespread-leftover case this detector exists for.)
58
+ *
59
+ * Helpers with fewer than `minCallees` meaningful callees are skipped (and
60
+ * reported as skipped): callee evidence is too thin to score tiny wrappers.
61
+ */
62
+ declare function incompleteMigration(db: ScipDatabase, opts?: {
63
+ base?: string;
64
+ minContainment?: number;
65
+ minCallees?: number;
66
+ maxHelpers?: number;
67
+ limit?: number;
68
+ semantic?: boolean;
69
+ }): IncompleteMigrationResult;
70
+
71
+ export { type IncompleteMigrationFinding, type IncompleteMigrationLeftover, type IncompleteMigrationResult, type IncompleteMigrationSkip, incompleteMigration };
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-LR7E2ATW.js";import"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import"../chunk-T4AK46CM.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as incompleteMigration};
2
+ //# sourceMappingURL=incomplete-migration.js.map
@@ -29,6 +29,7 @@ export { AffectedResult, affected } from './affected.js';
29
29
  export { ChangeSurfaceEntry, ChangeSurfaceResult, changeSurface } from './change-surface.js';
30
30
  export { CleanupBatch, CleanupPlanEntry, CleanupPlanResult, cleanupPlan } from './cleanup-plan.js';
31
31
  export { DiffGateCheck, DiffGateFinding, DiffGateResult, diffGate } from './diff-gate.js';
32
+ export { incompleteMigration } from './incomplete-migration.js';
32
33
  export { CoChangeFinding, CoChangeResult, coChange } from './co-change.js';
33
34
  export { DocDriftFinding, DocDriftResult, DocDriftSubject, docDrift } from './doc-drift.js';
34
35
  export { RecentDuplicateFinding, RecentDuplicatesResult, recentDuplicates } from './recent-duplicates.js';
@@ -1,2 +1,2 @@
1
- import{a as $}from"../chunk-PLFYFZX3.js";import{a as te}from"../chunk-VN6B6HFB.js";import{a as ue}from"../chunk-66ORT3LS.js";import{a as me}from"../chunk-NGLRXEWN.js";import{a as fe}from"../chunk-MKE7SEEX.js";import{a as ce}from"../chunk-6G76D2YM.js";import{a as ae}from"../chunk-ZIIQ55VK.js";import{a as ee}from"../chunk-GMEBYEMU.js";import{a as se}from"../chunk-ZJ737ZMD.js";import{a as xe}from"../chunk-SB6I6O3P.js";import{a as pe}from"../chunk-UQE3DSXY.js";import{a as oe}from"../chunk-GD7XRHSV.js";import{a as re}from"../chunk-NK7TQQG4.js";import{a as ie}from"../chunk-JAMU6FLN.js";import{a as le}from"../chunk-7UZWNW4E.js";import{a as ne}from"../chunk-FIPE5AQT.js";import{a as N,b as T,c as U,d as L}from"../chunk-TR5AU6A5.js";import{a as Q}from"../chunk-PG3ZI5IH.js";import{a as W,b as _,c as q,d as z}from"../chunk-GTZAU7OL.js";import"../chunk-JTCEWV7Q.js";import{a as J}from"../chunk-SDGCKEB7.js";import{a as V}from"../chunk-7TYJD45F.js";import{a as X,b as Y,c as Z}from"../chunk-TFO4OMJZ.js";import{a as y}from"../chunk-BCFED24F.js";import{a as h}from"../chunk-PE4EJOLN.js";import{a as j,b as R}from"../chunk-AGW2MVIO.js";import{a as E,b as O,c as v,d as M}from"../chunk-XBFLIGWU.js";import{a as K}from"../chunk-HVGNOUYP.js";import{a as G}from"../chunk-AQYBOORI.js";import{a as w}from"../chunk-DJTJ3DLZ.js";import{a as k}from"../chunk-SSINY7HL.js";import"../chunk-CVRXOP6M.js";import{a as H}from"../chunk-QYQXPPDI.js";import{a as A}from"../chunk-SLOIQKY7.js";import{a as I,b as B}from"../chunk-K4Z3FCUJ.js";import"../chunk-RKTDEIHF.js";import{a as P}from"../chunk-HVXIXDLV.js";import{a as C,b as g,c as S,d as D}from"../chunk-6P5W4U6G.js";import{b}from"../chunk-OQSV6OS2.js";import{a as F}from"../chunk-2EC4JTHC.js";import{a as f}from"../chunk-FTBT4RP2.js";import{b as a}from"../chunk-OIMM7KMI.js";import{b as m}from"../chunk-4A4JFNWG.js";import"../chunk-N5D5ZCBW.js";import{a as l}from"../chunk-Z2AJQ7VA.js";import{a as i}from"../chunk-EM2PPDN7.js";import{a as x}from"../chunk-K6YIGVL7.js";import"../chunk-V76FCF5F.js";import{a as n}from"../chunk-I7OTKWNY.js";import{a as u,b as c}from"../chunk-46ILZVMX.js";import{a as d}from"../chunk-EKP7XJ6L.js";import{a as e}from"../chunk-UUDYI3FF.js";import{a as t}from"../chunk-XSZ5NC4O.js";import{a as r,b as o}from"../chunk-RCRK4E7E.js";import{a as p}from"../chunk-D43L5PQF.js";import"../chunk-MX6F756F.js";import{a as s}from"../chunk-4B7YLRXX.js";import"../chunk-WC43FMAB.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{W as HEALTH_PHASES,e as affected,t as bottlenecks,r as byKind,p as callGraph,s as changeSurface,v as checkHealthBaseline,f as cleanupPlan,m as coChange,l as code,E as collectBaselineFindings,i as complexity,x as complexityHotspots,n as convergence,u as coupling,d as cycles,y as dataflow,a as dead,h as deepChains,j as deps,M as diffGate,C as diffImpact,S as diffImpactPartial,g as diffImpactPlan,b as docDrift,F as drift,P as extractCandidates,N as fanIn,T as fanOut,Q as files,_ as health,q as healthPhase,z as healthReportFromPhases,J as hierarchy,V as hotspots,Y as importedBy,X as imports,H as isolated,o as kindCounts,ae as members,D as mergeDiffImpactPartials,ee as methods,se as outline,A as passthroughCandidates,xe as planContext,R as rdeps,le as recentDuplicates,ne as redundantReexports,te as refs,ue as selfAudit,I as similar,B as similarAll,me as similarChains,fe as similarFiles,ce as similarSignatures,ie as slice,k as staleAbstractions,G as stats,pe as surface,$ as symbols,oe as system,c as topCoupling,U as topFanIn,L as topFanOut,re as trace,Z as unusedImports,K as unusedParams,w as wrapperCandidates,O as writeHealthBaseline};
1
+ import{a as ee}from"../chunk-PLFYFZX3.js";import{a as ue}from"../chunk-TA4DDU7J.js";import{a as re}from"../chunk-VN6B6HFB.js";import{a as ce}from"../chunk-HDA2V5DC.js";import{a as le}from"../chunk-NGLRXEWN.js";import{a as me}from"../chunk-FYT2PE7C.js";import{a as de}from"../chunk-6G76D2YM.js";import{a as fe}from"../chunk-6HP3BKIP.js";import{a as te}from"../chunk-3YQO3S5D.js";import{a as ae}from"../chunk-ZJ737ZMD.js";import{a as ne}from"../chunk-VQGQHIAT.js";import{a as se}from"../chunk-TCCUWKH4.js";import{a as pe}from"../chunk-GD7XRHSV.js";import{a as oe}from"../chunk-NK7TQQG4.js";import{a as xe}from"../chunk-LBAMALDV.js";import{a as ie}from"../chunk-SEZZ24IG.js";import{a as T,b as U,c as L,d as Q}from"../chunk-TR5AU6A5.js";import{a as W}from"../chunk-PG3ZI5IH.js";import{a as _,b as q,c as z,d as J}from"../chunk-NM3BZXHA.js";import"../chunk-JTCEWV7Q.js";import{a as V}from"../chunk-SDGCKEB7.js";import{a as X}from"../chunk-7TYJD45F.js";import{a as Y,b as Z,c as $}from"../chunk-TFO4OMJZ.js";import{a as y}from"../chunk-BCFED24F.js";import{a as h}from"../chunk-PE4EJOLN.js";import{a as j,b as R}from"../chunk-AGW2MVIO.js";import{a as E,b as O,c as v,d as N}from"../chunk-IBM6FXOQ.js";import{a as K}from"../chunk-2Y2WIJI4.js";import"../chunk-B32FX5KB.js";import{a as k}from"../chunk-OMNT7E2T.js";import{a as G}from"../chunk-AQYBOORI.js";import{a as w}from"../chunk-SLX5XBCD.js";import"../chunk-CVRXOP6M.js";import{a as H}from"../chunk-K3V6XUTL.js";import{a as A}from"../chunk-Y3RUPPIU.js";import{a as P}from"../chunk-U254PV4S.js";import{a as M}from"../chunk-LR7E2ATW.js";import{a as I,b as B}from"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import{b as C,c as g,d as S,e as D}from"../chunk-T4AK46CM.js";import{b}from"../chunk-44G4P3GJ.js";import{a as F}from"../chunk-2DVVHNC3.js";import{a as f}from"../chunk-VTF5EH22.js";import{b as a}from"../chunk-YO6DU7QZ.js";import{b as m}from"../chunk-I66MQD5U.js";import"../chunk-R3G6ERW7.js";import{a as l}from"../chunk-Z2AJQ7VA.js";import{a as i}from"../chunk-YSSTUCNS.js";import{a as x}from"../chunk-VHENVDS2.js";import"../chunk-V76FCF5F.js";import{a as n}from"../chunk-I7OTKWNY.js";import{a as u,b as c}from"../chunk-46ILZVMX.js";import{a as d}from"../chunk-EKP7XJ6L.js";import{a as e}from"../chunk-UUDYI3FF.js";import{a as t}from"../chunk-L6TOEQ2M.js";import{a as r,b as o}from"../chunk-RCRK4E7E.js";import{a as p}from"../chunk-D43L5PQF.js";import"../chunk-MX6F756F.js";import{a as s}from"../chunk-ITUU3VE3.js";import"../chunk-WC43FMAB.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{_ as HEALTH_PHASES,e as affected,t as bottlenecks,r as byKind,p as callGraph,s as changeSurface,v as checkHealthBaseline,f as cleanupPlan,m as coChange,l as code,E as collectBaselineFindings,i as complexity,x as complexityHotspots,n as convergence,u as coupling,d as cycles,y as dataflow,a as dead,h as deepChains,j as deps,N as diffGate,C as diffImpact,S as diffImpactPartial,g as diffImpactPlan,b as docDrift,F as drift,P as extractCandidates,T as fanIn,U as fanOut,W as files,q as health,z as healthPhase,J as healthReportFromPhases,V as hierarchy,X as hotspots,Z as importedBy,Y as imports,M as incompleteMigration,H as isolated,o as kindCounts,fe as members,D as mergeDiffImpactPartials,te as methods,ae as outline,A as passthroughCandidates,ne as planContext,R as rdeps,ie as recentDuplicates,ue as redundantReexports,re as refs,ce as selfAudit,I as similar,B as similarAll,le as similarChains,me as similarFiles,de as similarSignatures,xe as slice,k as staleAbstractions,G as stats,se as surface,ee as symbols,pe as system,c as topCoupling,L as topFanIn,Q as topFanOut,oe as trace,$ as unusedImports,K as unusedParams,w as wrapperCandidates,O as writeHealthBaseline};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-QYQXPPDI.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as isolated};
1
+ import{a}from"../chunk-K3V6XUTL.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as isolated};
2
2
  //# sourceMappingURL=isolated.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-ZIIQ55VK.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as members};
1
+ import{a}from"../chunk-6HP3BKIP.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as members};
2
2
  //# sourceMappingURL=members.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-GMEBYEMU.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as methods};
1
+ import{a}from"../chunk-3YQO3S5D.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as methods};
2
2
  //# sourceMappingURL=methods.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-SLOIQKY7.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as passthroughCandidates};
1
+ import{a}from"../chunk-Y3RUPPIU.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as passthroughCandidates};
2
2
  //# sourceMappingURL=passthrough-candidates.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-SB6I6O3P.js";import"../chunk-UQE3DSXY.js";import"../chunk-GD7XRHSV.js";import"../chunk-NK7TQQG4.js";import"../chunk-JAMU6FLN.js";import"../chunk-JTCEWV7Q.js";import"../chunk-BCFED24F.js";import"../chunk-AGW2MVIO.js";import"../chunk-4A4JFNWG.js";import"../chunk-N5D5ZCBW.js";import"../chunk-EM2PPDN7.js";import"../chunk-UUDYI3FF.js";import"../chunk-D43L5PQF.js";import"../chunk-MX6F756F.js";import"../chunk-4B7YLRXX.js";import"../chunk-WC43FMAB.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as planContext};
1
+ import{a}from"../chunk-VQGQHIAT.js";import"../chunk-TCCUWKH4.js";import"../chunk-GD7XRHSV.js";import"../chunk-NK7TQQG4.js";import"../chunk-LBAMALDV.js";import"../chunk-JTCEWV7Q.js";import"../chunk-BCFED24F.js";import"../chunk-AGW2MVIO.js";import"../chunk-I66MQD5U.js";import"../chunk-R3G6ERW7.js";import"../chunk-YSSTUCNS.js";import"../chunk-UUDYI3FF.js";import"../chunk-D43L5PQF.js";import"../chunk-MX6F756F.js";import"../chunk-ITUU3VE3.js";import"../chunk-WC43FMAB.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as planContext};
2
2
  //# sourceMappingURL=plan-context.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-7UZWNW4E.js";import"../chunk-K4Z3FCUJ.js";import"../chunk-RKTDEIHF.js";import"../chunk-N5D5ZCBW.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as recentDuplicates};
1
+ import{a}from"../chunk-SEZZ24IG.js";import"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import"../chunk-R3G6ERW7.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as recentDuplicates};
2
2
  //# sourceMappingURL=recent-duplicates.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-FIPE5AQT.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as redundantReexports};
1
+ import{a}from"../chunk-TA4DDU7J.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as redundantReexports};
2
2
  //# sourceMappingURL=redundant-reexports.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-66ORT3LS.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as selfAudit};
1
+ import{a}from"../chunk-HDA2V5DC.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as selfAudit};
2
2
  //# sourceMappingURL=self-audit.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-MKE7SEEX.js";import"../chunk-RKTDEIHF.js";import"../chunk-RIXOMSOR.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as similarFiles};
1
+ import{a}from"../chunk-FYT2PE7C.js";import"../chunk-UIWAZ2NT.js";import"../chunk-RIXOMSOR.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as similarFiles};
2
2
  //# sourceMappingURL=similar-files.js.map
@@ -54,5 +54,19 @@ declare function similarAll(db: ScipDatabase, opts?: {
54
54
  scanLimit?: number;
55
55
  semantic?: boolean;
56
56
  }): SimilarSymbolResult[];
57
+ interface SymbolFingerprint {
58
+ symbol: string;
59
+ file: string;
60
+ callees: Set<string>;
61
+ paramCount: number;
62
+ }
63
+ declare function getAllCalleeFingerprints(db: ScipDatabase, opts: {
64
+ minCallees: number;
65
+ scope?: string;
66
+ excludeSymbol?: string;
67
+ scanLimit?: number;
68
+ semantic?: boolean;
69
+ }): SymbolFingerprint[];
70
+ declare function meaningfulCallees(callees: Iterable<string>): Set<string>;
57
71
 
58
- export { type SimilarSymbolResult, similar, similarAll };
72
+ export { type SimilarSymbolResult, type SymbolFingerprint, getAllCalleeFingerprints, meaningfulCallees, similar, similarAll };
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-K4Z3FCUJ.js";import"../chunk-RKTDEIHF.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as similar,b as similarAll};
1
+ import{a,b,c,d}from"../chunk-SQ6VENQY.js";import"../chunk-UIWAZ2NT.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{c as getAllCalleeFingerprints,d as meaningfulCallees,a as similar,b as similarAll};
2
2
  //# sourceMappingURL=similar.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-JAMU6FLN.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as slice};
1
+ import{a}from"../chunk-LBAMALDV.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as slice};
2
2
  //# sourceMappingURL=slice.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-SSINY7HL.js";import"../chunk-CVRXOP6M.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as staleAbstractions};
1
+ import{a}from"../chunk-OMNT7E2T.js";import"../chunk-CVRXOP6M.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as staleAbstractions};
2
2
  //# sourceMappingURL=stale-abstractions.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-UQE3DSXY.js";import"../chunk-WC43FMAB.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as surface};
1
+ import{a}from"../chunk-TCCUWKH4.js";import"../chunk-WC43FMAB.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as surface};
2
2
  //# sourceMappingURL=surface.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-HVGNOUYP.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as unusedParams};
1
+ import{a}from"../chunk-2Y2WIJI4.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as unusedParams};
2
2
  //# sourceMappingURL=unused-params.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-DJTJ3DLZ.js";import"../chunk-CVRXOP6M.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NOVKLH2F.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as wrapperCandidates};
1
+ import{a}from"../chunk-SLX5XBCD.js";import"../chunk-CVRXOP6M.js";import"../chunk-V76FCF5F.js";import"../chunk-MX6F756F.js";import"../chunk-NO2TPMCQ.js";import"../chunk-TQTVM27C.js";import"../chunk-RIXOMSOR.js";import"../chunk-EAU4RDFG.js";import"../chunk-PCMVXWDC.js";import"../chunk-6ZFKI5EP.js";import"../chunk-64UY7VTR.js";import"../chunk-7I6KNKE3.js";import"../chunk-APLCSDXL.js";import"../chunk-WEJYUS5O.js";import"../chunk-PBGTMPJ7.js";import"../chunk-SOGLYIJ4.js";import"../chunk-WQFOZIID.js";import"../chunk-NN3O7TPH.js";import"../chunk-VDZL45XI.js";export{a as wrapperCandidates};
2
2
  //# sourceMappingURL=wrapper-candidates.js.map
package/dist/runtime.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import{b,c as j,d as W}from"./chunk-LWYIGRHR.js";import{a as w}from"./chunk-TKDJQ2WD.js";import{readFileSync as _,writeFileSync as D,existsSync as v,mkdirSync as F}from"fs";import{join as l,resolve as C}from"path";import{createHash as L}from"crypto";import{homedir as $}from"os";var P=".scipquery.json",A={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function N(i){let t=l(i,P);if(!v(t))return{};try{let e=_(t,"utf-8");return JSON.parse(e)}catch{return{}}}function R(i){return{...A,...i.watch}}function O(i,t){let e=process.env.SCIP_QUERY_CACHE_DIR;if(e)return g(e);if(t?.dbPath)return g(C(i,t.dbPath));let n=process.env.XDG_CACHE_HOME||l($(),".cache"),o=L("sha256").update(C(i)).digest("hex").slice(0,12),r=l(n,"scip-query","projects",o);return g(r)}function f(i,t){let e=O(i,t);return{cacheDir:e,dbPath:l(e,"index.db"),indexPath:l(e,"index.scip"),metaPath:l(e,"meta.json")}}function M(i,t){let e=l(i,P);return v(e)||D(e,JSON.stringify({languages:t,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
2
- `),e}function g(i){return F(i,{recursive:!0}),i}import{watch as q}from"fs";import{existsSync as I,renameSync as T}from"fs";import{join as U,relative as H}from"path";import{fork as G}from"child_process";import X from"ignore";var m=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(t){this.projectRoot=t.projectRoot,this.watchConfig=R(t.config),this.indexPaths=f(t.projectRoot,t.config),this.languages=t.languages,this.pnpmWorkspaces=t.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=t.onStatus??(()=>{}),this.onReindexComplete=t.onReindexComplete??(()=>{}),this.onError=t.onError??(e=>console.error(e.message)),this.gitignoreFilter=w(t.projectRoot),this.extraIgnore=X(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=q(this.projectRoot,{recursive:!0},(e,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(t)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let t of this.fsWatchers)t.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(t){let e=H(this.projectRoot,U(this.projectRoot,t));if(this.gitignoreFilter.isIgnored(e)||this.extraIgnore.ignores(e)||t.endsWith("index.db")||t.endsWith("index.scip")||t.endsWith("index.db.tmp")||t.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let t=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&t<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-t;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let e=Date.now();this.setStatus({state:"indexing",startedAt:e}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((t,e)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",o=B(this.indexPaths.indexPath),r=G(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:o,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});r.on("exit",h=>{if(h===0)try{I(n)&&T(n,this.indexPaths.dbPath),I(o)&&T(o,this.indexPaths.indexPath),t(Date.now()-s)}catch(a){e(new Error(`Atomic swap failed: ${a}`))}else e(new Error(`Reindex worker exited with code ${h}`))}),r.on("error",e)})}setStatus(t){this.status=t,this.onStatus(t)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function B(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as x,mkdirSync as J,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as d,dirname as k,resolve as S}from"path";import{homedir as y,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",tt=["concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function et(i={}){let t=i.quiet?()=>{}:console.log,e=z(import.meta.url),s=S(k(e),"..","skills"),n=[d(y(),".claude","skills"),d(y(),".codex","skills"),d(y(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let r of n){let h=k(r);if(!x(h))continue;J(r,{recursive:!0});let a=it(r);for(let c of tt){let u=d(s,c),p=d(r,c);if(!x(u)){o.skipped.push(`${a}/${c}`);continue}if(x(p)){try{let E=K(p);if(S(E)===S(u)){o.alreadyLinked.push(`${a}/${c}`),t(` ok: ${c} \u2192 ${a} (already linked)`);continue}}catch{o.skipped.push(`${a}/${c}`),t(` skip: ${c} \u2192 ${a} (exists, not a symlink)`);continue}Q(p)}V(u,p,Z?"junction":"dir"),o.installed.push(`${a}/${c}`),t(` done: ${c} \u2192 ${a}`)}}return o}function it(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{m as Watcher,j as getScipVersion,M as initProjectConfig,et as installSkills,b as isScipInstalled,N as loadProjectConfig,W as printScipInstallInstructions,f as resolveIndexPaths};
2
+ `),e}function g(i){return F(i,{recursive:!0}),i}import{watch as q}from"fs";import{existsSync as I,renameSync as T}from"fs";import{join as U,relative as H}from"path";import{fork as G}from"child_process";import X from"ignore";var m=class{projectRoot;watchConfig;indexPaths;languages;pnpmWorkspaces;onStatus;onReindexComplete;onError;status={state:"idle"};debounceTimer=null;cooldownTimer=null;dirty=!1;changedFiles=0;reindexInFlight=!1;lastReindexEnd=0;fsWatchers=[];gitignoreFilter;extraIgnore;stopped=!1;constructor(t){this.projectRoot=t.projectRoot,this.watchConfig=R(t.config),this.indexPaths=f(t.projectRoot,t.config),this.languages=t.languages,this.pnpmWorkspaces=t.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=t.onStatus??(()=>{}),this.onReindexComplete=t.onReindexComplete??(()=>{}),this.onError=t.onError??(e=>console.error(e.message)),this.gitignoreFilter=w(t.projectRoot),this.extraIgnore=X(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let t=q(this.projectRoot,{recursive:!0},(e,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(t)}catch{this.onError(new Error("Failed to start file watcher. On Linux, you may need to increase inotify limits: sysctl -w fs.inotify.max_user_watches=524288"))}}stop(){this.stopped=!0;for(let t of this.fsWatchers)t.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(t){let e=H(this.projectRoot,U(this.projectRoot,t));if(this.gitignoreFilter.isIgnored(e)||this.extraIgnore.ignores(e)||t.endsWith("index.db")||t.endsWith("index.scip")||t.endsWith("index.db.tmp")||t.endsWith(".scipquery.json"))return;if(this.changedFiles++,this.reindexInFlight){this.dirty=!0,this.setStatus({state:"indexing",startedAt:this.status.startedAt});return}if(this.status.state==="cooldown"){this.dirty=!0,this.setStatus({state:"cooldown",until:this.status.until,dirty:!0});return}this.clearDebounceTimer();let s=Date.now()+this.watchConfig.debounceMs;this.setStatus({state:"waiting",changedFiles:this.changedFiles,reindexAt:s}),this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.triggerReindex()},this.watchConfig.debounceMs)}triggerReindex(){if(this.reindexInFlight||this.stopped)return;let t=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&t<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-t;this.dirty=!0;let n=Date.now()+s;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped&&(this.dirty=!1,this.triggerReindex())},s);return}this.reindexInFlight=!0,this.dirty=!1,this.changedFiles=0;let e=Date.now();this.setStatus({state:"indexing",startedAt:e}),this.runReindex().then(s=>{if(this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onReindexComplete(s),this.dirty&&!this.stopped){let n=Date.now()+this.watchConfig.cooldownMs;this.setStatus({state:"cooldown",until:n,dirty:!0}),this.cooldownTimer=setTimeout(()=>{this.cooldownTimer=null,this.dirty&&!this.stopped?(this.dirty=!1,this.triggerReindex()):this.setStatus({state:"idle"})},this.watchConfig.cooldownMs)}else this.setStatus({state:"idle"})}).catch(s=>{this.reindexInFlight=!1,this.lastReindexEnd=Date.now(),this.onError(s instanceof Error?s:new Error(String(s))),this.setStatus({state:"idle"})})}runReindex(){return new Promise((t,e)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",o=B(this.indexPaths.indexPath),r=G(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:o,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});r.on("exit",h=>{if(h===0)try{I(n)&&T(n,this.indexPaths.dbPath),I(o)&&T(o,this.indexPaths.indexPath),t(Date.now()-s)}catch(a){e(new Error(`Atomic swap failed: ${a}`))}else e(new Error(`Reindex worker exited with code ${h}`))}),r.on("error",e)})}setStatus(t){this.status=t,this.onStatus(t)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function B(i){return i.endsWith(".scip")?i.slice(0,-5)+".tmp.scip":i+".tmp.scip"}import{existsSync as x,mkdirSync as J,symlinkSync as V,readlinkSync as K,unlinkSync as Q}from"fs";import{join as d,dirname as k,resolve as S}from"path";import{homedir as y,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",tt=["scip-query","concrete-plan","scip-ai-cleanup","scip-explore","scip-debloat","scip-doc-reconcile","scip-maintainability","scip-verify","scip-language-playbook"];function et(i={}){let t=i.quiet?()=>{}:console.log,e=z(import.meta.url),s=S(k(e),"..","skills"),n=[d(y(),".claude","skills"),d(y(),".codex","skills"),d(y(),".agents","skills")],o={installed:[],skipped:[],alreadyLinked:[]};for(let r of n){let h=k(r);if(!x(h))continue;J(r,{recursive:!0});let a=it(r);for(let c of tt){let u=d(s,c),p=d(r,c);if(!x(u)){o.skipped.push(`${a}/${c}`);continue}if(x(p)){try{let E=K(p);if(S(E)===S(u)){o.alreadyLinked.push(`${a}/${c}`),t(` ok: ${c} \u2192 ${a} (already linked)`);continue}}catch{o.skipped.push(`${a}/${c}`),t(` skip: ${c} \u2192 ${a} (exists, not a symlink)`);continue}Q(p)}V(u,p,Z?"junction":"dir"),o.installed.push(`${a}/${c}`),t(` done: ${c} \u2192 ${a}`)}}return o}function it(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{m as Watcher,j as getScipVersion,M as initProjectConfig,et as installSkills,b as isScipInstalled,N as loadProjectConfig,W as printScipInstallInstructions,f as resolveIndexPaths};
3
3
  //# sourceMappingURL=runtime.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scip-query",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "description": "Language-agnostic code intelligence CLI powered by SCIP indexes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -135,6 +135,10 @@
135
135
  "import": "./dist/queries/imports.js",
136
136
  "types": "./dist/queries/imports.d.ts"
137
137
  },
138
+ "./queries/incomplete-migration": {
139
+ "import": "./dist/queries/incomplete-migration.js",
140
+ "types": "./dist/queries/incomplete-migration.d.ts"
141
+ },
138
142
  "./queries/index": {
139
143
  "import": "./dist/queries/index.js",
140
144
  "types": "./dist/queries/index.d.ts"
@@ -98,7 +98,7 @@ scip-query cleanup-plan --verify
98
98
  - Batches are ordered: batch 0 is graph-fact dead now; batch n is dead once
99
99
  batch n-1 lands (the cascade). Apply ONE batch at a time.
100
100
  - `COMPILER-VERIFIED` means the deletion was applied in a throwaway worktree
101
- and your own checker (tsc / cargo check) passed differentially.
101
+ and your own checker (tsc / cargo check / go build / ruff) passed differentially.
102
102
  - `FAILED` errors name real references — usually barrel export lines or
103
103
  imports that must be removed together with the symbol, occasionally a
104
104
  detector false positive. Investigate before deleting anything.
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: scip-query
3
+ description: Router for codebase work in scip-query-indexed projects. Use whenever exploring, planning, implementing, refactoring, extracting helpers, verifying changes, hunting duplication or bloat, fixing stale docs, or cleaning up after an AI coding session — or when unsure which scip-* skill applies. Picks the right specialist skill and the commands that must run for each phase of work.
4
+ allowed-tools: [Bash, Skill]
5
+ keywords: [scip, codebase, explore, plan, implement, refactor, extract, verify, check-work, cleanup, duplication, bloat, drift, route, which-skill]
6
+ ---
7
+
8
+ # scip-query Router
9
+
10
+ This project is indexed by `scip-query` — compiler-resolved code intelligence.
11
+ Your job here is only to route: identify the phase of work, invoke the right
12
+ specialist skill, and enforce the non-negotiable checks. Do not improvise a
13
+ workflow when a specialist skill exists for it.
14
+
15
+ If the index might be stale (code changed since the last reindex), run
16
+ `scip-query reindex` before anything else.
17
+
18
+ ## The default loop for any implementation request
19
+
20
+ When the user asks you to build, change, or fix something non-trivial:
21
+
22
+ 1. **Plan first** — invoke `concrete-plan` (every claim in the plan must come
23
+ from a scip-query command, anchored by `scip-query plan-context <target>`).
24
+ 2. **Implement** the plan.
25
+ 3. **Run the post-checks that match what you did** (table below) — don't wait
26
+ to be asked.
27
+ 4. **Gate before done** — `scip-query reindex && scip-query diff-gate`; fix
28
+ findings or state explicitly why each is accepted.
29
+
30
+ ## Route by phase of work
31
+
32
+ | You are about to... | Invoke | Anchor commands |
33
+ |---|---|---|
34
+ | Understand how something works, trace a system end-to-end | `scip-explore` | `scip-query system <module>`, `scip-query trace <symbol>` |
35
+ | Plan a feature, fix, or refactor | `concrete-plan` | `scip-query plan-context <target>` |
36
+ | Pick high-signal commands for an unfamiliar language | `scip-language-playbook` | — |
37
+ | Verify work you just finished (any implementation, refactor, or extraction) | `scip-verify` | `scip-query reindex && scip-query diff-gate` |
38
+ | Find dead code, duplication, or structural bloat | `scip-debloat` | `scip-query health` |
39
+ | Clean up after AI-assisted coding sessions | `scip-ai-cleanup` | `scip-query recent-duplicates`, `scip-query incomplete-migration` |
40
+ | Reconcile docs/standards that drifted from the code | `scip-doc-reconcile` | `scip-query doc-drift <doc>` |
41
+ | Review architecture, boundaries, hidden policies | `scip-maintainability` | `scip-query bottlenecks`, `scip-query coupling` |
42
+
43
+ Invoke skills by name (Skill tool or slash command). If skill invocation is
44
+ unavailable in this harness, read `~/.agents/skills/<name>/SKILL.md` and
45
+ follow it directly.
46
+
47
+ ## Match the post-check to the change
48
+
49
+ After implementing, run the checks for what the change actually did — every
50
+ row, every time it applies:
51
+
52
+ | You just... | Run |
53
+ |---|---|
54
+ | Extracted a helper / created an abstraction | `scip-query incomplete-migration` — lists call sites that still hold the logic inline; migrate them or state why they differ |
55
+ | Wrote a brand-new helper or module | `scip-query similar <it>` and `scip-query recent-duplicates` — reuse beats re-implementation; delete the echo |
56
+ | Added parameters, options, or config flags | `scip-query unused-params` — speculative "for later" params must go |
57
+ | Added a forwarding or wrapper layer | `scip-query wrapper-candidates` and `scip-query passthrough-candidates` — indirection must earn its keep |
58
+ | Added an interface, base class, or type alias | `scip-query stale-abstractions` — one real consumer is not an abstraction |
59
+ | Changed a schema, contract, config, or generated file | `scip-query co-change <file>` — update the historical partners or confirm the coupling broke |
60
+ | Changed code that docs describe | `scip-query doc-drift` — update the docs that now lie |
61
+ | Deleted code | `scip-query cleanup-plan --verify` — take the whole cascade with compiler proof |
62
+
63
+ Confusable detectors (full guide: docs/DETECTOR_GUIDE.md): `unused-params` is
64
+ parameter-level; `passthrough-candidates` = one **callee** (only forwards);
65
+ `wrapper-candidates` = one **caller** (no reuse); `stale-abstractions` is
66
+ type-level. `recent-duplicates` = similarity + git age (which copy is the
67
+ echo); `incomplete-migration` = the inverse (the new helper is canonical, the
68
+ old inline copies must go).
69
+
70
+ **Before declaring any change done** — run `scip-query diff-gate`. Exit 1
71
+ means findings, each with a remediation. Fix them or knowingly accept them
72
+ with a stated reason; never ignore them silently.
73
+
74
+ ## One-time project setup
75
+
76
+ If this project has no agent guidance yet, offer to run
77
+ `scip-query setup-agent` — it seeds the AGENTS.md block (every agent reads
78
+ it) and, with `--git-hook`, installs a pre-commit diff gate that fires no
79
+ matter which agent or human wrote the change.