@ngocsangairvds/vsaf 4.1.7 → 4.1.9

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.
Files changed (1063) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/skill.js +1 -1
  3. package/packages/cli/dist/commands/skill.js.map +1 -1
  4. package/skills/vds-skill/_shared/config-check.js +0 -76
  5. package/skills/vds-skill/_shared/credentials.js +0 -139
  6. package/skills/vds-skill/create-bitbucket-pr/SKILL.md +0 -57
  7. package/skills/vds-skill/create-bitbucket-pr/scripts/create-pr.js +0 -125
  8. package/skills/vds-skill/create-jira-epic/SKILL.md +0 -55
  9. package/skills/vds-skill/create-jira-epic/scripts/create-epic.js +0 -120
  10. package/skills/vds-skill/install-deps.mjs +0 -410
  11. package/skills/vds-skill/pack.yaml +0 -24
  12. package/skills/vds-skill/pull/SKILL.md +0 -38
  13. package/skills/vds-skill/pull/scripts/pull.js +0 -59
  14. package/skills/vds-skill/push-prd/SKILL.md +0 -227
  15. package/skills/vds-skill/push-srs/SKILL.md +0 -116
  16. package/skills/vds-skill/search-confluence/SKILL.md +0 -53
  17. package/skills/vds-skill/search-confluence/scripts/search.js +0 -114
  18. package/skills/vds-skill/vds-scripts/.claude/phase7-CLOSURE.md +0 -100
  19. package/skills/vds-skill/vds-scripts/.dockerignore +0 -62
  20. package/skills/vds-skill/vds-scripts/.github/ISSUE_TEMPLATE/cli-change.md +0 -92
  21. package/skills/vds-skill/vds-scripts/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -48
  22. package/skills/vds-skill/vds-scripts/.github/workflows/chaos-smoke.yml +0 -266
  23. package/skills/vds-skill/vds-scripts/.github/workflows/confluence-sync.yml +0 -44
  24. package/skills/vds-skill/vds-scripts/.github/workflows/docs-confluence-evidence.yml +0 -170
  25. package/skills/vds-skill/vds-scripts/.github/workflows/docs-quality.yml +0 -59
  26. package/skills/vds-skill/vds-scripts/.github/workflows/lint-and-test.yml +0 -90
  27. package/skills/vds-skill/vds-scripts/.github/workflows/scheduler-load-smoke.yml +0 -104
  28. package/skills/vds-skill/vds-scripts/.github/workflows/telegram-bridge-ci.yml +0 -131
  29. package/skills/vds-skill/vds-scripts/.graphifyignore +0 -29
  30. package/skills/vds-skill/vds-scripts/.importlinter +0 -86
  31. package/skills/vds-skill/vds-scripts/.mcp.json +0 -11
  32. package/skills/vds-skill/vds-scripts/.pre-commit-config.yaml +0 -62
  33. package/skills/vds-skill/vds-scripts/.ruffignore +0 -3
  34. package/skills/vds-skill/vds-scripts/.secrets.baseline +0 -133
  35. package/skills/vds-skill/vds-scripts/AGENTS.md +0 -250
  36. package/skills/vds-skill/vds-scripts/AGENTS.vi.md +0 -92
  37. package/skills/vds-skill/vds-scripts/ECOSYSTEM-CHANGELOG.md +0 -52
  38. package/skills/vds-skill/vds-scripts/ECOSYSTEM-DOCS.md +0 -602
  39. package/skills/vds-skill/vds-scripts/ECOSYSTEM_ALIGNMENT.md +0 -133
  40. package/skills/vds-skill/vds-scripts/Makefile +0 -119
  41. package/skills/vds-skill/vds-scripts/README.md +0 -103
  42. package/skills/vds-skill/vds-scripts/bitbucket_manifest_mapping.toml +0 -34
  43. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/ARCHITECTURE_ANALYSIS.md +0 -258
  44. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/BITBUCKET_API_PRACTICES.md +0 -393
  45. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/EVALUATION_REPORT.md +0 -61
  46. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/FEATURES.md +0 -908
  47. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/README.md +0 -817
  48. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/pyproject.toml +0 -49
  49. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/__init__.py +0 -50
  50. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/async_client.py +0 -641
  51. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/cli.py +0 -2271
  52. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/client.py +0 -2693
  53. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/config.py +0 -186
  54. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/errors.py +0 -34
  55. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/factory.py +0 -185
  56. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/parsers.py +0 -113
  57. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/protocols.py +0 -244
  58. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/src/vds_bitbucket_orchestrator/repo_ops.py +0 -325
  59. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/__init__.py +0 -8
  60. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/conftest.py +0 -65
  61. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_advanced_search.py +0 -155
  62. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_async_client.py +0 -505
  63. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_branch_permissions.py +0 -172
  64. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli.py +0 -113
  65. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_archive.py +0 -122
  66. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_cli_clone.py +0 -131
  67. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client.py +0 -207
  68. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_archive.py +0 -73
  69. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_branch_conditions.py +0 -101
  70. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_advanced.py +0 -180
  71. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_code_file.py +0 -33
  72. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_deployment_environments.py +0 -193
  73. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_issues.py +0 -163
  74. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pipelines_advanced.py +0 -171
  75. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_pr_blockers.py +0 -118
  76. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_client_repository_variables.py +0 -155
  77. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code.py +0 -98
  78. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_advanced.py +0 -279
  79. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_code_insights.py +0 -334
  80. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_conditions.py +0 -149
  81. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_config.py +0 -297
  82. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_deployment_env.py +0 -352
  83. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_errors.py +0 -67
  84. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_factory.py +0 -352
  85. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_fork_operations.py +0 -203
  86. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_issue_cli.py +0 -262
  87. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pipeline_advanced.py +0 -265
  88. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_pr_blocker.py +0 -206
  89. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_protocols.py +0 -336
  90. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_archive.py +0 -169
  91. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_clone.py +0 -115
  92. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_ops_parsing.py +0 -149
  93. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_settings.py +0 -336
  94. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_repo_variables.py +0 -266
  95. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_webhooks.py +0 -188
  96. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/test_workspace.py +0 -234
  97. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/__init__.py +0 -0
  98. package/skills/vds-skill/vds-scripts/bitbucket_orchestrator/tests/unit/test_parsers.py +0 -254
  99. package/skills/vds-skill/vds-scripts/brd_orchestrator/README.md +0 -29
  100. package/skills/vds-skill/vds-scripts/brd_orchestrator/pyproject.toml +0 -63
  101. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/__init__.py +0 -17
  102. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/cli.py +0 -187
  103. package/skills/vds-skill/vds-scripts/brd_orchestrator/src/vds_brd_orchestrator/validator.py +0 -121
  104. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/__init__.py +0 -0
  105. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_cli.py +0 -62
  106. package/skills/vds-skill/vds-scripts/brd_orchestrator/tests/test_validator.py +0 -33
  107. package/skills/vds-skill/vds-scripts/code/code_evidence_pack.json +0 -435
  108. package/skills/vds-skill/vds-scripts/confluence_orchestrator/Dockerfile +0 -19
  109. package/skills/vds-skill/vds-scripts/confluence_orchestrator/README.md +0 -479
  110. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_SCRIPTS.md +0 -127
  111. package/skills/vds-skill/vds-scripts/confluence_orchestrator/SYNC_STANDARDIZATION.md +0 -108
  112. package/skills/vds-skill/vds-scripts/confluence_orchestrator/pyproject.toml +0 -50
  113. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/__init__.py +0 -56
  114. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/async_client.py +0 -100
  115. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/cli.py +0 -3160
  116. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/config.py +0 -215
  117. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content.py +0 -368
  118. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/content_v2.py +0 -144
  119. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/crawl_tree.py +0 -1833
  120. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/errors.py +0 -44
  121. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/eventing.py +0 -111
  122. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/http.py +0 -1850
  123. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/orchestration.py +0 -166
  124. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/protocols.py +0 -61
  125. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/reporting.py +0 -78
  126. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree.py +0 -122
  127. package/skills/vds-skill/vds-scripts/confluence_orchestrator/src/confluence_orchestrator/tree_copier.py +0 -431
  128. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_from_markdown.py +0 -203
  129. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_pdfs_to_confluence.py +0 -299
  130. package/skills/vds-skill/vds-scripts/confluence_orchestrator/sync_png_attachments.py +0 -299
  131. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/conftest.py +0 -46
  132. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_content.py +0 -252
  133. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_advanced_search.py +0 -193
  134. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_async_client.py +0 -104
  135. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cache_management.py +0 -246
  136. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_cli.py +0 -716
  137. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_config.py +0 -130
  138. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content.py +0 -192
  139. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_flags.py +0 -27
  140. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_content_labels.py +0 -94
  141. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_crawl_tree.py +0 -2252
  142. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_degraded_write_safety.py +0 -176
  143. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_draft_management.py +0 -225
  144. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_errors.py +0 -75
  145. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing.py +0 -73
  146. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_chaos.py +0 -37
  147. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_rate_limit.py +0 -44
  148. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_eventing_timeout.py +0 -49
  149. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_export.py +0 -231
  150. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_history.py +0 -217
  151. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_http.py +0 -375
  152. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_orchestration.py +0 -93
  153. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_reporting.py +0 -24
  154. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_search_cql.py +0 -36
  155. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_management.py +0 -236
  156. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_space_permissions.py +0 -384
  157. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier.py +0 -644
  158. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_tree_copier_remap.py +0 -289
  159. package/skills/vds-skill/vds-scripts/confluence_orchestrator/tests/test_user_group_management.py +0 -387
  160. package/skills/vds-skill/vds-scripts/diagram_generator/README.md +0 -663
  161. package/skills/vds-skill/vds-scripts/diagram_generator/ci_validate.sh +0 -16
  162. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.png +0 -0
  163. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-component.puml +0 -23
  164. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.png +0 -0
  165. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-sequence.puml +0 -21
  166. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.png +0 -0
  167. package/skills/vds-skill/vds-scripts/diagram_generator/docs-nttc/projects/INSURANCE/analysis/current-state/insurance-claim-business/insurance-claim-business-usecase.puml +0 -14
  168. package/skills/vds-skill/vds-scripts/diagram_generator/examples/github-actions-validate.yml +0 -39
  169. package/skills/vds-skill/vds-scripts/diagram_generator/generate_all_diagrams.py +0 -827
  170. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_diagrams.py +0 -261
  171. package/skills/vds-skill/vds-scripts/diagram_generator/generate_insurance_c4_quick.py +0 -486
  172. package/skills/vds-skill/vds-scripts/diagram_generator/pyproject.toml +0 -28
  173. package/skills/vds-skill/vds-scripts/diagram_generator/render_png.py +0 -59
  174. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/__init__.py +0 -3
  175. package/skills/vds-skill/vds-scripts/diagram_generator/src/vds_diagram_generator/cli.py +0 -50
  176. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_hierarchical.py +0 -142
  177. package/skills/vds-skill/vds-scripts/diagram_generator/test_c4_quick.py +0 -131
  178. package/skills/vds-skill/vds-scripts/diagram_generator/tests/__init__.py +0 -0
  179. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_analyzer_completeness.py +0 -260
  180. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_c4_syntax_correctness.py +0 -138
  181. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_component_coverage.py +0 -182
  182. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_mermaid_output.py +0 -80
  183. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_png_generation.py +0 -112
  184. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_scenario_templates.py +0 -15
  185. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_sequence_accuracy.py +0 -93
  186. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_structurizr_export.py +0 -177
  187. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_style_consistency.py +0 -174
  188. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_generator.py +0 -201
  189. package/skills/vds-skill/vds-scripts/diagram_generator/tests/test_usecase_integration.py +0 -124
  190. package/skills/vds-skill/vds-scripts/docker/.dockerignore +0 -38
  191. package/skills/vds-skill/vds-scripts/docker/ADR.md +0 -392
  192. package/skills/vds-skill/vds-scripts/docker/Dockerfile +0 -68
  193. package/skills/vds-skill/vds-scripts/docker/MIGRATION.md +0 -453
  194. package/skills/vds-skill/vds-scripts/docker/README.md +0 -347
  195. package/skills/vds-skill/vds-scripts/docker/ROLLBACK.md +0 -596
  196. package/skills/vds-skill/vds-scripts/docker/compose.phase2-verification.yml +0 -31
  197. package/skills/vds-skill/vds-scripts/docker/docker-compose.cli.yml +0 -206
  198. package/skills/vds-skill/vds-scripts/docker/docker-compose.infra.yml +0 -276
  199. package/skills/vds-skill/vds-scripts/docker/docker-compose.services.yml +0 -425
  200. package/skills/vds-skill/vds-scripts/docker/infrastructure/init-schemas.sql +0 -177
  201. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/pgbouncer.ini +0 -75
  202. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt +0 -50
  203. package/skills/vds-skill/vds-scripts/docker/infrastructure/pgbouncer/userlist.txt.template +0 -36
  204. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/.gitkeep +0 -0
  205. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/PREFLIGHT.md +0 -132
  206. package/skills/vds-skill/vds-scripts/docs/.confluence-evidence/README.md +0 -84
  207. package/skills/vds-skill/vds-scripts/docs/.confluence.yaml +0 -157
  208. package/skills/vds-skill/vds-scripts/docs/.freshness.yaml +0 -54
  209. package/skills/vds-skill/vds-scripts/docs/README.md +0 -235
  210. package/skills/vds-skill/vds-scripts/docs/agents/README.md +0 -33
  211. package/skills/vds-skill/vds-scripts/docs/agents/explanation/data-flow.md +0 -132
  212. package/skills/vds-skill/vds-scripts/docs/agents/explanation/development-roadmap.md +0 -49
  213. package/skills/vds-skill/vds-scripts/docs/agents/explanation/features-overview.md +0 -62
  214. package/skills/vds-skill/vds-scripts/docs/agents/explanation/index.md +0 -36
  215. package/skills/vds-skill/vds-scripts/docs/agents/explanation/runtime-verification-and-gap-reporting.md +0 -127
  216. package/skills/vds-skill/vds-scripts/docs/agents/explanation/system-architecture.md +0 -139
  217. package/skills/vds-skill/vds-scripts/docs/agents/explanation/whats-new.md +0 -75
  218. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-introduction.md +0 -65
  219. package/skills/vds-skill/vds-scripts/docs/agents/explanation/who-ecosystem-model.md +0 -41
  220. package/skills/vds-skill/vds-scripts/docs/agents/how-to/02-using-vds-ai-memory.md +0 -98
  221. package/skills/vds-skill/vds-scripts/docs/agents/how-to/03-memory-cross-agent.md +0 -241
  222. package/skills/vds-skill/vds-scripts/docs/agents/how-to/04-using-progress-reports.md +0 -240
  223. package/skills/vds-skill/vds-scripts/docs/agents/how-to/08-semantic-search.md +0 -46
  224. package/skills/vds-skill/vds-scripts/docs/agents/how-to/apply-phase3-migration.md +0 -148
  225. package/skills/vds-skill/vds-scripts/docs/agents/how-to/choose-the-right-command-or-skill.md +0 -34
  226. package/skills/vds-skill/vds-scripts/docs/agents/how-to/contribute-new-orchestrator.md +0 -149
  227. package/skills/vds-skill/vds-scripts/docs/agents/how-to/decision-tree.md +0 -63
  228. package/skills/vds-skill/vds-scripts/docs/agents/how-to/first-audit-run.md +0 -83
  229. package/skills/vds-skill/vds-scripts/docs/agents/how-to/index.md +0 -49
  230. package/skills/vds-skill/vds-scripts/docs/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +0 -314
  231. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +0 -165
  232. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +0 -138
  233. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +0 -130
  234. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +0 -142
  235. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +0 -140
  236. package/skills/vds-skill/vds-scripts/docs/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +0 -135
  237. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-all-project-preparation.md +0 -211
  238. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-bounded-parallel-analysis.md +0 -123
  239. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase131-confluence-upload-recovery.md +0 -204
  240. package/skills/vds-skill/vds-scripts/docs/agents/how-to/phase132-department-preparation.md +0 -144
  241. package/skills/vds-skill/vds-scripts/docs/agents/how-to/run-ecosystem-daily-report.md +0 -213
  242. package/skills/vds-skill/vds-scripts/docs/agents/how-to/tips-and-tricks.md +0 -138
  243. package/skills/vds-skill/vds-scripts/docs/agents/how-to/troubleshooting-guide.md +0 -221
  244. package/skills/vds-skill/vds-scripts/docs/agents/reference/agent-operational-contract.md +0 -162
  245. package/skills/vds-skill/vds-scripts/docs/agents/reference/alignment-phase179-report.md +0 -144
  246. package/skills/vds-skill/vds-scripts/docs/agents/reference/audit-triage-playbook.md +0 -256
  247. package/skills/vds-skill/vds-scripts/docs/agents/reference/backup-restore.md +0 -132
  248. package/skills/vds-skill/vds-scripts/docs/agents/reference/bitbucket-orchestrator.md +0 -56
  249. package/skills/vds-skill/vds-scripts/docs/agents/reference/brd-orchestrator.md +0 -52
  250. package/skills/vds-skill/vds-scripts/docs/agents/reference/capability-coverage-review.md +0 -51
  251. package/skills/vds-skill/vds-scripts/docs/agents/reference/ci-workflows.md +0 -98
  252. package/skills/vds-skill/vds-scripts/docs/agents/reference/circular-dependency-orchestrator.md +0 -55
  253. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-commands.md +0 -583
  254. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-development-standards.md +0 -41
  255. package/skills/vds-skill/vds-scripts/docs/agents/reference/cli-help-matrix.md +0 -84
  256. package/skills/vds-skill/vds-scripts/docs/agents/reference/common-errors.md +0 -126
  257. package/skills/vds-skill/vds-scripts/docs/agents/reference/configuration-reference.md +0 -128
  258. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-orchestrator.md +0 -56
  259. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync-target.md +0 -111
  260. package/skills/vds-skill/vds-scripts/docs/agents/reference/confluence-sync.md +0 -46
  261. package/skills/vds-skill/vds-scripts/docs/agents/reference/db-query-orchestrator.md +0 -93
  262. package/skills/vds-skill/vds-scripts/docs/agents/reference/diagrams-orchestrator.md +0 -52
  263. package/skills/vds-skill/vds-scripts/docs/agents/reference/ecosystem-daily-report.md +0 -229
  264. package/skills/vds-skill/vds-scripts/docs/agents/reference/elastic-orchestrator.md +0 -57
  265. package/skills/vds-skill/vds-scripts/docs/agents/reference/env-git-helper.md +0 -216
  266. package/skills/vds-skill/vds-scripts/docs/agents/reference/evolution-orchestrator.md +0 -113
  267. package/skills/vds-skill/vds-scripts/docs/agents/reference/excel-orchestrator.md +0 -51
  268. package/skills/vds-skill/vds-scripts/docs/agents/reference/git-orchestrator.md +0 -62
  269. package/skills/vds-skill/vds-scripts/docs/agents/reference/google-sheets-orchestrator.md +0 -51
  270. package/skills/vds-skill/vds-scripts/docs/agents/reference/grafana-orchestrator.md +0 -52
  271. package/skills/vds-skill/vds-scripts/docs/agents/reference/hexagonal-orchestrator.md +0 -64
  272. package/skills/vds-skill/vds-scripts/docs/agents/reference/index.md +0 -36
  273. package/skills/vds-skill/vds-scripts/docs/agents/reference/infrastructure-v2.15.md +0 -67
  274. package/skills/vds-skill/vds-scripts/docs/agents/reference/intellij-orchestrator.md +0 -50
  275. package/skills/vds-skill/vds-scripts/docs/agents/reference/jira-orchestrator.md +0 -60
  276. package/skills/vds-skill/vds-scripts/docs/agents/reference/links-orchestrator.md +0 -57
  277. package/skills/vds-skill/vds-scripts/docs/agents/reference/lint-cli.md +0 -99
  278. package/skills/vds-skill/vds-scripts/docs/agents/reference/lsp-orchestrator.md +0 -51
  279. package/skills/vds-skill/vds-scripts/docs/agents/reference/markdown-orchestrator.md +0 -53
  280. package/skills/vds-skill/vds-scripts/docs/agents/reference/mcp-orchestrator.md +0 -88
  281. package/skills/vds-skill/vds-scripts/docs/agents/reference/memory-orchestrator.md +0 -53
  282. package/skills/vds-skill/vds-scripts/docs/agents/reference/metabase-orchestrator.md +0 -51
  283. package/skills/vds-skill/vds-scripts/docs/agents/reference/migration-playbook.md +0 -71
  284. package/skills/vds-skill/vds-scripts/docs/agents/reference/multi-agent-orchestrator.md +0 -52
  285. package/skills/vds-skill/vds-scripts/docs/agents/reference/openapi-orchestrator.md +0 -57
  286. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-architecture.md +0 -194
  287. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-comparison-matrix.md +0 -79
  288. package/skills/vds-skill/vds-scripts/docs/agents/reference/orchestrator-index.md +0 -73
  289. package/skills/vds-skill/vds-scripts/docs/agents/reference/pdf-orchestrator.md +0 -57
  290. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-and-config.md +0 -0
  291. package/skills/vds-skill/vds-scripts/docs/agents/reference/portable-paths-validation-matrix.md +0 -129
  292. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-orchestrator.md +0 -51
  293. package/skills/vds-skill/vds-scripts/docs/agents/reference/progress-report-cli.md +0 -215
  294. package/skills/vds-skill/vds-scripts/docs/agents/reference/public-interface-orchestrator.md +0 -73
  295. package/skills/vds-skill/vds-scripts/docs/agents/reference/research-orchestrator.md +0 -53
  296. package/skills/vds-skill/vds-scripts/docs/agents/reference/schema-orchestrator.md +0 -57
  297. package/skills/vds-skill/vds-scripts/docs/agents/reference/search-tools.md +0 -34
  298. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-commands.md +0 -256
  299. package/skills/vds-skill/vds-scripts/docs/agents/reference/skills-reference.md +0 -32
  300. package/skills/vds-skill/vds-scripts/docs/agents/reference/sonarqube-orchestrator.md +0 -62
  301. package/skills/vds-skill/vds-scripts/docs/agents/reference/spec-orchestrator.md +0 -56
  302. package/skills/vds-skill/vds-scripts/docs/agents/reference/structure-orchestrator.md +0 -69
  303. package/skills/vds-skill/vds-scripts/docs/agents/reference/system-requirements.md +0 -76
  304. package/skills/vds-skill/vds-scripts/docs/agents/reference/tasks-orchestrator.md +0 -53
  305. package/skills/vds-skill/vds-scripts/docs/agents/reference/validation-and-sync-notes.md +0 -54
  306. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-ai-memory-api.md +0 -51
  307. package/skills/vds-skill/vds-scripts/docs/agents/reference/vds-cli-reference.md +0 -34
  308. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-inventory.md +0 -96
  309. package/skills/vds-skill/vds-scripts/docs/agents/reference/who-capability-routing-matrix.md +0 -14
  310. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/feature-progression-guide.md +0 -112
  311. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/index.md +0 -36
  312. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/quick-start.md +0 -50
  313. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/who-skills-and-scripts-onboarding.md +0 -47
  314. package/skills/vds-skill/vds-scripts/docs/agents/tutorials/zero-to-productive-developer.md +0 -339
  315. package/skills/vds-skill/vds-scripts/docs/confluence/IMPLEMENTATION-SUMMARY.md +0 -78
  316. package/skills/vds-skill/vds-scripts/docs/confluence/SYNC-GUIDE.md +0 -47
  317. package/skills/vds-skill/vds-scripts/docs/deployment/offline-docker-image-load.md +0 -59
  318. package/skills/vds-skill/vds-scripts/docs/evolution-auto-run-rollout.md +0 -325
  319. package/skills/vds-skill/vds-scripts/docs/evolution-loop-deep-integration.md +0 -496
  320. package/skills/vds-skill/vds-scripts/docs/evolution-loop-integration-guide.md +0 -359
  321. package/skills/vds-skill/vds-scripts/docs/openspace-schema-snapshot.md +0 -73
  322. package/skills/vds-skill/vds-scripts/docs/operations/sla-mttr-policy.md +0 -44
  323. package/skills/vds-skill/vds-scripts/docs/p0-closure-evidence/SUMMARY.md +0 -58
  324. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/.gitkeep +0 -0
  325. package/skills/vds-skill/vds-scripts/docs/p4-closure-evidence/smoke-20260427T024137Z-b95b586b.json +0 -15
  326. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/alembic-and-runtime-advisory-locks.md +0 -45
  327. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/dbos-listen-notify.md +0 -54
  328. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgbouncer-search-path-empirical.md +0 -110
  329. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/pgvector-set-local-audit.md +0 -51
  330. package/skills/vds-skill/vds-scripts/docs/p8-preflight-evidence/topology-decision-session-mode.md +0 -57
  331. package/skills/vds-skill/vds-scripts/docs/phases/CHANGELOG.md +0 -103
  332. package/skills/vds-skill/vds-scripts/docs/phases/PHASE_125_COMPLETION_AND_MERGE.md +0 -212
  333. package/skills/vds-skill/vds-scripts/docs/phases/phase125/IMPLEMENTATION_REPORT.md +0 -227
  334. package/skills/vds-skill/vds-scripts/docs/phases/phase125/TSK-125.10-11-implementation-summary.md +0 -196
  335. package/skills/vds-skill/vds-scripts/docs/phases/phase125/profile-patch-ollama-local-anthropic.md +0 -122
  336. package/skills/vds-skill/vds-scripts/docs/phases/phase125_completion_summary.md +0 -369
  337. package/skills/vds-skill/vds-scripts/docs/phases/phase125_llm_analysis_skill.md +0 -164
  338. package/skills/vds-skill/vds-scripts/docs/phases/phase125_merge_complete.md +0 -147
  339. package/skills/vds-skill/vds-scripts/docs/phases/phase125_skill_runtime_closure_20260321.md +0 -91
  340. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/closure-handoff-summary-2026-03-23.md +0 -290
  341. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/remaining-risk-register-2026-03-25.md +0 -143
  342. package/skills/vds-skill/vds-scripts/docs/phases/phase2-portable-paths/verification-evidence-2026-03-23.md +0 -135
  343. package/skills/vds-skill/vds-scripts/docs/v0-sunset-known-issues.md +0 -88
  344. package/skills/vds-skill/vds-scripts/docs/vi/TRANSLATION-BACKLOG.md +0 -72
  345. package/skills/vds-skill/vds-scripts/docs/vi/agents/README.md +0 -41
  346. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/features-overview.md +0 -29
  347. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/index.md +0 -14
  348. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/runtime-verification-and-gap-reporting.md +0 -129
  349. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/whats-new.md +0 -37
  350. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-introduction.md +0 -21
  351. package/skills/vds-skill/vds-scripts/docs/vi/agents/explanation/who-ecosystem-model.md +0 -36
  352. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/02-using-vds-ai-memory.md +0 -100
  353. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/03-memory-cross-agent.md +0 -243
  354. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/04-using-progress-reports.md +0 -242
  355. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/08-semantic-search.md +0 -16
  356. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/choose-the-right-command-or-skill.md +0 -36
  357. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/decision-tree.md +0 -77
  358. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/first-audit-run.md +0 -85
  359. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/index.md +0 -21
  360. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/install-and-bootstrap-who-scripts-and-skills.md +0 -156
  361. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/analytics-pipeline-workflow.md +0 -174
  362. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/code-quality-gate-workflow.md +0 -147
  363. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/confluence-bitbucket-sync-workflow.md +0 -139
  364. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/document-delivery-workflow.md +0 -151
  365. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/memory-progress-workflow.md +0 -149
  366. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/orchestrator-workflows/research-spec-audit-workflow.md +0 -144
  367. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-all-project-preparation.md +0 -213
  368. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-bounded-parallel-analysis.md +0 -125
  369. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase131-confluence-upload-recovery.md +0 -206
  370. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/phase132-department-preparation.md +0 -146
  371. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/tips-and-tricks.md +0 -34
  372. package/skills/vds-skill/vds-scripts/docs/vi/agents/how-to/troubleshooting-guide.md +0 -36
  373. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/agent-operational-contract.md +0 -98
  374. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/audit-triage-playbook.md +0 -258
  375. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/bitbucket-orchestrator.md +0 -30
  376. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/brd-orchestrator.md +0 -29
  377. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/capability-coverage-review.md +0 -46
  378. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/circular-dependency-orchestrator.md +0 -29
  379. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-commands.md +0 -409
  380. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-development-standards.md +0 -19
  381. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/cli-help-matrix.md +0 -71
  382. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/common-errors.md +0 -133
  383. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/configuration-reference.md +0 -25
  384. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/confluence-orchestrator.md +0 -30
  385. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/db-query-orchestrator.md +0 -34
  386. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/diagrams-orchestrator.md +0 -31
  387. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/elastic-orchestrator.md +0 -30
  388. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/evolution-orchestrator.md +0 -31
  389. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/excel-orchestrator.md +0 -60
  390. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/git-orchestrator.md +0 -31
  391. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/google-sheets-orchestrator.md +0 -60
  392. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/grafana-orchestrator.md +0 -30
  393. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/hexagonal-orchestrator.md +0 -73
  394. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/index.md +0 -25
  395. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/intellij-orchestrator.md +0 -59
  396. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/jira-orchestrator.md +0 -32
  397. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/links-orchestrator.md +0 -66
  398. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/lsp-orchestrator.md +0 -60
  399. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/markdown-orchestrator.md +0 -62
  400. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/mcp-orchestrator.md +0 -34
  401. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/memory-orchestrator.md +0 -45
  402. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/metabase-orchestrator.md +0 -30
  403. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/multi-agent-orchestrator.md +0 -61
  404. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/openapi-orchestrator.md +0 -66
  405. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-architecture.md +0 -24
  406. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/orchestrator-index.md +0 -73
  407. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/pdf-orchestrator.md +0 -30
  408. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-and-config.md +0 -123
  409. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/portable-paths-validation-matrix.md +0 -131
  410. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-orchestrator.md +0 -43
  411. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/progress-report-cli.md +0 -217
  412. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/public-interface-orchestrator.md +0 -82
  413. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/research-orchestrator.md +0 -45
  414. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/schema-orchestrator.md +0 -66
  415. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/search-tools.md +0 -19
  416. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/skills-reference.md +0 -27
  417. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/sonarqube-orchestrator.md +0 -71
  418. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/spec-orchestrator.md +0 -56
  419. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/structure-orchestrator.md +0 -78
  420. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/system-requirements.md +0 -30
  421. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/tasks-orchestrator.md +0 -45
  422. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/validation-and-sync-notes.md +0 -26
  423. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-ai-memory-api.md +0 -53
  424. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/vds-cli-reference.md +0 -34
  425. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-inventory.md +0 -98
  426. package/skills/vds-skill/vds-scripts/docs/vi/agents/reference/who-capability-routing-matrix.md +0 -16
  427. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/feature-progression-guide.md +0 -124
  428. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/index.md +0 -13
  429. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/quick-start.md +0 -30
  430. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/who-skills-and-scripts-onboarding.md +0 -42
  431. package/skills/vds-skill/vds-scripts/docs/vi/agents/tutorials/zero-to-productive-developer.md +0 -137
  432. package/skills/vds-skill/vds-scripts/elastic_orchestrator/README.md +0 -450
  433. package/skills/vds-skill/vds-scripts/elastic_orchestrator/pyproject.toml +0 -97
  434. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/__init__.py +0 -81
  435. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/cli.py +0 -652
  436. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/client.py +0 -743
  437. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/config.py +0 -208
  438. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/errors.py +0 -34
  439. package/skills/vds-skill/vds-scripts/elastic_orchestrator/src/vds_elastic_orchestrator/py.typed +0 -0
  440. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/__init__.py +0 -0
  441. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/conftest.py +0 -227
  442. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_client.py +0 -990
  443. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_config.py +0 -268
  444. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_e2e_verification.py +0 -272
  445. package/skills/vds-skill/vds-scripts/elastic_orchestrator/tests/test_errors.py +0 -78
  446. package/skills/vds-skill/vds-scripts/excel_orchestrator/README.md +0 -288
  447. package/skills/vds-skill/vds-scripts/excel_orchestrator/RESEARCH_BASED_UPDATES_REPORT.md +0 -261
  448. package/skills/vds-skill/vds-scripts/excel_orchestrator/add_essential_missing_effort.py +0 -255
  449. package/skills/vds-skill/vds-scripts/excel_orchestrator/adjust_effort_complexity.py +0 -184
  450. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_and_task_breakdown.py +0 -632
  451. package/skills/vds-skill/vds-scripts/excel_orchestrator/brd_analysis_comprehensive.py +0 -1029
  452. package/skills/vds-skill/vds-scripts/excel_orchestrator/check_overlaps_and_brd_coverage.py +0 -570
  453. package/skills/vds-skill/vds-scripts/excel_orchestrator/clean_remarks_column.py +0 -127
  454. package/skills/vds-skill/vds-scripts/excel_orchestrator/comprehensive_brd_check.py +0 -322
  455. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_buffered_summary.py +0 -119
  456. package/skills/vds-skill/vds-scripts/excel_orchestrator/create_service_totals_sheet.py +0 -118
  457. package/skills/vds-skill/vds-scripts/excel_orchestrator/examples/basic_operations.py +0 -85
  458. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_all_tasks.py +0 -341
  459. package/skills/vds-skill/vds-scripts/excel_orchestrator/expand_tasks.py +0 -304
  460. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_brd_references.py +0 -347
  461. package/skills/vds-skill/vds-scripts/excel_orchestrator/fill_remarks_and_colors.py +0 -132
  462. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_and_cleanup.py +0 -295
  463. package/skills/vds-skill/vds-scripts/excel_orchestrator/finalize_brd_coverage.py +0 -327
  464. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_all_formulas.py +0 -99
  465. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_detail_presentation.py +0 -113
  466. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_and_effort.py +0 -116
  467. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_presentation_consistency.py +0 -231
  468. package/skills/vds-skill/vds-scripts/excel_orchestrator/fix_remarks_matching.py +0 -179
  469. package/skills/vds-skill/vds-scripts/excel_orchestrator/group_tasks_by_service_id.py +0 -210
  470. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_brd_coverage.py +0 -497
  471. package/skills/vds-skill/vds-scripts/excel_orchestrator/increase_effort_complexity.py +0 -155
  472. package/skills/vds-skill/vds-scripts/excel_orchestrator/organize_and_deduplicate.py +0 -273
  473. package/skills/vds-skill/vds-scripts/excel_orchestrator/pyproject.toml +0 -64
  474. package/skills/vds-skill/vds-scripts/excel_orchestrator/rebuild_all_formulas.py +0 -146
  475. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_base_multiplier_and_check_duplicates.py +0 -310
  476. package/skills/vds-skill/vds-scripts/excel_orchestrator/remove_duplicate_brd_tasks.py +0 -137
  477. package/skills/vds-skill/vds-scripts/excel_orchestrator/research_based_updates.py +0 -457
  478. package/skills/vds-skill/vds-scripts/excel_orchestrator/restore_e_values.py +0 -172
  479. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/__init__.py +0 -5
  480. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/cli.py +0 -746
  481. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/config.py +0 -74
  482. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/converters.py +0 -226
  483. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/errors.py +0 -88
  484. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/excel_client.py +0 -443
  485. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/formatters.py +0 -211
  486. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/logging.py +0 -57
  487. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/source_contract.py +0 -29
  488. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/target_state_status.py +0 -837
  489. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/ulnc_alignment.py +0 -1291
  490. package/skills/vds-skill/vds-scripts/excel_orchestrator/src/vds_excel_orchestrator/validators.py +0 -164
  491. package/skills/vds-skill/vds-scripts/excel_orchestrator/sync_detail_and_total_sheets.py +0 -211
  492. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/__init__.py +0 -1
  493. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/conftest.py +0 -36
  494. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_cli.py +0 -383
  495. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_excel_client.py +0 -129
  496. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_ulnc_alignment.py +0 -373
  497. package/skills/vds-skill/vds-scripts/excel_orchestrator/tests/test_validators.py +0 -64
  498. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_api_database_effort.py +0 -261
  499. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_buffers_inline.py +0 -115
  500. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_complex_services_and_add_new.py +0 -336
  501. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_responsibility_and_fix_rows.py +0 -208
  502. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_task_breakdown_vietnamese.py +0 -309
  503. package/skills/vds-skill/vds-scripts/excel_orchestrator/update_vietnamese_and_responsibility.py +0 -415
  504. package/skills/vds-skill/vds-scripts/excel_orchestrator/verify_brd_coverage_comprehensive.py +0 -401
  505. package/skills/vds-skill/vds-scripts/git_orchestrator/ENHANCEMENT_SUMMARY.md +0 -119
  506. package/skills/vds-skill/vds-scripts/git_orchestrator/README.md +0 -286
  507. package/skills/vds-skill/vds-scripts/git_orchestrator/VERIFICATION_REPORT.md +0 -152
  508. package/skills/vds-skill/vds-scripts/git_orchestrator/pyproject.toml +0 -37
  509. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__init__.py +0 -30
  510. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/__main__.py +0 -4
  511. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/branch_probe.py +0 -271
  512. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/cli.py +0 -892
  513. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/logging_config.py +0 -63
  514. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/manifest.py +0 -249
  515. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/orchestrator.py +0 -1647
  516. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/protocols.py +0 -35
  517. package/skills/vds-skill/vds-scripts/git_orchestrator/src/vds_git_orchestrator/reporting.py +0 -55
  518. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/__init__.py +0 -0
  519. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_cli_settings.py +0 -19
  520. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_integration.py +0 -79
  521. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_manifest.py +0 -79
  522. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_orchestrator.py +0 -207
  523. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_public_api.py +0 -235
  524. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/test_resilience.py +0 -343
  525. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/__init__.py +0 -0
  526. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_branch_probe.py +0 -327
  527. package/skills/vds-skill/vds-scripts/git_orchestrator/tests/unit/test_protocols.py +0 -132
  528. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/README.md +0 -241
  529. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/pyproject.toml +0 -45
  530. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/__init__.py +0 -69
  531. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/cli.py +0 -568
  532. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/client.py +0 -186
  533. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/config.py +0 -46
  534. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/src/vds_google_sheets_orchestrator/errors.py +0 -41
  535. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/__init__.py +0 -1
  536. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/conftest.py +0 -1
  537. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/__init__.py +0 -1
  538. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_cli.py +0 -212
  539. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_client.py +0 -24
  540. package/skills/vds-skill/vds-scripts/google_sheets_orchestrator/tests/unit/test_config.py +0 -16
  541. package/skills/vds-skill/vds-scripts/grafana_orchestrator/README.md +0 -572
  542. package/skills/vds-skill/vds-scripts/grafana_orchestrator/pyproject.toml +0 -102
  543. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/__init__.py +0 -78
  544. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/cli.py +0 -455
  545. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/client.py +0 -700
  546. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/config.py +0 -243
  547. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/errors.py +0 -34
  548. package/skills/vds-skill/vds-scripts/grafana_orchestrator/src/vds_grafana_orchestrator/py.typed +0 -1
  549. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/__init__.py +0 -1
  550. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/conftest.py +0 -308
  551. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_client.py +0 -458
  552. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_config.py +0 -203
  553. package/skills/vds-skill/vds-scripts/grafana_orchestrator/tests/test_errors.py +0 -78
  554. package/skills/vds-skill/vds-scripts/jira_orchestrator/README.md +0 -864
  555. package/skills/vds-skill/vds-scripts/jira_orchestrator/pyproject.toml +0 -43
  556. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/__init__.py +0 -65
  557. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/adapter.py +0 -1685
  558. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/cli.py +0 -2806
  559. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/config.py +0 -168
  560. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/errors.py +0 -34
  561. package/skills/vds-skill/vds-scripts/jira_orchestrator/src/vds_jira_orchestrator/reporting.py +0 -66
  562. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/__init__.py +0 -1
  563. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/conftest.py +0 -86
  564. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_agile_list_payloads.py +0 -54
  565. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_bulk_operations.py +0 -91
  566. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_components.py +0 -56
  567. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_createmeta.py +0 -45
  568. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_dashboard.py +0 -119
  569. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_issue_properties.py +0 -53
  570. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_permissions_compat.py +0 -41
  571. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_reindex.py +0 -42
  572. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_remote_links.py +0 -75
  573. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_transitions.py +0 -90
  574. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_user_management.py +0 -116
  575. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_version_management.py +0 -181
  576. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_adapter_watchers.py +0 -43
  577. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_advanced_search.py +0 -179
  578. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_agile.py +0 -304
  579. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_application_properties.py +0 -243
  580. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_backlog.py +0 -91
  581. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_bulk_operations.py +0 -403
  582. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_cli.py +0 -108
  583. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_components.py +0 -119
  584. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_config.py +0 -166
  585. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_dashboard.py +0 -122
  586. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_discover_fields.py +0 -207
  587. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_errors.py +0 -72
  588. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_filter_management.py +0 -411
  589. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_archiving.py +0 -179
  590. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_links.py +0 -257
  591. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_issue_properties.py +0 -189
  592. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_link_types.py +0 -407
  593. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_parse_set.py +0 -37
  594. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_permissions.py +0 -343
  595. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_reindex.py +0 -81
  596. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_remote_links.py +0 -269
  597. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_security_schemes.py +0 -202
  598. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_transitions_changelog.py +0 -109
  599. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_user_management.py +0 -246
  600. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_version_management.py +0 -503
  601. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_watchers.py +0 -116
  602. package/skills/vds-skill/vds-scripts/jira_orchestrator/tests/test_worklog.py +0 -243
  603. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/README.md +0 -864
  604. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/pyproject.toml +0 -43
  605. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/__init__.py +0 -65
  606. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/adapter.py +0 -1689
  607. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/cli.py +0 -2799
  608. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/config.py +0 -137
  609. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/errors.py +0 -34
  610. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/src/vds_jira_viettelmoney_orchestrator/reporting.py +0 -65
  611. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/__init__.py +0 -1
  612. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/conftest.py +0 -86
  613. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_agile_list_payloads.py +0 -54
  614. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_bulk_operations.py +0 -101
  615. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_components.py +0 -64
  616. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_createmeta.py +0 -45
  617. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_dashboard.py +0 -135
  618. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_issue_properties.py +0 -63
  619. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_permissions_compat.py +0 -42
  620. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_reindex.py +0 -42
  621. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_remote_links.py +0 -89
  622. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_transitions.py +0 -91
  623. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_user_management.py +0 -130
  624. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_version_management.py +0 -189
  625. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_adapter_watchers.py +0 -49
  626. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_advanced_search.py +0 -213
  627. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_agile.py +0 -334
  628. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_application_properties.py +0 -261
  629. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_backlog.py +0 -91
  630. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_bulk_operations.py +0 -443
  631. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_cli.py +0 -106
  632. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_components.py +0 -133
  633. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_config.py +0 -166
  634. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_dashboard.py +0 -130
  635. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_discover_fields.py +0 -207
  636. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_errors.py +0 -61
  637. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_filter_management.py +0 -478
  638. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_archiving.py +0 -181
  639. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_links.py +0 -257
  640. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_issue_properties.py +0 -203
  641. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_link_types.py +0 -426
  642. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_parse_set.py +0 -37
  643. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_permissions.py +0 -358
  644. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_reindex.py +0 -81
  645. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_remote_links.py +0 -292
  646. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_security_schemes.py +0 -218
  647. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_transitions_changelog.py +0 -121
  648. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_user_management.py +0 -283
  649. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_version_management.py +0 -561
  650. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_watchers.py +0 -128
  651. package/skills/vds-skill/vds-scripts/jira_viettelmoney_orchestrator/tests/test_worklog.py +0 -265
  652. package/skills/vds-skill/vds-scripts/llms.txt +0 -159
  653. package/skills/vds-skill/vds-scripts/markdown_orchestrator/README.md +0 -72
  654. package/skills/vds-skill/vds-scripts/markdown_orchestrator/pyproject.toml +0 -39
  655. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/__init__.py +0 -5
  656. package/skills/vds-skill/vds-scripts/markdown_orchestrator/src/vds_markdown_orchestrator/cli.py +0 -102
  657. package/skills/vds-skill/vds-scripts/mcp_server/Dockerfile +0 -63
  658. package/skills/vds-skill/vds-scripts/mcp_server/README.md +0 -140
  659. package/skills/vds-skill/vds-scripts/mcp_server/pyproject.toml +0 -41
  660. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/__init__.py +0 -3
  661. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/config.py +0 -36
  662. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/server.py +0 -111
  663. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/__init__.py +0 -15
  664. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/bitbucket_tools.py +0 -47
  665. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/confluence_tools.py +0 -53
  666. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/git_tools.py +0 -71
  667. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/jira_tools.py +0 -63
  668. package/skills/vds-skill/vds-scripts/mcp_server/src/vds_mcp_server/tools/vidp_tools.py +0 -64
  669. package/skills/vds-skill/vds-scripts/mcp_server/tests/__init__.py +0 -1
  670. package/skills/vds-skill/vds-scripts/mcp_server/tests/conftest.py +0 -31
  671. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/__init__.py +0 -1
  672. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_bitbucket_tools.py +0 -28
  673. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_confluence_tools.py +0 -28
  674. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_git_tools.py +0 -35
  675. package/skills/vds-skill/vds-scripts/mcp_server/tests/unit/test_jira_tools.py +0 -35
  676. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/__init__.py +0 -6
  677. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/conftest.py +0 -51
  678. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_confluence_tools.py +0 -40
  679. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_jira_tools.py +0 -39
  680. package/skills/vds-skill/vds-scripts/mcp_server/tests/verification/test_mcp_tool_registration.py +0 -50
  681. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.dockerignore +0 -93
  682. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.env.example +0 -40
  683. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.ruff_rules.py +0 -350
  684. package/skills/vds-skill/vds-scripts/pdf_orchestrator/.yamllint.yml +0 -43
  685. package/skills/vds-skill/vds-scripts/pdf_orchestrator/DEVELOPMENT_PLAN.md +0 -80
  686. package/skills/vds-skill/vds-scripts/pdf_orchestrator/Dockerfile +0 -87
  687. package/skills/vds-skill/vds-scripts/pdf_orchestrator/README.md +0 -608
  688. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.md +0 -6
  689. package/skills/vds-skill/vds-scripts/pdf_orchestrator/cli_verification_test/test.pdf +0 -0
  690. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/alertmanager.yml +0 -83
  691. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.prod.yml +0 -98
  692. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/prometheus.yml +0 -40
  693. package/skills/vds-skill/vds-scripts/pdf_orchestrator/config/redis.conf +0 -78
  694. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/COMPETITIVE_ANALYSIS_REPORT.md +0 -309
  695. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/FEATURES_GUIDE.md +0 -518
  696. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/MULTI_USER_DEPLOYMENT_GUIDE.md +0 -615
  697. package/skills/vds-skill/vds-scripts/pdf_orchestrator/docs/USER_GUIDE.md +0 -829
  698. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pyproject.toml +0 -87
  699. package/skills/vds-skill/vds-scripts/pdf_orchestrator/pytest.ini +0 -71
  700. package/skills/vds-skill/vds-scripts/pdf_orchestrator/ruff.toml +0 -6
  701. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/debug_security_report.py +0 -59
  702. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/demo_library_selector.py +0 -109
  703. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_project_stats.py +0 -52
  704. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/generate_styled_pdf.py +0 -95
  705. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/migrate_render_pdfs.py +0 -285
  706. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.bat +0 -283
  707. package/skills/vds-skill/vds-scripts/pdf_orchestrator/scripts/setup_team.sh +0 -324
  708. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/__init__.py +0 -5
  709. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/cli.py +0 -542
  710. package/skills/vds-skill/vds-scripts/pdf_orchestrator/src/vds_pdf_orchestrator/config.py +0 -33
  711. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/README.md +0 -650
  712. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/__init__.py +0 -0
  713. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/conftest.py +0 -520
  714. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/requirements.txt +0 -51
  715. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/run_tests.py +0 -659
  716. package/skills/vds-skill/vds-scripts/pdf_orchestrator/tests/test_config.py +0 -36
  717. package/skills/vds-skill/vds-scripts/platform_core/pyproject.toml +0 -49
  718. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/__init__.py +0 -16
  719. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/__init__.py +0 -18
  720. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/alembic/runtime.py +0 -139
  721. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/config.py +0 -88
  722. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/credentials.py +0 -40
  723. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/env.py +0 -24
  724. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/errors.py +0 -127
  725. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/__init__.py +0 -18
  726. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/auth.py +0 -32
  727. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/errors.py +0 -47
  728. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/pagination.py +0 -65
  729. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/retry.py +0 -62
  730. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/http/stack.py +0 -61
  731. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/logging.py +0 -132
  732. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/protocols.py +0 -77
  733. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/serialization.py +0 -80
  734. package/skills/vds-skill/vds-scripts/platform_core/src/vds_platform_core/severity.py +0 -175
  735. package/skills/vds-skill/vds-scripts/platform_core/tests/__init__.py +0 -0
  736. package/skills/vds-skill/vds-scripts/platform_core/tests/conftest.py +0 -1
  737. package/skills/vds-skill/vds-scripts/platform_core/tests/test_alembic_runtime.py +0 -300
  738. package/skills/vds-skill/vds-scripts/platform_core/tests/test_auth.py +0 -84
  739. package/skills/vds-skill/vds-scripts/platform_core/tests/test_config.py +0 -83
  740. package/skills/vds-skill/vds-scripts/platform_core/tests/test_credentials.py +0 -73
  741. package/skills/vds-skill/vds-scripts/platform_core/tests/test_env.py +0 -56
  742. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors.py +0 -201
  743. package/skills/vds-skill/vds-scripts/platform_core/tests/test_errors_http.py +0 -74
  744. package/skills/vds-skill/vds-scripts/platform_core/tests/test_http_settings.py +0 -116
  745. package/skills/vds-skill/vds-scripts/platform_core/tests/test_logging.py +0 -148
  746. package/skills/vds-skill/vds-scripts/platform_core/tests/test_pagination.py +0 -153
  747. package/skills/vds-skill/vds-scripts/platform_core/tests/test_protocols.py +0 -132
  748. package/skills/vds-skill/vds-scripts/platform_core/tests/test_retry.py +0 -151
  749. package/skills/vds-skill/vds-scripts/platform_core/tests/test_serialization.py +0 -92
  750. package/skills/vds-skill/vds-scripts/platform_core/tests/test_severity.py +0 -178
  751. package/skills/vds-skill/vds-scripts/platform_core/tests/test_stack.py +0 -130
  752. package/skills/vds-skill/vds-scripts/platform_core/uv.lock +0 -341
  753. package/skills/vds-skill/vds-scripts/pyproject.toml +0 -145
  754. package/skills/vds-skill/vds-scripts/pyrightconfig.json +0 -82
  755. package/skills/vds-skill/vds-scripts/repo-manifest.yaml +0 -380
  756. package/skills/vds-skill/vds-scripts/repo-manifest.yaml.example +0 -25
  757. package/skills/vds-skill/vds-scripts/ruff.toml +0 -100
  758. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-API.postman_collection.json +0 -706
  759. package/skills/vds-skill/vds-scripts/scripts/BRD-Validation-README.md +0 -308
  760. package/skills/vds-skill/vds-scripts/scripts/README.md +0 -271
  761. package/skills/vds-skill/vds-scripts/scripts/_validate_alias_phase2.py +0 -137
  762. package/skills/vds-skill/vds-scripts/scripts/audit-cli-patterns.sh +0 -135
  763. package/skills/vds-skill/vds-scripts/scripts/audit-dashboard.sh +0 -525
  764. package/skills/vds-skill/vds-scripts/scripts/backup.sh +0 -123
  765. package/skills/vds-skill/vds-scripts/scripts/bootstrap_uv.sh +0 -69
  766. package/skills/vds-skill/vds-scripts/scripts/brd-validation-environment.json +0 -51
  767. package/skills/vds-skill/vds-scripts/scripts/brd-validation-test-results.json +0 -13023
  768. package/skills/vds-skill/vds-scripts/scripts/brd_coverage_report.json +0 -276
  769. package/skills/vds-skill/vds-scripts/scripts/check-future-annotations.py +0 -22
  770. package/skills/vds-skill/vds-scripts/scripts/check-invalid-symlinks.py +0 -183
  771. package/skills/vds-skill/vds-scripts/scripts/check-no-debug-markers.py +0 -21
  772. package/skills/vds-skill/vds-scripts/scripts/check-no-unittest.py +0 -21
  773. package/skills/vds-skill/vds-scripts/scripts/ci/assert_no_openspace_commits.sh +0 -37
  774. package/skills/vds-skill/vds-scripts/scripts/ci/verify_branch_protection.sh +0 -64
  775. package/skills/vds-skill/vds-scripts/scripts/closure/phase1_check.sh +0 -483
  776. package/skills/vds-skill/vds-scripts/scripts/closure/phase2_check.sh +0 -500
  777. package/skills/vds-skill/vds-scripts/scripts/create_memory_session.py +0 -36
  778. package/skills/vds-skill/vds-scripts/scripts/deploy-bootstrap.sh +0 -201
  779. package/skills/vds-skill/vds-scripts/scripts/deployment/load_docker_images_offline.sh +0 -90
  780. package/skills/vds-skill/vds-scripts/scripts/dev/cli_smoke.sh +0 -259
  781. package/skills/vds-skill/vds-scripts/scripts/final_completion_report.md +0 -139
  782. package/skills/vds-skill/vds-scripts/scripts/folder_structure_report.json +0 -321
  783. package/skills/vds-skill/vds-scripts/scripts/generate_completion_report.py +0 -132
  784. package/skills/vds-skill/vds-scripts/scripts/generate_intellij_modules.py +0 -154
  785. package/skills/vds-skill/vds-scripts/scripts/init-pgbouncer-userlist.sh +0 -154
  786. package/skills/vds-skill/vds-scripts/scripts/link_integrity_report.json +0 -807
  787. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages.py +0 -252
  788. package/skills/vds-skill/vds-scripts/scripts/move_audit_artifact_pages_rest.py +0 -165
  789. package/skills/vds-skill/vds-scripts/scripts/move_wrong_dept_pages.py +0 -235
  790. package/skills/vds-skill/vds-scripts/scripts/openspace_bootstrap.sh +0 -56
  791. package/skills/vds-skill/vds-scripts/scripts/openspace_common.sh +0 -75
  792. package/skills/vds-skill/vds-scripts/scripts/openspace_doctor.sh +0 -61
  793. package/skills/vds-skill/vds-scripts/scripts/openspace_sync_shadow.sh +0 -65
  794. package/skills/vds-skill/vds-scripts/scripts/phase7-baseline.sh +0 -77
  795. package/skills/vds-skill/vds-scripts/scripts/preflight/env_check.sh +0 -102
  796. package/skills/vds-skill/vds-scripts/scripts/repair_autopay_reports.sh +0 -173
  797. package/skills/vds-skill/vds-scripts/scripts/rollback_drill.sh +0 -659
  798. package/skills/vds-skill/vds-scripts/scripts/run-audit-in-tmux.sh +0 -286
  799. package/skills/vds-skill/vds-scripts/scripts/run-department-audit.sh +0 -495
  800. package/skills/vds-skill/vds-scripts/scripts/run-project-audit.sh +0 -267
  801. package/skills/vds-skill/vds-scripts/scripts/save_intellij_memories.py +0 -112
  802. package/skills/vds-skill/vds-scripts/scripts/save_memories_to_vds_ai.py +0 -81
  803. package/skills/vds-skill/vds-scripts/scripts/save_memories_vds_style.py +0 -133
  804. package/skills/vds-skill/vds-scripts/scripts/search_intellij_memories.py +0 -48
  805. package/skills/vds-skill/vds-scripts/scripts/setup_intellij_workspace.py +0 -71
  806. package/skills/vds-skill/vds-scripts/scripts/smoke-test-deploy.sh +0 -137
  807. package/skills/vds-skill/vds-scripts/scripts/smoke_deploy_lib.py +0 -205
  808. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/README.md +0 -89
  809. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/confluence_sync_coordinator.sh +0 -27
  810. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/coordination.sh +0 -114
  811. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/diagram_coordinator.sh +0 -25
  812. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/docs_root.sh +0 -22
  813. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/generate_diagrams.sh +0 -22
  814. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/markdown_coordinator.sh +0 -25
  815. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/progress_dashboard.sh +0 -17
  816. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/schema_coordinator.sh +0 -25
  817. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/sync_confluence.sh +0 -30
  818. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/update_dependencies.sh +0 -19
  819. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_links.sh +0 -86
  820. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_markdown.sh +0 -52
  821. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_schemas.sh +0 -26
  822. package/skills/vds-skill/vds-scripts/scripts/target-state-automation/validate_structure.sh +0 -98
  823. package/skills/vds-skill/vds-scripts/scripts/tests/__init__.py +0 -1
  824. package/skills/vds-skill/vds-scripts/scripts/tests/test_dockerfile_correctness.py +0 -815
  825. package/skills/vds-skill/vds-scripts/scripts/tests/test_makefile_loadouts.py +0 -560
  826. package/skills/vds-skill/vds-scripts/scripts/tests/test_smoke_deploy.py +0 -313
  827. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_alembic.py +0 -581
  828. package/skills/vds-skill/vds-scripts/scripts/tests/test_verify_infra_topology.py +0 -254
  829. package/skills/vds-skill/vds-scripts/scripts/update_modules_xml.py +0 -194
  830. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-03-25.md +0 -128
  831. package/skills/vds-skill/vds-scripts/scripts/uv-workspace-alignment-verification-2026-04-18.md +0 -100
  832. package/skills/vds-skill/vds-scripts/scripts/validate-cli-standardization.sh +0 -188
  833. package/skills/vds-skill/vds-scripts/scripts/validate_brd_coverage.py +0 -197
  834. package/skills/vds-skill/vds-scripts/scripts/validate_folder_structure.py +0 -234
  835. package/skills/vds-skill/vds-scripts/scripts/validate_link_integrity.py +0 -274
  836. package/skills/vds-skill/vds-scripts/scripts/vami017-caller-compat-report.md +0 -62
  837. package/skills/vds-skill/vds-scripts/scripts/vami017-phase-b-scaffold-notes.md +0 -79
  838. package/skills/vds-skill/vds-scripts/scripts/vds_sh_helpers.sh +0 -180
  839. package/skills/vds-skill/vds-scripts/scripts/verification/phase2_portable_paths_ubuntu_docker.sh +0 -26
  840. package/skills/vds-skill/vds-scripts/scripts/verify-infra-topology.py +0 -868
  841. package/skills/vds-skill/vds-scripts/scripts/verify-memory-cli-e2e.sh +0 -598
  842. package/skills/vds-skill/vds-scripts/scripts/verify-worktree-features.sh +0 -306
  843. package/skills/vds-skill/vds-scripts/scripts/worktree-add.sh +0 -128
  844. package/skills/vds-skill/vds-scripts/scripts/worktree-remove.sh +0 -112
  845. package/skills/vds-skill/vds-scripts/scripts/worktree_compose.sh +0 -269
  846. package/skills/vds-skill/vds-scripts/scripts/worktree_uv.sh +0 -77
  847. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/IMPLEMENTATION_AUDIT.md +0 -376
  848. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/README.md +0 -507
  849. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/pyproject.toml +0 -106
  850. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/scripts/ensure_symlink.sh +0 -38
  851. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/__init__.py +0 -164
  852. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/batch.py +0 -212
  853. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/cli.py +0 -1407
  854. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/client.py +0 -608
  855. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/config.py +0 -260
  856. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/diff.py +0 -220
  857. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/errors.py +0 -34
  858. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/external_sca.py +0 -932
  859. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/portfolio.py +0 -225
  860. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/pr.py +0 -505
  861. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/reports.py +0 -342
  862. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/scanner.py +0 -351
  863. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/src/vds_sonarqube_orchestrator/webhooks.py +0 -269
  864. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/__init__.py +0 -0
  865. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/conftest.py +0 -134
  866. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_batch.py +0 -419
  867. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_config.py +0 -145
  868. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_errors.py +0 -78
  869. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_external_sca.py +0 -466
  870. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_pr.py +0 -471
  871. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_reports.py +0 -511
  872. package/skills/vds-skill/vds-scripts/sonarqube_orchestrator/tests/test_webhooks.py +0 -660
  873. package/skills/vds-skill/vds-scripts/uv.lock +0 -5046
  874. package/skills/vds-skill/vds-scripts/vds_agent_core/CHANGELOG.md +0 -36
  875. package/skills/vds-skill/vds-scripts/vds_agent_core/README.md +0 -453
  876. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/PHASE9A_ASSESSMENT.md +0 -50
  877. package/skills/vds-skill/vds-scripts/vds_agent_core/docs/embedding.md +0 -468
  878. package/skills/vds-skill/vds-scripts/vds_agent_core/pyproject.toml +0 -51
  879. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/__init__.py +0 -29
  880. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/__init__.py +0 -26
  881. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/hooks.py +0 -119
  882. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/loop.py +0 -864
  883. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/agents/tools.py +0 -41
  884. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/config.py +0 -252
  885. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/__init__.py +0 -55
  886. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/_cascade.py +0 -143
  887. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/budget.py +0 -353
  888. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/cache.py +0 -373
  889. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/embedding.py +0 -815
  890. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/provider.py +0 -173
  891. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/llm/schemas.py +0 -45
  892. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/__init__.py +0 -77
  893. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/decorators.py +0 -258
  894. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/jsonl_exporter.py +0 -236
  895. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/observability/tracer.py +0 -497
  896. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/profiles.py +0 -2015
  897. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/__init__.py +0 -0
  898. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/runtime/agent_id.py +0 -60
  899. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/__init__.py +0 -13
  900. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/security/credentials.py +0 -106
  901. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/__init__.py +0 -1
  902. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/executor.py +0 -238
  903. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/manager.py +0 -381
  904. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/skills/policy.py +0 -568
  905. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/__init__.py +0 -19
  906. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/langgraph_runner.py +0 -102
  907. package/skills/vds-skill/vds-scripts/vds_agent_core/src/vds_agent_core/workflows/protocols.py +0 -81
  908. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/__init__.py +0 -0
  909. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/conftest.py +0 -62
  910. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/__init__.py +0 -0
  911. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_loop_hooks_integration.py +0 -135
  912. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_audit_observability_integration.py +0 -246
  913. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/integration/test_public_api_stability.py +0 -91
  914. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/__init__.py +0 -0
  915. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/__init__.py +0 -0
  916. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_call_site_parallelism.py +0 -30
  917. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_dimension_guardrail.py +0 -25
  918. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_drop_in_provider_extensibility.py +0 -76
  919. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding.py +0 -393
  920. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_cache.py +0 -302
  921. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_extra.py +0 -696
  922. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_embedding_subclass.py +0 -49
  923. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_no_provider_leakage_in_env.py +0 -34
  924. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_provider_auto_route.py +0 -48
  925. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_runtime_log_clean.py +0 -111
  926. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/llm/test_w7_logic_fixes.py +0 -219
  927. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/__init__.py +0 -0
  928. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_embedding_block_parser.py +0 -194
  929. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_env_resolver_allowlist.py +0 -141
  930. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profile_authorization.py +0 -158
  931. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_profiles_w3_extra.py +0 -547
  932. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/profiles/test_real_audit_profile_compat.py +0 -129
  933. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/__init__.py +0 -0
  934. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_for_agent.py +0 -322
  935. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/runtime/test_w9_cascade_edges.py +0 -369
  936. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/__init__.py +0 -0
  937. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/security/test_credentials.py +0 -132
  938. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop.py +0 -663
  939. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agent_loop_coverage.py +0 -429
  940. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_agents_hooks_defaults.py +0 -22
  941. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget.py +0 -155
  942. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_coverage.py +0 -264
  943. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_budget_tracking_only.py +0 -71
  944. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache.py +0 -251
  945. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_cache_context.py +0 -62
  946. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_config.py +0 -155
  947. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner.py +0 -45
  948. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_langgraph_runner_coverage.py +0 -98
  949. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_llm_cache_deep.py +0 -113
  950. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_decorators.py +0 -697
  951. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_hooks.py +0 -217
  952. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_exporter.py +0 -542
  953. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_jsonl_wiring.py +0 -313
  954. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_observability_tracer.py +0 -896
  955. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles.py +0 -1571
  956. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_profiles_coverage.py +0 -444
  957. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_provider.py +0 -316
  958. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_schemas.py +0 -63
  959. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_executor.py +0 -297
  960. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager.py +0 -370
  961. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_manager_coverage.py +0 -364
  962. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_policy.py +0 -402
  963. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_skill_rubric.py +0 -47
  964. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_tools.py +0 -51
  965. package/skills/vds-skill/vds-scripts/vds_agent_core/tests/unit/test_workflow_protocols.py +0 -136
  966. package/skills/vds-skill/vds-scripts/vds_cli/README.md +0 -201
  967. package/skills/vds-skill/vds-scripts/vds_cli/VERIFICATION_REPORT.md +0 -41
  968. package/skills/vds-skill/vds-scripts/vds_cli/pyproject.toml +0 -50
  969. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/__init__.py +0 -3
  970. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/assets/git-credential-helper.py +0 -235
  971. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/cli.py +0 -1126
  972. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/__init__.py +0 -1
  973. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/commands/lint_cli.py +0 -389
  974. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/confluence_sync.py +0 -846
  975. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/__init__.py +0 -7
  976. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/funnel.py +0 -105
  977. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/consumption/scanner.py +0 -211
  978. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/freshness/report.py +0 -90
  979. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs/types.py +0 -27
  980. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_cmd.py +0 -672
  981. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_metrics.py +0 -75
  982. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/docs_sync.py +0 -1171
  983. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/__init__.py +0 -39
  984. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem/report.py +0 -439
  985. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/ecosystem_docs.py +0 -164
  986. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env.py +0 -111
  987. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/env_git_helper.py +0 -281
  988. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/__init__.py +0 -3
  989. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/google_sheets_orchestrator/google_sheets_orchestrator.py +0 -173
  990. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/router.py +0 -232
  991. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/skills_cmd.py +0 -274
  992. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_api.py +0 -613
  993. package/skills/vds-skill/vds-scripts/vds_cli/src/vds_cli/sync_service.py +0 -283
  994. package/skills/vds-skill/vds-scripts/vds_cli/tests/conftest.py +0 -62
  995. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_env_git_helper_lifecycle.py +0 -261
  996. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_git_credential_helper.py +0 -240
  997. package/skills/vds-skill/vds-scripts/vds_cli/tests/test_router_help_proxy.py +0 -43
  998. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli.py +0 -241
  999. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_cli_DOC004.py +0 -110
  1000. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync.py +0 -315
  1001. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_confluence_sync_wave7.py +0 -375
  1002. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_funnel.py +0 -106
  1003. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_consumption_scanner.py +0 -144
  1004. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd.py +0 -89
  1005. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_cmd_wave8.py +0 -161
  1006. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_metrics.py +0 -16
  1007. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_quality_score.py +0 -61
  1008. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_docs_sync.py +0 -417
  1009. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard.py +0 -667
  1010. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_cli_dashboard_rendering.py +0 -143
  1011. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_ecosystem_docs.py +0 -63
  1012. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_env.py +0 -85
  1013. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_freshness_report.py +0 -125
  1014. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_lint_cli.py +0 -224
  1015. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_router.py +0 -101
  1016. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_skills_cmd.py +0 -419
  1017. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_api.py +0 -357
  1018. package/skills/vds-skill/vds-scripts/vds_cli/tests/unit/test_sync_service.py +0 -170
  1019. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/conftest.py +0 -51
  1020. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_bitbucket_real.py +0 -32
  1021. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_confluence_real.py +0 -32
  1022. package/skills/vds-skill/vds-scripts/vds_cli/tests/verification/test_jira_real.py +0 -40
  1023. package/skills/vds-skill/vds-scripts/vds_cli_common/README.md +0 -190
  1024. package/skills/vds-skill/vds-scripts/vds_cli_common/pyproject.toml +0 -96
  1025. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/__init__.py +0 -36
  1026. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/app.py +0 -55
  1027. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/completers.py +0 -139
  1028. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/context.py +0 -201
  1029. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/env.py +0 -163
  1030. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/errors.py +0 -440
  1031. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/output.py +0 -284
  1032. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/paths.py +0 -78
  1033. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/testing.py +0 -211
  1034. package/skills/vds-skill/vds-scripts/vds_cli_common/src/vds_cli_common/version.py +0 -85
  1035. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/__init__.py +0 -0
  1036. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_app.py +0 -126
  1037. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_completers.py +0 -148
  1038. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_context.py +0 -192
  1039. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_env.py +0 -235
  1040. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_errors.py +0 -275
  1041. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_output.py +0 -229
  1042. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_paths.py +0 -61
  1043. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_testing.py +0 -138
  1044. package/skills/vds-skill/vds-scripts/vds_cli_common/tests/test_version.py +0 -64
  1045. package/skills/vds-skill/vds-scripts/vidp_orchestrator/README.md +0 -31
  1046. package/skills/vds-skill/vds-scripts/vidp_orchestrator/pyproject.toml +0 -50
  1047. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/__init__.py +0 -26
  1048. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/cli.py +0 -246
  1049. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/client.py +0 -104
  1050. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/config.py +0 -82
  1051. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.json +0 -3
  1052. package/skills/vds-skill/vds-scripts/vidp_orchestrator/src/vds_vidp_orchestrator/workflows.py +0 -130
  1053. package/skills/vds-skill/vds-scripts-skill/.openskills.json +0 -6
  1054. package/skills/vds-skill/vds-scripts-skill/QUALITY.md +0 -44
  1055. package/skills/vds-skill/vds-scripts-skill/SKILL.md +0 -132
  1056. package/skills/vds-skill/vds-scripts-skill/references/audit-commands.md +0 -171
  1057. package/skills/vds-skill/vds-scripts-skill/references/capability-index.md +0 -34
  1058. package/skills/vds-skill/vds-scripts-skill/references/development-commands.md +0 -12
  1059. package/skills/vds-skill/vds-scripts-skill/references/google-sheets.md +0 -71
  1060. package/skills/vds-skill/vds-scripts-skill/references/integration-commands.md +0 -17
  1061. package/skills/vds-skill/vds-scripts-skill/references/platform-bootstrap.md +0 -31
  1062. package/skills/vds-skill/vds-scripts-skill/references/specialist-routing.md +0 -14
  1063. package/skills/vds-skill/vds-scripts-skill/references/validation-commands.md +0 -15
@@ -1,1647 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import asyncio
4
- import logging
5
- import os
6
- import shutil
7
- import time
8
- from base64 import b64encode
9
- from dataclasses import dataclass
10
- from enum import StrEnum
11
- from pathlib import Path
12
-
13
- from .manifest import Manifest, ManifestFilters, Repository
14
-
15
- logger = logging.getLogger(__name__)
16
-
17
- # Canonical fallback branch order for clone/pull when the primary branch is missing.
18
- _FALLBACK_BRANCHES = ("release", "master", "main", "staging")
19
-
20
-
21
- async def _run_hook(repo: Repository, command: str) -> tuple[int, str, str]:
22
- process = await asyncio.create_subprocess_shell(
23
- command,
24
- cwd=str(repo.absolute_path),
25
- stdout=asyncio.subprocess.PIPE,
26
- stderr=asyncio.subprocess.PIPE,
27
- )
28
- stdout, stderr = await process.communicate()
29
- return process.returncode or 0, stdout.decode(), stderr.decode()
30
-
31
-
32
- class GitOperation(StrEnum):
33
- FETCH = "fetch"
34
- PULL = "pull"
35
- STATUS = "status"
36
- CLONE = "clone"
37
- BRANCH = "branch"
38
- CHECKOUT = "checkout"
39
- ADD = "add"
40
- COMMIT = "commit"
41
- PUSH = "push"
42
- LOG = "log"
43
- DIFF = "diff"
44
- STASH = "stash"
45
- TAG = "tag"
46
- REMOTE = "remote"
47
-
48
-
49
- @dataclass
50
- class RepoResult:
51
- repo: Repository
52
- success: bool
53
- updated: bool = False
54
- message: str | None = None
55
-
56
-
57
- @dataclass
58
- class RunSummary:
59
- total: int
60
- successes: int
61
- updates: int
62
- failures: int
63
- results: dict[str, RepoResult]
64
- serial_retries: int = 0
65
-
66
- @classmethod
67
- def from_results(cls, results: dict[str, RepoResult], serial_retries: int = 0) -> RunSummary:
68
- successes = sum(1 for result in results.values() if result.success)
69
- updates = sum(1 for result in results.values() if result.updated)
70
- failures = len(results) - successes
71
- return cls(
72
- total=len(results),
73
- successes=successes,
74
- updates=updates,
75
- failures=failures,
76
- results=results,
77
- serial_retries=serial_retries,
78
- )
79
-
80
- def to_dict(self) -> dict:
81
- return {
82
- "total": self.total,
83
- "successes": self.successes,
84
- "updates": self.updates,
85
- "failures": self.failures,
86
- "serial_retries": self.serial_retries,
87
- "results": {
88
- name: {
89
- "project": result.repo.project,
90
- "path": str(result.repo.absolute_path),
91
- "branch": result.repo.branch,
92
- "success": result.success,
93
- "updated": result.updated,
94
- "message": result.message,
95
- }
96
- for name, result in self.results.items()
97
- },
98
- }
99
-
100
-
101
- def _is_corruption_error(message: str) -> bool:
102
- """Check if the git error message indicates repository corruption."""
103
- lowered = message.lower()
104
- patterns = (
105
- "bad object",
106
- "invalid index-pack output",
107
- "pack has", # matches "pack has X unresolved deltas" (necessary regex context)
108
- "did not send all necessary objects",
109
- "reference is not a tree",
110
- "object file is empty",
111
- "loose object", # matches "loose object ... is corrupt" (necessary regex context)
112
- "missing necessary objects",
113
- "fatal: fetch-pack: invalid index-pack output",
114
- "could not parse commit",
115
- "index file corrupt",
116
- "broken link",
117
- "directory exists but is not a git repository",
118
- )
119
- return any(pattern in lowered for pattern in patterns)
120
-
121
-
122
- def _is_local_workspace_repo(repo: Repository) -> bool:
123
- """Return True when the repo comes from --local sync source."""
124
- if repo.project == "local":
125
- return True
126
- return "local" in repo.tags
127
-
128
-
129
- def _is_remote_ref_conflict_error(message: str) -> bool:
130
- """Detect remote-tracking ref conflicts caused by stale local refs."""
131
- lowered = message.lower()
132
- if "cannot lock ref 'refs/remotes/origin/" not in lowered:
133
- return False
134
- return "exists; cannot create" in lowered or (" is at " in lowered and " but expected " in lowered)
135
-
136
-
137
- async def _recover_repo(repo: Repository, run_id: str) -> tuple[bool, str]:
138
- """Perform destructive recovery (move to backup + re-clone)."""
139
- timestamp = int(time.time())
140
- base_backup_path = repo.absolute_path.parent / f"{repo.name}.corrupted.{timestamp}"
141
- backup_path = base_backup_path
142
- if backup_path.exists():
143
- suffix = 1
144
- while backup_path.exists():
145
- backup_path = repo.absolute_path.parent / f"{base_backup_path.name}.{suffix}"
146
- suffix += 1
147
-
148
- logger.warning(
149
- "corruption-recovery-start",
150
- extra={
151
- "repo": repo.name,
152
- "project": repo.project,
153
- "backup_path": str(backup_path),
154
- "run_id": run_id,
155
- },
156
- )
157
-
158
- try:
159
- if repo.absolute_path.exists():
160
- shutil.move(str(repo.absolute_path), str(backup_path))
161
- except Exception as e:
162
- return False, f"Could not move corrupted repo: {e}"
163
-
164
- # Auto-clone (Logic: ensure_repo checks existence, if missing it clones)
165
- return await _ensure_repo_directory(repo)
166
-
167
-
168
- def _get_git_config_value(_key: str, default: str, env_key: str | None = None) -> str:
169
- """Get git config value from environment variable or use default.
170
-
171
- Environment variables are loaded through the shared VDS env path/config layer.
172
- """
173
- if env_key:
174
- env_value = os.environ.get(env_key)
175
- if env_value:
176
- return env_value
177
- return default
178
-
179
-
180
- def _build_git_command(_repo: Repository, args: list[str]) -> list[str]:
181
- """Build git command with authentication and network configuration.
182
-
183
- All network settings are configurable via environment variables in the shared VDS env file:
184
- - VDS_GIT_HTTP_TIMEOUT: HTTP timeout in seconds (default: 300)
185
- - VDS_GIT_HTTP_POST_BUFFER: POST buffer size in bytes (default: 524288000 = 500MB)
186
- - VDS_GIT_HTTP_LOW_SPEED_LIMIT: Minimum speed in bytes/sec (default: 1000 = 1KB/s)
187
- - VDS_GIT_HTTP_LOW_SPEED_TIME: Time at low speed before abort in seconds (default: 300)
188
- """
189
- cmd = ["git"]
190
- username = os.environ.get("VDS_USERNAME")
191
- password = os.environ.get("VDS_PASSWORD")
192
- if username and password:
193
- token = b64encode(f"{username}:{password}".encode()).decode()
194
- header = f"Authorization: Basic {token}"
195
- cmd.extend(["-c", f"http.extraHeader={header}"])
196
-
197
- # Network timeout and retry settings (all configurable via environment variables)
198
- http_timeout = _get_git_config_value("http.timeout", "300", "VDS_GIT_HTTP_TIMEOUT")
199
- http_post_buffer = _get_git_config_value("http.postBuffer", "524288000", "VDS_GIT_HTTP_POST_BUFFER")
200
- http_low_speed_limit = _get_git_config_value("http.lowSpeedLimit", "1000", "VDS_GIT_HTTP_LOW_SPEED_LIMIT")
201
- http_low_speed_time = _get_git_config_value("http.lowSpeedTime", "300", "VDS_GIT_HTTP_LOW_SPEED_TIME")
202
-
203
- cmd.extend(["-c", f"http.timeout={http_timeout}"])
204
- cmd.extend(["-c", f"http.postBuffer={http_post_buffer}"])
205
- cmd.extend(["-c", f"http.lowSpeedLimit={http_low_speed_limit}"])
206
- cmd.extend(["-c", f"http.lowSpeedTime={http_low_speed_time}"])
207
- cmd.extend(args)
208
- return cmd
209
-
210
-
211
- async def _ensure_repo_directory(repo: Repository) -> tuple[bool, str]:
212
- """
213
- Ensure the repository directory exists. If it doesn't, attempt to clone it.
214
-
215
- Returns:
216
- tuple[bool, str]: (success, message)
217
- """
218
- if repo.absolute_path.exists():
219
- # Check if it's actually a git repository
220
- if (repo.absolute_path / ".git").exists():
221
- return True, "exists"
222
- # Directory exists but not a git repo - this is an error state
223
- return False, f"Directory exists but is not a git repository: {repo.absolute_path}"
224
-
225
- # Directory doesn't exist - try to clone it
226
- logger.info(
227
- "auto-clone",
228
- extra={"repo": repo.name, "project": repo.project, "path": str(repo.absolute_path)},
229
- )
230
-
231
- # Create parent directories (must exist before running git clone)
232
- try:
233
- repo.absolute_path.parent.mkdir(parents=True, exist_ok=True)
234
- # Ensure parent directory actually exists (check after creation)
235
- if not repo.absolute_path.parent.exists():
236
- return False, f"Failed to create parent directory: {repo.absolute_path.parent}"
237
- except Exception as e:
238
- return False, f"Failed to create parent directory: {e}"
239
-
240
- # Attempt to clone
241
- remote = _remote_url(repo)
242
- branch_args = ["--branch", repo.branch] if repo.branch else []
243
- command = _build_git_command(repo, ["clone", *branch_args, remote, str(repo.absolute_path)])
244
- returncode, stdout, stderr = await _run_process(command, repo.absolute_path.parent)
245
-
246
- if returncode != 0 and branch_args:
247
- # If branch-specific clone failed, try without branch (clone default branch)
248
- logger.warning(
249
- "clone-with-branch-failed",
250
- extra={
251
- "repo": repo.name,
252
- "project": repo.project,
253
- "branch": repo.branch,
254
- "stderr": stderr,
255
- },
256
- )
257
- command = _build_git_command(repo, ["clone", remote, str(repo.absolute_path)])
258
- returncode, stdout, stderr = await _run_process(command, repo.absolute_path.parent)
259
-
260
- if returncode == 0:
261
- return True, "auto-cloned"
262
- return False, f"Auto-clone failed: {stderr or stdout}"
263
-
264
-
265
- async def _run_git(repo: Repository, args: list[str]) -> tuple[int, str, str]:
266
- """
267
- Run a git command for the given repository with VDS defaults applied.
268
-
269
- This helper also contains targeted self-healing for common failure modes
270
- that are safe to fix automatically:
271
-
272
- - Missing repository directories: automatically attempts to clone the repo
273
- - Stale `.git/index.lock` files left behind by crashed git processes:
274
- we delete the lock file inside the repo and retry the command once.
275
- """
276
- # Ensure the repository directory exists (auto-clone if missing)
277
- if not repo.absolute_path.exists() or not (repo.absolute_path / ".git").exists():
278
- success, message = await _ensure_repo_directory(repo)
279
- if not success:
280
- # Return error if auto-clone failed
281
- return 1, "", message
282
-
283
- command = _build_git_command(repo, args)
284
- returncode, stdout, stderr = await _run_process(command, repo.absolute_path)
285
-
286
- # Handle stale index.lock left by a crashed git process.
287
- # Example stderr:
288
- # error: Unable to create '/path/to/repo/.git/index.lock': File exists.
289
- # Another git process seems to be running in this repository...
290
- text = (stderr or "") + (stdout or "")
291
- if returncode != 0 and ".git/index.lock" in text and "File exists" in text:
292
- lock_path = repo.absolute_path / ".git" / "index.lock"
293
- try:
294
- if lock_path.exists():
295
- logger.warning(
296
- "Removing stale index.lock",
297
- extra={
298
- "repo": repo.name,
299
- "project": repo.project,
300
- "lock_path": str(lock_path),
301
- },
302
- )
303
- lock_path.unlink()
304
- except Exception:
305
- # If we cannot safely remove the lock, surface the original error.
306
- return returncode, stdout, stderr
307
-
308
- # Retry the exact same git command once after removing the lock.
309
- return await _run_process(command, repo.absolute_path)
310
-
311
- # Handle stale/conflicting remote-tracking refs:
312
- # fatal: cannot lock ref 'refs/remotes/origin/<...>': '<...>' exists; cannot create '<...>'
313
- if returncode != 0 and args and args[0] in {"fetch", "pull"} and _is_remote_ref_conflict_error(text):
314
- logger.warning(
315
- "remote-ref-conflict-detected",
316
- extra={
317
- "repo": repo.name,
318
- "project": repo.project,
319
- "args": args,
320
- "error": text.strip(),
321
- },
322
- )
323
- prune_command = _build_git_command(repo, ["remote", "prune", "origin"])
324
- prune_rc, prune_stdout, prune_stderr = await _run_process(prune_command, repo.absolute_path)
325
- if prune_rc == 0:
326
- logger.info(
327
- "remote-ref-conflict-pruned",
328
- extra={"repo": repo.name, "project": repo.project},
329
- )
330
- return await _run_process(command, repo.absolute_path)
331
- logger.warning(
332
- "remote-ref-conflict-prune-failed",
333
- extra={
334
- "repo": repo.name,
335
- "project": repo.project,
336
- "stdout": prune_stdout.strip(),
337
- "stderr": prune_stderr.strip(),
338
- },
339
- )
340
-
341
- return returncode, stdout, stderr
342
-
343
-
344
- async def _run_process(command: list[str], cwd: os.PathLike[str]) -> tuple[int, str, str]:
345
- """
346
- Run a process with the given command and working directory.
347
-
348
- Note: The cwd directory must exist before calling this function.
349
- """
350
- cwd_path = Path(cwd)
351
- if not cwd_path.exists():
352
- return (
353
- 1,
354
- "",
355
- f"Working directory does not exist: {cwd_path}",
356
- )
357
-
358
- process = await asyncio.create_subprocess_exec(
359
- *command,
360
- cwd=str(cwd),
361
- stdout=asyncio.subprocess.PIPE,
362
- stderr=asyncio.subprocess.PIPE,
363
- )
364
- stdout, stderr = await process.communicate()
365
- return process.returncode or 0, stdout.decode(), stderr.decode()
366
-
367
-
368
- def _remote_base() -> str:
369
- """Get Bitbucket base URL from environment or use default.
370
-
371
- Default: http://bitbucket.digital.vn/
372
-
373
- Environment variable priority (FR-21.1.1):
374
- 1. VDS_BITBUCKET_URL (primary - recommended)
375
- 2. VDS_BITBUCKET_HTTP_BASE (legacy alias)
376
- 3. BITBUCKET_BASE_URL (legacy alias)
377
-
378
- Can be configured via the shared VDS env file
379
- """
380
- # Check env vars in priority order
381
- base = (
382
- os.environ.get("VDS_BITBUCKET_URL")
383
- or os.environ.get("VDS_BITBUCKET_HTTP_BASE")
384
- or os.environ.get("BITBUCKET_BASE_URL")
385
- or "http://bitbucket.digital.vn/"
386
- ).rstrip("/")
387
- # Ensure base doesn't end with /scm (we add that in _remote_url)
388
- if base.endswith("/scm"):
389
- base = base[:-4]
390
- return base
391
-
392
-
393
- def _remote_url(repo: Repository) -> str:
394
- """Construct git remote URL from base URL, project, and repo name.
395
-
396
- Format: {base}/scm/{project}/{repo}.git
397
- Example: http://bitbucket.digital.vn/scm/insurance/insurance-policy-business.git
398
- """
399
- base = _remote_base()
400
- return f"{base}/scm/{repo.project}/{repo.name}.git"
401
-
402
-
403
- async def _pull_repo(
404
- repo: Repository,
405
- dry_run: bool,
406
- run_id: str,
407
- overwrite_local_with_remote: bool = False,
408
- allow_recovery: bool = True,
409
- recovery_tracker: dict[str, bool] | None = None,
410
- ) -> RepoResult:
411
- if dry_run:
412
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
413
-
414
- logger.info("pull", extra={"repo": repo.name, "project": repo.project, "run_id": run_id})
415
-
416
- if overwrite_local_with_remote:
417
- return await _pull_repo_overwrite_local_with_remote(repo, run_id=run_id)
418
-
419
- # Fix upstream tracking if it differs from the manifest branch.
420
- # Handles repos cloned tracking `master` when the remote default changed to `release` (or vice-versa).
421
- upstream_rc, upstream_out, _ = await _run_git(repo, ["rev-parse", "--abbrev-ref", "@{upstream}"])
422
- if upstream_rc == 0:
423
- current_upstream = upstream_out.strip() # e.g. "origin/master"
424
- expected_upstream = f"origin/{repo.branch}"
425
- if current_upstream and current_upstream != expected_upstream:
426
- logger.info(
427
- "fix-upstream-tracking",
428
- extra={
429
- "repo": repo.name,
430
- "run_id": run_id,
431
- "from": current_upstream,
432
- "to": expected_upstream,
433
- },
434
- )
435
- await _run_git(repo, ["branch", f"--set-upstream-to={expected_upstream}"])
436
-
437
- returncode, stdout, stderr = await _run_git(repo, ["pull", "--ff-only"])
438
-
439
- # Success on first attempt – standard fast‑forward pull.
440
- if returncode == 0:
441
- updated = any(line for line in stdout.splitlines() if "Fast-forward" in line)
442
- return RepoResult(repo=repo, success=True, updated=updated, message=stdout.strip())
443
-
444
- message = (stderr.strip() or stdout.strip() or "").strip()
445
-
446
- # Detect branch-not-found errors that warrant a fallback attempt.
447
- msg_lower = message.lower()
448
- branch_missing = (
449
- ("no such ref was fetched" in message)
450
- or ("couldn't find remote ref" in msg_lower)
451
- or ("remote ref did not resolve" in msg_lower)
452
- )
453
-
454
- if branch_missing:
455
- # Build fallback candidates: every branch in the canonical list that
456
- # differs from the manifest branch (which already failed).
457
- fallback_candidates = [b for b in _FALLBACK_BRANCHES if b != repo.branch]
458
-
459
- for fb_branch in fallback_candidates:
460
- logger.info(
461
- "pull-fallback-trying",
462
- extra={
463
- "repo": repo.name,
464
- "project": repo.project,
465
- "run_id": run_id,
466
- "primary_branch": repo.branch,
467
- "branch": fb_branch,
468
- },
469
- )
470
- fb_code, fb_stdout, _fb_stderr = await _run_git(repo, ["pull", "--ff-only", "origin", fb_branch])
471
-
472
- if fb_code == 0:
473
- fb_updated = any(line for line in fb_stdout.splitlines() if "Fast-forward" in line)
474
- return RepoResult(
475
- repo=repo,
476
- success=True,
477
- updated=fb_updated,
478
- message=(fb_stdout.strip() or f"pulled from origin/{fb_branch}"),
479
- )
480
-
481
- # All fallback branches exhausted — report last error.
482
- return RepoResult(repo=repo, success=False, message=message)
483
-
484
- # Unhandled failure – surface the original git error.
485
- # Check for corruption and attempt recovery once
486
- allow_recovery = allow_recovery and not (recovery_tracker or {}).get("attempted", False)
487
- if allow_recovery and _is_corruption_error(message) and not _is_local_workspace_repo(repo):
488
- logger.warning(
489
- "corruption-detected",
490
- extra={"repo": repo.name, "run_id": run_id, "error": message},
491
- )
492
- if not dry_run:
493
- if recovery_tracker is not None:
494
- recovery_tracker["attempted"] = True
495
- recovered, rec_msg = await _recover_repo(repo, run_id)
496
- if recovered:
497
- # Retry pull on fresh clone (disable further recovery to prevent loop)
498
- return await _pull_repo(repo, dry_run, run_id, allow_recovery=False, recovery_tracker=recovery_tracker)
499
- else:
500
- message = f"{message} | Recovery failed: {rec_msg}"
501
-
502
- return RepoResult(repo=repo, success=False, message=message)
503
-
504
-
505
- async def _resolve_remote_branch(repo: Repository) -> tuple[str | None, str | None]:
506
- """Resolve the best available origin branch (manifest branch first, then fallbacks)."""
507
- candidates: list[str] = []
508
- if repo.branch:
509
- candidates.append(repo.branch)
510
- for fallback in _FALLBACK_BRANCHES:
511
- if fallback not in candidates:
512
- candidates.append(fallback)
513
-
514
- last_error = ""
515
- for candidate in candidates:
516
- returncode, stdout, stderr = await _run_git(
517
- repo,
518
- ["show-ref", "--verify", f"refs/remotes/origin/{candidate}"],
519
- )
520
- if returncode == 0:
521
- return candidate, None
522
- last_error = (stderr.strip() or stdout.strip() or last_error).strip()
523
-
524
- if not candidates:
525
- return None, "No candidate branches available for remote resolution."
526
- suffix = f" ({last_error})" if last_error else ""
527
- return None, f"No matching remote branch found in origin for candidates: {', '.join(candidates)}{suffix}"
528
-
529
-
530
- async def _pull_repo_overwrite_local_with_remote(repo: Repository, run_id: str) -> RepoResult:
531
- """Force local working branch to match remote branch by hard-resetting to origin/<branch>."""
532
- logger.info(
533
- "pull-overwrite-local-enabled",
534
- extra={"repo": repo.name, "project": repo.project, "run_id": run_id, "manifest_branch": repo.branch},
535
- )
536
-
537
- fetch_rc, fetch_stdout, fetch_stderr = await _run_git(repo, ["fetch", "--all", "--prune"])
538
- if fetch_rc != 0:
539
- fetch_message = (fetch_stderr.strip() or fetch_stdout.strip() or "git fetch failed").strip()
540
- return RepoResult(repo=repo, success=False, message=fetch_message)
541
-
542
- target_branch, branch_error = await _resolve_remote_branch(repo)
543
- if not target_branch:
544
- return RepoResult(repo=repo, success=False, message=branch_error or "Unable to resolve origin branch.")
545
-
546
- before_sha = ""
547
- before_rc, before_stdout, _ = await _run_git(repo, ["rev-parse", "HEAD"])
548
- if before_rc == 0:
549
- before_sha = before_stdout.strip()
550
-
551
- checkout_rc, checkout_stdout, checkout_stderr = await _run_git(
552
- repo,
553
- ["checkout", "-B", target_branch, f"origin/{target_branch}"],
554
- )
555
- if checkout_rc != 0:
556
- checkout_message = (checkout_stderr.strip() or checkout_stdout.strip() or "git checkout failed").strip()
557
- return RepoResult(repo=repo, success=False, message=checkout_message)
558
-
559
- reset_rc, reset_stdout, reset_stderr = await _run_git(repo, ["reset", "--hard", f"origin/{target_branch}"])
560
- if reset_rc != 0:
561
- reset_message = (reset_stderr.strip() or reset_stdout.strip() or "git reset --hard failed").strip()
562
- return RepoResult(repo=repo, success=False, message=reset_message)
563
-
564
- after_sha = ""
565
- after_rc, after_stdout, _ = await _run_git(repo, ["rev-parse", "HEAD"])
566
- if after_rc == 0:
567
- after_sha = after_stdout.strip()
568
-
569
- updated = bool(before_sha and after_sha and before_sha != after_sha)
570
- message_parts = [f"synced local branch to origin/{target_branch} (overwrite-local enabled)"]
571
- if repo.branch != target_branch:
572
- message_parts.append(f"manifest branch '{repo.branch}' not found on origin; used '{target_branch}'")
573
- reset_message = reset_stdout.strip()
574
- if reset_message:
575
- message_parts.append(reset_message)
576
- return RepoResult(repo=repo, success=True, updated=updated, message=" | ".join(message_parts))
577
-
578
-
579
- async def _fetch_repo(
580
- repo: Repository,
581
- dry_run: bool,
582
- run_id: str,
583
- allow_recovery: bool = True,
584
- recovery_tracker: dict[str, bool] | None = None,
585
- ) -> RepoResult:
586
- if dry_run:
587
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
588
-
589
- logger.info("fetch", extra={"repo": repo.name, "project": repo.project, "run_id": run_id})
590
- returncode, stdout, stderr = await _run_git(repo, ["fetch", "--all", "--prune"])
591
-
592
- if returncode == 0:
593
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
594
-
595
- message = (stderr.strip() or stdout.strip() or "").strip()
596
-
597
- allow_recovery = allow_recovery and not (recovery_tracker or {}).get("attempted", False)
598
- if allow_recovery and _is_corruption_error(message) and not _is_local_workspace_repo(repo):
599
- logger.warning(
600
- "corruption-detected",
601
- extra={"repo": repo.name, "run_id": run_id, "error": message},
602
- )
603
- if not dry_run:
604
- if recovery_tracker is not None:
605
- recovery_tracker["attempted"] = True
606
- recovered, rec_msg = await _recover_repo(repo, run_id)
607
- if recovered:
608
- # Retry fetch on fresh clone
609
- return await _fetch_repo(repo, dry_run, run_id, allow_recovery=False, recovery_tracker=recovery_tracker)
610
- else:
611
- message = f"{message} | Recovery failed: {rec_msg}"
612
-
613
- return RepoResult(repo=repo, success=False, message=message)
614
-
615
-
616
- async def _status_repo(repo: Repository, _run_id: str) -> RepoResult:
617
- returncode, stdout, stderr = await _run_git(repo, ["status", "--short"])
618
- if returncode == 0:
619
- message = stdout.strip() or "clean"
620
- updated = bool(stdout.strip())
621
- return RepoResult(repo=repo, success=True, updated=updated, message=message)
622
-
623
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
624
-
625
-
626
- async def _clone_repo(repo: Repository, dry_run: bool, run_id: str) -> RepoResult:
627
- if dry_run:
628
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
629
-
630
- if repo.absolute_path.exists():
631
- return RepoResult(repo=repo, success=True, updated=False, message="exists")
632
-
633
- repo.absolute_path.parent.mkdir(parents=True, exist_ok=True)
634
-
635
- logger.info("clone", extra={"repo": repo.name, "project": repo.project, "run_id": run_id})
636
-
637
- remote = _remote_url(repo)
638
-
639
- # Build ordered list: primary branch first, then fallback candidates (skipping duplicates).
640
- branches_to_try: list[str] = []
641
- if repo.branch:
642
- branches_to_try.append(repo.branch)
643
- for fb in _FALLBACK_BRANCHES:
644
- if fb not in branches_to_try:
645
- branches_to_try.append(fb)
646
-
647
- last_error = ""
648
- for branch in branches_to_try:
649
- # Clean up any partial clone left by a previous attempt
650
- if repo.absolute_path.exists():
651
- shutil.rmtree(repo.absolute_path, ignore_errors=True)
652
-
653
- if branch != branches_to_try[0]:
654
- logger.info(
655
- "clone-fallback-trying",
656
- extra={
657
- "repo": repo.name,
658
- "project": repo.project,
659
- "run_id": run_id,
660
- "branch": branch,
661
- "primary_branch": branches_to_try[0],
662
- },
663
- )
664
-
665
- command = _build_git_command(repo, ["clone", "--branch", branch, remote, str(repo.absolute_path)])
666
- returncode, stdout, stderr = await _run_process(command, repo.absolute_path.parent)
667
-
668
- if returncode == 0:
669
- msg = f"cloned (branch={branch})" if branch != branches_to_try[0] else "cloned"
670
- return RepoResult(repo=repo, success=True, updated=True, message=msg)
671
-
672
- last_error = (stderr.strip() or stdout.strip() or "").strip()
673
-
674
- # All named branches exhausted — last resort: clone without --branch (remote HEAD).
675
- if repo.absolute_path.exists():
676
- shutil.rmtree(repo.absolute_path, ignore_errors=True)
677
-
678
- logger.info(
679
- "clone-fallback-default-branch",
680
- extra={"repo": repo.name, "project": repo.project, "run_id": run_id},
681
- )
682
- command = _build_git_command(repo, ["clone", remote, str(repo.absolute_path)])
683
- returncode, stdout, stderr = await _run_process(command, repo.absolute_path.parent)
684
-
685
- if returncode == 0:
686
- return RepoResult(repo=repo, success=True, updated=True, message="cloned (default branch)")
687
-
688
- return RepoResult(repo=repo, success=False, message=last_error or stderr.strip() or stdout.strip())
689
-
690
-
691
- async def _branch_repo(
692
- repo: Repository,
693
- action: str,
694
- branch_name: str | None,
695
- dry_run: bool,
696
- run_id: str,
697
- ) -> RepoResult:
698
- if dry_run:
699
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
700
-
701
- logger.info(
702
- "branch",
703
- extra={
704
- "repo": repo.name,
705
- "project": repo.project,
706
- "action": action,
707
- "run_id": run_id,
708
- },
709
- )
710
-
711
- if action == "list":
712
- returncode, stdout, stderr = await _run_git(repo, ["branch", "-a"])
713
- elif action == "create" and branch_name:
714
- returncode, stdout, stderr = await _run_git(repo, ["branch", branch_name])
715
- elif action == "delete" and branch_name:
716
- returncode, stdout, stderr = await _run_git(repo, ["branch", "-d", branch_name])
717
- else:
718
- return RepoResult(repo=repo, success=False, message=f"Invalid branch action: {action}")
719
-
720
- if returncode == 0:
721
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
722
-
723
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
724
-
725
-
726
- async def _checkout_repo(
727
- repo: Repository,
728
- branch_or_path: str,
729
- create: bool,
730
- dry_run: bool,
731
- run_id: str,
732
- ) -> RepoResult:
733
- if dry_run:
734
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
735
-
736
- logger.info(
737
- "checkout",
738
- extra={
739
- "repo": repo.name,
740
- "project": repo.project,
741
- "target": branch_or_path,
742
- "run_id": run_id,
743
- },
744
- )
745
-
746
- args = ["checkout"]
747
- if create:
748
- args.append("-b")
749
- args.append(branch_or_path)
750
-
751
- returncode, stdout, stderr = await _run_git(repo, args)
752
-
753
- if returncode == 0:
754
- return RepoResult(repo=repo, success=True, updated=True, message=stdout.strip())
755
-
756
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
757
-
758
-
759
- async def _add_repo(
760
- repo: Repository,
761
- paths: list[str],
762
- all_files: bool,
763
- dry_run: bool,
764
- run_id: str,
765
- ) -> RepoResult:
766
- if dry_run:
767
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
768
-
769
- logger.info(
770
- "add",
771
- extra={"repo": repo.name, "project": repo.project, "run_id": run_id},
772
- )
773
-
774
- args = ["add"]
775
- if all_files:
776
- args.append(".")
777
- else:
778
- args.extend(paths)
779
-
780
- returncode, stdout, stderr = await _run_git(repo, args)
781
-
782
- if returncode == 0:
783
- return RepoResult(repo=repo, success=True, updated=True, message=stdout.strip())
784
-
785
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
786
-
787
-
788
- async def _commit_repo(
789
- repo: Repository,
790
- message: str,
791
- dry_run: bool,
792
- run_id: str,
793
- ) -> RepoResult:
794
- if dry_run:
795
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
796
-
797
- logger.info(
798
- "commit",
799
- extra={"repo": repo.name, "project": repo.project, "run_id": run_id},
800
- )
801
-
802
- returncode, stdout, stderr = await _run_git(repo, ["commit", "-m", message])
803
-
804
- if returncode == 0:
805
- return RepoResult(repo=repo, success=True, updated=True, message=stdout.strip())
806
-
807
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
808
-
809
-
810
- async def _push_repo(
811
- repo: Repository,
812
- branch: str | None,
813
- remote: str | None,
814
- dry_run: bool,
815
- run_id: str,
816
- ) -> RepoResult:
817
- if dry_run:
818
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
819
-
820
- logger.info(
821
- "push",
822
- extra={
823
- "repo": repo.name,
824
- "project": repo.project,
825
- "branch": branch,
826
- "run_id": run_id,
827
- },
828
- )
829
-
830
- args = ["push"]
831
- if remote:
832
- args.append(remote)
833
- if branch:
834
- args.append(branch)
835
-
836
- returncode, stdout, stderr = await _run_git(repo, args)
837
-
838
- if returncode == 0:
839
- return RepoResult(repo=repo, success=True, updated=True, message=stdout.strip())
840
-
841
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
842
-
843
-
844
- async def _log_repo(
845
- repo: Repository,
846
- limit: int | None,
847
- oneline: bool,
848
- run_id: str,
849
- ) -> RepoResult:
850
- logger.info("log", extra={"repo": repo.name, "project": repo.project, "run_id": run_id})
851
-
852
- args = ["log"]
853
- if oneline:
854
- args.append("--oneline")
855
- if limit:
856
- args.extend(["-n", str(limit)])
857
-
858
- returncode, stdout, stderr = await _run_git(repo, args)
859
-
860
- if returncode == 0:
861
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
862
-
863
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
864
-
865
-
866
- async def _diff_repo(
867
- repo: Repository,
868
- paths: list[str],
869
- staged: bool,
870
- run_id: str,
871
- ) -> RepoResult:
872
- logger.info("diff", extra={"repo": repo.name, "project": repo.project, "run_id": run_id})
873
-
874
- args = ["diff"]
875
- if staged:
876
- args.append("--staged")
877
- args.extend(paths)
878
-
879
- returncode, stdout, stderr = await _run_git(repo, args)
880
-
881
- if returncode == 0:
882
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
883
-
884
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
885
-
886
-
887
- async def _stash_repo(
888
- repo: Repository,
889
- action: str,
890
- message: str | None,
891
- dry_run: bool,
892
- run_id: str,
893
- ) -> RepoResult:
894
- if dry_run:
895
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
896
-
897
- logger.info(
898
- "stash",
899
- extra={
900
- "repo": repo.name,
901
- "project": repo.project,
902
- "action": action,
903
- "run_id": run_id,
904
- },
905
- )
906
-
907
- args = ["stash"]
908
- if action == "list":
909
- args.append("list")
910
- elif action == "save" and message:
911
- args.extend(["save", message])
912
- elif action == "pop":
913
- args.append("pop")
914
- elif action == "apply":
915
- args.append("apply")
916
- elif action == "drop":
917
- args.append("drop")
918
- else:
919
- return RepoResult(repo=repo, success=False, message=f"Invalid stash action: {action}")
920
-
921
- returncode, stdout, stderr = await _run_git(repo, args)
922
-
923
- if returncode == 0:
924
- updated = action in ("pop", "apply", "drop")
925
- return RepoResult(repo=repo, success=True, updated=updated, message=stdout.strip())
926
-
927
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
928
-
929
-
930
- async def _tag_repo(
931
- repo: Repository,
932
- action: str,
933
- tag_name: str | None,
934
- message: str | None,
935
- dry_run: bool,
936
- run_id: str,
937
- ) -> RepoResult:
938
- if dry_run:
939
- return RepoResult(repo=repo, success=True, updated=False, message="dry-run")
940
-
941
- logger.info(
942
- "tag",
943
- extra={
944
- "repo": repo.name,
945
- "project": repo.project,
946
- "action": action,
947
- "run_id": run_id,
948
- },
949
- )
950
-
951
- if action == "list":
952
- returncode, stdout, stderr = await _run_git(repo, ["tag", "-l"])
953
- elif action == "create" and tag_name:
954
- args = ["tag"]
955
- if message:
956
- args.extend(["-a", tag_name, "-m", message])
957
- else:
958
- args.append(tag_name)
959
- returncode, stdout, stderr = await _run_git(repo, args)
960
- elif action == "delete" and tag_name:
961
- returncode, stdout, stderr = await _run_git(repo, ["tag", "-d", tag_name])
962
- else:
963
- return RepoResult(repo=repo, success=False, message=f"Invalid tag action: {action}")
964
-
965
- if returncode == 0:
966
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
967
-
968
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
969
-
970
-
971
- async def _remote_repo(
972
- repo: Repository,
973
- action: str,
974
- name: str | None,
975
- url: str | None,
976
- run_id: str,
977
- ) -> RepoResult:
978
- logger.info(
979
- "remote",
980
- extra={
981
- "repo": repo.name,
982
- "project": repo.project,
983
- "action": action,
984
- "run_id": run_id,
985
- },
986
- )
987
-
988
- if action == "list":
989
- returncode, stdout, stderr = await _run_git(repo, ["remote", "-v"])
990
- elif action == "add" and name and url:
991
- returncode, stdout, stderr = await _run_git(repo, ["remote", "add", name, url])
992
- elif action == "remove" and name:
993
- returncode, stdout, stderr = await _run_git(repo, ["remote", "remove", name])
994
- else:
995
- return RepoResult(repo=repo, success=False, message=f"Invalid remote action: {action}")
996
-
997
- if returncode == 0:
998
- return RepoResult(repo=repo, success=True, updated=False, message=stdout.strip())
999
-
1000
- return RepoResult(repo=repo, success=False, message=stderr.strip() or stdout.strip())
1001
-
1002
-
1003
- async def _operate_repo(
1004
- repo: Repository,
1005
- operation: GitOperation,
1006
- dry_run: bool,
1007
- run_id: str,
1008
- **kwargs,
1009
- ) -> RepoResult:
1010
- if operation == GitOperation.PULL:
1011
- return await _pull_repo(
1012
- repo,
1013
- dry_run=dry_run,
1014
- run_id=run_id,
1015
- overwrite_local_with_remote=bool(kwargs.get("overwrite_local_with_remote", False)),
1016
- recovery_tracker=kwargs.get("recovery_tracker"),
1017
- )
1018
- if operation == GitOperation.FETCH:
1019
- return await _fetch_repo(
1020
- repo,
1021
- dry_run=dry_run,
1022
- run_id=run_id,
1023
- recovery_tracker=kwargs.get("recovery_tracker"),
1024
- )
1025
- if operation == GitOperation.STATUS:
1026
- return await _status_repo(repo, run_id=run_id)
1027
- if operation == GitOperation.CLONE:
1028
- return await _clone_repo(repo, dry_run=dry_run, run_id=run_id)
1029
- if operation == GitOperation.BRANCH:
1030
- return await _branch_repo(
1031
- repo,
1032
- kwargs.get("action", "list"),
1033
- kwargs.get("branch_name"),
1034
- dry_run=dry_run,
1035
- run_id=run_id,
1036
- )
1037
- if operation == GitOperation.CHECKOUT:
1038
- return await _checkout_repo(
1039
- repo,
1040
- kwargs.get("branch_or_path", "main"),
1041
- kwargs.get("create", False),
1042
- dry_run=dry_run,
1043
- run_id=run_id,
1044
- )
1045
- if operation == GitOperation.ADD:
1046
- return await _add_repo(
1047
- repo,
1048
- kwargs.get("paths", []),
1049
- kwargs.get("all_files", False),
1050
- dry_run=dry_run,
1051
- run_id=run_id,
1052
- )
1053
- if operation == GitOperation.COMMIT:
1054
- return await _commit_repo(
1055
- repo,
1056
- kwargs.get("message", ""),
1057
- dry_run=dry_run,
1058
- run_id=run_id,
1059
- )
1060
- if operation == GitOperation.PUSH:
1061
- return await _push_repo(
1062
- repo,
1063
- kwargs.get("branch"),
1064
- kwargs.get("remote"),
1065
- dry_run=dry_run,
1066
- run_id=run_id,
1067
- )
1068
- if operation == GitOperation.LOG:
1069
- return await _log_repo(
1070
- repo,
1071
- kwargs.get("limit"),
1072
- kwargs.get("oneline", False),
1073
- run_id=run_id,
1074
- )
1075
- if operation == GitOperation.DIFF:
1076
- return await _diff_repo(
1077
- repo,
1078
- kwargs.get("paths", []),
1079
- kwargs.get("staged", False),
1080
- run_id=run_id,
1081
- )
1082
- if operation == GitOperation.STASH:
1083
- return await _stash_repo(
1084
- repo,
1085
- kwargs.get("action", "list"),
1086
- kwargs.get("message"),
1087
- dry_run=dry_run,
1088
- run_id=run_id,
1089
- )
1090
- if operation == GitOperation.TAG:
1091
- return await _tag_repo(
1092
- repo,
1093
- kwargs.get("action", "list"),
1094
- kwargs.get("tag_name"),
1095
- kwargs.get("message"),
1096
- dry_run=dry_run,
1097
- run_id=run_id,
1098
- )
1099
- if operation == GitOperation.REMOTE:
1100
- return await _remote_repo(
1101
- repo,
1102
- kwargs.get("action", "list"),
1103
- kwargs.get("name"),
1104
- kwargs.get("url"),
1105
- run_id=run_id,
1106
- )
1107
- raise ValueError(f"Unsupported operation: {operation}")
1108
-
1109
-
1110
- async def _find_repo_by_remote_url(repo: Repository, search_root: Path) -> Path | None:
1111
- """Find if a repository exists at a different path by checking remote URLs.
1112
-
1113
- This handles cases where repos were renamed or moved to different folders.
1114
- Returns the path if found, None otherwise.
1115
- """
1116
- remote_url = _remote_url(repo)
1117
-
1118
- # Search in common project directories
1119
- project_dirs = [
1120
- search_root / f"{repo.project.upper()}-project",
1121
- search_root / repo.project.upper(),
1122
- search_root / repo.project,
1123
- ]
1124
-
1125
- for project_dir in project_dirs:
1126
- if not project_dir.exists():
1127
- continue
1128
-
1129
- # Search recursively for .git directories
1130
- for git_dir in project_dir.rglob(".git"):
1131
- if not git_dir.is_dir():
1132
- continue
1133
-
1134
- repo_path = git_dir.parent
1135
- # Check if this is a git repo and has the same remote URL
1136
- try:
1137
- # Use basic git command (no need for full _build_git_command here)
1138
- command = ["git", "remote", "get-url", "origin"]
1139
- returncode, stdout, _ = await _run_process(command, repo_path)
1140
- if returncode == 0 and remote_url.strip() in stdout.strip():
1141
- return repo_path
1142
- except Exception:
1143
- continue
1144
-
1145
- return None
1146
-
1147
-
1148
- async def _ensure_all_repos_cloned(
1149
- repositories: list[Repository],
1150
- concurrency: int,
1151
- dry_run: bool,
1152
- run_id: str,
1153
- ) -> dict[str, RepoResult]:
1154
- """
1155
- Ensure all repositories from the manifest are cloned locally.
1156
-
1157
- This runs before git operations to ensure local directories match remote repo list.
1158
- Handles:
1159
- - New repositories (clone if missing)
1160
- - Renamed/moved repositories (detect by remote URL, clone at new path)
1161
- - Ensures local folders match remote project structure
1162
- """
1163
- if dry_run:
1164
- return {}
1165
-
1166
- results: dict[str, RepoResult] = {}
1167
- semaphore = asyncio.Semaphore(concurrency)
1168
-
1169
- # Determine search root (VDS root directory where project folders are)
1170
- # Use the first repo's path to infer the VDS root
1171
- search_root = Path("/")
1172
- if repositories:
1173
- first_repo = repositories[0]
1174
- repo_path = first_repo.absolute_path
1175
- # Walk up from repo path to find VDS root (contains project directories)
1176
- current = repo_path
1177
- for _ in range(10): # Limit depth to avoid infinite loops
1178
- if current.exists():
1179
- # Check if this looks like VDS root (has project directories)
1180
- if any((current / f"{p.upper()}-project").exists() for p in ["lep", "insurance", "saving", "ekyc"]):
1181
- search_root = current
1182
- break
1183
- # Also check if we're at a known project directory level
1184
- if current.name.endswith("-project") and current.parent.exists():
1185
- search_root = current.parent
1186
- break
1187
- if current.parent == current: # Reached filesystem root
1188
- break
1189
- current = current.parent
1190
-
1191
- async def clone_if_needed(repo: Repository) -> None:
1192
- async with semaphore:
1193
- # Check if repo exists at expected path and is already a valid git repository.
1194
- # Accept both standard `.git/` directories and gitdir pointer files so
1195
- # worktrees and alternate checkout layouts are not treated as missing.
1196
- git_marker = repo.absolute_path / ".git"
1197
- if repo.absolute_path.exists() and (git_marker.is_dir() or git_marker.is_file()):
1198
- return # Already cloned at correct location
1199
-
1200
- # Check if repo exists at a different path (renamed/moved)
1201
- existing_path = await _find_repo_by_remote_url(repo, search_root)
1202
- if existing_path and existing_path != repo.absolute_path:
1203
- logger.warning(
1204
- "repo-moved",
1205
- extra={
1206
- "repo": repo.name,
1207
- "project": repo.project,
1208
- "old_path": str(existing_path),
1209
- "new_path": str(repo.absolute_path),
1210
- "run_id": run_id,
1211
- },
1212
- )
1213
- # Note: We don't move repos automatically - user should handle this manually
1214
- # But we'll clone at the new location if needed
1215
- # The old location will remain (orphaned) until manually cleaned up
1216
-
1217
- # Attempt to clone at the expected path
1218
- logger.info(
1219
- "pre-clone",
1220
- extra={
1221
- "repo": repo.name,
1222
- "project": repo.project,
1223
- "path": str(repo.absolute_path),
1224
- "run_id": run_id,
1225
- },
1226
- )
1227
- result = await _clone_repo(repo, dry_run=False, run_id=run_id)
1228
- results[repo.name] = result
1229
-
1230
- # Clone all missing repos in parallel
1231
- await asyncio.gather(*[clone_if_needed(repo) for repo in repositories])
1232
- return results
1233
-
1234
-
1235
- async def _check_network_connectivity(base_url: str, timeout: float = 5.0) -> tuple[bool, str]:
1236
- """Check network connectivity to Bitbucket server.
1237
-
1238
- Args:
1239
- base_url: Base URL for Bitbucket (e.g., "http://bitbucket.digital.vn")
1240
- timeout: Timeout in seconds for the connectivity check
1241
-
1242
- Returns:
1243
- Tuple of (is_connected, message)
1244
- """
1245
- try:
1246
- # Extract hostname from URL
1247
- if "://" in base_url:
1248
- hostname = base_url.split("://")[1].split("/", maxsplit=1)[0]
1249
- else:
1250
- hostname = base_url.split("/", maxsplit=1)[0]
1251
-
1252
- # Use asyncio to create a connection test
1253
- # Try to connect to port 80 (HTTP) or 443 (HTTPS)
1254
- port = 443 if base_url.startswith("https://") else 80
1255
-
1256
- logger.info(
1257
- "network-check-start",
1258
- extra={
1259
- "hostname": hostname,
1260
- "port": port,
1261
- "base_url": base_url,
1262
- },
1263
- )
1264
-
1265
- # Create a simple TCP connection test
1266
- try:
1267
- _reader, writer = await asyncio.wait_for(
1268
- asyncio.open_connection(hostname, port),
1269
- timeout=timeout,
1270
- )
1271
- writer.close()
1272
- await writer.wait_closed()
1273
-
1274
- logger.info(
1275
- "network-check-success",
1276
- extra={
1277
- "hostname": hostname,
1278
- "port": port,
1279
- "base_url": base_url,
1280
- },
1281
- )
1282
- return True, f"Successfully connected to {hostname}:{port}"
1283
- except TimeoutError:
1284
- logger.warning(
1285
- "network-check-timeout",
1286
- extra={
1287
- "hostname": hostname,
1288
- "port": port,
1289
- "timeout": timeout,
1290
- "base_url": base_url,
1291
- },
1292
- )
1293
- return False, f"Connection timeout to {hostname}:{port} (timeout: {timeout}s)"
1294
- except OSError as e:
1295
- logger.warning(
1296
- "network-check-failed",
1297
- extra={
1298
- "hostname": hostname,
1299
- "port": port,
1300
- "error": str(e),
1301
- "base_url": base_url,
1302
- },
1303
- )
1304
- return False, f"Failed to connect to {hostname}:{port}: {e}"
1305
- except Exception as e:
1306
- logger.exception(
1307
- "network-check-error",
1308
- extra={
1309
- "base_url": base_url,
1310
- "error": str(e),
1311
- },
1312
- )
1313
- return False, f"Network check error: {e}"
1314
-
1315
-
1316
- def _get_retry_config() -> tuple[int, float]:
1317
- """Get retry configuration from environment variables or use defaults.
1318
-
1319
- Returns:
1320
- tuple[int, float]: (retries, backoff_multiplier)
1321
-
1322
- Environment variables (from the shared VDS env file):
1323
- - VDS_GIT_RETRIES: Number of retries (default: 2)
1324
- - VDS_GIT_BACKOFF: Backoff multiplier (default: 1.5)
1325
- """
1326
- retries = 2
1327
- backoff = 1.5
1328
-
1329
- retries_env = os.environ.get("VDS_GIT_RETRIES")
1330
- if retries_env:
1331
- try:
1332
- retries = int(retries_env)
1333
- retries = max(retries, 0)
1334
- except ValueError:
1335
- pass
1336
-
1337
- backoff_env = os.environ.get("VDS_GIT_BACKOFF")
1338
- if backoff_env:
1339
- try:
1340
- backoff = float(backoff_env)
1341
- backoff = max(backoff, 1.0)
1342
- except ValueError:
1343
- pass
1344
-
1345
- return retries, backoff
1346
-
1347
-
1348
- async def _verify_credentials(repo: Repository) -> None:
1349
- """Verify git credentials by attempting a lightweight ls-remote.
1350
-
1351
- Raises:
1352
- RuntimeError: If authentication fails (401/403).
1353
- """
1354
- remote = _remote_url(repo)
1355
- # Check HEAD ref - lightweight, doesn't download objects
1356
- command = _build_git_command(repo, ["ls-remote", remote, "HEAD"])
1357
-
1358
- # Run with a short timeout to fail fast
1359
- try:
1360
- process = await asyncio.create_subprocess_exec(
1361
- *command,
1362
- stdout=asyncio.subprocess.PIPE,
1363
- stderr=asyncio.subprocess.PIPE,
1364
- )
1365
- _, stderr = await asyncio.wait_for(process.communicate(), timeout=10.0)
1366
-
1367
- if process.returncode != 0:
1368
- err_msg = stderr.decode().lower()
1369
- if "401" in err_msg or "403" in err_msg or "authentication failed" in err_msg:
1370
- raise RuntimeError(
1371
- f"Authentication failed for {remote}. Check VDS_USERNAME/VDS_PASSWORD in the shared VDS env file"
1372
- )
1373
- # Other errors (e.g. repo not found) might not be global auth issues,
1374
- # so we log warning but don't abort everything.
1375
- logger.warning(
1376
- "auth-check-warning",
1377
- extra={"repo": repo.name, "error": stderr.decode().strip()},
1378
- )
1379
-
1380
- except TimeoutError:
1381
- logger.warning("auth-check-timeout", extra={"repo": repo.name})
1382
- except RuntimeError:
1383
- raise
1384
- except Exception as e:
1385
- # Don't block everything if the check itself crashes unexpectedly
1386
- logger.warning("auth-check-error", extra={"error": str(e)})
1387
-
1388
-
1389
- async def orchestrate_repositories(
1390
- manifest: Manifest,
1391
- operation: GitOperation,
1392
- filters: ManifestFilters,
1393
- concurrency: int,
1394
- dry_run: bool,
1395
- run_id: str,
1396
- retries: int | None = None,
1397
- backoff: float | None = None,
1398
- allow_serial_recovery: bool = True,
1399
- **operation_kwargs,
1400
- ) -> RunSummary:
1401
- """Orchestrate git operations across multiple repositories.
1402
-
1403
- Args:
1404
- retries: Number of retries (default: from VDS_GIT_RETRIES env var or 2)
1405
- backoff: Backoff multiplier (default: from VDS_GIT_BACKOFF env var or 1.5)
1406
- """
1407
- # Get retry configuration from environment or use provided/default values
1408
- if retries is None or backoff is None:
1409
- env_retries, env_backoff = _get_retry_config()
1410
- retries = retries if retries is not None else env_retries
1411
- backoff = backoff if backoff is not None else env_backoff
1412
-
1413
- repositories = manifest.filter(filters)
1414
-
1415
- # Log operation start with configuration
1416
- logger.info(
1417
- "operation-start",
1418
- extra={
1419
- "operation": operation.value,
1420
- "repo_count": len(repositories),
1421
- "concurrency": concurrency,
1422
- "retries": retries,
1423
- "backoff": backoff,
1424
- "dry_run": dry_run,
1425
- "run_id": run_id,
1426
- "filters": {
1427
- "project": filters.project,
1428
- "name_match": filters.name_match,
1429
- "include_tags": sorted(filters.include_tags) if filters.include_tags else [],
1430
- "exclude_tags": sorted(filters.exclude_tags) if filters.exclude_tags else [],
1431
- },
1432
- },
1433
- )
1434
-
1435
- # Check network connectivity before proceeding (only for operations that need network)
1436
- network_required_operations = {
1437
- GitOperation.PULL,
1438
- GitOperation.FETCH,
1439
- GitOperation.CLONE,
1440
- GitOperation.PUSH,
1441
- }
1442
- if not dry_run and operation in network_required_operations and repositories:
1443
- base_url = _remote_base()
1444
- is_connected, message = await _check_network_connectivity(base_url, timeout=5.0)
1445
- if not is_connected:
1446
- logger.warning(
1447
- "network-check-failed-proceeding",
1448
- extra={
1449
- "base_url": base_url,
1450
- "connectivity_message": message,
1451
- "operation": operation.value,
1452
- "repo_count": len(repositories),
1453
- "run_id": run_id,
1454
- "note": "Proceeding with operations despite connectivity check failure. Individual operations will retry.",
1455
- },
1456
- )
1457
- else:
1458
- logger.info(
1459
- "network-check-passed",
1460
- extra={
1461
- "base_url": base_url,
1462
- "connectivity_message": message,
1463
- "operation": operation.value,
1464
- "run_id": run_id,
1465
- },
1466
- )
1467
-
1468
- # Pre-flight Auth Check (TSK-004)
1469
- # Verify credentials using the first repository to fail fast if auth is broken
1470
- if repositories:
1471
- logger.info("auth-check-start", extra={"run_id": run_id})
1472
- try:
1473
- await _verify_credentials(repositories[0])
1474
- logger.info("auth-check-passed", extra={"run_id": run_id})
1475
- except RuntimeError as e:
1476
- logger.exception("auth-check-failed", extra={"error": str(e), "run_id": run_id})
1477
- # Re-raise to abort the operation
1478
- raise
1479
-
1480
- # Step 1: Ensure all repos from manifest are cloned locally
1481
- # This ensures local folders match remote repo list before starting operations
1482
- if operation != GitOperation.CLONE: # Skip pre-clone if operation is clone itself
1483
- logger.info(
1484
- "pre-clone-check",
1485
- extra={
1486
- "repo_count": len(repositories),
1487
- "run_id": run_id,
1488
- "operation": operation.value,
1489
- },
1490
- )
1491
- pre_clone_results = await _ensure_all_repos_cloned(repositories, concurrency, dry_run, run_id)
1492
- # Log pre-clone results but don't fail the operation if some clones fail
1493
- # (they'll be handled by auto-clone in _run_git if needed)
1494
- cloned_count = sum(1 for r in pre_clone_results.values() if r.success)
1495
- failed_count = len(pre_clone_results) - cloned_count
1496
- if cloned_count > 0 or failed_count > 0:
1497
- logger.info(
1498
- "pre-clone-complete",
1499
- extra={
1500
- "cloned": cloned_count,
1501
- "failed": failed_count,
1502
- "total": len(repositories),
1503
- "run_id": run_id,
1504
- "operation": operation.value,
1505
- },
1506
- )
1507
-
1508
- results: dict[str, RepoResult] = {}
1509
-
1510
- semaphore = asyncio.Semaphore(concurrency)
1511
- serial_retries = 0
1512
-
1513
- async def worker(repo: Repository) -> None:
1514
- async with semaphore:
1515
- attempt = 0
1516
- delay = 1.0
1517
- result: RepoResult
1518
- recovery_tracker = {"attempted": False}
1519
- while True:
1520
- attempt += 1
1521
- try:
1522
- # pre hooks
1523
- if not dry_run:
1524
- pre_key = {
1525
- GitOperation.PULL: "pre_pull",
1526
- GitOperation.FETCH: "pre_fetch",
1527
- GitOperation.STATUS: "pre_status",
1528
- GitOperation.BRANCH: "pre_branch",
1529
- GitOperation.CHECKOUT: "pre_checkout",
1530
- GitOperation.ADD: "pre_add",
1531
- GitOperation.COMMIT: "pre_commit",
1532
- GitOperation.PUSH: "pre_push",
1533
- GitOperation.STASH: "pre_stash",
1534
- GitOperation.TAG: "pre_tag",
1535
- }.get(operation)
1536
- if pre_key:
1537
- for command in repo.hooks.get(pre_key, []):
1538
- rc, h_stdout, h_stderr = await _run_hook(repo, command)
1539
- if rc != 0:
1540
- results[repo.name] = RepoResult(
1541
- repo=repo,
1542
- success=False,
1543
- message=h_stderr.strip() or h_stdout.strip() or f"hook failed: {command}",
1544
- )
1545
- return
1546
- result = await _operate_repo(
1547
- repo,
1548
- operation=operation,
1549
- dry_run=dry_run,
1550
- run_id=run_id,
1551
- recovery_tracker=recovery_tracker,
1552
- **operation_kwargs,
1553
- )
1554
- except Exception as exc: # pragma: no cover - fallback safety
1555
- logger.exception("operation-failed", extra={"repo": repo.name, "run_id": run_id})
1556
- result = RepoResult(repo=repo, success=False, message=str(exc))
1557
-
1558
- if result.success or attempt > retries:
1559
- results[repo.name] = result
1560
- if result.success and not dry_run:
1561
- post_key = {
1562
- GitOperation.PULL: "post_pull",
1563
- GitOperation.FETCH: "post_fetch",
1564
- GitOperation.STATUS: "post_status",
1565
- GitOperation.BRANCH: "post_branch",
1566
- GitOperation.CHECKOUT: "post_checkout",
1567
- GitOperation.ADD: "post_add",
1568
- GitOperation.COMMIT: "post_commit",
1569
- GitOperation.PUSH: "post_push",
1570
- GitOperation.STASH: "post_stash",
1571
- GitOperation.TAG: "post_tag",
1572
- }.get(operation)
1573
- if post_key:
1574
- for command in repo.hooks.get(post_key, []):
1575
- rc, h_stdout, h_stderr = await _run_hook(repo, command)
1576
- if rc != 0:
1577
- logger.warning(
1578
- "hook-failed",
1579
- extra={
1580
- "repo": repo.name,
1581
- "hook": command,
1582
- "run_id": run_id,
1583
- },
1584
- )
1585
- break
1586
-
1587
- logger.warning(
1588
- "retrying",
1589
- extra={
1590
- "repo": repo.name,
1591
- "project": repo.project,
1592
- "run_id": run_id,
1593
- "attempt": attempt,
1594
- },
1595
- )
1596
- await asyncio.sleep(delay)
1597
- delay *= backoff
1598
-
1599
- async with asyncio.TaskGroup() as tg:
1600
- for repo in repositories:
1601
- tg.create_task(worker(repo))
1602
-
1603
- if allow_serial_recovery and not dry_run and concurrency > 1:
1604
- fallback_repos = [
1605
- repo
1606
- for repo in repositories
1607
- if not results[repo.name].success and _is_network_error(results[repo.name].message or "")
1608
- ]
1609
- if fallback_repos:
1610
- logger.warning(
1611
- "serial-retry",
1612
- extra={
1613
- "run_id": run_id,
1614
- "repos": [r.name for r in fallback_repos],
1615
- },
1616
- )
1617
- serial_retries = len(fallback_repos)
1618
- fallback_manifest = Manifest(fallback_repos)
1619
- fallback_summary = await orchestrate_repositories(
1620
- manifest=fallback_manifest,
1621
- operation=operation,
1622
- filters=ManifestFilters(),
1623
- concurrency=1,
1624
- dry_run=False,
1625
- run_id=run_id,
1626
- retries=retries,
1627
- backoff=backoff,
1628
- allow_serial_recovery=False,
1629
- **operation_kwargs,
1630
- )
1631
- results.update(fallback_summary.results)
1632
-
1633
- return RunSummary.from_results(results, serial_retries=serial_retries)
1634
-
1635
-
1636
- def _is_network_error(message: str) -> bool:
1637
- lowered = message.lower()
1638
- patterns = (
1639
- "failed to connect",
1640
- "couldn't connect",
1641
- "could not connect",
1642
- "timeout",
1643
- "timed out",
1644
- "connection refused",
1645
- "could not resolve host",
1646
- )
1647
- return any(pattern in lowered for pattern in patterns)