groove-dev 0.27.209 → 0.27.211

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 (29) hide show
  1. package/CLAUDE.md +8 -0
  2. package/node_modules/@groove-dev/cli/package.json +1 -1
  3. package/node_modules/@groove-dev/daemon/package.json +1 -1
  4. package/node_modules/@groove-dev/daemon/src/axom-connector.js +20 -6
  5. package/node_modules/@groove-dev/daemon/src/axom-runtimes.js +67 -1
  6. package/node_modules/@groove-dev/daemon/src/chatstore.js +57 -13
  7. package/node_modules/@groove-dev/daemon/src/index.js +2 -0
  8. package/node_modules/@groove-dev/daemon/src/routes/axom.js +17 -0
  9. package/node_modules/@groove-dev/daemon/test/axom-connector.test.js +41 -0
  10. package/node_modules/@groove-dev/daemon/test/axom-runtimes.test.js +62 -0
  11. package/node_modules/@groove-dev/daemon/test/chatstore.test.js +67 -2
  12. package/node_modules/@groove-dev/gui/dist/assets/{index-217ZVIOc.js → index-BP4oE2UL.js} +227 -227
  13. package/node_modules/@groove-dev/gui/dist/assets/index-DPsim83z.css +1 -0
  14. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  15. package/node_modules/@groove-dev/gui/package.json +1 -1
  16. package/package.json +1 -1
  17. package/packages/cli/package.json +1 -1
  18. package/packages/daemon/package.json +1 -1
  19. package/packages/daemon/src/axom-connector.js +20 -6
  20. package/packages/daemon/src/axom-runtimes.js +67 -1
  21. package/packages/daemon/src/chatstore.js +57 -13
  22. package/packages/daemon/src/index.js +2 -0
  23. package/packages/daemon/src/routes/axom.js +17 -0
  24. package/packages/gui/dist/assets/{index-217ZVIOc.js → index-BP4oE2UL.js} +227 -227
  25. package/packages/gui/dist/assets/index-DPsim83z.css +1 -0
  26. package/packages/gui/dist/index.html +2 -2
  27. package/packages/gui/package.json +1 -1
  28. package/node_modules/@groove-dev/gui/dist/assets/index-DdCadtGL.css +0 -1
  29. package/packages/gui/dist/assets/index-DdCadtGL.css +0 -1
@@ -653,6 +653,8 @@ export class Daemon {
653
653
  try {
654
654
  const moved = this.chatStore.migrate();
655
655
  if (moved) console.log(`[chat] migrated ${moved} id-keyed histories to agent names`);
656
+ const pruned = this.chatStore.prune();
657
+ if (pruned) console.log(`[chat] pruned ${pruned} histories for long-gone agents`);
656
658
  } catch { /* best effort */ }
657
659
 
658
660
  // Regenerate the on-disk registry files once on boot. They otherwise
@@ -46,6 +46,16 @@ export function registerAxomRoutes(app, daemon) {
46
46
  return res.status(400).json({ error: 'clientRef must be a string of at most 64 chars' });
47
47
  }
48
48
  const result = await daemon.axom.message(endpoint, req.params.id, text, clientRef);
49
+ // Title the chat from its opening message — but only once the runtime
50
+ // ACCEPTED the turn. A message rejected with 409/413 never ran, so it
51
+ // must not name the conversation it failed to start.
52
+ if (result.status === 202) {
53
+ daemon.axomRuntimes.titleFromFirstMessage(req.params.id, text);
54
+ // Remember what we sent, keyed by the §15 ref the runtime echoes in
55
+ // pipeline_start. This is what lets a reloaded tab put the user's own
56
+ // words back above the answer instead of "prompt not identified".
57
+ if (clientRef) daemon.axomRuntimes.recordPrompt(req.params.id, clientRef, text);
58
+ }
49
59
  daemon.audit.log('axom.message', { session: req.params.id, chars: text.length, status: result.status });
50
60
  res.status(result.status).json(result.body);
51
61
  } catch (err) {
@@ -167,6 +177,13 @@ export function registerAxomRoutes(app, daemon) {
167
177
  res.json({ chats: daemon.axomRuntimes.chats() });
168
178
  });
169
179
 
180
+ // What GROOVE sent on this session, so a reloaded tab can restore the user's
181
+ // bubbles. Only ever OUR OWN sends — a turn started from the REPL or another
182
+ // client has no entry here and must still render without a bubble.
183
+ app.get('/api/axom/sessions/:id/prompts', (req, res) => {
184
+ res.json({ prompts: daemon.axomRuntimes.prompts(req.params.id) });
185
+ });
186
+
170
187
  app.patch('/api/axom/chats/:session', (req, res) => {
171
188
  try {
172
189
  res.json(daemon.axomRuntimes.renameChat(req.params.session, req.body?.label));