groove-dev 0.27.88 → 0.27.91

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.
Files changed (53) hide show
  1. package/CLAUDE.md +0 -11
  2. package/moe-training/client/parsers/claude-code.js +0 -2
  3. package/moe-training/client/session-attestation.js +2 -1
  4. package/moe-training/client/trajectory-capture.js +6 -0
  5. package/moe-training/test/client/parsers/claude-code.test.js +2 -2
  6. package/node_modules/@groove-dev/cli/package.json +1 -1
  7. package/node_modules/@groove-dev/daemon/package.json +1 -1
  8. package/node_modules/@groove-dev/daemon/src/api.js +20 -10
  9. package/node_modules/@groove-dev/daemon/src/conversations.js +32 -6
  10. package/node_modules/@groove-dev/daemon/src/preview.js +1 -1
  11. package/node_modules/@groove-dev/daemon/src/process.js +34 -5
  12. package/node_modules/@groove-dev/daemon/src/providers/claude-code.js +1 -1
  13. package/node_modules/@groove-dev/daemon/src/providers/codex.js +1 -1
  14. package/node_modules/@groove-dev/daemon/src/providers/gemini.js +1 -1
  15. package/node_modules/@groove-dev/daemon/src/providers/grok.js +2 -2
  16. package/node_modules/@groove-dev/gui/dist/assets/index-D4vJ_1ET.css +1 -0
  17. package/node_modules/@groove-dev/gui/dist/assets/{index-B_igwWvq.js → index-MLIZRMj1.js} +1734 -1734
  18. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  19. package/node_modules/@groove-dev/gui/package.json +1 -1
  20. package/node_modules/@groove-dev/gui/src/components/agents/agent-file-tree.jsx +51 -3
  21. package/node_modules/@groove-dev/gui/src/components/agents/workspace-mode.jsx +24 -10
  22. package/node_modules/@groove-dev/gui/src/components/chat/chat-messages.jsx +7 -5
  23. package/node_modules/@groove-dev/gui/src/components/chat/chat-view.jsx +2 -4
  24. package/node_modules/@groove-dev/gui/src/components/chat/conversation-list.jsx +14 -14
  25. package/node_modules/@groove-dev/gui/src/stores/groove.js +3 -0
  26. package/node_modules/@groove-dev/gui/src/views/agents.jsx +7 -9
  27. package/package.json +1 -1
  28. package/packages/cli/package.json +1 -1
  29. package/packages/daemon/package.json +1 -1
  30. package/packages/daemon/src/api.js +20 -10
  31. package/packages/daemon/src/conversations.js +32 -6
  32. package/packages/daemon/src/preview.js +1 -1
  33. package/packages/daemon/src/process.js +34 -5
  34. package/packages/daemon/src/providers/claude-code.js +1 -1
  35. package/packages/daemon/src/providers/codex.js +1 -1
  36. package/packages/daemon/src/providers/gemini.js +1 -1
  37. package/packages/daemon/src/providers/grok.js +2 -2
  38. package/packages/gui/dist/assets/index-D4vJ_1ET.css +1 -0
  39. package/packages/gui/dist/assets/{index-B_igwWvq.js → index-MLIZRMj1.js} +1734 -1734
  40. package/packages/gui/dist/index.html +2 -2
  41. package/packages/gui/package.json +1 -1
  42. package/packages/gui/src/components/agents/agent-file-tree.jsx +51 -3
  43. package/packages/gui/src/components/agents/workspace-mode.jsx +24 -10
  44. package/packages/gui/src/components/chat/chat-messages.jsx +7 -5
  45. package/packages/gui/src/components/chat/chat-view.jsx +2 -4
  46. package/packages/gui/src/components/chat/conversation-list.jsx +14 -14
  47. package/packages/gui/src/stores/groove.js +3 -0
  48. package/packages/gui/src/views/agents.jsx +7 -9
  49. package/node_modules/@groove-dev/gui/dist/assets/index-BSqk8cbI.css +0 -1
  50. package/packages/gui/dist/assets/index-BSqk8cbI.css +0 -1
  51. package/test/doomsday-clock/index.html +0 -55
  52. package/test/doomsday-clock/script.js +0 -66
  53. package/test/doomsday-clock/style.css +0 -315
@@ -1,55 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Doomsday Clock</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com">
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
- <link href="https://fonts.googleapis.com/css2?family=Nosifer&family=Special+Elite&display=swap" rel="stylesheet">
10
- <link rel="stylesheet" href="style.css">
11
- </head>
12
- <body>
13
- <div class="particles">
14
- <span class="particle"></span>
15
- <span class="particle"></span>
16
- <span class="particle"></span>
17
- <span class="particle"></span>
18
- <span class="particle"></span>
19
- <span class="particle"></span>
20
- <span class="particle"></span>
21
- <span class="particle"></span>
22
- </div>
23
-
24
- <main class="container">
25
- <p class="tagline" id="tagline">TIME IS RUNNING OUT</p>
26
-
27
- <div class="clock-ring">
28
- <div class="glow"></div>
29
- <div class="countdown" id="countdown">
30
- <div class="unit">
31
- <span class="digit" id="days">00</span>
32
- <span class="label">Days</span>
33
- </div>
34
- <div class="separator">:</div>
35
- <div class="unit">
36
- <span class="digit" id="hours">00</span>
37
- <span class="label">Hours</span>
38
- </div>
39
- <div class="separator">:</div>
40
- <div class="unit">
41
- <span class="digit" id="minutes">00</span>
42
- <span class="label">Minutes</span>
43
- </div>
44
- <div class="separator">:</div>
45
- <div class="unit">
46
- <span class="digit" id="seconds">00</span>
47
- <span class="label">Seconds</span>
48
- </div>
49
- </div>
50
- </div>
51
- </main>
52
-
53
- <script src="script.js"></script>
54
- </body>
55
- </html>
@@ -1,66 +0,0 @@
1
- // FSL-1.1-Apache-2.0 — see LICENSE
2
- (function () {
3
- var STORAGE_KEY = 'doomsday-target';
4
- var FIVE_DAYS_MS = 5 * 24 * 60 * 60 * 1000;
5
-
6
- var daysEl = document.getElementById('days');
7
- var hoursEl = document.getElementById('hours');
8
- var minutesEl = document.getElementById('minutes');
9
- var secondsEl = document.getElementById('seconds');
10
- var taglineEl = document.getElementById('tagline');
11
-
12
- var target = localStorage.getItem(STORAGE_KEY);
13
- if (!target) {
14
- target = Date.now() + FIVE_DAYS_MS;
15
- localStorage.setItem(STORAGE_KEY, target);
16
- } else {
17
- target = Number(target);
18
- }
19
-
20
- var done = false;
21
-
22
- function pad(n) {
23
- return n < 10 ? '0' + n : String(n);
24
- }
25
-
26
- function tick() {
27
- if (done) return;
28
-
29
- var remaining = target - Date.now();
30
-
31
- if (remaining <= 0) {
32
- done = true;
33
- daysEl.textContent = '00';
34
- hoursEl.textContent = '00';
35
- minutesEl.textContent = '00';
36
- secondsEl.textContent = '00';
37
-
38
- taglineEl.textContent = 'IT IS DONE';
39
- taglineEl.classList.add('done');
40
-
41
- document.querySelectorAll('.digit').forEach(function (el) {
42
- el.classList.add('stopped');
43
- });
44
- document.querySelectorAll('.separator').forEach(function (el) {
45
- el.classList.add('stopped');
46
- });
47
-
48
- document.body.classList.add('flash');
49
- return;
50
- }
51
-
52
- var totalSeconds = Math.floor(remaining / 1000);
53
- var d = Math.floor(totalSeconds / 86400);
54
- var h = Math.floor((totalSeconds % 86400) / 3600);
55
- var m = Math.floor((totalSeconds % 3600) / 60);
56
- var s = totalSeconds % 60;
57
-
58
- daysEl.textContent = pad(d);
59
- hoursEl.textContent = pad(h);
60
- minutesEl.textContent = pad(m);
61
- secondsEl.textContent = pad(s);
62
- }
63
-
64
- tick();
65
- setInterval(tick, 1000);
66
- })();
@@ -1,315 +0,0 @@
1
- *,
2
- *::before,
3
- *::after {
4
- margin: 0;
5
- padding: 0;
6
- box-sizing: border-box;
7
- }
8
-
9
- body {
10
- background: #0a0a0a;
11
- color: #e0d8c8;
12
- font-family: 'Special Elite', cursive;
13
- min-height: 100vh;
14
- display: flex;
15
- align-items: center;
16
- justify-content: center;
17
- overflow: hidden;
18
- position: relative;
19
- }
20
-
21
- body::before {
22
- content: '';
23
- position: fixed;
24
- inset: 0;
25
- background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
26
- background-size: 128px 128px;
27
- opacity: 0.04;
28
- pointer-events: none;
29
- z-index: 1;
30
- }
31
-
32
- .container {
33
- position: relative;
34
- z-index: 2;
35
- display: flex;
36
- flex-direction: column;
37
- align-items: center;
38
- gap: 3rem;
39
- }
40
-
41
- .tagline {
42
- font-family: 'Special Elite', cursive;
43
- font-size: 1.4rem;
44
- letter-spacing: 0.5em;
45
- text-transform: uppercase;
46
- color: #cc0000;
47
- text-shadow: 0 0 20px rgba(204, 0, 0, 0.5);
48
- animation: taglinePulse 4s ease-in-out infinite;
49
- }
50
-
51
- @keyframes taglinePulse {
52
- 0%, 100% { opacity: 0.7; }
53
- 50% { opacity: 1; }
54
- }
55
-
56
- .clock-ring {
57
- position: relative;
58
- display: flex;
59
- align-items: center;
60
- justify-content: center;
61
- padding: 4rem;
62
- }
63
-
64
- .clock-ring::before {
65
- content: '';
66
- position: absolute;
67
- inset: 0;
68
- border: 3px dashed rgba(139, 0, 0, 0.4);
69
- border-radius: 50%;
70
- animation: ringRotate 60s linear infinite;
71
- }
72
-
73
- .clock-ring::after {
74
- content: '';
75
- position: absolute;
76
- inset: 10px;
77
- border: 2px dotted rgba(139, 0, 0, 0.25);
78
- border-radius: 50%;
79
- animation: ringRotate 45s linear infinite reverse;
80
- }
81
-
82
- @keyframes ringRotate {
83
- to { transform: rotate(360deg); }
84
- }
85
-
86
- .glow {
87
- position: absolute;
88
- width: 400px;
89
- height: 400px;
90
- border-radius: 50%;
91
- background: radial-gradient(circle, rgba(139, 0, 0, 0.3) 0%, rgba(139, 0, 0, 0) 70%);
92
- animation: glowPulse 3s ease-in-out infinite;
93
- pointer-events: none;
94
- }
95
-
96
- @keyframes glowPulse {
97
- 0%, 100% {
98
- transform: scale(1);
99
- opacity: 0.6;
100
- }
101
- 50% {
102
- transform: scale(1.15);
103
- opacity: 1;
104
- }
105
- }
106
-
107
- .countdown {
108
- display: flex;
109
- align-items: center;
110
- gap: 0.5rem;
111
- position: relative;
112
- z-index: 2;
113
- }
114
-
115
- .unit {
116
- display: flex;
117
- flex-direction: column;
118
- align-items: center;
119
- gap: 0.5rem;
120
- }
121
-
122
- .digit {
123
- font-family: 'Nosifer', system-ui;
124
- font-size: 5rem;
125
- color: #cc0000;
126
- text-shadow:
127
- 0 0 10px rgba(204, 0, 0, 0.6),
128
- 0 0 40px rgba(139, 0, 0, 0.3);
129
- line-height: 1;
130
- min-width: 2.4ch;
131
- text-align: center;
132
- animation: flicker 0.15s infinite;
133
- }
134
-
135
- @keyframes flicker {
136
- 0% {
137
- opacity: 1;
138
- transform: translate(0, 0);
139
- }
140
- 20% {
141
- opacity: 0.85;
142
- transform: translate(-1px, 0);
143
- }
144
- 40% {
145
- opacity: 1;
146
- transform: translate(1px, 0);
147
- }
148
- 60% {
149
- opacity: 0.9;
150
- transform: translate(0, 1px);
151
- }
152
- 80% {
153
- opacity: 1;
154
- transform: translate(1px, -1px);
155
- }
156
- 100% {
157
- opacity: 0.95;
158
- transform: translate(-1px, 0);
159
- }
160
- }
161
-
162
- .separator {
163
- font-family: 'Nosifer', system-ui;
164
- font-size: 4rem;
165
- color: #8b0000;
166
- line-height: 1;
167
- padding-bottom: 1.5rem;
168
- animation: flicker 0.15s infinite;
169
- }
170
-
171
- .label {
172
- font-family: 'Special Elite', cursive;
173
- font-size: 0.85rem;
174
- letter-spacing: 0.2em;
175
- text-transform: uppercase;
176
- color: #e0d8c8;
177
- opacity: 0.6;
178
- }
179
-
180
- /* Particles */
181
- .particles {
182
- position: fixed;
183
- inset: 0;
184
- z-index: 0;
185
- pointer-events: none;
186
- }
187
-
188
- .particle {
189
- position: absolute;
190
- width: 3px;
191
- height: 3px;
192
- background: rgba(139, 0, 0, 0.5);
193
- border-radius: 50%;
194
- animation: float linear infinite;
195
- }
196
-
197
- .particle:nth-child(1) { left: 10%; animation-duration: 12s; animation-delay: 0s; }
198
- .particle:nth-child(2) { left: 25%; animation-duration: 10s; animation-delay: -2s; }
199
- .particle:nth-child(3) { left: 40%; animation-duration: 14s; animation-delay: -4s; }
200
- .particle:nth-child(4) { left: 55%; animation-duration: 11s; animation-delay: -1s; }
201
- .particle:nth-child(5) { left: 70%; animation-duration: 13s; animation-delay: -3s; }
202
- .particle:nth-child(6) { left: 85%; animation-duration: 9s; animation-delay: -5s; }
203
- .particle:nth-child(7) { left: 15%; animation-duration: 15s; animation-delay: -7s; }
204
- .particle:nth-child(8) { left: 60%; animation-duration: 11s; animation-delay: -6s; }
205
-
206
- @keyframes float {
207
- 0% {
208
- transform: translateY(100vh) scale(0);
209
- opacity: 0;
210
- }
211
- 10% {
212
- opacity: 1;
213
- }
214
- 90% {
215
- opacity: 0.3;
216
- }
217
- 100% {
218
- transform: translateY(-10vh) scale(1);
219
- opacity: 0;
220
- }
221
- }
222
-
223
- /* Flash effect when timer ends */
224
- .flash {
225
- animation: screenFlash 0.6s ease-out;
226
- }
227
-
228
- @keyframes screenFlash {
229
- 0% { background: #8b0000; }
230
- 100% { background: #0a0a0a; }
231
- }
232
-
233
- /* Stopped state */
234
- .digit.stopped {
235
- animation: none;
236
- opacity: 0.5;
237
- }
238
-
239
- .separator.stopped {
240
- animation: none;
241
- opacity: 0.5;
242
- }
243
-
244
- .tagline.done {
245
- color: #e0d8c8;
246
- text-shadow: 0 0 20px rgba(224, 216, 200, 0.3);
247
- animation: none;
248
- opacity: 1;
249
- }
250
-
251
- /* Responsive */
252
- @media (max-width: 768px) {
253
- .digit {
254
- font-size: 2.8rem;
255
- }
256
-
257
- .separator {
258
- font-size: 2.2rem;
259
- padding-bottom: 1rem;
260
- }
261
-
262
- .label {
263
- font-size: 0.65rem;
264
- }
265
-
266
- .tagline {
267
- font-size: 0.9rem;
268
- letter-spacing: 0.3em;
269
- }
270
-
271
- .clock-ring {
272
- padding: 2.5rem;
273
- }
274
-
275
- .glow {
276
- width: 280px;
277
- height: 280px;
278
- }
279
- }
280
-
281
- @media (max-width: 420px) {
282
- .digit {
283
- font-size: 1.8rem;
284
- min-width: 2ch;
285
- }
286
-
287
- .separator {
288
- font-size: 1.4rem;
289
- padding-bottom: 0.8rem;
290
- }
291
-
292
- .countdown {
293
- gap: 0.2rem;
294
- }
295
-
296
- .label {
297
- font-size: 0.55rem;
298
- }
299
-
300
- .tagline {
301
- font-size: 0.75rem;
302
- letter-spacing: 0.2em;
303
- padding: 0 1rem;
304
- text-align: center;
305
- }
306
-
307
- .clock-ring {
308
- padding: 2rem;
309
- }
310
-
311
- .glow {
312
- width: 220px;
313
- height: 220px;
314
- }
315
- }