scip-query 0.10.3 → 0.10.4
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 +9 -8
- package/dist/{chunk-YVLHL6KQ.js → chunk-237YUOPK.js} +2 -2
- package/dist/chunk-56UN3DMK.js +2 -0
- package/dist/chunk-5UDFZC4D.js +2 -0
- package/dist/{chunk-X474LKJX.js → chunk-6UFMPECA.js} +2 -2
- package/dist/chunk-7JOTOWZO.js +4 -0
- package/dist/chunk-A7RNHUJH.js +20 -0
- package/dist/chunk-AYYIZ4BA.js +4 -0
- package/dist/chunk-BNKE4TT5.js +2 -0
- package/dist/chunk-MA7OVFHI.js +2 -0
- package/dist/chunk-QUJBXLBY.js +2 -0
- package/dist/chunk-WBJZNPUT.js +2 -0
- package/dist/{chunk-4HOMAEDD.js → chunk-YUTRW57I.js} +2 -2
- package/dist/cli.js +209 -197
- package/dist/frontend-behavior-evidence-BxKpKWUu.d.ts +4 -0
- package/dist/postinstall.js +3 -3
- package/dist/queries/diff-gate.d.ts +4 -2
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/health.js +1 -1
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +1 -0
- package/dist/queries/index.js +1 -1
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +3 -2
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +3 -2
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/runtime.js +1 -1
- package/docs/AGENT_GUIDE.md +42 -5
- package/docs/AI_FAILURE_MODES.md +28 -21
- package/docs/COMMAND_REFERENCE.md +4 -2
- package/docs/analyzer-inventory.md +5 -1
- package/docs/analyzer-validation-ledger.md +8 -0
- package/package.json +3 -2
- package/skills/concrete-plan/SKILL.md +3 -5
- package/skills/concrete-plan/agents/openai.yaml +4 -0
- package/skills/scip-adoption/SKILL.md +120 -0
- package/skills/scip-adoption/agents/openai.yaml +4 -0
- package/skills/scip-ai-cleanup/SKILL.md +12 -4
- package/skills/scip-ai-cleanup/agents/openai.yaml +4 -0
- package/skills/scip-api-impact/SKILL.md +147 -0
- package/skills/scip-api-impact/agents/openai.yaml +4 -0
- package/skills/scip-debloat/SKILL.md +15 -13
- package/skills/scip-debloat/agents/openai.yaml +4 -0
- package/skills/scip-debug/SKILL.md +119 -0
- package/skills/scip-debug/agents/openai.yaml +4 -0
- package/skills/scip-diagram/SKILL.md +138 -0
- package/skills/scip-diagram/agents/openai.yaml +4 -0
- package/skills/scip-directory-architecture/SKILL.md +2 -2
- package/skills/scip-directory-architecture/agents/openai.yaml +4 -0
- package/skills/scip-doc-reconcile/SKILL.md +1 -3
- package/skills/scip-doc-reconcile/agents/openai.yaml +4 -0
- package/skills/scip-explore/SKILL.md +8 -2
- package/skills/scip-explore/agents/openai.yaml +4 -0
- package/skills/scip-health-audit/SKILL.md +158 -0
- package/skills/scip-health-audit/agents/openai.yaml +4 -0
- package/skills/scip-health-improve/SKILL.md +151 -0
- package/skills/scip-health-improve/agents/openai.yaml +4 -0
- package/skills/scip-language-playbook/SKILL.md +7 -4
- package/skills/scip-language-playbook/agents/openai.yaml +4 -0
- package/skills/scip-maintainability/SKILL.md +7 -3
- package/skills/scip-maintainability/agents/openai.yaml +4 -0
- package/skills/scip-query/SKILL.md +74 -33
- package/skills/scip-query/agents/openai.yaml +4 -0
- package/skills/scip-query-setup/SKILL.md +65 -18
- package/skills/scip-query-setup/agents/openai.yaml +3 -0
- package/skills/scip-react-maintainability/SKILL.md +2 -2
- package/skills/scip-react-maintainability/agents/openai.yaml +4 -0
- package/skills/scip-triage-issue/SKILL.md +112 -0
- package/skills/scip-triage-issue/agents/openai.yaml +4 -0
- package/skills/scip-verify/SKILL.md +83 -232
- package/skills/scip-verify/agents/openai.yaml +4 -0
- package/skills/scip-vue-maintainability/SKILL.md +2 -3
- package/skills/scip-vue-maintainability/agents/openai.yaml +4 -0
- package/dist/chunk-7ADUXFRZ.js +0 -2
- package/dist/chunk-GLJAAKDW.js +0 -4
- package/dist/chunk-GS33KGAY.js +0 -2
- package/dist/chunk-I7TSQZ3J.js +0 -4
- package/dist/chunk-NP5HYVLX.js +0 -20
- package/dist/chunk-O4L4AB3T.js +0 -2
- package/dist/chunk-TO54DY4O.js +0 -2
- package/dist/chunk-UMNENNTX.js +0 -2
package/dist/postinstall.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{b as
|
|
3
|
-
${i.installed.length} skill(s) installed, ${i.alreadyLinked.length} already linked.`),!
|
|
4
|
-
scip CLI not found on PATH. Attempting auto-install...`),
|
|
2
|
+
import{b as g,c as k,d as m,e as f}from"./chunk-NXIAHE7F.js";import{existsSync as p,mkdirSync as L,symlinkSync as v,readlinkSync as b,unlinkSync as q}from"fs";import{join as e,dirname as y,resolve as d}from"path";import{homedir as u,platform as A}from"os";import{fileURLToPath as C}from"url";var H=A()==="win32",U=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function N(i={}){let l=i.quiet?()=>{}:console.log,o=C(import.meta.url),h=d(y(o),"..","skills"),I=[e(u(),".claude","skills"),e(u(),".codex","skills"),e(u(),".agents","skills")],n={installed:[],skipped:[],alreadyLinked:[]};for(let r of I){let $=y(r);if(!p($))continue;L(r,{recursive:!0});let t=R(r);for(let s of U){let a=e(h,s),c=e(r,s);if(!p(a)){n.skipped.push(`${t}/${s}`);continue}if(p(c)){try{let x=b(c);if(d(x)===d(a)){n.alreadyLinked.push(`${t}/${s}`),l(` ok: ${s} \u2192 ${t} (already linked)`);continue}}catch{n.skipped.push(`${t}/${s}`),l(` skip: ${s} \u2192 ${t} (exists, not a symlink)`);continue}q(c)}v(a,c,H?"junction":"dir"),n.installed.push(`${t}/${s}`),l(` done: ${s} \u2192 ${t}`)}}return n}function R(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}function S(){console.log("scip-query: installing skills...");let i=N({quiet:!1});if(i.installed.length+i.alreadyLinked.length>0&&console.log(`
|
|
3
|
+
${i.installed.length} skill(s) installed, ${i.alreadyLinked.length} already linked.`),!g())console.log(`
|
|
4
|
+
scip CLI not found on PATH. Attempting auto-install...`),f(console.log)||m();else{let o=k();console.log(`
|
|
5
5
|
scip CLI: ${o??"installed"}`)}console.log("")}S();
|
|
6
6
|
//# sourceMappingURL=postinstall.js.map
|
|
@@ -5,13 +5,15 @@ import { DiffImpactPlan } from './diff-impact.js';
|
|
|
5
5
|
import { F as FindingSuppression } from '../config-types-Bj4sh28g.js';
|
|
6
6
|
import 'better-sqlite3';
|
|
7
7
|
|
|
8
|
+
type DiffGateActionTier = 'direct' | 'signal' | 'support';
|
|
9
|
+
type DocCitationKind = 'behavioral-claim' | 'configuration-example' | 'guide-reference' | 'intentional-record';
|
|
10
|
+
|
|
8
11
|
type DiffGateCheck = 'echo' | 'incomplete-migration' | 'co-change-partner' | 'doc-reference' | 'unused-params' | 'new-dead' | 'baseline';
|
|
9
12
|
/** Canonical check list — the CLI validates `--skip` values against this. */
|
|
10
13
|
declare const DIFF_GATE_CHECKS: readonly DiffGateCheck[];
|
|
11
14
|
type DiffGateEvidence = 'graph-fact' | 'semantic' | 'heuristic' | 'change-graph' | 'baseline';
|
|
12
15
|
type DiffGateSeverity = 'info' | 'warning' | 'error';
|
|
13
|
-
|
|
14
|
-
type DocCitationKind = 'behavioral-claim' | 'configuration-example' | 'guide-reference' | 'intentional-record';
|
|
16
|
+
|
|
15
17
|
interface DiffGateFinding {
|
|
16
18
|
id: string;
|
|
17
19
|
check: DiffGateCheck;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as a,e as b,f as c}from"../chunk-
|
|
1
|
+
import{d as a,e as b,f as c}from"../chunk-7JOTOWZO.js";import"../chunk-NNDYO2DX.js";import"../chunk-237YUOPK.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-A7RNHUJH.js";import"../chunk-AYYIZ4BA.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as DIFF_GATE_CHECKS,b as diffGate,c as symbolPreexistenceChecker};
|
|
2
2
|
//# sourceMappingURL=diff-gate.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b,c,d,e,f}from"../chunk-
|
|
1
|
+
import{b as a,c as b,d as c,e as d,f as e,g as f}from"../chunk-A7RNHUJH.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as GIT_DIFF_UNAVAILABLE_NOTE,b as diffImpact,d as diffImpactPartial,c as diffImpactPlan,f as fileContentAtBase,e as mergeDiffImpactPartials};
|
|
2
2
|
//# sourceMappingURL=diff-impact.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as a,d as b,e as c}from"../chunk-AYYIZ4BA.js";import"../chunk-KRGBLZT2.js";import"../chunk-A4L36SZS.js";import"../chunk-7S5E7KWT.js";export{b as docDrift,c as docsCitingFiles,a as isArchivalDoc};
|
|
2
2
|
//# sourceMappingURL=doc-drift.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-YUTRW57I.js";import"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import"../chunk-QSXQT3NE.js";import"../chunk-5UDFZC4D.js";import"../chunk-BNKE4TT5.js";import"../chunk-WBJZNPUT.js";import"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-B32FX5KB.js";import"../chunk-SPE4YCOT.js";import"../chunk-ZFMPHDAT.js";import"../chunk-C2QSK7E7.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import"../chunk-7KCSELEV.js";import"../chunk-AW4N6MGC.js";import"../chunk-C3MZZ2ZN.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import"../chunk-CJJP64OC.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as HEALTH_PHASES,b as health,c as healthPhase,d as healthReportFromPhases};
|
|
2
2
|
//# sourceMappingURL=health.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-237YUOPK.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-A7RNHUJH.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as incompleteMigration};
|
|
2
2
|
//# sourceMappingURL=incomplete-migration.js.map
|
package/dist/queries/index.d.ts
CHANGED
|
@@ -60,6 +60,7 @@ export { AuditDisagreement, AuditQuestionScore, SelfAuditResult, selfAudit } fro
|
|
|
60
60
|
export { SimilarSignatureGroup, similarSignatures } from './similar-signatures.js';
|
|
61
61
|
import 'better-sqlite3';
|
|
62
62
|
import '../config-types-Bj4sh28g.js';
|
|
63
|
+
import '../frontend-behavior-evidence-BxKpKWUu.js';
|
|
63
64
|
import '../git-history-Dao3_Pu9.js';
|
|
64
65
|
|
|
65
66
|
interface HealthBaselineFile {
|
package/dist/queries/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as se}from"../chunk-A3VNUGKJ.js";import{a as ye}from"../chunk-QVCCLDZI.js";import{a as de}from"../chunk-77YBOOYT.js";import{a as ve}from"../chunk-FNRPGGVI.js";import{a as Ce}from"../chunk-
|
|
1
|
+
import{a as se}from"../chunk-A3VNUGKJ.js";import{a as ye}from"../chunk-QVCCLDZI.js";import{a as de}from"../chunk-77YBOOYT.js";import{a as ve}from"../chunk-FNRPGGVI.js";import{a as Ce}from"../chunk-6UFMPECA.js";import{a as fe}from"../chunk-ICXVNWMI.js";import{a as me}from"../chunk-X7ZY6FFF.js";import{a as he}from"../chunk-FIB4JPEX.js";import{a as ce}from"../chunk-YQH353VA.js";import{a as ge}from"../chunk-MA7OVFHI.js";import{a as je}from"../chunk-ZSLT7NWQ.js";import{a as le}from"../chunk-5M4TYWVI.js";import{a as De}from"../chunk-E44ZMVNA.js";import{a as Re}from"../chunk-DJMK4DBL.js";import{a as xe}from"../chunk-NVFERV4U.js";import{a as ne}from"../chunk-5FOPAXWY.js";import{a as ue}from"../chunk-YUOAAR24.js";import{a as q,b as M,c as U,d as _}from"../chunk-CAWSSEVM.js";import{a as N}from"../chunk-B6MJ5VQV.js";import{a as Z,b as $,c as ee,d as te}from"../chunk-YUTRW57I.js";import{a as Y}from"../chunk-O3OKSF6O.js";import"../chunk-3KLLFNT4.js";import{a as z}from"../chunk-QSXQT3NE.js";import{a as X}from"../chunk-5UDFZC4D.js";import{a as J}from"../chunk-BNKE4TT5.js";import{a as W}from"../chunk-WBJZNPUT.js";import{a as Q}from"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import{a as oe}from"../chunk-47UA45TU.js";import{a as re}from"../chunk-E7KERP7E.js";import{a as ae,b as pe,c as ie}from"../chunk-7OHWPJ5N.js";import{a as V}from"../chunk-EOZIZWW4.js";import{a as K}from"../chunk-CSWZFD46.js";import{a as G,b as O}from"../chunk-4ZUJJRWT.js";import{a as R,b as g,c as h,d as D,e as v}from"../chunk-7JOTOWZO.js";import{a as j}from"../chunk-NNDYO2DX.js";import{a as C}from"../chunk-237YUOPK.js";import"../chunk-B32FX5KB.js";import{a as y}from"../chunk-SPE4YCOT.js";import{a as x}from"../chunk-ZFMPHDAT.js";import{a as d}from"../chunk-C2QSK7E7.js";import{a as c,b as u}from"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import{a as m}from"../chunk-G3WGZU5Q.js";import"../chunk-RHTJBYZ5.js";import{a as f}from"../chunk-DE7MA6OD.js";import"../chunk-VAA5FFIW.js";import{a as l}from"../chunk-7KCSELEV.js";import{c as t,d as o,e as r,f as a}from"../chunk-A7RNHUJH.js";import{d as p}from"../chunk-AYYIZ4BA.js";import{a as n}from"../chunk-AW4N6MGC.js";import{a as L}from"../chunk-OLD6PBU6.js";import{b as s}from"../chunk-C3MZZ2ZN.js";import{b as e}from"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import{a as T}from"../chunk-LPLGJ4HO.js";import{a as k}from"../chunk-ESG4HBEF.js";import{a as E}from"../chunk-DAI74TJU.js";import"../chunk-PFOCOG57.js";import{a as I}from"../chunk-YYD245WG.js";import{a as w,b as B}from"../chunk-5QJXH6ZL.js";import{a as i}from"../chunk-CJJP64OC.js";import{a as S}from"../chunk-CFL2CNIF.js";import{a as A}from"../chunk-MUULWXSJ.js";import{a as b,b as P}from"../chunk-BKDXBJDQ.js";import{a as F}from"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import{a as H}from"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{D as DIFF_GATE_CHECKS,Z as HEALTH_PHASES,S as affected,A as bottlenecks,b as byKind,F as callGraph,H as changeSurface,h as checkHealthBaseline,L as cleanupPlan,e as coChange,T as code,R as collectBaselineFindings,k as complexity,E as complexityHotspots,I as convergence,w as coupling,i as cycles,V as dataflow,s as dead,K as deepChains,G as deps,v as diffGate,t as diffImpact,r as diffImpactPartial,o as diffImpactPlan,p as docDrift,n as drift,l as extractCandidates,q as fanIn,M as fanOut,N as files,$ as health,ee as healthPhase,te as healthReportFromPhases,oe as hierarchy,re as hotspots,pe as importedBy,ae as imports,C as incompleteMigration,m as isolated,P as kindCounts,Re as localityCandidates,xe as members,a as mergeDiffImpactPartials,ne as methods,ue as outline,f as passthroughCandidates,Ce as planContext,O as rdeps,W as reactComponentDuplicates,Q as reactHookCandidates,z as reactLargeComponentPressure,ge as recentDuplicates,je as redundantReexports,le as refs,De as selfAudit,c as similar,u as similarAll,ye as similarChains,de as similarFiles,ve as similarSignatures,he as slice,x as staleAbstractions,d as stats,ce as surface,se as symbols,fe as system,B as topCoupling,U as topFanIn,_ as topFanOut,me as trace,ie as unusedImports,j as unusedParams,J as vueComponentDuplicates,X as vueComposableCandidates,Y as vueLargeViewPressure,y as wrapperCandidates,g as writeHealthBaseline};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-6UFMPECA.js";import"../chunk-ICXVNWMI.js";import"../chunk-X7ZY6FFF.js";import"../chunk-FIB4JPEX.js";import"../chunk-YQH353VA.js";import"../chunk-3KLLFNT4.js";import"../chunk-EOZIZWW4.js";import"../chunk-4ZUJJRWT.js";import"../chunk-EYLXU575.js";import"../chunk-KRGBLZT2.js";import"../chunk-ESG4HBEF.js";import"../chunk-CFL2CNIF.js";import"../chunk-Z4VHYJ5U.js";import"../chunk-B75HZHUP.js";import"../chunk-TM6GVHA6.js";import"../chunk-CTCAF3YA.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.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-WBJZNPUT.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactComponentDuplicates};
|
|
2
2
|
//# sourceMappingURL=react-component-duplicates.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { S as ScipDatabase } from '../db-CTarohbZ.js';
|
|
2
|
+
import { F as FrontendBehaviorActionTier, a as FrontendBehaviorEvidenceClass } from '../frontend-behavior-evidence-BxKpKWUu.js';
|
|
2
3
|
import 'better-sqlite3';
|
|
3
4
|
import '../config-types-Bj4sh28g.js';
|
|
4
5
|
|
|
5
|
-
type ReactHookEvidenceClass =
|
|
6
|
-
type ReactHookActionTier =
|
|
6
|
+
type ReactHookEvidenceClass = FrontendBehaviorEvidenceClass;
|
|
7
|
+
type ReactHookActionTier = FrontendBehaviorActionTier;
|
|
7
8
|
interface ReactHookCandidateResult {
|
|
8
9
|
fileA: string;
|
|
9
10
|
componentA: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as reactHookCandidates};
|
|
2
2
|
//# sourceMappingURL=react-hook-candidates.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-MA7OVFHI.js";import"../chunk-5UDFZC4D.js";import"../chunk-BNKE4TT5.js";import"../chunk-WBJZNPUT.js";import"../chunk-56UN3DMK.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-UQJGTVHV.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-KRGBLZT2.js";import"../chunk-B75HZHUP.js";import"../chunk-3ZYF3ELZ.js";import"../chunk-ZQLO2SCU.js";import"../chunk-BGBBVSH4.js";import"../chunk-GZCQTZLK.js";import"../chunk-YTR4CO5S.js";import"../chunk-HVTYSC26.js";import"../chunk-FUPDW5AC.js";import"../chunk-MZ7APUFN.js";import"../chunk-AUVBR62P.js";import"../chunk-FOQHUKNZ.js";import"../chunk-CRU42NJU.js";import"../chunk-3UW7VM4H.js";import"../chunk-JM72FNGA.js";import"../chunk-QLNGUWR7.js";import"../chunk-ERHOS6AW.js";import"../chunk-EWC3UK4V.js";import"../chunk-D322LMSA.js";import"../chunk-A4L36SZS.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.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-BNKE4TT5.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComponentDuplicates};
|
|
2
2
|
//# sourceMappingURL=vue-component-duplicates.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { S as ScipDatabase } from '../db-CTarohbZ.js';
|
|
2
|
+
import { F as FrontendBehaviorActionTier, a as FrontendBehaviorEvidenceClass } from '../frontend-behavior-evidence-BxKpKWUu.js';
|
|
2
3
|
import 'better-sqlite3';
|
|
3
4
|
import '../config-types-Bj4sh28g.js';
|
|
4
5
|
|
|
5
|
-
type VueComposableEvidenceClass =
|
|
6
|
-
type VueComposableActionTier =
|
|
6
|
+
type VueComposableEvidenceClass = FrontendBehaviorEvidenceClass;
|
|
7
|
+
type VueComposableActionTier = FrontendBehaviorActionTier;
|
|
7
8
|
interface VueComposableCandidateResult {
|
|
8
9
|
fileA: string;
|
|
9
10
|
fileB: string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-5UDFZC4D.js";import"../chunk-QUJBXLBY.js";import"../chunk-PVZMPG5I.js";import"../chunk-3UVJJ6Z7.js";import"../chunk-ERHOS6AW.js";import"../chunk-D322LMSA.js";import"../chunk-OBBDKQAG.js";import"../chunk-64MNV6AB.js";import"../chunk-7S5E7KWT.js";export{a as vueComposableCandidates};
|
|
2
2
|
//# sourceMappingURL=vue-composable-candidates.js.map
|
package/dist/runtime.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import{b as $,c as T,d as E}from"./chunk-NXIAHE7F.js";import{a as v}from"./chunk-UUBMFL3F.js";import{readFileSync as D,writeFileSync as A,existsSync as b,mkdirSync as _}from"fs";import{join as c,resolve as C}from"path";import{createHash as W}from"crypto";import{homedir as F}from"os";var h=".scipquery.json",M={enabled:!1,debounceMs:3e4,cooldownMs:6e4,ignore:[]};function L(i){let e=c(i,h);if(!b(e))return{};try{let t=D(e,"utf-8");return JSON.parse(t)}catch(t){let s=t instanceof Error?t.message:String(t);throw t instanceof SyntaxError?new Error(`invalid ${h} at ${e}: ${s}`,{cause:t}):new Error(`unable to read ${h} at ${e}: ${s}`,{cause:t})}}function P(i){return{...M,...i.watch}}function N(i,e){let t=process.env.SCIP_QUERY_CACHE_DIR;if(t)return f(t);if(e?.dbPath)return f(C(i,e.dbPath));let n=process.env.XDG_CACHE_HOME||c(F(),".cache"),r=W("sha256").update(C(i)).digest("hex").slice(0,12),o=c(n,"scip-query","projects",r);return f(o)}function m(i,e){let t=N(i,e);return{cacheDir:t,dbPath:c(t,"index.db"),indexPath:c(t,"index.scip"),metaPath:c(t,"meta.json")}}function O(i,e){let t=c(i,h);return b(t)||A(t,JSON.stringify({languages:e,watch:{enabled:!1,debounceMs:3e4,cooldownMs:6e4}},null,2)+`
|
|
2
|
-
`),t}function f(i){return _(i,{recursive:!0}),i}import{watch as
|
|
2
|
+
`),t}function f(i){return _(i,{recursive:!0}),i}import{watch as U}from"fs";import{existsSync as R,renameSync as k}from"fs";import{join as q,relative as H}from"path";import{fork as B}from"child_process";import G from"ignore";var y=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(e){this.projectRoot=e.projectRoot,this.watchConfig=P(e.config),this.indexPaths=m(e.projectRoot,e.config),this.languages=e.languages,this.pnpmWorkspaces=e.config.indexer?.typescript?.pnpmWorkspaces??!1,this.onStatus=e.onStatus??(()=>{}),this.onReindexComplete=e.onReindexComplete??(()=>{}),this.onError=e.onError??(t=>console.error(t.message)),this.gitignoreFilter=v(e.projectRoot),this.extraIgnore=G(),this.watchConfig.ignore.length>0&&this.extraIgnore.add(this.watchConfig.ignore)}start(){this.stopped=!1,this.setStatus({state:"idle"});try{let e=U(this.projectRoot,{recursive:!0},(t,s)=>{s&&!this.stopped&&this.handleFileChange(s)});this.fsWatchers.push(e)}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 e of this.fsWatchers)e.close();this.fsWatchers=[],this.clearDebounceTimer(),this.clearCooldownTimer(),this.setStatus({state:"idle"})}handleFileChange(e){let t=H(this.projectRoot,q(this.projectRoot,e));if(this.gitignoreFilter.isIgnored(t)||this.extraIgnore.ignores(t)||e.endsWith("index.db")||e.endsWith("index.scip")||e.endsWith("index.db.tmp")||e.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 e=Date.now()-this.lastReindexEnd;if(this.lastReindexEnd>0&&e<this.watchConfig.cooldownMs){let s=this.watchConfig.cooldownMs-e;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 t=Date.now();this.setStatus({state:"indexing",startedAt:t}),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((e,t)=>{let s=Date.now(),n=this.indexPaths.dbPath+".tmp",r=X(this.indexPaths.indexPath),o=B(new URL("./reindex-worker.js",import.meta.url).pathname,[],{env:{...process.env,SCIP_REINDEX_PROJECT_ROOT:this.projectRoot,SCIP_REINDEX_OUTPUT_SCIP:r,SCIP_REINDEX_OUTPUT_DB:n,SCIP_REINDEX_LANGUAGES:this.languages?.join(",")??"",SCIP_REINDEX_PNPM_WORKSPACES:this.pnpmWorkspaces?"1":""},stdio:"pipe"});o.on("exit",d=>{if(d===0)try{R(n)&&k(n,this.indexPaths.dbPath),R(r)&&k(r,this.indexPaths.indexPath),e(Date.now()-s)}catch(a){t(new Error(`Atomic swap failed: ${a}`))}else t(new Error(`Reindex worker exited with code ${d}`))}),o.on("error",t)})}setStatus(e){this.status=e,this.onStatus(e)}clearDebounceTimer(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}clearCooldownTimer(){this.cooldownTimer&&(clearTimeout(this.cooldownTimer),this.cooldownTimer=null)}};function X(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 p,dirname as I,resolve as S}from"path";import{homedir as w,platform as Y}from"os";import{fileURLToPath as z}from"url";var Z=Y()==="win32",ee=["scip-query","scip-query-setup","scip-adoption","scip-health-audit","scip-health-improve","scip-api-impact","concrete-plan","scip-ai-cleanup","scip-debug","scip-explore","scip-triage-issue","scip-diagram","scip-debloat","scip-doc-reconcile","scip-directory-architecture","scip-maintainability","scip-react-maintainability","scip-vue-maintainability","scip-verify","scip-language-playbook"];function te(i={}){let e=i.quiet?()=>{}:console.log,t=z(import.meta.url),s=S(I(t),"..","skills"),n=[p(w(),".claude","skills"),p(w(),".codex","skills"),p(w(),".agents","skills")],r={installed:[],skipped:[],alreadyLinked:[]};for(let o of n){let d=I(o);if(!x(d))continue;J(o,{recursive:!0});let a=ie(o);for(let l of ee){let g=p(s,l),u=p(o,l);if(!x(g)){r.skipped.push(`${a}/${l}`);continue}if(x(u)){try{let j=K(u);if(S(j)===S(g)){r.alreadyLinked.push(`${a}/${l}`),e(` ok: ${l} \u2192 ${a} (already linked)`);continue}}catch{r.skipped.push(`${a}/${l}`),e(` skip: ${l} \u2192 ${a} (exists, not a symlink)`);continue}Q(u)}V(g,u,Z?"junction":"dir"),r.installed.push(`${a}/${l}`),e(` done: ${l} \u2192 ${a}`)}}return r}function ie(i){return i.includes(".codex")?"Codex":i.includes(".agents")?"Agents":"Claude"}export{y as Watcher,T as getScipVersion,O as initProjectConfig,te as installSkills,$ as isScipInstalled,L as loadProjectConfig,E as printScipInstallInstructions,m as resolveIndexPaths};
|
|
3
3
|
//# sourceMappingURL=runtime.js.map
|
package/docs/AGENT_GUIDE.md
CHANGED
|
@@ -6,6 +6,43 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## Workflow 0: Bootstrap scip-query in a project
|
|
10
|
+
|
|
11
|
+
**Goal:** Make a repository ready for scip-query-backed agent work before cleanup or implementation begins.
|
|
12
|
+
|
|
13
|
+
### Steps
|
|
14
|
+
|
|
15
|
+
1. **Run setup**
|
|
16
|
+
```bash
|
|
17
|
+
scip-query setup-hooks --json
|
|
18
|
+
scip-query setup --json
|
|
19
|
+
```
|
|
20
|
+
Returns: project-local hook install state, detected languages, indexer readiness, remediation attempts, index result, capability summary, smoke tests, health score, issue list, health dossier paths, and setup verdict.
|
|
21
|
+
|
|
22
|
+
2. **Resolve blockers**
|
|
23
|
+
```bash
|
|
24
|
+
scip-query check-deps
|
|
25
|
+
scip-query doctor
|
|
26
|
+
scip-query capability-matrix --json
|
|
27
|
+
```
|
|
28
|
+
Missing indexers or toolchains are blockers, not clean results. Fix what setup can prove, then rerun setup or reindex.
|
|
29
|
+
|
|
30
|
+
3. **Start health follow-through**
|
|
31
|
+
```bash
|
|
32
|
+
scip-query health --json --full
|
|
33
|
+
scip-query diff-gate --json
|
|
34
|
+
```
|
|
35
|
+
Before cleanup, tell the user the health score, confirmed items, unavailable checks, and recommended first cleanup batch. Use `scip-health-audit` for confirmation and `scip-health-improve` when the user wants autonomous score improvement.
|
|
36
|
+
|
|
37
|
+
### What you should know after this workflow
|
|
38
|
+
|
|
39
|
+
- Whether the index is current and usable
|
|
40
|
+
- Which capabilities are available, partial, or unavailable
|
|
41
|
+
- Where the health dossier was written
|
|
42
|
+
- What needs to be fixed before the repo can be called ready
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
9
46
|
## Workflow 1: Understand a system before making changes
|
|
10
47
|
|
|
11
48
|
**Goal:** Build a complete mental model of a module or feature area so you can write a precise implementation plan with no ambiguity about what code exists, what it does, and what depends on it.
|
|
@@ -88,7 +125,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
88
125
|
4. **Check blast radius before editing**
|
|
89
126
|
```bash
|
|
90
127
|
scip-query change-surface <file>
|
|
91
|
-
scip-query diff-impact
|
|
128
|
+
scip-query diff-impact --json
|
|
92
129
|
```
|
|
93
130
|
Identify which symbols in your change set have many external consumers and which downstream files will be affected.
|
|
94
131
|
|
|
@@ -101,7 +138,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
101
138
|
|
|
102
139
|
6. **After making changes, verify impact**
|
|
103
140
|
```bash
|
|
104
|
-
scip-query diff-impact
|
|
141
|
+
scip-query diff-impact --json
|
|
105
142
|
scip-query drift
|
|
106
143
|
```
|
|
107
144
|
Shows every symbol affected by your git diff, every consumer file impacted, and whether the change introduced new structural drift.
|
|
@@ -297,7 +334,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
297
334
|
|
|
298
335
|
1. **Compute diff impact**
|
|
299
336
|
```bash
|
|
300
|
-
scip-query diff-impact
|
|
337
|
+
scip-query diff-impact --json
|
|
301
338
|
```
|
|
302
339
|
Shows: changed files, changed symbols with fan-in counts, and affected consumer files.
|
|
303
340
|
|
|
@@ -326,7 +363,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
326
363
|
| See what a function calls and who calls it | `call-graph <symbol>` |
|
|
327
364
|
| Check blast radius of a change | `affected <symbol>` |
|
|
328
365
|
| Get a pre-change briefing | `change-surface <file>` |
|
|
329
|
-
| See impact of my git changes | `diff-impact` |
|
|
366
|
+
| See impact of my git changes | `diff-impact --json` |
|
|
330
367
|
| Find dead code to delete | `dead --min-loc 10 --skip-barrels` |
|
|
331
368
|
| Find duplicate functions | `similar --min-similarity 0.5` |
|
|
332
369
|
| Find same-shape functions | `similar-signatures --min-loc 5` |
|
|
@@ -347,7 +384,7 @@ For command syntax and options reference, see [Command Reference](COMMAND_REFERE
|
|
|
347
384
|
- **Always reindex before analysis** if the codebase has changed significantly: `scip-query reindex`
|
|
348
385
|
- **Use `--json` on `health`** for programmatic consumption — parse the JSON to make decisions
|
|
349
386
|
- **Run `change-surface` before every file modification** — it takes <1 second and prevents surprises
|
|
350
|
-
- **Run `diff-impact` before committing** — catches unexpected blast radius across downstream consumers
|
|
387
|
+
- **Run `diff-impact --json` before committing** — catches unexpected blast radius across downstream consumers
|
|
351
388
|
- **Use `convergence` after `similar`** — `similar` finds the problem, `convergence` gives the solution
|
|
352
389
|
- **Start cleanup with `health`** — it prioritizes for you so you don't have to decide what to fix first
|
|
353
390
|
- **Scope commands with `-s`** — most commands accept `--scope <path>` to limit analysis to a specific module. Use this on large codebases to keep results focused.
|
package/docs/AI_FAILURE_MODES.md
CHANGED
|
@@ -207,13 +207,13 @@ breaks transitively, or which files historically move together with it — then
|
|
|
207
207
|
|
|
208
208
|
**The detectors:** `plan-context` (one command bundling definitions,
|
|
209
209
|
references, call graph, blast radius, churn, and co-change partners — the
|
|
210
|
-
pre-edit briefing), `change-surface`, `affected`, `diff-impact`.
|
|
210
|
+
pre-edit briefing), `change-surface`, `affected`, `diff-impact --json`.
|
|
211
211
|
|
|
212
212
|
**Use it:**
|
|
213
213
|
|
|
214
214
|
```bash
|
|
215
215
|
scip-query plan-context <symbol-or-file> # before the edit
|
|
216
|
-
scip-query diff-impact
|
|
216
|
+
scip-query diff-impact --json # after the edit
|
|
217
217
|
```
|
|
218
218
|
|
|
219
219
|
The `concrete-plan` skill enforces this end-to-end: every step in a plan must
|
|
@@ -244,35 +244,42 @@ scip-query health --baseline # in CI
|
|
|
244
244
|
|
|
245
245
|
The detectors only help if they run. Three layers, in increasing strength:
|
|
246
246
|
|
|
247
|
-
**1. Skills (routing).** Installing scip-query symlinks
|
|
248
|
-
`~/.agents/skills/`, `~/.claude/skills/`, and
|
|
249
|
-
automatically with the package.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
247
|
+
**1. Skills and lifecycle hooks (routing).** Installing scip-query symlinks the
|
|
248
|
+
bundled skills into `~/.agents/skills/`, `~/.claude/skills/`, and
|
|
249
|
+
`~/.codex/skills/` — they update automatically with the package. Project setup
|
|
250
|
+
writes reviewable repo-local hooks to `.codex/hooks.json` and
|
|
251
|
+
`.claude/settings.json`, unless `SCIP_QUERY_SKIP_HOOK_INSTALL=1` is set. The
|
|
252
|
+
hooks add scip-query context at session start, route prompts toward the right
|
|
253
|
+
specialist, and run a safe Stop hook wrapper around the diff gate only for that
|
|
254
|
+
repository. The Stop hook warns by default instead of blocking the agent; set
|
|
255
|
+
`SCIP_QUERY_STOP_HOOK_MODE=feedback` to ask the agent to continue without a
|
|
256
|
+
hook error, or `SCIP_QUERY_STOP_HOOK_MODE=block` to enforce the gate. Run
|
|
257
|
+
`scip-query setup-hooks --json` to repair the current repo's hooks.
|
|
254
258
|
|
|
255
|
-
**2. Project guidance
|
|
259
|
+
**2. Project setup and guidance.** Run once per project:
|
|
256
260
|
|
|
257
261
|
```bash
|
|
258
|
-
scip-query setup
|
|
262
|
+
scip-query setup --json
|
|
259
263
|
```
|
|
260
264
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
265
|
+
Setup installs or refreshes skills, configures project-local hooks, checks indexer readiness, attempts
|
|
266
|
+
configured indexer remediation, refreshes the index, smoke-tests representative
|
|
267
|
+
commands, writes `docs/scip-query/health-dossier.md` and `.json`, reports the
|
|
268
|
+
health score and items needing attention, and seeds a managed block in
|
|
269
|
+
`AGENTS.md` plus a `CLAUDE.md` import shim.
|
|
270
|
+
|
|
271
|
+
After setup, use `scip-health-audit` to confirm raw signals and
|
|
272
|
+
`scip-health-improve` when the user wants the agent to fix the worst confirmed
|
|
273
|
+
items until the health score is as high as reasonably possible.
|
|
266
274
|
|
|
267
275
|
**3. The gate (enforcement).**
|
|
268
276
|
|
|
269
277
|
```bash
|
|
270
|
-
scip-query diff-gate
|
|
278
|
+
scip-query diff-gate --json # one command, every check above, scoped to the diff, exit 1 on findings
|
|
271
279
|
scip-query setup-agent --git-hook # pre-commit backstop: fires whoever wrote the diff
|
|
272
280
|
```
|
|
273
281
|
|
|
274
282
|
Every finding ships with a remediation an agent can act on without human
|
|
275
|
-
triage.
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
tool's hook config if you want the gate to be unskippable.
|
|
283
|
+
triage. The installed Codex/Claude Stop hook uses the same diff-gate evidence,
|
|
284
|
+
warns by default, and no-ops outside indexed scip-query workspaces, so global
|
|
285
|
+
hook install stays safe for ordinary projects.
|
|
@@ -95,7 +95,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
95
95
|
| `co-change [file]` | Files that change together in git history without a dependency edge — hidden coupling candidates | `--min-together <n>`<br>`-n, --limit <n>`<br>`--all`<br>`--full`<br>`--json` |
|
|
96
96
|
| `diff-gate` | Gate the current diff: echo candidates, incomplete migrations, missing co-change partners, uncited doc updates, unused params, new dead symbols; exit 1 on findings | `--base <ref>`<br>`--min-together <n>`<br>`--max-echo-checks <n>`<br>`--max-helpers <n>`<br>`--skip <check>`<br>`--hook`<br>`--json` |
|
|
97
97
|
| `incomplete-migration` | Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain | `--base <ref>`<br>`--min-containment <n>`<br>`--max-helpers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
98
|
-
| `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref
|
|
98
|
+
| `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>`<br>`--json` |
|
|
99
99
|
|
|
100
100
|
### Planning
|
|
101
101
|
|
|
@@ -115,7 +115,8 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
115
115
|
|
|
116
116
|
| Command | Description | Options |
|
|
117
117
|
|---|---|---|
|
|
118
|
-
| `install-skills` | Install skills (scip-query, scip-query-setup, concrete-plan, scip-ai-cleanup, scip-explore, scip-debloat, scip-doc-reconcile, scip-directory-architecture, scip-maintainability, scip-react-maintainability, scip-vue-maintainability, scip-verify, scip-language-playbook) into Claude Code, Codex, and shared agent roots | - |
|
|
118
|
+
| `install-skills` | Install skills (scip-query, scip-query-setup, scip-adoption, scip-health-audit, scip-health-improve, scip-api-impact, concrete-plan, scip-ai-cleanup, scip-debug, scip-explore, scip-triage-issue, scip-diagram, scip-debloat, scip-doc-reconcile, scip-directory-architecture, scip-maintainability, scip-react-maintainability, scip-vue-maintainability, scip-verify, scip-language-playbook) into Claude Code, Codex, and shared agent roots | - |
|
|
119
|
+
| `setup-hooks` | Install or refresh project-local Codex and Claude Code lifecycle hooks | `--json` |
|
|
119
120
|
| `check-deps` | Check whether scip-query and the detected language indexers are actually runnable | - |
|
|
120
121
|
| `capabilities` | Report which evidence and verification capabilities are available in this project | `--json` |
|
|
121
122
|
| `capability-matrix` | Report the evidence and verification capability matrix by language | `--json` |
|
|
@@ -123,6 +124,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
123
124
|
| `config-validate` | Validate .scipquery.json, including structured suppressions and declared coupling groups | `--json` |
|
|
124
125
|
| `suppress <id>` | Record an accepted finding in .scipquery.json with a required reason | `--reason <text>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--json` |
|
|
125
126
|
| `doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | `--json` |
|
|
127
|
+
| `setup` | Bootstrap this project: install agent skills, refresh the index, verify capabilities, and report health | `--git-hook`<br>`--json` |
|
|
126
128
|
| `setup-agent` | Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop | `--git-hook` |
|
|
127
129
|
| `setup-ci` | Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests | `--force`<br>`--dry-run` |
|
|
128
130
|
| `watch` | Watch for file changes and reindex automatically | `--debounce <ms>`<br>`--cooldown <ms>` |
|
|
@@ -20,7 +20,7 @@ The action tiers are:
|
|
|
20
20
|
|
|
21
21
|
## Current Surfaces
|
|
22
22
|
|
|
23
|
-
The published query surface
|
|
23
|
+
The published query surface and private query-helper manifest live in `src/queries/public-query-entries.ts`. The CLI command order and families live in `src/runtime/commands/query-command-specs.ts`. The composite health score runs the phases listed in `HEALTH_PHASES` in `src/queries/health/health.ts`. The diff gate runs the checks listed in `DIFF_GATE_CHECKS` in `src/queries/impact/diff-gate.ts`, with doc-reference and baseline policy helpers kept private to the query tree.
|
|
24
24
|
|
|
25
25
|
`health --json` on this repository currently reports:
|
|
26
26
|
|
|
@@ -160,3 +160,7 @@ Command shape:
|
|
|
160
160
|
- Action tier: contextual signal. It guides placement; it should not force moves without architecture judgment.
|
|
161
161
|
|
|
162
162
|
This should pair with `react-large-component-pressure`, `vue-large-view-pressure`, `extract-candidates`, and `incomplete-migration` so agents do not reduce size scores by dumping extracted pieces into flat local directories.
|
|
163
|
+
|
|
164
|
+
## 2026-06-23 Citation Refresh
|
|
165
|
+
|
|
166
|
+
The maintainability-register completion slice rechecked the command and diff-gate guide references above. `src/runtime/commands/query-command-specs.ts` still owns the public query order, now also exporting `orderedQueryCommandDescriptors` so CLI registration can derive from that order. `src/queries/impact/diff-gate.ts` still owns `DIFF_GATE_CHECKS`; the slice only centralized finding emission through a local recorder and did not change the listed check family.
|
|
@@ -260,3 +260,11 @@ The first concrete run was intentionally narrow:
|
|
|
260
260
|
6. Produce one calibration memo that says whether the current direct/signal/support split still holds.
|
|
261
261
|
|
|
262
262
|
That slice tested the ledger, the protocol, the review burden, and the score model before the later completion passes covered the remaining analyzer families.
|
|
263
|
+
|
|
264
|
+
## 2026-06-23 Citation Refresh
|
|
265
|
+
|
|
266
|
+
The maintainability-register completion slice rechecked the ledger's command-surface and diff-gate citations. `queryCommandOrder` remains the canonical public query order, and `orderedQueryCommandDescriptors` is now derived from that list for CLI registration. `diffGate()` still runs the same check families recorded in the ledger; finding construction now goes through a local recorder that derives the suppression hint consistently.
|
|
267
|
+
|
|
268
|
+
## 2026-06-23 Current Sweep Citation Refresh
|
|
269
|
+
|
|
270
|
+
The current maintainability sweep rechecked the `diff-gate.ts` citation again after doc-reference and baseline policy helpers moved into private query modules. The ledger remains accurate because `diffGate()` and `DIFF_GATE_CHECKS` still live in `src/queries/impact/diff-gate.ts`; only helper policy bodies moved behind the same entry point.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scip-query",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
4
4
|
"description": "Evidence and verification for AI coding agents: map code, reuse concepts, finish migrations, and gate diffs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"dist/**/*.d.ts",
|
|
14
14
|
"docs/assets/**/*",
|
|
15
15
|
"docs/*.md",
|
|
16
|
-
"skills/**/SKILL.md"
|
|
16
|
+
"skills/**/SKILL.md",
|
|
17
|
+
"skills/**/agents/*.yaml"
|
|
17
18
|
],
|
|
18
19
|
"sideEffects": false,
|
|
19
20
|
"exports": {
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: concrete-plan
|
|
3
3
|
description: Build concrete, checklist-driven implementation plans using scip-query for every code reference. Plans are stress-tested against 11 engineering principles before shipping.
|
|
4
|
-
allowed-tools: [Bash, Write, Edit, Glob, Agent, TaskCreate, TaskUpdate, TaskGet, TaskList]
|
|
5
|
-
keywords: [plan, design, architecture, implementation, checklist, blueprint, proposal, rfc, spec]
|
|
6
4
|
---
|
|
7
5
|
|
|
8
6
|
# Concrete Implementation Planning
|
|
@@ -114,7 +112,7 @@ This skill deliberately excludes `Grep` and `Read` from its allowed tools. This
|
|
|
114
112
|
| Reverse dependencies | `scip-query rdeps <file>` |
|
|
115
113
|
| **Full transitive blast radius** | `scip-query affected <symbol>` |
|
|
116
114
|
| **Pre-change risk briefing** | `scip-query change-surface <file>` |
|
|
117
|
-
| **Git diff impact analysis** | `scip-query diff-impact` |
|
|
115
|
+
| **Git diff impact analysis** | `scip-query diff-impact --json` |
|
|
118
116
|
| **Complexity analysis** | `scip-query complexity <symbol>` (branches, cyclomatic, fan-in/out) |
|
|
119
117
|
| **Dataflow: what feeds in/out** | `scip-query dataflow <symbol>` (producers, consumers, usage sites) |
|
|
120
118
|
| **Backward slice (what affects this)** | `scip-query slice <symbol>` |
|
|
@@ -296,7 +294,7 @@ After stress-testing is complete:
|
|
|
296
294
|
3. **Fix drift**: Update any stale references.
|
|
297
295
|
4. **Check execution order**: No phase depends on a later phase. No step within a phase depends on a later step.
|
|
298
296
|
5. **Check validation coverage**: Every behavior-changing step should have a corresponding validation step. Flag gaps in tests, manual checks, or runtime verification.
|
|
299
|
-
6. **Run diff-impact**: `scip-query diff-impact` to verify the blast radius matches what the plan predicted.
|
|
297
|
+
6. **Run diff-impact**: `scip-query diff-impact --json` to verify the blast radius matches what the plan predicted.
|
|
300
298
|
|
|
301
299
|
---
|
|
302
300
|
|
|
@@ -327,7 +325,7 @@ Dependencies & Impact:
|
|
|
327
325
|
- `scip-query rdeps <file>` — files that depend on this file
|
|
328
326
|
- `scip-query affected <symbol>` — transitive closure of breakage
|
|
329
327
|
- `scip-query change-surface <file>` — pre-change risk briefing
|
|
330
|
-
- `scip-query diff-impact` — git diff impact analysis
|
|
328
|
+
- `scip-query diff-impact --json` — git diff impact analysis
|
|
331
329
|
|
|
332
330
|
Analysis:
|
|
333
331
|
- `scip-query complexity <symbol>` — branches, cyclomatic estimate, fan-in/out
|