codeforge-dev 1.11.0 → 1.13.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/.devcontainer/.env +7 -1
- package/.devcontainer/.gitignore +1 -0
- package/.devcontainer/CHANGELOG.md +106 -0
- package/.devcontainer/CLAUDE.md +93 -15
- package/.devcontainer/README.md +44 -10
- package/.devcontainer/config/defaults/main-system-prompt.md +28 -0
- package/.devcontainer/config/defaults/rules/workspace-scope.md +13 -4
- package/.devcontainer/config/defaults/settings.json +5 -3
- package/.devcontainer/config/defaults/writing-system-prompt.md +46 -4
- package/.devcontainer/connect-external-terminal.ps1 +1 -1
- package/.devcontainer/devcontainer.json +41 -11
- package/.devcontainer/docs/configuration-reference.md +3 -0
- package/.devcontainer/docs/plugins.md +9 -2
- package/.devcontainer/docs/troubleshooting.md +2 -2
- package/.devcontainer/features/README.md +8 -9
- package/.devcontainer/features/agent-browser/devcontainer-feature.json +21 -21
- package/.devcontainer/features/agent-browser/install.sh +0 -7
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +22 -22
- package/.devcontainer/features/biome/devcontainer-feature.json +12 -14
- package/.devcontainer/features/ccms/install.sh +30 -13
- package/.devcontainer/features/claude-session-dashboard/README.md +40 -0
- package/.devcontainer/features/claude-session-dashboard/devcontainer-feature.json +35 -0
- package/.devcontainer/features/claude-session-dashboard/install.sh +172 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +43 -43
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +2 -1
- package/.devcontainer/features/ruff/devcontainer-feature.json +17 -19
- package/.devcontainer/features/tmux/install.sh +2 -2
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +24 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/AGENT-REDIRECTION.md +7 -12
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/REVIEW-RUBRIC.md +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/agent-system/hooks/hooks.json +29 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/redirect-builtin-agents.py +17 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/README.md +81 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/README.md +92 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/codeforge-lsp/README.md +41 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/README.md +72 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/block-dangerous.py +73 -47
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/README.md +42 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/README.md +86 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/hooks/hooks.json +25 -15
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected-bash.py +122 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +3 -3
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/session-context/hooks/hooks.json +34 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/hooks/hooks.json +29 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/skill-engine/skills/team/SKILL.md +205 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/.claude-plugin/plugin.json +8 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/spec-workflow/skills/spec-init/references/roadmap-template.md +33 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/README.md +96 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/ticket-workflow/hooks/hooks.json +17 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/README.md +94 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workspace-scope-guard/scripts/guard-workspace-scope.py +1 -3
- package/.devcontainer/scripts/check-setup.sh +1 -1
- package/.devcontainer/scripts/setup-projects.sh +24 -17
- package/.devcontainer/scripts/setup.sh +48 -5
- package/README.md +17 -8
- package/package.json +1 -2
- package/.devcontainer/features/mcp-reasoner/README.md +0 -177
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +0 -25
- package/.devcontainer/features/mcp-reasoner/install.sh +0 -184
- package/.devcontainer/features/mcp-reasoner/poststart-hook.sh +0 -67
- package/.devcontainer/features/splitrail/README.md +0 -140
- package/.devcontainer/features/splitrail/devcontainer-feature.json +0 -39
- package/.devcontainer/features/splitrail/install.sh +0 -136
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +0 -8
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +0 -112
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/guard-readonly-bash.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/skill-suggester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/syntax-validator.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-no-regression.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-tests-pass.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +0 -46
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py +0 -146
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/.claude-plugin/commands/debug.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/architect.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/bash-exec.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/claude-guide.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/debug-logs.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/dependency-analyst.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/doc-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/explorer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/generalist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/git-archaeologist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/migrator.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/perf-profiler.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/refactorer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/researcher.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/security-auditor.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/spec-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/statusline-config.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/agents/test-writer.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/guard-readonly-bash.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/inject-cwd.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-no-regression.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → agent-system}/scripts/verify-tests-pass.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → auto-code-quality}/scripts/advisory-test-runner.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/commit-reminder.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/git-state-injector.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → session-context}/scripts/todo-harvester.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/scripts/skill-suggester.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/references/error-handling.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/api-design/references/rest-conventions.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/ast-grep-patterns/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/ast-grep-patterns/references/language-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-agent-sdk/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-agent-sdk/references/sdk-typescript-reference.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/references/cli-flags-and-output.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/claude-code-headless/references/sdk-and-mcp.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/references/error-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/debugging/references/log-locations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/references/ecosystem-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/dependency-management/references/license-compliance.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/references/compose-services.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker/references/dockerfile-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/references/container-lifecycle.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/docker-py/references/resources-and-security.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/references/api-doc-templates.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/documentation-patterns/references/docstring-formats.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/middleware-and-lifespan.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/pydantic-models.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/routing-and-dependencies.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/fastapi/references/sse-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/references/advanced-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/git-forensics/references/investigation-playbooks.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/references/javascript-migrations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/migration-patterns/references/python-migrations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/references/interpreting-results.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/performance-profiling/references/tool-commands.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/references/agents-and-tools.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/pydantic-ai/references/models-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/references/safe-transformations.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/refactoring-patterns/references/smell-catalog.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/references/owasp-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/security-checklist/references/secrets-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/cross-vendor-principles.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/patterns-and-antipatterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/skill-building/references/skill-authoring-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/advanced-queries.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/javascript-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/python-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/sqlite/references/schema-and-pragmas.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/ai-sdk-svelte.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/component-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/layercake.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/migration-guide.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/runes-and-reactivity.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/spa-and-routing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/svelte5/references/svelte-dnd-action.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/references/fastapi-testing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → skill-engine}/skills/testing/references/svelte-testing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/scripts/spec-reminder.py +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-build/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-build/references/review-checklist.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-check/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/references/backlog-template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-init/references/milestones-template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-new/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-new/references/template.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-refine/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-review/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/spec-update/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/references/criteria-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → spec-workflow}/skills/specification-writing/references/ears-templates.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{code-directive → ticket-workflow}/scripts/ticket-linker.py +0 -0
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "splitrail",
|
|
3
|
-
"version": "1.0.1",
|
|
4
|
-
"name": "Splitrail Token Usage Tracker",
|
|
5
|
-
"description": "Installs Splitrail - real-time AI token usage tracker and cost monitor",
|
|
6
|
-
"maintainer": "AnExiledDev",
|
|
7
|
-
"documentationURL": "https://github.com/Piebald-AI/splitrail",
|
|
8
|
-
"options": {
|
|
9
|
-
"version": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"description": "Version to install (or 'none' to skip installation)",
|
|
12
|
-
"default": "latest"
|
|
13
|
-
},
|
|
14
|
-
"repoUrl": {
|
|
15
|
-
"type": "string",
|
|
16
|
-
"description": "Git repository URL for splitrail",
|
|
17
|
-
"default": "https://github.com/Piebald-AI/splitrail.git"
|
|
18
|
-
},
|
|
19
|
-
"branch": {
|
|
20
|
-
"type": "string",
|
|
21
|
-
"description": "Git branch to checkout",
|
|
22
|
-
"default": "main"
|
|
23
|
-
},
|
|
24
|
-
"username": {
|
|
25
|
-
"type": "string",
|
|
26
|
-
"description": "Container user to install for",
|
|
27
|
-
"default": "automatic"
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"installsAfter": [
|
|
31
|
-
"ghcr.io/devcontainers/features/rust:1",
|
|
32
|
-
"ghcr.io/devcontainers/features/common-utils:2"
|
|
33
|
-
],
|
|
34
|
-
"customizations": {
|
|
35
|
-
"vscode": {
|
|
36
|
-
"extensions": []
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
# Cleanup on exit
|
|
5
|
-
cleanup() {
|
|
6
|
-
rm -f /tmp/splitrail-* 2>/dev/null || true
|
|
7
|
-
}
|
|
8
|
-
trap cleanup EXIT
|
|
9
|
-
|
|
10
|
-
# Import options
|
|
11
|
-
# NOTE: DevContainer converts camelCase to UPPERCASE without underscores
|
|
12
|
-
VERSION="${VERSION:-latest}"
|
|
13
|
-
REPO_URL="${REPOURL:-https://github.com/Piebald-AI/splitrail.git}"
|
|
14
|
-
BRANCH="${BRANCH:-main}"
|
|
15
|
-
USERNAME="${USERNAME:-automatic}"
|
|
16
|
-
|
|
17
|
-
# Skip installation if version is "none"
|
|
18
|
-
if [ "${VERSION}" = "none" ]; then
|
|
19
|
-
echo "[splitrail] Skipping installation (version=none)"
|
|
20
|
-
exit 0
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
echo "[splitrail] Starting Splitrail installation..."
|
|
24
|
-
|
|
25
|
-
# Validate git is available
|
|
26
|
-
if ! command -v git &>/dev/null; then
|
|
27
|
-
echo "[splitrail] ERROR: git is not available"
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# Validate cargo is available
|
|
32
|
-
if ! command -v cargo &>/dev/null; then
|
|
33
|
-
echo "[splitrail] ERROR: cargo is not available. Please ensure Rust feature is installed first."
|
|
34
|
-
echo " Expected cargo at: /usr/local/cargo/bin/cargo"
|
|
35
|
-
exit 1
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Validate input parameters
|
|
39
|
-
if [ -n "${REPO_URL}" ]; then
|
|
40
|
-
if [[ ! "${REPO_URL}" =~ ^https?:// ]] && [[ ! "${REPO_URL}" =~ ^git@.+:.+\.git$ ]]; then
|
|
41
|
-
echo "[splitrail] ERROR: repoUrl must be a valid git URL"
|
|
42
|
-
echo " Provided: ${REPO_URL}"
|
|
43
|
-
echo " Expected: https://... or git@github.com:.../*.git"
|
|
44
|
-
exit 1
|
|
45
|
-
fi
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# Determine the user
|
|
49
|
-
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then
|
|
50
|
-
USERNAME=""
|
|
51
|
-
for CURRENT_USER in vscode node codespace; do
|
|
52
|
-
if id -u "${CURRENT_USER}" >/dev/null 2>&1; then
|
|
53
|
-
USERNAME=${CURRENT_USER}
|
|
54
|
-
break
|
|
55
|
-
fi
|
|
56
|
-
done
|
|
57
|
-
[ -z "${USERNAME}" ] && USERNAME=root
|
|
58
|
-
elif [ "${USERNAME}" = "none" ] || ! id -u "${USERNAME}" >/dev/null 2>&1; then
|
|
59
|
-
USERNAME=root
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
echo "[splitrail] Installing for user: ${USERNAME}"
|
|
63
|
-
|
|
64
|
-
INSTALL_DIR="/home/${USERNAME}/splitrail"
|
|
65
|
-
BINARY="/home/${USERNAME}/.cargo/bin/splitrail"
|
|
66
|
-
|
|
67
|
-
if [[ -f "$BINARY" ]]; then
|
|
68
|
-
echo "[splitrail] Splitrail already installed at $BINARY. Skipping..."
|
|
69
|
-
else
|
|
70
|
-
echo "[splitrail] Installing Splitrail (Rust compilation - may take 2-3 minutes)..."
|
|
71
|
-
|
|
72
|
-
# Use explicit cargo path and rustup home (global installation from devcontainer Rust feature)
|
|
73
|
-
export PATH="/usr/local/cargo/bin:$PATH"
|
|
74
|
-
export RUSTUP_HOME="/usr/local/rustup"
|
|
75
|
-
|
|
76
|
-
# Fix permissions on rustup directories for non-root user access during build
|
|
77
|
-
mkdir -p /usr/local/rustup/tmp
|
|
78
|
-
chmod -R 777 /usr/local/rustup 2>/dev/null || true
|
|
79
|
-
|
|
80
|
-
# Clone and build as detected user
|
|
81
|
-
sudo -u "${USERNAME}" bash -c "
|
|
82
|
-
# Use explicit cargo path and rustup home for user context
|
|
83
|
-
export PATH=\"/usr/local/cargo/bin:\$PATH\"
|
|
84
|
-
export RUSTUP_HOME=\"/usr/local/rustup\"
|
|
85
|
-
|
|
86
|
-
cd /home/${USERNAME}
|
|
87
|
-
rm -rf splitrail
|
|
88
|
-
|
|
89
|
-
echo \"[splitrail] → Cloning splitrail repository...\"
|
|
90
|
-
git clone -b \"${BRANCH}\" \"${REPO_URL}\" splitrail
|
|
91
|
-
cd splitrail
|
|
92
|
-
|
|
93
|
-
echo \"[splitrail] → Compiling splitrail (this will take a few minutes)...\"
|
|
94
|
-
cargo build --release
|
|
95
|
-
|
|
96
|
-
echo \"[splitrail] → Installing binary...\"
|
|
97
|
-
cargo install --path .
|
|
98
|
-
"
|
|
99
|
-
|
|
100
|
-
# Verify installation
|
|
101
|
-
if [[ ! -f "$BINARY" ]]; then
|
|
102
|
-
echo "[splitrail] ERROR: Splitrail compilation failed - binary not found"
|
|
103
|
-
echo " Expected location: $BINARY"
|
|
104
|
-
echo " Check build output above for errors"
|
|
105
|
-
exit 1
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
echo "[splitrail] ✓ Splitrail installed successfully at $BINARY"
|
|
109
|
-
fi
|
|
110
|
-
|
|
111
|
-
echo ""
|
|
112
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
113
|
-
echo " Splitrail Installation Complete"
|
|
114
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
115
|
-
echo ""
|
|
116
|
-
echo "Configuration:"
|
|
117
|
-
echo " • Install Path: ${INSTALL_DIR}"
|
|
118
|
-
echo " • Binary: ${BINARY}"
|
|
119
|
-
echo " • Repository: ${REPO_URL}"
|
|
120
|
-
echo " • Branch: ${BRANCH}"
|
|
121
|
-
echo " • User: ${USERNAME}"
|
|
122
|
-
echo ""
|
|
123
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
124
|
-
echo " Next Steps"
|
|
125
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
126
|
-
echo ""
|
|
127
|
-
echo "1. Test the binary:"
|
|
128
|
-
echo " splitrail --version"
|
|
129
|
-
echo ""
|
|
130
|
-
echo "2. Start monitoring:"
|
|
131
|
-
echo " splitrail"
|
|
132
|
-
echo ""
|
|
133
|
-
echo "3. View help:"
|
|
134
|
-
echo " splitrail --help"
|
|
135
|
-
echo ""
|
|
136
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "Code quality hooks and skill suggestions for the CodeDirective project",
|
|
3
|
-
"hooks": {
|
|
4
|
-
"PreToolUse": [
|
|
5
|
-
{
|
|
6
|
-
"matcher": "Task",
|
|
7
|
-
"hooks": [
|
|
8
|
-
{
|
|
9
|
-
"type": "command",
|
|
10
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/redirect-builtin-agents.py",
|
|
11
|
-
"timeout": 5
|
|
12
|
-
}
|
|
13
|
-
]
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"UserPromptSubmit": [
|
|
17
|
-
{
|
|
18
|
-
"matcher": "*",
|
|
19
|
-
"hooks": [
|
|
20
|
-
{
|
|
21
|
-
"type": "command",
|
|
22
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/skill-suggester.py",
|
|
23
|
-
"timeout": 3
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"type": "command",
|
|
27
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/ticket-linker.py",
|
|
28
|
-
"timeout": 12
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
],
|
|
33
|
-
"SubagentStart": [
|
|
34
|
-
{
|
|
35
|
-
"matcher": "Plan",
|
|
36
|
-
"hooks": [
|
|
37
|
-
{
|
|
38
|
-
"type": "command",
|
|
39
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/skill-suggester.py",
|
|
40
|
-
"timeout": 3
|
|
41
|
-
}
|
|
42
|
-
]
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"matcher": "",
|
|
46
|
-
"hooks": [
|
|
47
|
-
{
|
|
48
|
-
"type": "command",
|
|
49
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/inject-cwd.py",
|
|
50
|
-
"timeout": 3
|
|
51
|
-
}
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
"Stop": [
|
|
56
|
-
{
|
|
57
|
-
"matcher": "",
|
|
58
|
-
"hooks": [
|
|
59
|
-
{
|
|
60
|
-
"type": "command",
|
|
61
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/advisory-test-runner.py",
|
|
62
|
-
"timeout": 20
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"type": "command",
|
|
66
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/commit-reminder.py",
|
|
67
|
-
"timeout": 8
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"type": "command",
|
|
71
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/spec-reminder.py",
|
|
72
|
-
"timeout": 8
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
],
|
|
77
|
-
"SessionStart": [
|
|
78
|
-
{
|
|
79
|
-
"matcher": "",
|
|
80
|
-
"hooks": [
|
|
81
|
-
{
|
|
82
|
-
"type": "command",
|
|
83
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/git-state-injector.py",
|
|
84
|
-
"timeout": 10
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"type": "command",
|
|
88
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/todo-harvester.py",
|
|
89
|
-
"timeout": 8
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
}
|
|
93
|
-
],
|
|
94
|
-
"PostToolUse": [
|
|
95
|
-
{
|
|
96
|
-
"matcher": "Edit|Write",
|
|
97
|
-
"hooks": [
|
|
98
|
-
{
|
|
99
|
-
"type": "command",
|
|
100
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/syntax-validator.py",
|
|
101
|
-
"timeout": 5
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"type": "command",
|
|
105
|
-
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/scripts/collect-edited-files.py",
|
|
106
|
-
"timeout": 3
|
|
107
|
-
}
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Collect edited file paths for batch formatting at Stop.
|
|
4
|
-
|
|
5
|
-
Lightweight PostToolUse hook that appends the edited file path
|
|
6
|
-
to a session-scoped temp file. The auto-formatter Stop hook
|
|
7
|
-
reads this file to know which files need formatting.
|
|
8
|
-
|
|
9
|
-
Non-blocking: always exits 0. Runs in <10ms.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import json
|
|
13
|
-
import os
|
|
14
|
-
import sys
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def main():
|
|
18
|
-
try:
|
|
19
|
-
input_data = json.load(sys.stdin)
|
|
20
|
-
except (json.JSONDecodeError, ValueError):
|
|
21
|
-
sys.exit(0)
|
|
22
|
-
|
|
23
|
-
session_id = input_data.get("session_id", "")
|
|
24
|
-
tool_input = input_data.get("tool_input", {})
|
|
25
|
-
file_path = tool_input.get("file_path", "")
|
|
26
|
-
|
|
27
|
-
if not file_path or not session_id:
|
|
28
|
-
sys.exit(0)
|
|
29
|
-
|
|
30
|
-
if not os.path.isfile(file_path):
|
|
31
|
-
sys.exit(0)
|
|
32
|
-
|
|
33
|
-
# Write to both formatter and linter temp files (independent pipelines)
|
|
34
|
-
for prefix in ("claude-edited-files", "claude-lint-files"):
|
|
35
|
-
tmp_path = f"/tmp/{prefix}-{session_id}"
|
|
36
|
-
try:
|
|
37
|
-
with open(tmp_path, "a") as f:
|
|
38
|
-
f.write(file_path + "\n")
|
|
39
|
-
except OSError:
|
|
40
|
-
pass # non-critical, don't block Claude
|
|
41
|
-
|
|
42
|
-
sys.exit(0)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if __name__ == "__main__":
|
|
46
|
-
main()
|
package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Data file syntax validator.
|
|
4
|
-
|
|
5
|
-
Validates JSON, JSONC, YAML, and TOML files after editing.
|
|
6
|
-
Uses Python stdlib only (plus PyYAML if available).
|
|
7
|
-
|
|
8
|
-
Reads tool input from stdin, validates syntax, reports errors.
|
|
9
|
-
Non-blocking: always exits 0.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import json
|
|
13
|
-
import os
|
|
14
|
-
import re
|
|
15
|
-
import sys
|
|
16
|
-
from pathlib import Path
|
|
17
|
-
|
|
18
|
-
EXTENSIONS = {".json", ".jsonc", ".yaml", ".yml", ".toml"}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def strip_jsonc_comments(text: str) -> str:
|
|
22
|
-
"""Remove // and /* */ comments from JSONC text.
|
|
23
|
-
|
|
24
|
-
Handles URLs (https://...) by only stripping // comments that are
|
|
25
|
-
preceded by whitespace or appear at line start, not those inside strings.
|
|
26
|
-
"""
|
|
27
|
-
# Remove multi-line comments first
|
|
28
|
-
text = re.sub(r"/\*.*?\*/", "", text, flags=re.DOTALL)
|
|
29
|
-
# Remove single-line comments: // preceded by start-of-line or whitespace
|
|
30
|
-
# This avoids stripping :// in URLs
|
|
31
|
-
text = re.sub(r"(^|[\s,\[\{])//.*$", r"\1", text, flags=re.MULTILINE)
|
|
32
|
-
return text
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def validate_json(file_path: str, is_jsonc: bool) -> str:
|
|
36
|
-
"""Validate JSON/JSONC syntax.
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
Error message string, or empty string if valid.
|
|
40
|
-
"""
|
|
41
|
-
with open(file_path, "r", encoding="utf-8") as f:
|
|
42
|
-
content = f.read()
|
|
43
|
-
|
|
44
|
-
if is_jsonc:
|
|
45
|
-
content = strip_jsonc_comments(content)
|
|
46
|
-
|
|
47
|
-
try:
|
|
48
|
-
json.loads(content)
|
|
49
|
-
return ""
|
|
50
|
-
except json.JSONDecodeError as e:
|
|
51
|
-
return f"[Syntax] JSON error at line {e.lineno}, col {e.colno}: {e.msg}"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def validate_yaml(file_path: str) -> str:
|
|
55
|
-
"""Validate YAML syntax.
|
|
56
|
-
|
|
57
|
-
Returns:
|
|
58
|
-
Error message string, or empty string if valid.
|
|
59
|
-
"""
|
|
60
|
-
try:
|
|
61
|
-
import yaml
|
|
62
|
-
except ImportError:
|
|
63
|
-
return "" # PyYAML not available, skip
|
|
64
|
-
|
|
65
|
-
try:
|
|
66
|
-
with open(file_path, "r", encoding="utf-8") as f:
|
|
67
|
-
yaml.safe_load(f)
|
|
68
|
-
return ""
|
|
69
|
-
except yaml.YAMLError as e:
|
|
70
|
-
if hasattr(e, "problem_mark"):
|
|
71
|
-
mark = e.problem_mark
|
|
72
|
-
return f"[Syntax] YAML error at line {mark.line + 1}, col {mark.column + 1}: {e.problem}"
|
|
73
|
-
return f"[Syntax] YAML error: {e}"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def validate_toml(file_path: str) -> str:
|
|
77
|
-
"""Validate TOML syntax.
|
|
78
|
-
|
|
79
|
-
Returns:
|
|
80
|
-
Error message string, or empty string if valid.
|
|
81
|
-
"""
|
|
82
|
-
try:
|
|
83
|
-
import tomllib
|
|
84
|
-
except ImportError:
|
|
85
|
-
return "" # Python < 3.11, skip
|
|
86
|
-
|
|
87
|
-
try:
|
|
88
|
-
with open(file_path, "rb") as f:
|
|
89
|
-
tomllib.load(f)
|
|
90
|
-
return ""
|
|
91
|
-
except tomllib.TOMLDecodeError as e:
|
|
92
|
-
return f"[Syntax] TOML error: {e}"
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def validate(file_path: str) -> str:
|
|
96
|
-
"""Validate file syntax based on extension.
|
|
97
|
-
|
|
98
|
-
Returns:
|
|
99
|
-
Error message string, or empty string if valid.
|
|
100
|
-
"""
|
|
101
|
-
ext = Path(file_path).suffix.lower()
|
|
102
|
-
|
|
103
|
-
if ext == ".jsonc":
|
|
104
|
-
return validate_json(file_path, is_jsonc=True)
|
|
105
|
-
elif ext == ".json":
|
|
106
|
-
return validate_json(file_path, is_jsonc=False)
|
|
107
|
-
elif ext in {".yaml", ".yml"}:
|
|
108
|
-
return validate_yaml(file_path)
|
|
109
|
-
elif ext == ".toml":
|
|
110
|
-
return validate_toml(file_path)
|
|
111
|
-
|
|
112
|
-
return ""
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
def main():
|
|
116
|
-
try:
|
|
117
|
-
input_data = json.load(sys.stdin)
|
|
118
|
-
tool_input = input_data.get("tool_input", {})
|
|
119
|
-
file_path = tool_input.get("file_path", "")
|
|
120
|
-
|
|
121
|
-
if not file_path:
|
|
122
|
-
sys.exit(0)
|
|
123
|
-
|
|
124
|
-
ext = Path(file_path).suffix.lower()
|
|
125
|
-
if ext not in EXTENSIONS:
|
|
126
|
-
sys.exit(0)
|
|
127
|
-
|
|
128
|
-
if not os.path.isfile(file_path):
|
|
129
|
-
sys.exit(0)
|
|
130
|
-
|
|
131
|
-
message = validate(file_path)
|
|
132
|
-
|
|
133
|
-
if message:
|
|
134
|
-
print(json.dumps({"additionalContext": message}))
|
|
135
|
-
|
|
136
|
-
sys.exit(0)
|
|
137
|
-
|
|
138
|
-
except json.JSONDecodeError:
|
|
139
|
-
sys.exit(0)
|
|
140
|
-
except Exception as e:
|
|
141
|
-
print(f"Hook error: {e}", file=sys.stderr)
|
|
142
|
-
sys.exit(0)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if __name__ == "__main__":
|
|
146
|
-
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|