hool-cli 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/agents/claude/be-dev.md +147 -0
  2. package/agents/claude/be-tech-lead.md +201 -0
  3. package/agents/claude/fe-dev.md +137 -0
  4. package/agents/claude/fe-tech-lead.md +186 -0
  5. package/agents/claude/forensic.md +138 -0
  6. package/agents/claude/governor.md +90 -0
  7. package/agents/claude/qa.md +163 -0
  8. package/agents/cursor/be-dev.md +41 -0
  9. package/agents/cursor/be-tech-lead.md +47 -0
  10. package/agents/cursor/fe-dev.md +39 -0
  11. package/agents/cursor/fe-tech-lead.md +47 -0
  12. package/agents/cursor/forensic.md +39 -0
  13. package/agents/cursor/governor.md +37 -0
  14. package/agents/cursor/qa.md +40 -0
  15. package/dist/adapters/claude-code.js +7 -7
  16. package/dist/adapters/cursor.js +3 -3
  17. package/dist/adapters/generic.js +3 -3
  18. package/dist/core/scaffold.d.ts +6 -1
  19. package/dist/core/scaffold.js +164 -40
  20. package/dist/core/scaffold.js.map +1 -1
  21. package/dist/index.js +56 -24
  22. package/dist/index.js.map +1 -1
  23. package/dist/mcps/registry.js +2 -2
  24. package/dist/mcps/registry.js.map +1 -1
  25. package/hooks/agent-checklist.sh +17 -0
  26. package/hooks/block-pl-src-write.sh +21 -0
  27. package/hooks/inject-pl-context.sh +32 -0
  28. package/hooks/track-prompt-count.sh +50 -0
  29. package/package.json +6 -2
  30. package/prompts/agents/05-fe-tech-lead.md +47 -47
  31. package/prompts/agents/06-be-tech-lead.md +44 -44
  32. package/prompts/agents/08-be-dev.md +37 -37
  33. package/prompts/agents/08-fe-dev.md +37 -37
  34. package/prompts/agents/10-qa.md +36 -36
  35. package/prompts/agents/11-forensic.md +24 -24
  36. package/prompts/agents/governor.md +25 -25
  37. package/prompts/orchestrator.md +203 -203
  38. package/prompts/skills/01-brainstorm.md +10 -10
  39. package/prompts/skills/02-spec.md +14 -14
  40. package/prompts/skills/03-design.md +21 -21
  41. package/prompts/skills/04-architecture.md +23 -23
  42. package/rules/cursor/be-dev.mdc +38 -0
  43. package/rules/cursor/be-tech-lead.mdc +39 -0
  44. package/rules/cursor/fe-dev.mdc +36 -0
  45. package/rules/cursor/fe-tech-lead.mdc +39 -0
  46. package/rules/cursor/forensic.mdc +35 -0
  47. package/rules/cursor/governor.mdc +33 -0
  48. package/rules/cursor/qa.mdc +35 -0
  49. package/settings/claude-settings.json +64 -0
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: qa
3
+ description: HOOL QA agent — owns testing from test plan creation to execution, visual testing, and exploratory testing. Dispatch for Phase 7 (test plan) and Phase 10 (test execution).
4
+ model: fast
5
+ ---
6
+
7
+ # Agent: QA
8
+ You own testing — test plan creation, test execution, visual testing, exploratory testing. You care about whether the product WORKS as specified, not code quality.
9
+
10
+ ## Boot Sequence (execute before anything else)
11
+ 1. Read `.hool/memory/qa/hot.md`, `best-practices.md`, `issues.md`, `governor-feedback.md`
12
+ 2. Read `.hool/operations/client-preferences.md`, `.hool/operations/governor-rules.md`
13
+ 3. Read `.hool/phases/02-spec/spec.md` (and features/) — source of truth for expected behavior
14
+
15
+ ## Phase 7: Test Plan
16
+ - Extract every acceptance criterion from spec
17
+ - Generate unit, integration, E2E, and visual test cases
18
+ - Cross-reference: every criterion has at least one test
19
+ - Write `.hool/phases/07-test-plan/test-plan.md` and `cases/`
20
+ - Create test file stubs in `tests/`
21
+
22
+ ## Phase 10: Test Execution
23
+ - Run existing tests (unit, integration, E2E)
24
+ - Execute test plan cases with evidence capture
25
+ - Exploratory testing (rapid clicks, edge inputs, permissions)
26
+ - Visual testing with screenshots vs design cards
27
+ - Report bugs to `.hool/operations/bugs.md`
28
+
29
+ ## Bug Report Format
30
+ BUG-XXX with severity (critical/high/medium/low), type, steps to reproduce, expected vs actual, evidence.
31
+
32
+ ## Writable Paths
33
+ - `.hool/phases/07-test-plan/`, `tests/`, `.hool/operations/bugs.md`, `.hool/memory/qa/`
34
+
35
+ ## Forbidden
36
+ - NEVER modify source code, fix bugs, review code quality, suggest architecture changes, modify agent prompts, or governor-rules.md
37
+
38
+ ## Work Log
39
+ Append to `.hool/memory/qa/cold.md`. Tags: [QA-PLAN], [QA-RUN], [QA-BUG], [QA-VISUAL], [QA-EXPLORATORY], [GOTCHA], [PATTERN]
40
+ Rebuild `.hool/memory/qa/hot.md` after each task.
@@ -24,9 +24,9 @@ All other agents are internal — dispatched by the Product Lead as subagents.
24
24
  ## Quick Start
25
25
 
26
26
  You are the Product Lead. On every invocation — **before answering any question**:
27
- 1. Read \`operations/current-phase.md\` to know where you are
28
- 2. Read \`operations/task-board.md\` to know what's in flight
29
- 3. Read your memory files (\`memory/product-lead/hot.md\`, \`best-practices.md\`, \`issues.md\`)
27
+ 1. Read \`.hool/operations/current-phase.md\` to know where you are
28
+ 2. Read \`.hool/operations/task-board.md\` to know what's in flight
29
+ 3. Read your memory files (\`.hool/memory/product-lead/hot.md\`, \`best-practices.md\`, \`issues.md\`)
30
30
  4. Read the full orchestrator prompt below — your complete process and rules
31
31
  5. **If there are pending tasks**: Tell the user what's pending and ask if you should proceed, or if they have something else in mind. Do NOT silently wait for explicit instructions — you are the driver, not a passenger.
32
32
  6. Continue from where you left off (see Autonomous Execution Loop below)
@@ -35,8 +35,8 @@ You are the Product Lead. On every invocation — **before answering any questio
35
35
 
36
36
  When you need to dispatch an agent (Phases 5-12), use the **Agent tool**:
37
37
 
38
- 1. Read the agent's prompt from \`.hool/prompts/agents/\`
39
- 2. Read the agent's memory files (\`memory/<agent>/hot.md\`, \`best-practices.md\`, \`issues.md\`)
38
+ 1. Read the agent's prompt from \`.claude/agents/<name>.md\` — identity is baked in
39
+ 2. Read the agent's memory files (\`.hool/memory/<agent>/hot.md\`, \`best-practices.md\`, \`issues.md\`)
40
40
  3. Call the Agent tool with:
41
41
  - \`prompt\`: The task description + relevant context file paths
42
42
  - The subagent reads its own prompt, memory, and the files you specify
@@ -63,8 +63,8 @@ Phase 4 (Architecture) is the FINAL human gate. After that, you run autonomously
63
63
  ## Key Rules
64
64
 
65
65
  - You are the **sole user-facing agent** — the user only talks to you
66
- - All state lives in files: \`phases/\`, \`operations/\`, \`memory/\`
67
- - Agents never modify their own prompts — escalate to \`operations/needs-human-review.md\`
66
+ - All state lives in files: \`.hool/phases/\`, \`.hool/operations/\`, \`.hool/memory/\`
67
+ - Agents never modify their own prompts — escalate to \`.hool/operations/needs-human-review.md\`
68
68
 
69
69
  ---
70
70
 
@@ -17,7 +17,7 @@ This project uses the HOOL framework. You are the Product Lead — the sole user
17
17
 
18
18
  ## Agent Dispatch
19
19
 
20
- When you need to dispatch an agent, read the agent's prompt from \`.hool/prompts/agents/\` and follow its instructions directly. In Cursor, agents are not spawned as subprocesses — you switch roles by loading the relevant prompt and executing its process.
20
+ When you need to dispatch an agent, use the agent definitions in \`.cursor/agents/<name>.md\`. In Cursor, agents have their full identity baked in — you don't need to manually load prompt files.
21
21
 
22
22
  After completing the agent's task, switch back to Product Lead role and continue the dispatch loop.
23
23
 
@@ -33,8 +33,8 @@ Phase 4 (Architecture) is the FINAL human gate. After that, you run autonomously
33
33
  ## Key Rules
34
34
 
35
35
  - You are the **sole user-facing agent** — the user only talks to you
36
- - All state lives in files: \`phases/\`, \`operations/\`, \`memory/\`
37
- - Agents never modify their own prompts — escalate to \`operations/needs-human-review.md\`
36
+ - All state lives in files: \`.hool/phases/\`, \`.hool/operations/\`, \`.hool/memory/\`
37
+ - Agents never modify their own prompts — escalate to \`.hool/operations/needs-human-review.md\`
38
38
  `;
39
39
  }
40
40
  export class CursorAdapter {
@@ -19,9 +19,9 @@ This prompt tells the agent:
19
19
 
20
20
  ## On Every Session
21
21
 
22
- 1. Read \`operations/current-phase.md\` — know where you are
23
- 2. Read \`operations/task-board.md\` — know what's in flight
24
- 3. Read \`memory/product-lead/hot.md\` — your recent context
22
+ 1. Read \`.hool/operations/current-phase.md\` — know where you are
23
+ 2. Read \`.hool/operations/task-board.md\` — know what's in flight
24
+ 3. Read \`.hool/memory/product-lead/hot.md\` — your recent context
25
25
  4. Follow the process in \`.hool/prompts/orchestrator.md\`
26
26
 
27
27
  ## MCP Servers
@@ -1,7 +1,12 @@
1
- import type { ProjectType, ExecutionMode } from '../adapters/types.js';
1
+ import type { ProjectType, ExecutionMode, AgentPlatform } from '../adapters/types.js';
2
2
  export declare function scaffoldProject(projectDir: string, projectType: ProjectType, mode?: ExecutionMode): Promise<void>;
3
3
  export declare function scaffoldOnboard(projectDir: string, projectType: ProjectType, mode?: ExecutionMode): Promise<void>;
4
4
  export declare function reonboard(projectDir: string, mode?: ExecutionMode): Promise<void>;
5
5
  export declare function copyPrompts(projectDir: string, promptsSourceDir: string): Promise<void>;
6
6
  export declare function writeMcpManifest(projectDir: string, projectType: ProjectType, requiredMcps: string[]): Promise<void>;
7
7
  export declare function writeAgentManifest(projectDir: string): Promise<void>;
8
+ /**
9
+ * Copy platform-specific agent definitions, hooks, and settings.
10
+ * Source files come from hool-mini templates (bundled with CLI).
11
+ */
12
+ export declare function copyPlatformFiles(projectDir: string, templateRootDir: string, platform: AgentPlatform): Promise<void>;
@@ -12,27 +12,36 @@ const AGENTS = [
12
12
  'forensic',
13
13
  'governor',
14
14
  ];
15
+ const SUBAGENTS = [
16
+ 'fe-tech-lead',
17
+ 'be-tech-lead',
18
+ 'fe-dev',
19
+ 'be-dev',
20
+ 'qa',
21
+ 'forensic',
22
+ 'governor',
23
+ ];
15
24
  const PHASE_DIRS = [
16
- 'phases/00-init',
17
- 'phases/01-brainstorm',
18
- 'phases/02-spec/features',
19
- 'phases/03-design/cards',
20
- 'phases/03-design/flows',
21
- 'phases/04-architecture/contracts',
22
- 'phases/04-architecture/flows',
23
- 'phases/04-architecture/fe',
24
- 'phases/04-architecture/be',
25
- 'phases/05-fe-scaffold/pages',
26
- 'phases/06-be-scaffold/services',
27
- 'phases/07-test-plan/cases',
25
+ '.hool/phases/00-init',
26
+ '.hool/phases/01-brainstorm',
27
+ '.hool/phases/02-spec/features',
28
+ '.hool/phases/03-design/cards',
29
+ '.hool/phases/03-design/flows',
30
+ '.hool/phases/04-architecture/contracts',
31
+ '.hool/phases/04-architecture/flows',
32
+ '.hool/phases/04-architecture/fe',
33
+ '.hool/phases/04-architecture/be',
34
+ '.hool/phases/05-fe-scaffold/pages',
35
+ '.hool/phases/06-be-scaffold/services',
36
+ '.hool/phases/07-test-plan/cases',
28
37
  ];
29
38
  const SKIP_PHASES = {
30
39
  'web-app': [],
31
- 'browser-game': ['phases/06-be-scaffold'],
40
+ 'browser-game': ['.hool/phases/06-be-scaffold'],
32
41
  'mobile-android': [],
33
- 'animation': ['phases/06-be-scaffold'],
34
- 'cli-tool': ['phases/03-design', 'phases/05-fe-scaffold'],
35
- 'api-only': ['phases/03-design', 'phases/05-fe-scaffold'],
42
+ 'animation': ['.hool/phases/06-be-scaffold'],
43
+ 'cli-tool': ['.hool/phases/03-design', '.hool/phases/05-fe-scaffold'],
44
+ 'api-only': ['.hool/phases/03-design', '.hool/phases/05-fe-scaffold'],
36
45
  'desktop': [],
37
46
  'other': [],
38
47
  };
@@ -45,27 +54,30 @@ export async function scaffoldProject(projectDir, projectType, mode = 'interacti
45
54
  await fs.mkdir(path.join(projectDir, dir), { recursive: true });
46
55
  }
47
56
  // Only create project-profile.md — the one doc that init itself produces
48
- await fs.writeFile(path.join(projectDir, 'phases/00-init/project-profile.md'), `# Project Profile\n\n- **Type**: ${projectType}\n- **Mode**: ${mode}\n- **Created**: ${new Date().toISOString().split('T')[0]}\n`, 'utf-8');
57
+ await fs.writeFile(path.join(projectDir, '.hool/phases/00-init/project-profile.md'), `# Project Profile\n\n- **Type**: ${projectType}\n- **Mode**: ${mode}\n- **Created**: ${new Date().toISOString().split('T')[0]}\n`, 'utf-8');
49
58
  // Create operations directory with templates
50
- await fs.mkdir(path.join(projectDir, 'operations'), { recursive: true });
51
- await fs.mkdir(path.join(projectDir, 'operations/context'), { recursive: true });
52
- await fs.mkdir(path.join(projectDir, 'operations/dispatch'), { recursive: true });
59
+ await fs.mkdir(path.join(projectDir, '.hool/operations'), { recursive: true });
60
+ await fs.mkdir(path.join(projectDir, '.hool/operations/context'), { recursive: true });
61
+ await fs.mkdir(path.join(projectDir, '.hool/operations/dispatch'), { recursive: true });
53
62
  const opTemplates = getOperationTemplates(mode);
54
63
  for (const [filename, content] of Object.entries(opTemplates)) {
55
- await fs.writeFile(path.join(projectDir, 'operations', filename), content, 'utf-8');
64
+ await fs.writeFile(path.join(projectDir, '.hool/operations', filename), content, 'utf-8');
56
65
  }
57
66
  // Create memory directories for each agent
58
67
  const memoryHeaders = getMemoryHeaders();
59
68
  for (const agent of AGENTS) {
60
- const agentDir = path.join(projectDir, 'memory', agent);
69
+ const agentDir = path.join(projectDir, '.hool/memory', agent);
61
70
  await fs.mkdir(agentDir, { recursive: true });
62
71
  for (const [filename, content] of Object.entries(memoryHeaders)) {
63
72
  await fs.writeFile(path.join(agentDir, filename), content, 'utf-8');
64
73
  }
65
74
  }
66
- // Create .hool directory
75
+ // Create .hool directories
67
76
  await fs.mkdir(path.join(projectDir, '.hool/prompts'), { recursive: true });
68
- // NOTE: src/, tests/, logs/ are NOT created here.
77
+ await fs.mkdir(path.join(projectDir, '.hool/hooks'), { recursive: true });
78
+ await fs.mkdir(path.join(projectDir, '.hool/logs'), { recursive: true });
79
+ await fs.mkdir(path.join(projectDir, '.hool/metrics'), { recursive: true });
80
+ // NOTE: src/, tests/ are NOT created here.
69
81
  // Those are project concerns decided during architecture (Phase 4)
70
82
  // and scaffolded by Tech Leads during Phases 5-6 (LLD).
71
83
  }
@@ -78,30 +90,33 @@ export async function scaffoldOnboard(projectDir, projectType, mode = 'interacti
78
90
  await fs.mkdir(path.join(projectDir, dir), { recursive: true });
79
91
  }
80
92
  // Project profile marks this as an onboarded project
81
- await fs.writeFile(path.join(projectDir, 'phases/00-init/project-profile.md'), `# Project Profile\n\n- **Type**: ${projectType}\n- **Mode**: ${mode}\n- **Origin**: onboarded (existing codebase)\n- **Created**: ${new Date().toISOString().split('T')[0]}\n`, 'utf-8');
93
+ await fs.writeFile(path.join(projectDir, '.hool/phases/00-init/project-profile.md'), `# Project Profile\n\n- **Type**: ${projectType}\n- **Mode**: ${mode}\n- **Origin**: onboarded (existing codebase)\n- **Created**: ${new Date().toISOString().split('T')[0]}\n`, 'utf-8');
82
94
  // Create operations directory with onboard-specific templates
83
- await fs.mkdir(path.join(projectDir, 'operations'), { recursive: true });
84
- await fs.mkdir(path.join(projectDir, 'operations/context'), { recursive: true });
85
- await fs.mkdir(path.join(projectDir, 'operations/dispatch'), { recursive: true });
95
+ await fs.mkdir(path.join(projectDir, '.hool/operations'), { recursive: true });
96
+ await fs.mkdir(path.join(projectDir, '.hool/operations/context'), { recursive: true });
97
+ await fs.mkdir(path.join(projectDir, '.hool/operations/dispatch'), { recursive: true });
86
98
  const opTemplates = getOnboardOperationTemplates(mode);
87
99
  for (const [filename, content] of Object.entries(opTemplates)) {
88
- await fs.writeFile(path.join(projectDir, 'operations', filename), content, 'utf-8');
100
+ await fs.writeFile(path.join(projectDir, '.hool/operations', filename), content, 'utf-8');
89
101
  }
90
102
  // Create memory directories for each agent
91
103
  const memoryHeaders = getMemoryHeaders();
92
104
  for (const agent of AGENTS) {
93
- const agentDir = path.join(projectDir, 'memory', agent);
105
+ const agentDir = path.join(projectDir, '.hool/memory', agent);
94
106
  await fs.mkdir(agentDir, { recursive: true });
95
107
  for (const [filename, content] of Object.entries(memoryHeaders)) {
96
108
  await fs.writeFile(path.join(agentDir, filename), content, 'utf-8');
97
109
  }
98
110
  }
99
- // Create .hool directory
111
+ // Create .hool directories
100
112
  await fs.mkdir(path.join(projectDir, '.hool/prompts'), { recursive: true });
113
+ await fs.mkdir(path.join(projectDir, '.hool/hooks'), { recursive: true });
114
+ await fs.mkdir(path.join(projectDir, '.hool/logs'), { recursive: true });
115
+ await fs.mkdir(path.join(projectDir, '.hool/metrics'), { recursive: true });
101
116
  }
102
117
  export async function reonboard(projectDir, mode = 'interactive') {
103
118
  // Only overwrite current-phase.md and prepend onboard tasks to task-board.md
104
- const opsDir = path.join(projectDir, 'operations');
119
+ const opsDir = path.join(projectDir, '.hool/operations');
105
120
  // Flip phase to onboarding
106
121
  await fs.writeFile(path.join(opsDir, 'current-phase.md'), getOnboardCurrentPhase(mode), 'utf-8');
107
122
  // Prepend onboard tasks to existing task board
@@ -154,60 +169,169 @@ const AGENT_MANIFEST = [
154
169
  name: 'product-lead',
155
170
  role: 'Vision, contracts, doc consistency, phase gating, agent dispatch',
156
171
  prompt: '.hool/prompts/orchestrator.md',
157
- memory: 'memory/product-lead/',
172
+ 'agent-definition': { 'claude-code': null, cursor: null },
173
+ memory: '.hool/memory/product-lead/',
158
174
  phases: [0, 1, 2, 3, 4, 12],
159
175
  },
160
176
  {
161
177
  name: 'fe-tech-lead',
162
178
  role: 'FE scaffold, LLD, code review, code-vs-doc consistency',
163
179
  prompt: '.hool/prompts/agents/05-fe-tech-lead.md',
164
- memory: 'memory/fe-tech-lead/',
180
+ 'agent-definition': { 'claude-code': '.claude/agents/fe-tech-lead.md', cursor: '.cursor/agents/fe-tech-lead.md' },
181
+ 'cursor-rule': '.cursor/rules/fe-tech-lead.mdc',
182
+ memory: '.hool/memory/fe-tech-lead/',
165
183
  phases: [4, 5, 9],
166
184
  },
167
185
  {
168
186
  name: 'be-tech-lead',
169
187
  role: 'BE scaffold, LLD, code review, code-vs-doc consistency',
170
188
  prompt: '.hool/prompts/agents/06-be-tech-lead.md',
171
- memory: 'memory/be-tech-lead/',
189
+ 'agent-definition': { 'claude-code': '.claude/agents/be-tech-lead.md', cursor: '.cursor/agents/be-tech-lead.md' },
190
+ 'cursor-rule': '.cursor/rules/be-tech-lead.mdc',
191
+ memory: '.hool/memory/be-tech-lead/',
172
192
  phases: [4, 6, 9],
173
193
  },
174
194
  {
175
195
  name: 'fe-dev',
176
196
  role: 'Frontend implementation',
177
197
  prompt: '.hool/prompts/agents/08-fe-dev.md',
178
- memory: 'memory/fe-dev/',
198
+ 'agent-definition': { 'claude-code': '.claude/agents/fe-dev.md', cursor: '.cursor/agents/fe-dev.md' },
199
+ 'cursor-rule': '.cursor/rules/fe-dev.mdc',
200
+ memory: '.hool/memory/fe-dev/',
179
201
  phases: [8],
180
202
  },
181
203
  {
182
204
  name: 'be-dev',
183
205
  role: 'Backend implementation',
184
206
  prompt: '.hool/prompts/agents/08-be-dev.md',
185
- memory: 'memory/be-dev/',
207
+ 'agent-definition': { 'claude-code': '.claude/agents/be-dev.md', cursor: '.cursor/agents/be-dev.md' },
208
+ 'cursor-rule': '.cursor/rules/be-dev.mdc',
209
+ memory: '.hool/memory/be-dev/',
186
210
  phases: [8],
187
211
  },
188
212
  {
189
213
  name: 'qa',
190
214
  role: 'Test plan, test execution, bug reporting',
191
215
  prompt: '.hool/prompts/agents/10-qa.md',
192
- memory: 'memory/qa/',
216
+ 'agent-definition': { 'claude-code': '.claude/agents/qa.md', cursor: '.cursor/agents/qa.md' },
217
+ 'cursor-rule': '.cursor/rules/qa.mdc',
218
+ memory: '.hool/memory/qa/',
193
219
  phases: [7, 10],
194
220
  },
195
221
  {
196
222
  name: 'forensic',
197
223
  role: 'Root cause analysis, bug triage, fix routing',
198
224
  prompt: '.hool/prompts/agents/11-forensic.md',
199
- memory: 'memory/forensic/',
225
+ 'agent-definition': { 'claude-code': '.claude/agents/forensic.md', cursor: '.cursor/agents/forensic.md' },
226
+ 'cursor-rule': '.cursor/rules/forensic.mdc',
227
+ memory: '.hool/memory/forensic/',
200
228
  phases: [11],
201
229
  },
202
230
  {
203
231
  name: 'governor',
204
232
  role: 'Behavioral auditor, rule enforcement, corrective feedback',
205
233
  prompt: '.hool/prompts/agents/governor.md',
206
- memory: 'memory/governor/',
234
+ 'agent-definition': { 'claude-code': '.claude/agents/governor.md', cursor: '.cursor/agents/governor.md' },
235
+ 'cursor-rule': '.cursor/rules/governor.mdc',
236
+ memory: '.hool/memory/governor/',
207
237
  phases: 'continuous',
208
238
  },
209
239
  ];
210
240
  export async function writeAgentManifest(projectDir) {
211
241
  await fs.writeFile(path.join(projectDir, '.hool/agents.json'), JSON.stringify(AGENT_MANIFEST, null, 2) + '\n', 'utf-8');
212
242
  }
243
+ /**
244
+ * Copy platform-specific agent definitions, hooks, and settings.
245
+ * Source files come from hool-mini templates (bundled with CLI).
246
+ */
247
+ export async function copyPlatformFiles(projectDir, templateRootDir, platform) {
248
+ // templateRootDir points to hool-mini/ (or cli/ when bundled) — contains agents/, hooks/, settings/
249
+ const hoolMiniDir = templateRootDir;
250
+ if (platform === 'claude-code') {
251
+ // Copy .claude/agents/*.md
252
+ const claudeAgentsDir = path.join(projectDir, '.claude/agents');
253
+ await fs.mkdir(claudeAgentsDir, { recursive: true });
254
+ const srcAgentsDir = path.join(hoolMiniDir, 'agents/claude');
255
+ await copyDirContents(srcAgentsDir, claudeAgentsDir);
256
+ // Copy .claude/settings.json (merge with existing if present)
257
+ const settingsSrc = path.join(hoolMiniDir, 'settings/claude-settings.json');
258
+ const settingsDest = path.join(projectDir, '.claude/settings.json');
259
+ try {
260
+ const settingsContent = await fs.readFile(settingsSrc, 'utf-8');
261
+ const hoolSettings = JSON.parse(settingsContent);
262
+ // Merge with existing settings if present
263
+ try {
264
+ const existing = JSON.parse(await fs.readFile(settingsDest, 'utf-8'));
265
+ // Merge hooks — HOOL hooks get added to existing
266
+ if (hoolSettings.hooks) {
267
+ if (!existing.hooks)
268
+ existing.hooks = {};
269
+ for (const [event, hooks] of Object.entries(hoolSettings.hooks)) {
270
+ if (!existing.hooks[event]) {
271
+ existing.hooks[event] = hooks;
272
+ }
273
+ else {
274
+ // Append HOOL hooks, avoid duplicates by command
275
+ const existingCmds = new Set(existing.hooks[event].flatMap((h) => h.hooks.map((hh) => hh.command)));
276
+ for (const hookGroup of hooks) {
277
+ const newHooks = hookGroup.hooks.filter((hh) => !existingCmds.has(hh.command));
278
+ if (newHooks.length > 0) {
279
+ existing.hooks[event].push({ ...hookGroup, hooks: newHooks });
280
+ }
281
+ }
282
+ }
283
+ }
284
+ }
285
+ await fs.writeFile(settingsDest, JSON.stringify(existing, null, 2) + '\n', 'utf-8');
286
+ }
287
+ catch {
288
+ // No existing settings — write fresh
289
+ await fs.writeFile(settingsDest, settingsContent, 'utf-8');
290
+ }
291
+ }
292
+ catch {
293
+ // Settings template not found — skip
294
+ }
295
+ // Copy hooks to .hool/hooks/
296
+ const hooksSrc = path.join(hoolMiniDir, 'hooks');
297
+ const hooksDest = path.join(projectDir, '.hool/hooks');
298
+ await fs.mkdir(hooksDest, { recursive: true });
299
+ await copyDirContents(hooksSrc, hooksDest);
300
+ // Make hooks executable
301
+ try {
302
+ const hookFiles = await fs.readdir(hooksDest);
303
+ for (const f of hookFiles) {
304
+ if (f.endsWith('.sh')) {
305
+ await fs.chmod(path.join(hooksDest, f), 0o755);
306
+ }
307
+ }
308
+ }
309
+ catch { /* ok */ }
310
+ }
311
+ if (platform === 'cursor') {
312
+ // Copy .cursor/agents/*.md
313
+ const cursorAgentsDir = path.join(projectDir, '.cursor/agents');
314
+ await fs.mkdir(cursorAgentsDir, { recursive: true });
315
+ const srcAgentsDir = path.join(hoolMiniDir, 'agents/cursor');
316
+ await copyDirContents(srcAgentsDir, cursorAgentsDir);
317
+ // Copy .cursor/rules/*.mdc
318
+ const cursorRulesDir = path.join(projectDir, '.cursor/rules');
319
+ await fs.mkdir(cursorRulesDir, { recursive: true });
320
+ const srcRulesDir = path.join(hoolMiniDir, 'rules/cursor');
321
+ await copyDirContents(srcRulesDir, cursorRulesDir);
322
+ }
323
+ }
324
+ async function copyDirContents(src, dest) {
325
+ try {
326
+ const entries = await fs.readdir(src, { withFileTypes: true });
327
+ for (const entry of entries) {
328
+ if (entry.isFile()) {
329
+ await fs.copyFile(path.join(src, entry.name), path.join(dest, entry.name));
330
+ }
331
+ }
332
+ }
333
+ catch {
334
+ // Source directory doesn't exist — skip silently
335
+ }
336
+ }
213
337
  //# sourceMappingURL=scaffold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/core/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/core/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,GAAG;IACb,cAAc;IACd,cAAc;IACd,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,UAAU;IACV,UAAU;CACF,CAAC;AAEX,MAAM,SAAS,GAAG;IAChB,cAAc;IACd,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,IAAI;IACJ,UAAU;IACV,UAAU;CACF,CAAC;AAEX,MAAM,UAAU,GAAG;IACjB,sBAAsB;IACtB,4BAA4B;IAC5B,+BAA+B;IAC/B,8BAA8B;IAC9B,8BAA8B;IAC9B,wCAAwC;IACxC,oCAAoC;IACpC,iCAAiC;IACjC,iCAAiC;IACjC,mCAAmC;IACnC,sCAAsC;IACtC,iCAAiC;CAClC,CAAC;AAEF,MAAM,WAAW,GAAkC;IACjD,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,CAAC,6BAA6B,CAAC;IAC/C,gBAAgB,EAAE,EAAE;IACpB,WAAW,EAAE,CAAC,6BAA6B,CAAC;IAC5C,UAAU,EAAE,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;IACrE,UAAU,EAAE,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;IACrE,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,WAAwB,EAAE,OAAsB,aAAa;IACrH,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAE5C,gFAAgF;IAChF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAChD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,yEAAyE;IACzE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yCAAyC,CAAC,EAChE,oCAAoC,WAAW,iBAAiB,IAAI,oBAAoB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAClI,OAAO,CACR,CAAC;IAEF,6CAA6C;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IAED,2CAA2C;IAC3C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAChE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5E,2CAA2C;IAC3C,mEAAmE;IACnE,wDAAwD;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,WAAwB,EAAE,OAAsB,aAAa;IACrH,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAE5C,8EAA8E;IAC9E,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAChD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,qDAAqD;IACrD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,yCAAyC,CAAC,EAChE,oCAAoC,WAAW,iBAAiB,IAAI,iEAAiE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAC/K,OAAO,CACR,CAAC;IAEF,8DAA8D;IAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,2BAA2B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACvD,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5F,CAAC;IAED,2CAA2C;IAC3C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAChE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,OAAsB,aAAa;IACrF,6EAA6E;IAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAEzD,2BAA2B;IAC3B,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAEjG,+CAA+C;IAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,kBAAkB,CAAC;IAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvG,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,gBAAwB;IAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAE9D,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAY;QAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,WAAwB,EACxB,YAAsB;IAEtB,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,WAAkD,CAAC;QACzE,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,WAAW;QACnB,OAAO;QACP,QAAQ,EAAE,CAAC,kBAAkB,CAAC;KAC/B,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACxC,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG;IACrB;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,kEAAkE;QACxE,MAAM,EAAE,+BAA+B;QACvC,kBAAkB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACzD,MAAM,EAAE,4BAA4B;QACpC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;KAC5B;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,wDAAwD;QAC9D,MAAM,EAAE,yCAAyC;QACjD,kBAAkB,EAAE,EAAE,aAAa,EAAE,gCAAgC,EAAE,MAAM,EAAE,gCAAgC,EAAE;QACjH,aAAa,EAAE,gCAAgC;QAC/C,MAAM,EAAE,4BAA4B;QACpC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAClB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,wDAAwD;QAC9D,MAAM,EAAE,yCAAyC;QACjD,kBAAkB,EAAE,EAAE,aAAa,EAAE,gCAAgC,EAAE,MAAM,EAAE,gCAAgC,EAAE;QACjH,aAAa,EAAE,gCAAgC;QAC/C,MAAM,EAAE,4BAA4B;QACpC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;KAClB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,mCAAmC;QAC3C,kBAAkB,EAAE,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,EAAE;QACrG,aAAa,EAAE,0BAA0B;QACzC,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,CAAC,CAAC,CAAC;KACZ;IACD;QACE,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,wBAAwB;QAC9B,MAAM,EAAE,mCAAmC;QAC3C,kBAAkB,EAAE,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,EAAE,0BAA0B,EAAE;QACrG,aAAa,EAAE,0BAA0B;QACzC,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,CAAC,CAAC,CAAC;KACZ;IACD;QACE,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,+BAA+B;QACvC,kBAAkB,EAAE,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,EAAE;QAC7F,aAAa,EAAE,sBAAsB;QACrC,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KAChB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,8CAA8C;QACpD,MAAM,EAAE,qCAAqC;QAC7C,kBAAkB,EAAE,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,EAAE,4BAA4B,EAAE;QACzG,aAAa,EAAE,4BAA4B;QAC3C,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,CAAC,EAAE,CAAC;KACb;IACD;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,2DAA2D;QACjE,MAAM,EAAE,kCAAkC;QAC1C,kBAAkB,EAAE,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,EAAE,4BAA4B,EAAE;QACzG,aAAa,EAAE,4BAA4B;QAC3C,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,YAAY;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IACzD,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAC9C,OAAO,CACR,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB,EAAE,eAAuB,EAAE,QAAuB;IAC1G,oGAAoG;IACpG,MAAM,WAAW,GAAG,eAAe,CAAC;IAEpC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,2BAA2B;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC7D,MAAM,eAAe,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAErD,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAEjD,0CAA0C;YAC1C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACtE,iDAAiD;gBACjD,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC,KAAK;wBAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;oBACzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC3B,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;wBAChC,CAAC;6BAAM,CAAC;4BACN,iDAAiD;4BACjD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAA8C,CAAC,OAAO,CAAC,CAAC,CAAoC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAqB,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;4BACxM,KAAK,MAAM,SAAS,IAAI,KAAiD,EAAE,CAAC;gCAC1E,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAqB,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gCAClG,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCACxB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gCAChE,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YACtF,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;gBACrC,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAE3C,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,2BAA2B;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAC7D,MAAM,eAAe,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAErD,2BAA2B;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,IAAY;IACtD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC"}