groove-dev 0.26.38 → 0.27.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.
Files changed (171) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CLAUDE.md +24 -19
  3. package/node_modules/@groove-dev/cli/bin/groove.js +2 -0
  4. package/node_modules/@groove-dev/cli/package.json +1 -1
  5. package/node_modules/@groove-dev/cli/src/commands/nuke.js +16 -4
  6. package/node_modules/@groove-dev/cli/src/commands/stop.js +17 -2
  7. package/node_modules/@groove-dev/daemon/integrations-registry.json +681 -75
  8. package/node_modules/@groove-dev/daemon/package.json +1 -1
  9. package/node_modules/@groove-dev/daemon/src/adaptive.js +23 -25
  10. package/node_modules/@groove-dev/daemon/src/api.js +346 -22
  11. package/node_modules/@groove-dev/daemon/src/classifier.js +53 -6
  12. package/node_modules/@groove-dev/daemon/src/firstrun.js +14 -1
  13. package/node_modules/@groove-dev/daemon/src/gateways/manager.js +2 -2
  14. package/node_modules/@groove-dev/daemon/src/index.js +28 -4
  15. package/node_modules/@groove-dev/daemon/src/integrations.js +215 -14
  16. package/node_modules/@groove-dev/daemon/src/introducer.js +84 -11
  17. package/node_modules/@groove-dev/daemon/src/journalist.js +43 -1
  18. package/node_modules/@groove-dev/daemon/src/lockmanager.js +60 -0
  19. package/node_modules/@groove-dev/daemon/src/mcp-manager.js +270 -0
  20. package/node_modules/@groove-dev/daemon/src/memory.js +370 -0
  21. package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
  22. package/node_modules/@groove-dev/daemon/src/process.js +141 -9
  23. package/node_modules/@groove-dev/daemon/src/registry.js +1 -1
  24. package/node_modules/@groove-dev/daemon/src/rotator.js +334 -31
  25. package/node_modules/@groove-dev/daemon/src/router.js +43 -0
  26. package/node_modules/@groove-dev/daemon/src/tokentracker.js +70 -18
  27. package/node_modules/@groove-dev/daemon/src/validate.js +5 -13
  28. package/node_modules/@groove-dev/daemon/templates/groove-slides.cjs +306 -0
  29. package/node_modules/@groove-dev/daemon/test/classifier.test.js +3 -5
  30. package/node_modules/@groove-dev/daemon/test/lockmanager.test.js +64 -0
  31. package/node_modules/@groove-dev/daemon/test/memory.test.js +252 -0
  32. package/node_modules/@groove-dev/daemon/test/rotator.test.js +108 -0
  33. package/node_modules/@groove-dev/daemon/test/router.test.js +64 -0
  34. package/node_modules/@groove-dev/daemon/test/slides-engine.test.js +230 -0
  35. package/node_modules/@groove-dev/daemon/test/tokentracker.test.js +78 -0
  36. package/node_modules/@groove-dev/gui/dist/assets/index-DjORRpF0.css +1 -0
  37. package/node_modules/@groove-dev/gui/dist/assets/index-eCrVowF0.js +652 -0
  38. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  39. package/node_modules/@groove-dev/gui/package.json +1 -4
  40. package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +26 -17
  41. package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +22 -1
  42. package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +53 -21
  43. package/node_modules/@groove-dev/gui/src/components/agents/agent-node.jsx +132 -90
  44. package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +212 -1
  45. package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +6 -2
  46. package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +495 -174
  47. package/node_modules/@groove-dev/gui/src/components/dashboard/kpi-card.jsx +12 -2
  48. package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  49. package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +3 -3
  50. package/node_modules/@groove-dev/gui/src/components/layout/app-shell.jsx +24 -19
  51. package/node_modules/@groove-dev/gui/src/components/layout/command-palette.jsx +2 -2
  52. package/node_modules/@groove-dev/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  53. package/node_modules/@groove-dev/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  54. package/node_modules/@groove-dev/gui/src/lib/format.js +0 -6
  55. package/node_modules/@groove-dev/gui/src/lib/hooks/use-dashboard.js +23 -5
  56. package/node_modules/@groove-dev/gui/src/stores/groove.js +59 -9
  57. package/node_modules/@groove-dev/gui/src/views/agents.jsx +84 -10
  58. package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +24 -21
  59. package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +153 -85
  60. package/package.json +2 -8
  61. package/packages/cli/bin/groove.js +2 -0
  62. package/packages/cli/package.json +1 -1
  63. package/packages/cli/src/commands/nuke.js +16 -4
  64. package/packages/cli/src/commands/stop.js +17 -2
  65. package/packages/daemon/integrations-registry.json +681 -75
  66. package/packages/daemon/package.json +1 -1
  67. package/packages/daemon/src/adaptive.js +23 -25
  68. package/packages/daemon/src/api.js +346 -22
  69. package/packages/daemon/src/classifier.js +53 -6
  70. package/packages/daemon/src/firstrun.js +14 -1
  71. package/packages/daemon/src/gateways/manager.js +2 -2
  72. package/packages/daemon/src/index.js +28 -4
  73. package/packages/daemon/src/integrations.js +215 -14
  74. package/packages/daemon/src/introducer.js +84 -11
  75. package/packages/daemon/src/journalist.js +43 -1
  76. package/packages/daemon/src/lockmanager.js +60 -0
  77. package/packages/daemon/src/mcp-manager.js +270 -0
  78. package/packages/daemon/src/memory.js +370 -0
  79. package/packages/daemon/src/pm.js +1 -1
  80. package/packages/daemon/src/process.js +141 -9
  81. package/packages/daemon/src/registry.js +1 -1
  82. package/packages/daemon/src/rotator.js +334 -31
  83. package/packages/daemon/src/router.js +43 -0
  84. package/packages/daemon/src/tokentracker.js +70 -18
  85. package/packages/daemon/src/validate.js +5 -13
  86. package/packages/daemon/templates/groove-slides.cjs +306 -0
  87. package/packages/gui/dist/assets/index-DjORRpF0.css +1 -0
  88. package/packages/gui/dist/assets/index-eCrVowF0.js +652 -0
  89. package/packages/gui/dist/index.html +2 -2
  90. package/packages/gui/package.json +1 -4
  91. package/packages/gui/src/components/agents/agent-chat.jsx +26 -17
  92. package/packages/gui/src/components/agents/agent-config.jsx +22 -1
  93. package/packages/gui/src/components/agents/agent-feed.jsx +53 -21
  94. package/packages/gui/src/components/agents/agent-node.jsx +132 -90
  95. package/packages/gui/src/components/agents/spawn-wizard.jsx +212 -1
  96. package/packages/gui/src/components/dashboard/cache-ring.jsx +6 -2
  97. package/packages/gui/src/components/dashboard/intel-panel.jsx +495 -174
  98. package/packages/gui/src/components/dashboard/kpi-card.jsx +12 -2
  99. package/packages/gui/src/components/dashboard/team-burn-panel.jsx +55 -0
  100. package/packages/gui/src/components/layout/activity-bar.jsx +3 -3
  101. package/packages/gui/src/components/layout/app-shell.jsx +24 -19
  102. package/packages/gui/src/components/layout/command-palette.jsx +2 -2
  103. package/packages/gui/src/components/marketplace/integration-wizard.jsx +391 -61
  104. package/packages/gui/src/components/marketplace/marketplace-card.jsx +29 -7
  105. package/packages/gui/src/lib/format.js +0 -6
  106. package/packages/gui/src/lib/hooks/use-dashboard.js +23 -5
  107. package/packages/gui/src/stores/groove.js +59 -9
  108. package/packages/gui/src/views/agents.jsx +84 -10
  109. package/packages/gui/src/views/dashboard.jsx +24 -21
  110. package/packages/gui/src/views/marketplace.jsx +153 -85
  111. package/node_modules/@groove-dev/gui/dist/assets/index-CEFKgLGB.css +0 -1
  112. package/node_modules/@groove-dev/gui/dist/assets/index-CaKBNWcK.js +0 -638
  113. package/node_modules/@groove-dev/gui/dist/groove-logo-short.png +0 -0
  114. package/node_modules/@groove-dev/gui/dist/groove-logo.png +0 -0
  115. package/node_modules/@groove-dev/gui/public/groove-logo-short.png +0 -0
  116. package/node_modules/@groove-dev/gui/public/groove-logo.png +0 -0
  117. package/node_modules/@groove-dev/gui/src/components/ui/dropdown-menu.jsx +0 -60
  118. package/node_modules/@groove-dev/gui/src/lib/hooks/use-media-query.js +0 -18
  119. package/node_modules/@radix-ui/react-dropdown-menu/LICENSE +0 -21
  120. package/node_modules/@radix-ui/react-dropdown-menu/README.md +0 -3
  121. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts +0 -97
  122. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts +0 -97
  123. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js +0 -337
  124. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.js.map +0 -7
  125. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs +0 -305
  126. package/node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs.map +0 -7
  127. package/node_modules/@radix-ui/react-dropdown-menu/package.json +0 -75
  128. package/node_modules/@radix-ui/react-popover/LICENSE +0 -21
  129. package/node_modules/@radix-ui/react-popover/README.md +0 -3
  130. package/node_modules/@radix-ui/react-popover/dist/index.d.mts +0 -85
  131. package/node_modules/@radix-ui/react-popover/dist/index.d.ts +0 -85
  132. package/node_modules/@radix-ui/react-popover/dist/index.js +0 -352
  133. package/node_modules/@radix-ui/react-popover/dist/index.js.map +0 -7
  134. package/node_modules/@radix-ui/react-popover/dist/index.mjs +0 -320
  135. package/node_modules/@radix-ui/react-popover/dist/index.mjs.map +0 -7
  136. package/node_modules/@radix-ui/react-popover/package.json +0 -82
  137. package/node_modules/@radix-ui/react-separator/LICENSE +0 -21
  138. package/node_modules/@radix-ui/react-separator/README.md +0 -3
  139. package/node_modules/@radix-ui/react-separator/dist/index.d.mts +0 -21
  140. package/node_modules/@radix-ui/react-separator/dist/index.d.ts +0 -21
  141. package/node_modules/@radix-ui/react-separator/dist/index.js +0 -65
  142. package/node_modules/@radix-ui/react-separator/dist/index.js.map +0 -7
  143. package/node_modules/@radix-ui/react-separator/dist/index.mjs +0 -32
  144. package/node_modules/@radix-ui/react-separator/dist/index.mjs.map +0 -7
  145. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/LICENSE +0 -21
  146. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/README.md +0 -3
  147. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.mts +0 -52
  148. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.d.ts +0 -52
  149. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js +0 -80
  150. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.js.map +0 -7
  151. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs +0 -47
  152. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs.map +0 -7
  153. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/package.json +0 -69
  154. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/LICENSE +0 -21
  155. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/README.md +0 -3
  156. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.mts +0 -22
  157. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.d.ts +0 -22
  158. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js +0 -152
  159. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.js.map +0 -7
  160. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs +0 -119
  161. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/dist/index.mjs.map +0 -7
  162. package/node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-slot/package.json +0 -64
  163. package/node_modules/@radix-ui/react-separator/package.json +0 -69
  164. package/packages/gui/dist/assets/index-CEFKgLGB.css +0 -1
  165. package/packages/gui/dist/assets/index-CaKBNWcK.js +0 -638
  166. package/packages/gui/dist/groove-logo-short.png +0 -0
  167. package/packages/gui/dist/groove-logo.png +0 -0
  168. package/packages/gui/public/groove-logo-short.png +0 -0
  169. package/packages/gui/public/groove-logo.png +0 -0
  170. package/packages/gui/src/components/ui/dropdown-menu.jsx +0 -60
  171. package/packages/gui/src/lib/hooks/use-media-query.js +0 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,64 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.27.0 — Audit-driven release: visibility, safety, Layer 7 memory (2026-04-12)
4
+
5
+ Backend audit after a 275M-token stress test revealed three classes of gaps: blind spots (invisible tokens), unvalidated claims (hardcoded coefficients posing as measurements), and missing memory (every new agent started from scratch). This release closes all three.
6
+
7
+ **Visibility — you can now see what's actually happening**
8
+ - Journalist, PM, planner, negotiator, gateway, and agent-QA headless calls now record tokens under reserved IDs (`__journalist__`, `__pm__`, etc.) — previously invisible 1-6M tokens/day now tracked
9
+ - Cache hit rate formula fixed: denominator was incorrectly including fresh input tokens; corrected to `reads / (reads + creation)` so the number reflects real cache efficiency
10
+ - New `GET /api/tokens/by-team` endpoint — ranked team burn breakdown answers "which team used the most tokens?" in one call
11
+ - Dashboard gets a new Team Burn panel with per-team bars, cost, and agent count
12
+ - Per-agent cache rate in `/api/dashboard` uses the corrected formula
13
+ - `projectRoot` field reserved in token session records for future per-workspace grouping
14
+
15
+ **Safety — the system self-heals on pathological agents**
16
+ - Token ceiling auto-rotate: when an agent burns more than `safety.tokenCeilingPerAgent` (default 5M) since its spawn, rotator fires `token_limit_exceeded` rotation with journalist handoff brief
17
+ - Velocity auto-rotate: when an agent burns more than `safety.velocityTokenThreshold` (default 1.5M) in a rolling `safety.velocityWindowSeconds` window (default 300s), rotator fires `runaway_velocity`
18
+ - Both triggers use existing rotation infrastructure — no new kill/respawn code, just new `shouldRotate()` conditions
19
+ - Triggers scoped to `spawnedAt` so post-rotation agents don't re-trigger on inherited cumulative tokens
20
+ - Coordination protocol is now enforced, not advisory: `POST /api/coordination/declare` acquires a short-lived resource lock; returns 423 on conflict with owner + expiry info; auto-expires after 10min to prevent deadlock
21
+ - Introducer now instructs agents to use the HTTP protocol instead of editing `.groove/coordination.md`
22
+ - Intel panel shows safety-triggered rotations with distinct badges (`T:5M` red, `V:1.5M` orange) and hover tooltips
23
+
24
+ **Layer 7 — persistent agent memory**
25
+ - New `MemoryStore` module (`memory.js`) persists four file types in `.groove/memory/`:
26
+ - `project-constraints.md` — hash-deduped project rules (capped at 50)
27
+ - `handoff-chain/<role>.md` — last 10 rotation briefs per role, newest first
28
+ - `agent-discoveries.jsonl` — error→fix pairs (success-only, 1000-entry cap)
29
+ - `agent-specializations.json` — per-agent + per-role quality profiles
30
+ - Rotator appends brief to chain on every rotation; journalist reads last 3 into new briefs for causal continuity across rotations
31
+ - Introducer injects accumulated memory into every new agent spawn (constraints + recent handoffs + known patterns, 12K char budget)
32
+ - Process manager updates specializations on agent completion/crash (avg quality, file touches, error signatures)
33
+ - 9 new API endpoints for CRUD on all four memory types
34
+ - 26 new unit tests covering dedup, size caps, role-scoped filtering, persistence
35
+
36
+ **Rotation intelligence**
37
+ - `QUALITY_THRESHOLD` raised 40 → 55 (tuned up from hair-trigger threshold)
38
+ - `MIN_EVENTS` raised 10 → 30 (require ~100 turns of stable signal before scoring)
39
+ - New 5-minute rotation cooldown prevents back-to-back churn on persistently low-quality tasks
40
+ - Safety triggers bypass cooldown (pathological burn must stop immediately)
41
+ - Converged adaptive profiles get a deeper quality floor (threshold - 15) before rotating — if the threshold has stabilized, trust it
42
+ - Pre/post-rotation velocity captured on every rotation; `velocityDelta` computed after new agent has 10 min of data — replaces hardcoded 30% assumption with measurable signal for future accuracy tuning
43
+
44
+ **Mid-session classification (never silent downshift)**
45
+ - Classifier broadcasts `classifier:update` events every 20 events once it has 40+ — enables UI to surface downshift suggestions
46
+ - `GET /api/agents/:id/routing/suggestion` returns `{ currentModel, suggestedModel, classifiedTier, eventCount, reason }` when a lighter model would handle the current task
47
+ - NEVER auto-applied — user must accept via UI click (heavy defaults principle preserved)
48
+ - Never upshifts — only suggests moving to a cheaper tier
49
+ - Returns 204 when classifier has no strong suggestion
50
+
51
+ **Cleanup and dependencies**
52
+ - Removed unused code: `sanitizeForFilename`, `formatDuration`, `dashTelemetry`, `ccChartTimeline`, entire `dropdown-menu.jsx` and `use-media-query.js`
53
+ - Removed unused Radix deps (`react-popover`, `react-separator`, `react-dropdown-menu`)
54
+ - Fixed duplicate `bundledDependencies` / `bundleDependencies` keys in root package.json
55
+ - Archived v1 build plan to `docs/archive/GROVE_BUILD_PLAN.md`; v2 plan is the active document
56
+ - Workspace versions synced: daemon/cli/gui/root all at 0.26.39 (tagged 0.27.0 on release)
57
+ - `.DS_Store` and stale logs cleaned
58
+ - GUI dist/ rebuilt from scratch
59
+
60
+ **Tests: 137 → 218 (+81 new)**
61
+
3
62
  ## v0.26.33 — Self-building pipeline, team persistence, agent quality overhaul (2026-04-11)
4
63
 
5
64
  Major release: Groove now builds itself. Full team lifecycle, intelligent context synthesis, and agent quality improvements across the board.
package/CLAUDE.md CHANGED
@@ -33,19 +33,20 @@ groove/
33
33
  - **MimeTypes** (`mimetypes.js`) — MIME type lookup utilities
34
34
 
35
35
  **Coordination:**
36
- - **Introducer** (`introducer.js`) — generates AGENTS_REGISTRY.md, injects GROOVE section into CLAUDE.md, team context for new agents
37
- - **LockManager** (`lockmanager.js`) — file scope ownership via glob patterns, conflict detection with minimatch
36
+ - **Introducer** (`introducer.js`) — generates AGENTS_REGISTRY.md, injects GROOVE section into CLAUDE.md, team context + Project Memory (Layer 7) injection for new agents
37
+ - **LockManager** (`lockmanager.js`) — file scope ownership via glob patterns, coordination operations (enforced knock protocol, 10-min TTL), conflict detection with minimatch
38
38
  - **Supervisor** (`supervisor.js`) — QC approval routing, conflict recording, GROOVE_CONFLICTS.md, auto-QC at 4+ agents
39
39
  - **Teams** (`teams.js`) — live organizational groups (CRUD), auto-migration of legacy agents, backward compat stubs
40
40
 
41
41
  **Intelligence:**
42
- - **Journalist** (`journalist.js`) — AI-powered context synthesis (headless claude -p), log filtering (stream-json parsing), GROOVE_PROJECT_MAP.md, GROOVE_DECISIONS.md, per-agent session logs, handoff brief generation
43
- - **Rotator** (`rotator.js`) — context rotation engine (kill + respawn with fresh context), auto-rotation at adaptive threshold, timeline integration
44
- - **Adaptive** (`adaptive.js`) — per-provider per-role rotation thresholds, session scoring 0-100, threshold adjustment (+2%/-5%), convergence detection
45
- - **TokenTracker** (`tokentracker.js`) — per-agent token accounting, session metrics (duration/turns/cost), savings calculator
46
- - **Classifier** (`classifier.js`) — task complexity classification (light/medium/heavy) via sliding window pattern matching
47
- - **Router** (`router.js`) — adaptive model routing (Fixed/Auto/Auto-with-floor modes), cost tracking
48
- - **Timeline** (`timeline.js`) — historical metrics snapshots (30s intervals, max 2K), lifecycle events (spawn/complete/crash/kill/rotate, max 500)
42
+ - **Journalist** (`journalist.js`) — AI-powered context synthesis (headless claude -p), log filtering (stream-json parsing), GROOVE_PROJECT_MAP.md, GROOVE_DECISIONS.md, per-agent session logs, handoff brief generation (prepends last 3 rotations from memory), reserved-ID token tracking for synthesis overhead
43
+ - **Rotator** (`rotator.js`) — context rotation engine (kill + respawn with fresh context), adaptive threshold + quality + safety triggers (token ceiling, velocity spike), 5-min cooldown, pre/post velocity measurement, appends brief to persistent chain, updates specializations
44
+ - **Adaptive** (`adaptive.js`) — per-provider per-role rotation thresholds, session scoring 0-100, threshold adjustment (+2%/-5%), convergence detection (used to gate quality rotations)
45
+ - **TokenTracker** (`tokentracker.js`) — per-agent token accounting, session metrics (duration/turns/cost), corrected cache hit rate, velocity + windowed-tokens queries, internal overhead segregation, savings calculator
46
+ - **Classifier** (`classifier.js`) — task complexity classification (light/medium/heavy) via sliding window, broadcasts mid-session updates every 20 events for downshift suggestions
47
+ - **Router** (`router.js`) — adaptive model routing (Fixed/Auto/Auto-with-floor modes), cost tracking, downshift suggestion API (never auto-applied, requires user click)
48
+ - **Memory** (`memory.js`) — **Layer 7** persistent agent memory: project-constraints.md, handoff-chain/<role>.md (last 10 per role), agent-discoveries.jsonl (error→fix pairs, dedup), agent-specializations.json (per-agent + per-role quality profiles)
49
+ - **Timeline** (`timeline.js`) — historical metrics snapshots (30s intervals, max 2K), lifecycle events (spawn/complete/crash/kill/rotate with reason, max 500)
49
50
 
50
51
  **Services:**
51
52
  - **Skills** (`skills.js`) — skill marketplace management, API integration, local cache, auth tokens
@@ -226,9 +227,9 @@ GROOVE is a process manager, NOT a harness. Hard rules:
226
227
  - **Website:** groovedev.ai
227
228
  - **Docs:** docs.groovedev.ai
228
229
 
229
- ## Current Status (v0.20.0)
230
+ ## Current Status (v0.27.0)
230
231
 
231
- Fully functional multi-agent orchestration system with complete GUI v2 rebuild. 29 daemon source files, 59 GUI components, 21+ CLI commands, 50+ API endpoints.
232
+ Audit-driven release. Multi-agent orchestration system with 7 coordination layers: Journalist, Introducer/Knock Protocol, Rotator, Adaptive Thresholds, Token Tracker, Router/Classifier, and Persistent Agent Memory (new).
232
233
 
233
234
  **Key capabilities:**
234
235
  - GUI v2: VS Code-style layout, Tailwind CSS v4, Radix UI, zero inline styles
@@ -236,25 +237,29 @@ Fully functional multi-agent orchestration system with complete GUI v2 rebuild.
236
237
  - Agent panel: chat (bubble UI, mode pills), stats (canvas charts), controls (model swap, rotate, kill)
237
238
  - Marketplace: NFT-style skill cards, integrations, search, ratings
238
239
  - Editor: CodeMirror 6, file tree, terminal (xterm.js)
239
- - Dashboard: KPI sparklines, token/cost charts, fleet panel, savings breakdown
240
+ - Dashboard: KPI sparklines, token/cost charts, fleet panel, savings breakdown, per-team burn panel
240
241
  - Quick Launch: planner recommends team, one-click spawns all agents
241
242
  - Chat continuation: reply to completed agents, streaming text, markdown rendering
242
243
  - Context chain: planner output flows automatically to builders
243
- - Journalist: zero cold-start, synthesis on completion, 40K char budget
244
- - Infinite Sessions: adaptive rotation, degradation detection
245
- - Token tracking: wired end-to-end, session metrics, savings data real
244
+ - Journalist: zero cold-start, synthesis on completion, 40K char budget, synthesis tokens now tracked
245
+ - Infinite Sessions: adaptive rotation, degradation detection, 5-min cooldown, converged-profile awareness
246
+ - Token tracking: wired end-to-end, session metrics, cache-corrected hit rate, internal overhead segregated from user agents
246
247
  - Timeline: historical metrics snapshots, lifecycle events
247
- - Teams: live organizational groups with CRUD operations
248
- - Coordination: knock protocol, task negotiation, memory containment
248
+ - Teams: live organizational groups with CRUD operations, per-team burn tracking
249
+ - Coordination: enforced knock protocol via HTTP, task negotiation, scope locks
250
+ - Safety: auto-rotate on token ceiling (5M) or velocity spike (1.5M/5min), scoped to agent instance
251
+ - Persistent Memory (Layer 7): project constraints, handoff chains, error→fix discoveries, per-agent specializations — agent #50 knows what agent #1 learned
252
+ - Mid-session classification: surfaces downshift suggestions, never silently downshifts
249
253
  - Federation: daemon-to-daemon pairing over Tailscale mesh
250
254
  - Scheduling: cron-based agent scheduling
251
255
  - Audit: append-only operation logging
252
256
 
253
257
  **Next steps:**
258
+ - GUI: memory view (constraints/chains/discoveries tabs)
259
+ - GUI: downshift suggestion pill in agent panel
260
+ - Stress test: reproduce 275M burn with v0.27 to measure real improvements
254
261
  - Terminal multi-tab support
255
262
  - Marketplace detail modal for integrations
256
263
  - Dashboard: routing donut, cache panel, context health gauges
257
- - Settings view
258
264
  - Monitor/QC agent mode (stay active, loop)
259
- - Semantic degradation detection
260
265
  - Distribution: demo video, HN launch, Twitter content
@@ -39,6 +39,7 @@ program
39
39
  program
40
40
  .command('stop')
41
41
  .description('Stop the GROOVE daemon')
42
+ .option('-f, --force', 'Stop even if agents are still running (destroys their work)')
42
43
  .action(stop);
43
44
 
44
45
  program
@@ -69,6 +70,7 @@ program
69
70
  program
70
71
  .command('nuke')
71
72
  .description('Kill all agents and stop the daemon')
73
+ .option('-f, --force', 'Required when agents are still running')
72
74
  .action(nuke);
73
75
 
74
76
  program
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.11.0",
3
+ "version": "0.27.0",
4
4
  "description": "GROOVE CLI \u2014 manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -4,14 +4,26 @@
4
4
  import chalk from 'chalk';
5
5
  import { apiCall } from '../client.js';
6
6
 
7
- export async function nuke() {
7
+ export async function nuke(options = {}) {
8
+ let status;
9
+ try {
10
+ status = await apiCall('GET', '/api/status');
11
+ } catch {
12
+ console.log(chalk.yellow('No running daemon found.'));
13
+ return;
14
+ }
15
+
16
+ if (status.running > 0 && !options.force) {
17
+ console.error(chalk.red(`Refusing to nuke: ${status.running} agent(s) still running.`));
18
+ console.error(chalk.dim(' Nuke will kill every agent in every team and stop the daemon.'));
19
+ console.error(chalk.dim(' Re-run with "groove nuke --force" to confirm.'));
20
+ process.exit(1);
21
+ }
22
+
8
23
  try {
9
24
  console.log(chalk.yellow('Nuking all agents...'));
10
25
  await apiCall('DELETE', '/api/agents');
11
-
12
- const status = await apiCall('GET', '/api/status');
13
26
  process.kill(status.pid, 'SIGTERM');
14
-
15
27
  console.log(chalk.green('All agents killed. Daemon stopped.'));
16
28
  } catch {
17
29
  console.log(chalk.yellow('No running daemon found.'));
@@ -4,9 +4,24 @@
4
4
  import chalk from 'chalk';
5
5
  import { apiCall } from '../client.js';
6
6
 
7
- export async function stop() {
7
+ export async function stop(options = {}) {
8
+ let status;
9
+ try {
10
+ status = await apiCall('GET', '/api/status');
11
+ } catch {
12
+ console.log(chalk.yellow('No running daemon found.'));
13
+ return;
14
+ }
15
+
16
+ if (status.running > 0 && !options.force) {
17
+ console.error(chalk.red(`Refusing to stop: ${status.running} agent(s) still running.`));
18
+ console.error(chalk.dim(' Stopping the daemon destroys all running agents in every team.'));
19
+ console.error(chalk.dim(' Kill specific agents first with "groove kill <id>",'));
20
+ console.error(chalk.dim(' or override with "groove stop --force".'));
21
+ process.exit(1);
22
+ }
23
+
8
24
  try {
9
- const status = await apiCall('GET', '/api/status');
10
25
  process.kill(status.pid, 'SIGTERM');
11
26
  console.log(chalk.green('GROOVE daemon stopped.'));
12
27
  } catch {