generalize runtime ownership with doctor and local skill migration
This commit is contained in:
288
runtime/claude/hooks-config.json
Normal file
288
runtime/claude/hooks-config.json
Normal file
@@ -0,0 +1,288 @@
|
||||
{
|
||||
"name": "Universal Atomic Code Implementer Hooks",
|
||||
"description": "Comprehensive hooks configuration for quality enforcement and automatic remediation",
|
||||
"version": "1.0.0",
|
||||
"hooks": {
|
||||
"PostToolUse": [
|
||||
{
|
||||
"matcher": "Write|Edit|MultiEdit",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "bash",
|
||||
"args": [
|
||||
"-c",
|
||||
"echo '[HOOK] Universal quality enforcement for $FILE_PATH'; if [[ \"$FILE_PATH\" == *.ts || \"$FILE_PATH\" == *.tsx ]]; then echo '[HOOK] TypeScript checks'; npx eslint --fix \"$FILE_PATH\" && npx prettier --write \"$FILE_PATH\" && npx tsc --noEmit || echo '[HOOK] TS completed'; elif [[ \"$FILE_PATH\" == *.js || \"$FILE_PATH\" == *.jsx ]]; then echo '[HOOK] JavaScript checks'; npx eslint --fix \"$FILE_PATH\" && npx prettier --write \"$FILE_PATH\" || echo '[HOOK] JS completed'; elif [[ \"$FILE_PATH\" == *.py ]]; then echo '[HOOK] Python checks'; black \"$FILE_PATH\" && flake8 \"$FILE_PATH\" && mypy \"$FILE_PATH\" || echo '[HOOK] Python completed'; fi"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"fileTypeHooks": {
|
||||
"*.ts": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] TypeScript file modified: ${FILE_PATH}'",
|
||||
"npx eslint --fix ${FILE_PATH}",
|
||||
"npx prettier --write ${FILE_PATH}",
|
||||
"npx tsc --noEmit --project tsconfig.json"
|
||||
],
|
||||
"beforeDelete": [
|
||||
"echo '[HOOK] Checking for TypeScript file dependencies before deletion'"
|
||||
]
|
||||
},
|
||||
"*.tsx": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] React TypeScript file modified: ${FILE_PATH}'",
|
||||
"npx eslint --fix ${FILE_PATH}",
|
||||
"npx prettier --write ${FILE_PATH}",
|
||||
"npx tsc --noEmit --project tsconfig.json",
|
||||
"if command -v npm >/dev/null 2>&1; then",
|
||||
" npm run test:component -- ${FILE_NAME} 2>/dev/null || echo '[HOOK] Component tests checked'",
|
||||
"fi"
|
||||
]
|
||||
},
|
||||
"*.js": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] JavaScript file modified: ${FILE_PATH}'",
|
||||
"npx eslint --fix ${FILE_PATH}",
|
||||
"npx prettier --write ${FILE_PATH}"
|
||||
]
|
||||
},
|
||||
"*.jsx": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] React JavaScript file modified: ${FILE_PATH}'",
|
||||
"npx eslint --fix ${FILE_PATH}",
|
||||
"npx prettier --write ${FILE_PATH}",
|
||||
"if command -v npm >/dev/null 2>&1; then",
|
||||
" npm run test:component -- ${FILE_NAME} 2>/dev/null || echo '[HOOK] Component tests checked'",
|
||||
"fi"
|
||||
]
|
||||
},
|
||||
"*.py": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] Python file modified: ${FILE_PATH}'",
|
||||
"black ${FILE_PATH}",
|
||||
"flake8 ${FILE_PATH} || echo '[HOOK] Flake8 linting completed'",
|
||||
"mypy ${FILE_PATH} || echo '[HOOK] MyPy type checking completed'",
|
||||
"if command -v pytest >/dev/null 2>&1; then",
|
||||
" pytest ${FILE_PATH%.*}_test.py 2>/dev/null || echo '[HOOK] Python tests checked'",
|
||||
"fi"
|
||||
]
|
||||
},
|
||||
"package.json": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] package.json modified, updating dependencies'",
|
||||
"npm install --no-audit --no-fund || echo '[HOOK] Dependency update completed'"
|
||||
]
|
||||
},
|
||||
"requirements.txt": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] requirements.txt modified, updating Python dependencies'",
|
||||
"pip install -r requirements.txt || echo '[HOOK] Python dependency update completed'"
|
||||
]
|
||||
},
|
||||
"*.json": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] JSON file modified: ${FILE_PATH}'",
|
||||
"if command -v jq >/dev/null 2>&1; then",
|
||||
" jq . ${FILE_PATH} > /dev/null || echo '[HOOK] JSON validation failed'",
|
||||
"fi"
|
||||
]
|
||||
},
|
||||
"*.md": {
|
||||
"afterChange": [
|
||||
"echo '[HOOK] Markdown file modified: ${FILE_PATH}'",
|
||||
"if command -v prettier >/dev/null 2>&1; then",
|
||||
" npx prettier --write ${FILE_PATH} || echo '[HOOK] Markdown formatting completed'",
|
||||
"fi"
|
||||
]
|
||||
}
|
||||
},
|
||||
"remediationActions": {
|
||||
"RETRY_OPERATION": {
|
||||
"description": "Retry the last file operation after applying fixes",
|
||||
"maxRetries": 2,
|
||||
"backoffMs": 1000
|
||||
},
|
||||
"CONTINUE_WITH_WARNING": {
|
||||
"description": "Continue execution but log warnings for manual review",
|
||||
"logLevel": "warning"
|
||||
},
|
||||
"ABORT_WITH_ERROR": {
|
||||
"description": "Stop execution and require manual intervention",
|
||||
"logLevel": "error"
|
||||
},
|
||||
"TRIGGER_QA_AGENT": {
|
||||
"description": "Escalate to QA validation agent for complex issues",
|
||||
"agent": "qa-validation-agent"
|
||||
},
|
||||
"REQUEST_CONTEXT7_HELP": {
|
||||
"description": "Look up documentation for error resolution",
|
||||
"tool": "mcp__context7__get-library-docs"
|
||||
}
|
||||
},
|
||||
"qualityGates": {
|
||||
"typescript": {
|
||||
"eslint": {
|
||||
"enabled": true,
|
||||
"config": ".eslintrc.js",
|
||||
"autoFix": true,
|
||||
"failOnError": false
|
||||
},
|
||||
"prettier": {
|
||||
"enabled": true,
|
||||
"config": ".prettierrc",
|
||||
"autoFix": true
|
||||
},
|
||||
"typeCheck": {
|
||||
"enabled": true,
|
||||
"config": "tsconfig.json",
|
||||
"failOnError": false
|
||||
},
|
||||
"testing": {
|
||||
"enabled": true,
|
||||
"runAffected": true,
|
||||
"coverage": 80
|
||||
}
|
||||
},
|
||||
"python": {
|
||||
"black": {
|
||||
"enabled": true,
|
||||
"lineLength": 88,
|
||||
"autoFix": true
|
||||
},
|
||||
"flake8": {
|
||||
"enabled": true,
|
||||
"config": ".flake8",
|
||||
"failOnError": false
|
||||
},
|
||||
"mypy": {
|
||||
"enabled": true,
|
||||
"config": "mypy.ini",
|
||||
"failOnError": false
|
||||
},
|
||||
"pytest": {
|
||||
"enabled": true,
|
||||
"coverage": 90
|
||||
}
|
||||
},
|
||||
"javascript": {
|
||||
"eslint": {
|
||||
"enabled": true,
|
||||
"autoFix": true
|
||||
},
|
||||
"prettier": {
|
||||
"enabled": true,
|
||||
"autoFix": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"performanceOptimization": {
|
||||
"parallelExecution": {
|
||||
"enabled": true,
|
||||
"maxConcurrency": 4
|
||||
},
|
||||
"caching": {
|
||||
"enabled": true,
|
||||
"eslint": true,
|
||||
"prettier": true,
|
||||
"typescript": true
|
||||
},
|
||||
"incrementalChecks": {
|
||||
"enabled": true,
|
||||
"onlyModifiedFiles": true
|
||||
}
|
||||
},
|
||||
"monitoring": {
|
||||
"metrics": {
|
||||
"hookExecutionTime": true,
|
||||
"errorRates": true,
|
||||
"remediationSuccess": true
|
||||
},
|
||||
"logging": {
|
||||
"level": "info",
|
||||
"format": "json",
|
||||
"includeStackTrace": true
|
||||
},
|
||||
"alerts": {
|
||||
"highErrorRate": {
|
||||
"threshold": 0.1,
|
||||
"action": "log"
|
||||
},
|
||||
"slowHookExecution": {
|
||||
"thresholdMs": 10000,
|
||||
"action": "log"
|
||||
}
|
||||
}
|
||||
},
|
||||
"integration": {
|
||||
"presets": {
|
||||
"loadHooksFromPresets": true,
|
||||
"overrideWithProjectConfig": true
|
||||
},
|
||||
"cicd": {
|
||||
"skipInCI": false,
|
||||
"reportToCI": true
|
||||
},
|
||||
"ide": {
|
||||
"vscode": {
|
||||
"showNotifications": true,
|
||||
"autoSave": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"customCommands": {
|
||||
"fullQualityCheck": {
|
||||
"description": "Run comprehensive quality checks",
|
||||
"commands": [
|
||||
"npm run lint",
|
||||
"npm run format",
|
||||
"npm run build",
|
||||
"npm run test",
|
||||
"npm run type-check"
|
||||
]
|
||||
},
|
||||
"securityScan": {
|
||||
"description": "Run security scanning",
|
||||
"commands": [
|
||||
"npm audit",
|
||||
"npx eslint . --ext .ts,.tsx,.js,.jsx --config .eslintrc.security.js || echo 'Security scan completed'"
|
||||
]
|
||||
},
|
||||
"performanceCheck": {
|
||||
"description": "Run performance analysis",
|
||||
"commands": [
|
||||
"npm run build:analyze || echo 'Bundle analysis completed'",
|
||||
"npm run lighthouse || echo 'Lighthouse audit completed'"
|
||||
]
|
||||
}
|
||||
},
|
||||
"documentation": {
|
||||
"usage": "This configuration provides comprehensive quality enforcement through hooks",
|
||||
"examples": [
|
||||
{
|
||||
"scenario": "TypeScript file creation",
|
||||
"flow": "Write file → ESLint auto-fix → Prettier format → TypeScript check → Tests"
|
||||
},
|
||||
{
|
||||
"scenario": "Python file modification",
|
||||
"flow": "Edit file → Black format → Flake8 lint → MyPy type check → Pytest"
|
||||
},
|
||||
{
|
||||
"scenario": "Build error",
|
||||
"flow": "Error detected → Analyze common issues → Apply fixes → Retry or continue"
|
||||
}
|
||||
],
|
||||
"troubleshooting": [
|
||||
{
|
||||
"issue": "Hooks taking too long",
|
||||
"solution": "Enable parallelExecution and incremental checks"
|
||||
},
|
||||
{
|
||||
"issue": "False positive errors",
|
||||
"solution": "Adjust quality gate thresholds or use CONTINUE_WITH_WARNING"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user