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.

Files changed (234) hide show
  1. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/PKG-INFO +1 -1
  2. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__version__.py +1 -1
  3. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/config.py +93 -0
  4. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/PKG-INFO +1 -1
  5. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -1
  6. mcp_ticketer-0.1.30/test_diagnostics_mcp.py +0 -155
  7. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/.dependency_cache +0 -0
  8. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/.mpm_deployment_state +0 -0
  9. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/agent-manager.md +0 -0
  10. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/agentic-coder-optimizer.md +0 -0
  11. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/api_qa.md +0 -0
  12. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/clerk-ops.md +0 -0
  13. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/code_analyzer.md +0 -0
  14. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/content-agent.md +0 -0
  15. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/dart_engineer.md +0 -0
  16. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/data_engineer.md +0 -0
  17. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/documentation.md +0 -0
  18. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/engineer.md +0 -0
  19. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/gcp_ops_agent.md +0 -0
  20. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/golang_engineer.md +0 -0
  21. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/imagemagick.md +0 -0
  22. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/java_engineer.md +0 -0
  23. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/local_ops_agent.md +0 -0
  24. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/memory_manager.md +0 -0
  25. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/nextjs_engineer.md +0 -0
  26. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ops.md +0 -0
  27. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/php-engineer.md +0 -0
  28. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/product_owner.md +0 -0
  29. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/project_organizer.md +0 -0
  30. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/prompt-engineer.md +0 -0
  31. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/python_engineer.md +0 -0
  32. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/qa.md +0 -0
  33. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/react_engineer.md +0 -0
  34. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/refactoring_engineer.md +0 -0
  35. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/research.md +0 -0
  36. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ruby-engineer.md +0 -0
  37. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/rust_engineer.md +0 -0
  38. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/security.md +0 -0
  39. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/ticketing.md +0 -0
  40. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/typescript_engineer.md +0 -0
  41. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/vercel_ops_agent.md +0 -0
  42. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/version_control.md +0 -0
  43. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/web_qa.md +0 -0
  44. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/agents/web_ui.md +0 -0
  45. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/mcp.json +0 -0
  46. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude/mcp.local.json +0 -0
  47. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/config/project.json +0 -0
  48. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/mcp_auto_config_preference.json +0 -0
  49. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/README.md +0 -0
  50. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
  51. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/documentation_memories.md +0 -0
  52. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/engineer_memories.md +0 -0
  53. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/ops_memories.md +0 -0
  54. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/project_knowledge_memories.md +0 -0
  55. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/qa_memories.md +0 -0
  56. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/research_memories.md +0 -0
  57. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/version-control_memories.md +0 -0
  58. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude-mpm/memories/workflows_memories.md +0 -0
  59. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.claude.json +0 -0
  60. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.coveragerc +0 -0
  61. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.env.example +0 -0
  62. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/docs.yml +0 -0
  63. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/publish.yml +0 -0
  64. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.github/workflows/test.yml +0 -0
  65. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.mcp/config.json +0 -0
  66. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.pre-commit-config.yaml +0 -0
  67. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.python-version +0 -0
  68. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/.readthedocs.yaml +0 -0
  69. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CHANGELOG.md +0 -0
  70. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CLAUDE.md +0 -0
  71. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CLAUDE_DESKTOP_SETUP.md +0 -0
  72. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CODEX_INTEGRATION.md +0 -0
  73. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CODE_STRUCTURE.md +0 -0
  74. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CONFIG_RESOLUTION_FIX.md +0 -0
  75. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CONTRIBUTING.md +0 -0
  76. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/CREDENTIAL_VALIDATION_FIX.md +0 -0
  77. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/DIAGNOSTICS_FEATURE.md +0 -0
  78. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/ENV_DISCOVERY_COMPLETE.md +0 -0
  79. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/FIX_SUMMARY.md +0 -0
  80. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
  81. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/IMPLEMENTATION_SUMMARY.md +0 -0
  82. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/JIRA_SETUP.md +0 -0
  83. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/LICENSE +0 -0
  84. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/LINEAR_SETUP.md +0 -0
  85. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/MANIFEST.in +0 -0
  86. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/MCP_CONFIGURATION_TEST_REPORT.md +0 -0
  87. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/Makefile +0 -0
  88. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/OPTIMIZATION_SUMMARY.md +0 -0
  89. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
  90. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/QUEUE_SYSTEM.md +0 -0
  91. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/QUICK_START.md +0 -0
  92. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/README.md +0 -0
  93. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/RELEASE.md +0 -0
  94. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/RELEASING.md +0 -0
  95. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/SECURITY_SCAN_REPORT_v0.1.24.md +0 -0
  96. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_COVERAGE_REPORT.md +0 -0
  97. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_REPORT.md +0 -0
  98. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/TEST_RESULTS_SUMMARY.md +0 -0
  99. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/VERIFICATION_RESULTS.md +0 -0
  100. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/claude-desktop-config.json +0 -0
  101. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/debug_search.py +0 -0
  102. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/debug_test.py +0 -0
  103. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/ADAPTERS.md +0 -0
  104. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/AI_CLIENT_INTEGRATION.md +0 -0
  105. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/API_REFERENCE.md +0 -0
  106. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/CONFIGURATION.md +0 -0
  107. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
  108. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/DEVELOPER_GUIDE.md +0 -0
  109. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/ENV_DISCOVERY.md +0 -0
  110. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/MCP_INTEGRATION.md +0 -0
  111. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/MIGRATION_GUIDE.md +0 -0
  112. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/PROJECT_CONFIG.md +0 -0
  113. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/PR_INTEGRATION.md +0 -0
  114. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/QUICK_START_ENV.md +0 -0
  115. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/USER_GUIDE.md +0 -0
  116. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_archive/README.md +0 -0
  117. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
  118. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
  119. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
  120. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
  121. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
  122. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
  123. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
  124. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters/github.md.txt +0 -0
  125. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/adapters.rst.txt +0 -0
  126. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/api.rst.txt +0 -0
  127. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/cli.rst.txt +0 -0
  128. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/development.rst.txt +0 -0
  129. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/examples.rst.txt +0 -0
  130. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/index.rst.txt +0 -0
  131. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/installation.rst.txt +0 -0
  132. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
  133. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/adapters/github.md +0 -0
  134. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/adapters.rst +0 -0
  135. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/api.rst +0 -0
  136. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/cli.rst +0 -0
  137. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/conf.py +0 -0
  138. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/development.rst +0 -0
  139. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/examples.rst +0 -0
  140. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/index.rst +0 -0
  141. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/installation.rst +0 -0
  142. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/prd/mcp-ticketer-prd.md +0 -0
  143. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/docs/requirements.txt +0 -0
  144. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/install.sh +0 -0
  145. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp-ticketer +0 -0
  146. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp-ticketer-server +0 -0
  147. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/mcp_server.sh +0 -0
  148. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/pyproject.toml +0 -0
  149. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/pytest.ini +0 -0
  150. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/requirements-dev.txt +0 -0
  151. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/requirements.txt +0 -0
  152. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/scripts/README.md +0 -0
  153. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/scripts/manage_version.py +0 -0
  154. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/setup.cfg +0 -0
  155. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/setup.py +0 -0
  156. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/__init__.py +0 -0
  157. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/__init__.py +0 -0
  158. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
  159. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/github.py +0 -0
  160. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/hybrid.py +0 -0
  161. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/jira.py +0 -0
  162. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/adapters/linear.py +0 -0
  163. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/__init__.py +0 -0
  164. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cache/memory.py +0 -0
  165. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/__init__.py +0 -0
  166. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/auggie_configure.py +0 -0
  167. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/codex_configure.py +0 -0
  168. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/configure.py +0 -0
  169. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/diagnostics.py +0 -0
  170. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/discover.py +0 -0
  171. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/gemini_configure.py +0 -0
  172. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/main.py +0 -0
  173. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/mcp_configure.py +0 -0
  174. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/migrate_config.py +0 -0
  175. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/queue_commands.py +0 -0
  176. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/simple_health.py +0 -0
  177. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/cli/utils.py +0 -0
  178. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/__init__.py +0 -0
  179. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/adapter.py +0 -0
  180. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/env_discovery.py +0 -0
  181. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/http_client.py +0 -0
  182. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/mappers.py +0 -0
  183. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/models.py +0 -0
  184. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/project_config.py +0 -0
  185. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/core/registry.py +0 -0
  186. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/__init__.py +0 -0
  187. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/mcp/server.py +0 -0
  188. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/py.typed +0 -0
  189. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__init__.py +0 -0
  190. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/__main__.py +0 -0
  191. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/health_monitor.py +0 -0
  192. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/manager.py +0 -0
  193. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/queue.py +0 -0
  194. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/run_worker.py +0 -0
  195. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/ticket_registry.py +0 -0
  196. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer/queue/worker.py +0 -0
  197. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
  198. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
  199. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
  200. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/requires.txt +0 -0
  201. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
  202. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test-tickets/tickets/task-20250924002724.json +0 -0
  203. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_all_adapters.py +0 -0
  204. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_api_usage.py +0 -0
  205. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_basic.py +0 -0
  206. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_codex_config.py +0 -0
  207. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_comprehensive.py +0 -0
  208. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_config_resolution.py +0 -0
  209. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_credential_validation.py +0 -0
  210. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_error_handling.py +0 -0
  211. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_github.py +0 -0
  212. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_github_token.py +0 -0
  213. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_jira.py +0 -0
  214. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear.py +0 -0
  215. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear_native.py +0 -0
  216. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_linear_teams.py +0 -0
  217. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_mcp_server_qa.py +0 -0
  218. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_optimizations.py +0 -0
  219. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_performance.py +0 -0
  220. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_pr_functionality.py +0 -0
  221. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_queue_system.py +0 -0
  222. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_serve_config.py +0 -0
  223. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/test_set_command.sh +0 -0
  224. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/adapters/__init__.py +0 -0
  225. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/adapters/test_aitrackdown.py +0 -0
  226. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/conftest.py +0 -0
  227. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/core/test_env_discovery.py +0 -0
  228. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_complete_workflow.py +0 -0
  229. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_hierarchy_validation.py +0 -0
  230. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/e2e/test_state_transitions.py +0 -0
  231. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_base_adapter.py +0 -0
  232. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_models.py +0 -0
  233. {mcp_ticketer-0.1.30 → mcp_ticketer-0.1.31}/tests/test_queue.py +0 -0
  234. {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.30
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,6 +1,6 @@
1
1
  """Version information for mcp-ticketer package."""
2
2
 
3
- __version__ = "0.1.30"
3
+ __version__ = "0.1.31"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
5
5
 
6
6
  # Package metadata
@@ -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.30
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>
@@ -54,7 +54,6 @@ test_codex_config.py
54
54
  test_comprehensive.py
55
55
  test_config_resolution.py
56
56
  test_credential_validation.py
57
- test_diagnostics_mcp.py
58
57
  test_error_handling.py
59
58
  test_github.py
60
59
  test_github_token.py
@@ -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