mcp-ticketer 0.1.27__tar.gz → 0.1.28__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.
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CHANGELOG.md +20 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/PKG-INFO +1 -1
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/__version__.py +1 -1
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/aitrackdown.py +58 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/linear.py +60 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/config.py +28 -21
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/PKG-INFO +1 -1
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/.dependency_cache +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/.mpm_deployment_state +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/agent-manager.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/agentic-coder-optimizer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/api_qa.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/clerk-ops.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/code_analyzer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/content-agent.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/dart_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/data_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/documentation.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/gcp_ops_agent.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/golang_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/imagemagick.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/java_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/local_ops_agent.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/memory_manager.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/nextjs_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/ops.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/php-engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/product_owner.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/project_organizer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/prompt-engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/python_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/qa.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/react_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/refactoring_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/research.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/ruby-engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/rust_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/security.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/ticketing.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/typescript_engineer.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/vercel_ops_agent.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/version_control.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/web_qa.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/agents/web_ui.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/mcp.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude/mcp.local.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/config/project.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/mcp_auto_config_preference.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/README.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/documentation_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/engineer_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/ops_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/project_knowledge_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/qa_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/research_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/version-control_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/workflows_memories.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.claude.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.coveragerc +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.env.example +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.github/workflows/docs.yml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.github/workflows/publish.yml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.github/workflows/test.yml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.mcp/config.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.pre-commit-config.yaml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.python-version +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.readthedocs.yaml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CLAUDE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CLAUDE_DESKTOP_SETUP.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CODEX_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CODE_STRUCTURE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CONFIG_RESOLUTION_FIX.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CONTRIBUTING.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/CREDENTIAL_VALIDATION_FIX.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/ENV_DISCOVERY_COMPLETE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/FIX_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/IMPLEMENTATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/JIRA_SETUP.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/LICENSE +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/LINEAR_SETUP.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/MANIFEST.in +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/Makefile +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/OPTIMIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/QUEUE_SYSTEM.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/QUICK_START.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/README.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/RELEASE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/RELEASING.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/SECURITY_SCAN_REPORT_v0.1.24.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/TEST_COVERAGE_REPORT.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/TEST_REPORT.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/TEST_RESULTS_SUMMARY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/VERIFICATION_RESULTS.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/claude-desktop-config.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/debug_search.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/debug_test.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/ADAPTERS.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/AI_CLIENT_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/API_REFERENCE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/CONFIGURATION.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/DEVELOPER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/ENV_DISCOVERY.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/MCP_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/MIGRATION_GUIDE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/PROJECT_CONFIG.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/PR_INTEGRATION.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/QUICK_START_ENV.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/USER_GUIDE.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_archive/README.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/adapters/github.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/adapters.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/api.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/cli.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/development.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/examples.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/index.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/installation.rst.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/adapters/github.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/adapters.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/api.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/cli.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/conf.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/development.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/examples.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/index.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/installation.rst +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/prd/mcp-ticketer-prd.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/docs/requirements.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/install.sh +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/mcp-ticketer +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/mcp-ticketer-server +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/mcp_server.sh +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/pyproject.toml +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/pytest.ini +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/requirements-dev.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/requirements.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/scripts/README.md +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/scripts/manage_version.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/setup.cfg +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/setup.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/github.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/hybrid.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/adapters/jira.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cache/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cache/memory.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/auggie_configure.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/codex_configure.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/configure.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/discover.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/gemini_configure.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/main.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/mcp_configure.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/migrate_config.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/queue_commands.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/cli/utils.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/adapter.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/env_discovery.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/http_client.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/mappers.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/models.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/project_config.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/core/registry.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/mcp/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/mcp/server.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/py.typed +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/__main__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/health_monitor.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/manager.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/queue.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/run_worker.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/ticket_registry.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer/queue/worker.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/requires.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test-tickets/tickets/task-20250924002724.json +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_all_adapters.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_api_usage.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_basic.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_codex_config.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_comprehensive.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_config_resolution.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_credential_validation.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_error_handling.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_github.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_github_token.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_jira.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_linear.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_linear_native.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_linear_teams.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_mcp_server_qa.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_optimizations.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_performance.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_pr_functionality.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_queue_system.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_serve_config.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/test_set_command.sh +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/adapters/__init__.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/adapters/test_aitrackdown.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/conftest.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/core/test_env_discovery.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/e2e/test_complete_workflow.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/e2e/test_hierarchy_validation.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/e2e/test_state_transitions.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/test_base_adapter.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/test_models.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tests/test_queue.py +0 -0
- {mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/tox.ini +0 -0
|
@@ -13,6 +13,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
13
13
|
- Analytics dashboard
|
|
14
14
|
- Webhook notification support
|
|
15
15
|
|
|
16
|
+
## [0.1.28] - 2025-10-24
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- **Queue System Reliability**: Fixed 60% failure rate in queue operations
|
|
20
|
+
- Added missing `create_epic()`, `create_issue()`, `create_task()` methods to all adapters
|
|
21
|
+
- Fixed Pydantic v2 validator syntax (`@validator` → `@field_validator`)
|
|
22
|
+
- Resolved "Unknown operation: create_epic" errors
|
|
23
|
+
- Fixed configuration loading issues with modern Pydantic syntax
|
|
24
|
+
- **Python 3.9+ Compatibility**: Ensured all Pydantic validators work across Python versions
|
|
25
|
+
- **Worker Stability**: Improved queue worker restart and error recovery
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Updated all Pydantic validators to v2 syntax for future compatibility
|
|
29
|
+
- Enhanced error messages for queue operation failures
|
|
30
|
+
|
|
31
|
+
### Performance
|
|
32
|
+
- **Queue Processing**: Reduced failure rate from 60% to 0% for new operations
|
|
33
|
+
- **Processing Speed**: Sub-second ticket creation and state transitions
|
|
34
|
+
- **Reliability**: Zero retries needed for successful operations
|
|
35
|
+
|
|
16
36
|
## [0.1.27] - 2025-10-23
|
|
17
37
|
|
|
18
38
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.28
|
|
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>
|
|
@@ -235,6 +235,64 @@ class AITrackdownAdapter(BaseAdapter[Task]):
|
|
|
235
235
|
|
|
236
236
|
return ticket
|
|
237
237
|
|
|
238
|
+
async def create_epic(self, title: str, description: str = None, **kwargs) -> Epic:
|
|
239
|
+
"""Create a new epic.
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
title: Epic title
|
|
243
|
+
description: Epic description
|
|
244
|
+
**kwargs: Additional epic properties
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
Created Epic instance
|
|
248
|
+
"""
|
|
249
|
+
epic = Epic(
|
|
250
|
+
title=title,
|
|
251
|
+
description=description,
|
|
252
|
+
**kwargs
|
|
253
|
+
)
|
|
254
|
+
return await self.create(epic)
|
|
255
|
+
|
|
256
|
+
async def create_issue(self, title: str, parent_epic: str = None, description: str = None, **kwargs) -> Task:
|
|
257
|
+
"""Create a new issue.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
title: Issue title
|
|
261
|
+
parent_epic: Parent epic ID
|
|
262
|
+
description: Issue description
|
|
263
|
+
**kwargs: Additional issue properties
|
|
264
|
+
|
|
265
|
+
Returns:
|
|
266
|
+
Created Task instance (representing an issue)
|
|
267
|
+
"""
|
|
268
|
+
task = Task(
|
|
269
|
+
title=title,
|
|
270
|
+
description=description,
|
|
271
|
+
parent_epic=parent_epic,
|
|
272
|
+
**kwargs
|
|
273
|
+
)
|
|
274
|
+
return await self.create(task)
|
|
275
|
+
|
|
276
|
+
async def create_task(self, title: str, parent_id: str, description: str = None, **kwargs) -> Task:
|
|
277
|
+
"""Create a new task under an issue.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
title: Task title
|
|
281
|
+
parent_id: Parent issue ID
|
|
282
|
+
description: Task description
|
|
283
|
+
**kwargs: Additional task properties
|
|
284
|
+
|
|
285
|
+
Returns:
|
|
286
|
+
Created Task instance
|
|
287
|
+
"""
|
|
288
|
+
task = Task(
|
|
289
|
+
title=title,
|
|
290
|
+
description=description,
|
|
291
|
+
parent_issue=parent_id,
|
|
292
|
+
**kwargs
|
|
293
|
+
)
|
|
294
|
+
return await self.create(task)
|
|
295
|
+
|
|
238
296
|
async def read(self, ticket_id: str) -> Optional[Union[Task, Epic]]:
|
|
239
297
|
"""Read a task by ID."""
|
|
240
298
|
if self.tracker:
|
|
@@ -973,6 +973,66 @@ class LinearAdapter(BaseAdapter[Task]):
|
|
|
973
973
|
created_issue = result["issueCreate"]["issue"]
|
|
974
974
|
return self._task_from_linear_issue(created_issue)
|
|
975
975
|
|
|
976
|
+
async def create_epic(self, title: str, description: str = None, **kwargs) -> Task:
|
|
977
|
+
"""Create a new epic (Linear project).
|
|
978
|
+
|
|
979
|
+
Args:
|
|
980
|
+
title: Epic title
|
|
981
|
+
description: Epic description
|
|
982
|
+
**kwargs: Additional epic properties
|
|
983
|
+
|
|
984
|
+
Returns:
|
|
985
|
+
Created Task instance representing the epic
|
|
986
|
+
"""
|
|
987
|
+
# In Linear, epics are represented as issues with special labels/properties
|
|
988
|
+
task = Task(
|
|
989
|
+
title=title,
|
|
990
|
+
description=description,
|
|
991
|
+
tags=kwargs.get('tags', []) + ['epic'], # Add epic tag
|
|
992
|
+
**{k: v for k, v in kwargs.items() if k != 'tags'}
|
|
993
|
+
)
|
|
994
|
+
return await self.create(task)
|
|
995
|
+
|
|
996
|
+
async def create_issue(self, title: str, parent_epic: str = None, description: str = None, **kwargs) -> Task:
|
|
997
|
+
"""Create a new issue.
|
|
998
|
+
|
|
999
|
+
Args:
|
|
1000
|
+
title: Issue title
|
|
1001
|
+
parent_epic: Parent epic ID
|
|
1002
|
+
description: Issue description
|
|
1003
|
+
**kwargs: Additional issue properties
|
|
1004
|
+
|
|
1005
|
+
Returns:
|
|
1006
|
+
Created Task instance representing the issue
|
|
1007
|
+
"""
|
|
1008
|
+
task = Task(
|
|
1009
|
+
title=title,
|
|
1010
|
+
description=description,
|
|
1011
|
+
parent_epic=parent_epic,
|
|
1012
|
+
**kwargs
|
|
1013
|
+
)
|
|
1014
|
+
return await self.create(task)
|
|
1015
|
+
|
|
1016
|
+
async def create_task(self, title: str, parent_id: str, description: str = None, **kwargs) -> Task:
|
|
1017
|
+
"""Create a new task under an issue.
|
|
1018
|
+
|
|
1019
|
+
Args:
|
|
1020
|
+
title: Task title
|
|
1021
|
+
parent_id: Parent issue ID
|
|
1022
|
+
description: Task description
|
|
1023
|
+
**kwargs: Additional task properties
|
|
1024
|
+
|
|
1025
|
+
Returns:
|
|
1026
|
+
Created Task instance
|
|
1027
|
+
"""
|
|
1028
|
+
task = Task(
|
|
1029
|
+
title=title,
|
|
1030
|
+
description=description,
|
|
1031
|
+
parent_issue=parent_id,
|
|
1032
|
+
**kwargs
|
|
1033
|
+
)
|
|
1034
|
+
return await self.create(task)
|
|
1035
|
+
|
|
976
1036
|
async def read(self, ticket_id: str) -> Optional[Task]:
|
|
977
1037
|
"""Read a Linear issue by identifier with full details."""
|
|
978
1038
|
# Validate credentials before attempting operation
|
|
@@ -9,7 +9,7 @@ from pathlib import Path
|
|
|
9
9
|
from typing import Any, Optional, Union
|
|
10
10
|
|
|
11
11
|
import yaml
|
|
12
|
-
from pydantic import BaseModel, Field,
|
|
12
|
+
from pydantic import BaseModel, Field, field_validator, model_validator
|
|
13
13
|
|
|
14
14
|
logger = logging.getLogger(__name__)
|
|
15
15
|
|
|
@@ -45,24 +45,27 @@ class GitHubConfig(BaseAdapterConfig):
|
|
|
45
45
|
use_projects_v2: bool = False
|
|
46
46
|
custom_priority_scheme: Optional[dict[str, list[str]]] = None
|
|
47
47
|
|
|
48
|
-
@
|
|
49
|
-
|
|
48
|
+
@field_validator("token", mode="before")
|
|
49
|
+
@classmethod
|
|
50
|
+
def validate_token(cls, v):
|
|
50
51
|
if not v:
|
|
51
52
|
v = os.getenv("GITHUB_TOKEN")
|
|
52
53
|
if not v:
|
|
53
54
|
raise ValueError("GitHub token is required")
|
|
54
55
|
return v
|
|
55
56
|
|
|
56
|
-
@
|
|
57
|
-
|
|
57
|
+
@field_validator("owner", mode="before")
|
|
58
|
+
@classmethod
|
|
59
|
+
def validate_owner(cls, v):
|
|
58
60
|
if not v:
|
|
59
61
|
v = os.getenv("GITHUB_OWNER")
|
|
60
62
|
if not v:
|
|
61
63
|
raise ValueError("GitHub owner is required")
|
|
62
64
|
return v
|
|
63
65
|
|
|
64
|
-
@
|
|
65
|
-
|
|
66
|
+
@field_validator("repo", mode="before")
|
|
67
|
+
@classmethod
|
|
68
|
+
def validate_repo(cls, v):
|
|
66
69
|
if not v:
|
|
67
70
|
v = os.getenv("GITHUB_REPO")
|
|
68
71
|
if not v:
|
|
@@ -81,24 +84,27 @@ class JiraConfig(BaseAdapterConfig):
|
|
|
81
84
|
cloud: bool = True
|
|
82
85
|
verify_ssl: bool = True
|
|
83
86
|
|
|
84
|
-
@
|
|
85
|
-
|
|
87
|
+
@field_validator("server", mode="before")
|
|
88
|
+
@classmethod
|
|
89
|
+
def validate_server(cls, v):
|
|
86
90
|
if not v:
|
|
87
91
|
v = os.getenv("JIRA_SERVER")
|
|
88
92
|
if not v:
|
|
89
93
|
raise ValueError("JIRA server URL is required")
|
|
90
94
|
return v.rstrip("/")
|
|
91
95
|
|
|
92
|
-
@
|
|
93
|
-
|
|
96
|
+
@field_validator("email", mode="before")
|
|
97
|
+
@classmethod
|
|
98
|
+
def validate_email(cls, v):
|
|
94
99
|
if not v:
|
|
95
100
|
v = os.getenv("JIRA_EMAIL")
|
|
96
101
|
if not v:
|
|
97
102
|
raise ValueError("JIRA email is required")
|
|
98
103
|
return v
|
|
99
104
|
|
|
100
|
-
@
|
|
101
|
-
|
|
105
|
+
@field_validator("api_token", mode="before")
|
|
106
|
+
@classmethod
|
|
107
|
+
def validate_api_token(cls, v):
|
|
102
108
|
if not v:
|
|
103
109
|
v = os.getenv("JIRA_API_TOKEN")
|
|
104
110
|
if not v:
|
|
@@ -115,8 +121,9 @@ class LinearConfig(BaseAdapterConfig):
|
|
|
115
121
|
team_key: str
|
|
116
122
|
api_url: str = "https://api.linear.app/graphql"
|
|
117
123
|
|
|
118
|
-
@
|
|
119
|
-
|
|
124
|
+
@field_validator("api_key", mode="before")
|
|
125
|
+
@classmethod
|
|
126
|
+
def validate_api_key(cls, v):
|
|
120
127
|
if not v:
|
|
121
128
|
v = os.getenv("LINEAR_API_KEY")
|
|
122
129
|
if not v:
|
|
@@ -163,23 +170,23 @@ class AppConfig(BaseModel):
|
|
|
163
170
|
cache_ttl: int = 300 # Cache TTL in seconds
|
|
164
171
|
default_adapter: Optional[str] = None
|
|
165
172
|
|
|
166
|
-
@
|
|
167
|
-
def validate_adapters(self
|
|
173
|
+
@model_validator(mode="after")
|
|
174
|
+
def validate_adapters(self):
|
|
168
175
|
"""Validate adapter configurations."""
|
|
169
|
-
adapters =
|
|
176
|
+
adapters = self.adapters
|
|
170
177
|
|
|
171
178
|
if not adapters:
|
|
172
179
|
logger.warning("No adapters configured")
|
|
173
|
-
return
|
|
180
|
+
return self
|
|
174
181
|
|
|
175
182
|
# Validate default adapter
|
|
176
|
-
default_adapter =
|
|
183
|
+
default_adapter = self.default_adapter
|
|
177
184
|
if default_adapter and default_adapter not in adapters:
|
|
178
185
|
raise ValueError(
|
|
179
186
|
f"Default adapter '{default_adapter}' not found in adapters"
|
|
180
187
|
)
|
|
181
188
|
|
|
182
|
-
return
|
|
189
|
+
return self
|
|
183
190
|
|
|
184
191
|
def get_adapter_config(self, adapter_name: str) -> Optional[BaseAdapterConfig]:
|
|
185
192
|
"""Get configuration for a specific adapter."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-ticketer
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.28
|
|
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
|
|
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.27 → mcp_ticketer-0.1.28}/.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.27 → mcp_ticketer-0.1.28}/.claude-mpm/memories/project_knowledge_memories.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mcp_ticketer-0.1.27 → mcp_ticketer-0.1.28}/.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
|