claude-plugin-viban 1.0.24 → 1.0.26
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 +20 -65
- package/package.json +1 -1
- package/scripts/generate-release-notes.sh +86 -0
- package/skills/task/SKILL.md +81 -39
package/README.md
CHANGED
|
@@ -50,89 +50,44 @@ This separation keeps your workflow clean and prevents context switching.
|
|
|
50
50
|
## Requirements
|
|
51
51
|
|
|
52
52
|
- zsh
|
|
53
|
-
- [gum](https://github.com/charmbracelet/gum)
|
|
54
|
-
- [jq](https://jqlang.github.io/jq/)
|
|
53
|
+
- [gum](https://github.com/charmbracelet/gum)
|
|
54
|
+
- [jq](https://jqlang.github.io/jq/)
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### One-liner (Recommended)
|
|
59
|
-
|
|
60
|
-
Installs all dependencies (zsh, gum, jq) and viban automatically:
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
curl -fsSL https://raw.githubusercontent.com/happy-nut/claude-plugin-viban/main/install.sh | bash
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Via npm
|
|
56
|
+
> **Tip:** If using Claude Code, run `/viban:setup` to install all dependencies automatically.
|
|
67
57
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
npm install -g claude-plugin-viban
|
|
72
|
-
```
|
|
58
|
+
## Installation
|
|
73
59
|
|
|
74
|
-
|
|
60
|
+
### For Claude Code Users
|
|
75
61
|
|
|
76
|
-
**Verify installation:**
|
|
77
62
|
```bash
|
|
78
|
-
viban
|
|
63
|
+
/plugin marketplace add https://github.com/happy-nut/claude-plugin-viban
|
|
64
|
+
/plugin install viban
|
|
65
|
+
/viban:setup # Installs all dependencies automatically
|
|
79
66
|
```
|
|
80
67
|
|
|
81
|
-
###
|
|
82
|
-
|
|
83
|
-
If `viban` is not found after npm install, add npm global bin to your PATH:
|
|
68
|
+
### For Terminal Users
|
|
84
69
|
|
|
85
|
-
**For zsh (macOS default):**
|
|
86
70
|
```bash
|
|
87
|
-
|
|
88
|
-
export PATH="$PATH:$(npm config get prefix)/bin"
|
|
89
|
-
|
|
90
|
-
# Reload
|
|
91
|
-
source ~/.zshrc
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**For bash:**
|
|
95
|
-
```bash
|
|
96
|
-
# Add to ~/.bashrc
|
|
97
|
-
export PATH="$PATH:$(npm config get prefix)/bin"
|
|
98
|
-
|
|
99
|
-
# Reload
|
|
100
|
-
source ~/.bashrc
|
|
71
|
+
curl -fsSL https://raw.githubusercontent.com/happy-nut/claude-plugin-viban/main/install.sh | bash
|
|
101
72
|
```
|
|
102
73
|
|
|
103
|
-
|
|
104
|
-
|
|
74
|
+
Or via npm (requires zsh, gum, jq pre-installed):
|
|
105
75
|
```bash
|
|
106
|
-
|
|
107
|
-
cd claude-plugin-viban
|
|
108
|
-
chmod +x bin/viban scripts/check-deps.sh
|
|
109
|
-
|
|
110
|
-
# Option 1: Symlink to /usr/local/bin
|
|
111
|
-
ln -s "$(pwd)/bin/viban" /usr/local/bin/viban
|
|
112
|
-
|
|
113
|
-
# Option 2: Add to PATH
|
|
114
|
-
echo 'export PATH="$PATH:'$(pwd)'/bin"' >> ~/.zshrc
|
|
115
|
-
source ~/.zshrc
|
|
76
|
+
npm install -g claude-plugin-viban
|
|
116
77
|
```
|
|
117
78
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
To use viban commands in Claude Code:
|
|
79
|
+
<details>
|
|
80
|
+
<summary>Troubleshooting: viban command not found</summary>
|
|
121
81
|
|
|
82
|
+
Add npm global bin to your PATH:
|
|
122
83
|
```bash
|
|
123
|
-
#
|
|
124
|
-
/
|
|
125
|
-
|
|
126
|
-
# Install the plugin
|
|
127
|
-
/plugin install viban
|
|
128
|
-
|
|
129
|
-
# Install dependencies (first time only)
|
|
130
|
-
/viban:setup
|
|
84
|
+
# For zsh
|
|
85
|
+
echo 'export PATH="$PATH:$(npm config get prefix)/bin"' >> ~/.zshrc && source ~/.zshrc
|
|
131
86
|
|
|
132
|
-
#
|
|
133
|
-
/
|
|
134
|
-
/viban:task
|
|
87
|
+
# For bash
|
|
88
|
+
echo 'export PATH="$PATH:$(npm config get prefix)/bin"' >> ~/.bashrc && source ~/.bashrc
|
|
135
89
|
```
|
|
90
|
+
</details>
|
|
136
91
|
|
|
137
92
|
## Usage
|
|
138
93
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Generate release notes from conventional commits
|
|
3
|
+
# Usage: ./generate-release-notes.sh [previous_tag] [current_tag]
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
PREVIOUS_TAG="${1:-$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")}"
|
|
8
|
+
CURRENT_TAG="${2:-$(git describe --tags --abbrev=0 HEAD 2>/dev/null || echo "HEAD")}"
|
|
9
|
+
|
|
10
|
+
# If no previous tag, get all commits
|
|
11
|
+
if [[ -z "$PREVIOUS_TAG" ]]; then
|
|
12
|
+
COMMIT_RANGE="$CURRENT_TAG"
|
|
13
|
+
else
|
|
14
|
+
COMMIT_RANGE="${PREVIOUS_TAG}..${CURRENT_TAG}"
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Arrays for categorized commits
|
|
18
|
+
declare -a FEATURES=()
|
|
19
|
+
declare -a FIXES=()
|
|
20
|
+
declare -a DOCS=()
|
|
21
|
+
declare -a CHORES=()
|
|
22
|
+
declare -a OTHERS=()
|
|
23
|
+
|
|
24
|
+
# Parse commits
|
|
25
|
+
while IFS= read -r line; do
|
|
26
|
+
[[ -z "$line" ]] && continue
|
|
27
|
+
|
|
28
|
+
# Extract commit message (remove hash prefix if present)
|
|
29
|
+
msg="$line"
|
|
30
|
+
|
|
31
|
+
# Categorize by conventional commit prefix
|
|
32
|
+
if [[ "$msg" =~ ^feat(\(.+\))?:\ (.+)$ ]]; then
|
|
33
|
+
FEATURES+=("${BASH_REMATCH[2]}")
|
|
34
|
+
elif [[ "$msg" =~ ^fix(\(.+\))?:\ (.+)$ ]]; then
|
|
35
|
+
FIXES+=("${BASH_REMATCH[2]}")
|
|
36
|
+
elif [[ "$msg" =~ ^docs(\(.+\))?:\ (.+)$ ]]; then
|
|
37
|
+
DOCS+=("${BASH_REMATCH[2]}")
|
|
38
|
+
elif [[ "$msg" =~ ^chore(\(.+\))?:\ (.+)$ ]]; then
|
|
39
|
+
CHORES+=("${BASH_REMATCH[2]}")
|
|
40
|
+
elif [[ "$msg" =~ ^(ci|test|refactor|perf|style|build)(\(.+\))?:\ (.+)$ ]]; then
|
|
41
|
+
CHORES+=("${BASH_REMATCH[3]}")
|
|
42
|
+
else
|
|
43
|
+
# Skip release commits and merge commits
|
|
44
|
+
if [[ ! "$msg" =~ ^(Merge|release|chore:\ release) ]]; then
|
|
45
|
+
OTHERS+=("$msg")
|
|
46
|
+
fi
|
|
47
|
+
fi
|
|
48
|
+
done < <(git log --pretty=format:"%s" "$COMMIT_RANGE" 2>/dev/null)
|
|
49
|
+
|
|
50
|
+
# Generate release notes
|
|
51
|
+
generate_section() {
|
|
52
|
+
local title="$1"
|
|
53
|
+
shift
|
|
54
|
+
local items=("$@")
|
|
55
|
+
|
|
56
|
+
if [[ ${#items[@]} -gt 0 ]]; then
|
|
57
|
+
echo "## $title"
|
|
58
|
+
echo ""
|
|
59
|
+
for item in "${items[@]}"; do
|
|
60
|
+
# Capitalize first letter
|
|
61
|
+
item="$(echo "${item:0:1}" | tr '[:lower:]' '[:upper:]')${item:1}"
|
|
62
|
+
echo "- $item"
|
|
63
|
+
done
|
|
64
|
+
echo ""
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Output release notes
|
|
69
|
+
if [[ -n "$PREVIOUS_TAG" ]]; then
|
|
70
|
+
echo "# What's Changed"
|
|
71
|
+
echo ""
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
generate_section "Features" "${FEATURES[@]}"
|
|
75
|
+
generate_section "Bug Fixes" "${FIXES[@]}"
|
|
76
|
+
generate_section "Documentation" "${DOCS[@]}"
|
|
77
|
+
generate_section "Maintenance" "${CHORES[@]}"
|
|
78
|
+
generate_section "Other Changes" "${OTHERS[@]}"
|
|
79
|
+
|
|
80
|
+
# Add full changelog link
|
|
81
|
+
if [[ -n "$PREVIOUS_TAG" ]]; then
|
|
82
|
+
REPO_URL=$(git remote get-url origin 2>/dev/null | sed 's/\.git$//' | sed 's/git@github.com:/https:\/\/github.com\//')
|
|
83
|
+
if [[ -n "$REPO_URL" ]]; then
|
|
84
|
+
echo "**Full Changelog**: ${REPO_URL}/compare/${PREVIOUS_TAG}...${CURRENT_TAG}"
|
|
85
|
+
fi
|
|
86
|
+
fi
|
package/skills/task/SKILL.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task
|
|
3
3
|
description: "Analyze problem and register as viban issue with evidence"
|
|
4
|
+
enter_plan_mode: true
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# /task - Problem Analysis and Issue Registration
|
|
@@ -10,22 +11,67 @@ Analyze problem situation and register as viban issue with file locations and ev
|
|
|
10
11
|
> **Core Principle**: Focus on **symptoms and problem definition**, not solutions.
|
|
11
12
|
> Solutions are decided by the assignee after understanding full context.
|
|
12
13
|
|
|
13
|
-
##
|
|
14
|
+
## Interview Phase (Required)
|
|
14
15
|
|
|
15
|
-
**
|
|
16
|
+
**Always start with an interview** to gather complete context before exploring code.
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
### Interview Questions
|
|
19
|
+
|
|
20
|
+
Use AskUserQuestion to ask these questions (can combine related ones):
|
|
21
|
+
|
|
22
|
+
**1. Problem Identification**
|
|
23
|
+
```
|
|
24
|
+
What problem are you experiencing?
|
|
25
|
+
|
|
26
|
+
- Error message or unexpected behavior
|
|
27
|
+
- What feature/page is affected
|
|
28
|
+
- When did it start happening
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**2. Reproduction Context**
|
|
32
|
+
```
|
|
33
|
+
How can this be reproduced?
|
|
34
|
+
|
|
35
|
+
- Step-by-step actions
|
|
36
|
+
- Environment (local/staging/production)
|
|
37
|
+
- Frequency (always/sometimes/once)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**3. Expected vs Actual**
|
|
41
|
+
```
|
|
42
|
+
What should happen vs what actually happens?
|
|
43
|
+
|
|
44
|
+
- Expected behavior
|
|
45
|
+
- Actual result
|
|
46
|
+
- Any error messages or logs
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**4. Additional Context** (optional, ask if needed)
|
|
50
|
+
```
|
|
51
|
+
Any additional context?
|
|
52
|
+
|
|
53
|
+
- Recent changes that might be related
|
|
54
|
+
- Workarounds tried
|
|
55
|
+
- Related issues or features
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Interview Strategy
|
|
59
|
+
|
|
60
|
+
- Ask 1-2 questions at a time using AskUserQuestion
|
|
61
|
+
- Provide options when possible for faster responses
|
|
62
|
+
- Stop interviewing when you have enough to:
|
|
63
|
+
1. Search for relevant code
|
|
64
|
+
2. Determine priority and type
|
|
65
|
+
3. Write clear symptoms
|
|
20
66
|
|
|
21
67
|
## Execution Steps
|
|
22
68
|
|
|
23
|
-
### Step 1: Problem Identification
|
|
69
|
+
### Step 1: Problem Identification (from interview)
|
|
24
70
|
|
|
25
|
-
|
|
26
|
-
1. **
|
|
27
|
-
2. **
|
|
28
|
-
3. **
|
|
71
|
+
From the interview responses, extract:
|
|
72
|
+
1. **Symptoms**: Clearly define what the problem is
|
|
73
|
+
2. **Keywords**: Error messages, feature names, module names
|
|
74
|
+
3. **Priority**:
|
|
29
75
|
| Condition | Priority |
|
|
30
76
|
|-----------|----------|
|
|
31
77
|
| System down, data loss | P0 |
|
|
@@ -135,47 +181,43 @@ Next steps:
|
|
|
135
181
|
- `viban start {id}` to start working
|
|
136
182
|
```
|
|
137
183
|
|
|
138
|
-
##
|
|
184
|
+
## Example Interview Flow
|
|
139
185
|
|
|
140
|
-
|
|
186
|
+
**User runs**: `/viban:task`
|
|
141
187
|
|
|
188
|
+
**Agent**: (AskUserQuestion)
|
|
142
189
|
```
|
|
143
|
-
What problem
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
190
|
+
What problem are you experiencing?
|
|
191
|
+
|
|
192
|
+
Options:
|
|
193
|
+
- Something is broken/erroring
|
|
194
|
+
- Feature not working as expected
|
|
195
|
+
- Performance issue
|
|
196
|
+
- Need new feature/improvement
|
|
197
|
+
- Other
|
|
149
198
|
```
|
|
150
199
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
**Input**: "Charts not showing on backtest results page"
|
|
200
|
+
**User selects**: "Something is broken/erroring"
|
|
154
201
|
|
|
155
|
-
**
|
|
156
|
-
1. Keywords: backtest, results, chart
|
|
157
|
-
2. Code exploration:
|
|
158
|
-
```bash
|
|
159
|
-
grep -r "chart" . --include="*.tsx" --include="*.ts"
|
|
160
|
-
```
|
|
161
|
-
3. Related file found: `src/pages/backtest/results.tsx`
|
|
162
|
-
4. Check chart rendering logic
|
|
163
|
-
|
|
164
|
-
**Registration Command**:
|
|
165
|
-
```bash
|
|
166
|
-
viban add "Backtest results chart not displayed" "$'## Symptoms\n...'" P1 bug
|
|
202
|
+
**Agent**: (AskUserQuestion)
|
|
167
203
|
```
|
|
204
|
+
Please describe the error:
|
|
168
205
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
Priority: P1
|
|
173
|
-
Type: bug
|
|
174
|
-
Location: src/pages/backtest/results.tsx
|
|
206
|
+
1. What action triggers it?
|
|
207
|
+
2. What error message do you see?
|
|
208
|
+
3. Which page/feature is affected?
|
|
175
209
|
```
|
|
176
210
|
|
|
211
|
+
**User responds**: "When I click the chart on backtest results, nothing happens. Console shows 'Cannot read property of undefined'"
|
|
212
|
+
|
|
213
|
+
**Agent**: Now has enough context to:
|
|
214
|
+
1. Search for chart-related code in backtest
|
|
215
|
+
2. Look for the specific error pattern
|
|
216
|
+
3. Register issue with proper details
|
|
217
|
+
|
|
177
218
|
## Important Notes
|
|
178
219
|
|
|
220
|
+
- **Interview First**: Always gather context before code exploration
|
|
179
221
|
- **Location Required**: Do not register without file path
|
|
180
222
|
- **Evidence Required**: Do not register based on guesses without code exploration
|
|
181
223
|
- **Avoid Solutions**: Do not write specific solutions (assignee decides)
|