crackerjack 0.35.0__tar.gz → 0.35.1__tar.gz
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.
Potentially problematic release.
This version of crackerjack might be problematic. Click here for more details.
- {crackerjack-0.35.0 → crackerjack-0.35.1}/.pre-commit-config.yaml +19 -15
- {crackerjack-0.35.0 → crackerjack-0.35.1}/CHANGELOG.md +6 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/PKG-INFO +1 -1
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/api.py +4 -4
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/dynamic_config.py +12 -6
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/server_core.py +34 -7
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/server_manager.py +29 -8
- crackerjack-0.35.1/crackerjack/ui/__init__.py +1 -0
- crackerjack-0.35.1/crackerjack/ui/server_panels.py +126 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/pyproject.toml +1 -1
- {crackerjack-0.35.0 → crackerjack-0.35.1}/uv.lock +1 -1
- {crackerjack-0.35.0 → crackerjack-0.35.1}/.github/FUNDING.yml +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/.gitignore +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/AGENTS.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/CLAUDE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/LICENSE +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/QWEN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/README.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/RULES.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/SECURITY.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/ai/AGENT-CAPABILITIES.json +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/ai/AGENT_SELECTION.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/ai/AI-REFERENCE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/ai/ERROR-PATTERNS.yaml +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/__main__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/lsp_client.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/rust_tool_adapter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/rust_tool_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/skylos_adapter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/adapters/zuban_adapter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/architect_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/base.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/documentation_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/dry_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/formatting_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/import_optimization_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/performance_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/performance_helpers.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/proactive_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/refactoring_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/refactoring_helpers.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/security_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/test_creation_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/test_specialist_agent.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/agents/tracker.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/cache_handlers.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/cache_handlers_enhanced.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/facade.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/handlers.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/interactive.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/options.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/cli/utils.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/code_cleaner.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/config/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/config/global_lock_config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/config/hooks.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/async_workflow_orchestrator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/autofix_coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/container.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/enhanced_container.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/file_lifecycle.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/performance.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/performance_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/phase_coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/proactive_workflow.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/resource_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/service_watchdog.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/session_coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/timeout_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/websocket_lifecycle.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/core/workflow_orchestrator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/INDEX.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/generated/api/API_REFERENCE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/generated/api/CLI_REFERENCE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/generated/api/CROSS_REFERENCES.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/generated/api/PROTOCOLS.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/docs/generated/api/SERVICES.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/documentation/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/documentation/ai_templates.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/documentation/dual_output_generator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/documentation/mkdocs_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/documentation/reference_generator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/errors.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/async_hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/cached_hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/hook_lock_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/individual_hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/lsp_aware_hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/executors/tool_proxy.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/hooks/lsp_hook.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/adaptive_learning.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/agent_orchestrator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/agent_registry.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/agent_selector.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/intelligence/integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/interactive.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/async_hook_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/hook_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/publish_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/test_command_builder.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/test_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/test_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/test_manager_backup.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/managers/test_progress.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/cache.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/client_runner.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/context.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/dashboard.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/file_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/progress_components.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/progress_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/progress_monitor.tcss +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/rate_limiter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/server.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/service_watchdog.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/state.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/task_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/core_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/error_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/execution_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/proactive_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/progress_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/utility_tools.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/tools/workflow_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/app.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/endpoints.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/jobs.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/monitoring_endpoints.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/server.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mcp/websocket_server.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mixins/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/mixins/error_handling.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/config_adapter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/protocols.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/resource_protocols.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/models/task.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/monitoring/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/monitoring/metrics_collector.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/monitoring/regression_prevention.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/monitoring/websocket_server.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/orchestration/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/orchestration/coverage_improvement.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/orchestration/execution_strategies.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/orchestration/test_progress_streamer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/plugins/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/plugins/base.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/plugins/hooks.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/plugins/loader.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/plugins/managers.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/pyproject.toml +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/security/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/security/audit.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/anomaly_detector.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/api_extractor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/backup_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/bounded_status_operations.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/cache.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/changelog_automation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/config_integrity.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/config_merge.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/config_template.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/contextual_ai_assistant.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/coverage_badge_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/coverage_ratchet.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/debug.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/dependency_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/dependency_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/documentation_generator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/documentation_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/enhanced_filesystem.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/enterprise_optimizer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/error_pattern_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/file_hasher.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/filesystem.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/git.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/health_metrics.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/heatmap_generator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/initialization.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/input_validator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/intelligent_commit.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/log_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/logging.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/lsp_client.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/memory_optimizer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/metrics.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/parallel_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/pattern_cache.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/pattern_detector.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/performance_benchmarks.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/performance_cache.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/performance_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/predictive_analytics.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/quality_baseline.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/quality_baseline_enhanced.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/quality_intelligence.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/regex_patterns.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/regex_utils.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/secure_path_utils.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/secure_status_formatter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/secure_subprocess.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/security.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/security_logger.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/smart_scheduling.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/status_authentication.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/status_security_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/terminal_utils.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/thread_safe_status_collector.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/tool_version_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/unified_config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/validation_rate_limiter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/version_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/version_checker.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/websocket_resource_limiter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/services/zuban_lsp_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/slash_commands/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/slash_commands/init.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/slash_commands/run.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/slash_commands/status.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/tools/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/tools/fix_terminal.sh +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/tools/validate_input_validator_patterns.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/tools/validate_regex_patterns.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/crackerjack/uv.lock +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/architecture/API_REFERENCE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/architecture/ARCHITECTURE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/archive/CONFIG_MANAGEMENT_REPLACEMENT_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/archive/CONFIG_MERGE_REMOVAL_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/archive/DOCUMENTATION_REORGANIZATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/development/IDE-SETUP.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/development/RUST_TOOLING_FRAMEWORK.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/COMPLEXITY_REFACTORING_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/COVERAGE_BADGE_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/CURRENT_IMPLEMENTATION_STATUS.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/DOCUMENTATION_SYSTEM_ARCHITECTURE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/EXPERIMENTAL-EVALUATION.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/FEATURE_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_IMPLEMENTATION_SUMMARY.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/RESILIENT_HOOK_ARCHITECTURE_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/STAGE_HEADERS_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/TIMEOUT_ARCHITECTURE_SOLUTION.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/TYPE_ANNOTATION_FIXING_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/UVXUSAGE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/ZUBAN_LSP_INTEGRATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/planning/ZUBAN_TOML_PARSING_BUG_ANALYSIS.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/INPUT_VALIDATOR_SECURITY_AUDIT.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/SECURITY-AUDIT.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/SECURITY_AUDIT_REPORT.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/SECURITY_AUDIT_STATUS_DISCLOSURE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/SECURITY_HARDENING_REPORT.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/security/SECURITY_SUBPROCESS_HARDENING_REPORT.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/BACKUP_SYSTEM.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/CACHING_SYSTEM.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/DASHBOARD_ARCHITECTURE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/MCP_INTEGRATION.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/MONITORING_INTEGRATION.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/docs/systems/UNIFIED_MONITORING_ARCHITECTURE.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/example.mcp.json +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/excalidraw.log +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/fix_typing_imports.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/mypy.ini +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/scripts/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/scripts/integrate_resource_management.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/scripts/performance_benchmark.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/templates/api_reference.md.template +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/templates/changelog_entry.md.template +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/templates/user_guide.md.template +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/test_docs_site/site/docs/api-reference.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/test_docs_site/site/docs/getting-started.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/test_docs_site/site/docs/index.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/test_docs_site/site/docs/stylesheets/extra.css +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/test_docs_site/site/mkdocs.yml +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/base_test.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/conftest.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/coverage.json +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/data/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/data/comments_sample.txt +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/data/docstrings_sample.txt +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/data/expected_comments_sample.txt +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/data/init.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/docs/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/docs/TEST_COVERAGE_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/docs/TEST_IMPLEMENTATION_PLAN.md +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/run_tests.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/scripts/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/scripts/agent_audit_report.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/scripts/run_test_suite.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test___main__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_ai_agent_workflow.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_ai_optimized_documentation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_async_hook_executor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_changelog_generation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_cli/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_cli/test_global_lock_options.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_cli_semantic_naming.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_coordinator_performance.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_autofix_coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_comprehensive.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_enhanced_container.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_modules.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_core_performance.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_documentation_agent_simple.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_dynamic_config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_dynamic_config_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_end_to_end_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_enhanced_filesystem.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_enhanced_filesystem_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_execution_speed_optimization.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_executors/__init__.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_executors/test_lock_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_fast_hooks_behavior.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_filesystem_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_final_validation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_global_lock_config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_hook_lock_manager.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_hook_manager_simple.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_import_coverage_consolidated.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_input_validation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_intelligence_system.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_large_modules_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_main_entry_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_main_module.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_managers_consolidated.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_mcp_progress_monitor.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_mcp_server.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_models_comprehensive.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_models_config_adapter_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_models_focused.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_models_task_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_modernized_code.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_performance_agent_enhanced.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_performance_agent_simple.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_performance_benchmarks_focused.py.bak +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_phase_coordinator_simple.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_plugins_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_proactive_agent_system.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_protocol_compliance.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_publish_manager_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_pytest_features.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_regex_patterns.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_resource_cleanup_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_secure_path_utils.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_secure_status_formatter.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_security_audit.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_security_hardening.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_security_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_services_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_session_coordinator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_session_coordinator_coverage.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_simple_tool_version_service.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_simple_workflow.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_stage_workflow_execution_order.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_structured_errors.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_structured_logging.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_syntax_validation.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_terminal_restoration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_terminal_state.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_timeout_system.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_unified_api.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_unified_config.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_unified_monitoring_dashboard.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_validate_regex_patterns_tool.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_version_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_version_bump_analyzer.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_websocket_endpoints.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_workflow_fast_hooks.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_workflow_integration.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tests/test_workflow_orchestrator.py +0 -0
- {crackerjack-0.35.0 → crackerjack-0.35.1}/tools/validate_regex_patterns_standalone.py +0 -0
|
@@ -6,13 +6,14 @@ repos:
|
|
|
6
6
|
entry: uv run python -m crackerjack.tools.validate_regex_patterns
|
|
7
7
|
language: system
|
|
8
8
|
files: \.py$
|
|
9
|
-
exclude: ^\.venv/
|
|
9
|
+
exclude: ^\.venv/|^src/
|
|
10
10
|
- id: skylos
|
|
11
11
|
name: skylos-dead-code-detection
|
|
12
12
|
entry: skylos
|
|
13
13
|
language: system
|
|
14
14
|
args: ["crackerjack"]
|
|
15
15
|
pass_filenames: false
|
|
16
|
+
exclude: ^src/
|
|
16
17
|
stages: ["pre-push", "manual"]
|
|
17
18
|
- id: zuban
|
|
18
19
|
name: zuban-type-checking
|
|
@@ -20,73 +21,76 @@ repos:
|
|
|
20
21
|
language: system
|
|
21
22
|
args: ["--config-file", "mypy.ini", "./crackerjack"]
|
|
22
23
|
pass_filenames: false
|
|
24
|
+
exclude: ^src/
|
|
23
25
|
stages: ["pre-push", "manual"]
|
|
24
26
|
- id: pyright
|
|
25
27
|
name: pyright-type-checking
|
|
26
28
|
entry: uv run pyright
|
|
27
29
|
language: system
|
|
28
30
|
files: ^crackerjack/.*\.py$
|
|
29
|
-
exclude: ^crackerjack/(mcp|plugins)/.*\.py$|crackerjack/code_cleaner\.py
|
|
31
|
+
exclude: ^crackerjack/(mcp|plugins)/.*\.py$|crackerjack/code_cleaner\.py$|^src/
|
|
30
32
|
stages: ["pre-push", "manual"]
|
|
31
33
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
32
34
|
rev: v6.0.0
|
|
33
35
|
hooks:
|
|
34
36
|
- id: trailing-whitespace
|
|
35
37
|
name: trailing-whitespace
|
|
36
|
-
exclude: ^\.venv/
|
|
38
|
+
exclude: ^\.venv/|^src/
|
|
37
39
|
- id: end-of-file-fixer
|
|
38
40
|
name: end-of-file-fixer
|
|
39
|
-
exclude: ^\.venv/
|
|
41
|
+
exclude: ^\.venv/|^src/
|
|
40
42
|
- id: check-yaml
|
|
41
43
|
name: check-yaml
|
|
42
|
-
exclude: ^\.venv/
|
|
44
|
+
exclude: ^\.venv/|^src/
|
|
43
45
|
- id: check-toml
|
|
44
46
|
name: check-toml
|
|
45
|
-
exclude: ^\.venv/
|
|
47
|
+
exclude: ^\.venv/|^src/
|
|
46
48
|
- id: check-added-large-files
|
|
47
49
|
name: check-added-large-files
|
|
48
|
-
exclude: ^\.venv/
|
|
50
|
+
exclude: ^\.venv/|^src/
|
|
49
51
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
50
52
|
rev: 0.8.15
|
|
51
53
|
hooks:
|
|
52
54
|
- id: uv-lock
|
|
53
55
|
files: ^ pyproject\.toml$
|
|
56
|
+
exclude: ^src/
|
|
54
57
|
- repo: https://github.com/gitleaks/gitleaks
|
|
55
58
|
rev: v8.28.0
|
|
56
59
|
hooks:
|
|
57
60
|
- id: gitleaks
|
|
58
|
-
exclude: uv\.lock|pyproject\.toml|tests/.*|docs/.*|.*\.md
|
|
61
|
+
exclude: uv\.lock|pyproject\.toml|tests/.*|docs/.*|.*\.md|^src/
|
|
59
62
|
- repo: https://github.com/PyCQA/bandit
|
|
60
63
|
rev: 1.8.6
|
|
61
64
|
hooks:
|
|
62
65
|
- id: bandit
|
|
63
66
|
args: ["-c", "pyproject.toml", "-r", "-ll"]
|
|
64
67
|
files: ^crackerjack/.*\.py$
|
|
68
|
+
exclude: ^src/
|
|
65
69
|
stages: ["pre-push", "manual"]
|
|
66
70
|
- repo: https://github.com/codespell-project/codespell
|
|
67
71
|
rev: v2.4.1
|
|
68
72
|
hooks:
|
|
69
73
|
- id: codespell
|
|
70
|
-
exclude: ^\.venv/
|
|
74
|
+
exclude: ^\.venv/|^src/
|
|
71
75
|
additional_dependencies: ["tomli"]
|
|
72
76
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
73
77
|
rev: v0.12.12
|
|
74
78
|
hooks:
|
|
75
79
|
- id: ruff-check
|
|
76
|
-
exclude: ^\.venv/
|
|
80
|
+
exclude: ^\.venv/|^src/
|
|
77
81
|
- id: ruff-format
|
|
78
|
-
exclude: ^\.venv/
|
|
82
|
+
exclude: ^\.venv/|^src/
|
|
79
83
|
- repo: https://github.com/executablebooks/mdformat
|
|
80
84
|
rev: 0.7.22
|
|
81
85
|
hooks:
|
|
82
86
|
- id: mdformat
|
|
83
|
-
exclude: ^\.venv/
|
|
87
|
+
exclude: ^\.venv/|^src/
|
|
84
88
|
additional_dependencies: ["mdformat-ruff"]
|
|
85
89
|
- repo: https://github.com/fredrikaverpil/creosote
|
|
86
90
|
rev: v4.1.0
|
|
87
91
|
hooks:
|
|
88
92
|
- id: creosote
|
|
89
|
-
exclude: ^\.venv/
|
|
93
|
+
exclude: ^\.venv/|^src/
|
|
90
94
|
stages: ["pre-push", "manual"]
|
|
91
95
|
- repo: https://github.com/rohaquinlop/complexipy-pre-commit
|
|
92
96
|
rev: v3.3.0
|
|
@@ -94,7 +98,7 @@ repos:
|
|
|
94
98
|
- id: complexipy
|
|
95
99
|
args: ["-d", "low", "--max-complexity-allowed", "15"]
|
|
96
100
|
files: ^crackerjack/.*\.py$
|
|
97
|
-
exclude: ^(\.venv/|tests/)
|
|
101
|
+
exclude: ^(\.venv/|tests/)|^src/
|
|
98
102
|
stages: ["pre-push", "manual"]
|
|
99
103
|
- repo: https://github.com/dosisod/refurb
|
|
100
104
|
rev: v2.1.0
|
|
@@ -102,5 +106,5 @@ repos:
|
|
|
102
106
|
- id: refurb
|
|
103
107
|
args: ["--ignore", "FURB184", "--ignore", "FURB120"]
|
|
104
108
|
files: ^crackerjack/.*\.py$
|
|
105
|
-
exclude: ^tests/.*\.py
|
|
109
|
+
exclude: ^tests/.*\.py$|^src/
|
|
106
110
|
stages: ["pre-push", "manual"]
|
|
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.35.1] - 2025-09-15
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Crackerjack (quality: 76/100) - 2025-09-15 22:25:11
|
|
13
|
+
|
|
8
14
|
## [0.35.0] - 2025-09-15
|
|
9
15
|
|
|
10
16
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.1
|
|
4
4
|
Summary: Crackerjack Python project management tool
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -601,10 +601,10 @@ class CrackerjackAPI:
|
|
|
601
601
|
return None
|
|
602
602
|
|
|
603
603
|
def _find_fallback_package_directory(self) -> Path | None:
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
604
|
+
# Only check project directory name, not src
|
|
605
|
+
package_dir = self.project_path / self.project_path.name
|
|
606
|
+
if self._is_valid_python_package_directory(package_dir):
|
|
607
|
+
return package_dir
|
|
608
608
|
return None
|
|
609
609
|
|
|
610
610
|
def _is_valid_python_package_directory(self, directory: Path) -> bool:
|
|
@@ -499,13 +499,12 @@ class DynamicConfigGenerator:
|
|
|
499
499
|
except Exception:
|
|
500
500
|
pass
|
|
501
501
|
|
|
502
|
-
# Fallback to
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
return possible_name
|
|
502
|
+
# Fallback to project directory name
|
|
503
|
+
if (current_dir / current_dir.name).exists():
|
|
504
|
+
return current_dir.name
|
|
506
505
|
|
|
507
|
-
# Default fallback
|
|
508
|
-
return
|
|
506
|
+
# Default fallback to current directory name
|
|
507
|
+
return current_dir.name
|
|
509
508
|
|
|
510
509
|
def _should_include_hook(
|
|
511
510
|
self,
|
|
@@ -565,6 +564,13 @@ class DynamicConfigGenerator:
|
|
|
565
564
|
"crackerjack", self.package_directory
|
|
566
565
|
)
|
|
567
566
|
|
|
567
|
+
# Ensure hooks exclude src directories to avoid JavaScript conflicts
|
|
568
|
+
if hook["exclude"]:
|
|
569
|
+
if "src/" not in hook["exclude"]:
|
|
570
|
+
hook["exclude"] = f"{hook['exclude']}|^src/"
|
|
571
|
+
else:
|
|
572
|
+
hook["exclude"] = "^src/"
|
|
573
|
+
|
|
568
574
|
return hook
|
|
569
575
|
|
|
570
576
|
def group_hooks_by_repo(
|
|
@@ -6,6 +6,8 @@ from typing import Final
|
|
|
6
6
|
|
|
7
7
|
from rich.console import Console
|
|
8
8
|
|
|
9
|
+
from ..ui.server_panels import create_server_panels
|
|
10
|
+
|
|
9
11
|
try:
|
|
10
12
|
import tomli
|
|
11
13
|
except ImportError:
|
|
@@ -259,18 +261,23 @@ def _print_server_info(
|
|
|
259
261
|
websocket_port: int | None,
|
|
260
262
|
http_mode: bool,
|
|
261
263
|
) -> None:
|
|
262
|
-
|
|
263
|
-
console.print(f"Project path: {project_path}")
|
|
264
|
+
panels = create_server_panels(console)
|
|
264
265
|
|
|
265
266
|
if mcp_config.get("http_enabled", False) or http_mode:
|
|
266
|
-
|
|
267
|
-
|
|
267
|
+
mode = "HTTP"
|
|
268
|
+
http_endpoint = (
|
|
269
|
+
f"http://{mcp_config['http_host']}:{mcp_config['http_port']}/mcp"
|
|
268
270
|
)
|
|
269
271
|
else:
|
|
270
|
-
|
|
272
|
+
mode = "STDIO"
|
|
273
|
+
http_endpoint = None
|
|
271
274
|
|
|
272
|
-
|
|
273
|
-
|
|
275
|
+
panels.start_panel(
|
|
276
|
+
project_path=project_path,
|
|
277
|
+
mode=mode,
|
|
278
|
+
http_endpoint=http_endpoint,
|
|
279
|
+
websocket_port=websocket_port,
|
|
280
|
+
)
|
|
274
281
|
|
|
275
282
|
|
|
276
283
|
def _run_mcp_server(
|
|
@@ -331,6 +338,26 @@ def main(
|
|
|
331
338
|
f"[yellow]⚠️ WebSocket server auto-start failed: {e}[/yellow]"
|
|
332
339
|
)
|
|
333
340
|
|
|
341
|
+
# Show final success panel before starting the server
|
|
342
|
+
panels = create_server_panels(console)
|
|
343
|
+
|
|
344
|
+
if mcp_config.get("http_enabled", False) or http_mode:
|
|
345
|
+
http_endpoint = (
|
|
346
|
+
f"http://{mcp_config['http_host']}:{mcp_config['http_port']}/mcp"
|
|
347
|
+
)
|
|
348
|
+
else:
|
|
349
|
+
http_endpoint = None
|
|
350
|
+
|
|
351
|
+
websocket_monitor = (
|
|
352
|
+
f"ws://127.0.0.1:{websocket_port}" if websocket_port else None
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
panels.success_panel(
|
|
356
|
+
http_endpoint=http_endpoint,
|
|
357
|
+
websocket_monitor=websocket_monitor,
|
|
358
|
+
process_id=None, # Will be set by the process manager
|
|
359
|
+
)
|
|
360
|
+
|
|
334
361
|
_run_mcp_server(mcp_app, mcp_config, http_mode)
|
|
335
362
|
|
|
336
363
|
except KeyboardInterrupt:
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
|
|
8
8
|
from rich.console import Console
|
|
9
9
|
|
|
10
|
+
from ..ui.server_panels import create_server_panels
|
|
10
11
|
from .secure_subprocess import execute_secure_subprocess
|
|
11
12
|
from .security_logger import get_security_logger
|
|
12
13
|
|
|
@@ -201,21 +202,27 @@ def stop_mcp_server(console: Console | None = None) -> bool:
|
|
|
201
202
|
if console is None:
|
|
202
203
|
console = Console()
|
|
203
204
|
|
|
205
|
+
panels = create_server_panels(console)
|
|
204
206
|
processes = find_mcp_server_processes()
|
|
205
207
|
|
|
206
208
|
if not processes:
|
|
207
209
|
console.print("[yellow]⚠️ No MCP server processes found[/ yellow]")
|
|
208
210
|
return True
|
|
209
211
|
|
|
212
|
+
panels.stop_servers(len(processes))
|
|
213
|
+
|
|
210
214
|
success = True
|
|
211
215
|
for proc in processes:
|
|
212
|
-
console.print(f"
|
|
216
|
+
console.print(f"Stopping process {proc['pid']}...")
|
|
213
217
|
if stop_process(proc["pid"]):
|
|
214
|
-
console.print(f"✅
|
|
218
|
+
console.print(f"✅ Process {proc['pid']} terminated gracefully")
|
|
215
219
|
else:
|
|
216
220
|
console.print(f"❌ Failed to stop process {proc['pid']}")
|
|
217
221
|
success = False
|
|
218
222
|
|
|
223
|
+
if success:
|
|
224
|
+
panels.stop_complete(len(processes))
|
|
225
|
+
|
|
219
226
|
return success
|
|
220
227
|
|
|
221
228
|
|
|
@@ -282,14 +289,15 @@ def restart_mcp_server(
|
|
|
282
289
|
if console is None:
|
|
283
290
|
console = Console()
|
|
284
291
|
|
|
285
|
-
|
|
292
|
+
panels = create_server_panels(console)
|
|
293
|
+
panels.restart_header()
|
|
286
294
|
|
|
287
295
|
stop_mcp_server(console)
|
|
288
296
|
|
|
289
|
-
|
|
297
|
+
panels.cleanup_wait()
|
|
290
298
|
time.sleep(2)
|
|
291
299
|
|
|
292
|
-
|
|
300
|
+
panels.starting_server()
|
|
293
301
|
try:
|
|
294
302
|
cmd = [sys.executable, "-m", "crackerjack", "--start-mcp-server"]
|
|
295
303
|
if websocket_port:
|
|
@@ -297,7 +305,7 @@ def restart_mcp_server(
|
|
|
297
305
|
|
|
298
306
|
import subprocess
|
|
299
307
|
|
|
300
|
-
subprocess.Popen(
|
|
308
|
+
process = subprocess.Popen(
|
|
301
309
|
cmd,
|
|
302
310
|
stdout=subprocess.DEVNULL,
|
|
303
311
|
stderr=subprocess.DEVNULL,
|
|
@@ -310,11 +318,24 @@ def restart_mcp_server(
|
|
|
310
318
|
purpose="mcp_server_restart",
|
|
311
319
|
)
|
|
312
320
|
|
|
313
|
-
|
|
321
|
+
# Give the server a moment to start
|
|
322
|
+
time.sleep(1)
|
|
323
|
+
|
|
324
|
+
# Display success panel with server details
|
|
325
|
+
http_endpoint = "http://127.0.0.1:8676/mcp"
|
|
326
|
+
websocket_monitor = (
|
|
327
|
+
f"ws://127.0.0.1:{websocket_port or 8675}" if websocket_port else None
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
panels.success_panel(
|
|
331
|
+
http_endpoint=http_endpoint,
|
|
332
|
+
websocket_monitor=websocket_monitor,
|
|
333
|
+
process_id=process.pid,
|
|
334
|
+
)
|
|
314
335
|
return True
|
|
315
336
|
|
|
316
337
|
except Exception as e:
|
|
317
|
-
|
|
338
|
+
panels.failure_panel(str(e))
|
|
318
339
|
return False
|
|
319
340
|
|
|
320
341
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""UI components for Crackerjack."""
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""Rich panel utilities for MCP server operations with consistent styling."""
|
|
2
|
+
|
|
3
|
+
import typing as t
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.panel import Panel
|
|
8
|
+
from rich.text import Text
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ServerPanels:
|
|
12
|
+
"""Rich panel utilities for server operations with 74-char width limit."""
|
|
13
|
+
|
|
14
|
+
WIDTH = 74 # Match session-mgmt-mcp width constraint
|
|
15
|
+
|
|
16
|
+
def __init__(self, console: Console | None = None) -> None:
|
|
17
|
+
self.console = console or Console()
|
|
18
|
+
|
|
19
|
+
def restart_header(self) -> None:
|
|
20
|
+
"""Display server restart header panel."""
|
|
21
|
+
panel = Panel(
|
|
22
|
+
"🔄 Restarting Crackerjack MCP Server...",
|
|
23
|
+
width=self.WIDTH,
|
|
24
|
+
title="Server Restart",
|
|
25
|
+
style="cyan",
|
|
26
|
+
)
|
|
27
|
+
self.console.print(panel)
|
|
28
|
+
|
|
29
|
+
def stop_servers(self, count: int) -> None:
|
|
30
|
+
"""Display stopping servers status."""
|
|
31
|
+
self.console.print("📴 Stopping existing servers...")
|
|
32
|
+
self.console.print(f"🛑 Stopping {count} server process(es)...")
|
|
33
|
+
|
|
34
|
+
def process_stopped(self, pid: int) -> None:
|
|
35
|
+
"""Display process stopped message."""
|
|
36
|
+
self.console.print(f"Stopping process {pid}...")
|
|
37
|
+
self.console.print(f"✅ Process {pid} terminated gracefully")
|
|
38
|
+
|
|
39
|
+
def stop_complete(self, count: int) -> None:
|
|
40
|
+
"""Display stop completion panel."""
|
|
41
|
+
panel = Panel(
|
|
42
|
+
f"✅ Successfully stopped {count} process(es)",
|
|
43
|
+
width=self.WIDTH,
|
|
44
|
+
title="Server Stopped",
|
|
45
|
+
style="green",
|
|
46
|
+
)
|
|
47
|
+
self.console.print(panel)
|
|
48
|
+
|
|
49
|
+
def cleanup_wait(self) -> None:
|
|
50
|
+
"""Display cleanup waiting message."""
|
|
51
|
+
self.console.print("⏳ Waiting for cleanup...")
|
|
52
|
+
|
|
53
|
+
def starting_server(self) -> None:
|
|
54
|
+
"""Display starting server message."""
|
|
55
|
+
self.console.print("🚀 Starting fresh server instance...")
|
|
56
|
+
self.console.print("🚀 Starting Crackerjack MCP Server...")
|
|
57
|
+
self.console.print("⏳ Waiting for server to start...")
|
|
58
|
+
|
|
59
|
+
def success_panel(
|
|
60
|
+
self,
|
|
61
|
+
http_endpoint: str | None = None,
|
|
62
|
+
websocket_monitor: str | None = None,
|
|
63
|
+
process_id: int | None = None
|
|
64
|
+
) -> None:
|
|
65
|
+
"""Display success panel with server details."""
|
|
66
|
+
content = Text()
|
|
67
|
+
content.append("✅ Server started successfully!\n", style="green bold")
|
|
68
|
+
|
|
69
|
+
if http_endpoint:
|
|
70
|
+
content.append(f"🌐 HTTP Endpoint: {http_endpoint}\n", style="cyan")
|
|
71
|
+
|
|
72
|
+
if websocket_monitor:
|
|
73
|
+
content.append(f"🔌 WebSocket Monitor: {websocket_monitor}\n", style="cyan")
|
|
74
|
+
|
|
75
|
+
if process_id:
|
|
76
|
+
content.append(f"📊 Process ID: {process_id}", style="cyan")
|
|
77
|
+
|
|
78
|
+
panel = Panel(
|
|
79
|
+
content,
|
|
80
|
+
width=self.WIDTH,
|
|
81
|
+
title="Crackerjack MCP Server",
|
|
82
|
+
style="green",
|
|
83
|
+
)
|
|
84
|
+
self.console.print(panel)
|
|
85
|
+
|
|
86
|
+
def failure_panel(self, error: str) -> None:
|
|
87
|
+
"""Display failure panel with error details."""
|
|
88
|
+
panel = Panel(
|
|
89
|
+
f"❌ Server failed to start: {error}",
|
|
90
|
+
width=self.WIDTH,
|
|
91
|
+
title="Server Error",
|
|
92
|
+
style="red",
|
|
93
|
+
)
|
|
94
|
+
self.console.print(panel)
|
|
95
|
+
|
|
96
|
+
def start_panel(
|
|
97
|
+
self,
|
|
98
|
+
project_path: Path,
|
|
99
|
+
mode: str = "STDIO",
|
|
100
|
+
http_endpoint: str | None = None,
|
|
101
|
+
websocket_port: int | None = None,
|
|
102
|
+
) -> None:
|
|
103
|
+
"""Display server start panel with configuration details."""
|
|
104
|
+
content = Text()
|
|
105
|
+
content.append("🚀 Starting Crackerjack MCP Server...\n", style="green bold")
|
|
106
|
+
content.append(f"📁 Project: {project_path.name}\n", style="cyan")
|
|
107
|
+
content.append(f"🔗 Mode: {mode}\n", style="cyan")
|
|
108
|
+
|
|
109
|
+
if http_endpoint:
|
|
110
|
+
content.append(f"🌐 HTTP: {http_endpoint}\n", style="cyan")
|
|
111
|
+
|
|
112
|
+
if websocket_port:
|
|
113
|
+
content.append(f"🔌 WebSocket: {websocket_port}", style="cyan")
|
|
114
|
+
|
|
115
|
+
panel = Panel(
|
|
116
|
+
content,
|
|
117
|
+
width=self.WIDTH,
|
|
118
|
+
title="Server Configuration",
|
|
119
|
+
style="green",
|
|
120
|
+
)
|
|
121
|
+
self.console.print(panel)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def create_server_panels(console: Console | None = None) -> ServerPanels:
|
|
125
|
+
"""Factory function to create ServerPanels instance."""
|
|
126
|
+
return ServerPanels(console)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|