Skip to content

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 01 Apr 11:55
· 120 commits to master since this release

Bug Fixes (Council Audit)

8 fixes from a 13-member council audit of the plugin codebase:

Critical

  • Smart note infinite re-evaluation loop: JSON.parse in smart note evaluation had no try-catch — malformed LLM output caused notes to be re-evaluated on every dream run, silently consuming budget. Now catches parse errors, marks notes as checked, and uses greedy regex for bracket handling.

High

  • Dedup drop() return ignored: Heuristic deduplication called drop() but didn't check the return value. In-flight tool calls returning "incomplete" were incorrectly marked as dropped in DB. Now skips status update when drop is incomplete.
  • Corrupt JSON crashes transforms: JSON.parse in read-session-raw.ts had no error handling — a single corrupt message row crashed all transforms for that session. Now returns null and skips corrupt entries.
  • Smart notes not triggering dreams: findProjectsNeedingDream() only queried the memories table. Projects with pending smart notes but no memory changes were never scheduled for dreaming. Now includes smart_notes via UNION query.
  • Ready smart notes never surfaced: peekNoteNudgeText was called without projectIdentity, so readySmartCount was always 0. Ready smart notes evaluated by the dreamer were invisible to users. Now threads projectPath through the transform pipeline.

Medium

  • Dream queue stale threshold: enqueueDream deleted started entries after 10 minutes, but dreams can run for up to 120 minutes. Active dreams had their queue entries incorrectly deleted. Threshold raised to 2 hours.
  • ctx-memory schema leak: Tool schema always exposed all 6 actions (write/delete/list/update/merge/archive) regardless of allowedActions. Regular agents saw options they couldn't use, wasting turns on disallowed actions. Schema now derives enum from actual allowed actions.
  • Dream schedule debounce on failure: lastScheduleCheckMs was set before checkScheduleAndEnqueue(). If the check threw, the debounce blocked retries for 1 hour. Timestamp now set after successful execution.