@vyuhlabs/dxkit 2.4.8 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/README.md +360 -439
  3. package/dist/analyzers/security/aggregator.d.ts.map +1 -1
  4. package/dist/analyzers/security/aggregator.js +4 -46
  5. package/dist/analyzers/security/aggregator.js.map +1 -1
  6. package/dist/analyzers/tools/fingerprint.d.ts +91 -26
  7. package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
  8. package/dist/analyzers/tools/fingerprint.js +111 -22
  9. package/dist/analyzers/tools/fingerprint.js.map +1 -1
  10. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  11. package/dist/analyzers/tools/generic.js +6 -1
  12. package/dist/analyzers/tools/generic.js.map +1 -1
  13. package/dist/analyzers/tools/gitleaks.d.ts +24 -1
  14. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  15. package/dist/analyzers/tools/gitleaks.js +20 -11
  16. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  17. package/dist/analyzers/tools/graphify.d.ts.map +1 -1
  18. package/dist/analyzers/tools/graphify.js +9 -5
  19. package/dist/analyzers/tools/graphify.js.map +1 -1
  20. package/dist/analyzers/tools/tool-registry.d.ts +19 -1
  21. package/dist/analyzers/tools/tool-registry.d.ts.map +1 -1
  22. package/dist/analyzers/tools/tool-registry.js +25 -0
  23. package/dist/analyzers/tools/tool-registry.js.map +1 -1
  24. package/dist/analyzers/types.d.ts +6 -4
  25. package/dist/analyzers/types.d.ts.map +1 -1
  26. package/dist/baseline/baseline-file.d.ts +104 -0
  27. package/dist/baseline/baseline-file.d.ts.map +1 -0
  28. package/dist/baseline/baseline-file.js +110 -0
  29. package/dist/baseline/baseline-file.js.map +1 -0
  30. package/dist/baseline/check-renderers.d.ts +108 -0
  31. package/dist/baseline/check-renderers.d.ts.map +1 -0
  32. package/dist/baseline/check-renderers.js +379 -0
  33. package/dist/baseline/check-renderers.js.map +1 -0
  34. package/dist/baseline/check.d.ts +127 -0
  35. package/dist/baseline/check.d.ts.map +1 -0
  36. package/dist/baseline/check.js +462 -0
  37. package/dist/baseline/check.js.map +1 -0
  38. package/dist/baseline/content-hash.d.ts +83 -0
  39. package/dist/baseline/content-hash.d.ts.map +1 -0
  40. package/dist/baseline/content-hash.js +131 -0
  41. package/dist/baseline/content-hash.js.map +1 -0
  42. package/dist/baseline/create.d.ts +96 -0
  43. package/dist/baseline/create.d.ts.map +1 -0
  44. package/dist/baseline/create.js +339 -0
  45. package/dist/baseline/create.js.map +1 -0
  46. package/dist/baseline/entry-to-located.d.ts +35 -0
  47. package/dist/baseline/entry-to-located.d.ts.map +1 -0
  48. package/dist/baseline/entry-to-located.js +72 -0
  49. package/dist/baseline/entry-to-located.js.map +1 -0
  50. package/dist/baseline/finding-identity.d.ts +47 -0
  51. package/dist/baseline/finding-identity.d.ts.map +1 -0
  52. package/dist/baseline/finding-identity.js +292 -0
  53. package/dist/baseline/finding-identity.js.map +1 -0
  54. package/dist/baseline/git-aware-match.d.ts +146 -0
  55. package/dist/baseline/git-aware-match.d.ts.map +1 -0
  56. package/dist/baseline/git-aware-match.js +439 -0
  57. package/dist/baseline/git-aware-match.js.map +1 -0
  58. package/dist/baseline/policy.d.ts +171 -0
  59. package/dist/baseline/policy.d.ts.map +1 -0
  60. package/dist/baseline/policy.js +206 -0
  61. package/dist/baseline/policy.js.map +1 -0
  62. package/dist/baseline/producers/health.d.ts +30 -0
  63. package/dist/baseline/producers/health.d.ts.map +1 -0
  64. package/dist/baseline/producers/health.js +42 -0
  65. package/dist/baseline/producers/health.js.map +1 -0
  66. package/dist/baseline/producers/index.d.ts +164 -0
  67. package/dist/baseline/producers/index.d.ts.map +1 -0
  68. package/dist/baseline/producers/index.js +200 -0
  69. package/dist/baseline/producers/index.js.map +1 -0
  70. package/dist/baseline/producers/licenses.d.ts +23 -0
  71. package/dist/baseline/producers/licenses.d.ts.map +1 -0
  72. package/dist/baseline/producers/licenses.js +46 -0
  73. package/dist/baseline/producers/licenses.js.map +1 -0
  74. package/dist/baseline/producers/quality.d.ts +39 -0
  75. package/dist/baseline/producers/quality.d.ts.map +1 -0
  76. package/dist/baseline/producers/quality.js +84 -0
  77. package/dist/baseline/producers/quality.js.map +1 -0
  78. package/dist/baseline/producers/secret-hmac.d.ts +45 -0
  79. package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
  80. package/dist/baseline/producers/secret-hmac.js +70 -0
  81. package/dist/baseline/producers/secret-hmac.js.map +1 -0
  82. package/dist/baseline/producers/security.d.ts +59 -0
  83. package/dist/baseline/producers/security.d.ts.map +1 -0
  84. package/dist/baseline/producers/security.js +135 -0
  85. package/dist/baseline/producers/security.js.map +1 -0
  86. package/dist/baseline/producers/tests.d.ts +36 -0
  87. package/dist/baseline/producers/tests.d.ts.map +1 -0
  88. package/dist/baseline/producers/tests.js +69 -0
  89. package/dist/baseline/producers/tests.js.map +1 -0
  90. package/dist/baseline/salt.d.ts +45 -0
  91. package/dist/baseline/salt.d.ts.map +1 -0
  92. package/dist/baseline/salt.js +113 -0
  93. package/dist/baseline/salt.js.map +1 -0
  94. package/dist/baseline/show.d.ts +79 -0
  95. package/dist/baseline/show.d.ts.map +1 -0
  96. package/dist/baseline/show.js +233 -0
  97. package/dist/baseline/show.js.map +1 -0
  98. package/dist/baseline/types.d.ts +482 -0
  99. package/dist/baseline/types.d.ts.map +1 -0
  100. package/dist/baseline/types.js +53 -0
  101. package/dist/baseline/types.js.map +1 -0
  102. package/dist/cli.d.ts.map +1 -1
  103. package/dist/cli.js +398 -82
  104. package/dist/cli.js.map +1 -1
  105. package/dist/constants.d.ts.map +1 -1
  106. package/dist/constants.js +0 -4
  107. package/dist/constants.js.map +1 -1
  108. package/dist/doctor.d.ts.map +1 -1
  109. package/dist/doctor.js +39 -35
  110. package/dist/doctor.js.map +1 -1
  111. package/dist/fail-on.d.ts +84 -0
  112. package/dist/fail-on.d.ts.map +1 -0
  113. package/dist/fail-on.js +128 -0
  114. package/dist/fail-on.js.map +1 -0
  115. package/dist/generator.d.ts +1 -1
  116. package/dist/generator.d.ts.map +1 -1
  117. package/dist/generator.js +81 -274
  118. package/dist/generator.js.map +1 -1
  119. package/dist/hooks-cli.d.ts +20 -0
  120. package/dist/hooks-cli.d.ts.map +1 -0
  121. package/dist/hooks-cli.js +145 -0
  122. package/dist/hooks-cli.js.map +1 -0
  123. package/dist/languages/csharp.d.ts.map +1 -1
  124. package/dist/languages/csharp.js +4 -9
  125. package/dist/languages/csharp.js.map +1 -1
  126. package/dist/languages/go.d.ts.map +1 -1
  127. package/dist/languages/go.js +3 -14
  128. package/dist/languages/go.js.map +1 -1
  129. package/dist/languages/index.d.ts +19 -1
  130. package/dist/languages/index.d.ts.map +1 -1
  131. package/dist/languages/index.js +32 -0
  132. package/dist/languages/index.js.map +1 -1
  133. package/dist/languages/java.d.ts.map +1 -1
  134. package/dist/languages/java.js +4 -6
  135. package/dist/languages/java.js.map +1 -1
  136. package/dist/languages/kotlin.d.ts.map +1 -1
  137. package/dist/languages/kotlin.js +9 -11
  138. package/dist/languages/kotlin.js.map +1 -1
  139. package/dist/languages/python.d.ts.map +1 -1
  140. package/dist/languages/python.js +4 -15
  141. package/dist/languages/python.js.map +1 -1
  142. package/dist/languages/ruby.d.ts.map +1 -1
  143. package/dist/languages/ruby.js +4 -6
  144. package/dist/languages/ruby.js.map +1 -1
  145. package/dist/languages/rust.d.ts.map +1 -1
  146. package/dist/languages/rust.js +4 -4
  147. package/dist/languages/rust.js.map +1 -1
  148. package/dist/languages/types.d.ts +29 -28
  149. package/dist/languages/types.d.ts.map +1 -1
  150. package/dist/languages/typescript.d.ts.map +1 -1
  151. package/dist/languages/typescript.js +31 -4
  152. package/dist/languages/typescript.js.map +1 -1
  153. package/dist/lib.d.ts +2 -3
  154. package/dist/lib.d.ts.map +1 -1
  155. package/dist/lib.js +3 -6
  156. package/dist/lib.js.map +1 -1
  157. package/dist/prompts.d.ts.map +1 -1
  158. package/dist/prompts.js +0 -10
  159. package/dist/prompts.js.map +1 -1
  160. package/dist/report-schema.d.ts +42 -0
  161. package/dist/report-schema.d.ts.map +1 -0
  162. package/dist/report-schema.js +54 -0
  163. package/dist/report-schema.js.map +1 -0
  164. package/dist/ship-installers.d.ts +112 -0
  165. package/dist/ship-installers.d.ts.map +1 -0
  166. package/dist/ship-installers.js +530 -0
  167. package/dist/ship-installers.js.map +1 -0
  168. package/dist/tools-cli.d.ts.map +1 -1
  169. package/dist/tools-cli.js +45 -9
  170. package/dist/tools-cli.js.map +1 -1
  171. package/dist/types.d.ts +0 -4
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/update.d.ts.map +1 -1
  174. package/dist/update.js +0 -4
  175. package/dist/update.js.map +1 -1
  176. package/package.json +17 -11
  177. package/templates/.claude/skills/dxkit-action/SKILL.md +150 -0
  178. package/templates/.claude/skills/dxkit-config/SKILL.md +124 -0
  179. package/templates/.claude/skills/dxkit-hooks/SKILL.md +109 -0
  180. package/templates/.claude/skills/dxkit-init/SKILL.md +93 -0
  181. package/templates/.claude/skills/dxkit-learn/SKILL.md +84 -0
  182. package/templates/.claude/skills/dxkit-reports/SKILL.md +111 -0
  183. package/templates/.devcontainer/devcontainer.json +55 -0
  184. package/templates/.devcontainer/install-agent-clis.sh +42 -0
  185. package/templates/.devcontainer/post-create.sh +81 -0
  186. package/templates/.githooks/pre-commit +55 -0
  187. package/templates/.githooks/pre-push +63 -0
  188. package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
  189. package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
  190. package/templates/AGENTS.md.template +137 -0
  191. package/templates/CLAUDE.md.template +16 -245
  192. package/dist/codebase-scanner.d.ts +0 -36
  193. package/dist/codebase-scanner.d.ts.map +0 -1
  194. package/dist/codebase-scanner.js +0 -688
  195. package/dist/codebase-scanner.js.map +0 -1
  196. package/dist/project-yaml.d.ts +0 -13
  197. package/dist/project-yaml.d.ts.map +0 -1
  198. package/dist/project-yaml.js +0 -188
  199. package/dist/project-yaml.js.map +0 -1
  200. package/templates/.ai/README.md +0 -117
  201. package/templates/.ai/prompts/execution-prompt.md +0 -9
  202. package/templates/.ai/prompts/planning-prompt.md +0 -18
  203. package/templates/.ai/prompts/session-end-template.md +0 -182
  204. package/templates/.ai/prompts/session-end.md +0 -132
  205. package/templates/.ai/prompts/session-start.md +0 -109
  206. package/templates/.ai/prompts/step-by-step.md +0 -113
  207. package/templates/.ai/sessions/.gitkeep +0 -0
  208. package/templates/.claude/agents/doc-writer.md +0 -107
  209. package/templates/.claude/agents/knowledge-bot.md +0 -64
  210. package/templates/.claude/agents/onboarding.md +0 -61
  211. package/templates/.claude/agents/quality-reviewer.md +0 -85
  212. package/templates/.claude/agents-available/code-reviewer.md +0 -29
  213. package/templates/.claude/agents-available/codebase-explorer.md +0 -100
  214. package/templates/.claude/agents-available/dashboard-builder.md +0 -433
  215. package/templates/.claude/agents-available/debugger.md +0 -29
  216. package/templates/.claude/agents-available/dependency-mapper.md +0 -80
  217. package/templates/.claude/agents-available/dev-report.md +0 -108
  218. package/templates/.claude/agents-available/doc-writer.md +0 -107
  219. package/templates/.claude/agents-available/feature-builder.md +0 -163
  220. package/templates/.claude/agents-available/feature-planner.md +0 -185
  221. package/templates/.claude/agents-available/health-auditor.md +0 -95
  222. package/templates/.claude/agents-available/hooks-configurator.md +0 -211
  223. package/templates/.claude/agents-available/knowledge-bot.md +0 -62
  224. package/templates/.claude/agents-available/plan-executor.md +0 -133
  225. package/templates/.claude/agents-available/strategic-planner.md +0 -141
  226. package/templates/.claude/agents-available/test-gap-finder.md +0 -67
  227. package/templates/.claude/agents-available/test-writer.md +0 -34
  228. package/templates/.claude/agents-available/vulnerability-scanner.md +0 -173
  229. package/templates/.claude/commands/ask.md +0 -7
  230. package/templates/.claude/commands/build-feature.md +0 -26
  231. package/templates/.claude/commands/build.md.template +0 -30
  232. package/templates/.claude/commands/check.md.template +0 -43
  233. package/templates/.claude/commands/dashboard.md +0 -28
  234. package/templates/.claude/commands/deps.md +0 -15
  235. package/templates/.claude/commands/dev-report.md +0 -50
  236. package/templates/.claude/commands/docs.md +0 -21
  237. package/templates/.claude/commands/doctor.md +0 -21
  238. package/templates/.claude/commands/enable-agent.md +0 -12
  239. package/templates/.claude/commands/execute-plan.md +0 -25
  240. package/templates/.claude/commands/explore-codebase.md +0 -12
  241. package/templates/.claude/commands/export-pdf.md +0 -30
  242. package/templates/.claude/commands/feature.md +0 -25
  243. package/templates/.claude/commands/fix-issue.md +0 -12
  244. package/templates/.claude/commands/fix.md.template +0 -32
  245. package/templates/.claude/commands/health.md +0 -58
  246. package/templates/.claude/commands/help.md +0 -36
  247. package/templates/.claude/commands/learn.md +0 -48
  248. package/templates/.claude/commands/onboarding.md +0 -21
  249. package/templates/.claude/commands/plan.md +0 -20
  250. package/templates/.claude/commands/quality.md.template +0 -65
  251. package/templates/.claude/commands/session-end.md +0 -40
  252. package/templates/.claude/commands/session-start.md +0 -30
  253. package/templates/.claude/commands/setup-hooks.md +0 -18
  254. package/templates/.claude/commands/setup-pr-review.md +0 -72
  255. package/templates/.claude/commands/stealth-mode.md +0 -17
  256. package/templates/.claude/commands/test-gaps.md +0 -49
  257. package/templates/.claude/commands/test.md.template +0 -40
  258. package/templates/.claude/commands/vulnerabilities.md +0 -49
  259. package/templates/.claude/skills/build/SKILL.md.template +0 -98
  260. package/templates/.claude/skills/deploy/SKILL.md.template +0 -131
  261. package/templates/.claude/skills/deploy/references/gotchas.md +0 -5
  262. package/templates/.claude/skills/doctor/SKILL.md +0 -54
  263. package/templates/.claude/skills/gcloud/SKILL.md +0 -66
  264. package/templates/.claude/skills/gcloud/references/gotchas.md +0 -5
  265. package/templates/.claude/skills/learned/SKILL.md +0 -55
  266. package/templates/.claude/skills/learned/references/conventions.md +0 -11
  267. package/templates/.claude/skills/learned/references/deny-recommendations.md +0 -18
  268. package/templates/.claude/skills/learned/references/gotchas.md +0 -11
  269. package/templates/.claude/skills/pulumi/SKILL.md +0 -73
  270. package/templates/.claude/skills/quality/SKILL.md.template +0 -108
  271. package/templates/.claude/skills/quality/references/gotchas.md +0 -5
  272. package/templates/.claude/skills/review/SKILL.md.template +0 -73
  273. package/templates/.claude/skills/scaffold/SKILL.md.template +0 -123
  274. package/templates/.claude/skills/secrets/SKILL.md +0 -52
  275. package/templates/.claude/skills/session/SKILL.md +0 -43
  276. package/templates/.claude/skills/test/SKILL.md.template +0 -122
  277. package/templates/.claude/skills/test/references/gotchas.md +0 -5
  278. package/templates/.devcontainer/Dockerfile.dev.template +0 -89
  279. package/templates/.devcontainer/devcontainer.json.template +0 -184
  280. package/templates/.devcontainer/docker-compose.yml.template +0 -105
  281. package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
  282. package/templates/.devcontainer/post-create.sh.template +0 -298
  283. package/templates/.github/workflows/ci.yml.template +0 -399
  284. package/templates/.github/workflows/quality.yml.template +0 -376
  285. package/templates/.pre-commit-config.yaml.template +0 -106
  286. package/templates/.project/config/edit_config.py +0 -275
  287. package/templates/.project/config/project_config.py +0 -894
  288. package/templates/.project/scripts/codegen/generate-all.sh +0 -20
  289. package/templates/.project/scripts/codegen/validate-all.sh +0 -17
  290. package/templates/.project/scripts/docs/generate-all.sh +0 -30
  291. package/templates/.project/scripts/docs/serve.sh +0 -20
  292. package/templates/.project/scripts/quality/fix-all.sh +0 -138
  293. package/templates/.project/scripts/quality/lint-go.sh +0 -34
  294. package/templates/.project/scripts/quality/lint-python.sh +0 -54
  295. package/templates/.project/scripts/quality/run-all.sh +0 -497
  296. package/templates/.project/scripts/session/commit.sh +0 -70
  297. package/templates/.project/scripts/session/create-pr.sh +0 -165
  298. package/templates/.project/scripts/session/end.sh +0 -207
  299. package/templates/.project/scripts/session/start.sh +0 -233
  300. package/templates/.project/scripts/setup/doctor.sh +0 -404
  301. package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
  302. package/templates/.project/scripts/sync/sync-template.sh +0 -328
  303. package/templates/.project/scripts/test/run-all.sh +0 -179
  304. package/templates/.project/scripts/test/run-quick.sh +0 -25
  305. package/templates/Makefile +0 -514
  306. package/templates/config/versions.yaml +0 -57
  307. package/templates/configs/go/.golangci.yml.template +0 -172
  308. package/templates/configs/go/go.mod.template +0 -15
  309. package/templates/configs/java/README.md +0 -6
  310. package/templates/configs/kotlin/README.md +0 -6
  311. package/templates/configs/node/package.json.template +0 -67
  312. package/templates/configs/node/tsconfig.json.template +0 -53
  313. package/templates/configs/python/pyproject.toml.template +0 -92
  314. package/templates/configs/python/pytest.ini.template +0 -64
  315. package/templates/configs/python/ruff.toml.template +0 -79
  316. package/templates/configs/ruby/README.md +0 -6
  317. package/templates/configs/rust/Cargo.toml.template +0 -51
  318. package/templates/configs/shared/.editorconfig +0 -67
  319. package/templates/scripts/validate-templates.sh +0 -449
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Pure threshold checks for the `--fail-on-*` flags.
4
+ *
5
+ * Two flag families:
6
+ *
7
+ * - **`--fail-on-score N`** — fail when the analyzer's headline
8
+ * score drops below `N`. Applies to commands with a higher-is-
9
+ * better aggregate score (health.overallScore,
10
+ * test-gaps.effectiveCoverage).
11
+ *
12
+ * - **`--fail-on-severity <tier>`** — fail when any finding at the
13
+ * named tier or higher exists. Applies to commands that report
14
+ * severity-graded findings (vulnerabilities, bom).
15
+ *
16
+ * These flags are independent of `guardrail check` — they enforce
17
+ * absolute floors that don't require a prior baseline. A team can
18
+ * compose them in CI to layer aggregate-floor gates alongside
19
+ * per-finding regression gates.
20
+ *
21
+ * Pure module: each helper returns a structured verdict. The CLI
22
+ * layer maps the verdict to `process.exit(1)` + a logged reason.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.SEVERITY_RANK = void 0;
26
+ exports.checkFailOnScore = checkFailOnScore;
27
+ exports.checkFailOnSeverity = checkFailOnSeverity;
28
+ exports.parseSeverityTier = parseSeverityTier;
29
+ exports.parseScoreThreshold = parseScoreThreshold;
30
+ /**
31
+ * Ordinal ranking. Higher rank = more severe. Used to decide whether
32
+ * a finding at severity X passes a `--fail-on-severity Y` gate (X
33
+ * fails iff rank(X) >= rank(Y)).
34
+ */
35
+ exports.SEVERITY_RANK = Object.freeze({
36
+ critical: 3,
37
+ high: 2,
38
+ medium: 1,
39
+ low: 0,
40
+ });
41
+ /**
42
+ * Check a higher-is-better score against a minimum threshold.
43
+ *
44
+ * Returns `{ fails: true, reason }` when `score < threshold`.
45
+ * Returns `{ fails: false }` otherwise.
46
+ *
47
+ * `threshold` is parsed from the CLI; the caller validates that it's
48
+ * a finite number in `[0, 100]` (or whatever the score domain is)
49
+ * before invoking. Non-finite or NaN inputs throw — the caller
50
+ * should reject those at parse time.
51
+ */
52
+ function checkFailOnScore(score, threshold) {
53
+ if (!Number.isFinite(score)) {
54
+ throw new Error(`fail-on-score: report score is not a finite number (got ${score})`);
55
+ }
56
+ if (!Number.isFinite(threshold)) {
57
+ throw new Error(`fail-on-score: threshold is not a finite number (got ${threshold})`);
58
+ }
59
+ if (score < threshold) {
60
+ return {
61
+ fails: true,
62
+ reason: `score ${score} is below --fail-on-score threshold ${threshold}`,
63
+ };
64
+ }
65
+ return { fails: false };
66
+ }
67
+ /**
68
+ * Check whether any finding at `tier` or higher exists in `counts`.
69
+ *
70
+ * Returns `{ fails: true, reason }` when at least one such finding
71
+ * is present. `reason` lists each contributing tier so the user
72
+ * sees *what* triggered the gate without re-reading the report.
73
+ *
74
+ * `tier` must be one of the four canonical severities; any other
75
+ * value throws. The caller should reject malformed input at parse
76
+ * time so the helper can stay pure.
77
+ */
78
+ function checkFailOnSeverity(counts, tier) {
79
+ if (!(tier in exports.SEVERITY_RANK)) {
80
+ throw new Error(`fail-on-severity: unknown tier "${tier}" (expected one of: critical, high, medium, low)`);
81
+ }
82
+ const threshold = exports.SEVERITY_RANK[tier];
83
+ const offending = [];
84
+ const severities = ['critical', 'high', 'medium', 'low'];
85
+ for (const severity of severities) {
86
+ if (exports.SEVERITY_RANK[severity] < threshold)
87
+ continue;
88
+ const count = counts[severity];
89
+ if (count > 0)
90
+ offending.push({ severity, count });
91
+ }
92
+ if (offending.length === 0)
93
+ return { fails: false };
94
+ const detail = offending.map((o) => `${o.count} ${o.severity}`).join(', ');
95
+ return {
96
+ fails: true,
97
+ reason: `findings at or above --fail-on-severity ${tier}: ${detail}`,
98
+ };
99
+ }
100
+ /**
101
+ * Parse the `--fail-on-severity` CLI value into a typed tier.
102
+ * Returns `null` for an unrecognized value so the caller can render
103
+ * a helpful error including the user-supplied string. Doing the
104
+ * validation here keeps the CLI parsing site concern-free.
105
+ */
106
+ function parseSeverityTier(raw) {
107
+ if (raw === 'critical' || raw === 'high' || raw === 'medium' || raw === 'low') {
108
+ return raw;
109
+ }
110
+ return null;
111
+ }
112
+ /**
113
+ * Parse the `--fail-on-score` CLI value into a finite number.
114
+ * Returns `null` when the value is missing, non-numeric, NaN, or
115
+ * outside the score domain `[0, 100]`. The CLI converts `null` to a
116
+ * helpful error pointing the user at valid inputs.
117
+ */
118
+ function parseScoreThreshold(raw) {
119
+ if (raw === undefined || raw === '')
120
+ return null;
121
+ const n = Number(raw);
122
+ if (!Number.isFinite(n))
123
+ return null;
124
+ if (n < 0 || n > 100)
125
+ return null;
126
+ return n;
127
+ }
128
+ //# sourceMappingURL=fail-on.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fail-on.js","sourceRoot":"","sources":["../src/fail-on.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA6CH,4CAcC;AAaD,kDAoBC;AAQD,8CAKC;AAQD,kDAMC;AAnHD;;;;GAIG;AACU,QAAA,aAAa,GAA8C,MAAM,CAAC,MAAM,CAAC;IACpF,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC,CAAC;AAoBH;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB,CAAC,KAAa,EAAE,SAAiB;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2DAA2D,KAAK,GAAG,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,wDAAwD,SAAS,GAAG,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,SAAS,KAAK,uCAAuC,SAAS,EAAE;SACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,mBAAmB,CAAC,MAAsB,EAAE,IAAqB;IAC/E,IAAI,CAAC,CAAC,IAAI,IAAI,qBAAa,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,kDAAkD,CAC1F,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,qBAAa,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,SAAS,GAA0E,EAAE,CAAC;IAC5F,MAAM,UAAU,GAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5E,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,qBAAa,CAAC,QAAQ,CAAC,GAAG,SAAS;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,OAAO;QACL,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,2CAA2C,IAAI,KAAK,MAAM,EAAE;KACrE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAC9E,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,GAAuB;IACzD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -5,6 +5,6 @@ interface GenerateResult {
5
5
  overwritten: string[];
6
6
  manifest: Manifest;
7
7
  }
8
- export declare function generate(targetDir: string, config: ResolvedConfig, mode: GenerationMode, force: boolean, noScan?: boolean): Promise<GenerateResult>;
8
+ export declare function generate(targetDir: string, config: ResolvedConfig, mode: GenerationMode, force: boolean, _noScan?: boolean, withDxkitAgents?: boolean): Promise<GenerateResult>;
9
9
  export {};
10
10
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA8FnE,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,OAAO,EACd,MAAM,UAAQ,GACb,OAAO,CAAC,cAAc,CAAC,CA+SzB"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA8EnE,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,UAAQ,EACf,eAAe,UAAQ,GACtB,OAAO,CAAC,cAAc,CAAC,CAmHzB"}
package/dist/generator.js CHANGED
@@ -39,7 +39,6 @@ const path = __importStar(require("path"));
39
39
  const constants_1 = require("./constants");
40
40
  const template_engine_1 = require("./template-engine");
41
41
  const files_1 = require("./files");
42
- const codebase_scanner_1 = require("./codebase-scanner");
43
42
  const languages_1 = require("./languages");
44
43
  const logger = __importStar(require("./logger"));
45
44
  function getTemplatesDir() {
@@ -52,68 +51,58 @@ function readTemplate(templatePath) {
52
51
  }
53
52
  return fs.readFileSync(fullPath, 'utf-8');
54
53
  }
55
- function buildSettingsJson(config, conditions) {
54
+ /**
55
+ * Narrowed permission list for the dxkit-specific agent surface.
56
+ * Carries only the binaries the six dxkit-* skills actually run:
57
+ * git status/diff/log/branch (read-only inspection), the dxkit binary
58
+ * itself (every analyzer / hook / baseline command), and the active
59
+ * language packs' contributed commands (so the dxkit-action skill
60
+ * can run `npm test` / `pytest` / etc. to verify a fix without
61
+ * prompting on every step).
62
+ *
63
+ * Pre-2.5.1 the file carried Stop-hook noise about a `/learn` slash
64
+ * command that no longer ships, plus conditional gcloud / pulumi /
65
+ * docker entries tied to generic skills that also no longer ship.
66
+ * Dropped here.
67
+ */
68
+ function buildSettingsJson(config) {
56
69
  const perms = [
57
- 'Bash(make test:*)',
58
- 'Bash(make test-unit:*)',
59
- 'Bash(make test-coverage:*)',
60
- 'Bash(make quality:*)',
61
- 'Bash(make quality-fix:*)',
62
- 'Bash(make lint:*)',
63
- 'Bash(make format:*)',
64
- 'Bash(make check:*)',
65
- 'Bash(make fix:*)',
66
- 'Bash(make doctor:*)',
67
- 'Bash(make info:*)',
68
- 'Bash(make validate:*)',
69
- 'Bash(make generate:*)',
70
- 'Bash(make build:*)',
71
- 'Bash(make clean:*)',
72
- 'Bash(make docs:*)',
73
- 'Bash(make sync:*)',
74
- 'Bash(make sync-preview:*)',
75
- 'Bash(make lang-list:*)',
76
70
  'Bash(git status:*)',
77
71
  'Bash(git diff:*)',
78
72
  'Bash(git log:*)',
79
73
  'Bash(git branch:*)',
74
+ 'Bash(npx vyuh-dxkit:*)',
75
+ 'Bash(./node_modules/.bin/vyuh-dxkit:*)',
76
+ 'Bash(vyuh-dxkit:*)',
80
77
  ];
81
- // Per-language permissions — declared on each pack via
82
- // `LanguageSupport.permissions`, iterated here.
83
78
  for (const lang of (0, languages_1.activeLanguagesFromStack)(config)) {
84
79
  if (lang.permissions)
85
80
  perms.push(...lang.permissions);
86
81
  }
87
- if (conditions.IF_INFISICAL)
88
- perms.push('Bash(make secrets-pull:*)', 'Bash(make secrets-show:*)');
89
- if (conditions.IF_DOCKER)
90
- perms.push('Bash(docker ps:*)', 'Bash(docker-compose ps:*)', 'Bash(docker-compose logs:*)');
91
- if (conditions.IF_GCLOUD)
92
- perms.push('Bash(gcloud config:*)', 'Bash(gcloud projects list:*)', 'Bash(gcloud services list:*)', 'Bash(gcloud run services list:*)');
93
- if (conditions.IF_PULUMI)
94
- perms.push('Bash(pulumi preview:*)', 'Bash(pulumi stack:*)', 'Bash(pulumi config:*)');
95
82
  return (JSON.stringify({
96
83
  $schema: 'https://json.schemastore.org/claude-code-settings.json',
97
84
  permissions: {
98
85
  allow: perms,
99
86
  deny: [],
100
87
  },
101
- hooks: {
102
- Stop: [
103
- {
104
- matcher: '',
105
- hooks: [
106
- {
107
- type: 'command',
108
- command: 'echo "If this conversation involved debugging, fixing issues, or discovering patterns — consider running /learn to capture it for future sessions."',
109
- },
110
- ],
111
- },
112
- ],
113
- },
114
88
  }, null, 2) + '\n');
115
89
  }
116
- async function generate(targetDir, config, mode, force, noScan = false) {
90
+ /**
91
+ * The six dxkit-specific skills shipped under `--with-dxkit-agents`.
92
+ * Each lives at `.claude/skills/<name>/SKILL.md` in the template dir;
93
+ * generator copies them verbatim (no template substitution — the
94
+ * skill content references the canonical `vyuh-dxkit` CLI surface
95
+ * and doesn't need per-project variables).
96
+ */
97
+ const DXKIT_SKILLS = [
98
+ 'dxkit-learn',
99
+ 'dxkit-init',
100
+ 'dxkit-config',
101
+ 'dxkit-hooks',
102
+ 'dxkit-reports',
103
+ 'dxkit-action',
104
+ ];
105
+ async function generate(targetDir, config, mode, force, _noScan = false, withDxkitAgents = false) {
117
106
  const variables = (0, constants_1.buildVariables)(config);
118
107
  const conditions = (0, constants_1.buildConditions)(config);
119
108
  const templatesDir = getTemplatesDir();
@@ -143,7 +132,6 @@ async function generate(targetDir, config, mode, force, noScan = false) {
143
132
  evolving,
144
133
  };
145
134
  }
146
- // Helper: process and write a template file
147
135
  async function writeTemplate(templatePath, outputRel, evolving = false) {
148
136
  const raw = readTemplate(templatePath);
149
137
  const processed = (0, template_engine_1.processTemplate)(raw, variables, conditions);
@@ -151,7 +139,6 @@ async function generate(targetDir, config, mode, force, noScan = false) {
151
139
  const res = await (0, files_1.writeFile)(outputPath, processed, opts(evolving));
152
140
  track(outputPath, processed, res, evolving);
153
141
  }
154
- // Helper: copy a static file
155
142
  function copyStatic(templatePath, outputRel, evolving = false) {
156
143
  const srcPath = path.join(templatesDir, templatePath);
157
144
  if (!fs.existsSync(srcPath))
@@ -161,240 +148,60 @@ async function generate(targetDir, config, mode, force, noScan = false) {
161
148
  const content = evolving ? null : fs.readFileSync(srcPath, 'utf-8');
162
149
  track(outputPath, content, res, evolving);
163
150
  }
164
- // === DX-ONLY TIER ===
165
- logger.header('Generating Claude Code DX');
166
- // 1. CLAUDE.md
167
- await writeTemplate('CLAUDE.md.template', 'CLAUDE.md');
168
- logger.success('CLAUDE.md');
169
- // 2. settings.json
170
- const settingsContent = buildSettingsJson(config, conditions);
171
- const settingsPath = path.join(targetDir, '.claude', 'settings.json');
172
- const settingsRes = await (0, files_1.writeFile)(settingsPath, settingsContent, opts(false));
173
- track(settingsPath, settingsContent, settingsRes, false);
174
- logger.success('.claude/settings.json');
175
- // 3. Skills — template-processed
176
- for (const skill of ['quality', 'test', 'build', 'review', 'scaffold']) {
177
- await writeTemplate(`.claude/skills/${skill}/SKILL.md.template`, `.claude/skills/${skill}/SKILL.md`);
178
- }
179
- // Skills static (always)
180
- for (const skill of ['doctor', 'session', 'learned']) {
181
- copyStatic(`.claude/skills/${skill}/SKILL.md`, `.claude/skills/${skill}/SKILL.md`);
182
- }
183
- // Deploy skill (template + references)
184
- await writeTemplate('.claude/skills/deploy/SKILL.md.template', '.claude/skills/deploy/SKILL.md');
185
- copyStatic('.claude/skills/deploy/references/gotchas.md', '.claude/skills/deploy/references/gotchas.md', true);
186
- // Evolving reference files
187
- for (const skill of ['quality', 'test', 'learned']) {
188
- const refDir = `.claude/skills/${skill}/references`;
189
- const srcRefDir = path.join(templatesDir, refDir);
190
- if (fs.existsSync(srcRefDir)) {
191
- for (const file of fs.readdirSync(srcRefDir)) {
192
- copyStatic(`${refDir}/${file}`, `${refDir}/${file}`, true);
193
- }
194
- }
195
- }
196
- // Conditional skills
197
- if (conditions.IF_INFISICAL) {
198
- copyStatic('.claude/skills/secrets/SKILL.md', '.claude/skills/secrets/SKILL.md');
199
- }
200
- if (conditions.IF_GCLOUD) {
201
- copyStatic('.claude/skills/gcloud/SKILL.md', '.claude/skills/gcloud/SKILL.md');
202
- copyStatic('.claude/skills/gcloud/references/gotchas.md', '.claude/skills/gcloud/references/gotchas.md', true);
203
- }
204
- if (conditions.IF_PULUMI) {
205
- copyStatic('.claude/skills/pulumi/SKILL.md', '.claude/skills/pulumi/SKILL.md');
206
- }
207
- logger.success('.claude/skills/');
208
- // 4. Rules (conditional on language)
209
- // Per-language rule files declared via `LanguageSupport.ruleFile`.
210
- for (const lang of (0, languages_1.activeLanguagesFromStack)(config)) {
211
- if (lang.ruleFile) {
212
- copyStatic(`.claude/rules/${lang.ruleFile}`, `.claude/rules/${lang.ruleFile}`);
213
- }
214
- }
215
- // Framework-specific rules — NOT pack-owned. Frameworks
216
- // (nextjs/loopback/express) live under the top-level `framework`
217
- // signal, not in `languages`. Stay hardcoded here until a
218
- // framework-pack abstraction exists.
219
- if (conditions.IF_NEXTJS)
220
- copyStatic('.claude/rules/nextjs.md', '.claude/rules/nextjs.md');
221
- if (config.framework === 'loopback')
222
- copyStatic('.claude/rules/loopback.md', '.claude/rules/loopback.md');
223
- if (config.framework === 'express')
224
- copyStatic('.claude/rules/express.md', '.claude/rules/express.md');
225
- logger.success('.claude/rules/');
226
- // 5. Commands (static .md copied as-is, .md.template processed through engine)
227
- const commandsDir = path.join(templatesDir, '.claude', 'commands');
228
- if (fs.existsSync(commandsDir)) {
229
- for (const file of fs.readdirSync(commandsDir)) {
230
- if (file.endsWith('.md.template')) {
231
- const outputName = file.replace('.template', '');
232
- await writeTemplate(`.claude/commands/${file}`, `.claude/commands/${outputName}`);
233
- }
234
- else {
235
- copyStatic(`.claude/commands/${file}`, `.claude/commands/${file}`);
236
- }
237
- }
238
- }
239
- logger.success('.claude/commands/');
240
- // Ensure .ai/sessions/ exists for session commands (works in dx-only mode)
241
- fs.mkdirSync(path.join(targetDir, '.ai', 'sessions'), { recursive: true });
242
- // 6. Agents-available (dormant) and agents (active by default)
243
- const agentsAvailDir = path.join(templatesDir, '.claude', 'agents-available');
244
- if (fs.existsSync(agentsAvailDir)) {
245
- fs.mkdirSync(path.join(targetDir, '.claude', 'agents'), { recursive: true });
246
- for (const file of fs.readdirSync(agentsAvailDir)) {
247
- copyStatic(`.claude/agents-available/${file}`, `.claude/agents-available/${file}`);
248
- }
249
- }
250
- const activeAgentsDir = path.join(templatesDir, '.claude', 'agents');
251
- if (fs.existsSync(activeAgentsDir)) {
252
- fs.mkdirSync(path.join(targetDir, '.claude', 'agents'), { recursive: true });
253
- for (const file of fs.readdirSync(activeAgentsDir)) {
254
- copyStatic(`.claude/agents/${file}`, `.claude/agents/${file}`);
151
+ if (withDxkitAgents) {
152
+ logger.header('Generating dxkit agent context');
153
+ // Open-standard project prose — read by every coding agent
154
+ // (Claude / Codex / Cursor / Aider). Pre-2.5.1 this content lived
155
+ // in CLAUDE.md; AGENTS.md is the cross-platform replacement.
156
+ await writeTemplate('AGENTS.md.template', 'AGENTS.md');
157
+ logger.success('AGENTS.md');
158
+ // CLAUDE.md becomes a small shim that points at AGENTS.md. Claude
159
+ // Code reads both at session start; the shim carries Claude-
160
+ // specific config (skill list, rules pointer) and defers shared
161
+ // context to AGENTS.md.
162
+ await writeTemplate('CLAUDE.md.template', 'CLAUDE.md');
163
+ logger.success('CLAUDE.md');
164
+ // Narrowed settings.json — drops the Stop-hook noise + conditional
165
+ // gcloud/pulumi/docker entries that referenced generic skills that
166
+ // no longer ship.
167
+ const settingsContent = buildSettingsJson(config);
168
+ const settingsPath = path.join(targetDir, '.claude', 'settings.json');
169
+ const settingsRes = await (0, files_1.writeFile)(settingsPath, settingsContent, opts(false));
170
+ track(settingsPath, settingsContent, settingsRes, false);
171
+ logger.success('.claude/settings.json');
172
+ // The six dxkit-specific skills. Each ships as a single SKILL.md
173
+ // under `.claude/skills/dxkit-<name>/`. Auto-discovered by Claude
174
+ // Code via skill frontmatter (`name` + `description`).
175
+ for (const skill of DXKIT_SKILLS) {
176
+ copyStatic(`.claude/skills/${skill}/SKILL.md`, `.claude/skills/${skill}/SKILL.md`);
255
177
  }
256
- }
257
- logger.success('.claude/agents/');
258
- // 6b. PR review workflow (dx-only mode always copy if GitHub Actions dir doesn't conflict)
259
- const prReviewSrc = path.join(templatesDir, '.github', 'workflows', 'pr-review.yml');
260
- if (fs.existsSync(prReviewSrc)) {
261
- copyStatic('.github/workflows/pr-review.yml', '.github/workflows/pr-review.yml');
262
- logger.success('.github/workflows/pr-review.yml');
263
- }
264
- // 7. Codebase scan
265
- if (!noScan) {
266
- logger.info('Scanning codebase...');
267
- const analysis = (0, codebase_scanner_1.scanCodebase)(targetDir);
268
- const skillContent = (0, codebase_scanner_1.renderCodebaseSkill)(analysis);
269
- const skillPath = path.join(targetDir, '.claude', 'skills', 'codebase', 'SKILL.md');
270
- const skillRes = await (0, files_1.writeFile)(skillPath, skillContent, opts(true));
271
- track(skillPath, null, skillRes, true);
272
- const refContent = (0, codebase_scanner_1.renderArchitectureRef)(analysis);
273
- const refPath = path.join(targetDir, '.claude', 'skills', 'codebase', 'references', 'architecture.md');
274
- const refRes = await (0, files_1.writeFile)(refPath, refContent, opts(true));
275
- track(refPath, null, refRes, true);
276
- logger.success(`.claude/skills/codebase/ (${analysis.fileCount} files, ${analysis.entryPoints.length} entry points, ${analysis.apiEndpoints.length} API routes)`);
277
- if (analysis.testFileCount < 5 && analysis.sourceFileCount > 20) {
278
- logger.warn(`Minimal tests: ${analysis.testFileCount} test files for ${analysis.sourceFileCount} source files`);
279
- }
280
- }
281
- // === FULL TIER ===
282
- if (mode === 'full') {
283
- logger.header('Generating Quality & Infrastructure');
284
- // .project/ scripts
285
- const projectSrcDir = path.join(templatesDir, '.project');
286
- if (fs.existsSync(projectSrcDir)) {
287
- const count = (0, files_1.copyDirectory)(projectSrcDir, path.join(targetDir, '.project'), { force });
288
- // Make scripts executable
289
- const scriptsDir = path.join(targetDir, '.project', 'scripts');
290
- if (fs.existsSync(scriptsDir)) {
291
- for (const file of findFiles(scriptsDir, '.sh')) {
292
- (0, files_1.makeExecutable)(file);
293
- }
294
- for (const file of findFiles(scriptsDir, '.py')) {
295
- (0, files_1.makeExecutable)(file);
296
- }
297
- }
298
- logger.success(`.project/ (${count} files)`);
299
- }
300
- // Makefile
301
- copyStatic('Makefile', 'Makefile');
302
- logger.success('Makefile');
303
- // .ai/ directory
304
- const aiSrcDir = path.join(templatesDir, '.ai');
305
- if (fs.existsSync(aiSrcDir)) {
306
- (0, files_1.copyDirectory)(aiSrcDir, path.join(targetDir, '.ai'), { force });
307
- fs.mkdirSync(path.join(targetDir, '.ai', 'sessions'), { recursive: true });
308
- logger.success('.ai/');
309
- }
310
- // Language configs (only if not already present) — declared on
311
- // each pack via `LanguageSupport.templateFiles`.
178
+ logger.success('.claude/skills/dxkit-*');
179
+ // Per-language rules from each active pack — still useful as
180
+ // contextual hints to any agent (coding conventions, lint rule
181
+ // exceptions, etc.).
312
182
  for (const lang of (0, languages_1.activeLanguagesFromStack)(config)) {
313
- for (const tpl of lang.templateFiles ?? []) {
314
- await writeTemplateIfMissing(tpl.template, tpl.output);
183
+ if (lang.ruleFile) {
184
+ copyStatic(`.claude/rules/${lang.ruleFile}`, `.claude/rules/${lang.ruleFile}`);
315
185
  }
316
186
  }
317
- logger.success('Language configs (skipped existing)');
318
- // Pre-commit config
319
- const precommitTemplate = path.join(templatesDir, '.pre-commit-config.yaml.template');
320
- if (fs.existsSync(precommitTemplate) && conditions.IF_PRECOMMIT) {
321
- await writeTemplate('.pre-commit-config.yaml.template', '.pre-commit-config.yaml');
322
- logger.success('.pre-commit-config.yaml');
323
- }
324
- // GitHub workflows
325
- const ciTemplate = path.join(templatesDir, '.github', 'workflows', 'ci.yml.template');
326
- if (fs.existsSync(ciTemplate)) {
327
- await writeTemplate('.github/workflows/ci.yml.template', '.github/workflows/ci.yml');
328
- await writeTemplate('.github/workflows/quality.yml.template', '.github/workflows/quality.yml');
329
- logger.success('.github/workflows/');
330
- }
331
- // .editorconfig
332
- copyStatic('configs/shared/.editorconfig', '.editorconfig');
333
- logger.success('.editorconfig');
334
- // .project.yaml
335
- const projectYaml = generateProjectYaml(config);
336
- const yamlPath = path.join(targetDir, '.project.yaml');
337
- const yamlRes = await (0, files_1.writeFile)(yamlPath, projectYaml, opts(false));
338
- track(yamlPath, projectYaml, yamlRes, false);
339
- logger.success('.project.yaml');
340
- }
341
- // Write manifest
187
+ // Framework-specific rules — NOT pack-owned. Frameworks
188
+ // (nextjs/loopback/express) live under the top-level `framework`
189
+ // signal, not in `languages`. Stay hardcoded here until a
190
+ // framework-pack abstraction exists.
191
+ if (conditions.IF_NEXTJS)
192
+ copyStatic('.claude/rules/nextjs.md', '.claude/rules/nextjs.md');
193
+ if (config.framework === 'loopback')
194
+ copyStatic('.claude/rules/loopback.md', '.claude/rules/loopback.md');
195
+ if (config.framework === 'express')
196
+ copyStatic('.claude/rules/express.md', '.claude/rules/express.md');
197
+ logger.success('.claude/rules/');
198
+ }
199
+ // Always write the manifest — `vyuh-dxkit update` / `doctor` / etc.
200
+ // read it to know what was configured even when no agent scaffold
201
+ // is present.
342
202
  const manifestContent = JSON.stringify(result.manifest, null, 2) + '\n';
343
203
  fs.mkdirSync(targetDir, { recursive: true });
344
204
  fs.writeFileSync(path.join(targetDir, '.vyuh-dxkit.json'), manifestContent, 'utf-8');
345
205
  return result;
346
- // --- helper for full mode: only write config if file doesn't exist ---
347
- async function writeTemplateIfMissing(templatePath, outputRel) {
348
- const outputPath = path.join(targetDir, outputRel);
349
- if (fs.existsSync(outputPath)) {
350
- result.skipped.push(outputRel);
351
- return;
352
- }
353
- try {
354
- await writeTemplate(templatePath, outputRel);
355
- }
356
- catch {
357
- // Template may not exist — skip silently
358
- }
359
- }
360
- }
361
- function generateProjectYaml(config) {
362
- const lines = [
363
- `project:`,
364
- ` name: "${config.projectName}"`,
365
- ` description: "${config.projectDescription}"`,
366
- ``,
367
- `languages:`,
368
- ];
369
- // Each pack renders its own `languages:` section via
370
- // `projectYamlBlock`. Iterates over ALL packs (not just active) so
371
- // the YAML emits `enabled: false` for inactive packs — matches the
372
- // pre-pack hardcoded shape so no .project.yaml diffs land just from
373
- // this refactor.
374
- const active = (0, languages_1.activeLanguagesFromStack)(config);
375
- for (const lang of languages_1.LANGUAGES) {
376
- if (!lang.projectYamlBlock)
377
- continue;
378
- lines.push(lang.projectYamlBlock({ config, enabled: active.includes(lang) }));
379
- }
380
- // nextjs is a framework signal (10f.4: moved out of `languages` to
381
- // the top-level `framework` field). The YAML block is preserved for
382
- // backwards compat — readers still see `nextjs.enabled`.
383
- lines.push(` nextjs:`);
384
- lines.push(` enabled: ${config.framework === 'nextjs'}`);
385
- lines.push(``);
386
- lines.push(`infrastructure:`, ` postgres:`, ` enabled: ${config.infrastructure.postgres}`, ` redis:`, ` enabled: ${config.infrastructure.redis}`, ``, `precommit: ${config.precommit}`, ``, `tools:`, ` claude_code: true`, ` github_cli: ${config.tools.ghCli}`, ` docker: ${config.infrastructure.docker}`, ` gcloud: ${config.tools.gcloud}`, ` pulumi: ${config.tools.pulumi}`, ` infisical: ${config.tools.infisical}`);
387
- return lines.join('\n') + '\n';
388
- }
389
- function findFiles(dir, ext) {
390
- const results = [];
391
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
392
- const full = path.join(dir, entry.name);
393
- if (entry.isDirectory())
394
- results.push(...findFiles(full, ext));
395
- else if (entry.name.endsWith(ext))
396
- results.push(full);
397
- }
398
- return results;
399
206
  }
400
207
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ActivateHooksResult {
2
+ /** True when `core.hooksPath` was set during this call. */
3
+ activated: boolean;
4
+ /** Why the call short-circuited; populated when `activated` is false. */
5
+ reason?: 'not-a-git-repo' | 'git-missing' | 'already-set-elsewhere' | 'already-set-correctly' | 'git-error';
6
+ /** Value `core.hooksPath` held before any write attempt. */
7
+ previousValue?: string;
8
+ }
9
+ /**
10
+ * Pure-ish core: takes a cwd, returns a structured outcome. Side
11
+ * effects are limited to invoking `git config` against the supplied
12
+ * cwd. The CLI wrapper renders log output from the result.
13
+ */
14
+ export declare function activateHooks(cwd: string): ActivateHooksResult;
15
+ /**
16
+ * CLI wrapper. Renders a short status line and ALWAYS exits 0 so a
17
+ * postinstall hook never aborts `npm install`.
18
+ */
19
+ export declare function runHooksActivate(cwd: string): void;
20
+ //# sourceMappingURL=hooks-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-cli.d.ts","sourceRoot":"","sources":["../src/hooks-cli.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,MAAM,CAAC,EACH,gBAAgB,GAChB,aAAa,GACb,uBAAuB,GACvB,uBAAuB,GACvB,WAAW,CAAC;IAChB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAwD9D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA6BlD"}