mcp-ticketer 0.1.30__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.30 → mcp_ticketer-0.1.31}/PKG-INFO +1 -1
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__version__.py +1 -1
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/config.py +93 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/PKG-INFO +1 -1
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -1
- mcp_ticketer-0.1.30/test_diagnostics_mcp.py +0 -155
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/.dependency_cache +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/.mpm_deployment_state +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/agent-manager.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/agentic-coder-optimizer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/api_qa.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/clerk-ops.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/code_analyzer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/content-agent.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/dart_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/data_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/documentation.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/gcp_ops_agent.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/golang_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/imagemagick.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/java_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/local_ops_agent.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/memory_manager.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/nextjs_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ops.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/php-engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/product_owner.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/project_organizer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/prompt-engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/python_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/qa.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/react_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/refactoring_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/research.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ruby-engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/rust_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/security.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ticketing.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/typescript_engineer.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/vercel_ops_agent.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/version_control.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/web_qa.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/web_ui.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/mcp.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/mcp.local.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/config/project.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/mcp_auto_config_preference.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/README.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/documentation_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/engineer_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/ops_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/project_knowledge_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/qa_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/research_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/version-control_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/workflows_memories.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.coveragerc +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.env.example +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/docs.yml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/publish.yml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/test.yml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.mcp/config.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.pre-commit-config.yaml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.python-version +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.readthedocs.yaml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CHANGELOG.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CLAUDE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CLAUDE_DESKTOP_SETUP.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CODEX_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CODE_STRUCTURE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CONFIG_RESOLUTION_FIX.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CONTRIBUTING.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CREDENTIAL_VALIDATION_FIX.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/DIAGNOSTICS_FEATURE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/ENV_DISCOVERY_COMPLETE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/FIX_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/JIRA_SETUP.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/LICENSE +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/LINEAR_SETUP.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/MANIFEST.in +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/Makefile +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/OPTIMIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/QUEUE_SYSTEM.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/QUICK_START.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/README.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/RELEASE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/RELEASING.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/SECURITY_SCAN_REPORT_v0.1.24.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_COVERAGE_REPORT.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_RESULTS_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/VERIFICATION_RESULTS.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/claude-desktop-config.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/debug_search.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/debug_test.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/ADAPTERS.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/AI_CLIENT_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/API_REFERENCE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/CONFIGURATION.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/DEVELOPER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/ENV_DISCOVERY.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/MCP_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/MIGRATION_GUIDE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/PROJECT_CONFIG.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/PR_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/QUICK_START_ENV.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/USER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_archive/README.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters/github.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/api.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/cli.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/development.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/examples.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/index.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/installation.rst.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/adapters/github.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/adapters.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/api.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/cli.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/conf.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/development.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/examples.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/index.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/installation.rst +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/prd/mcp-ticketer-prd.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/requirements.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/install.sh +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp-ticketer +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp-ticketer-server +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp_server.sh +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/pyproject.toml +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/pytest.ini +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/requirements-dev.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/requirements.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/scripts/README.md +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/scripts/manage_version.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/setup.cfg +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/setup.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/github.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/hybrid.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/jira.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/linear.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/memory.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/auggie_configure.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/codex_configure.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/configure.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/diagnostics.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/discover.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/gemini_configure.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/main.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/mcp_configure.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/migrate_config.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/queue_commands.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/simple_health.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/utils.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/adapter.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/env_discovery.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/http_client.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/mappers.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/models.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/project_config.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/registry.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/server.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/py.typed +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__main__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/health_monitor.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/manager.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/queue.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/run_worker.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/ticket_registry.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/worker.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/requires.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test-tickets/tickets/task-20250924002724.json +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_all_adapters.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_api_usage.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_basic.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_codex_config.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_comprehensive.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_config_resolution.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_credential_validation.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_error_handling.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_github.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_github_token.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_jira.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear_native.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear_teams.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_mcp_server_qa.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_optimizations.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_performance.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_pr_functionality.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_queue_system.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_serve_config.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_set_command.sh +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/adapters/test_aitrackdown.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/conftest.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/core/test_env_discovery.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_complete_workflow.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_hierarchy_validation.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_state_transitions.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_base_adapter.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_models.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_queue.py +0 -0
- {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tox.ini +0 -0
|
@@ -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>
|
|
@@ -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>
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Test the new diagnostic MCP tools."""
|
|
3
|
-
|
|
4
|
-
import asyncio
|
|
5
|
-
import json
|
|
6
|
-
import subprocess
|
|
7
|
-
import sys
|
|
8
|
-
import time
|
|
9
|
-
from typing import Any, Dict
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
async def test_mcp_tool(tool_name: str, arguments: Dict[str, Any] = None) -> Dict[str, Any]:
|
|
13
|
-
"""Test an MCP tool by sending a JSON-RPC request."""
|
|
14
|
-
if arguments is None:
|
|
15
|
-
arguments = {}
|
|
16
|
-
|
|
17
|
-
request = {
|
|
18
|
-
"jsonrpc": "2.0",
|
|
19
|
-
"id": 1,
|
|
20
|
-
"method": "tools/call",
|
|
21
|
-
"params": {
|
|
22
|
-
"name": tool_name,
|
|
23
|
-
"arguments": arguments
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
# Start MCP server process
|
|
28
|
-
process = subprocess.Popen(
|
|
29
|
-
["mcp-ticketer", "serve"],
|
|
30
|
-
stdin=subprocess.PIPE,
|
|
31
|
-
stdout=subprocess.PIPE,
|
|
32
|
-
stderr=subprocess.PIPE,
|
|
33
|
-
text=True
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
try:
|
|
37
|
-
# Send request
|
|
38
|
-
request_json = json.dumps(request) + "\n"
|
|
39
|
-
stdout, stderr = process.communicate(input=request_json, timeout=10)
|
|
40
|
-
|
|
41
|
-
if stderr:
|
|
42
|
-
print(f"Server stderr: {stderr}")
|
|
43
|
-
|
|
44
|
-
# Parse response
|
|
45
|
-
if stdout.strip():
|
|
46
|
-
response = json.loads(stdout.strip())
|
|
47
|
-
return response
|
|
48
|
-
else:
|
|
49
|
-
return {"error": "No response from server"}
|
|
50
|
-
|
|
51
|
-
except subprocess.TimeoutExpired:
|
|
52
|
-
process.kill()
|
|
53
|
-
return {"error": "Request timed out"}
|
|
54
|
-
except json.JSONDecodeError as e:
|
|
55
|
-
return {"error": f"Invalid JSON response: {e}"}
|
|
56
|
-
except Exception as e:
|
|
57
|
-
return {"error": f"Request failed: {e}"}
|
|
58
|
-
finally:
|
|
59
|
-
if process.poll() is None:
|
|
60
|
-
process.terminate()
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
async def main():
|
|
64
|
-
"""Test the diagnostic MCP tools."""
|
|
65
|
-
print("🔍 Testing MCP Diagnostic Tools")
|
|
66
|
-
print("=" * 50)
|
|
67
|
-
|
|
68
|
-
# Test system_health tool
|
|
69
|
-
print("\n1. Testing system_health tool...")
|
|
70
|
-
health_response = await test_mcp_tool("system_health")
|
|
71
|
-
|
|
72
|
-
if "error" in health_response:
|
|
73
|
-
print(f"❌ Health check failed: {health_response['error']}")
|
|
74
|
-
else:
|
|
75
|
-
print("✅ Health check completed")
|
|
76
|
-
if "result" in health_response:
|
|
77
|
-
content = health_response["result"].get("content", [])
|
|
78
|
-
if content and len(content) > 0:
|
|
79
|
-
print("📊 Health Status:")
|
|
80
|
-
print(content[0].get("text", "No text content"))
|
|
81
|
-
else:
|
|
82
|
-
print("⚠️ No content in response")
|
|
83
|
-
else:
|
|
84
|
-
print(f"Response: {json.dumps(health_response, indent=2)}")
|
|
85
|
-
|
|
86
|
-
# Test system_diagnose tool
|
|
87
|
-
print("\n2. Testing system_diagnose tool...")
|
|
88
|
-
diagnose_response = await test_mcp_tool("system_diagnose", {"include_logs": False})
|
|
89
|
-
|
|
90
|
-
if "error" in diagnose_response:
|
|
91
|
-
print(f"❌ Diagnosis failed: {diagnose_response['error']}")
|
|
92
|
-
else:
|
|
93
|
-
print("✅ Diagnosis completed")
|
|
94
|
-
if "result" in diagnose_response:
|
|
95
|
-
content = diagnose_response["result"].get("content", [])
|
|
96
|
-
if content and len(content) > 0:
|
|
97
|
-
print("📋 Diagnosis Report:")
|
|
98
|
-
text = content[0].get("text", "No text content")
|
|
99
|
-
# Show first 500 characters
|
|
100
|
-
print(text[:500] + ("..." if len(text) > 500 else ""))
|
|
101
|
-
else:
|
|
102
|
-
print("⚠️ No content in response")
|
|
103
|
-
else:
|
|
104
|
-
print(f"Response: {json.dumps(diagnose_response, indent=2)}")
|
|
105
|
-
|
|
106
|
-
# Test tools/list to verify our tools are registered
|
|
107
|
-
print("\n3. Testing tools/list to verify diagnostic tools are registered...")
|
|
108
|
-
list_request = {
|
|
109
|
-
"jsonrpc": "2.0",
|
|
110
|
-
"id": 1,
|
|
111
|
-
"method": "tools/list",
|
|
112
|
-
"params": {}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
process = subprocess.Popen(
|
|
116
|
-
["mcp-ticketer", "serve"],
|
|
117
|
-
stdin=subprocess.PIPE,
|
|
118
|
-
stdout=subprocess.PIPE,
|
|
119
|
-
stderr=subprocess.PIPE,
|
|
120
|
-
text=True
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
try:
|
|
124
|
-
request_json = json.dumps(list_request) + "\n"
|
|
125
|
-
stdout, stderr = process.communicate(input=request_json, timeout=10)
|
|
126
|
-
|
|
127
|
-
if stdout.strip():
|
|
128
|
-
response = json.loads(stdout.strip())
|
|
129
|
-
if "result" in response and "tools" in response["result"]:
|
|
130
|
-
tools = response["result"]["tools"]
|
|
131
|
-
diagnostic_tools = [t for t in tools if t["name"] in ["system_health", "system_diagnose"]]
|
|
132
|
-
|
|
133
|
-
if diagnostic_tools:
|
|
134
|
-
print(f"✅ Found {len(diagnostic_tools)} diagnostic tools:")
|
|
135
|
-
for tool in diagnostic_tools:
|
|
136
|
-
print(f" • {tool['name']}: {tool['description']}")
|
|
137
|
-
else:
|
|
138
|
-
print("❌ No diagnostic tools found in tools list")
|
|
139
|
-
print(f"Available tools: {[t['name'] for t in tools]}")
|
|
140
|
-
else:
|
|
141
|
-
print(f"❌ Unexpected response: {response}")
|
|
142
|
-
else:
|
|
143
|
-
print("❌ No response from tools/list")
|
|
144
|
-
|
|
145
|
-
except Exception as e:
|
|
146
|
-
print(f"❌ Tools list failed: {e}")
|
|
147
|
-
finally:
|
|
148
|
-
if process.poll() is None:
|
|
149
|
-
process.terminate()
|
|
150
|
-
|
|
151
|
-
print("\n🎉 Diagnostic tools testing complete!")
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if __name__ == "__main__":
|
|
155
|
-
asyncio.run(main())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/agentic_coder_optimizer_memories.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/project_knowledge_memories.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/version-control_memories.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
{mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt
RENAMED
|
File without changes
|