mcp-ticketer 0.1.29__tar.gz → 0.1.31__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 mcp-ticketer might be problematic. Click here for more details.
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CHANGELOG.md +15 -0
- mcp_ticketer-0.1.31/DIAGNOSTICS_FEATURE.md +301 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/PKG-INFO +1 -1
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__version__.py +1 -1
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/diagnostics.py +108 -21
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/config.py +93 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/PKG-INFO +1 -1
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/SOURCES.txt +1 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/.dependency_cache +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/.mpm_deployment_state +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/agent-manager.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/agentic-coder-optimizer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/api_qa.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/clerk-ops.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/code_analyzer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/content-agent.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/dart_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/data_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/documentation.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/gcp_ops_agent.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/golang_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/imagemagick.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/java_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/local_ops_agent.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/memory_manager.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/nextjs_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/ops.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/php-engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/product_owner.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/project_organizer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/prompt-engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/python_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/qa.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/react_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/refactoring_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/research.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/ruby-engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/rust_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/security.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/ticketing.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/typescript_engineer.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/vercel_ops_agent.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/version_control.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/web_qa.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/agents/web_ui.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/mcp.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude/mcp.local.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/config/project.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/mcp_auto_config_preference.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/README.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/documentation_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/engineer_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/ops_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/project_knowledge_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/qa_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/research_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/version-control_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude-mpm/memories/workflows_memories.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.claude.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.coveragerc +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.env.example +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.github/workflows/docs.yml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.github/workflows/publish.yml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.github/workflows/test.yml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.mcp/config.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.pre-commit-config.yaml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.python-version +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/.readthedocs.yaml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CLAUDE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CLAUDE_DESKTOP_SETUP.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CODEX_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CODE_STRUCTURE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CONFIG_RESOLUTION_FIX.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CONTRIBUTING.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/CREDENTIAL_VALIDATION_FIX.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/ENV_DISCOVERY_COMPLETE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/FIX_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/JIRA_SETUP.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/LICENSE +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/LINEAR_SETUP.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/MANIFEST.in +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/Makefile +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/OPTIMIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/QUEUE_SYSTEM.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/QUICK_START.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/README.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/RELEASE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/RELEASING.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/SECURITY_SCAN_REPORT_v0.1.24.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/TEST_COVERAGE_REPORT.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/TEST_RESULTS_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/VERIFICATION_RESULTS.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/claude-desktop-config.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/debug_search.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/debug_test.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/ADAPTERS.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/AI_CLIENT_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/API_REFERENCE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/CONFIGURATION.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/DEVELOPER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/ENV_DISCOVERY.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/MCP_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/MIGRATION_GUIDE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/PROJECT_CONFIG.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/PR_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/QUICK_START_ENV.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/USER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_archive/README.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters/github.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/api.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/cli.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/development.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/examples.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/index.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/installation.rst.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/adapters/github.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/adapters.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/api.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/cli.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/conf.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/development.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/examples.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/index.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/installation.rst +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/prd/mcp-ticketer-prd.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/docs/requirements.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/install.sh +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/mcp-ticketer +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/mcp-ticketer-server +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/mcp_server.sh +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/pyproject.toml +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/pytest.ini +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/requirements-dev.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/requirements.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/scripts/README.md +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/scripts/manage_version.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/setup.cfg +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/setup.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/github.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/hybrid.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/jira.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/linear.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/memory.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/auggie_configure.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/codex_configure.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/configure.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/discover.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/gemini_configure.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/main.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/mcp_configure.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/migrate_config.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/queue_commands.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/simple_health.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/utils.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/adapter.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/env_discovery.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/http_client.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/mappers.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/models.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/project_config.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/registry.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/server.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/py.typed +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__main__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/health_monitor.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/manager.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/queue.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/run_worker.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/ticket_registry.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/worker.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/requires.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test-tickets/tickets/task-20250924002724.json +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_all_adapters.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_api_usage.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_basic.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_codex_config.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_comprehensive.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_config_resolution.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_credential_validation.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_error_handling.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_github.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_github_token.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_jira.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_linear.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_linear_native.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_linear_teams.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_mcp_server_qa.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_optimizations.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_performance.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_pr_functionality.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_queue_system.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_serve_config.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/test_set_command.sh +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/adapters/test_aitrackdown.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/conftest.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/core/test_env_discovery.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/e2e/test_complete_workflow.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/e2e/test_hierarchy_validation.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/e2e/test_state_transitions.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/test_base_adapter.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/test_models.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tests/test_queue.py +0 -0
- {mcp_ticketer-0.1.29 → mcp_ticketer-0.1.31}/tox.ini +0 -0
|
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.30] - 2025-10-24
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- **Diagnostics System**: Improved fallback mode handling for missing dependencies
|
|
13
|
+
- Fixed initialization order for warnings/issues lists
|
|
14
|
+
- Enhanced mock object detection for configuration and queue systems
|
|
15
|
+
- Better graceful degradation when PyYAML or other dependencies are missing
|
|
16
|
+
- Improved environment variable detection in fallback mode
|
|
17
|
+
- More informative status reporting for degraded components
|
|
18
|
+
|
|
19
|
+
### Enhanced
|
|
20
|
+
- **Error Handling**: More robust handling of import failures and missing dependencies
|
|
21
|
+
- **User Experience**: Clearer distinction between critical failures and degraded functionality
|
|
22
|
+
- **Fallback Diagnostics**: Better information gathering even when full system is unavailable
|
|
23
|
+
|
|
9
24
|
## [0.1.29] - 2025-10-24
|
|
10
25
|
|
|
11
26
|
### Added
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# 🔍 MCP Ticketer Diagnostics & Self-Diagnosis System
|
|
2
|
+
|
|
3
|
+
**Version**: 0.1.28+
|
|
4
|
+
**Status**: ✅ **IMPLEMENTED & DEPLOYED**
|
|
5
|
+
**Date**: 2025-10-24
|
|
6
|
+
|
|
7
|
+
## 🎯 Overview
|
|
8
|
+
|
|
9
|
+
The MCP Ticketer diagnostics system provides comprehensive health monitoring and self-diagnosis capabilities for both users and AI agents. This addresses the critical need for system visibility when troubleshooting issues like the "60% queue failure rate" problem.
|
|
10
|
+
|
|
11
|
+
## 🚀 Features Implemented
|
|
12
|
+
|
|
13
|
+
### 1. **CLI Health Commands**
|
|
14
|
+
|
|
15
|
+
#### Quick Health Check
|
|
16
|
+
```bash
|
|
17
|
+
mcp-ticketer health
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Output Example:**
|
|
21
|
+
```
|
|
22
|
+
🏥 MCP Ticketer Quick Health Check
|
|
23
|
+
==================================================
|
|
24
|
+
✅ Python: 3.13.7
|
|
25
|
+
✅ Configuration: Found .aitrackdown
|
|
26
|
+
✅ Aitrackdown: Directory exists at .aitrackdown
|
|
27
|
+
ℹ️ Aitrackdown: 46 tickets found
|
|
28
|
+
✅ Environment: 2 adapter variables configured
|
|
29
|
+
• LINEAR_API_KEY
|
|
30
|
+
• GITHUB_TOKEN
|
|
31
|
+
✅ Installation: mcp-ticketer 0.1.28 installed
|
|
32
|
+
⚠️ Queue System: Could not check status - import error
|
|
33
|
+
|
|
34
|
+
🎉 System appears healthy!
|
|
35
|
+
💡 For detailed diagnosis, run: mcp-ticketer diagnose
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
#### Comprehensive Diagnosis
|
|
39
|
+
```bash
|
|
40
|
+
mcp-ticketer diagnose # Full diagnosis
|
|
41
|
+
mcp-ticketer diagnose --simple # Simple diagnosis (no heavy dependencies)
|
|
42
|
+
mcp-ticketer diagnose --output report.json # Save to file
|
|
43
|
+
mcp-ticketer diagnose --json # JSON output
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Output Example:**
|
|
47
|
+
```
|
|
48
|
+
🔍 MCP Ticketer Simple Diagnosis
|
|
49
|
+
============================================================
|
|
50
|
+
|
|
51
|
+
📋 Basic System Check
|
|
52
|
+
✅ Python 3.13.7
|
|
53
|
+
✅ mcp-ticketer 0.1.28 installed
|
|
54
|
+
|
|
55
|
+
📋 Configuration Check
|
|
56
|
+
ℹ️ No configuration files (using defaults)
|
|
57
|
+
✅ 2 adapter environment variables configured
|
|
58
|
+
|
|
59
|
+
============================================================
|
|
60
|
+
📋 DIAGNOSIS SUMMARY
|
|
61
|
+
============================================================
|
|
62
|
+
|
|
63
|
+
💡 Recommendations:
|
|
64
|
+
✅ System appears healthy
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 2. **MCP Diagnostic Tools**
|
|
68
|
+
|
|
69
|
+
Two new MCP tools are available for AI agents:
|
|
70
|
+
|
|
71
|
+
#### `system_health`
|
|
72
|
+
- **Purpose**: Quick system health check
|
|
73
|
+
- **Parameters**: None
|
|
74
|
+
- **Returns**: Configuration status, queue worker status, failure rates
|
|
75
|
+
- **Use Case**: AI agents can quickly check if the system is operational
|
|
76
|
+
|
|
77
|
+
#### `system_diagnose`
|
|
78
|
+
- **Purpose**: Comprehensive system diagnostics
|
|
79
|
+
- **Parameters**:
|
|
80
|
+
- `include_logs` (boolean, optional): Include recent log analysis
|
|
81
|
+
- **Returns**: Detailed analysis of all components with recommendations
|
|
82
|
+
- **Use Case**: Deep troubleshooting when issues are detected
|
|
83
|
+
|
|
84
|
+
### 3. **Intelligent Fallback System**
|
|
85
|
+
|
|
86
|
+
The diagnostics system includes multiple fallback mechanisms:
|
|
87
|
+
|
|
88
|
+
1. **Simple Health Check**: Works without heavy dependencies (PyYAML, etc.)
|
|
89
|
+
2. **Graceful Degradation**: Falls back to simple diagnostics if full system fails
|
|
90
|
+
3. **Import Protection**: Handles missing dependencies gracefully
|
|
91
|
+
4. **Error Recovery**: Continues diagnosis even if individual components fail
|
|
92
|
+
|
|
93
|
+
## 🔧 Technical Implementation
|
|
94
|
+
|
|
95
|
+
### Architecture
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
src/mcp_ticketer/cli/
|
|
99
|
+
├── diagnostics.py # Full diagnostics system
|
|
100
|
+
├── simple_health.py # Lightweight fallback diagnostics
|
|
101
|
+
└── main.py # CLI command integration
|
|
102
|
+
|
|
103
|
+
src/mcp_ticketer/mcp/
|
|
104
|
+
└── server.py # MCP tool integration
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Key Components
|
|
108
|
+
|
|
109
|
+
#### 1. **SystemDiagnostics Class** (`diagnostics.py`)
|
|
110
|
+
- Comprehensive system analysis
|
|
111
|
+
- Configuration validation
|
|
112
|
+
- Adapter functionality testing
|
|
113
|
+
- Queue system health monitoring
|
|
114
|
+
- Log analysis
|
|
115
|
+
- Performance metrics
|
|
116
|
+
- Actionable recommendations
|
|
117
|
+
|
|
118
|
+
#### 2. **Simple Health Functions** (`simple_health.py`)
|
|
119
|
+
- Lightweight checks without heavy dependencies
|
|
120
|
+
- Basic configuration detection
|
|
121
|
+
- Environment variable validation
|
|
122
|
+
- Installation verification
|
|
123
|
+
- Fallback for when full diagnostics fail
|
|
124
|
+
|
|
125
|
+
#### 3. **MCP Integration** (`server.py`)
|
|
126
|
+
- Two new MCP tools: `system_health` and `system_diagnose`
|
|
127
|
+
- JSON-RPC compatible responses
|
|
128
|
+
- Error handling and status reporting
|
|
129
|
+
- Integration with existing MCP server
|
|
130
|
+
|
|
131
|
+
### Diagnostic Categories
|
|
132
|
+
|
|
133
|
+
#### ✅ **Configuration Analysis**
|
|
134
|
+
- Adapter configuration validation
|
|
135
|
+
- Credential verification (where available)
|
|
136
|
+
- Default adapter detection
|
|
137
|
+
- Configuration file discovery
|
|
138
|
+
|
|
139
|
+
#### ⚡ **Queue System Health**
|
|
140
|
+
- Worker process status
|
|
141
|
+
- Queue statistics and failure rates
|
|
142
|
+
- Health score calculation (0-100)
|
|
143
|
+
- Performance metrics
|
|
144
|
+
|
|
145
|
+
#### 🔌 **Adapter Functionality**
|
|
146
|
+
- Adapter initialization testing
|
|
147
|
+
- Basic functionality verification (non-destructive)
|
|
148
|
+
- Credential validation
|
|
149
|
+
- Error reporting
|
|
150
|
+
|
|
151
|
+
#### 📝 **Log Analysis** (Full diagnostics only)
|
|
152
|
+
- Recent error detection
|
|
153
|
+
- Warning pattern analysis
|
|
154
|
+
- Log file discovery
|
|
155
|
+
- Issue correlation
|
|
156
|
+
|
|
157
|
+
#### 📊 **Performance Metrics**
|
|
158
|
+
- Response time measurement
|
|
159
|
+
- Resource usage analysis
|
|
160
|
+
- Throughput assessment
|
|
161
|
+
- Bottleneck identification
|
|
162
|
+
|
|
163
|
+
## 🎯 Use Cases
|
|
164
|
+
|
|
165
|
+
### For Users
|
|
166
|
+
|
|
167
|
+
1. **Quick System Check**
|
|
168
|
+
```bash
|
|
169
|
+
mcp-ticketer health
|
|
170
|
+
```
|
|
171
|
+
- Verify installation
|
|
172
|
+
- Check basic configuration
|
|
173
|
+
- Identify obvious issues
|
|
174
|
+
|
|
175
|
+
2. **Troubleshooting Issues**
|
|
176
|
+
```bash
|
|
177
|
+
mcp-ticketer diagnose
|
|
178
|
+
```
|
|
179
|
+
- Comprehensive system analysis
|
|
180
|
+
- Detailed error reporting
|
|
181
|
+
- Actionable recommendations
|
|
182
|
+
|
|
183
|
+
3. **CI/CD Integration**
|
|
184
|
+
```bash
|
|
185
|
+
mcp-ticketer health || exit 1
|
|
186
|
+
```
|
|
187
|
+
- Automated health checks
|
|
188
|
+
- Build pipeline validation
|
|
189
|
+
- Deployment verification
|
|
190
|
+
|
|
191
|
+
### For AI Agents
|
|
192
|
+
|
|
193
|
+
1. **System Status Monitoring**
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"tool": "system_health",
|
|
197
|
+
"arguments": {}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
- Quick operational status
|
|
201
|
+
- Failure rate monitoring
|
|
202
|
+
- Component health overview
|
|
203
|
+
|
|
204
|
+
2. **Issue Investigation**
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"tool": "system_diagnose",
|
|
208
|
+
"arguments": {"include_logs": true}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
- Deep system analysis
|
|
212
|
+
- Root cause identification
|
|
213
|
+
- Comprehensive reporting
|
|
214
|
+
|
|
215
|
+
3. **Proactive Monitoring**
|
|
216
|
+
- Regular health checks
|
|
217
|
+
- Early issue detection
|
|
218
|
+
- Automated troubleshooting
|
|
219
|
+
|
|
220
|
+
## 📈 Benefits
|
|
221
|
+
|
|
222
|
+
### 🔍 **Visibility**
|
|
223
|
+
- Clear system status reporting
|
|
224
|
+
- Component-level health monitoring
|
|
225
|
+
- Performance metrics tracking
|
|
226
|
+
- Issue identification and categorization
|
|
227
|
+
|
|
228
|
+
### 🚀 **Reliability**
|
|
229
|
+
- Proactive issue detection
|
|
230
|
+
- Automated health monitoring
|
|
231
|
+
- Self-healing recommendations
|
|
232
|
+
- Graceful degradation handling
|
|
233
|
+
|
|
234
|
+
### 🤖 **AI Agent Integration**
|
|
235
|
+
- Native MCP tool support
|
|
236
|
+
- Structured diagnostic data
|
|
237
|
+
- Actionable recommendations
|
|
238
|
+
- Automated troubleshooting workflows
|
|
239
|
+
|
|
240
|
+
### 👥 **User Experience**
|
|
241
|
+
- Simple command-line interface
|
|
242
|
+
- Rich, colorized output
|
|
243
|
+
- Multiple output formats (text, JSON)
|
|
244
|
+
- Progressive disclosure (health → diagnose)
|
|
245
|
+
|
|
246
|
+
## 🔄 Exit Codes
|
|
247
|
+
|
|
248
|
+
The diagnostic commands use standard exit codes for automation:
|
|
249
|
+
|
|
250
|
+
- **0**: System healthy, no issues detected
|
|
251
|
+
- **1**: Critical issues found, immediate attention required
|
|
252
|
+
- **2**: Warnings detected, monitoring recommended
|
|
253
|
+
|
|
254
|
+
## 🎉 Impact on Original Issue
|
|
255
|
+
|
|
256
|
+
This diagnostics system directly addresses the original problem:
|
|
257
|
+
|
|
258
|
+
> "The mcp-ticketer system itself is experiencing critical issues! This is actually very revealing - the ticketing system has a 60% failure rate"
|
|
259
|
+
|
|
260
|
+
### Before Diagnostics
|
|
261
|
+
- ❌ No visibility into system health
|
|
262
|
+
- ❌ No way to identify root causes
|
|
263
|
+
- ❌ Manual investigation required
|
|
264
|
+
- ❌ AI agents couldn't self-diagnose
|
|
265
|
+
|
|
266
|
+
### After Diagnostics
|
|
267
|
+
- ✅ **Instant system health visibility**
|
|
268
|
+
- ✅ **Automated issue detection**
|
|
269
|
+
- ✅ **AI agent self-diagnosis capability**
|
|
270
|
+
- ✅ **Actionable recommendations**
|
|
271
|
+
- ✅ **Proactive monitoring**
|
|
272
|
+
|
|
273
|
+
### Example Diagnostic Output for Queue Issues
|
|
274
|
+
```
|
|
275
|
+
❌ Queue Health: High failure rate 60.0% (12/20)
|
|
276
|
+
❌ Queue Worker: Not running
|
|
277
|
+
|
|
278
|
+
💡 Recommendations:
|
|
279
|
+
• Restart queue worker: mcp-ticketer queue worker restart
|
|
280
|
+
• Check queue system logs for error patterns
|
|
281
|
+
• Consider clearing failed queue items: mcp-ticketer queue clear --failed
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
## 🚀 Future Enhancements
|
|
285
|
+
|
|
286
|
+
1. **Metrics Dashboard**: Web-based health monitoring
|
|
287
|
+
2. **Alert Integration**: Slack/email notifications for critical issues
|
|
288
|
+
3. **Historical Tracking**: Trend analysis and performance history
|
|
289
|
+
4. **Auto-Remediation**: Automated fixing of common issues
|
|
290
|
+
5. **Custom Health Checks**: User-defined diagnostic rules
|
|
291
|
+
|
|
292
|
+
## 📚 Documentation
|
|
293
|
+
|
|
294
|
+
- **User Guide**: See `mcp-ticketer health --help` and `mcp-ticketer diagnose --help`
|
|
295
|
+
- **MCP Integration**: Tools available as `system_health` and `system_diagnose`
|
|
296
|
+
- **API Reference**: See `src/mcp_ticketer/cli/diagnostics.py` for implementation details
|
|
297
|
+
- **Examples**: See `test_diagnostics_mcp.py` for MCP usage examples
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
**The diagnostics system transforms MCP Ticketer from a "black box" into a transparent, self-monitoring system that both users and AI agents can easily understand and troubleshoot.** 🎯
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.31
|
|
4
4
|
Summary: Universal ticket management interface for AI agents with MCP support
|
|
5
5
|
Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
6
6
|
Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
@@ -15,22 +15,58 @@ from rich.panel import Panel
|
|
|
15
15
|
from rich.table import Table
|
|
16
16
|
from rich.text import Text
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
18
|
+
def safe_import_config():
|
|
19
|
+
"""Safely import configuration with fallback."""
|
|
20
|
+
try:
|
|
21
|
+
from ..core.config import get_config
|
|
22
|
+
return get_config
|
|
23
|
+
except ImportError:
|
|
24
|
+
# Create a minimal config fallback
|
|
25
|
+
class MockConfig:
|
|
26
|
+
def get_enabled_adapters(self):
|
|
27
|
+
return {}
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def default_adapter(self):
|
|
31
|
+
return "aitrackdown"
|
|
32
|
+
|
|
33
|
+
def get_config():
|
|
34
|
+
return MockConfig()
|
|
35
|
+
|
|
36
|
+
return get_config
|
|
37
|
+
|
|
38
|
+
def safe_import_registry():
|
|
39
|
+
"""Safely import adapter registry with fallback."""
|
|
40
|
+
try:
|
|
41
|
+
from ..core.registry import AdapterRegistry
|
|
42
|
+
return AdapterRegistry
|
|
43
|
+
except ImportError:
|
|
44
|
+
class MockRegistry:
|
|
45
|
+
@staticmethod
|
|
46
|
+
def get_adapter(adapter_type):
|
|
47
|
+
raise ImportError(f"Adapter {adapter_type} not available")
|
|
48
|
+
|
|
49
|
+
return MockRegistry
|
|
50
|
+
|
|
51
|
+
def safe_import_queue_manager():
|
|
52
|
+
"""Safely import queue manager with fallback."""
|
|
53
|
+
try:
|
|
54
|
+
from ..queue.manager import QueueManager
|
|
55
|
+
return QueueManager
|
|
56
|
+
except ImportError:
|
|
57
|
+
class MockQueueManager:
|
|
58
|
+
def get_worker_status(self):
|
|
59
|
+
return {"running": False, "pid": None}
|
|
60
|
+
|
|
61
|
+
def get_queue_stats(self):
|
|
62
|
+
return {"total": 0, "failed": 0}
|
|
63
|
+
|
|
64
|
+
return MockQueueManager
|
|
65
|
+
|
|
66
|
+
# Initialize with safe imports
|
|
67
|
+
get_config = safe_import_config()
|
|
68
|
+
AdapterRegistry = safe_import_registry()
|
|
69
|
+
QueueManager = safe_import_queue_manager()
|
|
34
70
|
|
|
35
71
|
console = Console()
|
|
36
72
|
logger = logging.getLogger(__name__)
|
|
@@ -40,22 +76,37 @@ class SystemDiagnostics:
|
|
|
40
76
|
"""Comprehensive system diagnostics and health reporting."""
|
|
41
77
|
|
|
42
78
|
def __init__(self):
|
|
79
|
+
# Initialize lists first
|
|
80
|
+
self.issues = []
|
|
81
|
+
self.warnings = []
|
|
82
|
+
self.successes = []
|
|
83
|
+
|
|
43
84
|
try:
|
|
44
85
|
self.config = get_config()
|
|
86
|
+
# Check if this is a mock config
|
|
87
|
+
if hasattr(self.config, '__class__') and 'Mock' in self.config.__class__.__name__:
|
|
88
|
+
self.config_available = False
|
|
89
|
+
self.warnings.append("Configuration system using fallback mode")
|
|
90
|
+
else:
|
|
91
|
+
self.config_available = True
|
|
45
92
|
except Exception as e:
|
|
46
93
|
self.config = None
|
|
94
|
+
self.config_available = False
|
|
47
95
|
console.print(f"⚠️ Could not load configuration: {e}")
|
|
48
96
|
|
|
49
97
|
try:
|
|
50
|
-
self.queue_manager = QueueManager()
|
|
98
|
+
self.queue_manager = QueueManager()
|
|
99
|
+
# Check if this is a mock queue manager
|
|
100
|
+
if hasattr(self.queue_manager, '__class__') and 'Mock' in self.queue_manager.__class__.__name__:
|
|
101
|
+
self.queue_available = False
|
|
102
|
+
self.warnings.append("Queue system using fallback mode")
|
|
103
|
+
else:
|
|
104
|
+
self.queue_available = True
|
|
51
105
|
except Exception as e:
|
|
52
106
|
self.queue_manager = None
|
|
107
|
+
self.queue_available = False
|
|
53
108
|
console.print(f"⚠️ Could not initialize queue manager: {e}")
|
|
54
109
|
|
|
55
|
-
self.issues = []
|
|
56
|
-
self.warnings = []
|
|
57
|
-
self.successes = []
|
|
58
|
-
|
|
59
110
|
async def run_full_diagnosis(self) -> Dict[str, Any]:
|
|
60
111
|
"""Run complete system diagnosis and return detailed report."""
|
|
61
112
|
console.print("\n🔍 [bold blue]MCP Ticketer System Diagnosis[/bold blue]")
|
|
@@ -112,6 +163,33 @@ class SystemDiagnostics:
|
|
|
112
163
|
console.print(f"❌ {issue}")
|
|
113
164
|
return config_status
|
|
114
165
|
|
|
166
|
+
if not self.config_available:
|
|
167
|
+
warning = "Configuration system in fallback mode - limited functionality"
|
|
168
|
+
config_status["issues"].append(warning)
|
|
169
|
+
config_status["status"] = "degraded"
|
|
170
|
+
self.warnings.append(warning)
|
|
171
|
+
console.print(f"⚠️ {warning}")
|
|
172
|
+
|
|
173
|
+
# Try to detect adapters from environment variables
|
|
174
|
+
import os
|
|
175
|
+
env_adapters = []
|
|
176
|
+
if os.getenv("LINEAR_API_KEY"):
|
|
177
|
+
env_adapters.append("linear")
|
|
178
|
+
if os.getenv("GITHUB_TOKEN"):
|
|
179
|
+
env_adapters.append("github")
|
|
180
|
+
if os.getenv("JIRA_SERVER"):
|
|
181
|
+
env_adapters.append("jira")
|
|
182
|
+
|
|
183
|
+
config_status["adapters_configured"] = len(env_adapters)
|
|
184
|
+
config_status["default_adapter"] = "aitrackdown"
|
|
185
|
+
|
|
186
|
+
if env_adapters:
|
|
187
|
+
console.print(f"ℹ️ Detected {len(env_adapters)} adapter(s) from environment: {', '.join(env_adapters)}")
|
|
188
|
+
else:
|
|
189
|
+
console.print("ℹ️ No adapter environment variables detected, using aitrackdown")
|
|
190
|
+
|
|
191
|
+
return config_status
|
|
192
|
+
|
|
115
193
|
try:
|
|
116
194
|
# Check adapter configurations
|
|
117
195
|
adapters = self.config.get_enabled_adapters()
|
|
@@ -238,6 +316,15 @@ class SystemDiagnostics:
|
|
|
238
316
|
}
|
|
239
317
|
|
|
240
318
|
try:
|
|
319
|
+
if not self.queue_available:
|
|
320
|
+
warning = "Queue system in fallback mode - limited functionality"
|
|
321
|
+
self.warnings.append(warning)
|
|
322
|
+
console.print(f"⚠️ {warning}")
|
|
323
|
+
queue_status["worker_running"] = False
|
|
324
|
+
queue_status["worker_pid"] = None
|
|
325
|
+
queue_status["health_score"] = 50 # Degraded but not critical
|
|
326
|
+
return queue_status
|
|
327
|
+
|
|
241
328
|
# Check worker status
|
|
242
329
|
worker_status = self.queue_manager.get_worker_status()
|
|
243
330
|
queue_status["worker_running"] = worker_status.get("running", False)
|
|
@@ -283,6 +283,10 @@ class ConfigurationManager:
|
|
|
283
283
|
# Load from first available config file
|
|
284
284
|
config_data = self._load_config_file(self._config_file_paths[0])
|
|
285
285
|
logger.info(f"Loaded configuration from: {self._config_file_paths[0]}")
|
|
286
|
+
else:
|
|
287
|
+
# No config file found - try environment discovery
|
|
288
|
+
logger.info("No configuration file found, attempting environment discovery")
|
|
289
|
+
config_data = self._discover_from_environment()
|
|
286
290
|
|
|
287
291
|
# Parse adapter configurations
|
|
288
292
|
if "adapters" in config_data:
|
|
@@ -328,6 +332,95 @@ class ConfigurationManager:
|
|
|
328
332
|
logger.error(f"Error loading config file {config_path}: {e}")
|
|
329
333
|
return {}
|
|
330
334
|
|
|
335
|
+
def _discover_from_environment(self) -> dict[str, Any]:
|
|
336
|
+
"""Discover configuration from environment variables."""
|
|
337
|
+
try:
|
|
338
|
+
from .env_discovery import EnvironmentDiscovery
|
|
339
|
+
|
|
340
|
+
discovery = EnvironmentDiscovery()
|
|
341
|
+
discovered = discovery.discover_all()
|
|
342
|
+
|
|
343
|
+
if not discovered.adapters:
|
|
344
|
+
logger.info("No adapters discovered from environment variables")
|
|
345
|
+
# Return minimal config with aitrackdown as fallback
|
|
346
|
+
return {
|
|
347
|
+
"adapters": {
|
|
348
|
+
"aitrackdown": {
|
|
349
|
+
"type": "aitrackdown",
|
|
350
|
+
"enabled": True,
|
|
351
|
+
"base_path": str(Path.home() / ".mcp-ticketer" / ".aitrackdown")
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"default_adapter": "aitrackdown"
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
# Convert discovered adapters to config format
|
|
358
|
+
config_data = {
|
|
359
|
+
"adapters": {},
|
|
360
|
+
"default_adapter": None
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
for adapter in discovered.adapters:
|
|
364
|
+
adapter_config = {
|
|
365
|
+
"type": adapter.type.value,
|
|
366
|
+
"enabled": True
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
# Add adapter-specific configuration
|
|
370
|
+
if adapter.type.value == "linear":
|
|
371
|
+
adapter_config.update({
|
|
372
|
+
"api_key": adapter.credentials.get("api_key"),
|
|
373
|
+
"team_id": adapter.credentials.get("team_id"),
|
|
374
|
+
"project_id": adapter.credentials.get("project_id")
|
|
375
|
+
})
|
|
376
|
+
elif adapter.type.value == "github":
|
|
377
|
+
adapter_config.update({
|
|
378
|
+
"token": adapter.credentials.get("token"),
|
|
379
|
+
"repo": adapter.credentials.get("repo"),
|
|
380
|
+
"owner": adapter.credentials.get("owner")
|
|
381
|
+
})
|
|
382
|
+
elif adapter.type.value == "jira":
|
|
383
|
+
adapter_config.update({
|
|
384
|
+
"server": adapter.credentials.get("server"),
|
|
385
|
+
"email": adapter.credentials.get("email"),
|
|
386
|
+
"api_token": adapter.credentials.get("api_token"),
|
|
387
|
+
"project_key": adapter.credentials.get("project_key")
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
config_data["adapters"][adapter.name] = adapter_config
|
|
391
|
+
|
|
392
|
+
# Set first discovered adapter as default
|
|
393
|
+
if config_data["default_adapter"] is None:
|
|
394
|
+
config_data["default_adapter"] = adapter.name
|
|
395
|
+
|
|
396
|
+
logger.info(f"Discovered {len(config_data['adapters'])} adapter(s) from environment")
|
|
397
|
+
return config_data
|
|
398
|
+
|
|
399
|
+
except ImportError:
|
|
400
|
+
logger.warning("Environment discovery not available, using aitrackdown fallback")
|
|
401
|
+
return {
|
|
402
|
+
"adapters": {
|
|
403
|
+
"aitrackdown": {
|
|
404
|
+
"type": "aitrackdown",
|
|
405
|
+
"enabled": True,
|
|
406
|
+
"base_path": str(Path.home() / ".mcp-ticketer" / ".aitrackdown")
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
"default_adapter": "aitrackdown"
|
|
410
|
+
}
|
|
411
|
+
except Exception as e:
|
|
412
|
+
logger.error(f"Environment discovery failed: {e}")
|
|
413
|
+
return {
|
|
414
|
+
"adapters": {
|
|
415
|
+
"aitrackdown": {
|
|
416
|
+
"type": "aitrackdown",
|
|
417
|
+
"enabled": True,
|
|
418
|
+
"base_path": str(Path.home() / ".mcp-ticketer" / ".aitrackdown")
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
"default_adapter": "aitrackdown"
|
|
422
|
+
}
|
|
423
|
+
|
|
331
424
|
def get_config(self) -> AppConfig:
|
|
332
425
|
"""Get the current configuration."""
|
|
333
426
|
if self._config is None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.31
|
|
4
4
|
Summary: Universal ticket management interface for AI agents with MCP support
|
|
5
5
|
Author-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
6
6
|
Maintainer-email: MCP Ticketer Team <support@mcp-ticketer.io>
|
|
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
|