@vyuhlabs/dxkit 2.4.7 → 2.5.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.
Files changed (309) hide show
  1. package/CHANGELOG.md +456 -30
  2. package/README.md +360 -439
  3. package/dist/analyzers/bom/gather.d.ts +3 -3
  4. package/dist/analyzers/bom/gather.js +3 -3
  5. package/dist/analyzers/bom/index.js +2 -2
  6. package/dist/analyzers/bom/index.js.map +1 -1
  7. package/dist/analyzers/dashboard/index.d.ts.map +1 -1
  8. package/dist/analyzers/dashboard/index.js +4 -3
  9. package/dist/analyzers/dashboard/index.js.map +1 -1
  10. package/dist/analyzers/developer/index.d.ts.map +1 -1
  11. package/dist/analyzers/developer/index.js +2 -1
  12. package/dist/analyzers/developer/index.js.map +1 -1
  13. package/dist/analyzers/dispatcher.d.ts +15 -0
  14. package/dist/analyzers/dispatcher.d.ts.map +1 -1
  15. package/dist/analyzers/dispatcher.js +42 -6
  16. package/dist/analyzers/dispatcher.js.map +1 -1
  17. package/dist/analyzers/health.d.ts.map +1 -1
  18. package/dist/analyzers/health.js +11 -1
  19. package/dist/analyzers/health.js.map +1 -1
  20. package/dist/analyzers/licenses/gather.d.ts +1 -1
  21. package/dist/analyzers/licenses/gather.d.ts.map +1 -1
  22. package/dist/analyzers/licenses/gather.js +18 -2
  23. package/dist/analyzers/licenses/gather.js.map +1 -1
  24. package/dist/analyzers/quality/index.d.ts.map +1 -1
  25. package/dist/analyzers/quality/index.js +10 -2
  26. package/dist/analyzers/quality/index.js.map +1 -1
  27. package/dist/analyzers/security/aggregator.d.ts.map +1 -1
  28. package/dist/analyzers/security/aggregator.js +8 -48
  29. package/dist/analyzers/security/aggregator.js.map +1 -1
  30. package/dist/analyzers/security/gather.d.ts +4 -3
  31. package/dist/analyzers/security/gather.d.ts.map +1 -1
  32. package/dist/analyzers/security/gather.js +23 -5
  33. package/dist/analyzers/security/gather.js.map +1 -1
  34. package/dist/analyzers/security/index.d.ts +1 -1
  35. package/dist/analyzers/security/index.js +2 -2
  36. package/dist/analyzers/security/index.js.map +1 -1
  37. package/dist/analyzers/tools/autogen-header.js +1 -1
  38. package/dist/analyzers/tools/cloc.js +3 -3
  39. package/dist/analyzers/tools/cloc.js.map +1 -1
  40. package/dist/analyzers/tools/deadline.d.ts +67 -0
  41. package/dist/analyzers/tools/deadline.d.ts.map +1 -0
  42. package/dist/analyzers/tools/deadline.js +81 -0
  43. package/dist/analyzers/tools/deadline.js.map +1 -0
  44. package/dist/analyzers/tools/exclusions.d.ts +6 -6
  45. package/dist/analyzers/tools/exclusions.js +6 -6
  46. package/dist/analyzers/tools/fingerprint.d.ts +91 -26
  47. package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
  48. package/dist/analyzers/tools/fingerprint.js +111 -22
  49. package/dist/analyzers/tools/fingerprint.js.map +1 -1
  50. package/dist/analyzers/tools/generic.d.ts.map +1 -1
  51. package/dist/analyzers/tools/generic.js +7 -2
  52. package/dist/analyzers/tools/generic.js.map +1 -1
  53. package/dist/analyzers/tools/gitleaks.d.ts +24 -1
  54. package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
  55. package/dist/analyzers/tools/gitleaks.js +21 -12
  56. package/dist/analyzers/tools/gitleaks.js.map +1 -1
  57. package/dist/analyzers/tools/graphify.js +1 -1
  58. package/dist/analyzers/tools/jscpd.js +1 -1
  59. package/dist/analyzers/tools/jscpd.js.map +1 -1
  60. package/dist/analyzers/tools/lint-label.d.ts +29 -0
  61. package/dist/analyzers/tools/lint-label.d.ts.map +1 -0
  62. package/dist/analyzers/tools/lint-label.js +23 -0
  63. package/dist/analyzers/tools/lint-label.js.map +1 -0
  64. package/dist/analyzers/tools/nuget-package-reference.d.ts +6 -4
  65. package/dist/analyzers/tools/nuget-package-reference.d.ts.map +1 -1
  66. package/dist/analyzers/tools/nuget-package-reference.js +7 -5
  67. package/dist/analyzers/tools/nuget-package-reference.js.map +1 -1
  68. package/dist/analyzers/tools/report-date.d.ts +17 -0
  69. package/dist/analyzers/tools/report-date.d.ts.map +1 -0
  70. package/dist/analyzers/tools/report-date.js +26 -0
  71. package/dist/analyzers/tools/report-date.js.map +1 -0
  72. package/dist/analyzers/tools/runner.js +3 -3
  73. package/dist/analyzers/tools/runner.js.map +1 -1
  74. package/dist/analyzers/tools/vendored-advisor.js +1 -1
  75. package/dist/analyzers/tools/walk-paths.d.ts +1 -1
  76. package/dist/analyzers/tools/walk-paths.js +1 -1
  77. package/dist/analyzers/tools/walk-source-files.js +1 -1
  78. package/dist/analyzers/types.d.ts +6 -4
  79. package/dist/analyzers/types.d.ts.map +1 -1
  80. package/dist/baseline/baseline-file.d.ts +104 -0
  81. package/dist/baseline/baseline-file.d.ts.map +1 -0
  82. package/dist/baseline/baseline-file.js +110 -0
  83. package/dist/baseline/baseline-file.js.map +1 -0
  84. package/dist/baseline/check-renderers.d.ts +108 -0
  85. package/dist/baseline/check-renderers.d.ts.map +1 -0
  86. package/dist/baseline/check-renderers.js +379 -0
  87. package/dist/baseline/check-renderers.js.map +1 -0
  88. package/dist/baseline/check.d.ts +127 -0
  89. package/dist/baseline/check.d.ts.map +1 -0
  90. package/dist/baseline/check.js +462 -0
  91. package/dist/baseline/check.js.map +1 -0
  92. package/dist/baseline/content-hash.d.ts +83 -0
  93. package/dist/baseline/content-hash.d.ts.map +1 -0
  94. package/dist/baseline/content-hash.js +131 -0
  95. package/dist/baseline/content-hash.js.map +1 -0
  96. package/dist/baseline/create.d.ts +96 -0
  97. package/dist/baseline/create.d.ts.map +1 -0
  98. package/dist/baseline/create.js +339 -0
  99. package/dist/baseline/create.js.map +1 -0
  100. package/dist/baseline/entry-to-located.d.ts +35 -0
  101. package/dist/baseline/entry-to-located.d.ts.map +1 -0
  102. package/dist/baseline/entry-to-located.js +72 -0
  103. package/dist/baseline/entry-to-located.js.map +1 -0
  104. package/dist/baseline/finding-identity.d.ts +47 -0
  105. package/dist/baseline/finding-identity.d.ts.map +1 -0
  106. package/dist/baseline/finding-identity.js +292 -0
  107. package/dist/baseline/finding-identity.js.map +1 -0
  108. package/dist/baseline/git-aware-match.d.ts +146 -0
  109. package/dist/baseline/git-aware-match.d.ts.map +1 -0
  110. package/dist/baseline/git-aware-match.js +439 -0
  111. package/dist/baseline/git-aware-match.js.map +1 -0
  112. package/dist/baseline/policy.d.ts +171 -0
  113. package/dist/baseline/policy.d.ts.map +1 -0
  114. package/dist/baseline/policy.js +206 -0
  115. package/dist/baseline/policy.js.map +1 -0
  116. package/dist/baseline/producers/health.d.ts +30 -0
  117. package/dist/baseline/producers/health.d.ts.map +1 -0
  118. package/dist/baseline/producers/health.js +42 -0
  119. package/dist/baseline/producers/health.js.map +1 -0
  120. package/dist/baseline/producers/index.d.ts +164 -0
  121. package/dist/baseline/producers/index.d.ts.map +1 -0
  122. package/dist/baseline/producers/index.js +200 -0
  123. package/dist/baseline/producers/index.js.map +1 -0
  124. package/dist/baseline/producers/licenses.d.ts +23 -0
  125. package/dist/baseline/producers/licenses.d.ts.map +1 -0
  126. package/dist/baseline/producers/licenses.js +46 -0
  127. package/dist/baseline/producers/licenses.js.map +1 -0
  128. package/dist/baseline/producers/quality.d.ts +39 -0
  129. package/dist/baseline/producers/quality.d.ts.map +1 -0
  130. package/dist/baseline/producers/quality.js +84 -0
  131. package/dist/baseline/producers/quality.js.map +1 -0
  132. package/dist/baseline/producers/secret-hmac.d.ts +45 -0
  133. package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
  134. package/dist/baseline/producers/secret-hmac.js +70 -0
  135. package/dist/baseline/producers/secret-hmac.js.map +1 -0
  136. package/dist/baseline/producers/security.d.ts +59 -0
  137. package/dist/baseline/producers/security.d.ts.map +1 -0
  138. package/dist/baseline/producers/security.js +135 -0
  139. package/dist/baseline/producers/security.js.map +1 -0
  140. package/dist/baseline/producers/tests.d.ts +36 -0
  141. package/dist/baseline/producers/tests.d.ts.map +1 -0
  142. package/dist/baseline/producers/tests.js +69 -0
  143. package/dist/baseline/producers/tests.js.map +1 -0
  144. package/dist/baseline/salt.d.ts +45 -0
  145. package/dist/baseline/salt.d.ts.map +1 -0
  146. package/dist/baseline/salt.js +113 -0
  147. package/dist/baseline/salt.js.map +1 -0
  148. package/dist/baseline/show.d.ts +79 -0
  149. package/dist/baseline/show.d.ts.map +1 -0
  150. package/dist/baseline/show.js +233 -0
  151. package/dist/baseline/show.js.map +1 -0
  152. package/dist/baseline/types.d.ts +482 -0
  153. package/dist/baseline/types.d.ts.map +1 -0
  154. package/dist/baseline/types.js +53 -0
  155. package/dist/baseline/types.js.map +1 -0
  156. package/dist/cli.d.ts.map +1 -1
  157. package/dist/cli.js +395 -92
  158. package/dist/cli.js.map +1 -1
  159. package/dist/codebase-scanner.d.ts.map +1 -1
  160. package/dist/codebase-scanner.js +0 -1
  161. package/dist/codebase-scanner.js.map +1 -1
  162. package/dist/constants.d.ts.map +1 -1
  163. package/dist/constants.js +0 -4
  164. package/dist/constants.js.map +1 -1
  165. package/dist/detect.js +3 -3
  166. package/dist/detect.js.map +1 -1
  167. package/dist/doctor.d.ts.map +1 -1
  168. package/dist/doctor.js +22 -25
  169. package/dist/doctor.js.map +1 -1
  170. package/dist/fail-on.d.ts +84 -0
  171. package/dist/fail-on.d.ts.map +1 -0
  172. package/dist/fail-on.js +128 -0
  173. package/dist/fail-on.js.map +1 -0
  174. package/dist/generator.d.ts.map +1 -1
  175. package/dist/generator.js +2 -141
  176. package/dist/generator.js.map +1 -1
  177. package/dist/languages/capabilities/provider.d.ts +4 -4
  178. package/dist/languages/capabilities/types.d.ts +1 -1
  179. package/dist/languages/csharp.d.ts.map +1 -1
  180. package/dist/languages/csharp.js +15 -24
  181. package/dist/languages/csharp.js.map +1 -1
  182. package/dist/languages/go.d.ts.map +1 -1
  183. package/dist/languages/go.js +0 -15
  184. package/dist/languages/go.js.map +1 -1
  185. package/dist/languages/index.d.ts +4 -3
  186. package/dist/languages/index.d.ts.map +1 -1
  187. package/dist/languages/index.js +3 -2
  188. package/dist/languages/index.js.map +1 -1
  189. package/dist/languages/java.d.ts.map +1 -1
  190. package/dist/languages/java.js +0 -6
  191. package/dist/languages/java.js.map +1 -1
  192. package/dist/languages/kotlin.d.ts.map +1 -1
  193. package/dist/languages/kotlin.js +0 -11
  194. package/dist/languages/kotlin.js.map +1 -1
  195. package/dist/languages/python.d.ts.map +1 -1
  196. package/dist/languages/python.js +0 -15
  197. package/dist/languages/python.js.map +1 -1
  198. package/dist/languages/ruby.d.ts.map +1 -1
  199. package/dist/languages/ruby.js +0 -6
  200. package/dist/languages/ruby.js.map +1 -1
  201. package/dist/languages/rust.d.ts.map +1 -1
  202. package/dist/languages/rust.js +0 -4
  203. package/dist/languages/rust.js.map +1 -1
  204. package/dist/languages/types.d.ts +9 -35
  205. package/dist/languages/types.d.ts.map +1 -1
  206. package/dist/languages/typescript.d.ts.map +1 -1
  207. package/dist/languages/typescript.js +26 -4
  208. package/dist/languages/typescript.js.map +1 -1
  209. package/dist/lib.d.ts +2 -3
  210. package/dist/lib.d.ts.map +1 -1
  211. package/dist/lib.js +3 -6
  212. package/dist/lib.js.map +1 -1
  213. package/dist/prompts.d.ts.map +1 -1
  214. package/dist/prompts.js +0 -10
  215. package/dist/prompts.js.map +1 -1
  216. package/dist/report-schema.d.ts +42 -0
  217. package/dist/report-schema.d.ts.map +1 -0
  218. package/dist/report-schema.js +54 -0
  219. package/dist/report-schema.js.map +1 -0
  220. package/dist/ship-installers.d.ts +106 -0
  221. package/dist/ship-installers.d.ts.map +1 -0
  222. package/dist/ship-installers.js +415 -0
  223. package/dist/ship-installers.js.map +1 -0
  224. package/dist/types.d.ts +0 -4
  225. package/dist/types.d.ts.map +1 -1
  226. package/dist/update.d.ts.map +1 -1
  227. package/dist/update.js +0 -4
  228. package/dist/update.js.map +1 -1
  229. package/package.json +17 -11
  230. package/templates/.claude/agents/onboarding.md +5 -4
  231. package/templates/.claude/agents-available/codebase-explorer.md +1 -1
  232. package/templates/.claude/agents-available/debugger.md +2 -2
  233. package/templates/.claude/agents-available/health-auditor.md +2 -2
  234. package/templates/.claude/commands/doctor.md +20 -12
  235. package/templates/.claude/skills/build/SKILL.md.template +22 -30
  236. package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
  237. package/templates/.claude/skills/doctor/SKILL.md +24 -47
  238. package/templates/.claude/skills/gcloud/SKILL.md +5 -5
  239. package/templates/.claude/skills/learned/SKILL.md +1 -1
  240. package/templates/.claude/skills/pulumi/SKILL.md +2 -2
  241. package/templates/.claude/skills/quality/SKILL.md.template +4 -23
  242. package/templates/.claude/skills/review/SKILL.md.template +4 -3
  243. package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
  244. package/templates/.claude/skills/secrets/SKILL.md +20 -21
  245. package/templates/.claude/skills/session/SKILL.md +20 -31
  246. package/templates/.claude/skills/test/SKILL.md.template +1 -7
  247. package/templates/.devcontainer/devcontainer.json +81 -0
  248. package/templates/.devcontainer/install-agent-clis.sh +42 -0
  249. package/templates/.devcontainer/post-create.sh +67 -0
  250. package/templates/.githooks/pre-commit +55 -0
  251. package/templates/.githooks/pre-push +63 -0
  252. package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
  253. package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
  254. package/templates/CLAUDE.md.template +62 -196
  255. package/dist/project-yaml.d.ts +0 -13
  256. package/dist/project-yaml.d.ts.map +0 -1
  257. package/dist/project-yaml.js +0 -188
  258. package/dist/project-yaml.js.map +0 -1
  259. package/templates/.ai/README.md +0 -117
  260. package/templates/.ai/prompts/execution-prompt.md +0 -9
  261. package/templates/.ai/prompts/planning-prompt.md +0 -18
  262. package/templates/.ai/prompts/session-end-template.md +0 -182
  263. package/templates/.ai/prompts/session-end.md +0 -132
  264. package/templates/.ai/prompts/session-start.md +0 -109
  265. package/templates/.ai/prompts/step-by-step.md +0 -113
  266. package/templates/.ai/sessions/.gitkeep +0 -0
  267. package/templates/.claude/commands/setup-pr-review.md +0 -72
  268. package/templates/.devcontainer/Dockerfile.dev.template +0 -89
  269. package/templates/.devcontainer/devcontainer.json.template +0 -184
  270. package/templates/.devcontainer/docker-compose.yml.template +0 -105
  271. package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
  272. package/templates/.devcontainer/post-create.sh.template +0 -298
  273. package/templates/.github/workflows/ci.yml.template +0 -399
  274. package/templates/.github/workflows/quality.yml.template +0 -376
  275. package/templates/.pre-commit-config.yaml.template +0 -106
  276. package/templates/.project/config/edit_config.py +0 -275
  277. package/templates/.project/config/project_config.py +0 -894
  278. package/templates/.project/scripts/codegen/generate-all.sh +0 -20
  279. package/templates/.project/scripts/codegen/validate-all.sh +0 -17
  280. package/templates/.project/scripts/docs/generate-all.sh +0 -30
  281. package/templates/.project/scripts/docs/serve.sh +0 -20
  282. package/templates/.project/scripts/quality/fix-all.sh +0 -138
  283. package/templates/.project/scripts/quality/lint-go.sh +0 -34
  284. package/templates/.project/scripts/quality/lint-python.sh +0 -54
  285. package/templates/.project/scripts/quality/run-all.sh +0 -497
  286. package/templates/.project/scripts/session/commit.sh +0 -70
  287. package/templates/.project/scripts/session/create-pr.sh +0 -165
  288. package/templates/.project/scripts/session/end.sh +0 -207
  289. package/templates/.project/scripts/session/start.sh +0 -233
  290. package/templates/.project/scripts/setup/doctor.sh +0 -404
  291. package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
  292. package/templates/.project/scripts/sync/sync-template.sh +0 -328
  293. package/templates/.project/scripts/test/run-all.sh +0 -179
  294. package/templates/.project/scripts/test/run-quick.sh +0 -25
  295. package/templates/Makefile +0 -514
  296. package/templates/config/versions.yaml +0 -57
  297. package/templates/configs/go/.golangci.yml.template +0 -172
  298. package/templates/configs/go/go.mod.template +0 -15
  299. package/templates/configs/java/README.md +0 -6
  300. package/templates/configs/kotlin/README.md +0 -6
  301. package/templates/configs/node/package.json.template +0 -67
  302. package/templates/configs/node/tsconfig.json.template +0 -53
  303. package/templates/configs/python/pyproject.toml.template +0 -92
  304. package/templates/configs/python/pytest.ini.template +0 -64
  305. package/templates/configs/python/ruff.toml.template +0 -79
  306. package/templates/configs/ruby/README.md +0 -6
  307. package/templates/configs/rust/Cargo.toml.template +0 -51
  308. package/templates/configs/shared/.editorconfig +0 -67
  309. package/templates/scripts/validate-templates.sh +0 -449
@@ -1,497 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # Colors
5
- CYAN='\033[36m'
6
- GREEN='\033[32m'
7
- RED='\033[31m'
8
- YELLOW='\033[1;33m'
9
- DIM='\033[2m'
10
- RESET='\033[0m'
11
-
12
- # Script directory (for calling sibling scripts)
13
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
-
15
- # Create tmp directory for reports
16
- mkdir -p tmp/reports
17
-
18
- REPORT_FILE="tmp/reports/quality-report.md"
19
- TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
20
- FAILED=0
21
-
22
- # Helper to read config
23
- read_config() {
24
- local path="$1"
25
- local default="$2"
26
- if [ -f ".project.yaml" ] && command -v python3 &> /dev/null; then
27
- python3 -c "
28
- import yaml
29
- try:
30
- with open('.project.yaml') as f:
31
- c = yaml.safe_load(f)
32
- keys = '$path'.split('.')
33
- val = c
34
- for k in keys:
35
- val = val.get(k, {}) if isinstance(val, dict) else {}
36
- print('true' if val is True else ('false' if val is False else '$default'))
37
- except:
38
- print('$default')
39
- " 2>/dev/null || echo "$default"
40
- else
41
- echo "$default"
42
- fi
43
- }
44
-
45
- # Read enabled languages from config
46
- PYTHON_ENABLED=$(read_config "languages.python.enabled" "false")
47
- GO_ENABLED=$(read_config "languages.go.enabled" "false")
48
- NODE_ENABLED=$(read_config "languages.node.enabled" "false")
49
- NEXTJS_ENABLED=$(read_config "nextjs.enabled" "false")
50
- RUST_ENABLED=$(read_config "languages.rust.enabled" "false")
51
-
52
- # Start report
53
- cat > "$REPORT_FILE" << EOF
54
- # Quality Report
55
-
56
- **Generated:** $TIMESTAMP
57
-
58
- ---
59
-
60
- EOF
61
-
62
- echo -e "${CYAN}🔍 Running Quality Checks${RESET}"
63
- echo ""
64
-
65
- # ============================================================================
66
- # Format Checks (sync with pre-commit)
67
- # ============================================================================
68
-
69
- echo "## Format Checks" >> "$REPORT_FILE"
70
- echo "" >> "$REPORT_FILE"
71
-
72
- # Go format check
73
- echo "### Go Format" >> "$REPORT_FILE"
74
- if [ "$GO_ENABLED" = "true" ]; then
75
- if find . -name "*.go" -type f -not -path "./v0/*" -not -path "./.git/*" -not -path "./.template/*" | grep -q .; then
76
- echo -e "${CYAN}Checking Go formatting...${RESET}"
77
- UNFORMATTED=$(gofmt -l $(find . -name "*.go" -type f -not -path "./v0/*" -not -path "./.git/*" -not -path "./.template/*") 2>/dev/null || true)
78
- if [ -z "$UNFORMATTED" ]; then
79
- echo "✅ **PASSED**" >> "$REPORT_FILE"
80
- echo -e "${GREEN}✓${RESET} Go format check passed"
81
- else
82
- echo "❌ **FAILED** - Files need formatting:" >> "$REPORT_FILE"
83
- echo '```' >> "$REPORT_FILE"
84
- echo "$UNFORMATTED" >> "$REPORT_FILE"
85
- echo '```' >> "$REPORT_FILE"
86
- echo -e "${RED}✗${RESET} Go format check failed"
87
- FAILED=1
88
- fi
89
- else
90
- echo "_No Go files found_" >> "$REPORT_FILE"
91
- fi
92
- else
93
- echo "_Go not enabled_" >> "$REPORT_FILE"
94
- fi
95
- echo "" >> "$REPORT_FILE"
96
-
97
- # Python format check (ruff format)
98
- echo "### Python Format" >> "$REPORT_FILE"
99
- if [ "$PYTHON_ENABLED" = "true" ]; then
100
- if find . -name "*.py" -type f -not -path "./v0/*" -not -path "./.git/*" -not -path "./.venv/*" -not -path "./venv/*" -not -path "./.template/*" | grep -q .; then
101
- echo -e "${CYAN}Checking Python formatting...${RESET}"
102
- if command -v ruff &> /dev/null; then
103
- if ruff format --check . --exclude ".template,.venv,venv,v0" 2>/dev/null; then
104
- echo "✅ **PASSED**" >> "$REPORT_FILE"
105
- echo -e "${GREEN}✓${RESET} Python format check passed"
106
- else
107
- echo "❌ **FAILED**" >> "$REPORT_FILE"
108
- echo -e "${RED}✗${RESET} Python format check failed"
109
- FAILED=1
110
- fi
111
- else
112
- echo "⚠️ **ruff not installed**" >> "$REPORT_FILE"
113
- echo -e "${YELLOW}!${RESET} ruff not installed (run: pip install ruff)"
114
- fi
115
- else
116
- echo "_No Python files found_" >> "$REPORT_FILE"
117
- fi
118
- else
119
- echo "_Python not enabled_" >> "$REPORT_FILE"
120
- fi
121
- echo "" >> "$REPORT_FILE"
122
-
123
- # Node.js format check (prettier)
124
- echo "### Node.js Format" >> "$REPORT_FILE"
125
- if [ "$NODE_ENABLED" = "true" ]; then
126
- if find . \( -name "*.ts" -o -name "*.js" -o -name "*.tsx" -o -name "*.jsx" \) -type f -not -path "./node_modules/*" -not -path "./.git/*" -not -path "./.template/*" 2>/dev/null | grep -q .; then
127
- echo -e "${CYAN}Checking Node.js formatting...${RESET}"
128
- PRETTIER_CMD=""
129
- if command -v prettier &> /dev/null; then
130
- PRETTIER_CMD="prettier"
131
- elif [ -f "node_modules/.bin/prettier" ]; then
132
- PRETTIER_CMD="./node_modules/.bin/prettier"
133
- fi
134
- if [ -n "$PRETTIER_CMD" ]; then
135
- if $PRETTIER_CMD --check "**/*.{js,ts,jsx,tsx}" 2>/dev/null; then
136
- echo "✅ **PASSED**" >> "$REPORT_FILE"
137
- echo -e "${GREEN}✓${RESET} Node.js format check passed"
138
- else
139
- echo "❌ **FAILED**" >> "$REPORT_FILE"
140
- echo -e "${RED}✗${RESET} Node.js format check failed"
141
- FAILED=1
142
- fi
143
- else
144
- echo "⚠️ **prettier not installed**" >> "$REPORT_FILE"
145
- echo -e "${YELLOW}!${RESET} prettier not installed (run: npm install -D prettier)"
146
- fi
147
- else
148
- echo "_No JS/TS files found_" >> "$REPORT_FILE"
149
- fi
150
- else
151
- echo "_Node.js not enabled_" >> "$REPORT_FILE"
152
- fi
153
- echo "" >> "$REPORT_FILE"
154
-
155
- # Rust format check
156
- echo "### Rust Format" >> "$REPORT_FILE"
157
- if [ "$RUST_ENABLED" = "true" ]; then
158
- if find . -name "*.rs" -type f -not -path "./target/*" -not -path "./.git/*" -not -path "./.template/*" | grep -q .; then
159
- echo -e "${CYAN}Checking Rust formatting...${RESET}"
160
- if command -v cargo &> /dev/null; then
161
- if cargo fmt -- --check 2>/dev/null; then
162
- echo "✅ **PASSED**" >> "$REPORT_FILE"
163
- echo -e "${GREEN}✓${RESET} Rust format check passed"
164
- else
165
- echo "❌ **FAILED**" >> "$REPORT_FILE"
166
- echo -e "${RED}✗${RESET} Rust format check failed"
167
- FAILED=1
168
- fi
169
- else
170
- echo "⚠️ **cargo not installed**" >> "$REPORT_FILE"
171
- echo -e "${YELLOW}!${RESET} cargo not installed"
172
- fi
173
- else
174
- echo "_No Rust files found_" >> "$REPORT_FILE"
175
- fi
176
- else
177
- echo "_Rust not enabled_" >> "$REPORT_FILE"
178
- fi
179
- echo "" >> "$REPORT_FILE"
180
-
181
- # ============================================================================
182
- # File Validation (sync with pre-commit universal hooks)
183
- # ============================================================================
184
-
185
- echo "## File Validation" >> "$REPORT_FILE"
186
- echo "" >> "$REPORT_FILE"
187
-
188
- # YAML validation
189
- echo "### YAML Files" >> "$REPORT_FILE"
190
- YAML_FILES=$(find . -name "*.yaml" -o -name "*.yml" -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.template/*" 2>/dev/null | head -100)
191
- if [ -n "$YAML_FILES" ]; then
192
- echo -e "${CYAN}Validating YAML files...${RESET}"
193
- YAML_FAILED=0
194
- if command -v python3 &> /dev/null; then
195
- for f in $YAML_FILES; do
196
- if ! python3 -c "import yaml; yaml.safe_load(open('$f'))" 2>/dev/null; then
197
- echo " Invalid: $f" >> "$REPORT_FILE"
198
- YAML_FAILED=1
199
- fi
200
- done
201
- if [ $YAML_FAILED -eq 0 ]; then
202
- echo "✅ **PASSED**" >> "$REPORT_FILE"
203
- echo -e "${GREEN}✓${RESET} YAML validation passed"
204
- else
205
- echo "❌ **FAILED**" >> "$REPORT_FILE"
206
- echo -e "${RED}✗${RESET} YAML validation failed"
207
- FAILED=1
208
- fi
209
- else
210
- echo "⚠️ **python3 not available**" >> "$REPORT_FILE"
211
- fi
212
- else
213
- echo "_No YAML files found_" >> "$REPORT_FILE"
214
- fi
215
- echo "" >> "$REPORT_FILE"
216
-
217
- # JSON validation
218
- echo "### JSON Files" >> "$REPORT_FILE"
219
- JSON_FILES=$(find . -name "*.json" -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.template/*" 2>/dev/null | head -100)
220
- if [ -n "$JSON_FILES" ]; then
221
- echo -e "${CYAN}Validating JSON files...${RESET}"
222
- JSON_FAILED=0
223
- if command -v python3 &> /dev/null; then
224
- for f in $JSON_FILES; do
225
- if ! python3 -c "import json; json.load(open('$f'))" 2>/dev/null; then
226
- echo " Invalid: $f" >> "$REPORT_FILE"
227
- JSON_FAILED=1
228
- fi
229
- done
230
- if [ $JSON_FAILED -eq 0 ]; then
231
- echo "✅ **PASSED**" >> "$REPORT_FILE"
232
- echo -e "${GREEN}✓${RESET} JSON validation passed"
233
- else
234
- echo "❌ **FAILED**" >> "$REPORT_FILE"
235
- echo -e "${RED}✗${RESET} JSON validation failed"
236
- FAILED=1
237
- fi
238
- else
239
- echo "⚠️ **python3 not available**" >> "$REPORT_FILE"
240
- fi
241
- else
242
- echo "_No JSON files found_" >> "$REPORT_FILE"
243
- fi
244
- echo "" >> "$REPORT_FILE"
245
-
246
- # TOML validation
247
- echo "### TOML Files" >> "$REPORT_FILE"
248
- TOML_FILES=$(find . -name "*.toml" -type f -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.template/*" -not -path "./target/*" 2>/dev/null | head -100)
249
- if [ -n "$TOML_FILES" ]; then
250
- echo -e "${CYAN}Validating TOML files...${RESET}"
251
- TOML_FAILED=0
252
- if command -v python3 &> /dev/null && python3 -c "import tomllib" 2>/dev/null; then
253
- for f in $TOML_FILES; do
254
- if ! python3 -c "import tomllib; tomllib.load(open('$f', 'rb'))" 2>/dev/null; then
255
- echo " Invalid: $f" >> "$REPORT_FILE"
256
- TOML_FAILED=1
257
- fi
258
- done
259
- if [ $TOML_FAILED -eq 0 ]; then
260
- echo "✅ **PASSED**" >> "$REPORT_FILE"
261
- echo -e "${GREEN}✓${RESET} TOML validation passed"
262
- else
263
- echo "❌ **FAILED**" >> "$REPORT_FILE"
264
- echo -e "${RED}✗${RESET} TOML validation failed"
265
- FAILED=1
266
- fi
267
- else
268
- echo "⚠️ **tomllib not available (Python 3.11+)**" >> "$REPORT_FILE"
269
- echo -e "${YELLOW}!${RESET} TOML validation skipped (requires Python 3.11+)"
270
- fi
271
- else
272
- echo "_No TOML files found_" >> "$REPORT_FILE"
273
- fi
274
- echo "" >> "$REPORT_FILE"
275
-
276
- # Large files check
277
- echo "### Large Files" >> "$REPORT_FILE"
278
- echo -e "${CYAN}Checking for large files...${RESET}"
279
- LARGE_FILES=$(find . -type f -size +1M -not -path "./.git/*" -not -path "./node_modules/*" -not -path "./.template/*" -not -path "./target/*" -not -path "./.venv/*" 2>/dev/null | head -20)
280
- if [ -n "$LARGE_FILES" ]; then
281
- echo "⚠️ **WARNING** - Large files detected (>1MB):" >> "$REPORT_FILE"
282
- echo '```' >> "$REPORT_FILE"
283
- echo "$LARGE_FILES" >> "$REPORT_FILE"
284
- echo '```' >> "$REPORT_FILE"
285
- echo -e "${YELLOW}!${RESET} Large files detected (consider adding to .gitignore)"
286
- else
287
- echo "✅ **PASSED**" >> "$REPORT_FILE"
288
- echo -e "${GREEN}✓${RESET} No large files detected"
289
- fi
290
- echo "" >> "$REPORT_FILE"
291
-
292
- # Merge conflict markers check
293
- echo "### Merge Conflicts" >> "$REPORT_FILE"
294
- echo -e "${CYAN}Checking for merge conflict markers...${RESET}"
295
- CONFLICT_FILES=$(grep -rl "^<<<<<<< \|^=======$\|^>>>>>>> " . --include="*.py" --include="*.go" --include="*.js" --include="*.ts" --include="*.yaml" --include="*.yml" --include="*.json" --include="*.md" 2>/dev/null | grep -v ".git" | grep -v "node_modules" | grep -v ".template" | head -20 || true)
296
- if [ -n "$CONFLICT_FILES" ]; then
297
- echo "❌ **FAILED** - Merge conflict markers found:" >> "$REPORT_FILE"
298
- echo '```' >> "$REPORT_FILE"
299
- echo "$CONFLICT_FILES" >> "$REPORT_FILE"
300
- echo '```' >> "$REPORT_FILE"
301
- echo -e "${RED}✗${RESET} Merge conflict markers found"
302
- FAILED=1
303
- else
304
- echo "✅ **PASSED**" >> "$REPORT_FILE"
305
- echo -e "${GREEN}✓${RESET} No merge conflict markers"
306
- fi
307
- echo "" >> "$REPORT_FILE"
308
-
309
- # Private key detection
310
- echo "### Private Keys" >> "$REPORT_FILE"
311
- echo -e "${CYAN}Checking for private keys...${RESET}"
312
- PRIVATE_KEY_FILES=$(grep -rl "BEGIN.*PRIVATE KEY" . 2>/dev/null | grep -v ".git" | grep -v "node_modules" | grep -v ".template" | grep -v ".venv" | head -20 || true)
313
- if [ -n "$PRIVATE_KEY_FILES" ]; then
314
- echo "❌ **FAILED** - Private keys detected:" >> "$REPORT_FILE"
315
- echo '```' >> "$REPORT_FILE"
316
- echo "$PRIVATE_KEY_FILES" >> "$REPORT_FILE"
317
- echo '```' >> "$REPORT_FILE"
318
- echo -e "${RED}✗${RESET} Private keys detected - DO NOT COMMIT"
319
- FAILED=1
320
- else
321
- echo "✅ **PASSED**" >> "$REPORT_FILE"
322
- echo -e "${GREEN}✓${RESET} No private keys detected"
323
- fi
324
- echo "" >> "$REPORT_FILE"
325
-
326
- # ============================================================================
327
- # Linting Checks
328
- # ============================================================================
329
-
330
- # Go linting
331
- echo "## Go Linting" >> "$REPORT_FILE"
332
- if [ "$GO_ENABLED" = "true" ]; then
333
- if find . -name "*.go" -type f -not -path "./v0/*" -not -path "./.git/*" -not -path "./.template/*" | grep -q .; then
334
- echo -e "${CYAN}Linting Go code...${RESET}"
335
- if "$SCRIPT_DIR/lint-go.sh" 2>&1 | tee /tmp/go-lint.log; then
336
- echo "✅ **PASSED**" >> "$REPORT_FILE"
337
- echo -e "${GREEN}✓${RESET} Go linting passed"
338
- else
339
- echo "❌ **FAILED**" >> "$REPORT_FILE"
340
- echo -e "${RED}✗${RESET} Go linting failed"
341
- FAILED=1
342
- fi
343
- else
344
- echo "_No Go files found_" >> "$REPORT_FILE"
345
- echo -e "${DIM}○ Go enabled but no .go files found${RESET}"
346
- fi
347
- else
348
- echo "_Go not enabled_" >> "$REPORT_FILE"
349
- fi
350
- echo "" >> "$REPORT_FILE"
351
-
352
- # Python linting
353
- echo "## Python Linting" >> "$REPORT_FILE"
354
- if [ "$PYTHON_ENABLED" = "true" ]; then
355
- if find . -name "*.py" -type f -not -path "./v0/*" -not -path "./.git/*" -not -path "./.venv/*" -not -path "./venv/*" -not -path "./.template/*" | grep -q .; then
356
- echo -e "${CYAN}Linting Python code...${RESET}"
357
- if "$SCRIPT_DIR/lint-python.sh" 2>&1 | tee /tmp/python-lint.log; then
358
- echo "✅ **PASSED**" >> "$REPORT_FILE"
359
- echo -e "${GREEN}✓${RESET} Python linting passed"
360
- else
361
- echo "❌ **FAILED**" >> "$REPORT_FILE"
362
- echo -e "${RED}✗${RESET} Python linting failed"
363
- FAILED=1
364
- fi
365
- else
366
- echo "_No Python files found_" >> "$REPORT_FILE"
367
- echo -e "${DIM}○ Python enabled but no .py files found${RESET}"
368
- fi
369
- else
370
- echo "_Python not enabled_" >> "$REPORT_FILE"
371
- fi
372
- echo "" >> "$REPORT_FILE"
373
-
374
- # Node.js linting
375
- echo "## Node.js Linting" >> "$REPORT_FILE"
376
- if [ "$NODE_ENABLED" = "true" ]; then
377
- if find . \( -name "*.ts" -o -name "*.js" \) -type f -not -path "./node_modules/*" -not -path "./.git/*" -not -path "./.template/*" 2>/dev/null | grep -q .; then
378
- echo -e "${CYAN}Linting Node.js code...${RESET}"
379
- if command -v eslint &> /dev/null || [ -f "node_modules/.bin/eslint" ]; then
380
- ESLINT_CMD="eslint"
381
- [ -f "node_modules/.bin/eslint" ] && ESLINT_CMD="./node_modules/.bin/eslint"
382
- if $ESLINT_CMD . --ext .js,.ts 2>&1 | tee /tmp/node-lint.log; then
383
- echo "✅ **PASSED**" >> "$REPORT_FILE"
384
- echo -e "${GREEN}✓${RESET} Node.js linting passed"
385
- else
386
- echo "❌ **FAILED**" >> "$REPORT_FILE"
387
- echo -e "${RED}✗${RESET} Node.js linting failed"
388
- FAILED=1
389
- fi
390
- else
391
- echo "⚠️ **eslint not installed**" >> "$REPORT_FILE"
392
- echo -e "${YELLOW}!${RESET} eslint not installed (run: npm install -D eslint)"
393
- fi
394
- else
395
- echo "_No JS/TS files found_" >> "$REPORT_FILE"
396
- echo -e "${DIM}○ Node.js enabled but no .js/.ts files found${RESET}"
397
- fi
398
- else
399
- echo "_Node.js not enabled_" >> "$REPORT_FILE"
400
- fi
401
- echo "" >> "$REPORT_FILE"
402
-
403
- # Rust linting
404
- echo "## Rust Linting" >> "$REPORT_FILE"
405
- if [ "$RUST_ENABLED" = "true" ]; then
406
- if find . -name "*.rs" -type f -not -path "./target/*" -not -path "./.git/*" -not -path "./.template/*" | grep -q .; then
407
- echo -e "${CYAN}Linting Rust code...${RESET}"
408
- if command -v cargo &> /dev/null; then
409
- if cargo clippy -- -D warnings 2>&1 | tee /tmp/rust-lint.log; then
410
- echo "✅ **PASSED**" >> "$REPORT_FILE"
411
- echo -e "${GREEN}✓${RESET} Rust linting passed"
412
- else
413
- echo "❌ **FAILED**" >> "$REPORT_FILE"
414
- echo -e "${RED}✗${RESET} Rust linting failed"
415
- FAILED=1
416
- fi
417
- else
418
- echo "⚠️ **cargo not installed**" >> "$REPORT_FILE"
419
- echo -e "${YELLOW}!${RESET} cargo not installed"
420
- fi
421
- else
422
- echo "_No Rust files found_" >> "$REPORT_FILE"
423
- echo -e "${DIM}○ Rust enabled but no .rs files found${RESET}"
424
- fi
425
- else
426
- echo "_Rust not enabled_" >> "$REPORT_FILE"
427
- fi
428
- echo "" >> "$REPORT_FILE"
429
-
430
- # Next.js linting, type checking, and build
431
- echo "## Next.js Quality" >> "$REPORT_FILE"
432
- if [ "$NEXTJS_ENABLED" = "true" ]; then
433
- if [ -d "frontend" ] && [ -f "frontend/package.json" ]; then
434
- echo -e "${CYAN}Checking Next.js frontend...${RESET}"
435
-
436
- # Next.js linting (npm run lint)
437
- echo "### ESLint" >> "$REPORT_FILE"
438
- echo -e "${CYAN} Running ESLint...${RESET}"
439
- if (cd frontend && npm run lint --silent 2>&1) | tee /tmp/nextjs-lint.log; then
440
- echo "✅ **PASSED**" >> "$REPORT_FILE"
441
- echo -e "${GREEN}✓${RESET} Next.js linting passed"
442
- else
443
- echo "❌ **FAILED**" >> "$REPORT_FILE"
444
- echo -e "${RED}✗${RESET} Next.js linting failed"
445
- FAILED=1
446
- fi
447
- echo "" >> "$REPORT_FILE"
448
-
449
- # TypeScript type checking
450
- echo "### TypeScript" >> "$REPORT_FILE"
451
- echo -e "${CYAN} Running TypeScript check...${RESET}"
452
- if (cd frontend && npx tsc --noEmit 2>&1) | tee /tmp/nextjs-tsc.log; then
453
- echo "✅ **PASSED**" >> "$REPORT_FILE"
454
- echo -e "${GREEN}✓${RESET} TypeScript check passed"
455
- else
456
- echo "❌ **FAILED**" >> "$REPORT_FILE"
457
- echo -e "${RED}✗${RESET} TypeScript check failed"
458
- FAILED=1
459
- fi
460
- echo "" >> "$REPORT_FILE"
461
-
462
- # Next.js build
463
- echo "### Build" >> "$REPORT_FILE"
464
- echo -e "${CYAN} Running Next.js build...${RESET}"
465
- if (cd frontend && NEXT_TELEMETRY_DISABLED=1 npm run build 2>&1) | tee /tmp/nextjs-build.log; then
466
- echo "✅ **PASSED**" >> "$REPORT_FILE"
467
- echo -e "${GREEN}✓${RESET} Next.js build passed"
468
- else
469
- echo "❌ **FAILED**" >> "$REPORT_FILE"
470
- echo -e "${RED}✗${RESET} Next.js build failed"
471
- FAILED=1
472
- fi
473
- else
474
- echo "_frontend/ directory not found_" >> "$REPORT_FILE"
475
- echo -e "${DIM}○ Next.js enabled but frontend/ not found${RESET}"
476
- fi
477
- else
478
- echo "_Next.js not enabled_" >> "$REPORT_FILE"
479
- fi
480
- echo "" >> "$REPORT_FILE"
481
-
482
- # Summary
483
- echo "---" >> "$REPORT_FILE"
484
- echo ""
485
- if [ $FAILED -eq 0 ]; then
486
- echo "## ✅ Result: PASSED" >> "$REPORT_FILE"
487
- echo -e "${GREEN}✅ All quality checks passed${RESET}"
488
- else
489
- echo "## ❌ Result: FAILED" >> "$REPORT_FILE"
490
- echo -e "${RED}❌ Quality checks failed${RESET}"
491
- echo -e "${CYAN}💡 Run 'make quality-fix' to auto-fix issues${RESET}"
492
- fi
493
-
494
- echo ""
495
- echo -e "${DIM}📊 Report: $REPORT_FILE${RESET}"
496
-
497
- exit $FAILED
@@ -1,70 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Colors
4
- CYAN='\033[36m'
5
- GREEN='\033[32m'
6
- RED='\033[31m'
7
- RESET='\033[0m'
8
-
9
- echo -e "${CYAN}💾 Commit Session Work${RESET}"
10
- echo "======================"
11
- echo ""
12
-
13
- DEVELOPER=$(git config user.name | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
14
- DATE=$(date +%Y-%m-%d)
15
- CHECKPOINT_DIR=".ai/sessions/$DEVELOPER/$DATE"
16
- CHECKPOINT_FILE=""
17
-
18
- if [ -d "$CHECKPOINT_DIR" ]; then
19
- CHECKPOINT_FILE=$(ls -t "$CHECKPOINT_DIR"/session-*.md 2>/dev/null | head -1)
20
- fi
21
-
22
- if [ -z "$CHECKPOINT_FILE" ]; then
23
- echo -e "${RED}⚠️ No checkpoint found for today.${RESET}"
24
- echo "Run: make ai-checkpoint first"
25
- exit 1
26
- fi
27
-
28
- echo -e "${CYAN}Checkpoint:${RESET} $CHECKPOINT_FILE"
29
- echo ""
30
-
31
- read -p "Commit type (feat/fix/docs/refactor/test/chore): " TYPE
32
- read -p "Brief description: " DESC
33
- echo ""
34
-
35
- echo -e "${CYAN}Specific changes (one per line, empty line to finish):${RESET}"
36
- CHANGES=""
37
- while true; do
38
- read -p "- " CHANGE
39
- if [ -z "$CHANGE" ]; then break; fi
40
- CHANGES="${CHANGES}- $CHANGE\n"
41
- done
42
-
43
- echo ""
44
- COMMIT_MSG="$TYPE: $DESC\n\n${CHANGES}\nSession: $CHECKPOINT_FILE"
45
-
46
- echo -e "${CYAN}Commit message:${RESET}"
47
- echo "---"
48
- echo -e "$COMMIT_MSG"
49
- echo "---"
50
- echo ""
51
-
52
- read -p "Commit with this message? (y/n): " CONFIRM
53
- if [ "$CONFIRM" = "y" ]; then
54
- git add .
55
-
56
- # Use --no-verify if SKIP_VERIFY is set (skip git hooks)
57
- if [ "$SKIP_VERIFY" = "1" ]; then
58
- echo -e "${CYAN}⚠️ Skipping git hooks (--no-verify)${RESET}"
59
- git commit --no-verify -m "$(echo -e "$COMMIT_MSG")"
60
- else
61
- git commit -m "$(echo -e "$COMMIT_MSG")"
62
- fi
63
-
64
- echo -e "${GREEN}✅ Committed!${RESET}"
65
- echo ""
66
- echo -e "${CYAN}Next steps:${RESET}"
67
- echo " make session-push"
68
- else
69
- echo -e "${RED}❌ Commit cancelled${RESET}"
70
- fi