@vyuhlabs/dxkit 2.4.8 → 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.
- package/CHANGELOG.md +235 -0
- package/README.md +360 -439
- package/dist/analyzers/security/aggregator.d.ts.map +1 -1
- package/dist/analyzers/security/aggregator.js +4 -46
- package/dist/analyzers/security/aggregator.js.map +1 -1
- package/dist/analyzers/tools/fingerprint.d.ts +91 -26
- package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
- package/dist/analyzers/tools/fingerprint.js +111 -22
- package/dist/analyzers/tools/fingerprint.js.map +1 -1
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +6 -1
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts +24 -1
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +20 -11
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/types.d.ts +6 -4
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/baseline/baseline-file.d.ts +104 -0
- package/dist/baseline/baseline-file.d.ts.map +1 -0
- package/dist/baseline/baseline-file.js +110 -0
- package/dist/baseline/baseline-file.js.map +1 -0
- package/dist/baseline/check-renderers.d.ts +108 -0
- package/dist/baseline/check-renderers.d.ts.map +1 -0
- package/dist/baseline/check-renderers.js +379 -0
- package/dist/baseline/check-renderers.js.map +1 -0
- package/dist/baseline/check.d.ts +127 -0
- package/dist/baseline/check.d.ts.map +1 -0
- package/dist/baseline/check.js +462 -0
- package/dist/baseline/check.js.map +1 -0
- package/dist/baseline/content-hash.d.ts +83 -0
- package/dist/baseline/content-hash.d.ts.map +1 -0
- package/dist/baseline/content-hash.js +131 -0
- package/dist/baseline/content-hash.js.map +1 -0
- package/dist/baseline/create.d.ts +96 -0
- package/dist/baseline/create.d.ts.map +1 -0
- package/dist/baseline/create.js +339 -0
- package/dist/baseline/create.js.map +1 -0
- package/dist/baseline/entry-to-located.d.ts +35 -0
- package/dist/baseline/entry-to-located.d.ts.map +1 -0
- package/dist/baseline/entry-to-located.js +72 -0
- package/dist/baseline/entry-to-located.js.map +1 -0
- package/dist/baseline/finding-identity.d.ts +47 -0
- package/dist/baseline/finding-identity.d.ts.map +1 -0
- package/dist/baseline/finding-identity.js +292 -0
- package/dist/baseline/finding-identity.js.map +1 -0
- package/dist/baseline/git-aware-match.d.ts +146 -0
- package/dist/baseline/git-aware-match.d.ts.map +1 -0
- package/dist/baseline/git-aware-match.js +439 -0
- package/dist/baseline/git-aware-match.js.map +1 -0
- package/dist/baseline/policy.d.ts +171 -0
- package/dist/baseline/policy.d.ts.map +1 -0
- package/dist/baseline/policy.js +206 -0
- package/dist/baseline/policy.js.map +1 -0
- package/dist/baseline/producers/health.d.ts +30 -0
- package/dist/baseline/producers/health.d.ts.map +1 -0
- package/dist/baseline/producers/health.js +42 -0
- package/dist/baseline/producers/health.js.map +1 -0
- package/dist/baseline/producers/index.d.ts +164 -0
- package/dist/baseline/producers/index.d.ts.map +1 -0
- package/dist/baseline/producers/index.js +200 -0
- package/dist/baseline/producers/index.js.map +1 -0
- package/dist/baseline/producers/licenses.d.ts +23 -0
- package/dist/baseline/producers/licenses.d.ts.map +1 -0
- package/dist/baseline/producers/licenses.js +46 -0
- package/dist/baseline/producers/licenses.js.map +1 -0
- package/dist/baseline/producers/quality.d.ts +39 -0
- package/dist/baseline/producers/quality.d.ts.map +1 -0
- package/dist/baseline/producers/quality.js +84 -0
- package/dist/baseline/producers/quality.js.map +1 -0
- package/dist/baseline/producers/secret-hmac.d.ts +45 -0
- package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
- package/dist/baseline/producers/secret-hmac.js +70 -0
- package/dist/baseline/producers/secret-hmac.js.map +1 -0
- package/dist/baseline/producers/security.d.ts +59 -0
- package/dist/baseline/producers/security.d.ts.map +1 -0
- package/dist/baseline/producers/security.js +135 -0
- package/dist/baseline/producers/security.js.map +1 -0
- package/dist/baseline/producers/tests.d.ts +36 -0
- package/dist/baseline/producers/tests.d.ts.map +1 -0
- package/dist/baseline/producers/tests.js +69 -0
- package/dist/baseline/producers/tests.js.map +1 -0
- package/dist/baseline/salt.d.ts +45 -0
- package/dist/baseline/salt.d.ts.map +1 -0
- package/dist/baseline/salt.js +113 -0
- package/dist/baseline/salt.js.map +1 -0
- package/dist/baseline/show.d.ts +79 -0
- package/dist/baseline/show.d.ts.map +1 -0
- package/dist/baseline/show.js +233 -0
- package/dist/baseline/show.js.map +1 -0
- package/dist/baseline/types.d.ts +482 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +53 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +360 -81
- package/dist/cli.js.map +1 -1
- package/dist/codebase-scanner.d.ts.map +1 -1
- package/dist/codebase-scanner.js +0 -1
- package/dist/codebase-scanner.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -4
- package/dist/constants.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +22 -25
- package/dist/doctor.js.map +1 -1
- package/dist/fail-on.d.ts +84 -0
- package/dist/fail-on.d.ts.map +1 -0
- package/dist/fail-on.js +128 -0
- package/dist/fail-on.js.map +1 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +2 -141
- package/dist/generator.js.map +1 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +0 -9
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +0 -15
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +0 -6
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +0 -11
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +0 -15
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +0 -6
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +0 -4
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +2 -28
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +26 -4
- package/dist/languages/typescript.js.map +1 -1
- package/dist/lib.d.ts +2 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +3 -6
- package/dist/lib.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -10
- package/dist/prompts.js.map +1 -1
- package/dist/report-schema.d.ts +42 -0
- package/dist/report-schema.d.ts.map +1 -0
- package/dist/report-schema.js +54 -0
- package/dist/report-schema.js.map +1 -0
- package/dist/ship-installers.d.ts +106 -0
- package/dist/ship-installers.d.ts.map +1 -0
- package/dist/ship-installers.js +415 -0
- package/dist/ship-installers.js.map +1 -0
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +0 -4
- package/dist/update.js.map +1 -1
- package/package.json +17 -11
- package/templates/.claude/agents/onboarding.md +5 -4
- package/templates/.claude/agents-available/codebase-explorer.md +1 -1
- package/templates/.claude/agents-available/debugger.md +2 -2
- package/templates/.claude/agents-available/health-auditor.md +2 -2
- package/templates/.claude/commands/doctor.md +20 -12
- package/templates/.claude/skills/build/SKILL.md.template +22 -30
- package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
- package/templates/.claude/skills/doctor/SKILL.md +24 -47
- package/templates/.claude/skills/gcloud/SKILL.md +5 -5
- package/templates/.claude/skills/learned/SKILL.md +1 -1
- package/templates/.claude/skills/pulumi/SKILL.md +2 -2
- package/templates/.claude/skills/quality/SKILL.md.template +4 -23
- package/templates/.claude/skills/review/SKILL.md.template +4 -3
- package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
- package/templates/.claude/skills/secrets/SKILL.md +20 -21
- package/templates/.claude/skills/session/SKILL.md +20 -31
- package/templates/.claude/skills/test/SKILL.md.template +1 -7
- package/templates/.devcontainer/devcontainer.json +81 -0
- package/templates/.devcontainer/install-agent-clis.sh +42 -0
- package/templates/.devcontainer/post-create.sh +67 -0
- package/templates/.githooks/pre-commit +55 -0
- package/templates/.githooks/pre-push +63 -0
- package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
- package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
- package/templates/CLAUDE.md.template +62 -196
- package/dist/project-yaml.d.ts +0 -13
- package/dist/project-yaml.d.ts.map +0 -1
- package/dist/project-yaml.js +0 -188
- package/dist/project-yaml.js.map +0 -1
- package/templates/.ai/README.md +0 -117
- package/templates/.ai/prompts/execution-prompt.md +0 -9
- package/templates/.ai/prompts/planning-prompt.md +0 -18
- package/templates/.ai/prompts/session-end-template.md +0 -182
- package/templates/.ai/prompts/session-end.md +0 -132
- package/templates/.ai/prompts/session-start.md +0 -109
- package/templates/.ai/prompts/step-by-step.md +0 -113
- package/templates/.ai/sessions/.gitkeep +0 -0
- package/templates/.claude/commands/setup-pr-review.md +0 -72
- package/templates/.devcontainer/Dockerfile.dev.template +0 -89
- package/templates/.devcontainer/devcontainer.json.template +0 -184
- package/templates/.devcontainer/docker-compose.yml.template +0 -105
- package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
- package/templates/.devcontainer/post-create.sh.template +0 -298
- package/templates/.github/workflows/ci.yml.template +0 -399
- package/templates/.github/workflows/quality.yml.template +0 -376
- package/templates/.pre-commit-config.yaml.template +0 -106
- package/templates/.project/config/edit_config.py +0 -275
- package/templates/.project/config/project_config.py +0 -894
- package/templates/.project/scripts/codegen/generate-all.sh +0 -20
- package/templates/.project/scripts/codegen/validate-all.sh +0 -17
- package/templates/.project/scripts/docs/generate-all.sh +0 -30
- package/templates/.project/scripts/docs/serve.sh +0 -20
- package/templates/.project/scripts/quality/fix-all.sh +0 -138
- package/templates/.project/scripts/quality/lint-go.sh +0 -34
- package/templates/.project/scripts/quality/lint-python.sh +0 -54
- package/templates/.project/scripts/quality/run-all.sh +0 -497
- package/templates/.project/scripts/session/commit.sh +0 -70
- package/templates/.project/scripts/session/create-pr.sh +0 -165
- package/templates/.project/scripts/session/end.sh +0 -207
- package/templates/.project/scripts/session/start.sh +0 -233
- package/templates/.project/scripts/setup/doctor.sh +0 -404
- package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
- package/templates/.project/scripts/sync/sync-template.sh +0 -328
- package/templates/.project/scripts/test/run-all.sh +0 -179
- package/templates/.project/scripts/test/run-quick.sh +0 -25
- package/templates/Makefile +0 -514
- package/templates/config/versions.yaml +0 -57
- package/templates/configs/go/.golangci.yml.template +0 -172
- package/templates/configs/go/go.mod.template +0 -15
- package/templates/configs/java/README.md +0 -6
- package/templates/configs/kotlin/README.md +0 -6
- package/templates/configs/node/package.json.template +0 -67
- package/templates/configs/node/tsconfig.json.template +0 -53
- package/templates/configs/python/pyproject.toml.template +0 -92
- package/templates/configs/python/pytest.ini.template +0 -64
- package/templates/configs/python/ruff.toml.template +0 -79
- package/templates/configs/ruby/README.md +0 -6
- package/templates/configs/rust/Cargo.toml.template +0 -51
- package/templates/configs/shared/.editorconfig +0 -67
- 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
|