@wipcomputer/memory-crystal 0.7.29 → 0.7.32

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 (146) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/SKILL.md +1 -1
  3. package/package.json +1 -1
  4. package/scripts/migrate-lance-to-sqlite.mjs +2 -1
  5. package/_trash/RELEASE-NOTES-v0-7-23.md +0 -48
  6. package/_trash/RELEASE-NOTES-v0-7-25.md +0 -24
  7. package/_trash/RELEASE-NOTES-v0-7-26.md +0 -7
  8. package/_trash/RELEASE-NOTES-v0-7-28.md +0 -31
  9. package/_trash/RELEASE-NOTES-v0-7-29.md +0 -28
  10. package/_trash/RELEASE-NOTES-v0-7-4.md +0 -64
  11. package/_trash/RELEASE-NOTES-v0-7-5.md +0 -19
  12. package/dist/bridge.d.ts +0 -7
  13. package/dist/bridge.js +0 -14
  14. package/dist/bulk-copy.d.ts +0 -17
  15. package/dist/bulk-copy.js +0 -90
  16. package/dist/cc-hook.d.ts +0 -8
  17. package/dist/cc-hook.js +0 -368
  18. package/dist/cc-poller.d.ts +0 -1
  19. package/dist/cc-poller.js +0 -550
  20. package/dist/chunk-25LXQJ4Z.js +0 -110
  21. package/dist/chunk-2DRXIRQW.js +0 -97
  22. package/dist/chunk-2ZNH5F6E.js +0 -1281
  23. package/dist/chunk-3G3SFYYI.js +0 -288
  24. package/dist/chunk-3RG5ZIWI.js +0 -10
  25. package/dist/chunk-3S6TI23B.js +0 -97
  26. package/dist/chunk-3VFIJYS4.js +0 -818
  27. package/dist/chunk-52QE3YI3.js +0 -1169
  28. package/dist/chunk-57RP3DIN.js +0 -1205
  29. package/dist/chunk-5HSZ4W2P.js +0 -62
  30. package/dist/chunk-645IPXW3.js +0 -290
  31. package/dist/chunk-7A7ELD4C.js +0 -1205
  32. package/dist/chunk-7FYY4GZM.js +0 -1205
  33. package/dist/chunk-7IUE7ODU.js +0 -254
  34. package/dist/chunk-7RMLKZIS.js +0 -108
  35. package/dist/chunk-AA3OPP4Z.js +0 -432
  36. package/dist/chunk-AEWLSYPH.js +0 -72
  37. package/dist/chunk-ASSZDR6I.js +0 -108
  38. package/dist/chunk-AYRJVWUC.js +0 -1205
  39. package/dist/chunk-CCYI5O3D.js +0 -148
  40. package/dist/chunk-D3I3ZSE2.js +0 -411
  41. package/dist/chunk-DACSKLY6.js +0 -219
  42. package/dist/chunk-DW5B4BL7.js +0 -108
  43. package/dist/chunk-EKSACBTJ.js +0 -1070
  44. package/dist/chunk-EXEZZADG.js +0 -248
  45. package/dist/chunk-F3Y7EL7K.js +0 -83
  46. package/dist/chunk-FBQWSDPC.js +0 -1328
  47. package/dist/chunk-FHRZNOMW.js +0 -1205
  48. package/dist/chunk-IM7N24MT.js +0 -129
  49. package/dist/chunk-IPNYIXFK.js +0 -1178
  50. package/dist/chunk-J7MRSZIO.js +0 -167
  51. package/dist/chunk-JITKI2OI.js +0 -106
  52. package/dist/chunk-JWZXYVET.js +0 -1068
  53. package/dist/chunk-KCQUXVYT.js +0 -108
  54. package/dist/chunk-KOQ43OX6.js +0 -1281
  55. package/dist/chunk-KYVWO6ZM.js +0 -1069
  56. package/dist/chunk-L3VHARQH.js +0 -413
  57. package/dist/chunk-LBWDS6BE.js +0 -288
  58. package/dist/chunk-LOVAHSQV.js +0 -411
  59. package/dist/chunk-LQOYCAGG.js +0 -446
  60. package/dist/chunk-LWAIPJ2W.js +0 -146
  61. package/dist/chunk-M5DHKW7M.js +0 -127
  62. package/dist/chunk-MBKCIJHM.js +0 -1328
  63. package/dist/chunk-MK42FMEG.js +0 -147
  64. package/dist/chunk-MOBMYHKL.js +0 -1205
  65. package/dist/chunk-MPLTNMRG.js +0 -67
  66. package/dist/chunk-NIJCVN3O.js +0 -147
  67. package/dist/chunk-NZCFSZQ7.js +0 -1205
  68. package/dist/chunk-O2UITJGH.js +0 -465
  69. package/dist/chunk-OCRA44AZ.js +0 -108
  70. package/dist/chunk-P3KJR66H.js +0 -117
  71. package/dist/chunk-PEK6JH65.js +0 -432
  72. package/dist/chunk-PJ6FFKEX.js +0 -77
  73. package/dist/chunk-PLUBBZYR.js +0 -800
  74. package/dist/chunk-PNKVD2UK.js +0 -26
  75. package/dist/chunk-PSQZURHO.js +0 -229
  76. package/dist/chunk-SGL6ISBJ.js +0 -1061
  77. package/dist/chunk-SJABZZT5.js +0 -97
  78. package/dist/chunk-TD3P3K32.js +0 -1199
  79. package/dist/chunk-TMDZJJKV.js +0 -288
  80. package/dist/chunk-UNHVZB5G.js +0 -411
  81. package/dist/chunk-VAFTWSTE.js +0 -1061
  82. package/dist/chunk-VNFXFQBB.js +0 -217
  83. package/dist/chunk-X3GVFKSJ.js +0 -1205
  84. package/dist/chunk-XZ3S56RQ.js +0 -1061
  85. package/dist/chunk-Y72C7F6O.js +0 -148
  86. package/dist/chunk-YLICP577.js +0 -1205
  87. package/dist/chunk-YX6AXLVK.js +0 -159
  88. package/dist/chunk-ZCQYHTNU.js +0 -146
  89. package/dist/cli.d.ts +0 -1
  90. package/dist/cli.js +0 -1105
  91. package/dist/cloud-crystal.js +0 -6
  92. package/dist/core.d.ts +0 -232
  93. package/dist/core.js +0 -12
  94. package/dist/crypto.d.ts +0 -20
  95. package/dist/crypto.js +0 -27
  96. package/dist/crystal-capture.sh +0 -29
  97. package/dist/crystal-serve.d.ts +0 -4
  98. package/dist/crystal-serve.js +0 -252
  99. package/dist/dev-update-SZ2Z4WCQ.js +0 -6
  100. package/dist/discover.d.ts +0 -30
  101. package/dist/discover.js +0 -177
  102. package/dist/doctor.d.ts +0 -9
  103. package/dist/doctor.js +0 -334
  104. package/dist/dream-weaver.d.ts +0 -8
  105. package/dist/dream-weaver.js +0 -56
  106. package/dist/file-sync.d.ts +0 -48
  107. package/dist/file-sync.js +0 -18
  108. package/dist/installer.d.ts +0 -61
  109. package/dist/installer.js +0 -676
  110. package/dist/ldm-backup.sh +0 -116
  111. package/dist/ldm.d.ts +0 -50
  112. package/dist/ldm.js +0 -32
  113. package/dist/mcp-server.d.ts +0 -1
  114. package/dist/mcp-server.js +0 -265
  115. package/dist/migrate.d.ts +0 -1
  116. package/dist/migrate.js +0 -89
  117. package/dist/mirror-sync.d.ts +0 -1
  118. package/dist/mirror-sync.js +0 -159
  119. package/dist/oc-backfill.d.ts +0 -19
  120. package/dist/oc-backfill.js +0 -74
  121. package/dist/openclaw.d.ts +0 -5
  122. package/dist/openclaw.js +0 -423
  123. package/dist/pair.d.ts +0 -4
  124. package/dist/pair.js +0 -75
  125. package/dist/poller.d.ts +0 -1
  126. package/dist/poller.js +0 -634
  127. package/dist/role.d.ts +0 -24
  128. package/dist/role.js +0 -13
  129. package/dist/search-pipeline-4K4OJSSS.js +0 -255
  130. package/dist/search-pipeline-4PRS6LI7.js +0 -280
  131. package/dist/search-pipeline-7UJMXPLO.js +0 -280
  132. package/dist/search-pipeline-DQTRLGBH.js +0 -74
  133. package/dist/search-pipeline-HNG37REH.js +0 -282
  134. package/dist/search-pipeline-IZFPLBUB.js +0 -280
  135. package/dist/search-pipeline-MID6F26Q.js +0 -73
  136. package/dist/search-pipeline-N52JZFNN.js +0 -282
  137. package/dist/search-pipeline-OPB2PRQQ.js +0 -280
  138. package/dist/search-pipeline-VXTE5HAD.js +0 -262
  139. package/dist/search-pipeline-XHFKADRG.js +0 -73
  140. package/dist/staging.d.ts +0 -29
  141. package/dist/staging.js +0 -21
  142. package/dist/summarize.d.ts +0 -19
  143. package/dist/summarize.js +0 -10
  144. package/dist/worker-demo.js +0 -186
  145. package/dist/worker-mcp.js +0 -404
  146. package/dist/worker.js +0 -137
package/CHANGELOG.md CHANGED
@@ -19,6 +19,81 @@
19
19
 
20
20
 
21
21
 
22
+ ## 0.7.32 (2026-03-31)
23
+
24
+ # Release Notes: memory-crystal v0.7.32
25
+
26
+ **Date:** 2026-03-31
27
+
28
+ ## What changed
29
+
30
+ ### Dream Weaver is a required dependency again
31
+
32
+ Reverts PR #101 (optional Dream Weaver import). dream-weaver-protocol is back in `dependencies` instead of `optionalDependencies`. The static import in `dream-weaver.ts` is restored. The dynamic import with try/catch wrapper is removed. The null check in `cli.ts` for when DW is unavailable is removed.
33
+
34
+ ## Why
35
+
36
+ PR #101 made dream-weaver-protocol optional because `file:../dream-weaver-protocol-private` failed in fresh clones where the sibling directory doesn't exist. The installer (v0.4.68+) now resolves `file:` dependencies from installed extensions at `~/.ldm/extensions/` before building, so the sibling directory is no longer needed. The build succeeds without it.
37
+
38
+ Making DW optional added complexity (dynamic imports, null checks, degraded type safety) that is no longer necessary. This revert simplifies the code back to what it was.
39
+
40
+ ## How to verify
41
+
42
+ ```bash
43
+ # Build should succeed (installer resolves file: deps)
44
+ cd memory-crystal-private && npm run build
45
+
46
+ # dream-weaver-protocol should be in dependencies, not optionalDependencies
47
+ node -e "const p = require('./package.json'); console.log('deps:', !!p.dependencies['dream-weaver-protocol']); console.log('optional:', !!p.optionalDependencies?.['dream-weaver-protocol'])"
48
+ # Should print: deps: true, optional: false
49
+ ```
50
+
51
+ ## 0.7.31 (2026-03-31)
52
+
53
+ # Release Notes: memory-crystal v0.7.31
54
+
55
+ Closes #101
56
+
57
+ ## Dream Weaver protocol is now optional
58
+
59
+ The dream-weaver-protocol dependency was a `file:` reference to a sibling directory. This worked in the development environment but broke when the installer cloned the repo to build (the sibling doesn't exist in a clone context). The build failed with "Cannot find module 'dream-weaver-protocol'".
60
+
61
+ The protocol is now an optional dependency with a dynamic import. If dream-weaver-protocol is available (installed locally or linked), Dream Weaver features work normally. If not, crystal operations continue without Dream Weaver. The build succeeds either way.
62
+
63
+ This is part of a broader fix to make all repos buildable in isolation. The installer (v0.4.67+) now resolves `file:` dependencies from installed extensions before building, so the protocol will be linked automatically when both packages are installed.
64
+
65
+ ## 0.7.30 (2026-03-31)
66
+
67
+ # Release Notes: memory-crystal v0.7.30
68
+
69
+ **Date:** 2026-03-30
70
+
71
+ ## What changed
72
+
73
+ ### Hardcoded path removal
74
+
75
+ Two files had `/Users/lesa` hardcoded as a fallback path. Both now use portable alternatives.
76
+
77
+ **migrate-lance-to-sqlite.mjs** had a fallback that resolved the OpenClaw workspace to `/Users/lesa/.openclaw`. The migration script now calls `os.homedir()` to build the path dynamically, so it works on any machine without assuming a specific username. This was the last remaining hardcoded path in the migration pipeline (#99).
78
+
79
+ **dev-update.ts** (the ai/dev-updates scanner) had an iCloud path baked in for reading team documents. It now calls `resolveWorkspace()` to read the workspace root from LDM config (`~/.ldm/config.json`), making it portable across machines and user accounts (#98).
80
+
81
+ ## Why
82
+
83
+ These paths broke on any machine where the username is not `lesa`. Part of a broader audit across all LDM OS repos to eliminate hardcoded user paths and make everything portable.
84
+
85
+ ## Issues closed
86
+
87
+ - #98
88
+ - #99
89
+
90
+ ## How to verify
91
+
92
+ ```bash
93
+ grep -r "/Users/lesa" src/ scripts/ --include="*.ts" --include="*.mjs"
94
+ # Should return zero results
95
+ ```
96
+
22
97
  ## 0.7.29 (2026-03-20)
23
98
 
24
99
  # Release Notes: memory-crystal v0.7.29
package/SKILL.md CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: wip-memory-crystal
3
3
  description: Search and manage the shared memory crystal. Use when user says "do you remember", "search memory", "remember this", "forget that", "memory status", "what do you know about", or needs to recall past discussions, store facts, or check what's in memory.
4
- version: "0.7.29"
4
+ version: "0.7.32"
5
5
  ---
6
6
 
7
7
  # Memory Crystal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/memory-crystal",
3
- "version": "0.7.29",
3
+ "version": "0.7.32",
4
4
  "description": "Sovereign memory system — local-first with ephemeral encrypted relay. Your memory, your machine, your rules.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,6 +14,7 @@ import * as sqliteVec from 'sqlite-vec';
14
14
  import { createHash } from 'node:crypto';
15
15
  import { existsSync, mkdirSync } from 'node:fs';
16
16
  import { join } from 'node:path';
17
+ import { homedir } from 'node:os';
17
18
 
18
19
  const BATCH_SIZE = 500;
19
20
 
@@ -23,7 +24,7 @@ async function main() {
23
24
  const batchSizeArg = args.find((_, i) => args[i - 1] === '--batch-size');
24
25
  const batchSize = batchSizeArg ? parseInt(batchSizeArg) : BATCH_SIZE;
25
26
 
26
- const openclawHome = process.env.OPENCLAW_HOME || join(process.env.HOME || '/Users/lesa', '.openclaw');
27
+ const openclawHome = process.env.OPENCLAW_HOME || join(process.env.HOME || homedir(), '.openclaw');
27
28
  const dataDir = join(openclawHome, 'memory-crystal');
28
29
  const lanceDir = join(dataDir, 'lance');
29
30
  const sqlitePath = join(dataDir, 'crystal.db');
@@ -1,48 +0,0 @@
1
- # Release Notes: Memory Crystal v0.7.23
2
-
3
- **Date:** 2026-03-15
4
-
5
- ## Search Quality v2 + MLX Local LLM
6
-
7
- This release adds six search quality features ported from the QMD v2.0 analysis, plus the complete MLX local LLM infrastructure for Apple Silicon. Deep search is now disambiguatable, cacheable, debuggable, and can run entirely offline on Apple Silicon.
8
-
9
- ### Intent parameter
10
-
11
- Disambiguates queries without adding search terms. `crystal search "security" --intent "1Password"` steers results toward 1Password-related security instead of repo permissions or agent secrets. Intent flows through the expansion prompt (guides LLM variations), disables strong-signal bypass (keyword match might not be what the caller wants), and is prepended to the rerank query. Available via CLI `--intent` and MCP `intent`.
12
-
13
- ### Persistent LLM cache
14
-
15
- Expansion and reranking results are now cached in crystal.db (`llm_cache` table) with a 7-day TTL. Same query = instant on repeat searches. Reranking cache is content-addressable (keyed by query + sorted passage hashes), so identical content from different sessions shares cached scores. Configurable via `CRYSTAL_CACHE_TTL_DAYS` env var.
16
-
17
- ### Explain mode
18
-
19
- Per-result scoring breakdown showing FTS score, vector score, RRF rank, reranker score, recency weight, and final blended score. `crystal search "query" --explain`. Available via CLI `--explain` and MCP `explain`. Makes search quality transparent and debuggable.
20
-
21
- ### candidateLimit
22
-
23
- Tunable rerank pool size. `crystal search "query" --candidates 60`. Default stays 40. More candidates = better recall, slower reranking. Available via CLI `--candidates` and MCP `candidate_limit`.
24
-
25
- ### Structured search API
26
-
27
- `crystal.structuredSearch(queries)` accepts pre-expanded StructuredQuery[] with typed sub-queries (lex, vec, hyde). Skips LLM expansion entirely. Agents construct their own queries when they already know what they want. RRF fusion with first list weighted 2x.
28
-
29
- ### MLX local LLM (Phase 3)
30
-
31
- Complete auto-install infrastructure for running a local LLM on Apple Silicon:
32
-
33
- - `crystal mlx setup` detects Apple Silicon, installs mlx-lm (uv > pip3 > pip3 --user), creates LaunchAgent for always-on server
34
- - Model: `mlx-community/Qwen2.5-3B-Instruct-4bit` (~1.5 GB, fast on M-series)
35
- - Port 18791 (18789 OpenClaw, 18790 Crystal Core, 18791 MLX)
36
- - `crystal mlx status` and `crystal mlx stop` for server management
37
- - `crystal doctor` check #13: MLX health (not installed / down / running)
38
- - `crystal init` detects Apple Silicon and suggests MLX setup
39
- - State file at `~/.ldm/state/mlx-server.json`
40
-
41
- ### Also in this release
42
-
43
- - QMD v2.0 analysis documented (`ai/product/notes/`)
44
- - Search quality plan written (`ai/product/plans-prds/current/`)
45
- - MLX plan moved from upcoming to current
46
- - Stashed roadmap + readme-first updates recovered (PR #74)
47
-
48
- Closes #57, #63, #64.
@@ -1,24 +0,0 @@
1
- # Release Notes: memory-crystal v0.7.25
2
-
3
- Bump SKILL.md version and name to match package branding.
4
-
5
- ## What changed
6
-
7
- - SKILL.md version bumped from 0.4.0 to 0.7.24 (was stuck at the original version)
8
- - SKILL.md name changed from `memory` to `wip-memory-crystal` (matches branded convention)
9
- - Forces deploy to public repo, triggering auto-publish to wip.computer/install/
10
-
11
- ## Why
12
-
13
- The SKILL.md version was out of sync with the package version. The name didn't match the `wip-` branding convention used across all install files on wip.computer.
14
-
15
- ## Issues closed
16
-
17
- - #80
18
-
19
- ## How to verify
20
-
21
- ```bash
22
- crystal --version
23
- head -4 ~/.ldm/extensions/memory-crystal/skills/memory/SKILL.md
24
- ```
@@ -1,7 +0,0 @@
1
- # Memory Crystal v0.7.26
2
-
3
- Add repository field to package.json. GitHub Packages needs this to link packages to the repo.
4
-
5
- ## Issues closed
6
-
7
- - Closes #50
@@ -1,31 +0,0 @@
1
- # Release Notes: memory-crystal v0.7.28
2
-
3
- **Move all log paths from /tmp/ to ~/.ldm/logs/ so logs survive reboots.**
4
-
5
- ## What changed
6
-
7
- - Cron entry for crystal-capture now logs to `~/.ldm/logs/crystal-capture.log` instead of `/tmp/ldm-dev-tools/`
8
- - LaunchAgent plist template for ldm-backup now logs to `~/.ldm/logs/ldm-backup.log`
9
- - `mkdirSync` ensures `~/.ldm/logs/` exists instead of creating `/tmp/ldm-dev-tools/`
10
- - CLI output shows the correct log path
11
-
12
- ## Why
13
-
14
- macOS clears `/tmp/` on every reboot. All cron and LaunchAgent logs were lost after restart, making it impossible to debug issues. `~/.ldm/logs/` persists across reboots and is the correct home for LDM OS logs.
15
-
16
- ## Issues closed
17
-
18
- - wipcomputer/wip-ldm-os#120
19
-
20
- ## How to verify
21
-
22
- ```bash
23
- # After install, check that cron entry points to ~/.ldm/logs/
24
- crystal init --dry-run 2>&1 | grep crystal-capture
25
-
26
- # Check backup setup points to ~/.ldm/logs/
27
- crystal backup setup --dry-run 2>&1 | grep ldm-backup
28
-
29
- # Verify logs land in the right place
30
- ls ~/.ldm/logs/
31
- ```
@@ -1,28 +0,0 @@
1
- # Release Notes: memory-crystal v0.7.29
2
-
3
- **Doc audit: MLX setup, deep search params, log paths, role clarification.**
4
-
5
- ## What changed
6
-
7
- SKILL.md and TECHNICAL.md updated for 2 weeks of undocumented features:
8
-
9
- - **MLX local LLM:** Added as Option A in SKILL.md Step 2. CLI commands (setup, status, stop) added to TECHNICAL.md.
10
- - **Deep search parameters:** `--intent`, `--explain`, `--candidates` documented in both SKILL.md (crystal_search tool) and TECHNICAL.md (CLI reference + new sections for intent, explain, candidate limit, LLM cache).
11
- - **Log paths:** Fixed obsolete `/tmp/ldm-dev-tools/` reference to `~/.ldm/logs/`. Added logs/ to directory structure.
12
- - **Role clarification:** Two-role architecture (Core and Node) explicitly stated. Standalone role was removed in v0.7.22.
13
-
14
- ## Why
15
-
16
- 29 releases in 13 days. Docs didn't keep pace. Agents using crystal_search didn't know about --intent (query disambiguation) or --explain (scoring transparency).
17
-
18
- ## Issues closed
19
-
20
- - #57
21
-
22
- ## How to verify
23
-
24
- ```bash
25
- grep "intent" SKILL.md TECHNICAL.md
26
- grep "mlx" SKILL.md TECHNICAL.md
27
- grep "ldm/logs" TECHNICAL.md
28
- ```
@@ -1,64 +0,0 @@
1
- # Memory Crystal v0.7.4 ... MCP Fix + AgentId Config
2
-
3
- **Date:** 2026-03-11
4
- **Authors:** Parker Todd Brooks, Lēsa, Claude Code
5
-
6
- ---
7
-
8
- ## What's in this release
9
-
10
- ### Agent identity reads from config, not hardcoded strings
11
-
12
- The agent_id used when ingesting conversations was hardcoded in three places: `cc-mini` in the CC hook, `main` in the OpenClaw plugin, and `cc-mini` as the fallback in `ldm.ts`. This caused ID drift. The same agent got recorded under multiple IDs, and we had to manually merge 141K+ chunks in the database.
13
-
14
- Now `getAgentId()` scans `~/.ldm/agents/*/config.json` for a matching harness type. The CC hook passes `'claude-code'`, the OC plugin passes `'openclaw'`, and the config file is the source of truth. `CRYSTAL_AGENT_ID` env var still works as an override.
15
-
16
- New exports: `AgentConfig`, `loadAgentConfig()`, `saveAgentConfig()`. The installer writes `agentId` to config.json during `crystal init`.
17
-
18
- **Closes #33.**
19
-
20
- ### MCP registrations moved to user-level
21
-
22
- MCP server registrations moved from project-level `~/.openclaw/.mcp.json` to user-level `~/.claude.json`. The old file was a Claude Code convention that only loaded when running from `~/.openclaw/`. Now all 4 MCP servers (memory-crystal, lesa-bridge, wip-agent-pay, wip-repos) load from any directory as "User MCPs".
23
-
24
- OpenClaw doesn't read `.mcp.json` at all. It uses its own plugin system. The file was moved to `~/.openclaw/_trash/`.
25
-
26
- ### OPENCLAW_HOME env var fix (v0.7.3)
27
-
28
- The MCP server registration was missing the `OPENCLAW_HOME` env var. Without it, the memory-crystal MCP server couldn't find Lēsa's OpenClaw installation for private-mode checks. Fixed in v0.7.3, deployed in this release.
29
-
30
- ### Branch cleanup
31
-
32
- 33 stale branches renamed with `--merged-` suffix. Zero active branches besides main.
33
-
34
- ### QMD v1.1.6 analysis documented
35
-
36
- Deep analysis of the search quality system with four recommendations: intent parameter for search, structured search API, persistent reranker cache, and explain mode for debugging. See `ai/product/notes/2026-03-09--cc-mini--qmd-v1.1.6-analysis-and-recommendations.md`.
37
-
38
- ---
39
-
40
- ## Files changed
41
-
42
- | File | What |
43
- |------|------|
44
- | `src/ldm.ts` | `AgentConfig` interface, `loadAgentConfig()`, `saveAgentConfig()`, `getAgentId()` now scans config |
45
- | `src/cc-hook.ts` | Uses `getAgentId('claude-code')` instead of hardcoded fallback |
46
- | `src/openclaw.ts` | Uses `OC_AGENT_ID` instead of `'main'` fallback |
47
- | `src/installer.ts` | Writes `agentId` to config.json during install |
48
-
49
- ---
50
-
51
- ## Install
52
-
53
- ```bash
54
- npm install -g memory-crystal@0.7.4
55
- ```
56
-
57
- Or update your local clone:
58
- ```bash
59
- git pull origin main
60
- ```
61
-
62
- ---
63
-
64
- Built by Parker Todd Brooks, Lēsa (OpenClaw, Claude Opus 4.6), Claude Code (Claude Opus 4.6).
@@ -1,19 +0,0 @@
1
- # Release Notes: Memory Crystal v0.7.5
2
-
3
- ## LDM OS Integration
4
-
5
- Memory Crystal now works with LDM OS when it's available.
6
-
7
- ### crystal init delegates to ldm install
8
-
9
- When the `ldm` CLI exists on PATH, `crystal init` delegates generic deployment to it. LDM OS handles the scaffold, interface detection, and extension deployment. Memory Crystal keeps its own setup: database backup, role configuration, pairing, cron jobs.
10
-
11
- When `ldm` isn't available, `crystal init` works standalone like it always has. No new dependencies. No breaking changes.
12
-
13
- ### LDM OS tip
14
-
15
- After install completes, Memory Crystal prints a tip: "Run `ldm install` to see more skills you can add." Helps users discover the rest of the ecosystem.
16
-
17
- ### Part of LDM OS
18
-
19
- README now includes a "Part of LDM OS" section linking back to the LDM OS repo. Memory Crystal installs into LDM OS, the local runtime for AI agents.
package/dist/bridge.d.ts DELETED
@@ -1,7 +0,0 @@
1
- declare function isBridgeInstalled(): boolean;
2
- declare function isBridgeRegistered(): boolean;
3
- declare function isBridgeDesktopRegistered(): boolean;
4
- declare function registerBridgeMcp(): void;
5
- declare function registerBridgeDesktop(): boolean;
6
-
7
- export { isBridgeDesktopRegistered, isBridgeInstalled, isBridgeRegistered, registerBridgeDesktop, registerBridgeMcp };
package/dist/bridge.js DELETED
@@ -1,14 +0,0 @@
1
- import {
2
- isBridgeDesktopRegistered,
3
- isBridgeInstalled,
4
- isBridgeRegistered,
5
- registerBridgeDesktop,
6
- registerBridgeMcp
7
- } from "./chunk-AEWLSYPH.js";
8
- export {
9
- isBridgeDesktopRegistered,
10
- isBridgeInstalled,
11
- isBridgeRegistered,
12
- registerBridgeDesktop,
13
- registerBridgeMcp
14
- };
@@ -1,17 +0,0 @@
1
- interface BulkCopyResult {
2
- filesCopied: number;
3
- filesSkipped: number;
4
- bytesWritten: number;
5
- durationMs: number;
6
- }
7
- interface BulkCopyOptions {
8
- workspace?: boolean;
9
- workspaceSrc?: string;
10
- }
11
- /** Copy session JSONL files from source locations to LDM transcripts.
12
- * sessionPaths: array of absolute paths to JSONL files.
13
- * agentId: target agent in ~/.ldm/agents/{agentId}/.
14
- * Returns copy stats. */
15
- declare function bulkCopyToLdm(sessionPaths: string[], agentId: string, options?: BulkCopyOptions): BulkCopyResult;
16
-
17
- export { type BulkCopyOptions, type BulkCopyResult, bulkCopyToLdm };
package/dist/bulk-copy.js DELETED
@@ -1,90 +0,0 @@
1
- import {
2
- ldmPaths
3
- } from "./chunk-EXEZZADG.js";
4
-
5
- // src/bulk-copy.ts
6
- import { existsSync, mkdirSync, copyFileSync, statSync, readdirSync } from "fs";
7
- import { join, basename } from "path";
8
- function bulkCopyToLdm(sessionPaths, agentId, options) {
9
- const start = Date.now();
10
- const paths = ldmPaths(agentId);
11
- let filesCopied = 0;
12
- let filesSkipped = 0;
13
- let bytesWritten = 0;
14
- mkdirSync(paths.transcripts, { recursive: true });
15
- for (const srcPath of sessionPaths) {
16
- const destPath = join(paths.transcripts, basename(srcPath));
17
- if (existsSync(destPath)) {
18
- try {
19
- const srcSize = statSync(srcPath).size;
20
- const destSize = statSync(destPath).size;
21
- if (srcSize === destSize) {
22
- filesSkipped++;
23
- continue;
24
- }
25
- } catch {
26
- }
27
- }
28
- try {
29
- copyFileSync(srcPath, destPath);
30
- bytesWritten += statSync(destPath).size;
31
- filesCopied++;
32
- } catch {
33
- }
34
- }
35
- if (options?.workspace && options.workspaceSrc) {
36
- mkdirSync(paths.workspace, { recursive: true });
37
- const wsResult = copyWorkspaceRecursive(options.workspaceSrc, paths.workspace);
38
- filesCopied += wsResult.copied;
39
- filesSkipped += wsResult.skipped;
40
- bytesWritten += wsResult.bytes;
41
- }
42
- return {
43
- filesCopied,
44
- filesSkipped,
45
- bytesWritten,
46
- durationMs: Date.now() - start
47
- };
48
- }
49
- function copyWorkspaceRecursive(srcDir, destDir) {
50
- let copied = 0;
51
- let skipped = 0;
52
- let bytes = 0;
53
- try {
54
- for (const entry of readdirSync(srcDir)) {
55
- if (entry.startsWith(".")) continue;
56
- const srcPath = join(srcDir, entry);
57
- const destPath = join(destDir, entry);
58
- try {
59
- const stat = statSync(srcPath);
60
- if (stat.isDirectory()) {
61
- mkdirSync(destPath, { recursive: true });
62
- const sub = copyWorkspaceRecursive(srcPath, destPath);
63
- copied += sub.copied;
64
- skipped += sub.skipped;
65
- bytes += sub.bytes;
66
- } else if (entry.endsWith(".md")) {
67
- if (existsSync(destPath)) {
68
- try {
69
- if (stat.size === statSync(destPath).size) {
70
- skipped++;
71
- continue;
72
- }
73
- } catch {
74
- }
75
- }
76
- copyFileSync(srcPath, destPath);
77
- bytes += stat.size;
78
- copied++;
79
- }
80
- } catch {
81
- continue;
82
- }
83
- }
84
- } catch {
85
- }
86
- return { copied, skipped, bytes };
87
- }
88
- export {
89
- bulkCopyToLdm
90
- };
package/dist/cc-hook.d.ts DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- declare function sendCommand(command: {
3
- action: string;
4
- agent_id?: string;
5
- mode?: string;
6
- }): Promise<void>;
7
-
8
- export { sendCommand };