titan-cli 0.1.1__tar.gz → 0.1.3__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 (147) hide show
  1. {titan_cli-0.1.1 → titan_cli-0.1.3}/PKG-INFO +1 -1
  2. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/clients/jira_client.py +7 -6
  3. {titan_cli-0.1.1 → titan_cli-0.1.3}/pyproject.toml +1 -1
  4. titan_cli-0.1.3/titan_cli/__init__.py +5 -0
  5. titan_cli-0.1.3/titan_cli/cli.py +92 -0
  6. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/plugin_registry.py +6 -0
  7. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/icons.py +3 -2
  8. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/ai_config.py +1 -1
  9. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/ai_config_wizard.py +1 -1
  10. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/main_menu.py +1 -1
  11. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/status_bar.py +1 -1
  12. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/utils/autoupdate.py +1 -1
  13. titan_cli-0.1.1/titan_cli/__init__.py +0 -3
  14. titan_cli-0.1.1/titan_cli/cli.py +0 -59
  15. {titan_cli-0.1.1 → titan_cli-0.1.3}/LICENSE +0 -0
  16. {titan_cli-0.1.1 → titan_cli-0.1.3}/README.md +0 -0
  17. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/__init__.py +0 -0
  18. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/__init__.py +0 -0
  19. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/git_client.py +0 -0
  20. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/exceptions.py +0 -0
  21. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/messages.py +0 -0
  22. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/models.py +0 -0
  23. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/plugin.py +0 -0
  24. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/__init__.py +0 -0
  25. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/ai_commit_message_step.py +0 -0
  26. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/branch_steps.py +0 -0
  27. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/commit_step.py +0 -0
  28. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/push_step.py +0 -0
  29. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/status_step.py +0 -0
  30. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/__init__.py +0 -0
  31. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/commit_ai_preview.py +0 -0
  32. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/workflows/commit-ai.yaml +0 -0
  33. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/__init__.py +0 -0
  34. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/__init__.py +0 -0
  35. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/config_loader.py +0 -0
  36. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/issue_generator.py +0 -0
  37. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/pr_agent.py +0 -0
  38. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/clients/__init__.py +0 -0
  39. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/clients/github_client.py +0 -0
  40. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/config/__init__.py +0 -0
  41. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/config/pr_agent.toml +0 -0
  42. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/exceptions.py +0 -0
  43. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/messages.py +0 -0
  44. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/models.py +0 -0
  45. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/plugin.py +0 -0
  46. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/__init__.py +0 -0
  47. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/ai_pr_step.py +0 -0
  48. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/create_pr_step.py +0 -0
  49. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/github_prompt_steps.py +0 -0
  50. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/issue_steps.py +0 -0
  51. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/preview_step.py +0 -0
  52. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/utils.py +0 -0
  53. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/__init__.py +0 -0
  54. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/create_pr_ai_preview.py +0 -0
  55. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-issue-ai.yaml +0 -0
  56. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-pr-ai.yaml +0 -0
  57. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/__init__.py +0 -0
  58. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/__init__.py +0 -0
  59. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/config_loader.py +0 -0
  60. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/jira_agent.py +0 -0
  61. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/prompts.py +0 -0
  62. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/response_parser.py +0 -0
  63. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/token_tracker.py +0 -0
  64. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/validators.py +0 -0
  65. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/config/jira_agent.toml +0 -0
  66. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/config/templates/issue_analysis.md.j2 +0 -0
  67. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/exceptions.py +0 -0
  68. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/__init__.py +0 -0
  69. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/markdown_formatter.py +0 -0
  70. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/messages.py +0 -0
  71. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/models.py +0 -0
  72. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/plugin.py +0 -0
  73. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/steps/ai_analyze_issue_step.py +0 -0
  74. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/steps/get_issue_step.py +0 -0
  75. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/steps/prompt_select_issue_step.py +0 -0
  76. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/steps/search_saved_query_step.py +0 -0
  77. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/__init__.py +0 -0
  78. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/issue_sorter.py +0 -0
  79. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/saved_queries.py +0 -0
  80. {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/analyze-jira-issues.yaml +0 -0
  81. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/__main__.py +0 -0
  82. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/__init__.py +0 -0
  83. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/agents/__init__.py +0 -0
  84. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/agents/base.py +0 -0
  85. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/client.py +0 -0
  86. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/constants.py +0 -0
  87. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/exceptions.py +0 -0
  88. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/models.py +0 -0
  89. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/oauth_helper.py +0 -0
  90. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/__init__.py +0 -0
  91. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/anthropic.py +0 -0
  92. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/base.py +0 -0
  93. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/gemini.py +0 -0
  94. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/clients/__init__.py +0 -0
  95. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/clients/gcloud_client.py +0 -0
  96. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/__init__.py +0 -0
  97. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/config.py +0 -0
  98. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/discovery.py +0 -0
  99. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/errors.py +0 -0
  100. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/models.py +0 -0
  101. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/available.py +0 -0
  102. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/models.py +0 -0
  103. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/plugin_base.py +0 -0
  104. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/secrets.py +0 -0
  105. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/__init__.py +0 -0
  106. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/models.py +0 -0
  107. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/project_step_source.py +0 -0
  108. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_exceptions.py +0 -0
  109. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_filter_service.py +0 -0
  110. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_registry.py +0 -0
  111. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_sources.py +0 -0
  112. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/__init__.py +0 -0
  113. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/builder.py +0 -0
  114. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/context.py +0 -0
  115. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/mock_context.py +0 -0
  116. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/results.py +0 -0
  117. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/steps/ai_assistant_step.py +0 -0
  118. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/steps/command_step.py +0 -0
  119. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/utils/__init__.py +0 -0
  120. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/utils/venv.py +0 -0
  121. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/workflow_executor.py +0 -0
  122. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/__init__.py +0 -0
  123. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/configs.py +0 -0
  124. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/launcher.py +0 -0
  125. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/messages.py +0 -0
  126. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/__init__.py +0 -0
  127. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/__previews__/statusbar_preview.py +0 -0
  128. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/app.py +0 -0
  129. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/__init__.py +0 -0
  130. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/base.py +0 -0
  131. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/cli_launcher.py +0 -0
  132. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/global_setup_wizard.py +0 -0
  133. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/plugin_config_wizard.py +0 -0
  134. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/plugin_management.py +0 -0
  135. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/project_setup_wizard.py +0 -0
  136. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/workflow_execution.py +0 -0
  137. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/workflows.py +0 -0
  138. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/textual_components.py +0 -0
  139. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/textual_workflow_executor.py +0 -0
  140. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/theme.py +0 -0
  141. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/__init__.py +0 -0
  142. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/button.py +0 -0
  143. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/header.py +0 -0
  144. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/panel.py +0 -0
  145. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/table.py +0 -0
  146. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/text.py +0 -0
  147. {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: titan-cli
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: Modular development tools orchestrator - Streamline your workflows with AI integration and intuitive terminal UI
5
5
  Home-page: https://github.com/masmovil/titan-cli
6
6
  License: MIT
@@ -50,18 +50,19 @@ class JiraClient:
50
50
  JIRA Server/Next uses Basic Auth with Personal Access Token.
51
51
  For JIRA Cloud: API tokens can be created at https://id.atlassian.com/manage/api-tokens
52
52
  """
53
+ # Validate before processing
54
+ if not base_url:
55
+ raise JiraAPIError("JIRA base URL not provided")
56
+
57
+ if not api_token:
58
+ raise JiraAPIError("JIRA API token not provided")
59
+
53
60
  self.base_url = base_url.rstrip("/")
54
61
  self.email = email
55
62
  self.api_token = api_token
56
63
  self.project_key = project_key
57
64
  self.timeout = timeout
58
65
 
59
- if not self.api_token:
60
- raise JiraAPIError("JIRA API token not provided")
61
-
62
- if not self.base_url:
63
- raise JiraAPIError("JIRA base URL not provided")
64
-
65
66
  if not self.email:
66
67
  raise JiraAPIError("JIRA user email not provided")
67
68
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "titan-cli"
3
- version = "0.1.1"
3
+ version = "0.1.3"
4
4
  description = "Modular development tools orchestrator - Streamline your workflows with AI integration and intuitive terminal UI"
5
5
  authors = ["finxo <finxeto@gmail.com>", "r-pedraza <raulpedrazaleon@gmail.com>"]
6
6
  maintainers = ["r-pedraza <raulpedrazaleon@gmail.com>"]
@@ -0,0 +1,5 @@
1
+ """Titan CLI - Modular development tools orchestrator."""
2
+
3
+ from importlib.metadata import version
4
+
5
+ __version__ = version("titan-cli")
@@ -0,0 +1,92 @@
1
+ """
2
+ Titan CLI - Main CLI application
3
+
4
+ Combines all tool commands into a single CLI interface.
5
+ """
6
+ import subprocess
7
+ import sys
8
+ import typer
9
+
10
+ from titan_cli import __version__
11
+ from titan_cli.messages import msg
12
+ from titan_cli.ui.tui import launch_tui
13
+ from titan_cli.utils.autoupdate import check_for_updates, perform_update
14
+
15
+
16
+
17
+ # Main Typer Application
18
+ app = typer.Typer(
19
+ name=msg.CLI.APP_NAME,
20
+ help=msg.CLI.APP_DESCRIPTION,
21
+ invoke_without_command=True,
22
+ no_args_is_help=False,
23
+ )
24
+
25
+
26
+ # --- Helper function for version retrieval ---
27
+ def get_version() -> str:
28
+ """Retrieves the package version."""
29
+ return __version__
30
+
31
+
32
+ @app.callback()
33
+ def main(ctx: typer.Context):
34
+ """Titan CLI - Main entry point"""
35
+ if ctx.invoked_subcommand is None:
36
+ # Check for updates BEFORE launching TUI
37
+ try:
38
+ update_info = check_for_updates()
39
+ if update_info["update_available"]:
40
+ current = update_info["current_version"]
41
+ latest = update_info["latest_version"]
42
+
43
+ typer.echo(f"🔔 Update available: v{current} → v{latest}")
44
+ typer.echo()
45
+
46
+ # Ask user if they want to update
47
+ if typer.confirm("Would you like to update now?", default=True):
48
+ typer.echo("⏳ Updating Titan CLI...")
49
+ typer.echo()
50
+ result = perform_update()
51
+
52
+ if result["success"]:
53
+ typer.echo(f"✅ Successfully updated to v{latest} using {result['method']}")
54
+ typer.echo("🔄 Relaunching Titan with new version...")
55
+ typer.echo()
56
+
57
+ # Relaunch titan using subprocess
58
+ # Note: sys.executable and sys.argv are controlled by the Python runtime,
59
+ # not user input, so this is safe from command injection
60
+ subprocess.run(
61
+ [sys.executable, "-m", "titan_cli.cli"] + sys.argv[1:],
62
+ shell=False, # Explicitly disable shell to prevent injection
63
+ check=False # Don't raise on non-zero exit
64
+ )
65
+ raise typer.Exit(0)
66
+ else:
67
+ typer.echo(f"❌ Update failed: {result['error']}")
68
+ typer.echo(" Please try manually: pipx upgrade titan-cli")
69
+ typer.echo()
70
+ # Continue to TUI even if update fails
71
+ else:
72
+ typer.echo("⏭ Skipping update. Run 'pipx upgrade titan-cli' to update later.")
73
+ typer.echo()
74
+ except Exception:
75
+ # Silently ignore update check failures
76
+ pass
77
+
78
+ # Launch TUI (only if no update or update was declined/failed)
79
+ launch_tui()
80
+
81
+
82
+ @app.command()
83
+ def version():
84
+ """Show Titan CLI version."""
85
+ cli_version = get_version()
86
+ typer.echo(msg.CLI.VERSION.format(version=cli_version))
87
+
88
+
89
+ @app.command()
90
+ def tui():
91
+ """Launch Titan in TUI mode (Textual interface)."""
92
+ launch_tui()
@@ -63,6 +63,12 @@ class PluginRegistry:
63
63
  if name in initialized:
64
64
  continue
65
65
 
66
+ # Skip plugins that are disabled in configuration
67
+ if not config.is_plugin_enabled(name):
68
+ logger.debug(f"Skipping disabled plugin: {name}")
69
+ initialized.add(name) # Mark as processed so we don't retry
70
+ continue
71
+
66
72
  plugin = self._plugins[name]
67
73
  dependencies_met = True
68
74
 
@@ -17,8 +17,8 @@ class Icons:
17
17
  # Status indicators
18
18
  SUCCESS = "✅"
19
19
  ERROR = "❌"
20
- WARNING = ""
21
- INFO = ""
20
+ WARNING = "🟡"
21
+ INFO = "🔵"
22
22
  QUESTION = "❓"
23
23
 
24
24
  # Progress states
@@ -56,6 +56,7 @@ class Icons:
56
56
 
57
57
  # AI & Automation
58
58
  AI = "🤖"
59
+ AI_CONFIG = "🧠"
59
60
  ROBOT = "🤖"
60
61
  SPARKLES = "✨"
61
62
 
@@ -282,7 +282,7 @@ class AIConfigScreen(BaseScreen):
282
282
  def __init__(self, config):
283
283
  super().__init__(
284
284
  config,
285
- title=f"{Icons.SETTINGS} AI Configuration",
285
+ title=f"{Icons.AI_CONFIG} AI Configuration",
286
286
  show_back=True
287
287
  )
288
288
 
@@ -152,7 +152,7 @@ class AIConfigWizardScreen(BaseScreen):
152
152
  def __init__(self, config):
153
153
  super().__init__(
154
154
  config,
155
- title=f"{Icons.SETTINGS} Configure AI Provider",
155
+ title=f"{Icons.AI_CONFIG} Configure AI Provider",
156
156
  show_back=True,
157
157
  show_status_bar=False
158
158
  )
@@ -108,7 +108,7 @@ class MainMenuScreen(BaseScreen):
108
108
  options.extend(
109
109
  [
110
110
  Option(f"{Icons.PLUGIN} Plugin Management", id="plugin_management"),
111
- Option(f"{Icons.SETTINGS} AI Configuration", id="ai_config"),
111
+ Option(f"{Icons.AI_CONFIG} AI Configuration", id="ai_config"),
112
112
  ]
113
113
  )
114
114
 
@@ -47,7 +47,7 @@ class StatusBarWidget(Widget):
47
47
 
48
48
  StatusBarWidget #branch-info {
49
49
  text-align: left;
50
- color: blue;
50
+ color: cyan;
51
51
  }
52
52
 
53
53
  StatusBarWidget #ai-info {
@@ -108,7 +108,7 @@ def perform_update() -> Dict[str, any]:
108
108
  # Try pipx first (recommended)
109
109
  try:
110
110
  subprocess.check_call(
111
- ["pipx", "upgrade", "titan-cli"],
111
+ ["pipx", "upgrade", "--force", "titan-cli"],
112
112
  stdout=subprocess.DEVNULL,
113
113
  stderr=subprocess.DEVNULL
114
114
  )
@@ -1,3 +0,0 @@
1
- """Titan CLI - Modular development tools orchestrator."""
2
-
3
- __version__ = "0.1.1"
@@ -1,59 +0,0 @@
1
- """
2
- Titan CLI - Main CLI application
3
-
4
- Combines all tool commands into a single CLI interface.
5
- """
6
- import typer
7
-
8
- from titan_cli import __version__
9
- from titan_cli.messages import msg
10
- from titan_cli.ui.tui import launch_tui
11
- from titan_cli.utils.autoupdate import check_for_updates, get_update_message
12
-
13
-
14
-
15
- # Main Typer Application
16
- app = typer.Typer(
17
- name=msg.CLI.APP_NAME,
18
- help=msg.CLI.APP_DESCRIPTION,
19
- invoke_without_command=True,
20
- no_args_is_help=False,
21
- )
22
-
23
-
24
- # --- Helper function for version retrieval ---
25
- def get_version() -> str:
26
- """Retrieves the package version."""
27
- return __version__
28
-
29
-
30
- @app.callback()
31
- def main(ctx: typer.Context):
32
- """Titan CLI - Main entry point"""
33
- if ctx.invoked_subcommand is None:
34
- # Check for updates (non-blocking, silent on errors)
35
- try:
36
- update_info = check_for_updates()
37
- message = get_update_message(update_info)
38
- if message:
39
- typer.echo(message)
40
- typer.echo() # Empty line for spacing
41
- except Exception:
42
- # Silently ignore update check failures
43
- pass
44
-
45
- # Launch TUI by default
46
- launch_tui()
47
-
48
-
49
- @app.command()
50
- def version():
51
- """Show Titan CLI version."""
52
- cli_version = get_version()
53
- typer.echo(msg.CLI.VERSION.format(version=cli_version))
54
-
55
-
56
- @app.command()
57
- def tui():
58
- """Launch Titan in TUI mode (Textual interface)."""
59
- launch_tui()
File without changes
File without changes