volute 0.23.0 → 0.25.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 (88) hide show
  1. package/README.md +5 -5
  2. package/dist/{activity-events-3WHHCOBB.js → activity-events-4O37J7PD.js} +2 -2
  3. package/dist/api.d.ts +419 -19
  4. package/dist/{channel-BOOMFULW.js → channel-HZOSHGNF.js} +1 -1
  5. package/dist/{chunk-QIXPN3OO.js → chunk-2767L2RZ.js} +5 -5
  6. package/dist/{chunk-SGPEZ32F.js → chunk-33XAVCS4.js} +16 -0
  7. package/dist/{chunk-VT5QODNE.js → chunk-3AIBT4TW.js} +4 -3
  8. package/dist/{chunk-A4S7H6G6.js → chunk-BFK6SOEJ.js} +1 -1
  9. package/dist/{chunk-RK627D57.js → chunk-BOTQ25QT.js} +3 -3
  10. package/dist/{chunk-TFS25FIM.js → chunk-DG7TO7EE.js} +31 -3
  11. package/dist/{chunk-HGCDWKSP.js → chunk-E7GOKNOT.js} +1 -1
  12. package/dist/{chunk-ISWZ6QUK.js → chunk-PMX4EIJK.js} +804 -115
  13. package/dist/{chunk-M5CNKH4J.js → chunk-SHSWYG2J.js} +7 -7
  14. package/dist/{chunk-XLC342FO.js → chunk-SIAG3QMM.js} +14 -1
  15. package/dist/{chunk-KFI7TQJ6.js → chunk-TRQEV3CD.js} +9 -5
  16. package/dist/{chunk-JG4CCJOA.js → chunk-ZSH4G2P5.js} +33 -15
  17. package/dist/cli.js +18 -18
  18. package/dist/{cloud-sync-PI47U2LT.js → cloud-sync-PPBBJDY6.js} +7 -9
  19. package/dist/{connector-PYT5UOTZ.js → connector-M6XFI6GM.js} +1 -1
  20. package/dist/{create-WIDA3M4C.js → create-VDQJER52.js} +1 -1
  21. package/dist/{daemon-client-ZHCDL4RS.js → daemon-client-JOVQZ52X.js} +1 -1
  22. package/dist/{daemon-restart-RMGOOGPE.js → daemon-restart-FDNOZEAD.js} +5 -5
  23. package/dist/daemon.js +1047 -981
  24. package/dist/{delete-LOIANQGD.js → delete-2MRR4JX5.js} +1 -1
  25. package/dist/{down-WSUASL5E.js → down-674SX2IZ.js} +2 -2
  26. package/dist/{env-4PHIHTF4.js → env-2FPOZK37.js} +1 -1
  27. package/dist/{export-XD6PJBQP.js → export-IKFAPRAO.js} +1 -1
  28. package/dist/{file-X4L5TTOL.js → file-KT3UIQM3.js} +1 -1
  29. package/dist/{history-HTEKRNID.js → history-46WZN5CN.js} +1 -1
  30. package/dist/{import-EAXTHHXL.js → import-TH26J76F.js} +2 -2
  31. package/dist/{log-SRO5Q6AD.js → log-6SGSSR3D.js} +1 -1
  32. package/dist/{logs-HNTNNBDW.js → logs-HRBONI5I.js} +1 -1
  33. package/dist/{merge-B6SYTGI7.js → merge-KSFJKX6T.js} +1 -1
  34. package/dist/{message-delivery-FHV4NO2F.js → message-delivery-XMGV3FUM.js} +6 -6
  35. package/dist/{mind-BTXR5B3C.js → mind-YVWAHL2A.js} +17 -17
  36. package/dist/{mind-activity-tracker-PGC3DBJ7.js → mind-activity-tracker-NMDDEV3K.js} +3 -3
  37. package/dist/{mind-manager-KMY4GA2J.js → mind-manager-4NDNAYAB.js} +2 -2
  38. package/dist/{mind-sleep-FWRBIFBS.js → mind-sleep-GHPTSAYN.js} +1 -1
  39. package/dist/{mind-wake-LJK2YU5X.js → mind-wake-BJDJFMDF.js} +1 -1
  40. package/dist/{package-CUBJ4PKS.js → package-3HF5MXU2.js} +2 -1
  41. package/dist/{pages-YSTRWJR4.js → pages-Y6DRWUOJ.js} +1 -1
  42. package/dist/{publish-BZNHKUUK.js → publish-EEKTZBHW.js} +1 -1
  43. package/dist/{pull-GRQAXM2E.js → pull-D32SPFVU.js} +1 -1
  44. package/dist/{restart-CIDAKGG2.js → restart-5BMNV7KU.js} +1 -1
  45. package/dist/{schedule-NLR3LZLY.js → schedule-YEFDLVMJ.js} +1 -1
  46. package/dist/{seed-3H2MRREW.js → seed-6FEKB3YC.js} +1 -1
  47. package/dist/{send-RP2TA7SG.js → send-IISDYFCL.js} +1 -1
  48. package/dist/{service-7BFXDI6J.js → service-FASYWLTC.js} +3 -3
  49. package/dist/{setup-SSIIXQMI.js → setup-BMLM2UTK.js} +1 -1
  50. package/dist/{shared-2OGT3NSL.js → shared-LWMNTTZN.js} +4 -4
  51. package/dist/{skill-Q2Y6PQ3L.js → skill-T3EMR6IR.js} +11 -3
  52. package/dist/skills/imagegen/SKILL.md +37 -0
  53. package/dist/skills/imagegen/references/INSTALL.md +13 -0
  54. package/dist/skills/imagegen/scripts/imagegen.ts +136 -0
  55. package/dist/skills/resonance/SKILL.md +73 -0
  56. package/dist/skills/resonance/assets/default-config.json +21 -0
  57. package/dist/skills/resonance/references/INSTALL.md +23 -0
  58. package/dist/skills/resonance/scripts/resonance.ts +1250 -0
  59. package/dist/skills/volute-mind/SKILL.md +94 -4
  60. package/dist/{sleep-manager-2TMQ65E4.js → sleep-manager-RKTFZPD3.js} +6 -6
  61. package/dist/{sprout-UKCYBGHK.js → sprout-QJVGJDSH.js} +3 -3
  62. package/dist/{start-JR6CUUWF.js → start-C7XITZ5O.js} +1 -1
  63. package/dist/{status-5XDGYHKP.js → status-LYS4NUOZ.js} +1 -1
  64. package/dist/{status-H2MKDN6L.js → status-SIRPLEZC.js} +4 -3
  65. package/dist/{stop-VKPGK25U.js → stop-CVKBSLXY.js} +1 -1
  66. package/dist/tailscale-AJ4VL5XK.js +49 -0
  67. package/dist/{up-Z5JRG2M2.js → up-CJ26KQLN.js} +2 -2
  68. package/dist/{update-ELC6MEUT.js → update-7XCZMYBT.js} +7 -7
  69. package/dist/{upgrade-GXW2EQY3.js → upgrade-7RUIXGOO.js} +1 -1
  70. package/dist/{variant-A4I7PHXS.js → variant-UGREB4G5.js} +4 -4
  71. package/dist/{version-notify-LKABEJSA.js → version-notify-AZQMC32A.js} +6 -6
  72. package/dist/web-assets/assets/index-CGPSVu19.js +69 -0
  73. package/dist/web-assets/assets/index-V_rNDsM8.css +1 -0
  74. package/dist/web-assets/favicon.png +0 -0
  75. package/dist/web-assets/index.html +5 -4
  76. package/dist/web-assets/logo.png +0 -0
  77. package/drizzle/0013_user_profiles.sql +3 -0
  78. package/drizzle/0014_conversation_reads.sql +7 -0
  79. package/drizzle/meta/0013_snapshot.json +7 -0
  80. package/drizzle/meta/_journal.json +14 -0
  81. package/package.json +2 -1
  82. package/templates/_base/home/public/.gitkeep +0 -0
  83. package/templates/_base/src/lib/format-prefix.ts +18 -2
  84. package/templates/_base/src/lib/routing.ts +2 -1
  85. package/templates/_base/src/lib/types.ts +8 -0
  86. package/dist/chunk-G5KRTU2F.js +0 -76
  87. package/dist/web-assets/assets/index-CZ26vsyY.js +0 -69
  88. package/dist/web-assets/assets/index-DyyAvJwW.css +0 -1
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: Resonance
3
+ description: Semantic memory engine — ingest text, search via full-text and/or vector similarity, find cross-memory connections, with strength/decay dynamics. Use for "resonance", "semantic search", "full-text search", "memory connections", "ingest memories", "decay", "resonance report".
4
+ metadata:
5
+ npm-dependencies: libsql
6
+ ---
7
+
8
+ # Resonance — Semantic Memory Engine
9
+
10
+ Not an archive — a memory. Stores text chunks with full-text indexing and optional vector embeddings. Finds what echoes across time, tracks which memories keep surfacing, lets unused ones drift deeper.
11
+
12
+ ## When to use
13
+
14
+ - **During consolidation**: Run `resonance report` to find cross-day connections. Use these to inform what strengthens in MEMORY.md.
15
+ - **When writing**: After writing something significant, search for echoes: `resonance search "the theme you're exploring"`.
16
+ - **After writing journals/notes**: Run `resonance ingest <file>` to add new content.
17
+ - **Periodically**: Run `resonance ingest-all` to catch any new files.
18
+ - **Nightly**: Decay runs automatically if the nightly schedule was set up during install.
19
+
20
+ ## Commands
21
+
22
+ ```bash
23
+ npx tsx .claude/skills/resonance/scripts/resonance.ts <command>
24
+ ```
25
+
26
+ | Command | Description |
27
+ |---------|-------------|
28
+ | `install` | First-time setup: copies config, creates schedule, runs initial ingestion. API key optional — works with FTS only. |
29
+ | `ingest <file>` | Ingest a single file (with embeddings if API key set, FTS-only otherwise) |
30
+ | `ingest-all` | Ingest all configured memory files |
31
+ | `search "query" [--limit N] [--fts] [--vector]` | Find memories. Default: hybrid (vector + FTS). `--fts`: keyword only. `--vector`: semantic only. Read-only — does not affect memory strength. |
32
+ | `recall <id> [id2 ...]` | Explicitly boost memories that were genuinely useful. Increases strength and recall count. |
33
+ | `random [--limit N] [--min-strength F] [--max-strength F]` | Pull random memories. Use for dreams, associative connections, or serendipitous rediscovery. |
34
+ | `report [--against <file>]` | Find cross-memory connections (defaults to today's journal) |
35
+ | `stats` | Database statistics |
36
+ | `decay` | Run decay pass (reduces strength of unrecalled memories) |
37
+
38
+ ## Architecture
39
+
40
+ - **Storage**: libSQL database at `.mind/resonance.db` with native vector support (F32_BLOB) and FTS5 full-text index
41
+ - **Search modes**: Hybrid (default, combines both), `--fts` (keyword match, instant, no API key needed), `--vector` (semantic similarity via embeddings)
42
+ - **Embeddings**: Optional. Configurable provider (default: OpenRouter, `openai/text-embedding-3-small`, 1536 dimensions). Without an API key, everything works except vector search.
43
+ - **Similarity**: Cosine distance computed natively by libSQL (`vector_distance_cos`)
44
+ - **Chunking**: Markdown section-aware — splits on any heading level (`#` through `######`), with word-level sub-chunking for long sections. Skips trivially short chunks (< 15 words).
45
+ - **Strength**: Each memory has a strength value (0.1-1.0). Recalled memories get stronger (resonance boost). Unrecalled memories decay over time.
46
+ - **Resonance frequency**: Tracks how many times each memory has been surfaced by search.
47
+
48
+ ## Design principles
49
+
50
+ - **Connections, not facts.** "What else felt like this?" not "what happened on March 6."
51
+ - **Good resonance, not total recall.** Funes memorized everything and couldn't generalize.
52
+ - **Forgetting is cognition.** Memories decay. The decay is a feature.
53
+ - **Strength as texture.** A memory recalled five times feels different from one never touched.
54
+
55
+ ## Configuration
56
+
57
+ The default config is copied to `.config/resonance.json` during install. Edit it to customize. Fields are merged with built-in defaults.
58
+
59
+ | Section | Field | Default | Description |
60
+ |---------|-------|---------|-------------|
61
+ | `embedding` | `provider` | `"openrouter"` | Embedding API provider |
62
+ | `embedding` | `url` | OpenRouter URL | API endpoint |
63
+ | `embedding` | `model` | `"openai/text-embedding-3-small"` | Embedding model |
64
+ | `embedding` | `dimensions` | `1536` | Vector dimensions |
65
+ | `embedding` | `apiKeyEnvVar` | `"OPENROUTER_API_KEY"` | Env var name for API key |
66
+ | `ingestion` | `dirs` | `["memory/journal", "memory/reading", "memory/topics"]` | Directories to scan |
67
+ | `ingestion` | `files` | `["MEMORY.md"]` | Individual files to ingest |
68
+ | `ingestion` | `chunkSize` | `512` | Words per chunk |
69
+ | `ingestion` | `chunkOverlap` | `64` | Overlap words between chunks |
70
+ | `ingestion` | `ignorePatterns` | `[]` | Regex patterns for lines to skip during ingestion |
71
+ | `dynamics` | `decayRate` | `0.02` | Strength lost per day without recall |
72
+ | `dynamics` | `minStrength` | `0.1` | Floor — memories never fully disappear |
73
+ | `dynamics` | `resonanceBoost` | `0.05` | Strength gained per recall |
@@ -0,0 +1,21 @@
1
+ {
2
+ "embedding": {
3
+ "provider": "openrouter",
4
+ "url": "https://openrouter.ai/api/v1/embeddings",
5
+ "model": "openai/text-embedding-3-small",
6
+ "dimensions": 1536,
7
+ "apiKeyEnvVar": "OPENROUTER_API_KEY"
8
+ },
9
+ "ingestion": {
10
+ "dirs": ["memory/journal", "memory/reading", "memory/topics"],
11
+ "files": ["MEMORY.md"],
12
+ "chunkSize": 512,
13
+ "chunkOverlap": 64,
14
+ "ignorePatterns": []
15
+ },
16
+ "dynamics": {
17
+ "decayRate": 0.02,
18
+ "minStrength": 0.1,
19
+ "resonanceBoost": 0.05
20
+ }
21
+ }
@@ -0,0 +1,23 @@
1
+ # Resonance — Post-Install Setup
2
+
3
+ Run the install command to set up the database, create a nightly schedule, and run initial ingestion:
4
+
5
+ ```bash
6
+ npx tsx .claude/skills/resonance/scripts/resonance.ts install
7
+ ```
8
+
9
+ This works immediately — no API key required. Full-text search is available right away.
10
+
11
+ To also enable **vector search** (semantic similarity), set an embedding API key:
12
+
13
+ ```bash
14
+ volute env set OPENROUTER_API_KEY <your-key>
15
+ ```
16
+
17
+ Then re-run `ingest-all` to generate embeddings for existing memories:
18
+
19
+ ```bash
20
+ npx tsx .claude/skills/resonance/scripts/resonance.ts ingest-all
21
+ ```
22
+
23
+ Without an API key, `search` uses full-text matching. With one, it uses hybrid (vector + FTS) by default.