maestro-flow 0.1.1 → 0.1.2
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/.codex/skills/manage-codebase-rebuild/SKILL.md +405 -405
- package/.codex/skills/manage-codebase-refresh/SKILL.md +82 -82
- package/.codex/skills/manage-issue/SKILL.md +65 -65
- package/.codex/skills/manage-status/SKILL.md +89 -89
- package/.codex/skills/quality-debug/SKILL.md +413 -413
- package/.codex/skills/quality-refactor/SKILL.md +191 -191
- package/.codex/skills/quality-sync/SKILL.md +89 -89
- package/.codex/skills/quality-test/SKILL.md +198 -198
- package/.codex/skills/spec-add/SKILL.md +79 -79
- package/.codex/skills/spec-load/SKILL.md +75 -75
- package/.codex/skills/spec-map/SKILL.md +182 -182
- package/.codex/skills/spec-setup/SKILL.md +76 -76
- package/.codex/skills/team-coordinate/SKILL.md +7 -7
- package/.codex/skills/team-coordinate/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-lifecycle-v4/SKILL.md +2 -2
- package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +1 -1
- package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +2 -2
- package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +1 -1
- package/.codex/skills/team-lifecycle-v4/schemas/tasks-schema.md +1 -1
- package/.codex/skills/team-quality-assurance/SKILL.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-quality-assurance/roles/executor/role.md +1 -1
- package/.codex/skills/team-quality-assurance/roles/scout/role.md +2 -2
- package/.codex/skills/team-review/SKILL.md +2 -2
- package/.codex/skills/team-review/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-review/roles/reviewer/role.md +2 -2
- package/.codex/skills/team-review/roles/scanner/role.md +1 -1
- package/.codex/skills/team-tech-debt/SKILL.md +2 -2
- package/.codex/skills/team-tech-debt/roles/coordinator/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/executor/role.md +1 -1
- package/.codex/skills/team-tech-debt/roles/scanner/role.md +2 -2
- package/.codex/skills/team-tech-debt/roles/validator/role.md +1 -1
- package/.codex/skills/team-testing/SKILL.md +2 -2
- package/.codex/skills/team-testing/roles/coordinator/role.md +2 -2
- package/.codex/skills/team-testing/roles/executor/role.md +2 -2
- package/.codex/skills/team-testing/roles/generator/role.md +2 -2
- package/README.md +43 -4
- package/dist/agents/dashboard-bridge.d.ts +5 -0
- package/dist/agents/dashboard-bridge.d.ts.map +1 -1
- package/dist/agents/dashboard-bridge.js +13 -0
- package/dist/agents/dashboard-bridge.js.map +1 -1
- package/dist/agents/parallel-cli-runner.d.ts +42 -0
- package/dist/agents/parallel-cli-runner.d.ts.map +1 -0
- package/dist/agents/parallel-cli-runner.js +200 -0
- package/dist/agents/parallel-cli-runner.js.map +1 -0
- package/dist/agents/terminal-adapter.d.ts +94 -0
- package/dist/agents/terminal-adapter.d.ts.map +1 -0
- package/dist/agents/terminal-adapter.js +132 -0
- package/dist/agents/terminal-adapter.js.map +1 -0
- package/dist/agents/terminal-backend.d.ts +53 -0
- package/dist/agents/terminal-backend.d.ts.map +1 -0
- package/dist/agents/terminal-backend.js +286 -0
- package/dist/agents/terminal-backend.js.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/coordinate.d.ts.map +1 -1
- package/dist/commands/coordinate.js +14 -5
- package/dist/commands/coordinate.js.map +1 -1
- package/dist/commands/delegate.d.ts +3 -0
- package/dist/commands/delegate.d.ts.map +1 -0
- package/dist/commands/delegate.js +142 -0
- package/dist/commands/delegate.js.map +1 -0
- package/dist/commands/msg.d.ts +3 -0
- package/dist/commands/msg.d.ts.map +1 -0
- package/dist/commands/msg.js +110 -0
- package/dist/commands/msg.js.map +1 -0
- package/dist/coordinator/graph-types.d.ts +17 -0
- package/dist/coordinator/graph-types.d.ts.map +1 -1
- package/dist/coordinator/graph-walker.d.ts +3 -1
- package/dist/coordinator/graph-walker.d.ts.map +1 -1
- package/dist/coordinator/graph-walker.js +147 -8
- package/dist/coordinator/graph-walker.js.map +1 -1
- package/dist/coordinator/index.d.ts +2 -0
- package/dist/coordinator/index.d.ts.map +1 -1
- package/dist/coordinator/index.js +1 -0
- package/dist/coordinator/index.js.map +1 -1
- package/dist/coordinator/parallel-executor.d.ts +24 -0
- package/dist/coordinator/parallel-executor.d.ts.map +1 -0
- package/dist/coordinator/parallel-executor.js +43 -0
- package/dist/coordinator/parallel-executor.js.map +1 -0
- package/package.json +3 -1
- package/templates/cli/prompts/rules-tech-rules-agent-prompt.txt +89 -89
- package/templates/cli/prompts/workflow-codex-feasibility-validation.txt +176 -176
- package/templates/cli/prompts/workflow-gemini-solution-design.txt +131 -131
- package/templates/cli/prompts/workflow-skill-index.txt +224 -224
- package/templates/cli/protocols/analysis-protocol.md +2 -2
- package/templates/cli/protocols/write-protocol.md +2 -2
- package/workflows/memory.md +2 -2
- package/.codex/skills/team-lifecycle-v4/MIGRATION-PLAN.md +0 -512
|
@@ -28,8 +28,8 @@ Universal team coordination skill: analyze task -> generate role-specs -> dispat
|
|
|
28
28
|
(roles generated at runtime from task analysis)
|
|
29
29
|
|
|
30
30
|
CLI Tools (callable by any worker):
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
maestro cli --mode analysis - analysis and exploration
|
|
32
|
+
maestro cli --mode write - code generation and modification
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Delegation Lock
|
|
@@ -48,7 +48,7 @@ Before calling ANY tool, apply this check:
|
|
|
48
48
|
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
49
49
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
50
50
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
51
|
-
| `Bash("
|
|
51
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
52
52
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
53
53
|
|
|
54
54
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -65,8 +65,8 @@ Before calling ANY tool, apply this check:
|
|
|
65
65
|
| Session path | `.workflow/.team/TC-<slug>-<date>/` |
|
|
66
66
|
| Worker agent | `team-worker` |
|
|
67
67
|
| Message bus | `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)` |
|
|
68
|
-
| CLI analysis | `
|
|
69
|
-
| CLI write | `
|
|
68
|
+
| CLI analysis | `maestro cli --mode analysis` |
|
|
69
|
+
| CLI write | `maestro cli --mode write` |
|
|
70
70
|
| Max roles | 5 |
|
|
71
71
|
|
|
72
72
|
## Role Router
|
|
@@ -92,8 +92,8 @@ Workers can use CLI tools for analysis and code operations:
|
|
|
92
92
|
|
|
93
93
|
| Tool | Purpose |
|
|
94
94
|
|------|---------|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
95
|
+
| maestro cli --mode analysis | Analysis, exploration, pattern discovery |
|
|
96
|
+
| maestro cli --mode write | Code generation, modification, refactoring |
|
|
97
97
|
|
|
98
98
|
### Dispatch
|
|
99
99
|
|
|
@@ -18,7 +18,7 @@ Orchestrate the team-coordinate workflow: task analysis, dynamic role-spec gener
|
|
|
18
18
|
```
|
|
19
19
|
WRONG: Read("src/components/Button.tsx") — worker work
|
|
20
20
|
WRONG: Grep(pattern="useState", path="src/") — worker work
|
|
21
|
-
WRONG: Bash("
|
|
21
|
+
WRONG: Bash("maestro cli -p '...' --tool gemini") — worker work
|
|
22
22
|
WRONG: Edit("src/utils/helper.ts", ...) — worker work
|
|
23
23
|
WRONG: Bash("npm test") — worker work
|
|
24
24
|
WRONG: mcp__ace-tool__search_context(query="...") — worker work
|
|
@@ -71,7 +71,7 @@ Before calling ANY tool, apply this check:
|
|
|
71
71
|
| `Read` on `roles/`, `commands/`, `specs/`, `templates/` | ALLOWED | Loading own instructions |
|
|
72
72
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
73
73
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
74
|
-
| `Bash("
|
|
74
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
75
75
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
76
76
|
|
|
77
77
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -86,7 +86,7 @@ Before calling ANY tool, apply this check:
|
|
|
86
86
|
- **Session path**: `.workflow/.team/TLV4-<slug>-<date>/`
|
|
87
87
|
- **State file**: `<session>/tasks.json`
|
|
88
88
|
- **Discovery files**: `<session>/discoveries/{task_id}.json`
|
|
89
|
-
- **CLI tools**: `
|
|
89
|
+
- **CLI tools**: `maestro cli --mode analysis` (read-only), `maestro cli --mode write` (modifications)
|
|
90
90
|
|
|
91
91
|
## Worker Spawn Template
|
|
92
92
|
|
|
@@ -27,7 +27,7 @@ This instruction is loaded by team-worker agents when spawned with roles: `analy
|
|
|
27
27
|
|
|
28
28
|
2. **Explore domain** (use CLI analysis tools):
|
|
29
29
|
```bash
|
|
30
|
-
|
|
30
|
+
maestro cli -p "PURPOSE: Research domain for {requirement}
|
|
31
31
|
TASK: • Identify problem statement • Define target users • Extract constraints • Map integration points
|
|
32
32
|
CONTEXT: @**/* | Memory: {requirement}
|
|
33
33
|
EXPECTED: Structured research context with problem/users/domain/constraints
|
|
@@ -294,7 +294,7 @@ This instruction is loaded by team-worker agents when spawned with roles: `analy
|
|
|
294
294
|
|
|
295
295
|
2. **Explore codebase** (use CLI analysis tools):
|
|
296
296
|
```bash
|
|
297
|
-
|
|
297
|
+
maestro cli -p "PURPOSE: Explore codebase for {requirement}
|
|
298
298
|
TASK: • Identify relevant files • Find existing patterns • Locate integration points
|
|
299
299
|
CONTEXT: @**/* | Memory: {requirement}
|
|
300
300
|
EXPECTED: Exploration findings with file paths and patterns
|
|
@@ -36,7 +36,7 @@ Research and codebase exploration for context gathering.
|
|
|
36
36
|
4. If topic references file (@path or .md/.txt) -> read it
|
|
37
37
|
5. CLI seed analysis:
|
|
38
38
|
```
|
|
39
|
-
Bash({ command: `
|
|
39
|
+
Bash({ command: `maestro cli -p "PURPOSE: Analyze topic, extract structured seed info.
|
|
40
40
|
TASK: * Extract problem statement * Identify target users * Determine domain
|
|
41
41
|
* List constraints * Identify 3-5 exploration dimensions
|
|
42
42
|
TOPIC: <topic-content>
|
|
@@ -54,7 +54,7 @@ Research and codebase exploration for context gathering.
|
|
|
54
54
|
|
|
55
55
|
When project detected:
|
|
56
56
|
```
|
|
57
|
-
Bash({ command: `
|
|
57
|
+
Bash({ command: `maestro cli -p "PURPOSE: Explore codebase for context
|
|
58
58
|
TASK: * Identify tech stack * Map architecture patterns * Document conventions * List integration points
|
|
59
59
|
MODE: analysis
|
|
60
60
|
CONTEXT: @**/*
|
|
@@ -14,7 +14,7 @@ Orchestrate team-lifecycle-v4: analyze -> dispatch -> spawn -> monitor -> report
|
|
|
14
14
|
```
|
|
15
15
|
WRONG: Read("src/...") — worker work
|
|
16
16
|
WRONG: Grep/Glob on project source — worker work
|
|
17
|
-
WRONG: Bash("
|
|
17
|
+
WRONG: Bash("maestro cli -p '...' --tool gemini") — worker work
|
|
18
18
|
WRONG: Edit/Write on project source files — worker work
|
|
19
19
|
WRONG: Bash("npm test"), Bash("tsc"), etc. — worker work
|
|
20
20
|
```
|
|
@@ -47,7 +47,7 @@ WRONG: Bash("npm test"), Bash("tsc"), etc. — worker work
|
|
|
47
47
|
- Modify task output artifacts
|
|
48
48
|
- Spawn workers with general-purpose agent (MUST use tlv4_worker)
|
|
49
49
|
- Generate more than 5 worker roles
|
|
50
|
-
- Call CLI tools (
|
|
50
|
+
- Call CLI tools (maestro cli) — only workers use CLI
|
|
51
51
|
|
|
52
52
|
## Command Execution Protocol
|
|
53
53
|
When coordinator needs to execute a specific phase:
|
|
@@ -51,7 +51,7 @@ CONSTRAINTS: Only modify listed files | Follow existing patterns
|
|
|
51
51
|
|
|
52
52
|
CLI call:
|
|
53
53
|
```
|
|
54
|
-
Bash(`
|
|
54
|
+
Bash(`maestro cli -p "<prompt>" --tool <tool> --mode write --rule development-implement-feature`)
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
Resume strategy:
|
|
@@ -36,7 +36,7 @@ Codebase-informed implementation planning with complexity assessment.
|
|
|
36
36
|
3. Check <session>/explorations/cache-index.json for cached explorations
|
|
37
37
|
4. Explore codebase (cache-aware):
|
|
38
38
|
```
|
|
39
|
-
Bash({ command: `
|
|
39
|
+
Bash({ command: `maestro cli -p "PURPOSE: Explore codebase to inform planning
|
|
40
40
|
TASK: * Search for relevant patterns * Identify files to modify * Document integration points
|
|
41
41
|
MODE: analysis
|
|
42
42
|
CONTEXT: @**/*
|
|
@@ -48,7 +48,7 @@ Codebase-informed implementation planning with complexity assessment.
|
|
|
48
48
|
|
|
49
49
|
Generate plan.json + .task/TASK-*.json:
|
|
50
50
|
```
|
|
51
|
-
Bash({ command: `
|
|
51
|
+
Bash({ command: `maestro cli -p "PURPOSE: Generate implementation plan from exploration results
|
|
52
52
|
TASK: * Create plan.json overview * Generate TASK-*.json files (2-7 tasks) * Define dependencies * Set convergence criteria
|
|
53
53
|
MODE: write
|
|
54
54
|
CONTEXT: @<session>/explorations/*.json
|
|
@@ -61,7 +61,7 @@ Template-driven document generation with progressive dependency loading.
|
|
|
61
61
|
|
|
62
62
|
CLI generation:
|
|
63
63
|
```
|
|
64
|
-
Bash({ command: `
|
|
64
|
+
Bash({ command: `maestro cli -p "PURPOSE: Generate <doc-type> document following template
|
|
65
65
|
TASK: * Load template * Apply spec config and discovery context * Integrate prior feedback * Generate all sections
|
|
66
66
|
MODE: write
|
|
67
67
|
CONTEXT: @<session>/spec/*.json @<template-path>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Tasks Schema — team-lifecycle-v4
|
|
2
2
|
|
|
3
|
-
> Base schema: `~/.
|
|
3
|
+
> Base schema: `~/.maestro/templates/cli/schemas/team-tasks-schema.json`
|
|
4
4
|
|
|
5
5
|
This file documents lifecycle-v4 specific extensions to the universal team tasks schema.
|
|
6
6
|
|
|
@@ -63,7 +63,7 @@ Before calling ANY tool, apply this check:
|
|
|
63
63
|
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
64
64
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
65
65
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
66
|
-
| `Bash("
|
|
66
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
67
67
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
68
68
|
|
|
69
69
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -77,7 +77,7 @@ Before calling ANY tool, apply this check:
|
|
|
77
77
|
- **Session prefix**: `QA`
|
|
78
78
|
- **Session path**: `.workflow/.team/QA-<slug>-<date>/`
|
|
79
79
|
- **Team name**: `quality-assurance`
|
|
80
|
-
- **CLI tools**: `
|
|
80
|
+
- **CLI tools**: `maestro cli --mode analysis` (read-only), `maestro cli --mode write` (modifications)
|
|
81
81
|
- **Message bus**: `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)`
|
|
82
82
|
|
|
83
83
|
## Worker Spawn Template
|
|
@@ -12,7 +12,7 @@ Orchestrate team-quality-assurance: analyze -> dispatch -> spawn -> monitor -> r
|
|
|
12
12
|
**FORBIDDEN** (even if the task seems trivial):
|
|
13
13
|
```
|
|
14
14
|
WRONG: Read/Grep/Glob on project source code — worker work
|
|
15
|
-
WRONG: Bash("
|
|
15
|
+
WRONG: Bash("maestro cli ...") — worker work
|
|
16
16
|
WRONG: Edit/Write on project source files — worker work
|
|
17
17
|
WRONG: Bash("npm test"), Bash("tsc"), etc. — worker work
|
|
18
18
|
```
|
|
@@ -45,7 +45,7 @@ WRONG: Bash("npm test"), Bash("tsc"), etc. — worker work
|
|
|
45
45
|
- Modify test files or source code
|
|
46
46
|
- Spawn workers with general-purpose agent (MUST use team-worker)
|
|
47
47
|
- Generate more than 6 worker roles
|
|
48
|
-
- Call CLI tools (
|
|
48
|
+
- Call CLI tools (maestro cli) — only workers use CLI
|
|
49
49
|
|
|
50
50
|
## Command Execution Protocol
|
|
51
51
|
When coordinator needs to execute a specific phase:
|
|
@@ -26,7 +26,7 @@ Run test suites, collect coverage data, and perform automatic fix cycles when te
|
|
|
26
26
|
| Target layer | task description `layer: L1/L2/L3` | Yes |
|
|
27
27
|
|
|
28
28
|
1. Extract session path and target layer from task description
|
|
29
|
-
2. Load validation specs: Run `
|
|
29
|
+
2. Load validation specs: Run `maestro spec load --category validation` for verification rules and acceptance criteria
|
|
30
30
|
3. Read .msg/meta.json for strategy and generated test file list
|
|
31
31
|
3. Detect test command by framework:
|
|
32
32
|
|
|
@@ -39,7 +39,7 @@ Scan codebase from multiple perspectives (bug, security, test-coverage, code-qua
|
|
|
39
39
|
|
|
40
40
|
**Low complexity**: Use `mcp__ace-tool__search_context` for quick pattern-based scan.
|
|
41
41
|
|
|
42
|
-
**Medium/High complexity**: CLI fan-out -- one `
|
|
42
|
+
**Medium/High complexity**: CLI fan-out -- one `maestro cli --mode analysis` per perspective:
|
|
43
43
|
|
|
44
44
|
For each active perspective, build prompt:
|
|
45
45
|
```
|
|
@@ -50,7 +50,7 @@ CONTEXT: @<scan-scope>
|
|
|
50
50
|
EXPECTED: List of findings with severity (critical/high/medium/low), file:line references, description
|
|
51
51
|
CONSTRAINTS: Focus on actionable findings only
|
|
52
52
|
```
|
|
53
|
-
Execute via: `
|
|
53
|
+
Execute via: `maestro cli -p "<prompt>" --tool gemini --mode analysis`
|
|
54
54
|
|
|
55
55
|
After all perspectives complete:
|
|
56
56
|
- Parse CLI outputs into structured findings
|
|
@@ -61,7 +61,7 @@ Before calling ANY tool, apply this check:
|
|
|
61
61
|
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
62
62
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
63
63
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
64
|
-
| `Bash("
|
|
64
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
65
65
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
66
66
|
|
|
67
67
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -75,7 +75,7 @@ Before calling ANY tool, apply this check:
|
|
|
75
75
|
- **Session prefix**: `RV`
|
|
76
76
|
- **Session path**: `.workflow/.team/RV-<slug>-<date>/`
|
|
77
77
|
- **Team name**: `review`
|
|
78
|
-
- **CLI tools**: `
|
|
78
|
+
- **CLI tools**: `maestro cli --mode analysis` (read-only), `maestro cli --mode write` (modifications)
|
|
79
79
|
- **Message bus**: `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)`
|
|
80
80
|
|
|
81
81
|
## Worker Spawn Template
|
|
@@ -12,7 +12,7 @@ Orchestrate team-review: parse target -> detect mode -> dispatch task chain -> m
|
|
|
12
12
|
**FORBIDDEN** (even if the task seems trivial):
|
|
13
13
|
```
|
|
14
14
|
WRONG: Read/Grep/Glob on project source code — worker work
|
|
15
|
-
WRONG: Bash("
|
|
15
|
+
WRONG: Bash("maestro cli ...") — worker work
|
|
16
16
|
WRONG: Bash("semgrep/eslint/tsc ...") — worker work
|
|
17
17
|
WRONG: Edit/Write on project source files — worker work
|
|
18
18
|
```
|
|
@@ -45,7 +45,7 @@ WRONG: Edit/Write on project source files — worker work
|
|
|
45
45
|
- Perform code review or scanning directly
|
|
46
46
|
- Bypass worker roles
|
|
47
47
|
- Spawn workers with general-purpose agent (MUST use team_worker)
|
|
48
|
-
- Call CLI tools (
|
|
48
|
+
- Call CLI tools (maestro cli) — only workers use CLI
|
|
49
49
|
|
|
50
50
|
## Command Execution Protocol
|
|
51
51
|
When coordinator needs to execute a specific phase:
|
|
@@ -21,7 +21,7 @@ Deep analysis on scan findings: triage, root cause / impact / optimization enric
|
|
|
21
21
|
| .msg/meta.json | <session>/.msg/meta.json | No |
|
|
22
22
|
|
|
23
23
|
1. Extract session path, input path, dimensions from task description
|
|
24
|
-
2. Load review specs: Run `
|
|
24
|
+
2. Load review specs: Run `maestro spec load --category review` for review standards, checklists, and approval gates
|
|
25
25
|
3. Load scan results. If missing or empty -> report clean, complete immediately
|
|
26
26
|
3. Load wisdom files from `<session>/wisdom/`
|
|
27
27
|
4. Triage findings into two buckets:
|
|
@@ -52,7 +52,7 @@ Build prompt per group requesting 6 enrichment fields per finding:
|
|
|
52
52
|
- `fix_complexity`: low / medium / high
|
|
53
53
|
- `fix_dependencies`: finding IDs that must be fixed first
|
|
54
54
|
|
|
55
|
-
Execute via `
|
|
55
|
+
Execute via `maestro cli --tool gemini --mode analysis --rule analysis-diagnose-bug-root-cause` (fallback: qwen -> codex). Parse JSON array responses, merge with originals (CLI-enriched replace originals, unenriched get defaults). Write `<session>/review/enriched-findings.json`.
|
|
56
56
|
|
|
57
57
|
## Phase 4: Report Generation
|
|
58
58
|
|
|
@@ -59,7 +59,7 @@ Build prompt with target file patterns, toolchain dedup summary, and per-dimensi
|
|
|
59
59
|
- PRF: Algorithm complexity, N+1 queries, unnecessary sync, memory leaks, missing caching
|
|
60
60
|
- MNT: Architectural coupling, abstraction leaks, convention violations, dead code
|
|
61
61
|
|
|
62
|
-
Execute via `
|
|
62
|
+
Execute via `maestro cli --tool gemini --mode analysis --rule analysis-review-code-quality` (fallback: qwen -> codex). Parse JSON array response, validate required fields (dimension, title, location.file), enforce per-dimension limit (max 5 each), filter minimum severity (medium+). Write `<session>/scan/semantic-findings.json`.
|
|
63
63
|
|
|
64
64
|
## Phase 4: Aggregate & Output
|
|
65
65
|
|
|
@@ -63,7 +63,7 @@ Before calling ANY tool, apply this check:
|
|
|
63
63
|
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
64
64
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
65
65
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
66
|
-
| `Bash("
|
|
66
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
67
67
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
68
68
|
|
|
69
69
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -76,7 +76,7 @@ Before calling ANY tool, apply this check:
|
|
|
76
76
|
|
|
77
77
|
- **Session prefix**: `TD`
|
|
78
78
|
- **Session path**: `.workflow/.team/TD-<slug>-<date>/`
|
|
79
|
-
- **CLI tools**: `
|
|
79
|
+
- **CLI tools**: `maestro cli --mode analysis` (read-only), `maestro cli --mode write` (modifications)
|
|
80
80
|
- **Message bus**: `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)`
|
|
81
81
|
- **Max GC rounds**: 3
|
|
82
82
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
**FORBIDDEN** (even if the task seems trivial):
|
|
13
13
|
```
|
|
14
14
|
WRONG: Read/Grep/Glob on project source code — worker work
|
|
15
|
-
WRONG: Bash("
|
|
15
|
+
WRONG: Bash("maestro cli ...") — worker work
|
|
16
16
|
WRONG: Edit/Write on project source files — worker work
|
|
17
17
|
```
|
|
18
18
|
|
|
@@ -37,7 +37,7 @@ For each batch, use CLI tool for implementation:
|
|
|
37
37
|
**Per-batch delegation**:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
|
-
|
|
40
|
+
maestro cli -p "PURPOSE: Apply tech debt fixes in batch; success = all items fixed without breaking changes
|
|
41
41
|
TASK: <batch-type-specific-tasks>
|
|
42
42
|
MODE: write
|
|
43
43
|
CONTEXT: @<worktree-path>/**/* | Memory: Remediation plan context
|
|
@@ -18,7 +18,7 @@ Multi-dimension tech debt scanner. Scan codebase across 5 dimensions (code, arch
|
|
|
18
18
|
| .msg/meta.json | <session>/.msg/meta.json | Yes |
|
|
19
19
|
|
|
20
20
|
1. Extract session path and scan scope from task description
|
|
21
|
-
2. Load debug specs: Run `
|
|
21
|
+
2. Load debug specs: Run `maestro spec load --category debug` for known issues, workarounds, and root-cause notes
|
|
22
22
|
3. Read .msg/meta.json for team context
|
|
23
23
|
3. Detect project type and framework:
|
|
24
24
|
|
|
@@ -56,7 +56,7 @@ Multi-dimension tech debt scanner. Scan codebase across 5 dimensions (code, arch
|
|
|
56
56
|
- Classify findings into dimensions
|
|
57
57
|
|
|
58
58
|
**Medium/High Complexity** (Fan-out):
|
|
59
|
-
- Fan-out A: CLI exploration (structure, patterns, dependencies angles) via `
|
|
59
|
+
- Fan-out A: CLI exploration (structure, patterns, dependencies angles) via `maestro cli --tool gemini --mode analysis`
|
|
60
60
|
- Fan-out B: CLI dimension analysis (parallel gemini per dimension -- code, architecture, testing, dependency, documentation)
|
|
61
61
|
- Fan-out C (High only): Multi-perspective Gemini analysis (security, performance, code-quality, architecture)
|
|
62
62
|
- Fan-in: Merge results, cross-deduplicate by file:line, boost severity for multi-source findings
|
|
@@ -58,7 +58,7 @@ Execute 4-layer validation (all commands in worktree):
|
|
|
58
58
|
**Auto-fix attempt** (when total_regressions <= 3):
|
|
59
59
|
- Use CLI tool to fix regressions in worktree:
|
|
60
60
|
```
|
|
61
|
-
Bash(`cd "${worktreePath}" &&
|
|
61
|
+
Bash(`cd "${worktreePath}" && maestro cli -p "PURPOSE: Fix regressions found in validation
|
|
62
62
|
TASK: ${regressionDetails}
|
|
63
63
|
MODE: write
|
|
64
64
|
CONTEXT: @${modifiedFiles.join(' @')}
|
|
@@ -62,7 +62,7 @@ Before calling ANY tool, apply this check:
|
|
|
62
62
|
| `Read` on `roles/`, `commands/`, `specs/` | ALLOWED | Loading own instructions |
|
|
63
63
|
| `Read/Grep/Glob` on project source code | BLOCKED | Delegate to worker |
|
|
64
64
|
| `Edit` on any file outside `.workflow/` | BLOCKED | Delegate to worker |
|
|
65
|
-
| `Bash("
|
|
65
|
+
| `Bash("maestro cli ...")` | BLOCKED | Only workers call CLI |
|
|
66
66
|
| `Bash` running build/test/lint commands | BLOCKED | Delegate to worker |
|
|
67
67
|
|
|
68
68
|
**If a tool call is BLOCKED**: STOP. Create a task, spawn a worker.
|
|
@@ -76,7 +76,7 @@ Before calling ANY tool, apply this check:
|
|
|
76
76
|
- **Session prefix**: `TST`
|
|
77
77
|
- **Session path**: `.workflow/.team/TST-<slug>-<date>/`
|
|
78
78
|
- **Team name**: `testing`
|
|
79
|
-
- **CLI tools**: `
|
|
79
|
+
- **CLI tools**: `maestro cli --mode analysis` (read-only), `maestro cli --mode write` (modifications)
|
|
80
80
|
- **Message bus**: `mcp__maestro-tools__team_msg(session_id=<session-id>, ...)`
|
|
81
81
|
|
|
82
82
|
## Worker Spawn Template
|
|
@@ -12,7 +12,7 @@ Orchestrate team-testing: analyze -> dispatch -> spawn -> monitor -> report.
|
|
|
12
12
|
**FORBIDDEN** (even if the task seems trivial):
|
|
13
13
|
```
|
|
14
14
|
WRONG: Read/Grep/Glob on project source code — worker work
|
|
15
|
-
WRONG: Bash("
|
|
15
|
+
WRONG: Bash("maestro cli ...") — worker work
|
|
16
16
|
WRONG: Bash("npm test"), Bash("jest"), etc. — worker work
|
|
17
17
|
WRONG: Edit/Write on test or source files — worker work
|
|
18
18
|
```
|
|
@@ -43,7 +43,7 @@ WRONG: Edit/Write on test or source files — worker work
|
|
|
43
43
|
- Skip quality gates when coverage is below target
|
|
44
44
|
- Modify test files or source code directly -- delegate to workers
|
|
45
45
|
- Force-advance pipeline past failed GC loops
|
|
46
|
-
- Call CLI tools (
|
|
46
|
+
- Call CLI tools (maestro cli) — only workers use CLI
|
|
47
47
|
|
|
48
48
|
## Command Execution Protocol
|
|
49
49
|
When coordinator needs to execute a specific phase:
|
|
@@ -24,7 +24,7 @@ Execute tests, collect coverage, attempt auto-fix for failures. Acts as the Crit
|
|
|
24
24
|
| .msg/meta.json | <session>/wisdom/.msg/meta.json | No |
|
|
25
25
|
|
|
26
26
|
1. Extract session path and test directory from task description
|
|
27
|
-
2. Load test specs: Run `
|
|
27
|
+
2. Load test specs: Run `maestro spec load --category test` for test framework conventions and coverage targets
|
|
28
28
|
3. Extract coverage target (default: 80%)
|
|
29
29
|
3. Read .msg/meta.json for framework info (from strategist namespace)
|
|
30
30
|
4. Determine test framework:
|
|
@@ -61,7 +61,7 @@ Bash("<test-command> 2>&1 || true")
|
|
|
61
61
|
**Auto-fix delegation** (on failure):
|
|
62
62
|
|
|
63
63
|
```
|
|
64
|
-
Bash(`
|
|
64
|
+
Bash(`maestro cli -p "PURPOSE: Fix test failures to achieve pass rate >= 0.95; success = all tests pass
|
|
65
65
|
TASK: • Analyze test failure output • Identify root causes • Fix test code only (not source) • Preserve test intent
|
|
66
66
|
MODE: write
|
|
67
67
|
CONTEXT: @<session>/<test-dir>/**/* | Memory: Test framework: <framework>, iteration <N>/3
|
|
@@ -22,7 +22,7 @@ Generate test code by layer (L1 unit / L2 integration / L3 E2E). Acts as the Gen
|
|
|
22
22
|
| .msg/meta.json | <session>/wisdom/.msg/meta.json | No |
|
|
23
23
|
|
|
24
24
|
1. Extract session path and layer from task description
|
|
25
|
-
2. Load test specs: Run `
|
|
25
|
+
2. Load test specs: Run `maestro spec load --category test` for test framework conventions and coverage targets
|
|
26
26
|
3. Read test strategy:
|
|
27
27
|
|
|
28
28
|
```
|
|
@@ -63,7 +63,7 @@ For revision mode:
|
|
|
63
63
|
**CLI delegation** (medium/high complexity):
|
|
64
64
|
|
|
65
65
|
```
|
|
66
|
-
Bash(`
|
|
66
|
+
Bash(`maestro cli -p "PURPOSE: Generate <layer> tests using <framework> to achieve coverage target; success = all priority files covered with quality tests
|
|
67
67
|
TASK: • Analyze source files • Generate test cases (happy path, edge cases, errors) • Write test files with proper structure • Ensure import resolution
|
|
68
68
|
MODE: write
|
|
69
69
|
CONTEXT: @<source-files> @<session>/strategy/test-strategy.md | Memory: Framework: <framework>, Layer: <layer>, Round: <round>
|
package/README.md
CHANGED
|
@@ -220,14 +220,22 @@ Maestro-Flow doesn't pick one AI — it uses them together:
|
|
|
220
220
|
|
|
221
221
|
### Install
|
|
222
222
|
|
|
223
|
+
#### npm (Recommended)
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
npm install -g maestro-flow
|
|
227
|
+
|
|
228
|
+
# Install workflows, commands, agents, templates
|
|
229
|
+
maestro install
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### From Source
|
|
233
|
+
|
|
223
234
|
```bash
|
|
224
235
|
git clone https://github.com/catlog22/Maestro-Flow.git
|
|
225
236
|
cd Maestro-Flow
|
|
226
237
|
npm install && npm run build
|
|
227
|
-
|
|
228
|
-
# Dashboard
|
|
229
|
-
cd dashboard && npm install && npm run dev
|
|
230
|
-
# → http://127.0.0.1:3001
|
|
238
|
+
maestro install
|
|
231
239
|
```
|
|
232
240
|
|
|
233
241
|
### First Run
|
|
@@ -242,6 +250,37 @@ cd dashboard && npm install && npm run dev
|
|
|
242
250
|
/maestro "build a REST API for user management"
|
|
243
251
|
```
|
|
244
252
|
|
|
253
|
+
### Dashboard & TUI
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Web dashboard — real-time project control panel
|
|
257
|
+
maestro serve
|
|
258
|
+
# → http://127.0.0.1:3001
|
|
259
|
+
|
|
260
|
+
# TUI — terminal-based dashboard
|
|
261
|
+
maestro view
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
| View | Key | Description |
|
|
265
|
+
|------|-----|-------------|
|
|
266
|
+
| **Board** | `K` | Kanban — Backlog, In Progress, Review, Done |
|
|
267
|
+
| **Timeline** | `T` | Gantt-style phase timeline |
|
|
268
|
+
| **Table** | `L` | Sortable phase & issue table |
|
|
269
|
+
| **Center** | `C` | Command center — active executions, quality metrics |
|
|
270
|
+
|
|
271
|
+
### Workflow Launcher
|
|
272
|
+
|
|
273
|
+
Switch between different workflow configurations (e.g., Maestro ↔ CCW):
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
maestro launcher # Interactive workflow + settings picker
|
|
277
|
+
maestro launcher list # Show registered workflows
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
When switching workflows, the launcher automatically:
|
|
281
|
+
- Detects missing dependencies and offers `npm install -g <package>` + resource installation
|
|
282
|
+
- Detects project-level workflow file conflicts and offers cleanup
|
|
283
|
+
|
|
245
284
|
### MCP Server
|
|
246
285
|
|
|
247
286
|
Expose Maestro-Flow tools to Claude Desktop and other MCP clients:
|
|
@@ -15,6 +15,7 @@ interface NormalizedEntry {
|
|
|
15
15
|
}
|
|
16
16
|
export declare class DashboardBridge {
|
|
17
17
|
private ws;
|
|
18
|
+
private activeCount;
|
|
18
19
|
/**
|
|
19
20
|
* Attempt to connect to the Dashboard WS endpoint.
|
|
20
21
|
* Returns immediately if connection fails or times out.
|
|
@@ -24,8 +25,12 @@ export declare class DashboardBridge {
|
|
|
24
25
|
forwardSpawn(process: AgentProcess): void;
|
|
25
26
|
/** Forward a normalized entry to the Dashboard */
|
|
26
27
|
forwardEntry(entry: NormalizedEntry): void;
|
|
28
|
+
/** Register an active CLI process for reference counting */
|
|
29
|
+
registerProcess(): void;
|
|
27
30
|
/** Notify Dashboard that the CLI process has stopped */
|
|
28
31
|
forwardStopped(processId: string): void;
|
|
32
|
+
/** Close the WS connection only when no active processes remain */
|
|
33
|
+
closeIfIdle(): void;
|
|
29
34
|
/** Close the WS connection */
|
|
30
35
|
close(): void;
|
|
31
36
|
private send;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/dashboard-bridge.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA0B;
|
|
1
|
+
{"version":3,"file":"dashboard-bridge.d.ts","sourceRoot":"","sources":["../../src/agents/dashboard-bridge.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAa;IAEhC;;;OAGG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBjE,qDAAqD;IACrD,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIzC,kDAAkD;IAClD,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAI1C,4DAA4D;IAC5D,eAAe,IAAI,IAAI;IAIvB,wDAAwD;IACxD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKvC,mEAAmE;IACnE,WAAW,IAAI,IAAI;IAMnB,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,IAAI;CASb"}
|
|
@@ -8,6 +8,7 @@ import { WebSocket } from 'ws';
|
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
export class DashboardBridge {
|
|
10
10
|
ws = null;
|
|
11
|
+
activeCount = 0;
|
|
11
12
|
/**
|
|
12
13
|
* Attempt to connect to the Dashboard WS endpoint.
|
|
13
14
|
* Returns immediately if connection fails or times out.
|
|
@@ -38,9 +39,20 @@ export class DashboardBridge {
|
|
|
38
39
|
forwardEntry(entry) {
|
|
39
40
|
this.send({ action: 'cli:entry', entry });
|
|
40
41
|
}
|
|
42
|
+
/** Register an active CLI process for reference counting */
|
|
43
|
+
registerProcess() {
|
|
44
|
+
this.activeCount++;
|
|
45
|
+
}
|
|
41
46
|
/** Notify Dashboard that the CLI process has stopped */
|
|
42
47
|
forwardStopped(processId) {
|
|
43
48
|
this.send({ action: 'cli:stopped', processId });
|
|
49
|
+
this.activeCount--;
|
|
50
|
+
}
|
|
51
|
+
/** Close the WS connection only when no active processes remain */
|
|
52
|
+
closeIfIdle() {
|
|
53
|
+
if (this.activeCount <= 0) {
|
|
54
|
+
this.close();
|
|
55
|
+
}
|
|
44
56
|
}
|
|
45
57
|
/** Close the WS connection */
|
|
46
58
|
close() {
|
|
@@ -48,6 +60,7 @@ export class DashboardBridge {
|
|
|
48
60
|
this.ws.close();
|
|
49
61
|
}
|
|
50
62
|
this.ws = null;
|
|
63
|
+
this.activeCount = 0;
|
|
51
64
|
}
|
|
52
65
|
send(data) {
|
|
53
66
|
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-bridge.js","sourceRoot":"","sources":["../../src/agents/dashboard-bridge.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAuB/B,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,OAAO,eAAe;IAClB,EAAE,GAAqB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard-bridge.js","sourceRoot":"","sources":["../../src/agents/dashboard-bridge.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAuB/B,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,OAAO,eAAe;IAClB,EAAE,GAAqB,IAAI,CAAC;IAC5B,WAAW,GAAW,CAAC,CAAC;IAEhC;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;QAC5C,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,EAAE,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;YAE9B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACjB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAClB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,OAAqB;QAChC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,kDAAkD;IAClD,YAAY,CAAC,KAAsB;QACjC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,4DAA4D;IAC5D,eAAe;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,wDAAwD;IACxD,cAAc,CAAC,SAAiB;QAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,mEAAmE;IACnE,WAAW;QACT,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,KAAK;QACH,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;IAEO,IAAI,CAAC,IAAa;QACxB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|