Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

perf: fix critical memory leaks, WebSocket backpressure, and add consolidation endpoints

6 months ago

a0da456
Authored
Max Weinbach4/20/2026, 10:53:54 PM
Memory leak fixes:
- Cap allMessages at 1000 in HistoryManager (preserves system message)
- Cap turns at 512 in SessionCostTracker with recalculateTotals()
- Cap feed at 2000 in SessionSnapshotProjector
- Fix cost tracker listener leak in AgentSession.dispose()
- Null manager refs in AgentSession.dispose() to aid GC
- Add 5-min idle eviction for sessionBindings with no live sinks
- Delete threadJournalWriteQueues entry after flush completes
- Delete workspaceControlStateIds when subscribers drop to zero

WebSocket backpressure:
- Add per-connection send queue (max 500) with drain flushing
- Make sendJsonRpc backpressure-aware (checks ws.send() return)
- Evict stream deltas first from queue when full
- Update dispatchJsonRpcMessage to accept optional send callback

Desktop consolidation (Phase 1):
- Add thread/hydrate endpoint (combines resume + read)
- Add cowork/workspace/bootstrap endpoint (threads + state)

Tests:
- test/server.memory.test.ts
- test/server.backpressure.test.ts

Parentc801381

13 files changed
  • src/server/jsonrpc/dispatchJsonRpcMessage.ts+4−2
  • src/server/jsonrpc/routes/index.ts+2−0
  • src/server/jsonrpc/routes/thread.ts+95−0
  • src/server/jsonrpc/routes/workspace.ts+39−0
  • src/server/jsonrpc/schema.threadTurn.ts+16−0
  • src/server/jsonrpc/transportAdapter.ts+1−0
  • src/server/session/AgentSession.ts+11−1
  • src/server/session/HistoryManager.ts
+15
−2
  • src/server/session/SessionSnapshotProjector.ts+9−0
  • src/server/startServer.ts+83−3
  • src/session/costTracker.ts+32−5
  • test/server.backpressure.test.ts+104−0
  • test/server.memory.test.ts+156−0