memorix 1.0.5 → 1.0.7
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.
- package/CHANGELOG.md +350 -217
- package/CLAUDE.md +1 -1
- package/README.md +428 -284
- package/README.zh-CN.md +435 -282
- package/dist/cli/index.js +21881 -13429
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/static/app.js +969 -197
- package/dist/dashboard/static/index.html +10 -3
- package/dist/dashboard/static/style.css +46 -0
- package/dist/index.js +7254 -2723
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +396 -0
- package/dist/types.js +32 -0
- package/dist/types.js.map +1 -0
- package/llms-full.txt +61 -30
- package/llms.txt +42 -13
- package/package.json +25 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,139 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.0.7] - Unreleased
|
|
6
|
+
|
|
7
|
+
### Visual Semantic Layering (dashboard follow-up)
|
|
8
|
+
- Team page headline is now **active-only**; `recent`/`historical` shown as secondary subtitle only.
|
|
9
|
+
- Team agents list gets four filter tabs: **Active** (default) / Recent / Historical / All. Historical rows no longer flood the view; they sit behind an explicit "Show historical (N)" toggle.
|
|
10
|
+
- Each agent row carries an explicit tier badge (Active/Recent/Historical) instead of a single "offline" sea of red.
|
|
11
|
+
- Historical agent rows are de-emphasized (reduced opacity, muted colors) so they don't dominate the main view.
|
|
12
|
+
- Identity page headline shows **real** project count + **real** alias groups only. Temporary/placeholder IDs moved into a collapsed "Historical / temporary project IDs" section.
|
|
13
|
+
- Identity "Dirty IDs" card now splits current-project dirty (primary) from historical dirty (secondary) so a single placeholder no longer looks like an active problem.
|
|
14
|
+
- Project switcher groups items into **Current / Real projects / Temporary / Placeholder**, with temporary and placeholder folded behind a "Show temporary" toggle. Each group has a visible count so users can tell a real project list apart from the historical test/smoke scratch pile.
|
|
15
|
+
- All new labels wired through the i18n system (English + Simplified Chinese).
|
|
16
|
+
|
|
17
|
+
### Team Page Cleanup (1.0.7 final)
|
|
18
|
+
- **Team page semantics**: clearly presented as a **project collaboration space**, not an organization backend or staffing admin tool. Scope labels: "Project Collaboration" / "All Projects".
|
|
19
|
+
- **`memorix_session_start` auto-registration**: agents are automatically registered in the team with a default role derived from `agentType` via `AGENT_TYPE_ROLE_MAP` (e.g. `windsurf`→`engineer`, `gemini-cli`→`researcher`). No separate `team_manage(join)` call needed. Explicit role overrides the default.
|
|
20
|
+
- **"Continue This Project" resume area**: shows open tasks, available-to-claim tasks, open handoffs, unread messages, active locks, and active agent count at the top of the Team page. Provides a clear "pick up where you left off" entry point.
|
|
21
|
+
- **Unified statistics**: stat cards clearly labeled — Active Agents (with session count + historical total), Locked Files, Tasks (by status), Messages (unread count). No conflicting or ambiguous labels.
|
|
22
|
+
|
|
23
|
+
### Added -- Multi-Agent Orchestrator (Phase 7)
|
|
24
|
+
- **`memorix orchestrate`** -- Autonomous pipeline: plan → parallel execution → verify gates → fix loops → review → merge. 4 agent adapters (Claude, Codex, Gemini, OpenCode), capability routing with quotas, worktree isolation, evidence collection, stranded task detection, agent fallback on repeated failures.
|
|
25
|
+
- **CLI flags**: `--agents claude:2,codex:1`, `--goal`, `--parallel`, `--compile-command`, `--test-command`, `--max-fix`, `--budget`, `--routing`, `--memory-capture`, `--no-evidence`, `--global-timeout`
|
|
26
|
+
|
|
27
|
+
### Added -- SQLite Canonical Store (Phase 2)
|
|
28
|
+
- Observations, mini-skills, sessions, archives all in SQLite. Shared DB handle, freshness-safe retrieval, in-place archiving.
|
|
29
|
+
|
|
30
|
+
### Added -- Team Identity (Phase 4)
|
|
31
|
+
- Team store with agent registration, heartbeat, task board, handoff artifacts, stale detection. Prompt identity contract, sticky attribution prevention.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
- **#4** Parallel multi-agent — fully implemented via orchestrator
|
|
35
|
+
- **#52** observations.json perf — migrated to SQLite
|
|
36
|
+
- **#56** LLM rerank timeout — configurable via `MEMORIX_RERANK_TIMEOUT_MS`
|
|
37
|
+
- **#75** Cursor stdio binding — deferred-binding mode instead of exit
|
|
38
|
+
- **Gemini JSON parse** — brace-counting extractor handles trailing text
|
|
39
|
+
- **Evidence for failed tasks** — both fix-exhausted and normal failure paths now write evidence
|
|
40
|
+
- **Agent fallback** — failed agents excluded from retry routing
|
|
41
|
+
- **P1: uninstall hooks** — shared context files (AGENTS.md/GEMINI.md) now block-level removal instead of deleting entire file
|
|
42
|
+
- **P1: budget abort** — current settled dispatch now fails task (was left stuck in_progress)
|
|
43
|
+
- **P1: streaming completion** — waits for stdout/stderr close before resolving (was missing final JSONL lines)
|
|
44
|
+
- **P1: Claude adapter headless hang** — added `--bare` flag to skip hooks/LSP/keychain/interactive ops, plus `--mcp-config` to restore Memorix MCP tool access in bare mode
|
|
45
|
+
- **P1: planner JSON materialization** — use accumulated text from message stream instead of ring buffer `tailOutput` (avoids truncation when planner does many tool calls before outputting plan)
|
|
46
|
+
- **P1: reviewer hanging** — `--mcp-config` enables `memorix_handoff` / `team_task` MCP tool calls that reviewer needs for completion path
|
|
47
|
+
- **P1: structured planner double-create** — `plannerType: 'plan'` tasks now forbidden from calling `team_task create` (must output JSON only; coordinator materializes). Prevents duplicate engineer/reviewer tasks in goal-mode pipelines
|
|
48
|
+
- **P2: budget validation** — CLI and coordinator reject NaN/negative/zero budget values
|
|
49
|
+
- **P2: streaming buffer** — bounded at 1024 messages with drop-oldest policy
|
|
50
|
+
- **P2: install audit** — recordFile called even when Memorix block already exists (audit self-heal on reinstall)
|
|
51
|
+
- **P2: install audit** — new shared file creation also records audit entry
|
|
52
|
+
- **P2: uninstall return** — rules-only agents (codex/gemini-cli) return true when audit cleanup succeeds
|
|
53
|
+
- **#80** OpenCode hooks — plugin now uses individual event-name keys (`session.created`, `file.edited`, `command.executed`, etc.) instead of invalid catch-all `event` handler that OpenCode never called. Replaced fragile `cat | memorix hook` pipe with `Bun.spawn` stdin pipe for reliable cross-platform invocation. Added diagnostic logging on failure. Hooks status now distinguishes verified (config-based) from unverified (plugin-based) agents.
|
|
54
|
+
- **OpenCode plugin v5** — replaced `Bun.spawn` with `child_process.spawnSync` for cross-runtime compatibility (OpenCode may fall back to Node.js on Windows where Bun segfaults). Fixed `file.edited` field extraction (`input.path` before `input.file`). Added exit code and stderr diagnostic logging. Added 10s timeout to prevent hangs.
|
|
55
|
+
- **Copilot Windows runtime** — `powershell` field omitted from hook config when `pwsh` (PowerShell v7+) is not installed, preventing `spawn pwsh.exe ENOENT` errors. Copilot falls back to `bash` field (Git Bash). Install command warns if `pwsh` is missing on Windows and suggests `winget install Microsoft.PowerShell`.
|
|
56
|
+
- **Copilot global hooks** — `getGlobalConfigPath('copilot')` was falling through to the Claude case and returning `~/.claude/settings.json`, which is completely wrong. Per official GitHub docs, Copilot only supports project-level hooks at `.github/hooks/*.json` — there is no global hooks path. Fixed by returning empty string for global path, adding guards in install/uninstall to reject `--global` for Copilot, and updating hooks status to skip the global check.
|
|
57
|
+
- **Hook handler diagnostics** — `runHook()` store path and `handleSessionStart()` now log errors to stderr instead of silently swallowing, making end-to-end pipeline failures visible for debugging.
|
|
58
|
+
|
|
59
|
+
### Added -- 1.0.7 Closeout
|
|
60
|
+
- **Routing explainability** — `buildRoutingDecision()` / `buildIdleReasons()` helpers trace adapter selection reasons (default_preference, cli_override, quota_fallback, excluded_failed, last_resort) in pipeline trace, evidence, and summary
|
|
61
|
+
- **Structured role extraction** — `extractRole()` prioritizes `metadata.role` over `[Role: ...]` text parsing; canonical source is structured metadata
|
|
62
|
+
- **Balanced scheduling** — `--scheduling balanced` policy with round-robin tiebreaker among equally-preferred adapters; `best-fit` remains default
|
|
63
|
+
- **Idle agent visibility** — pipeline summary includes `idleAgents` with reasons for non-participation
|
|
64
|
+
- **Pipeline summary extensions** — `routingDecisions` and `idleAgents` fields in `PipelineSummary` for full explainability
|
|
65
|
+
- **#62+#74** dashboard loadDotenv
|
|
66
|
+
- **#70** doctor health check
|
|
67
|
+
- **#69** background start non-TTY hang
|
|
68
|
+
- **#66** dashboard delete/cleanup/export
|
|
69
|
+
- **#79** Codex roots/list protocol compatibility
|
|
70
|
+
- **#18** dot-directory merge + hooks install migration
|
|
71
|
+
|
|
72
|
+
### Removed -- Dead Code (Stabilization)
|
|
73
|
+
- **`src/store/json-store.ts`** — `JsonBackend` class deleted; no runtime or test references. SQLite is sole canonical backend, `DegradedBackend` is read-only fallback.
|
|
74
|
+
- **`appendArchivedObservations` / `loadArchivedObservations`** — dead code removed from `persistence-json.ts` and `persistence.ts` re-exports. Archives live in SQLite `status='archived'` rows.
|
|
75
|
+
- **`'json'` from `getBackendName()` return type** — union narrowed to `'sqlite' | 'degraded'` across `ObservationStore` interface, `SqliteBackend`, `DegradedBackend`.
|
|
76
|
+
|
|
77
|
+
### Changed -- Stale Naming Cleanup
|
|
78
|
+
- All `JsonBackend` references in comments and test names replaced with `DegradedBackend`.
|
|
79
|
+
- `observations.ts:71` "For JsonBackend" → "For DegradedBackend".
|
|
80
|
+
- `obs-store.ts:91` "JsonBackend: no-op" → "DegradedBackend: no-op".
|
|
81
|
+
- `sqlite-store.test.ts:389` test name "falls back to JsonBackend" → "falls back to DegradedBackend", assertion `['sqlite', 'json']` → `['sqlite', 'degraded']`.
|
|
82
|
+
|
|
83
|
+
### Fixed -- Dashboard Semantics Closure
|
|
84
|
+
- **Mode/Port semantics** — `DashboardState` now includes `mode` ('standalone' | 'control-plane') and `port`. `/api/project` returns `mode`, `port`, and `mcpEndpoint`. Dashboard UI shows mode banner with i18n support.
|
|
85
|
+
- **Team API contract** — `/api/team` in control-plane mode now normalizes SQLite snake_case rows to camelCase, matching the frontend contract. Added `listAllAgents`, `listAllLocks`, `listAllTasks` to `TeamStore` for global scope.
|
|
86
|
+
- **Team page crash-proof** — `loadTeam()` safely normalizes missing/null fields (`a.id`, `tk.deps`, `l.lockedBy`). No more `Cannot read properties of undefined` errors.
|
|
87
|
+
- **Project switcher sync** — Switching project in the dashboard now calls `/api/set-current-project` to sync backend state.
|
|
88
|
+
- **i18n coverage** — All remaining hardcoded English strings in Team page (time ago, lock TTL, agent time labels, session count) now use `t()` with Chinese translations.
|
|
89
|
+
- **CLI help alignment** — `memorix dashboard` and `memorix serve-http` JSDoc now document mode semantics (Standalone=3210, Control Plane=3211). Startup logs show mode label.
|
|
90
|
+
|
|
91
|
+
### Changed -- Test Suite Stabilization
|
|
92
|
+
- **E2e demo tests** (`tests/e2e/`) excluded from default `vitest run` — these test CLI-agent demo artifacts, not Memorix product code. Available via `npm run test:e2e`.
|
|
93
|
+
- **Live LLM quality tests** excluded from default suite — require `MEMORIX_RUN_LIVE_LLM_TESTS=1`. Rules-only fallback test preserved in `tests/memory/formation-rules-fallback.test.ts`. Available via `npm run test:llm-live`.
|
|
94
|
+
- **Coordinator merge-conflict test** made deterministic — synchronous conflict file writes in `spawn()` instead of async `setTimeout` race. Removed `{ retry: 3 }`.
|
|
95
|
+
- **Default test suite**: 141 files, 1906 tests, **0 skipped, 0 failed**.
|
|
96
|
+
|
|
97
|
+
### Added -- Hooks Test Coverage
|
|
98
|
+
- Audit ledger lost/corrupted → re-install recovers audit entry (codex).
|
|
99
|
+
- Non-shared-rules agent install/uninstall (claude) verifying config file creation and cleanup.
|
|
100
|
+
|
|
101
|
+
## [1.0.6] - 2026-04-05
|
|
102
|
+
|
|
103
|
+
### Added -- Memory Provenance and Layered Retrieval
|
|
104
|
+
- **Provenance foundation** -- Observations now carry `sourceDetail` (`explicit` / `hook` / `git-ingest`) and `valueCategory` (`core` / `contextual` / `ephemeral`). All ten write-path call sites annotated. Backward-compatible: old data without new fields parses cleanly.
|
|
105
|
+
- **Layered disclosure (L1/L2/L3)** -- `memorix_session_start` now separates routing hints (L1), working context (L2), and deep evidence (L3). Session injection scores observations by source and value category so hook noise stays out of working context.
|
|
106
|
+
- **Evidence retrieval** -- `memorix_detail` and `memorix_timeline` now surface provenance cues (source badge, evidence basis) so operators can trace why a memory exists and what supports it.
|
|
107
|
+
- **Verification-aware evidence** -- Detail and timeline outputs distinguish direct, summarized, derived, and repository-backed evidence without requiring a full citation framework.
|
|
108
|
+
- **Citation-lite** -- Evidence-bearing surfaces emit lightweight citation hints (`[source: git]`, `[verified: repo-backed]`) to support "why surfaced" and "what supports this" queries.
|
|
109
|
+
- **Retrieval tuning** -- Source-aware boost treats `git-ingest` as first-class git evidence for intent-aware ranking. Lightweight provenance tiebreaking for ambiguous retrieval results. L1 routing surfaces active entities as next-hop search guidance.
|
|
110
|
+
- **Graph routing hints** -- Knowledge graph neighborhood is used for lightweight retrieval enrichment and entity-affinity scoring without a full graph rewrite.
|
|
111
|
+
|
|
112
|
+
### Added -- Task-Line Scoping, Secret Safety, and Attribution Hardening
|
|
113
|
+
- **Task-line scoping** -- Search and session context now bias toward the current entity/task-line/subdomain, reducing cross-workstream contamination within a single project bucket.
|
|
114
|
+
- **Secret safety** -- Store-time detection blocks obvious credentials, passwords, and tokens from entering durable memory. Retrieval-time redaction acts as a second safety net for already-stored sensitive data.
|
|
115
|
+
- **Project attribution hardening** -- Write-path consistency checks reduce wrong-bucket writes. `memorix_audit_project` scans for misattributed observations and reports them with confidence levels.
|
|
116
|
+
- **Ambiguous-target attribution fix** -- Observations stored during ambiguous project context are now flagged rather than silently written to the wrong bucket.
|
|
117
|
+
|
|
118
|
+
### Added -- Retention, Cleanup, and Operator Remediation
|
|
119
|
+
- **Retention calibration** -- Source-aware retention multipliers (hook 0.5x, git-ingest 1.5x) and value-category multipliers (ephemeral 0.5x, core 2.0x) with a 7-day minimum floor. Immunity refined: only `critical` importance and `core` valueCategory grant permanent immunity; `high`-importance types keep long retention but can now decay.
|
|
120
|
+
- **Retention explainability** -- `memorix_retention action="stale"` shows a full table with per-observation retention explanation (importance, multipliers, effective days, zone, immunity reason).
|
|
121
|
+
- **Cleanup remediation loop** -- `memorix_retention` (stale/report), `memorix_audit_project`, and `memorix_resolve` now form a coherent operator loop. Each output includes structured `Suggested IDs: [...]` blocks and explicit next-step guidance. `memorix_resolve` links back to retention report for closed-loop cleanup.
|
|
122
|
+
|
|
123
|
+
### Added -- OpenCode Plugin Improvements
|
|
124
|
+
- **`post_compact` event** -- New `post_compact` hook event type. OpenCode's `session.compacted` event correctly maps to `post_compact` (was incorrectly mapped to `pre_compact`). Plugin event handler triggers `runHook` side-effect on compaction completion.
|
|
125
|
+
- **Structured compaction prompt** -- OpenCode compaction prompt rewritten as a structured continuation format requesting current task, key decisions, active files, blockers, next steps, active entities, and memorix context. No longer promises automatic `memorix_store` / `memorix_session_start` invocation during compaction.
|
|
126
|
+
|
|
127
|
+
### Fixed
|
|
128
|
+
- **#45 OpenCode compaction** -- Compaction prompt no longer makes misleading tool-call promises. `session.compacted` event now fires a real side-effect via `runHook`. Normalizer mapping corrected to `post_compact`.
|
|
129
|
+
- **#46 Dotenv load order** -- `loadDotenv()` now runs before `getEmbeddingProvider()` in `status`, `doctor`, and TUI entry points, fixing "No API key" errors when `.env` credentials were present.
|
|
130
|
+
- **#48 Ingest log dedup** -- `memorix ingest log` now deduplicates by commit hash, matching the behavior of `ingest commit` and TUI batch ingest. Repeated runs skip already-ingested commits.
|
|
131
|
+
|
|
132
|
+
### Stats
|
|
133
|
+
- **Tests:** 1439 passed | 2 skipped (102 files)
|
|
134
|
+
- **Phases landed:** 11 (provenance -> layered disclosure -> evidence -> verification -> citation-lite -> retrieval tuning -> graph routing -> task-line/secret -> attribution -> retention -> cleanup ergonomics)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
5
138
|
## [1.0.5] - 2026-03-24
|
|
6
139
|
|
|
7
140
|
### Added
|
|
@@ -34,44 +167,44 @@ All notable changes to this project will be documented in this file.
|
|
|
34
167
|
|
|
35
168
|
---
|
|
36
169
|
|
|
37
|
-
## [1.0.4]
|
|
170
|
+
## [1.0.4] -- 2026-03-17
|
|
38
171
|
|
|
39
172
|
### Added
|
|
40
|
-
- **Git Memory pipeline**
|
|
41
|
-
- **Reasoning Memory tools**
|
|
42
|
-
- **Source-aware retrieval and cross-linking**
|
|
43
|
-
- **Structured config model**
|
|
44
|
-
- **Dashboard control plane upgrades**
|
|
173
|
+
- **Git Memory pipeline** -- `git commit` can now flow directly into Memorix via `memorix git-hook`, `memorix git-hook-uninstall`, and `memorix ingest commit --auto`. Stored observations now carry `source` and `commitHash`, and Git memories can be filtered explicitly with `source: "git"`.
|
|
174
|
+
- **Reasoning Memory tools** -- Added `memorix_store_reasoning` and `memorix_search_reasoning` so design rationale, alternatives, constraints, and risks can be stored and searched as a first-class memory layer.
|
|
175
|
+
- **Source-aware retrieval and cross-linking** -- Search now boosts Git, reasoning, and problem-solution memories differently based on query intent. Git memories and reasoning memories can cross-reference each other via related commits and shared entities.
|
|
176
|
+
- **Structured config model** -- Added project/user `memorix.yml`, project/user `.env` loading, `memorix init`, and configuration provenance diagnostics in `memorix status`.
|
|
177
|
+
- **Dashboard control plane upgrades** -- Added Git Memory, Config Provenance, and Identity Health views, plus richer stats and a stabilized graph layout for the HTTP dashboard.
|
|
45
178
|
|
|
46
179
|
### Changed
|
|
47
|
-
- **Documentation consolidation**
|
|
48
|
-
- **Project detection model**
|
|
49
|
-
- **Dashboard usage model**
|
|
180
|
+
- **Documentation consolidation** -- Reworked README, README.zh-CN, setup, architecture, API reference, configuration, Git Memory, and development guides so they match the current product model: local-first platform, `memorix.yml + .env`, Git Memory, HTTP dashboard, and the four-layer architecture.
|
|
181
|
+
- **Project detection model** -- Project identity now centers on real Git roots, MCP roots support, system-directory fallback handling, and runtime project switching instead of older placeholder-style fallback identities.
|
|
182
|
+
- **Dashboard usage model** -- `memorix background start` is now the primary long-lived HTTP control-plane entrypoint when you want HTTP transport, collaboration features, and dashboard access in one place. `memorix serve-http --port 3211` remains the foreground/debug variant.
|
|
50
183
|
|
|
51
184
|
### Fixed
|
|
52
|
-
- **Project identity drift**
|
|
53
|
-
- **Worktree-safe Git hooks**
|
|
54
|
-
- **Runtime config correctness**
|
|
55
|
-
- **Git Memory quality**
|
|
56
|
-
- **Cross-project detail retrieval**
|
|
57
|
-
- **Skill generation noise**
|
|
58
|
-
- **OpenCode static plugin noise**
|
|
59
|
-
- **CI/publish flow**
|
|
185
|
+
- **Project identity drift** -- Fixed Codex/Windsurf startup issues that produced `local/System32`, IDE-installation-directory identities, or other incorrect local project bindings.
|
|
186
|
+
- **Worktree-safe Git hooks** -- Hook installation, uninstall, auto-install checks, and status reporting now resolve hooks directories correctly for both normal repos and Git worktrees.
|
|
187
|
+
- **Runtime config correctness** -- Fixed project-level `memorix.yml` not reaching runtime getters, `.env` values leaking across project switches, and legacy `config.json` not showing up correctly in provenance diagnostics.
|
|
188
|
+
- **Git Memory quality** -- Added noise filtering, preserved release/version milestone commits, and implemented `memorix ingest commit --force` as an escape hatch for manual ingestion.
|
|
189
|
+
- **Cross-project detail retrieval** -- Global search results can now be opened reliably with project-aware refs instead of colliding on observation IDs from different projects.
|
|
190
|
+
- **Skill generation noise** -- `memorix_skills generate` now filters low-signal command-history observations like `git`, `gh`, `npm`, and `npx` so generated skills stay project-relevant.
|
|
191
|
+
- **OpenCode static plugin noise** -- Merged the first external PR to silence `console.log` spam in the static OpenCode plugin without reintroducing session lifecycle side effects.
|
|
192
|
+
- **CI/publish flow** -- Restored CI green after type/test regressions and changed npm publishing workflow to manual trigger instead of automatic release publishing.
|
|
60
193
|
|
|
61
194
|
### Stats
|
|
62
195
|
- **Tests:** 879/879 passing across 68 files
|
|
63
|
-
- **Runtime modes:** stdio MCP (`memorix serve`), HTTP MCP + dashboard (`memorix serve-http --port 3211`), and standalone dashboard remain supported
|
|
196
|
+
- **Runtime modes:** stdio MCP (`memorix serve`), HTTP MCP + dashboard (`memorix background start` by default, or `memorix serve-http --port 3211` in the foreground), and standalone dashboard remain supported
|
|
64
197
|
|
|
65
198
|
---
|
|
66
199
|
|
|
67
|
-
## [1.0.3]
|
|
200
|
+
## [1.0.3] -- 2026-03-14
|
|
68
201
|
|
|
69
202
|
### Added
|
|
70
|
-
- **Memory Formation Pipeline**
|
|
203
|
+
- **Memory Formation Pipeline** -- Three-stage pipeline (Extract -> Resolve -> Evaluate) runs in shadow mode on every `memorix_store` call and hooks trigger. Collects quality metrics without affecting storage decisions.
|
|
71
204
|
- **Extract**: Automatic fact extraction from narratives, title normalization, entity resolution against Knowledge Graph, observation type verification.
|
|
72
205
|
- **Resolve**: 4 resolution actions (new/merge/evolve/discard) based on similarity scoring, word overlap, and contradiction detection.
|
|
73
206
|
- **Evaluate**: Multi-factor knowledge value assessment (type weight, fact density, specificity, causal reasoning, noise detection). Categorizes memories as core/contextual/ephemeral.
|
|
74
|
-
- **`memorix_formation_metrics` tool**
|
|
207
|
+
- **`memorix_formation_metrics` tool** -- New MCP tool to query aggregated Formation Pipeline metrics (value scores, resolution actions, extraction rates, processing times).
|
|
75
208
|
- **`getEntityNames()` method** on `KnowledgeGraphManager` for Formation Pipeline entity resolution.
|
|
76
209
|
|
|
77
210
|
### Stats
|
|
@@ -81,56 +214,56 @@ All notable changes to this project will be documented in this file.
|
|
|
81
214
|
|
|
82
215
|
---
|
|
83
216
|
|
|
84
|
-
## [1.0.2]
|
|
217
|
+
## [1.0.2] -- 2026-03-14
|
|
85
218
|
|
|
86
219
|
### Fixed
|
|
87
|
-
- **MCP Server version mismatch**
|
|
88
|
-
- **CI Node.js matrix**
|
|
89
|
-
- **Orama reindex idempotency**
|
|
90
|
-
- **E2E tests no longer touch real user data**
|
|
220
|
+
- **MCP Server version mismatch** -- Server now reports the correct version from `package.json` (was hardcoded `0.1.0`). Injected at build time via tsup `define`.
|
|
221
|
+
- **CI Node.js matrix** -- Removed Node 18 from CI matrix to match `engines: >=20` in `package.json`.
|
|
222
|
+
- **Orama reindex idempotency** -- `reindexObservations()` now resets the Orama DB before rebuilding, eliminating "document already exists" errors in multi-session scenarios.
|
|
223
|
+
- **E2E tests no longer touch real user data** -- Mini-skills E2E tests now use a temporary directory with synthetic observations instead of reading/writing `~/.memorix/data/`.
|
|
91
224
|
|
|
92
225
|
---
|
|
93
226
|
|
|
94
|
-
## [1.0.1]
|
|
227
|
+
## [1.0.1] -- 2026-03-14
|
|
95
228
|
|
|
96
229
|
### Fixed
|
|
97
|
-
- **OpenCode stdout pollution**
|
|
98
|
-
- **OpenCode session_id missing**
|
|
99
|
-
- **Auto-install hooks scope**
|
|
230
|
+
- **OpenCode stdout pollution** -- Removed all `console.log` / `console.error` from the generated OpenCode plugin template. Hooks now run fully silent. (fixes #15)
|
|
231
|
+
- **OpenCode session_id missing** -- `normalizeOpenCode()` now reads `session_id` from the payload instead of hardcoding empty string. Plugin template generates and injects a stable session ID per plugin lifetime. (fixes #14)
|
|
232
|
+
- **Auto-install hooks scope** -- Hooks are now only auto-installed for IDEs whose project-level config directory already exists (e.g., `.cursor/`, `.windsurf/`), preventing unwanted IDE directories from appearing in projects opened with a different IDE.
|
|
100
233
|
|
|
101
234
|
### Added
|
|
102
|
-
- **`MEMORIX_DATA_DIR` environment variable**
|
|
235
|
+
- **`MEMORIX_DATA_DIR` environment variable** -- Override the default data directory (`~/.memorix/data/`) by setting `MEMORIX_DATA_DIR`. Applied consistently across persistence, alias registry, and embedding cache.
|
|
103
236
|
|
|
104
237
|
---
|
|
105
238
|
|
|
106
|
-
## [1.0.0]
|
|
239
|
+
## [1.0.0] -- 2026-03-09
|
|
107
240
|
|
|
108
241
|
### 🎉 First Stable Release
|
|
109
242
|
|
|
110
|
-
Memorix reaches v1.0.0
|
|
243
|
+
Memorix reaches v1.0.0 -- all major features complete. Future versions will iterate based on AI/agent ecosystem evolution.
|
|
111
244
|
|
|
112
245
|
### Added
|
|
113
|
-
- **Multi-Agent Team Collaboration**
|
|
114
|
-
- **Auto-Cleanup on Startup**
|
|
115
|
-
- **`memorix_transfer` tool**
|
|
116
|
-
- **TEAM.md**
|
|
246
|
+
- **Multi-Agent Team Collaboration** -- 4 team tools (`team_manage`, `team_file_lock`, `team_task`, `team_message`) for cross-IDE agent coordination. File-based persistence via `team-state.json`. Verified: Windsurf <-> Antigravity bidirectional communication.
|
|
247
|
+
- **Auto-Cleanup on Startup** -- Background retention archiving and intelligent deduplication run automatically in `deferredInit`. With LLM configured: semantic dedup via any OpenAI-compatible model. Without LLM: Jaccard similarity consolidation. Zero manual maintenance required.
|
|
248
|
+
- **`memorix_transfer` tool** -- Merged `memorix_export` + `memorix_import` into a single tool with `action: "export" | "import"`.
|
|
249
|
+
- **TEAM.md** -- Multi-agent coordination protocol documentation.
|
|
117
250
|
|
|
118
251
|
### Changed
|
|
119
|
-
- **Tool consolidation: 41
|
|
120
|
-
- Team tools: 13 individual
|
|
121
|
-
- Knowledge Graph tools: 9
|
|
122
|
-
- Export+Import: 2
|
|
123
|
-
- **Dashboard Team Panel**
|
|
252
|
+
- **Tool consolidation: 41 -> 22 default tools (-46%)**
|
|
253
|
+
- Team tools: 13 individual -> 4 merged (action parameter pattern)
|
|
254
|
+
- Knowledge Graph tools: 9 -> conditional via `~/.memorix/settings.json` (`{ "knowledgeGraph": true }`)
|
|
255
|
+
- Export+Import: 2 -> 1 (`memorix_transfer`)
|
|
256
|
+
- **Dashboard Team Panel** -- Redesigned with Iconify icons, Material Design 3 style. Agent cards, task lists, message panel, file lock panel.
|
|
124
257
|
- **README updated** for v1.0.0 stable (EN + 中文).
|
|
125
258
|
|
|
126
259
|
### Fixed
|
|
127
|
-
- **Windows EPERM file lock race condition**
|
|
128
|
-
- **PowerShell BOM in config.json**
|
|
260
|
+
- **Windows EPERM file lock race condition** -- Treat EPERM same as EEXIST in file-lock.ts.
|
|
261
|
+
- **PowerShell BOM in config.json** -- `Set-Content -Encoding UTF8` adds BOM in PS 5.x, breaking `JSON.parse`. Always use Node.js for config file writes.
|
|
129
262
|
|
|
130
263
|
### Production Hardening
|
|
131
264
|
- Cross-session shared team state
|
|
132
265
|
- Inbox capped at 200 messages with auto-eviction
|
|
133
|
-
- Session timeout GC (30min idle
|
|
266
|
+
- Session timeout GC (30min idle -> auto-close)
|
|
134
267
|
- Send to inactive agent rejected
|
|
135
268
|
- Agent leave releases file locks + clears inbox
|
|
136
269
|
- Orphaned task rescue when assignee inactive
|
|
@@ -141,317 +274,317 @@ Memorix reaches v1.0.0 — all major features complete. Future versions will ite
|
|
|
141
274
|
- **Tests:** 753/753 passing across 56 files
|
|
142
275
|
- **IDE Support:** 10 agents (Cursor, Windsurf, Claude Code, Codex, Copilot, Kiro, Antigravity, OpenCode, Trae, Gemini CLI)
|
|
143
276
|
|
|
144
|
-
## [0.12.0]
|
|
277
|
+
## [0.12.0] -- 2026-03-08
|
|
145
278
|
|
|
146
279
|
### Added
|
|
147
|
-
- **Intent-Aware Recall**
|
|
148
|
-
- **MCP Deadlock Fix**
|
|
149
|
-
- **Dashboard Dark Theme Fix**
|
|
150
|
-
- **Build Race Condition Fix**
|
|
280
|
+
- **Intent-Aware Recall** -- Search understands query intent ("why X?" prioritizes decisions/trade-offs, "how to X?" prioritizes how-it-works).
|
|
281
|
+
- **MCP Deadlock Fix** -- Resolved stdio transport deadlock under high concurrency.
|
|
282
|
+
- **Dashboard Dark Theme Fix** -- Proper dark mode support across all panels.
|
|
283
|
+
- **Build Race Condition Fix** -- Fixed tsup parallel build race condition.
|
|
151
284
|
|
|
152
|
-
## [0.11.0]
|
|
285
|
+
## [0.11.0] -- 2026-03-07
|
|
153
286
|
|
|
154
287
|
### Added
|
|
155
|
-
- **Mini-Skills** (`memorix_promote`)
|
|
156
|
-
- **LLM Quality Engine**
|
|
157
|
-
- **`memorix_deduplicate` tool**
|
|
158
|
-
- **`memorix_resolve` tool**
|
|
288
|
+
- **Mini-Skills** (`memorix_promote`) -- Promote observations to permanent skills that auto-inject at session start. Never decay, project-scoped.
|
|
289
|
+
- **LLM Quality Engine** -- Compact-on-write (duplicate detection at write time), narrative compression (~27% token reduction), search reranking (60% queries improved).
|
|
290
|
+
- **`memorix_deduplicate` tool** -- LLM-powered semantic deduplication with dry-run support.
|
|
291
|
+
- **`memorix_resolve` tool** -- Mark completed tasks and fixed bugs as resolved to prevent context pollution.
|
|
159
292
|
|
|
160
293
|
### Fixed
|
|
161
|
-
- **Retention decay fix**
|
|
294
|
+
- **Retention decay fix** -- Reclassified `what-changed`/`discovery` to low retention (30d instead of 90d).
|
|
162
295
|
|
|
163
296
|
### Stats
|
|
164
|
-
- **Tests:** 641
|
|
297
|
+
- **Tests:** 641 -> 674 passing
|
|
165
298
|
|
|
166
|
-
## [0.10.6]
|
|
299
|
+
## [0.10.6] -- 2026-03-06
|
|
167
300
|
|
|
168
301
|
### Fixed
|
|
169
302
|
- Minor stability improvements.
|
|
170
303
|
|
|
171
|
-
## [0.10.5]
|
|
304
|
+
## [0.10.5] -- 2026-03-05
|
|
172
305
|
|
|
173
306
|
### Fixed
|
|
174
|
-
- **🔴 Critical: Antigravity MCP connection failure**
|
|
175
|
-
- **🔴 Critical: Claude Code Stop hook schema validation failure**
|
|
176
|
-
- **Claude Code hook_event_name not read**
|
|
177
|
-
- **Windows hook stdin piping broken**
|
|
178
|
-
- **CLI emoji removed**
|
|
307
|
+
- **🔴 Critical: Antigravity MCP connection failure** -- CLI banner (starting with 🧠 emoji, UTF-8 `F0 9F A7 A0`) was written to `stdout` via `console.log` in the non-interactive branch. When `citty` dispatches to `serve` subcommand, it calls parent `run()` first, polluting the MCP JSON-RPC stream. Go's `encoding/json` in Antigravity failed on the first byte `0xF0` with `invalid character 'ð'`. Fix: `console.log` -> `console.error` for all CLI banner output.
|
|
308
|
+
- **🔴 Critical: Claude Code Stop hook schema validation failure** -- `hookSpecificOutput` was returned for all hook events, but Claude Code only supports it for `PreToolUse`, `UserPromptSubmit`, and `PostToolUse`. Events like `SessionStart`, `Stop`, and `PreCompact` with `hookSpecificOutput` triggered `JSON validation failed: Invalid input`. Fix: only include `hookSpecificOutput` for the 3 supported event types.
|
|
309
|
+
- **Claude Code hook_event_name not read** -- Handler read `payload.hookEventName` (camelCase) but Claude Code sends `hook_event_name` (snake_case), causing `hookEventName` to always be empty and `hookSpecificOutput` to be `{}`.
|
|
310
|
+
- **Windows hook stdin piping broken** -- `cmd /c memorix hook` wrapper broke stdin piping for hook event JSON. Changed to `memorix.cmd hook` which directly invokes the CMD shim and properly forwards stdin.
|
|
311
|
+
- **CLI emoji removed** -- All emoji in CLI output replaced with plain text markers (`[OK]`, `[FAIL]`, `[WARN]`, `[SKIP]`, `[DRY RUN]`) for enterprise-grade compatibility and to prevent future UTF-8 encoding issues.
|
|
179
312
|
|
|
180
|
-
## [0.9.25]
|
|
313
|
+
## [0.9.25] -- 2026-02-28
|
|
181
314
|
|
|
182
315
|
### Fixed
|
|
183
|
-
- **Windsurf "no tools returned"**
|
|
184
|
-
- **Windsurf rules not activated**
|
|
185
|
-
- **Windsurf hook `post_command` content too short**
|
|
186
|
-
- **Hook hot-reload broken on Windows**
|
|
316
|
+
- **Windsurf "no tools returned"** -- Transport-first architecture caused Windsurf to query `tools/list` before tools were registered. Normal path now registers tools first, then connects transport. Roots path (invalid cwd) still connects first to query `listRoots`.
|
|
317
|
+
- **Windsurf rules not activated** -- Generated `.windsurf/rules/memorix.md` lacked YAML frontmatter (`trigger: always_on`). Windsurf ignored the file without it. Also added `alwaysApply: true` frontmatter for Cursor `.mdc` files.
|
|
318
|
+
- **Windsurf hook `post_command` content too short** -- Normalizer didn't extract `commandOutput` from Windsurf `post_command` events, causing content to be <30 chars and filtered out.
|
|
319
|
+
- **Hook hot-reload broken on Windows** -- `fs.watch()` lost track of `observations.json` after `atomicWriteFile` (which uses `rename()`). Switched to `fs.watchFile` with 2s polling for reliable cross-platform hot-reload. Hook-written memories are now searchable within ~4 seconds.
|
|
187
320
|
|
|
188
|
-
## [0.9.18]
|
|
321
|
+
## [0.9.18] -- 2026-02-26
|
|
189
322
|
|
|
190
323
|
### Fixed
|
|
191
|
-
- **Self-referential command noise**
|
|
324
|
+
- **Self-referential command noise** -- Bash commands that inspect memorix's own data (e.g. `node -e "...observations.json..."`, `cat ~/.memorix/...`) were being stored as observations, creating a feedback loop. Now filtered alongside `memorix_internal` tools.
|
|
192
325
|
|
|
193
|
-
## [0.9.17]
|
|
326
|
+
## [0.9.17] -- 2026-02-26
|
|
194
327
|
|
|
195
328
|
### Fixed
|
|
196
|
-
- **Session activity noise**
|
|
329
|
+
- **Session activity noise** -- Empty `session_end` events were unconditionally stored, generating ~8.5% of all observations as useless `"Session activity (discovery)"` entries. Now requires content ≥ 50 chars, matching the quality-first philosophy of 0.9.16.
|
|
197
330
|
|
|
198
|
-
## [0.9.16]
|
|
331
|
+
## [0.9.16] -- 2026-02-26
|
|
199
332
|
|
|
200
333
|
### Architecture
|
|
201
|
-
- **Classify
|
|
202
|
-
- **Tool Taxonomy**
|
|
203
|
-
- **Pattern detection = classification only**
|
|
204
|
-
- **Unified `TYPE_EMOJI`**
|
|
334
|
+
- **Classify -> Policy -> Store pipeline** -- Replaced the monolithic `switch/case` handler (527 lines) with a clean declarative pipeline (432 lines). Inspired by claude-mem's store-first philosophy and mcp-memory-service's configurable scoring.
|
|
335
|
+
- **Tool Taxonomy** -- `classifyTool()` categorizes tools into `file_modify | file_read | command | search | memorix_internal | unknown`. Each category has a declarative `StoragePolicy` (store mode, minLength, defaultType).
|
|
336
|
+
- **Pattern detection = classification only** -- Pattern detection now only determines observation *type* (decision, error, etc.), not whether to store. Storage decisions are made by policy.
|
|
337
|
+
- **Unified `TYPE_EMOJI`** -- Single exported constant, eliminating 3 duplicated copies across handler and session_start.
|
|
205
338
|
|
|
206
339
|
### Fixed
|
|
207
|
-
- **🔴 Critical: Bash commands with `cd` prefix silently dropped**
|
|
208
|
-
- **Cooldown key too broad**
|
|
209
|
-
- **Store-first for commands**
|
|
340
|
+
- **🔴 Critical: Bash commands with `cd` prefix silently dropped** -- Claude Code sends Bash commands as `cd /project && npm test 2>&1`. The noise filter `/^cd\b/` matched the `cd` prefix and silently discarded the entire command. This caused `npm test`, `npm install express`, `node -e "..."`, and all other project-scoped commands to never be stored. Fix: `extractRealCommand()` strips `cd path && ` prefix before noise checking, so `cd /path && npm test` is correctly evaluated as `npm test`.
|
|
341
|
+
- **Cooldown key too broad** -- Old key `post_tool:Bash` meant ALL Bash commands shared one 30-second cooldown. New key uses `event:filePath|command|toolName`, so `npm test` and `npm install` have independent cooldowns.
|
|
342
|
+
- **Store-first for commands** -- Command-category tools now use `store: 'always'` policy with minLength 30 (down from 50-200), capturing more meaningful development activity.
|
|
210
343
|
|
|
211
|
-
## [0.9.15]
|
|
344
|
+
## [0.9.15] -- 2026-02-26
|
|
212
345
|
|
|
213
346
|
### Fixed
|
|
214
|
-
- **Feedback visibility**
|
|
215
|
-
- **File-modifying tools always store**
|
|
216
|
-
- **PreCompact low-quality spam**
|
|
217
|
-
- **Normalizer prompt extraction**
|
|
347
|
+
- **Feedback visibility** -- Hook auto-stores were silent. Now returns `systemMessage` to the agent after each save, e.g. `🟢 Memorix saved: Updated auth.ts [what-changed]`. Gives Codex-like visibility into what memorix is recording.
|
|
348
|
+
- **File-modifying tools always store** -- Write/Edit/MultiEdit tool events were rejected when content lacked pattern keywords (e.g., writing utility functions with no "error"/"fix" keywords). Now file-modifying tools always store if content > 100 chars, classified as `what-changed` by default.
|
|
349
|
+
- **PreCompact low-quality spam** -- PreCompact events stored empty/minimal observations with no meaningful content. Now requires `MIN_STORE_LENGTH` (100 chars) to store.
|
|
350
|
+
- **Normalizer prompt extraction** -- `normalizeClaude` only extracted `prompt` for `user_prompt` events. Now extracts for all events (PreCompact, etc.), preserving context that would otherwise be lost.
|
|
218
351
|
|
|
219
|
-
## [0.9.14]
|
|
352
|
+
## [0.9.14] -- 2026-02-26
|
|
220
353
|
|
|
221
354
|
### Fixed
|
|
222
|
-
- **🔴 Critical: Hooks never auto-store during development**
|
|
355
|
+
- **🔴 Critical: Hooks never auto-store during development** -- Two root causes:
|
|
223
356
|
1. `extractContent()` had a fatal `parts.length === 0` guard that skipped rich `toolInput` data (file content, edit diffs, commands) whenever `toolResult` was present. Since all agents send short `toolResult` like `"File written successfully"` (28 chars), the content was always < 100 chars and got rejected by `MIN_STORE_LENGTH`.
|
|
224
357
|
2. Bash/shell tool events (npm install, npm test, git commands) also got rejected because their content (~90 chars) fell below the generic `post_tool` threshold of 200 chars, even though commands are inherently meaningful.
|
|
225
358
|
- **Fix**: Always extract `toolInput` fields alongside `toolResult`. Bash tools now use a dedicated low-threshold path (50 chars) with noise command filtering, matching the `post_command` logic.
|
|
226
359
|
|
|
227
360
|
### Added
|
|
228
|
-
- **12 Claude Code E2E tests**
|
|
361
|
+
- **12 Claude Code E2E tests** -- Validates the full hook pipeline (stdin JSON -> normalize -> handleHookEvent -> observation) for Write, Edit, Bash, UserPromptSubmit, SessionStart, Stop, PreCompact, and edge cases (noise filtering, memorix recursion skip, short prompts).
|
|
229
362
|
|
|
230
|
-
## [0.9.12]
|
|
363
|
+
## [0.9.12] -- 2026-02-25
|
|
231
364
|
|
|
232
365
|
### Fixed
|
|
233
|
-
- **Copilot hooks format completely wrong**
|
|
234
|
-
- **Codex fake hooks.json removed**
|
|
235
|
-
- **Kiro hook file extension wrong**
|
|
236
|
-
- **Kiro only had 1 event**
|
|
366
|
+
- **Copilot hooks format completely wrong** -- Was reusing Claude Code's `generateClaudeConfig()` (PascalCase events, `command` field). Copilot requires `version: 1`, `bash`/`powershell` fields, `timeoutSec`, and camelCase event names (`sessionStart`, `userPromptSubmitted`, `preToolUse`, `postToolUse`, `sessionEnd`, `errorOccurred`). Now uses dedicated `generateCopilotConfig()`. Source: [GitHub Docs](https://docs.github.com/en/copilot/reference/hooks-configuration).
|
|
367
|
+
- **Codex fake hooks.json removed** -- Codex has no hooks system (only `notify` in config.toml for `agent-turn-complete`). Was generating a non-existent `.codex/hooks.json`. Now only installs rules (AGENTS.md). Source: [OpenAI Codex Config Reference](https://developers.openai.com/codex/config-reference/).
|
|
368
|
+
- **Kiro hook file extension wrong** -- Was `.hook.md`, should be `.kiro.hook`. Now generates 3 hook files: `memorix-agent-stop.kiro.hook` (session memory), `memorix-prompt-submit.kiro.hook` (context loading), `memorix-file-save.kiro.hook` (file change tracking). Source: [Kiro Docs](https://kiro.dev/docs/hooks/).
|
|
369
|
+
- **Kiro only had 1 event** -- Was only `file_saved`. Now covers `agent_stop`, `prompt_submit`, and `file_save` events.
|
|
237
370
|
|
|
238
371
|
### Added
|
|
239
|
-
- **Antigravity/Gemini CLI hook installer**
|
|
240
|
-
- **Copilot normalizer**
|
|
241
|
-
- **Gemini CLI normalizer**
|
|
242
|
-
- **Gemini CLI event mappings**
|
|
243
|
-
- **Copilot event mappings**
|
|
372
|
+
- **Antigravity/Gemini CLI hook installer** -- New `generateGeminiConfig()` for `.gemini/settings.json`. PascalCase events (`SessionStart`, `AfterTool`, `AfterAgent`, `PreCompress`), timeout in milliseconds (10000ms). Source: [Gemini CLI Docs](https://geminicli.com/docs/hooks/).
|
|
373
|
+
- **Copilot normalizer** -- Dedicated `normalizeCopilot()` function with `inferCopilotEvent()` for payload-based event detection (Copilot sends typed payloads without explicit event names).
|
|
374
|
+
- **Gemini CLI normalizer** -- Dedicated `normalizeGemini()` function with event mapping for all 11 Gemini CLI events (`BeforeAgent`, `AfterAgent`, `BeforeTool`, `AfterTool`, `PreCompress`, etc.).
|
|
375
|
+
- **Gemini CLI event mappings** -- Full EVENT_MAP entries for Gemini CLI PascalCase events -> normalized events.
|
|
376
|
+
- **Copilot event mappings** -- EVENT_MAP entries for Copilot-specific camelCase events (`userPromptSubmitted`, `preToolUse`, `postToolUse`, `errorOccurred`).
|
|
244
377
|
|
|
245
|
-
## [0.9.11]
|
|
378
|
+
## [0.9.11] -- 2026-02-25
|
|
246
379
|
|
|
247
380
|
### Fixed
|
|
248
|
-
- **CLI crashes with `Dynamic require of "fs" is not supported`**
|
|
381
|
+
- **CLI crashes with `Dynamic require of "fs" is not supported`** -- When bundling CJS dependencies (like `gray-matter`) into ESM output via `noExternal`, esbuild's CJS-to-ESM wrapper couldn't resolve Node.js built-in modules. Added `createRequire` banner to provide a real `require` function before esbuild's wrapper runs, fixing `require('fs')` and other built-in module calls.
|
|
249
382
|
|
|
250
|
-
## [0.9.10]
|
|
383
|
+
## [0.9.10] -- 2026-02-25
|
|
251
384
|
|
|
252
385
|
### Fixed
|
|
253
|
-
- **CLI crashes with `ERR_MODULE_NOT_FOUND` on global install**
|
|
254
|
-
- **Cursor agent detection corrected**
|
|
386
|
+
- **CLI crashes with `ERR_MODULE_NOT_FOUND` on global install** -- `@orama/orama`, `gpt-tokenizer`, `gray-matter` and other dependencies were not bundled into the CLI output. tsup treated `dependencies` as external by default. Added `noExternal` to force-bundle all deps into CLI (275KB -> 2.59MB), making `memorix hook` work reliably when installed globally via `npm install -g`.
|
|
387
|
+
- **Cursor agent detection corrected** -- Real Cursor payload confirmed to include `hook_event_name` + `conversation_id` (not just `workspace_roots`). Detection now uses `conversation_id` or `cursor_version` as primary discriminator vs Claude Code (which sends `session_id` without `conversation_id`). `extractEventName` reads `hook_event_name` first, falls back to payload inference.
|
|
255
388
|
|
|
256
|
-
## [0.9.9]
|
|
389
|
+
## [0.9.9] -- 2026-02-25
|
|
257
390
|
|
|
258
391
|
### Fixed
|
|
259
|
-
- **Cursor hooks config format invalid**
|
|
260
|
-
- **Cursor agent detection failed**
|
|
261
|
-
- **Cursor `session_id` field not read**
|
|
392
|
+
- **Cursor hooks config format invalid** -- Generated config was missing required `version` field and used objects instead of arrays for hook scripts. Cursor requires `{ version: 1, hooks: { eventName: [{ command: "..." }] } }` format. Added `sessionStart`, `beforeShellExecution`, `afterMCPExecution`, `preCompact` events.
|
|
393
|
+
- **Cursor agent detection failed** -- Cursor does NOT send `hook_event_name` like Claude Code. Detection now uses Cursor-specific fields (`workspace_roots`, `is_background_agent`, `composer_mode`). Event type inferred from payload structure (e.g., `old_content`/`new_content` -> `afterFileEdit`).
|
|
394
|
+
- **Cursor `session_id` field not read** -- Normalizer expected `conversation_id` but Cursor sends `session_id`. Now reads both with fallback.
|
|
262
395
|
|
|
263
|
-
## [0.9.8]
|
|
396
|
+
## [0.9.8] -- 2026-02-25
|
|
264
397
|
|
|
265
398
|
### Fixed
|
|
266
|
-
- **Claude Code hooks installed to wrong file**
|
|
267
|
-
- **Hooks merge overwrites existing settings**
|
|
399
|
+
- **Claude Code hooks installed to wrong file** -- Hooks were written to `.github/hooks/memorix.json` but Claude Code reads from `.claude/settings.local.json` (project-level) or `~/.claude/settings.json` (global). Now correctly writes to `.claude/settings.local.json` for project-level installation.
|
|
400
|
+
- **Hooks merge overwrites existing settings** -- Shallow spread `{...existing, ...generated}` would overwrite the entire `hooks` key, destroying user's other hook configurations. Now deep-merges the `hooks` object so existing hooks from other tools are preserved.
|
|
268
401
|
|
|
269
|
-
## [0.9.7]
|
|
402
|
+
## [0.9.7] -- 2026-02-25
|
|
270
403
|
|
|
271
404
|
### Fixed
|
|
272
|
-
- **Claude Code hooks never triggering auto-memory**
|
|
273
|
-
- **Empty content extraction from Claude Code tool events**
|
|
274
|
-
- **User prompts silently dropped**
|
|
275
|
-
- **Post-tool events too aggressively filtered**
|
|
405
|
+
- **Claude Code hooks never triggering auto-memory** -- Claude Code sends `hook_event_name` (snake_case) but the normalizer expected `hookEventName` (camelCase). This caused **every event** (SessionStart, UserPromptSubmit, PostToolUse, PreCompact, Stop) to be misidentified as `post_tool`, breaking event routing, prompt extraction, memory injection, and session tracking. Also fixed `session_id` -> `sessionId` and `tool_response` -> `toolResult` field mappings.
|
|
406
|
+
- **Empty content extraction from Claude Code tool events** -- `extractContent()` now unpacks `toolInput` fields (Bash commands, Write file content, etc.) when no other content is available. Previously tool events produced empty or near-empty content strings.
|
|
407
|
+
- **User prompts silently dropped** -- `MIN_STORE_LENGTH=100` was too high for typical user prompts. Added `MIN_PROMPT_LENGTH=20` specifically for `user_prompt` events.
|
|
408
|
+
- **Post-tool events too aggressively filtered** -- Tool events with substantial content (>200 chars) are now stored even without keyword pattern matches.
|
|
276
409
|
|
|
277
|
-
## [0.9.6]
|
|
410
|
+
## [0.9.6] -- 2026-02-25
|
|
278
411
|
|
|
279
412
|
### Fixed
|
|
280
|
-
- **Cross-IDE project identity fragmentation**
|
|
281
|
-
- **`scope: 'project'` parameter now works**
|
|
413
|
+
- **Cross-IDE project identity fragmentation** -- Data was stored in per-project subdirectories (`~/.memorix/data/<projectId>/`), but different IDEs often detected different projectIds for the same repo (e.g. `placeholder/repo` vs `local/repo` vs `local/Kiro`). This caused observations to silently split across directories, making cross-IDE relay unreliable. Now **all data is stored in a single flat directory** (`~/.memorix/data/`). projectId is metadata only, not used for directory partitioning. Existing per-project subdirectories are automatically merged on first startup (IDs remapped, graphs deduplicated, subdirs backed up to `.migrated-subdirs/`).
|
|
414
|
+
- **`scope: 'project'` parameter now works** -- Previously accepted but ignored. Now properly filters search results by the current project's ID via Orama where-clause.
|
|
282
415
|
|
|
283
|
-
## [0.9.5]
|
|
416
|
+
## [0.9.5] -- 2026-02-25
|
|
284
417
|
|
|
285
418
|
### Fixed
|
|
286
|
-
- **Claude Code hooks `matcher` format**
|
|
419
|
+
- **Claude Code hooks `matcher` format** -- `matcher` must be a **string** (tool name pattern like `"Bash"`, `"Edit|Write"`), not an object. For hooks that should fire on ALL events, `matcher` is now omitted entirely instead of using `{}`. Fixes `matcher: Expected string, but received object` validation error on Claude Code startup.
|
|
287
420
|
|
|
288
|
-
## [0.9.4]
|
|
421
|
+
## [0.9.4] -- 2026-02-25
|
|
289
422
|
|
|
290
423
|
### Fixed
|
|
291
|
-
- **Codex/all-IDE `tools/list -> Method not found`**
|
|
424
|
+
- **Codex/all-IDE `tools/list -> Method not found`** -- Critical bug where `local/<dirname>` projects (any directory without a git remote) wrongly entered the MCP roots resolution flow. This flow connects the server *before* registering tools, so the MCP `initialize` handshake declared no `tools` capability, causing all subsequent `tools/list` calls to fail with "Method not found". Now only truly invalid projects (home dir, system dirs) enter the roots flow; `local/` projects go through the normal path (register tools first, then connect).
|
|
292
425
|
|
|
293
|
-
## [0.9.3]
|
|
426
|
+
## [0.9.3] -- 2026-02-25
|
|
294
427
|
|
|
295
428
|
### Fixed
|
|
296
|
-
- **`memorix_timeline` "not found" bug**
|
|
297
|
-
- **`memorix_retention` "no observations found" bug**
|
|
298
|
-
- **`memorix_search` cross-IDE projectId mismatch**
|
|
299
|
-
- **Claude Code hooks format**
|
|
300
|
-
- **EPERM `process.cwd()` crash**
|
|
429
|
+
- **`memorix_timeline` "not found" bug** -- Timeline was using unreliable Orama empty-term search. Now uses in-memory observations (same fix pattern as `memorix_detail`).
|
|
430
|
+
- **`memorix_retention` "no observations found" bug** -- Same root cause as timeline. Now uses in-memory observations for reliable document retrieval.
|
|
431
|
+
- **`memorix_search` cross-IDE projectId mismatch** -- Removed redundant projectId filter from search. Data isolation is already handled at the directory level. Different IDEs resolving different projectIds for the same directory no longer causes empty search results.
|
|
432
|
+
- **Claude Code hooks format** -- Updated `generateClaudeConfig` to use the new `{matcher: {}, hooks: [...]}` structure required by Claude Code 2025+. Fixes "Expected array, but received undefined" error on `memorix hooks install --agent claude --global`.
|
|
433
|
+
- **EPERM `process.cwd()` crash** -- All CLI commands (`serve`, `hooks install/uninstall/status`) now safely handle `process.cwd()` failures (e.g., deleted CWD on macOS) with fallback to home directory.
|
|
301
434
|
|
|
302
|
-
## [0.9.2]
|
|
435
|
+
## [0.9.2] -- 2026-02-25
|
|
303
436
|
|
|
304
437
|
### Fixed
|
|
305
|
-
- **Empty directory support**
|
|
306
|
-
- **`findPackageRoot` safety**
|
|
438
|
+
- **Empty directory support** -- Memorix now starts successfully in any directory, even without `.git` or `package.json`. No more `__invalid__` project errors for brand new folders. Only truly dangerous directories (home dir, drive root, system dirs) are rejected.
|
|
439
|
+
- **`findPackageRoot` safety** -- Walking up from temp/nested directories no longer accidentally selects the home directory as project root.
|
|
307
440
|
|
|
308
441
|
### Changed
|
|
309
|
-
- **README rewrite**
|
|
442
|
+
- **README rewrite** -- Complete rewrite of Quick Start section for both EN and 中文 READMEs:
|
|
310
443
|
- Two-step install (global install + MCP config) instead of error-prone `npx`
|
|
311
444
|
- Per-agent config examples (Claude Code, Cursor, Windsurf, etc.)
|
|
312
445
|
- Troubleshooting table for common errors
|
|
313
446
|
- AI-friendly: agents reading the README will now configure correctly on first try
|
|
314
447
|
|
|
315
|
-
## [0.9.1]
|
|
448
|
+
## [0.9.1] -- 2026-02-25
|
|
316
449
|
|
|
317
450
|
### Fixed
|
|
318
|
-
- **Defensive parameter coercion**
|
|
451
|
+
- **Defensive parameter coercion** -- All 24 MCP tools now gracefully handle string-encoded arrays and numbers (e.g., `"[16]"` -> `[16]`, `"20"` -> `20`). Fixes compatibility with Claude Code CLI's known serialization bug ([#5504](https://github.com/anthropics/claude-code/issues/5504), [#26027](https://github.com/anthropics/claude-code/issues/26027)) and non-Anthropic models (GLM, etc.) that may produce incorrectly typed tool call arguments. Codex, Windsurf, and Cursor were already unaffected.
|
|
319
452
|
|
|
320
|
-
## [0.9.0]
|
|
453
|
+
## [0.9.0] -- 2026-02-24
|
|
321
454
|
|
|
322
455
|
### Added
|
|
323
|
-
- **Memory Consolidation** (`memorix_consolidate`)
|
|
324
|
-
- **Temporal Queries**
|
|
325
|
-
- **Explainable Recall**
|
|
326
|
-
- **Export/Import**
|
|
327
|
-
- `memorix_export`
|
|
328
|
-
- `memorix_import`
|
|
329
|
-
- **Dashboard Sessions Panel**
|
|
330
|
-
- **Auto sessionId**
|
|
331
|
-
- **16 new tests**
|
|
456
|
+
- **Memory Consolidation** (`memorix_consolidate`) -- Find and merge similar observations to reduce memory bloat. Uses Jaccard text similarity to cluster observations by entity+type, then merges them preserving all facts, files, and concepts. Supports `preview` (dry run) and `execute` modes with configurable similarity threshold.
|
|
457
|
+
- **Temporal Queries** -- `memorix_search` now supports `since` and `until` parameters for date range filtering. Example: "What auth decisions did we make last week?"
|
|
458
|
+
- **Explainable Recall** -- Search results now include a `Matched` column showing which fields matched the query (title, entity, concept, narrative, fact, file, or fuzzy). Helps understand why each result was found.
|
|
459
|
+
- **Export/Import** -- Two new tools for team collaboration:
|
|
460
|
+
- `memorix_export` -- Export project observations and sessions as JSON (importable) or Markdown (human-readable for PRs/docs)
|
|
461
|
+
- `memorix_import` -- Import from JSON export, re-assigns IDs, skips duplicate topicKeys
|
|
462
|
+
- **Dashboard Sessions Panel** -- New "Sessions" tab in the web dashboard with timeline view, active/completed counts, agent info, and session summaries. Bilingual (EN/中文).
|
|
463
|
+
- **Auto sessionId** -- `memorix_store` now automatically associates the current active session's ID with stored observations.
|
|
464
|
+
- **16 new tests** -- 8 consolidation + 8 export/import (484 total).
|
|
332
465
|
|
|
333
466
|
### Stats
|
|
334
|
-
- **MCP Tools:** 20
|
|
467
|
+
- **MCP Tools:** 20 -> 24 (memorix_consolidate, memorix_export, memorix_import + dashboard sessions API)
|
|
335
468
|
- **Tests:** 484/484 passing
|
|
336
469
|
|
|
337
|
-
## [0.8.0]
|
|
470
|
+
## [0.8.0] -- 2026-02-24
|
|
338
471
|
|
|
339
472
|
### Added
|
|
340
|
-
- **Session Lifecycle Management**
|
|
341
|
-
- `memorix_session_start`
|
|
342
|
-
- `memorix_session_end`
|
|
343
|
-
- `memorix_session_context`
|
|
344
|
-
- **Topic Key Upsert**
|
|
345
|
-
- **`memorix_suggest_topic_key` tool**
|
|
346
|
-
- **Session persistence**
|
|
347
|
-
- **Observation fields**
|
|
348
|
-
- **30 new tests**
|
|
473
|
+
- **Session Lifecycle Management** -- 3 new MCP tools for cross-session context continuity:
|
|
474
|
+
- `memorix_session_start` -- Start a coding session, auto-inject context from previous sessions (summaries + key observations). Previous active sessions are auto-closed.
|
|
475
|
+
- `memorix_session_end` -- End a session with structured summary (Goal/Discoveries/Accomplished/Files format). Summary is injected into the next session.
|
|
476
|
+
- `memorix_session_context` -- Manually retrieve session history and context (useful after compaction recovery).
|
|
477
|
+
- **Topic Key Upsert** -- `memorix_store` now accepts an optional `topicKey` parameter. When an observation with the same `topicKey + projectId` already exists, it is **updated in-place** instead of creating a duplicate. `revisionCount` increments on each upsert. Prevents data bloat for evolving decisions, architecture docs, etc.
|
|
478
|
+
- **`memorix_suggest_topic_key` tool** -- Suggests stable topic keys from type + title using family heuristics (`architecture/*`, `bug/*`, `decision/*`, `config/*`, `discovery/*`, `pattern/*`). Supports CJK characters.
|
|
479
|
+
- **Session persistence** -- `sessions.json` with atomic writes and file locking for cross-process safety.
|
|
480
|
+
- **Observation fields** -- `topicKey`, `revisionCount`, `updatedAt`, `sessionId` added to `Observation` interface.
|
|
481
|
+
- **30 new tests** -- 16 session lifecycle tests + 14 topic key upsert tests (468 total).
|
|
349
482
|
|
|
350
483
|
### Improved
|
|
351
|
-
- **`storeObservation` API**
|
|
484
|
+
- **`storeObservation` API** -- Now returns `{ observation, upserted }` instead of just `Observation`, enabling callers to distinguish new vs updated observations.
|
|
352
485
|
|
|
353
486
|
### Inspired by
|
|
354
|
-
- [Engram](https://github.com/alanbuscaglia/engram)
|
|
487
|
+
- [Engram](https://github.com/alanbuscaglia/engram) -- Session lifecycle design, topic_key upsert pattern, structured session summaries.
|
|
355
488
|
|
|
356
|
-
## [0.7.11]
|
|
489
|
+
## [0.7.11] -- 2026-02-24
|
|
357
490
|
|
|
358
491
|
### Added
|
|
359
|
-
- **File locking & atomic writes** (`withFileLock`, `atomicWriteFile`)
|
|
360
|
-
- **Retention auto-archive**
|
|
361
|
-
- **Chinese entity extraction**
|
|
362
|
-
- **Graph-memory bidirectional sync**
|
|
492
|
+
- **File locking & atomic writes** (`withFileLock`, `atomicWriteFile`) -- Cross-process safe writes for `observations.json`, `graph.jsonl`, and `counter.json`. Uses `.memorix.lock` directory lock with stale detection (10s timeout) and write-to-temp-then-rename for crash safety.
|
|
493
|
+
- **Retention auto-archive** -- `memorix_retention` tool now supports `action="archive"` to move expired observations to `observations.archived.json`. Reversible -- archived memories can be restored manually.
|
|
494
|
+
- **Chinese entity extraction** -- Entity extractor now recognizes Chinese identifiers in brackets (`「认证模块」`, `【数据库连接】`) and backticks, plus Chinese causal language patterns (因为/所以/由于/导致/决定/采用).
|
|
495
|
+
- **Graph-memory bidirectional sync** -- Dashboard DELETE now cleans up corresponding `[#id]` references from knowledge graph entities. Prevents orphaned data.
|
|
363
496
|
|
|
364
497
|
### Improved
|
|
365
|
-
- **Search accuracy**
|
|
366
|
-
- **Auto-relations performance**
|
|
367
|
-
- **Re-read-before-write**
|
|
498
|
+
- **Search accuracy** -- Added fuzzy tolerance, field boosting (title > entityName > concepts > narrative), lowered similarity threshold to 0.5, tuned hybrid weights (text 0.6, vector 0.4).
|
|
499
|
+
- **Auto-relations performance** -- Entity lookups now use O(1) index (`Map`) instead of O(n) `find()` on every observation store. `KnowledgeGraphManager` maintains a `entityIndex` rebuilt on create/delete mutations.
|
|
500
|
+
- **Re-read-before-write** -- `storeObservation` re-reads `observations.json` inside the lock before writing, merging concurrent changes instead of overwriting.
|
|
368
501
|
|
|
369
|
-
## [0.7.10]
|
|
502
|
+
## [0.7.10] -- 2026-02-24
|
|
370
503
|
|
|
371
504
|
### Added
|
|
372
|
-
- **Chinese README** (`README.zh-CN.md`)
|
|
373
|
-
- **Antigravity config guide**
|
|
374
|
-
- **Project detection priority documentation**
|
|
505
|
+
- **Chinese README** (`README.zh-CN.md`) -- Full bilingual documentation with language switcher at the top of both README files.
|
|
506
|
+
- **Antigravity config guide** -- Collapsible note in README Quick Start and updated `docs/SETUP.md` Antigravity section explaining the `MEMORIX_PROJECT_ROOT` requirement, why it's needed (cwd + MCP roots both unavailable), and how to configure it.
|
|
507
|
+
- **Project detection priority documentation** -- Clear detection chain (`--cwd` -> `MEMORIX_PROJECT_ROOT` -> `INIT_CWD` -> `process.cwd()` -> MCP roots -> error) in README, SETUP.md, and troubleshooting section.
|
|
375
508
|
|
|
376
|
-
## [0.7.9]
|
|
509
|
+
## [0.7.9] -- 2026-02-24
|
|
377
510
|
|
|
378
511
|
### Fixed
|
|
379
|
-
- **Dashboard auto-switch when project changes**
|
|
512
|
+
- **Dashboard auto-switch when project changes** -- When the dashboard is already running (started from project A) and `memorix_dashboard` is called from project B, the dashboard server's current project is now updated via a `/api/set-current-project` POST request before opening the browser. Previously, the dashboard always showed the project it was initially started with; now it correctly switches to the calling project. Existing browser tabs will also show the correct project on the next page load/refresh.
|
|
380
513
|
|
|
381
514
|
### Added
|
|
382
|
-
- **MCP roots protocol support**
|
|
515
|
+
- **MCP roots protocol support** -- When the IDE's `cwd` is not a valid project (e.g., Antigravity sets cwd to `G:\Antigravity`), Memorix now automatically tries the MCP `roots/list` protocol to get the IDE's actual workspace path. This means standard MCP configs (`npx memorix@latest serve`) can work without `--cwd` in IDEs that support MCP roots. Falls back gracefully if the client doesn't support roots. Priority chain: `--cwd` > `MEMORIX_PROJECT_ROOT` > `INIT_CWD` > `process.cwd()` > **MCP roots** > error.
|
|
383
516
|
|
|
384
|
-
## [0.7.8]
|
|
517
|
+
## [0.7.8] -- 2026-02-24
|
|
385
518
|
|
|
386
519
|
### Fixed
|
|
387
|
-
- **Graceful error on invalid project detection**
|
|
388
|
-
- **Dashboard process liveness check**
|
|
520
|
+
- **Graceful error on invalid project detection** -- When `detectProject()` returns `__invalid__` (e.g., IDE sets cwd to its own install directory like `G:\Antigravity`), the server now prints a clear, actionable error message with fix instructions (`--cwd` or `MEMORIX_PROJECT_ROOT`) instead of crashing with an opaque stack trace.
|
|
521
|
+
- **Dashboard process liveness check** -- `memorix_dashboard` now verifies the port is actually listening before returning "already running". If the dashboard process was killed externally (e.g., `taskkill`), it automatically restarts instead of opening a browser to a dead server.
|
|
389
522
|
|
|
390
523
|
### Added
|
|
391
|
-
- **`MEMORIX_PROJECT_ROOT` environment variable**
|
|
524
|
+
- **`MEMORIX_PROJECT_ROOT` environment variable** -- New way to specify the project directory for IDEs that don't set `cwd` to the project path (e.g., Antigravity uses `G:\Antigravity` as cwd). Priority: `--cwd` > `MEMORIX_PROJECT_ROOT` > `INIT_CWD` > `process.cwd()`. Example MCP config: `"env": { "MEMORIX_PROJECT_ROOT": "e:/your/project" }`.
|
|
392
525
|
|
|
393
|
-
## [0.7.7]
|
|
526
|
+
## [0.7.7] -- 2026-02-24
|
|
394
527
|
|
|
395
528
|
### Fixed
|
|
396
|
-
- **Wrong project detection in Antigravity/global MCP configs**
|
|
397
|
-
- **Dashboard always showing wrong project**
|
|
529
|
+
- **Wrong project detection in Antigravity/global MCP configs** -- Removed dangerous `scriptDir` fallback in `serve.ts` that caused the MCP server to detect the memorix development repo (or other wrong projects) instead of the user's actual project. When `process.cwd()` was not a git repo, the old code fell back to the memorix script's own directory, which could resolve to a completely unrelated project. Now relies solely on `detectProject()` which has proper fallback logic.
|
|
530
|
+
- **Dashboard always showing wrong project** -- When re-opening the dashboard (already running on port 3210), it now passes the current project as a `?project=` URL parameter. The frontend reads this parameter and auto-selects the correct project in the switcher, so opening dashboard from different IDEs/projects shows the right data.
|
|
398
531
|
|
|
399
|
-
## [0.7.6]
|
|
532
|
+
## [0.7.6] -- 2026-02-24
|
|
400
533
|
|
|
401
534
|
### Added
|
|
402
|
-
- **`llms.txt` + `llms-full.txt`**
|
|
403
|
-
- **FAQ semantic anchors in README**
|
|
535
|
+
- **`llms.txt` + `llms-full.txt`** -- Machine-readable project documentation for AI crawlers (2026 llms.txt standard). Helps Gemini, GPT, Claude, and other AI systems discover and understand Memorix automatically.
|
|
536
|
+
- **FAQ semantic anchors in README** -- 7 Q&A entries matching common AI search queries ("How do I keep context when switching IDEs?", "Is there an MCP server for persistent AI coding memory?", etc.)
|
|
404
537
|
|
|
405
538
|
### Changed
|
|
406
|
-
- **GitHub repo description**
|
|
407
|
-
- **GitHub topics**
|
|
408
|
-
- **package.json keywords**
|
|
409
|
-
- **package.json description**
|
|
410
|
-
- **MCP tool descriptions**
|
|
539
|
+
- **GitHub repo description** -- Shortened to ~150 chars for optimal og:title/og:description generation
|
|
540
|
+
- **GitHub topics** -- 20 GEO-optimized tags including `cursor-mcp`, `windsurf-mcp`, `claude-code-memory`, `cross-ide-sync`, `context-persistence`, `agent-memory`
|
|
541
|
+
- **package.json keywords** -- Replaced generic tags with IDE-specific MCP entity-linking keywords
|
|
542
|
+
- **package.json description** -- Shortened to under 160 chars for better meta tag generation
|
|
543
|
+
- **MCP tool descriptions** -- Enhanced `memorix_store`, `memorix_search`, `memorix_workspace_sync`, `memorix_skills` with cross-IDE context so AI search engines understand what problems they solve
|
|
411
544
|
|
|
412
|
-
## [0.7.5]
|
|
545
|
+
## [0.7.5] -- 2026-02-22
|
|
413
546
|
|
|
414
547
|
### Changed
|
|
415
|
-
- **README rewrite**
|
|
416
|
-
- **New `docs/SETUP.md`**
|
|
548
|
+
- **README rewrite** -- Completely restructured to focus on real-world scenarios, use cases, and features. Added 5 walkthrough scenarios, comparison table with alternatives, "Works with" badges for all 7 agents. Moved detailed config to sub-README.
|
|
549
|
+
- **New `docs/SETUP.md`** -- Dedicated setup guide with agent-specific config, vector search setup, data storage, and troubleshooting
|
|
417
550
|
|
|
418
|
-
## [0.7.4]
|
|
551
|
+
## [0.7.4] -- 2026-02-22
|
|
419
552
|
|
|
420
553
|
### Fixed
|
|
421
|
-
- **Hyphenated concepts not searchable**
|
|
554
|
+
- **Hyphenated concepts not searchable** -- Concepts like `project-detection` and `bug-fix` are now normalized to `project detection` and `bug fix` in the search index so Orama's tokenizer can split them into individual searchable terms. Original observation data is preserved unchanged.
|
|
422
555
|
|
|
423
|
-
## [0.7.3]
|
|
556
|
+
## [0.7.3] -- 2026-02-22
|
|
424
557
|
|
|
425
558
|
### Fixed
|
|
426
|
-
- **Windows: git remote detection fails due to "dubious ownership"**
|
|
559
|
+
- **Windows: git remote detection fails due to "dubious ownership"** -- Added `safe.directory=*` flag to all git commands so MCP subprocess can read git info regardless of directory ownership settings. If git CLI still fails, falls back to directly parsing `.git/config` file. This fixes projects incorrectly getting `local/<dirname>` instead of `owner/repo` as their project ID.
|
|
427
560
|
|
|
428
|
-
## [0.7.2]
|
|
561
|
+
## [0.7.2] -- 2026-02-22
|
|
429
562
|
|
|
430
563
|
### Fixed
|
|
431
|
-
- **`memorix_workspace_sync` rejects `kiro` as target**
|
|
432
|
-
- **`memorix_rules_sync` missing `kiro` target**
|
|
433
|
-
- **VS Code Copilot README config**
|
|
564
|
+
- **`memorix_workspace_sync` rejects `kiro` as target** -- Added `kiro` to `AGENT_TARGETS` enum (adapter was already implemented but missing from the tool's input schema)
|
|
565
|
+
- **`memorix_rules_sync` missing `kiro` target** -- Added `kiro` to `RULE_SOURCES` enum so Kiro steering rules can be generated as a sync target
|
|
566
|
+
- **VS Code Copilot README config** -- Separated `.vscode/mcp.json` (workspace) and `settings.json` (global) formats which have different JSON structures
|
|
434
567
|
|
|
435
|
-
## [0.7.1]
|
|
568
|
+
## [0.7.1] -- 2026-02-22
|
|
436
569
|
|
|
437
570
|
### Fixed
|
|
438
|
-
- **Dashboard checkbox checkmark not visible**
|
|
439
|
-
- **Embedding provider status flickers to "fulltext only"**
|
|
440
|
-
- **`memorix_dashboard` MCP tool reliability**
|
|
441
|
-
- **Dashboard embedding status always shows "fulltext only"**
|
|
571
|
+
- **Dashboard checkbox checkmark not visible** -- Added `position: relative/absolute` to `.obs-checkbox::after` so the ✓ renders correctly in batch select mode
|
|
572
|
+
- **Embedding provider status flickers to "fulltext only"** -- Replaced `initialized` boolean flag with a shared Promise lock; concurrent callers now wait for the same initialization instead of seeing `provider = null` mid-load
|
|
573
|
+
- **`memorix_dashboard` MCP tool reliability** -- Replaced fixed 800ms wait with TCP port polling (up to 5s) so the tool only returns after the HTTP server is actually listening
|
|
574
|
+
- **Dashboard embedding status always shows "fulltext only"** -- Fixed root cause: dashboard is an independent process, `isEmbeddingEnabled()` from orama-store always returns false there; now uses `provider !== null` directly
|
|
442
575
|
|
|
443
|
-
## [0.7.0]
|
|
576
|
+
## [0.7.0] -- 2026-02-21
|
|
444
577
|
|
|
445
578
|
### Added
|
|
446
579
|
- **Memory-Driven Skills Engine** (`memorix_skills` MCP tool):
|
|
447
|
-
- `list`
|
|
448
|
-
- `generate`
|
|
449
|
-
- `inject`
|
|
580
|
+
- `list` -- Discover all `SKILL.md` files across 7 agent directories
|
|
581
|
+
- `generate` -- Auto-generate project-specific skills from observation patterns (gotchas, decisions, how-it-works)
|
|
582
|
+
- `inject` -- Return full skill content directly to agent context
|
|
450
583
|
- Intelligent scoring: requires skill-worthy observation types, not just volume
|
|
451
584
|
- Write to any target agent with `write: true, target: "<agent>"`
|
|
452
585
|
- **Transformers.js Embedding Provider**:
|
|
453
|
-
- Pure JavaScript fallback (`@huggingface/transformers`)
|
|
454
|
-
- Provider chain: `fastembed`
|
|
586
|
+
- Pure JavaScript fallback (`@huggingface/transformers`) -- no native deps required
|
|
587
|
+
- Provider chain: `fastembed` -> `transformers.js` -> fulltext-only
|
|
455
588
|
- Quantized model (`q8`) for small footprint
|
|
456
589
|
- **Dashboard Enhancements**:
|
|
457
590
|
- Canvas donut chart for observation type distribution
|
|
@@ -460,14 +593,14 @@ Memorix reaches v1.0.0 — all major features complete. Future versions will ite
|
|
|
460
593
|
- **17 new tests** for Skills Engine (list, generate, inject, write, scoring, dedup)
|
|
461
594
|
|
|
462
595
|
### Changed
|
|
463
|
-
- Scoring algorithm requires at least 1 skill-worthy type (gotcha/decision/how-it-works/problem-solution/trade-off)
|
|
464
|
-
- Volume bonus reduced from
|
|
596
|
+
- Scoring algorithm requires at least 1 skill-worthy type (gotcha/decision/how-it-works/problem-solution/trade-off) -- pure discovery/what-changed entities won't generate skills
|
|
597
|
+
- Volume bonus reduced from 2xobs to 1xobs (capped at 5) to favor quality over quantity
|
|
465
598
|
- Type diversity bonus increased from 2 to 3 points per unique skill-worthy type
|
|
466
599
|
|
|
467
600
|
### Fixed
|
|
468
601
|
- 422 tests passing (up from 405), 34 test files, zero regressions
|
|
469
602
|
|
|
470
|
-
## [0.5.0]
|
|
603
|
+
## [0.5.0] -- 2026-02-15
|
|
471
604
|
|
|
472
605
|
### Added
|
|
473
606
|
- **Antigravity Adapter**: Full support for Antigravity/Gemini IDE (MCP config + rules)
|
|
@@ -484,11 +617,11 @@ Memorix reaches v1.0.0 — all major features complete. Future versions will ite
|
|
|
484
617
|
### Fixed
|
|
485
618
|
- 274 tests passing (up from 219), zero regressions
|
|
486
619
|
|
|
487
|
-
## [0.1.0]
|
|
620
|
+
## [0.1.0] -- 2026-02-14
|
|
488
621
|
|
|
489
622
|
### Core
|
|
490
623
|
- Knowledge Graph: Entity-Relation-Observation model (MCP Official compatible)
|
|
491
|
-
- 3-Layer Progressive Disclosure: compact search
|
|
624
|
+
- 3-Layer Progressive Disclosure: compact search -> timeline -> detail
|
|
492
625
|
- 9 observation types with icon classification
|
|
493
626
|
- Full-text search via Orama (BM25)
|
|
494
627
|
- Per-project isolation via Git remote detection
|
|
@@ -496,7 +629,7 @@ Memorix reaches v1.0.0 — all major features complete. Future versions will ite
|
|
|
496
629
|
|
|
497
630
|
### Cross-Agent Sync
|
|
498
631
|
- Rules Parser: 4 format adapters (Cursor, Claude Code, Codex, Windsurf)
|
|
499
|
-
- Rules Syncer: scan
|
|
632
|
+
- Rules Syncer: scan -> deduplicate -> conflict detection -> cross-format generation
|
|
500
633
|
- Workspace Sync: MCP config migration + workflow sync + apply with backup/rollback
|
|
501
634
|
|
|
502
635
|
### Intelligence (Competitor-Inspired)
|
|
@@ -513,7 +646,7 @@ Memorix reaches v1.0.0 — all major features complete. Future versions will ite
|
|
|
513
646
|
- Embedding provider abstraction layer (extensible)
|
|
514
647
|
- fastembed integration (optional, local ONNX, 384-dim bge-small)
|
|
515
648
|
- Orama hybrid search mode (BM25 + vector)
|
|
516
|
-
- Graceful degradation: no fastembed
|
|
649
|
+
- Graceful degradation: no fastembed -> fulltext only
|
|
517
650
|
- Embedding cache (5000 entries LRU)
|
|
518
651
|
|
|
519
652
|
### Agent Instructions
|