habit-hooks 0.2.0 → 1.0.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 +17 -226
- package/bin/habit-hooks.js +32 -0
- package/package.json +11 -44
- package/LICENSE.md +0 -21
- package/dist/baseline/auto-prune.d.ts +0 -4
- package/dist/baseline/auto-prune.js +0 -38
- package/dist/baseline/auto-prune.js.map +0 -1
- package/dist/baseline/commands.d.ts +0 -12
- package/dist/baseline/commands.js +0 -125
- package/dist/baseline/commands.js.map +0 -1
- package/dist/baseline/file-hash.d.ts +0 -2
- package/dist/baseline/file-hash.js +0 -25
- package/dist/baseline/file-hash.js.map +0 -1
- package/dist/baseline/filter.d.ts +0 -9
- package/dist/baseline/filter.js +0 -18
- package/dist/baseline/filter.js.map +0 -1
- package/dist/baseline/reap.d.ts +0 -6
- package/dist/baseline/reap.js +0 -22
- package/dist/baseline/reap.js.map +0 -1
- package/dist/baseline/snooze-index.d.ts +0 -5
- package/dist/baseline/snooze-index.js +0 -65
- package/dist/baseline/snooze-index.js.map +0 -1
- package/dist/baseline/store.d.ts +0 -18
- package/dist/baseline/store.js +0 -106
- package/dist/baseline/store.js.map +0 -1
- package/dist/checks/comment-check.d.ts +0 -3
- package/dist/checks/comment-check.js +0 -85
- package/dist/checks/comment-check.js.map +0 -1
- package/dist/checks/eslint-wrap.d.ts +0 -2
- package/dist/checks/eslint-wrap.js +0 -107
- package/dist/checks/eslint-wrap.js.map +0 -1
- package/dist/checks/jscpd-wrap.d.ts +0 -9
- package/dist/checks/jscpd-wrap.js +0 -159
- package/dist/checks/jscpd-wrap.js.map +0 -1
- package/dist/checks/knip-resolve.d.ts +0 -4
- package/dist/checks/knip-resolve.js +0 -49
- package/dist/checks/knip-resolve.js.map +0 -1
- package/dist/checks/knip-schema.d.ts +0 -32
- package/dist/checks/knip-schema.js +0 -24
- package/dist/checks/knip-schema.js.map +0 -1
- package/dist/checks/knip-wrap.d.ts +0 -4
- package/dist/checks/knip-wrap.js +0 -135
- package/dist/checks/knip-wrap.js.map +0 -1
- package/dist/cli/baseline-commands.d.ts +0 -2
- package/dist/cli/baseline-commands.js +0 -61
- package/dist/cli/baseline-commands.js.map +0 -1
- package/dist/cli/emit.d.ts +0 -7
- package/dist/cli/emit.js +0 -8
- package/dist/cli/emit.js.map +0 -1
- package/dist/cli/init/apply-recommendations.d.ts +0 -3
- package/dist/cli/init/apply-recommendations.js +0 -76
- package/dist/cli/init/apply-recommendations.js.map +0 -1
- package/dist/cli/init/command-runner.d.ts +0 -6
- package/dist/cli/init/command-runner.js +0 -22
- package/dist/cli/init/command-runner.js.map +0 -1
- package/dist/cli/init/completion-report.d.ts +0 -11
- package/dist/cli/init/completion-report.js +0 -98
- package/dist/cli/init/completion-report.js.map +0 -1
- package/dist/cli/init/ctx.d.ts +0 -12
- package/dist/cli/init/ctx.js +0 -16
- package/dist/cli/init/ctx.js.map +0 -1
- package/dist/cli/init/detect.d.ts +0 -10
- package/dist/cli/init/detect.js +0 -69
- package/dist/cli/init/detect.js.map +0 -1
- package/dist/cli/init/git-hook.d.ts +0 -7
- package/dist/cli/init/git-hook.js +0 -52
- package/dist/cli/init/git-hook.js.map +0 -1
- package/dist/cli/init/install-commands.d.ts +0 -8
- package/dist/cli/init/install-commands.js +0 -82
- package/dist/cli/init/install-commands.js.map +0 -1
- package/dist/cli/init/package-scripts.d.ts +0 -6
- package/dist/cli/init/package-scripts.js +0 -55
- package/dist/cli/init/package-scripts.js.map +0 -1
- package/dist/cli/init/prompts.d.ts +0 -9
- package/dist/cli/init/prompts.js +0 -33
- package/dist/cli/init/prompts.js.map +0 -1
- package/dist/cli/init/recommendations.d.ts +0 -14
- package/dist/cli/init/recommendations.js +0 -66
- package/dist/cli/init/recommendations.js.map +0 -1
- package/dist/cli/init/report-language.d.ts +0 -1
- package/dist/cli/init/report-language.js +0 -12
- package/dist/cli/init/report-language.js.map +0 -1
- package/dist/cli/init/reporters.d.ts +0 -12
- package/dist/cli/init/reporters.js +0 -44
- package/dist/cli/init/reporters.js.map +0 -1
- package/dist/cli/init/run.d.ts +0 -17
- package/dist/cli/init/run.js +0 -123
- package/dist/cli/init/run.js.map +0 -1
- package/dist/cli/init/scaffold-baseline.d.ts +0 -4
- package/dist/cli/init/scaffold-baseline.js +0 -11
- package/dist/cli/init/scaffold-baseline.js.map +0 -1
- package/dist/cli/init/scaffold-config.d.ts +0 -20
- package/dist/cli/init/scaffold-config.js +0 -59
- package/dist/cli/init/scaffold-config.js.map +0 -1
- package/dist/cli/init/scaffold-eslint-config.d.ts +0 -2
- package/dist/cli/init/scaffold-eslint-config.js +0 -12
- package/dist/cli/init/scaffold-eslint-config.js.map +0 -1
- package/dist/cli/init/scaffold-jscpd-config.d.ts +0 -3
- package/dist/cli/init/scaffold-jscpd-config.js +0 -12
- package/dist/cli/init/scaffold-jscpd-config.js.map +0 -1
- package/dist/cli/init/scaffold-knip-config.d.ts +0 -2
- package/dist/cli/init/scaffold-knip-config.js +0 -12
- package/dist/cli/init/scaffold-knip-config.js.map +0 -1
- package/dist/cli/init/scaffold-ruff-config.d.ts +0 -2
- package/dist/cli/init/scaffold-ruff-config.js +0 -12
- package/dist/cli/init/scaffold-ruff-config.js.map +0 -1
- package/dist/cli/init/skill.d.ts +0 -8
- package/dist/cli/init/skill.js +0 -39
- package/dist/cli/init/skill.js.map +0 -1
- package/dist/cli/init/snippet.d.ts +0 -2
- package/dist/cli/init/snippet.js +0 -31
- package/dist/cli/init/snippet.js.map +0 -1
- package/dist/cli/init/templates/eslint-config.d.ts +0 -2
- package/dist/cli/init/templates/eslint-config.js +0 -45
- package/dist/cli/init/templates/eslint-config.js.map +0 -1
- package/dist/cli/init/templates/jscpd-config.d.ts +0 -3
- package/dist/cli/init/templates/jscpd-config.js +0 -17
- package/dist/cli/init/templates/jscpd-config.js.map +0 -1
- package/dist/cli/init/templates/knip-config.d.ts +0 -2
- package/dist/cli/init/templates/knip-config.js +0 -8
- package/dist/cli/init/templates/knip-config.js.map +0 -1
- package/dist/cli/init/templates/ruff-config.d.ts +0 -2
- package/dist/cli/init/templates/ruff-config.js +0 -16
- package/dist/cli/init/templates/ruff-config.js.map +0 -1
- package/dist/cli/init/tool-steps.d.ts +0 -2
- package/dist/cli/init/tool-steps.js +0 -78
- package/dist/cli/init/tool-steps.js.map +0 -1
- package/dist/cli/init-command.d.ts +0 -2
- package/dist/cli/init-command.js +0 -59
- package/dist/cli/init-command.js.map +0 -1
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js +0 -101
- package/dist/cli.js.map +0 -1
- package/dist/config/catalogue-unused.d.ts +0 -2
- package/dist/config/catalogue-unused.js +0 -39
- package/dist/config/catalogue-unused.js.map +0 -1
- package/dist/config/catalogue.d.ts +0 -2
- package/dist/config/catalogue.js +0 -163
- package/dist/config/catalogue.js.map +0 -1
- package/dist/config/defaults.d.ts +0 -4
- package/dist/config/defaults.js +0 -12
- package/dist/config/defaults.js.map +0 -1
- package/dist/config/jiti-loader.d.ts +0 -1
- package/dist/config/jiti-loader.js +0 -13
- package/dist/config/jiti-loader.js.map +0 -1
- package/dist/config/load.d.ts +0 -9
- package/dist/config/load.js +0 -54
- package/dist/config/load.js.map +0 -1
- package/dist/config/merge.d.ts +0 -3
- package/dist/config/merge.js +0 -91
- package/dist/config/merge.js.map +0 -1
- package/dist/config/schema.d.ts +0 -41
- package/dist/config/schema.js +0 -4
- package/dist/config/schema.js.map +0 -1
- package/dist/config/tool-smells.d.ts +0 -14
- package/dist/config/tool-smells.js +0 -69
- package/dist/config/tool-smells.js.map +0 -1
- package/dist/config/validate.d.ts +0 -2
- package/dist/config/validate.js +0 -159
- package/dist/config/validate.js.map +0 -1
- package/dist/detect/package-json.d.ts +0 -1
- package/dist/detect/package-json.js +0 -15
- package/dist/detect/package-json.js.map +0 -1
- package/dist/detect/path.d.ts +0 -1
- package/dist/detect/path.js +0 -14
- package/dist/detect/path.js.map +0 -1
- package/dist/detect/tool.d.ts +0 -10
- package/dist/detect/tool.js +0 -75
- package/dist/detect/tool.js.map +0 -1
- package/dist/discover.d.ts +0 -2
- package/dist/discover.js +0 -14
- package/dist/discover.js.map +0 -1
- package/dist/git/exec.d.ts +0 -8
- package/dist/git/exec.js +0 -48
- package/dist/git/exec.js.map +0 -1
- package/dist/git/resolve-scope.d.ts +0 -15
- package/dist/git/resolve-scope.js +0 -89
- package/dist/git/resolve-scope.js.map +0 -1
- package/dist/git/scope.d.ts +0 -7
- package/dist/git/scope.js +0 -58
- package/dist/git/scope.js.map +0 -1
- package/dist/guide/command.d.ts +0 -6
- package/dist/guide/command.js +0 -20
- package/dist/guide/command.js.map +0 -1
- package/dist/guide/guide.d.ts +0 -11
- package/dist/guide/guide.js +0 -82
- package/dist/guide/guide.js.map +0 -1
- package/dist/guide/render.d.ts +0 -3
- package/dist/guide/render.js +0 -14
- package/dist/guide/render.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/mapper/mapper.d.ts +0 -34
- package/dist/mapper/mapper.js +0 -80
- package/dist/mapper/mapper.js.map +0 -1
- package/dist/prompts/loader.d.ts +0 -6
- package/dist/prompts/loader.js +0 -27
- package/dist/prompts/loader.js.map +0 -1
- package/dist/prompts/packaged-dir.d.ts +0 -1
- package/dist/prompts/packaged-dir.js +0 -10
- package/dist/prompts/packaged-dir.js.map +0 -1
- package/dist/prompts/registry.d.ts +0 -3
- package/dist/prompts/registry.js +0 -43
- package/dist/prompts/registry.js.map +0 -1
- package/dist/rule-files.d.ts +0 -2
- package/dist/rule-files.js +0 -22
- package/dist/rule-files.js.map +0 -1
- package/dist/rules/registry.d.ts +0 -3
- package/dist/rules/registry.js +0 -37
- package/dist/rules/registry.js.map +0 -1
- package/dist/runner.d.ts +0 -15
- package/dist/runner.js +0 -141
- package/dist/runner.js.map +0 -1
- package/dist/sensors/adapter.d.ts +0 -17
- package/dist/sensors/adapter.js +0 -81
- package/dist/sensors/adapter.js.map +0 -1
- package/dist/sensors/deptry-sensor.d.ts +0 -3
- package/dist/sensors/deptry-sensor.js +0 -43
- package/dist/sensors/deptry-sensor.js.map +0 -1
- package/dist/sensors/line-count-sensor.d.ts +0 -3
- package/dist/sensors/line-count-sensor.js +0 -50
- package/dist/sensors/line-count-sensor.js.map +0 -1
- package/dist/sensors/needs-extraction.d.ts +0 -3
- package/dist/sensors/needs-extraction.js +0 -57
- package/dist/sensors/needs-extraction.js.map +0 -1
- package/dist/sensors/preset.d.ts +0 -17
- package/dist/sensors/preset.js +0 -57
- package/dist/sensors/preset.js.map +0 -1
- package/dist/sensors/python-preset.d.ts +0 -7
- package/dist/sensors/python-preset.js +0 -34
- package/dist/sensors/python-preset.js.map +0 -1
- package/dist/sensors/runner.d.ts +0 -12
- package/dist/sensors/runner.js +0 -94
- package/dist/sensors/runner.js.map +0 -1
- package/dist/sensors/types.d.ts +0 -15
- package/dist/sensors/types.js +0 -5
- package/dist/sensors/types.js.map +0 -1
- package/dist/types.d.ts +0 -44
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/wrap/notices.d.ts +0 -19
- package/dist/wrap/notices.js +0 -38
- package/dist/wrap/notices.js.map +0 -1
- package/dist/wrap/resolve.d.ts +0 -5
- package/dist/wrap/resolve.js +0 -9
- package/dist/wrap/resolve.js.map +0 -1
- package/dist/wrap/run.d.ts +0 -17
- package/dist/wrap/run.js +0 -31
- package/dist/wrap/run.js.map +0 -1
- package/dist/wrap/shell.d.ts +0 -15
- package/dist/wrap/shell.js +0 -50
- package/dist/wrap/shell.js.map +0 -1
- package/src/prompts/deep-nesting.md +0 -13
- package/src/prompts/duplicated-code.md +0 -9
- package/src/prompts/high-complexity.md +0 -9
- package/src/prompts/needs-extraction.md +0 -9
- package/src/prompts/non-essential-comment.md +0 -7
- package/src/prompts/non-null-assertion.md +0 -10
- package/src/prompts/oversized-file.md +0 -9
- package/src/prompts/oversized-function.issues.njk +0 -5
- package/src/prompts/oversized-function.md +0 -9
- package/src/prompts/parse-error.md +0 -5
- package/src/prompts/too-many-parameters.md +0 -9
- package/src/prompts/uncoached.md +0 -4
- package/src/skills/habit-hooks-prompting/SKILL.md +0 -37
- package/src/skills/habit-hooks-review/SKILL.md +0 -108
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-scope.js","sourceRoot":"","sources":["../../src/git/resolve-scope.ts"],"names":[],"mappings":"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"}
|
package/dist/git/scope.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare function getUncommittedFiles(cwd: string): string[];
|
|
2
|
-
export declare function getChangedVsCommit(cwd: string, hash: string): string[];
|
|
3
|
-
export declare function getLastNCommitsChanges(cwd: string, n: number): string[];
|
|
4
|
-
export declare function getMergeBase(cwd: string, base: string): string;
|
|
5
|
-
export declare function getChangedVsBranch(cwd: string, base: string): string[];
|
|
6
|
-
export declare function getCurrentBranch(cwd: string): string;
|
|
7
|
-
export declare function unionFiles(...lists: string[][]): string[];
|
package/dist/git/scope.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { resolve } from 'node:path';
|
|
2
|
-
import { gitExec } from './exec.js';
|
|
3
|
-
function parseLines(stdout) {
|
|
4
|
-
return stdout
|
|
5
|
-
.split('\n')
|
|
6
|
-
.map((line) => line.trim())
|
|
7
|
-
.filter((line) => line.length > 0);
|
|
8
|
-
}
|
|
9
|
-
function toAbsolute(cwd, files) {
|
|
10
|
-
return files.map((file) => resolve(cwd, file));
|
|
11
|
-
}
|
|
12
|
-
function extractTargetFromRenameOrCopy(rest) {
|
|
13
|
-
const arrowIndex = rest.indexOf(' -> ');
|
|
14
|
-
return arrowIndex === -1 ? rest : rest.slice(arrowIndex + 4);
|
|
15
|
-
}
|
|
16
|
-
function parseStatusLine(line) {
|
|
17
|
-
if (line.length < 4)
|
|
18
|
-
return null;
|
|
19
|
-
const status = line.slice(0, 2);
|
|
20
|
-
const rest = line.slice(3);
|
|
21
|
-
if (status === '??')
|
|
22
|
-
return rest;
|
|
23
|
-
return extractTargetFromRenameOrCopy(rest);
|
|
24
|
-
}
|
|
25
|
-
export function getUncommittedFiles(cwd) {
|
|
26
|
-
const stdout = gitExec(['status', '--porcelain'], cwd);
|
|
27
|
-
const files = stdout
|
|
28
|
-
.split('\n')
|
|
29
|
-
.map(parseStatusLine)
|
|
30
|
-
.filter((entry) => entry !== null && entry.length > 0);
|
|
31
|
-
return toAbsolute(cwd, files);
|
|
32
|
-
}
|
|
33
|
-
export function getChangedVsCommit(cwd, hash) {
|
|
34
|
-
const stdout = gitExec(['diff', '--name-only', hash, 'HEAD'], cwd);
|
|
35
|
-
return toAbsolute(cwd, parseLines(stdout));
|
|
36
|
-
}
|
|
37
|
-
export function getLastNCommitsChanges(cwd, n) {
|
|
38
|
-
return getChangedVsCommit(cwd, `HEAD~${String(n)}`);
|
|
39
|
-
}
|
|
40
|
-
export function getMergeBase(cwd, base) {
|
|
41
|
-
return gitExec(['merge-base', 'HEAD', base], cwd).trim();
|
|
42
|
-
}
|
|
43
|
-
export function getChangedVsBranch(cwd, base) {
|
|
44
|
-
const mergeBase = getMergeBase(cwd, base);
|
|
45
|
-
return getChangedVsCommit(cwd, mergeBase);
|
|
46
|
-
}
|
|
47
|
-
export function getCurrentBranch(cwd) {
|
|
48
|
-
return gitExec(['rev-parse', '--abbrev-ref', 'HEAD'], cwd).trim();
|
|
49
|
-
}
|
|
50
|
-
export function unionFiles(...lists) {
|
|
51
|
-
const seen = new Set();
|
|
52
|
-
for (const list of lists) {
|
|
53
|
-
for (const file of list)
|
|
54
|
-
seen.add(file);
|
|
55
|
-
}
|
|
56
|
-
return [...seen];
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=scope.js.map
|
package/dist/git/scope.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/git/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/guide/command.d.ts
DELETED
package/dist/guide/command.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { runTool } from '../wrap/shell.js';
|
|
2
|
-
import { isSpawnFailure } from '../wrap/notices.js';
|
|
3
|
-
function combinedOutput(stdout, stderr) {
|
|
4
|
-
return [stdout, stderr]
|
|
5
|
-
.map((stream) => stream.trimEnd())
|
|
6
|
-
.filter((stream) => stream.length > 0)
|
|
7
|
-
.join('\n');
|
|
8
|
-
}
|
|
9
|
-
export async function runFixCommand(action, scriptPath, cwd) {
|
|
10
|
-
const result = await runTool({ bin: scriptPath, args: [], cwd, stdin: JSON.stringify(action.issues) });
|
|
11
|
-
if (isSpawnFailure(result)) {
|
|
12
|
-
const detail = result.warnings.length > 0 ? result.warnings.join('; ') : 'spawn failure';
|
|
13
|
-
return { output: `❌ fix command for ${action.smell} could not run: ${detail}`, blocks: true };
|
|
14
|
-
}
|
|
15
|
-
return {
|
|
16
|
-
output: combinedOutput(result.stdout, result.stderr),
|
|
17
|
-
blocks: result.exitCode !== 0 && action.severity === 'enforced',
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/guide/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYpD,SAAS,cAAc,CAAC,MAAc,EAAE,MAAc;IACpD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;SACpB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;SACrC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAmB,EAAE,UAAkB,EAAE,GAAW;IACtF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACzF,OAAO,EAAE,MAAM,EAAE,qBAAqB,MAAM,CAAC,KAAK,mBAAmB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC;IACD,OAAO;QACL,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpD,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU;KAChE,CAAC;AACJ,CAAC"}
|
package/dist/guide/guide.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { MapperDirs, MapResult } from '../mapper/mapper.js';
|
|
2
|
-
export interface GuideResult {
|
|
3
|
-
stdout: string;
|
|
4
|
-
exitCode: 0 | 1;
|
|
5
|
-
}
|
|
6
|
-
export interface GuideInput {
|
|
7
|
-
result: MapResult;
|
|
8
|
-
dirs: MapperDirs;
|
|
9
|
-
cwd: string;
|
|
10
|
-
}
|
|
11
|
-
export declare function guide(input: GuideInput): Promise<GuideResult>;
|
package/dist/guide/guide.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { createEnv, renderTemplate } from './render.js';
|
|
4
|
-
import { runFixCommand } from './command.js';
|
|
5
|
-
const CLEAN_BANNER = '✅ Habit Hooks: automated checks passed.\n\nHabit Hooks catches structural smells, not correctness or design. If no reviewer sub-agent has reviewed this change set, run one before declaring done.';
|
|
6
|
-
const DEFAULT_ISSUES_TEMPLATE = 'Violations:\n{% for i in issues %}- {{ i.details.file }}:{{ i.details.line }} - {{ i.details.message }}\n{% endfor %}';
|
|
7
|
-
function searchPathsFor(dirs) {
|
|
8
|
-
return dirs.overrideDir !== undefined ? [dirs.overrideDir, dirs.packagedDir] : [dirs.packagedDir];
|
|
9
|
-
}
|
|
10
|
-
function findInDirs(name, dirs) {
|
|
11
|
-
for (const dir of searchPathsFor(dirs)) {
|
|
12
|
-
const path = join(dir, name);
|
|
13
|
-
if (existsSync(path))
|
|
14
|
-
return path;
|
|
15
|
-
}
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
function issuesTemplate(smell, dirs) {
|
|
19
|
-
const custom = findInDirs(`${smell}.issues.njk`, dirs);
|
|
20
|
-
return custom !== null ? readFileSync(custom, 'utf8') : DEFAULT_ISSUES_TEMPLATE;
|
|
21
|
-
}
|
|
22
|
-
function renderIssues(env, action, dirs) {
|
|
23
|
-
const source = issuesTemplate(action.smell, dirs);
|
|
24
|
-
return env.renderString(source, { smell: action.smell, issues: action.issues }).trimEnd();
|
|
25
|
-
}
|
|
26
|
-
function renderProse(env, action) {
|
|
27
|
-
if (action.action.kind !== 'prompt')
|
|
28
|
-
return '';
|
|
29
|
-
return renderTemplate(env, action.action.templatePath, { smell: action.smell, issues: action.issues });
|
|
30
|
-
}
|
|
31
|
-
function composeSection(env, prepared, dirs) {
|
|
32
|
-
const { action, command } = prepared;
|
|
33
|
-
const prose = renderProse(env, action);
|
|
34
|
-
const body = prose.length > 0 ? prose : action.description;
|
|
35
|
-
const head = [`❌ ${action.title}`, body].filter((part) => part.length > 0).join('\n\n');
|
|
36
|
-
const base = `${head}\n\n${renderIssues(env, action, dirs)}`;
|
|
37
|
-
return command !== null && command.output.length > 0 ? `${base}\n\n${command.output}` : base;
|
|
38
|
-
}
|
|
39
|
-
function totalIssues(result) {
|
|
40
|
-
return result.actions.reduce((sum, a) => sum + a.issues.length, 0) + result.uncoached.length;
|
|
41
|
-
}
|
|
42
|
-
function header(total) {
|
|
43
|
-
return `❌ Habit Hooks: ${total} ${total === 1 ? 'violation' : 'violations'}`;
|
|
44
|
-
}
|
|
45
|
-
function uncoachedLine(issue) {
|
|
46
|
-
const { file, line, message, source } = issue.details;
|
|
47
|
-
return `- ${source ?? issue.smell}: ${message} (${file}:${line})`;
|
|
48
|
-
}
|
|
49
|
-
function renderUncoached(issues) {
|
|
50
|
-
if (issues.length === 0)
|
|
51
|
-
return '';
|
|
52
|
-
return `⚠️ Uncoached smells\n\n${issues.map(uncoachedLine).join('\n')}`;
|
|
53
|
-
}
|
|
54
|
-
function actionBlocks(prepared) {
|
|
55
|
-
const { action, command } = prepared;
|
|
56
|
-
if (command !== null)
|
|
57
|
-
return command.blocks;
|
|
58
|
-
return action.severity === 'enforced' && action.issues.length > 0;
|
|
59
|
-
}
|
|
60
|
-
function exitFor(prepared) {
|
|
61
|
-
return prepared.some(actionBlocks) ? 1 : 0;
|
|
62
|
-
}
|
|
63
|
-
function prepareAction(action, cwd) {
|
|
64
|
-
const fix = action.action;
|
|
65
|
-
if (fix.kind !== 'command' || action.issues.length === 0) {
|
|
66
|
-
return Promise.resolve({ action, command: null });
|
|
67
|
-
}
|
|
68
|
-
return runFixCommand(action, fix.scriptPath, cwd).then((command) => ({ action, command }));
|
|
69
|
-
}
|
|
70
|
-
export async function guide(input) {
|
|
71
|
-
const { result, dirs, cwd } = input;
|
|
72
|
-
const total = totalIssues(result);
|
|
73
|
-
if (total === 0)
|
|
74
|
-
return { stdout: `${CLEAN_BANNER}\n\n`, exitCode: 0 };
|
|
75
|
-
const env = createEnv(searchPathsFor(dirs));
|
|
76
|
-
const prepared = await Promise.all(result.actions.map((action) => prepareAction(action, cwd)));
|
|
77
|
-
const bodies = prepared.map((p) => composeSection(env, p, dirs));
|
|
78
|
-
const sections = [header(total), ...bodies, renderUncoached(result.uncoached)];
|
|
79
|
-
const stdout = `${sections.filter((s) => s.length > 0).join('\n\n\n\n')}\n\n`;
|
|
80
|
-
return { stdout, exitCode: exitFor(prepared) };
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=guide.js.map
|
package/dist/guide/guide.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../../src/guide/guide.ts"],"names":[],"mappings":"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"}
|
package/dist/guide/render.d.ts
DELETED
package/dist/guide/render.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import nunjucks from 'nunjucks';
|
|
3
|
-
// Prompts are Nunjucks templates (docs/guide.md). autoescape is off because the
|
|
4
|
-
// output is agent-facing markdown/plain text, not HTML; the search paths let a
|
|
5
|
-
// template {% include %} shared partials from the override or packaged dirs.
|
|
6
|
-
export function createEnv(searchPaths) {
|
|
7
|
-
const loader = new nunjucks.FileSystemLoader(searchPaths, { noCache: true });
|
|
8
|
-
return new nunjucks.Environment(loader, { autoescape: false });
|
|
9
|
-
}
|
|
10
|
-
export function renderTemplate(env, templatePath, context) {
|
|
11
|
-
const source = readFileSync(templatePath, 'utf8');
|
|
12
|
-
return env.renderString(source, context).trimEnd();
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=render.js.map
|
package/dist/guide/render.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/guide/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,MAAM,UAAU,SAAS,CAAC,WAAqB;IAC7C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,GAAyB,EACzB,YAAoB,EACpB,OAAgC;IAEhC,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrD,CAAC"}
|
package/dist/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type { HabitHooksConfig, RuleDefinition, RuleOverride, ScopeConfig, } from './config/schema.js';
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/mapper/mapper.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Severity } from '../types.js';
|
|
2
|
-
import type { Issue } from '../sensors/types.js';
|
|
3
|
-
export type Fix = {
|
|
4
|
-
kind: 'prompt';
|
|
5
|
-
templatePath: string;
|
|
6
|
-
} | {
|
|
7
|
-
kind: 'command';
|
|
8
|
-
scriptPath: string;
|
|
9
|
-
};
|
|
10
|
-
export interface GuideAction {
|
|
11
|
-
smell: string;
|
|
12
|
-
severity: Severity;
|
|
13
|
-
title: string;
|
|
14
|
-
description: string;
|
|
15
|
-
issues: Issue[];
|
|
16
|
-
action: Fix;
|
|
17
|
-
}
|
|
18
|
-
export interface MapResult {
|
|
19
|
-
actions: GuideAction[];
|
|
20
|
-
uncoached: Issue[];
|
|
21
|
-
}
|
|
22
|
-
export interface SmellRouting {
|
|
23
|
-
severity: Severity;
|
|
24
|
-
fix?: string;
|
|
25
|
-
title?: string;
|
|
26
|
-
description?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface MapperDirs {
|
|
29
|
-
overrideDir?: string;
|
|
30
|
-
packagedDir: string;
|
|
31
|
-
}
|
|
32
|
-
export declare function resolveFix(smell: string, fix: string | undefined, dirs: MapperDirs): Fix | null;
|
|
33
|
-
export type RoutingLookup = (_smell: string) => SmellRouting | undefined;
|
|
34
|
-
export declare function mapIssues(issues: Issue[], routingFor: RoutingLookup, dirs: MapperDirs): MapResult;
|
package/dist/mapper/mapper.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { isAbsolute, join } from 'node:path';
|
|
3
|
-
function existsIn(dir, name) {
|
|
4
|
-
const path = join(dir, name);
|
|
5
|
-
return existsSync(path) ? path : null;
|
|
6
|
-
}
|
|
7
|
-
// Look up a file first in the consumer's override dir, then the packaged dir.
|
|
8
|
-
function findInDirs(name, dirs) {
|
|
9
|
-
if (dirs.overrideDir !== undefined) {
|
|
10
|
-
const override = existsIn(dirs.overrideDir, name);
|
|
11
|
-
if (override !== null)
|
|
12
|
-
return override;
|
|
13
|
-
}
|
|
14
|
-
return existsIn(dirs.packagedDir, name);
|
|
15
|
-
}
|
|
16
|
-
function fixFromPath(path) {
|
|
17
|
-
return path.endsWith('.md') ? { kind: 'prompt', templatePath: path } : { kind: 'command', scriptPath: path };
|
|
18
|
-
}
|
|
19
|
-
// A `fix` setting that names a missing file is a configuration error.
|
|
20
|
-
function resolveConfiguredFix(fix, dirs) {
|
|
21
|
-
const path = isAbsolute(fix) ? (existsSync(fix) ? fix : null) : findInDirs(fix, dirs);
|
|
22
|
-
if (path === null)
|
|
23
|
-
throw new Error(`habit-hooks: fix file not found: ${fix}`);
|
|
24
|
-
return fixFromPath(path);
|
|
25
|
-
}
|
|
26
|
-
// Default chain: `<smell>.md` template wins over a `<smell>` script.
|
|
27
|
-
function resolveDefaultFix(smell, dirs) {
|
|
28
|
-
const template = findInDirs(`${smell}.md`, dirs);
|
|
29
|
-
if (template !== null)
|
|
30
|
-
return { kind: 'prompt', templatePath: template };
|
|
31
|
-
const script = findInDirs(smell, dirs);
|
|
32
|
-
return script !== null ? { kind: 'command', scriptPath: script } : null;
|
|
33
|
-
}
|
|
34
|
-
// 1. the `fix` setting; 2. `<smell>.md`; 3. the `<smell>` script; else uncoached.
|
|
35
|
-
export function resolveFix(smell, fix, dirs) {
|
|
36
|
-
if (fix !== undefined)
|
|
37
|
-
return resolveConfiguredFix(fix, dirs);
|
|
38
|
-
return resolveDefaultFix(smell, dirs);
|
|
39
|
-
}
|
|
40
|
-
function groupBySmell(issues) {
|
|
41
|
-
const groups = new Map();
|
|
42
|
-
for (const issue of issues) {
|
|
43
|
-
const list = groups.get(issue.smell) ?? [];
|
|
44
|
-
list.push(issue);
|
|
45
|
-
groups.set(issue.smell, list);
|
|
46
|
-
}
|
|
47
|
-
return groups;
|
|
48
|
-
}
|
|
49
|
-
// A routed smell (known severity from config or catalogue) always becomes an
|
|
50
|
-
// action: its dedicated template if present, otherwise the generic uncoached.md
|
|
51
|
-
// body — so an enforced smell with no tuned prompt still renders and still
|
|
52
|
-
// escalates the exit code. Only a smell with no routing at all is truly uncoached.
|
|
53
|
-
function resolveActionFix(smell, routing, dirs) {
|
|
54
|
-
return resolveFix(smell, routing.fix, dirs) ?? resolveFix('uncoached', undefined, dirs);
|
|
55
|
-
}
|
|
56
|
-
function resolveAction(smell, group, ctx) {
|
|
57
|
-
const routing = ctx.routingFor(smell);
|
|
58
|
-
if (routing === undefined)
|
|
59
|
-
return null;
|
|
60
|
-
const fix = resolveActionFix(smell, routing, ctx.dirs);
|
|
61
|
-
if (fix === null)
|
|
62
|
-
return null;
|
|
63
|
-
const { severity, title = smell, description = '' } = routing;
|
|
64
|
-
return { smell, severity, title, description, issues: group, action: fix };
|
|
65
|
-
}
|
|
66
|
-
// Group the bag by smell and resolve each group to one action carrying its
|
|
67
|
-
// issues; a smell with no resolvable fix falls through to the uncoached bucket.
|
|
68
|
-
export function mapIssues(issues, routingFor, dirs) {
|
|
69
|
-
const actions = [];
|
|
70
|
-
const uncoached = [];
|
|
71
|
-
for (const [smell, group] of groupBySmell(issues)) {
|
|
72
|
-
const action = resolveAction(smell, group, { routingFor, dirs });
|
|
73
|
-
if (action === null)
|
|
74
|
-
uncoached.push(...group);
|
|
75
|
-
else
|
|
76
|
-
actions.push(action);
|
|
77
|
-
}
|
|
78
|
-
return { actions, uncoached };
|
|
79
|
-
}
|
|
80
|
-
//# sourceMappingURL=mapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/mapper/mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts/loader.d.ts
DELETED
package/dist/prompts/loader.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { resolvePackagedDir } from './packaged-dir.js';
|
|
4
|
-
function slugify(ruleId) {
|
|
5
|
-
return ruleId.replace(/[:/]/g, '-').replace(/@/g, '');
|
|
6
|
-
}
|
|
7
|
-
function tryRead(path) {
|
|
8
|
-
return existsSync(path) ? readFileSync(path, 'utf8').trimEnd() : null;
|
|
9
|
-
}
|
|
10
|
-
function candidatePaths(slug, opts) {
|
|
11
|
-
const packagedDir = opts.packagedDir ?? resolvePackagedDir();
|
|
12
|
-
const paths = [];
|
|
13
|
-
if (opts.overrideDir !== undefined)
|
|
14
|
-
paths.push(join(opts.overrideDir, `${slug}.md`));
|
|
15
|
-
paths.push(join(packagedDir, `${slug}.md`));
|
|
16
|
-
return paths;
|
|
17
|
-
}
|
|
18
|
-
export function loadGuidance(ruleId, opts = {}) {
|
|
19
|
-
const attempts = candidatePaths(slugify(ruleId), opts);
|
|
20
|
-
for (const path of attempts) {
|
|
21
|
-
const text = tryRead(path);
|
|
22
|
-
if (text !== null)
|
|
23
|
-
return text;
|
|
24
|
-
}
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/prompts/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxE,CAAC;AAOD,SAAS,cAAc,CAAC,IAAY,EAAE,IAAyB;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAA4B,EAAE;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function resolvePackagedDir(): string;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
5
|
-
const PROBE_FILE = 'too-many-parameters.md';
|
|
6
|
-
const SRC_PROMPTS_RELATIVE = join('..', '..', 'src', 'prompts');
|
|
7
|
-
export function resolvePackagedDir() {
|
|
8
|
-
return existsSync(join(here, PROBE_FILE)) ? here : join(here, SRC_PROMPTS_RELATIVE);
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=packaged-dir.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packaged-dir.js","sourceRoot":"","sources":["../../src/prompts/packaged-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAC5C,MAAM,oBAAoB,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAEhE,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/prompts/registry.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
2
|
-
import { defaultRules } from '../config/defaults.js';
|
|
3
|
-
import { resolvePackagedDir } from './packaged-dir.js';
|
|
4
|
-
const supplementalSeeds = [
|
|
5
|
-
{
|
|
6
|
-
id: 'parse-error',
|
|
7
|
-
title: 'ESLint fatal parse/config error',
|
|
8
|
-
description: 'ESLint could not analyze the file — a parse error, unresolvable config, or a plugin threw.',
|
|
9
|
-
severity: 'enforced',
|
|
10
|
-
},
|
|
11
|
-
];
|
|
12
|
-
function slugify(ruleId) {
|
|
13
|
-
return ruleId.replace(/[:/]/g, '-').replace(/@/g, '');
|
|
14
|
-
}
|
|
15
|
-
function buildPrompt(seed, packagedDir) {
|
|
16
|
-
return {
|
|
17
|
-
id: seed.id,
|
|
18
|
-
title: seed.title,
|
|
19
|
-
description: seed.description,
|
|
20
|
-
severity: seed.severity ?? 'suggested',
|
|
21
|
-
guidancePath: join(packagedDir, `${slugify(seed.id)}.md`),
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function addSeedToMap(map, seed, packagedDir) {
|
|
25
|
-
map.set(seed.id, buildPrompt(seed, packagedDir));
|
|
26
|
-
}
|
|
27
|
-
function buildRegistry() {
|
|
28
|
-
const packagedDir = resolvePackagedDir();
|
|
29
|
-
const map = new Map();
|
|
30
|
-
for (const rule of defaultRules)
|
|
31
|
-
addSeedToMap(map, rule, packagedDir);
|
|
32
|
-
for (const seed of supplementalSeeds)
|
|
33
|
-
addSeedToMap(map, seed, packagedDir);
|
|
34
|
-
return map;
|
|
35
|
-
}
|
|
36
|
-
const registry = buildRegistry();
|
|
37
|
-
export function lookupPrompt(ruleId) {
|
|
38
|
-
return registry.get(ruleId) ?? null;
|
|
39
|
-
}
|
|
40
|
-
export function listPrompts() {
|
|
41
|
-
return [...registry.values()];
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/prompts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AASvD,MAAM,iBAAiB,GAAe;IACpC;QACE,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,iCAAiC;QACxC,WAAW,EAAE,4FAA4F;QACzG,QAAQ,EAAE,UAAU;KACrB;CACF,CAAC;AAEF,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,WAAmB;IACtD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,WAAW;QACtC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAgC,EAAE,IAAc,EAAE,WAAmB;IACzF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,YAAY;QAAE,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACtE,KAAK,MAAM,IAAI,IAAI,iBAAiB;QAAE,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/rule-files.d.ts
DELETED
package/dist/rule-files.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { relative } from 'node:path';
|
|
2
|
-
import picomatch from 'picomatch';
|
|
3
|
-
function buildMatcher(patterns) {
|
|
4
|
-
if (!patterns || patterns.length === 0)
|
|
5
|
-
return null;
|
|
6
|
-
return picomatch(patterns);
|
|
7
|
-
}
|
|
8
|
-
export function filterFilesForRule(rule, files, cwd) {
|
|
9
|
-
const includeMatcher = buildMatcher(rule.include);
|
|
10
|
-
const excludeMatcher = buildMatcher(rule.exclude);
|
|
11
|
-
if (!includeMatcher && !excludeMatcher)
|
|
12
|
-
return files;
|
|
13
|
-
return files.filter((file) => {
|
|
14
|
-
const rel = relative(cwd, file);
|
|
15
|
-
if (includeMatcher && !includeMatcher(rel))
|
|
16
|
-
return false;
|
|
17
|
-
if (excludeMatcher && excludeMatcher(rel))
|
|
18
|
-
return false;
|
|
19
|
-
return true;
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=rule-files.js.map
|
package/dist/rule-files.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rule-files.js","sourceRoot":"","sources":["../src/rule-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,SAAS,MAAM,WAAW,CAAC;AAGlC,SAAS,YAAY,CAAC,QAA8B;IAClD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAU,EAAE,KAAe,EAAE,GAAW;IACzE,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,IAAI,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/rules/registry.d.ts
DELETED
package/dist/rules/registry.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { isAbsolute, resolve } from 'node:path';
|
|
2
|
-
import { DEFAULT_COMMENT_CHECK_THRESHOLDS } from '../checks/comment-check.js';
|
|
3
|
-
import { defaultConfig, defaultRules } from '../config/defaults.js';
|
|
4
|
-
import { mergeRules } from '../config/merge.js';
|
|
5
|
-
import { COMMENT_SMELL } from '../config/tool-smells.js';
|
|
6
|
-
import { loadGuidance } from '../prompts/loader.js';
|
|
7
|
-
function resolvePromptsDir(config, configDir) {
|
|
8
|
-
if (config.prompts === undefined)
|
|
9
|
-
return undefined;
|
|
10
|
-
return isAbsolute(config.prompts) ? config.prompts : resolve(configDir, config.prompts);
|
|
11
|
-
}
|
|
12
|
-
function attachGuidanceToRule(rule, overrideDir) {
|
|
13
|
-
const guidance = loadGuidance(rule.id, { overrideDir });
|
|
14
|
-
if (guidance === null)
|
|
15
|
-
return rule;
|
|
16
|
-
return { ...rule, guidance };
|
|
17
|
-
}
|
|
18
|
-
function attachGuidance(rules, overrideDir) {
|
|
19
|
-
return rules.map((rule) => attachGuidanceToRule(rule, overrideDir));
|
|
20
|
-
}
|
|
21
|
-
function resolveCommentThresholds(config) {
|
|
22
|
-
return {
|
|
23
|
-
maxSingleLineChars: config?.maxSingleLineChars ?? DEFAULT_COMMENT_CHECK_THRESHOLDS.maxSingleLineChars,
|
|
24
|
-
maxBlockChars: config?.maxBlockChars ?? DEFAULT_COMMENT_CHECK_THRESHOLDS.maxBlockChars,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
function attachCommentThresholds(rules, config) {
|
|
28
|
-
const thresholds = resolveCommentThresholds(config);
|
|
29
|
-
return rules.map((rule) => (rule.id === COMMENT_SMELL ? { ...rule, commentCheck: thresholds } : rule));
|
|
30
|
-
}
|
|
31
|
-
export function buildRules(config, configDir) {
|
|
32
|
-
const merged = mergeRules(defaultRules, defaultConfig.smells, config.rules, config.smells);
|
|
33
|
-
const overrideDir = resolvePromptsDir(config, configDir);
|
|
34
|
-
const withGuidance = attachGuidance(merged, overrideDir);
|
|
35
|
-
return attachCommentThresholds(withGuidance, config.commentCheck);
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/rules/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,SAAS,iBAAiB,CAAC,MAAwB,EAAE,SAAiB;IACpE,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAU,EAAE,WAA+B;IACvE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,WAA+B;IACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAsC;IACtE,OAAO;QACL,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,IAAI,gCAAgC,CAAC,kBAAkB;QACrG,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI,gCAAgC,CAAC,aAAa;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,MAAsC;IACpF,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAwB,EAAE,SAAiB;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;AACpE,CAAC"}
|
package/dist/runner.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type ScopeFlags, type ScopeMode } from './git/resolve-scope.js';
|
|
2
|
-
import type { Violation } from './types.js';
|
|
3
|
-
export interface RunResult {
|
|
4
|
-
stdout: string;
|
|
5
|
-
stderr: string[];
|
|
6
|
-
exitCode: number;
|
|
7
|
-
violations: Violation[];
|
|
8
|
-
scopeMode: ScopeMode;
|
|
9
|
-
}
|
|
10
|
-
export interface RunOptions {
|
|
11
|
-
configPath?: string;
|
|
12
|
-
scopeFlags?: ScopeFlags;
|
|
13
|
-
applyBaseline?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export declare function run(cwd: string, options?: RunOptions): Promise<RunResult>;
|