@ngocsangairvds/vsaf 3.1.26 → 3.2.1
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.
- package/package.json +2 -2
- package/src/global.js +70 -10
- package/tools/skills/vds-scripts-skill/.openskills.json +6 -0
- package/tools/skills/vds-scripts-skill/QUALITY.md +44 -0
- package/tools/skills/vds-scripts-skill/SKILL.md +135 -0
- package/tools/skills/vds-scripts-skill/references/audit-commands.md +171 -0
- package/tools/skills/vds-scripts-skill/references/capability-index.md +34 -0
- package/tools/skills/vds-scripts-skill/references/development-commands.md +12 -0
- package/tools/skills/vds-scripts-skill/references/google-sheets.md +73 -0
- package/tools/skills/vds-scripts-skill/references/integration-commands.md +17 -0
- package/tools/skills/vds-scripts-skill/references/platform-bootstrap.md +31 -0
- package/tools/skills/vds-scripts-skill/references/specialist-routing.md +14 -0
- package/tools/skills/vds-scripts-skill/references/validation-commands.md +15 -0
- package/tools/skills/vsaf-build/SKILL.md +32 -2
- package/tools/skills/vsaf-push-prd/SKILL.md +43 -40
- package/tools/skills/vsaf-push-srs/SKILL.md +44 -41
- package/tools/skills/vsaf-ship/SKILL.md +41 -10
- package/tools/skills/vsaf-test/SKILL.md +8 -0
- package/tools/vds-scripts/.mcp.json +11 -0
- package/tools/vds-scripts/.secrets.baseline +133 -0
- package/tools/vds-scripts/AGENTS.md +152 -0
- package/tools/vds-scripts/CLAUDE.md +101 -0
- package/tools/vds-scripts/CLI_COMMAND_OPTIMIZATION.md +156 -0
- package/tools/vds-scripts/PACKAGE_P125B_IMPLEMENTATION_SUMMARY.md +131 -0
- package/tools/vds-scripts/PROJECT_COMPLETION_SUMMARY.md +45 -0
- package/tools/vds-scripts/README.md +97 -0
- package/tools/vds-scripts/bitbucket_manifest_mapping.toml +34 -0
- package/tools/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +258 -0
- package/tools/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +393 -0
- package/tools/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +61 -0
- package/tools/vds-scripts/bitbucket_orchestrator/FEATURES.md +908 -0
- package/tools/vds-scripts/bitbucket_orchestrator/README.md +687 -0
- package/tools/vds-scripts/bitbucket_orchestrator/pyproject.toml +40 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +657 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +2108 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +2534 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +171 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +185 -0
- package/tools/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +244 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/__init__.py +8 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/conftest.py +65 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +151 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +546 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +145 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +115 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client.py +157 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +79 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +163 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +32 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +194 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +164 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +179 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +119 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +156 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code.py +98 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +282 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +335 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +147 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_config.py +131 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +352 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +371 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +261 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +204 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +334 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +343 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +270 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +189 -0
- package/tools/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +233 -0
- package/tools/vds-scripts/bitbucket_orchestrator/uv.lock +742 -0
- package/tools/vds-scripts/confluence_orchestrator/Dockerfile +19 -0
- package/tools/vds-scripts/confluence_orchestrator/README.md +412 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +127 -0
- package/tools/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +108 -0
- package/tools/vds-scripts/confluence_orchestrator/pyproject.toml +48 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +20 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +2532 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +175 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +290 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +94 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +1835 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +80 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +109 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +1114 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +165 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +78 -0
- package/tools/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +121 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +213 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/sync_png_attachments.py +305 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/conftest.py +8 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +224 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +188 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +247 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_cli.py +499 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_config.py +83 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content.py +186 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +27 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +2250 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +223 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing.py +71 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +37 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +44 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +49 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_export.py +230 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_history.py +204 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_http.py +117 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +91 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_reporting.py +24 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +34 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_management.py +237 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +332 -0
- package/tools/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +388 -0
- package/tools/vds-scripts/confluence_orchestrator/uv.lock +1023 -0
- package/tools/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +119 -0
- package/tools/vds-scripts/git_orchestrator/README.md +280 -0
- package/tools/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +152 -0
- package/tools/vds-scripts/git_orchestrator/pyproject.toml +35 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +7 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +4 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +847 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +63 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +129 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +819 -0
- package/tools/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +53 -0
- package/tools/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_cli_settings.py +21 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_integration.py +74 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_manifest.py +79 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_orchestrator.py +204 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_public_api.py +236 -0
- package/tools/vds-scripts/git_orchestrator/tests/test_resilience.py +345 -0
- package/tools/vds-scripts/git_orchestrator/uv.lock +271 -0
- package/tools/vds-scripts/jira_orchestrator/README.md +770 -0
- package/tools/vds-scripts/jira_orchestrator/pyproject.toml +39 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +1320 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +2271 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +138 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +67 -0
- package/tools/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +65 -0
- package/tools/vds-scripts/jira_orchestrator/tests/__init__.py +1 -0
- package/tools/vds-scripts/jira_orchestrator/tests/conftest.py +86 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +69 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +57 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +45 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +117 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +54 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +42 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +76 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +110 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +133 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +41 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_agile.py +256 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_application_properties.py +193 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_backlog.py +91 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +277 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_cli.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_components.py +106 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_config.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_dashboard.py +122 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +207 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_filter_management.py +333 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +164 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_links.py +257 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +171 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_link_types.py +314 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_parse_set.py +37 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_permissions.py +273 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_reindex.py +81 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_remote_links.py +254 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +170 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +114 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_user_management.py +226 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_version_management.py +339 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_watchers.py +101 -0
- package/tools/vds-scripts/jira_orchestrator/tests/test_worklog.py +223 -0
- package/tools/vds-scripts/jira_orchestrator/uv.lock +738 -0
- package/tools/vds-scripts/mcp_server/Dockerfile +34 -0
- package/tools/vds-scripts/mcp_server/README.md +140 -0
- package/tools/vds-scripts/mcp_server/pyproject.toml +42 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +4 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/config.py +36 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/server.py +66 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +14 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +47 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +59 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +71 -0
- package/tools/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +63 -0
- package/tools/vds-scripts/mcp_server/tests/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/conftest.py +29 -0
- package/tools/vds-scripts/mcp_server/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +25 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_git_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +32 -0
- package/tools/vds-scripts/mcp_server/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +40 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +37 -0
- package/tools/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +47 -0
- package/tools/vds-scripts/mcp_server/uv.lock +1032 -0
- package/tools/vds-scripts/mypy.ini +5 -0
- package/tools/vds-scripts/pyproject.toml +29 -0
- package/tools/vds-scripts/repo-manifest.yaml +273 -0
- package/tools/vds-scripts/repo-manifest.yaml.example +25 -0
- package/tools/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +706 -0
- package/tools/vds-scripts/scripts/BRD-Validation-README.md +308 -0
- package/tools/vds-scripts/scripts/README.md +162 -0
- package/tools/vds-scripts/scripts/bootstrap_uv.sh +30 -0
- package/tools/vds-scripts/scripts/brd-validation-environment.json +51 -0
- package/tools/vds-scripts/scripts/brd-validation-test-results.json +13023 -0
- package/tools/vds-scripts/scripts/brd_coverage_report.json +276 -0
- package/tools/vds-scripts/scripts/create_memory_session.py +35 -0
- package/tools/vds-scripts/scripts/deployment/load_docker_images_offline.sh +90 -0
- package/tools/vds-scripts/scripts/final_completion_report.md +139 -0
- package/tools/vds-scripts/scripts/folder_structure_report.json +321 -0
- package/tools/vds-scripts/scripts/generate_completion_report.py +125 -0
- package/tools/vds-scripts/scripts/generate_intellij_modules.py +150 -0
- package/tools/vds-scripts/scripts/link_integrity_report.json +807 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages.py +255 -0
- package/tools/vds-scripts/scripts/move_audit_artifact_pages_rest.py +165 -0
- package/tools/vds-scripts/scripts/move_wrong_dept_pages.py +216 -0
- package/tools/vds-scripts/scripts/save_intellij_memories.py +120 -0
- package/tools/vds-scripts/scripts/save_memories_to_vds_ai.py +83 -0
- package/tools/vds-scripts/scripts/save_memories_vds_style.py +129 -0
- package/tools/vds-scripts/scripts/search_intellij_memories.py +50 -0
- package/tools/vds-scripts/scripts/setup_intellij_workspace.py +65 -0
- package/tools/vds-scripts/scripts/target-state-automation/README.md +89 -0
- package/tools/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +27 -0
- package/tools/vds-scripts/scripts/target-state-automation/coordination.sh +114 -0
- package/tools/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/docs_root.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +22 -0
- package/tools/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +17 -0
- package/tools/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +25 -0
- package/tools/vds-scripts/scripts/target-state-automation/sync_confluence.sh +30 -0
- package/tools/vds-scripts/scripts/target-state-automation/update_dependencies.sh +19 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_links.sh +86 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_markdown.sh +52 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_schemas.sh +26 -0
- package/tools/vds-scripts/scripts/target-state-automation/validate_structure.sh +98 -0
- package/tools/vds-scripts/scripts/update_modules_xml.py +190 -0
- package/tools/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +128 -0
- package/tools/vds-scripts/scripts/validate_brd_coverage.py +179 -0
- package/tools/vds-scripts/scripts/validate_folder_structure.py +240 -0
- package/tools/vds-scripts/scripts/validate_link_integrity.py +272 -0
- package/tools/vds-scripts/scripts/vds_sh_helpers.sh +180 -0
- package/tools/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +26 -0
- package/tools/vds-scripts/scripts/worktree_uv.sh +48 -0
- package/tools/vds-scripts/uv.lock +8 -0
- package/tools/vds-scripts/vds_cli/README.md +126 -0
- package/tools/vds-scripts/vds_cli/VERIFICATION_REPORT.md +41 -0
- package/tools/vds-scripts/vds_cli/pyproject.toml +38 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/cli.py +173 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +1203 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/env.py +41 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +3 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +198 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/router.py +93 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_api.py +647 -0
- package/tools/vds-scripts/vds_cli/src/vds_cli/sync_service.py +266 -0
- package/tools/vds-scripts/vds_cli/tests/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/conftest.py +49 -0
- package/tools/vds-scripts/vds_cli/tests/unit/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_cli.py +143 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +422 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_env.py +51 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_router.py +72 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_api.py +357 -0
- package/tools/vds-scripts/vds_cli/tests/unit/test_sync_service.py +160 -0
- package/tools/vds-scripts/vds_cli/tests/verification/__init__.py +2 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +33 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +35 -0
- package/tools/vds-scripts/vds_cli/tests/verification/test_jira_real.py +41 -0
- package/tools/vds-scripts/vds_cli/uv.lock +524 -0
- package/tools/vds-scripts/vds_cli_common/README.md +190 -0
- package/tools/vds-scripts/vds_cli_common/pyproject.toml +92 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +34 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +139 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +201 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +119 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +318 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +284 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +78 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +213 -0
- package/tools/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +85 -0
- package/tools/vds-scripts/vds_cli_common/tests/__init__.py +1 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_completers.py +148 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_context.py +192 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_env.py +102 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_errors.py +186 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_output.py +229 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_paths.py +61 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_testing.py +138 -0
- package/tools/vds-scripts/vds_cli_common/tests/test_version.py +64 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# VDS Scripts & Orchestrator Ecosystem
|
|
2
|
+
|
|
3
|
+
**Centralized Automation Platform for Viettel Digital Services**
|
|
4
|
+
|
|
5
|
+
This repository contains the `vds-cli` and a collection of specialized orchestrators designed to automate the software development lifecycle, from documentation management to infrastructure verification.
|
|
6
|
+
|
|
7
|
+
`WHO-project` is the canonical VDS ecosystem for both reusable skills and routed scripts. Within that model, this repository is the authoritative scripts workspace, while the companion `WHO-project/vds-skills/` repository is the authoritative skills catalog.
|
|
8
|
+
|
|
9
|
+
## 🚀 Quick Start
|
|
10
|
+
|
|
11
|
+
Ensure you have the VDS CLI installed and configured.
|
|
12
|
+
For the canonical human + AI-agent install/bootstrap flow, start with `docs/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md`.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Install dependencies in the current worktree
|
|
16
|
+
./scripts/worktree_uv.sh sync
|
|
17
|
+
|
|
18
|
+
# Verify installation
|
|
19
|
+
./scripts/worktree_uv.sh run --project vds_cli vds-cli --version
|
|
20
|
+
|
|
21
|
+
# Check environment status
|
|
22
|
+
./scripts/worktree_uv.sh run --project vds_cli vds-cli env status
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 📦 Available Orchestrators
|
|
28
|
+
|
|
29
|
+
The platform is modularized into specialized orchestrators, each handling a specific domain.
|
|
30
|
+
|
|
31
|
+
### Core Utilities
|
|
32
|
+
|
|
33
|
+
| Orchestrator | Command | Description |
|
|
34
|
+
|--------------|---------|-------------|
|
|
35
|
+
| **[Task Orchestrator](./task_orchestrator/README.md)** | `vds-cli tasks --` | Manage, refine, and audit service task breakdowns and project plans. |
|
|
36
|
+
| **[Excel Orchestrator](./excel_orchestrator/README.md)** | `vds-cli excel --` | Read, write, and format Excel reports (used by Task Orchestrator). |
|
|
37
|
+
| **[Git Orchestrator](./git_orchestrator/README.md)** | `vds-cli git --` | Repository management, cloning, and syncing across projects. |
|
|
38
|
+
| **[OpenAPI Orchestrator](./openapi_orchestrator/README.md)** | `vds-cli openapi --` | Validate, merge, and manage OpenAPI 3.x specifications. |
|
|
39
|
+
|
|
40
|
+
### Documentation & Knowledge
|
|
41
|
+
|
|
42
|
+
| Orchestrator | Command | Description |
|
|
43
|
+
|--------------|---------|-------------|
|
|
44
|
+
| **[Markdown Orchestrator](./markdown_orchestrator/README.md)** | `uv run --project markdown_orchestrator vds-markdown ...` | Format, lint, and validate Markdown documentation (direct CLI). |
|
|
45
|
+
| **[PDF Orchestrator](./pdf_orchestrator/README.md)** | `vds-cli pdf --` | Generate high-fidelity PDFs from markdown sources. |
|
|
46
|
+
| **[Diagram Generator](./diagram_generator/README.md)** | `vds-cli diagrams --` | Generate C4, Sequence, and ER diagrams from code/text. |
|
|
47
|
+
| **[BRD Orchestrator](./brd_orchestrator/README.md)** | `vds-cli brd --` | Validate requirement coverage against Business Requirements Documents. |
|
|
48
|
+
| **[Schema Converter](./schema_converter/README.md)** | `vds-cli schema --` | Convert between SQL, Prisma, JSON Schema, and Markdown. |
|
|
49
|
+
|
|
50
|
+
### Integration & Infrastructure
|
|
51
|
+
|
|
52
|
+
| Orchestrator | Command | Description |
|
|
53
|
+
|--------------|---------|-------------|
|
|
54
|
+
| **[Jira Orchestrator](./jira_orchestrator/README.md)** | `vds-cli jira` | Interact with Jira API for ticket management. |
|
|
55
|
+
| **[Confluence Orchestrator](./confluence_orchestrator/README.md)** | `vds-cli confluence` | Publish documentation to Confluence pages. |
|
|
56
|
+
| **[Bitbucket Orchestrator](./bitbucket_orchestrator/README.md)** | `vds-cli bitbucket` | Manage PRs, repositories, and branch permissions. |
|
|
57
|
+
| **[Elastic Orchestrator](./elastic_orchestrator/README.md)** | `vds-cli elastic --` | Query and manage Elasticsearch indices. |
|
|
58
|
+
| **[DB Query Orchestrator](./db_query_orchestrator/README.md)** | `vds-cli db_query --` | Manage named DB connections and run safe read-only SQL against PostgreSQL, SQL Server, and MariaDB. |
|
|
59
|
+
| **[Grafana Orchestrator](./grafana_orchestrator/README.md)** | `vds-cli grafana --` | Query logs and metrics via Grafana Datasource. |
|
|
60
|
+
| **[SonarQube Orchestrator](./sonarqube_orchestrator/README.md)** | `vds-cli sonarqube --` | Trigger scans and check quality gates. |
|
|
61
|
+
|
|
62
|
+
### Developer Experience
|
|
63
|
+
|
|
64
|
+
| Orchestrator | Command | Description |
|
|
65
|
+
|--------------|---------|-------------|
|
|
66
|
+
| **[IntelliJ Orchestrator](./intellij_orchestrator/README.md)** | `vds-cli intellij --` | Automate workspace setup and run configurations. |
|
|
67
|
+
| **[Links Orchestrator](./links_orchestrator/README.md)** | `vds-cli links --` | Validate relative and absolute links across documentation. |
|
|
68
|
+
| **[Structure Orchestrator](./structure_orchestrator/README.md)** | `vds-cli structure --` | Enforce repository folder structure and naming conventions. |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 🛠️ Development Standards
|
|
73
|
+
|
|
74
|
+
All orchestrators should follow the `vds-cli` routed command model and shared environment-loading pattern used in `vds_cli_common`.
|
|
75
|
+
|
|
76
|
+
### Key Requirements
|
|
77
|
+
1. **Structure**: Must follow `src/vds_[name]_orchestrator/cli.py` pattern.
|
|
78
|
+
2. **Configuration**: Keep secrets in `VDS_ENV_FILE` or `<config-root>/.env`; `<config-root>` resolves from `VDS_CONFIG_DIR` when set, otherwise from the friendly user-home VDS default (`~/.vds` on Unix-like systems). Keep non-sensitive extraction tuning in `<config-root>/config/extract-docs.toml`.
|
|
79
|
+
3. **Testing**: Minimum 80% unit test coverage.
|
|
80
|
+
4. **CLI**: Expose commands via `typer` for integration into `vds-cli`.
|
|
81
|
+
5. **Audit Runtime Contract (Phase 93)**: `vds-audit` workflow/analyze/ad-hoc consume evidence from Postgres chunks only (no runtime disk evidence ingestion path). Use `vds-audit prepare --project <PROJECT_STORAGE_KEY>` to run the deterministic prep sequence (`parse-registry -> sync repos -> extract-docs`), then confirm `state readiness` reports `ready=true`, `docs_chunk_ready=true`, and `code_chunk_ready=true`.
|
|
82
|
+
|
|
83
|
+
### Creating a New Orchestrator
|
|
84
|
+
|
|
85
|
+
1. Copy the structure from an existing module (e.g., `task_orchestrator`).
|
|
86
|
+
2. Implement the logic in `src/`.
|
|
87
|
+
3. Register the module in `vds_cli/src/vds_cli/router.py`.
|
|
88
|
+
4. Add the command group in `vds_cli/src/vds_cli/cli.py`.
|
|
89
|
+
5. Add entry to this README.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🤝 Contributing
|
|
94
|
+
|
|
95
|
+
1. Create a feature branch `feature/enhance-[orchestrator]`.
|
|
96
|
+
2. Ensure tests pass: `uv run pytest`.
|
|
97
|
+
3. Submit a PR via `vds bitbucket pr create`.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Bitbucket project → manifest mapping rules for dynamic repo-manifest.yaml generation
|
|
2
|
+
#
|
|
3
|
+
# This file is intentionally minimal: it only defines how to convert a Bitbucket
|
|
4
|
+
# project key into:
|
|
5
|
+
# - project_id: short id used in repo-manifest.yaml (lep, insurance, saving, ekyc)
|
|
6
|
+
# - path_prefix: local path prefix in the monorepo
|
|
7
|
+
# - default_branch: default branch name when generating entries
|
|
8
|
+
#
|
|
9
|
+
# To add more projects later, extend this file and rerun the generator.
|
|
10
|
+
|
|
11
|
+
[projects.LEP]
|
|
12
|
+
project_id = "lep"
|
|
13
|
+
path_prefix = "LEP-project"
|
|
14
|
+
default_branch = "release"
|
|
15
|
+
|
|
16
|
+
[projects.INSURANCE]
|
|
17
|
+
project_id = "insurance"
|
|
18
|
+
path_prefix = "INSURANCE-project"
|
|
19
|
+
default_branch = "release"
|
|
20
|
+
|
|
21
|
+
[projects.SAVING]
|
|
22
|
+
project_id = "saving"
|
|
23
|
+
path_prefix = "SAVING-project"
|
|
24
|
+
default_branch = "release"
|
|
25
|
+
|
|
26
|
+
[projects.EKYC]
|
|
27
|
+
project_id = "ekyc"
|
|
28
|
+
path_prefix = "EKYC-project"
|
|
29
|
+
default_branch = "release"
|
|
30
|
+
|
|
31
|
+
[projects.DOPS]
|
|
32
|
+
project_id = "dops"
|
|
33
|
+
path_prefix = "DOPS-project"
|
|
34
|
+
default_branch = "master"
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# Bitbucket Orchestrator Architecture Analysis
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document verifies that there is **no duplicate logic** in the Bitbucket-related code across the VDS scripts
|
|
6
|
+
ecosystem. All Bitbucket operations follow a clean, single-source-of-truth architecture.
|
|
7
|
+
|
|
8
|
+
## Architecture Layers
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ User/Agent Interface │
|
|
13
|
+
└────────────────────┬────────────────────────────────────────┘
|
|
14
|
+
│
|
|
15
|
+
┌───────────┴───────────┐
|
|
16
|
+
│ │
|
|
17
|
+
┌────▼────┐ ┌─────▼─────┐
|
|
18
|
+
│ VDS CLI │ │ MCP Server │
|
|
19
|
+
└────┬────┘ └─────┬─────┘
|
|
20
|
+
│ │
|
|
21
|
+
│ Routes to │ Calls VDS CLI
|
|
22
|
+
│ │
|
|
23
|
+
┌────▼───────────────────────▼────┐
|
|
24
|
+
│ Bitbucket Orchestrator │
|
|
25
|
+
│ (Single Source of Truth) │
|
|
26
|
+
└────┬────────────────────────────┘
|
|
27
|
+
│
|
|
28
|
+
┌────▼────┐
|
|
29
|
+
│ SDK │
|
|
30
|
+
│ (atlassian-python-api) │
|
|
31
|
+
└─────────┘
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Single Source of Truth
|
|
35
|
+
|
|
36
|
+
### 1. Bitbucket Client (`bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py`)
|
|
37
|
+
|
|
38
|
+
**Status**: ✅ **ONLY** place that directly uses `AtlassianBitbucket` SDK
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from atlassian import Bitbucket as AtlassianBitbucket
|
|
42
|
+
|
|
43
|
+
class BitbucketClient:
|
|
44
|
+
"""Bitbucket client wrapper using atlassian-python-api SDK."""
|
|
45
|
+
def __init__(self, settings: BitbucketSettings):
|
|
46
|
+
# Only place that creates AtlassianBitbucket instance
|
|
47
|
+
self._client = AtlassianBitbucket(...)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Verification**:
|
|
51
|
+
|
|
52
|
+
- ✅ Only file that imports `AtlassianBitbucket`
|
|
53
|
+
- ✅ All Bitbucket API calls go through this client
|
|
54
|
+
- ✅ All error handling centralized here
|
|
55
|
+
- ✅ All retry logic centralized here
|
|
56
|
+
|
|
57
|
+
### 2. Configuration Loading (`bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py`)
|
|
58
|
+
|
|
59
|
+
**Status**: ✅ **ONLY** place that loads Bitbucket settings
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
def load_settings(...) -> BitbucketSettings:
|
|
63
|
+
"""Load orchestrator settings from the environment."""
|
|
64
|
+
# Only place that creates BitbucketSettings
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Verification**:
|
|
68
|
+
|
|
69
|
+
- ✅ Only file that defines `BitbucketSettings`
|
|
70
|
+
- ✅ Only file that implements `load_settings()` for Bitbucket
|
|
71
|
+
- ✅ Consistent with other orchestrators (JIRA, Confluence)
|
|
72
|
+
|
|
73
|
+
### 3. Client Factory (`bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py`)
|
|
74
|
+
|
|
75
|
+
**Status**: ✅ **ONLY** place that builds BitbucketClient instances
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
def _build_client(settings: BitbucketSettings) -> BitbucketClient:
|
|
79
|
+
"""Build and return a configured BitbucketClient."""
|
|
80
|
+
return BitbucketClient(settings)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Verification**:
|
|
84
|
+
|
|
85
|
+
- ✅ Single factory function for client creation
|
|
86
|
+
- ✅ Used consistently across all CLI commands
|
|
87
|
+
- ✅ No duplicate client initialization logic
|
|
88
|
+
|
|
89
|
+
## Integration Points (No Duplication)
|
|
90
|
+
|
|
91
|
+
### 1. VDS CLI Router (`vds_cli/src/vds_cli/router.py`)
|
|
92
|
+
|
|
93
|
+
**Status**: ✅ **NO** Bitbucket logic, only routing
|
|
94
|
+
|
|
95
|
+
```python
|
|
96
|
+
ORCHESTRATORS = {
|
|
97
|
+
"bitbucket": {
|
|
98
|
+
"module": "vds_bitbucket_orchestrator.cli",
|
|
99
|
+
"path": "bitbucket_orchestrator",
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
def run_orchestrator(service: str, args: list[str], script_dir: Path) -> int:
|
|
104
|
+
"""Run orchestrator via uv."""
|
|
105
|
+
# Simply routes to orchestrator, no Bitbucket-specific logic
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Verification**:
|
|
109
|
+
|
|
110
|
+
- ✅ No Bitbucket API calls
|
|
111
|
+
- ✅ No Bitbucket client creation
|
|
112
|
+
- ✅ No Bitbucket configuration loading
|
|
113
|
+
- ✅ Pure routing logic only
|
|
114
|
+
|
|
115
|
+
### 2. VDS CLI Main (`vds_cli/src/vds_cli/cli.py`)
|
|
116
|
+
|
|
117
|
+
**Status**: ✅ **NO** Bitbucket logic, only command registration
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
@app.command(context_settings=PASS_THRU_CONTEXT)
|
|
121
|
+
def bitbucket(ctx: typer.Context) -> None:
|
|
122
|
+
"""Bitbucket operations."""
|
|
123
|
+
_run_service("bitbucket", list(ctx.args)) # Routes to orchestrator
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Verification**:
|
|
127
|
+
|
|
128
|
+
- ✅ No Bitbucket API calls
|
|
129
|
+
- ✅ No Bitbucket client creation
|
|
130
|
+
- ✅ No Bitbucket configuration loading
|
|
131
|
+
- ✅ Pure command registration only
|
|
132
|
+
|
|
133
|
+
### 3. MCP Server Tools (`mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py`)
|
|
134
|
+
|
|
135
|
+
**Status**: ✅ **NO** direct Bitbucket API calls, uses VDS CLI
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
def register_bitbucket_tools(mcp: FastMCP, execute_cli: Callable[..., Any]) -> None:
|
|
139
|
+
"""Register Bitbucket tools with MCP server."""
|
|
140
|
+
|
|
141
|
+
@mcp.tool()
|
|
142
|
+
async def bitbucket_list_projects() -> str:
|
|
143
|
+
# Uses VDS CLI, not direct API calls
|
|
144
|
+
result = await execute_cli("bitbucket", "projects")
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Verification**:
|
|
148
|
+
|
|
149
|
+
- ✅ No direct `AtlassianBitbucket` usage
|
|
150
|
+
- ✅ No direct `BitbucketClient` usage
|
|
151
|
+
- ✅ No direct `BitbucketSettings` usage
|
|
152
|
+
- ✅ Uses VDS CLI as abstraction layer
|
|
153
|
+
- ✅ Proper separation of concerns
|
|
154
|
+
|
|
155
|
+
### 4. Git Orchestrator (`git_orchestrator/src/vds_git_orchestrator/orchestrator.py`)
|
|
156
|
+
|
|
157
|
+
**Status**: ✅ **NO** Bitbucket-specific code
|
|
158
|
+
|
|
159
|
+
**Verification**:
|
|
160
|
+
|
|
161
|
+
- ✅ No Bitbucket imports
|
|
162
|
+
- ✅ No Bitbucket API calls
|
|
163
|
+
- ✅ Only Git operations (uses Bitbucket as Git remote, not API)
|
|
164
|
+
- ✅ References `VDS_BITBUCKET_HTTP_BASE` for Git URL construction only
|
|
165
|
+
|
|
166
|
+
## Method Mapping Verification
|
|
167
|
+
|
|
168
|
+
All Bitbucket operations map to a single implementation:
|
|
169
|
+
|
|
170
|
+
| Operation | Implementation Location | Duplicates? | |-----------|------------------------|-------------| |
|
|
171
|
+
`create_repository()` | `bitbucket_orchestrator/client.py` | ❌ None | | `get_repository()` |
|
|
172
|
+
`bitbucket_orchestrator/client.py` | ❌ None | | `update_repository()` | `bitbucket_orchestrator/client.py` | ❌ None | |
|
|
173
|
+
`delete_repository()` | `bitbucket_orchestrator/client.py` | ❌ None | | `fork_repository()` |
|
|
174
|
+
`bitbucket_orchestrator/client.py` | ❌ None | | `list_repositories()` | `bitbucket_orchestrator/client.py` | ❌ None | |
|
|
175
|
+
`create_pull_request()` | `bitbucket_orchestrator/client.py` | ❌ None | | All other operations |
|
|
176
|
+
`bitbucket_orchestrator/client.py` | ❌ None |
|
|
177
|
+
|
|
178
|
+
## Configuration Verification
|
|
179
|
+
|
|
180
|
+
All Bitbucket configuration loading maps to a single implementation:
|
|
181
|
+
|
|
182
|
+
| Configuration | Implementation Location | Duplicates? | |---------------|------------------------|-------------| |
|
|
183
|
+
`BitbucketSettings` | `bitbucket_orchestrator/config.py` | ❌ None | | `load_settings()` |
|
|
184
|
+
`bitbucket_orchestrator/config.py` | ❌ None | | Environment variable parsing | `bitbucket_orchestrator/config.py` | ❌
|
|
185
|
+
None |
|
|
186
|
+
|
|
187
|
+
## Client Initialization Verification
|
|
188
|
+
|
|
189
|
+
All Bitbucket client creation maps to a single implementation:
|
|
190
|
+
|
|
191
|
+
| Initialization | Implementation Location | Duplicates? | |----------------|------------------------|-------------| |
|
|
192
|
+
`BitbucketClient.__init__()` | `bitbucket_orchestrator/client.py` | ❌ None | | `_build_client()` |
|
|
193
|
+
`bitbucket_orchestrator/cli.py` | ❌ None | | SDK client creation | `bitbucket_orchestrator/client.py` | ❌ None |
|
|
194
|
+
|
|
195
|
+
## Test Coverage Verification
|
|
196
|
+
|
|
197
|
+
All tests use the same client initialization pattern:
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
# All tests use this pattern - no duplication
|
|
201
|
+
@patch("vds_bitbucket_orchestrator.client.AtlassianBitbucket")
|
|
202
|
+
def test_something(mock_bitbucket_class: Mock, mock_settings: BitbucketSettings):
|
|
203
|
+
client = BitbucketClient(mock_settings)
|
|
204
|
+
# Test implementation
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Verification**:
|
|
208
|
+
|
|
209
|
+
- ✅ All tests mock `AtlassianBitbucket` at the same location
|
|
210
|
+
- ✅ All tests use `BitbucketClient` from same module
|
|
211
|
+
- ✅ All tests use `BitbucketSettings` from same module
|
|
212
|
+
- ✅ No duplicate test setup logic
|
|
213
|
+
|
|
214
|
+
## Summary
|
|
215
|
+
|
|
216
|
+
### ✅ No Duplication Found
|
|
217
|
+
|
|
218
|
+
1. **Single SDK Usage**: Only `bitbucket_orchestrator/client.py` uses `AtlassianBitbucket`
|
|
219
|
+
1. **Single Configuration**: Only `bitbucket_orchestrator/config.py` handles settings
|
|
220
|
+
1. **Single Client Factory**: Only `bitbucket_orchestrator/cli.py` has `_build_client()`
|
|
221
|
+
1. **Clean Integration**: VDS CLI and MCP Server use orchestrator, don't duplicate logic
|
|
222
|
+
1. **Consistent Patterns**: All components follow the same architecture
|
|
223
|
+
|
|
224
|
+
### Architecture Benefits
|
|
225
|
+
|
|
226
|
+
1. **Maintainability**: Changes to Bitbucket logic only need to be made in one place
|
|
227
|
+
1. **Consistency**: All consumers get the same behavior
|
|
228
|
+
1. **Testability**: Single point to mock for testing
|
|
229
|
+
1. **Error Handling**: Centralized error handling and retry logic
|
|
230
|
+
1. **Documentation**: Single source of truth for API practices
|
|
231
|
+
|
|
232
|
+
### Verification Commands
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Verify only one place imports AtlassianBitbucket
|
|
236
|
+
grep -r "from atlassian import Bitbucket\|AtlassianBitbucket" docs-nttc/scripts/
|
|
237
|
+
# Result: Only bitbucket_orchestrator/client.py
|
|
238
|
+
|
|
239
|
+
# Verify only one place defines BitbucketSettings
|
|
240
|
+
grep -r "class BitbucketSettings" docs-nttc/scripts/
|
|
241
|
+
# Result: Only bitbucket_orchestrator/config.py
|
|
242
|
+
|
|
243
|
+
# Verify only one place has _build_client for Bitbucket
|
|
244
|
+
grep -r "def _build_client.*Bitbucket" docs-nttc/scripts/
|
|
245
|
+
# Result: Only bitbucket_orchestrator/cli.py
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Conclusion
|
|
249
|
+
|
|
250
|
+
✅ **No duplicate logic found**. The Bitbucket orchestrator follows a clean, single-source-of-truth architecture with
|
|
251
|
+
proper separation of concerns:
|
|
252
|
+
|
|
253
|
+
- **Orchestrator**: Implements all Bitbucket logic
|
|
254
|
+
- **VDS CLI**: Routes commands to orchestrator
|
|
255
|
+
- **MCP Server**: Uses VDS CLI as abstraction layer
|
|
256
|
+
- **Git Orchestrator**: Uses Bitbucket as Git remote only, no API calls
|
|
257
|
+
|
|
258
|
+
All components work together without duplication, ensuring maintainability and consistency.
|