mcp-ticketer 0.1.13__tar.gz → 0.1.14__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 (207) hide show
  1. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/PKG-INFO +1 -1
  2. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/pyproject.toml +1 -1
  3. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/__version__.py +1 -1
  4. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/main.py +307 -87
  5. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/project_config.py +6 -6
  6. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/PKG-INFO +1 -1
  7. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/.dependency_cache +0 -0
  8. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/.mpm_deployment_state +0 -0
  9. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/agent-manager.md +0 -0
  10. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/agentic-coder-optimizer.md +0 -0
  11. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/api_qa.md +0 -0
  12. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/clerk-ops.md +0 -0
  13. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/code_analyzer.md +0 -0
  14. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/content-agent.md +0 -0
  15. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/dart_engineer.md +0 -0
  16. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/data_engineer.md +0 -0
  17. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/documentation.md +0 -0
  18. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/engineer.md +0 -0
  19. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/gcp_ops_agent.md +0 -0
  20. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/golang_engineer.md +0 -0
  21. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/imagemagick.md +0 -0
  22. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/java_engineer.md +0 -0
  23. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/local_ops_agent.md +0 -0
  24. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/memory_manager.md +0 -0
  25. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/nextjs_engineer.md +0 -0
  26. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/ops.md +0 -0
  27. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/php-engineer.md +0 -0
  28. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/product_owner.md +0 -0
  29. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/project_organizer.md +0 -0
  30. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/prompt-engineer.md +0 -0
  31. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/python_engineer.md +0 -0
  32. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/qa.md +0 -0
  33. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/react_engineer.md +0 -0
  34. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/refactoring_engineer.md +0 -0
  35. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/research.md +0 -0
  36. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/ruby-engineer.md +0 -0
  37. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/rust_engineer.md +0 -0
  38. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/security.md +0 -0
  39. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/ticketing.md +0 -0
  40. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/typescript_engineer.md +0 -0
  41. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/vercel_ops_agent.md +0 -0
  42. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/version_control.md +0 -0
  43. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/web_qa.md +0 -0
  44. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude/agents/web_ui.md +0 -0
  45. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/config/project.json +0 -0
  46. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/mcp_auto_config_preference.json +0 -0
  47. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/README.md +0 -0
  48. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/agentic_coder_optimizer_memories.md +0 -0
  49. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/documentation_memories.md +0 -0
  50. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/engineer_memories.md +0 -0
  51. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/ops_memories.md +0 -0
  52. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/project_knowledge.md +0 -0
  53. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/qa_memories.md +0 -0
  54. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/research_memories.md +0 -0
  55. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/version-control_memories.md +0 -0
  56. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude-mpm/memories/workflows.md +0 -0
  57. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.claude.json +0 -0
  58. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.coveragerc +0 -0
  59. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.env.example +0 -0
  60. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.github/workflows/docs.yml +0 -0
  61. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.github/workflows/publish.yml +0 -0
  62. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.github/workflows/test.yml +0 -0
  63. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.mcp/config.json +0 -0
  64. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.pre-commit-config.yaml +0 -0
  65. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.python-version +0 -0
  66. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/.readthedocs.yaml +0 -0
  67. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/CHANGELOG.md +0 -0
  68. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/CLAUDE.md +0 -0
  69. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/CLAUDE_DESKTOP_SETUP.md +0 -0
  70. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/CODE_STRUCTURE.md +0 -0
  71. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/CONTRIBUTING.md +0 -0
  72. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/ENV_DISCOVERY_COMPLETE.md +0 -0
  73. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/HIERARCHY_IMPLEMENTATION_SUMMARY.md +0 -0
  74. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/IMPLEMENTATION_SUMMARY.md +0 -0
  75. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/JIRA_SETUP.md +0 -0
  76. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/LICENSE +0 -0
  77. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/LINEAR_SETUP.md +0 -0
  78. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/MANIFEST.in +0 -0
  79. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/Makefile +0 -0
  80. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/OPTIMIZATION_SUMMARY.md +0 -0
  81. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/PROJECT_INITIALIZATION_SUMMARY.md +0 -0
  82. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/QUEUE_SYSTEM.md +0 -0
  83. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/QUICK_START.md +0 -0
  84. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/README.md +0 -0
  85. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/RELEASE.md +0 -0
  86. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/RELEASING.md +0 -0
  87. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/TEST_COVERAGE_REPORT.md +0 -0
  88. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/TEST_REPORT.md +0 -0
  89. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/TEST_RESULTS_SUMMARY.md +0 -0
  90. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/claude-desktop-config.json +0 -0
  91. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/debug_search.py +0 -0
  92. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/debug_test.py +0 -0
  93. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/ADAPTERS.md +0 -0
  94. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/API_REFERENCE.md +0 -0
  95. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/CONFIGURATION.md +0 -0
  96. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/CONFIG_RESOLUTION_FLOW.md +0 -0
  97. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/DEVELOPER_GUIDE.md +0 -0
  98. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/ENV_DISCOVERY.md +0 -0
  99. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/MCP_INTEGRATION.md +0 -0
  100. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/MIGRATION_GUIDE.md +0 -0
  101. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/PROJECT_CONFIG.md +0 -0
  102. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/PR_INTEGRATION.md +0 -0
  103. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/QUICK_START_ENV.md +0 -0
  104. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/USER_GUIDE.md +0 -0
  105. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_archive/README.md +0 -0
  106. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/ADAPTERS.md.txt +0 -0
  107. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/API_REFERENCE.md.txt +0 -0
  108. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/CONFIGURATION.md.txt +0 -0
  109. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/DEVELOPER_GUIDE.md.txt +0 -0
  110. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/MCP_INTEGRATION.md.txt +0 -0
  111. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/MIGRATION_GUIDE.md.txt +0 -0
  112. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/USER_GUIDE.md.txt +0 -0
  113. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/adapters/github.md.txt +0 -0
  114. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/adapters.rst.txt +0 -0
  115. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/api.rst.txt +0 -0
  116. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/cli.rst.txt +0 -0
  117. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/development.rst.txt +0 -0
  118. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/examples.rst.txt +0 -0
  119. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/index.rst.txt +0 -0
  120. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/installation.rst.txt +0 -0
  121. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/_build/_sources/prd/mcp-ticketer-prd.md.txt +0 -0
  122. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/adapters/github.md +0 -0
  123. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/adapters.rst +0 -0
  124. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/api.rst +0 -0
  125. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/cli.rst +0 -0
  126. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/conf.py +0 -0
  127. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/development.rst +0 -0
  128. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/examples.rst +0 -0
  129. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/index.rst +0 -0
  130. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/installation.rst +0 -0
  131. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/prd/mcp-ticketer-prd.md +0 -0
  132. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/docs/requirements.txt +0 -0
  133. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/install.sh +0 -0
  134. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/mcp-ticketer +0 -0
  135. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/mcp-ticketer-server +0 -0
  136. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/mcp_server.sh +0 -0
  137. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/pytest.ini +0 -0
  138. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/requirements-dev.txt +0 -0
  139. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/requirements.txt +0 -0
  140. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/scripts/README.md +0 -0
  141. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/scripts/manage_version.py +0 -0
  142. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/setup.cfg +0 -0
  143. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/setup.py +0 -0
  144. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/__init__.py +0 -0
  145. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/__init__.py +0 -0
  146. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/aitrackdown.py +0 -0
  147. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/github.py +0 -0
  148. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/hybrid.py +0 -0
  149. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/jira.py +0 -0
  150. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/adapters/linear.py +0 -0
  151. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cache/__init__.py +0 -0
  152. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cache/memory.py +0 -0
  153. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/__init__.py +0 -0
  154. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/configure.py +0 -0
  155. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/discover.py +0 -0
  156. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/migrate_config.py +0 -0
  157. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/queue_commands.py +0 -0
  158. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/cli/utils.py +0 -0
  159. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/__init__.py +0 -0
  160. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/adapter.py +0 -0
  161. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/config.py +0 -0
  162. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/env_discovery.py +0 -0
  163. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/http_client.py +0 -0
  164. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/mappers.py +0 -0
  165. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/models.py +0 -0
  166. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/core/registry.py +0 -0
  167. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/mcp/__init__.py +0 -0
  168. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/mcp/server.py +0 -0
  169. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/py.typed +0 -0
  170. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/__init__.py +0 -0
  171. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/__main__.py +0 -0
  172. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/manager.py +0 -0
  173. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/queue.py +0 -0
  174. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/run_worker.py +0 -0
  175. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer/queue/worker.py +0 -0
  176. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/SOURCES.txt +0 -0
  177. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/dependency_links.txt +0 -0
  178. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/entry_points.txt +0 -0
  179. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/not-zip-safe +0 -0
  180. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/requires.txt +0 -0
  181. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/src/mcp_ticketer.egg-info/top_level.txt +0 -0
  182. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test-tickets/tickets/task-20250924002724.json +0 -0
  183. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_all_adapters.py +0 -0
  184. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_api_usage.py +0 -0
  185. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_basic.py +0 -0
  186. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_comprehensive.py +0 -0
  187. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_error_handling.py +0 -0
  188. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_github.py +0 -0
  189. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_github_token.py +0 -0
  190. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_jira.py +0 -0
  191. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_linear.py +0 -0
  192. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_linear_native.py +0 -0
  193. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_linear_teams.py +0 -0
  194. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_mcp_server_qa.py +0 -0
  195. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_optimizations.py +0 -0
  196. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_performance.py +0 -0
  197. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_pr_functionality.py +0 -0
  198. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_queue_system.py +0 -0
  199. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/test_set_command.sh +0 -0
  200. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/adapters/__init__.py +0 -0
  201. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/adapters/test_aitrackdown.py +0 -0
  202. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/conftest.py +0 -0
  203. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/core/test_env_discovery.py +0 -0
  204. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/test_base_adapter.py +0 -0
  205. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/test_models.py +0 -0
  206. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tests/test_queue.py +0 -0
  207. {mcp_ticketer-0.1.13 → mcp_ticketer-0.1.14}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.1.13
3
+ Version: 0.1.14
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>
@@ -148,7 +148,7 @@ extend-exclude = '''
148
148
  '''
149
149
 
150
150
  [tool.ruff]
151
- target-version = "0.1.13"
151
+ target-version = "0.1.14"
152
152
  line-length = 88
153
153
 
154
154
  [tool.ruff.lint]
@@ -1,6 +1,6 @@
1
1
  """Version information for mcp-ticketer package."""
2
2
 
3
- __version__ = "0.1.13"
3
+ __version__ = "0.1.14"
4
4
  __version_info__ = tuple(int(part) for part in __version__.split("."))
5
5
 
6
6
  # Package metadata
@@ -160,11 +160,22 @@ def get_adapter(override_adapter: Optional[str] = None, override_config: Optiona
160
160
 
161
161
  @app.command()
162
162
  def init(
163
- adapter: AdapterType = typer.Option(
164
- AdapterType.AITRACKDOWN,
163
+ adapter: Optional[str] = typer.Option(
164
+ None,
165
165
  "--adapter",
166
166
  "-a",
167
- help="Adapter type to use"
167
+ help="Adapter type to use (auto-detected from .env if not specified)"
168
+ ),
169
+ project_path: Optional[str] = typer.Option(
170
+ None,
171
+ "--path",
172
+ help="Project path (default: current directory)"
173
+ ),
174
+ global_config: bool = typer.Option(
175
+ False,
176
+ "--global",
177
+ "-g",
178
+ help="Save to global config instead of project-specific"
168
179
  ),
169
180
  base_path: Optional[str] = typer.Option(
170
181
  None,
@@ -213,97 +224,306 @@ def init(
213
224
  help="GitHub Personal Access Token"
214
225
  ),
215
226
  ) -> None:
216
- """Initialize MCP Ticketer configuration."""
227
+ """Initialize mcp-ticketer for the current project.
228
+
229
+ Creates .mcp-ticketer/config.json in the current directory with
230
+ auto-detected or specified adapter configuration.
231
+
232
+ Examples:
233
+ # Auto-detect from .env.local
234
+ mcp-ticketer init
235
+
236
+ # Force specific adapter
237
+ mcp-ticketer init --adapter linear
238
+
239
+ # Initialize for different project
240
+ mcp-ticketer init --path /path/to/project
241
+
242
+ # Save globally (not recommended)
243
+ mcp-ticketer init --global
244
+ """
245
+ from pathlib import Path
246
+ from ..core.project_config import ConfigResolver
247
+ from ..core.env_discovery import discover_config
248
+
249
+ # Determine project path
250
+ proj_path = Path(project_path) if project_path else Path.cwd()
251
+
252
+ # Check if already initialized (unless using --global)
253
+ if not global_config:
254
+ config_path = proj_path / ".mcp-ticketer" / "config.json"
255
+
256
+ if config_path.exists():
257
+ if not typer.confirm(
258
+ f"Configuration already exists at {config_path}. Overwrite?",
259
+ default=False
260
+ ):
261
+ console.print("[yellow]Initialization cancelled.[/yellow]")
262
+ raise typer.Exit(0)
263
+
264
+ # 1. Try auto-discovery if no adapter specified
265
+ discovered = None
266
+ adapter_type = adapter
267
+
268
+ if not adapter_type:
269
+ console.print("[cyan]🔍 Auto-discovering configuration from .env files...[/cyan]")
270
+ discovered = discover_config(proj_path)
271
+
272
+ if discovered and discovered.adapters:
273
+ primary = discovered.get_primary_adapter()
274
+ if primary:
275
+ adapter_type = primary.adapter_type
276
+ console.print(f"[green]✓ Detected {adapter_type} adapter from environment files[/green]")
277
+
278
+ # Show what was discovered
279
+ console.print(f"\n[dim]Configuration found in: {primary.found_in}[/dim]")
280
+ console.print(f"[dim]Confidence: {primary.confidence:.0%}[/dim]")
281
+ else:
282
+ adapter_type = "aitrackdown" # Fallback
283
+ console.print("[yellow]⚠ No credentials found, defaulting to aitrackdown[/yellow]")
284
+ else:
285
+ adapter_type = "aitrackdown" # Fallback
286
+ console.print("[yellow]⚠ No .env files found, defaulting to aitrackdown[/yellow]")
287
+
288
+ # 2. Create configuration based on adapter type
217
289
  config = {
218
- "default_adapter": adapter.value,
290
+ "default_adapter": adapter_type,
219
291
  "adapters": {}
220
292
  }
221
293
 
222
- if adapter == AdapterType.AITRACKDOWN:
294
+ # 3. If discovered and matches adapter_type, use discovered config
295
+ if discovered and adapter_type != "aitrackdown":
296
+ discovered_adapter = discovered.get_adapter_by_type(adapter_type)
297
+ if discovered_adapter:
298
+ config["adapters"][adapter_type] = discovered_adapter.config
299
+
300
+ # 4. Handle manual configuration for specific adapters
301
+ if adapter_type == "aitrackdown":
223
302
  config["adapters"]["aitrackdown"] = {"base_path": base_path or ".aitrackdown"}
224
- elif adapter == AdapterType.LINEAR:
225
- # For Linear, we need team_id and optionally api_key
226
- if not team_id:
227
- console.print("[red]Error:[/red] --team-id is required for Linear adapter")
228
- raise typer.Exit(1)
229
-
230
- config["adapters"]["linear"] = {"team_id": team_id}
231
-
232
- # Check for API key in environment or parameter
233
- linear_api_key = api_key or os.getenv("LINEAR_API_KEY")
234
- if not linear_api_key:
235
- console.print("[yellow]Warning:[/yellow] No Linear API key provided.")
236
- console.print("Set LINEAR_API_KEY environment variable or use --api-key option")
237
- else:
238
- config["adapters"]["linear"]["api_key"] = linear_api_key
239
-
240
- elif adapter == AdapterType.JIRA:
241
- # For JIRA, we need server, email, and API token
242
- server = jira_server or os.getenv("JIRA_SERVER")
243
- email = jira_email or os.getenv("JIRA_EMAIL")
244
- token = api_key or os.getenv("JIRA_API_TOKEN")
245
- project = jira_project or os.getenv("JIRA_PROJECT_KEY")
246
-
247
- if not server:
248
- console.print("[red]Error:[/red] JIRA server URL is required")
249
- console.print("Use --jira-server or set JIRA_SERVER environment variable")
250
- raise typer.Exit(1)
251
-
252
- if not email:
253
- console.print("[red]Error:[/red] JIRA email is required")
254
- console.print("Use --jira-email or set JIRA_EMAIL environment variable")
255
- raise typer.Exit(1)
256
-
257
- if not token:
258
- console.print("[red]Error:[/red] JIRA API token is required")
259
- console.print("Use --api-key or set JIRA_API_TOKEN environment variable")
260
- console.print("[dim]Generate token at: https://id.atlassian.com/manage/api-tokens[/dim]")
261
- raise typer.Exit(1)
262
-
263
- config["adapters"]["jira"] = {
264
- "server": server,
265
- "email": email,
266
- "api_token": token
267
- }
268
303
 
269
- if project:
270
- config["adapters"]["jira"]["project_key"] = project
304
+ elif adapter_type == "linear":
305
+ # If not auto-discovered, build from CLI params
306
+ if adapter_type not in config["adapters"]:
307
+ linear_config = {}
308
+
309
+ # Team ID
310
+ if team_id:
311
+ linear_config["team_id"] = team_id
312
+
313
+ # API Key
314
+ linear_api_key = api_key or os.getenv("LINEAR_API_KEY")
315
+ if linear_api_key:
316
+ linear_config["api_key"] = linear_api_key
317
+ elif not discovered:
318
+ console.print("[yellow]Warning:[/yellow] No Linear API key provided.")
319
+ console.print("Set LINEAR_API_KEY environment variable or use --api-key option")
320
+
321
+ if linear_config:
322
+ config["adapters"]["linear"] = linear_config
323
+
324
+ elif adapter_type == "jira":
325
+ # If not auto-discovered, build from CLI params
326
+ if adapter_type not in config["adapters"]:
327
+ server = jira_server or os.getenv("JIRA_SERVER")
328
+ email = jira_email or os.getenv("JIRA_EMAIL")
329
+ token = api_key or os.getenv("JIRA_API_TOKEN")
330
+ project = jira_project or os.getenv("JIRA_PROJECT_KEY")
331
+
332
+ if not server:
333
+ console.print("[red]Error:[/red] JIRA server URL is required")
334
+ console.print("Use --jira-server or set JIRA_SERVER environment variable")
335
+ raise typer.Exit(1)
336
+
337
+ if not email:
338
+ console.print("[red]Error:[/red] JIRA email is required")
339
+ console.print("Use --jira-email or set JIRA_EMAIL environment variable")
340
+ raise typer.Exit(1)
341
+
342
+ if not token:
343
+ console.print("[red]Error:[/red] JIRA API token is required")
344
+ console.print("Use --api-key or set JIRA_API_TOKEN environment variable")
345
+ console.print("[dim]Generate token at: https://id.atlassian.com/manage/api-tokens[/dim]")
346
+ raise typer.Exit(1)
347
+
348
+ jira_config = {
349
+ "server": server,
350
+ "email": email,
351
+ "api_token": token
352
+ }
353
+
354
+ if project:
355
+ jira_config["project_key"] = project
356
+
357
+ config["adapters"]["jira"] = jira_config
358
+
359
+ elif adapter_type == "github":
360
+ # If not auto-discovered, build from CLI params
361
+ if adapter_type not in config["adapters"]:
362
+ owner = github_owner or os.getenv("GITHUB_OWNER")
363
+ repo = github_repo or os.getenv("GITHUB_REPO")
364
+ token = github_token or os.getenv("GITHUB_TOKEN")
365
+
366
+ if not owner:
367
+ console.print("[red]Error:[/red] GitHub repository owner is required")
368
+ console.print("Use --github-owner or set GITHUB_OWNER environment variable")
369
+ raise typer.Exit(1)
370
+
371
+ if not repo:
372
+ console.print("[red]Error:[/red] GitHub repository name is required")
373
+ console.print("Use --github-repo or set GITHUB_REPO environment variable")
374
+ raise typer.Exit(1)
375
+
376
+ if not token:
377
+ console.print("[red]Error:[/red] GitHub Personal Access Token is required")
378
+ console.print("Use --github-token or set GITHUB_TOKEN environment variable")
379
+ console.print("[dim]Create token at: https://github.com/settings/tokens/new[/dim]")
380
+ console.print("[dim]Required scopes: repo (for private repos) or public_repo (for public repos)[/dim]")
381
+ raise typer.Exit(1)
382
+
383
+ config["adapters"]["github"] = {
384
+ "owner": owner,
385
+ "repo": repo,
386
+ "token": token
387
+ }
388
+
389
+ # 5. Save to appropriate location
390
+ if global_config:
391
+ # Save to ~/.mcp-ticketer/config.json
392
+ resolver = ConfigResolver(project_path=proj_path)
393
+ config_file_path = resolver.GLOBAL_CONFIG_PATH
394
+ config_file_path.parent.mkdir(parents=True, exist_ok=True)
395
+
396
+ with open(config_file_path, 'w') as f:
397
+ json.dump(config, f, indent=2)
398
+
399
+ console.print(f"[green]✓ Initialized with {adapter_type} adapter[/green]")
400
+ console.print(f"[dim]Global configuration saved to {config_file_path}[/dim]")
401
+ else:
402
+ # Save to ./.mcp-ticketer/config.json (PROJECT-SPECIFIC)
403
+ config_file_path = proj_path / ".mcp-ticketer" / "config.json"
404
+ config_file_path.parent.mkdir(parents=True, exist_ok=True)
405
+
406
+ with open(config_file_path, 'w') as f:
407
+ json.dump(config, f, indent=2)
408
+
409
+ console.print(f"[green]✓ Initialized with {adapter_type} adapter[/green]")
410
+ console.print(f"[dim]Project configuration saved to {config_file_path}[/dim]")
411
+
412
+ # Add .mcp-ticketer to .gitignore if not already there
413
+ gitignore_path = proj_path / ".gitignore"
414
+ if gitignore_path.exists():
415
+ gitignore_content = gitignore_path.read_text()
416
+ if ".mcp-ticketer" not in gitignore_content:
417
+ with open(gitignore_path, 'a') as f:
418
+ f.write("\n# MCP Ticketer\n.mcp-ticketer/\n")
419
+ console.print("[dim]✓ Added .mcp-ticketer/ to .gitignore[/dim]")
271
420
  else:
272
- console.print("[yellow]Warning:[/yellow] No default project key specified")
273
- console.print("You may need to specify project key for some operations")
274
-
275
- elif adapter == AdapterType.GITHUB:
276
- # For GitHub, we need owner, repo, and token
277
- owner = github_owner or os.getenv("GITHUB_OWNER")
278
- repo = github_repo or os.getenv("GITHUB_REPO")
279
- token = github_token or os.getenv("GITHUB_TOKEN")
280
-
281
- if not owner:
282
- console.print("[red]Error:[/red] GitHub repository owner is required")
283
- console.print("Use --github-owner or set GITHUB_OWNER environment variable")
284
- raise typer.Exit(1)
285
-
286
- if not repo:
287
- console.print("[red]Error:[/red] GitHub repository name is required")
288
- console.print("Use --github-repo or set GITHUB_REPO environment variable")
289
- raise typer.Exit(1)
290
-
291
- if not token:
292
- console.print("[red]Error:[/red] GitHub Personal Access Token is required")
293
- console.print("Use --github-token or set GITHUB_TOKEN environment variable")
294
- console.print("[dim]Create token at: https://github.com/settings/tokens/new[/dim]")
295
- console.print("[dim]Required scopes: repo (for private repos) or public_repo (for public repos)[/dim]")
296
- raise typer.Exit(1)
297
-
298
- config["adapters"]["github"] = {
299
- "owner": owner,
300
- "repo": repo,
301
- "token": token
302
- }
303
-
304
- save_config(config)
305
- console.print(f"[green]✓[/green] Initialized with {adapter.value} adapter")
306
- console.print(f"[dim]Configuration saved to {CONFIG_FILE}[/dim]")
421
+ # Create .gitignore if it doesn't exist
422
+ with open(gitignore_path, 'w') as f:
423
+ f.write("# MCP Ticketer\n.mcp-ticketer/\n")
424
+ console.print("[dim]✓ Created .gitignore with .mcp-ticketer/[/dim]")
425
+
426
+
427
+ @app.command()
428
+ def install(
429
+ adapter: Optional[str] = typer.Option(
430
+ None,
431
+ "--adapter",
432
+ "-a",
433
+ help="Adapter type to use (auto-detected from .env if not specified)"
434
+ ),
435
+ project_path: Optional[str] = typer.Option(
436
+ None,
437
+ "--path",
438
+ help="Project path (default: current directory)"
439
+ ),
440
+ global_config: bool = typer.Option(
441
+ False,
442
+ "--global",
443
+ "-g",
444
+ help="Save to global config instead of project-specific"
445
+ ),
446
+ base_path: Optional[str] = typer.Option(
447
+ None,
448
+ "--base-path",
449
+ "-p",
450
+ help="Base path for ticket storage (AITrackdown only)"
451
+ ),
452
+ api_key: Optional[str] = typer.Option(
453
+ None,
454
+ "--api-key",
455
+ help="API key for Linear or API token for JIRA"
456
+ ),
457
+ team_id: Optional[str] = typer.Option(
458
+ None,
459
+ "--team-id",
460
+ help="Linear team ID (required for Linear adapter)"
461
+ ),
462
+ jira_server: Optional[str] = typer.Option(
463
+ None,
464
+ "--jira-server",
465
+ help="JIRA server URL (e.g., https://company.atlassian.net)"
466
+ ),
467
+ jira_email: Optional[str] = typer.Option(
468
+ None,
469
+ "--jira-email",
470
+ help="JIRA user email for authentication"
471
+ ),
472
+ jira_project: Optional[str] = typer.Option(
473
+ None,
474
+ "--jira-project",
475
+ help="Default JIRA project key"
476
+ ),
477
+ github_owner: Optional[str] = typer.Option(
478
+ None,
479
+ "--github-owner",
480
+ help="GitHub repository owner"
481
+ ),
482
+ github_repo: Optional[str] = typer.Option(
483
+ None,
484
+ "--github-repo",
485
+ help="GitHub repository name"
486
+ ),
487
+ github_token: Optional[str] = typer.Option(
488
+ None,
489
+ "--github-token",
490
+ help="GitHub Personal Access Token"
491
+ ),
492
+ ) -> None:
493
+ """Initialize mcp-ticketer for the current project (alias for init).
494
+
495
+ This command is synonymous with 'init' and provides the same functionality.
496
+ Creates .mcp-ticketer/config.json in the current directory with
497
+ auto-detected or specified adapter configuration.
498
+
499
+ Examples:
500
+ # Auto-detect from .env.local
501
+ mcp-ticketer install
502
+
503
+ # Force specific adapter
504
+ mcp-ticketer install --adapter linear
505
+
506
+ # Initialize for different project
507
+ mcp-ticketer install --path /path/to/project
508
+
509
+ # Save globally (not recommended)
510
+ mcp-ticketer install --global
511
+ """
512
+ # Call init with all parameters
513
+ init(
514
+ adapter=adapter,
515
+ project_path=project_path,
516
+ global_config=global_config,
517
+ base_path=base_path,
518
+ api_key=api_key,
519
+ team_id=team_id,
520
+ jira_server=jira_server,
521
+ jira_email=jira_email,
522
+ jira_project=jira_project,
523
+ github_owner=github_owner,
524
+ github_repo=github_repo,
525
+ github_token=github_token,
526
+ )
307
527
 
308
528
 
309
529
  @app.command("set")
@@ -414,7 +414,7 @@ class ConfigResolver:
414
414
  ) -> Dict[str, Any]:
415
415
  """Resolve adapter configuration with hierarchical precedence.
416
416
 
417
- Precedence (highest to lowest):
417
+ Resolution order (highest to lowest priority):
418
418
  1. CLI overrides
419
419
  2. Environment variables (os.getenv)
420
420
  3. Project-specific config (.mcp-ticketer/config.json)
@@ -432,7 +432,7 @@ class ConfigResolver:
432
432
  global_config = self.load_global_config()
433
433
  project_config = self.load_project_config()
434
434
 
435
- # Determine which adapter to use
435
+ # Determine which adapter to use (check project config first)
436
436
  if adapter_name:
437
437
  target_adapter = adapter_name
438
438
  elif project_config and project_config.default_adapter:
@@ -452,7 +452,7 @@ class ConfigResolver:
452
452
  # Start with empty config
453
453
  resolved_config = {"adapter": target_adapter}
454
454
 
455
- # 1. Apply global adapter config
455
+ # 1. Apply global adapter config (LOWEST PRIORITY)
456
456
  if target_adapter in global_config.adapters:
457
457
  global_adapter_config = global_config.adapters[target_adapter].to_dict()
458
458
  resolved_config.update(global_adapter_config)
@@ -473,7 +473,7 @@ class ConfigResolver:
473
473
  f"Applied auto-discovered config from {discovered_adapter.found_in}"
474
474
  )
475
475
 
476
- # 3. Apply project-specific config if exists
476
+ # 3. Apply project-specific config (HIGHER PRIORITY - overrides global and .env)
477
477
  if project_config:
478
478
  # Check if this project has specific adapter config
479
479
  project_path_str = str(self.project_path)
@@ -486,11 +486,11 @@ class ConfigResolver:
486
486
  proj_global_adapter_config = project_config.adapters[target_adapter].to_dict()
487
487
  resolved_config.update(proj_global_adapter_config)
488
488
 
489
- # 4. Apply environment variable overrides (os.getenv)
489
+ # 4. Apply environment variable overrides (os.getenv - HIGHER PRIORITY)
490
490
  env_overrides = self._get_env_overrides(target_adapter)
491
491
  resolved_config.update(env_overrides)
492
492
 
493
- # 5. Apply CLI overrides
493
+ # 5. Apply CLI overrides (HIGHEST PRIORITY)
494
494
  if cli_overrides:
495
495
  resolved_config.update(cli_overrides)
496
496
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-ticketer
3
- Version: 0.1.13
3
+ Version: 0.1.14
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