oh-my-claude-sisyphus 1.10.2 → 1.11.1
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/README.md +50 -10
- package/dist/agents/qa-tester.d.ts +16 -0
- package/dist/agents/qa-tester.d.ts.map +1 -0
- package/dist/agents/qa-tester.js +367 -0
- package/dist/agents/qa-tester.js.map +1 -0
- package/dist/installer/index.d.ts +2 -2
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +22 -82
- package/dist/installer/index.js.map +1 -1
- package/package.json +1 -1
- package/scripts/claude-sisyphus.sh +9 -0
- package/scripts/install.sh +92 -65
- package/scripts/keyword-detector.sh +71 -0
- package/scripts/persistent-mode.sh +300 -0
- package/scripts/post-tool-verifier.sh +196 -0
- package/scripts/pre-tool-enforcer.sh +76 -0
- package/scripts/sisyphus-aliases.sh +18 -0
- package/scripts/stop-continuation.sh +31 -0
- package/scripts/uninstall.sh +14 -3
package/README.md
CHANGED
|
@@ -34,7 +34,20 @@
|
|
|
34
34
|
|
|
35
35
|
## Quick Install
|
|
36
36
|
|
|
37
|
-
###
|
|
37
|
+
### Via Claude Code Plugin (Recommended)
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# In Claude Code, run:
|
|
41
|
+
/plugin install oh-my-claude-sisyphus
|
|
42
|
+
|
|
43
|
+
# Or from a marketplace:
|
|
44
|
+
/plugin marketplace add Yeachan-Heo/oh-my-claude-sisyphus
|
|
45
|
+
/plugin install oh-my-claude-sisyphus@Yeachan-Heo/oh-my-claude-sisyphus
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This is the cleanest installation method - integrates directly with Claude Code's plugin system.
|
|
49
|
+
|
|
50
|
+
### One-liner (macOS/Linux)
|
|
38
51
|
|
|
39
52
|
```bash
|
|
40
53
|
curl -fsSL https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/main/scripts/install.sh | bash
|
|
@@ -46,7 +59,7 @@ curl -fsSL https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/m
|
|
|
46
59
|
npm install -g oh-my-claude-sisyphus
|
|
47
60
|
```
|
|
48
61
|
|
|
49
|
-
> **Windows Users**: This is the
|
|
62
|
+
> **Windows Users**: This is the recommended installation method. Requires Node.js 20+.
|
|
50
63
|
|
|
51
64
|
### Manual Install (macOS/Linux)
|
|
52
65
|
|
|
@@ -61,6 +74,24 @@ chmod +x scripts/install.sh
|
|
|
61
74
|
|
|
62
75
|
## What Gets Installed
|
|
63
76
|
|
|
77
|
+
### Plugin Structure (Claude Code Plugin Format)
|
|
78
|
+
|
|
79
|
+
The repository is also a Claude Code plugin with this structure:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
oh-my-claude-sisyphus/
|
|
83
|
+
├── .claude-plugin/
|
|
84
|
+
│ └── plugin.json # Plugin manifest
|
|
85
|
+
├── agents/ # 11 specialized subagents
|
|
86
|
+
├── commands/ # 12 slash commands
|
|
87
|
+
├── skills/ # 3 skills (ultrawork, git-master, frontend-ui-ux)
|
|
88
|
+
├── hooks/
|
|
89
|
+
│ └── hooks.json # Hook configuration
|
|
90
|
+
└── scripts/ # Hook scripts
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Traditional Installation Structure
|
|
94
|
+
|
|
64
95
|
The installer adds to your Claude Code config (`~/.claude/`):
|
|
65
96
|
|
|
66
97
|
```
|
|
@@ -74,7 +105,6 @@ The installer adds to your Claude Code config (`~/.claude/`):
|
|
|
74
105
|
│ ├── multimodal-looker.md # Visual analysis (Sonnet)
|
|
75
106
|
│ ├── momus.md # Plan reviewer (Opus)
|
|
76
107
|
│ ├── metis.md # Pre-planning consultant (Opus)
|
|
77
|
-
│ ├── orchestrator-sisyphus.md # Todo coordinator (Sonnet)
|
|
78
108
|
│ ├── sisyphus-junior.md # Focused executor (Sonnet)
|
|
79
109
|
│ └── prometheus.md # Strategic planner (Opus)
|
|
80
110
|
├── commands/
|
|
@@ -88,7 +118,12 @@ The installer adds to your Claude Code config (`~/.claude/`):
|
|
|
88
118
|
│ ├── prometheus.md # /prometheus command
|
|
89
119
|
│ ├── orchestrator.md # /orchestrator command
|
|
90
120
|
│ ├── ralph-loop.md # /ralph-loop command
|
|
91
|
-
│
|
|
121
|
+
│ ├── cancel-ralph.md # /cancel-ralph command
|
|
122
|
+
│ └── update.md # /update command
|
|
123
|
+
├── skills/
|
|
124
|
+
│ ├── ultrawork/SKILL.md # Maximum performance mode
|
|
125
|
+
│ ├── git-master/SKILL.md # Git expert skill
|
|
126
|
+
│ └── frontend-ui-ux/SKILL.md # UI/UX design skill
|
|
92
127
|
└── CLAUDE.md # Sisyphus system prompt
|
|
93
128
|
```
|
|
94
129
|
|
|
@@ -165,6 +200,11 @@ Just include these words anywhere in your prompt:
|
|
|
165
200
|
|
|
166
201
|
Oh-my-claude-sisyphus includes a silent auto-update system that checks for updates in the background. Updates are applied automatically without interrupting your workflow.
|
|
167
202
|
|
|
203
|
+
Features:
|
|
204
|
+
- **Rate-limited**: Checks at most once every 24 hours
|
|
205
|
+
- **Concurrent-safe**: Lock file prevents simultaneous update attempts
|
|
206
|
+
- **Cross-platform**: Works on both macOS and Linux
|
|
207
|
+
|
|
168
208
|
To manually check for updates:
|
|
169
209
|
```bash
|
|
170
210
|
/update
|
|
@@ -234,7 +274,7 @@ Skills are automatically activated via slash commands or magic keywords.
|
|
|
234
274
|
|
|
235
275
|
## Intelligent Skill Activation
|
|
236
276
|
|
|
237
|
-
> **New in v1.
|
|
277
|
+
> **New in v1.11.0**: Enhanced Hook Enforcement System - PreToolUse/PostToolUse hooks and strengthened Stop hook for stronger Sisyphus behavior beyond CLAUDE.md.
|
|
238
278
|
|
|
239
279
|
### Skill Layers
|
|
240
280
|
|
|
@@ -308,7 +348,6 @@ Claude will automatically delegate to these specialized agents:
|
|
|
308
348
|
|
|
309
349
|
| | Agent | Model | Best For |
|
|
310
350
|
|---|-------|-------|----------|
|
|
311
|
-
| 🪨 | **Orchestrator-Sisyphus** | Sonnet | Todo coordination, task delegation, progress tracking |
|
|
312
351
|
| ✨ | **Sisyphus Junior** | Sonnet | Focused task execution, plan following, direct implementation |
|
|
313
352
|
|
|
314
353
|
### Manual Agent Invocation
|
|
@@ -371,7 +410,7 @@ curl -fsSL https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claude-sisyphus/m
|
|
|
371
410
|
Or manually:
|
|
372
411
|
|
|
373
412
|
```bash
|
|
374
|
-
rm ~/.claude/agents/{oracle,librarian,explore,frontend-engineer,document-writer,multimodal-looker,momus,metis,
|
|
413
|
+
rm ~/.claude/agents/{oracle,librarian,explore,frontend-engineer,document-writer,multimodal-looker,momus,metis,sisyphus-junior,prometheus}.md
|
|
375
414
|
rm ~/.claude/commands/{sisyphus,sisyphus-default,ultrawork,deepsearch,analyze,plan,review,prometheus,orchestrator,ralph-loop,cancel-ralph}.md
|
|
376
415
|
```
|
|
377
416
|
|
|
@@ -450,7 +489,6 @@ The original oh-my-opencode used multiple AI providers. This port uses Claude mo
|
|
|
450
489
|
| **Multimodal Looker** | Various | Claude Sonnet | Visual analysis |
|
|
451
490
|
| **Momus** | GPT-5.2 | Claude Opus | Plan reviewer (Greek god of criticism) |
|
|
452
491
|
| **Metis** | Claude Opus 4.5 | Claude Opus | Pre-planning consultant (goddess of wisdom) |
|
|
453
|
-
| **Orchestrator-Sisyphus** | Claude Sonnet 4.5 | Claude Sonnet | Todo coordination and delegation |
|
|
454
492
|
| **Sisyphus-Junior** | Configurable | Claude Sonnet | Focused task executor |
|
|
455
493
|
| **Prometheus** | Planning System | Claude Opus | Strategic planner (fire-bringer) |
|
|
456
494
|
|
|
@@ -594,8 +632,8 @@ If you're coming from oh-my-opencode:
|
|
|
594
632
|
|
|
595
633
|
- [Claude Code](https://docs.anthropic.com/claude-code) installed
|
|
596
634
|
- Anthropic API key (`ANTHROPIC_API_KEY` environment variable)
|
|
597
|
-
- **Windows**: Node.js
|
|
598
|
-
- **macOS/Linux**: Bash shell (default) or Node.js
|
|
635
|
+
- **Windows**: Node.js 20+ (for npm installation)
|
|
636
|
+
- **macOS/Linux**: Bash shell (default) or Node.js 20+ (optional)
|
|
599
637
|
|
|
600
638
|
### Platform Support
|
|
601
639
|
|
|
@@ -605,6 +643,8 @@ If you're coming from oh-my-opencode:
|
|
|
605
643
|
| **macOS** | curl or npm | Bash (.sh) |
|
|
606
644
|
| **Linux** | curl or npm | Bash (.sh) |
|
|
607
645
|
|
|
646
|
+
> **Note**: Bash hooks are fully portable across macOS and Linux (no GNU-specific dependencies).
|
|
647
|
+
|
|
608
648
|
> **Advanced**: Set `SISYPHUS_USE_NODE_HOOKS=1` to use Node.js hooks on macOS/Linux.
|
|
609
649
|
|
|
610
650
|
## License
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA Tester Agent - Interactive CLI Testing with tmux
|
|
3
|
+
*
|
|
4
|
+
* Specialized agent for QA testing of CLI applications and services
|
|
5
|
+
* using tmux for session management and interactive testing.
|
|
6
|
+
*
|
|
7
|
+
* Enables:
|
|
8
|
+
* - Spinning up services in isolated tmux sessions
|
|
9
|
+
* - Sending commands and capturing output
|
|
10
|
+
* - Verifying CLI behavior and responses
|
|
11
|
+
* - Clean teardown of test environments
|
|
12
|
+
*/
|
|
13
|
+
import type { AgentConfig, AgentPromptMetadata } from './types.js';
|
|
14
|
+
export declare const QA_TESTER_PROMPT_METADATA: AgentPromptMetadata;
|
|
15
|
+
export declare const qaTesterAgent: AgentConfig;
|
|
16
|
+
//# sourceMappingURL=qa-tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-tester.d.ts","sourceRoot":"","sources":["../../src/agents/qa-tester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEnE,eAAO,MAAM,yBAAyB,EAAE,mBAsBvC,CAAC;AAsUF,eAAO,MAAM,aAAa,EAAE,WAO3B,CAAC"}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA Tester Agent - Interactive CLI Testing with tmux
|
|
3
|
+
*
|
|
4
|
+
* Specialized agent for QA testing of CLI applications and services
|
|
5
|
+
* using tmux for session management and interactive testing.
|
|
6
|
+
*
|
|
7
|
+
* Enables:
|
|
8
|
+
* - Spinning up services in isolated tmux sessions
|
|
9
|
+
* - Sending commands and capturing output
|
|
10
|
+
* - Verifying CLI behavior and responses
|
|
11
|
+
* - Clean teardown of test environments
|
|
12
|
+
*/
|
|
13
|
+
export const QA_TESTER_PROMPT_METADATA = {
|
|
14
|
+
category: 'specialist',
|
|
15
|
+
cost: 'CHEAP',
|
|
16
|
+
promptAlias: 'QATester',
|
|
17
|
+
triggers: [
|
|
18
|
+
{ domain: 'CLI testing', trigger: 'Testing command-line applications' },
|
|
19
|
+
{ domain: 'Service testing', trigger: 'Starting and testing background services' },
|
|
20
|
+
{ domain: 'Integration testing', trigger: 'End-to-end CLI workflow verification' },
|
|
21
|
+
{ domain: 'Interactive testing', trigger: 'Testing applications requiring user input' },
|
|
22
|
+
],
|
|
23
|
+
useWhen: [
|
|
24
|
+
'Testing CLI applications that need interactive input',
|
|
25
|
+
'Starting background services and verifying their behavior',
|
|
26
|
+
'Running end-to-end tests on command-line tools',
|
|
27
|
+
'Testing applications that produce streaming output',
|
|
28
|
+
'Verifying service startup and shutdown behavior',
|
|
29
|
+
],
|
|
30
|
+
avoidWhen: [
|
|
31
|
+
'Unit testing (use standard test runners)',
|
|
32
|
+
'API testing without CLI interface (use curl/httpie directly)',
|
|
33
|
+
'Static code analysis (use oracle or explore)',
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
const QA_TESTER_PROMPT = `<Role>
|
|
37
|
+
QA-Tester - Interactive CLI Testing Specialist
|
|
38
|
+
|
|
39
|
+
You are a QA engineer specialized in testing CLI applications and services using tmux.
|
|
40
|
+
You spin up services in isolated sessions, send commands, verify outputs, and clean up.
|
|
41
|
+
</Role>
|
|
42
|
+
|
|
43
|
+
<Critical_Identity>
|
|
44
|
+
You TEST applications, you don't IMPLEMENT them.
|
|
45
|
+
Your job is to verify behavior, capture outputs, and report findings.
|
|
46
|
+
</Critical_Identity>
|
|
47
|
+
|
|
48
|
+
<Prerequisites_Check>
|
|
49
|
+
## MANDATORY: Check Prerequisites Before Testing
|
|
50
|
+
|
|
51
|
+
### 1. Verify tmux is available
|
|
52
|
+
\`\`\`bash
|
|
53
|
+
if ! command -v tmux &>/dev/null; then
|
|
54
|
+
echo "FAIL: tmux is not installed"
|
|
55
|
+
echo "Install with: sudo apt install tmux (Debian/Ubuntu) or brew install tmux (macOS)"
|
|
56
|
+
exit 1
|
|
57
|
+
fi
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
### 2. Check port availability (before starting services)
|
|
61
|
+
\`\`\`bash
|
|
62
|
+
PORT=<your-port>
|
|
63
|
+
if nc -z localhost $PORT 2>/dev/null; then
|
|
64
|
+
echo "FAIL: Port $PORT is already in use"
|
|
65
|
+
echo "Find process: lsof -i :$PORT"
|
|
66
|
+
exit 1
|
|
67
|
+
fi
|
|
68
|
+
\`\`\`
|
|
69
|
+
|
|
70
|
+
### 3. Verify working directory exists
|
|
71
|
+
\`\`\`bash
|
|
72
|
+
if [ ! -d "<project-dir>" ]; then
|
|
73
|
+
echo "FAIL: Project directory not found"
|
|
74
|
+
exit 1
|
|
75
|
+
fi
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
**Run these checks BEFORE creating tmux sessions to fail fast.**
|
|
79
|
+
</Prerequisites_Check>
|
|
80
|
+
|
|
81
|
+
<Tmux_Command_Library>
|
|
82
|
+
## Session Management
|
|
83
|
+
|
|
84
|
+
### Create a new tmux session
|
|
85
|
+
\`\`\`bash
|
|
86
|
+
# Create detached session with name
|
|
87
|
+
tmux new-session -d -s <session-name>
|
|
88
|
+
|
|
89
|
+
# Create session with initial command
|
|
90
|
+
tmux new-session -d -s <session-name> '<initial-command>'
|
|
91
|
+
|
|
92
|
+
# Create session in specific directory
|
|
93
|
+
tmux new-session -d -s <session-name> -c /path/to/dir
|
|
94
|
+
\`\`\`
|
|
95
|
+
|
|
96
|
+
### List active sessions
|
|
97
|
+
\`\`\`bash
|
|
98
|
+
tmux list-sessions
|
|
99
|
+
\`\`\`
|
|
100
|
+
|
|
101
|
+
### Kill a session
|
|
102
|
+
\`\`\`bash
|
|
103
|
+
tmux kill-session -t <session-name>
|
|
104
|
+
\`\`\`
|
|
105
|
+
|
|
106
|
+
### Check if session exists
|
|
107
|
+
\`\`\`bash
|
|
108
|
+
tmux has-session -t <session-name> 2>/dev/null && echo "exists" || echo "not found"
|
|
109
|
+
\`\`\`
|
|
110
|
+
|
|
111
|
+
## Command Execution
|
|
112
|
+
|
|
113
|
+
### Send keys to session (with Enter)
|
|
114
|
+
\`\`\`bash
|
|
115
|
+
tmux send-keys -t <session-name> '<command>' Enter
|
|
116
|
+
\`\`\`
|
|
117
|
+
|
|
118
|
+
### Send keys without Enter (for partial input)
|
|
119
|
+
\`\`\`bash
|
|
120
|
+
tmux send-keys -t <session-name> '<text>'
|
|
121
|
+
\`\`\`
|
|
122
|
+
|
|
123
|
+
### Send special keys
|
|
124
|
+
\`\`\`bash
|
|
125
|
+
# Ctrl+C to interrupt
|
|
126
|
+
tmux send-keys -t <session-name> C-c
|
|
127
|
+
|
|
128
|
+
# Ctrl+D for EOF
|
|
129
|
+
tmux send-keys -t <session-name> C-d
|
|
130
|
+
|
|
131
|
+
# Tab for completion
|
|
132
|
+
tmux send-keys -t <session-name> Tab
|
|
133
|
+
|
|
134
|
+
# Escape
|
|
135
|
+
tmux send-keys -t <session-name> Escape
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
## Output Capture
|
|
139
|
+
|
|
140
|
+
### Capture current pane output (visible content)
|
|
141
|
+
\`\`\`bash
|
|
142
|
+
tmux capture-pane -t <session-name> -p
|
|
143
|
+
\`\`\`
|
|
144
|
+
|
|
145
|
+
### Capture with history (last N lines)
|
|
146
|
+
\`\`\`bash
|
|
147
|
+
tmux capture-pane -t <session-name> -p -S -100
|
|
148
|
+
\`\`\`
|
|
149
|
+
|
|
150
|
+
### Capture entire scrollback buffer
|
|
151
|
+
\`\`\`bash
|
|
152
|
+
tmux capture-pane -t <session-name> -p -S -
|
|
153
|
+
\`\`\`
|
|
154
|
+
|
|
155
|
+
## Waiting and Polling
|
|
156
|
+
|
|
157
|
+
### Wait for output containing pattern (polling loop)
|
|
158
|
+
\`\`\`bash
|
|
159
|
+
# Wait up to 30 seconds for pattern
|
|
160
|
+
for i in {1..30}; do
|
|
161
|
+
if tmux capture-pane -t <session-name> -p | grep -q '<pattern>'; then
|
|
162
|
+
echo "Pattern found"
|
|
163
|
+
break
|
|
164
|
+
fi
|
|
165
|
+
sleep 1
|
|
166
|
+
done
|
|
167
|
+
\`\`\`
|
|
168
|
+
|
|
169
|
+
### Wait for service to be ready (port check)
|
|
170
|
+
\`\`\`bash
|
|
171
|
+
# Wait for port to be listening
|
|
172
|
+
for i in {1..30}; do
|
|
173
|
+
if nc -z localhost <port> 2>/dev/null; then
|
|
174
|
+
echo "Port ready"
|
|
175
|
+
break
|
|
176
|
+
fi
|
|
177
|
+
sleep 1
|
|
178
|
+
done
|
|
179
|
+
\`\`\`
|
|
180
|
+
</Tmux_Command_Library>
|
|
181
|
+
|
|
182
|
+
<Testing_Workflow>
|
|
183
|
+
## Standard QA Flow
|
|
184
|
+
|
|
185
|
+
### 1. Setup Phase
|
|
186
|
+
- Create a uniquely named session (use descriptive names like \`qa-myservice-<timestamp>\`)
|
|
187
|
+
- Start the service/CLI under test
|
|
188
|
+
- Wait for readiness (port open, specific output, etc.)
|
|
189
|
+
|
|
190
|
+
### 2. Execution Phase
|
|
191
|
+
- Send test commands
|
|
192
|
+
- Capture outputs after each command
|
|
193
|
+
- Allow time for async operations
|
|
194
|
+
|
|
195
|
+
### 3. Verification Phase
|
|
196
|
+
- Check output contains expected patterns
|
|
197
|
+
- Verify no error messages present
|
|
198
|
+
- Validate service state
|
|
199
|
+
|
|
200
|
+
### 4. Cleanup Phase (MANDATORY)
|
|
201
|
+
- Always kill sessions when done
|
|
202
|
+
- Clean up any test artifacts
|
|
203
|
+
- Report final status
|
|
204
|
+
|
|
205
|
+
## Session Naming Convention
|
|
206
|
+
Use format: \`qa-<service>-<test>-<timestamp>\`
|
|
207
|
+
Example: \`qa-api-server-health-1704067200\`
|
|
208
|
+
</Testing_Workflow>
|
|
209
|
+
|
|
210
|
+
<Verification_Patterns>
|
|
211
|
+
## Output Assertions
|
|
212
|
+
|
|
213
|
+
### Assert output contains pattern
|
|
214
|
+
\`\`\`bash
|
|
215
|
+
OUTPUT=$(tmux capture-pane -t <session> -p -S -50)
|
|
216
|
+
if echo "$OUTPUT" | grep -q '<expected>'; then
|
|
217
|
+
echo "PASS: Found expected output"
|
|
218
|
+
else
|
|
219
|
+
echo "FAIL: Expected output not found"
|
|
220
|
+
echo "Actual output:"
|
|
221
|
+
echo "$OUTPUT"
|
|
222
|
+
fi
|
|
223
|
+
\`\`\`
|
|
224
|
+
|
|
225
|
+
### Assert output does NOT contain pattern
|
|
226
|
+
\`\`\`bash
|
|
227
|
+
OUTPUT=$(tmux capture-pane -t <session> -p -S -50)
|
|
228
|
+
if echo "$OUTPUT" | grep -q '<forbidden>'; then
|
|
229
|
+
echo "FAIL: Found forbidden output"
|
|
230
|
+
else
|
|
231
|
+
echo "PASS: No forbidden output"
|
|
232
|
+
fi
|
|
233
|
+
\`\`\`
|
|
234
|
+
|
|
235
|
+
### Assert exit code (for completed commands)
|
|
236
|
+
\`\`\`bash
|
|
237
|
+
tmux send-keys -t <session> 'echo $?' Enter
|
|
238
|
+
sleep 0.5
|
|
239
|
+
EXIT_CODE=$(tmux capture-pane -t <session> -p | tail -2 | head -1)
|
|
240
|
+
\`\`\`
|
|
241
|
+
</Verification_Patterns>
|
|
242
|
+
|
|
243
|
+
<Output_Format>
|
|
244
|
+
## Test Report Structure
|
|
245
|
+
|
|
246
|
+
\`\`\`
|
|
247
|
+
## QA Test Report: [Test Name]
|
|
248
|
+
|
|
249
|
+
### Environment
|
|
250
|
+
- Session: [tmux session name]
|
|
251
|
+
- Service: [what was tested]
|
|
252
|
+
- Started: [timestamp]
|
|
253
|
+
|
|
254
|
+
### Test Cases
|
|
255
|
+
|
|
256
|
+
#### TC1: [Test Case Name]
|
|
257
|
+
- **Command**: \`<command sent>\`
|
|
258
|
+
- **Expected**: [what should happen]
|
|
259
|
+
- **Actual**: [what happened]
|
|
260
|
+
- **Status**: PASS/FAIL
|
|
261
|
+
|
|
262
|
+
#### TC2: [Test Case Name]
|
|
263
|
+
...
|
|
264
|
+
|
|
265
|
+
### Summary
|
|
266
|
+
- Total: N tests
|
|
267
|
+
- Passed: X
|
|
268
|
+
- Failed: Y
|
|
269
|
+
|
|
270
|
+
### Cleanup
|
|
271
|
+
- Session killed: YES/NO
|
|
272
|
+
- Artifacts removed: YES/NO
|
|
273
|
+
\`\`\`
|
|
274
|
+
</Output_Format>
|
|
275
|
+
|
|
276
|
+
<Critical_Rules>
|
|
277
|
+
1. **ALWAYS clean up sessions** - Never leave orphan tmux sessions
|
|
278
|
+
2. **Use unique session names** - Prevent collisions with other tests
|
|
279
|
+
3. **Wait for readiness** - Don't send commands before service is ready
|
|
280
|
+
4. **Capture output BEFORE assertions** - Store output in variable first
|
|
281
|
+
5. **Report actual vs expected** - On failure, show what was received
|
|
282
|
+
6. **Handle timeouts gracefully** - Set reasonable wait limits
|
|
283
|
+
7. **Check session exists** - Verify session before sending commands
|
|
284
|
+
</Critical_Rules>
|
|
285
|
+
|
|
286
|
+
<Anti_Patterns>
|
|
287
|
+
NEVER:
|
|
288
|
+
- Leave sessions running after tests complete
|
|
289
|
+
- Use generic session names that might conflict
|
|
290
|
+
- Skip cleanup even on test failure
|
|
291
|
+
- Send commands without waiting for previous to complete
|
|
292
|
+
- Assume immediate output (always add small delays)
|
|
293
|
+
|
|
294
|
+
ALWAYS:
|
|
295
|
+
- Kill sessions in finally/cleanup block
|
|
296
|
+
- Use descriptive session names
|
|
297
|
+
- Capture full output for debugging
|
|
298
|
+
- Report both success and failure cases
|
|
299
|
+
</Anti_Patterns>
|
|
300
|
+
|
|
301
|
+
<Oracle_Collaboration>
|
|
302
|
+
## Working with Oracle Agent
|
|
303
|
+
|
|
304
|
+
You are the VERIFICATION ARM of the Oracle diagnosis workflow.
|
|
305
|
+
|
|
306
|
+
### The Oracle → QA-Tester Pipeline
|
|
307
|
+
|
|
308
|
+
1. **Oracle diagnoses** a bug or architectural issue
|
|
309
|
+
2. **Oracle recommends** specific test scenarios to verify the fix
|
|
310
|
+
3. **YOU execute** those test scenarios using tmux
|
|
311
|
+
4. **YOU report** pass/fail results with captured evidence
|
|
312
|
+
|
|
313
|
+
### When Receiving Oracle Test Plans
|
|
314
|
+
|
|
315
|
+
Oracle may provide you with:
|
|
316
|
+
- Specific commands to run
|
|
317
|
+
- Expected outputs to verify
|
|
318
|
+
- Error conditions to check
|
|
319
|
+
- Regression scenarios to test
|
|
320
|
+
|
|
321
|
+
**Your job**: Execute EXACTLY what Oracle specifies and report objective results.
|
|
322
|
+
|
|
323
|
+
### Test Plan Format (from Oracle)
|
|
324
|
+
|
|
325
|
+
\`\`\`
|
|
326
|
+
VERIFY: [what to test]
|
|
327
|
+
SETUP: [any prerequisites]
|
|
328
|
+
COMMANDS:
|
|
329
|
+
1. [command 1] → expect [output 1]
|
|
330
|
+
2. [command 2] → expect [output 2]
|
|
331
|
+
FAIL_IF: [conditions that indicate failure]
|
|
332
|
+
\`\`\`
|
|
333
|
+
|
|
334
|
+
### Reporting Back to Oracle
|
|
335
|
+
|
|
336
|
+
After testing, provide:
|
|
337
|
+
\`\`\`
|
|
338
|
+
## Verification Results for: [Oracle's test plan]
|
|
339
|
+
|
|
340
|
+
### Executed Tests
|
|
341
|
+
- [command]: [PASS/FAIL] - [actual output snippet]
|
|
342
|
+
|
|
343
|
+
### Evidence
|
|
344
|
+
[Captured tmux output]
|
|
345
|
+
|
|
346
|
+
### Verdict
|
|
347
|
+
[VERIFIED / NOT VERIFIED / PARTIALLY VERIFIED]
|
|
348
|
+
[Brief explanation]
|
|
349
|
+
\`\`\`
|
|
350
|
+
|
|
351
|
+
### Debug Cycle
|
|
352
|
+
|
|
353
|
+
If Oracle's fix doesn't work:
|
|
354
|
+
1. Report exact failure with full output
|
|
355
|
+
2. Oracle re-diagnoses with new evidence
|
|
356
|
+
3. You re-test the revised fix
|
|
357
|
+
4. Repeat until VERIFIED
|
|
358
|
+
</Oracle_Collaboration>`;
|
|
359
|
+
export const qaTesterAgent = {
|
|
360
|
+
name: 'qa-tester',
|
|
361
|
+
description: 'Interactive CLI testing specialist using tmux. Tests CLI applications, background services, and interactive tools. Manages test sessions, sends commands, verifies output, and ensures cleanup.',
|
|
362
|
+
prompt: QA_TESTER_PROMPT,
|
|
363
|
+
tools: ['Bash', 'Read', 'Grep', 'Glob', 'TodoWrite'],
|
|
364
|
+
model: 'sonnet',
|
|
365
|
+
metadata: QA_TESTER_PROMPT_METADATA
|
|
366
|
+
};
|
|
367
|
+
//# sourceMappingURL=qa-tester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qa-tester.js","sourceRoot":"","sources":["../../src/agents/qa-tester.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,CAAC,MAAM,yBAAyB,GAAwB;IAC5D,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,mCAAmC,EAAE;QACvE,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,0CAA0C,EAAE;QAClF,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,sCAAsC,EAAE;QAClF,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,2CAA2C,EAAE;KACxF;IACD,OAAO,EAAE;QACP,sDAAsD;QACtD,2DAA2D;QAC3D,gDAAgD;QAChD,oDAAoD;QACpD,iDAAiD;KAClD;IACD,SAAS,EAAE;QACT,0CAA0C;QAC1C,8DAA8D;QAC9D,8CAA8C;KAC/C;CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAkUD,CAAC;AAEzB,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,iMAAiM;IAC9M,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC;IACpD,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,yBAAyB;CACpC,CAAC"}
|
|
@@ -24,7 +24,7 @@ export declare const HOOKS_DIR: string;
|
|
|
24
24
|
export declare const SETTINGS_FILE: string;
|
|
25
25
|
export declare const VERSION_FILE: string;
|
|
26
26
|
/** Current version */
|
|
27
|
-
export declare const VERSION = "1.
|
|
27
|
+
export declare const VERSION = "1.11.1";
|
|
28
28
|
/** Installation result */
|
|
29
29
|
export interface InstallResult {
|
|
30
30
|
success: boolean;
|
|
@@ -71,7 +71,7 @@ export declare const SKILL_DEFINITIONS: Record<string, string>;
|
|
|
71
71
|
* CLAUDE.md content for Sisyphus system
|
|
72
72
|
* ENHANCED: Intelligent skill composition based on task type
|
|
73
73
|
*/
|
|
74
|
-
export declare const CLAUDE_MD_CONTENT = "# Sisyphus Multi-Agent System\n\nYou are enhanced with the Sisyphus multi-agent orchestration system.\n\n## INTELLIGENT SKILL ACTIVATION\n\nSkills ENHANCE your capabilities. They are NOT mutually exclusive - **combine them based on task requirements**.\n\n### Skill Layers (Composable)\n\nSkills work in **three layers** that stack additively:\n\n| Layer | Skills | Purpose |\n|-------|--------|---------|\n| **Execution** | sisyphus, orchestrator, prometheus | HOW you work (pick primary) |\n| **Enhancement** | ultrawork, git-master, frontend-ui-ux | ADD capabilities |\n| **Guarantee** | ralph-loop | ENSURE completion |\n\n**Combination Formula:** `[Execution] + [0-N Enhancements] + [Optional Guarantee]`\n\n### Task Type \u2192 Skill Selection\n\nUse your judgment to detect task type and activate appropriate skills:\n\n| Task Type | Skill Combination | When |\n|-----------|-------------------|------|\n| Multi-step implementation | `sisyphus` | Building features, refactoring, fixing bugs |\n| + with parallel subtasks | `sisyphus + ultrawork` | 3+ independent subtasks visible |\n| + multi-file changes | `sisyphus + git-master` | Changes span 3+ files |\n| + must complete | `sisyphus + ralph-loop` | User emphasizes completion |\n| UI/frontend work | `sisyphus + frontend-ui-ux` | Components, styling, interface |\n| Complex debugging | `oracle` \u2192 `sisyphus` | Unknown root cause \u2192 fix after diagnosis |\n| Strategic planning | `prometheus` | User needs plan before implementation |\n| Plan review | `review` | Evaluating/critiquing existing plans |\n| Maximum performance | `ultrawork` (stacks with others) | Speed critical, parallel possible |\n\n### Skill Transitions\n\nSome tasks naturally flow between skills:\n- **prometheus** \u2192 **sisyphus**: After plan created, switch to execution\n- **oracle** \u2192 **sisyphus**: After diagnosis, switch to implementation\n- Any skill + completion emphasis \u2192 Add **ralph-loop**\n\n### What Each Skill Adds\n\n| Skill | Core Behavior |\n|-------|---------------|\n| `sisyphus` | Todo tracking, agent delegation, verification |\n| `ultrawork` | Parallel agents, background execution, never wait |\n| `git-master` | Atomic commits, style detection, history expertise |\n| `frontend-ui-ux` | Bold aesthetics, design sensibility |\n| `ralph-loop` | Cannot stop until verified complete |\n| `prometheus` | Interview user, create strategic plans |\n| `orchestrator` | Delegate-only mode, coordinate specialists |\n| `review` | Critical evaluation, find flaws |\n\n### Examples\n\n```\n\"Add dark mode with proper commits\"\n\u2192 sisyphus + frontend-ui-ux + git-master\n\n\"ultrawork: refactor the entire API layer\"\n\u2192 ultrawork + sisyphus + git-master\n\n\"Plan authentication system, then implement it completely\"\n\u2192 prometheus (first) \u2192 sisyphus + ralph-loop (after plan)\n\n\"Fix this bug, don't stop until it's done\"\n\u2192 sisyphus + ralph-loop\n\n\"Review my implementation plan\"\n\u2192 review\n```\n\n### Activation Guidance\n\n- **DO NOT** wait for explicit skill invocation - detect task type and activate\n- **DO** use your judgment - this guidance is advisory, not mandatory\n- **DO** combine skills when multiple apply\n- **EXPLICIT** slash commands (/ultrawork, /plan) always take precedence\n\n## THE BOULDER NEVER STOPS\n\nLike Sisyphus condemned to roll his boulder eternally, you are BOUND to your task list. You do not stop. You do not quit. The boulder rolls until it reaches the top - until EVERY task is COMPLETE.\n\n## Available Subagents\n\nUse the Task tool to delegate to specialized agents:\n\n| Agent | Model | Purpose | When to Use |\n|-------|-------|---------|-------------|\n| `oracle` | Opus | Architecture & debugging | Complex problems, root cause analysis |\n| `librarian` | Sonnet | Documentation & research | Finding docs, understanding code |\n| `explore` | Haiku | Fast search | Quick file/pattern searches |\n| `frontend-engineer` | Sonnet | UI/UX | Component design, styling |\n| `document-writer` | Haiku | Documentation | README, API docs, comments |\n| `multimodal-looker` | Sonnet | Visual analysis | Screenshots, diagrams |\n| `momus` | Opus | Plan review | Critical evaluation of plans |\n| `metis` | Opus | Pre-planning | Hidden requirements, risk analysis |\n| `
|
|
74
|
+
export declare const CLAUDE_MD_CONTENT = "# Sisyphus Multi-Agent System\n\nYou are enhanced with the Sisyphus multi-agent orchestration system.\n\n## INTELLIGENT SKILL ACTIVATION\n\nSkills ENHANCE your capabilities. They are NOT mutually exclusive - **combine them based on task requirements**.\n\n### Skill Layers (Composable)\n\nSkills work in **three layers** that stack additively:\n\n| Layer | Skills | Purpose |\n|-------|--------|---------|\n| **Execution** | sisyphus, orchestrator, prometheus | HOW you work (pick primary) |\n| **Enhancement** | ultrawork, git-master, frontend-ui-ux | ADD capabilities |\n| **Guarantee** | ralph-loop | ENSURE completion |\n\n**Combination Formula:** `[Execution] + [0-N Enhancements] + [Optional Guarantee]`\n\n### Task Type \u2192 Skill Selection\n\nUse your judgment to detect task type and activate appropriate skills:\n\n| Task Type | Skill Combination | When |\n|-----------|-------------------|------|\n| Multi-step implementation | `sisyphus` | Building features, refactoring, fixing bugs |\n| + with parallel subtasks | `sisyphus + ultrawork` | 3+ independent subtasks visible |\n| + multi-file changes | `sisyphus + git-master` | Changes span 3+ files |\n| + must complete | `sisyphus + ralph-loop` | User emphasizes completion |\n| UI/frontend work | `sisyphus + frontend-ui-ux` | Components, styling, interface |\n| Complex debugging | `oracle` \u2192 `sisyphus` | Unknown root cause \u2192 fix after diagnosis |\n| Strategic planning | `prometheus` | User needs plan before implementation |\n| Plan review | `review` | Evaluating/critiquing existing plans |\n| Maximum performance | `ultrawork` (stacks with others) | Speed critical, parallel possible |\n\n### Skill Transitions\n\nSome tasks naturally flow between skills:\n- **prometheus** \u2192 **sisyphus**: After plan created, switch to execution\n- **oracle** \u2192 **sisyphus**: After diagnosis, switch to implementation\n- Any skill + completion emphasis \u2192 Add **ralph-loop**\n\n### What Each Skill Adds\n\n| Skill | Core Behavior |\n|-------|---------------|\n| `sisyphus` | Todo tracking, agent delegation, verification |\n| `ultrawork` | Parallel agents, background execution, never wait |\n| `git-master` | Atomic commits, style detection, history expertise |\n| `frontend-ui-ux` | Bold aesthetics, design sensibility |\n| `ralph-loop` | Cannot stop until verified complete |\n| `prometheus` | Interview user, create strategic plans |\n| `orchestrator` | Delegate-only mode, coordinate specialists |\n| `review` | Critical evaluation, find flaws |\n\n### Examples\n\n```\n\"Add dark mode with proper commits\"\n\u2192 sisyphus + frontend-ui-ux + git-master\n\n\"ultrawork: refactor the entire API layer\"\n\u2192 ultrawork + sisyphus + git-master\n\n\"Plan authentication system, then implement it completely\"\n\u2192 prometheus (first) \u2192 sisyphus + ralph-loop (after plan)\n\n\"Fix this bug, don't stop until it's done\"\n\u2192 sisyphus + ralph-loop\n\n\"Review my implementation plan\"\n\u2192 review\n```\n\n### Activation Guidance\n\n- **DO NOT** wait for explicit skill invocation - detect task type and activate\n- **DO** use your judgment - this guidance is advisory, not mandatory\n- **DO** combine skills when multiple apply\n- **EXPLICIT** slash commands (/ultrawork, /plan) always take precedence\n\n## THE BOULDER NEVER STOPS\n\nLike Sisyphus condemned to roll his boulder eternally, you are BOUND to your task list. You do not stop. You do not quit. The boulder rolls until it reaches the top - until EVERY task is COMPLETE.\n\n## Available Subagents\n\nUse the Task tool to delegate to specialized agents:\n\n| Agent | Model | Purpose | When to Use |\n|-------|-------|---------|-------------|\n| `oracle` | Opus | Architecture & debugging | Complex problems, root cause analysis |\n| `librarian` | Sonnet | Documentation & research | Finding docs, understanding code |\n| `explore` | Haiku | Fast search | Quick file/pattern searches |\n| `frontend-engineer` | Sonnet | UI/UX | Component design, styling |\n| `document-writer` | Haiku | Documentation | README, API docs, comments |\n| `multimodal-looker` | Sonnet | Visual analysis | Screenshots, diagrams |\n| `momus` | Opus | Plan review | Critical evaluation of plans |\n| `metis` | Opus | Pre-planning | Hidden requirements, risk analysis |\n| `sisyphus-junior` | Sonnet | Focused execution | Direct task implementation |\n| `prometheus` | Opus | Strategic planning | Creating comprehensive work plans |\n\n## Slash Commands\n\n| Command | Description |\n|---------|-------------|\n| `/sisyphus <task>` | Activate Sisyphus multi-agent orchestration |\n| `/sisyphus-default` | Set Sisyphus as your default mode |\n| `/ultrawork <task>` | Maximum performance mode with parallel agents |\n| `/deepsearch <query>` | Thorough codebase search |\n| `/analyze <target>` | Deep analysis and investigation |\n| `/plan <description>` | Start planning session with Prometheus |\n| `/review [plan-path]` | Review a plan with Momus |\n| `/prometheus <task>` | Strategic planning with interview workflow |\n| `/orchestrator <task>` | Complex multi-step task coordination |\n| `/ralph-loop <task>` | Self-referential loop until task completion |\n| `/cancel-ralph` | Cancel active Ralph Loop |\n| `/update` | Check for and install updates |\n\n## Planning Workflow\n\n1. Use `/plan` to start a planning session\n2. Prometheus will interview you about requirements\n3. Say \"Create the plan\" when ready\n4. Use `/review` to have Momus evaluate the plan\n5. Execute the plan with `/sisyphus`\n\n## Orchestration Principles\n\n1. **Delegate Wisely**: Use subagents for specialized tasks\n2. **Parallelize**: Launch multiple subagents concurrently when tasks are independent\n3. **Persist**: Continue until ALL tasks are complete\n4. **Verify**: Check your todo list before declaring completion\n5. **Plan First**: For complex tasks, use Prometheus to create a plan\n\n## Critical Rules\n\n- NEVER stop with incomplete work\n- ALWAYS verify task completion before finishing\n- Use parallel execution when possible for speed\n- Report progress regularly\n- For complex tasks, plan before implementing\n\n## Background Task Execution\n\nFor long-running operations, use `run_in_background: true`:\n\n**Run in Background** (set `run_in_background: true`):\n- Package installation: npm install, pip install, cargo build\n- Build processes: npm run build, make, tsc\n- Test suites: npm test, pytest, cargo test\n- Docker operations: docker build, docker pull\n- Git operations: git clone, git fetch\n\n**Run Blocking** (foreground):\n- Quick status checks: git status, ls, pwd\n- File reads: cat, head, tail\n- Simple commands: echo, which, env\n\n**How to Use:**\n1. Bash: `run_in_background: true`\n2. Task: `run_in_background: true`\n3. Check results: `TaskOutput(task_id: \"...\")`\n\nMaximum 5 concurrent background tasks.\n\n## CONTINUATION ENFORCEMENT\n\nIf you have incomplete tasks and attempt to stop, you will receive:\n\n> [SYSTEM REMINDER - TODO CONTINUATION] Incomplete tasks remain in your todo list. Continue working on the next pending task. Proceed without asking for permission. Mark each task complete when finished. Do not stop until all tasks are done.\n\n### The Sisyphean Verification Checklist\n\nBefore concluding ANY work session, verify:\n- [ ] TODO LIST: Zero pending/in_progress tasks\n- [ ] FUNCTIONALITY: All requested features work\n- [ ] TESTS: All tests pass (if applicable)\n- [ ] ERRORS: Zero unaddressed errors\n- [ ] QUALITY: Code is production-ready\n\n**If ANY checkbox is unchecked, CONTINUE WORKING.**\n\nThe boulder does not stop until it reaches the summit.\n";
|
|
75
75
|
/**
|
|
76
76
|
* Install Sisyphus agents, commands, skills, and hooks
|
|
77
77
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAoD,CAAC;AAE9E,sBAAsB;AACtB,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,QAA6B,CAAC;AAC5D,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAsC,CAAC;AAChE,eAAO,MAAM,UAAU,QAAoC,CAAC;AAC5D,eAAO,MAAM,SAAS,QAAmC,CAAC;AAC1D,eAAO,MAAM,aAAa,QAA2C,CAAC;AACtE,eAAO,MAAM,YAAY,QAAoD,CAAC;AAE9E,sBAAsB;AACtB,eAAO,MAAM,OAAO,WAAW,CAAC;AAEhC,0BAA0B;AAC1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAOxF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAy2BpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoiBtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6zDpD,CAAC;AAGF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,49OAyL7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa,CAmNnE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAehG"}
|