synapse-hub 0.0.0-stage → 2.0.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 (122) hide show
  1. package/.agents/agents/failure-analyst.md +47 -0
  2. package/.agents/agents/live-explorer.md +41 -0
  3. package/.agents/agents/orchestrator.md +43 -0
  4. package/.agents/agents/pom-crafter.md +81 -0
  5. package/.agents/agents/quality-gatekeeper.md +47 -0
  6. package/.agents/agents/test-runner.md +43 -0
  7. package/.agents/rules/context-engineering.md +88 -0
  8. package/.agents/rules/git-push-protocol.md +101 -0
  9. package/.agents/rules/graphify.md +14 -0
  10. package/.agents/rules/lessons-learned.md +23 -0
  11. package/.agents/rules/mandatory-playwright-live.md +29 -0
  12. package/.agents/rules/skill-precedence.md +42 -0
  13. package/.agents/rules/systematic-debugging.md +99 -0
  14. package/.agents/skills/agent-orchestration-multi-agent-optimize/SKILL.md +239 -0
  15. package/.agents/skills/antigravity-test-sentinel/SKILL.md +64 -0
  16. package/.agents/skills/api-network-mocking-interception/SKILL.md +142 -0
  17. package/.agents/skills/api-spec-to-e2e-matrix/SKILL.md +70 -0
  18. package/.agents/skills/architecture-decision-records/SKILL.md +441 -0
  19. package/.agents/skills/auth-session-and-cookie-manager/SKILL.md +72 -0
  20. package/.agents/skills/backend-load-and-stress-patterns/SKILL.md +214 -0
  21. package/.agents/skills/bats-testing-patterns/SKILL.md +100 -0
  22. package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -0
  23. package/.agents/skills/clean-pom-crafter/SKILL.md +75 -0
  24. package/.agents/skills/clean-pom-crafter/examples/standard_test_case.groovy +28 -0
  25. package/.agents/skills/clean-pom-crafter/references/pom_patterns.groovy +138 -0
  26. package/.agents/skills/code-refactoring-refactor-clean/SKILL.md +64 -0
  27. package/.agents/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +879 -0
  28. package/.agents/skills/db-state-verifier-and-seeder/SKILL.md +123 -0
  29. package/.agents/skills/e2e-testing-patterns/SKILL.md +103 -0
  30. package/.agents/skills/e2e-testing-patterns/resources/implementation-playbook.md +522 -0
  31. package/.agents/skills/failure-autopsy-and-healing/SKILL.md +54 -0
  32. package/.agents/skills/failure-autopsy-and-healing/references/healing_matrix.md +64 -0
  33. package/.agents/skills/failure-autopsy-and-healing/references/qa_investigation_protocol.md +56 -0
  34. package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +98 -0
  35. package/.agents/skills/file-and-report-validator/SKILL.md +90 -0
  36. package/.agents/skills/flaky-test-sentinel-and-quarantine/SKILL.md +114 -0
  37. package/.agents/skills/github-actions-templates/SKILL.md +334 -0
  38. package/.agents/skills/graphify-impact-analyzer/SKILL.md +78 -0
  39. package/.agents/skills/katalon-cli-runner/SKILL.md +76 -0
  40. package/.agents/skills/katalon-cli-runner/references/groovy-patterns.md +209 -0
  41. package/.agents/skills/katalon-cli-runner/references/katalon-api.md +155 -0
  42. package/.agents/skills/katalon-cli-runner/references/runner_commands.md +67 -0
  43. package/.agents/skills/lam-script-generator/SKILL.md +83 -0
  44. package/.agents/skills/playwright-live-interaction/SKILL.md +86 -0
  45. package/.agents/skills/playwright-live-interaction/references/advanced_superpowers.md +160 -0
  46. package/.agents/skills/playwright-live-interaction/references/compact_accessibility_snapshots.md +75 -0
  47. package/.agents/skills/playwright-live-interaction/references/recipes.md +388 -0
  48. package/.agents/skills/playwright-live-interaction/references/swarm_orchestration.md +134 -0
  49. package/.agents/skills/security-dast-sentinel/SKILL.md +176 -0
  50. package/.agents/skills/self-healing-locator/SKILL.md +73 -0
  51. package/.agents/skills/synthetic-test-data-generator/SKILL.md +135 -0
  52. package/.agents/skills/token-and-context-optimizer/SKILL.md +70 -0
  53. package/.agents/skills/visual-regression-sentinel/SKILL.md +62 -0
  54. package/.agents/skills/wcag-audit-patterns/SKILL.md +77 -0
  55. package/.agents/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -0
  56. package/.agents/skills/web-vitals-and-performance-profiler/SKILL.md +65 -0
  57. package/.agents/templates/completion_report.md +57 -0
  58. package/.agents/workflows/graphify.md +10 -0
  59. package/.agents/workflows/test-impact.md +15 -0
  60. package/.agents/workflows/verify.md +34 -0
  61. package/AGENTS.md +115 -0
  62. package/README.md +394 -2
  63. package/bin/agent-qa.js +90 -0
  64. package/package.json +59 -4
  65. package/skills_manifest.json +262 -0
  66. package/templates/PROJECT_AI_GUIDE_TEMPLATE.md +97 -0
  67. package/templates/PROJECT_STATE_TEMPLATE.md +20 -0
  68. package/tools/TOOLS_RUNBOOK.md +298 -0
  69. package/tools/agent_canary.py +501 -0
  70. package/tools/analyze_project.py +242 -0
  71. package/tools/api_drift_sentinel.py +208 -0
  72. package/tools/auto_heal.py +189 -0
  73. package/tools/browser_helpers.js +593 -0
  74. package/tools/bug_reporter.py +224 -0
  75. package/tools/cache_resolver.py +846 -0
  76. package/tools/check_env.py +288 -0
  77. package/tools/ci_healing_hook.py +128 -0
  78. package/tools/cli.py +402 -0
  79. package/tools/config_decoupler.py +253 -0
  80. package/tools/db_sandbox.py +341 -0
  81. package/tools/distill_log.py +152 -0
  82. package/tools/e2e_flow_prober.ps1 +65 -0
  83. package/tools/flaky_detector.py +222 -0
  84. package/tools/fuzz_payloads.py +197 -0
  85. package/tools/generate_allure_report.ps1 +30 -0
  86. package/tools/generate_api_matrix.py +193 -0
  87. package/tools/generate_tc_from_story.py +182 -0
  88. package/tools/generate_test_reports.ps1 +135 -0
  89. package/tools/git_pre_commit_guard.py +203 -0
  90. package/tools/heal_pr_automator.py +195 -0
  91. package/tools/heuristic_locator_matcher.py +202 -0
  92. package/tools/infer_linter.py +238 -0
  93. package/tools/lint_ai_docs.py +254 -0
  94. package/tools/lookup_tc.py +165 -0
  95. package/tools/lookup_xpath.py +167 -0
  96. package/tools/matrix_sharder.py +146 -0
  97. package/tools/mcp_excel_server.ps1 +251 -0
  98. package/tools/mcp_server.py +490 -0
  99. package/tools/micro_mutator.py +309 -0
  100. package/tools/network_mock_shield.py +170 -0
  101. package/tools/omni_emitter.py +500 -0
  102. package/tools/omni_parser.py +435 -0
  103. package/tools/omni_transpiler.py +168 -0
  104. package/tools/pinpoint_failure.py +88 -0
  105. package/tools/project_state.py +169 -0
  106. package/tools/repo_map.json +12 -0
  107. package/tools/repo_map.py +277 -0
  108. package/tools/repo_map.txt +7 -0
  109. package/tools/safety_firewall.py +245 -0
  110. package/tools/setup_project.py +265 -0
  111. package/tools/smart_visual_masker.py +134 -0
  112. package/tools/test_impact.py +321 -0
  113. package/tools/tms_sync_bridge.py +342 -0
  114. package/tools/trace_data_flow.py +240 -0
  115. package/tools/traffic_session_converter.py +256 -0
  116. package/tools/universal_ir.py +480 -0
  117. package/tools/validate_groovy_scripts.py +173 -0
  118. package/tools/verify_all.py +496 -0
  119. package/tools/verify_all.sh +4 -0
  120. package/tools/visual_diff_canvas.py +142 -0
  121. package/tools/visual_som_helper.py +418 -0
  122. package/tools/wcag_audit.py +214 -0
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: playwright-live-interaction
3
+ description: >-
4
+ Fast live web interaction and interactive debugging via Playwright MCP.
5
+ Use for rapid feedback, testing selectors, verifying Angular/PrimeNG components,
6
+ and executing test actions across enterprise web test suites without restarting Katalon/Selenium.
7
+ ---
8
+
9
+ # Playwright Live Interaction & Fast Debugging Handbook (Enterprise Web & Clean POM)
10
+
11
+ Direct in-browser interaction and rapid debugging via **Playwright MCP Tools** (`browser_run_code_unsafe` / `call_mcp_tool`), executing live JavaScript/Playwright commands without rebuilding or restarting test runs.
12
+
13
+ ---
14
+
15
+ ## 1. Scope & Enterprise Architecture Coverage
16
+
17
+ All live web flows map strictly to the **Clean Page Object Model Architecture** (`BasePage` + Domain Page Classes in `Keywords/<project_namespace>/pages/` or `pages/*.ts`):
18
+
19
+ 1. **Authentication & Session:** Login, multi-factor, session renewal, profile update, logout.
20
+ 2. **Administration & RBAC:** User accounts, roles, permission matrices, tenant management.
21
+ 3. **Master Data & System Catalogs:** Lookup dictionaries, unit definitions, category trees.
22
+ 4. **Business Workflows & Approvals:** Multi-step submission, validation state gates, approval chains.
23
+ 5. **Data Tables & Search:** Server-side pagination, two-phase search filtering, batch mutations.
24
+ 6. **Reporting & Analytics:** Dashboard metrics, dynamic chart canvases, Excel/CSV exports.
25
+ 7. **Integrations & API Tokens:** Token lifecycle management, webhook verification, data sharing.
26
+
27
+ ### 1.1. Cross-Harness Tool Mapping (Portability Matrix)
28
+
29
+ To ensure skills operate seamlessly across different AI agent environments:
30
+
31
+ | Action / Intent | Antigravity MCP | Claude Code / Cursor / Standard Playwright MCP | Vanilla Playwright Script |
32
+ |---|---|---|---|
33
+ | **Run JS in Browser** | `browser_run_code_unsafe` | `browser_evaluate` | `page.evaluate(...)` |
34
+ | **Navigate to URL** | `browser_navigate` | `navigate_page` / `page.goto` | `page.goto(url)` |
35
+ | **Click Element** | `browser_click` | `click_element` | `page.locator(sel).click()` |
36
+ | **Inspect DOM/AOM** | `browser_snapshot` | `get_accessibility_tree` | `page.accessibility.snapshot()` |
37
+ | **Wait for State** | `browser_wait_for` | `wait_for_selector` | `page.waitForSelector(...)` |
38
+
39
+ ---
40
+
41
+ ## 2. Three-Stage Fast-Loop Workflow
42
+
43
+ ```mermaid
44
+ flowchart LR
45
+ A["1. Flow Discovery<br/>Inspect live DOM & AOM"] --> B["2. Script Generation<br/>Verify 100% selector hit rate"]
46
+ B --> C["3. In-Place Debugging<br/>Fix error at current screen"]
47
+ C --> D["4. Codify Clean POM<br/>Package into Page Classes"]
48
+ ```
49
+
50
+ 1. **Flow Discovery:** Probe accessibility tree (`accessibility.snapshot()`) or DOM to extract live URLs, menus, and dialogs in under 2 minutes.
51
+ 2. **Script Generation:** Test selectors live (`await page.locator(...).count() > 0`). Only codify when the selector hits 100% in 200ms.
52
+ 3. **In-Place Debugging:** When step $N$ fails, **keep the browser paused at that step**. Use `page.evaluate()` to diagnose disabled buttons, obscuring overlays, or validation errors. Fix in place; never re-run from step 1.
53
+
54
+ ---
55
+
56
+ ## 3. Mapping Matrix (Playwright Live Code ↔ Clean POM)
57
+
58
+ | UI Action | Playwright Live Code (MCP) | Clean POM Groovy / Java Code | Clean POM TypeScript (Playwright) |
59
+ |---|---|---|---|
60
+ | **Fill Input** | `await page.locator(sel).fill(val);` | `WebElement el = findElement(By.cssSelector(sel)); jsSetInput(el, val);` | `await this.inputField.fill(val);` |
61
+ | **Safe Click / Overlay** | `await page.locator(sel).click();` | `WebElement el = findElement(By.cssSelector(sel)); clickElement(el);` | `await this.submitButton.click();` |
62
+ | **Dropdown Selection** | `await page.locator('p-dropdown').click(); await page.locator('.p-dropdown-item:has-text("X")').click();` | `selectDropdownByText(dropdownEl, "X")` | `await this.dropdown.selectOption("X");` |
63
+ | **Calendar Picker** | Synthetic `input` + `change` event | `jsSetInput(calendarInput, "25/10/2026")` | `await this.datePicker.fill("2026-10-25");` |
64
+ | **Catch Success Toast** | `await page.waitForSelector('.toast-success')` | `verifyToastMessage("Success")` | `await expect(this.toast).toBeVisible();` |
65
+ | **Two-Phase Search** | Click search icon -> Enter Keyword -> Enter | `searchRecord(keyword)` in Page Class | `await this.search(keyword);` |
66
+ | **Delete & Confirm** | Click Trash -> Accept Confirm -> Verify Gone | `deleteRecord(keyword)` in Page Class | `await this.delete(keyword);` |
67
+
68
+ ---
69
+
70
+ ## 4. Pre-Codify Quality Checklist
71
+
72
+ Mandatory 5-point verification before committing POM code:
73
+ - [x] **100% UTF-8 No BOM:** Must NOT contain `0xEF, 0xBB, 0xBF`.
74
+ - [x] **Flat Architecture:** Zero raw XPaths or unencapsulated selectors in test scripts.
75
+ - [x] **Dynamic Test Data:** Use `BasePage.uniqueCode("PREFIX_")`; no static colliding strings.
76
+ - [x] **Truth Anchor (No Fake Pass):** Real toast assertions or live data table row verification.
77
+ - [x] **Synthetic Event Dispatch:** 100% framework inputs trigger synthetic `input` and `change` events.
78
+
79
+ ---
80
+
81
+ ## 5. Reference Documentation (Progressive Disclosure)
82
+
83
+ - [**20 Complete UI Recipes**](references/recipes.md): Code recipes for Auth, Data Tables, Dropdowns, Modals, Confirm Dialogs, File Upload, Calendar, MultiSelect, Stale Retries, Form Audit, Smart Action Batching, and Self-Healing Locators.
84
+ - [**Runtime Browser Helper (`tools/browser_helpers.js`)**](tools/browser_helpers.js): Unified JavaScript module providing `window.__qa` (`batch`, `audit`, `heal`, `clickSafe`, `exportSession`).
85
+ - [**5 Superpowers & 5 AI Paradigms**](references/advanced_superpowers.md): Zero-Second Auth (`session.json`), Direct API Seeding, AOM Snapshots, Multi-Context Dual Role, Route Mocking, Self-Healing Locators, Fuzzing, CDP Profiling.
86
+ - [**Multi-Agent Swarm Orchestration**](references/swarm_orchestration.md): Specialized swarm roles and collaboration protocol.
@@ -0,0 +1,160 @@
1
+ # 5 Advanced Superpowers & 5 AI Paradigms for Playwright Live Interaction
2
+
3
+ In-depth technical reference for complex testing scenarios across enterprise web test suites.
4
+
5
+ ---
6
+
7
+ ## 1. Five Native Advanced Superpowers
8
+
9
+ ### 1.1. Zero-Second Auth (Bypass Login Form)
10
+ ```javascript
11
+ // Step 1: Save storage state after login
12
+ async (page) => {
13
+ await page.context().storageState({ path: '.agents/session.json' });
14
+ return { status: "Session saved successfully" };
15
+ }
16
+
17
+ // Step 2: Load stored session in subsequent contexts
18
+ const context = await browser.newContext({ storageState: '.agents/session.json' });
19
+ ```
20
+
21
+ ### 1.2. Network Interception & Direct Seeding
22
+ ```javascript
23
+ async (page) => {
24
+ page.on('request', request => {
25
+ if (request.url().includes('/api/') && request.method() === 'POST') {
26
+ console.log('API URL:', request.url());
27
+ console.log('Headers:', request.headers());
28
+ console.log('Payload:', request.postData());
29
+ }
30
+ });
31
+ }
32
+ ```
33
+
34
+ ### 1.3. Accessibility Tree (AOM Snapshot — 90% Token Reduction)
35
+ ```javascript
36
+ async (page) => {
37
+ const a11yTree = await page.accessibility.snapshot({
38
+ interestingOnly: true // Captures interactive elements only
39
+ });
40
+ return a11yTree;
41
+ }
42
+ ```
43
+
44
+ ### 1.4. Multi-Context Dual Role Testing (Parallel Roles)
45
+ ```javascript
46
+ async (browser) => {
47
+ const specialistContext = await browser.newContext();
48
+ const leaderContext = await browser.newContext();
49
+
50
+ const pageSpecialist = await specialistContext.newPage();
51
+ const pageLeader = await leaderContext.newPage();
52
+
53
+ // Specialist submits dossier
54
+ await pageSpecialist.goto('https://app.example.com/planning');
55
+ // Leader reviews and approves
56
+ await pageLeader.goto('https://app.example.com/planning-approval');
57
+ }
58
+ ```
59
+
60
+ ### 1.5. API Route Mocking (Negative Scenarios & Fault Injection)
61
+ ```javascript
62
+ async (page) => {
63
+ await page.route('**/api/**', route => {
64
+ route.fulfill({
65
+ status: 500,
66
+ contentType: 'application/json',
67
+ body: JSON.stringify({ message: 'Database connection failed!' })
68
+ });
69
+ });
70
+
71
+ await page.locator('button:has-text("Lưu")').click();
72
+ await page.waitForTimeout(500);
73
+ const toastMsg = await page.locator('.p-toast-message').innerText();
74
+ return { toastMsg };
75
+ }
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 2. Five AI Engineering Paradigms
81
+
82
+ ### 2.1. Self-Healing Locator Engine (Multi-Tier Fallback)
83
+ ```javascript
84
+ async (page, targetName) => {
85
+ const strategies = [
86
+ () => page.locator(`button[formcontrolname="${targetName}"]`),
87
+ () => page.getByRole('button', { name: targetName }),
88
+ () => page.locator(`button:has-text("${targetName}")`),
89
+ () => page.locator(`button[title*="${targetName}"]`),
90
+ () => page.locator(`.p-button:has-text("${targetName}")`)
91
+ ];
92
+
93
+ for (const getLocator of strategies) {
94
+ const loc = getLocator();
95
+ if (await loc.count() > 0 && await loc.first().isVisible()) {
96
+ return loc.first(); // Self-healed successfully
97
+ }
98
+ }
99
+ throw new Error(`Self-healing failed: Element not found: ${targetName}`);
100
+ }
101
+ ```
102
+
103
+ ### 2.2. Multimodal Visual Verification (GIS & Layout)
104
+ ```javascript
105
+ async (page) => {
106
+ const mapElement = page.locator('div.ol-viewport');
107
+ const screenshotBuffer = await mapElement.screenshot({ path: '.agents/screenshots/gis_canvas_live.png' });
108
+ const box = await mapElement.boundingBox();
109
+ return {
110
+ isRenderedProperly: box && box.width > 300 && box.height > 200,
111
+ width: box ? box.width : 0,
112
+ height: box ? box.height : 0,
113
+ screenshotPath: '.agents/screenshots/gis_canvas_live.png'
114
+ };
115
+ }
116
+ ```
117
+
118
+ ### 2.3. Autonomous Exploratory Fuzzing (Edge & Crash Hunting)
119
+ ```javascript
120
+ async (page) => {
121
+ const edgePayloads = [
122
+ "'-DROP TABLE--",
123
+ "<script>alert(1)</script>",
124
+ "-99999999",
125
+ " ",
126
+ "A".repeat(500)
127
+ ];
128
+ const results = [];
129
+ const input = page.locator('input[formcontrolname="code"]').first();
130
+
131
+ for (const payload of edgePayloads) {
132
+ await input.fill(payload);
133
+ await page.locator('button:has-text("Lưu"), button:has-text("Xác nhận")').first().click();
134
+ await page.waitForTimeout(600);
135
+
136
+ const hasCrash = await page.evaluate(() => {
137
+ const text = document.body.innerText;
138
+ return text.includes('500 Internal') || text.includes('HttpErrorResponse');
139
+ });
140
+ results.push({ payload, hasCrash });
141
+ }
142
+ return results;
143
+ }
144
+ ```
145
+
146
+ ### 2.4. CDP Deep Profiling (RAM & Heap Monitoring)
147
+ ```javascript
148
+ async (page) => {
149
+ const memoryInfo = await page.evaluate(() => {
150
+ return window.performance && window.performance.memory ? {
151
+ usedJSHeapSizeMB: (window.performance.memory.usedJSHeapSize / (1024 * 1024)).toFixed(2),
152
+ totalJSHeapSizeMB: (window.performance.memory.totalJSHeapSize / (1024 * 1024)).toFixed(2)
153
+ } : { note: "Memory API only available in Chromium" };
154
+ });
155
+ return memoryInfo;
156
+ }
157
+ ```
158
+
159
+ ### 2.5. Multi-Agent Swarm Orchestration
160
+ For swarm roles (Lead Orchestrator, Live Explorer, Code Crafter, Test Runner, Quality Gatekeeper, Scribe), refer to [swarm_orchestration.md](swarm_orchestration.md).
@@ -0,0 +1,75 @@
1
+ # Compact Accessibility-Tree Snapshots for PrimeNG Inspection
2
+
3
+ *(Inherited from `vercel-labs/agent-browser`)*
4
+
5
+ A token-efficient browser inspection technique for exploring enterprise Angular & PrimeNG single-page interface without dumping heavy raw DOM HTML.
6
+
7
+ ---
8
+
9
+ ## 1. Problem: The Raw HTML Token Trap
10
+
11
+ On modern Angular/PrimeNG applications:
12
+ - A single complex screen (e.g. `DataMiningPage` with GIS Canvas, sidebar, and multi-field dialogs) contains **3,000+ lines of HTML**.
13
+ - Dumping raw DOM trees consumes **15,000 to 30,000 tokens** per inspection, cluttering the agent's context window.
14
+
15
+ ---
16
+
17
+ ## 2. Solution: Semantic Accessibility Snapshot
18
+
19
+ Following the `agent-browser` architecture, we extract a **Compact Accessibility Tree** focused exclusively on interactive elements (`button`, `input`, `select`, `p-dropdown`, `p-calendar`, `p-table` headers and rows) assigned with lightweight identifier references (`@e1`, `@e2`, ...).
20
+
21
+ ### 2.1. In-Browser JavaScript Extractor
22
+ Inject the following lightweight snippet via Playwright browser evaluate:
23
+
24
+ ```javascript
25
+ (() => {
26
+ const interactiveSelectors = [
27
+ 'button:not([disabled])',
28
+ 'input:not([type="hidden"])',
29
+ 'select',
30
+ 'textarea',
31
+ 'p-dropdown',
32
+ 'p-calendar input',
33
+ 'p-multiselect',
34
+ 'a[href]',
35
+ '[role="button"]',
36
+ '[role="dialog"]',
37
+ '.p-toast-message'
38
+ ];
39
+
40
+ const elements = Array.from(document.querySelectorAll(interactiveSelectors.join(',')))
41
+ .filter(el => {
42
+ const rect = el.getBoundingClientRect();
43
+ return rect.width > 0 && rect.height > 0 && window.getComputedStyle(el).visibility !== 'hidden';
44
+ });
45
+
46
+ return elements.map((el, idx) => {
47
+ const tag = el.tagName.toLowerCase();
48
+ const type = el.getAttribute('type') || '';
49
+ const name = el.getAttribute('name') || el.getAttribute('formcontrolname') || '';
50
+ const label = (el.innerText || el.placeholder || el.getAttribute('aria-label') || el.title || '').trim().replace(/\s+/g, ' ').slice(0, 50);
51
+ const role = el.getAttribute('role') || tag;
52
+ return `[@e${idx + 1}] <${tag}${type ? ' type=' + type : ''}${name ? ' name=' + name : ''}> "${label}"`;
53
+ }).join('\n');
54
+ })();
55
+ ```
56
+
57
+ ### 2.2. Sample Compact Output (Under 500 Tokens vs 25,000 Tokens)
58
+
59
+ ```text
60
+ [@e1] <input name=username> "Tên đăng nhập"
61
+ [@e2] <input type=password name=password> "Mật khẩu"
62
+ [@e3] <button type=submit> "Đăng nhập"
63
+ [@e4] <p-dropdown name=layerSelect> "Chọn lớp dữ liệu"
64
+ [@e5] <input placeholder="Nhập từ khóa tìm kiếm..."> "Tìm kiếm"
65
+ [@e6] <button> "Thêm mới"
66
+ [@e7] <button title="Xóa"> "Xóa"
67
+ ```
68
+
69
+ ---
70
+
71
+ ## 3. Benefits for Enterprise Test Automation
72
+
73
+ 1. **Token Savings:** Reduces DOM inspection size by **90% - 95%**.
74
+ 2. **Speed:** Instant parsing in `< 20ms`.
75
+ 3. **Selector Mapping:** Once an element reference `@eN` is identified on screen, map it directly into the Clean POM Page Class using `BasePage.x()`.