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