agentic-qa-maestro 0.1.0__tar.gz

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 (55) hide show
  1. agentic_qa_maestro-0.1.0/.github/workflows/ci.yml +32 -0
  2. agentic_qa_maestro-0.1.0/.github/workflows/release.yml +47 -0
  3. agentic_qa_maestro-0.1.0/.gitignore +38 -0
  4. agentic_qa_maestro-0.1.0/ARCHITECTURE.md +254 -0
  5. agentic_qa_maestro-0.1.0/CODE_OF_CONDUCT.md +28 -0
  6. agentic_qa_maestro-0.1.0/CONTRIBUTING.md +31 -0
  7. agentic_qa_maestro-0.1.0/GETTINGSTARTED.md +135 -0
  8. agentic_qa_maestro-0.1.0/LICENSE +182 -0
  9. agentic_qa_maestro-0.1.0/PKG-INFO +128 -0
  10. agentic_qa_maestro-0.1.0/README.md +86 -0
  11. agentic_qa_maestro-0.1.0/SECURITY.md +25 -0
  12. agentic_qa_maestro-0.1.0/agentic_qa_maestro/__init__.py +3 -0
  13. agentic_qa_maestro-0.1.0/agentic_qa_maestro/agents/__init__.py +1 -0
  14. agentic_qa_maestro-0.1.0/agentic_qa_maestro/agents/factory.py +213 -0
  15. agentic_qa_maestro-0.1.0/agentic_qa_maestro/config.py +115 -0
  16. agentic_qa_maestro-0.1.0/agentic_qa_maestro/main.py +469 -0
  17. agentic_qa_maestro-0.1.0/agentic_qa_maestro/models/__init__.py +1 -0
  18. agentic_qa_maestro-0.1.0/agentic_qa_maestro/models/azure_openai.py +79 -0
  19. agentic_qa_maestro-0.1.0/agentic_qa_maestro/observability/__init__.py +1 -0
  20. agentic_qa_maestro-0.1.0/agentic_qa_maestro/observability/tracing.py +80 -0
  21. agentic_qa_maestro-0.1.0/agentic_qa_maestro/resources/app_flows/example-app.yaml +28 -0
  22. agentic_qa_maestro-0.1.0/agentic_qa_maestro/resources/application.yaml +118 -0
  23. agentic_qa_maestro-0.1.0/agentic_qa_maestro/resources/example.env +27 -0
  24. agentic_qa_maestro-0.1.0/agentic_qa_maestro/runtime_assets.py +57 -0
  25. agentic_qa_maestro-0.1.0/agentic_qa_maestro/teams/__init__.py +1 -0
  26. agentic_qa_maestro-0.1.0/agentic_qa_maestro/teams/group_chat_team.py +39 -0
  27. agentic_qa_maestro-0.1.0/agentic_qa_maestro/teams/sequential_team.py +41 -0
  28. agentic_qa_maestro-0.1.0/agentic_qa_maestro/tools/__init__.py +1 -0
  29. agentic_qa_maestro-0.1.0/agentic_qa_maestro/tools/app_knowledge_tools.py +118 -0
  30. agentic_qa_maestro-0.1.0/agentic_qa_maestro/tools/browser_tools.py +419 -0
  31. agentic_qa_maestro-0.1.0/agentic_qa_maestro/tools/jira_tools.py +360 -0
  32. agentic_qa_maestro-0.1.0/agentic_qa_maestro/tools/local_tools.py +77 -0
  33. agentic_qa_maestro-0.1.0/agentic_qa_maestro/web_ui/__init__.py +1 -0
  34. agentic_qa_maestro-0.1.0/agentic_qa_maestro/web_ui/app.py +558 -0
  35. agentic_qa_maestro-0.1.0/agentic_qa_maestro/web_ui/templates/index.html +631 -0
  36. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/PKG-INFO +128 -0
  37. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/SOURCES.txt +54 -0
  38. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/dependency_links.txt +1 -0
  39. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/entry_points.txt +2 -0
  40. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/requires.txt +21 -0
  41. agentic_qa_maestro-0.1.0/agentic_qa_maestro.egg-info/top_level.txt +1 -0
  42. agentic_qa_maestro-0.1.0/app_flows/example-app.yaml +82 -0
  43. agentic_qa_maestro-0.1.0/application.yaml +134 -0
  44. agentic_qa_maestro-0.1.0/configs/scenarios/jira_e2e_pipeline.yaml +27 -0
  45. agentic_qa_maestro-0.1.0/example.env +27 -0
  46. agentic_qa_maestro-0.1.0/pyproject.toml +80 -0
  47. agentic_qa_maestro-0.1.0/scripts/run_e2e_pipeline.py +303 -0
  48. agentic_qa_maestro-0.1.0/scripts/run_jira_pipeline.py +162 -0
  49. agentic_qa_maestro-0.1.0/setup.cfg +10 -0
  50. agentic_qa_maestro-0.1.0/test_evidence/.gitkeep +0 -0
  51. agentic_qa_maestro-0.1.0/tests/unit/test_agents.py +84 -0
  52. agentic_qa_maestro-0.1.0/tests/unit/test_config.py +123 -0
  53. agentic_qa_maestro-0.1.0/tests/unit/test_teams.py +46 -0
  54. agentic_qa_maestro-0.1.0/tests/unit/test_tools.py +69 -0
  55. agentic_qa_maestro-0.1.0/uv.lock +4438 -0
@@ -0,0 +1,32 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main, develop]
8
+
9
+ jobs:
10
+ lint:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - uses: actions/setup-python@v5
15
+ with:
16
+ python-version: "3.12"
17
+ - run: pip install ruff
18
+ - run: ruff check .
19
+ - run: ruff format --check .
20
+
21
+ test:
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ python-version: ["3.10", "3.11", "3.12"]
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - uses: actions/setup-python@v5
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+ - run: pip install -e ".[dev]"
32
+ - run: pytest --cov=agentic_qa_maestro --cov-report=term-missing
@@ -0,0 +1,47 @@
1
+ name: Release to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ id-token: write
9
+ contents: read
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: "3.12"
20
+
21
+ - name: Install build tools
22
+ run: pip install build
23
+
24
+ - name: Build package
25
+ run: python -m build
26
+
27
+ - name: Upload artifacts
28
+ uses: actions/upload-artifact@v4
29
+ with:
30
+ name: dist
31
+ path: dist/
32
+
33
+ publish-pypi:
34
+ needs: build
35
+ runs-on: ubuntu-latest
36
+ environment: pypi
37
+ permissions:
38
+ id-token: write
39
+ steps:
40
+ - name: Download artifacts
41
+ uses: actions/download-artifact@v4
42
+ with:
43
+ name: dist
44
+ path: dist/
45
+
46
+ - name: Publish to PyPI
47
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,38 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.egg-info/
6
+
7
+ # App settings (may contain config)
8
+ .settings.json
9
+ dist/
10
+ build/
11
+ *.egg
12
+
13
+ # Environment
14
+ .env
15
+ .venv/
16
+ venv/
17
+ env/
18
+
19
+ # IDE
20
+ .idea/
21
+ .vscode/
22
+ *.swp
23
+ *.swo
24
+
25
+ # Testing
26
+ .pytest_cache/
27
+ htmlcov/
28
+ .coverage
29
+ .coverage.*
30
+
31
+ # OS
32
+ .DS_Store
33
+ Thumbs.db
34
+
35
+ # Test evidence screenshots (keep folder, ignore contents)
36
+ test_evidence/*
37
+ !test_evidence/.gitkeep
38
+ *.png
@@ -0,0 +1,254 @@
1
+ # Architecture — Agentic QA Maestro
2
+
3
+ > Multi-agent QA automation powered by [Microsoft Agent Framework](https://github.com/microsoft/agent-framework).
4
+
5
+ ---
6
+
7
+ ## High-Level Overview
8
+
9
+ ```mermaid
10
+ graph TD
11
+ subgraph UI["User Interface"]
12
+ CLI["CLI (main)"]
13
+ WebUI["Web UI (FastAPI)"]
14
+ end
15
+
16
+ subgraph Core["QAMaestro (main.py)"]
17
+ Entry["Entry point — loads config, creates model clients & agents,<br/>dispatches to chosen execution mode<br/><br/>Modes: chat | run | pipeline"]
18
+ end
19
+
20
+ subgraph Teams["Team Orchestration"]
21
+ GC["GroupChat Team<br/>(group_chat_team.py)<br/>Dynamic orchestrator selects<br/>the next agent at each turn"]
22
+ SEQ["Sequential Team<br/>(sequential_team.py)<br/>Deterministic pipeline runs<br/>agents in fixed order"]
23
+ end
24
+
25
+ subgraph Agents["Agent Layer"]
26
+ direction LR
27
+ Orch["Orchestrator"]
28
+ JIRA["JIRA Agent"]
29
+ Browser["Browser Agent"]
30
+ API["API Agent"]
31
+ Research["Research Agent"]
32
+ TestRunner["Test Runner"]
33
+ end
34
+
35
+ subgraph Tools["Tool Layer"]
36
+ direction LR
37
+ BT["Browser Tools<br/>(Playwright)"]
38
+ JT["JIRA Tools<br/>(REST/httpx)"]
39
+ LT["Local Tools<br/>(pytest, …)"]
40
+ MCP["MCP Servers<br/>(external tools)"]
41
+ end
42
+
43
+ CLI --> Entry
44
+ WebUI --> Entry
45
+ Entry --> GC
46
+ Entry --> SEQ
47
+ GC --> Orch
48
+ SEQ --> Orch
49
+ Orch --> BT
50
+ Orch --> JT
51
+ Orch --> LT
52
+ Orch --> MCP
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Execution Modes
58
+
59
+ ```mermaid
60
+ graph TD
61
+ UR["User Request"] --> Chat["Chat<br/>(interactive loop)"]
62
+ UR --> Run["Run<br/>(one-shot task)"]
63
+ UR --> Pipeline["Pipeline<br/>(sequential steps)"]
64
+
65
+ Chat --> GC["GroupChat Orchestrator<br/>(dynamic agent select)"]
66
+ Run --> GC
67
+ Pipeline --> ST["Sequential Team<br/>(fixed order)"]
68
+ ```
69
+
70
+ | Mode | Orchestration | Use Case |
71
+ |------|---------------|----------|
72
+ | **Chat** | GroupChat (dynamic) | Exploratory QA — user types tasks interactively |
73
+ | **Run** | GroupChat (dynamic) | One-shot task execution |
74
+ | **Pipeline** | Sequential (fixed) | Reproducible E2E pipelines in defined order |
75
+
76
+ ---
77
+
78
+ ## Data Flow
79
+
80
+ ```mermaid
81
+ graph TD
82
+ YAML["application.yaml"] --> Config["AppConfig (config.py)<br/>• env var substitution<br/>• self-referencing templates"]
83
+
84
+ Config --> Models["Model Clients<br/>(azure_openai.py)"]
85
+ Config --> AgentDefs["Agent Defs<br/>(factory.py)"]
86
+ Config --> TeamCfg["Team Config<br/>(teams/*.py)"]
87
+
88
+ Models --> Agents["Agent Framework Agent instances"]
89
+ AgentDefs --> Agents
90
+ TeamCfg --> Agents
91
+
92
+ Agents --> ToolFns["@tool functions<br/>(browser, jira, local, mcp)"]
93
+
94
+ ToolFns --> PW["Playwright<br/>(browser)"]
95
+ ToolFns --> JIRAAPI["JIRA API<br/>(httpx)"]
96
+ ToolFns --> Pytest["pytest<br/>(subprocess)"]
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Agent Roles
102
+
103
+ ```mermaid
104
+ graph TD
105
+ Orch["Orchestrator<br/>Coordinates the full<br/>E2E pipeline phases"] --> JIRA["JIRA Agent<br/>• Fetch issues<br/>• Extract criteria<br/>• Create bugs<br/>• Comment<br/>• Transition"]
106
+ Orch --> Browser["Browser Agent<br/>• Start browser<br/>• Nav, click, fill<br/>• Screenshots<br/>• AAD auth"]
107
+ Orch --> API["API Agent<br/>• REST calls<br/>• Contract test"]
108
+ Orch --> Research["Research Agent<br/>• Web search<br/>• Doc lookup"]
109
+ Orch --> TestRunner["Test Runner<br/>• pytest execute<br/>• Collect results<br/>• Analyze output"]
110
+ ```
111
+
112
+ ---
113
+
114
+ ## E2E Pipeline Phases
115
+
116
+ ```mermaid
117
+ graph LR
118
+ P1["Phase 1<br/>Requirement Analysis<br/><br/>JIRA Agent<br/>fetches story + criteria"] --> P2["Phase 2<br/>App Discovery<br/><br/>Browser Agent<br/>explores UI via Playwright"]
119
+ P2 --> P3["Phase 3<br/>Test Case Generation<br/><br/>Orchestrator<br/>creates tests from criteria"]
120
+ P3 --> P4["Phase 4<br/>Test Execution<br/><br/>Browser Agent + Test Runner<br/>run tests"]
121
+ P4 --> P5["Phase 5<br/>Bug Reporting<br/><br/>JIRA Agent<br/>files bugs, posts summary"]
122
+ P5 --> P6["Phase 6<br/>Cleanup<br/><br/>Browser Agent<br/>closes browser"]
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Component Details
128
+
129
+ ### Configuration (`config.py`)
130
+
131
+ Loads `application.yaml` with two substitution passes:
132
+
133
+ 1. **Environment variables**: `${env:AZURE_OPENAI_API_KEY}` → value from env
134
+ 2. **Self-references**: `${this:models.default.endpoint}` → value from config
135
+
136
+ Exposes typed sections: `.models`, `.agents`, `.teams`, `.mcp_servers`, `.observability`, `.web_ui`
137
+
138
+ ### Model Client Factory (`models/azure_openai.py`)
139
+
140
+ - Creates `OpenAIChatCompletionClient` instances for Azure OpenAI
141
+ - Supports API key or `DefaultAzureCredential` (Azure AD)
142
+ - Auto-detects SSL certificate bundles for corporate proxy environments
143
+
144
+ ### Agent Factory (`agents/factory.py`)
145
+
146
+ - Maps YAML agent definitions → Agent Framework `Agent` objects
147
+ - Assigns tools and model clients per agent
148
+ - Provides default system prompts for each role
149
+
150
+ ### Tool Layer
151
+
152
+ | Module | Tools | External Dependency |
153
+ |--------|-------|---------------------|
154
+ | `browser_tools.py` | `start_browser`, `open_url`, `click`, `fill`, `select_option`, `wait_for_selector`, `get_text`, `get_page_content`, `screenshot`, `check_browser`, `close_browser`, `authenticate_aad` | Playwright (Chromium) |
155
+ | `jira_tools.py` | `jira_get_issue`, `jira_add_comment`, `jira_get_comments`, `jira_search_issues`, `jira_create_issue`, `jira_create_bug`, `jira_transition_issue` | JIRA REST API (httpx) |
156
+ | `local_tools.py` | `get_current_time`, `run_pytest`, `collect_pytest_tests` | pytest (subprocess) |
157
+
158
+ ### Observability (`observability/tracing.py`)
159
+
160
+ ```mermaid
161
+ graph TD
162
+ ST["setup_tracing()"] --> Console["Console Exporter"]
163
+ ST --> OTLP["OTLP (gRPC)"]
164
+ ST --> AzMon["Azure Monitor Exporter"]
165
+ ```
166
+
167
+ - OpenTelemetry tracing with configurable exporters
168
+ - Structured Python logging with suppression of noisy libraries
169
+
170
+ ### Web UI (`web_ui/app.py`)
171
+
172
+ ```mermaid
173
+ graph LR
174
+ Browser["Browser"] --> FastAPI["FastAPI + Jinja2"]
175
+ FastAPI --> GET_root["GET / → Dashboard (HTML)"]
176
+ FastAPI --> POST_chat["POST /api/chat → Run group chat"]
177
+ FastAPI --> GET_status["GET /api/status → Agent status"]
178
+ FastAPI --> GET_history["GET /api/history → Run history"]
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Design Patterns
184
+
185
+ | Pattern | Where | Purpose |
186
+ |---------|-------|---------|
187
+ | **Factory** | `create_model_clients_from_config()`, `create_agents_from_config()`, `create_*_team()` | Decouple creation from config |
188
+ | **Singleton** | Browser state in `browser_tools.py` (module-level globals + single-thread executor) | One browser instance, thread-safe |
189
+ | **Strategy** | AAD auth methods (`header`, `token_url`, `easyauth`, `msal_cache`); orchestration modes | Swap behavior at runtime |
190
+ | **Decorator** | `@tool(approval_mode=...)` on all tool functions | Register functions as Agent Framework tools |
191
+ | **Template Method** | `AppConfig._apply_substitutions()` | Recursive config resolution |
192
+
193
+ ---
194
+
195
+ ## Directory Structure
196
+
197
+ ```
198
+ agentic-qa-maestro/
199
+ ├── ARCHITECTURE.md ← You are here
200
+ ├── application.yaml # All config: models, agents, teams, observability
201
+ ├── pyproject.toml # Package metadata & dependencies
202
+ ├── example.env # Template for environment variables
203
+
204
+ ├── agentic_qa_maestro/
205
+ │ ├── main.py # QAMaestro class & CLI entry point
206
+ │ ├── config.py # YAML loader with env/self-ref substitution
207
+ │ │
208
+ │ ├── agents/
209
+ │ │ └── factory.py # Agent creation from config
210
+ │ │
211
+ │ ├── models/
212
+ │ │ └── azure_openai.py # Azure OpenAI client factory
213
+ │ │
214
+ │ ├── teams/
215
+ │ │ ├── group_chat_team.py # GroupChatBuilder orchestration
216
+ │ │ └── sequential_team.py # SequentialBuilder pipelines
217
+ │ │
218
+ │ ├── tools/
219
+ │ │ ├── browser_tools.py # Playwright browser automation
220
+ │ │ ├── jira_tools.py # JIRA REST API client
221
+ │ │ └── local_tools.py # pytest runner, time utilities
222
+ │ │
223
+ │ ├── observability/
224
+ │ │ └── tracing.py # OpenTelemetry + logging setup
225
+ │ │
226
+ │ └── web_ui/
227
+ │ ├── app.py # FastAPI dashboard
228
+ │ └── templates/
229
+ │ └── index.html # Dark-theme chat UI
230
+
231
+ ├── scripts/
232
+ │ ├── run_e2e_pipeline.py # Full 6-phase E2E runner
233
+ │ └── run_jira_pipeline.py # Lightweight JIRA-only runner
234
+
235
+ └── tests/
236
+ └── unit/ # Unit tests
237
+ ```
238
+
239
+ ---
240
+
241
+ ## Technology Stack
242
+
243
+ | Layer | Technology |
244
+ |-------|-----------|
245
+ | Agent Framework | Microsoft Agent Framework |
246
+ | LLM Provider | Azure OpenAI (model configurable via application.yaml) |
247
+ | Browser Automation | Playwright (Chromium) |
248
+ | Issue Tracking | JIRA (REST API via httpx) |
249
+ | Test Execution | pytest (subprocess) |
250
+ | Web Framework | FastAPI + Uvicorn + Jinja2 |
251
+ | Observability | OpenTelemetry (console / OTLP / Azure Monitor) |
252
+ | Auth | Azure Identity (DefaultAzureCredential / API keys) |
253
+ | Config | YAML + python-dotenv |
254
+ | Language | Python 3.10+ |
@@ -0,0 +1,28 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+ We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
5
+
6
+ We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
7
+
8
+ ## Our Standards
9
+ Examples of behavior that contributes to a positive environment:
10
+ - Demonstrating empathy and kindness
11
+ - Being respectful of differing opinions
12
+ - Accepting constructive criticism
13
+ - Focusing on what is best for the community
14
+ - Showing gratitude
15
+
16
+ Examples of unacceptable behavior:
17
+ - The use of sexualized language or imagery
18
+ - Trolling, insulting or derogatory comments
19
+ - Personal or political attacks
20
+ - Public or private harassment
21
+ - Publishing others’ private information
22
+ - Other conduct which could reasonably be considered inappropriate
23
+
24
+ ## Enforcement
25
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the maintainers at creation-platform@amadeus.com. All complaints will be reviewed and investigated and will result in a response deemed necessary and appropriate to the circumstances.
26
+
27
+ ## Attribution
28
+ This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 2.1.
@@ -0,0 +1,31 @@
1
+ # Contributing to Agentic QA Maestro
2
+
3
+ Thank you for your interest in contributing! Please follow these guidelines to help us maintain a collaborative and high-quality project.
4
+
5
+ ## How to Contribute
6
+ - Fork the repository and create your branch from `main` or `develop`.
7
+ - Use descriptive branch names (e.g., `feature/your-feature`, `bugfix/issue-123`).
8
+ - Write clear, concise commit messages.
9
+ - Ensure your code passes all tests and lints (see below).
10
+ - Submit a pull request (PR) with a clear description of your changes.
11
+
12
+ ## Code of Conduct
13
+ By participating, you agree to abide by the [Code of Conduct](CODE_OF_CONDUCT.md).
14
+
15
+ ## Development Setup
16
+ - Install dependencies: `pip install -e .[dev]`
17
+ - Run tests: `pytest`
18
+ - Lint code: `ruff .`
19
+
20
+ ## Reporting Issues
21
+ - Use GitHub Issues for bugs, feature requests, and questions.
22
+ - Provide as much detail as possible (steps to reproduce, logs, screenshots).
23
+
24
+ ## Review Process
25
+ - All PRs require at least one approval.
26
+ - Maintain backward compatibility when possible.
27
+ - Add or update documentation as needed.
28
+
29
+ ## Community
30
+ - Be respectful and constructive in all interactions.
31
+ - For major changes, open an issue to discuss your proposal first.
@@ -0,0 +1,135 @@
1
+ # Quick Start
2
+
3
+ ## Prerequisites
4
+
5
+ - Python 3.10, 3.11, or 3.12
6
+ - Access to Azure OpenAI (endpoint + API key or Azure AD credentials)
7
+ - JIRA instance with API token (for JIRA workflows)
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ # Install the released CLI
13
+ pip install agentic-qa-maestro
14
+
15
+ # Or install it with uv
16
+ uv tool install agentic-qa-maestro
17
+ ```
18
+
19
+ Use `pip` if you want the package in your current Python environment. Use `uv tool`
20
+ if you want an isolated CLI installation.
21
+
22
+ ## Configuration
23
+
24
+ ```bash
25
+ # Scaffold local runtime files
26
+ qa-maestro init
27
+ ```
28
+
29
+ This creates:
30
+
31
+ - `application.yaml`
32
+ - `.env`
33
+ - `app_flows/example-app.yaml`
34
+
35
+ Edit `.env` with your credentials:
36
+
37
+ ```dotenv
38
+ # Azure OpenAI (mandatory)
39
+ DEFAULT_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
40
+ DEFAULT_OPENAI_DEPLOYMENT=your-deployment-name
41
+ AZURE_OPENAI_API_KEY=your-api-key-here
42
+ DEFAULT_OPENAI_API_VERSION=2024-12-01-preview
43
+
44
+ # JIRA (mandatory)
45
+ JIRA_BASE_URL=https://your-jira-instance.atlassian.net
46
+ JIRA_API_TOKEN=your-jira-api-token
47
+ ```
48
+
49
+ All secrets are loaded via environment variables — never hardcode them in config files.
50
+
51
+ ## Browser Setup
52
+
53
+ Install Playwright's Chromium binary once before running the full E2E pipeline:
54
+
55
+ ```bash
56
+ playwright install chromium
57
+ ```
58
+
59
+ ## Run Tests
60
+
61
+ ```bash
62
+ qa-maestro --help
63
+ ```
64
+
65
+ ## Run a JIRA Pipeline (Analysis Only)
66
+
67
+ Fetches the JIRA ticket, generates test cases, and posts them as a comment:
68
+
69
+ ```bash
70
+ qa-maestro --ticket SACP-282967
71
+ ```
72
+
73
+ ## Run the Full E2E Pipeline
74
+
75
+ The E2E pipeline executes all 6 phases against a live application. The `--url`, `--username`, and `--password` flags are **mandatory**.
76
+
77
+ ```bash
78
+ qa-maestro \
79
+ --ticket YOUR-TICKET-ID \
80
+ --url "https://your-app.example.com/login" \
81
+ --username "your-username" \
82
+ --password "your-password"
83
+ ```
84
+
85
+ ### E2E Pipeline Phases
86
+
87
+ | Phase | Name | Description |
88
+ |-------|------|-------------|
89
+ | 1 | **Requirement Analysis** | Fetch JIRA ticket, extract acceptance criteria |
90
+ | 2 | **App Discovery** | Launch browser, navigate to URL, discover UI elements and selectors |
91
+ | 3 | **Test Case Generation** | Generate test cases from requirements + discovered UI |
92
+ | 4 | **Test Execution** | Execute tests against the live app, take screenshots as evidence |
93
+ | 5 | **Bug Reporting** | Create JIRA bug tickets for failures, post summary comment |
94
+ | 6 | **Cleanup** | Close browser, output final status |
95
+
96
+ ### Optional: Azure AD Authentication
97
+
98
+ For apps behind Azure AD, pass additional auth flags:
99
+
100
+ ```bash
101
+ qa-maestro \
102
+ --ticket YOUR-TICKET-ID \
103
+ --url "https://your-app.example.com" \
104
+ --username "your-username" \
105
+ --password "your-password" \
106
+ --tenant-id "your-tenant-id" \
107
+ --client-id "your-client-id" \
108
+ --client-secret "your-client-secret" \
109
+ --scope "api://your-scope/.default"
110
+ ```
111
+
112
+ ## Start the Web UI
113
+
114
+ ```bash
115
+ uvicorn agentic_qa_maestro.web_ui.app:app --port 8000
116
+ ```
117
+
118
+ Open http://localhost:8000 in your browser.
119
+
120
+ ## CLI Usage
121
+
122
+ ```bash
123
+ qa-maestro --help
124
+ ```
125
+
126
+ ## Development Setup
127
+
128
+ If you want to work from a local source checkout instead of the released package,
129
+ use the contributor workflow from [CONTRIBUTING.md](CONTRIBUTING.md).
130
+
131
+ ## Next Steps
132
+
133
+ - Review `application.yaml` for agent/team/model configuration
134
+ - See [ARCHITECTURE.md](ARCHITECTURE.md) for system design details
135
+ - See [CONTRIBUTING.md](CONTRIBUTING.md) to contribute