groove-dev 0.27.0 → 0.27.1
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/CHANGELOG.md +17 -0
- package/CLAUDE.md +7 -0
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/journalist.js +29 -9
- package/node_modules/@groove-dev/daemon/src/rotator.js +31 -2
- package/node_modules/@groove-dev/daemon/test/journalist.test.js +5 -2
- package/node_modules/@groove-dev/daemon/test/rotator.test.js +48 -0
- package/node_modules/@groove-dev/gui/dist/assets/{index-eCrVowF0.js → index-Bl1_J0sN.js} +13 -13
- package/node_modules/@groove-dev/gui/dist/index.html +1 -1
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/stores/groove.js +41 -14
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/journalist.js +29 -9
- package/packages/daemon/src/rotator.js +31 -2
- package/packages/gui/dist/assets/{index-eCrVowF0.js → index-Bl1_J0sN.js} +13 -13
- package/packages/gui/dist/index.html +1 -1
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/stores/groove.js +41 -14
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
7
|
<title>Groove GUI</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-Bl1_J0sN.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/vendor-C0HXlhrU.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/reactflow-BQPfi37R.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/codemirror-BBL3i_JW.js">
|
|
@@ -249,25 +249,52 @@ export const useGrooveStore = create((set, get) => ({
|
|
|
249
249
|
break;
|
|
250
250
|
|
|
251
251
|
case 'rotation:start':
|
|
252
|
-
|
|
252
|
+
// Silent — rotation must feel seamless to the user.
|
|
253
|
+
// Visibility is available in dashboard Intel panel for curious users.
|
|
253
254
|
break;
|
|
254
255
|
|
|
255
256
|
case 'rotation:complete': {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
257
|
+
// Silent toast — seamless infinite sessions are the whole promise.
|
|
258
|
+
// Migrate all agent-keyed state to the new ID ALWAYS, not just when
|
|
259
|
+
// the old agent's panel is open. Chat history, activity log, token
|
|
260
|
+
// timeline all carry forward so no state is orphaned.
|
|
261
|
+
if (!msg.newAgentId || !msg.oldAgentId) break;
|
|
262
|
+
set((s) => {
|
|
263
|
+
const chatHistory = { ...s.chatHistory };
|
|
264
|
+
const tokenTimeline = { ...s.tokenTimeline };
|
|
265
|
+
const activityLog = { ...s.activityLog };
|
|
266
|
+
const chatInputs = { ...s.chatInputs };
|
|
267
|
+
if (chatHistory[msg.oldAgentId]?.length) {
|
|
268
|
+
chatHistory[msg.newAgentId] = [...chatHistory[msg.oldAgentId]];
|
|
269
|
+
delete chatHistory[msg.oldAgentId];
|
|
270
|
+
}
|
|
271
|
+
if (tokenTimeline[msg.oldAgentId]?.length) {
|
|
272
|
+
tokenTimeline[msg.newAgentId] = [...tokenTimeline[msg.oldAgentId]];
|
|
273
|
+
delete tokenTimeline[msg.oldAgentId];
|
|
274
|
+
}
|
|
275
|
+
if (activityLog[msg.oldAgentId]?.length) {
|
|
276
|
+
activityLog[msg.newAgentId] = [...activityLog[msg.oldAgentId]];
|
|
277
|
+
delete activityLog[msg.oldAgentId];
|
|
278
|
+
}
|
|
279
|
+
if (chatInputs[msg.oldAgentId]) {
|
|
280
|
+
chatInputs[msg.newAgentId] = chatInputs[msg.oldAgentId];
|
|
281
|
+
delete chatInputs[msg.oldAgentId];
|
|
282
|
+
}
|
|
283
|
+
// Only redirect the detail panel if the user was actively viewing
|
|
284
|
+
// the old agent. Otherwise leave their current view alone.
|
|
285
|
+
const panel = s.detailPanel;
|
|
286
|
+
let detailPanel = panel;
|
|
287
|
+
let teamDetailPanels = s.teamDetailPanels;
|
|
288
|
+
if (panel?.type === 'agent' && panel.agentId === msg.oldAgentId) {
|
|
266
289
|
const newPanel = { type: 'agent', agentId: msg.newAgentId };
|
|
290
|
+
detailPanel = newPanel;
|
|
267
291
|
const tid = get().activeTeamId;
|
|
268
|
-
|
|
269
|
-
}
|
|
270
|
-
|
|
292
|
+
teamDetailPanels = { ...s.teamDetailPanels, [tid]: newPanel };
|
|
293
|
+
}
|
|
294
|
+
// Persist the migration to localStorage so it survives a reload
|
|
295
|
+
try { localStorage.setItem('groove:chatHistory', JSON.stringify(chatHistory)); } catch {}
|
|
296
|
+
return { chatHistory, tokenTimeline, activityLog, chatInputs, detailPanel, teamDetailPanels };
|
|
297
|
+
});
|
|
271
298
|
break;
|
|
272
299
|
}
|
|
273
300
|
|