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.
- package/README.md +22 -9
- package/dist/{chunk-2EC4JTHC.js → chunk-2DVVHNC3.js} +2 -2
- package/dist/{chunk-HVGNOUYP.js → chunk-2Y2WIJI4.js} +2 -2
- package/dist/{chunk-GMEBYEMU.js → chunk-3YQO3S5D.js} +2 -2
- package/dist/chunk-44G4P3GJ.js +2 -0
- package/dist/{chunk-ZIIQ55VK.js → chunk-6HP3BKIP.js} +2 -2
- package/dist/chunk-B32FX5KB.js +2 -0
- package/dist/{chunk-MKE7SEEX.js → chunk-FYT2PE7C.js} +2 -2
- package/dist/{chunk-66ORT3LS.js → chunk-HDA2V5DC.js} +2 -2
- package/dist/{chunk-4A4JFNWG.js → chunk-I66MQD5U.js} +2 -2
- package/dist/chunk-IBM6FXOQ.js +3 -0
- package/dist/{chunk-4B7YLRXX.js → chunk-ITUU3VE3.js} +2 -2
- package/dist/{chunk-QYQXPPDI.js → chunk-K3V6XUTL.js} +2 -2
- package/dist/{chunk-XSZ5NC4O.js → chunk-L6TOEQ2M.js} +2 -2
- package/dist/{chunk-JAMU6FLN.js → chunk-LBAMALDV.js} +2 -2
- package/dist/chunk-LR7E2ATW.js +8 -0
- package/dist/chunk-NM3BZXHA.js +2 -0
- package/dist/{chunk-NOVKLH2F.js → chunk-NO2TPMCQ.js} +1 -1
- package/dist/{chunk-SSINY7HL.js → chunk-OMNT7E2T.js} +2 -2
- package/dist/chunk-R3G6ERW7.js +7 -0
- package/dist/{chunk-7UZWNW4E.js → chunk-SEZZ24IG.js} +2 -2
- package/dist/{chunk-DJTJ3DLZ.js → chunk-SLX5XBCD.js} +2 -2
- package/dist/{chunk-K4Z3FCUJ.js → chunk-SQ6VENQY.js} +3 -3
- package/dist/chunk-T4AK46CM.js +16 -0
- package/dist/{chunk-FIPE5AQT.js → chunk-TA4DDU7J.js} +2 -2
- package/dist/{chunk-UQE3DSXY.js → chunk-TCCUWKH4.js} +2 -2
- package/dist/{chunk-HVXIXDLV.js → chunk-U254PV4S.js} +2 -2
- package/dist/chunk-UIWAZ2NT.js +2 -0
- package/dist/{chunk-K6YIGVL7.js → chunk-VHENVDS2.js} +2 -2
- package/dist/{chunk-SB6I6O3P.js → chunk-VQGQHIAT.js} +2 -2
- package/dist/{chunk-FTBT4RP2.js → chunk-VTF5EH22.js} +2 -2
- package/dist/{chunk-SLOIQKY7.js → chunk-Y3RUPPIU.js} +2 -2
- package/dist/{chunk-OIMM7KMI.js → chunk-YO6DU7QZ.js} +2 -2
- package/dist/{chunk-EM2PPDN7.js → chunk-YSSTUCNS.js} +2 -2
- package/dist/cli.js +167 -149
- package/dist/index.js +1 -1
- package/dist/postinstall.js +2 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/dead.js +1 -1
- package/dist/queries/diff-gate.d.ts +4 -1
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +3 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/health.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +71 -0
- package/dist/queries/incomplete-migration.js +2 -0
- package/dist/queries/index.d.ts +1 -0
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.js +1 -1
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar.d.ts +15 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/runtime.js +1 -1
- package/package.json +5 -1
- package/skills/scip-ai-cleanup/SKILL.md +1 -1
- package/skills/scip-query/SKILL.md +79 -0
- package/dist/chunk-6P5W4U6G.js +0 -16
- package/dist/chunk-GTZAU7OL.js +0 -2
- package/dist/chunk-N5D5ZCBW.js +0 -7
- package/dist/chunk-OQSV6OS2.js +0 -2
- package/dist/chunk-RKTDEIHF.js +0 -2
- 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-
|
|
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
|
package/dist/postinstall.js
CHANGED
|
@@ -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
|
|
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("")}
|
|
5
|
+
scip CLI: ${o??"installed"}`)}console.log("")}S();
|
|
6
6
|
//# sourceMappingURL=postinstall.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
package/dist/queries/dead.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as a}from"../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
package/dist/queries/drift.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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-
|
|
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
|
package/dist/queries/health.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b,c,d}from"../chunk-
|
|
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
|
package/dist/queries/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/queries/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
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
|
package/dist/queries/isolated.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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
|
package/dist/queries/members.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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
|
package/dist/queries/methods.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 };
|
package/dist/queries/similar.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b}from"../chunk-
|
|
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
|
package/dist/queries/slice.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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-
|
|
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
|
package/dist/queries/surface.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
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-
|
|
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-
|
|
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.
|
|
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.
|