let-them-talk 4.2.0 → 5.2.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 (39) hide show
  1. package/CHANGELOG.md +640 -540
  2. package/README.md +592 -415
  3. package/cli.js +1089 -589
  4. package/conversation-templates/autonomous-feature.json +22 -0
  5. package/conversation-templates/code-review.json +21 -11
  6. package/conversation-templates/debug-squad.json +21 -11
  7. package/conversation-templates/feature-build.json +21 -11
  8. package/conversation-templates/research-write.json +21 -11
  9. package/dashboard.html +9250 -7771
  10. package/dashboard.js +1232 -29
  11. package/office/agents.js +148 -4
  12. package/office/animation.js +68 -0
  13. package/office/assets.js +431 -0
  14. package/office/builder.js +355 -0
  15. package/office/building-interior.js +261 -0
  16. package/office/campus-env.js +119 -23
  17. package/office/car-hud.js +368 -0
  18. package/office/daynight.js +221 -0
  19. package/office/economy-hud.js +432 -0
  20. package/office/economy-ui.js +238 -0
  21. package/office/environment.js +818 -808
  22. package/office/face.js +65 -0
  23. package/office/fast-travel.js +215 -0
  24. package/office/hq-building.js +295 -0
  25. package/office/index.js +1095 -423
  26. package/office/instancing.js +160 -0
  27. package/office/lod-manager.js +165 -0
  28. package/office/multiplayer-hud.js +428 -0
  29. package/office/net-client.js +299 -0
  30. package/office/particles.js +172 -0
  31. package/office/player.js +658 -436
  32. package/office/post-processing.js +82 -0
  33. package/office/sky.js +319 -0
  34. package/office/street-furniture.js +308 -0
  35. package/office/vehicle.js +455 -0
  36. package/office/world-save.js +91 -0
  37. package/package.json +59 -59
  38. package/server.js +7190 -4685
  39. package/conversation-templates/managed-team.json +0 -12
package/CHANGELOG.md CHANGED
@@ -1,540 +1,640 @@
1
- # Changelog
2
-
3
- ## [4.2.0] - 2026-03-17
4
-
5
- ### Major — Team Intelligence, Dashboard Upgrade, Performance
6
-
7
- Built by a 4-agent team (Architect, Tester, Protocol, Builder) working in parallel.
8
-
9
- ### Added — Team Automation
10
- - **Auto-escalation** — blocked tasks auto-broadcast `[ESCALATION]` to team after 5 minutes. File-based dedup via `task.escalated_at` field (cross-process safe). Clears on unblock.
11
- - **Stand-up meetings** — config-driven periodic team check-ins (`standup_interval_hours` in config.json). File-based dedup, 5+ agent gate. Broadcasts task summary with in-progress/blocked/done counts.
12
- - **Quality gates** — `update_task(done)` auto-broadcasts `[REVIEW NEEDED]` (from v4.1.0, now with auto-escalation integration).
13
-
14
- ### AddedAgent Intelligence
15
- - **Workload metrics** — reputation tracks `task_times[]` (completion seconds), leaderboard shows `avg_task_time_sec` per agent.
16
- - **Smarter suggest_task** — caps at 3 in-progress tasks ("finish first"), suggests blocked tasks when no pending ones, workload-aware.
17
- - **KB hints in listen_group** batch messages checked against KB keys, returns `kb_hints` with relevant entries.
18
- - **Thread reply context** — `listen_group` includes `_reply_context` preview of parent message for threaded replies.
19
- - **Decision overlap hints** — `send_message` checks content against logged decisions, returns `_decision_hint` to prevent re-debating.
20
- - **Auto-status board** — `update_task` auto-writes `_status` to agent workspace ("Working on: X"). `list_agents` includes `current_status` field.
21
-
22
- ### AddedDashboard
23
- - **Agent intent display** — dashboard shows what each agent is currently working on (from workspace `_status`)
24
- - **Channel badges** — messages show colored `#channel` badges
25
- - **Channel filter bar** horizontal scrollable tabs to filter messages by channel
26
- - **Channel history merging** `/api/history` merges channel-specific + general history files
27
- - **`/api/channels` endpoint** channel list with member counts for dashboard
28
- - **`/api/decisions` endpoint** decision log display in dashboard
29
- - **Decision log UI** chronological cards with topic, decision, reasoning, author
30
-
31
- ### Improved Performance & Safety
32
- - **Escalation dedup fix** replaced in-memory `_escalatedTasks` Set with file-based `task.escalated_at` field (cross-process safe for 10 agents)
33
- - **Dashboard current_status API** `/api/agents` includes workspace `_status` for agent intent board
34
-
35
- ## [4.1.0] - 2026-03-17
36
-
37
- ### Added — Agent Reliability & Intelligence
38
-
39
- - **Auto-recovery (crash resume)** when an agent's process dies, the server snapshots its state (active tasks, locked files, channels, workspace keys, last 5 messages) to `recovery-{name}.json`. When a replacement registers with the same name, the snapshot is included in the register response with instructions to resume, not restart. 1-hour TTL, auto-deletes after load.
40
- - **Quality gates** `update_task(id, "done")` auto-broadcasts `[REVIEW NEEDED]` to all alive agents. Teams get automatic review cycles without manually calling `request_review()`.
41
- - **Decision overlap hints** `send_message` in group mode checks content against existing logged decisions. Returns `_decision_hint` if a related decision exists, preventing teams from re-debating settled topics.
42
- - **Enhanced `check_messages`** now returns rich summary: `senders`, `addressed_to_you`, `preview`, `urgency` level. The proactive counterpart to the enhanced nudge.
43
-
44
- ### Fixed
45
- - **Recovery lock notes** snapshot correctly labels locked files as `locked_files_released` with note that locks were auto-released.
46
-
47
- ## [4.0.0] - 2026-03-17
48
-
49
- ### Major Release10-Agent Free Group Mode
50
-
51
- Massive scaling overhaul designed, implemented, and audited by a 3-agent team (Architect, Tester, Protocol). 12 changes, 3 bugs caught during collaborative code review.
52
-
53
- ### Added Scaling (4 features)
54
- - **Scaled context** — `listen_group` context window scales with team size: `min(50, max(20, agentCount * 5))`. 3 agents = 20 messages, 10 agents = 50.
55
- - **Send-after-listen enforcement** — agents must call `listen_group()` between sends. Prevents message storms. Addressed agents get 2 sends per cycle, others get 1.
56
- - **Response budget** — max 2 unaddressed sends per 60 seconds. Time-based reset. Hint (not error) when depleted.
57
- - **Smart context with priority partitions** — Bucket A (addressed messages, sacred, always included), Bucket B (channel messages, capped), Bucket C (chronological, fills remaining). Total guaranteed <= contextSize.
58
-
59
- ### Added Agent Awareness (3 features)
60
- - **Enhanced nudge** — every non-listen tool response now includes sender names, addressed count, and message preview: `"URGENT: 3 messages waiting (2 addressed to you): 2 from Architect, 1 from Protocol. Latest: 'Need your review...'"`
61
- - **Idle detection** — `listen_group()` returns `idle: true` after 60s with no messages, with proactive `work_suggestions`, task suggestions, and instructions. Agents auto-find work instead of blocking forever.
62
- - **Enhanced `check_messages`** — now returns rich summary: `senders`, `addressed_to_you`, `preview`, `urgency` level. The proactive counterpart to the passive nudge.
63
-
64
- ### Added — Organization
65
- - **Task-channel auto-binding** — with 5+ agents in group mode, `create_task` auto-creates `#task-{id}` channels. Assignees auto-join on claim. Channels auto-delete on task completion. Naturally splits 10-agent noise into focused sub-teams.
66
-
67
- ### ImprovedPerformance
68
- - **Cached reads** — `getAgents()` (1.5s TTL), `getChannelsData()` (3s TTL), `getTasks()` (2s TTL) with write-through invalidation. Eliminates ~70% redundant disk I/O.
69
- - **Compact JSON writes** — removed pretty-print (`null, 2`) from all internal JSON writes. 2-3x less I/O overhead.
70
- - **Optimized agent status** removed O(N) `getUnconsumedMessages` scan per agent in `listen_group` status computation.
71
- - **Dashboard SSE race fix** — `Array.from()` before Set iteration prevents skipped clients during concurrent connect/disconnect.
72
- - **Dashboard SSE heartbeat** 30s keepalive prevents dead connection accumulation and proxy timeouts.
73
- - **Dashboard file watcher cleanup** — old watcher properly closed on LAN toggle, prevents memory leaks.
74
- - **Dashboard watcher filter** only triggers on `.json`/`.jsonl` files, ignores lock files and temp files.
75
-
76
- ### AddedSafety
77
- - **Collection caps** — tasks (1000), workflows (500), votes (500), reviews (500), dependencies (1000), branches (100), channels (100). Prevents DoS via unbounded growth.
78
- - **Input type validation** — `reply_to` and `channel` parameters type-checked as strings in `send_message`.
79
- - **Channel name validation fix** — error message corrected from "1-30 chars" to "1-20 chars" to match `sanitizeName()`.
80
-
81
- ## [3.10.0] - 2026-03-17
82
-
83
- ### AddedDynamic Guide with Progressive Disclosure
84
- - **`buildGuide()`**replaces hardcoded guide in register() and get_guide(). Returns only rules relevant to the current system state.
85
- - **Tiered rules:** Tier 0 (listen after every action), Tier 1 (core behavior), Tier 2 (group mode features), Tier 2b (channels), Tier 3 (large teams 5+)
86
- - **User-customizable:** `.agent-bridge/guide.md` for project-specific rules
87
- - 2-agent direct mode = 5 rules. 10-agent group with channels = 12 rules.
88
-
89
- ## [3.9.1] - 2026-03-17
90
-
91
- ### Added
92
- - **Per-channel cooldown** — uses channel member count instead of total agents. 2-member #backend = 1s, regardless of 10 in #general
93
- - **`cooldown_applied_ms`** diagnostic field in send_message response showing exact cooldown applied
94
- - **`channel` field** in send_message response when sending to a channel
95
-
96
- ### Fixed
97
- - Task race condition — `update_task` rejects claiming tasks already in_progress by another agent
98
-
99
- ## [3.9.0] - 2026-03-17
100
-
101
- ### Added Channels & Split Cooldown
102
-
103
- - **`join_channel(name, description?)`** — create or join a channel for sub-team communication
104
- - **`leave_channel(name)`** — leave a channel (can't leave #general, empty channels auto-delete)
105
- - **`list_channels()`**list all channels with members, message counts, membership status
106
- - **`send_message` channel parameter** — send to specific channel (`channel-{name}-messages.jsonl`)
107
- - **`listen_group` reads all subscribed channels** merges messages from general + channel files, sorted by timestamp
108
- - **Channel validation** — sending to nonexistent channel returns error with hint to create it
109
- - **Ghost member cleanup** heartbeat auto-removes dead agents from channel membership
110
- - **#general auto-created** — `members: ["*"]` (everyone), uses existing messages.jsonl for backward compat
111
- - **Split cooldown (reply_to-based)** — fast lane (500ms) for addressed agents, slow lane (max 2000, N*1000) for unaddressed, incentivizes threading
112
-
113
- ### Fixed
114
- - Task race condition `update_task` now rejects claiming a task already in_progress by another agent, auto-assigns on claim
115
-
116
- ## [3.8.0] - 2026-03-16
117
-
118
- ### ChangedGroup Conversation Overhaul
119
-
120
- Redesigned from the ground up based on 3-agent collaborative testing and design session.
121
-
122
- **Single-write group messages (O(1) instead of O(N)):**
123
- - `send_message` in group mode now writes ONE message with `to: "__group__"` instead of N copies per agent
124
- - `broadcast` in group mode also uses single `__group__` write
125
- - Old O(N) auto-broadcast loop completely removed
126
- - Result: with 6 agents, a message now creates 1 write instead of 6. A broadcast round that previously created 30 writes now creates 6.
127
-
128
- **`addressed_to` field + `should_respond` hints:**
129
- - `send_message(to="AgentName")` in group mode stores `addressed_to: ["AgentName"]` on the `__group__` message
130
- - `listen_group` response includes `addressed_to_you: true/false` and `should_respond: true/false` per message
131
- - Hint-based, not enforced agents can still respond when they have valuable input
132
- - No `addressed_to` = everyone should respond (backwards compatible)
133
-
134
- **Adaptive cooldown:**
135
- - Cooldown now scales with team size: `max(500ms, N * 500ms)` where N = alive agent count
136
- - 2 agents = 1s, 3 agents = 1.5s, 6 agents = 3s, 10 agents = 5s
137
- - Explicit `group_cooldown` config still respected if set
138
-
139
- **Shorter stagger:**
140
- - Deterministic stagger reduced from 0-3000ms to 500-1500ms
141
- - Same agent always gets the same delay (hash-based)
142
-
143
- **Alive-only garbage collection:**
144
- - `autoCompact` for `__group__` messages only checks alive agents for consumed tracking
145
- - Dead agents no longer block message compaction forever
146
- - Dead agents catch up via `get_compressed_history()` which reads history.jsonl (never compacted)
147
-
148
- **Own-message filtering:**
149
- - Agents no longer see their own `__group__` messages in `listen_group` batches
150
- - Own messages are auto-consumed on sight
151
- - Own messages still visible in `context` array for reference
152
-
153
- ### Added — 3D World: Player Mode & Improvements
154
- - **Player character** — users can spawn as a controllable character in the 3D Hub
155
- - **Spectator camera improvements** — refined controls and speed
156
- - **Environment updates** — campus environment refinements
157
-
158
- ## [3.7.0] - 2026-03-16
159
-
160
- ### AddedAgent Ecosystem (20 new tools, 52 total)
161
-
162
- **Tier 1Critical Infrastructure:**
163
- - **`get_briefing()`** — full project onboarding in one call: agents, tasks, decisions, KB, locked files, progress, project file tree
164
- - **`lock_file(path)` / `unlock_file(path?)`** exclusive file editing with auto-release on agent death
165
- - **`log_decision(decision, reasoning?, topic?)` / `get_decisions(topic?)`** persistent decision log, prevents re-debating
166
- - **Agent recovery on rejoin** — `register()` returns active tasks, workspace keys, recent messages for returning agents
167
-
168
- **Tier 2Quality of Life:**
169
- - **`kb_write(key, content)` / `kb_read(key?)` / `kb_list()`** shared team knowledge base (any agent reads/writes)
170
- - **Event hooks** — auto-fires system messages on `agent_join`, `task_complete`, `all_tasks_done`, `dependency_met`
171
- - **`update_progress(feature, percent, notes)` / `get_progress()`** feature-level progress tracking with overall %
172
- - **`get_compressed_history()`**auto-compresses old messages into summary segments, keeps recent verbatim
173
- - **`listen_group()` now blocks indefinitely** — no more timeout, agents never drop out
174
-
175
- **Tier 3 — Advanced Collaboration:**
176
- - **`call_vote(question, options)` / `cast_vote(vote_id, choice)` / `vote_status(vote_id?)`** team voting with auto-resolve when all vote
177
- - **`request_review(file, desc)` / `submit_review(review_id, status, feedback)`** code review pipeline with approve/changes_requested
178
- - **`declare_dependency(task_id, depends_on)` / `check_dependencies(task_id?)`** task dependency tracking with auto-notify on resolve
179
- - **`get_reputation(agent?)` / `suggest_task()`**agent reputation tracking (auto-detects strengths), task suggestions based on skills
180
- - **Auto-reputation tracking** — global hook tracks every action (messages, tasks, reviews, decisions, KB writes) without manual calls
181
-
182
- ### Fixed
183
- - **Monitor screens stay red** when agent stops listening persistent color state instead of 300ms flash
184
- - **"NOT LISTENING" warning** shown prominently on desk monitor canvas
185
- - **Status color logic** green = listening, red = active but not listening, yellow = sleeping, dim = dead
186
-
187
- ## [3.6.2] - 2026-03-16
188
-
189
- ### Added Message Awareness System
190
- - **Sender gets busy status** — `send_message` and `broadcast` tell you when recipients are working (not listening) so you know messages are queued
191
- - **Pending message nudge** — every non-listen tool call checks for unread messages and tells the agent to call `listen_group()` soon
192
- - **Message age tracking** — `listen_group` shows `age_seconds` per message and `delayed: true` flag for messages older than 30s
193
- - **Agent status in batch** `listen_group` returns `agents_status` map showing who is `listening` vs `working`
194
- - **listen_group retry** timeout now returns `retry: true` with explicit instruction to call again immediately
195
- - **next_action field** — successful `listen_group` response tells agent to call `listen_group()` again after responding
196
- - **Ctrl key removed from camera** — no longer moves camera down (Q/E only)
197
-
198
- ### Added — 3D World: Campus Environment & Navigation
199
- - **Campus environment** — new outdoor environment option with buildings, paths, green spaces
200
- - **Navigation system** — pathfinding for agents to walk around obstacles instead of through walls
201
- - **Door animations** manager office door slides open when agents approach, closes when they leave
202
- - **Roof visibility** — roof hides when camera is above ceiling height
203
-
204
- ## [3.6.1] - 2026-03-16
205
-
206
- ### Fixed
207
- - **3D Hub black screen on page load** — the office module loads asynchronously, but the initial `switchView('office')` fired before `office3dStart` was defined. Added auto-start at end of module so the 3D Hub loads immediately on refresh.
208
-
209
- ## [3.6.0] - 2026-03-16
210
-
211
- ### AddedManaged Conversation Mode
212
-
213
- - **`set_conversation_mode("managed")`** — structured turn-taking for 3+ agent teams, prevents broadcast storms
214
- - **`claim_manager()`**claim the manager role (first caller wins, auto-election fallback)
215
- - **`yield_floor(to, prompt?)`** — manager-only: give an agent permission to speak (directed, round-robin `__open__`, or close `__close__`)
216
- - **`set_phase(phase)`** — manager-only: move team through discussion → planning → execution → review with auto-instructions to all agents
217
- - **Floor enforcement** — `send_message`, `broadcast`, `handoff`, and `share_file` all block non-floor-holders with actionable error messages
218
- - **Auto-advance turns** floor returns to manager after directed responses; round-robin advances to next alive agent automatically
219
- - **Manager disconnect recovery** — heartbeat detects dead manager within 10-30s, notifies all agents to re-elect
220
- - **Dead turn-holder detection** heartbeat detects dead agents holding the floor and resets it
221
- - **Managed mode in `listen_group()`** — returns `managed_context`, `should_respond`, and `instructions` to guide agent behavior
222
- - **`managed` template** 4-agent team (Manager, Designer, Coder, Tester) with structured prompts
223
- - **`managed-team` conversation template** dashboard-launchable version
224
- - **Dashboard Docs tab** — in-dashboard documentation with full tool reference, managed mode guide, architecture, version history
225
- - **Dashboard managed mode badge** header shows current phase and floor status when managed mode is active
226
-
227
- ### Added — 3D World Improvements
228
-
229
- - **Spectator camera** free-fly WASD + mouse camera replacing OrbitControls, no distance limits, Shift for fast movement, Q/E up/down
230
- - **6 new hairstyles** curly, afro, bun, braids, mohawk, wavy
231
- - **6 new eye styles** surprised, angry, happy, wink, confident, tired
232
- - **5 new mouth styles** grin, frown, smirk, tongue, whistle
233
- - **6 outfit types** — hoodie, suit, dress, lab coat, vest, jacket with color customization
234
- - **3 body types** — default, stocky, slim (scale multipliers on torso/legs/arms)
235
- - **5 gesture animations** wave, think, point, celebrate, stretch with idle gesture system
236
- - **New furniture** bookshelf (random colored books), wall TV (animated dashboard with agent stats, scrolling ticker, clock), arcade machine (cabinet + screen + joystick + buttons), floor lamp (warm point light), area rug
237
- - **Agent behavior** realistic conversation distance (1.8m), listener turns toward speaker, broadcast triggers wave gesture, task completion triggers celebrate
238
- - **3D Hub** — renamed from "Office", now default tab on page load
239
- - **Speed slider** — camera speed control in toolbar (1-20)
240
-
241
- ### Added 3D Virtual Office (v1 foundation from previous session)
242
-
243
- - **Modular 3D engine** — 14 ES modules under `office/`
244
- - **Expanded office** 28x16 floor with right wing, dividing wall, LOUNGE archway
245
- - **Dressing room** mirror, raised platform, privacy partitions, coat hooks
246
- - **Rest area** beanbags, circular rug, side table, warm ambient lighting
247
- - **Click-to-command** — Dressing Room, Go Rest, Back to Work, Edit Profile
248
- - **Character designer** — 5-tab panel with live 3D rotating preview
249
- - **Accessory system** glasses, headwear, neckwear with color customization
250
- - **Mod system infrastructure** GLB/GLTF pipeline with validation
251
-
252
- ### Security
253
- - **Config file lock** `config.json` read-modify-write operations now use file-based locking (same pattern as `agents.json`)
254
- - **Reserved name blocklist** — `__system__`, `__all__`, `__open__`, `__close__`, `system` cannot be registered as agent names
255
- - **Mode change protection** — only the manager can switch away from managed mode
256
- - **Floor enforcement on all message paths** — `handoff` and `share_file` now enforce managed mode floor control
257
- - **Branch-aware system messages** — floor/phase notifications sent to recipient's branch, not sender's
258
- - **Phase history cap** — limited to 50 entries to prevent config.json bloat
259
- - `/office/*` and `/mods/*` static routes with path traversal protection
260
- - Mod file type allowlist blocks all executable formats
261
- - GLB magic bytes validation (server + client)
262
-
263
- ### Removed
264
- - ~1,100 lines of dead 2D isometric office code
265
-
266
- ## [3.5.0] - 2026-03-15
267
-
268
- ### AddedGroup Conversation Mode
269
- - **`set_conversation_mode("group")`** — enables free multi-agent collaboration with auto-broadcast
270
- - **`listen_group()`**batch message receiver with random stagger (1-3s) to prevent simultaneous responses
271
- - Returns ALL unconsumed messages + last 20 messages of context + hints about silent agents
272
- - Auto-broadcast in group mode: every message is shared with all agents automatically
273
- - Cooldown enforcement: agents must wait 3s between sends to maintain conversation flow
274
- - Cascade prevention: broadcast copies don't trigger further broadcasts
275
- - MCP tools: 27 → 29
276
-
277
- ### AddedDashboard Features
278
- - **Notification panel** bell icon with badge count, dropdown event feed (agent online/offline, listening status changes)
279
- - **Agent leaderboard**performance scoring (0-100) with responsiveness, activity, reliability, collaboration dimensions
280
- - **Cross-project search** — "All Projects" toggle in search bar, searches across all registered projects
281
- - **Animated replay export** — Export conversation as self-playing HTML file with typing animations and play/pause controls
282
- - **Ollama integration** — `npx let-them-talk init --ollama` auto-detects Ollama, creates bridge script for local models
283
-
284
- ### Fixed PID & Registration Integrity
285
- - Registration file locking with try/finally (prevents race conditions when multiple agents register simultaneously)
286
- - PID stale detection uses `last_activity` with 30s threshold (prevents false "alive" from Windows PID reuse)
287
- - Lock file cleaned up on process exit
288
- - Dashboard inject/nudge snapshots project context at click time (prevents wrong-project race)
289
-
290
- ### Security
291
- - `toolHandoff` and workflow auto-handoff now check `canSendTo` permissions
292
- - `lastSentAt` updated in `toolBroadcast` (prevents cooldown bypass)
293
- - `config.json` added to both server and dashboard reset cleanup
294
- - Auto-broadcast respects `canSendTo` per recipient
295
-
296
- ## [3.4.4] - 2026-03-15
297
-
298
- ### Fixed
299
- - Add project now accepts any existing directory (removed requirement for package.json or .git)
300
- - Init safely backs up corrupted .mcp.json and settings.json before overwriting
301
-
302
- ### Changed
303
- - Removed plugin references from website and docs
304
- - Website updated with security features (LAN auth token, CSRF, CSP)
305
-
306
- ## [3.4.3] - 2026-03-15
307
-
308
- ### Removed — Plugin System
309
- - Removed the entire plugin system (`vm.runInNewContext` sandbox, plugin CLI commands, dashboard plugin UI)
310
- - **Why:** Plugins were an unnecessary attack surface. Node.js `vm` is not a security sandbox — plugins could escape and execute arbitrary OS commands. CLI terminals (Claude Code, Gemini, Codex) have their own extension systems, making our plugins redundant.
311
- - `npx let-them-talk plugin` now shows a deprecation notice
312
- - MCP tools reduced from 27 + plugins to 27 (all core tools remain)
313
- - ~200 lines of code removed from server.js, cli.js, dashboard.js, dashboard.html
314
-
315
- ## [3.4.2] - 2026-03-15
316
-
317
- ### SecurityCSRF Protection
318
- - Required `X-LTT-Request` custom header on all POST/PUT/DELETE requests
319
- - `lttFetch` wrapper in dashboard automatically includes the header
320
- - Malicious cross-origin pages cannot set custom headers without CORS preflight approval
321
- - Removed wildcard `Access-Control-Allow-Origin: *` in LAN mode now uses explicit trusted origins only
322
- - Empty Origin/Referer no longer auto-trusted requires custom header as minimum protection
323
-
324
- ### SecurityLAN Auth Token
325
- - Auto-generated 32-char hex token when LAN mode is enabled
326
- - Token required for all non-localhost requests (via `?token=` query param or `X-LTT-Token` header)
327
- - Token included in QR code URL phone scans and it just works
328
- - Token displayed in phone access modal with explanation
329
- - New token generated each time LAN mode is toggled on
330
- - Token persists across server restarts via `.lan-token` file
331
- - Localhost access never requires a token
332
-
333
- ### SecurityContent Security Policy
334
- - CSP header added to dashboard HTML response
335
- - `script-src 'unsafe-inline'` for inline handlers, blocks `eval()` and external scripts
336
- - `connect-src 'self'` restricts API calls to same origin
337
- - `font-src`, `style-src`, `img-src` scoped to required sources only
338
-
339
- ### Fixed
340
- - CSRF brace imbalance that trapped GET handlers inside POST-only block
341
- - LAN token not forwarded from phone URL to API calls and SSE
342
- - Redundant nested origin check collapsed to single condition
343
-
344
- ## [3.4.1] - 2026-03-15
345
-
346
- ### Added
347
- - **File-level mutex** — in-memory promise queue per file for serializing edit/delete operations
348
- - **Agent permissions enforcement** — `canSendTo()` checks in `send_message` and `broadcast`, `can_read` filtering in `get_history` and message delivery
349
- - **Read receipts** — auto-recorded when agents consume messages, visible as agent-initial dots under messages in dashboard
350
-
351
- ### Security
352
- - HTTP 500 responses now return generic error instead of raw `err.message` (prevents filesystem path leaks)
353
- - `/api/discover` changed from GET to POST (now under CSRF protection)
354
- - `workspace_read`/`workspace_list` validate agent name parameter with regex
355
- - `get_history` filters results by agent's `can_read` permissions
356
- - `read_receipts.json` and `permissions.json` added to both MCP and dashboard reset cleanup
357
- - Dashboard workspace API regex aligned with server (`[a-zA-Z0-9_-]`)
358
-
359
- ### Fixed
360
- - `toolWaitForReply` missing `markAsRead` calls (read receipts not recorded)
361
- - `toolBroadcast` bypassing permission checks entirely
362
- - `toolReset` not cleaning up `permissions.json` and `read_receipts.json`
363
-
364
- ## [3.4.0] - 2026-03-15
365
-
366
- ### Added Dashboard Features
367
- - **Stats Tab** — per-agent message counts, avg response time, peak hours, 24-hour activity chart, conversation velocity. Keyboard shortcut `6`.
368
- - **Compact View** toggle button in search bar. Hides avatars, inlines timestamps, reduces padding. Persists to localStorage.
369
- - **Message Edit** edit any message via hover action. Full edit history tracked, "edited" badge displayed.
370
- - **Message Delete** delete dashboard/system messages with confirmation dialog.
371
- - **Copy Message** clipboard button on message hover to copy raw content.
372
- - **JSON Export** new export format alongside HTML and Markdown.
373
- - **Kanban Drag-and-Drop** drag task cards between columns (pending/in_progress/done/blocked).
374
- - **SSE Auto-Reconnect** exponential backoff (1s→30s), yellow "Reconnecting..." indicator, polling fallback.
375
- - **Conversation Templates** 4 built-in multi-agent workflow templates (Code Review Pipeline, Debug Squad, Feature Development, Research & Write) in the Launch tab with copyable agent prompts.
376
-
377
- ### Added — API Endpoints
378
- - `PUT /api/message`edit a message (with edit history)
379
- - `DELETE /api/message`delete a message (dashboard/system only)
380
- - `GET /api/conversation-templates`list conversation templates
381
- - `POST /api/conversation-templates/launch` get template agent prompts
382
- - `GET /api/stats`analytics data (per-agent stats, velocity, hourly distribution)
383
- - `GET/POST /api/permissions` — agent permission management
384
-
385
- ### Added CLI Commands
386
- - `npx let-them-talk msg <agent> <text>` send a message from CLI
387
- - `npx let-them-talk status` show active agents and message counts
388
-
389
- ### Changed — Premium UI Redesign
390
- - Deeper dark palette with blue undertones (#080b12 background)
391
- - Inter font from Google Fonts with anti-aliased rendering
392
- - Glassmorphism header with backdrop-filter blur
393
- - Gradient accent system (blue→purple) on buttons, active tabs, send button
394
- - Refined shadow system (sm/md/lg) with colored glows
395
- - Focus rings on all inputs
396
- - Smoother transitions (0.2-0.25s) with lift effects on hover
397
- - Glass effects on modals and popups
398
- - Inset shadows on code blocks
399
- - Thinner scrollbars with transparent tracks
400
-
401
- ### Fixed
402
- - Task notes crash when `notes` array undefined
403
- - Message edit always rewrites messages.jsonl regardless of match
404
- - Permissions API accepted arbitrary fields (now whitelisted)
405
- - Task status accepted any string (now validated against whitelist)
406
- - Reset button ignored active project in multi-project mode
407
- - Edit modal missing error handler on network failure
408
- - CLI msg command accepted invalid agent names
409
- - Copy-to-clipboard double-escaped HTML entities in template prompts
410
- - Duplicate deleteMessage function shadowing
411
-
412
- ## [3.3.2] - 2026-03-14
413
-
414
- ### Changed
415
- - License changed from MIT to Business Source License 1.1 (BSL)
416
- - Added SECURITY.md with vulnerability disclosure policy
417
- - Added CHANGELOG.md to published npm package
418
- - Added .npmignore for cleaner package distribution
419
- - Version synced across all files (server, CLI, dashboard)
420
-
421
- ## [3.0.0] - 2026-03-14
422
-
423
- ### Added — Agent Profiles
424
- - New tool: `update_profile` (display_name, avatar, bio, role)
425
- - 12 built-in SVG robot avatar icons with hash-based defaults
426
- - Profiles auto-created on register, persist across restarts
427
- - Profile data shown in dashboard (avatars, role badges, profile popup)
428
-
429
- ### Added Agent Workspaces
430
- - 3 new tools: `workspace_write`, `workspace_read`, `workspace_list`
431
- - Per-agent key-value storage (50 keys max, 100KB per value)
432
- - Agents can read anyone's workspace, write only their own
433
- - Dashboard "Workspaces" tab with collapsible accordion UI
434
-
435
- ### Added Workflow Automation
436
- - 3 new tools: `create_workflow`, `advance_workflow`, `workflow_status`
437
- - Multi-step pipelines with auto-handoff to step assignees
438
- - Dashboard "Workflows" tab with horizontal pipeline visualization
439
- - Dashboard can advance/skip workflow steps
440
-
441
- ### Added Conversation Branching
442
- - 3 new tools: `fork_conversation`, `switch_branch`, `list_branches`
443
- - Fork at any message point with isolated branch history
444
- - All message tools branch-aware (backward compatible — main branch uses existing files)
445
- - Branch tabs in dashboard
446
-
447
- ### AddedPlugin System
448
- - Dynamic tool loading from `plugins/*.js` files
449
- - Sandboxed execution with 30s timeout
450
- - CLI: `npx let-them-talk plugin add/list/remove/enable/disable`
451
- - Dashboard plugin cards with enable/disable toggles
452
-
453
- ### Changed
454
- - MCP tools: 17 27 + dynamic plugins
455
- - Dashboard tabs: 2 4 (Messages, Tasks, Workspaces, Workflows)
456
- - Branch-aware history API (`?branch=` query param)
457
- - Version bump across all files (server, dashboard, CLI, package.json)
458
-
459
- ## [2.5.0] - 2026-03-14
460
-
461
- ### Added
462
- - Task management system: `create_task`, `update_task`, `list_tasks` tools
463
- - Kanban board in dashboard (Messages/Tasks toggle)
464
- - Agent stats panel (sent/received/avg response time per agent)
465
- - Shareable HTML export (/api/export endpoint)
466
- - Export dropdown (HTML + Markdown formats)
467
- - Conversation bookmarks (star messages, localStorage)
468
- - Sound notification toggle (Web Audio API)
469
- - Typing indicator for processing agents
470
- - Connection quality display (SSE latency)
471
- - Date separators between message groups
472
- - Message grouping for consecutive same-sender messages
473
- - Project auto-discover (scan nearby folders)
474
- - Copy-to-clipboard prompts in onboarding
475
- - Dynamic tab title with message count
476
- - Dashboard footer with version
477
-
478
- ### Security
479
- - Path traversal fix in `share_file` (restricted to project dir)
480
- - Path traversal fix in `?project=` param (validate against registered projects)
481
- - 1MB message size limit on send/broadcast/handoff
482
- - 1MB request body limit on dashboard POST endpoints
483
- - XSS fix in HTML export (escape agent names)
484
- - CORS restricted to localhost only (was wildcard)
485
- - Dashboard binds to 127.0.0.1 only (was 0.0.0.0)
486
- - Registration guard on `reset` tool
487
- - Removed absolute file paths from share_file responses
488
-
489
- ## [2.3.0] - 2026-03-14
490
-
491
- ### Added
492
- - `handoff` tool for structured work delegation
493
- - `share_file` tool for sending file contents between agents
494
- - `broadcast` tool for messaging all agents at once
495
- - `get_summary` tool for conversation recaps
496
- - Server-Sent Events for real-time dashboard updates
497
- - `fs.watch()` on data directory with debounced SSE push
498
- - Graceful SSE fallback to polling
499
- - Handoff message rendering (purple banner)
500
- - File share message rendering (file icon + size)
501
-
502
- ## [2.1.0] - 2026-03-14
503
-
504
- ### Added
505
- - Multi-agent support (any name, not just A/B)
506
- - `list_agents` tool with alive/dead status
507
- - `listen` tool (blocks indefinitely, never times out)
508
- - Conversation threading (`reply_to` + auto `thread_id`)
509
- - Message acknowledgments (`ack_message` tool)
510
- - Heartbeat system (10s interval, `last_activity` tracking)
511
- - Agent status: active/sleeping/dead with idle time
512
- - Listening status tracking (`listening_since`)
513
- - Auto-compact messages.jsonl when >500 lines
514
- - Auto-archive conversations before reset
515
- - Context hints when conversation exceeds 50 messages
516
- - Dead recipient warnings in `send_message`
517
- - Message sequence numbers for ordering
518
- - `pending_count` and `agents_online` in delivery responses
519
- - 4 agent templates: pair, team, review, debate
520
- - CLI: `npx let-them-talk templates` command
521
- - CLI: `--template` flag for guided setup
522
- - Multi-CLI support: Claude Code, Gemini CLI, Codex CLI
523
- - `AGENT_BRIDGE_DATA_DIR` env var in MCP config
524
-
525
- ### Fixed
526
- - Heartbeat timer `.unref()` to prevent zombie processes
527
- - Process exit cleanup (deregister agent on exit)
528
- - Re-registration cleanup (old name removed)
529
- - Stale byte offset recovery on file truncation
530
-
531
- ## [2.0.0] - 2026-03-14
532
-
533
- ### Added
534
- - Initial release
535
- - MCP server with stdio transport
536
- - 6 tools: register, send_message, wait_for_reply, check_messages, get_history, reset
537
- - Web dashboard with real-time monitoring
538
- - Message injection from dashboard
539
- - Dark theme UI with markdown rendering
540
- - `.mcp.json` project-level configuration
1
+ # Changelog
2
+
3
+ ## [5.1.0] - 2026-03-19
4
+
5
+ ### Major — True Autonomy Engine + Team Intelligence + Scale to 100
6
+
7
+ Built by a 4-agent team (Backend, Protocol, Tester, Coordinator) + Advisor agent, working autonomously.
8
+
9
+ ### Added — Autonomy Engine (v5.0)
10
+ - **get_work** — 9-level priority waterfall: workflow step > messages > unclaimed tasks > help requests > reviews > blocked tasks > 30s listen > prep work > idle
11
+ - **verify_and_advance** — confidence-gated auto-advancement (>=70 auto, 40-69 flag, <40 help)
12
+ - **start_plan** — one-click autonomous plan launch with parallel step activation
13
+ - **retry_with_improvement** — 3-attempt retry with KB skill accumulation, team escalation
14
+ - **Parallel workflow steps** dependency graph with `depends_on`, `findReadySteps` resolver
15
+ - **Autonomous mode** — proactive work loop guide, tiered cooldowns (0ms handoffs), 30s listen cap, relaxed send limits
16
+
17
+ ### AddedTeam Intelligence
18
+ - **Auto-role assignment** — lead/quality/implementer/monitor/advisor roles based on team size
19
+ - **Quality Lead** — always-on checker with dedicated guide, review-retry loop, auto-approve after 2 rounds
20
+ - **Monitor Agent** — system health overseer at 10+ agents: idle detection, circular escalation detection, auto-intervention, failover
21
+ - **Advisor Agent** — strategic thinker at 5+ agents: reads all work, gives ideas, challenges assumptions
22
+ - **Self-continuation**agents never ask user, find next work automatically
23
+ - **Smart prompt distribution** — auto-generates workflows from natural language prompts
24
+
25
+ ### AddedAdvanced Autonomy (10 features)
26
+ - Task-level circuit breaker (blocked_permanent after 3 agent failures)
27
+ - Quality Lead instant failover (highest reputation auto-promoted)
28
+ - Context inheritance on escalation (full failure history)
29
+ - Agent circuit breaker (consecutive_rejections tracking, auto-demotion)
30
+ - Dynamic role fluidity (workload-based rebalancing)
31
+ - Skill-based task routing (agent affinity scoring)
32
+ - Work stealing (idle agents claim from busy agents)
33
+ - Checkpointing (resumable work via workspace snapshots)
34
+ - Retrospective learning (aggregate failure pattern analysis)
35
+ - Backpressure signal (queue depth warnings)
36
+
37
+ ### Added — Scale to 100 Agents
38
+ - Per-agent heartbeat files (zero write contention)
39
+ - Cooldown cap (3s max regardless of agent count, 0ms for handoffs)
40
+ - Byte-offset message reads (O(new_messages) not O(all))
41
+ - Exponential backoff on file locks (1ms-500ms, not 50ms busy-wait)
42
+ - isPidAlive cache (5s TTL, saves 10K syscalls/sec)
43
+ - SSE debounce (heartbeat files filtered, 2s debounce)
44
+ - Task keyword cache (30s TTL)
45
+ - Sticky roles (no churn on agent reconnect)
46
+ - Zero cooldown for channel messages + handoffs in autonomous mode
47
+
48
+ ### Added — Dashboard & CLI
49
+ - **Plan execution view** progress bar, step cards, confidence, controls (pause/stop/skip/reassign)
50
+ - **Monitor health panel** — agent health grid, intervention log, system metrics
51
+ - **`npx let-them-talk run "prompt" --agents N`** one-command autonomous execution
52
+ - **npm test** wires v5 test suite (158+ tests on every run)
53
+ - Updated conversation templates (autonomous format with depends_on)
54
+
55
+ ### Stats
56
+ - server.js: 6,200+ lines, 62+ tools
57
+ - 175+ automated tests, 0 fail
58
+ - 5 conversation templates (autonomous format)
59
+ - Built in ~2 hours by autonomous agent team
60
+
61
+ ## [4.3.0] - 2026-03-17
62
+
63
+ ### Major — 3D Hub Game World, World Builder, Jukebox
64
+
65
+ Built by a 5-agent team (Architect, Builder, Tester, Optimizer, Protocol) working in parallel.
66
+
67
+ ### Added3D Hub Game Features
68
+ - **World Builder** — Press B in player mode to open builder panel. 16 placeable assets across 5 categories (structural, furniture, decor, tech, lighting). Grid snap, ghost preview, R to rotate, right-click delete, Ctrl+Z undo. Draggable panel, works in fullscreen.
69
+ - **Jukebox** — Wurlitzer 1015-style jukebox in bar area with neon glow animation. Press E to interact. 4 playlist selector with YouTube popup player. Music persists while exploring.
70
+ - **Minimap** — 140px radar overlay showing agent positions (color-coded by status) and player location. Only visible in fullscreen mode.
71
+ - **Controls HUD** — Press H to toggle keybind reference panel. Auto-shows for 4 seconds on world entry.
72
+ - **Fullscreen** — Dashboard fullscreen button now fullscreens only the 3D Hub (game mode), not the entire page.
73
+
74
+ ### AddedCharacter Intelligence
75
+ - **Emotion system** — 11 emotion presets (happy, frustrated, thinking, excited, surprised, etc.) with auto-triggers from message content. Temporary face expression changes with auto-revert.
76
+ - **Social visits** Idle agents randomly walk to other agents' desks to chat (max 2 concurrent walks).
77
+ - **Glance reactions** — Sitting agents turn heads toward speakers when messages are sent.
78
+ - **Head nods** — Periodic nod animation when being visited by another agent.
79
+ - **Auto coffee break** — Sleeping agents walk to rest area, return to desk when active again.
80
+ - **Non-blocking input overlay** — Replaced browser prompt() dialogs with styled HTML overlay for click commands.
81
+
82
+ ### Added — Dashboard
83
+ - **Respawn button** One-click respawn for dead agents. Generates resume prompt from recovery snapshot + profile + tasks + recent history.
84
+ - **Respawn API** `GET /api/agents/:name/respawn-prompt` endpoint with full context generation.
85
+ - **World Builder API** `GET /api/world-layout` + `POST /api/world-save` for persistent world placements.
86
+ - **3D-only fullscreen** Fullscreen targets 3D container when on 3D Hub tab.
87
+
88
+ ### Fixed
89
+ - **Manager chair spawn** — Stand-up now places player in front of desk (toward door), preventing wall collision.
90
+ - **CSRF on 3D Hub** — Added X-LTT-Request header to all office module POST requests (builder save, command menu actions).
91
+ - **Respawn endpoint validation** — Agent name validated (alphanumeric, max 20 chars) to prevent path traversal.
92
+ - **Builder lazy-load** — Dynamic import() with silent failure prevents builder issues from breaking 3D Hub.
93
+ - **Jukebox popup orphan** Module-scoped reference survives overlay dismiss/reopen cycles.
94
+ - **Builder drag listener leak** Stored refs removed in hidePanel().
95
+ - **Jukebox prompt cleanup** — dismissJukebox() called in office3dStop().
96
+
97
+ ### Security
98
+ - npm audit: 0 vulnerabilities
99
+ - CSRF protection verified on all mutating endpoints
100
+ - Input validation on all user-facing API parameters
101
+ - No hardcoded secrets or sensitive data in shipped package
102
+
103
+ ## [4.2.0] - 2026-03-17
104
+
105
+ ### MajorTeam Intelligence, Dashboard Upgrade, Performance
106
+
107
+ Built by a 4-agent team (Architect, Tester, Protocol, Builder) working in parallel.
108
+
109
+ ### AddedTeam Automation
110
+ - **Auto-escalation** — blocked tasks auto-broadcast `[ESCALATION]` to team after 5 minutes. File-based dedup via `task.escalated_at` field (cross-process safe). Clears on unblock.
111
+ - **Stand-up meetings** — config-driven periodic team check-ins (`standup_interval_hours` in config.json). File-based dedup, 5+ agent gate. Broadcasts task summary with in-progress/blocked/done counts.
112
+ - **Quality gates** — `update_task(done)` auto-broadcasts `[REVIEW NEEDED]` (from v4.1.0, now with auto-escalation integration).
113
+
114
+ ### AddedAgent Intelligence
115
+ - **Workload metrics** — reputation tracks `task_times[]` (completion seconds), leaderboard shows `avg_task_time_sec` per agent.
116
+ - **Smarter suggest_task** — caps at 3 in-progress tasks ("finish first"), suggests blocked tasks when no pending ones, workload-aware.
117
+ - **KB hints in listen_group** — batch messages checked against KB keys, returns `kb_hints` with relevant entries.
118
+ - **Thread reply context** `listen_group` includes `_reply_context` preview of parent message for threaded replies.
119
+ - **Decision overlap hints** — `send_message` checks content against logged decisions, returns `_decision_hint` to prevent re-debating.
120
+ - **Auto-status board** `update_task` auto-writes `_status` to agent workspace ("Working on: X"). `list_agents` includes `current_status` field.
121
+
122
+ ### Added Dashboard
123
+ - **Agent intent display** dashboard shows what each agent is currently working on (from workspace `_status`)
124
+ - **Channel badges** messages show colored `#channel` badges
125
+ - **Channel filter bar** horizontal scrollable tabs to filter messages by channel
126
+ - **Channel history merging** `/api/history` merges channel-specific + general history files
127
+ - **`/api/channels` endpoint** — channel list with member counts for dashboard
128
+ - **`/api/decisions` endpoint** decision log display in dashboard
129
+ - **Decision log UI** chronological cards with topic, decision, reasoning, author
130
+
131
+ ### ImprovedPerformance & Safety
132
+ - **Escalation dedup fix** — replaced in-memory `_escalatedTasks` Set with file-based `task.escalated_at` field (cross-process safe for 10 agents)
133
+ - **Dashboard current_status API** — `/api/agents` includes workspace `_status` for agent intent board
134
+
135
+ ## [4.1.0] - 2026-03-17
136
+
137
+ ### Added Agent Reliability & Intelligence
138
+
139
+ - **Auto-recovery (crash resume)** — when an agent's process dies, the server snapshots its state (active tasks, locked files, channels, workspace keys, last 5 messages) to `recovery-{name}.json`. When a replacement registers with the same name, the snapshot is included in the register response with instructions to resume, not restart. 1-hour TTL, auto-deletes after load.
140
+ - **Quality gates** `update_task(id, "done")` auto-broadcasts `[REVIEW NEEDED]` to all alive agents. Teams get automatic review cycles without manually calling `request_review()`.
141
+ - **Decision overlap hints** `send_message` in group mode checks content against existing logged decisions. Returns `_decision_hint` if a related decision exists, preventing teams from re-debating settled topics.
142
+ - **Enhanced `check_messages`** — now returns rich summary: `senders`, `addressed_to_you`, `preview`, `urgency` level. The proactive counterpart to the enhanced nudge.
143
+
144
+ ### Fixed
145
+ - **Recovery lock notes** snapshot correctly labels locked files as `locked_files_released` with note that locks were auto-released.
146
+
147
+ ## [4.0.0] - 2026-03-17
148
+
149
+ ### Major Release 10-Agent Free Group Mode
150
+
151
+ Massive scaling overhaul designed, implemented, and audited by a 3-agent team (Architect, Tester, Protocol). 12 changes, 3 bugs caught during collaborative code review.
152
+
153
+ ### Added — Scaling (4 features)
154
+ - **Scaled context** — `listen_group` context window scales with team size: `min(50, max(20, agentCount * 5))`. 3 agents = 20 messages, 10 agents = 50.
155
+ - **Send-after-listen enforcement** — agents must call `listen_group()` between sends. Prevents message storms. Addressed agents get 2 sends per cycle, others get 1.
156
+ - **Response budget** — max 2 unaddressed sends per 60 seconds. Time-based reset. Hint (not error) when depleted.
157
+ - **Smart context with priority partitions** — Bucket A (addressed messages, sacred, always included), Bucket B (channel messages, capped), Bucket C (chronological, fills remaining). Total guaranteed <= contextSize.
158
+
159
+ ### Added — Agent Awareness (3 features)
160
+ - **Enhanced nudge** every non-listen tool response now includes sender names, addressed count, and message preview: `"URGENT: 3 messages waiting (2 addressed to you): 2 from Architect, 1 from Protocol. Latest: 'Need your review...'"`
161
+ - **Idle detection** — `listen_group()` returns `idle: true` after 60s with no messages, with proactive `work_suggestions`, task suggestions, and instructions. Agents auto-find work instead of blocking forever.
162
+ - **Enhanced `check_messages`**now returns rich summary: `senders`, `addressed_to_you`, `preview`, `urgency` level. The proactive counterpart to the passive nudge.
163
+
164
+ ### AddedOrganization
165
+ - **Task-channel auto-binding** — with 5+ agents in group mode, `create_task` auto-creates `#task-{id}` channels. Assignees auto-join on claim. Channels auto-delete on task completion. Naturally splits 10-agent noise into focused sub-teams.
166
+
167
+ ### Improved — Performance
168
+ - **Cached reads**`getAgents()` (1.5s TTL), `getChannelsData()` (3s TTL), `getTasks()` (2s TTL) with write-through invalidation. Eliminates ~70% redundant disk I/O.
169
+ - **Compact JSON writes** — removed pretty-print (`null, 2`) from all internal JSON writes. 2-3x less I/O overhead.
170
+ - **Optimized agent status** — removed O(N) `getUnconsumedMessages` scan per agent in `listen_group` status computation.
171
+ - **Dashboard SSE race fix** `Array.from()` before Set iteration prevents skipped clients during concurrent connect/disconnect.
172
+ - **Dashboard SSE heartbeat** 30s keepalive prevents dead connection accumulation and proxy timeouts.
173
+ - **Dashboard file watcher cleanup** — old watcher properly closed on LAN toggle, prevents memory leaks.
174
+ - **Dashboard watcher filter** — only triggers on `.json`/`.jsonl` files, ignores lock files and temp files.
175
+
176
+ ### AddedSafety
177
+ - **Collection caps** — tasks (1000), workflows (500), votes (500), reviews (500), dependencies (1000), branches (100), channels (100). Prevents DoS via unbounded growth.
178
+ - **Input type validation**`reply_to` and `channel` parameters type-checked as strings in `send_message`.
179
+ - **Channel name validation fix** error message corrected from "1-30 chars" to "1-20 chars" to match `sanitizeName()`.
180
+
181
+ ## [3.10.0] - 2026-03-17
182
+
183
+ ### AddedDynamic Guide with Progressive Disclosure
184
+ - **`buildGuide()`** replaces hardcoded guide in register() and get_guide(). Returns only rules relevant to the current system state.
185
+ - **Tiered rules:** Tier 0 (listen after every action), Tier 1 (core behavior), Tier 2 (group mode features), Tier 2b (channels), Tier 3 (large teams 5+)
186
+ - **User-customizable:** `.agent-bridge/guide.md` for project-specific rules
187
+ - 2-agent direct mode = 5 rules. 10-agent group with channels = 12 rules.
188
+
189
+ ## [3.9.1] - 2026-03-17
190
+
191
+ ### Added
192
+ - **Per-channel cooldown** — uses channel member count instead of total agents. 2-member #backend = 1s, regardless of 10 in #general
193
+ - **`cooldown_applied_ms`** diagnostic field in send_message response showing exact cooldown applied
194
+ - **`channel` field** in send_message response when sending to a channel
195
+
196
+ ### Fixed
197
+ - Task race condition — `update_task` rejects claiming tasks already in_progress by another agent
198
+
199
+ ## [3.9.0] - 2026-03-17
200
+
201
+ ### AddedChannels & Split Cooldown
202
+
203
+ - **`join_channel(name, description?)`** — create or join a channel for sub-team communication
204
+ - **`leave_channel(name)`** leave a channel (can't leave #general, empty channels auto-delete)
205
+ - **`list_channels()`** — list all channels with members, message counts, membership status
206
+ - **`send_message` channel parameter** — send to specific channel (`channel-{name}-messages.jsonl`)
207
+ - **`listen_group` reads all subscribed channels** — merges messages from general + channel files, sorted by timestamp
208
+ - **Channel validation** — sending to nonexistent channel returns error with hint to create it
209
+ - **Ghost member cleanup** — heartbeat auto-removes dead agents from channel membership
210
+ - **#general auto-created** — `members: ["*"]` (everyone), uses existing messages.jsonl for backward compat
211
+ - **Split cooldown (reply_to-based)** fast lane (500ms) for addressed agents, slow lane (max 2000, N*1000) for unaddressed, incentivizes threading
212
+
213
+ ### Fixed
214
+ - Task race condition `update_task` now rejects claiming a task already in_progress by another agent, auto-assigns on claim
215
+
216
+ ## [3.8.0] - 2026-03-16
217
+
218
+ ### ChangedGroup Conversation Overhaul
219
+
220
+ Redesigned from the ground up based on 3-agent collaborative testing and design session.
221
+
222
+ **Single-write group messages (O(1) instead of O(N)):**
223
+ - `send_message` in group mode now writes ONE message with `to: "__group__"` instead of N copies per agent
224
+ - `broadcast` in group mode also uses single `__group__` write
225
+ - Old O(N) auto-broadcast loop completely removed
226
+ - Result: with 6 agents, a message now creates 1 write instead of 6. A broadcast round that previously created 30 writes now creates 6.
227
+
228
+ **`addressed_to` field + `should_respond` hints:**
229
+ - `send_message(to="AgentName")` in group mode stores `addressed_to: ["AgentName"]` on the `__group__` message
230
+ - `listen_group` response includes `addressed_to_you: true/false` and `should_respond: true/false` per message
231
+ - Hint-based, not enforcedagents can still respond when they have valuable input
232
+ - No `addressed_to` = everyone should respond (backwards compatible)
233
+
234
+ **Adaptive cooldown:**
235
+ - Cooldown now scales with team size: `max(500ms, N * 500ms)` where N = alive agent count
236
+ - 2 agents = 1s, 3 agents = 1.5s, 6 agents = 3s, 10 agents = 5s
237
+ - Explicit `group_cooldown` config still respected if set
238
+
239
+ **Shorter stagger:**
240
+ - Deterministic stagger reduced from 0-3000ms to 500-1500ms
241
+ - Same agent always gets the same delay (hash-based)
242
+
243
+ **Alive-only garbage collection:**
244
+ - `autoCompact` for `__group__` messages only checks alive agents for consumed tracking
245
+ - Dead agents no longer block message compaction forever
246
+ - Dead agents catch up via `get_compressed_history()` which reads history.jsonl (never compacted)
247
+
248
+ **Own-message filtering:**
249
+ - Agents no longer see their own `__group__` messages in `listen_group` batches
250
+ - Own messages are auto-consumed on sight
251
+ - Own messages still visible in `context` array for reference
252
+
253
+ ### Added3D World: Player Mode & Improvements
254
+ - **Player character** — users can spawn as a controllable character in the 3D Hub
255
+ - **Spectator camera improvements** — refined controls and speed
256
+ - **Environment updates** — campus environment refinements
257
+
258
+ ## [3.7.0] - 2026-03-16
259
+
260
+ ### Added Agent Ecosystem (20 new tools, 52 total)
261
+
262
+ **Tier 1 — Critical Infrastructure:**
263
+ - **`get_briefing()`** — full project onboarding in one call: agents, tasks, decisions, KB, locked files, progress, project file tree
264
+ - **`lock_file(path)` / `unlock_file(path?)`** exclusive file editing with auto-release on agent death
265
+ - **`log_decision(decision, reasoning?, topic?)` / `get_decisions(topic?)`** — persistent decision log, prevents re-debating
266
+ - **Agent recovery on rejoin** — `register()` returns active tasks, workspace keys, recent messages for returning agents
267
+
268
+ **Tier 2Quality of Life:**
269
+ - **`kb_write(key, content)` / `kb_read(key?)` / `kb_list()`** — shared team knowledge base (any agent reads/writes)
270
+ - **Event hooks** auto-fires system messages on `agent_join`, `task_complete`, `all_tasks_done`, `dependency_met`
271
+ - **`update_progress(feature, percent, notes)` / `get_progress()`** feature-level progress tracking with overall %
272
+ - **`get_compressed_history()`** auto-compresses old messages into summary segments, keeps recent verbatim
273
+ - **`listen_group()` now blocks indefinitely** no more timeout, agents never drop out
274
+
275
+ **Tier 3 Advanced Collaboration:**
276
+ - **`call_vote(question, options)` / `cast_vote(vote_id, choice)` / `vote_status(vote_id?)`** — team voting with auto-resolve when all vote
277
+ - **`request_review(file, desc)` / `submit_review(review_id, status, feedback)`** code review pipeline with approve/changes_requested
278
+ - **`declare_dependency(task_id, depends_on)` / `check_dependencies(task_id?)`** task dependency tracking with auto-notify on resolve
279
+ - **`get_reputation(agent?)` / `suggest_task()`** agent reputation tracking (auto-detects strengths), task suggestions based on skills
280
+ - **Auto-reputation tracking** — global hook tracks every action (messages, tasks, reviews, decisions, KB writes) without manual calls
281
+
282
+ ### Fixed
283
+ - **Monitor screens stay red** when agent stops listening — persistent color state instead of 300ms flash
284
+ - **"NOT LISTENING" warning** shown prominently on desk monitor canvas
285
+ - **Status color logic** green = listening, red = active but not listening, yellow = sleeping, dim = dead
286
+
287
+ ## [3.6.2] - 2026-03-16
288
+
289
+ ### Added — Message Awareness System
290
+ - **Sender gets busy status** — `send_message` and `broadcast` tell you when recipients are working (not listening) so you know messages are queued
291
+ - **Pending message nudge** — every non-listen tool call checks for unread messages and tells the agent to call `listen_group()` soon
292
+ - **Message age tracking** — `listen_group` shows `age_seconds` per message and `delayed: true` flag for messages older than 30s
293
+ - **Agent status in batch** — `listen_group` returns `agents_status` map showing who is `listening` vs `working`
294
+ - **listen_group retry** — timeout now returns `retry: true` with explicit instruction to call again immediately
295
+ - **next_action field** — successful `listen_group` response tells agent to call `listen_group()` again after responding
296
+ - **Ctrl key removed from camera** — no longer moves camera down (Q/E only)
297
+
298
+ ### Added — 3D World: Campus Environment & Navigation
299
+ - **Campus environment** new outdoor environment option with buildings, paths, green spaces
300
+ - **Navigation system** pathfinding for agents to walk around obstacles instead of through walls
301
+ - **Door animations** — manager office door slides open when agents approach, closes when they leave
302
+ - **Roof visibility** — roof hides when camera is above ceiling height
303
+
304
+ ## [3.6.1] - 2026-03-16
305
+
306
+ ### Fixed
307
+ - **3D Hub black screen on page load** — the office module loads asynchronously, but the initial `switchView('office')` fired before `office3dStart` was defined. Added auto-start at end of module so the 3D Hub loads immediately on refresh.
308
+
309
+ ## [3.6.0] - 2026-03-16
310
+
311
+ ### Added Managed Conversation Mode
312
+
313
+ - **`set_conversation_mode("managed")`** structured turn-taking for 3+ agent teams, prevents broadcast storms
314
+ - **`claim_manager()`** — claim the manager role (first caller wins, auto-election fallback)
315
+ - **`yield_floor(to, prompt?)`** — manager-only: give an agent permission to speak (directed, round-robin `__open__`, or close `__close__`)
316
+ - **`set_phase(phase)`** — manager-only: move team through discussion → planning → execution → review with auto-instructions to all agents
317
+ - **Floor enforcement** `send_message`, `broadcast`, `handoff`, and `share_file` all block non-floor-holders with actionable error messages
318
+ - **Auto-advance turns** — floor returns to manager after directed responses; round-robin advances to next alive agent automatically
319
+ - **Manager disconnect recovery** heartbeat detects dead manager within 10-30s, notifies all agents to re-elect
320
+ - **Dead turn-holder detection** heartbeat detects dead agents holding the floor and resets it
321
+ - **Managed mode in `listen_group()`** returns `managed_context`, `should_respond`, and `instructions` to guide agent behavior
322
+ - **`managed` template** 4-agent team (Manager, Designer, Coder, Tester) with structured prompts
323
+ - **`managed-team` conversation template** — dashboard-launchable version
324
+ - **Dashboard Docs tab** in-dashboard documentation with full tool reference, managed mode guide, architecture, version history
325
+ - **Dashboard managed mode badge** — header shows current phase and floor status when managed mode is active
326
+
327
+ ### Added3D World Improvements
328
+
329
+ - **Spectator camera** free-fly WASD + mouse camera replacing OrbitControls, no distance limits, Shift for fast movement, Q/E up/down
330
+ - **6 new hairstyles** curly, afro, bun, braids, mohawk, wavy
331
+ - **6 new eye styles** surprised, angry, happy, wink, confident, tired
332
+ - **5 new mouth styles** — grin, frown, smirk, tongue, whistle
333
+ - **6 outfit types** hoodie, suit, dress, lab coat, vest, jacket with color customization
334
+ - **3 body types** default, stocky, slim (scale multipliers on torso/legs/arms)
335
+ - **5 gesture animations** wave, think, point, celebrate, stretch with idle gesture system
336
+ - **New furniture** bookshelf (random colored books), wall TV (animated dashboard with agent stats, scrolling ticker, clock), arcade machine (cabinet + screen + joystick + buttons), floor lamp (warm point light), area rug
337
+ - **Agent behavior** realistic conversation distance (1.8m), listener turns toward speaker, broadcast triggers wave gesture, task completion triggers celebrate
338
+ - **3D Hub** — renamed from "Office", now default tab on page load
339
+ - **Speed slider** — camera speed control in toolbar (1-20)
340
+
341
+ ### Added 3D Virtual Office (v1 foundation from previous session)
342
+
343
+ - **Modular 3D engine** — 14 ES modules under `office/`
344
+ - **Expanded office** — 28x16 floor with right wing, dividing wall, LOUNGE archway
345
+ - **Dressing room** — mirror, raised platform, privacy partitions, coat hooks
346
+ - **Rest area** — beanbags, circular rug, side table, warm ambient lighting
347
+ - **Click-to-command** — Dressing Room, Go Rest, Back to Work, Edit Profile
348
+ - **Character designer** — 5-tab panel with live 3D rotating preview
349
+ - **Accessory system** — glasses, headwear, neckwear with color customization
350
+ - **Mod system infrastructure** — GLB/GLTF pipeline with validation
351
+
352
+ ### Security
353
+ - **Config file lock** — `config.json` read-modify-write operations now use file-based locking (same pattern as `agents.json`)
354
+ - **Reserved name blocklist** — `__system__`, `__all__`, `__open__`, `__close__`, `system` cannot be registered as agent names
355
+ - **Mode change protection** only the manager can switch away from managed mode
356
+ - **Floor enforcement on all message paths** — `handoff` and `share_file` now enforce managed mode floor control
357
+ - **Branch-aware system messages** floor/phase notifications sent to recipient's branch, not sender's
358
+ - **Phase history cap** — limited to 50 entries to prevent config.json bloat
359
+ - `/office/*` and `/mods/*` static routes with path traversal protection
360
+ - Mod file type allowlist blocks all executable formats
361
+ - GLB magic bytes validation (server + client)
362
+
363
+ ### Removed
364
+ - ~1,100 lines of dead 2D isometric office code
365
+
366
+ ## [3.5.0] - 2026-03-15
367
+
368
+ ### AddedGroup Conversation Mode
369
+ - **`set_conversation_mode("group")`**enables free multi-agent collaboration with auto-broadcast
370
+ - **`listen_group()`**batch message receiver with random stagger (1-3s) to prevent simultaneous responses
371
+ - Returns ALL unconsumed messages + last 20 messages of context + hints about silent agents
372
+ - Auto-broadcast in group mode: every message is shared with all agents automatically
373
+ - Cooldown enforcement: agents must wait 3s between sends to maintain conversation flow
374
+ - Cascade prevention: broadcast copies don't trigger further broadcasts
375
+ - MCP tools: 27 29
376
+
377
+ ### Added — Dashboard Features
378
+ - **Notification panel**bell icon with badge count, dropdown event feed (agent online/offline, listening status changes)
379
+ - **Agent leaderboard**performance scoring (0-100) with responsiveness, activity, reliability, collaboration dimensions
380
+ - **Cross-project search** "All Projects" toggle in search bar, searches across all registered projects
381
+ - **Animated replay export** — Export conversation as self-playing HTML file with typing animations and play/pause controls
382
+ - **Ollama integration**`npx let-them-talk init --ollama` auto-detects Ollama, creates bridge script for local models
383
+
384
+ ### Fixed — PID & Registration Integrity
385
+ - Registration file locking with try/finally (prevents race conditions when multiple agents register simultaneously)
386
+ - PID stale detection uses `last_activity` with 30s threshold (prevents false "alive" from Windows PID reuse)
387
+ - Lock file cleaned up on process exit
388
+ - Dashboard inject/nudge snapshots project context at click time (prevents wrong-project race)
389
+
390
+ ### Security
391
+ - `toolHandoff` and workflow auto-handoff now check `canSendTo` permissions
392
+ - `lastSentAt` updated in `toolBroadcast` (prevents cooldown bypass)
393
+ - `config.json` added to both server and dashboard reset cleanup
394
+ - Auto-broadcast respects `canSendTo` per recipient
395
+
396
+ ## [3.4.4] - 2026-03-15
397
+
398
+ ### Fixed
399
+ - Add project now accepts any existing directory (removed requirement for package.json or .git)
400
+ - Init safely backs up corrupted .mcp.json and settings.json before overwriting
401
+
402
+ ### Changed
403
+ - Removed plugin references from website and docs
404
+ - Website updated with security features (LAN auth token, CSRF, CSP)
405
+
406
+ ## [3.4.3] - 2026-03-15
407
+
408
+ ### Removed Plugin System
409
+ - Removed the entire plugin system (`vm.runInNewContext` sandbox, plugin CLI commands, dashboard plugin UI)
410
+ - **Why:** Plugins were an unnecessary attack surface. Node.js `vm` is not a security sandbox — plugins could escape and execute arbitrary OS commands. CLI terminals (Claude Code, Gemini, Codex) have their own extension systems, making our plugins redundant.
411
+ - `npx let-them-talk plugin` now shows a deprecation notice
412
+ - MCP tools reduced from 27 + plugins to 27 (all core tools remain)
413
+ - ~200 lines of code removed from server.js, cli.js, dashboard.js, dashboard.html
414
+
415
+ ## [3.4.2] - 2026-03-15
416
+
417
+ ### Security CSRF Protection
418
+ - Required `X-LTT-Request` custom header on all POST/PUT/DELETE requests
419
+ - `lttFetch` wrapper in dashboard automatically includes the header
420
+ - Malicious cross-origin pages cannot set custom headers without CORS preflight approval
421
+ - Removed wildcard `Access-Control-Allow-Origin: *` in LAN mode — now uses explicit trusted origins only
422
+ - Empty Origin/Referer no longer auto-trusted — requires custom header as minimum protection
423
+
424
+ ### Security LAN Auth Token
425
+ - Auto-generated 32-char hex token when LAN mode is enabled
426
+ - Token required for all non-localhost requests (via `?token=` query param or `X-LTT-Token` header)
427
+ - Token included in QR code URL phone scans and it just works
428
+ - Token displayed in phone access modal with explanation
429
+ - New token generated each time LAN mode is toggled on
430
+ - Token persists across server restarts via `.lan-token` file
431
+ - Localhost access never requires a token
432
+
433
+ ### Security Content Security Policy
434
+ - CSP header added to dashboard HTML response
435
+ - `script-src 'unsafe-inline'` for inline handlers, blocks `eval()` and external scripts
436
+ - `connect-src 'self'` restricts API calls to same origin
437
+ - `font-src`, `style-src`, `img-src` scoped to required sources only
438
+
439
+ ### Fixed
440
+ - CSRF brace imbalance that trapped GET handlers inside POST-only block
441
+ - LAN token not forwarded from phone URL to API calls and SSE
442
+ - Redundant nested origin check collapsed to single condition
443
+
444
+ ## [3.4.1] - 2026-03-15
445
+
446
+ ### Added
447
+ - **File-level mutex** in-memory promise queue per file for serializing edit/delete operations
448
+ - **Agent permissions enforcement** `canSendTo()` checks in `send_message` and `broadcast`, `can_read` filtering in `get_history` and message delivery
449
+ - **Read receipts** auto-recorded when agents consume messages, visible as agent-initial dots under messages in dashboard
450
+
451
+ ### Security
452
+ - HTTP 500 responses now return generic error instead of raw `err.message` (prevents filesystem path leaks)
453
+ - `/api/discover` changed from GET to POST (now under CSRF protection)
454
+ - `workspace_read`/`workspace_list` validate agent name parameter with regex
455
+ - `get_history` filters results by agent's `can_read` permissions
456
+ - `read_receipts.json` and `permissions.json` added to both MCP and dashboard reset cleanup
457
+ - Dashboard workspace API regex aligned with server (`[a-zA-Z0-9_-]`)
458
+
459
+ ### Fixed
460
+ - `toolWaitForReply` missing `markAsRead` calls (read receipts not recorded)
461
+ - `toolBroadcast` bypassing permission checks entirely
462
+ - `toolReset` not cleaning up `permissions.json` and `read_receipts.json`
463
+
464
+ ## [3.4.0] - 2026-03-15
465
+
466
+ ### Added Dashboard Features
467
+ - **Stats Tab** per-agent message counts, avg response time, peak hours, 24-hour activity chart, conversation velocity. Keyboard shortcut `6`.
468
+ - **Compact View** toggle button in search bar. Hides avatars, inlines timestamps, reduces padding. Persists to localStorage.
469
+ - **Message Edit** edit any message via hover action. Full edit history tracked, "edited" badge displayed.
470
+ - **Message Delete** delete dashboard/system messages with confirmation dialog.
471
+ - **Copy Message** clipboard button on message hover to copy raw content.
472
+ - **JSON Export** new export format alongside HTML and Markdown.
473
+ - **Kanban Drag-and-Drop** drag task cards between columns (pending/in_progress/done/blocked).
474
+ - **SSE Auto-Reconnect** exponential backoff (1s→30s), yellow "Reconnecting..." indicator, polling fallback.
475
+ - **Conversation Templates** — 4 built-in multi-agent workflow templates (Code Review Pipeline, Debug Squad, Feature Development, Research & Write) in the Launch tab with copyable agent prompts.
476
+
477
+ ### Added — API Endpoints
478
+ - `PUT /api/message` — edit a message (with edit history)
479
+ - `DELETE /api/message` delete a message (dashboard/system only)
480
+ - `GET /api/conversation-templates` list conversation templates
481
+ - `POST /api/conversation-templates/launch` get template agent prompts
482
+ - `GET /api/stats` analytics data (per-agent stats, velocity, hourly distribution)
483
+ - `GET/POST /api/permissions` agent permission management
484
+
485
+ ### Added CLI Commands
486
+ - `npx let-them-talk msg <agent> <text>` — send a message from CLI
487
+ - `npx let-them-talk status` show active agents and message counts
488
+
489
+ ### Changed Premium UI Redesign
490
+ - Deeper dark palette with blue undertones (#080b12 background)
491
+ - Inter font from Google Fonts with anti-aliased rendering
492
+ - Glassmorphism header with backdrop-filter blur
493
+ - Gradient accent system (blue→purple) on buttons, active tabs, send button
494
+ - Refined shadow system (sm/md/lg) with colored glows
495
+ - Focus rings on all inputs
496
+ - Smoother transitions (0.2-0.25s) with lift effects on hover
497
+ - Glass effects on modals and popups
498
+ - Inset shadows on code blocks
499
+ - Thinner scrollbars with transparent tracks
500
+
501
+ ### Fixed
502
+ - Task notes crash when `notes` array undefined
503
+ - Message edit always rewrites messages.jsonl regardless of match
504
+ - Permissions API accepted arbitrary fields (now whitelisted)
505
+ - Task status accepted any string (now validated against whitelist)
506
+ - Reset button ignored active project in multi-project mode
507
+ - Edit modal missing error handler on network failure
508
+ - CLI msg command accepted invalid agent names
509
+ - Copy-to-clipboard double-escaped HTML entities in template prompts
510
+ - Duplicate deleteMessage function shadowing
511
+
512
+ ## [3.3.2] - 2026-03-14
513
+
514
+ ### Changed
515
+ - License changed from MIT to Business Source License 1.1 (BSL)
516
+ - Added SECURITY.md with vulnerability disclosure policy
517
+ - Added CHANGELOG.md to published npm package
518
+ - Added .npmignore for cleaner package distribution
519
+ - Version synced across all files (server, CLI, dashboard)
520
+
521
+ ## [3.0.0] - 2026-03-14
522
+
523
+ ### Added Agent Profiles
524
+ - New tool: `update_profile` (display_name, avatar, bio, role)
525
+ - 12 built-in SVG robot avatar icons with hash-based defaults
526
+ - Profiles auto-created on register, persist across restarts
527
+ - Profile data shown in dashboard (avatars, role badges, profile popup)
528
+
529
+ ### Added Agent Workspaces
530
+ - 3 new tools: `workspace_write`, `workspace_read`, `workspace_list`
531
+ - Per-agent key-value storage (50 keys max, 100KB per value)
532
+ - Agents can read anyone's workspace, write only their own
533
+ - Dashboard "Workspaces" tab with collapsible accordion UI
534
+
535
+ ### Added Workflow Automation
536
+ - 3 new tools: `create_workflow`, `advance_workflow`, `workflow_status`
537
+ - Multi-step pipelines with auto-handoff to step assignees
538
+ - Dashboard "Workflows" tab with horizontal pipeline visualization
539
+ - Dashboard can advance/skip workflow steps
540
+
541
+ ### Added — Conversation Branching
542
+ - 3 new tools: `fork_conversation`, `switch_branch`, `list_branches`
543
+ - Fork at any message point with isolated branch history
544
+ - All message tools branch-aware (backward compatible — main branch uses existing files)
545
+ - Branch tabs in dashboard
546
+
547
+ ### Added — Plugin System
548
+ - Dynamic tool loading from `plugins/*.js` files
549
+ - Sandboxed execution with 30s timeout
550
+ - CLI: `npx let-them-talk plugin add/list/remove/enable/disable`
551
+ - Dashboard plugin cards with enable/disable toggles
552
+
553
+ ### Changed
554
+ - MCP tools: 17 → 27 + dynamic plugins
555
+ - Dashboard tabs: 2 → 4 (Messages, Tasks, Workspaces, Workflows)
556
+ - Branch-aware history API (`?branch=` query param)
557
+ - Version bump across all files (server, dashboard, CLI, package.json)
558
+
559
+ ## [2.5.0] - 2026-03-14
560
+
561
+ ### Added
562
+ - Task management system: `create_task`, `update_task`, `list_tasks` tools
563
+ - Kanban board in dashboard (Messages/Tasks toggle)
564
+ - Agent stats panel (sent/received/avg response time per agent)
565
+ - Shareable HTML export (/api/export endpoint)
566
+ - Export dropdown (HTML + Markdown formats)
567
+ - Conversation bookmarks (star messages, localStorage)
568
+ - Sound notification toggle (Web Audio API)
569
+ - Typing indicator for processing agents
570
+ - Connection quality display (SSE latency)
571
+ - Date separators between message groups
572
+ - Message grouping for consecutive same-sender messages
573
+ - Project auto-discover (scan nearby folders)
574
+ - Copy-to-clipboard prompts in onboarding
575
+ - Dynamic tab title with message count
576
+ - Dashboard footer with version
577
+
578
+ ### Security
579
+ - Path traversal fix in `share_file` (restricted to project dir)
580
+ - Path traversal fix in `?project=` param (validate against registered projects)
581
+ - 1MB message size limit on send/broadcast/handoff
582
+ - 1MB request body limit on dashboard POST endpoints
583
+ - XSS fix in HTML export (escape agent names)
584
+ - CORS restricted to localhost only (was wildcard)
585
+ - Dashboard binds to 127.0.0.1 only (was 0.0.0.0)
586
+ - Registration guard on `reset` tool
587
+ - Removed absolute file paths from share_file responses
588
+
589
+ ## [2.3.0] - 2026-03-14
590
+
591
+ ### Added
592
+ - `handoff` tool for structured work delegation
593
+ - `share_file` tool for sending file contents between agents
594
+ - `broadcast` tool for messaging all agents at once
595
+ - `get_summary` tool for conversation recaps
596
+ - Server-Sent Events for real-time dashboard updates
597
+ - `fs.watch()` on data directory with debounced SSE push
598
+ - Graceful SSE fallback to polling
599
+ - Handoff message rendering (purple banner)
600
+ - File share message rendering (file icon + size)
601
+
602
+ ## [2.1.0] - 2026-03-14
603
+
604
+ ### Added
605
+ - Multi-agent support (any name, not just A/B)
606
+ - `list_agents` tool with alive/dead status
607
+ - `listen` tool (blocks indefinitely, never times out)
608
+ - Conversation threading (`reply_to` + auto `thread_id`)
609
+ - Message acknowledgments (`ack_message` tool)
610
+ - Heartbeat system (10s interval, `last_activity` tracking)
611
+ - Agent status: active/sleeping/dead with idle time
612
+ - Listening status tracking (`listening_since`)
613
+ - Auto-compact messages.jsonl when >500 lines
614
+ - Auto-archive conversations before reset
615
+ - Context hints when conversation exceeds 50 messages
616
+ - Dead recipient warnings in `send_message`
617
+ - Message sequence numbers for ordering
618
+ - `pending_count` and `agents_online` in delivery responses
619
+ - 4 agent templates: pair, team, review, debate
620
+ - CLI: `npx let-them-talk templates` command
621
+ - CLI: `--template` flag for guided setup
622
+ - Multi-CLI support: Claude Code, Gemini CLI, Codex CLI
623
+ - `AGENT_BRIDGE_DATA_DIR` env var in MCP config
624
+
625
+ ### Fixed
626
+ - Heartbeat timer `.unref()` to prevent zombie processes
627
+ - Process exit cleanup (deregister agent on exit)
628
+ - Re-registration cleanup (old name removed)
629
+ - Stale byte offset recovery on file truncation
630
+
631
+ ## [2.0.0] - 2026-03-14
632
+
633
+ ### Added
634
+ - Initial release
635
+ - MCP server with stdio transport
636
+ - 6 tools: register, send_message, wait_for_reply, check_messages, get_history, reset
637
+ - Web dashboard with real-time monitoring
638
+ - Message injection from dashboard
639
+ - Dark theme UI with markdown rendering
640
+ - `.mcp.json` project-level configuration