@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,114 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UV-PATTERN: NO-UV — This script uses only curl and inline python3 to call
|
|
3
|
+
# the multi-agent coordination HTTP API. It has no uv dependency and does not
|
|
4
|
+
# need to be migrated to the worktree wrapper pattern.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
BASE_URL="${BASE_URL:-http://localhost:8000}"
|
|
8
|
+
SESSION_ID="${SESSION_ID:-multi_agent_session_$(date +%Y%m%d)}"
|
|
9
|
+
USER_ID="${USER_ID:-multi_agent_coordinator}"
|
|
10
|
+
|
|
11
|
+
if [[ $# -lt 1 ]]; then
|
|
12
|
+
echo "Usage: $0 <command> [args]"
|
|
13
|
+
echo "Commands:"
|
|
14
|
+
echo " init-tasks <tasks.json>"
|
|
15
|
+
echo " register <agent_id> <capabilities_csv>"
|
|
16
|
+
echo " heartbeat <agent_id>"
|
|
17
|
+
echo " acquire <agent_id>"
|
|
18
|
+
echo " progress <agent_id> <task_id> <progress>"
|
|
19
|
+
echo " complete <agent_id> <task_id> <result_json>"
|
|
20
|
+
echo " list-tasks"
|
|
21
|
+
echo " list-agents"
|
|
22
|
+
echo " lock <agent_id> <file_path> <operation>"
|
|
23
|
+
echo " unlock <agent_id> <file_path>"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
cmd="$1"
|
|
28
|
+
shift
|
|
29
|
+
|
|
30
|
+
case "$cmd" in
|
|
31
|
+
init-tasks)
|
|
32
|
+
tasks_file="$1"
|
|
33
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/initialize" \
|
|
34
|
+
-H "Content-Type: application/json" \
|
|
35
|
+
-d @"$tasks_file"
|
|
36
|
+
;;
|
|
37
|
+
register)
|
|
38
|
+
agent_id="$1"
|
|
39
|
+
capabilities_csv="$2"
|
|
40
|
+
IFS=',' read -r -a caps <<< "$capabilities_csv"
|
|
41
|
+
payload=$(python3 - <<'PY'
|
|
42
|
+
import json, os
|
|
43
|
+
agent_id = os.environ["AGENT_ID"]
|
|
44
|
+
caps = os.environ["CAPS"].split(",") if os.environ["CAPS"] else []
|
|
45
|
+
payload = {
|
|
46
|
+
"session_id": os.environ["SESSION_ID"],
|
|
47
|
+
"user_id": os.environ["USER_ID"],
|
|
48
|
+
"agent_id": agent_id,
|
|
49
|
+
"capabilities": [c.strip() for c in caps if c.strip()],
|
|
50
|
+
"max_concurrent_tasks": 1,
|
|
51
|
+
"metadata": {"org_id": "vds-internal"},
|
|
52
|
+
}
|
|
53
|
+
print(json.dumps(payload))
|
|
54
|
+
PY
|
|
55
|
+
)
|
|
56
|
+
AGENT_ID="$agent_id" CAPS="$capabilities_csv" SESSION_ID="$SESSION_ID" USER_ID="$USER_ID" \
|
|
57
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/agents/register" \
|
|
58
|
+
-H "Content-Type: application/json" \
|
|
59
|
+
-d "$payload"
|
|
60
|
+
;;
|
|
61
|
+
heartbeat)
|
|
62
|
+
agent_id="$1"
|
|
63
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/agents/heartbeat" \
|
|
64
|
+
-H "Content-Type: application/json" \
|
|
65
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"agent_id\":\"$agent_id\"}"
|
|
66
|
+
;;
|
|
67
|
+
acquire)
|
|
68
|
+
agent_id="$1"
|
|
69
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/acquire" \
|
|
70
|
+
-H "Content-Type: application/json" \
|
|
71
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"agent_id\":\"$agent_id\"}"
|
|
72
|
+
;;
|
|
73
|
+
progress)
|
|
74
|
+
agent_id="$1"
|
|
75
|
+
task_id="$2"
|
|
76
|
+
progress="$3"
|
|
77
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/progress" \
|
|
78
|
+
-H "Content-Type: application/json" \
|
|
79
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"task_id\":\"$task_id\",\"agent_id\":\"$agent_id\",\"progress\":$progress}"
|
|
80
|
+
;;
|
|
81
|
+
complete)
|
|
82
|
+
agent_id="$1"
|
|
83
|
+
task_id="$2"
|
|
84
|
+
result_json="$3"
|
|
85
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/tasks/complete" \
|
|
86
|
+
-H "Content-Type: application/json" \
|
|
87
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"task_id\":\"$task_id\",\"agent_id\":\"$agent_id\",\"result\":$result_json}"
|
|
88
|
+
;;
|
|
89
|
+
list-tasks)
|
|
90
|
+
curl -sS "$BASE_URL/api/v1/coordination/tasks?session_id=$SESSION_ID"
|
|
91
|
+
;;
|
|
92
|
+
list-agents)
|
|
93
|
+
curl -sS "$BASE_URL/api/v1/coordination/agents?session_id=$SESSION_ID"
|
|
94
|
+
;;
|
|
95
|
+
lock)
|
|
96
|
+
agent_id="$1"
|
|
97
|
+
file_path="$2"
|
|
98
|
+
operation="$3"
|
|
99
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/locks/acquire" \
|
|
100
|
+
-H "Content-Type: application/json" \
|
|
101
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"file_path\":\"$file_path\",\"agent_id\":\"$agent_id\",\"operation\":\"$operation\"}"
|
|
102
|
+
;;
|
|
103
|
+
unlock)
|
|
104
|
+
agent_id="$1"
|
|
105
|
+
file_path="$2"
|
|
106
|
+
curl -sS -X POST "$BASE_URL/api/v1/coordination/locks/release" \
|
|
107
|
+
-H "Content-Type: application/json" \
|
|
108
|
+
-d "{\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"file_path\":\"$file_path\",\"agent_id\":\"$agent_id\"}"
|
|
109
|
+
;;
|
|
110
|
+
*)
|
|
111
|
+
echo "Unknown command: $cmd"
|
|
112
|
+
exit 1
|
|
113
|
+
;;
|
|
114
|
+
esac
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
6
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
7
|
+
|
|
8
|
+
ROOT="$(vds_resolve_scripts_root)"
|
|
9
|
+
DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
|
|
10
|
+
TARGET_STATE_ARCH_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state/architecture"
|
|
11
|
+
COORD="$ROOT/scripts/target-state-automation/coordination.sh"
|
|
12
|
+
AGENT_ID="${AGENT_ID:-diagram-agent-01}"
|
|
13
|
+
|
|
14
|
+
if [[ -z "${SERVICES:-}" ]]; then
|
|
15
|
+
SERVICES=$(vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --list | sed -n 's/^ - //p')
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
for svc in $SERVICES; do
|
|
19
|
+
echo "== $svc =="
|
|
20
|
+
lock_file="$TARGET_STATE_ARCH_ROOT/$svc/${svc}-component.puml"
|
|
21
|
+
"$COORD" lock "$AGENT_ID" "$lock_file" "generate-diagrams" >/dev/null || true
|
|
22
|
+
vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --service "$svc" --use-case
|
|
23
|
+
"$COORD" unlock "$AGENT_ID" "$lock_file" >/dev/null || true
|
|
24
|
+
echo "-- done $svc --"
|
|
25
|
+
done
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# docs_root.sh — Backward-compatibility shim.
|
|
3
|
+
#
|
|
4
|
+
# Delegates to scripts/vds_sh_helpers.sh which provides the authoritative
|
|
5
|
+
# implementations. Existing callers that source this file and call
|
|
6
|
+
# resolve_repo_root() or resolve_insurance_docs_root() continue to work
|
|
7
|
+
# without modification.
|
|
8
|
+
|
|
9
|
+
set -euo pipefail
|
|
10
|
+
|
|
11
|
+
_DOCS_ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
# shellcheck source=../vds_sh_helpers.sh
|
|
13
|
+
source "$_DOCS_ROOT_DIR/../vds_sh_helpers.sh"
|
|
14
|
+
|
|
15
|
+
# resolve_repo_root — kept for backward compatibility.
|
|
16
|
+
# Returns the vds-scripts workspace root (same as vds_resolve_scripts_root).
|
|
17
|
+
resolve_repo_root() {
|
|
18
|
+
vds_resolve_scripts_root
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# resolve_insurance_docs_root is already provided by vds_sh_helpers.sh.
|
|
22
|
+
# No re-declaration needed.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Generate component + sequence + use-case diagrams for all INSURANCE services.
|
|
5
|
+
# Requires: uv, vds_cli project synced.
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
9
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
10
|
+
|
|
11
|
+
services=$(vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --list | grep "insurance-")
|
|
12
|
+
|
|
13
|
+
for svc in $services; do
|
|
14
|
+
echo "Generating diagrams for: $svc"
|
|
15
|
+
vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --service "$svc" --component --sequence --use-case
|
|
16
|
+
done
|
|
17
|
+
|
|
18
|
+
echo "Validating diagrams..."
|
|
19
|
+
vds_uv_run_package vds_cli vds-cli diagrams -- --project INSURANCE --validate-existing
|
|
20
|
+
|
|
21
|
+
echo "Done."
|
|
22
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
# shellcheck source=WHO-project/vds-scripts/scripts/vds_sh_helpers.sh
|
|
6
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
7
|
+
|
|
8
|
+
SCRIPTS_ROOT="$(vds_resolve_scripts_root)"
|
|
9
|
+
MONO_ROOT="$(dirname "$(dirname "$SCRIPTS_ROOT")")"
|
|
10
|
+
DOCS_ROOT="$(resolve_insurance_docs_root "$MONO_ROOT")"
|
|
11
|
+
DOC_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
|
|
12
|
+
COORD="$SCRIPTS_ROOT/scripts/target-state-automation/coordination.sh"
|
|
13
|
+
AGENT_ID="${AGENT_ID:-markdown-agent-01}"
|
|
14
|
+
|
|
15
|
+
lock_file="$DOC_ROOT/README.md"
|
|
16
|
+
"$COORD" lock "$AGENT_ID" "$lock_file" "markdown-check" >/dev/null || true
|
|
17
|
+
|
|
18
|
+
cd "$DOC_ROOT"
|
|
19
|
+
vds_uv_run_package markdown_orchestrator -- vds-markdown check \
|
|
20
|
+
architecture/*.md \
|
|
21
|
+
architecture/**/*.md \
|
|
22
|
+
service-specifications/**/*.md \
|
|
23
|
+
*.md
|
|
24
|
+
|
|
25
|
+
"$COORD" unlock "$AGENT_ID" "$lock_file" >/dev/null || true
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UV-PATTERN: NO-UV — Delegates entirely to coordination.sh (curl/HTTP calls).
|
|
3
|
+
# No uv invocation needed.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
8
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
9
|
+
|
|
10
|
+
ROOT="$(vds_resolve_scripts_root)"
|
|
11
|
+
COORD="$ROOT/scripts/target-state-automation/coordination.sh"
|
|
12
|
+
|
|
13
|
+
echo "== Agents =="
|
|
14
|
+
"$COORD" list-agents
|
|
15
|
+
|
|
16
|
+
echo "== Tasks =="
|
|
17
|
+
"$COORD" list-tasks
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
6
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
7
|
+
|
|
8
|
+
ROOT="$(vds_resolve_scripts_root)"
|
|
9
|
+
DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
|
|
10
|
+
TARGET_STATE_ARCH_ROOT="$DOCS_ROOT/projects/INSURANCE/analysis/target-state/architecture"
|
|
11
|
+
COORD="$ROOT/scripts/target-state-automation/coordination.sh"
|
|
12
|
+
AGENT_ID="${AGENT_ID:-schema-agent-01}"
|
|
13
|
+
|
|
14
|
+
if [[ -z "${SERVICES:-}" ]]; then
|
|
15
|
+
SERVICES=$(ls -d "$TARGET_STATE_ARCH_ROOT"/insurance-* 2>/dev/null | xargs -n1 basename)
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
for svc in $SERVICES; do
|
|
19
|
+
echo "== $svc =="
|
|
20
|
+
schema_file="$TARGET_STATE_ARCH_ROOT/$svc/${svc}-database-target-schema.md"
|
|
21
|
+
"$COORD" lock "$AGENT_ID" "$schema_file" "validate-schema" >/dev/null || true
|
|
22
|
+
vds_uv_run_package vds_cli vds-cli schema convert --service "$svc" --format plantuml --validate
|
|
23
|
+
"$COORD" unlock "$AGENT_ID" "$schema_file" >/dev/null || true
|
|
24
|
+
echo "-- done $svc --"
|
|
25
|
+
done
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Sync docs and diagrams to Confluence.
|
|
5
|
+
# Requires: uv, vds_cli project synced, proper tokens in the shared VDS env file
|
|
6
|
+
|
|
7
|
+
PAGE_ID=${1:-166465076} # override with first arg
|
|
8
|
+
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
11
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
12
|
+
|
|
13
|
+
ROOT="$(vds_resolve_scripts_root)"
|
|
14
|
+
DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
|
|
15
|
+
DOC_DIR="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
|
|
16
|
+
ARCH_DIR="$DOC_DIR/architecture"
|
|
17
|
+
|
|
18
|
+
echo "Syncing PDFs (docs) to Confluence page $PAGE_ID..."
|
|
19
|
+
vds_uv_run_package vds_cli vds-cli confluence sync pdfs \
|
|
20
|
+
"$PAGE_ID" \
|
|
21
|
+
--dir "$DOC_DIR" \
|
|
22
|
+
--server external
|
|
23
|
+
|
|
24
|
+
echo "Syncing PNG/SVG (diagrams) to Confluence page $PAGE_ID..."
|
|
25
|
+
vds_uv_run_package vds_cli vds-cli confluence sync pngs \
|
|
26
|
+
"$PAGE_ID" \
|
|
27
|
+
--dir "$ARCH_DIR" \
|
|
28
|
+
--server external
|
|
29
|
+
|
|
30
|
+
echo "Done."
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
# shellcheck source=scripts/vds_sh_helpers.sh
|
|
6
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
7
|
+
FLAGS="${UV_SYNC_FLAGS:-}"
|
|
8
|
+
|
|
9
|
+
# Sync a narrow subset of workspace packages for diagram/markdown workflows.
|
|
10
|
+
# This is a targeted helper, not the canonical full-workspace bootstrap path.
|
|
11
|
+
if [[ -n "$FLAGS" ]]; then
|
|
12
|
+
# shellcheck disable=SC2206
|
|
13
|
+
EXTRA_ARGS=( $FLAGS )
|
|
14
|
+
else
|
|
15
|
+
EXTRA_ARGS=()
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
vds_uv_sync_package vds_cli "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}"
|
|
19
|
+
vds_uv_sync_package markdown_orchestrator "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UV-PATTERN: NO-UV — Uses inline python3 for link validation; no uv invocation.
|
|
3
|
+
# Root resolution goes through docs_root.sh shim (safe marker-based).
|
|
4
|
+
# No migration needed.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Validate relative markdown links within target-state docs.
|
|
8
|
+
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
# shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
|
|
11
|
+
source "$SCRIPT_DIR/docs_root.sh"
|
|
12
|
+
|
|
13
|
+
ROOT="$(resolve_repo_root)"
|
|
14
|
+
TARGET_STATE_ROOT="$(resolve_insurance_docs_root "$ROOT")/projects/INSURANCE/analysis/target-state"
|
|
15
|
+
|
|
16
|
+
TARGET_STATE_ROOT="$TARGET_STATE_ROOT" python3 - <<'PY'
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import os
|
|
20
|
+
import re
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from urllib.parse import unquote
|
|
23
|
+
|
|
24
|
+
root = Path(os.environ["TARGET_STATE_ROOT"]).resolve()
|
|
25
|
+
md_files = sorted([p for p in root.rglob('*.md') if p.is_file()])
|
|
26
|
+
|
|
27
|
+
link_re = re.compile(r"!?\[[^\]]*\]\(([^)]+)\)")
|
|
28
|
+
|
|
29
|
+
errors: list[str] = []
|
|
30
|
+
|
|
31
|
+
for f in md_files:
|
|
32
|
+
text = f.read_text(encoding='utf-8', errors='ignore')
|
|
33
|
+
for raw in link_re.findall(text):
|
|
34
|
+
link = raw.strip()
|
|
35
|
+
if not link:
|
|
36
|
+
continue
|
|
37
|
+
# strip title part: (path "title")
|
|
38
|
+
if ' ' in link and not link.startswith('http'):
|
|
39
|
+
link = link.split(' ')[0]
|
|
40
|
+
link = unquote(link)
|
|
41
|
+
|
|
42
|
+
# Skip anchors/external links/schemes
|
|
43
|
+
if link.startswith(('#', 'http://', 'https://', 'mailto:')):
|
|
44
|
+
continue
|
|
45
|
+
if '://' in link: # includes file://
|
|
46
|
+
continue
|
|
47
|
+
if link.startswith(('ac:', 'ri:')):
|
|
48
|
+
continue
|
|
49
|
+
if '{' in link or '}' in link: # template placeholders
|
|
50
|
+
continue
|
|
51
|
+
|
|
52
|
+
# strip fragment
|
|
53
|
+
link = link.split('#', 1)[0]
|
|
54
|
+
if not link or link.startswith('data:'):
|
|
55
|
+
continue
|
|
56
|
+
if link.endswith('/'):
|
|
57
|
+
continue # directory navigation links are allowed
|
|
58
|
+
|
|
59
|
+
# Only validate links that look like local files
|
|
60
|
+
allowed_ext = {'.md', '.pdf', '.puml', '.plantuml', '.png', '.svg', '.mmd'}
|
|
61
|
+
if Path(link).suffix and Path(link).suffix.lower() not in allowed_ext:
|
|
62
|
+
continue
|
|
63
|
+
if not Path(link).suffix:
|
|
64
|
+
continue
|
|
65
|
+
|
|
66
|
+
target = (f.parent / link).resolve()
|
|
67
|
+
# Skip links that point outside target-state root
|
|
68
|
+
try:
|
|
69
|
+
target.relative_to(root.resolve())
|
|
70
|
+
except ValueError:
|
|
71
|
+
continue
|
|
72
|
+
|
|
73
|
+
if not target.exists():
|
|
74
|
+
errors.append(f"{f.relative_to(root)} -> {raw}")
|
|
75
|
+
|
|
76
|
+
if errors:
|
|
77
|
+
print('❌ Link validation failed (missing targets)')
|
|
78
|
+
for e in errors[:200]:
|
|
79
|
+
print('-', e)
|
|
80
|
+
if len(errors) > 200:
|
|
81
|
+
print(f"... and {len(errors)-200} more")
|
|
82
|
+
raise SystemExit(1)
|
|
83
|
+
|
|
84
|
+
print('✅ Link validation passed')
|
|
85
|
+
print('Files scanned:', len(md_files))
|
|
86
|
+
PY
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Validate markdown in target-state docs.
|
|
5
|
+
# Requires: uv, markdown_orchestrator project synced.
|
|
6
|
+
#
|
|
7
|
+
# UV-PATTERN EXCEPTION: This script intentionally uses `uv pip install -e .`
|
|
8
|
+
# rather than the standard helper-driven workspace pattern (for example
|
|
9
|
+
# `vds_uv_run_package markdown_orchestrator ...`). Reason: the script is a
|
|
10
|
+
# local-dev helper that installs the package
|
|
11
|
+
# in editable mode so authors can iterate on the markdown_orchestrator source
|
|
12
|
+
# without re-syncing the full workspace. This is a deliberate trade-off for
|
|
13
|
+
# development convenience, not an oversight. Do NOT migrate to the worktree
|
|
14
|
+
# wrapper pattern without first evaluating whether the editable-install
|
|
15
|
+
# semantics are still needed.
|
|
16
|
+
#
|
|
17
|
+
# See scripts/vds_sh_helpers.sh for the canonical UV invocation helpers.
|
|
18
|
+
|
|
19
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
|
|
21
|
+
source "$SCRIPT_DIR/docs_root.sh"
|
|
22
|
+
|
|
23
|
+
ROOT="$(resolve_repo_root)"
|
|
24
|
+
VDS_SCRIPTS="$ROOT/WHO-project/vds-scripts"
|
|
25
|
+
DOCS_ROOT="$(resolve_insurance_docs_root "$ROOT")"
|
|
26
|
+
TARGET_STATE="$DOCS_ROOT/projects/INSURANCE/analysis/target-state"
|
|
27
|
+
|
|
28
|
+
echo "Validating markdown in target-state..."
|
|
29
|
+
echo "========================================"
|
|
30
|
+
|
|
31
|
+
# Run markdown validation — editable install intentional (see header comment).
|
|
32
|
+
cd "$VDS_SCRIPTS/markdown_orchestrator"
|
|
33
|
+
uv pip install -e . --quiet
|
|
34
|
+
uv run -- vds-markdown check \
|
|
35
|
+
"$TARGET_STATE"/architecture/*.md \
|
|
36
|
+
"$TARGET_STATE"/architecture/**/*.md \
|
|
37
|
+
"$TARGET_STATE"/service-specifications/**/*.md \
|
|
38
|
+
"$TARGET_STATE"/*.md
|
|
39
|
+
|
|
40
|
+
VALIDATION_EXIT_CODE=$?
|
|
41
|
+
|
|
42
|
+
echo ""
|
|
43
|
+
echo "========================================"
|
|
44
|
+
echo "Markdown validation completed with exit code: $VALIDATION_EXIT_CODE"
|
|
45
|
+
|
|
46
|
+
if [ $VALIDATION_EXIT_CODE -eq 0 ]; then
|
|
47
|
+
echo "Markdown validation PASSED"
|
|
48
|
+
else
|
|
49
|
+
echo "Markdown validation FAILED with exit code: $VALIDATION_EXIT_CODE"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
echo ""
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Validate/generate PlantUML ERD diagrams for all INSURANCE services.
|
|
5
|
+
# Requires: uv, vds_cli project synced.
|
|
6
|
+
#
|
|
7
|
+
# FOLLOW-UP DRIFT NOTE:
|
|
8
|
+
# This script now routes through the canonical helper contract correctly, but
|
|
9
|
+
# the underlying schema command surface appears to have drifted: the current
|
|
10
|
+
# `vds-cli schema` / `vds-schema-convert` compatibility layer no longer accepts
|
|
11
|
+
# the historical `convert --all --format plantuml --validate-all` shape.
|
|
12
|
+
# Keep this script classified as follow-up schema-command alignment work rather
|
|
13
|
+
# than treating any remaining failure here as a helper-layer regression.
|
|
14
|
+
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
# shellcheck source=WHO-project/vds-scripts/scripts/vds_sh_helpers.sh
|
|
17
|
+
source "$SCRIPT_DIR/../vds_sh_helpers.sh"
|
|
18
|
+
|
|
19
|
+
echo "Validating PlantUML ERDs for all services..."
|
|
20
|
+
echo "ERROR: schema validation automation is currently unavailable in this worktree." >&2
|
|
21
|
+
echo "The shell helper migration is complete, but the underlying schema command surface is still a follow-up item." >&2
|
|
22
|
+
echo "Use help-first discovery to inspect the current schema compatibility layer:" >&2
|
|
23
|
+
echo " ./scripts/worktree_uv.sh run --project vds_cli vds-cli schema --help" >&2
|
|
24
|
+
echo " ./scripts/worktree_uv.sh run --project schema_converter vds-schema-convert convert --help" >&2
|
|
25
|
+
exit 2
|
|
26
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# UV-PATTERN: NO-UV — Uses inline python3 for structure validation; no uv invocation.
|
|
3
|
+
# Root resolution goes through docs_root.sh shim (safe marker-based).
|
|
4
|
+
# No migration needed.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Validate folder/file structure for target-state docs.
|
|
8
|
+
# Checks:
|
|
9
|
+
# - architecture/insurance-*/ required docs exist
|
|
10
|
+
# - service-specifications/**/ required docs exist
|
|
11
|
+
# - each architecture service has a matching service-spec folder
|
|
12
|
+
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
# shellcheck source=WHO-project/vds-scripts/scripts/target-state-automation/docs_root.sh
|
|
15
|
+
source "$SCRIPT_DIR/docs_root.sh"
|
|
16
|
+
|
|
17
|
+
ROOT="$(resolve_repo_root)"
|
|
18
|
+
TARGET_STATE_ROOT="$(resolve_insurance_docs_root "$ROOT")/projects/INSURANCE/analysis/target-state"
|
|
19
|
+
|
|
20
|
+
TARGET_STATE_ROOT="$TARGET_STATE_ROOT" python3 - <<'PY'
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import os
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
root = Path(os.environ["TARGET_STATE_ROOT"]).resolve()
|
|
27
|
+
arch = root / 'architecture'
|
|
28
|
+
spec = root / 'service-specifications'
|
|
29
|
+
|
|
30
|
+
arch_required = [
|
|
31
|
+
'architecture.md',
|
|
32
|
+
'api-contracts.md',
|
|
33
|
+
'integration-patterns.md',
|
|
34
|
+
'database-target-schema.md',
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
# service-spec required (by suffix)
|
|
38
|
+
spec_required_suffixes = [
|
|
39
|
+
'_SERVICE_SPEC.md',
|
|
40
|
+
'_API_SPEC.md',
|
|
41
|
+
'_DATA_MODEL.md',
|
|
42
|
+
'_BUSINESS_LOGIC.md',
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
errors: list[str] = []
|
|
46
|
+
|
|
47
|
+
excluded_arch_svcs = {
|
|
48
|
+
# Known non-service apps/libs (no target-state schema/spec required)
|
|
49
|
+
'insurance-common',
|
|
50
|
+
'insurance-insuremo-common',
|
|
51
|
+
'insurance-customer-webview',
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
arch_svcs = sorted(
|
|
55
|
+
[
|
|
56
|
+
p
|
|
57
|
+
for p in arch.iterdir()
|
|
58
|
+
if p.is_dir() and p.name.startswith('insurance-') and p.name not in excluded_arch_svcs
|
|
59
|
+
]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Validate architecture per service
|
|
63
|
+
for svc_dir in arch_svcs:
|
|
64
|
+
svc = svc_dir.name
|
|
65
|
+
for suf in arch_required:
|
|
66
|
+
fname = f"{svc}-{suf}"
|
|
67
|
+
if not (svc_dir / fname).exists():
|
|
68
|
+
errors.append(f"ARCH missing: {svc}/{fname}")
|
|
69
|
+
|
|
70
|
+
# Identify service-spec dirs based on *_SERVICE_SPEC.md
|
|
71
|
+
spec_service_dirs = sorted({p.parent for p in spec.rglob('*_SERVICE_SPEC.md')}, key=lambda p: str(p))
|
|
72
|
+
|
|
73
|
+
# Validate service-spec required docs
|
|
74
|
+
for d in spec_service_dirs:
|
|
75
|
+
if not (d / 'README.md').exists():
|
|
76
|
+
errors.append(f"SPEC missing: {d.relative_to(spec)}/README.md")
|
|
77
|
+
for suf in spec_required_suffixes:
|
|
78
|
+
if not any(p.name.endswith(suf) for p in d.glob('*.md')):
|
|
79
|
+
errors.append(f"SPEC missing: {d.relative_to(spec)}/*{suf}")
|
|
80
|
+
|
|
81
|
+
# Ensure each architecture service has matching spec dir (by last path segment match)
|
|
82
|
+
spec_paths = [str(p.relative_to(spec)) for p in spec_service_dirs]
|
|
83
|
+
for svc_dir in arch_svcs:
|
|
84
|
+
key = svc_dir.name.replace('insurance-', '')
|
|
85
|
+
found = any(s.endswith('/' + key) or s == key for s in spec_paths)
|
|
86
|
+
if not found:
|
|
87
|
+
errors.append(f"SPEC missing for architecture service: {svc_dir.name} (expected folder ending with '{key}')")
|
|
88
|
+
|
|
89
|
+
if errors:
|
|
90
|
+
print('❌ Structure validation failed')
|
|
91
|
+
for e in errors:
|
|
92
|
+
print('-', e)
|
|
93
|
+
raise SystemExit(1)
|
|
94
|
+
|
|
95
|
+
print('✅ Structure validation passed')
|
|
96
|
+
print(f"Architecture services: {len(arch_svcs)}")
|
|
97
|
+
print(f"Service-spec folders: {len(spec_service_dirs)}")
|
|
98
|
+
PY
|