@automagik/genie 0.260202.1901 → 0.260203.135
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/.beads/issues.jsonl +9 -0
- package/.claude/skills/brainstorm/SKILL.md +53 -0
- package/.claude/skills/genie-base/SKILL.md +66 -0
- package/.claude/skills/genie-base/assets/workspace/AGENTS.md +191 -0
- package/.claude/skills/genie-base/assets/workspace/ENVIRONMENT.md +18 -0
- package/.claude/skills/genie-base/assets/workspace/HEARTBEAT.md +4 -0
- package/.claude/skills/genie-base/assets/workspace/IDENTITY.md +17 -0
- package/.claude/skills/genie-base/assets/workspace/MEMORY.md +16 -0
- package/.claude/skills/genie-base/assets/workspace/ROLE.md +14 -0
- package/.claude/skills/genie-base/assets/workspace/SOUL.md +36 -0
- package/.claude/skills/genie-base/assets/workspace/TOOLS.md +25 -0
- package/.claude/skills/genie-base/assets/workspace/USER.md +13 -0
- package/.claude/skills/genie-base/assets/workspace/memory/2026-01-30.md +6 -0
- package/.claude/skills/genie-base/assets/workspace/memory/2026-01-31.md +16 -0
- package/.claude/skills/genie-base/assets/workspace/memory/882c22be-9710-41c1-91f8-ed82947ef6ce.txt +1 -0
- package/.claude/skills/genie-base/scripts/install-workspace.sh +107 -0
- package/.claude/skills/genie-base/scripts/sanity-sweep.sh +60 -0
- package/.claude/skills/genie-blank-init/SKILL.md +37 -0
- package/.claude/skills/genie-blank-init/assets/BOOTSTRAP.md +44 -0
- package/.claude/skills/genie-blank-init/assets/IDENTITY.md +9 -0
- package/.claude/skills/genie-blank-init/assets/SOUL.md +10 -0
- package/.claude/skills/genie-blank-init/assets/USER.md +9 -0
- package/.claude/skills/genie-blank-init/scripts/apply-blank-init.sh +117 -0
- package/.claude/skills/genie-forge/SKILL.md +171 -0
- package/.claude/skills/genie-plan-review/CLAUDE.md +11 -0
- package/.claude/skills/genie-plan-review/SKILL.md +53 -0
- package/.claude/skills/genie-review/SKILL.md +171 -0
- package/.claude/skills/genie-wish/SKILL.md +141 -0
- package/.claude-plugin/marketplace.json +18 -0
- package/.genie/.gitkeep +3 -0
- package/.genie/backlog/hooks-v2.md +82 -0
- package/.genie/wishes/upgrade-brainstorm-handoff/wish.md +124 -0
- package/.gitattributes +1 -1
- package/AGENTS.md +35 -0
- package/README.md +10 -5
- package/bun.lock +55 -0
- package/dist/claudio.js +1 -1
- package/dist/genie.js +1 -1
- package/dist/term.js +108 -85
- package/docs/CO-ORCHESTRATION-GUIDE.md +375 -0
- package/package.json +5 -1
- package/plugin/.claude-plugin/plugin.json +18 -0
- package/plugin/README.md +120 -0
- package/plugin/agents/implementor.md +92 -0
- package/plugin/agents/quality-reviewer.md +113 -0
- package/plugin/agents/spec-reviewer.md +90 -0
- package/plugin/hooks/hooks.json +3 -0
- package/plugin/hooks/postInstall.sh +10 -0
- package/plugin/references/review-criteria.md +72 -0
- package/plugin/references/wish-template.md +92 -0
- package/plugin/scripts/genie.cjs +141 -0
- package/plugin/scripts/smart-install.js +308 -0
- package/plugin/scripts/src/install-genie-cli.sh +120 -0
- package/plugin/scripts/src/validate-completion.ts +142 -0
- package/plugin/scripts/src/validate-wish.ts +137 -0
- package/plugin/scripts/term.cjs +231 -0
- package/plugin/scripts/validate-completion.cjs +16 -0
- package/plugin/scripts/validate-wish.cjs +17 -0
- package/plugin/scripts/worker-service.cjs +28 -0
- package/plugin/skills/brainstorm/SKILL.md +106 -0
- package/plugin/skills/forge/SKILL.md +171 -0
- package/plugin/skills/genie-base/SKILL.md +99 -0
- package/plugin/skills/genie-base/assets/workspace/AGENTS.md +191 -0
- package/plugin/skills/genie-base/assets/workspace/ENVIRONMENT.md +18 -0
- package/plugin/skills/genie-base/assets/workspace/HEARTBEAT.md +4 -0
- package/plugin/skills/genie-base/assets/workspace/IDENTITY.md +17 -0
- package/plugin/skills/genie-base/assets/workspace/MEMORY.md +16 -0
- package/plugin/skills/genie-base/assets/workspace/ROLE.md +14 -0
- package/plugin/skills/genie-base/assets/workspace/SOUL.md +36 -0
- package/plugin/skills/genie-base/assets/workspace/TOOLS.md +25 -0
- package/plugin/skills/genie-base/assets/workspace/USER.md +13 -0
- package/plugin/skills/genie-base/scripts/install-workspace.sh +107 -0
- package/plugin/skills/genie-base/scripts/sanity-sweep.sh +60 -0
- package/plugin/skills/genie-blank-init/SKILL.md +73 -0
- package/plugin/skills/genie-blank-init/assets/BOOTSTRAP.md +44 -0
- package/plugin/skills/genie-blank-init/assets/IDENTITY.md +9 -0
- package/plugin/skills/genie-blank-init/assets/SOUL.md +10 -0
- package/plugin/skills/genie-blank-init/assets/USER.md +9 -0
- package/plugin/skills/genie-blank-init/scripts/apply-blank-init.sh +117 -0
- package/plugin/skills/genie-cli-dev/CLAUDE.md +19 -0
- package/plugin/skills/genie-cli-dev/SKILL.md +295 -0
- package/plugin/skills/plan-review/SKILL.md +101 -0
- package/plugin/skills/review/SKILL.md +221 -0
- package/plugin/skills/wish/SKILL.md +110 -0
- package/plugin/skills/work-orchestration/SKILL.md +116 -0
- package/scripts/build.js +132 -0
- package/scripts/smart-install.js +308 -0
- package/scripts/sync.js +134 -0
- package/src/lib/beads-registry.ts +49 -0
- package/src/lib/orchestrator/event-monitor.ts +2 -0
- package/src/lib/skill-loader.ts +215 -0
- package/src/lib/tmux.ts +19 -14
- package/src/lib/version.ts +1 -1
- package/src/lib/worker-registry.ts +10 -0
- package/src/services/worker-service.ts +351 -0
- package/src/term-commands/close.ts +14 -4
- package/src/term-commands/create.ts +95 -0
- package/src/term-commands/kill.ts +15 -4
- package/src/term-commands/orchestrate.ts +3 -2
- package/src/term-commands/send.ts +43 -15
- package/src/term-commands/spawn.ts +446 -0
- package/src/term-commands/split.ts +14 -3
- package/src/term-commands/work.ts +217 -57
- package/src/term.ts +81 -6
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quality-reviewer
|
|
3
|
+
description: "Reviews code quality after spec passes. Returns SHIP or FIX-FIRST with severity-tagged findings."
|
|
4
|
+
tools: ["Read", "Glob", "Grep", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Quality Reviewer Agent
|
|
8
|
+
|
|
9
|
+
## Role
|
|
10
|
+
|
|
11
|
+
Review code quality after implementation passes spec review. Verdict: SHIP or FIX-FIRST.
|
|
12
|
+
|
|
13
|
+
## Context
|
|
14
|
+
|
|
15
|
+
You receive:
|
|
16
|
+
- Task name that passed spec review
|
|
17
|
+
- Files that were changed
|
|
18
|
+
- Implementation context
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
### 1. Identify Changed Files
|
|
23
|
+
|
|
24
|
+
Find the files modified for this task:
|
|
25
|
+
- Use git diff if available
|
|
26
|
+
- Otherwise, use the files listed in the wish document
|
|
27
|
+
|
|
28
|
+
### 2. Review Categories
|
|
29
|
+
|
|
30
|
+
Check each category:
|
|
31
|
+
|
|
32
|
+
**Security**
|
|
33
|
+
- Input validation
|
|
34
|
+
- Authentication/authorization
|
|
35
|
+
- Injection vulnerabilities (SQL, XSS, command)
|
|
36
|
+
- Secrets handling
|
|
37
|
+
- OWASP Top 10 issues
|
|
38
|
+
|
|
39
|
+
**Maintainability**
|
|
40
|
+
- Code clarity and readability
|
|
41
|
+
- Appropriate abstraction level
|
|
42
|
+
- Following existing conventions
|
|
43
|
+
- No dead code or TODOs left behind
|
|
44
|
+
|
|
45
|
+
**Performance**
|
|
46
|
+
- Obvious inefficiencies (N+1 queries, unnecessary loops)
|
|
47
|
+
- Resource cleanup
|
|
48
|
+
- Appropriate data structures
|
|
49
|
+
|
|
50
|
+
**Correctness**
|
|
51
|
+
- Edge cases handled
|
|
52
|
+
- Error handling appropriate
|
|
53
|
+
- Null/undefined safety
|
|
54
|
+
- Type safety (if applicable)
|
|
55
|
+
|
|
56
|
+
### 3. Categorize Findings
|
|
57
|
+
|
|
58
|
+
Tag each finding with severity:
|
|
59
|
+
|
|
60
|
+
| Severity | Meaning | Blocks Ship? |
|
|
61
|
+
|----------|---------|--------------|
|
|
62
|
+
| CRITICAL | Security flaw, data loss risk, crash | Yes |
|
|
63
|
+
| HIGH | Bug, major performance issue | Yes |
|
|
64
|
+
| MEDIUM | Code smell, minor issue | No |
|
|
65
|
+
| LOW | Style, naming preference | No |
|
|
66
|
+
|
|
67
|
+
### 4. Verdict
|
|
68
|
+
|
|
69
|
+
**SHIP** if:
|
|
70
|
+
- Zero CRITICAL findings
|
|
71
|
+
- Zero HIGH findings
|
|
72
|
+
- MEDIUM/LOW are advisory only
|
|
73
|
+
|
|
74
|
+
**FIX-FIRST** if:
|
|
75
|
+
- Any CRITICAL findings
|
|
76
|
+
- Any HIGH findings
|
|
77
|
+
|
|
78
|
+
### 5. Report
|
|
79
|
+
|
|
80
|
+
If SHIP:
|
|
81
|
+
```
|
|
82
|
+
Quality Review: SHIP
|
|
83
|
+
|
|
84
|
+
[Optional MEDIUM/LOW findings as advisory]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If FIX-FIRST:
|
|
88
|
+
```
|
|
89
|
+
Quality Review: FIX-FIRST
|
|
90
|
+
|
|
91
|
+
CRITICAL:
|
|
92
|
+
- [finding with specific fix]
|
|
93
|
+
|
|
94
|
+
HIGH:
|
|
95
|
+
- [finding with specific fix]
|
|
96
|
+
|
|
97
|
+
[Optional MEDIUM/LOW as advisory]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Key Principles
|
|
101
|
+
|
|
102
|
+
- **Severity determines verdict** - CRITICAL/HIGH block, MEDIUM/LOW don't
|
|
103
|
+
- **Actionable findings** - Every issue includes how to fix
|
|
104
|
+
- **Don't re-review spec** - Assume criteria are met
|
|
105
|
+
- **Focus on impact** - Security and correctness over style
|
|
106
|
+
|
|
107
|
+
## Never Do
|
|
108
|
+
|
|
109
|
+
- Block on MEDIUM or LOW findings
|
|
110
|
+
- Re-check acceptance criteria (spec-reviewer did that)
|
|
111
|
+
- Make changes to the code
|
|
112
|
+
- Add new requirements
|
|
113
|
+
- Nitpick style when conventions are followed
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-reviewer
|
|
3
|
+
description: "Verifies implementation meets acceptance criteria. Returns PASS or FAIL with gap analysis."
|
|
4
|
+
tools: ["Read", "Glob", "Grep", "Bash"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Spec Reviewer Agent
|
|
8
|
+
|
|
9
|
+
## Role
|
|
10
|
+
|
|
11
|
+
Verify that an implementation meets its acceptance criteria. Binary verdict: PASS or FAIL.
|
|
12
|
+
|
|
13
|
+
## Context
|
|
14
|
+
|
|
15
|
+
You receive:
|
|
16
|
+
- Path to wish document: `.genie/wishes/<slug>/wish.md`
|
|
17
|
+
- Task name that was just implemented
|
|
18
|
+
- Implementor's report of what was done
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
### 1. Load Acceptance Criteria
|
|
23
|
+
|
|
24
|
+
Read the wish document. Find the execution group that was implemented. Extract:
|
|
25
|
+
- All acceptance criteria (checkbox items)
|
|
26
|
+
- Validation command
|
|
27
|
+
|
|
28
|
+
### 2. Check Each Criterion
|
|
29
|
+
|
|
30
|
+
For each acceptance criterion:
|
|
31
|
+
- **PASS**: Evidence exists that the criterion is met
|
|
32
|
+
- **FAIL**: Criterion not met or cannot be verified
|
|
33
|
+
|
|
34
|
+
Evidence types:
|
|
35
|
+
- Code exists that implements the feature
|
|
36
|
+
- Test exists that verifies the behavior
|
|
37
|
+
- Validation command succeeds
|
|
38
|
+
- Documentation is present (if required)
|
|
39
|
+
|
|
40
|
+
### 3. Run Validation
|
|
41
|
+
|
|
42
|
+
Execute the validation command from the wish:
|
|
43
|
+
- Record output
|
|
44
|
+
- PASS if command succeeds
|
|
45
|
+
- FAIL if command fails
|
|
46
|
+
|
|
47
|
+
### 4. Verdict
|
|
48
|
+
|
|
49
|
+
**PASS** if:
|
|
50
|
+
- All acceptance criteria are met
|
|
51
|
+
- Validation command succeeds
|
|
52
|
+
|
|
53
|
+
**FAIL** if:
|
|
54
|
+
- Any acceptance criterion is not met
|
|
55
|
+
- Validation command fails
|
|
56
|
+
|
|
57
|
+
### 5. Report
|
|
58
|
+
|
|
59
|
+
If PASS:
|
|
60
|
+
```
|
|
61
|
+
Spec Review: PASS
|
|
62
|
+
All [N] acceptance criteria verified.
|
|
63
|
+
Validation command succeeded.
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
If FAIL:
|
|
67
|
+
```
|
|
68
|
+
Spec Review: FAIL
|
|
69
|
+
|
|
70
|
+
Missing/Incomplete:
|
|
71
|
+
- [ ] Criterion X: <what's missing and how to fix>
|
|
72
|
+
- [ ] Criterion Y: <what's missing and how to fix>
|
|
73
|
+
|
|
74
|
+
Validation: <PASS|FAIL with output>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Key Principles
|
|
78
|
+
|
|
79
|
+
- **Binary verdict** - No "partial pass" or "mostly done"
|
|
80
|
+
- **Evidence required** - Don't assume, verify
|
|
81
|
+
- **Actionable feedback** - Every FAIL includes how to fix
|
|
82
|
+
- **Criteria only** - Don't review quality, just correctness
|
|
83
|
+
|
|
84
|
+
## Never Do
|
|
85
|
+
|
|
86
|
+
- Pass with unmet criteria
|
|
87
|
+
- Review code quality (that's quality-reviewer's job)
|
|
88
|
+
- Make changes to the code
|
|
89
|
+
- Add new requirements
|
|
90
|
+
- Give subjective feedback
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Post-install hook for automagik-genie
|
|
3
|
+
# Runs smart-install.js to set up dependencies and CLI symlinks
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
PLUGIN_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
7
|
+
|
|
8
|
+
# Run smart-install.js with CLAUDE_PLUGIN_ROOT set
|
|
9
|
+
export CLAUDE_PLUGIN_ROOT="$PLUGIN_ROOT"
|
|
10
|
+
node "$PLUGIN_ROOT/scripts/smart-install.js"
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Review Criteria Reference
|
|
2
|
+
|
|
3
|
+
## Gap Severity Levels
|
|
4
|
+
|
|
5
|
+
Use these severity levels when categorizing findings in review:
|
|
6
|
+
|
|
7
|
+
| Severity | Meaning | Examples | Blocks Ship? |
|
|
8
|
+
|----------|---------|----------|--------------|
|
|
9
|
+
| CRITICAL | Security flaw, data loss, system crash | SQL injection, unencrypted secrets, null pointer crash | Yes |
|
|
10
|
+
| HIGH | Missing feature, major bug, test failure | Required functionality missing, test suite fails | Yes |
|
|
11
|
+
| MEDIUM | Missing edge case, incomplete docs | Edge case unhandled, missing error message | No |
|
|
12
|
+
| LOW | Style, naming, minor polish | Inconsistent naming, verbose code | No |
|
|
13
|
+
|
|
14
|
+
## Verdict Decision Matrix
|
|
15
|
+
|
|
16
|
+
| Condition | Verdict |
|
|
17
|
+
|-----------|---------|
|
|
18
|
+
| Zero CRITICAL + Zero HIGH + All validation passes | SHIP |
|
|
19
|
+
| Any HIGH (fixable) + No CRITICAL | FIX-FIRST |
|
|
20
|
+
| Any CRITICAL or unfixable architectural issues | BLOCKED |
|
|
21
|
+
|
|
22
|
+
## What Constitutes Evidence
|
|
23
|
+
|
|
24
|
+
For PASS criteria, evidence includes:
|
|
25
|
+
- Code exists that implements the feature
|
|
26
|
+
- Test exists that verifies the behavior
|
|
27
|
+
- Validation command succeeds with expected output
|
|
28
|
+
- Documentation is present (when required)
|
|
29
|
+
- Screenshot of working UI (for user-facing features)
|
|
30
|
+
|
|
31
|
+
## Quality Review Categories
|
|
32
|
+
|
|
33
|
+
### Security
|
|
34
|
+
- Input validation present
|
|
35
|
+
- Authentication/authorization correct
|
|
36
|
+
- No injection vulnerabilities (SQL, XSS, command)
|
|
37
|
+
- Secrets not hardcoded
|
|
38
|
+
- OWASP Top 10 addressed
|
|
39
|
+
|
|
40
|
+
### Maintainability
|
|
41
|
+
- Code is readable
|
|
42
|
+
- Appropriate abstraction level
|
|
43
|
+
- Follows existing conventions
|
|
44
|
+
- No dead code
|
|
45
|
+
- No unresolved TODOs
|
|
46
|
+
|
|
47
|
+
### Performance
|
|
48
|
+
- No obvious N+1 queries
|
|
49
|
+
- No unnecessary loops/allocations
|
|
50
|
+
- Resources cleaned up
|
|
51
|
+
- Appropriate data structures
|
|
52
|
+
|
|
53
|
+
### Correctness
|
|
54
|
+
- Edge cases handled
|
|
55
|
+
- Error handling appropriate
|
|
56
|
+
- Null/undefined safety
|
|
57
|
+
- Type safety (if applicable)
|
|
58
|
+
|
|
59
|
+
## Review Workflow Summary
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
/wish → creates plan
|
|
63
|
+
/plan-review → validates plan structure
|
|
64
|
+
/forge → executes plan
|
|
65
|
+
/review → final validation → SHIP / FIX-FIRST / BLOCKED
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Fix Loop Limits
|
|
69
|
+
|
|
70
|
+
- Spec review fix loops: max 3
|
|
71
|
+
- Quality review fix loops: max 2
|
|
72
|
+
- After max loops: mark task BLOCKED and continue
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Wish: <Title>
|
|
2
|
+
|
|
3
|
+
**Status:** DRAFT | IN_PROGRESS | REVIEW | DONE
|
|
4
|
+
**Slug:** `<slug>`
|
|
5
|
+
**Created:** YYYY-MM-DD
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Summary
|
|
10
|
+
|
|
11
|
+
<2-3 sentences: what we're building and why>
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Scope
|
|
16
|
+
|
|
17
|
+
### IN
|
|
18
|
+
- <what we're doing>
|
|
19
|
+
- <specific deliverables>
|
|
20
|
+
|
|
21
|
+
### OUT
|
|
22
|
+
- <what we're explicitly not doing>
|
|
23
|
+
- <boundaries to prevent scope creep>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Decisions
|
|
28
|
+
|
|
29
|
+
- **DEC-1:** <key decision with brief rationale>
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Success Criteria
|
|
34
|
+
|
|
35
|
+
- [ ] <overall testable criterion 1>
|
|
36
|
+
- [ ] <overall testable criterion 2>
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Assumptions
|
|
41
|
+
|
|
42
|
+
- **ASM-1:** <assumption that if wrong, changes the plan>
|
|
43
|
+
|
|
44
|
+
## Risks
|
|
45
|
+
|
|
46
|
+
- **RISK-1:** <risk description> — Mitigation: <how we handle it>
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Execution Groups
|
|
51
|
+
|
|
52
|
+
### Group A: <Name>
|
|
53
|
+
|
|
54
|
+
**Goal:** <one sentence>
|
|
55
|
+
|
|
56
|
+
**Deliverables:**
|
|
57
|
+
- <concrete output 1>
|
|
58
|
+
- <concrete output 2>
|
|
59
|
+
|
|
60
|
+
**Acceptance Criteria:**
|
|
61
|
+
- [ ] <testable criterion>
|
|
62
|
+
- [ ] <testable criterion>
|
|
63
|
+
|
|
64
|
+
**Validation:** `<command to verify completion>`
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Group B: <Name>
|
|
69
|
+
|
|
70
|
+
**Goal:** <one sentence>
|
|
71
|
+
|
|
72
|
+
**Deliverables:**
|
|
73
|
+
- <concrete output>
|
|
74
|
+
|
|
75
|
+
**Acceptance Criteria:**
|
|
76
|
+
- [ ] <testable criterion>
|
|
77
|
+
|
|
78
|
+
**Validation:** `<command to verify completion>`
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Review Results
|
|
83
|
+
|
|
84
|
+
_Populated by `/review` after forge execution completes._
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Files to Create/Modify
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
<list of files this wish will touch>
|
|
92
|
+
```
|