synapse-hub 2.2.4 → 2.4.0

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 (311) hide show
  1. package/.agents/agents/failure-analyst.md +11 -0
  2. package/.agents/agents/live-explorer.md +28 -0
  3. package/.agents/agents/orchestrator.md +20 -4
  4. package/.agents/agents/pom-crafter.md +12 -0
  5. package/.agents/agents/quality-gatekeeper.md +19 -4
  6. package/.agents/agents/test-runner.md +11 -0
  7. package/.agents/rules/communication-style.md +40 -0
  8. package/.agents/rules/context-engineering.md +23 -0
  9. package/.agents/rules/git-push-protocol.md +10 -16
  10. package/.agents/rules/graphify.md +14 -14
  11. package/.agents/rules/mandatory-playwright-live.md +29 -29
  12. package/.agents/rules/mobile_appium_rules.md +132 -0
  13. package/.agents/rules/performance_testing_rules.md +74 -0
  14. package/.agents/rules/systematic-debugging.md +6 -6
  15. package/.agents/skills/agent-orchestration-multi-agent-optimize/SKILL.md +64 -215
  16. package/.agents/skills/agent-orchestration-multi-agent-optimize/examples/swarm_workload_config.json +12 -0
  17. package/.agents/skills/antigravity-test-sentinel/SKILL.md +3 -3
  18. package/.agents/skills/antigravity-test-sentinel/examples/dod_gate_policy.json +11 -0
  19. package/.agents/skills/api-network-mocking-interception/SKILL.md +1 -1
  20. package/.agents/skills/api-network-mocking-interception/examples/network_route_stub.json +9 -0
  21. package/.agents/skills/api-spec-to-e2e-matrix/SKILL.md +9 -9
  22. package/.agents/skills/api-spec-to-e2e-matrix/examples/sample_openapi.json +19 -0
  23. package/.agents/skills/architecture-decision-records/SKILL.md +35 -412
  24. package/.agents/skills/architecture-decision-records/examples/0001-record-architecture-decisions.md +12 -0
  25. package/.agents/skills/auth-session-and-cookie-manager/SKILL.md +1 -1
  26. package/.agents/skills/auth-session-and-cookie-manager/examples/storage_state_sample.json +11 -0
  27. package/.agents/skills/backend-load-and-stress-patterns/SKILL.md +80 -186
  28. package/.agents/skills/backend-load-and-stress-patterns/examples/k6_load_test_sample.js +13 -0
  29. package/.agents/skills/bats-testing-patterns/SKILL.md +1 -1
  30. package/.agents/skills/bats-testing-patterns/examples/cli_runner_test.bats +6 -0
  31. package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -614
  32. package/.agents/skills/clean-pom-crafter/SKILL.md +21 -3
  33. package/.agents/skills/clean-pom-crafter/examples/standard_test_case.groovy +28 -28
  34. package/.agents/skills/clean-pom-crafter/references/pom_patterns.groovy +138 -138
  35. package/.agents/skills/code-refactoring-refactor-clean/SKILL.md +2 -2
  36. package/.agents/skills/code-refactoring-refactor-clean/examples/refactored_page_sample.groovy +9 -0
  37. package/.agents/skills/db-state-verifier-and-seeder/SKILL.md +5 -5
  38. package/.agents/skills/db-state-verifier-and-seeder/examples/db_fixture_seed.json +12 -0
  39. package/.agents/skills/e2e-testing-patterns/SKILL.md +1 -1
  40. package/.agents/skills/e2e-testing-patterns/examples/playwright_sharded_config.ts +12 -0
  41. package/.agents/skills/e2e-testing-patterns/resources/implementation-playbook.md +522 -522
  42. package/.agents/skills/failure-autopsy-and-healing/SKILL.md +17 -3
  43. package/.agents/skills/failure-autopsy-and-healing/examples/sample_junit_failure.xml +8 -0
  44. package/.agents/skills/failure-autopsy-and-healing/references/healing_matrix.md +64 -64
  45. package/.agents/skills/failure-autopsy-and-healing/references/qa_investigation_protocol.md +56 -56
  46. package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +98 -98
  47. package/.agents/skills/file-and-report-validator/SKILL.md +1 -1
  48. package/.agents/skills/file-and-report-validator/examples/sample_export_schema.json +14 -0
  49. package/.agents/skills/flaky-test-sentinel-and-quarantine/SKILL.md +3 -3
  50. package/.agents/skills/flaky-test-sentinel-and-quarantine/examples/quarantine_registry.json +11 -0
  51. package/.agents/skills/gherkin-to-suite/SKILL.md +103 -0
  52. package/.agents/skills/gherkin-to-suite/examples/checkout.feature +39 -0
  53. package/.agents/skills/gherkin-to-suite/examples/suite_report_sample.json +334 -0
  54. package/.agents/skills/github-actions-templates/SKILL.md +47 -304
  55. package/.agents/skills/github-actions-templates/examples/matrix_test_pipeline.yml +8 -0
  56. package/.agents/skills/graphify-impact-analyzer/SKILL.md +6 -6
  57. package/.agents/skills/graphify-impact-analyzer/examples/dependency_blast_radius.json +8 -0
  58. package/.agents/skills/katalon-cli-runner/SKILL.md +2 -2
  59. package/.agents/skills/katalon-cli-runner/examples/headless_kre_exec.sh +3 -0
  60. package/.agents/skills/katalon-cli-runner/references/groovy-patterns.md +209 -209
  61. package/.agents/skills/katalon-cli-runner/references/katalon-api.md +155 -155
  62. package/.agents/skills/katalon-cli-runner/references/runner_commands.md +67 -67
  63. package/.agents/skills/lam-script-generator/SKILL.md +42 -1
  64. package/.agents/skills/lam-script-generator/examples/user_story_sample.md +8 -0
  65. package/.agents/skills/lean-code-ladder/SKILL.md +83 -0
  66. package/.agents/skills/lean-code-ladder/examples/ladder_walkthrough.md +37 -0
  67. package/.agents/skills/meta-prompt-crafter/SKILL.md +107 -0
  68. package/.agents/skills/meta-prompt-crafter/examples/qa_prompt_template.md +35 -0
  69. package/.agents/skills/persistent-planning-files/SKILL.md +108 -0
  70. package/.agents/skills/persistent-planning-files/examples/task_plan_example.md +56 -0
  71. package/.agents/skills/playwright-live-interaction/SKILL.md +49 -1
  72. package/.agents/skills/playwright-live-interaction/examples/live_probe_script.js +5 -0
  73. package/.agents/skills/playwright-live-interaction/references/advanced_superpowers.md +160 -160
  74. package/.agents/skills/playwright-live-interaction/references/compact_accessibility_snapshots.md +75 -75
  75. package/.agents/skills/playwright-live-interaction/references/recipes.md +388 -388
  76. package/.agents/skills/playwright-live-interaction/references/swarm_orchestration.md +134 -134
  77. package/.agents/skills/playwright-webapp-testing/SKILL.md +93 -0
  78. package/.agents/skills/playwright-webapp-testing/examples/server_lifecycle_playwright.py +63 -0
  79. package/.agents/skills/rbt-manual-testing/SKILL.md +150 -0
  80. package/.agents/skills/rbt-manual-testing/examples/checkout_rbt_manual_suite.md +25 -0
  81. package/.agents/skills/security-dast-sentinel/SKILL.md +54 -135
  82. package/.agents/skills/security-dast-sentinel/examples/dast_scan_config.json +10 -0
  83. package/.agents/skills/self-healing-locator/SKILL.md +24 -10
  84. package/.agents/skills/self-healing-locator/examples/aom_diff_sample.json +16 -0
  85. package/.agents/skills/skillspector-security-guard/SKILL.md +32 -90
  86. package/.agents/skills/skillspector-security-guard/examples/safe_mcp_config.json +12 -0
  87. package/.agents/skills/surgical-coding-principles/SKILL.md +89 -0
  88. package/.agents/skills/surgical-coding-principles/examples/surgical_vs_scope_creep.md +46 -0
  89. package/.agents/skills/synthetic-test-data-generator/SKILL.md +3 -3
  90. package/.agents/skills/synthetic-test-data-generator/examples/idempotent_data_recipe.json +9 -0
  91. package/.agents/skills/systematic-debugging/SKILL.md +100 -0
  92. package/.agents/skills/systematic-debugging/examples/four_phase_case.md +44 -0
  93. package/.agents/skills/test-driven-development/SKILL.md +114 -0
  94. package/.agents/skills/test-driven-development/examples/red_green_refactor_qa.md +78 -0
  95. package/.agents/skills/token-and-context-optimizer/SKILL.md +1 -1
  96. package/.agents/skills/token-and-context-optimizer/examples/distilled_log_sample.txt +3 -0
  97. package/.agents/skills/verification-before-completion/SKILL.md +100 -0
  98. package/.agents/skills/verification-before-completion/examples/evidence_log_example.md +46 -0
  99. package/.agents/skills/visual-regression-sentinel/SKILL.md +21 -1
  100. package/.agents/skills/visual-regression-sentinel/examples/visual_mask_rules.json +9 -0
  101. package/.agents/skills/wcag-audit-patterns/SKILL.md +3 -3
  102. package/.agents/skills/wcag-audit-patterns/examples/wcag_compliance_checklist.json +10 -0
  103. package/.agents/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -541
  104. package/.agents/skills/web-vitals-and-performance-profiler/SKILL.md +1 -1
  105. package/.agents/skills/web-vitals-and-performance-profiler/examples/cwv_budget_policy.json +6 -0
  106. package/.agents/templates/completion_report.md +57 -57
  107. package/.agents/workflows/analyze_requirement_document.md +18 -0
  108. package/.agents/workflows/export_testcases_excel.md +32 -0
  109. package/.agents/workflows/generate_combinatorial_test_data.md +28 -0
  110. package/.agents/workflows/generate_cross_module_test_plan.md +37 -0
  111. package/.agents/workflows/generate_manual_testcases_rbt.md +56 -0
  112. package/.agents/workflows/generate_requirements_from_website.md +25 -0
  113. package/.agents/workflows/generate_testcases_from_requirements.md +21 -0
  114. package/.agents/workflows/graphify.md +10 -10
  115. package/.agents/workflows/verify.md +2 -2
  116. package/.cursor/rules/language.mdc +7 -7
  117. package/.cursor/rules/synapse-qa.mdc +23 -0
  118. package/.cursorrules +7 -0
  119. package/.pre-commit-hooks.yaml +14 -0
  120. package/.windsurfrules +7 -0
  121. package/AGENTS.md +54 -15
  122. package/CLAUDE.md +35 -12
  123. package/LICENSE +30 -0
  124. package/NOTICE +180 -0
  125. package/README.en.md +325 -0
  126. package/README.md +247 -516
  127. package/action.yml +51 -0
  128. package/benchmarks/qa_eval/README.md +71 -0
  129. package/benchmarks/qa_eval/build_dataset.py +677 -0
  130. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +22 -0
  131. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +22 -0
  132. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +22 -0
  133. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +22 -0
  134. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +22 -0
  135. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +21 -0
  136. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +21 -0
  137. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +21 -0
  138. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +21 -0
  139. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +21 -0
  140. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +23 -0
  141. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +23 -0
  142. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +23 -0
  143. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +23 -0
  144. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +23 -0
  145. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +22 -0
  146. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +22 -0
  147. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +22 -0
  148. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +22 -0
  149. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +23 -0
  150. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +22 -0
  151. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +22 -0
  152. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +22 -0
  153. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +22 -0
  154. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +22 -0
  155. package/benchmarks/qa_eval/eval_runner.py +418 -0
  156. package/benchmarks/qa_eval/reports/AB_METHODOLOGY_REPORT.md +83 -0
  157. package/benchmarks/qa_eval/reports/BENCHMARK_REPORT.md +69 -0
  158. package/benchmarks/qa_eval/reports/eval_results.json +105 -0
  159. package/bin/agent-qa.js +10 -3
  160. package/docs/ARCHITECTURE.md +107 -0
  161. package/docs/CI_CD_INTEGRATION.md +94 -0
  162. package/docs/CLI_REFERENCE.md +157 -0
  163. package/docs/CONTRIBUTING.md +91 -0
  164. package/docs/PLUGIN_DEVELOPMENT_GUIDE.md +126 -0
  165. package/docs/TOKEN_QUOTA_PLAYBOOK.md +41 -0
  166. package/docs/adopted-ecosystem-tools.md +87 -0
  167. package/docs/schemas/synapse.config.schema.json +64 -0
  168. package/examples/cypress-ecommerce-suite/README.md +45 -0
  169. package/examples/cypress-ecommerce-suite/cypress/e2e/checkout.cy.js +17 -0
  170. package/examples/cypress-ecommerce-suite/cypress/pages/BasePage.js +29 -0
  171. package/examples/cypress-ecommerce-suite/cypress/pages/CartPage.js +51 -0
  172. package/examples/cypress-ecommerce-suite/cypress.config.js +13 -0
  173. package/examples/cypress-ecommerce-suite/package.json +13 -0
  174. package/examples/katalon-suite/Keywords/pages/BasePage.groovy +19 -0
  175. package/examples/katalon-suite/Keywords/pages/DashboardPage.groovy +29 -0
  176. package/examples/katalon-suite/Keywords/pages/LoginPage.groovy +45 -0
  177. package/examples/katalon-suite/Profiles/default.glbl +12 -0
  178. package/examples/katalon-suite/README.md +18 -0
  179. package/examples/katalon-suite/Scripts/Auth/TC_LoginSuccess/Script1234567890.groovy +12 -0
  180. package/examples/katalon-suite/Scripts/Dashboard/TC_ViewSummary/Script1234567891.groovy +15 -0
  181. package/examples/katalon-suite/katalon_suite.prj +21 -0
  182. package/examples/playwright-crm-suite/README.md +40 -0
  183. package/examples/playwright-crm-suite/package.json +14 -0
  184. package/examples/playwright-crm-suite/pages/BasePage.ts +37 -0
  185. package/examples/playwright-crm-suite/pages/CustomerPage.ts +57 -0
  186. package/examples/playwright-crm-suite/pages/LoginPage.ts +32 -0
  187. package/examples/playwright-crm-suite/playwright.config.ts +27 -0
  188. package/examples/playwright-crm-suite/tests/auth.spec.ts +22 -0
  189. package/examples/playwright-crm-suite/tests/customers.spec.ts +33 -0
  190. package/examples/plugins/sample-custom-plugin/README.md +14 -0
  191. package/examples/plugins/sample-custom-plugin/plugin.json +16 -0
  192. package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/SKILL.md +29 -0
  193. package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/examples/audit_fixture.json +8 -0
  194. package/examples/plugins/sample-custom-plugin/tools/custom_security_headers.py +125 -0
  195. package/examples/practices/README.md +22 -0
  196. package/examples/practices/requirements/crm/requirements_contracts.md +292 -0
  197. package/examples/practices/requirements/crm/requirements_customers.md +462 -0
  198. package/examples/practices/requirements/crm/requirements_login.md +202 -0
  199. package/examples/practices/requirements/crm/requirements_projects.md +396 -0
  200. package/examples/practices/requirements/crm/requirements_tasks.md +343 -0
  201. package/examples/practices/requirements/ecommerce/requirements_category_brand.txt +402 -0
  202. package/examples/practices/requirements/jira/KAN-5/KAN-1/2026-04-03_04-28-27.png +0 -0
  203. package/examples/practices/requirements/jira/KAN-5/KAN-1/KAN-1_requirement.md +52 -0
  204. package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-19.png +0 -0
  205. package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-57.png +0 -0
  206. package/examples/practices/requirements/jira/KAN-5/KAN-4/KAN-4_requirement.md +119 -0
  207. package/examples/practices/requirements/jira/KAN-5/KAN-5_overview.md +9 -0
  208. package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-08.png +0 -0
  209. package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-23.png +0 -0
  210. package/examples/practices/requirements/jira/KAN-5/KAN-6/KAN-6_requirement.md +32 -0
  211. package/examples/practices/testcases/api/book_management_api_test_cases.md +144 -0
  212. package/examples/practices/testcases/api/user_management_api_test_cases.md +139 -0
  213. package/examples/practices/testcases/crm/test_cases_crm_login.md +148 -0
  214. package/examples/practices/testcases/crm/test_cases_customers.md +156 -0
  215. package/examples/pytest-api-suite/README.md +45 -0
  216. package/examples/pytest-api-suite/conftest.py +31 -0
  217. package/examples/pytest-api-suite/pages/user_api_client.py +36 -0
  218. package/examples/pytest-api-suite/requirements.txt +2 -0
  219. package/examples/pytest-api-suite/tests/test_user_api.py +44 -0
  220. package/examples/selenium-suite/README.md +18 -0
  221. package/examples/selenium-suite/pages/base_page.py +27 -0
  222. package/examples/selenium-suite/pages/login_page.py +29 -0
  223. package/examples/selenium-suite/pages/order_page.py +25 -0
  224. package/examples/selenium-suite/pytest.ini +6 -0
  225. package/examples/selenium-suite/requirements.txt +2 -0
  226. package/examples/selenium-suite/tests/test_login.py +10 -0
  227. package/examples/selenium-suite/tests/test_order.py +10 -0
  228. package/package.json +22 -7
  229. package/scripts/generate_skill_examples.py +244 -0
  230. package/scripts/install.ps1 +112 -0
  231. package/scripts/install_global_plugin.ps1 +94 -0
  232. package/scripts/install_global_plugin.sh +49 -0
  233. package/scripts/lint_skills.ps1 +57 -0
  234. package/scripts/package_dist.py +323 -0
  235. package/scripts/setup.sh +59 -0
  236. package/scripts/update_hub.ps1 +19 -0
  237. package/scripts/update_hub.sh +15 -0
  238. package/skills_manifest.json +209 -6
  239. package/synapse.config.json +30 -0
  240. package/templates/PROJECT_AI_GUIDE_TEMPLATE.md +7 -7
  241. package/templates/PROJECT_STATE_TEMPLATE.md +1 -1
  242. package/templates/ai_bridges/CLAUDE.md +33 -16
  243. package/templates/ai_bridges/copilot-instructions.md +14 -21
  244. package/templates/ai_bridges/cursor_synapse_qa.mdc +17 -20
  245. package/templates/ai_bridges/windsurfrules +21 -21
  246. package/templates/ci/github-actions-synapse.yml +71 -4
  247. package/templates/welcome.html.tmpl +1674 -0
  248. package/tools/.infer_baseline.json +1102 -0
  249. package/tools/TOOLS_RUNBOOK.md +92 -130
  250. package/tools/__init__.py +26 -0
  251. package/tools/agent_canary.py +501 -501
  252. package/tools/analyze_project.py +31 -17
  253. package/tools/api_fuzzer.py +278 -6
  254. package/tools/author_integrity.py +6 -6
  255. package/tools/auto_heal.py +1 -1
  256. package/tools/browser_helpers.js +105 -7
  257. package/tools/bug_reporter.py +31 -1
  258. package/tools/bump_version.py +23 -3
  259. package/tools/cache_resolver.py +248 -14
  260. package/tools/check_env.py +55 -14
  261. package/tools/check_version_sync.py +153 -0
  262. package/tools/ci_healing_hook.py +1 -1
  263. package/tools/cli.py +263 -13
  264. package/tools/count_tokens.py +1257 -0
  265. package/tools/dashboard_generator.py +2638 -0
  266. package/tools/db_sandbox.py +198 -20
  267. package/tools/e2e_flow_prober.ps1 +12 -64
  268. package/tools/e2e_flow_prober.py +99 -0
  269. package/tools/e2e_flow_prober.sh +4 -0
  270. package/tools/flaky_detector.py +4 -3
  271. package/tools/generate_allure_report.ps1 +12 -29
  272. package/tools/generate_allure_report.py +77 -0
  273. package/tools/generate_allure_report.sh +4 -0
  274. package/tools/generate_jmx_plan.py +257 -58
  275. package/tools/generate_test_reports.ps1 +12 -134
  276. package/tools/generate_test_reports.py +133 -0
  277. package/tools/generate_test_reports.sh +4 -0
  278. package/tools/gherkin_suite.py +758 -0
  279. package/tools/git_pre_commit_guard.py +12 -6
  280. package/tools/goldfish_review.py +366 -0
  281. package/tools/heal_pr_automator.py +1 -1
  282. package/tools/heuristic_locator_matcher.py +170 -21
  283. package/tools/infer_linter.py +612 -70
  284. package/tools/lint_ai_docs.py +64 -0
  285. package/tools/matrix_sharder.py +1 -1
  286. package/tools/mcp_excel_server.ps1 +12 -250
  287. package/tools/mcp_excel_server.py +249 -0
  288. package/tools/mcp_excel_server.sh +4 -0
  289. package/tools/mcp_server.py +368 -144
  290. package/tools/md_to_xlsx.py +307 -0
  291. package/tools/micro_mutator.py +300 -69
  292. package/tools/omni_transpiler.py +2 -2
  293. package/tools/output_formatter.py +128 -0
  294. package/tools/pinpoint_failure.py +88 -88
  295. package/tools/project_state.py +2 -2
  296. package/tools/repo_map.py +1 -1
  297. package/tools/safety_firewall.py +196 -45
  298. package/tools/setup_project.py +294 -30
  299. package/tools/spec_drift_sentinel.py +439 -0
  300. package/tools/sync_agent_rules.py +248 -0
  301. package/tools/telemetry_correlator.py +45 -0
  302. package/tools/test_impact.py +51 -12
  303. package/tools/tms_sync_bridge.py +21 -5
  304. package/tools/universal_ir.py +3 -0
  305. package/tools/update_sentinel.py +87 -15
  306. package/tools/verify_all.ps1 +13 -0
  307. package/tools/verify_all.py +463 -79
  308. package/tools/visual_diff_canvas.py +1 -0
  309. package/tools/visual_som_helper.py +1 -1
  310. package/tools/watch_mode.py +305 -0
  311. package/tools/welcome_page.py +291 -0
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Project>
3
+ <description>Katalon Studio Enterprise Web Clean POM Suite</description>
4
+ <name>katalon_suite</name>
5
+ <tag></tag>
6
+ <UUID>e3b0c442-98fc-1c14-9afb-f4c8996fb924</UUID>
7
+ <migratedVersion>5.9.0</migratedVersion>
8
+ <pageLoadTimeout>30</pageLoadTimeout>
9
+ <projectFileLocation></projectFileLocation>
10
+ <sourceContent>
11
+ <sourceFolderList>
12
+ <sourceFolderUrl>Include/scripts/groovy</sourceFolderUrl>
13
+ </sourceFolderList>
14
+ <systemFolderList>
15
+ <systemFolderConfiguration>
16
+ <url>Include/scripts/groovy</url>
17
+ </systemFolderConfiguration>
18
+ </systemFolderList>
19
+ </sourceContent>
20
+ <type>WEB</type>
21
+ </Project>
@@ -0,0 +1,40 @@
1
+ # 🎭 Playwright TypeScript Reference Suite (Clean POM & Synapse Guardrails)
2
+
3
+ This directory provides a production-grade **Playwright Test (TypeScript)** reference suite demonstrating the Clean Page Object Model (POM) and Flat Architecture standards enforced by **Synapse Hub**.
4
+
5
+ ---
6
+
7
+ ## 🌟 Key Architectural Patterns Demonstrated
8
+
9
+ 1. **Clean POM & Flat Architecture:**
10
+ - Test scripts (`tests/auth.spec.ts`, `tests/customers.spec.ts`) contain **zero raw XPaths or CSS selectors**.
11
+ - All locator strategies and interaction logic are cleanly encapsulated within Page Classes (`pages/LoginPage.ts`, `pages/CustomerPage.ts`).
12
+ 2. **Tier 1 ARIA Semantic Locators:**
13
+ - Elements are targeted using resilient accessible roles (`page.getByRole('button', { name: 'Đăng nhập' })`) and labels (`page.getByLabel('Mật khẩu')`).
14
+ 3. **Idempotent Test Data & Teardown Cleanup:**
15
+ - Uses `BasePage.uniqueCode('CUST_')` with timestamps to prevent database primary key collisions during parallel execution.
16
+ - `test.afterEach` guarantees that created test entities are safely deleted.
17
+ 4. **Smart Waits & Zero Static Sleeps:**
18
+ - Employs dynamic wait conditions (`waitForSpinnerToDisappear`, `waitForLoadState('networkidle')`) instead of flaky `Thread.sleep` or `waitForTimeout`.
19
+
20
+ ---
21
+
22
+ ## 🚀 How to Run & Verify
23
+
24
+ ### 1. Run the Synapse Quality Linter (0-Token AST Check)
25
+ Verify that test scripts are free from fake passes, unawaited assertions, and swallowed exceptions:
26
+ ```bash
27
+ npx synapse-hub lint ./tests
28
+ ```
29
+ *(Expected output: `100% CLEAN — Zero defects detected`)*.
30
+
31
+ ### 2. Verify 9 Quality Gates DoD
32
+ ```bash
33
+ npx synapse-hub verify
34
+ ```
35
+
36
+ ### 3. Run Headless Playwright Tests
37
+ ```bash
38
+ npm install
39
+ npx playwright test
40
+ ```
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "playwright-crm-suite",
3
+ "version": "1.0.0",
4
+ "description": "Clean POM Playwright TypeScript Reference Suite for Synapse Hub",
5
+ "scripts": {
6
+ "test": "playwright test",
7
+ "lint:qa": "npx synapse-hub lint ./tests",
8
+ "verify:qa": "npx synapse-hub verify"
9
+ },
10
+ "devDependencies": {
11
+ "@playwright/test": "^1.40.0",
12
+ "typescript": "^5.0.0"
13
+ }
14
+ }
@@ -0,0 +1,37 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+
3
+ /**
4
+ * BasePage — Foundational Clean POM class for Playwright TypeScript suites.
5
+ * Enforces dynamic random identifiers, resilient smart waits, and zero static sleeps.
6
+ */
7
+ export class BasePage {
8
+ readonly page: Page;
9
+
10
+ constructor(page: Page) {
11
+ this.page = page;
12
+ }
13
+
14
+ /**
15
+ * Generates collision-free test data with timestamps.
16
+ */
17
+ static uniqueCode(prefix: string = 'AUTO_'): string {
18
+ return `${prefix}${Date.now()}_${Math.floor(Math.random() * 1000)}`;
19
+ }
20
+
21
+ /**
22
+ * Smart wait for dynamic overlay detaching without static Thread.sleep.
23
+ */
24
+ async waitForSpinnerToDisappear(spinnerLocator?: Locator): Promise<void> {
25
+ const target = spinnerLocator || this.page.locator('.p-loading-mask, .spinner-overlay, .loading-backdrop');
26
+ if (await target.count() > 0) {
27
+ await target.first().waitFor({ state: 'detached', timeout: 10000 }).catch(() => {});
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Wait for network idle state.
33
+ */
34
+ async waitForNetworkIdle(): Promise<void> {
35
+ await this.page.waitForLoadState('networkidle').catch(() => {});
36
+ }
37
+ }
@@ -0,0 +1,57 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ import { BasePage } from './BasePage';
3
+
4
+ /**
5
+ * CustomerPage — Encapsulates customer management workflows and table verification.
6
+ */
7
+ export class CustomerPage extends BasePage {
8
+ readonly btnCreate: Locator;
9
+ readonly txtCustomerName: Locator;
10
+ readonly txtCustomerPhone: Locator;
11
+ readonly btnSave: Locator;
12
+ readonly toastSuccess: Locator;
13
+ readonly searchInput: Locator;
14
+ readonly tableRows: Locator;
15
+
16
+ constructor(page: Page) {
17
+ super(page);
18
+ this.btnCreate = page.getByRole('button', { name: 'Thêm mới' });
19
+ this.txtCustomerName = page.getByLabel('Tên khách hàng', { exact: false });
20
+ this.txtCustomerPhone = page.getByLabel('Số điện thoại', { exact: false });
21
+ this.btnSave = page.getByRole('button', { name: 'Lưu' });
22
+ this.toastSuccess = page.locator('.p-toast-message-success, .toast-success');
23
+ this.searchInput = page.getByPlaceholder('Tìm kiếm khách hàng...');
24
+ this.tableRows = page.locator('table tbody tr');
25
+ }
26
+
27
+ async navigate(): Promise<void> {
28
+ await this.page.goto('/customers');
29
+ await this.waitForNetworkIdle();
30
+ }
31
+
32
+ async createCustomer(name: string, phone: string): Promise<void> {
33
+ await this.btnCreate.click();
34
+ await this.txtCustomerName.fill(name);
35
+ await this.txtCustomerPhone.fill(phone);
36
+ await this.btnSave.click();
37
+ await this.waitForSpinnerToDisappear();
38
+ }
39
+
40
+ async searchCustomer(keyword: string): Promise<void> {
41
+ await this.searchInput.fill(keyword);
42
+ await this.page.keyboard.press('Enter');
43
+ await this.waitForNetworkIdle();
44
+ }
45
+
46
+ async deleteCustomerByName(name: string): Promise<void> {
47
+ const row = this.page.locator(`tr:has-text("${name}")`);
48
+ if (await row.count() > 0) {
49
+ await row.getByRole('button', { name: 'Xóa' }).click();
50
+ const confirmBtn = this.page.getByRole('button', { name: 'Xác nhận' });
51
+ if (await confirmBtn.isVisible()) {
52
+ await confirmBtn.click();
53
+ }
54
+ await this.waitForSpinnerToDisappear();
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,32 @@
1
+ import { Page, Locator } from '@playwright/test';
2
+ import { BasePage } from './BasePage';
3
+
4
+ /**
5
+ * LoginPage — Encapsulates login elements using Tier 1 ARIA accessible roles and names.
6
+ */
7
+ export class LoginPage extends BasePage {
8
+ readonly txtUsername: Locator;
9
+ readonly txtPassword: Locator;
10
+ readonly btnSubmit: Locator;
11
+ readonly alertError: Locator;
12
+
13
+ constructor(page: Page) {
14
+ super(page);
15
+ this.txtUsername = page.getByLabel('Tên đăng nhập', { exact: false });
16
+ this.txtPassword = page.getByLabel('Mật khẩu', { exact: false });
17
+ this.btnSubmit = page.getByRole('button', { name: 'Đăng nhập' });
18
+ this.alertError = page.getByRole('alert');
19
+ }
20
+
21
+ async navigate(): Promise<void> {
22
+ await this.page.goto('/login');
23
+ await this.waitForNetworkIdle();
24
+ }
25
+
26
+ async login(username: string, password: string): Promise<void> {
27
+ await this.txtUsername.fill(username);
28
+ await this.txtPassword.fill(password);
29
+ await this.btnSubmit.click();
30
+ await this.waitForSpinnerToDisappear();
31
+ }
32
+ }
@@ -0,0 +1,27 @@
1
+ import { defineConfig, devices } from '@playwright/test';
2
+
3
+ export default defineConfig({
4
+ testDir: './tests',
5
+ fullyParallel: true,
6
+ forbidOnly: !!process.env.CI,
7
+ retries: process.env.CI ? 2 : 0,
8
+ workers: process.env.CI ? 2 : undefined,
9
+ reporter: [
10
+ ['html', { open: 'never' }],
11
+ ['junit', { outputFile: 'reports/junit.xml' }]
12
+ ],
13
+ use: {
14
+ baseURL: process.env.BASE_URL || 'https://crm-demo.enterprise.local',
15
+ trace: 'on-first-retry',
16
+ screenshot: 'only-on-failure',
17
+ video: 'retain-on-failure',
18
+ headless: true,
19
+ viewport: { width: 1920, height: 1080 }
20
+ },
21
+ projects: [
22
+ {
23
+ name: 'chromium',
24
+ use: { ...devices['Desktop Chrome'] }
25
+ }
26
+ ]
27
+ });
@@ -0,0 +1,22 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import { LoginPage } from '../pages/LoginPage';
3
+
4
+ test.describe('Authentication Flow — Clean POM Reference', () => {
5
+ let loginPage: LoginPage;
6
+
7
+ test.beforeEach(async ({ page }) => {
8
+ loginPage = new LoginPage(page);
9
+ await loginPage.navigate();
10
+ });
11
+
12
+ test('TC-AUTH-01: Successful login with valid credentials', async ({ page }) => {
13
+ await loginPage.login('admin@enterprise.local', 'SecurePass123!');
14
+ await expect(page).toHaveURL(/.*dashboard/);
15
+ });
16
+
17
+ test('TC-AUTH-02: Show error message when password is invalid', async () => {
18
+ await loginPage.login('admin@enterprise.local', 'WrongPassword');
19
+ await expect(loginPage.alertError).toBeVisible();
20
+ await expect(loginPage.alertError).toContainText('Tài khoản hoặc mật khẩu không chính xác');
21
+ });
22
+ });
@@ -0,0 +1,33 @@
1
+ import { test, expect } from '@playwright/test';
2
+ import { CustomerPage } from '../pages/CustomerPage';
3
+ import { BasePage } from '../pages/BasePage';
4
+
5
+ test.describe('Customer Management — Clean POM & Idempotent Teardown', () => {
6
+ let customerPage: CustomerPage;
7
+ const createdCustomerNames: string[] = [];
8
+
9
+ test.beforeEach(async ({ page }) => {
10
+ customerPage = new CustomerPage(page);
11
+ await customerPage.navigate();
12
+ });
13
+
14
+ test.afterEach(async () => {
15
+ // Teardown: Clean up created entities to prevent test junk accumulation
16
+ for (const name of createdCustomerNames) {
17
+ await customerPage.deleteCustomerByName(name);
18
+ }
19
+ createdCustomerNames.length = 0;
20
+ });
21
+
22
+ test('TC-CUST-01: Create new customer with unique identifier', async () => {
23
+ const customerName = BasePage.uniqueCode('CUST_');
24
+ const customerPhone = '0987654321';
25
+ createdCustomerNames.push(customerName);
26
+
27
+ await customerPage.createCustomer(customerName, customerPhone);
28
+ await expect(customerPage.toastSuccess).toBeVisible();
29
+
30
+ await customerPage.searchCustomer(customerName);
31
+ await expect(customerPage.tableRows.first()).toContainText(customerName);
32
+ });
33
+ });
@@ -0,0 +1,14 @@
1
+ # Sample Custom 3rd-Party Plugin for Synapse Hub
2
+
3
+ This is a reference implementation of a 3rd-party extension plugin for Synapse Hub.
4
+
5
+ ## Included Components
6
+ - **Plugin Manifest:** `plugin.json` declaring metadata and dependencies.
7
+ - **Skill:** `skills/custom-security-headers-audit/SKILL.md` (OWASP ASVS HTTP Security Headers).
8
+ - **Tool:** `tools/custom_security_headers.py` (Autonomous header compliance auditor).
9
+ - **Example Fixture:** `skills/custom-security-headers-audit/examples/audit_fixture.json`.
10
+
11
+ ## Quick Test
12
+ ```bash
13
+ python tools/custom_security_headers.py --headers skills/custom-security-headers-audit/examples/audit_fixture.json --report report.json
14
+ ```
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "name": "sample-custom-plugin",
4
+ "version": "1.0.0",
5
+ "description": "Demonstration 3rd-party plugin extending Synapse Hub with custom HTTP security headers audit capabilities.",
6
+ "author": "Synapse Community Contributor",
7
+ "license": "MIT",
8
+ "repository": "https://github.com/TeeVee998/Synapse-Hub",
9
+ "skills": [
10
+ "custom-security-headers-audit"
11
+ ],
12
+ "tools": [
13
+ "tools/custom_security_headers.py"
14
+ ],
15
+ "minHubVersion": "2.2.0"
16
+ }
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: custom-security-headers-audit
3
+ description: Audits web endpoints for mandatory HTTP security headers (CSP, HSTS, X-Content-Type-Options) with compliance grading.
4
+ version: 1.0.0
5
+ category: verification_and_resilience
6
+ ---
7
+
8
+ # Custom Security Headers Audit Skill
9
+
10
+ ## Overview
11
+ Evaluates target web applications and API gateways against OWASP ASVS v4.0 Section 14 (Configuration) security header requirements.
12
+
13
+ ## Key Capabilities
14
+ - Evaluates Content-Security-Policy (CSP) strength.
15
+ - Verifies Strict-Transport-Security (HSTS) with preloading.
16
+ - Asserts presence of `X-Content-Type-Options: nosniff`.
17
+ - Asserts presence of `X-Frame-Options: DENY` or `SAMEORIGIN`.
18
+ - Checks Referrer-Policy and Permissions-Policy.
19
+
20
+ ## Usage
21
+ Execute the bundled audit tool against an endpoint or mock response headers:
22
+
23
+ ```bash
24
+ python tools/custom_security_headers.py --headers examples/audit_fixture.json --report report.json
25
+ ```
26
+
27
+ ## Evidence & Verification
28
+ - Emits structured JSON and Markdown audit reports with CVSS severity rankings.
29
+ - Zero external runtime dependencies (relies purely on standard library).
@@ -0,0 +1,8 @@
1
+ {
2
+ "Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload",
3
+ "X-Content-Type-Options": "nosniff",
4
+ "X-Frame-Options": "DENY",
5
+ "Content-Security-Policy": "default-src 'self'; script-src 'self'; object-src 'none';",
6
+ "Referrer-Policy": "strict-origin-when-cross-origin",
7
+ "Permissions-Policy": "geolocation=(), microphone=(), camera=()"
8
+ }
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Custom Security Headers Auditor (Sample 3rd-Party Plugin Tool)
4
+ -------------------------------------------------------------
5
+ Audits HTTP response headers for OWASP ASVS compliance:
6
+ - Strict-Transport-Security (HSTS)
7
+ - X-Content-Type-Options
8
+ - X-Frame-Options
9
+ - Content-Security-Policy (CSP)
10
+ - Referrer-Policy
11
+ - Permissions-Policy
12
+ """
13
+
14
+ import sys
15
+ import os
16
+ import json
17
+ import argparse
18
+ from typing import Dict, Any, List
19
+
20
+ MANDATORY_HEADERS = {
21
+ "strict-transport-security": {
22
+ "severity": "HIGH",
23
+ "description": "Protects against protocol downgrade attacks and cookie hijacking.",
24
+ "recommended": "max-age=31536000; includeSubDomains"
25
+ },
26
+ "x-content-type-options": {
27
+ "severity": "MEDIUM",
28
+ "description": "Prevents MIME-type sniffing.",
29
+ "recommended": "nosniff"
30
+ },
31
+ "x-frame-options": {
32
+ "severity": "MEDIUM",
33
+ "description": "Mitigates clickjacking attacks.",
34
+ "recommended": "DENY"
35
+ },
36
+ "content-security-policy": {
37
+ "severity": "HIGH",
38
+ "description": "Restricts sources of executable scripts, objects, and styles.",
39
+ "recommended": "default-src 'self'"
40
+ },
41
+ "referrer-policy": {
42
+ "severity": "LOW",
43
+ "description": "Protects referrer data from leaking across origins.",
44
+ "recommended": "strict-origin-when-cross-origin"
45
+ }
46
+ }
47
+
48
+
49
+ def audit_headers(headers: Dict[str, str]) -> Dict[str, Any]:
50
+ normalized = {k.lower(): v for k, v in headers.items()}
51
+ findings: List[Dict[str, Any]] = []
52
+ missing_count = 0
53
+
54
+ for h_name, meta in MANDATORY_HEADERS.items():
55
+ if h_name not in normalized:
56
+ missing_count += 1
57
+ findings.append({
58
+ "header": h_name,
59
+ "status": "MISSING",
60
+ "severity": meta["severity"],
61
+ "description": meta["description"],
62
+ "recommendation": meta["recommended"]
63
+ })
64
+ else:
65
+ findings.append({
66
+ "header": h_name,
67
+ "status": "PRESENT",
68
+ "severity": "INFO",
69
+ "value": normalized[h_name]
70
+ })
71
+
72
+ score = round(max(0.0, 100.0 - (missing_count * 20.0)), 1)
73
+ status = "COMPLIANT" if score >= 80.0 else "NON_COMPLIANT"
74
+
75
+ return {
76
+ "score": score,
77
+ "status": status,
78
+ "total_rules": len(MANDATORY_HEADERS),
79
+ "missing_headers": missing_count,
80
+ "findings": findings
81
+ }
82
+
83
+
84
+ def main():
85
+ parser = argparse.ArgumentParser(description="Audit HTTP Security Headers")
86
+ parser.add_argument("--headers", help="Path to JSON file containing response headers")
87
+ parser.add_argument("--report", default="security_headers_report.json", help="Output JSON report path")
88
+ args = parser.parse_args()
89
+
90
+ headers_data = {}
91
+ if args.headers and os.path.exists(args.headers):
92
+ with open(args.headers, "r", encoding="utf-8") as f:
93
+ headers_data = json.load(f)
94
+ else:
95
+ # Default mock headers for demonstration
96
+ headers_data = {
97
+ "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
98
+ "X-Content-Type-Options": "nosniff",
99
+ "X-Frame-Options": "DENY",
100
+ "Content-Security-Policy": "default-src 'self'"
101
+ }
102
+
103
+ results = audit_headers(headers_data)
104
+
105
+ print("==========================================================")
106
+ print(" HTTP SECURITY HEADERS AUDIT (OWASP ASVS) ")
107
+ print("==========================================================")
108
+ print(f"Compliance Score : {results['score']}%")
109
+ print(f"Audit Status : {results['status']}")
110
+ print(f"Missing Headers : {results['missing_headers']}")
111
+
112
+ for f in results["findings"]:
113
+ icon = "[PASS]" if f["status"] == "PRESENT" else "[WARN]"
114
+ print(f" {icon} {f['header']}: {f['status']}")
115
+
116
+ with open(args.report, "w", encoding="utf-8") as f:
117
+ json.dump(results, f, indent=2)
118
+ print(f"\nReport written to: {args.report}")
119
+ print("==========================================================")
120
+
121
+ return 0 if results["score"] >= 80.0 else 1
122
+
123
+
124
+ if __name__ == "__main__":
125
+ sys.exit(main())
@@ -0,0 +1,22 @@
1
+ # Industry QA Practice Corpus & Benchmarks
2
+
3
+ This directory contains real-world enterprise requirements specifications and test case artifacts across diverse domains (CRM, E-Commerce, Project Management, and REST APIs).
4
+
5
+ ## Structure
6
+
7
+ ```text
8
+ examples/practices/
9
+ ├── requirements/
10
+ │ ├── crm/ # Modular CRM functional specs (Auth, Customers, Projects, Contracts, Tasks)
11
+ │ ├── ecommerce/ # Category, catalog, and brand management business rules
12
+ │ └── jira/ # Jira epic/story export samples with user story attachments
13
+ └── testcases/
14
+ ├── crm/ # Standard enterprise UI manual test cases (AI-RBT format)
15
+ └── api/ # OpenAPI / REST API acceptance matrices
16
+ ```
17
+
18
+ ## Purpose
19
+
20
+ 1. **Benchmark AI Test Generation:** Serves as golden inputs to evaluate prompt engineering and AI-RBT generation workflows (`/generate_manual_testcases_rbt`, `/generate_testcases_from_requirements`).
21
+ 2. **Offline Few-Shot Learning:** Realistic domain context for model fine-tuning and in-context learning without leaking proprietary customer data.
22
+ 3. **Excel Export Validation:** Source markdown tables for verifying `agent-qa export-excel` / `tools/md_to_xlsx.py`.