uv-suite 0.23.0 → 0.25.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/package.json +1 -1
- package/personas/auto.json +15 -0
- package/personas/professional.json +24 -0
- package/personas/spike.json +15 -0
- package/personas/sport.json +15 -0
- package/watchtower/dashboard.html +11 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uv-suite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.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",
|
package/personas/auto.json
CHANGED
|
@@ -67,6 +67,21 @@
|
|
|
67
67
|
]
|
|
68
68
|
}
|
|
69
69
|
],
|
|
70
|
+
"PermissionRequest": [
|
|
71
|
+
{ "matcher": "*", "hooks": [
|
|
72
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest", "timeout": 2, "async": true }
|
|
73
|
+
]}
|
|
74
|
+
],
|
|
75
|
+
"Notification": [
|
|
76
|
+
{ "matcher": "*", "hooks": [
|
|
77
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh Notification", "timeout": 2, "async": true }
|
|
78
|
+
]}
|
|
79
|
+
],
|
|
80
|
+
"PostToolUseFailure": [
|
|
81
|
+
{ "matcher": "*", "hooks": [
|
|
82
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PostToolUseFailure", "timeout": 2, "async": true }
|
|
83
|
+
]}
|
|
84
|
+
],
|
|
70
85
|
"PreToolUse": [
|
|
71
86
|
{
|
|
72
87
|
"matcher": "Bash",
|
|
@@ -79,6 +79,30 @@
|
|
|
79
79
|
]
|
|
80
80
|
}
|
|
81
81
|
],
|
|
82
|
+
"PermissionRequest": [
|
|
83
|
+
{
|
|
84
|
+
"matcher": "*",
|
|
85
|
+
"hooks": [
|
|
86
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest", "timeout": 2, "async": true }
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"Notification": [
|
|
91
|
+
{
|
|
92
|
+
"matcher": "*",
|
|
93
|
+
"hooks": [
|
|
94
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh Notification", "timeout": 2, "async": true }
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"PostToolUseFailure": [
|
|
99
|
+
{
|
|
100
|
+
"matcher": "*",
|
|
101
|
+
"hooks": [
|
|
102
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PostToolUseFailure", "timeout": 2, "async": true }
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
],
|
|
82
106
|
"PreToolUse": [
|
|
83
107
|
{
|
|
84
108
|
"matcher": "Bash",
|
package/personas/spike.json
CHANGED
|
@@ -53,6 +53,21 @@
|
|
|
53
53
|
]
|
|
54
54
|
}
|
|
55
55
|
],
|
|
56
|
+
"PermissionRequest": [
|
|
57
|
+
{ "matcher": "*", "hooks": [
|
|
58
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest", "timeout": 2, "async": true }
|
|
59
|
+
]}
|
|
60
|
+
],
|
|
61
|
+
"Notification": [
|
|
62
|
+
{ "matcher": "*", "hooks": [
|
|
63
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh Notification", "timeout": 2, "async": true }
|
|
64
|
+
]}
|
|
65
|
+
],
|
|
66
|
+
"PostToolUseFailure": [
|
|
67
|
+
{ "matcher": "*", "hooks": [
|
|
68
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PostToolUseFailure", "timeout": 2, "async": true }
|
|
69
|
+
]}
|
|
70
|
+
],
|
|
56
71
|
"PostToolUse": [
|
|
57
72
|
{
|
|
58
73
|
"matcher": "*",
|
package/personas/sport.json
CHANGED
|
@@ -39,6 +39,21 @@
|
|
|
39
39
|
]
|
|
40
40
|
}
|
|
41
41
|
],
|
|
42
|
+
"PermissionRequest": [
|
|
43
|
+
{ "matcher": "*", "hooks": [
|
|
44
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PermissionRequest", "timeout": 2, "async": true }
|
|
45
|
+
]}
|
|
46
|
+
],
|
|
47
|
+
"Notification": [
|
|
48
|
+
{ "matcher": "*", "hooks": [
|
|
49
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh Notification", "timeout": 2, "async": true }
|
|
50
|
+
]}
|
|
51
|
+
],
|
|
52
|
+
"PostToolUseFailure": [
|
|
53
|
+
{ "matcher": "*", "hooks": [
|
|
54
|
+
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/watchtower-send.sh PostToolUseFailure", "timeout": 2, "async": true }
|
|
55
|
+
]}
|
|
56
|
+
],
|
|
42
57
|
"PostToolUse": [
|
|
43
58
|
{
|
|
44
59
|
"matcher": "*",
|
|
@@ -111,7 +111,12 @@
|
|
|
111
111
|
<select id="filterSession"><option value="">All sessions</option></select>
|
|
112
112
|
<button id="btnHumanOnly" onclick="toggleHumanOnly()">Human needed</button>
|
|
113
113
|
<button id="btnClear" onclick="clearEvents()">Clear</button>
|
|
114
|
-
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<!-- Loader at top — latest events appear here -->
|
|
117
|
+
<div class="timeline-end" id="timelineEnd">
|
|
118
|
+
<div class="loader"></div>
|
|
119
|
+
<div class="waiting" id="waitingText">Listening for events...</div>
|
|
115
120
|
</div>
|
|
116
121
|
|
|
117
122
|
<div class="timeline" id="timeline">
|
|
@@ -121,11 +126,6 @@
|
|
|
121
126
|
</div>
|
|
122
127
|
</div>
|
|
123
128
|
|
|
124
|
-
<!-- Bottom loader — always visible, shows system is listening -->
|
|
125
|
-
<div class="timeline-end" id="timelineEnd">
|
|
126
|
-
<div class="loader"></div>
|
|
127
|
-
<div class="waiting" id="waitingText">Listening for events...</div>
|
|
128
|
-
</div>
|
|
129
129
|
|
|
130
130
|
<script>
|
|
131
131
|
const timeline = document.getElementById('timeline');
|
|
@@ -329,14 +329,17 @@ function addEvent(ev) {
|
|
|
329
329
|
const div = renderEvent(ev);
|
|
330
330
|
div.classList.add('latest');
|
|
331
331
|
lastEventDiv = div;
|
|
332
|
-
|
|
332
|
+
|
|
333
|
+
// Prepend — newest at top
|
|
334
|
+
timeline.prepend(div);
|
|
333
335
|
|
|
334
336
|
updateStats();
|
|
335
337
|
updateFilterType(ev);
|
|
336
338
|
updateWaitingText(ev);
|
|
337
339
|
|
|
340
|
+
// Scroll to top to show latest
|
|
338
341
|
if (autoScroll) {
|
|
339
|
-
|
|
342
|
+
timeline.scrollTop = 0;
|
|
340
343
|
}
|
|
341
344
|
}
|
|
342
345
|
|