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.
- package/.agents/agents/failure-analyst.md +11 -0
- package/.agents/agents/live-explorer.md +28 -0
- package/.agents/agents/orchestrator.md +20 -4
- package/.agents/agents/pom-crafter.md +12 -0
- package/.agents/agents/quality-gatekeeper.md +19 -4
- package/.agents/agents/test-runner.md +11 -0
- package/.agents/rules/communication-style.md +40 -0
- package/.agents/rules/context-engineering.md +23 -0
- package/.agents/rules/git-push-protocol.md +10 -16
- package/.agents/rules/graphify.md +14 -14
- package/.agents/rules/mandatory-playwright-live.md +29 -29
- package/.agents/rules/mobile_appium_rules.md +132 -0
- package/.agents/rules/performance_testing_rules.md +74 -0
- package/.agents/rules/systematic-debugging.md +6 -6
- package/.agents/skills/agent-orchestration-multi-agent-optimize/SKILL.md +64 -215
- package/.agents/skills/agent-orchestration-multi-agent-optimize/examples/swarm_workload_config.json +12 -0
- package/.agents/skills/antigravity-test-sentinel/SKILL.md +3 -3
- package/.agents/skills/antigravity-test-sentinel/examples/dod_gate_policy.json +11 -0
- package/.agents/skills/api-network-mocking-interception/SKILL.md +1 -1
- package/.agents/skills/api-network-mocking-interception/examples/network_route_stub.json +9 -0
- package/.agents/skills/api-spec-to-e2e-matrix/SKILL.md +9 -9
- package/.agents/skills/api-spec-to-e2e-matrix/examples/sample_openapi.json +19 -0
- package/.agents/skills/architecture-decision-records/SKILL.md +35 -412
- package/.agents/skills/architecture-decision-records/examples/0001-record-architecture-decisions.md +12 -0
- package/.agents/skills/auth-session-and-cookie-manager/SKILL.md +1 -1
- package/.agents/skills/auth-session-and-cookie-manager/examples/storage_state_sample.json +11 -0
- package/.agents/skills/backend-load-and-stress-patterns/SKILL.md +80 -186
- package/.agents/skills/backend-load-and-stress-patterns/examples/k6_load_test_sample.js +13 -0
- package/.agents/skills/bats-testing-patterns/SKILL.md +1 -1
- package/.agents/skills/bats-testing-patterns/examples/cli_runner_test.bats +6 -0
- package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -614
- package/.agents/skills/clean-pom-crafter/SKILL.md +21 -3
- package/.agents/skills/clean-pom-crafter/examples/standard_test_case.groovy +28 -28
- package/.agents/skills/clean-pom-crafter/references/pom_patterns.groovy +138 -138
- package/.agents/skills/code-refactoring-refactor-clean/SKILL.md +2 -2
- package/.agents/skills/code-refactoring-refactor-clean/examples/refactored_page_sample.groovy +9 -0
- package/.agents/skills/db-state-verifier-and-seeder/SKILL.md +5 -5
- package/.agents/skills/db-state-verifier-and-seeder/examples/db_fixture_seed.json +12 -0
- package/.agents/skills/e2e-testing-patterns/SKILL.md +1 -1
- package/.agents/skills/e2e-testing-patterns/examples/playwright_sharded_config.ts +12 -0
- package/.agents/skills/e2e-testing-patterns/resources/implementation-playbook.md +522 -522
- package/.agents/skills/failure-autopsy-and-healing/SKILL.md +17 -3
- package/.agents/skills/failure-autopsy-and-healing/examples/sample_junit_failure.xml +8 -0
- package/.agents/skills/failure-autopsy-and-healing/references/healing_matrix.md +64 -64
- package/.agents/skills/failure-autopsy-and-healing/references/qa_investigation_protocol.md +56 -56
- package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +98 -98
- package/.agents/skills/file-and-report-validator/SKILL.md +1 -1
- package/.agents/skills/file-and-report-validator/examples/sample_export_schema.json +14 -0
- package/.agents/skills/flaky-test-sentinel-and-quarantine/SKILL.md +3 -3
- package/.agents/skills/flaky-test-sentinel-and-quarantine/examples/quarantine_registry.json +11 -0
- package/.agents/skills/gherkin-to-suite/SKILL.md +103 -0
- package/.agents/skills/gherkin-to-suite/examples/checkout.feature +39 -0
- package/.agents/skills/gherkin-to-suite/examples/suite_report_sample.json +334 -0
- package/.agents/skills/github-actions-templates/SKILL.md +47 -304
- package/.agents/skills/github-actions-templates/examples/matrix_test_pipeline.yml +8 -0
- package/.agents/skills/graphify-impact-analyzer/SKILL.md +6 -6
- package/.agents/skills/graphify-impact-analyzer/examples/dependency_blast_radius.json +8 -0
- package/.agents/skills/katalon-cli-runner/SKILL.md +2 -2
- package/.agents/skills/katalon-cli-runner/examples/headless_kre_exec.sh +3 -0
- package/.agents/skills/katalon-cli-runner/references/groovy-patterns.md +209 -209
- package/.agents/skills/katalon-cli-runner/references/katalon-api.md +155 -155
- package/.agents/skills/katalon-cli-runner/references/runner_commands.md +67 -67
- package/.agents/skills/lam-script-generator/SKILL.md +42 -1
- package/.agents/skills/lam-script-generator/examples/user_story_sample.md +8 -0
- package/.agents/skills/lean-code-ladder/SKILL.md +83 -0
- package/.agents/skills/lean-code-ladder/examples/ladder_walkthrough.md +37 -0
- package/.agents/skills/meta-prompt-crafter/SKILL.md +107 -0
- package/.agents/skills/meta-prompt-crafter/examples/qa_prompt_template.md +35 -0
- package/.agents/skills/persistent-planning-files/SKILL.md +108 -0
- package/.agents/skills/persistent-planning-files/examples/task_plan_example.md +56 -0
- package/.agents/skills/playwright-live-interaction/SKILL.md +49 -1
- package/.agents/skills/playwright-live-interaction/examples/live_probe_script.js +5 -0
- package/.agents/skills/playwright-live-interaction/references/advanced_superpowers.md +160 -160
- package/.agents/skills/playwright-live-interaction/references/compact_accessibility_snapshots.md +75 -75
- package/.agents/skills/playwright-live-interaction/references/recipes.md +388 -388
- package/.agents/skills/playwright-live-interaction/references/swarm_orchestration.md +134 -134
- package/.agents/skills/playwright-webapp-testing/SKILL.md +93 -0
- package/.agents/skills/playwright-webapp-testing/examples/server_lifecycle_playwright.py +63 -0
- package/.agents/skills/rbt-manual-testing/SKILL.md +150 -0
- package/.agents/skills/rbt-manual-testing/examples/checkout_rbt_manual_suite.md +25 -0
- package/.agents/skills/security-dast-sentinel/SKILL.md +54 -135
- package/.agents/skills/security-dast-sentinel/examples/dast_scan_config.json +10 -0
- package/.agents/skills/self-healing-locator/SKILL.md +24 -10
- package/.agents/skills/self-healing-locator/examples/aom_diff_sample.json +16 -0
- package/.agents/skills/skillspector-security-guard/SKILL.md +32 -90
- package/.agents/skills/skillspector-security-guard/examples/safe_mcp_config.json +12 -0
- package/.agents/skills/surgical-coding-principles/SKILL.md +89 -0
- package/.agents/skills/surgical-coding-principles/examples/surgical_vs_scope_creep.md +46 -0
- package/.agents/skills/synthetic-test-data-generator/SKILL.md +3 -3
- package/.agents/skills/synthetic-test-data-generator/examples/idempotent_data_recipe.json +9 -0
- package/.agents/skills/systematic-debugging/SKILL.md +100 -0
- package/.agents/skills/systematic-debugging/examples/four_phase_case.md +44 -0
- package/.agents/skills/test-driven-development/SKILL.md +114 -0
- package/.agents/skills/test-driven-development/examples/red_green_refactor_qa.md +78 -0
- package/.agents/skills/token-and-context-optimizer/SKILL.md +1 -1
- package/.agents/skills/token-and-context-optimizer/examples/distilled_log_sample.txt +3 -0
- package/.agents/skills/verification-before-completion/SKILL.md +100 -0
- package/.agents/skills/verification-before-completion/examples/evidence_log_example.md +46 -0
- package/.agents/skills/visual-regression-sentinel/SKILL.md +21 -1
- package/.agents/skills/visual-regression-sentinel/examples/visual_mask_rules.json +9 -0
- package/.agents/skills/wcag-audit-patterns/SKILL.md +3 -3
- package/.agents/skills/wcag-audit-patterns/examples/wcag_compliance_checklist.json +10 -0
- package/.agents/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -541
- package/.agents/skills/web-vitals-and-performance-profiler/SKILL.md +1 -1
- package/.agents/skills/web-vitals-and-performance-profiler/examples/cwv_budget_policy.json +6 -0
- package/.agents/templates/completion_report.md +57 -57
- package/.agents/workflows/analyze_requirement_document.md +18 -0
- package/.agents/workflows/export_testcases_excel.md +32 -0
- package/.agents/workflows/generate_combinatorial_test_data.md +28 -0
- package/.agents/workflows/generate_cross_module_test_plan.md +37 -0
- package/.agents/workflows/generate_manual_testcases_rbt.md +56 -0
- package/.agents/workflows/generate_requirements_from_website.md +25 -0
- package/.agents/workflows/generate_testcases_from_requirements.md +21 -0
- package/.agents/workflows/graphify.md +10 -10
- package/.agents/workflows/verify.md +2 -2
- package/.cursor/rules/language.mdc +7 -7
- package/.cursor/rules/synapse-qa.mdc +23 -0
- package/.cursorrules +7 -0
- package/.pre-commit-hooks.yaml +14 -0
- package/.windsurfrules +7 -0
- package/AGENTS.md +54 -15
- package/CLAUDE.md +35 -12
- package/LICENSE +30 -0
- package/NOTICE +180 -0
- package/README.en.md +325 -0
- package/README.md +247 -516
- package/action.yml +51 -0
- package/benchmarks/qa_eval/README.md +71 -0
- package/benchmarks/qa_eval/build_dataset.py +677 -0
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +22 -0
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +22 -0
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +22 -0
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +22 -0
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +22 -0
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +21 -0
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +21 -0
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +21 -0
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +21 -0
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +21 -0
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +23 -0
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +23 -0
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +23 -0
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +23 -0
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +23 -0
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +22 -0
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +22 -0
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +22 -0
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +22 -0
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +23 -0
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +22 -0
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +22 -0
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +22 -0
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +22 -0
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +22 -0
- package/benchmarks/qa_eval/eval_runner.py +418 -0
- package/benchmarks/qa_eval/reports/AB_METHODOLOGY_REPORT.md +83 -0
- package/benchmarks/qa_eval/reports/BENCHMARK_REPORT.md +69 -0
- package/benchmarks/qa_eval/reports/eval_results.json +105 -0
- package/bin/agent-qa.js +10 -3
- package/docs/ARCHITECTURE.md +107 -0
- package/docs/CI_CD_INTEGRATION.md +94 -0
- package/docs/CLI_REFERENCE.md +157 -0
- package/docs/CONTRIBUTING.md +91 -0
- package/docs/PLUGIN_DEVELOPMENT_GUIDE.md +126 -0
- package/docs/TOKEN_QUOTA_PLAYBOOK.md +41 -0
- package/docs/adopted-ecosystem-tools.md +87 -0
- package/docs/schemas/synapse.config.schema.json +64 -0
- package/examples/cypress-ecommerce-suite/README.md +45 -0
- package/examples/cypress-ecommerce-suite/cypress/e2e/checkout.cy.js +17 -0
- package/examples/cypress-ecommerce-suite/cypress/pages/BasePage.js +29 -0
- package/examples/cypress-ecommerce-suite/cypress/pages/CartPage.js +51 -0
- package/examples/cypress-ecommerce-suite/cypress.config.js +13 -0
- package/examples/cypress-ecommerce-suite/package.json +13 -0
- package/examples/katalon-suite/Keywords/pages/BasePage.groovy +19 -0
- package/examples/katalon-suite/Keywords/pages/DashboardPage.groovy +29 -0
- package/examples/katalon-suite/Keywords/pages/LoginPage.groovy +45 -0
- package/examples/katalon-suite/Profiles/default.glbl +12 -0
- package/examples/katalon-suite/README.md +18 -0
- package/examples/katalon-suite/Scripts/Auth/TC_LoginSuccess/Script1234567890.groovy +12 -0
- package/examples/katalon-suite/Scripts/Dashboard/TC_ViewSummary/Script1234567891.groovy +15 -0
- package/examples/katalon-suite/katalon_suite.prj +21 -0
- package/examples/playwright-crm-suite/README.md +40 -0
- package/examples/playwright-crm-suite/package.json +14 -0
- package/examples/playwright-crm-suite/pages/BasePage.ts +37 -0
- package/examples/playwright-crm-suite/pages/CustomerPage.ts +57 -0
- package/examples/playwright-crm-suite/pages/LoginPage.ts +32 -0
- package/examples/playwright-crm-suite/playwright.config.ts +27 -0
- package/examples/playwright-crm-suite/tests/auth.spec.ts +22 -0
- package/examples/playwright-crm-suite/tests/customers.spec.ts +33 -0
- package/examples/plugins/sample-custom-plugin/README.md +14 -0
- package/examples/plugins/sample-custom-plugin/plugin.json +16 -0
- package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/SKILL.md +29 -0
- package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/examples/audit_fixture.json +8 -0
- package/examples/plugins/sample-custom-plugin/tools/custom_security_headers.py +125 -0
- package/examples/practices/README.md +22 -0
- package/examples/practices/requirements/crm/requirements_contracts.md +292 -0
- package/examples/practices/requirements/crm/requirements_customers.md +462 -0
- package/examples/practices/requirements/crm/requirements_login.md +202 -0
- package/examples/practices/requirements/crm/requirements_projects.md +396 -0
- package/examples/practices/requirements/crm/requirements_tasks.md +343 -0
- package/examples/practices/requirements/ecommerce/requirements_category_brand.txt +402 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-1/2026-04-03_04-28-27.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-1/KAN-1_requirement.md +52 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-19.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-57.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-4/KAN-4_requirement.md +119 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-5_overview.md +9 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-08.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-23.png +0 -0
- package/examples/practices/requirements/jira/KAN-5/KAN-6/KAN-6_requirement.md +32 -0
- package/examples/practices/testcases/api/book_management_api_test_cases.md +144 -0
- package/examples/practices/testcases/api/user_management_api_test_cases.md +139 -0
- package/examples/practices/testcases/crm/test_cases_crm_login.md +148 -0
- package/examples/practices/testcases/crm/test_cases_customers.md +156 -0
- package/examples/pytest-api-suite/README.md +45 -0
- package/examples/pytest-api-suite/conftest.py +31 -0
- package/examples/pytest-api-suite/pages/user_api_client.py +36 -0
- package/examples/pytest-api-suite/requirements.txt +2 -0
- package/examples/pytest-api-suite/tests/test_user_api.py +44 -0
- package/examples/selenium-suite/README.md +18 -0
- package/examples/selenium-suite/pages/base_page.py +27 -0
- package/examples/selenium-suite/pages/login_page.py +29 -0
- package/examples/selenium-suite/pages/order_page.py +25 -0
- package/examples/selenium-suite/pytest.ini +6 -0
- package/examples/selenium-suite/requirements.txt +2 -0
- package/examples/selenium-suite/tests/test_login.py +10 -0
- package/examples/selenium-suite/tests/test_order.py +10 -0
- package/package.json +22 -7
- package/scripts/generate_skill_examples.py +244 -0
- package/scripts/install.ps1 +112 -0
- package/scripts/install_global_plugin.ps1 +94 -0
- package/scripts/install_global_plugin.sh +49 -0
- package/scripts/lint_skills.ps1 +57 -0
- package/scripts/package_dist.py +323 -0
- package/scripts/setup.sh +59 -0
- package/scripts/update_hub.ps1 +19 -0
- package/scripts/update_hub.sh +15 -0
- package/skills_manifest.json +209 -6
- package/synapse.config.json +30 -0
- package/templates/PROJECT_AI_GUIDE_TEMPLATE.md +7 -7
- package/templates/PROJECT_STATE_TEMPLATE.md +1 -1
- package/templates/ai_bridges/CLAUDE.md +33 -16
- package/templates/ai_bridges/copilot-instructions.md +14 -21
- package/templates/ai_bridges/cursor_synapse_qa.mdc +17 -20
- package/templates/ai_bridges/windsurfrules +21 -21
- package/templates/ci/github-actions-synapse.yml +71 -4
- package/templates/welcome.html.tmpl +1674 -0
- package/tools/.infer_baseline.json +1102 -0
- package/tools/TOOLS_RUNBOOK.md +92 -130
- package/tools/__init__.py +26 -0
- package/tools/agent_canary.py +501 -501
- package/tools/analyze_project.py +31 -17
- package/tools/api_fuzzer.py +278 -6
- package/tools/author_integrity.py +6 -6
- package/tools/auto_heal.py +1 -1
- package/tools/browser_helpers.js +105 -7
- package/tools/bug_reporter.py +31 -1
- package/tools/bump_version.py +23 -3
- package/tools/cache_resolver.py +248 -14
- package/tools/check_env.py +55 -14
- package/tools/check_version_sync.py +153 -0
- package/tools/ci_healing_hook.py +1 -1
- package/tools/cli.py +263 -13
- package/tools/count_tokens.py +1257 -0
- package/tools/dashboard_generator.py +2638 -0
- package/tools/db_sandbox.py +198 -20
- package/tools/e2e_flow_prober.ps1 +12 -64
- package/tools/e2e_flow_prober.py +99 -0
- package/tools/e2e_flow_prober.sh +4 -0
- package/tools/flaky_detector.py +4 -3
- package/tools/generate_allure_report.ps1 +12 -29
- package/tools/generate_allure_report.py +77 -0
- package/tools/generate_allure_report.sh +4 -0
- package/tools/generate_jmx_plan.py +257 -58
- package/tools/generate_test_reports.ps1 +12 -134
- package/tools/generate_test_reports.py +133 -0
- package/tools/generate_test_reports.sh +4 -0
- package/tools/gherkin_suite.py +758 -0
- package/tools/git_pre_commit_guard.py +12 -6
- package/tools/goldfish_review.py +366 -0
- package/tools/heal_pr_automator.py +1 -1
- package/tools/heuristic_locator_matcher.py +170 -21
- package/tools/infer_linter.py +612 -70
- package/tools/lint_ai_docs.py +64 -0
- package/tools/matrix_sharder.py +1 -1
- package/tools/mcp_excel_server.ps1 +12 -250
- package/tools/mcp_excel_server.py +249 -0
- package/tools/mcp_excel_server.sh +4 -0
- package/tools/mcp_server.py +368 -144
- package/tools/md_to_xlsx.py +307 -0
- package/tools/micro_mutator.py +300 -69
- package/tools/omni_transpiler.py +2 -2
- package/tools/output_formatter.py +128 -0
- package/tools/pinpoint_failure.py +88 -88
- package/tools/project_state.py +2 -2
- package/tools/repo_map.py +1 -1
- package/tools/safety_firewall.py +196 -45
- package/tools/setup_project.py +294 -30
- package/tools/spec_drift_sentinel.py +439 -0
- package/tools/sync_agent_rules.py +248 -0
- package/tools/telemetry_correlator.py +45 -0
- package/tools/test_impact.py +51 -12
- package/tools/tms_sync_bridge.py +21 -5
- package/tools/universal_ir.py +3 -0
- package/tools/update_sentinel.py +87 -15
- package/tools/verify_all.ps1 +13 -0
- package/tools/verify_all.py +463 -79
- package/tools/visual_diff_canvas.py +1 -0
- package/tools/visual_som_helper.py +1 -1
- package/tools/watch_mode.py +305 -0
- package/tools/welcome_page.py +291 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Generates standard examples/ directory and realistic fixtures for all skills (Task B3).
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
import sys
|
|
8
|
+
import json
|
|
9
|
+
|
|
10
|
+
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
11
|
+
REPO_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, ".."))
|
|
12
|
+
SKILLS_DIR = os.path.join(REPO_ROOT, ".agents", "skills")
|
|
13
|
+
|
|
14
|
+
EXAMPLES_MAP = {
|
|
15
|
+
'agent-orchestration-multi-agent-optimize': ('swarm_workload_config.json', json.dumps({
|
|
16
|
+
'swarm': 'LeadQAOrchestrator',
|
|
17
|
+
'subagents': ['live-explorer', 'pom-crafter', 'test-runner', 'failure-analyst', 'quality-gatekeeper'],
|
|
18
|
+
'tokenBudgetPerAgent': 1200,
|
|
19
|
+
'concurrency': 3
|
|
20
|
+
}, indent=2)),
|
|
21
|
+
'antigravity-test-sentinel': ('dod_gate_policy.json', json.dumps({
|
|
22
|
+
'policyName': 'Enterprise-DoD-Gate-0-to-8',
|
|
23
|
+
'enforceGates': ['Gate-0-Integrity', 'Gate-1-UTF8-NoBOM', 'Gate-3-CleanPOM', 'Gate-7-InferLinter', 'Gate-8-MicroMutator'],
|
|
24
|
+
'minMutationScore': 80.0
|
|
25
|
+
}, indent=2)),
|
|
26
|
+
'api-network-mocking-interception': ('network_route_stub.json', json.dumps({
|
|
27
|
+
'route': '**/api/v1/checkout',
|
|
28
|
+
'method': 'POST',
|
|
29
|
+
'status': 200,
|
|
30
|
+
'response': {'orderId': 'ORD-AUTO-998822', 'status': 'CONFIRMED'}
|
|
31
|
+
}, indent=2)),
|
|
32
|
+
'api-spec-to-e2e-matrix': ('sample_openapi.json', json.dumps({
|
|
33
|
+
'openapi': '3.0.0',
|
|
34
|
+
'info': {'title': 'Payment API', 'version': '1.0.0'},
|
|
35
|
+
'paths': {
|
|
36
|
+
'/payments': {
|
|
37
|
+
'post': {
|
|
38
|
+
'summary': 'Create payment',
|
|
39
|
+
'responses': {'201': {'description': 'Created'}}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}, indent=2)),
|
|
44
|
+
'architecture-decision-records': ('0001-record-architecture-decisions.md', """# 1. Record architecture decisions
|
|
45
|
+
|
|
46
|
+
Date: 2026-10-30
|
|
47
|
+
|
|
48
|
+
## Status
|
|
49
|
+
Accepted
|
|
50
|
+
|
|
51
|
+
## Context
|
|
52
|
+
We need to record technical architecture decisions in ADR format.
|
|
53
|
+
|
|
54
|
+
## Decision
|
|
55
|
+
We will use Markdown ADR files stored in docs/adr/.
|
|
56
|
+
"""),
|
|
57
|
+
'auth-session-and-cookie-manager': ('storage_state_sample.json', json.dumps({
|
|
58
|
+
'cookies': [
|
|
59
|
+
{'name': 'session_id', 'value': 'sess_auto_998', 'domain': 'example.com', 'path': '/'}
|
|
60
|
+
],
|
|
61
|
+
'origins': []
|
|
62
|
+
}, indent=2)),
|
|
63
|
+
'backend-load-and-stress-patterns': ('k6_load_test_sample.js', """import http from 'k6/http';
|
|
64
|
+
import { check, sleep } from 'k6';
|
|
65
|
+
|
|
66
|
+
export const options = {
|
|
67
|
+
vus: 10,
|
|
68
|
+
duration: '30s',
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export default function () {
|
|
72
|
+
const res = http.get('https://test.k6.io');
|
|
73
|
+
check(res, { 'status was 200': (r) => r.status == 200 });
|
|
74
|
+
sleep(1);
|
|
75
|
+
}
|
|
76
|
+
"""),
|
|
77
|
+
'bats-testing-patterns': ('cli_runner_test.bats', """#!/usr/bin/env bats
|
|
78
|
+
|
|
79
|
+
@test 'verify CLI returns version' {
|
|
80
|
+
run python3 tools/cli.py --version
|
|
81
|
+
[ "$status" -eq 0 ]
|
|
82
|
+
}
|
|
83
|
+
"""),
|
|
84
|
+
'code-refactoring-refactor-clean': ('refactored_page_sample.groovy', """package pages
|
|
85
|
+
|
|
86
|
+
class UserManagementPage extends BasePage {
|
|
87
|
+
static final String USER_TABLE_ROW = "table#users tbody tr"
|
|
88
|
+
|
|
89
|
+
static boolean verifyUserActive(String email) {
|
|
90
|
+
return verifyElementPresent(uniqueLocator(USER_TABLE_ROW, email))
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
"""),
|
|
94
|
+
'db-state-verifier-and-seeder': ('db_fixture_seed.json', json.dumps({
|
|
95
|
+
'table': 'tenants',
|
|
96
|
+
'operation': 'INSERT',
|
|
97
|
+
'records': [
|
|
98
|
+
{'tenant_id': 'AUTO_TENANT_01', 'status': 'ACTIVE', 'plan': 'ENTERPRISE'}
|
|
99
|
+
],
|
|
100
|
+
'teardown': 'DELETE FROM tenants WHERE tenant_id = :tenant_id'
|
|
101
|
+
}, indent=2)),
|
|
102
|
+
'e2e-testing-patterns': ('playwright_sharded_config.ts', """import { defineConfig, devices } from '@playwright/test';
|
|
103
|
+
|
|
104
|
+
export default defineConfig({
|
|
105
|
+
testDir: './tests',
|
|
106
|
+
fullyParallel: true,
|
|
107
|
+
retries: 2,
|
|
108
|
+
workers: process.env.CI ? 4 : undefined,
|
|
109
|
+
use: {
|
|
110
|
+
headless: true,
|
|
111
|
+
trace: 'on-first-retry',
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
"""),
|
|
115
|
+
'failure-autopsy-and-healing': ('sample_junit_failure.xml', """<?xml version="1.0" encoding="UTF-8"?>
|
|
116
|
+
<testsuites>
|
|
117
|
+
<testsuite name="AuthenticationSuite" tests="1" failures="1">
|
|
118
|
+
<testcase name="testLoginFailure" classname="AuthTest">
|
|
119
|
+
<failure message="Timeout 30000ms exceeded waiting for locator('#submit-btn')" type="ElementNotFoundError"/>
|
|
120
|
+
</testcase>
|
|
121
|
+
</testsuite>
|
|
122
|
+
</testsuites>
|
|
123
|
+
"""),
|
|
124
|
+
'file-and-report-validator': ('sample_export_schema.json', json.dumps({
|
|
125
|
+
'expectedHeaders': ['Order ID', 'Customer Name', 'Amount', 'Date', 'Status'],
|
|
126
|
+
'rowCountRange': [1, 5000],
|
|
127
|
+
'dateFormat': 'YYYY-MM-DD'
|
|
128
|
+
}, indent=2)),
|
|
129
|
+
'flaky-test-sentinel-and-quarantine': ('quarantine_registry.json', json.dumps({
|
|
130
|
+
'quarantinedTests': [
|
|
131
|
+
{
|
|
132
|
+
'testId': 'TC-CHECKOUT-881',
|
|
133
|
+
'flakinessScore': 0.35,
|
|
134
|
+
'reason': 'Intermittent 3rd-party payment gateway timeout',
|
|
135
|
+
'quarantineDate': '2026-10-30',
|
|
136
|
+
'ticket': 'QA-1204'
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}, indent=2)),
|
|
140
|
+
'github-actions-templates': ('matrix_test_pipeline.yml', """name: Automated E2E Matrix
|
|
141
|
+
on: [push, pull_request]
|
|
142
|
+
jobs:
|
|
143
|
+
test:
|
|
144
|
+
runs-on: ubuntu-latest
|
|
145
|
+
steps:
|
|
146
|
+
- uses: actions/checkout@v4
|
|
147
|
+
- run: npx playwright test
|
|
148
|
+
"""),
|
|
149
|
+
'graphify-impact-analyzer': ('dependency_blast_radius.json', json.dumps({
|
|
150
|
+
'modifiedFile': 'src/pages/CheckoutPage.ts',
|
|
151
|
+
'impactedSuites': ['tests/e2e/checkout.spec.ts', 'tests/e2e/payment.spec.ts'],
|
|
152
|
+
'blastRadiusScore': 'LOW_ISOLATED'
|
|
153
|
+
}, indent=2)),
|
|
154
|
+
'katalon-cli-runner': ('headless_kre_exec.sh', """#!/bin/sh
|
|
155
|
+
# Execute headless Katalon suite with automatic process cleanup
|
|
156
|
+
katalonc -noSplash -runMode=console -projectPath="$1" -testSuitePath="Test Suites/SmokeSuite" -browserType="Chrome (headless)"
|
|
157
|
+
"""),
|
|
158
|
+
'lam-script-generator': ('user_story_sample.md', """# User Story: User Password Reset Flow
|
|
159
|
+
As a registered customer,
|
|
160
|
+
I want to request a password reset email,
|
|
161
|
+
So that I can regain access if I forget my password.
|
|
162
|
+
|
|
163
|
+
## Acceptance Criteria:
|
|
164
|
+
1. Submitting registered email displays "Reset link dispatched".
|
|
165
|
+
2. Submitting empty email highlights field in red with validation error.
|
|
166
|
+
"""),
|
|
167
|
+
'playwright-live-interaction': ('live_probe_script.js', """// Playwright Live Interactive Probe Helper
|
|
168
|
+
const targetLocator = page.locator("[data-testid='submit-order']");
|
|
169
|
+
const isVisible = await targetLocator.isVisible();
|
|
170
|
+
const boundingBox = await targetLocator.boundingBox();
|
|
171
|
+
console.log({ isVisible, boundingBox });
|
|
172
|
+
"""),
|
|
173
|
+
'security-dast-sentinel': ('dast_scan_config.json', json.dumps({
|
|
174
|
+
'targetUrl': 'https://staging.internal.example.com',
|
|
175
|
+
'checks': ['OWASP_TOP_10', 'HEADER_SECURITY', 'TOKEN_EXPOSURE', 'SQLI_PROBING'],
|
|
176
|
+
'failOnSeverity': 'HIGH'
|
|
177
|
+
}, indent=2)),
|
|
178
|
+
'self-healing-locator': ('aom_diff_sample.json', json.dumps({
|
|
179
|
+
'brokenLocator': '#old-checkout-btn',
|
|
180
|
+
'historicalAttributes': {'role': 'button', 'text': 'Confirm Order', 'testid': 'checkout-submit'},
|
|
181
|
+
'currentAOMSnapshot': [
|
|
182
|
+
{'role': 'button', 'name': 'Confirm Order', 'testid': 'checkout-submit-v2'}
|
|
183
|
+
],
|
|
184
|
+
'healedLocator': "button[data-testid='checkout-submit-v2']"
|
|
185
|
+
}, indent=2)),
|
|
186
|
+
'skillspector-security-guard': ('safe_mcp_config.json', json.dumps({
|
|
187
|
+
'mcpServers': {
|
|
188
|
+
'playwright-live': {
|
|
189
|
+
'command': 'npx',
|
|
190
|
+
'args': ['-y', '@modelcontextprotocol/server-playwright'],
|
|
191
|
+
'sandboxPolicy': 'HEADLESS_VIRTUAL_DISPLAY'
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}, indent=2)),
|
|
195
|
+
'synthetic-test-data-generator': ('idempotent_data_recipe.json', json.dumps({
|
|
196
|
+
'entity': 'user',
|
|
197
|
+
'prefix': 'AUTO_',
|
|
198
|
+
'timestampPattern': 'EPOCH_MS',
|
|
199
|
+
'fields': {
|
|
200
|
+
'email': 'AUTO_USER@example-qa.com',
|
|
201
|
+
'phone': '+15551234567'
|
|
202
|
+
}
|
|
203
|
+
}, indent=2)),
|
|
204
|
+
'token-and-context-optimizer': ('distilled_log_sample.txt', """[RAW CLI LOG: 3,200 lines truncated by distill_log.py]
|
|
205
|
+
FAILED tests/checkout.spec.ts:42:15 -> TimeoutError: Waiting for selector `button.order-confirm`
|
|
206
|
+
Status: 1 failed, 12 passed in 14.2s
|
|
207
|
+
"""),
|
|
208
|
+
'visual-regression-sentinel': ('visual_mask_rules.json', json.dumps({
|
|
209
|
+
'maskSelectors': ['.dynamic-timestamp', '.live-chart-canvas', '.user-avatar-badge'],
|
|
210
|
+
'thresholdSSIM': 0.98,
|
|
211
|
+
'maxDiffPixels': 25
|
|
212
|
+
}, indent=2)),
|
|
213
|
+
'wcag-audit-patterns': ('wcag_compliance_checklist.json', json.dumps({
|
|
214
|
+
'conformanceLevel': 'AA',
|
|
215
|
+
'criteria': ['1.4.3 Contrast (Minimum)', '2.1.1 Keyboard', '2.4.7 Focus Visible', '4.1.2 Name, Role, Value'],
|
|
216
|
+
'auditTool': 'axe-core'
|
|
217
|
+
}, indent=2)),
|
|
218
|
+
'web-vitals-and-performance-profiler': ('cwv_budget_policy.json', json.dumps({
|
|
219
|
+
'LCP_ms': 2500,
|
|
220
|
+
'CLS_score': 0.1,
|
|
221
|
+
'INP_ms': 200,
|
|
222
|
+
'networkThrottle': 'Fast 3G'
|
|
223
|
+
}, indent=2))
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def main():
|
|
228
|
+
try:
|
|
229
|
+
sys.stdout.reconfigure(encoding='utf-8')
|
|
230
|
+
except Exception:
|
|
231
|
+
pass
|
|
232
|
+
count = 0
|
|
233
|
+
for skill, (filename, content) in EXAMPLES_MAP.items():
|
|
234
|
+
ex_dir = os.path.join(SKILLS_DIR, skill, 'examples')
|
|
235
|
+
os.makedirs(ex_dir, exist_ok=True)
|
|
236
|
+
fpath = os.path.join(ex_dir, filename)
|
|
237
|
+
with open(fpath, 'w', encoding='utf-8') as f:
|
|
238
|
+
f.write(content)
|
|
239
|
+
count += 1
|
|
240
|
+
print(f"[OK] Generated examples for {count} skills.")
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
if __name__ == "__main__":
|
|
244
|
+
main()
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
One-click setup and dependency bootstrap script for Enterprise Agent-Skills Hub.
|
|
4
|
+
.DESCRIPTION
|
|
5
|
+
Detects and installs Python, Node.js, Playwright, sets up a clean virtual environment,
|
|
6
|
+
installs requirements.txt, and verifies the full 30-skill catalog.
|
|
7
|
+
#>
|
|
8
|
+
|
|
9
|
+
[CmdletBinding()]
|
|
10
|
+
param(
|
|
11
|
+
[switch]$ForceInstall = $false
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
Write-Host "==========================================================" -ForegroundColor Cyan
|
|
15
|
+
Write-Host " Enterprise Agent-Skills Hub: Automated Bootstrap Setup " -ForegroundColor Cyan
|
|
16
|
+
Write-Host "==========================================================" -ForegroundColor Cyan
|
|
17
|
+
|
|
18
|
+
$repoRoot = Split-Path -Parent $PSScriptRoot
|
|
19
|
+
Set-Location $repoRoot
|
|
20
|
+
|
|
21
|
+
# 1. Verify / Install Python
|
|
22
|
+
Write-Host "`n[1/5] Checking Python 3 Runtime..." -ForegroundColor Yellow
|
|
23
|
+
$py = $null
|
|
24
|
+
foreach ($cmd in @("python", "python3", "py")) {
|
|
25
|
+
try {
|
|
26
|
+
$v = & $cmd --version 2>&1
|
|
27
|
+
if ($LASTEXITCODE -eq 0 -and $v -match "Python\s+3\.(1[0-9]|[2-9][0-9])") {
|
|
28
|
+
$py = $cmd
|
|
29
|
+
Write-Host " [OK] Found Python: $v" -ForegroundColor Green
|
|
30
|
+
break
|
|
31
|
+
}
|
|
32
|
+
} catch { }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (-not $py) {
|
|
36
|
+
Write-Host " [WARN] Python 3.10+ not found in PATH." -ForegroundColor Yellow
|
|
37
|
+
Write-Host " Attempting automated installation via winget..." -ForegroundColor Cyan
|
|
38
|
+
try {
|
|
39
|
+
winget install -e --id Python.Python.3.11 --accept-source-agreements --accept-package-agreements --scope currentUser
|
|
40
|
+
Write-Host " [OK] Python 3.11 installed. Please restart your shell if PATH is not updated." -ForegroundColor Green
|
|
41
|
+
} catch {
|
|
42
|
+
Write-Host " [FAIL] Could not auto-install Python. Please install from https://python.org" -ForegroundColor Red
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# 2. Virtual Environment Setup
|
|
47
|
+
Write-Host "`n[2/5] Setting up Virtual Environment (.venv)..." -ForegroundColor Yellow
|
|
48
|
+
$venvDir = Join-Path $repoRoot ".venv"
|
|
49
|
+
if (-not (Test-Path $venvDir) -and $py) {
|
|
50
|
+
Write-Host " Creating virtual environment at $venvDir..." -ForegroundColor Cyan
|
|
51
|
+
& $py -m venv $venvDir
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
$venvPython = if ($IsWindows -or $env:OS -match "Windows") {
|
|
55
|
+
Join-Path $venvDir "Scripts\python.exe"
|
|
56
|
+
} else {
|
|
57
|
+
Join-Path $venvDir "bin/python"
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# 3. Pip Dependencies
|
|
61
|
+
Write-Host "`n[3/5] Installing Core Python Dependencies..." -ForegroundColor Yellow
|
|
62
|
+
$reqFile = Join-Path $repoRoot "requirements.txt"
|
|
63
|
+
if (Test-Path $venvPython) {
|
|
64
|
+
Write-Host " Upgrading pip & wheel..." -ForegroundColor Cyan
|
|
65
|
+
& $venvPython -m pip install --upgrade pip setuptools wheel --quiet
|
|
66
|
+
if (Test-Path $reqFile) {
|
|
67
|
+
Write-Host " Installing requirements from requirements.txt..." -ForegroundColor Cyan
|
|
68
|
+
& $venvPython -m pip install -r $reqFile --quiet
|
|
69
|
+
Write-Host " [OK] Dependencies installed in .venv" -ForegroundColor Green
|
|
70
|
+
}
|
|
71
|
+
} elseif ($py) {
|
|
72
|
+
Write-Host " Installing requirements using system $py..." -ForegroundColor Cyan
|
|
73
|
+
& $py -m pip install -r $reqFile --quiet
|
|
74
|
+
} else {
|
|
75
|
+
Write-Host " [SKIP] Skipping pip install: Python runtime not yet active." -ForegroundColor Yellow
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# 4. Check Node.js / Playwright
|
|
79
|
+
Write-Host "`n[4/5] Checking Node.js & Playwright CLI..." -ForegroundColor Yellow
|
|
80
|
+
try {
|
|
81
|
+
$nodeVer = & node --version 2>&1
|
|
82
|
+
Write-Host " [OK] Found Node.js: $nodeVer" -ForegroundColor Green
|
|
83
|
+
} catch {
|
|
84
|
+
Write-Host " [INFO] Node.js not detected. Optional for standalone Python tools, required for Playwright MCP." -ForegroundColor Gray
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# 5. Run Quality Gate Linting
|
|
88
|
+
Write-Host "`n[5/6] Running Quality Gate & Skill Integrity Verification..." -ForegroundColor Yellow
|
|
89
|
+
$linter = Join-Path $repoRoot "scripts\lint_skills.ps1"
|
|
90
|
+
if (Test-Path $linter) {
|
|
91
|
+
& powershell -ExecutionPolicy Bypass -File $linter
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
# 6. Initialize SQLite Central Agent Memory
|
|
95
|
+
Write-Host "`n[6/6] Initializing Global Central Agent Memory (~/.agent_memory/global_cache.db)..." -ForegroundColor Yellow
|
|
96
|
+
$cacheTool = Join-Path $repoRoot "tools\cache_resolver.py"
|
|
97
|
+
if (Test-Path $cacheTool) {
|
|
98
|
+
try {
|
|
99
|
+
if (Test-Path $venvPython) {
|
|
100
|
+
& $venvPython $cacheTool init
|
|
101
|
+
} elseif ($py) {
|
|
102
|
+
& $py $cacheTool init
|
|
103
|
+
}
|
|
104
|
+
Write-Host " [OK] Central Agent Memory initialized and seeded." -ForegroundColor Green
|
|
105
|
+
} catch {
|
|
106
|
+
Write-Host " [WARN] Could not initialize ~/.agent_memory/global_cache.db: $_" -ForegroundColor Yellow
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
Write-Host "`n==========================================================" -ForegroundColor Cyan
|
|
111
|
+
Write-Host " Bootstrap Complete! Hub is ready for Multi-Agent Swarm. " -ForegroundColor Green
|
|
112
|
+
Write-Host "==========================================================" -ForegroundColor Cyan
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Enterprise Synapse-Hub Global Antigravity Plugin Installer (Windows)
|
|
2
|
+
# ======================================================================
|
|
3
|
+
# Mounts Synapse-Hub directly into Google Antigravity's Global Plugin Directory.
|
|
4
|
+
# Once installed, all 27 skills and 6 subagents are active across all projects automatically.
|
|
5
|
+
|
|
6
|
+
[CmdletBinding()]
|
|
7
|
+
param()
|
|
8
|
+
|
|
9
|
+
$ErrorActionPreference = "Stop"
|
|
10
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
11
|
+
$RepoRoot = Resolve-Path "$ScriptDir\.."
|
|
12
|
+
|
|
13
|
+
Write-Host "`n======================================================================" -ForegroundColor Cyan
|
|
14
|
+
Write-Host " SYNAPSE-HUB: ANTIGRAVITY GLOBAL PLUGIN 1-CLICK INSTALLER " -ForegroundColor Cyan
|
|
15
|
+
Write-Host "======================================================================`n" -ForegroundColor Cyan
|
|
16
|
+
|
|
17
|
+
$PluginsDir = "$HOME\.gemini\config\plugins"
|
|
18
|
+
$TargetPluginDir = "$PluginsDir\synapse-hub"
|
|
19
|
+
|
|
20
|
+
if (-not (Test-Path $PluginsDir)) {
|
|
21
|
+
Write-Host "[1/5] Creating Antigravity plugins directory: $PluginsDir" -ForegroundColor Yellow
|
|
22
|
+
New-Item -ItemType Directory -Path $PluginsDir -Force | Out-Null
|
|
23
|
+
} else {
|
|
24
|
+
Write-Host "[1/5] Antigravity plugins directory verified: $PluginsDir" -ForegroundColor Green
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
# Ensure clean target directory
|
|
28
|
+
if (-not (Test-Path $TargetPluginDir)) {
|
|
29
|
+
Write-Host "[2/5] Creating plugin bundle directory: $TargetPluginDir" -ForegroundColor Yellow
|
|
30
|
+
New-Item -ItemType Directory -Path $TargetPluginDir -Force | Out-Null
|
|
31
|
+
} else {
|
|
32
|
+
Write-Host "[2/5] Plugin bundle directory exists: $TargetPluginDir" -ForegroundColor Green
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# 1. Copy plugin.json & README.md
|
|
36
|
+
Write-Host "[3/5] Copying plugin manifest (plugin.json)..." -ForegroundColor Yellow
|
|
37
|
+
Copy-Item "$RepoRoot\plugin.json" "$TargetPluginDir\plugin.json" -Force
|
|
38
|
+
if (Test-Path "$RepoRoot\README.md") {
|
|
39
|
+
Copy-Item "$RepoRoot\README.md" "$TargetPluginDir\README.md" -Force
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# 2. Setup skills and agents via NTFS Junctions (Instant, zero duplication)
|
|
43
|
+
Write-Host "[4/5] Linking skills, agents, and rules into Global Plugin..." -ForegroundColor Yellow
|
|
44
|
+
|
|
45
|
+
$SkillsLink = "$TargetPluginDir\skills"
|
|
46
|
+
$AgentsLink = "$TargetPluginDir\agents"
|
|
47
|
+
$ToolsLink = "$TargetPluginDir\tools"
|
|
48
|
+
$RulesDir = "$TargetPluginDir\rules"
|
|
49
|
+
|
|
50
|
+
# Skills Junction
|
|
51
|
+
if (Test-Path $SkillsLink) {
|
|
52
|
+
(Get-Item $SkillsLink).Delete()
|
|
53
|
+
}
|
|
54
|
+
New-Item -ItemType Junction -Path $SkillsLink -Target "$RepoRoot\.agents\skills" | Out-Null
|
|
55
|
+
Write-Host " • Linked skills : $SkillsLink -> $RepoRoot\.agents\skills" -ForegroundColor Green
|
|
56
|
+
|
|
57
|
+
# Agents Junction
|
|
58
|
+
if (Test-Path $AgentsLink) {
|
|
59
|
+
(Get-Item $AgentsLink).Delete()
|
|
60
|
+
}
|
|
61
|
+
New-Item -ItemType Junction -Path $AgentsLink -Target "$RepoRoot\.agents\agents" | Out-Null
|
|
62
|
+
Write-Host " • Linked agents : $AgentsLink -> $RepoRoot\.agents\agents" -ForegroundColor Green
|
|
63
|
+
|
|
64
|
+
# Tools Junction
|
|
65
|
+
if (Test-Path $ToolsLink) {
|
|
66
|
+
(Get-Item $ToolsLink).Delete()
|
|
67
|
+
}
|
|
68
|
+
New-Item -ItemType Junction -Path $ToolsLink -Target "$RepoRoot\tools" | Out-Null
|
|
69
|
+
Write-Host " • Linked tools : $ToolsLink -> $RepoRoot\tools" -ForegroundColor Green
|
|
70
|
+
|
|
71
|
+
# Rules directory & AGENTS.md
|
|
72
|
+
if (-not (Test-Path $RulesDir)) {
|
|
73
|
+
New-Item -ItemType Directory -Path $RulesDir -Force | Out-Null
|
|
74
|
+
}
|
|
75
|
+
Copy-Item "$RepoRoot\AGENTS.md" "$RulesDir\AGENTS.md" -Force
|
|
76
|
+
Write-Host " • Deployed rules : $RulesDir\AGENTS.md" -ForegroundColor Green
|
|
77
|
+
|
|
78
|
+
# 3. Initialize SQLite Cache
|
|
79
|
+
Write-Host "`n[5/5] Initializing Central Agent Memory (SQLite Cache)..." -ForegroundColor Yellow
|
|
80
|
+
try {
|
|
81
|
+
python "$RepoRoot\tools\cache_resolver.py" init
|
|
82
|
+
} catch {
|
|
83
|
+
Write-Host " (Notice: cache_resolver init will run when Python is invoked)" -ForegroundColor DarkGray
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Write-Host "`n======================================================================" -ForegroundColor Cyan
|
|
87
|
+
Write-Host " 🎉 SUCCESS: Synapse-Hub is now installed as a GLOBAL PLUGIN! " -ForegroundColor Green
|
|
88
|
+
Write-Host "======================================================================" -ForegroundColor Cyan
|
|
89
|
+
Write-Host "• Location : $TargetPluginDir" -ForegroundColor White
|
|
90
|
+
Write-Host "• Skills : 27 Standardized QA Skills" -ForegroundColor White
|
|
91
|
+
Write-Host "• Agents : 6 Swarm Subagent Profiles" -ForegroundColor White
|
|
92
|
+
Write-Host "`n👉 Antigravity will now automatically load Synapse-Hub across ALL projects" -ForegroundColor Yellow
|
|
93
|
+
Write-Host " without needing to add Synapse-Hub as a workspace folder!" -ForegroundColor Yellow
|
|
94
|
+
Write-Host "======================================================================`n" -ForegroundColor Cyan
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Enterprise Synapse-Hub Global Antigravity Plugin Installer (macOS / Linux)
|
|
3
|
+
# ======================================================================
|
|
4
|
+
# Mounts Synapse-Hub directly into Google Antigravity's Global Plugin Directory.
|
|
5
|
+
# Once installed, all 27 skills and 6 subagents are active across all projects automatically.
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
10
|
+
|
|
11
|
+
echo ""
|
|
12
|
+
echo "======================================================================"
|
|
13
|
+
echo " SYNAPSE-HUB: ANTIGRAVITY GLOBAL PLUGIN 1-CLICK INSTALLER "
|
|
14
|
+
echo "======================================================================"
|
|
15
|
+
echo ""
|
|
16
|
+
|
|
17
|
+
PLUGINS_DIR="$HOME/.gemini/config/plugins"
|
|
18
|
+
TARGET_PLUGIN_DIR="$PLUGINS_DIR/synapse-hub"
|
|
19
|
+
|
|
20
|
+
mkdir -p "$PLUGINS_DIR"
|
|
21
|
+
mkdir -p "$TARGET_PLUGIN_DIR"
|
|
22
|
+
|
|
23
|
+
echo "[1/4] Copying plugin manifest..."
|
|
24
|
+
cp "$REPO_ROOT/plugin.json" "$TARGET_PLUGIN_DIR/plugin.json"
|
|
25
|
+
[ -f "$REPO_ROOT/README.md" ] && cp "$REPO_ROOT/README.md" "$TARGET_PLUGIN_DIR/README.md"
|
|
26
|
+
|
|
27
|
+
echo "[2/4] Symlinking skills, agents, and tools..."
|
|
28
|
+
ln -sfn "$REPO_ROOT/.agents/skills" "$TARGET_PLUGIN_DIR/skills"
|
|
29
|
+
ln -sfn "$REPO_ROOT/.agents/agents" "$TARGET_PLUGIN_DIR/agents"
|
|
30
|
+
ln -sfn "$REPO_ROOT/tools" "$TARGET_PLUGIN_DIR/tools"
|
|
31
|
+
|
|
32
|
+
mkdir -p "$TARGET_PLUGIN_DIR/rules"
|
|
33
|
+
cp "$REPO_ROOT/AGENTS.md" "$TARGET_PLUGIN_DIR/rules/AGENTS.md"
|
|
34
|
+
|
|
35
|
+
echo "[3/4] Initializing Central Agent Memory (SQLite Cache)..."
|
|
36
|
+
python3 "$REPO_ROOT/tools/cache_resolver.py" init 2>/dev/null || python "$REPO_ROOT/tools/cache_resolver.py" init 2>/dev/null || true
|
|
37
|
+
|
|
38
|
+
echo ""
|
|
39
|
+
echo "======================================================================"
|
|
40
|
+
echo " 🎉 SUCCESS: Synapse-Hub is now installed as a GLOBAL PLUGIN! "
|
|
41
|
+
echo "======================================================================"
|
|
42
|
+
echo "• Location : $TARGET_PLUGIN_DIR"
|
|
43
|
+
echo "• Skills : 27 Standardized QA Skills"
|
|
44
|
+
echo "• Agents : 6 Swarm Subagent Profiles"
|
|
45
|
+
echo ""
|
|
46
|
+
echo "👉 Antigravity will now automatically load Synapse-Hub across ALL projects"
|
|
47
|
+
echo " without needing to add Synapse-Hub as a workspace folder!"
|
|
48
|
+
echo "======================================================================"
|
|
49
|
+
echo ""
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Automated validation test for all skills in Agent-Skills Hub.
|
|
4
|
+
.DESCRIPTION
|
|
5
|
+
Checks presence of SKILL.md, valid frontmatter (name, description), and verifies skills_manifest.json.
|
|
6
|
+
#>
|
|
7
|
+
|
|
8
|
+
Write-Host "==========================================================" -ForegroundColor Cyan
|
|
9
|
+
Write-Host " Agent-Skills Quality & Integrity Linter " -ForegroundColor Cyan
|
|
10
|
+
Write-Host "==========================================================" -ForegroundColor Cyan
|
|
11
|
+
|
|
12
|
+
$skillsDir = Join-Path $PSScriptRoot "..\.agents\skills"
|
|
13
|
+
$manifestPath = Join-Path $PSScriptRoot "..\skills_manifest.json"
|
|
14
|
+
|
|
15
|
+
$passed = 0
|
|
16
|
+
$failed = 0
|
|
17
|
+
|
|
18
|
+
if (-not (Test-Path $manifestPath)) {
|
|
19
|
+
Write-Host "[FAIL] Missing skills_manifest.json!" -ForegroundColor Red
|
|
20
|
+
exit 1
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
$manifest = Get-Content $manifestPath -Raw | ConvertFrom-Json
|
|
24
|
+
Write-Host "[INFO] Manifest loaded: $($manifest.totalSkills) declared skills." -ForegroundColor Gray
|
|
25
|
+
|
|
26
|
+
$skillDirs = Get-ChildItem -Path $skillsDir -Directory
|
|
27
|
+
|
|
28
|
+
foreach ($dir in $skillDirs) {
|
|
29
|
+
$skillMd = Join-Path $dir.FullName "SKILL.md"
|
|
30
|
+
if (-not (Test-Path $skillMd)) {
|
|
31
|
+
Write-Host "[FAIL] $($dir.Name): Missing SKILL.md" -ForegroundColor Red
|
|
32
|
+
$failed++
|
|
33
|
+
continue
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
$content = Get-Content $skillMd -Raw
|
|
37
|
+
$hasName = $content -match "name:\s*[\w\-\s]+"
|
|
38
|
+
$hasDesc = $content -match "description:\s*.+"
|
|
39
|
+
|
|
40
|
+
if ($hasName -and $hasDesc) {
|
|
41
|
+
Write-Host "[PASS] $($dir.Name) - Valid Frontmatter" -ForegroundColor Green
|
|
42
|
+
$passed++
|
|
43
|
+
} else {
|
|
44
|
+
Write-Host "[FAIL] $($dir.Name) - Invalid or missing YAML frontmatter" -ForegroundColor Red
|
|
45
|
+
$failed++
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Write-Host "----------------------------------------------------------" -ForegroundColor Cyan
|
|
50
|
+
Write-Host "Verification Results: $passed Passed, $failed Failed." -ForegroundColor $(if ($failed -eq 0) { "Green" } else { "Red" })
|
|
51
|
+
Write-Host "----------------------------------------------------------" -ForegroundColor Cyan
|
|
52
|
+
|
|
53
|
+
if ($failed -gt 0) {
|
|
54
|
+
exit 1
|
|
55
|
+
} else {
|
|
56
|
+
exit 0
|
|
57
|
+
}
|