titan-cli 0.3.2__tar.gz → 0.4.0__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.3.2 → titan_cli-0.4.0}/PKG-INFO +8 -6
- {titan_cli-0.3.2 → titan_cli-0.4.0}/README.md +5 -5
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/messages.py +1 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/agents/__init__.py +2 -2
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/agents/pr_agent.py +32 -5
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/github_client.py +26 -2
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/services/__init__.py +2 -0
- titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/clients/services/release_service.py +110 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/messages.py +1 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/__init__.py +2 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/__init__.py +2 -0
- titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/models/mappers/release_mapper.py +22 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/__init__.py +2 -0
- titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/release.py +29 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/view.py +15 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/ai_pr_step.py +30 -10
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/constants/messages.py +1 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/constants.py +1 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/messages.py +1 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/pyproject.toml +3 -1
- titan_cli-0.4.0/titan_cli/ai/client.py +240 -0
- titan_cli-0.4.0/titan_cli/ai/constants.py +103 -0
- titan_cli-0.4.0/titan_cli/ai/dependencies.py +86 -0
- titan_cli-0.4.0/titan_cli/ai/litellm_client.py +80 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/llm_tools.py +17 -39
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/models.py +3 -3
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/providers/__init__.py +4 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/providers/anthropic.py +4 -2
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/providers/gemini.py +3 -1
- titan_cli-0.4.0/titan_cli/ai/providers/litellm.py +190 -0
- titan_cli-0.4.0/titan_cli/ai/providers/openai.py +93 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/config.py +207 -33
- titan_cli-0.4.0/titan_cli/core/migrations/__init__.py +19 -0
- titan_cli-0.4.0/titan_cli/core/migrations/base.py +31 -0
- titan_cli-0.4.0/titan_cli/core/migrations/legacy_to_v1.py +121 -0
- titan_cli-0.4.0/titan_cli/core/migrations/manager.py +64 -0
- titan_cli-0.4.0/titan_cli/core/models/__init__.py +136 -0
- titan_cli-0.4.0/titan_cli/core/plugins/local_sources.py +58 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/plugins/plugin_registry.py +31 -10
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/builder.py +11 -1
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/registry.py +1 -1
- titan_cli-0.4.0/titan_cli/ui/tui/screens/ai_config.py +806 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/ai_config_wizard.py +281 -208
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/base.py +16 -7
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/global_setup_wizard.py +2 -2
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/plugin_management.py +208 -25
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/__init__.py +5 -0
- titan_cli-0.4.0/titan_cli/ui/tui/widgets/dev_source_path_modal.py +73 -0
- titan_cli-0.4.0/titan_cli/ui/tui/widgets/segmented_switch.py +224 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/status_bar.py +3 -3
- titan_cli-0.3.2/titan_cli/ai/client.py +0 -170
- titan_cli-0.3.2/titan_cli/ai/constants.py +0 -56
- titan_cli-0.3.2/titan_cli/core/models/__init__.py +0 -52
- titan_cli-0.3.2/titan_cli/ui/tui/screens/ai_config.py +0 -502
- {titan_cli-0.3.2 → titan_cli-0.4.0}/LICENSE +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/git_client.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/network/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/network/git_network.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/branch_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/commit_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/diff_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/remote_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/stash_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/status_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/tag_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/clients/services/worktree_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/exceptions.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/branch_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/commit_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/status_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/tag_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/mappers/worktree_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/branch.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/commit.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/status.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/tag.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/network/worktree.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/branch.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/commit.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/status.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/tag.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/models/view/worktree.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/operations/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/operations/branch_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/operations/commit_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/operations/diff_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/plugin.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/ai_commit_message_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/branch_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/checkout_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/commit_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/create_branch_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/create_worktree_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/diff_summary_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/pull_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/push_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/remove_worktree_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/restore_original_branch_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/save_current_branch_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/status_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/steps/worktree_command_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/workflows/__previews__/commit_ai_preview.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-git/titan_plugin_git/workflows/commit-ai.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/agents/code_review_agent.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/agents/config_loader.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/agents/issue_generator.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/checklists/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/checklists/defaults.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/network/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/network/gh_network.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/network/graphql_network.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/network/graphql_queries.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/protocols.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/services/issue_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/services/pr_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/services/review_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/clients/services/team_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/config/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/config/pr_agent.toml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/exceptions.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/managers/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/managers/checklist_manager.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/managers/diff_context_manager.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/diff_models.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/formatting.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/comment_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/issue_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/pr_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/review_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/mappers/thread_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/issue_comment.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/review_comment.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/review_thread.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/graphql/user.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/issue.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/pull_request.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/review.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/user.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/review_enums.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/review_models.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/validators.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/code_review_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/comment_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/context_resolution_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/findings_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/issue_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/manifest_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/plan_prompt_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/pr_creation_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/pr_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/review_action_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/thread_resolution_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/operations/worktree_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/plugin.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/code_review_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/create_pr_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/github_prompt_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/issue_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/pr_review_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/preview_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/select_cli_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/steps/worktree_steps.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/utils.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/code_block.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_thread.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_utils.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/comment_view.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/widgets/reply_comment.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/__previews__/create_pr_ai_preview.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-issue-ai.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/create-pr-ai.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/respond-pr-comments.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/review-pr-new-findings.yaml.disabled +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/workflows/review-pr-thread-resolution.yaml.disabled +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/config_loader.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/jira_agent.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/prompts.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/response_parser.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/token_tracker.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/agents/validators.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/jira_client.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/network/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/network/jira_network.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/comment_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/issue_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/link_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/metadata_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/project_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/clients/services/transition_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/config/jira_agent.toml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/config/templates/generic_issue.md.j2 +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/config/templates/issue_analysis.md.j2 +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/constants/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/constants/defaults.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/constants/templates.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/exceptions.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/formatters/markdown_formatter.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/enums.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/formatting.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/comment_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/issue_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/issue_type_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/priority_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/project_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/status_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/transition_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/user_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/mappers/version_mapper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/comment.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/issue.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/issue_type.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/priority.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/project.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/status.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/transition.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/user.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/network/rest/version.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/models/view.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/operations/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/operations/issue_formatting_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/operations/issue_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/operations/jql_operations.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/plugin.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/ai_analyze_issue_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/ai_enhance_issue_description_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/confirm_auto_assign_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/create_generic_issue_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/get_issue_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/list_versions_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/prompt_issue_description_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/prompt_select_issue_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/review_issue_description_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/search_jql_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/search_saved_query_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/select_issue_priority_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/steps/select_issue_type_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/utils/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/utils/input_validation.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/utils/issue_sorter.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/utils/saved_queries.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/utils.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/analyze-jira-issues.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-jira/titan_plugin_jira/workflows/create-generic-issue.yaml +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/__main__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/agents/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/agents/base.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/exceptions.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/oauth_helper.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ai/providers/base.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/cli.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/clients/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/clients/gcloud_client.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/discovery.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/errors.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/logging/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/logging/config.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/logging/decorators.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/models/code_review.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/plugins/available.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/plugins/community.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/plugins/models.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/plugins/plugin_base.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/result.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/secrets.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/utils.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/validators/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/models.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/project_step_source.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/workflow_exceptions.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/workflow_filter_service.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/workflow_registry.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/core/workflows/workflow_sources.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/context.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/mock_context.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/results.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/steps/ai_assistant_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/steps/command_step.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/utils/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/utils/venv.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/engine/workflow_executor.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/base.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/claude.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/codex.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/adapters/gemini.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/configs.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/external_cli/launcher.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/messages.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/__previews__/statusbar_preview.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/app.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/colors.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/icons.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/cli_launcher.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/install_plugin_screen.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/main_menu.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/plugin_config_wizard.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/project_setup_wizard.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/workflow_execution.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/screens/workflows.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/textual_components.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/textual_workflow_executor.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/theme.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/button.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/decision_badge.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/header.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/multiline_input.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/panel.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/panel_container.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/prompt_choice.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/prompt_input.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/prompt_option_list.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/prompt_selection_list.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/prompt_textarea.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/step_container.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/styled_option_list.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/table.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/text.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/ui/tui/widgets/wizard.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/titan_cli/utils/__init__.py +0 -0
- {titan_cli-0.3.2 → titan_cli-0.4.0}/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.
|
|
3
|
+
Version: 0.4.0
|
|
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
|
|
@@ -22,8 +22,10 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
22
22
|
Requires-Dist: anthropic (>=0.75.0,<0.76.0)
|
|
23
23
|
Requires-Dist: google-auth (>=2.43.0,<3.0.0)
|
|
24
24
|
Requires-Dist: google-genai (>=1.58.0,<2.0.0)
|
|
25
|
+
Requires-Dist: h2 (>=4.1.0,<5.0.0)
|
|
25
26
|
Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
|
|
26
27
|
Requires-Dist: keyring (>=25.7.0,<26.0.0)
|
|
28
|
+
Requires-Dist: openai (>=2.0.0,<3.0.0)
|
|
27
29
|
Requires-Dist: packaging (>=23.0,<25.0)
|
|
28
30
|
Requires-Dist: pydantic (>=2.0.0,<3.0.0)
|
|
29
31
|
Requires-Dist: python-dotenv (>=1.2.1,<2.0.0)
|
|
@@ -50,7 +52,7 @@ Titan CLI is a powerful command-line orchestrator that automates Git, GitHub, JI
|
|
|
50
52
|
- 🔧 **Project Configuration** - Centralized `.titan/config.toml` for project-specific settings
|
|
51
53
|
- 🔌 **Plugin System** - Extend functionality with Git, GitHub, JIRA, and custom plugins
|
|
52
54
|
- 🎨 **Modern TUI** - Beautiful terminal interface powered by Textual
|
|
53
|
-
- 🤖 **AI Integration** - Optional AI assistance
|
|
55
|
+
- 🤖 **AI Integration** - Optional AI assistance through direct providers and LLM gateways
|
|
54
56
|
- ⚡ **Workflow Engine** - Compose atomic steps into powerful automated workflows
|
|
55
57
|
- 🔐 **Secure Secrets** - OS keyring integration for API tokens and credentials
|
|
56
58
|
|
|
@@ -100,7 +102,7 @@ titan
|
|
|
100
102
|
```
|
|
101
103
|
|
|
102
104
|
On first run, Titan will guide you through:
|
|
103
|
-
1. **Global Setup** - Configure AI
|
|
105
|
+
1. **Global Setup** - Configure AI connections (optional)
|
|
104
106
|
2. **Project Setup** - Enable plugins and configure project settings
|
|
105
107
|
|
|
106
108
|
### Basic Usage
|
|
@@ -123,10 +125,10 @@ Titan CLI v1.0.0 includes three core plugins:
|
|
|
123
125
|
|
|
124
126
|
## 🤖 AI Integration
|
|
125
127
|
|
|
126
|
-
Titan supports multiple AI
|
|
128
|
+
Titan supports multiple AI connections:
|
|
127
129
|
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
+
- **Direct Provider**: Anthropic, OpenAI, Gemini
|
|
131
|
+
- **LLM Gateway**: OpenAI-compatible endpoints such as LiteLLM
|
|
130
132
|
|
|
131
133
|
Configure during first setup or later via the TUI settings.
|
|
132
134
|
|
|
@@ -9,7 +9,7 @@ Titan CLI is a powerful command-line orchestrator that automates Git, GitHub, JI
|
|
|
9
9
|
- 🔧 **Project Configuration** - Centralized `.titan/config.toml` for project-specific settings
|
|
10
10
|
- 🔌 **Plugin System** - Extend functionality with Git, GitHub, JIRA, and custom plugins
|
|
11
11
|
- 🎨 **Modern TUI** - Beautiful terminal interface powered by Textual
|
|
12
|
-
- 🤖 **AI Integration** - Optional AI assistance
|
|
12
|
+
- 🤖 **AI Integration** - Optional AI assistance through direct providers and LLM gateways
|
|
13
13
|
- ⚡ **Workflow Engine** - Compose atomic steps into powerful automated workflows
|
|
14
14
|
- 🔐 **Secure Secrets** - OS keyring integration for API tokens and credentials
|
|
15
15
|
|
|
@@ -59,7 +59,7 @@ titan
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
On first run, Titan will guide you through:
|
|
62
|
-
1. **Global Setup** - Configure AI
|
|
62
|
+
1. **Global Setup** - Configure AI connections (optional)
|
|
63
63
|
2. **Project Setup** - Enable plugins and configure project settings
|
|
64
64
|
|
|
65
65
|
### Basic Usage
|
|
@@ -82,10 +82,10 @@ Titan CLI v1.0.0 includes three core plugins:
|
|
|
82
82
|
|
|
83
83
|
## 🤖 AI Integration
|
|
84
84
|
|
|
85
|
-
Titan supports multiple AI
|
|
85
|
+
Titan supports multiple AI connections:
|
|
86
86
|
|
|
87
|
-
- **
|
|
88
|
-
- **
|
|
87
|
+
- **Direct Provider**: Anthropic, OpenAI, Gemini
|
|
88
|
+
- **LLM Gateway**: OpenAI-compatible endpoints such as LiteLLM
|
|
89
89
|
|
|
90
90
|
Configure during first setup or later via the TUI settings.
|
|
91
91
|
|
|
@@ -88,7 +88,7 @@ class Messages:
|
|
|
88
88
|
PROMPT_FAILED: str = "Failed to prompt for commit message: {e}"
|
|
89
89
|
|
|
90
90
|
class AICommitMessage:
|
|
91
|
-
AI_NOT_CONFIGURED: str = "AI not configured.
|
|
91
|
+
AI_NOT_CONFIGURED: str = "AI not configured. Open AI Configuration to enable AI features."
|
|
92
92
|
NO_CHANGES_TO_COMMIT: str = "No changes to commit"
|
|
93
93
|
ANALYZING_CHANGES: str = "Analyzing uncommitted changes..."
|
|
94
94
|
NO_UNCOMMITTED_CHANGES: str = "No uncommitted changes to analyze"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# plugins/titan-plugin-github/titan_plugin_github/agents/__init__.py
|
|
2
2
|
"""AI agents for GitHub plugin."""
|
|
3
3
|
|
|
4
|
-
from .pr_agent import PRAgent, PRAnalysis
|
|
4
|
+
from .pr_agent import PRAgent, PRAnalysis, PRStatus
|
|
5
5
|
from .code_review_agent import CodeReviewAgent
|
|
6
6
|
|
|
7
|
-
__all__ = ["PRAgent", "PRAnalysis", "CodeReviewAgent"]
|
|
7
|
+
__all__ = ["PRAgent", "PRAnalysis", "PRStatus", "CodeReviewAgent"]
|
|
@@ -9,6 +9,7 @@ This agent analyzes the complete context of a branch and automatically:
|
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from dataclasses import dataclass
|
|
12
|
+
from enum import StrEnum
|
|
12
13
|
from pathlib import Path
|
|
13
14
|
from typing import Optional
|
|
14
15
|
|
|
@@ -22,6 +23,16 @@ from ..utils import calculate_pr_size, is_i18n_change
|
|
|
22
23
|
logger = get_logger(__name__)
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
class PRStatus(StrEnum):
|
|
27
|
+
"""Outcome of the PR analysis portion of PRAgent."""
|
|
28
|
+
|
|
29
|
+
OK = "ok"
|
|
30
|
+
NO_COMMITS = "no_commits"
|
|
31
|
+
SOURCE_DATA_FAILED = "source_data_failed"
|
|
32
|
+
GENERATION_FAILED = "generation_failed"
|
|
33
|
+
INCOMPLETE = "incomplete"
|
|
34
|
+
|
|
35
|
+
|
|
25
36
|
@dataclass
|
|
26
37
|
class PRAnalysis:
|
|
27
38
|
"""Complete analysis result from PRAgent."""
|
|
@@ -35,6 +46,8 @@ class PRAnalysis:
|
|
|
35
46
|
pr_title: Optional[str] = None
|
|
36
47
|
pr_body: Optional[str] = None
|
|
37
48
|
pr_size: Optional[str] = None
|
|
49
|
+
pr_status: PRStatus = PRStatus.OK
|
|
50
|
+
pr_error: Optional[str] = None
|
|
38
51
|
|
|
39
52
|
# Metadata
|
|
40
53
|
total_tokens_used: int = 0
|
|
@@ -133,6 +146,8 @@ class PRAgent(BaseAIAgent):
|
|
|
133
146
|
pr_title = None
|
|
134
147
|
pr_body = None
|
|
135
148
|
pr_size = None
|
|
149
|
+
pr_status = PRStatus.OK
|
|
150
|
+
pr_error = None
|
|
136
151
|
files_changed = 0
|
|
137
152
|
lines_changed = 0
|
|
138
153
|
commits = []
|
|
@@ -204,9 +219,11 @@ class PRAgent(BaseAIAgent):
|
|
|
204
219
|
|
|
205
220
|
match (commits_result, diff_result):
|
|
206
221
|
case (ClientSuccess(data=commits_data), ClientSuccess(data=branch_diff)):
|
|
207
|
-
|
|
208
|
-
commits = commits_data # Extract commits list
|
|
222
|
+
commits = commits_data or []
|
|
209
223
|
|
|
224
|
+
if not commits or not branch_diff:
|
|
225
|
+
pr_status = PRStatus.NO_COMMITS
|
|
226
|
+
else:
|
|
210
227
|
# Read PR template (uses embedded default if file not found)
|
|
211
228
|
template = self._read_pr_template()
|
|
212
229
|
|
|
@@ -228,17 +245,25 @@ class PRAgent(BaseAIAgent):
|
|
|
228
245
|
lines_changed = pr_result["lines_changed"]
|
|
229
246
|
total_tokens += pr_result["tokens_used"]
|
|
230
247
|
|
|
248
|
+
if not pr_title or not pr_body:
|
|
249
|
+
pr_status = PRStatus.INCOMPLETE
|
|
250
|
+
else:
|
|
251
|
+
pr_status = PRStatus.OK
|
|
252
|
+
|
|
231
253
|
except Exception as e:
|
|
232
254
|
logger.error(f"Failed to generate PR description: {e}")
|
|
233
|
-
|
|
255
|
+
pr_status = PRStatus.GENERATION_FAILED
|
|
256
|
+
pr_error = str(e)
|
|
234
257
|
|
|
235
258
|
case _:
|
|
236
259
|
logger.error("Failed to get branch commits or diff")
|
|
237
|
-
|
|
260
|
+
pr_status = PRStatus.SOURCE_DATA_FAILED
|
|
261
|
+
pr_error = "Failed to get branch commits or diff."
|
|
238
262
|
|
|
239
263
|
except Exception as e:
|
|
240
264
|
logger.error(f"Failed to analyze branch for PR: {e}")
|
|
241
|
-
|
|
265
|
+
pr_status = PRStatus.SOURCE_DATA_FAILED
|
|
266
|
+
pr_error = str(e)
|
|
242
267
|
|
|
243
268
|
return PRAnalysis(
|
|
244
269
|
needs_commit=needs_commit,
|
|
@@ -247,6 +272,8 @@ class PRAgent(BaseAIAgent):
|
|
|
247
272
|
pr_title=pr_title,
|
|
248
273
|
pr_body=pr_body,
|
|
249
274
|
pr_size=pr_size,
|
|
275
|
+
pr_status=pr_status,
|
|
276
|
+
pr_error=pr_error,
|
|
250
277
|
total_tokens_used=total_tokens,
|
|
251
278
|
branch_commits=commits,
|
|
252
279
|
files_changed=files_changed,
|
|
@@ -14,8 +14,8 @@ from titan_cli.core.plugins.models import GitHubPluginConfig
|
|
|
14
14
|
from titan_plugin_git.clients.git_client import GitClient
|
|
15
15
|
|
|
16
16
|
from .network import GHNetwork, GraphQLNetwork
|
|
17
|
-
from .services import PRService, ReviewService, IssueService, TeamService
|
|
18
|
-
from ..models.view import UIPullRequest, UICommentThread, UIIssue, UIPRMergeResult, UIReview, UIFileChange, UIPRCreated
|
|
17
|
+
from .services import PRService, ReviewService, IssueService, TeamService, ReleaseService
|
|
18
|
+
from ..models.view import UIPullRequest, UICommentThread, UIIssue, UIPRMergeResult, UIReview, UIFileChange, UIPRCreated, UIRelease
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class GitHubClient:
|
|
@@ -75,6 +75,7 @@ class GitHubClient:
|
|
|
75
75
|
self._review_service = ReviewService(self._gh_network, self._graphql_network)
|
|
76
76
|
self._issue_service = IssueService(self._gh_network)
|
|
77
77
|
self._team_service = TeamService(self._gh_network)
|
|
78
|
+
self._release_service = ReleaseService(self._gh_network)
|
|
78
79
|
|
|
79
80
|
def get_pr_template(self) -> Optional[str]:
|
|
80
81
|
"""Get the PR template if available."""
|
|
@@ -262,6 +263,29 @@ class GitHubClient:
|
|
|
262
263
|
"""List all labels in the repository."""
|
|
263
264
|
return self._issue_service.list_labels()
|
|
264
265
|
|
|
266
|
+
# ============================================================================
|
|
267
|
+
# Release Operations
|
|
268
|
+
# ============================================================================
|
|
269
|
+
|
|
270
|
+
def create_release(
|
|
271
|
+
self,
|
|
272
|
+
tag_name: str,
|
|
273
|
+
title: Optional[str] = None,
|
|
274
|
+
notes: Optional[str] = None,
|
|
275
|
+
generate_notes: bool = False,
|
|
276
|
+
verify_tag: bool = True,
|
|
277
|
+
prerelease: bool = False,
|
|
278
|
+
) -> ClientResult[UIRelease]:
|
|
279
|
+
"""Create a GitHub release."""
|
|
280
|
+
return self._release_service.create_release(
|
|
281
|
+
tag_name=tag_name,
|
|
282
|
+
title=title,
|
|
283
|
+
notes=notes,
|
|
284
|
+
generate_notes=generate_notes,
|
|
285
|
+
verify_tag=verify_tag,
|
|
286
|
+
prerelease=prerelease,
|
|
287
|
+
)
|
|
288
|
+
|
|
265
289
|
# ============================================================================
|
|
266
290
|
# Team Operations
|
|
267
291
|
# ============================================================================
|
|
@@ -9,10 +9,12 @@ from .pr_service import PRService
|
|
|
9
9
|
from .review_service import ReviewService
|
|
10
10
|
from .issue_service import IssueService
|
|
11
11
|
from .team_service import TeamService
|
|
12
|
+
from .release_service import ReleaseService
|
|
12
13
|
|
|
13
14
|
__all__ = [
|
|
14
15
|
"PRService",
|
|
15
16
|
"ReviewService",
|
|
16
17
|
"IssueService",
|
|
17
18
|
"TeamService",
|
|
19
|
+
"ReleaseService",
|
|
18
20
|
]
|
titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/clients/services/release_service.py
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# plugins/titan-plugin-github/titan_plugin_github/clients/services/release_service.py
|
|
2
|
+
"""
|
|
3
|
+
Release Service
|
|
4
|
+
|
|
5
|
+
Business logic for GitHub release operations.
|
|
6
|
+
Uses gh CLI through the network layer.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from typing import Optional
|
|
11
|
+
|
|
12
|
+
from titan_cli.core.result import ClientResult, ClientSuccess, ClientError
|
|
13
|
+
from titan_cli.core.logging import log_client_operation
|
|
14
|
+
|
|
15
|
+
from ..network import GHNetwork
|
|
16
|
+
from ...exceptions import GitHubAPIError
|
|
17
|
+
from ...models.network.rest import NetworkRelease
|
|
18
|
+
from ...models.view import UIRelease
|
|
19
|
+
from ...models.mappers import from_network_release
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ReleaseService:
|
|
23
|
+
"""
|
|
24
|
+
Service for GitHub release operations.
|
|
25
|
+
|
|
26
|
+
Handles creating GitHub releases for a repository.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, gh_network: GHNetwork):
|
|
30
|
+
"""
|
|
31
|
+
Initialize release service.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
gh_network: GHNetwork instance for REST/CLI operations
|
|
35
|
+
"""
|
|
36
|
+
self.gh = gh_network
|
|
37
|
+
|
|
38
|
+
@log_client_operation()
|
|
39
|
+
def create_release(
|
|
40
|
+
self,
|
|
41
|
+
tag_name: str,
|
|
42
|
+
title: Optional[str] = None,
|
|
43
|
+
notes: Optional[str] = None,
|
|
44
|
+
generate_notes: bool = False,
|
|
45
|
+
verify_tag: bool = True,
|
|
46
|
+
prerelease: bool = False,
|
|
47
|
+
) -> ClientResult[UIRelease]:
|
|
48
|
+
"""
|
|
49
|
+
Create a GitHub release and return a UI release model.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
tag_name: Tag to publish
|
|
53
|
+
title: Release title
|
|
54
|
+
notes: Optional release notes body
|
|
55
|
+
generate_notes: Ask GitHub to generate release notes
|
|
56
|
+
verify_tag: Require tag to exist remotely
|
|
57
|
+
prerelease: Mark release as prerelease
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
ClientResult[UIRelease]
|
|
61
|
+
"""
|
|
62
|
+
if notes and generate_notes:
|
|
63
|
+
return ClientError(
|
|
64
|
+
error_message="Specify either notes or generate_notes, not both",
|
|
65
|
+
error_code="INVALID_INPUT",
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
args = ["release", "create", tag_name]
|
|
70
|
+
|
|
71
|
+
if title:
|
|
72
|
+
args.extend(["--title", title])
|
|
73
|
+
|
|
74
|
+
if notes:
|
|
75
|
+
args.extend(["--notes", notes])
|
|
76
|
+
elif generate_notes:
|
|
77
|
+
args.append("--generate-notes")
|
|
78
|
+
|
|
79
|
+
if verify_tag:
|
|
80
|
+
args.append("--verify-tag")
|
|
81
|
+
|
|
82
|
+
if prerelease:
|
|
83
|
+
args.append("--prerelease")
|
|
84
|
+
|
|
85
|
+
args.extend(self.gh.get_repo_arg())
|
|
86
|
+
|
|
87
|
+
self.gh.run_command(args)
|
|
88
|
+
|
|
89
|
+
view_args = [
|
|
90
|
+
"release", "view", tag_name,
|
|
91
|
+
"--json", "tagName,name,url,isPrerelease",
|
|
92
|
+
] + self.gh.get_repo_arg()
|
|
93
|
+
|
|
94
|
+
output = self.gh.run_command(view_args)
|
|
95
|
+
data = json.loads(output)
|
|
96
|
+
network_release = NetworkRelease.from_json(data)
|
|
97
|
+
ui_release = from_network_release(network_release)
|
|
98
|
+
|
|
99
|
+
return ClientSuccess(
|
|
100
|
+
data=ui_release,
|
|
101
|
+
message=f"Release '{tag_name}' created"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
except json.JSONDecodeError as e:
|
|
105
|
+
return ClientError(
|
|
106
|
+
error_message=f"Failed to parse release data: {e}",
|
|
107
|
+
error_code="JSON_PARSE_ERROR"
|
|
108
|
+
)
|
|
109
|
+
except GitHubAPIError as e:
|
|
110
|
+
return ClientError(error_message=str(e), error_code="API_ERROR")
|
{titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/messages.py
RENAMED
|
@@ -53,7 +53,7 @@ class Messages:
|
|
|
53
53
|
AUTH_INVALID: str = "Invalid GitHub token"
|
|
54
54
|
|
|
55
55
|
class AI:
|
|
56
|
-
AI_NOT_CONFIGURED: str = "AI not configured.
|
|
56
|
+
AI_NOT_CONFIGURED: str = "AI not configured. Open AI Configuration to enable AI features."
|
|
57
57
|
GITHUB_CLIENT_NOT_AVAILABLE: str = "GitHub client is not available in the workflow context."
|
|
58
58
|
GIT_CLIENT_NOT_AVAILABLE: str = "Git client is not available in the workflow context."
|
|
59
59
|
MISSING_PR_HEAD_BRANCH: str = "Missing pr_head_branch in context"
|
|
@@ -33,6 +33,7 @@ from .view import (
|
|
|
33
33
|
UICommentThread,
|
|
34
34
|
UIPullRequest,
|
|
35
35
|
UIIssue,
|
|
36
|
+
UIRelease,
|
|
36
37
|
UIReviewSuggestion,
|
|
37
38
|
)
|
|
38
39
|
|
|
@@ -67,6 +68,7 @@ __all__ = [
|
|
|
67
68
|
"UICommentThread",
|
|
68
69
|
"UIPullRequest",
|
|
69
70
|
"UIIssue",
|
|
71
|
+
"UIRelease",
|
|
70
72
|
"UIReviewSuggestion",
|
|
71
73
|
# Mappers
|
|
72
74
|
"from_rest_pr",
|
|
@@ -16,6 +16,7 @@ from .issue_mapper import from_rest_issue
|
|
|
16
16
|
from .comment_mapper import from_graphql_review_comment, from_graphql_issue_comment
|
|
17
17
|
from .thread_mapper import from_graphql_review_thread
|
|
18
18
|
from .review_mapper import from_network_review
|
|
19
|
+
from .release_mapper import from_network_release
|
|
19
20
|
|
|
20
21
|
__all__ = [
|
|
21
22
|
"from_rest_pr",
|
|
@@ -27,4 +28,5 @@ __all__ = [
|
|
|
27
28
|
"from_graphql_issue_comment",
|
|
28
29
|
"from_graphql_review_thread",
|
|
29
30
|
"from_network_review",
|
|
31
|
+
"from_network_release",
|
|
30
32
|
]
|
titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/models/mappers/release_mapper.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Mapper for GitHub release: Network model -> UI model."""
|
|
2
|
+
|
|
3
|
+
from ..network.rest import NetworkRelease
|
|
4
|
+
from ..view import UIRelease
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def from_network_release(network_release: NetworkRelease) -> UIRelease:
|
|
8
|
+
"""
|
|
9
|
+
Transform network release model to UI release model.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
network_release: Raw release data from gh CLI JSON
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
UIRelease ready for rendering
|
|
16
|
+
"""
|
|
17
|
+
return UIRelease(
|
|
18
|
+
tag_name=network_release.tag_name,
|
|
19
|
+
title=network_release.name,
|
|
20
|
+
url=network_release.url,
|
|
21
|
+
is_prerelease=network_release.is_prerelease,
|
|
22
|
+
)
|
|
@@ -10,6 +10,7 @@ from .user import NetworkUser
|
|
|
10
10
|
from .review import NetworkReview
|
|
11
11
|
from .pull_request import NetworkPullRequest, NetworkPRSearchResult, NetworkPRMergeResult, NetworkPRFile, NetworkPRCreated
|
|
12
12
|
from .issue import NetworkIssue
|
|
13
|
+
from .release import NetworkRelease
|
|
13
14
|
|
|
14
15
|
__all__ = [
|
|
15
16
|
"NetworkUser",
|
|
@@ -20,4 +21,5 @@ __all__ = [
|
|
|
20
21
|
"NetworkPRFile",
|
|
21
22
|
"NetworkPRCreated",
|
|
22
23
|
"NetworkIssue",
|
|
24
|
+
"NetworkRelease",
|
|
23
25
|
]
|
titan_cli-0.4.0/plugins/titan-plugin-github/titan_plugin_github/models/network/rest/release.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Network model for GitHub release data returned by gh CLI JSON output.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, Dict
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class NetworkRelease:
|
|
11
|
+
"""
|
|
12
|
+
Raw GitHub release model faithful to gh CLI JSON fields.
|
|
13
|
+
"""
|
|
14
|
+
tag_name: str
|
|
15
|
+
name: str
|
|
16
|
+
url: str
|
|
17
|
+
is_prerelease: bool
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def from_json(cls, data: Dict[str, Any]) -> "NetworkRelease":
|
|
21
|
+
"""
|
|
22
|
+
Parse raw gh JSON into NetworkRelease.
|
|
23
|
+
"""
|
|
24
|
+
return cls(
|
|
25
|
+
tag_name=data.get("tagName", ""),
|
|
26
|
+
name=data.get("name", "") or data.get("tagName", ""),
|
|
27
|
+
url=data.get("url", ""),
|
|
28
|
+
is_prerelease=bool(data.get("isPrerelease", False)),
|
|
29
|
+
)
|
{titan_cli-0.3.2 → titan_cli-0.4.0}/plugins/titan-plugin-github/titan_plugin_github/models/view.py
RENAMED
|
@@ -230,6 +230,20 @@ class UIPRCreated:
|
|
|
230
230
|
state: str # "open" or "draft"
|
|
231
231
|
|
|
232
232
|
|
|
233
|
+
@dataclass
|
|
234
|
+
class UIRelease:
|
|
235
|
+
"""
|
|
236
|
+
UI model for a newly created GitHub release.
|
|
237
|
+
|
|
238
|
+
Returned after create_release — contains the identifiers needed
|
|
239
|
+
to display the result or navigate to the release page.
|
|
240
|
+
"""
|
|
241
|
+
tag_name: str
|
|
242
|
+
title: str
|
|
243
|
+
url: str
|
|
244
|
+
is_prerelease: bool
|
|
245
|
+
|
|
246
|
+
|
|
233
247
|
@dataclass
|
|
234
248
|
class UIReviewSuggestion:
|
|
235
249
|
"""AI-generated review comment for a PR."""
|
|
@@ -251,5 +265,6 @@ __all__ = [
|
|
|
251
265
|
"UIPRMergeResult",
|
|
252
266
|
"UIFileChange",
|
|
253
267
|
"UIPRCreated",
|
|
268
|
+
"UIRelease",
|
|
254
269
|
"UIReviewSuggestion",
|
|
255
270
|
]
|
|
@@ -8,7 +8,7 @@ Uses PRAgent to analyze branch context and generate PR content.
|
|
|
8
8
|
from titan_cli.core.logging import get_logger
|
|
9
9
|
from titan_cli.engine import WorkflowContext, WorkflowResult, Success, Error, Skip
|
|
10
10
|
|
|
11
|
-
from ..agents import PRAgent
|
|
11
|
+
from ..agents import PRAgent, PRStatus
|
|
12
12
|
from ..messages import msg
|
|
13
13
|
|
|
14
14
|
logger = get_logger(__name__)
|
|
@@ -103,12 +103,34 @@ def ai_suggest_pr_description_step(ctx: WorkflowContext) -> WorkflowResult:
|
|
|
103
103
|
has_literal_newlines,
|
|
104
104
|
)
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
if analysis.pr_status in {
|
|
107
|
+
PRStatus.GENERATION_FAILED,
|
|
108
|
+
PRStatus.SOURCE_DATA_FAILED,
|
|
109
|
+
}:
|
|
110
|
+
error_message = msg.GitHub.AI.AI_GENERATION_FAILED.format(
|
|
111
|
+
e=analysis.pr_error or "Unknown error"
|
|
112
|
+
)
|
|
113
|
+
ctx.textual.error_text(error_message)
|
|
114
|
+
ctx.textual.end_step("error")
|
|
115
|
+
return Error(error_message)
|
|
116
|
+
|
|
117
|
+
if analysis.pr_status == PRStatus.NO_COMMITS:
|
|
118
|
+
ctx.textual.dim_text(
|
|
119
|
+
"No commits found in branch to generate PR description."
|
|
120
|
+
)
|
|
109
121
|
ctx.textual.end_step("skip")
|
|
110
122
|
return Skip("No commits found for PR generation")
|
|
111
123
|
|
|
124
|
+
if analysis.pr_status == PRStatus.INCOMPLETE:
|
|
125
|
+
ctx.textual.warning_text("AI did not generate complete PR content.")
|
|
126
|
+
ctx.textual.end_step("skip")
|
|
127
|
+
return Skip("AI did not generate complete PR content")
|
|
128
|
+
|
|
129
|
+
if not analysis.pr_title or not analysis.pr_body:
|
|
130
|
+
ctx.textual.warning_text("AI did not generate PR content for this branch.")
|
|
131
|
+
ctx.textual.end_step("skip")
|
|
132
|
+
return Skip("AI did not generate PR content")
|
|
133
|
+
|
|
112
134
|
# Show PR size info
|
|
113
135
|
if analysis.pr_size:
|
|
114
136
|
ctx.textual.dim_text(msg.GitHub.AI.PR_SIZE_INFO.format(
|
|
@@ -151,12 +173,10 @@ def ai_suggest_pr_description_step(ctx: WorkflowContext) -> WorkflowResult:
|
|
|
151
173
|
)
|
|
152
174
|
|
|
153
175
|
except Exception as e:
|
|
154
|
-
|
|
155
|
-
ctx.textual.
|
|
156
|
-
ctx.textual.
|
|
157
|
-
|
|
158
|
-
ctx.textual.end_step("skip")
|
|
159
|
-
return Skip(msg.GitHub.AI.AI_GENERATION_FAILED.format(e=e))
|
|
176
|
+
error_message = msg.GitHub.AI.AI_GENERATION_FAILED.format(e=e)
|
|
177
|
+
ctx.textual.error_text(error_message)
|
|
178
|
+
ctx.textual.end_step("error")
|
|
179
|
+
return Error(error_message, exception=e)
|
|
160
180
|
|
|
161
181
|
|
|
162
182
|
# Export for plugin registration
|
|
@@ -76,7 +76,7 @@ class Messages:
|
|
|
76
76
|
|
|
77
77
|
class AIIssue:
|
|
78
78
|
"""AI issue generation step messages"""
|
|
79
|
-
AI_NOT_CONFIGURED: str = "AI not configured.
|
|
79
|
+
AI_NOT_CONFIGURED: str = "AI not configured. Open AI Configuration to enable AI features."
|
|
80
80
|
AI_NOT_CONFIGURED_SKIP: str = "AI not configured - skipping analysis"
|
|
81
81
|
GENERATING_ISSUE: str = "Generating JIRA issue with AI..."
|
|
82
82
|
GENERATION_SUCCESS: str = "AI generated JIRA issue successfully"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "titan-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.4.0"
|
|
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"
|
|
@@ -35,6 +35,7 @@ pydantic = ">=2.0.0,<3.0.0"
|
|
|
35
35
|
keyring = ">=25.7.0,<26.0.0"
|
|
36
36
|
python-dotenv = ">=1.2.1,<2.0.0"
|
|
37
37
|
anthropic = ">=0.75.0,<0.76.0"
|
|
38
|
+
openai = ">=2.0.0,<3.0.0"
|
|
38
39
|
google-genai = "^1.58.0"
|
|
39
40
|
google-auth = ">=2.43.0,<3.0.0"
|
|
40
41
|
pyyaml = ">=6.0.3,<7.0.0"
|
|
@@ -43,6 +44,7 @@ textual = ">=1.0.0,<2.0.0"
|
|
|
43
44
|
requests = ">=2.31.0,<3.0.0"
|
|
44
45
|
packaging = ">=23.0,<25.0"
|
|
45
46
|
structlog = ">=25.5.0,<26.0.0"
|
|
47
|
+
h2 = ">=4.1.0,<5.0.0"
|
|
46
48
|
|
|
47
49
|
[tool.poetry.group.docs]
|
|
48
50
|
optional = true
|