Releases: codependentai/mind-cloud
v2.4.1
Daemon Overhaul
Fixed
- Idempotent novelty recalculation — Novelty is now a deterministic function of surface history using D1-native MAX/MIN/julianday() math. Fixes broken recovery-outpaces-decay ratio.
- Dormant rotation pool — Surfacing now pulls 20% from entities that haven't had observations surfaced in 14+ days. Breaks feedback loop where only recently-active entities get surfaced. Pool ratios changed from 70/20/10 to 50/20/20/10 (core/novelty/dormant/edge).
- Automatic charge progression — Daemon advances
freshtoactiveafter 2 surfaces,activetoprocessingafter 5 surfaces or 30 days with 2+ sits. Metabolization remains manual. - Fresher mood calculation — Mood now draws from observation emotions, journal emotions, and relational state. Last 6 hours weighted 2x. Reports "insufficient data" instead of false "neutral" when signals are sparse.
Mind Cloud v2.4.0
What's New
R2 Image Storage
Store actual image files with automatic WebP conversion and signed URLs. R2 is optional — without it, Mind Cloud continues to work with path-based image metadata.
mind_store_image— new tool with store, view, search, and delete actions- Signed URLs — time-limited, HMAC-signed image access without exposing your API key
- Image routes —
/img/{id}for viewing,/r2/{key}for internal serving
Expanded Edit & Delete
- mind_edit now handles observations, journals, AND images. Observation edits save version history and re-embed automatically.
- mind_delete now handles 7 types: observations, entities, journals, relations, images, threads, and tensions. Cleans up associated embeddings and R2 objects.
- mind_thread, mind_tension, mind_identity — all gained delete actions
- mind_feel_toward — new
clearandclear_idparams to remove relational state
Better Search & Find
- mind_search — 7 new filter params:
keyword,source,entity,weight,date_from,date_to,type - mind_sit — new
queryparam to find observations by semantic meaning instead of just ID or text match
Richer Orient & Ground
- mind_orient — now shows notes left for the mind, living surface state (co-surfacing patterns, pending proposals, orphan count, novelty distribution), and deep archive count
- mind_ground — now shows recently completed threads with resolution notes, fears to watch, texture, and milestones from the identity graph
Daemon & Health Fixes
- Context clustering was silently broken — every daemon run produced garbage data because it read an undefined field. Fixed.
- Health "unprocessed" count was massively inflated — counted every non-metabolized observation including brand new ones. Now only counts observations that actually need attention.
- Health orphan count was inflated — counted observations written yesterday as orphans. Now requires 7+ days age.
- Double novelty decay — observations were decayed twice when surfaced. Fixed.
- Archive condition was incorrectly sweeping observations on entities with null salience. Fixed.
- Subconscious score had a rounding bug in the 30-60 minute window. Fixed.
Removed Tools
mind_prime— usemind_search+mind_read_entityinsteadmind_heat— data available viamind_inner_weatherandmind_patternsmind_see— replaced bymind_store_image(action='view')
Upgrading
Code only — no schema migration required. Replace src/index.ts and redeploy.
To add R2 image storage (optional):
npx wrangler r2 bucket create mind-cloud-imagesThen uncomment the R2 section in wrangler.toml and set WORKER_URL + SIGNING_SECRET secrets.
Restoring Fragmented Observations
If you upgraded from v1.x through v2.0.0, you may have single-letter observations caused by a bug that iterated arrays character-by-character (fixed in v2.2.1). These fragments contain your original text — they just need reconstructing.
Step 1: Check if you have fragments
npx wrangler d1 execute YOUR_DB --remote \
--command "SELECT COUNT(*) as count FROM observations WHERE LENGTH(TRIM(content)) <= 1"If the count is 0, you're clean. Skip the rest.
Step 2: Export the fragments
npx wrangler d1 execute YOUR_DB --remote \
--command "SELECT id, entity_id, content, added_at FROM observations WHERE LENGTH(TRIM(content)) <= 1 ORDER BY entity_id, id" \
--json > fragments.jsonStep 3: Generate the restoration SQL
node scripts/restore-fragmented.js fragments.jsonThis will show you each reconstructed observation and write restore-output.sql. Review the output — it shows the original text pieced back together from the fragments.
Step 4: Apply the restoration
npx wrangler d1 execute YOUR_DB --remote --file=restore-output.sqlEach restored observation keeps the first fragment's ID, updates it with the full reconstructed text, and removes the remaining single-character rows. No data is lost.
What's Next
Mind Cloud's architecture has been generalized and open-sourced as Resonant Mind. Resonant Mind adds:
- Postgres/Neon support via Cloudflare Hyperdrive
- Gemini multimodal embeddings (text + image)
- Enhanced security — timing-safe comparisons, daemon cooldown, query limits
- Full documentation — architecture guide, alternative embeddings, migration guide
Mind Cloud will continue to receive maintenance updates. When you're ready for the next evolution, see the migration guide.