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.
- {titan_cli-0.1.1 → titan_cli-0.1.3}/PKG-INFO +1 -1
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/clients/jira_client.py +7 -6
- {titan_cli-0.1.1 → titan_cli-0.1.3}/pyproject.toml +1 -1
- titan_cli-0.1.3/titan_cli/__init__.py +5 -0
- titan_cli-0.1.3/titan_cli/cli.py +92 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/plugin_registry.py +6 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/icons.py +3 -2
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/ai_config.py +1 -1
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/ai_config_wizard.py +1 -1
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/main_menu.py +1 -1
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/status_bar.py +1 -1
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/utils/autoupdate.py +1 -1
- titan_cli-0.1.1/titan_cli/__init__.py +0 -3
- titan_cli-0.1.1/titan_cli/cli.py +0 -59
- {titan_cli-0.1.1 → titan_cli-0.1.3}/LICENSE +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/README.md +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/git_client.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/exceptions.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/messages.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/plugin.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/__init__.py +0 -0
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/branch_steps.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/commit_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/push_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/status_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/__init__.py +0 -0
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/workflows/commit-ai.yaml +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/config_loader.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/issue_generator.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/agents/pr_agent.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/clients/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/clients/github_client.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/config/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/config/pr_agent.toml +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/exceptions.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/messages.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/plugin.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/ai_pr_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/create_pr_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/github_prompt_steps.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/issue_steps.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/steps/preview_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/utils.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/__init__.py +0 -0
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-issue-ai.yaml +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-pr-ai.yaml +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/config_loader.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/jira_agent.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/prompts.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/response_parser.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/token_tracker.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/validators.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/config/jira_agent.toml +0 -0
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/exceptions.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/markdown_formatter.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/messages.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/plugin.py +0 -0
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/steps/get_issue_step.py +0 -0
- {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
- {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
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/issue_sorter.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/saved_queries.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/analyze-jira-issues.yaml +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/__main__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/agents/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/agents/base.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/client.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/constants.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/exceptions.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/oauth_helper.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/anthropic.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/base.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ai/providers/gemini.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/clients/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/clients/gcloud_client.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/config.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/discovery.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/errors.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/available.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/plugins/plugin_base.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/secrets.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/models.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/project_step_source.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_exceptions.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_filter_service.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_registry.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/core/workflows/workflow_sources.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/builder.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/context.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/mock_context.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/results.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/steps/ai_assistant_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/steps/command_step.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/utils/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/utils/venv.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/engine/workflow_executor.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/configs.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/external_cli/launcher.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/messages.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/__previews__/statusbar_preview.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/app.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/base.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/cli_launcher.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/global_setup_wizard.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/plugin_config_wizard.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/plugin_management.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/project_setup_wizard.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/workflow_execution.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/screens/workflows.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/textual_components.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/textual_workflow_executor.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/theme.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/__init__.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/button.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/header.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/panel.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/table.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/ui/tui/widgets/text.py +0 -0
- {titan_cli-0.1.1 → titan_cli-0.1.3}/titan_cli/utils/__init__.py +0 -0
|
@@ -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.
|
|
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,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
|
|
|
@@ -152,7 +152,7 @@ class AIConfigWizardScreen(BaseScreen):
|
|
|
152
152
|
def __init__(self, config):
|
|
153
153
|
super().__init__(
|
|
154
154
|
config,
|
|
155
|
-
title=f"{Icons.
|
|
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.
|
|
111
|
+
Option(f"{Icons.AI_CONFIG} AI Configuration", id="ai_config"),
|
|
112
112
|
]
|
|
113
113
|
)
|
|
114
114
|
|
|
@@ -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
|
)
|
titan_cli-0.1.1/titan_cli/cli.py
DELETED
|
@@ -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
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/__init__.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/clients/git_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/branch_steps.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/commit_step.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/push_step.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-git/titan_plugin_git/steps/status_step.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/exceptions.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/messages.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/models.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/plugin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-github/titan_plugin_github/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/jira_agent.py
RENAMED
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/prompts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/agents/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{titan_cli-0.1.1 → titan_cli-0.1.3}/plugins/titan-plugin-jira/titan_plugin_jira/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|