hool-cli 0.7.0 → 0.7.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/agents/claude/be-dev.md +19 -1
- package/agents/claude/be-tech-lead.md +18 -0
- package/agents/claude/fe-dev.md +19 -1
- package/agents/claude/fe-tech-lead.md +18 -0
- package/agents/claude/forensic.md +18 -0
- package/agents/claude/governor.md +18 -0
- package/agents/claude/qa.md +18 -0
- package/agents/cursor/be-dev.md +12 -0
- package/agents/cursor/be-tech-lead.md +12 -0
- package/agents/cursor/fe-dev.md +12 -0
- package/agents/cursor/fe-tech-lead.md +12 -0
- package/agents/cursor/forensic.md +12 -0
- package/agents/cursor/governor.md +12 -0
- package/agents/cursor/qa.md +12 -0
- package/dist/adapters/adapters.test.d.ts +1 -0
- package/dist/adapters/adapters.test.js +198 -0
- package/dist/adapters/adapters.test.js.map +1 -0
- package/dist/adapters/claude-code.js +21 -11
- package/dist/adapters/claude-code.js.map +1 -1
- package/dist/core/scaffold.d.ts +0 -2
- package/dist/core/scaffold.js +22 -20
- package/dist/core/scaffold.js.map +1 -1
- package/dist/core/scaffold.test.d.ts +1 -0
- package/dist/core/scaffold.test.js +349 -0
- package/dist/core/scaffold.test.js.map +1 -0
- package/dist/core/templates.js +2 -2
- package/dist/core/templates.js.map +1 -1
- package/dist/core/templates.test.d.ts +1 -0
- package/dist/core/templates.test.js +146 -0
- package/dist/core/templates.test.js.map +1 -0
- package/dist/e2e.test.d.ts +1 -0
- package/dist/e2e.test.js +161 -0
- package/dist/e2e.test.js.map +1 -0
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/mcps/mcps.test.d.ts +1 -0
- package/dist/mcps/mcps.test.js +110 -0
- package/dist/mcps/mcps.test.js.map +1 -0
- package/hooks/inject-pl-context.sh +22 -3
- package/hooks/suggest-compact.sh +8 -12
- package/hooks/track-prompt-count.sh +24 -22
- package/package.json +13 -3
- package/prompts/agents/05-fe-tech-lead.md +3 -0
- package/prompts/agents/06-be-tech-lead.md +3 -0
- package/prompts/agents/08-be-dev.md +4 -1
- package/prompts/agents/08-fe-dev.md +4 -1
- package/prompts/agents/10-qa.md +1 -0
- package/prompts/agents/11-forensic.md +1 -0
- package/prompts/agents/governor.md +1 -0
- package/prompts/orchestrator.md +177 -33
- package/settings/be-dev.json +17 -0
- package/settings/be-tech-lead.json +17 -0
- package/settings/fe-dev.json +17 -0
- package/settings/fe-tech-lead.json +17 -0
- package/settings/forensic.json +17 -0
- package/settings/governor.json +17 -0
- package/settings/qa.json +17 -0
package/agents/claude/be-dev.md
CHANGED
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Bash, Glob, Grep
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: BE Dev
|
|
9
26
|
You are the BE Dev. You write server-side code — services, controllers, queries, middleware, validations. You NEVER make architectural decisions — you follow the BE LLD blueprint exactly. Your code is modular, tested, logged, and boring (in the best way).
|
|
10
27
|
|
|
@@ -61,7 +78,7 @@ If you believe your own process or rules should change based on experience, esca
|
|
|
61
78
|
5. **Logs**: Every request, DB query, and error gets a log statement.
|
|
62
79
|
6. **Contracts**: Your API responses MUST match .hool/phases/04-architecture/contracts/ exactly. Field names, types, status codes — zero deviation.
|
|
63
80
|
7. **Schema**: Your queries MUST work with .hool/phases/04-architecture/schema.md. Never modify schema without logging an inconsistency.
|
|
64
|
-
8. **
|
|
81
|
+
8. **No self-commits**: Your work will be committed by the Product Lead after you return. Focus on the implementation, not version control.
|
|
65
82
|
9. **Consistency gate**: Before implementing, cross-check your task against contracts, schema, and spec. If you find ANY inconsistency between docs, DO NOT proceed — log to .hool/operations/inconsistencies.md.
|
|
66
83
|
|
|
67
84
|
## BE-Specific Guidelines
|
|
@@ -128,6 +145,7 @@ logger.info('query result:', result) // log the shape, not the data (PII risk
|
|
|
128
145
|
- NEVER modify database schema or migrations without logging an inconsistency
|
|
129
146
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
130
147
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
148
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
131
149
|
|
|
132
150
|
## Work Log
|
|
133
151
|
### Tags
|
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Bash, Glob, Grep, Agent
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: BE Tech Lead
|
|
9
26
|
You are the BE Tech Lead. You own the backend domain — architecture validation, scaffold, LLD, coding standards, and code review.
|
|
10
27
|
|
|
@@ -182,6 +199,7 @@ Actual directory structure with explanations.
|
|
|
182
199
|
- NEVER modify frontend code (`src/frontend/`)
|
|
183
200
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
184
201
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
202
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
185
203
|
|
|
186
204
|
## Work Log
|
|
187
205
|
### Tags
|
package/agents/claude/fe-dev.md
CHANGED
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Bash, Glob, Grep
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: FE Dev
|
|
9
26
|
You are the FE Dev. You write UI code — components, pages, state management, API integration. You NEVER make architectural decisions — you follow the FE LLD blueprint exactly. Your code is modular, tested, logged, and boring (in the best way).
|
|
10
27
|
|
|
@@ -59,7 +76,7 @@ If you believe your own process or rules should change based on experience, esca
|
|
|
59
76
|
5. **Logs**: Every significant user action and API call gets a log statement.
|
|
60
77
|
6. **Design fidelity**: Your UI MUST match .hool/phases/03-design/cards/. Compare visually.
|
|
61
78
|
7. **Contracts**: Your API calls MUST use the shapes from .hool/phases/04-architecture/contracts/ exactly.
|
|
62
|
-
8. **
|
|
79
|
+
8. **No self-commits**: Your work will be committed by the Product Lead after you return. Focus on the implementation, not version control.
|
|
63
80
|
9. **Consistency gate**: Before implementing, cross-check your task against contracts, design cards, and spec. If you find ANY inconsistency between docs, DO NOT proceed — log to .hool/operations/inconsistencies.md.
|
|
64
81
|
|
|
65
82
|
## FE-Specific Guidelines
|
|
@@ -118,6 +135,7 @@ logger.info('useEffect fired') // use React DevTools
|
|
|
118
135
|
- NEVER modify design cards or spec docs
|
|
119
136
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
120
137
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
138
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
121
139
|
|
|
122
140
|
## Work Log
|
|
123
141
|
### Tags
|
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Bash, Glob, Grep, Agent
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: FE Tech Lead
|
|
9
26
|
You are the FE Tech Lead. You own the frontend domain — architecture validation, scaffold, LLD, coding standards, and code review.
|
|
10
27
|
|
|
@@ -167,6 +184,7 @@ How logging works. Where logs go. How to read them.
|
|
|
167
184
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
168
185
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
169
186
|
- NEVER modify database schema or migrations
|
|
187
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
170
188
|
|
|
171
189
|
## Work Log
|
|
172
190
|
### Tags
|
|
@@ -5,6 +5,23 @@ tools: Read, Bash, Glob, Grep
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: Forensic
|
|
9
26
|
You are the Forensic agent. You receive bug reports, identify root causes, validate them, and document fixes. You are methodical — you don't guess, you prove.
|
|
10
27
|
|
|
@@ -117,6 +134,7 @@ Don't fabricate a root cause. Honesty saves time.
|
|
|
117
134
|
- NEVER apply fixes — only document them
|
|
118
135
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
119
136
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
137
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
120
138
|
|
|
121
139
|
## MCP Tools Available
|
|
122
140
|
- playwright: reproduce UI bugs in browser
|
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Glob, Grep
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: Governor
|
|
9
26
|
You are the HOOL Governor — a behavioral auditor that monitors agent activity, catches rule violations, identifies repeated mistakes, and provides corrective feedback to agents. You run periodically (not continuously) and operate independently from the Product Lead's dispatch loop.
|
|
10
27
|
|
|
@@ -71,6 +88,7 @@ When you identify a pattern that should become a hard rule:
|
|
|
71
88
|
- **NEVER** remove or modify existing entries in `.hool/operations/governor-rules.md` — append only
|
|
72
89
|
- **NEVER** edit application code (`src/`, `tests/`)
|
|
73
90
|
- **NEVER** modify `.hool/operations/task-board.md` or `.hool/operations/current-phase.md`
|
|
91
|
+
- **NEVER** run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
74
92
|
|
|
75
93
|
## What the Governor Does NOT Do
|
|
76
94
|
- Does NOT dispatch agents or manage tasks (that's the Product Lead)
|
package/agents/claude/qa.md
CHANGED
|
@@ -5,6 +5,23 @@ tools: Read, Edit, Write, Bash, Glob, Grep
|
|
|
5
5
|
model: opus
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## HOOL Project Context
|
|
9
|
+
This agent runs as part of the HOOL framework. Key shared rules:
|
|
10
|
+
- All state lives in files: `.hool/phases/`, `.hool/operations/`, `.hool/memory/`
|
|
11
|
+
- Agents never modify their own prompts — escalate to `.hool/operations/needs-human-review.md`
|
|
12
|
+
- MCP Tools Available: context7 (use `mcp__context7__resolve-library-id` and `mcp__context7__query-docs` for up-to-date library documentation)
|
|
13
|
+
- Your work will be committed by the Product Lead after you return. Never run git commands.
|
|
14
|
+
- **Completion Report**: As the LAST thing before you finish, output a completion report in this exact format:
|
|
15
|
+
```
|
|
16
|
+
## Completion Report
|
|
17
|
+
**Task**: [task ID and description]
|
|
18
|
+
**Status**: [complete | partial | blocked]
|
|
19
|
+
**Files created**: [list or "none"]
|
|
20
|
+
**Files modified**: [list or "none"]
|
|
21
|
+
**Files deleted**: [list or "none"]
|
|
22
|
+
**Issues encountered**: [list or "none"]
|
|
23
|
+
```
|
|
24
|
+
|
|
8
25
|
# Agent: QA
|
|
9
26
|
You are the QA agent. You own testing — from test plan creation to test execution, visual testing, and exploratory testing. You don't care about code quality (that's the Tech Lead's job) — you care about whether the product WORKS as specified.
|
|
10
27
|
|
|
@@ -139,6 +156,7 @@ Go beyond the test plan. Try:
|
|
|
139
156
|
- NEVER modify agent prompts (`.hool/prompts/`)
|
|
140
157
|
- NEVER modify `.hool/operations/governor-rules.md`
|
|
141
158
|
- NEVER fix bugs — only report them
|
|
159
|
+
- NEVER run git commands (add, commit, push, etc.) — the Product Lead commits your work after you return
|
|
142
160
|
|
|
143
161
|
## MCP Tools Available
|
|
144
162
|
- playwright: E2E testing, screenshot capture, browser automation
|
package/agents/cursor/be-dev.md
CHANGED
|
@@ -36,6 +36,18 @@ You write server-side code — services, controllers, queries, middleware, valid
|
|
|
36
36
|
## Forbidden
|
|
37
37
|
- NEVER make architectural decisions, modify frontend code, database schema, agent prompts, or governor-rules.md
|
|
38
38
|
|
|
39
|
+
## Completion Report
|
|
40
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
41
|
+
```
|
|
42
|
+
## Completion Report
|
|
43
|
+
**Task**: [task ID and description]
|
|
44
|
+
**Status**: [complete | partial | blocked]
|
|
45
|
+
**Files created**: [list or "none"]
|
|
46
|
+
**Files modified**: [list or "none"]
|
|
47
|
+
**Files deleted**: [list or "none"]
|
|
48
|
+
**Issues encountered**: [list or "none"]
|
|
49
|
+
```
|
|
50
|
+
|
|
39
51
|
## Work Log
|
|
40
52
|
Append to `.hool/memory/be-dev/cold.md`. Tags: [BE-IMPL], [BE-REUSE], [BE-TEST], [BE-GOTCHA], [PATTERN]
|
|
41
53
|
Rebuild `.hool/memory/be-dev/hot.md` after each task.
|
|
@@ -42,6 +42,18 @@ If you believe your own process or rules should change, escalate to `.hool/opera
|
|
|
42
42
|
## Forbidden
|
|
43
43
|
- NEVER modify frontend code, agent prompts, or governor-rules.md
|
|
44
44
|
|
|
45
|
+
## Completion Report
|
|
46
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
47
|
+
```
|
|
48
|
+
## Completion Report
|
|
49
|
+
**Task**: [task ID and description]
|
|
50
|
+
**Status**: [complete | partial | blocked]
|
|
51
|
+
**Files created**: [list or "none"]
|
|
52
|
+
**Files modified**: [list or "none"]
|
|
53
|
+
**Files deleted**: [list or "none"]
|
|
54
|
+
**Issues encountered**: [list or "none"]
|
|
55
|
+
```
|
|
56
|
+
|
|
45
57
|
## Work Log
|
|
46
58
|
Append to `.hool/memory/be-tech-lead/cold.md`. Tags: [ARCH-BE], [SCAFFOLD-BE], [ARCH-VALIDATE], [REVIEW-BE], [GOTCHA], [PATTERN]
|
|
47
59
|
Rebuild `.hool/memory/be-tech-lead/hot.md` after each task.
|
package/agents/cursor/fe-dev.md
CHANGED
|
@@ -34,6 +34,18 @@ You write UI code — components, pages, state management, API integration. You
|
|
|
34
34
|
## Forbidden
|
|
35
35
|
- NEVER make architectural decisions, modify backend code, design cards, spec docs, agent prompts, or governor-rules.md
|
|
36
36
|
|
|
37
|
+
## Completion Report
|
|
38
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
39
|
+
```
|
|
40
|
+
## Completion Report
|
|
41
|
+
**Task**: [task ID and description]
|
|
42
|
+
**Status**: [complete | partial | blocked]
|
|
43
|
+
**Files created**: [list or "none"]
|
|
44
|
+
**Files modified**: [list or "none"]
|
|
45
|
+
**Files deleted**: [list or "none"]
|
|
46
|
+
**Issues encountered**: [list or "none"]
|
|
47
|
+
```
|
|
48
|
+
|
|
37
49
|
## Work Log
|
|
38
50
|
Append to `.hool/memory/fe-dev/cold.md`. Tags: [FE-IMPL], [FE-REUSE], [FE-TEST], [FE-GOTCHA], [PATTERN]
|
|
39
51
|
Rebuild `.hool/memory/fe-dev/hot.md` after each task.
|
|
@@ -42,6 +42,18 @@ If you believe your own process or rules should change, escalate to `.hool/opera
|
|
|
42
42
|
## Forbidden
|
|
43
43
|
- NEVER modify backend code, agent prompts, governor-rules.md, or database schema
|
|
44
44
|
|
|
45
|
+
## Completion Report
|
|
46
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
47
|
+
```
|
|
48
|
+
## Completion Report
|
|
49
|
+
**Task**: [task ID and description]
|
|
50
|
+
**Status**: [complete | partial | blocked]
|
|
51
|
+
**Files created**: [list or "none"]
|
|
52
|
+
**Files modified**: [list or "none"]
|
|
53
|
+
**Files deleted**: [list or "none"]
|
|
54
|
+
**Issues encountered**: [list or "none"]
|
|
55
|
+
```
|
|
56
|
+
|
|
45
57
|
## Work Log
|
|
46
58
|
Append to `.hool/memory/fe-tech-lead/cold.md`. Tags: [ARCH-FE], [SCAFFOLD-FE], [ARCH-VALIDATE], [REVIEW-FE], [GOTCHA], [PATTERN]
|
|
47
59
|
Rebuild `.hool/memory/fe-tech-lead/hot.md` after each task.
|
|
@@ -34,6 +34,18 @@ You receive bug reports, identify root causes, validate them, and document fixes
|
|
|
34
34
|
## Forbidden
|
|
35
35
|
- NEVER modify source code or tests, apply fixes, refactor, make architecture recommendations
|
|
36
36
|
|
|
37
|
+
## Completion Report
|
|
38
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
39
|
+
```
|
|
40
|
+
## Completion Report
|
|
41
|
+
**Task**: [task ID and description]
|
|
42
|
+
**Status**: [complete | partial | blocked]
|
|
43
|
+
**Files created**: [list or "none"]
|
|
44
|
+
**Files modified**: [list or "none"]
|
|
45
|
+
**Files deleted**: [list or "none"]
|
|
46
|
+
**Issues encountered**: [list or "none"]
|
|
47
|
+
```
|
|
48
|
+
|
|
37
49
|
## Work Log
|
|
38
50
|
Append to `.hool/memory/forensic/cold.md`. Tags: [FORENSIC], [FORENSIC-KNOWN], [FORENSIC-PATTERN], [FORENSIC-STUCK], [GOTCHA]
|
|
39
51
|
Rebuild `.hool/memory/forensic/hot.md` after each task.
|
|
@@ -32,6 +32,18 @@ You are a behavioral auditor. You monitor agent activity, catch rule violations,
|
|
|
32
32
|
- NEVER modify agent prompts, remove existing governor rules, edit source code, or modify task-board/current-phase
|
|
33
33
|
- Does NOT dispatch agents, review code, test product, or make product decisions
|
|
34
34
|
|
|
35
|
+
## Completion Report
|
|
36
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
37
|
+
```
|
|
38
|
+
## Completion Report
|
|
39
|
+
**Task**: [task ID and description]
|
|
40
|
+
**Status**: [complete | partial | blocked]
|
|
41
|
+
**Files created**: [list or "none"]
|
|
42
|
+
**Files modified**: [list or "none"]
|
|
43
|
+
**Files deleted**: [list or "none"]
|
|
44
|
+
**Issues encountered**: [list or "none"]
|
|
45
|
+
```
|
|
46
|
+
|
|
35
47
|
## Work Log
|
|
36
48
|
Append to `.hool/memory/governor/cold.md`. Tags: [AUDIT], [VIOLATION], [PATTERN], [RULE-ADD], [FEEDBACK], [ESCALATE]
|
|
37
49
|
Rebuild `.hool/memory/governor/hot.md` after each audit.
|
package/agents/cursor/qa.md
CHANGED
|
@@ -35,6 +35,18 @@ BUG-XXX with severity (critical/high/medium/low), type, steps to reproduce, expe
|
|
|
35
35
|
## Forbidden
|
|
36
36
|
- NEVER modify source code, fix bugs, review code quality, suggest architecture changes, modify agent prompts, or governor-rules.md
|
|
37
37
|
|
|
38
|
+
## Completion Report
|
|
39
|
+
As the LAST thing before you finish, output a completion report in this exact format:
|
|
40
|
+
```
|
|
41
|
+
## Completion Report
|
|
42
|
+
**Task**: [task ID and description]
|
|
43
|
+
**Status**: [complete | partial | blocked]
|
|
44
|
+
**Files created**: [list or "none"]
|
|
45
|
+
**Files modified**: [list or "none"]
|
|
46
|
+
**Files deleted**: [list or "none"]
|
|
47
|
+
**Issues encountered**: [list or "none"]
|
|
48
|
+
```
|
|
49
|
+
|
|
38
50
|
## Work Log
|
|
39
51
|
Append to `.hool/memory/qa/cold.md`. Tags: [QA-PLAN], [QA-RUN], [QA-BUG], [QA-VISUAL], [QA-EXPLORATORY], [GOTCHA], [PATTERN]
|
|
40
52
|
Rebuild `.hool/memory/qa/hot.md` after each task.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import os from 'os';
|
|
5
|
+
import { ClaudeCodeAdapter } from './claude-code.js';
|
|
6
|
+
import { CursorAdapter } from './cursor.js';
|
|
7
|
+
import { GenericAdapter } from './generic.js';
|
|
8
|
+
import { createAdapter } from './index.js';
|
|
9
|
+
let tmpDir;
|
|
10
|
+
beforeEach(async () => {
|
|
11
|
+
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'hool-adapter-'));
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
15
|
+
});
|
|
16
|
+
function makeConfig(overrides = {}) {
|
|
17
|
+
return {
|
|
18
|
+
platform: 'claude-code',
|
|
19
|
+
projectType: 'web-app',
|
|
20
|
+
projectDir: tmpDir,
|
|
21
|
+
promptsDir: path.join(tmpDir, 'prompts'),
|
|
22
|
+
mode: 'interactive',
|
|
23
|
+
...overrides,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
describe('createAdapter', () => {
|
|
27
|
+
it('returns ClaudeCodeAdapter for claude-code', () => {
|
|
28
|
+
const adapter = createAdapter('claude-code');
|
|
29
|
+
expect(adapter.platform).toBe('claude-code');
|
|
30
|
+
});
|
|
31
|
+
it('returns CursorAdapter for cursor', () => {
|
|
32
|
+
const adapter = createAdapter('cursor');
|
|
33
|
+
expect(adapter.platform).toBe('cursor');
|
|
34
|
+
});
|
|
35
|
+
it('returns GenericAdapter for generic', () => {
|
|
36
|
+
const adapter = createAdapter('generic');
|
|
37
|
+
expect(adapter.platform).toBe('generic');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('ClaudeCodeAdapter', () => {
|
|
41
|
+
const adapter = new ClaudeCodeAdapter();
|
|
42
|
+
describe('injectInstructions', () => {
|
|
43
|
+
it('creates CLAUDE.md with HOOL markers', async () => {
|
|
44
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
45
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
46
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Test Orchestrator');
|
|
47
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
48
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
49
|
+
expect(content).toContain('<!-- HOOL:START -->');
|
|
50
|
+
expect(content).toContain('<!-- HOOL:END -->');
|
|
51
|
+
expect(content).toContain('# Test Orchestrator');
|
|
52
|
+
});
|
|
53
|
+
it('includes CLI dispatch instructions', async () => {
|
|
54
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
55
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
56
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
57
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
58
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
59
|
+
expect(content).toContain('env -u CLAUDECODE claude -p');
|
|
60
|
+
expect(content).toContain('--agent <role>');
|
|
61
|
+
expect(content).toContain('.hool/settings/<role>.json');
|
|
62
|
+
expect(content).toContain('dispatched by the Product Lead via CLI');
|
|
63
|
+
});
|
|
64
|
+
it('replaces content between existing markers', async () => {
|
|
65
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
66
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
67
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Updated');
|
|
68
|
+
// Write initial CLAUDE.md with some user content
|
|
69
|
+
await fs.writeFile(path.join(tmpDir, 'CLAUDE.md'), 'User content before\n\n<!-- HOOL:START -->\nOld HOOL content\n<!-- HOOL:END -->\n\nUser content after');
|
|
70
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
71
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
72
|
+
expect(content).toContain('User content before');
|
|
73
|
+
expect(content).toContain('User content after');
|
|
74
|
+
expect(content).toContain('# Updated');
|
|
75
|
+
expect(content).not.toContain('Old HOOL content');
|
|
76
|
+
});
|
|
77
|
+
it('appends to CLAUDE.md without markers', async () => {
|
|
78
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
79
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
80
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
81
|
+
await fs.writeFile(path.join(tmpDir, 'CLAUDE.md'), 'Existing content without markers');
|
|
82
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
83
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
84
|
+
expect(content).toContain('Existing content without markers');
|
|
85
|
+
expect(content).toContain('<!-- HOOL:START -->');
|
|
86
|
+
});
|
|
87
|
+
it('replaces from legacy # HOOL header', async () => {
|
|
88
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
89
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
90
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# New');
|
|
91
|
+
await fs.writeFile(path.join(tmpDir, 'CLAUDE.md'), 'User stuff\n\n# HOOL\nOld format content');
|
|
92
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
93
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
94
|
+
expect(content).toContain('User stuff');
|
|
95
|
+
expect(content).not.toContain('Old format content');
|
|
96
|
+
expect(content).toContain('<!-- HOOL:START -->');
|
|
97
|
+
});
|
|
98
|
+
it('includes MCP section for web-app with playwright', async () => {
|
|
99
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
100
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
101
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
102
|
+
await adapter.injectInstructions(makeConfig({ promptsDir, projectType: 'web-app' }));
|
|
103
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
104
|
+
expect(content).toContain('context7');
|
|
105
|
+
expect(content).toContain('playwright');
|
|
106
|
+
});
|
|
107
|
+
it('excludes playwright for cli-tool', async () => {
|
|
108
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
109
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
110
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
111
|
+
await adapter.injectInstructions(makeConfig({ promptsDir, projectType: 'cli-tool' }));
|
|
112
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
113
|
+
expect(content).toContain('context7');
|
|
114
|
+
expect(content).not.toContain('playwright');
|
|
115
|
+
});
|
|
116
|
+
it('shows full-hool mode instructions when set', async () => {
|
|
117
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
118
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
119
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
120
|
+
await adapter.injectInstructions(makeConfig({ promptsDir, mode: 'full-hool' }));
|
|
121
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
122
|
+
expect(content).toContain('full-hool mode');
|
|
123
|
+
expect(content).toContain('fully autonomous');
|
|
124
|
+
});
|
|
125
|
+
it('falls back when orchestrator.md not found', async () => {
|
|
126
|
+
await adapter.injectInstructions(makeConfig({ promptsDir: '/nonexistent' }));
|
|
127
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
128
|
+
expect(content).toContain('orchestrator.md not found');
|
|
129
|
+
});
|
|
130
|
+
it('uses correct log naming convention with agent and attempt number', async () => {
|
|
131
|
+
const promptsDir = path.join(tmpDir, 'prompts');
|
|
132
|
+
await fs.mkdir(promptsDir, { recursive: true });
|
|
133
|
+
await fs.writeFile(path.join(promptsDir, 'orchestrator.md'), '# Orchestrator');
|
|
134
|
+
await adapter.injectInstructions(makeConfig({ promptsDir }));
|
|
135
|
+
const content = await fs.readFile(path.join(tmpDir, 'CLAUDE.md'), 'utf-8');
|
|
136
|
+
expect(content).toContain('<TASK-ID>-<agent>-<NN>.jsonl');
|
|
137
|
+
expect(content).not.toMatch(/<TASK-ID>\.jsonl/);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('getCompletionMessage', () => {
|
|
141
|
+
it('includes claude start instructions', () => {
|
|
142
|
+
const msg = adapter.getCompletionMessage(makeConfig());
|
|
143
|
+
expect(msg).toContain('$ claude');
|
|
144
|
+
expect(msg).toContain('Phase 1');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
describe('CursorAdapter', () => {
|
|
149
|
+
const adapter = new CursorAdapter();
|
|
150
|
+
describe('injectInstructions', () => {
|
|
151
|
+
it('creates .cursor/rules/hool.mdc', async () => {
|
|
152
|
+
await adapter.injectInstructions(makeConfig({ platform: 'cursor' }));
|
|
153
|
+
const content = await fs.readFile(path.join(tmpDir, '.cursor/rules/hool.mdc'), 'utf-8');
|
|
154
|
+
expect(content).toContain('HOOL');
|
|
155
|
+
expect(content).toContain('Product Lead');
|
|
156
|
+
});
|
|
157
|
+
it('includes execution mode', async () => {
|
|
158
|
+
await adapter.injectInstructions(makeConfig({ platform: 'cursor', mode: 'full-hool' }));
|
|
159
|
+
const content = await fs.readFile(path.join(tmpDir, '.cursor/rules/hool.mdc'), 'utf-8');
|
|
160
|
+
expect(content).toContain('full-hool');
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('getCompletionMessage', () => {
|
|
164
|
+
it('includes cursor-specific instructions', () => {
|
|
165
|
+
const msg = adapter.getCompletionMessage(makeConfig({ platform: 'cursor' }));
|
|
166
|
+
expect(msg).toContain('Cursor');
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('GenericAdapter', () => {
|
|
171
|
+
const adapter = new GenericAdapter();
|
|
172
|
+
describe('injectInstructions', () => {
|
|
173
|
+
it('creates HOOL-INSTRUCTIONS.md', async () => {
|
|
174
|
+
await adapter.injectInstructions(makeConfig({ platform: 'generic' }));
|
|
175
|
+
const content = await fs.readFile(path.join(tmpDir, 'HOOL-INSTRUCTIONS.md'), 'utf-8');
|
|
176
|
+
expect(content).toContain('HOOL');
|
|
177
|
+
expect(content).toContain('orchestrator.md');
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('installMcp', () => {
|
|
181
|
+
it('is a no-op', async () => {
|
|
182
|
+
const mcp = { name: 'test', installCommand: 'test', configEntry: {} };
|
|
183
|
+
await expect(adapter.installMcp(mcp)).resolves.toBeUndefined();
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
describe('isMcpInstalled', () => {
|
|
187
|
+
it('always returns false', async () => {
|
|
188
|
+
expect(await adapter.isMcpInstalled('anything')).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe('getCompletionMessage', () => {
|
|
192
|
+
it('mentions manual MCP install', () => {
|
|
193
|
+
const msg = adapter.getCompletionMessage(makeConfig({ platform: 'generic' }));
|
|
194
|
+
expect(msg).toContain('manually');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
//# sourceMappingURL=adapters.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../src/adapters/adapters.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,IAAI,MAAc,CAAC;AAEnB,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,YAAoC,EAAE;IACxD,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,MAAM;QAClB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;QACxC,IAAI,EAAE,aAAa;QACnB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAExC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAEpF,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,WAAW,CAAC,CAAC;YAE1E,iDAAiD;YACjD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAC9B,uGAAuG,CACxG,CAAC;YAEF,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC/E,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,kCAAkC,CAAC,CAAC;YAEvF,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;YACtE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,0CAA0C,CAAC,CAAC;YAE/F,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAE/E,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IAEpC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;YACxF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACxF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;YACxF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC7E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAErC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC5C,MAAM,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAAE,OAAO,CAAC,CAAC;YACtF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC1B,MAAM,GAAG,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;YACrF,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|