mirror of
https://github.com/lukaszraczylo/claude-mnemonic.git
synced 2026-10-17 05:59:36 +00:00
fix: bound SQLite WAL growth and prevent worker hangs (#49)
The worker's SQLite WAL could grow unbounded (observed 19MB) and wedge the DB, hanging Claude Code on every prompt. No checkpoint ever truncated the WAL (only PASSIVE auto-checkpoint, which cannot reclaim the file), the connection-scoped pragmas were set via a single Exec so only one pooled connection received them (e.g. busy_timeout=0 on the rest), and the maintenance service that would optimize/checkpoint was never wired up. - Register a sqlite3 ConnectHook driver so all pragmas (busy_timeout, journal_mode, synchronous, cache_size, foreign_keys, journal_size_limit) apply to every pooled connection; enable safe connection recycling. - Add Store.Checkpoint (TRUNCATE), checkpoint-on-Close, and a periodic size-gated checkpoint loop with configurable interval/threshold. - Wire up the previously-dead maintenance service; make trigger_maintenance actually run DB maintenance instead of only recalculating scores. - Harden the user-prompt hook to honor its deadline and fail open so a slow worker can never stall a prompt. - Add regression tests for WAL truncation, checkpoint-on-close, and per-connection pragmas.
This commit is contained in:
@@ -534,7 +534,7 @@ func (s *Server) handleToolsList(req *Request) *Response {
|
||||
},
|
||||
{
|
||||
Name: "trigger_maintenance",
|
||||
Description: "Trigger an immediate maintenance run (cleanup old observations, optimize database).",
|
||||
Description: "Trigger an immediate database maintenance run: optimize/checkpoint the database, clean up old prompts, apply any configured observation retention/stale cleanup, and recalculate importance scores.",
|
||||
InputSchema: map[string]any{
|
||||
"type": "object",
|
||||
"properties": map[string]any{},
|
||||
@@ -917,7 +917,7 @@ func (s *Server) callTool(ctx context.Context, name string, args json.RawMessage
|
||||
"project": s.project,
|
||||
})
|
||||
case "trigger_maintenance":
|
||||
return s.proxyPostRaw(ctx, "/api/scoring/recalculate", nil)
|
||||
return s.proxyPostRaw(ctx, "/api/maintenance/run", nil)
|
||||
case "analyze_observation_importance":
|
||||
return s.handleAnalyzeImportanceProxy(ctx, args)
|
||||
case "analyze_search_patterns":
|
||||
|
||||
Reference in New Issue
Block a user