synapse-hub 2.4.1 → 2.4.3
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/rules/graphify.md +14 -14
- package/.agents/rules/mandatory-playwright-live.md +29 -29
- package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -614
- 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/e2e-testing-patterns/resources/implementation-playbook.md +522 -522
- 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/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/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/wcag-audit-patterns/resources/implementation-playbook.md +541 -541
- package/.agents/templates/completion_report.md +57 -57
- package/.agents/workflows/graphify.md +10 -10
- package/.cursor/rules/language.mdc +7 -7
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +21 -21
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +21 -21
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +21 -21
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +21 -21
- package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +21 -21
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +20 -20
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +20 -20
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +20 -20
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +20 -20
- package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +20 -20
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +22 -22
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +22 -22
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +22 -22
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +22 -22
- package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +22 -22
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +21 -21
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +21 -21
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +21 -21
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +21 -21
- package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +22 -22
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +21 -21
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +21 -21
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +21 -21
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +21 -21
- package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +21 -21
- package/bin/agent-qa.js +0 -0
- package/docs/ARCHITECTURE.md +12 -1
- package/package.json +1 -1
- package/scripts/install.ps1 +112 -112
- package/scripts/lint_skills.ps1 +57 -57
- package/skills_manifest.json +1 -1
- package/synapse.config.json +1 -1
- package/tools/__init__.py +1 -1
- package/tools/agent_canary.py +501 -501
- package/tools/api_fuzzer.py +11 -2
- package/tools/browser_helpers.js +2 -2
- package/tools/bump_version.py +1 -0
- package/tools/check_env.py +71 -13
- package/tools/cli.py +2 -2
- package/tools/dashboard_generator.py +2 -2
- package/tools/e2e_flow_prober.sh +0 -0
- package/tools/generate_allure_report.sh +0 -0
- package/tools/generate_test_reports.sh +0 -0
- package/tools/mcp_excel_server.py +3 -1
- package/tools/mcp_excel_server.sh +0 -0
- package/tools/mcp_server.py +1 -1
- package/tools/pinpoint_failure.py +88 -88
- package/tools/setup_project.py +8 -0
- package/tools/update_sentinel.py +10 -9
- package/tools/verify_all.sh +0 -0
- package/tools/visual_som_helper.py +14 -3
- package/tools/welcome_page.py +1 -1
- package/benchmarks/qa_eval/reports/AB_METHODOLOGY_REPORT.md +0 -83
- package/benchmarks/qa_eval/reports/BENCHMARK_REPORT.md +0 -69
- package/benchmarks/qa_eval/reports/eval_results.json +0 -105
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "QA-CHALLENGE-14",
|
|
3
|
-
"name": "Async Chart SVG Animation Race Condition",
|
|
4
|
-
"category": "timing_and_race",
|
|
5
|
-
"difficulty": "MEDIUM",
|
|
6
|
-
"description": "Financial chart takes 1200ms to calculate series and render SVG paths.",
|
|
7
|
-
"failure_vector": {
|
|
8
|
-
"type": "ASYNC_RENDER_RACE",
|
|
9
|
-
"broken_code": "page.click('.chart-bar:last-child')",
|
|
10
|
-
"error_log": "ElementNotFoundException: Selector '.chart-bar:last-child' not found",
|
|
11
|
-
"environment_condition": "Highcharts Rendering Animation"
|
|
12
|
-
},
|
|
13
|
-
"expected_resolution": {
|
|
14
|
-
"healed_code": "page.waitForSelector('.highcharts-series path', state: 'visible'); page.click('.chart-bar:last-child')",
|
|
15
|
-
"strategy": "SVG_VISIBILITY_SMART_WAIT"
|
|
16
|
-
},
|
|
17
|
-
"benchmark_targets": {
|
|
18
|
-
"max_heal_time_sec": 2.0,
|
|
19
|
-
"max_token_cost": 310,
|
|
20
|
-
"min_confidence_score": 0.9
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "QA-CHALLENGE-14",
|
|
3
|
+
"name": "Async Chart SVG Animation Race Condition",
|
|
4
|
+
"category": "timing_and_race",
|
|
5
|
+
"difficulty": "MEDIUM",
|
|
6
|
+
"description": "Financial chart takes 1200ms to calculate series and render SVG paths.",
|
|
7
|
+
"failure_vector": {
|
|
8
|
+
"type": "ASYNC_RENDER_RACE",
|
|
9
|
+
"broken_code": "page.click('.chart-bar:last-child')",
|
|
10
|
+
"error_log": "ElementNotFoundException: Selector '.chart-bar:last-child' not found",
|
|
11
|
+
"environment_condition": "Highcharts Rendering Animation"
|
|
12
|
+
},
|
|
13
|
+
"expected_resolution": {
|
|
14
|
+
"healed_code": "page.waitForSelector('.highcharts-series path', state: 'visible'); page.click('.chart-bar:last-child')",
|
|
15
|
+
"strategy": "SVG_VISIBILITY_SMART_WAIT"
|
|
16
|
+
},
|
|
17
|
+
"benchmark_targets": {
|
|
18
|
+
"max_heal_time_sec": 2.0,
|
|
19
|
+
"max_token_cost": 310,
|
|
20
|
+
"min_confidence_score": 0.9
|
|
21
|
+
}
|
|
22
22
|
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "QA-CHALLENGE-15",
|
|
3
|
-
"name": "Infinite Scroll Lazy Loaded Chunk Detach",
|
|
4
|
-
"category": "timing_and_race",
|
|
5
|
-
"difficulty": "MEDIUM",
|
|
6
|
-
"description": "Table rows 50-100 require viewport scroll to trigger network chunk download.",
|
|
7
|
-
"failure_vector": {
|
|
8
|
-
"type": "LAZY_LOAD_RACE",
|
|
9
|
-
"broken_code": "page.locator('tr[data-id=\"75\"]').click()",
|
|
10
|
-
"error_log": "TimeoutException: Timed out waiting for 'tr[data-id=\"75\"]' to be visible",
|
|
11
|
-
"environment_condition": "Virtual Scrolling Table"
|
|
12
|
-
},
|
|
13
|
-
"expected_resolution": {
|
|
14
|
-
"healed_code": "page.locator('tr[data-id=\"75\"]').scrollIntoViewIfNeeded(); page.locator('tr[data-id=\"75\"]').click()",
|
|
15
|
-
"strategy": "VIRTUAL_SCROLL_INTO_VIEW"
|
|
16
|
-
},
|
|
17
|
-
"benchmark_targets": {
|
|
18
|
-
"max_heal_time_sec": 2.0,
|
|
19
|
-
"max_token_cost": 300,
|
|
20
|
-
"min_confidence_score": 0.92
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "QA-CHALLENGE-15",
|
|
3
|
+
"name": "Infinite Scroll Lazy Loaded Chunk Detach",
|
|
4
|
+
"category": "timing_and_race",
|
|
5
|
+
"difficulty": "MEDIUM",
|
|
6
|
+
"description": "Table rows 50-100 require viewport scroll to trigger network chunk download.",
|
|
7
|
+
"failure_vector": {
|
|
8
|
+
"type": "LAZY_LOAD_RACE",
|
|
9
|
+
"broken_code": "page.locator('tr[data-id=\"75\"]').click()",
|
|
10
|
+
"error_log": "TimeoutException: Timed out waiting for 'tr[data-id=\"75\"]' to be visible",
|
|
11
|
+
"environment_condition": "Virtual Scrolling Table"
|
|
12
|
+
},
|
|
13
|
+
"expected_resolution": {
|
|
14
|
+
"healed_code": "page.locator('tr[data-id=\"75\"]').scrollIntoViewIfNeeded(); page.locator('tr[data-id=\"75\"]').click()",
|
|
15
|
+
"strategy": "VIRTUAL_SCROLL_INTO_VIEW"
|
|
16
|
+
},
|
|
17
|
+
"benchmark_targets": {
|
|
18
|
+
"max_heal_time_sec": 2.0,
|
|
19
|
+
"max_token_cost": 300,
|
|
20
|
+
"min_confidence_score": 0.92
|
|
21
|
+
}
|
|
22
22
|
}
|
package/bin/agent-qa.js
CHANGED
|
File without changes
|
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Agent-Skills Architecture & Design Principles
|
|
2
2
|
|
|
3
3
|
> **Scope:** Enterprise Multi-Agent QA Hub
|
|
4
|
-
> **Version:** `2.4.
|
|
4
|
+
> **Version:** `2.4.3` | **Status:** Active / Production Standard
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -105,3 +105,14 @@ The Hub equips 6 specialized subagents with scoped tool and skill permissions:
|
|
|
105
105
|
| **`test-runner`** | Headless CLI test execution & CI | `katalon-cli-runner`, `e2e-testing-patterns`, `flaky-test-sentinel-and-quarantine`, `backend-load-and-stress-patterns`, `github-actions-templates` | `matrix_sharder.py`, `distill_log.py`, `pinpoint_failure.py`, `flaky_detector.py` |
|
|
106
106
|
| **`failure-analyst`**| Visual & XML error autopsy | `failure-autopsy-and-healing`, `self-healing-locator`, `file-and-report-validator` | `auto_heal.py`, `heal_pr_automator.py`, `pinpoint_failure.py`, `cache_resolver.py` |
|
|
107
107
|
| **`quality-gatekeeper`**| 9 Gates DoD & Fake-Pass Sentinel | `antigravity-test-sentinel`, `code-refactoring-refactor-clean`, `wcag-audit-patterns`, `web-vitals-and-performance-profiler`, `security-dast-sentinel` | `verify_all.py`, `infer_linter.py`, `micro_mutator.py`, `trace_data_flow.py` |
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 6. Nomenclature & Package Architecture
|
|
112
|
+
|
|
113
|
+
To ensure consistency across various distribution registries and developer interfaces:
|
|
114
|
+
- **Ecosystem / Project Name:** Synapse Hub (`Synapse-Hub` on GitHub)
|
|
115
|
+
- **NPM Package & Antigravity Plugin:** `synapse-hub` (distributed on NPM Registry and Antigravity Marketplace)
|
|
116
|
+
- **Python Package & Universal CLI:** `agent-qa` (PEP 621 package on PyPI providing the `agent-qa` CLI binary)
|
|
117
|
+
- **MCP Server Protocol Services:** `enterprise-agent-qa` (Core QA MCP server) and `synapse-mcp-excel` (Excel tool server)
|
|
118
|
+
- **Skill Catalog Manifest:** `enterprise-agent-skills-hub` (internal catalog schema identifier in `skills_manifest.json`)
|
package/package.json
CHANGED
package/scripts/install.ps1
CHANGED
|
@@ -1,112 +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 38-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
|
|
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 38-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
|
package/scripts/lint_skills.ps1
CHANGED
|
@@ -1,57 +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
|
-
}
|
|
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
|
+
}
|
package/skills_manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"name": "Enterprise Agent Skills Hub",
|
|
4
|
-
"version": "2.4.
|
|
4
|
+
"version": "2.4.3",
|
|
5
5
|
"description": "Unified Catalog of 38 Specialized Skills for Autonomous AI Agents in Enterprise Software Quality Engineering, Performance, and Architecture.",
|
|
6
6
|
"totalSkills": 38,
|
|
7
7
|
"categories": {
|
package/synapse.config.json
CHANGED