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
package/dist/cli/init/run.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { scaffoldConfig } from './scaffold-config.js';
|
|
2
|
-
import { scaffoldBaseline } from './scaffold-baseline.js';
|
|
3
|
-
import { runToolSteps } from './tool-steps.js';
|
|
4
|
-
import { detectToolStates, toolsForLanguage } from './detect.js';
|
|
5
|
-
import { completionReport } from './completion-report.js';
|
|
6
|
-
import { dryRunPath, noteScaffold } from './ctx.js';
|
|
7
|
-
import { detectionReport } from './report-language.js';
|
|
8
|
-
import { addCiScript, addHabitHooksScript } from './package-scripts.js';
|
|
9
|
-
import { installPreCommitHook } from './git-hook.js';
|
|
10
|
-
import { installSkills } from './skill.js';
|
|
11
|
-
import { agentSnippet } from './snippet.js';
|
|
12
|
-
import { reportHookResult, reportScriptResult, reportSkillResults, } from './reporters.js';
|
|
13
|
-
import { applyRecommendations } from './apply-recommendations.js';
|
|
14
|
-
import { runCommandWithShell } from './command-runner.js';
|
|
15
|
-
function writeConfigStep(ctx) {
|
|
16
|
-
if (ctx.dryRun) {
|
|
17
|
-
dryRunPath(ctx, 'habit-hooks.config.js', 'habit-hooks config');
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
noteScaffold(ctx, scaffoldConfig(ctx.cwd, ctx.language), 'habit-hooks config');
|
|
21
|
-
}
|
|
22
|
-
function writeBaselineStep(ctx) {
|
|
23
|
-
if (ctx.dryRun) {
|
|
24
|
-
dryRunPath(ctx, '.habit-hooks-baseline.json', 'baseline');
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const result = scaffoldBaseline(ctx.cwd);
|
|
28
|
-
if (result.created)
|
|
29
|
-
ctx.lines.out.push(`wrote ${result.path}\n`);
|
|
30
|
-
else
|
|
31
|
-
ctx.lines.out.push(`baseline already present at ${result.path}\n`);
|
|
32
|
-
}
|
|
33
|
-
async function maybeAddHabitHooksScript(ctx, prompter) {
|
|
34
|
-
if (ctx.dryRun)
|
|
35
|
-
return;
|
|
36
|
-
const yes = await prompter.ask("Add 'habit-hooks' to package.json scripts?", { defaultYes: true });
|
|
37
|
-
if (!yes)
|
|
38
|
-
return;
|
|
39
|
-
reportScriptResult('habit-hooks', addHabitHooksScript(ctx.cwd), ctx.lines);
|
|
40
|
-
}
|
|
41
|
-
async function maybeAddCiScript(ctx, prompter) {
|
|
42
|
-
if (ctx.dryRun)
|
|
43
|
-
return;
|
|
44
|
-
const yes = await prompter.ask("Wire 'npm run ci' as the full quality gate?", { defaultYes: true });
|
|
45
|
-
if (!yes)
|
|
46
|
-
return;
|
|
47
|
-
reportScriptResult('ci', addCiScript(ctx.cwd), ctx.lines);
|
|
48
|
-
}
|
|
49
|
-
async function maybeInstallHook(ctx, prompter) {
|
|
50
|
-
if (ctx.dryRun)
|
|
51
|
-
return;
|
|
52
|
-
const yes = await prompter.ask('Install a git pre-commit hook?', { defaultYes: false });
|
|
53
|
-
if (!yes)
|
|
54
|
-
return;
|
|
55
|
-
reportHookResult(installPreCommitHook(ctx.cwd, ctx.language), ctx.lines);
|
|
56
|
-
}
|
|
57
|
-
async function maybeInstallSkill(ctx, prompter) {
|
|
58
|
-
if (ctx.dryRun)
|
|
59
|
-
return;
|
|
60
|
-
const yes = await prompter.ask('Install the bundled habit-hooks skills into ~/.claude/skills/?', { defaultYes: false });
|
|
61
|
-
if (!yes)
|
|
62
|
-
return;
|
|
63
|
-
reportSkillResults(installSkills(), ctx.lines);
|
|
64
|
-
}
|
|
65
|
-
function printCompletionReport(ctx) {
|
|
66
|
-
ctx.lines.out.push(completionReport({
|
|
67
|
-
cwd: ctx.cwd,
|
|
68
|
-
language: ctx.language,
|
|
69
|
-
tools: toolsForLanguage(ctx.language),
|
|
70
|
-
matrix: detectToolStates(ctx.cwd),
|
|
71
|
-
advertiseAcceptFlag: !ctx.acceptRecommendations,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
function printSnippet(ctx) {
|
|
75
|
-
ctx.lines.out.push('\n--- paste into CLAUDE.md / AGENTS.md ---\n');
|
|
76
|
-
ctx.lines.out.push(agentSnippet(ctx.language));
|
|
77
|
-
ctx.lines.out.push('--- end snippet ---\n');
|
|
78
|
-
}
|
|
79
|
-
async function maybeAddNpmScripts(ctx, prompter) {
|
|
80
|
-
if (ctx.language === 'python')
|
|
81
|
-
return;
|
|
82
|
-
await maybeAddHabitHooksScript(ctx, prompter);
|
|
83
|
-
await maybeAddCiScript(ctx, prompter);
|
|
84
|
-
}
|
|
85
|
-
async function runPrompts(ctx, prompter) {
|
|
86
|
-
await maybeAddNpmScripts(ctx, prompter);
|
|
87
|
-
await maybeInstallHook(ctx, prompter);
|
|
88
|
-
await maybeInstallSkill(ctx, prompter);
|
|
89
|
-
}
|
|
90
|
-
function toResult(lines) {
|
|
91
|
-
return { stdout: lines.out.join(''), stderr: lines.err.join(''), exitCode: lines.exit };
|
|
92
|
-
}
|
|
93
|
-
function reportOnly(cwd) {
|
|
94
|
-
return { stdout: detectionReport(cwd), stderr: '', exitCode: 0 };
|
|
95
|
-
}
|
|
96
|
-
async function maybeApplyRecommendations(ctx, runCommand) {
|
|
97
|
-
if (!ctx.acceptRecommendations || ctx.dryRun)
|
|
98
|
-
return;
|
|
99
|
-
await applyRecommendations(ctx, runCommand);
|
|
100
|
-
}
|
|
101
|
-
async function scaffold(ctx, prompter, runCommand) {
|
|
102
|
-
runToolSteps(ctx);
|
|
103
|
-
writeConfigStep(ctx);
|
|
104
|
-
writeBaselineStep(ctx);
|
|
105
|
-
await runPrompts(ctx, prompter);
|
|
106
|
-
await maybeApplyRecommendations(ctx, runCommand);
|
|
107
|
-
printCompletionReport(ctx);
|
|
108
|
-
printSnippet(ctx);
|
|
109
|
-
return toResult(ctx.lines);
|
|
110
|
-
}
|
|
111
|
-
export async function runInit(cwd, opts) {
|
|
112
|
-
if (opts.language === undefined)
|
|
113
|
-
return reportOnly(cwd);
|
|
114
|
-
const ctx = {
|
|
115
|
-
cwd,
|
|
116
|
-
lines: { out: [], err: [], exit: 0 },
|
|
117
|
-
dryRun: opts.dryRun === true,
|
|
118
|
-
language: opts.language,
|
|
119
|
-
acceptRecommendations: opts.acceptRecommendations === true,
|
|
120
|
-
};
|
|
121
|
-
return scaffold(ctx, opts.prompter, opts.runCommand ?? runCommandWithShell);
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=run.js.map
|
package/dist/cli/init/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/init/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { BASELINE_FILENAME, BASELINE_VERSION, saveBaseline } from '../../baseline/store.js';
|
|
4
|
-
export function scaffoldBaseline(cwd) {
|
|
5
|
-
const path = join(cwd, BASELINE_FILENAME);
|
|
6
|
-
if (existsSync(path))
|
|
7
|
-
return { path, created: false };
|
|
8
|
-
saveBaseline(cwd, { version: BASELINE_VERSION, files: {} });
|
|
9
|
-
return { path, created: true };
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=scaffold-baseline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-baseline.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5F,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtD,YAAY,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Language } from '../../config/schema.js';
|
|
2
|
-
export interface DetectedLanguage {
|
|
3
|
-
language: Language;
|
|
4
|
-
reason: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function detectLanguageWithReason(cwd: string): DetectedLanguage;
|
|
7
|
-
export declare function detectLanguage(cwd: string): Language;
|
|
8
|
-
export interface ScaffoldResult {
|
|
9
|
-
path: string;
|
|
10
|
-
created: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface ScaffoldFileArgs {
|
|
13
|
-
cwd: string;
|
|
14
|
-
candidates: readonly string[];
|
|
15
|
-
defaultName: string;
|
|
16
|
-
template: string;
|
|
17
|
-
}
|
|
18
|
-
export declare function scaffoldFile(args: ScaffoldFileArgs): ScaffoldResult;
|
|
19
|
-
export declare function scaffoldConfig(cwd: string, language?: Language): ScaffoldResult;
|
|
20
|
-
export {};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
const CONFIG_FILENAMES = [
|
|
4
|
-
'habit-hooks.config.ts',
|
|
5
|
-
'habit-hooks.config.mjs',
|
|
6
|
-
'habit-hooks.config.js',
|
|
7
|
-
'habit-hooks.config.json',
|
|
8
|
-
];
|
|
9
|
-
const NEW_CONFIG_FILENAME = 'habit-hooks.config.js';
|
|
10
|
-
// init selects the language so only that language's sensors run. A Python
|
|
11
|
-
// project is recognised by its manifest; everything else defaults to TypeScript.
|
|
12
|
-
export function detectLanguageWithReason(cwd) {
|
|
13
|
-
if (existsSync(join(cwd, 'pyproject.toml'))) {
|
|
14
|
-
return { language: 'python', reason: 'found pyproject.toml' };
|
|
15
|
-
}
|
|
16
|
-
if (existsSync(join(cwd, 'setup.py'))) {
|
|
17
|
-
return { language: 'python', reason: 'found setup.py' };
|
|
18
|
-
}
|
|
19
|
-
return { language: 'typescript', reason: 'no Python manifest found' };
|
|
20
|
-
}
|
|
21
|
-
export function detectLanguage(cwd) {
|
|
22
|
-
return detectLanguageWithReason(cwd).language;
|
|
23
|
-
}
|
|
24
|
-
function configTemplate(language) {
|
|
25
|
-
return `export default {
|
|
26
|
-
language: '${language}',
|
|
27
|
-
scope: {
|
|
28
|
-
onlyChangedFiles: true,
|
|
29
|
-
branchBase: 'main',
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
`;
|
|
33
|
-
}
|
|
34
|
-
function findExisting(cwd, candidates) {
|
|
35
|
-
for (const name of candidates) {
|
|
36
|
-
const candidate = join(cwd, name);
|
|
37
|
-
if (existsSync(candidate))
|
|
38
|
-
return candidate;
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
export function scaffoldFile(args) {
|
|
43
|
-
const { cwd, candidates, defaultName, template } = args;
|
|
44
|
-
const existing = findExisting(cwd, candidates);
|
|
45
|
-
if (existing !== null)
|
|
46
|
-
return { path: existing, created: false };
|
|
47
|
-
const path = join(cwd, defaultName);
|
|
48
|
-
writeFileSync(path, template);
|
|
49
|
-
return { path, created: true };
|
|
50
|
-
}
|
|
51
|
-
export function scaffoldConfig(cwd, language) {
|
|
52
|
-
return scaffoldFile({
|
|
53
|
-
cwd,
|
|
54
|
-
candidates: CONFIG_FILENAMES,
|
|
55
|
-
defaultName: NEW_CONFIG_FILENAME,
|
|
56
|
-
template: configTemplate(language ?? detectLanguage(cwd)),
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=scaffold-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-config.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,gBAAgB,GAAG;IACvB,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;CAC1B,CAAC;AAEF,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAOpD,0EAA0E;AAC1E,iFAAiF;AACjF,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAChE,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO;eACM,QAAQ;;;;;;CAMtB,CAAC;AACF,CAAC;AAOD,SAAS,YAAY,CAAC,GAAW,EAAE,UAA6B;IAC9D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,UAAU,YAAY,CAAC,IAAsB;IACjD,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACxD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACpC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,QAAmB;IAC7D,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,UAAU,EAAE,gBAAgB;QAC5B,WAAW,EAAE,mBAAmB;QAChC,QAAQ,EAAE,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TOOL_CONFIG_FILENAMES } from '../../detect/tool.js';
|
|
2
|
-
import { ESLINT_CONFIG_FILENAME, ESLINT_CONFIG_TEMPLATE } from './templates/eslint-config.js';
|
|
3
|
-
import { scaffoldFile } from './scaffold-config.js';
|
|
4
|
-
export function scaffoldEslintConfig(cwd) {
|
|
5
|
-
return scaffoldFile({
|
|
6
|
-
cwd,
|
|
7
|
-
candidates: TOOL_CONFIG_FILENAMES.eslint,
|
|
8
|
-
defaultName: ESLINT_CONFIG_FILENAME,
|
|
9
|
-
template: ESLINT_CONFIG_TEMPLATE,
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=scaffold-eslint-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-eslint-config.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-eslint-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,UAAU,EAAE,qBAAqB,CAAC,MAAM;QACxC,WAAW,EAAE,sBAAsB;QACnC,QAAQ,EAAE,sBAAsB;KACjC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TOOL_CONFIG_FILENAMES } from '../../detect/tool.js';
|
|
2
|
-
import { JSCPD_CONFIG_FILENAME, jscpdConfigTemplate } from './templates/jscpd-config.js';
|
|
3
|
-
import { scaffoldFile } from './scaffold-config.js';
|
|
4
|
-
export function scaffoldJscpdConfig(cwd, language) {
|
|
5
|
-
return scaffoldFile({
|
|
6
|
-
cwd,
|
|
7
|
-
candidates: TOOL_CONFIG_FILENAMES.jscpd,
|
|
8
|
-
defaultName: JSCPD_CONFIG_FILENAME,
|
|
9
|
-
template: jscpdConfigTemplate(language),
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=scaffold-jscpd-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-jscpd-config.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-jscpd-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,QAAkB;IACjE,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,UAAU,EAAE,qBAAqB,CAAC,KAAK;QACvC,WAAW,EAAE,qBAAqB;QAClC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC;KACxC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TOOL_CONFIG_FILENAMES } from '../../detect/tool.js';
|
|
2
|
-
import { KNIP_CONFIG_FILENAME, KNIP_CONFIG_TEMPLATE } from './templates/knip-config.js';
|
|
3
|
-
import { scaffoldFile } from './scaffold-config.js';
|
|
4
|
-
export function scaffoldKnipConfig(cwd) {
|
|
5
|
-
return scaffoldFile({
|
|
6
|
-
cwd,
|
|
7
|
-
candidates: TOOL_CONFIG_FILENAMES.knip,
|
|
8
|
-
defaultName: KNIP_CONFIG_FILENAME,
|
|
9
|
-
template: KNIP_CONFIG_TEMPLATE,
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=scaffold-knip-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-knip-config.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-knip-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,UAAU,EAAE,qBAAqB,CAAC,IAAI;QACtC,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,oBAAoB;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TOOL_CONFIG_FILENAMES } from '../../detect/tool.js';
|
|
2
|
-
import { RUFF_CONFIG_FILENAME, RUFF_CONFIG_TEMPLATE } from './templates/ruff-config.js';
|
|
3
|
-
import { scaffoldFile } from './scaffold-config.js';
|
|
4
|
-
export function scaffoldRuffConfig(cwd) {
|
|
5
|
-
return scaffoldFile({
|
|
6
|
-
cwd,
|
|
7
|
-
candidates: TOOL_CONFIG_FILENAMES.ruff,
|
|
8
|
-
defaultName: RUFF_CONFIG_FILENAME,
|
|
9
|
-
template: RUFF_CONFIG_TEMPLATE,
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=scaffold-ruff-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-ruff-config.js","sourceRoot":"","sources":["../../../src/cli/init/scaffold-ruff-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,YAAY,CAAC;QAClB,GAAG;QACH,UAAU,EAAE,qBAAqB,CAAC,IAAI;QACtC,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE,oBAAoB;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cli/init/skill.d.ts
DELETED
package/dist/cli/init/skill.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { dirname, join, resolve } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
const SKILL_NAMES = ['habit-hooks-review', 'habit-hooks-prompting'];
|
|
6
|
-
const SKILL_FILE = 'SKILL.md';
|
|
7
|
-
function packageRoot() {
|
|
8
|
-
const here = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
return resolve(here, '..', '..', '..');
|
|
10
|
-
}
|
|
11
|
-
function findSkillSource(name) {
|
|
12
|
-
const root = packageRoot();
|
|
13
|
-
const candidates = [
|
|
14
|
-
join(root, 'src', 'skills', name, SKILL_FILE),
|
|
15
|
-
join(root, '..', 'src', 'skills', name, SKILL_FILE),
|
|
16
|
-
];
|
|
17
|
-
return candidates.find((p) => existsSync(p)) ?? null;
|
|
18
|
-
}
|
|
19
|
-
function targetDir(name) {
|
|
20
|
-
return join(homedir(), '.claude', 'skills', name);
|
|
21
|
-
}
|
|
22
|
-
function targetPath(name) {
|
|
23
|
-
return join(targetDir(name), SKILL_FILE);
|
|
24
|
-
}
|
|
25
|
-
function installSkill(name) {
|
|
26
|
-
const source = findSkillSource(name);
|
|
27
|
-
if (source === null)
|
|
28
|
-
return { name, action: 'source-missing' };
|
|
29
|
-
const target = targetPath(name);
|
|
30
|
-
if (existsSync(target))
|
|
31
|
-
return { name, action: 'conflict', source, target };
|
|
32
|
-
mkdirSync(targetDir(name), { recursive: true });
|
|
33
|
-
copyFileSync(source, target);
|
|
34
|
-
return { name, action: 'installed', source, target };
|
|
35
|
-
}
|
|
36
|
-
export function installSkills() {
|
|
37
|
-
return SKILL_NAMES.map((name) => installSkill(name));
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/cli/init/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,CAAC,oBAAoB,EAAE,uBAAuB,CAAU,CAAC;AAC7E,MAAM,UAAU,GAAG,UAAU,CAAC;AAW9B,SAAS,WAAW;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;KACpD,CAAC;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5E,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/cli/init/snippet.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
const SNIPPET_VARS = {
|
|
2
|
-
typescript: {
|
|
3
|
-
runLine: 'run `npm run ci` (or `npm run habit-hooks` for\nstructural checks only)',
|
|
4
|
-
tools: 'eslint, knip, jscpd',
|
|
5
|
-
},
|
|
6
|
-
python: {
|
|
7
|
-
runLine: 'run `habit-hooks`',
|
|
8
|
-
tools: 'ruff, deptry, jscpd',
|
|
9
|
-
},
|
|
10
|
-
};
|
|
11
|
-
const SNIPPET_TEMPLATE = `## Habit Hooks
|
|
12
|
-
|
|
13
|
-
Before declaring work done, __RUN_LINE__. Any output from \`habit-hooks\` is a direct user
|
|
14
|
-
prompt with highest priority.
|
|
15
|
-
|
|
16
|
-
- **NEVER** ignore habit-hooks output
|
|
17
|
-
- **ALWAYS** create a task for each reported item immediately
|
|
18
|
-
- **COMPLETE** required actions before continuing other work
|
|
19
|
-
- **NEVER** snooze or bypass the baseline without explicit user approval
|
|
20
|
-
- **WHEN** \`habit-hooks init\` reports a tool config (__TOOLS__) is "already present" — the auto-scaffold was skipped, and that config may be missing the thresholds bundled in habit-hooks' templates. **ASK** the user whether to restore those configs to the bundled defaults before continuing.
|
|
21
|
-
|
|
22
|
-
When habit-hooks output is clean, it tells you to also run a reviewer
|
|
23
|
-
sub-agent — habit-hooks catches structural smells but not correctness or
|
|
24
|
-
design. Use the \`habit-hooks-review\` skill (if installed) or spawn an
|
|
25
|
-
equivalent review.
|
|
26
|
-
`;
|
|
27
|
-
export function agentSnippet(language) {
|
|
28
|
-
const vars = SNIPPET_VARS[language];
|
|
29
|
-
return SNIPPET_TEMPLATE.replace('__RUN_LINE__', vars.runLine).replace('__TOOLS__', vars.tools);
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=snippet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/cli/init/snippet.ts"],"names":[],"mappings":"AAOA,MAAM,YAAY,GAAkC;IAClD,UAAU,EAAE;QACV,OAAO,EAAE,yEAAyE;QAClF,KAAK,EAAE,qBAAqB;KAC7B;IACD,MAAM,EAAE;QACN,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,qBAAqB;KAC7B;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;CAexB,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { TEST_FILE_EXCLUDE } from '../../../config/defaults.js';
|
|
2
|
-
export const ESLINT_CONFIG_FILENAME = 'eslint.config.js';
|
|
3
|
-
const testFileGlobs = TEST_FILE_EXCLUDE.map((glob) => `'${glob}'`).join(', ');
|
|
4
|
-
export const ESLINT_CONFIG_TEMPLATE = `import js from '@eslint/js';
|
|
5
|
-
import tseslint from 'typescript-eslint';
|
|
6
|
-
|
|
7
|
-
export default tseslint.config(
|
|
8
|
-
{
|
|
9
|
-
ignores: ['node_modules', 'dist'],
|
|
10
|
-
},
|
|
11
|
-
js.configs.recommended,
|
|
12
|
-
...tseslint.configs.recommended,
|
|
13
|
-
{
|
|
14
|
-
languageOptions: {
|
|
15
|
-
ecmaVersion: 2022,
|
|
16
|
-
sourceType: 'module',
|
|
17
|
-
},
|
|
18
|
-
rules: {
|
|
19
|
-
'max-lines-per-function': ['error', { max: 12, skipBlankLines: false, skipComments: false, IIFEs: true }],
|
|
20
|
-
'max-params': ['error', { max: 3 }],
|
|
21
|
-
'complexity': ['error', { max: 10 }],
|
|
22
|
-
'max-depth': ['error', { max: 4 }],
|
|
23
|
-
'max-lines': ['error', { max: 200, skipBlankLines: false, skipComments: false }],
|
|
24
|
-
'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
|
|
25
|
-
'@typescript-eslint/no-unused-vars': 'off',
|
|
26
|
-
'eqeqeq': ['error', 'always'],
|
|
27
|
-
'no-var': 'error',
|
|
28
|
-
'prefer-const': 'error',
|
|
29
|
-
'no-duplicate-imports': 'error',
|
|
30
|
-
'no-warning-comments': ['warn', { terms: ['todo', 'fixme', 'xxx', 'hack'], location: 'anywhere' }],
|
|
31
|
-
'@typescript-eslint/no-explicit-any': 'warn',
|
|
32
|
-
'@typescript-eslint/no-non-null-assertion': 'warn',
|
|
33
|
-
'@typescript-eslint/no-inferrable-types': 'error',
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
files: [${testFileGlobs}],
|
|
38
|
-
rules: {
|
|
39
|
-
'max-lines-per-function': 'off',
|
|
40
|
-
'max-lines': 'off',
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
);
|
|
44
|
-
`;
|
|
45
|
-
//# sourceMappingURL=eslint-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"eslint-config.js","sourceRoot":"","sources":["../../../../src/cli/init/templates/eslint-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAEzD,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiCxB,aAAa;;;;;;;CAO1B,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { JSCPD_RECOMMENDED } from '../recommendations.js';
|
|
2
|
-
export const JSCPD_CONFIG_FILENAME = '.jscpd.json';
|
|
3
|
-
const IGNORE_BY_LANGUAGE = {
|
|
4
|
-
typescript: ['**/node_modules/**', '**/dist/**', '**/*.test.ts', '**/*.spec.ts'],
|
|
5
|
-
python: ['**/.venv/**', '**/venv/**', '**/__pycache__/**', '**/*_test.py', '**/test_*.py'],
|
|
6
|
-
};
|
|
7
|
-
function recommendedSettings() {
|
|
8
|
-
const settings = {};
|
|
9
|
-
for (const { key, value } of JSCPD_RECOMMENDED)
|
|
10
|
-
settings[key] = value;
|
|
11
|
-
return settings;
|
|
12
|
-
}
|
|
13
|
-
export function jscpdConfigTemplate(language) {
|
|
14
|
-
const config = { ...recommendedSettings(), ignore: IGNORE_BY_LANGUAGE[language] };
|
|
15
|
-
return `${JSON.stringify(config, null, 2)}\n`;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=jscpd-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jscpd-config.js","sourceRoot":"","sources":["../../../../src/cli/init/templates/jscpd-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAEnD,MAAM,kBAAkB,GAA+B;IACrD,UAAU,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,CAAC;IAChF,MAAM,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,CAAC;CAC3F,CAAC;AAEF,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,iBAAiB;QAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,MAAM,GAAG,EAAE,GAAG,mBAAmB,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClF,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"knip-config.js","sourceRoot":"","sources":["../../../../src/cli/init/templates/knip-config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;CAKnC,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { RUFF_RECOMMENDED } from '../recommendations.js';
|
|
2
|
-
export const RUFF_CONFIG_FILENAME = 'ruff.toml';
|
|
3
|
-
function valueOf(key) {
|
|
4
|
-
const found = RUFF_RECOMMENDED.find((k) => k.key === key);
|
|
5
|
-
if (found === undefined)
|
|
6
|
-
throw new Error(`unknown ruff recommended key ${key}`);
|
|
7
|
-
return found.value;
|
|
8
|
-
}
|
|
9
|
-
export const RUFF_CONFIG_TEMPLATE = `[lint.mccabe]
|
|
10
|
-
max-complexity = ${valueOf('max-complexity')}
|
|
11
|
-
|
|
12
|
-
[lint.pylint]
|
|
13
|
-
max-args = ${valueOf('max-args')}
|
|
14
|
-
max-statements = ${valueOf('max-statements')}
|
|
15
|
-
`;
|
|
16
|
-
//# sourceMappingURL=ruff-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruff-config.js","sourceRoot":"","sources":["../../../../src/cli/init/templates/ruff-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEhD,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IAChF,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;mBACjB,OAAO,CAAC,gBAAgB,CAAC;;;aAG/B,OAAO,CAAC,UAAU,CAAC;mBACb,OAAO,CAAC,gBAAgB,CAAC;CAC3C,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { scaffoldEslintConfig } from './scaffold-eslint-config.js';
|
|
2
|
-
import { scaffoldKnipConfig } from './scaffold-knip-config.js';
|
|
3
|
-
import { scaffoldJscpdConfig } from './scaffold-jscpd-config.js';
|
|
4
|
-
import { scaffoldRuffConfig } from './scaffold-ruff-config.js';
|
|
5
|
-
import { detectToolStates, toolsForLanguage } from './detect.js';
|
|
6
|
-
import { installCommandsFor } from './install-commands.js';
|
|
7
|
-
import { dryRunPath, noteScaffold } from './ctx.js';
|
|
8
|
-
const SCAFFOLDERS = {
|
|
9
|
-
eslint: (ctx) => scaffoldEslintConfig(ctx.cwd),
|
|
10
|
-
knip: (ctx) => scaffoldKnipConfig(ctx.cwd),
|
|
11
|
-
jscpd: (ctx) => scaffoldJscpdConfig(ctx.cwd, ctx.language),
|
|
12
|
-
ruff: (ctx) => scaffoldRuffConfig(ctx.cwd),
|
|
13
|
-
};
|
|
14
|
-
const DEFAULT_FILENAMES = {
|
|
15
|
-
eslint: 'eslint.config.js',
|
|
16
|
-
knip: 'knip.json',
|
|
17
|
-
jscpd: '.jscpd.json',
|
|
18
|
-
ruff: 'ruff.toml',
|
|
19
|
-
};
|
|
20
|
-
const UNSCAFFOLDABLE_NOTES = {
|
|
21
|
-
deptry: 'deptry has no config file; ensure pyproject.toml declares your dependencies\n',
|
|
22
|
-
};
|
|
23
|
-
const KNIP_STARTER_NOTE = 'knip.json written with starter entry points. Edit `entry` in knip.json to match your project.\n';
|
|
24
|
-
function noteKnipStarter(ctx, result) {
|
|
25
|
-
if (result.created)
|
|
26
|
-
ctx.lines.out.push(KNIP_STARTER_NOTE);
|
|
27
|
-
}
|
|
28
|
-
function writeScaffold(ctx, tool, scaffolder) {
|
|
29
|
-
const result = scaffolder(ctx);
|
|
30
|
-
noteScaffold(ctx, result, `${tool} config`);
|
|
31
|
-
if (tool === 'knip')
|
|
32
|
-
noteKnipStarter(ctx, result);
|
|
33
|
-
}
|
|
34
|
-
function scaffoldFor(ctx, tool) {
|
|
35
|
-
const scaffolder = SCAFFOLDERS[tool];
|
|
36
|
-
const filename = DEFAULT_FILENAMES[tool];
|
|
37
|
-
if (scaffolder === undefined || filename === undefined)
|
|
38
|
-
return noteUnscaffoldable(ctx, tool);
|
|
39
|
-
if (ctx.dryRun)
|
|
40
|
-
return dryRunPath(ctx, filename, `${tool} config`);
|
|
41
|
-
writeScaffold(ctx, tool, scaffolder);
|
|
42
|
-
}
|
|
43
|
-
function noteUnscaffoldable(ctx, tool) {
|
|
44
|
-
const note = UNSCAFFOLDABLE_NOTES[tool];
|
|
45
|
-
if (note !== undefined)
|
|
46
|
-
ctx.lines.out.push(note);
|
|
47
|
-
}
|
|
48
|
-
function handleTool(ctx, tool, state) {
|
|
49
|
-
if (state.installed && state.configured) {
|
|
50
|
-
ctx.lines.out.push(`${tool} already installed and configured\n`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (state.configured)
|
|
54
|
-
ctx.lines.out.push(`${tool} config already present (binary missing)\n`);
|
|
55
|
-
else
|
|
56
|
-
scaffoldFor(ctx, tool);
|
|
57
|
-
}
|
|
58
|
-
function collectMissingTools(tools, matrix) {
|
|
59
|
-
return tools.filter((t) => !matrix[t].installed);
|
|
60
|
-
}
|
|
61
|
-
function printInstallCommands(ctx, missing) {
|
|
62
|
-
const commands = installCommandsFor(ctx.cwd, missing);
|
|
63
|
-
if (commands.length === 0)
|
|
64
|
-
return;
|
|
65
|
-
ctx.lines.out.push('\nTo install missing tools, run:\n');
|
|
66
|
-
for (const command of commands)
|
|
67
|
-
ctx.lines.out.push(` ${command}\n`);
|
|
68
|
-
}
|
|
69
|
-
export function runToolSteps(ctx) {
|
|
70
|
-
const tools = toolsForLanguage(ctx.language);
|
|
71
|
-
if (tools.length === 0)
|
|
72
|
-
return;
|
|
73
|
-
const matrix = detectToolStates(ctx.cwd);
|
|
74
|
-
for (const tool of tools)
|
|
75
|
-
handleTool(ctx, tool, matrix[tool]);
|
|
76
|
-
printInstallCommands(ctx, collectMissingTools(tools, matrix));
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=tool-steps.js.map
|