crackerjack 0.31.9__tar.gz → 0.31.10__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.31.9 → crackerjack-0.31.10}/CHANGELOG.md +120 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/PKG-INFO +1 -1
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/phase_coordinator.py +1 -1
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/workflow_orchestrator.py +17 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/test_manager.py +41 -5
- {crackerjack-0.31.9 → crackerjack-0.31.10/crackerjack}/pyproject.toml +1 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/coverage_ratchet.py +9 -5
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/git.py +12 -2
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/initialization.py +9 -9
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/uv.lock +68 -2
- crackerjack-0.31.10/example.mcp.json +16 -0
- {crackerjack-0.31.9/crackerjack → crackerjack-0.31.10}/pyproject.toml +2 -1
- {crackerjack-0.31.9 → crackerjack-0.31.10}/uv.lock +68 -2
- {crackerjack-0.31.9 → crackerjack-0.31.10}/.github/FUNDING.yml +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/.gitignore +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/.pre-commit-config.yaml +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/AGENTS.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/AI-AGENT-RULES.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/CLAUDE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/LICENSE +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/README-AI-AGENT.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/README.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/RULES.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/UVXUSAGE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/.gitignore +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/.pre-commit-config.yaml +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/CLAUDE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/RULES.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/__main__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/architect_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/base.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/coordinator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/documentation_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/dry_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/formatting_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/import_optimization_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/performance_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/proactive_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/refactoring_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/security_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/test_creation_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/test_specialist_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/agents/tracker.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/api.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/facade.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/handlers.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/interactive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/options.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/cli/utils.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/code_cleaner.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/config/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/config/hooks.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/async_workflow_orchestrator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/autofix_coordinator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/container.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/enhanced_container.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/performance.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/proactive_workflow.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/core/session_coordinator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/dynamic_config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/errors.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10/crackerjack}/example.mcp.json +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/executors/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/executors/async_hook_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/executors/cached_hook_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/executors/hook_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/executors/individual_hook_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/adaptive_learning.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/agent_orchestrator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/agent_registry.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/agent_selector.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/intelligence/integration.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/interactive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/async_hook_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/hook_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/publish_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/test_command_builder.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/test_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/test_manager_backup.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/managers/test_progress.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/cache.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/client_runner.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/context.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/dashboard.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/enhanced_progress_monitor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/enhanced_progress_monitor.tcss +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/file_monitor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/progress_components.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/progress_monitor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/progress_monitor.tcss +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/rate_limiter.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/server.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/server_core.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/service_watchdog.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/state.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/task_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/core_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/error_analyzer.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/execution_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/execution_tools_backup.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/intelligence_tool_registry.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/intelligence_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/monitoring_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/monitoring_tools.py.backup +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/proactive_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/progress_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/utility_tools.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/tools/workflow_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/app.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/endpoints.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/jobs.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/server.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket/websocket_handler.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/mcp/websocket_server.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/models/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/models/config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/models/config_adapter.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/models/protocols.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/models/task.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/monitoring/ai_agent_watchdog.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/monitoring/regression_prevention.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/orchestration/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/orchestration/advanced_orchestrator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/orchestration/coverage_improvement.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/orchestration/execution_strategies.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/orchestration/test_progress_streamer.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/plugins/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/plugins/base.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/plugins/hooks.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/plugins/loader.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/plugins/managers.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/py313.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/cache.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/config_integrity.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/contextual_ai_assistant.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/debug.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/dependency_monitor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/enhanced_filesystem.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/file_hasher.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/filesystem.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/health_metrics.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/log_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/logging.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/metrics.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/pattern_cache.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/pattern_detector.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/performance_benchmarks.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/security.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/server_manager.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/smart_scheduling.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/tool_version_service.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/unified_config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/services/version_checker.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/slash_commands/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/slash_commands/init.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/slash_commands/run.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/crackerjack/slash_commands/status.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/AI_AGENT_DEBUGGING.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/API_REFERENCE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/ARCHITECTURE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/FUTURE-ENHANCEMENTS.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/SUB_AGENT_MONITORING_DESIGN.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/VERIFICATION_WORKFLOW.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/docs/WORKFLOW_KNOWLEDGE_BASE.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/excalidraw.log +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/fix_terminal.sh +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/requirements.txt +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/.coverage +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/HEALTH_METRICS_TESTING_SUMMARY.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/TESTING.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/TEST_COVERAGE_PLAN.md +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/conftest.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/coverage.json +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/data/comments_sample.txt +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/data/docstrings_sample.txt +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/data/expected_comments_sample.txt +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/data/init.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/scripts/__init__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/scripts/agent_audit_report.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/scripts/run_test_suite.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test___main__.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_advanced_orchestrator_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_ai_agent_comprehensive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_ai_agent_workflow.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_async_hook_executor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_cli_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_code_cleaner.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_contextual_ai_assistant_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_additional_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_autofix_coordinator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_comprehensive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_enhanced_container.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_modules.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_performance.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_strategic_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_core_workflow_orchestration_deep_quality.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_dependency_monitor_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_documentation_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_documentation_agent_simple.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_dynamic_config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_dynamic_config_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_enhanced_filesystem.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_enhanced_filesystem_comprehensive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_enhanced_filesystem_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_enhanced_filesystem_integration.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_enhanced_filesystem_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_filesystem_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_health_metrics_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_hook_manager_simple.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_import_coverage_consolidated.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_import_optimization_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_intelligence_system.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_large_modules_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_main_entry_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_main_module.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_managers_consolidated.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_managers_strategic_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_additional_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_core_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_progress_monitor.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_progress_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_server.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_mcp_websocket_lifecycle_deep_quality.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_models_comprehensive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_models_config_adapter_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_models_focused.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_models_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_models_task_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_modernized_code.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_orchestration_advanced_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_orchestration_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_performance_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_performance_agent_simple.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_performance_benchmarks_focused.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_performance_benchmarks_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_phase_coordinator_simple.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_plugins_base_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_plugins_comprehensive.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_plugins_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_plugins_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_plugins_system_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_proactive_agent_system.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_protocol_compliance.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_publish_manager_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_py313_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_pytest_features.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_refactoring_agent.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_server_manager_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_services_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_services_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_session_coordinator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_session_coordinator_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_simple_tool_version_service.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_structured_errors.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_structured_logging.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_terminal_restoration.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_terminal_state.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_advanced.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_business_logic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_deep_coverage.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_functional.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_simple_working.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_tool_version_service_strategic.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_unified_api.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_unified_config.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_workflow_integration.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tests/test_workflow_orchestrator.py +0 -0
- {crackerjack-0.31.9 → crackerjack-0.31.10}/tools.yaml +0 -0
|
@@ -5,6 +5,126 @@ 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
|
+
## [Unreleased] - 2025-09-02
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- feat: add new feature
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- fix: resolve bug in parser
|
|
17
|
+
|
|
18
|
+
## [Unreleased] - 2025-09-02
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- feat: add new feature
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- fix: resolve bug in parser
|
|
27
|
+
|
|
28
|
+
## [Unreleased] - 2025-09-02
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- feat: add new feature
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- fix: resolve bug in parser
|
|
37
|
+
|
|
38
|
+
## [Unreleased] - 2025-09-02
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- feat: add new feature
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- fix: resolve bug in parser
|
|
47
|
+
|
|
48
|
+
## [Unreleased] - 2025-09-02
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
|
|
52
|
+
- feat: add new feature
|
|
53
|
+
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- fix: resolve bug in parser
|
|
57
|
+
|
|
58
|
+
## [Unreleased] - 2025-09-02
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- feat: add new feature
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- fix: resolve bug in parser
|
|
67
|
+
|
|
68
|
+
## [Unreleased] - 2025-09-02
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- feat: add new feature
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- fix: resolve bug in parser
|
|
77
|
+
|
|
78
|
+
## [Unreleased] - 2025-09-02
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
|
|
82
|
+
- feat: add new feature
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
|
|
86
|
+
- fix: resolve bug in parser
|
|
87
|
+
|
|
88
|
+
## [Unreleased] - 2025-09-01
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
|
|
92
|
+
- feat: add new feature
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- fix: resolve bug in parser
|
|
97
|
+
|
|
98
|
+
## [Unreleased] - 2025-09-01
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
|
|
102
|
+
- feat: add new feature
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- fix: resolve bug in parser
|
|
107
|
+
|
|
108
|
+
## [Unreleased] - 2025-09-01
|
|
109
|
+
|
|
110
|
+
### Added
|
|
111
|
+
|
|
112
|
+
- feat: add new feature
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
|
|
116
|
+
- fix: resolve bug in parser
|
|
117
|
+
|
|
118
|
+
## [Unreleased] - 2025-09-01
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
|
|
122
|
+
- feat: add new feature
|
|
123
|
+
|
|
124
|
+
### Fixed
|
|
125
|
+
|
|
126
|
+
- fix: resolve bug in parser
|
|
127
|
+
|
|
8
128
|
## [Unreleased] - 2025-09-01
|
|
9
129
|
|
|
10
130
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crackerjack
|
|
3
|
-
Version: 0.31.
|
|
3
|
+
Version: 0.31.10
|
|
4
4
|
Summary: Opinionated Python project management tool
|
|
5
5
|
Project-URL: documentation, https://github.com/lesleslie/crackerjack
|
|
6
6
|
Project-URL: homepage, https://github.com/lesleslie/crackerjack
|
|
@@ -172,10 +172,12 @@ class WorkflowPipeline:
|
|
|
172
172
|
async def _execute_workflow_phases(self, options: OptionsProtocol) -> bool:
|
|
173
173
|
success = True
|
|
174
174
|
self.phases.run_configuration_phase(options)
|
|
175
|
+
|
|
175
176
|
if not self.phases.run_cleaning_phase(options):
|
|
176
177
|
success = False
|
|
177
178
|
self.session.fail_task("workflow", "Cleaning phase failed")
|
|
178
179
|
return False
|
|
180
|
+
|
|
179
181
|
if not await self._execute_quality_phase(options):
|
|
180
182
|
success = False
|
|
181
183
|
return False
|
|
@@ -263,6 +265,21 @@ class WorkflowPipeline:
|
|
|
263
265
|
) -> bool:
|
|
264
266
|
"""Handle standard workflow where all phases must pass."""
|
|
265
267
|
success = testing_passed and comprehensive_passed
|
|
268
|
+
|
|
269
|
+
# Debug information for workflow continuation issues
|
|
270
|
+
if not success and getattr(options, "verbose", False):
|
|
271
|
+
self.console.print(
|
|
272
|
+
f"[yellow]⚠️ Workflow stopped - testing_passed: {testing_passed}, comprehensive_passed: {comprehensive_passed}[/yellow]"
|
|
273
|
+
)
|
|
274
|
+
if not testing_passed:
|
|
275
|
+
self.console.print(
|
|
276
|
+
"[yellow] → Tests reported failure despite appearing successful[/yellow]"
|
|
277
|
+
)
|
|
278
|
+
if not comprehensive_passed:
|
|
279
|
+
self.console.print(
|
|
280
|
+
"[yellow] → Comprehensive hooks reported failure despite appearing successful[/yellow]"
|
|
281
|
+
)
|
|
282
|
+
|
|
266
283
|
if options.ai_agent and self._should_debug():
|
|
267
284
|
self.debugger.log_iteration_end(iteration, success)
|
|
268
285
|
return success
|
|
@@ -136,6 +136,36 @@ class TestManager:
|
|
|
136
136
|
except Exception:
|
|
137
137
|
return None
|
|
138
138
|
|
|
139
|
+
def get_coverage(self) -> dict[str, t.Any]:
|
|
140
|
+
"""Get coverage information as required by TestManagerProtocol."""
|
|
141
|
+
try:
|
|
142
|
+
# Get the ratchet status which includes coverage information
|
|
143
|
+
status = self.coverage_ratchet.get_status_report()
|
|
144
|
+
|
|
145
|
+
if status.get("status") == "not_initialized":
|
|
146
|
+
return {
|
|
147
|
+
"status": "not_initialized",
|
|
148
|
+
"coverage_percent": 0.0,
|
|
149
|
+
"message": "Coverage ratchet not initialized",
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
"status": "active",
|
|
154
|
+
"coverage_percent": status.get("current_coverage", 0.0),
|
|
155
|
+
"target_coverage": status.get("target_coverage", 100.0),
|
|
156
|
+
"next_milestone": status.get("next_milestone"),
|
|
157
|
+
"progress_percent": status.get("progress_percent", 0.0),
|
|
158
|
+
"last_updated": status.get("last_updated"),
|
|
159
|
+
"milestones_achieved": status.get("milestones_achieved", []),
|
|
160
|
+
}
|
|
161
|
+
except Exception as e:
|
|
162
|
+
return {
|
|
163
|
+
"status": "error",
|
|
164
|
+
"coverage_percent": 0.0,
|
|
165
|
+
"error": str(e),
|
|
166
|
+
"message": "Failed to get coverage information",
|
|
167
|
+
}
|
|
168
|
+
|
|
139
169
|
def has_tests(self) -> bool:
|
|
140
170
|
"""Check if project has tests."""
|
|
141
171
|
test_directories = ["tests", "test"]
|
|
@@ -219,11 +249,17 @@ class TestManager:
|
|
|
219
249
|
self._handle_coverage_improvement(ratchet_result)
|
|
220
250
|
return True
|
|
221
251
|
else:
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
f"{ratchet_result
|
|
225
|
-
|
|
226
|
-
|
|
252
|
+
# Use the message from the ratchet result if available, or construct from available data
|
|
253
|
+
if "message" in ratchet_result:
|
|
254
|
+
self.console.print(f"[red]📉[/red] {ratchet_result['message']}")
|
|
255
|
+
else:
|
|
256
|
+
# Fallback to constructing message from available keys
|
|
257
|
+
current = ratchet_result.get("current_coverage", 0)
|
|
258
|
+
previous = ratchet_result.get("previous_coverage", 0)
|
|
259
|
+
self.console.print(
|
|
260
|
+
f"[red]📉[/red] Coverage regression: "
|
|
261
|
+
f"{current:.2f}% < {previous:.2f}%"
|
|
262
|
+
)
|
|
227
263
|
return False
|
|
228
264
|
|
|
229
265
|
def _handle_coverage_improvement(self, ratchet_result: dict[str, t.Any]) -> None:
|
|
@@ -332,11 +332,13 @@ class CoverageRatchetService:
|
|
|
332
332
|
# Look for .coverage file or coverage.json
|
|
333
333
|
coverage_file = self.pkg_path / "coverage.json"
|
|
334
334
|
if not coverage_file.exists():
|
|
335
|
-
#
|
|
335
|
+
# No coverage data - this is acceptable, return success
|
|
336
336
|
return {
|
|
337
|
-
"success":
|
|
338
|
-
"
|
|
339
|
-
"message": "
|
|
337
|
+
"success": True,
|
|
338
|
+
"status": "no_coverage_data",
|
|
339
|
+
"message": "No coverage data found - tests passed without coverage",
|
|
340
|
+
"allowed": True,
|
|
341
|
+
"baseline_updated": False,
|
|
340
342
|
}
|
|
341
343
|
|
|
342
344
|
# Parse coverage data (simplified for now)
|
|
@@ -346,7 +348,9 @@ class CoverageRatchetService:
|
|
|
346
348
|
)
|
|
347
349
|
|
|
348
350
|
# Update the ratchet
|
|
349
|
-
|
|
351
|
+
result = self.update_coverage(current_coverage)
|
|
352
|
+
result["success"] = result.get("allowed", True)
|
|
353
|
+
return result
|
|
350
354
|
|
|
351
355
|
except Exception as e:
|
|
352
356
|
return {
|
|
@@ -29,18 +29,27 @@ class GitService:
|
|
|
29
29
|
|
|
30
30
|
def get_changed_files(self) -> list[str]:
|
|
31
31
|
try:
|
|
32
|
-
|
|
32
|
+
# Get staged files excluding deletions
|
|
33
|
+
staged_result = self._run_git_command(
|
|
34
|
+
["diff", "--cached", "--name-only", "--diff-filter=ACMRT"]
|
|
35
|
+
)
|
|
33
36
|
staged_files = (
|
|
34
37
|
staged_result.stdout.strip().split("\n")
|
|
35
38
|
if staged_result.stdout.strip()
|
|
36
39
|
else []
|
|
37
40
|
)
|
|
38
|
-
|
|
41
|
+
|
|
42
|
+
# Get unstaged files excluding deletions
|
|
43
|
+
unstaged_result = self._run_git_command(
|
|
44
|
+
["diff", "--name-only", "--diff-filter=ACMRT"]
|
|
45
|
+
)
|
|
39
46
|
unstaged_files = (
|
|
40
47
|
unstaged_result.stdout.strip().split("\n")
|
|
41
48
|
if unstaged_result.stdout.strip()
|
|
42
49
|
else []
|
|
43
50
|
)
|
|
51
|
+
|
|
52
|
+
# Get untracked files
|
|
44
53
|
untracked_result = self._run_git_command(
|
|
45
54
|
["ls-files", "--others", "--exclude-standard"],
|
|
46
55
|
)
|
|
@@ -49,6 +58,7 @@ class GitService:
|
|
|
49
58
|
if untracked_result.stdout.strip()
|
|
50
59
|
else []
|
|
51
60
|
)
|
|
61
|
+
|
|
52
62
|
all_files = set(staged_files + unstaged_files + untracked_files)
|
|
53
63
|
return [f for f in all_files if f]
|
|
54
64
|
except Exception as e:
|
|
@@ -72,7 +72,7 @@ class InitializationService:
|
|
|
72
72
|
"pyproject.toml": "smart_merge",
|
|
73
73
|
"CLAUDE.md": "smart_append",
|
|
74
74
|
"RULES.md": "replace_if_missing",
|
|
75
|
-
"mcp.json": "special", # Special handling: mcp.json -> .mcp.json with merging
|
|
75
|
+
"example.mcp.json": "special", # Special handling: example.mcp.json -> .mcp.json with merging
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
def _process_config_file(
|
|
@@ -84,8 +84,8 @@ class InitializationService:
|
|
|
84
84
|
force: bool,
|
|
85
85
|
results: dict[str, t.Any],
|
|
86
86
|
) -> None:
|
|
87
|
-
# Special handling for mcp.json -> .mcp.json
|
|
88
|
-
if file_name == "mcp.json":
|
|
87
|
+
# Special handling for example.mcp.json -> .mcp.json
|
|
88
|
+
if file_name == "example.mcp.json":
|
|
89
89
|
self._process_mcp_config(target_path, force, results)
|
|
90
90
|
return
|
|
91
91
|
|
|
@@ -248,14 +248,14 @@ class InitializationService:
|
|
|
248
248
|
force: bool,
|
|
249
249
|
results: dict[str, t.Any],
|
|
250
250
|
) -> None:
|
|
251
|
-
"""Handle special processing for mcp.json -> .mcp.json with merging."""
|
|
252
|
-
# Source: mcp.json in crackerjack package (contains servers to add to projects)
|
|
253
|
-
source_file = self.pkg_path / "mcp.json"
|
|
251
|
+
"""Handle special processing for example.mcp.json -> .mcp.json with merging."""
|
|
252
|
+
# Source: example.mcp.json in crackerjack package (contains servers to add to projects)
|
|
253
|
+
source_file = self.pkg_path / "example.mcp.json"
|
|
254
254
|
# Target: .mcp.json in target project
|
|
255
255
|
target_file = target_path / ".mcp.json"
|
|
256
256
|
|
|
257
257
|
if not source_file.exists():
|
|
258
|
-
self._handle_missing_source_file("mcp.json", results)
|
|
258
|
+
self._handle_missing_source_file("example.mcp.json", results)
|
|
259
259
|
return
|
|
260
260
|
|
|
261
261
|
try:
|
|
@@ -265,8 +265,8 @@ class InitializationService:
|
|
|
265
265
|
|
|
266
266
|
if not isinstance(source_config.get("mcpServers"), dict):
|
|
267
267
|
self._handle_file_processing_error(
|
|
268
|
-
"mcp.json",
|
|
269
|
-
ValueError("Invalid mcp.json format: missing mcpServers"),
|
|
268
|
+
"example.mcp.json",
|
|
269
|
+
ValueError("Invalid example.mcp.json format: missing mcpServers"),
|
|
270
270
|
results,
|
|
271
271
|
)
|
|
272
272
|
return
|
|
@@ -332,7 +332,7 @@ wheels = [
|
|
|
332
332
|
|
|
333
333
|
[[package]]
|
|
334
334
|
name = "crackerjack"
|
|
335
|
-
version = "0.31.
|
|
335
|
+
version = "0.31.9"
|
|
336
336
|
source = { editable = "." }
|
|
337
337
|
dependencies = [
|
|
338
338
|
{ name = "aiofiles" },
|
|
@@ -378,6 +378,7 @@ dependencies = [
|
|
|
378
378
|
|
|
379
379
|
[package.dev-dependencies]
|
|
380
380
|
dev = [
|
|
381
|
+
{ name = "excalidraw-mcp" },
|
|
381
382
|
{ name = "session-mgmt-mcp" },
|
|
382
383
|
]
|
|
383
384
|
|
|
@@ -425,7 +426,10 @@ requires-dist = [
|
|
|
425
426
|
]
|
|
426
427
|
|
|
427
428
|
[package.metadata.requires-dev]
|
|
428
|
-
dev = [
|
|
429
|
+
dev = [
|
|
430
|
+
{ name = "excalidraw-mcp", specifier = ">=0.1.2" },
|
|
431
|
+
{ name = "session-mgmt-mcp", specifier = ">=0.1.3" },
|
|
432
|
+
]
|
|
429
433
|
|
|
430
434
|
[[package]]
|
|
431
435
|
name = "creosote"
|
|
@@ -584,6 +588,23 @@ wheels = [
|
|
|
584
588
|
{ url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" },
|
|
585
589
|
]
|
|
586
590
|
|
|
591
|
+
[[package]]
|
|
592
|
+
name = "excalidraw-mcp"
|
|
593
|
+
version = "0.1.2"
|
|
594
|
+
source = { registry = "https://pypi.org/simple" }
|
|
595
|
+
dependencies = [
|
|
596
|
+
{ name = "cryptography" },
|
|
597
|
+
{ name = "fastmcp" },
|
|
598
|
+
{ name = "httpx", extra = ["http2"] },
|
|
599
|
+
{ name = "psutil" },
|
|
600
|
+
{ name = "pydantic" },
|
|
601
|
+
{ name = "pyjwt" },
|
|
602
|
+
]
|
|
603
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1e/84/572e03ccc4f3b6425778653d82c950dcd725d32cd8a10be7c4fb854761c5/excalidraw_mcp-0.1.2.tar.gz", hash = "sha256:d0b016e48462369ce745665c940307a56ff73bd51037660ac7e7b4e8d006b769", size = 181018, upload-time = "2025-09-02T06:38:39.888Z" }
|
|
604
|
+
wheels = [
|
|
605
|
+
{ url = "https://files.pythonhosted.org/packages/49/a3/04da808d1ba85cc709abd54086673320a6261659c65eebd265b87cd5fc89/excalidraw_mcp-0.1.2-py3-none-any.whl", hash = "sha256:452db458fe4f3abe9fbb9023c73a981ce1de7639be9e51e1923959f90823a40d", size = 20742, upload-time = "2025-09-02T06:38:38.503Z" },
|
|
606
|
+
]
|
|
607
|
+
|
|
587
608
|
[[package]]
|
|
588
609
|
name = "exceptiongroup"
|
|
589
610
|
version = "1.3.0"
|
|
@@ -709,6 +730,19 @@ wheels = [
|
|
|
709
730
|
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
|
710
731
|
]
|
|
711
732
|
|
|
733
|
+
[[package]]
|
|
734
|
+
name = "h2"
|
|
735
|
+
version = "4.3.0"
|
|
736
|
+
source = { registry = "https://pypi.org/simple" }
|
|
737
|
+
dependencies = [
|
|
738
|
+
{ name = "hpack" },
|
|
739
|
+
{ name = "hyperframe" },
|
|
740
|
+
]
|
|
741
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026, upload-time = "2025-08-23T18:12:19.778Z" }
|
|
742
|
+
wheels = [
|
|
743
|
+
{ url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779, upload-time = "2025-08-23T18:12:17.779Z" },
|
|
744
|
+
]
|
|
745
|
+
|
|
712
746
|
[[package]]
|
|
713
747
|
name = "hatchling"
|
|
714
748
|
version = "1.27.0"
|
|
@@ -724,6 +758,15 @@ wheels = [
|
|
|
724
758
|
{ url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794, upload-time = "2024-12-15T17:08:10.364Z" },
|
|
725
759
|
]
|
|
726
760
|
|
|
761
|
+
[[package]]
|
|
762
|
+
name = "hpack"
|
|
763
|
+
version = "4.1.0"
|
|
764
|
+
source = { registry = "https://pypi.org/simple" }
|
|
765
|
+
sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" }
|
|
766
|
+
wheels = [
|
|
767
|
+
{ url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" },
|
|
768
|
+
]
|
|
769
|
+
|
|
727
770
|
[[package]]
|
|
728
771
|
name = "httpcore"
|
|
729
772
|
version = "1.0.9"
|
|
@@ -752,6 +795,11 @@ wheels = [
|
|
|
752
795
|
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
|
753
796
|
]
|
|
754
797
|
|
|
798
|
+
[package.optional-dependencies]
|
|
799
|
+
http2 = [
|
|
800
|
+
{ name = "h2" },
|
|
801
|
+
]
|
|
802
|
+
|
|
755
803
|
[[package]]
|
|
756
804
|
name = "httpx-sse"
|
|
757
805
|
version = "0.4.1"
|
|
@@ -761,6 +809,15 @@ wheels = [
|
|
|
761
809
|
{ url = "https://files.pythonhosted.org/packages/25/0a/6269e3473b09aed2dab8aa1a600c70f31f00ae1349bee30658f7e358a159/httpx_sse-0.4.1-py3-none-any.whl", hash = "sha256:cba42174344c3a5b06f255ce65b350880f962d99ead85e776f23c6618a377a37", size = 8054, upload-time = "2025-06-24T13:21:04.772Z" },
|
|
762
810
|
]
|
|
763
811
|
|
|
812
|
+
[[package]]
|
|
813
|
+
name = "hyperframe"
|
|
814
|
+
version = "6.1.0"
|
|
815
|
+
source = { registry = "https://pypi.org/simple" }
|
|
816
|
+
sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" }
|
|
817
|
+
wheels = [
|
|
818
|
+
{ url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" },
|
|
819
|
+
]
|
|
820
|
+
|
|
764
821
|
[[package]]
|
|
765
822
|
name = "hypothesis"
|
|
766
823
|
version = "6.138.13"
|
|
@@ -1671,6 +1728,15 @@ wheels = [
|
|
|
1671
1728
|
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
|
|
1672
1729
|
]
|
|
1673
1730
|
|
|
1731
|
+
[[package]]
|
|
1732
|
+
name = "pyjwt"
|
|
1733
|
+
version = "2.10.1"
|
|
1734
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1735
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" }
|
|
1736
|
+
wheels = [
|
|
1737
|
+
{ url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" },
|
|
1738
|
+
]
|
|
1739
|
+
|
|
1674
1740
|
[[package]]
|
|
1675
1741
|
name = "pyleak"
|
|
1676
1742
|
version = "0.1.14"
|
|
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "crackerjack"
|
|
9
|
-
version = "0.31.
|
|
9
|
+
version = "0.31.10"
|
|
10
10
|
description = "Opinionated Python project management tool"
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
authors = [
|
|
@@ -315,5 +315,6 @@ max_complexity = 15
|
|
|
315
315
|
|
|
316
316
|
[dependency-groups]
|
|
317
317
|
dev = [
|
|
318
|
+
"excalidraw-mcp>=0.1.2",
|
|
318
319
|
"session-mgmt-mcp>=0.1.3",
|
|
319
320
|
]
|
|
@@ -332,7 +332,7 @@ wheels = [
|
|
|
332
332
|
|
|
333
333
|
[[package]]
|
|
334
334
|
name = "crackerjack"
|
|
335
|
-
version = "0.31.
|
|
335
|
+
version = "0.31.9"
|
|
336
336
|
source = { editable = "." }
|
|
337
337
|
dependencies = [
|
|
338
338
|
{ name = "aiofiles" },
|
|
@@ -378,6 +378,7 @@ dependencies = [
|
|
|
378
378
|
|
|
379
379
|
[package.dev-dependencies]
|
|
380
380
|
dev = [
|
|
381
|
+
{ name = "excalidraw-mcp" },
|
|
381
382
|
{ name = "session-mgmt-mcp" },
|
|
382
383
|
]
|
|
383
384
|
|
|
@@ -425,7 +426,10 @@ requires-dist = [
|
|
|
425
426
|
]
|
|
426
427
|
|
|
427
428
|
[package.metadata.requires-dev]
|
|
428
|
-
dev = [
|
|
429
|
+
dev = [
|
|
430
|
+
{ name = "excalidraw-mcp", specifier = ">=0.1.2" },
|
|
431
|
+
{ name = "session-mgmt-mcp", specifier = ">=0.1.3" },
|
|
432
|
+
]
|
|
429
433
|
|
|
430
434
|
[[package]]
|
|
431
435
|
name = "creosote"
|
|
@@ -584,6 +588,23 @@ wheels = [
|
|
|
584
588
|
{ url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" },
|
|
585
589
|
]
|
|
586
590
|
|
|
591
|
+
[[package]]
|
|
592
|
+
name = "excalidraw-mcp"
|
|
593
|
+
version = "0.1.2"
|
|
594
|
+
source = { registry = "https://pypi.org/simple" }
|
|
595
|
+
dependencies = [
|
|
596
|
+
{ name = "cryptography" },
|
|
597
|
+
{ name = "fastmcp" },
|
|
598
|
+
{ name = "httpx", extra = ["http2"] },
|
|
599
|
+
{ name = "psutil" },
|
|
600
|
+
{ name = "pydantic" },
|
|
601
|
+
{ name = "pyjwt" },
|
|
602
|
+
]
|
|
603
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1e/84/572e03ccc4f3b6425778653d82c950dcd725d32cd8a10be7c4fb854761c5/excalidraw_mcp-0.1.2.tar.gz", hash = "sha256:d0b016e48462369ce745665c940307a56ff73bd51037660ac7e7b4e8d006b769", size = 181018, upload-time = "2025-09-02T06:38:39.888Z" }
|
|
604
|
+
wheels = [
|
|
605
|
+
{ url = "https://files.pythonhosted.org/packages/49/a3/04da808d1ba85cc709abd54086673320a6261659c65eebd265b87cd5fc89/excalidraw_mcp-0.1.2-py3-none-any.whl", hash = "sha256:452db458fe4f3abe9fbb9023c73a981ce1de7639be9e51e1923959f90823a40d", size = 20742, upload-time = "2025-09-02T06:38:38.503Z" },
|
|
606
|
+
]
|
|
607
|
+
|
|
587
608
|
[[package]]
|
|
588
609
|
name = "exceptiongroup"
|
|
589
610
|
version = "1.3.0"
|
|
@@ -709,6 +730,19 @@ wheels = [
|
|
|
709
730
|
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
|
710
731
|
]
|
|
711
732
|
|
|
733
|
+
[[package]]
|
|
734
|
+
name = "h2"
|
|
735
|
+
version = "4.3.0"
|
|
736
|
+
source = { registry = "https://pypi.org/simple" }
|
|
737
|
+
dependencies = [
|
|
738
|
+
{ name = "hpack" },
|
|
739
|
+
{ name = "hyperframe" },
|
|
740
|
+
]
|
|
741
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026, upload-time = "2025-08-23T18:12:19.778Z" }
|
|
742
|
+
wheels = [
|
|
743
|
+
{ url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779, upload-time = "2025-08-23T18:12:17.779Z" },
|
|
744
|
+
]
|
|
745
|
+
|
|
712
746
|
[[package]]
|
|
713
747
|
name = "hatchling"
|
|
714
748
|
version = "1.27.0"
|
|
@@ -724,6 +758,15 @@ wheels = [
|
|
|
724
758
|
{ url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794, upload-time = "2024-12-15T17:08:10.364Z" },
|
|
725
759
|
]
|
|
726
760
|
|
|
761
|
+
[[package]]
|
|
762
|
+
name = "hpack"
|
|
763
|
+
version = "4.1.0"
|
|
764
|
+
source = { registry = "https://pypi.org/simple" }
|
|
765
|
+
sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" }
|
|
766
|
+
wheels = [
|
|
767
|
+
{ url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" },
|
|
768
|
+
]
|
|
769
|
+
|
|
727
770
|
[[package]]
|
|
728
771
|
name = "httpcore"
|
|
729
772
|
version = "1.0.9"
|
|
@@ -752,6 +795,11 @@ wheels = [
|
|
|
752
795
|
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
|
753
796
|
]
|
|
754
797
|
|
|
798
|
+
[package.optional-dependencies]
|
|
799
|
+
http2 = [
|
|
800
|
+
{ name = "h2" },
|
|
801
|
+
]
|
|
802
|
+
|
|
755
803
|
[[package]]
|
|
756
804
|
name = "httpx-sse"
|
|
757
805
|
version = "0.4.1"
|
|
@@ -761,6 +809,15 @@ wheels = [
|
|
|
761
809
|
{ url = "https://files.pythonhosted.org/packages/25/0a/6269e3473b09aed2dab8aa1a600c70f31f00ae1349bee30658f7e358a159/httpx_sse-0.4.1-py3-none-any.whl", hash = "sha256:cba42174344c3a5b06f255ce65b350880f962d99ead85e776f23c6618a377a37", size = 8054, upload-time = "2025-06-24T13:21:04.772Z" },
|
|
762
810
|
]
|
|
763
811
|
|
|
812
|
+
[[package]]
|
|
813
|
+
name = "hyperframe"
|
|
814
|
+
version = "6.1.0"
|
|
815
|
+
source = { registry = "https://pypi.org/simple" }
|
|
816
|
+
sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" }
|
|
817
|
+
wheels = [
|
|
818
|
+
{ url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" },
|
|
819
|
+
]
|
|
820
|
+
|
|
764
821
|
[[package]]
|
|
765
822
|
name = "hypothesis"
|
|
766
823
|
version = "6.138.13"
|
|
@@ -1671,6 +1728,15 @@ wheels = [
|
|
|
1671
1728
|
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
|
|
1672
1729
|
]
|
|
1673
1730
|
|
|
1731
|
+
[[package]]
|
|
1732
|
+
name = "pyjwt"
|
|
1733
|
+
version = "2.10.1"
|
|
1734
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1735
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" }
|
|
1736
|
+
wheels = [
|
|
1737
|
+
{ url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" },
|
|
1738
|
+
]
|
|
1739
|
+
|
|
1674
1740
|
[[package]]
|
|
1675
1741
|
name = "pyleak"
|
|
1676
1742
|
version = "0.1.14"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|