titan-cli 0.4.1__tar.gz → 0.4.2__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.
Files changed (350) hide show
  1. {titan_cli-0.4.1 → titan_cli-0.4.2}/PKG-INFO +1 -1
  2. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/git_client.py +14 -0
  3. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/commit_service.py +31 -0
  4. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/remote_service.py +18 -0
  5. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/tag_service.py +25 -0
  6. {titan_cli-0.4.1 → titan_cli-0.4.2}/pyproject.toml +1 -1
  7. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/dependencies.py +1 -1
  8. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/config.py +140 -25
  9. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/plugins/available.py +1 -6
  10. titan_cli-0.4.1/titan_cli/core/plugins/community.py → titan_cli-0.4.2/titan_cli/core/plugins/community_sources.py +2 -275
  11. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/plugins/models.py +23 -3
  12. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/plugins/plugin_registry.py +90 -23
  13. titan_cli-0.4.2/titan_cli/core/plugins/runtime.py +174 -0
  14. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/install_plugin_screen.py +51 -46
  15. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/main_menu.py +29 -4
  16. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/plugin_management.py +112 -73
  17. {titan_cli-0.4.1 → titan_cli-0.4.2}/LICENSE +0 -0
  18. {titan_cli-0.4.1 → titan_cli-0.4.2}/README.md +0 -0
  19. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/__init__.py +0 -0
  20. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/__init__.py +0 -0
  21. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/network/__init__.py +0 -0
  22. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/network/git_network.py +0 -0
  23. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/__init__.py +0 -0
  24. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/branch_service.py +0 -0
  25. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/diff_service.py +0 -0
  26. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/stash_service.py +0 -0
  27. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/status_service.py +0 -0
  28. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/clients/services/worktree_service.py +0 -0
  29. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/exceptions.py +0 -0
  30. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/messages.py +0 -0
  31. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/__init__.py +0 -0
  32. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/__init__.py +0 -0
  33. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/branch_mapper.py +0 -0
  34. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/commit_mapper.py +0 -0
  35. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/status_mapper.py +0 -0
  36. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/tag_mapper.py +0 -0
  37. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/worktree_mapper.py +0 -0
  38. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/__init__.py +0 -0
  39. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/branch.py +0 -0
  40. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/commit.py +0 -0
  41. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/status.py +0 -0
  42. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/tag.py +0 -0
  43. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/network/worktree.py +0 -0
  44. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/__init__.py +0 -0
  45. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/branch.py +0 -0
  46. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/commit.py +0 -0
  47. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/status.py +0 -0
  48. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/tag.py +0 -0
  49. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/models/view/worktree.py +0 -0
  50. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/operations/__init__.py +0 -0
  51. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/operations/branch_operations.py +0 -0
  52. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/operations/commit_operations.py +0 -0
  53. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/operations/diff_operations.py +0 -0
  54. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/plugin.py +0 -0
  55. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/__init__.py +0 -0
  56. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/ai_commit_message_step.py +0 -0
  57. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/branch_steps.py +0 -0
  58. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/checkout_step.py +0 -0
  59. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/commit_step.py +0 -0
  60. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/create_branch_step.py +0 -0
  61. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/create_worktree_step.py +0 -0
  62. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/diff_summary_step.py +0 -0
  63. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/pull_step.py +0 -0
  64. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/push_step.py +0 -0
  65. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/remove_worktree_step.py +0 -0
  66. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/restore_original_branch_step.py +0 -0
  67. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/save_current_branch_step.py +0 -0
  68. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/status_step.py +0 -0
  69. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/steps/worktree_command_step.py +0 -0
  70. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/__init__.py +0 -0
  71. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/commit_ai_preview.py +0 -0
  72. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-git/titan_plugin_git/workflows/commit-ai.yaml +0 -0
  73. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/__init__.py +0 -0
  74. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/agents/__init__.py +0 -0
  75. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/agents/code_review_agent.py +0 -0
  76. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/agents/config_loader.py +0 -0
  77. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/agents/issue_generator.py +0 -0
  78. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/agents/pr_agent.py +0 -0
  79. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/checklists/__init__.py +0 -0
  80. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/checklists/defaults.py +0 -0
  81. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/__init__.py +0 -0
  82. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/github_client.py +0 -0
  83. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/network/__init__.py +0 -0
  84. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/network/gh_network.py +0 -0
  85. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/network/graphql_network.py +0 -0
  86. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/network/graphql_queries.py +0 -0
  87. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/protocols.py +0 -0
  88. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/__init__.py +0 -0
  89. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/issue_service.py +0 -0
  90. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/pr_service.py +0 -0
  91. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/release_service.py +0 -0
  92. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/review_service.py +0 -0
  93. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/clients/services/team_service.py +0 -0
  94. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/config/__init__.py +0 -0
  95. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/config/pr_agent.toml +0 -0
  96. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/exceptions.py +0 -0
  97. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/managers/__init__.py +0 -0
  98. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/managers/checklist_manager.py +0 -0
  99. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/managers/diff_context_manager.py +0 -0
  100. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/messages.py +0 -0
  101. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/__init__.py +0 -0
  102. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/diff_models.py +0 -0
  103. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/formatting.py +0 -0
  104. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/__init__.py +0 -0
  105. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/comment_mapper.py +0 -0
  106. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/issue_mapper.py +0 -0
  107. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/pr_mapper.py +0 -0
  108. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/release_mapper.py +0 -0
  109. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/review_mapper.py +0 -0
  110. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/thread_mapper.py +0 -0
  111. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/__init__.py +0 -0
  112. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/__init__.py +0 -0
  113. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/issue_comment.py +0 -0
  114. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/review_comment.py +0 -0
  115. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/review_thread.py +0 -0
  116. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/user.py +0 -0
  117. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/__init__.py +0 -0
  118. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/issue.py +0 -0
  119. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/pull_request.py +0 -0
  120. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/release.py +0 -0
  121. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/review.py +0 -0
  122. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/user.py +0 -0
  123. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/review_enums.py +0 -0
  124. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/review_models.py +0 -0
  125. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/validators.py +0 -0
  126. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/models/view.py +0 -0
  127. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/__init__.py +0 -0
  128. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/code_review_operations.py +0 -0
  129. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/comment_operations.py +0 -0
  130. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/context_resolution_operations.py +0 -0
  131. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/findings_operations.py +0 -0
  132. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/issue_operations.py +0 -0
  133. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/manifest_operations.py +0 -0
  134. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/plan_prompt_operations.py +0 -0
  135. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/pr_creation_operations.py +0 -0
  136. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/pr_operations.py +0 -0
  137. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/review_action_operations.py +0 -0
  138. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/thread_resolution_operations.py +0 -0
  139. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/operations/worktree_operations.py +0 -0
  140. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/plugin.py +0 -0
  141. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/__init__.py +0 -0
  142. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/ai_pr_step.py +0 -0
  143. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/code_review_steps.py +0 -0
  144. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/create_pr_step.py +0 -0
  145. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/github_prompt_steps.py +0 -0
  146. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/issue_steps.py +0 -0
  147. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/pr_review_steps.py +0 -0
  148. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/preview_step.py +0 -0
  149. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/select_cli_step.py +0 -0
  150. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/steps/worktree_steps.py +0 -0
  151. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/utils.py +0 -0
  152. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/__init__.py +0 -0
  153. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/code_block.py +0 -0
  154. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_thread.py +0 -0
  155. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_utils.py +0 -0
  156. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_view.py +0 -0
  157. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/widgets/reply_comment.py +0 -0
  158. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/__init__.py +0 -0
  159. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/create_pr_ai_preview.py +0 -0
  160. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-issue-ai.yaml +0 -0
  161. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-pr-ai.yaml +0 -0
  162. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/respond-pr-comments.yaml +0 -0
  163. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/review-pr-new-findings.yaml.disabled +0 -0
  164. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-github/titan_plugin_github/workflows/review-pr-thread-resolution.yaml.disabled +0 -0
  165. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/__init__.py +0 -0
  166. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/__init__.py +0 -0
  167. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/config_loader.py +0 -0
  168. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/jira_agent.py +0 -0
  169. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/prompts.py +0 -0
  170. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/response_parser.py +0 -0
  171. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/token_tracker.py +0 -0
  172. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/agents/validators.py +0 -0
  173. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/__init__.py +0 -0
  174. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/jira_client.py +0 -0
  175. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/network/__init__.py +0 -0
  176. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/network/jira_network.py +0 -0
  177. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/__init__.py +0 -0
  178. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/comment_service.py +0 -0
  179. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/issue_service.py +0 -0
  180. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/link_service.py +0 -0
  181. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/metadata_service.py +0 -0
  182. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/project_service.py +0 -0
  183. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/transition_service.py +0 -0
  184. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/config/jira_agent.toml +0 -0
  185. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/config/templates/generic_issue.md.j2 +0 -0
  186. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/config/templates/issue_analysis.md.j2 +0 -0
  187. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/constants/__init__.py +0 -0
  188. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/constants/defaults.py +0 -0
  189. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/constants/messages.py +0 -0
  190. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/constants/templates.py +0 -0
  191. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/constants.py +0 -0
  192. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/exceptions.py +0 -0
  193. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/__init__.py +0 -0
  194. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/markdown_formatter.py +0 -0
  195. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/messages.py +0 -0
  196. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/__init__.py +0 -0
  197. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/enums.py +0 -0
  198. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/formatting.py +0 -0
  199. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/__init__.py +0 -0
  200. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/comment_mapper.py +0 -0
  201. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/issue_mapper.py +0 -0
  202. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/issue_type_mapper.py +0 -0
  203. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/priority_mapper.py +0 -0
  204. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/project_mapper.py +0 -0
  205. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/status_mapper.py +0 -0
  206. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/transition_mapper.py +0 -0
  207. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/user_mapper.py +0 -0
  208. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/version_mapper.py +0 -0
  209. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/__init__.py +0 -0
  210. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/comment.py +0 -0
  211. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/issue.py +0 -0
  212. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/issue_type.py +0 -0
  213. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/priority.py +0 -0
  214. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/project.py +0 -0
  215. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/status.py +0 -0
  216. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/transition.py +0 -0
  217. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/user.py +0 -0
  218. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/version.py +0 -0
  219. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/models/view.py +0 -0
  220. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/operations/__init__.py +0 -0
  221. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/operations/issue_formatting_operations.py +0 -0
  222. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/operations/issue_operations.py +0 -0
  223. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/operations/jql_operations.py +0 -0
  224. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/plugin.py +0 -0
  225. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/ai_analyze_issue_step.py +0 -0
  226. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/ai_enhance_issue_description_step.py +0 -0
  227. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/confirm_auto_assign_step.py +0 -0
  228. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/create_generic_issue_step.py +0 -0
  229. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/get_issue_step.py +0 -0
  230. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/list_versions_step.py +0 -0
  231. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/prompt_issue_description_step.py +0 -0
  232. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/prompt_select_issue_step.py +0 -0
  233. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/review_issue_description_step.py +0 -0
  234. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/search_jql_step.py +0 -0
  235. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/search_saved_query_step.py +0 -0
  236. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/select_issue_priority_step.py +0 -0
  237. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/steps/select_issue_type_step.py +0 -0
  238. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/utils/__init__.py +0 -0
  239. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/utils/input_validation.py +0 -0
  240. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/utils/issue_sorter.py +0 -0
  241. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/utils/saved_queries.py +0 -0
  242. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/utils.py +0 -0
  243. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/analyze-jira-issues.yaml +0 -0
  244. {titan_cli-0.4.1 → titan_cli-0.4.2}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/create-generic-issue.yaml +0 -0
  245. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/__init__.py +0 -0
  246. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/__main__.py +0 -0
  247. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/__init__.py +0 -0
  248. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/agents/__init__.py +0 -0
  249. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/agents/base.py +0 -0
  250. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/client.py +0 -0
  251. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/constants.py +0 -0
  252. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/exceptions.py +0 -0
  253. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/litellm_client.py +0 -0
  254. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/llm_tools.py +0 -0
  255. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/models.py +0 -0
  256. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/oauth_helper.py +0 -0
  257. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/__init__.py +0 -0
  258. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/anthropic.py +0 -0
  259. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/base.py +0 -0
  260. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/gemini.py +0 -0
  261. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/litellm.py +0 -0
  262. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ai/providers/openai.py +0 -0
  263. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/cli.py +0 -0
  264. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/clients/__init__.py +0 -0
  265. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/clients/gcloud_client.py +0 -0
  266. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/__init__.py +0 -0
  267. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/discovery.py +0 -0
  268. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/errors.py +0 -0
  269. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/logging/__init__.py +0 -0
  270. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/logging/config.py +0 -0
  271. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/logging/decorators.py +0 -0
  272. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/migrations/__init__.py +0 -0
  273. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/migrations/base.py +0 -0
  274. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/migrations/legacy_to_v1.py +0 -0
  275. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/migrations/manager.py +0 -0
  276. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/models/__init__.py +0 -0
  277. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/models/code_review.py +0 -0
  278. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/plugins/local_sources.py +0 -0
  279. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/plugins/plugin_base.py +0 -0
  280. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/result.py +0 -0
  281. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/secrets.py +0 -0
  282. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/utils.py +0 -0
  283. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/validators/__init__.py +0 -0
  284. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/__init__.py +0 -0
  285. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/models.py +0 -0
  286. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/project_step_source.py +0 -0
  287. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/workflow_exceptions.py +0 -0
  288. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/workflow_filter_service.py +0 -0
  289. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/workflow_registry.py +0 -0
  290. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/core/workflows/workflow_sources.py +0 -0
  291. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/__init__.py +0 -0
  292. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/builder.py +0 -0
  293. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/context.py +0 -0
  294. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/mock_context.py +0 -0
  295. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/results.py +0 -0
  296. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/steps/ai_assistant_step.py +0 -0
  297. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/steps/command_step.py +0 -0
  298. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/utils/__init__.py +0 -0
  299. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/utils/venv.py +0 -0
  300. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/engine/workflow_executor.py +0 -0
  301. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/__init__.py +0 -0
  302. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/__init__.py +0 -0
  303. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/base.py +0 -0
  304. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/claude.py +0 -0
  305. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/codex.py +0 -0
  306. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/gemini.py +0 -0
  307. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/adapters/registry.py +0 -0
  308. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/configs.py +0 -0
  309. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/external_cli/launcher.py +0 -0
  310. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/messages.py +0 -0
  311. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/__init__.py +0 -0
  312. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/__previews__/statusbar_preview.py +0 -0
  313. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/app.py +0 -0
  314. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/colors.py +0 -0
  315. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/icons.py +0 -0
  316. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/__init__.py +0 -0
  317. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/ai_config.py +0 -0
  318. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/ai_config_wizard.py +0 -0
  319. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/base.py +0 -0
  320. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/cli_launcher.py +0 -0
  321. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/global_setup_wizard.py +0 -0
  322. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/plugin_config_wizard.py +0 -0
  323. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/project_setup_wizard.py +0 -0
  324. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/workflow_execution.py +0 -0
  325. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/screens/workflows.py +0 -0
  326. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/textual_components.py +0 -0
  327. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/textual_workflow_executor.py +0 -0
  328. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/theme.py +0 -0
  329. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/__init__.py +0 -0
  330. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/button.py +0 -0
  331. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/decision_badge.py +0 -0
  332. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/dev_source_path_modal.py +0 -0
  333. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/header.py +0 -0
  334. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/multiline_input.py +0 -0
  335. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/panel.py +0 -0
  336. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/panel_container.py +0 -0
  337. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/prompt_choice.py +0 -0
  338. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/prompt_input.py +0 -0
  339. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/prompt_option_list.py +0 -0
  340. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/prompt_selection_list.py +0 -0
  341. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/prompt_textarea.py +0 -0
  342. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/segmented_switch.py +0 -0
  343. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/status_bar.py +0 -0
  344. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/step_container.py +0 -0
  345. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/styled_option_list.py +0 -0
  346. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/table.py +0 -0
  347. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/text.py +0 -0
  348. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/ui/tui/widgets/wizard.py +0 -0
  349. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/utils/__init__.py +0 -0
  350. {titan_cli-0.4.1 → titan_cli-0.4.2}/titan_cli/utils/autoupdate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: titan-cli
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: Modular development tools orchestrator - Streamline your workflows with AI integration and intuitive terminal UI
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -267,6 +267,12 @@ class GitClient:
267
267
  """Get list of commits in head_branch that are not in base_branch."""
268
268
  return self.commit_service.get_branch_commits(base_branch, head_branch)
269
269
 
270
+ def get_commits_between_refs(
271
+ self, base_ref: str, head_ref: str = "HEAD"
272
+ ) -> ClientResult[List[str]]:
273
+ """Get list of commits reachable from head_ref but not base_ref."""
274
+ return self.commit_service.get_commits_between_refs(base_ref, head_ref)
275
+
270
276
  def count_commits_ahead(self, base_branch: str = "develop") -> ClientResult[int]:
271
277
  """Count how many commits current branch is ahead of base branch."""
272
278
  return self.commit_service.count_commits_ahead(base_branch)
@@ -353,6 +359,10 @@ class GitClient:
353
359
  """Push to remote."""
354
360
  return self.remote_service.push(remote, branch, set_upstream, tags)
355
361
 
362
+ def push_tag(self, tag_name: str, remote: str = "origin") -> ClientResult[None]:
363
+ """Push a specific tag to remote."""
364
+ return self.remote_service.push_tag(tag_name, remote)
365
+
356
366
  def pull(
357
367
  self, remote: str = "origin", branch: Optional[str] = None
358
368
  ) -> ClientResult[None]:
@@ -406,6 +416,10 @@ class GitClient:
406
416
  """Check if a tag exists locally."""
407
417
  return self.tag_service.tag_exists(tag_name)
408
418
 
419
+ def remote_tag_exists(self, tag_name: str, remote: str = "origin") -> ClientResult[bool]:
420
+ """Check if a tag exists on a remote."""
421
+ return self.tag_service.remote_tag_exists(tag_name, remote)
422
+
409
423
  def list_tags(self) -> ClientResult[List[UIGitTag]]:
410
424
  """List all tags in the repository."""
411
425
  return self.tag_service.list_tags()
@@ -225,6 +225,37 @@ class CommitService:
225
225
  except GitCommandError as e:
226
226
  return ClientError(error_message=str(e), error_code="COMMIT_ERROR")
227
227
 
228
+ @log_client_operation()
229
+ def get_commits_between_refs(
230
+ self, base_ref: str, head_ref: str = "HEAD"
231
+ ) -> ClientResult[List[str]]:
232
+ """
233
+ Get list of commit subjects reachable from head_ref but not base_ref.
234
+
235
+ Args:
236
+ base_ref: Base git reference (tag, branch, or commit SHA)
237
+ head_ref: Head git reference (default: HEAD)
238
+
239
+ Returns:
240
+ ClientResult[List[str]] with commit messages
241
+ """
242
+ try:
243
+ output = self.git.run_command([
244
+ "git", "log", f"{base_ref}..{head_ref}", "--pretty=format:%s"
245
+ ])
246
+
247
+ if not output:
248
+ return ClientSuccess(data=[], message="No commits found")
249
+
250
+ commits = [line.strip() for line in output.split("\n") if line.strip()]
251
+ return ClientSuccess(
252
+ data=commits,
253
+ message=f"Found {len(commits)} commits between {base_ref} and {head_ref}",
254
+ )
255
+
256
+ except GitCommandError as e:
257
+ return ClientError(error_message=str(e), error_code="COMMIT_ERROR")
258
+
228
259
  @log_client_operation()
229
260
  def count_commits_ahead(self, base_branch: str = "develop") -> ClientResult[int]:
230
261
  """
@@ -71,6 +71,24 @@ class RemoteService:
71
71
  except GitCommandError as e:
72
72
  return ClientError(error_message=str(e), error_code="PUSH_ERROR")
73
73
 
74
+ @log_client_operation()
75
+ def push_tag(self, tag_name: str, remote: str = "origin") -> ClientResult[None]:
76
+ """
77
+ Push a specific tag to remote.
78
+
79
+ Args:
80
+ tag_name: Tag name to push
81
+ remote: Remote name
82
+
83
+ Returns:
84
+ ClientResult[None]
85
+ """
86
+ try:
87
+ self.git.run_command(["git", "push", remote, tag_name])
88
+ return ClientSuccess(data=None, message=f"Pushed tag {tag_name} to {remote}")
89
+ except GitCommandError as e:
90
+ return ClientError(error_message=str(e), error_code="PUSH_ERROR")
91
+
74
92
  @log_client_operation()
75
93
  def pull(
76
94
  self, remote: str = "origin", branch: Optional[str] = None
@@ -93,6 +93,31 @@ class TagService:
93
93
  except GitCommandError as e:
94
94
  return ClientError(error_message=str(e), error_code="TAG_CHECK_ERROR")
95
95
 
96
+ @log_client_operation()
97
+ def remote_tag_exists(self, tag_name: str, remote: str = "origin") -> ClientResult[bool]:
98
+ """
99
+ Check if a tag exists on a remote.
100
+
101
+ Args:
102
+ tag_name: Name of the tag to check
103
+ remote: Remote name
104
+
105
+ Returns:
106
+ ClientResult[bool] with True if tag exists on the remote
107
+ """
108
+ try:
109
+ output = self.git.run_command(
110
+ ["git", "ls-remote", "--tags", remote, f"refs/tags/{tag_name}"],
111
+ check=False,
112
+ )
113
+ exists = bool(output.strip())
114
+ return ClientSuccess(
115
+ data=exists,
116
+ message=f"Tag '{tag_name}' {'exists' if exists else 'does not exist'} on {remote}",
117
+ )
118
+ except GitCommandError as e:
119
+ return ClientError(error_message=str(e), error_code="TAG_CHECK_ERROR")
120
+
96
121
  @log_client_operation()
97
122
  def list_tags(self) -> ClientResult[List[UIGitTag]]:
98
123
  """
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "titan-cli"
3
- version = "0.4.1"
3
+ version = "0.4.2"
4
4
  description = "Modular development tools orchestrator - Streamline your workflows with AI integration and intuitive terminal UI"
5
5
  authors = ["MasOrange Apps Team <apps-management-stores@masorange.es>"]
6
6
  readme = "README.md"
@@ -7,7 +7,7 @@ import subprocess
7
7
  import sys
8
8
  from dataclasses import dataclass
9
9
 
10
- from titan_cli.core.plugins.community import is_running_in_pipx
10
+ from titan_cli.core.plugins.community_sources import is_running_in_pipx
11
11
 
12
12
 
13
13
  @dataclass(frozen=True)
@@ -1,6 +1,9 @@
1
1
  # core/config.py
2
+ from copy import deepcopy
3
+ import hashlib
2
4
  from pathlib import Path
3
- from typing import Optional, List
5
+ import re
6
+ from typing import List, Optional
4
7
  import tomli
5
8
  from .models import TitanConfigModel
6
9
  from .migrations import MigrationManager
@@ -10,6 +13,7 @@ from .secrets import SecretManager
10
13
  from .errors import ConfigParseError, ConfigWriteError
11
14
  from .utils import find_project_root
12
15
  from .logging import get_logger
16
+ from .plugins.community_sources import PluginChannel
13
17
 
14
18
  logger = get_logger(__name__)
15
19
 
@@ -35,6 +39,7 @@ class TitanConfig:
35
39
  self._active_project_path = None # Set by load()
36
40
  self._workflow_registry = None # Set by load()
37
41
  self._plugin_warnings = []
42
+ self._plugin_sync_events = []
38
43
 
39
44
  # Use custom global config path if provided (for testing), otherwise use default
40
45
  self._global_config_path = global_config_path or self.GLOBAL_CONFIG
@@ -81,6 +86,7 @@ class TitanConfig:
81
86
  self.registry.reset()
82
87
  self.registry.initialize_plugins(config=self, secrets=self.secrets)
83
88
  self._plugin_warnings = self.registry.list_failed()
89
+ self._plugin_sync_events = self.registry.list_sync_events()
84
90
 
85
91
  # Re-initialize WorkflowRegistry using project root
86
92
  project_step_source = ProjectStepSource(project_root=project_root)
@@ -150,7 +156,7 @@ class TitanConfig:
150
156
 
151
157
  def _merge_configs(self, global_cfg: dict, project_cfg: dict) -> dict:
152
158
  """Merge global and project configs (project overrides global)"""
153
- merged = {**global_cfg}
159
+ merged = deepcopy(global_cfg)
154
160
 
155
161
  # Project config overrides global
156
162
  for key, value in project_cfg.items():
@@ -170,12 +176,6 @@ class TitanConfig:
170
176
  if pk != "config":
171
177
  final_plugin_data[pk] = pv
172
178
 
173
- # Plugin source is a user-local concern. If global config already
174
- # defines a source override, preserve it instead of letting the
175
- # project config overwrite it.
176
- if "source" in plugin_data_global:
177
- final_plugin_data["source"] = plugin_data_global["source"]
178
-
179
179
  # Handle the nested 'config' dictionary separately (deep merge)
180
180
  config_section_global = plugin_data_global.get("config", {})
181
181
  config_section_project = plugin_data_project.get("config", {})
@@ -248,6 +248,10 @@ class TitanConfig:
248
248
  """Get list of failed or misconfigured plugins."""
249
249
  return self._plugin_warnings
250
250
 
251
+ def get_plugin_sync_events(self) -> List[str]:
252
+ """Get list of plugin auto-sync events from the latest load cycle."""
253
+ return self._plugin_sync_events
254
+
251
255
  def get_project_name(self) -> Optional[str]:
252
256
  """Get the current project name from project config."""
253
257
  if self.config and self.config.project:
@@ -383,22 +387,75 @@ class TitanConfig:
383
387
  return plugin_cfg.enabled if plugin_cfg else False
384
388
 
385
389
  def get_plugin_source_channel(self, plugin_name: str) -> str:
386
- """Return the configured source channel for a plugin."""
387
- if not self.config or not self.config.plugins:
388
- return "stable"
389
- plugin_cfg = self.config.plugins.get(plugin_name)
390
- if not plugin_cfg or not getattr(plugin_cfg, "source", None):
391
- return "stable"
392
- return plugin_cfg.source.channel or "stable"
390
+ """Return the effective source channel for a plugin."""
391
+ source = self.get_effective_plugin_source(plugin_name)
392
+ return source.get("channel", PluginChannel.STABLE)
393
393
 
394
394
  def get_plugin_source_path(self, plugin_name: str) -> Optional[Path]:
395
- """Return the configured dev_local path for a plugin, if any."""
396
- if not self.config or not self.config.plugins:
395
+ """Return the effective dev_local path for a plugin, if any."""
396
+ source = self.get_effective_plugin_source(plugin_name)
397
+ path = source.get("path")
398
+ if not path:
397
399
  return None
398
- plugin_cfg = self.config.plugins.get(plugin_name)
399
- if not plugin_cfg or not getattr(plugin_cfg, "source", None) or not plugin_cfg.source.path:
400
- return None
401
- return Path(plugin_cfg.source.path).expanduser().resolve()
400
+ return Path(path).expanduser().resolve()
401
+
402
+ def get_global_plugin_source(self, plugin_name: str) -> dict:
403
+ """Return the raw user-local source override for a plugin in the active project."""
404
+ scoped_source = self._get_project_source_scope_data().get("plugins", {}).get(plugin_name, {}).get("source", {})
405
+ if scoped_source:
406
+ return scoped_source.copy()
407
+
408
+ # Backward-compatible fallback for older global config layouts.
409
+ return (
410
+ self.global_config.get("plugins", {})
411
+ .get(plugin_name, {})
412
+ .get("source", {})
413
+ .copy()
414
+ )
415
+
416
+ def get_project_plugin_source(self, plugin_name: str) -> dict:
417
+ """Return the raw project source definition for a plugin."""
418
+ return (
419
+ self.project_config.get("plugins", {})
420
+ .get(plugin_name, {})
421
+ .get("source", {})
422
+ .copy()
423
+ )
424
+
425
+ def get_effective_plugin_source(self, plugin_name: str) -> dict:
426
+ """Return the effective plugin source after applying local overrides."""
427
+ global_source = self.get_global_plugin_source(plugin_name)
428
+ project_source = self.get_project_plugin_source(plugin_name)
429
+
430
+ if global_source.get("channel") == PluginChannel.DEV_LOCAL and global_source.get("path"):
431
+ return {
432
+ "channel": PluginChannel.DEV_LOCAL,
433
+ "path": global_source.get("path"),
434
+ "repo_url": project_source.get("repo_url"),
435
+ "requested_ref": project_source.get("requested_ref"),
436
+ "resolved_commit": project_source.get("resolved_commit"),
437
+ }
438
+
439
+ effective = dict(project_source)
440
+ effective.setdefault("channel", PluginChannel.STABLE)
441
+
442
+ # Preserve the remembered dev path for quick switching, but only as UX state.
443
+ if global_source.get("path") and "path" not in effective:
444
+ effective["path"] = global_source.get("path")
445
+
446
+ return effective
447
+
448
+ def get_project_plugin_repo_url(self, plugin_name: str) -> Optional[str]:
449
+ """Return the shared stable repository URL for a plugin."""
450
+ return self.get_project_plugin_source(plugin_name).get("repo_url")
451
+
452
+ def get_project_plugin_requested_ref(self, plugin_name: str) -> Optional[str]:
453
+ """Return the shared requested stable ref for a plugin."""
454
+ return self.get_project_plugin_source(plugin_name).get("requested_ref")
455
+
456
+ def get_project_plugin_resolved_commit(self, plugin_name: str) -> Optional[str]:
457
+ """Return the shared resolved stable commit for a plugin."""
458
+ return self.get_project_plugin_source(plugin_name).get("resolved_commit")
402
459
 
403
460
  def set_global_plugin_source(
404
461
  self,
@@ -408,7 +465,10 @@ class TitanConfig:
408
465
  ) -> None:
409
466
  """Persist a plugin source override in the global user config."""
410
467
  config_data = self._load_toml(self._global_config_path)
411
- plugins_table = config_data.setdefault("plugins", {})
468
+ project_sources = config_data.setdefault("project_sources", {})
469
+ project_table = project_sources.setdefault(self._get_project_source_scope_key(), {})
470
+ project_table["project_path"] = str((self._project_root or Path.cwd()).resolve())
471
+ plugins_table = project_table.setdefault("plugins", {})
412
472
  plugin_table = plugins_table.setdefault(plugin_name, {})
413
473
  source_table = plugin_table.setdefault("source", {})
414
474
 
@@ -423,19 +483,74 @@ class TitanConfig:
423
483
  def clear_global_plugin_source(self, plugin_name: str) -> None:
424
484
  """Remove a plugin source override from the global user config."""
425
485
  config_data = self._load_toml(self._global_config_path)
426
- plugins_table = config_data.get("plugins", {})
486
+ project_sources = config_data.get("project_sources", {})
487
+ project_key = self._find_project_source_scope_key(project_sources)
488
+ project_table = project_sources.get(project_key, {}) if project_key else {}
489
+ plugins_table = project_table.get("plugins", {})
427
490
  plugin_table = plugins_table.get(plugin_name)
428
491
  if not plugin_table:
492
+ # Fall back to cleaning any legacy global override for the plugin.
493
+ legacy_plugins = config_data.get("plugins", {})
494
+ legacy_plugin = legacy_plugins.get(plugin_name)
495
+ if not legacy_plugin:
496
+ return
497
+ legacy_plugin.pop("source", None)
498
+ if not legacy_plugin:
499
+ legacy_plugins.pop(plugin_name, None)
500
+ if not legacy_plugins and "plugins" in config_data:
501
+ config_data.pop("plugins", None)
502
+ self._write_global_config(config_data)
429
503
  return
430
504
 
431
505
  plugin_table.pop("source", None)
432
506
  if not plugin_table:
433
507
  plugins_table.pop(plugin_name, None)
434
- if not plugins_table and "plugins" in config_data:
435
- config_data.pop("plugins", None)
508
+ if not plugins_table and "plugins" in project_table:
509
+ project_table.pop("plugins", None)
510
+ if self._project_source_table_empty(project_table) and project_key in project_sources:
511
+ project_sources.pop(project_key, None)
512
+ if not project_sources and "project_sources" in config_data:
513
+ config_data.pop("project_sources", None)
436
514
 
437
515
  self._write_global_config(config_data)
438
516
 
517
+ def _get_project_source_scope_key(self) -> str:
518
+ """Return the global-config key used to scope local plugin overrides per project."""
519
+ project_path = str((self._project_root or Path.cwd()).resolve())
520
+ project_name = (self._project_root or Path.cwd()).resolve().name or "project"
521
+ safe_name = re.sub(r"[^a-zA-Z0-9]+", "_", project_name).strip("_").lower() or "project"
522
+ digest = hashlib.sha256(project_path.encode("utf-8")).hexdigest()[:8]
523
+ return f"p_{safe_name}_{digest}"
524
+
525
+ def _get_project_source_scope_data(self) -> dict:
526
+ """Return the scoped project source block for the active project."""
527
+ project_sources = self.global_config.get("project_sources", {})
528
+ project_key = self._find_project_source_scope_key(project_sources)
529
+ if project_key:
530
+ return project_sources.get(project_key, {})
531
+ return {}
532
+
533
+ def _find_project_source_scope_key(self, project_sources: dict) -> Optional[str]:
534
+ """Find the project_sources key matching the active project."""
535
+ current_path = str((self._project_root or Path.cwd()).resolve())
536
+ preferred_key = self._get_project_source_scope_key()
537
+ preferred_table = project_sources.get(preferred_key)
538
+ if isinstance(preferred_table, dict):
539
+ stored_path = preferred_table.get("project_path")
540
+ if not stored_path or stored_path == current_path:
541
+ return preferred_key
542
+
543
+ for key, value in project_sources.items():
544
+ if key == current_path:
545
+ return key
546
+ if isinstance(value, dict) and value.get("project_path") == current_path:
547
+ return key
548
+ return None
549
+
550
+ def _project_source_table_empty(self, project_table: dict) -> bool:
551
+ """Return whether a scoped project source block contains meaningful data."""
552
+ return not any(key != "project_path" for key in project_table)
553
+
439
554
  def get_status_bar_info(self) -> dict:
440
555
  """
441
556
  Get information for the status bar display.
@@ -1,9 +1,4 @@
1
- """
2
- This file contains a list of known, installable plugins for Titan CLI.
3
-
4
- This acts as a centralized registry for the `install` command, so the CLI
5
- knows what plugins are available to be installed via `pipx inject`.
6
- """
1
+ """Registry of known official plugins available to Titan CLI."""
7
2
  from typing import TypedDict, List
8
3
 
9
4
  class KnownPlugin(TypedDict):