javi-forge 1.1.0 → 1.3.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/ci-local/ci-local.sh +38 -10
- package/ci-local/hooks/pre-commit +10 -155
- package/ci-local/hooks/pre-push +12 -29
- package/dist/commands/ci.d.ts +33 -0
- package/dist/commands/ci.js +341 -0
- package/dist/commands/init.js +5 -0
- package/dist/index.js +39 -5
- package/dist/lib/docker.d.ts +43 -0
- package/dist/lib/docker.js +223 -0
- package/dist/ui/CI.d.ts +9 -0
- package/dist/ui/CI.js +91 -0
- package/package.json +9 -1
- package/ai-config/.skillignore +0 -15
- package/ai-config/AUTO_INVOKE.md +0 -300
- package/ai-config/agents/_TEMPLATE.md +0 -93
- package/ai-config/agents/business/api-designer.md +0 -1657
- package/ai-config/agents/business/business-analyst.md +0 -1331
- package/ai-config/agents/business/product-strategist.md +0 -206
- package/ai-config/agents/business/project-manager.md +0 -178
- package/ai-config/agents/business/requirements-analyst.md +0 -1277
- package/ai-config/agents/business/technical-writer.md +0 -1679
- package/ai-config/agents/creative/ux-designer.md +0 -205
- package/ai-config/agents/data-ai/ai-engineer.md +0 -487
- package/ai-config/agents/data-ai/analytics-engineer.md +0 -953
- package/ai-config/agents/data-ai/data-engineer.md +0 -173
- package/ai-config/agents/data-ai/data-scientist.md +0 -672
- package/ai-config/agents/data-ai/mlops-engineer.md +0 -814
- package/ai-config/agents/data-ai/prompt-engineer.md +0 -772
- package/ai-config/agents/development/angular-expert.md +0 -620
- package/ai-config/agents/development/backend-architect.md +0 -795
- package/ai-config/agents/development/database-specialist.md +0 -212
- package/ai-config/agents/development/frontend-specialist.md +0 -686
- package/ai-config/agents/development/fullstack-engineer.md +0 -668
- package/ai-config/agents/development/golang-pro.md +0 -338
- package/ai-config/agents/development/java-enterprise.md +0 -400
- package/ai-config/agents/development/javascript-pro.md +0 -422
- package/ai-config/agents/development/nextjs-pro.md +0 -474
- package/ai-config/agents/development/python-pro.md +0 -570
- package/ai-config/agents/development/react-pro.md +0 -487
- package/ai-config/agents/development/rust-pro.md +0 -246
- package/ai-config/agents/development/spring-boot-4-expert.md +0 -326
- package/ai-config/agents/development/typescript-pro.md +0 -336
- package/ai-config/agents/development/vue-specialist.md +0 -605
- package/ai-config/agents/infrastructure/cloud-architect.md +0 -472
- package/ai-config/agents/infrastructure/deployment-manager.md +0 -358
- package/ai-config/agents/infrastructure/devops-engineer.md +0 -455
- package/ai-config/agents/infrastructure/incident-responder.md +0 -519
- package/ai-config/agents/infrastructure/kubernetes-expert.md +0 -705
- package/ai-config/agents/infrastructure/monitoring-specialist.md +0 -674
- package/ai-config/agents/infrastructure/performance-engineer.md +0 -658
- package/ai-config/agents/orchestrator.md +0 -241
- package/ai-config/agents/quality/accessibility-auditor.md +0 -1204
- package/ai-config/agents/quality/code-reviewer-compact.md +0 -123
- package/ai-config/agents/quality/code-reviewer.md +0 -363
- package/ai-config/agents/quality/dependency-manager.md +0 -743
- package/ai-config/agents/quality/e2e-test-specialist.md +0 -1005
- package/ai-config/agents/quality/performance-tester.md +0 -1086
- package/ai-config/agents/quality/security-auditor.md +0 -133
- package/ai-config/agents/quality/test-engineer.md +0 -453
- package/ai-config/agents/specialists/api-designer.md +0 -87
- package/ai-config/agents/specialists/backend-architect.md +0 -73
- package/ai-config/agents/specialists/code-reviewer.md +0 -77
- package/ai-config/agents/specialists/db-optimizer.md +0 -75
- package/ai-config/agents/specialists/devops-engineer.md +0 -83
- package/ai-config/agents/specialists/documentation-writer.md +0 -78
- package/ai-config/agents/specialists/frontend-developer.md +0 -75
- package/ai-config/agents/specialists/performance-analyst.md +0 -82
- package/ai-config/agents/specialists/refactor-specialist.md +0 -74
- package/ai-config/agents/specialists/security-auditor.md +0 -74
- package/ai-config/agents/specialists/test-engineer.md +0 -81
- package/ai-config/agents/specialists/ux-consultant.md +0 -76
- package/ai-config/agents/specialized/agent-generator.md +0 -1190
- package/ai-config/agents/specialized/blockchain-developer.md +0 -149
- package/ai-config/agents/specialized/code-migrator.md +0 -892
- package/ai-config/agents/specialized/context-manager.md +0 -978
- package/ai-config/agents/specialized/documentation-writer.md +0 -1078
- package/ai-config/agents/specialized/ecommerce-expert.md +0 -1756
- package/ai-config/agents/specialized/embedded-engineer.md +0 -1714
- package/ai-config/agents/specialized/error-detective.md +0 -1034
- package/ai-config/agents/specialized/fintech-specialist.md +0 -1659
- package/ai-config/agents/specialized/freelance-project-planner-v2.md +0 -1988
- package/ai-config/agents/specialized/freelance-project-planner-v3.md +0 -2136
- package/ai-config/agents/specialized/freelance-project-planner-v4.md +0 -4503
- package/ai-config/agents/specialized/freelance-project-planner.md +0 -722
- package/ai-config/agents/specialized/game-developer.md +0 -1963
- package/ai-config/agents/specialized/healthcare-dev.md +0 -1620
- package/ai-config/agents/specialized/mobile-developer.md +0 -188
- package/ai-config/agents/specialized/parallel-plan-executor.md +0 -506
- package/ai-config/agents/specialized/plan-executor.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +0 -3493
- package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +0 -778
- package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +0 -918
- package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +0 -1537
- package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +0 -2633
- package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +0 -5610
- package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +0 -335
- package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +0 -215
- package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +0 -260
- package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +0 -379
- package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +0 -355
- package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +0 -279
- package/ai-config/agents/specialized/template-writer.md +0 -347
- package/ai-config/agents/specialized/test-runner.md +0 -99
- package/ai-config/agents/specialized/vibekanban-smart-worker.md +0 -244
- package/ai-config/agents/specialized/wave-executor.md +0 -138
- package/ai-config/agents/specialized/workflow-optimizer.md +0 -1114
- package/ai-config/commands/git/changelog.md +0 -32
- package/ai-config/commands/git/ci-local.md +0 -70
- package/ai-config/commands/git/commit.md +0 -35
- package/ai-config/commands/git/fix-issue.md +0 -23
- package/ai-config/commands/git/pr-create.md +0 -42
- package/ai-config/commands/git/pr-review.md +0 -50
- package/ai-config/commands/git/worktree.md +0 -39
- package/ai-config/commands/refactoring/cleanup.md +0 -24
- package/ai-config/commands/refactoring/dead-code.md +0 -40
- package/ai-config/commands/refactoring/extract.md +0 -31
- package/ai-config/commands/testing/e2e.md +0 -30
- package/ai-config/commands/testing/tdd.md +0 -36
- package/ai-config/commands/testing/test-coverage.md +0 -30
- package/ai-config/commands/testing/test-fix.md +0 -24
- package/ai-config/commands/workflow/generate-agents-md.md +0 -85
- package/ai-config/commands/workflow/planning.md +0 -47
- package/ai-config/commands/workflows/compound.md +0 -89
- package/ai-config/commands/workflows/diagnose.md +0 -70
- package/ai-config/commands/workflows/discover.md +0 -86
- package/ai-config/commands/workflows/plan.md +0 -77
- package/ai-config/commands/workflows/review.md +0 -78
- package/ai-config/commands/workflows/work.md +0 -75
- package/ai-config/config.yaml +0 -18
- package/ai-config/hooks/_TEMPLATE.md +0 -96
- package/ai-config/hooks/block-dangerous-commands.md +0 -75
- package/ai-config/hooks/commit-guard.md +0 -90
- package/ai-config/hooks/context-loader.md +0 -73
- package/ai-config/hooks/improve-prompt.md +0 -91
- package/ai-config/hooks/learning-log.md +0 -72
- package/ai-config/hooks/model-router.md +0 -86
- package/ai-config/hooks/secret-scanner.md +0 -64
- package/ai-config/hooks/skill-validator.md +0 -102
- package/ai-config/hooks/task-artifact.md +0 -114
- package/ai-config/hooks/validate-workflow.md +0 -100
- package/ai-config/prompts/base.md +0 -71
- package/ai-config/prompts/modes/debug.md +0 -34
- package/ai-config/prompts/modes/deploy.md +0 -40
- package/ai-config/prompts/modes/research.md +0 -32
- package/ai-config/prompts/modes/review.md +0 -33
- package/ai-config/prompts/review-policy.md +0 -79
- package/ai-config/skills/_TEMPLATE.md +0 -157
- package/ai-config/skills/backend/api-gateway/SKILL.md +0 -254
- package/ai-config/skills/backend/bff-concepts/SKILL.md +0 -239
- package/ai-config/skills/backend/bff-spring/SKILL.md +0 -364
- package/ai-config/skills/backend/chi-router/SKILL.md +0 -396
- package/ai-config/skills/backend/error-handling/SKILL.md +0 -255
- package/ai-config/skills/backend/exceptions-spring/SKILL.md +0 -323
- package/ai-config/skills/backend/fastapi/SKILL.md +0 -302
- package/ai-config/skills/backend/gateway-spring/SKILL.md +0 -390
- package/ai-config/skills/backend/go-backend/SKILL.md +0 -457
- package/ai-config/skills/backend/gradle-multimodule/SKILL.md +0 -274
- package/ai-config/skills/backend/graphql-concepts/SKILL.md +0 -352
- package/ai-config/skills/backend/graphql-spring/SKILL.md +0 -398
- package/ai-config/skills/backend/grpc-concepts/SKILL.md +0 -283
- package/ai-config/skills/backend/grpc-spring/SKILL.md +0 -445
- package/ai-config/skills/backend/jwt-auth/SKILL.md +0 -412
- package/ai-config/skills/backend/notifications-concepts/SKILL.md +0 -259
- package/ai-config/skills/backend/recommendations-concepts/SKILL.md +0 -261
- package/ai-config/skills/backend/search-concepts/SKILL.md +0 -263
- package/ai-config/skills/backend/search-spring/SKILL.md +0 -375
- package/ai-config/skills/backend/spring-boot-4/SKILL.md +0 -172
- package/ai-config/skills/backend/websockets/SKILL.md +0 -532
- package/ai-config/skills/data-ai/ai-ml/SKILL.md +0 -423
- package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +0 -195
- package/ai-config/skills/data-ai/analytics-spring/SKILL.md +0 -340
- package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +0 -440
- package/ai-config/skills/data-ai/langchain/SKILL.md +0 -238
- package/ai-config/skills/data-ai/mlflow/SKILL.md +0 -302
- package/ai-config/skills/data-ai/onnx-inference/SKILL.md +0 -290
- package/ai-config/skills/data-ai/powerbi/SKILL.md +0 -352
- package/ai-config/skills/data-ai/pytorch/SKILL.md +0 -274
- package/ai-config/skills/data-ai/scikit-learn/SKILL.md +0 -321
- package/ai-config/skills/data-ai/vector-db/SKILL.md +0 -301
- package/ai-config/skills/database/graph-databases/SKILL.md +0 -218
- package/ai-config/skills/database/graph-spring/SKILL.md +0 -361
- package/ai-config/skills/database/pgx-postgres/SKILL.md +0 -512
- package/ai-config/skills/database/redis-cache/SKILL.md +0 -343
- package/ai-config/skills/database/sqlite-embedded/SKILL.md +0 -388
- package/ai-config/skills/database/timescaledb/SKILL.md +0 -320
- package/ai-config/skills/docs/api-documentation/SKILL.md +0 -293
- package/ai-config/skills/docs/docs-spring/SKILL.md +0 -377
- package/ai-config/skills/docs/mustache-templates/SKILL.md +0 -190
- package/ai-config/skills/docs/technical-docs/SKILL.md +0 -447
- package/ai-config/skills/frontend/astro-ssr/SKILL.md +0 -441
- package/ai-config/skills/frontend/frontend-design/SKILL.md +0 -54
- package/ai-config/skills/frontend/frontend-web/SKILL.md +0 -368
- package/ai-config/skills/frontend/mantine-ui/SKILL.md +0 -396
- package/ai-config/skills/frontend/tanstack-query/SKILL.md +0 -439
- package/ai-config/skills/frontend/zod-validation/SKILL.md +0 -417
- package/ai-config/skills/frontend/zustand-state/SKILL.md +0 -350
- package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +0 -244
- package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +0 -378
- package/ai-config/skills/infrastructure/devops-infra/SKILL.md +0 -435
- package/ai-config/skills/infrastructure/docker-containers/SKILL.md +0 -420
- package/ai-config/skills/infrastructure/kubernetes/SKILL.md +0 -456
- package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +0 -546
- package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +0 -474
- package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +0 -315
- package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +0 -504
- package/ai-config/skills/mobile/mobile-ionic/SKILL.md +0 -448
- package/ai-config/skills/prompt-improver/SKILL.md +0 -125
- package/ai-config/skills/quality/ghagga-review/SKILL.md +0 -216
- package/ai-config/skills/references/hooks-patterns/SKILL.md +0 -238
- package/ai-config/skills/references/mcp-servers/SKILL.md +0 -275
- package/ai-config/skills/references/plugins-reference/SKILL.md +0 -110
- package/ai-config/skills/references/skills-reference/SKILL.md +0 -420
- package/ai-config/skills/references/subagent-templates/SKILL.md +0 -193
- package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +0 -410
- package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +0 -408
- package/ai-config/skills/systems-iot/rust-systems/SKILL.md +0 -386
- package/ai-config/skills/systems-iot/tokio-async/SKILL.md +0 -324
- package/ai-config/skills/testing/playwright-e2e/SKILL.md +0 -289
- package/ai-config/skills/testing/testcontainers/SKILL.md +0 -299
- package/ai-config/skills/testing/vitest-testing/SKILL.md +0 -381
- package/ai-config/skills/workflow/ci-local-guide/SKILL.md +0 -118
- package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +0 -299
- package/ai-config/skills/workflow/claude-md-improver/SKILL.md +0 -158
- package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +0 -117
- package/ai-config/skills/workflow/git-github/SKILL.md +0 -334
- package/ai-config/skills/workflow/git-github/references/examples.md +0 -160
- package/ai-config/skills/workflow/git-workflow/SKILL.md +0 -214
- package/ai-config/skills/workflow/ide-plugins/SKILL.md +0 -277
- package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +0 -401
- package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +0 -199
- package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +0 -100
- package/ai-config/skills/workflow/verification-before-completion/SKILL.md +0 -73
- package/ai-config/skills/workflow/wave-workflow/SKILL.md +0 -178
- package/schemas/agent.schema.json +0 -34
- package/schemas/ai-config.schema.json +0 -28
- package/schemas/plugin.schema.json +0 -62
- package/schemas/skill.schema.json +0 -44
package/ci-local/ci-local.sh
CHANGED
|
@@ -35,20 +35,41 @@ setup_ci_commands() {
|
|
|
35
35
|
java-gradle)
|
|
36
36
|
DOCKERFILE="java.Dockerfile"
|
|
37
37
|
LINT_CMD="./gradlew spotlessCheck --no-daemon"
|
|
38
|
-
|
|
38
|
+
# Pre-clean to avoid permission conflicts with host-created build dirs
|
|
39
|
+
# chown so tests (as runner) can access the output
|
|
40
|
+
COMPILE_CMD="./gradlew clean classes testClasses --no-daemon && chown -R runner:runner build .gradle 2>/dev/null || true"
|
|
39
41
|
TEST_CMD="./gradlew test --no-daemon"
|
|
40
42
|
;;
|
|
41
43
|
java-maven)
|
|
42
44
|
DOCKERFILE="java.Dockerfile"
|
|
43
45
|
LINT_CMD="./mvnw spotless:check"
|
|
44
|
-
|
|
46
|
+
# Pre-clean to avoid permission conflicts with host-created target dirs
|
|
47
|
+
COMPILE_CMD="./mvnw clean compile test-compile && chown -R runner:runner target .mvn 2>/dev/null || true"
|
|
45
48
|
TEST_CMD="./mvnw test"
|
|
46
49
|
;;
|
|
47
50
|
node)
|
|
48
51
|
DOCKERFILE="node.Dockerfile"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
# Only set lint if the script exists in package.json
|
|
53
|
+
if grep -q '"lint"' "$PROJECT_DIR/package.json" 2>/dev/null; then
|
|
54
|
+
LINT_CMD="$BUILD_TOOL run lint"
|
|
55
|
+
else
|
|
56
|
+
LINT_CMD=""
|
|
57
|
+
fi
|
|
58
|
+
# Only set compile if build script exists
|
|
59
|
+
# Pre-clean dist/ and build/ to avoid EACCES errors when the host
|
|
60
|
+
# created those dirs as a different user (e.g. root from a previous run).
|
|
61
|
+
# chown back to runner so subsequent steps can read the output.
|
|
62
|
+
if grep -q '"build"' "$PROJECT_DIR/package.json" 2>/dev/null; then
|
|
63
|
+
COMPILE_CMD="rm -rf dist build && $BUILD_TOOL run build && chown -R runner:runner dist build 2>/dev/null || true"
|
|
64
|
+
else
|
|
65
|
+
COMPILE_CMD=""
|
|
66
|
+
fi
|
|
67
|
+
# Only set test if test script exists
|
|
68
|
+
if grep -q '"test"' "$PROJECT_DIR/package.json" 2>/dev/null; then
|
|
69
|
+
TEST_CMD="$BUILD_TOOL test"
|
|
70
|
+
else
|
|
71
|
+
TEST_CMD=""
|
|
72
|
+
fi
|
|
52
73
|
;;
|
|
53
74
|
python)
|
|
54
75
|
DOCKERFILE="python.Dockerfile"
|
|
@@ -59,13 +80,15 @@ setup_ci_commands() {
|
|
|
59
80
|
go)
|
|
60
81
|
DOCKERFILE="go.Dockerfile"
|
|
61
82
|
LINT_CMD="golangci-lint run"
|
|
62
|
-
|
|
83
|
+
# Pre-clean to avoid permission conflicts with host-created build cache
|
|
84
|
+
COMPILE_CMD="go clean -cache && go build ./... && chown -R runner:runner . 2>/dev/null || true"
|
|
63
85
|
TEST_CMD="go test ./..."
|
|
64
86
|
;;
|
|
65
87
|
rust)
|
|
66
88
|
DOCKERFILE="rust.Dockerfile"
|
|
67
89
|
LINT_CMD="cargo clippy -- -D warnings"
|
|
68
|
-
|
|
90
|
+
# Pre-clean to avoid permission conflicts with host-created target dir
|
|
91
|
+
COMPILE_CMD="cargo clean && cargo build && chown -R runner:runner target 2>/dev/null || true"
|
|
69
92
|
TEST_CMD="cargo test"
|
|
70
93
|
;;
|
|
71
94
|
*)
|
|
@@ -194,6 +217,9 @@ ensure_docker_image() {
|
|
|
194
217
|
run_in_ci() {
|
|
195
218
|
local image_name
|
|
196
219
|
image_name=$(get_image_name)
|
|
220
|
+
# $1 = command, $2 = user override (default: runner)
|
|
221
|
+
local cmd="$1"
|
|
222
|
+
local run_user="${2:-runner}"
|
|
197
223
|
local -a docker_flags=(--rm)
|
|
198
224
|
if [ -t 0 ]; then
|
|
199
225
|
docker_flags+=(-it)
|
|
@@ -206,9 +232,11 @@ run_in_ci() {
|
|
|
206
232
|
fi
|
|
207
233
|
docker run "${docker_flags[@]}" \
|
|
208
234
|
--stop-timeout 30 \
|
|
235
|
+
--entrypoint "" \
|
|
236
|
+
--user "$run_user" \
|
|
209
237
|
-v "$PROJECT_DIR:/home/runner/work" \
|
|
210
238
|
-e CI=true \
|
|
211
|
-
"$image_name" timeout "$timeout" bash -c "$
|
|
239
|
+
"$image_name" timeout "$timeout" bash -c "$cmd"
|
|
212
240
|
}
|
|
213
241
|
|
|
214
242
|
# =============================================================================
|
|
@@ -253,7 +281,7 @@ case "$MODE" in
|
|
|
253
281
|
fi
|
|
254
282
|
if [[ -n "$COMPILE_CMD" ]]; then
|
|
255
283
|
echo -e "${CYAN}Compile: $COMPILE_CMD${NC}"
|
|
256
|
-
run_in_ci "cd /home/runner/work && $COMPILE_CMD"
|
|
284
|
+
run_in_ci "cd /home/runner/work && $COMPILE_CMD" root
|
|
257
285
|
fi
|
|
258
286
|
;;
|
|
259
287
|
|
|
@@ -288,7 +316,7 @@ case "$MODE" in
|
|
|
288
316
|
if [[ -n "$COMPILE_CMD" ]]; then
|
|
289
317
|
echo -e "\n${YELLOW}Step $step/$total: Compile${NC}"
|
|
290
318
|
echo -e " ${CYAN}$COMPILE_CMD${NC}"
|
|
291
|
-
run_in_ci "cd /home/runner/work && $COMPILE_CMD"
|
|
319
|
+
run_in_ci "cd /home/runner/work && $COMPILE_CMD" root
|
|
292
320
|
step=$((step + 1))
|
|
293
321
|
fi
|
|
294
322
|
|
|
@@ -1,162 +1,17 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# =============================================================================
|
|
3
|
-
# PRE-COMMIT:
|
|
3
|
+
# PRE-COMMIT: Quick CI check via javi-forge
|
|
4
4
|
# =============================================================================
|
|
5
|
-
#
|
|
6
|
-
#
|
|
5
|
+
# Requires: npm install -g javi-forge
|
|
6
|
+
# To skip: git commit --no-verify
|
|
7
7
|
# =============================================================================
|
|
8
8
|
|
|
9
9
|
set -e
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
echo "Warning: .ci-local not found, skipping pre-commit checks"
|
|
19
|
-
exit 0
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
PROJECT_DIR="$(dirname "$CI_LOCAL_DIR")"
|
|
23
|
-
|
|
24
|
-
# Source shared library for colors and detect_stack
|
|
25
|
-
source "$CI_LOCAL_DIR/../lib/common.sh"
|
|
26
|
-
|
|
27
|
-
echo -e "${YELLOW}[pre-commit] Running quick checks...${NC}"
|
|
28
|
-
|
|
29
|
-
# =============================================================================
|
|
30
|
-
# CHECK: No AI attribution in staged files
|
|
31
|
-
# =============================================================================
|
|
32
|
-
echo -e "${YELLOW}[1/3] Checking for AI attribution...${NC}"
|
|
33
|
-
|
|
34
|
-
# Patrones prohibidos (case insensitive)
|
|
35
|
-
AI_PATTERNS=(
|
|
36
|
-
"co-authored-by:.*claude"
|
|
37
|
-
"co-authored-by:.*anthropic"
|
|
38
|
-
"co-authored-by:.*gpt"
|
|
39
|
-
"co-authored-by:.*openai"
|
|
40
|
-
"co-authored-by:.*copilot"
|
|
41
|
-
"co-authored-by:.*gemini"
|
|
42
|
-
"co-authored-by:.*\bai\b"
|
|
43
|
-
"made by claude"
|
|
44
|
-
"made by gpt"
|
|
45
|
-
"made by ai"
|
|
46
|
-
"generated by claude"
|
|
47
|
-
"generated by gpt"
|
|
48
|
-
"generated by ai"
|
|
49
|
-
"generated with claude"
|
|
50
|
-
"generated with ai"
|
|
51
|
-
"written by claude"
|
|
52
|
-
"written by ai"
|
|
53
|
-
"created by claude"
|
|
54
|
-
"created by ai"
|
|
55
|
-
"assisted by claude"
|
|
56
|
-
"assisted by ai"
|
|
57
|
-
"with help from claude"
|
|
58
|
-
"claude code"
|
|
59
|
-
"made by anthropic"
|
|
60
|
-
"powered by anthropic"
|
|
61
|
-
"created by anthropic"
|
|
62
|
-
"made by openai"
|
|
63
|
-
"powered by openai"
|
|
64
|
-
"created by openai"
|
|
65
|
-
"@anthropic.com"
|
|
66
|
-
"@openai.com"
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Check actual staged content using git show :0:file
|
|
70
|
-
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -vE '\.(png|jpg|jpeg|gif|ico|woff|ttf|eot|svg|lock)$' || true)
|
|
71
|
-
|
|
72
|
-
if [[ -n "$STAGED_FILES" ]]; then
|
|
73
|
-
for pattern in "${AI_PATTERNS[@]}"; do
|
|
74
|
-
while IFS= read -r file; do
|
|
75
|
-
[[ -z "$file" ]] && continue
|
|
76
|
-
if git show ":0:$file" 2>/dev/null | grep -iqE "$pattern"; then
|
|
77
|
-
echo -e "${RED}[BLOCKED] AI attribution found in staged content: $file${NC}"
|
|
78
|
-
echo -e "${RED} Pattern matched: $pattern${NC}"
|
|
79
|
-
git show ":0:$file" | grep -inE "$pattern" | head -3 | while IFS= read -r line; do
|
|
80
|
-
echo -e "${RED} $line${NC}"
|
|
81
|
-
done
|
|
82
|
-
echo ""
|
|
83
|
-
echo -e "${YELLOW}Remove AI attribution before committing.${NC}"
|
|
84
|
-
exit 1
|
|
85
|
-
fi
|
|
86
|
-
done <<< "$STAGED_FILES"
|
|
87
|
-
done
|
|
88
|
-
echo -e "${GREEN} No AI attribution found${NC}"
|
|
89
|
-
fi
|
|
90
|
-
|
|
91
|
-
# Semgrep security scan - native or Docker fallback
|
|
92
|
-
SEMGREP_CMD=""
|
|
93
|
-
SEMGREP_MODE=""
|
|
94
|
-
if command -v semgrep &> /dev/null; then
|
|
95
|
-
SEMGREP_CMD="native"
|
|
96
|
-
SEMGREP_MODE="native"
|
|
97
|
-
elif command -v docker &> /dev/null && docker info &> /dev/null 2>&1; then
|
|
98
|
-
SEMGREP_CMD="docker"
|
|
99
|
-
SEMGREP_MODE="Docker"
|
|
100
|
-
fi
|
|
101
|
-
|
|
102
|
-
if [[ -n "$SEMGREP_CMD" ]]; then
|
|
103
|
-
echo -e "${YELLOW}[2/3] Security scan (Semgrep via $SEMGREP_MODE)...${NC}"
|
|
104
|
-
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(java|kt|js|ts|py|go|rs)$' || true)
|
|
105
|
-
if [[ -n "$STAGED_FILES" ]]; then
|
|
106
|
-
if [[ "$SEMGREP_CMD" == "native" ]]; then
|
|
107
|
-
echo "$STAGED_FILES" | tr '\n' '\0' | xargs -0 semgrep --config=.ci-local/semgrep.yml --severity=ERROR --quiet 2>/dev/null || {
|
|
108
|
-
echo -e "${RED}Semgrep found issues${NC}"
|
|
109
|
-
exit 1
|
|
110
|
-
}
|
|
111
|
-
else
|
|
112
|
-
# Pipe file list via stdin into the container where xargs feeds it to semgrep
|
|
113
|
-
echo "$STAGED_FILES" | docker run --rm -i -v "${PROJECT_DIR}:/src" -w /src returntocorp/semgrep \
|
|
114
|
-
sh -c 'xargs semgrep --config=/src/.ci-local/semgrep.yml --severity=ERROR --quiet' 2>/dev/null || {
|
|
115
|
-
echo -e "${RED}Semgrep found issues${NC}"
|
|
116
|
-
exit 1
|
|
117
|
-
}
|
|
118
|
-
fi
|
|
119
|
-
echo -e "${GREEN}Security OK${NC}"
|
|
120
|
-
else
|
|
121
|
-
echo -e "${GREEN}No files to scan${NC}"
|
|
122
|
-
fi
|
|
123
|
-
else
|
|
124
|
-
echo -e "${YELLOW}[2/3] Semgrep not available, skipping (install semgrep or use Docker)${NC}"
|
|
125
|
-
fi
|
|
126
|
-
|
|
127
|
-
# Quick compile/lint basado en el stack
|
|
128
|
-
echo -e "${YELLOW}[3/3] Quick compile check...${NC}"
|
|
129
|
-
cd "$PROJECT_DIR"
|
|
130
|
-
|
|
131
|
-
# Use shared stack detection from lib/common.sh
|
|
132
|
-
detect_stack
|
|
133
|
-
|
|
134
|
-
case "$STACK_TYPE" in
|
|
135
|
-
java-gradle)
|
|
136
|
-
./gradlew spotlessCheck classes --no-daemon -q 2>/dev/null || {
|
|
137
|
-
echo -e "${RED}Gradle check failed. Run: ./gradlew spotlessApply${NC}"
|
|
138
|
-
exit 1
|
|
139
|
-
}
|
|
140
|
-
;;
|
|
141
|
-
java-maven)
|
|
142
|
-
./mvnw compile -q 2>/dev/null || exit 1
|
|
143
|
-
;;
|
|
144
|
-
node)
|
|
145
|
-
if [[ "$BUILD_TOOL" == "pnpm" ]]; then
|
|
146
|
-
pnpm lint --silent 2>/dev/null || exit 1
|
|
147
|
-
elif [[ "$BUILD_TOOL" == "yarn" ]]; then
|
|
148
|
-
yarn lint --silent 2>/dev/null || exit 1
|
|
149
|
-
else
|
|
150
|
-
npm run lint --silent 2>/dev/null || exit 1
|
|
151
|
-
fi
|
|
152
|
-
;;
|
|
153
|
-
rust)
|
|
154
|
-
cargo check --quiet 2>/dev/null || exit 1
|
|
155
|
-
;;
|
|
156
|
-
go)
|
|
157
|
-
go build ./... 2>/dev/null || exit 1
|
|
158
|
-
;;
|
|
159
|
-
esac
|
|
160
|
-
|
|
161
|
-
echo -e "${GREEN}Compile OK${NC}"
|
|
162
|
-
echo -e "${GREEN}[pre-commit] All checks passed!${NC}"
|
|
11
|
+
echo "PRE-COMMIT: Running quick check..."
|
|
12
|
+
javi-forge ci --quick --no-security --no-ghagga || {
|
|
13
|
+
echo ""
|
|
14
|
+
echo "Quick check FAILED — Fix the issues above before committing."
|
|
15
|
+
echo "To skip: git commit --no-verify"
|
|
16
|
+
exit 1
|
|
17
|
+
}
|
package/ci-local/hooks/pre-push
CHANGED
|
@@ -1,41 +1,24 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# =============================================================================
|
|
3
|
-
# PRE-PUSH: Full CI simulation
|
|
3
|
+
# PRE-PUSH: Full CI simulation via javi-forge
|
|
4
4
|
# =============================================================================
|
|
5
|
-
#
|
|
6
|
-
#
|
|
5
|
+
# Requires: npm install -g javi-forge
|
|
6
|
+
# To skip: git push --no-verify
|
|
7
7
|
# =============================================================================
|
|
8
8
|
|
|
9
9
|
set -e
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
if
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
echo "Warning: .ci-local not found, skipping pre-push CI simulation"
|
|
16
|
-
exit 0
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
# Source shared library for colors
|
|
20
|
-
source "$CI_LOCAL_DIR/../lib/common.sh"
|
|
21
|
-
|
|
22
|
-
echo -e "${BLUE}PRE-PUSH: CI Simulation${NC}"
|
|
23
|
-
|
|
24
|
-
# Verificar Docker
|
|
25
|
-
if ! docker info &> /dev/null; then
|
|
26
|
-
echo -e "${RED}Docker is not running.${NC}"
|
|
27
|
-
echo -e "${YELLOW} Start Docker or use: git push --no-verify${NC}"
|
|
11
|
+
# Verify Docker is running
|
|
12
|
+
if ! docker info &>/dev/null; then
|
|
13
|
+
echo "PRE-PUSH: Docker is not running."
|
|
14
|
+
echo " Start Docker or use: git push --no-verify"
|
|
28
15
|
exit 1
|
|
29
16
|
fi
|
|
30
17
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
echo
|
|
34
|
-
echo
|
|
35
|
-
echo
|
|
36
|
-
echo -e "${RED}To skip: git push --no-verify${NC}"
|
|
18
|
+
echo "PRE-PUSH: Running CI simulation..."
|
|
19
|
+
javi-forge ci || {
|
|
20
|
+
echo ""
|
|
21
|
+
echo "CI FAILED — Push aborted. Fix the issues above before pushing."
|
|
22
|
+
echo "To skip: git push --no-verify"
|
|
37
23
|
exit 1
|
|
38
24
|
}
|
|
39
|
-
|
|
40
|
-
echo -e ""
|
|
41
|
-
echo -e "${GREEN}CI Simulation PASSED - Safe to push!${NC}"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Stack } from '../types/index.js';
|
|
2
|
+
export type CIMode = 'full' | 'quick' | 'shell' | 'detect';
|
|
3
|
+
export interface CIOptions {
|
|
4
|
+
projectDir?: string;
|
|
5
|
+
mode?: CIMode;
|
|
6
|
+
/** Skip Docker entirely — run commands natively */
|
|
7
|
+
noDocker?: boolean;
|
|
8
|
+
/** Skip GHAGGA review step */
|
|
9
|
+
noGhagga?: boolean;
|
|
10
|
+
/** Skip Semgrep security scan */
|
|
11
|
+
noSecurity?: boolean;
|
|
12
|
+
/** Timeout in seconds for each Docker step (default: 600) */
|
|
13
|
+
timeout?: number;
|
|
14
|
+
}
|
|
15
|
+
export type CIStepStatus = 'pending' | 'running' | 'done' | 'error' | 'skipped';
|
|
16
|
+
export interface CIStep {
|
|
17
|
+
id: string;
|
|
18
|
+
label: string;
|
|
19
|
+
status: CIStepStatus;
|
|
20
|
+
detail?: string;
|
|
21
|
+
}
|
|
22
|
+
export type CIStepCallback = (step: CIStep) => void;
|
|
23
|
+
export interface CIStackInfo {
|
|
24
|
+
stackType: Stack;
|
|
25
|
+
buildTool: string;
|
|
26
|
+
javaVersion: string;
|
|
27
|
+
lintCmd: string | null;
|
|
28
|
+
compileCmd: string | null;
|
|
29
|
+
testCmd: string | null;
|
|
30
|
+
}
|
|
31
|
+
export declare function detectCIStack(projectDir: string): Promise<CIStackInfo>;
|
|
32
|
+
export declare function runCI(options: CIOptions, onStep: CIStepCallback): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=ci.d.ts.map
|