uv-suite 0.9.0 → 0.11.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.
- package/bin/cli.js +10 -10
- package/hooks/slop-grep.sh +49 -0
- package/package.json +2 -2
- package/personas/professional.json +4 -5
- package/settings.json +4 -5
package/bin/cli.js
CHANGED
|
@@ -14,20 +14,20 @@ const TOOLS = ['claude', 'codex'];
|
|
|
14
14
|
|
|
15
15
|
function usage() {
|
|
16
16
|
console.log(`
|
|
17
|
-
|
|
17
|
+
uvs v${pkg.version} — AI-assisted development framework
|
|
18
18
|
|
|
19
19
|
Launch a session:
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
uvs claude pro Claude Code, Professional persona
|
|
21
|
+
uvs claude auto Claude Code, Auto persona
|
|
22
|
+
uvs codex pro Codex, Professional persona
|
|
23
|
+
uvs codex sport Codex, Sport persona
|
|
24
|
+
uvs pro Shorthand (defaults to Claude Code)
|
|
25
|
+
uvs Claude Code, Professional
|
|
26
26
|
|
|
27
27
|
Setup:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
uvs install Install UV Suite into current project
|
|
29
|
+
uvs install --persona sport
|
|
30
|
+
uvs info Show what's installed
|
|
31
31
|
|
|
32
32
|
Personas:
|
|
33
33
|
spike Research & docs (Opus, max effort)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# UV Suite Hook: Fast deterministic slop check
|
|
3
|
+
# Event: PostToolUse (Edit|Write)
|
|
4
|
+
# Greps for mechanical, unambiguous slop patterns. No LLM, no false positives.
|
|
5
|
+
|
|
6
|
+
INPUT=$(cat)
|
|
7
|
+
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
|
|
8
|
+
|
|
9
|
+
if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
|
|
10
|
+
exit 0
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
EXT="${FILE_PATH##*.}"
|
|
14
|
+
FINDINGS=""
|
|
15
|
+
|
|
16
|
+
case "$EXT" in
|
|
17
|
+
ts|tsx|js|jsx)
|
|
18
|
+
# toBeTruthy/toBeDefined in test files
|
|
19
|
+
if echo "$FILE_PATH" | grep -qE "\.(test|spec)\.(ts|tsx|js|jsx)$"; then
|
|
20
|
+
MATCH=$(grep -n "\.toBeTruthy()\|\.toBeDefined()" "$FILE_PATH" 2>/dev/null)
|
|
21
|
+
if [ -n "$MATCH" ]; then
|
|
22
|
+
FINDINGS="${FINDINGS}Weak assertion in $FILE_PATH: $MATCH. Test specific values instead. "
|
|
23
|
+
fi
|
|
24
|
+
fi
|
|
25
|
+
# catch-and-rethrow (catch { ...throw } with nothing meaningful between)
|
|
26
|
+
MATCH=$(grep -n "catch.*{" "$FILE_PATH" 2>/dev/null | head -3)
|
|
27
|
+
;;
|
|
28
|
+
py)
|
|
29
|
+
# bare except: pass
|
|
30
|
+
MATCH=$(grep -n "except:$\|except Exception:$" "$FILE_PATH" 2>/dev/null)
|
|
31
|
+
if [ -n "$MATCH" ]; then
|
|
32
|
+
NEXT=$(grep -A1 "except" "$FILE_PATH" 2>/dev/null | grep -c "pass\|raise")
|
|
33
|
+
if [ "$NEXT" -gt 0 ]; then
|
|
34
|
+
FINDINGS="${FINDINGS}Bare except with pass/raise in $FILE_PATH. "
|
|
35
|
+
fi
|
|
36
|
+
fi
|
|
37
|
+
;;
|
|
38
|
+
esac
|
|
39
|
+
|
|
40
|
+
if [ -n "$FINDINGS" ]; then
|
|
41
|
+
cat <<EOF
|
|
42
|
+
{
|
|
43
|
+
"continue": true,
|
|
44
|
+
"systemMessage": "Slop detected: ${FINDINGS}"
|
|
45
|
+
}
|
|
46
|
+
EOF
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
exit 0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uv-suite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Portable framework for AI-assisted software development. 10 agents, 9 skills, 5 hooks, 4 personas. Works with Claude Code, Cursor, and Codex.",
|
|
5
5
|
"author": "Utsav Anand",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"repomix": "^0.3.0"
|
|
25
25
|
},
|
|
26
26
|
"bin": {
|
|
27
|
-
"
|
|
27
|
+
"uvs": "./bin/cli.js",
|
|
28
28
|
"uv-suite": "./bin/cli.js"
|
|
29
29
|
},
|
|
30
30
|
"files": [
|
|
@@ -105,11 +105,10 @@
|
|
|
105
105
|
"statusMessage": "Auto-formatting..."
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
|
-
"type": "
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"statusMessage": "Checking for AI slop..."
|
|
108
|
+
"type": "command",
|
|
109
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/slop-grep.sh",
|
|
110
|
+
"timeout": 3,
|
|
111
|
+
"statusMessage": "Slop check..."
|
|
113
112
|
}
|
|
114
113
|
]
|
|
115
114
|
}
|
package/settings.json
CHANGED
|
@@ -82,11 +82,10 @@
|
|
|
82
82
|
"statusMessage": "Auto-formatting..."
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
|
-
"type": "
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"statusMessage": "Checking for AI slop..."
|
|
85
|
+
"type": "command",
|
|
86
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/slop-grep.sh",
|
|
87
|
+
"timeout": 3,
|
|
88
|
+
"statusMessage": "Slop check..."
|
|
90
89
|
}
|
|
91
90
|
]
|
|
92
91
|
}
|