48 Commits

Author SHA1 Message Date
Rohit Ghumare ffca536990 fix(cli): correct iii install commands — there is no cargo install iii-engine
Caught during PR #128 review: the install hints I added showed
`cargo install iii-engine` as the recommended path on both Windows
and Unix. That crate does not exist on crates.io. Verified via:

  - https://crates.io/api/v1/crates?q=iii   (no iii-engine result)
  - https://crates.io/api/v1/crates/iii-engine   (404)

The actual install methods per github.com/iii-hq/iii releases:

  - macOS / Linux: curl -fsSL https://install.iii.dev/iii/main/install.sh | sh
    (downloads the prebuilt binary into ~/.local/bin/iii)
  - Windows: download iii-x86_64-pc-windows-msvc.zip from the GitHub
    release page, extract iii.exe, add to PATH or place at
    %USERPROFILE%\.local\bin\iii.exe (which our fallback already checks)
  - Docker: docker pull iiidev/iii:latest (already used by docker-compose)

There is no PowerShell installer (https://install.iii.dev/iii/main/install.ps1
returns 404) and no scoop / winget / cargo path on Windows. The previous
README "From source" line (`cargo install iii-engine`) was already wrong
on main — fixed at the same time so we have one correct source of truth.

Changes:

- src/cli.ts installInstructions(): rewrite both Windows and Unix
  branches to show the correct upstream commands. Add link to
  https://iii.dev/docs at the bottom of each
- src/cli.ts troubleshooting note: "iii-engine version mismatch" line
  no longer references cargo
- src/cli.ts fallbackIiiPaths(): drop the .cargo/bin/iii.exe fallbacks
  on both platforms — they were dead paths since the crate doesn't
  exist. Keep .local/bin/iii.exe (matches where the sh installer puts
  it on Unix and where the README tells Windows users to drop iii.exe)
- README.md "Windows" section: rewrite Option A as "download the
  prebuilt MSVC zip from GitHub releases", add explicit disclaimer
  note that there is no cargo install iii-engine path
- README.md "From source" line: replace stale cargo command with the
  correct sh-installer / Windows-zip / Docker matrix

Same test count (684 / 684), build clean.
2026-04-13 15:30:27 +01:00
Rohit Ghumare 4beb35ab9e fix(cli): surface real engine startup errors, Windows support (#127)
Root cause: when the iii-engine binary crashes on startup or isn't
installed at all, the CLI spawned with `stdio: "ignore"` and swallowed
stderr entirely. 15 seconds later it reported "Check that ports 3111,
3112, 49134 are available" — which pointed users at the wrong problem.
On Windows this was the most common failure mode because most users
don't have Rust/cargo installed and nothing tells them they need it.

Changes:

- Capture engine stderr via `stdio: ["ignore", "ignore", "pipe"]` with
  a 16KB cap, surface it on startup failure or in --verbose mode.
  Processes still spawn detached/unref'd so the parent can exit cleanly.
- `windowsHide: true` so spawning a console app doesn't pop a window.
- Platform-aware iii binary fallback paths: on Windows, search
  %USERPROFILE%\.cargo\bin\iii.exe, %LOCALAPPDATA%\cargo\bin\iii.exe,
  and %USERPROFILE%\.local\bin\iii.exe. On Unix, add ~/.cargo/bin/iii
  alongside the existing paths.
- Use `path.delimiter` instead of hardcoded `:` when prepending to PATH.
- Three-way diagnostic when the engine never becomes ready:
  1. Process crashed → show the captured stderr + common causes
  2. Process never started → platform-specific install instructions
  3. Running but port not responding → platform-specific port check
     command (netstat on Windows, lsof/ss on Unix)
- New `--verbose` / `-v` flag echoes spawn commands and surfaces engine
  stderr even on success. Useful for diagnosing #127-style reports
  across any platform.
- Docker compose lookup searches three candidate paths (was two), fixing
  a latent bug where npm-installed docker-compose.yml at the package
  root wasn't always found.
- README: new `### Windows` section in the install area documenting
  Option A (rustup + cargo install iii-engine), Option B (Docker
  Desktop), and Option C (standalone MCP only, no engine), plus a
  symptoms→fix troubleshooting table.

No test changes needed — engine startup is a side-effect path exercised
only via the CLI binary itself, not imported by any unit test. Verified
via `npm test` (684/684) and `npm run build` (clean).
2026-04-13 15:14:57 +01:00
Rohit Ghumare 2665981341 Merge remote-tracking branch 'origin/main' into fix/standalone-mcp-npx-command
# Conflicts:
#	README.md
#	integrations/hermes/README.md
#	integrations/openclaw/README.md
#	src/cli.ts
2026-04-13 12:22:36 +01:00
Rohit Ghumare 8a36fe7867 fix: retention scoring (#119) + npx agentmemory-mcp 404 (#120), release 0.8.3 (#123)
* fix: retention scoring (#119) + npx agentmemory-mcp 404 (#120), release 0.8.3

Issue #119 — retention score ignored agent-side reads

`mem::retention-score` previously hardcoded `accessCount=0` and
`accessTimestamps=[]` for episodic memories and used only a single-sample
`lastAccessedAt` for semantic memories, so the time-frequency decay
formula was a dead path. All read endpoints now record access events to
a new `mem:access` KV namespace via a keyed-mutex'd access tracker:

  - mem::search, mem::smart-search (compact + expand), mem::context,
    mem::timeline, mem::file-context, mem::get-related, mem::working-context
  - retention.ts pre-fetches the full access log in one kv.list call,
    normalizes every row defensively, and builds an O(1) lookup Map
  - recordAccessBatch uses Promise.allSettled so a slow keyed-lock on one
    id does not block the rest of the batch
  - Bounded ring buffer of the last 20 access timestamps per memory
  - Backwards-compat fallback: pre-0.8.3 semantic memories with only the
    legacy sem.lastAccessedAt still score correctly
  - Corrupt lastAccessedAt values are NaN-safe via Date.parse + isFinite
  - reinforcementBoost is reported as the raw formula output, not the
    clamped residual

Memory deletion sites (retention-evict, evict, auto-forget,
governance-delete, governance-bulk, forget, import replace) now call
deleteAccessLog to prevent mem:access from accumulating zombie entries.
mem::export / mem::import and mem::snapshot-create / mem::snapshot-restore
round-trip the new namespace so backup/restore cycles no longer zero out
reinforcement signals.

Issue #120 — npx agentmemory-mcp returned npm registry 404

The README instructed users to run `npx agentmemory-mcp`, but
`agentmemory-mcp` only existed as a `bin` entry inside
`@agentmemory/agentmemory`, not a real registry package. Two-part fix:

  - New sibling package `packages/agentmemory-mcp/` — a thin shim that
    depends on `@agentmemory/agentmemory` (~0.8.3, tilde to block 0.9.x
    supply-chain drift) and forwards to dist/standalone.mjs via the new
    `exports` field on the main package
  - Canonical `npx @agentmemory/agentmemory mcp` subcommand on the CLI
    for users who already have the main package installed
  - Removed the dead `agentmemory-mcp` bin from the main package so the
    shim owns the name unambiguously
  - publish.yml publishes both packages in order with idempotent
    guards and npm-view registry polling (no more fixed sleep)
  - All MCP install snippets in README + integrations/openclaw + hermes
    + shim README use `npx -y agentmemory-mcp` to skip install prompts

Release 0.8.3

  - 670 tests passing (665 + 11 new: access tracker, retention,
    smart-search integration, corrupt-input, kv.list failure path,
    Promise.allSettled resilience)
  - Version bumped across package.json, src/version.ts, types.ts,
    export-import supportedVersions, plugin.json
  - package-lock.json regenerated

* fix: address CodeRabbit review feedback on #123

Real issues caught and fixed:

- access-tracker: deleteAccessLog now takes the same mem:access:<id>
  keyed mutex used by recordAccess, eliminating the race where a
  concurrent delete could drop an in-flight RMW update and leave a
  stale access log for an evicted memory
- access-tracker: normalizeAccessLog now coerces count to a
  non-negative integer, drops non-finite recent[] entries, truncates
  recent[] to the last 20 on read (enforcing the ring-buffer invariant),
  and guarantees count >= recent.length so a malformed row can't produce
  NaN downstream. count is NOT capped at 20 — it is the lifetime access
  counter, while recent[] is the 20-entry window
- export-import: import path now rejects accessLogs arrays above
  MAX_ACCESS_LOGS (50_000), normalizes each entry via
  normalizeAccessLog, and drops entries whose memoryId is not in the
  imported memories set, so a crafted export can't blow up memory or
  resurrect zombie access rows for memories that don't exist
- publish.yml: added a post-publish npm view polling loop for
  agentmemory-mcp mirroring the one that already guards the main
  package, so the workflow only succeeds when `npx agentmemory-mcp` is
  actually visible on the registry
- CHANGELOG.md: added the missing [0.8.3] reference-style link target
  at the bottom to match the [0.8.2]/[0.8.1]/[0.8.0] pattern
- README.md: standalone MCP inline examples now use `npx -y` to match
  the MCP config snippets and skip the install confirmation prompt

Tests: 680/680 (+10 new — deleteAccessLog behavior, normalizeAccessLog
invariants, malformed mem:access row handling in retention scoring).

Findings deliberately not applied:

- auto-forget.ts / remember.ts / evict.ts recordAudit calls: existing
  pattern in the codebase only audits governance deletes (user-initiated
  admin actions), not automatic eviction. Adding audit everywhere is a
  policy change, out of scope for this PR
- evict.ts gating deleteAccessLog on memory delete success: current
  order is defensible, deleteAccessLog is already best-effort with its
  own try/catch, and calling it after a failed memory delete is harmless
- snapshot.ts fail-fast on kv.list failure: inconsistent with the
  existing .catch(() => []) pattern used for observations in the same
  function
- retention.ts semantic evict only deletes KV.memories rows: real bug
  but pre-existing on main (RetentionScore has no source/type field).
  Tracked separately — out of scope for this PR
- bin.mjs fallback command: already present in the existing catch
  handler
- Promise.all parallelization of delete+deleteAccessLog: micro
  optimization not worth the readability cost
2026-04-13 12:05:18 +01:00
JasonLandbridge e83bb112ff fix: correct OpenCode MCP config format and add dedicated example
OpenCode uses a different MCP config format than other tools:
- Config file is opencode.json (not .opencode/config.json)
- Uses "type": "local" with "command" array (not mcpServers format)
- Does not use separate "command"/"args" fields

Also added an OpenCode-specific config block in the Standalone MCP
section alongside the generic JSON example so it's easy to find.
2026-04-13 11:48:00 +02:00
JasonLandbridge 401666a8b6 fix: correct standalone MCP invocation to use --package flag
npx agentmemory-mcp fails because there is no standalone npm package
named 'agentmemory-mcp'. The binary is registered inside the
@agentmemory/agentmemory package and must be invoked with:

  npx --package @agentmemory/agentmemory agentmemory-mcp

Updated all documentation examples across README.md and integration
guides (openclaw, hermes) to use the correct invocation. This fixes
MCP clients that followed the docs and got an npm 404 error.
2026-04-13 11:42:54 +02:00
Rohit Ghumare 649e6e44c5 feat: light-mode SVG variants for GitHub dark theme compatibility (#115)
Adds a full set of light-background SVG tags in assets/tags/light/
that mirror the existing dark-background tags in assets/tags/.

GitHub <picture> element auto-swaps based on the reader's theme:
- GitHub LIGHT theme  → dark-bg SVG (original, stands out on white)
- GitHub DARK theme   → light-bg SVG (new, stands out on dark)

## 30 light variants generated

Same dimensions, same orange #FF6B35 brand accent, same fonts. Only
the backgrounds and text colors change:

- Background: white → light gray gradient (#FFFFFF → #F8F9FB)
- Border: #E5E7EB (GitHub-style neutral border)
- Title text: #0F172A (slate-900)
- Subtitle text: #64748B (slate-500)

Stat values are slightly darkened for better contrast on white:
- Green: #00D26A → #16A34A
- Orange: #FF6B35 → #EA580C
- Purple: #B5A4FF → #7C3AED

## README changes

All 26 tag references now use <picture> elements:

  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="assets/tags/light/foo.svg">
    <img src="assets/tags/foo.svg" alt="..." height="..." />
  </picture>

Covers: 14 section headers (both stat rows × 6 = 12 stat cards).

No visual changes for light-theme readers — the original dark SVGs
still show. Dark-theme readers now get proper contrast instead of
dark-on-dark blend.

All 30 light SVGs validated with xmllint. 654/654 tests passing.
2026-04-12 20:28:29 +01:00
Rohit Ghumare b317433211 Adjust image heights in README statistics section
Updated image heights for various statistics in README.
2026-04-12 11:47:47 +01:00
Rohit Ghumare 79a7a8ec04 feat: real agent logos + paste-this-prompt blocks for integrations (#114)
* feat: flashy README with real agent logos + paste-this-prompt blocks for integrations

## Main README — real logos in Supported Agents grid

Replaced plain text cells with real brand logos for all 16 supported agents:

- simple-icons CDN for: Claude Code (Anthropic), Cursor, Gemini CLI
  (Google Gemini), Codex CLI (OpenAI), Windsurf, Claude Desktop, Claude SDK
- GitHub org avatars for: OpenClaw, OpenCode (opencode-ai), Cline,
  Hermes (NousResearch), Goose (block), Kilo Code (kilo-org), Aider
  (Aider-AI), Roo Code (RooCodeInc)
- Shield badge for the generic "Any agent" cell

Each logo is clickable and links to the upstream project. The OpenClaw and
Hermes cells now link directly to integrations/openclaw and integrations/hermes
so users can find the deeper plugin integration.

Added tagline footer below the grid reinforcing the cross-agent story.

## Integration READMEs — paste-this-prompt blocks

Following the gstack pattern, both integration READMEs now open with a
visual hero (upstream logo + agentmemory logo) and a copy-pasteable text
block the user can drop into their agent. The agent handles the entire
setup — start server, update MCP config, verify health, open viewer.

This matches the "paste this into Claude Code" block we already have in
the main README for Claude Code users.

### openclaw/README.md
- Centered hero: OpenClaw org avatar + agentmemory icon
- Shield badges: 43 MCP tools, 4 lifecycle hooks, 95.2% R@5, self-hosted
- "Install it in 30 seconds" section with the paste-this prompt

### hermes/README.md
- Centered hero: NousResearch avatar + agentmemory icon
- Shield badges: 43 MCP tools, 6 lifecycle hooks, 95.2% R@5, self-hosted
- "Install it in 30 seconds" section with the paste-this prompt

All 654 tests still passing.

* fix: reorder agents, replace broken logos, add OpenClaw/Hermes paste blocks, cleaner hero

## Main README

### Supported Agents grid — 3 fixes

1. **Reorder**: OpenClaw and Hermes now in positions 2 and 3 (right after
   Claude Code), since they have first-class gateway plugins in
   integrations/. Users shouldn't have to scroll to find them.

2. **Fix broken Codex logo**: simple-icons CDN returned 404 for the
   OpenAI slug with black color. Switched ALL logos to GitHub org
   avatars (github.com/<org>.png?size=120) which are bulletproof and
   always return real images. Verified 7/7 resolve to actual PNGs.

3. **Bigger logos**: bumped from 40px to 48px for more visual weight.

### Paste-this-prompt toggles

Added two collapsible <details> blocks after the Claude Code paste
prompt: one for OpenClaw, one for Hermes. Each contains a complete
copy-pasteable setup prompt that the agent can execute, plus a link
to the full integration guide.

## Integration README heroes — redesigned

The old hero had two logos separated by an ugly gray "+" shield badge
that looked cheap. Replaced with:

- agentmemory banner.png as the centered hero image
- H1 title with a small inline upstream logo (28px) next to the title
- Bolded tagline + subtitle with upstream link
- Shield badge row (MCP tools, hooks, R@5, self-hosted, license)

Much cleaner and follows the main README's visual pattern.

Verified: 654/654 tests passing.

* Update README.md

* feat: custom SVG tags for section headers (no emojis)

Replaces emoji section headers with custom SVG badges matching the
agentmemory brand style (orange #FF6B35 accent on dark #1A1A1A).
Inspired by shanraisshan/claude-code-best-practice's custom tag
approach in its !/ directory.

## Custom SVG tags created (30 total in assets/tags/)

### 14 section headers (section-*.svg)
Each is a 44px-tall dark rounded badge with:
- Orange gradient accent strip on the left (brand color #FF6B35 → #FF8F5E)
- Uppercase title in white, 800 weight, 2.2 letter-spacing
- Light gray subtitle (#9CA3AF) with section context
- Subtle #2A2A2A border on dark #1A1A1A → #0F0F0F gradient

Sections: works-with-every-agent, benchmarks, vs-competitors, quick-start,
why, how-it-works, search, mcp-server, real-time-viewer, configuration,
api, architecture, development, license.

### 6 hero stat blocks (stat-*.svg)
Big numbers with small uppercase labels, replacing the shield.io badge
row in two places (hero + benchmarks section):
- stat-recall: 95.2% R@5 (green)
- stat-tokens: 92% fewer tokens (green)
- stat-tools: 43 MCP tools (orange)
- stat-hooks: 12 auto hooks (orange)
- stat-deps: 0 external DBs (purple)
- stat-tests: 654 tests passing (green)

### 8 pill tags (pill-*.svg)
Rounded pills with colored dot indicator for inline status tags:
MCP, AUTO HOOK, SKILL, NEW, BETA, STABLE, PLUGIN, SECURE.

### 1 "New in v0.8.2" version tag
Dark pill with orange v0.8.2 version marker.

### 1 section divider
Horizontal line with orange diamond in the middle (unused for now,
available for future sections).

## README changes

- All <h2> section headers now use <img> tags pointing to the SVG
- Hero stats row replaced with stat-*.svg row (same visual position)
- Benchmarks stats row replaced with the same stat-*.svg row
- Nav links updated to match the new h2 anchor IDs
- "New in v0.8.2" callout uses new-v082.svg tag + note
- Cursor grid cell fixed (was missing <strong>Cursor</strong> label)
- Zero emojis in the entire README

All 30 SVGs validated with xmllint, 654/654 tests passing.

* Remove version 0.8.2 image from README

Removed image tag for version 0.8.2 from README.
2026-04-12 11:46:45 +01:00
Rohit Ghumare ae8f061cd6 feat: demo command, benchmark comparison, OpenClaw integration (#113)
* feat: add demo command, benchmark comparison, OpenClaw integration, token cost in viewer

Product & ecosystem improvements surfaced from the last30days research
and competitive analysis of the AI agent memory space.

## New

### agentmemory demo command
Seeds 3 realistic sessions (JWT auth, N+1 query fix, rate limiting)
and runs smart-search queries against them. Shows token-aware semantic
search finding "N+1 query fix" when you search "database performance
optimization" — proof that keyword matching can't do that.

  npx @agentmemory/agentmemory demo

Surfaces the "show don't tell" moment in 30 seconds without requiring
the user to integrate anything.

### benchmark/COMPARISON.md
Head-to-head comparison vs mem0 (53K stars, 68.5% LoCoMo),
Letta/MemGPT (22K stars, 83.2% LoCoMo), Khoj (34K stars),
claude-mem (46K stars), and Hippo. Feature matrix across 18
dimensions. Token efficiency table. Honest caveats about LongMemEval
vs LoCoMo apples-vs-oranges. Lets users compare without trusting our
README.

### integrations/openclaw/
OpenClaw gateway plugin following the same pattern as the Hermes
integration. README, plugin.yaml with hooks config, and plugin.mjs
implementing the 4 lifecycle hooks (on_session_start, on_pre_llm_call,
on_post_tool_use, on_session_end). Gets agentmemory into the OpenClaw
ecosystem for distribution.

## Improved

### Viewer token savings card
Now shows tokens saved AND dollar cost saved (using $0.30/1K as a
reasonable mid-tier model rate) instead of just raw numbers. Makes
the ROI immediately tangible.

### README additions
- "Try it in 30 seconds" section featuring the new demo command
- Competitor comparison link in benchmarks section
- OpenClaw integration link in supported agents table

* refactor: simplify demo command and OpenClaw plugin

- Extract postJson helper in cli.ts runDemo (4x repeated fetch boilerplate → single call site)
- Break runDemo into buildDemoSessions, seedDemoSession, runDemoSearch for single-responsibility
- Replace three-branch if/else command dispatch with a commands map (single error handler)
- Extract typed DemoSession/DemoObservation/SearchResult interfaces
- Simplify OpenClaw plugin.mjs: collapse headers() + fetchJson() into a single postJson method
  Each hook is now ~5 lines instead of ~10

No behavior change. 654/654 tests passing, CLI help and error paths verified.

* fix: address CodeRabbit review on growth changes

## plugin.mjs
- Honor the enabled config flag: constructor now sets this.enabled and
  all four hooks (onSessionStart, onPreLlmCall, onPostToolUse,
  onSessionEnd) return early when disabled
- Fail-fast on non-OK HTTP: previously !res.ok returned null regardless
  of fallbackOnError. Now throws with status/statusText/body when
  fallbackOnError is false
- Update header JSDoc to use the real hook names instead of the
  fictional prefetch/capture/consolidate

## openclaw README.md
- Replace stale hook names (prefetch/capture/consolidate) with the
  actual onSessionStart/onPreLlmCall/onPostToolUse/onSessionEnd names
  matching plugin.mjs
- Add 'text' language identifier to the Project profile code fence to
  satisfy markdownlint MD040

## cli.ts
- Replace ad-hoc Date.now()-based session IDs with generateId("demo")
  from src/state/schema.ts, matching the rest of the codebase
  (snapshot.ts, migrate.ts, consolidation-pipeline.ts)
- Add postJsonStrict helper that throws on non-OK with status + body
- seedDemoSession now uses postJsonStrict for session/start and
  session/end (critical lifecycle calls that should fail fast)
- The observation POST in the loop now inlines the fetch to surface
  HTTP errors via p.log.warn with status/body, still only incrementing
  the stored counter on success

## viewer/index.html
- Fix token-to-dollar conversion that was 100x underreporting:
  tokensSaved / 1000 * 0.3 returns DOLLARS, not cents. Now computes
  dollars first, then cents = Math.round(dollars * 100)
- 100K tokens saved now correctly displays $30.00, not 30ct

All 654 tests still passing.

* fix: address 2 more CodeRabbit findings on plugin.mjs

- Use nullish coalescing (??) for config defaults so valid falsy
  values like min_confidence: 0 or timeout_ms: 0 aren't overwritten
  by defaults. || would clobber them.

- Fix /agentmemory/context payload to match the server contract at
  src/triggers/api.ts:115. The handler expects { sessionId, project,
  budget? } but the plugin was sending { sessionId, query, tokenBudget,
  minConfidence }. Three issues:
  1. Missing required 'project' field
  2. Wrong field name: 'tokenBudget' should be 'budget'
  3. 'query' and 'minConfidence' are not part of this endpoint's
     contract (probably belong on /smart-search instead)
2026-04-12 11:05:21 +01:00
eng1 cbaaf4fb44 security: harden defaults, viewer CSP, mesh auth, export confinement (#108)
Fixes 6 security issues in agentmemory's default deployment, viewer, mesh sync, export path, and startup flow.

## Findings Addressed

1. **Default REST/stream exposure on 0.0.0.0** — bind default REST and stream services to 127.0.0.1; restrict Docker port publishing to localhost; add dedicated iii-config.docker.yaml for Docker usage.

2. **Stored XSS via inline viewer handlers** — remove inline event handlers from the viewer; replace with delegated data-action event handling; switch to nonce-based CSP for viewer HTML; add script-src-attr 'none'.

3. **Arbitrary path writes in Obsidian export** — confine exports to AGENTMEMORY_EXPORT_ROOT (default ~/.agentmemory); reject vaultDir values outside the allowed root.

4. **Mesh sync without peer auth** — require AGENTMEMORY_SECRET for mesh endpoints and sync operations; send Authorization: Bearer <secret> on mesh push/pull requests.

5. **Secret redaction misses modern token formats** — add coverage for Bearer tokens, sk-proj-*, broader sk/pk/rk/ak variants, GitHub ghs_/ghu_ tokens.

6. **CLI executes remote shell script directly** — remove curl|sh installation pattern; use existing local iii-engine binary if available, otherwise fall back to Docker.

## Validation

- 654 tests passing (8 new security tests)
- npm run build succeeds
- Merged with main and resolved README conflicts to preserve the new benchmark/competitor table layout

Thanks @eng-pf for catching these and submitting the fixes.
2026-04-12 09:55:13 +01:00
Rohit Ghumare de068324ab feat: redesign README with benchmark tables, competitor comparison, and agent logos
- Add prominent benchmark table (LongMemEval 95.2% R@5 + token savings side-by-side)
- Add competitor comparison table (agentmemory vs mem0 vs Letta vs built-in)
- Add visual agent grid showing all 16 supported agents
- Add stats row (95.2% R@5, 92% fewer tokens, 43 tools, 12 hooks, 0 deps, 646 tests)
- Collapse verbose tool lists and API endpoints into expandable sections
- Remove 34-row KV scopes table and 123-function breakdown (internal details)
- Remove lengthy env var comments and inline code examples
- Simplify "How It Works" with 4-tier consolidation table
- Add token savings estimate to CLI status command
- Reduce README from ~900 lines to ~540 lines while adding more visual impact
2026-04-12 00:29:30 +01:00
Rohit Ghumare 122efdeb44 docs: add all major agents to README, prioritized by popularity
Add OpenClaw (345K stars), Codex CLI (62K), Cline (59K), Aider (42K),
Goose (33K), Kilo Code (1.5M users) to both Quick Start table and
Supported Agents section. Ordered by GitHub stars/user count.
2026-04-09 13:48:20 +01:00
Rohit Ghumare 112e6f4bc0 feat: add Hermes Agent memory provider plugin
Two integration paths:
1. MCP server (zero code) - add to ~/.hermes/config.yaml
2. Memory provider plugin (deeper) - hooks into Hermes agent loop

Plugin implements the full MemoryProvider ABC:
- prefetch() injects relevant memories before each LLM call
- sync_turn() captures conversation turns in background (non-blocking)
- on_session_end() marks sessions for summarization
- on_pre_compress() re-injects context before compaction
- on_memory_write() mirrors MEMORY.md writes
- system_prompt_block() injects project profile
- 3 tools: memory_recall, memory_save, memory_search

Uses only stdlib (urllib, json, threading). No new dependencies.
2026-04-09 13:33:10 +01:00
Rohit Ghumare 6fd22d3b1d fix: remove emdashes and AI-sloppy phrasing from README 2026-04-09 13:08:05 +01:00
Rohit Ghumare e602f6e58a docs: README polish — badges, cost table, flow diagram, methodology note
- Add npm version, CI status, license, and stars badges
- Add stats table below intro (95.2% R@5, 92% fewer tokens, 43 tools, 12 hooks, 0 deps)
- Add cost comparison table ($500/yr extraction-based vs $10/yr agentmemory vs $0 local)
- Add memory flow diagram (observe → compress → index → inject)
- Add methodology transparency note on benchmark section
- Update nav links (add Benchmarks, shorten labels)
2026-04-09 13:05:55 +01:00
Rohit Ghumare 15250b3bed docs: move Quick Start to top of README, right after intro 2026-04-09 11:26:40 +01:00
Rohit Ghumare 8a32a4b50a docs: gstack-style Quick Start — paste one block, agent does the rest
Replace numbered steps with a single copy-pasteable instruction block
for Claude Code. The agent reads it and handles: engine startup, plugin
install, hook registration, and verification.

Other agents consolidated into a clean table (Cursor, Gemini CLI,
OpenCode, Claude Desktop, SkillKit, REST API) with inline config.
2026-04-09 11:22:16 +01:00
Rohit Ghumare 6894843a92 docs: add MiniMax provider, ANTHROPIC_BASE_URL, search project filter
- LLM Providers table: add MiniMax, note ANTHROPIC_BASE_URL support
- Env vars: add MINIMAX_API_KEY, MINIMAX_MODEL, ANTHROPIC_BASE_URL
- Search endpoint: note optional project/cwd filters
- Fallback chain example: include minimax
2026-04-09 09:06:56 +01:00
Rohit Ghumare 4c1184b185 fix: address review findings on DX improvements
- README: add `text` language tag to fenced code blocks (MD040)
- cli.ts: sessions endpoint returns {sessions: [...]}, not a raw array
- viewer: token budget from URL param instead of hardcoded 2000
- viewer: applyTheme takes persist param, auto-detection doesn't save to
  localStorage (prevents OS preference from being overridden on first load)
2026-04-09 08:53:40 +01:00
Rohit Ghumare 75a2d35ed6 feat: DX improvements — dark mode, status command, memory previews, token savings
Viewer:
- Dark mode toggle (persists to localStorage, respects prefers-color-scheme)
- Fix hardcoded canvas colors for dark theme (grid, labels, tooltips)
- Memory search shows 2-line content preview with search term highlighting
- Concept tags shown inline on memory cards (max 4)
- Token Savings stat card on dashboard (estimates savings vs full context)

CLI:
- New `agentmemory status` command — shows connection, health, sessions,
  graph stats, viewer URL without opening browser

README:
- SkillKit universal install: `npx skillkit install agentmemory` (32+ agents)
- "First Steps After Install" section with worked Session 1 → Session 2 example
- Shows actual compressed observation format and context injection
- "How to verify" checklist
2026-04-09 00:18:27 +01:00
Rohit Ghumare 8c1890e64e revert: keep original banner.png, remove banner.svg 2026-04-08 17:57:50 +01:00
Rohit Ghumare 0e4a57570e assets: add SVG logo, icon, and banner
- logo.svg: full logo mark with memory tiers + retrieval spark
- icon.svg: compact 64x64 app icon variant
- banner.svg: README banner with tagline, stats, supported agents
- README: switch from banner.png to banner.svg

Design: 4 memory tiers (cold→hot) with orange accent (#FF6B35),
retrieval lines converging to a spark node, fading dots for decay.
2026-04-08 13:13:17 +01:00
Rohit Ghumare 4ce4003a10 docs: lead with outcomes, not architecture
Rewrite README opening to focus on what the user gets ("your agent
remembers everything, no more re-explaining") instead of internal
architecture ("triple-stream retrieval, 4-tier consolidation").
2026-04-08 10:35:31 +01:00
Rohit Ghumare 61d0c43798 docs: update agent references — Gemini CLI, OpenCode, Cursor over Windsurf
Replace Windsurf with Gemini CLI and OpenCode in Quick Start, Supported
Agents, and MCP sections. Add concrete setup commands for each agent.
2026-04-08 10:25:07 +01:00
Rohit Ghumare 57b0eeebfa docs: update README with LongMemEval results and fix inconsistencies
- Lead with 95.2% R@5 on LongMemEval-S (ICLR 2025) instead of old 64% internal number
- Add LongMemEval benchmark table to README benchmarks section
- Fix Quick Start: reorder to start→connect→verify, add MCP configs for
  Cursor/Windsurf/Claude Desktop/REST API (not just Claude Code plugin)
- Fix version in health example (0.7.4 → 0.7.7)
- Fix test count (627 → 646)
- Fix source file count (113 → 118)
- Fix LOC count (~20,000 → ~21,800)
- Fix function count (89 → 123 mem:: functions)
- Fix MCP tools table header (38 → 43)
- Fix MCP tools reference in chooser table (41 → 43)
- Cross-reference LongMemEval from QUALITY.md
2026-04-08 10:24:24 +01:00
Rohit Ghumare 9d607c1c37 fix: resolve 6 installation bugs breaking fresh setup (#95)
- Update zod from ^3.23.0 to ^4.0.0 (claude-agent-sdk peer dep conflict)
- Mount iii-config.yaml in docker-compose.yml (missing /app/config.yaml)
- Change host binding from 127.0.0.1 to 0.0.0.0 for Docker compatibility
- Switch npm start from index.mjs to cli.mjs (auto-starts iii-engine)
- Fix CLI health check to detect engine via any HTTP response, not just worker route
- Handle EADDRINUSE on viewer port gracefully instead of crashing
- Fix README step numbering and version in health example
2026-04-07 16:25:28 +01:00
Rohit Ghumare 9c27eff610 feat: implement reflect — auto-synthesize insights from memory clusters (#89)
Adds mem::reflect: traverses knowledge graph, groups related memories
by concept clusters, synthesizes higher-order insights via LLM.

New files:
- src/prompts/reflect.ts — LLM prompt for insight synthesis
- src/functions/reflect.ts — 4 functions: reflect, insight-list,
  insight-search, insight-decay-sweep
- test/reflect.test.ts — 13 tests

New type: Insight (confidence-scored, fingerprint-deduped, decayable)
New KV scope: mem:insights
New MCP tools: memory_reflect, memory_insight_list (in ESSENTIAL set)
New REST: POST /reflect, GET /insights, POST /insights/search
Hooks into consolidation pipeline as "reflect" tier after semantic

Review fixes applied:
- Fixed project filter no-op (was discarding filter result)
- Fixed BFS depth tracking (standard level-count pattern)
- Added attribute-order constraint to LLM prompt
- Whitelisted fields in api::insight-search (no raw body passthrough)
- Fixed Jaccard fallback to compare document-id sets not concept strings

43 MCP tools, 103 REST endpoints, 627 tests passing
2026-04-06 16:08:34 +01:00
Rohit Ghumare 5510e94e39 fix: simplify review — temporal-graph name, test precision, stale counts
- Fix README: temporal-graph → temporal-graph-extract + temporal-query
- Fix test precision: toBeCloseTo(0.55, 1) → precision 2 (±0.005)
- Fix stale test counts: 581 → 614 across README and AGENTS.md
- Add obsidian export error-path test (errors undefined on success)

614 tests passing
2026-04-06 13:17:48 +01:00
Rohit Ghumare 1717083bff docs: complete function table — 89 functions organized by category
Fixes #92

Replaced flat 57-row table with categorized table covering all 89
mem:: functions. Organized into 22 categories: Core Memory, Search,
Memory Evolution, Knowledge Graph, Actions, Leases, Routines, Signals,
Checkpoints, Mesh, Sentinels, Sketches, Crystals, Lessons, Facets,
Diagnostics, Flow, Branch, Team, Governance, Snapshots, Export.
2026-04-06 12:41:50 +01:00
Rohit Ghumare e26320e3aa feat: auto-install iii-engine, clack CLI, viewer lessons tab, README update
CLI (src/cli.ts):
- Auto-install iii-engine via curl | sh with interactive clack/prompts
- Edge cases: Windows (manual install note), curl missing, PATH fallback
- Error shows all install methods: curl | sh, cargo install, Docker
- Spinner feedback for install, engine start, readiness check

Viewer (src/viewer/index.html):
- Version v0.5.0 → v0.7.0
- Added Lessons tab with search, confidence gauges, source badges
- Added Lessons + Crystals stat cards to dashboard
- Dashboard fetches lessons and crystals data

README:
- Quick start is now single command: npx @agentmemory/agentmemory
- Prerequisites: iii-engine via curl | sh (not npm)
- Updated all stale counts and version references

AGENTS.md: test count 573 → 581

581 tests passing, all builds clean
2026-04-05 11:28:49 +01:00
Rohit Ghumare ed6f1d64d5 docs: update README for v0.7.0 — npm install, lessons, obsidian, correct counts
- Add `npm install -g @agentmemory/agentmemory` as primary install method
- Add npx agentmemory to Quick Start
- Fix stale counts: 38→41 tools, 93→100 endpoints, 573→581 tests,
  105→113 source files, 16K→20K LOC, 33→34 KV scopes, 52→57 functions
- Fix version in health example: 0.6.1→0.7.1
- Add v0.7.0 functions to table: lesson-save/recall/list/strengthen/decay-sweep, obsidian-export
- Add mem:lessons to KV scopes table
- Add 5 new REST endpoints to API table
- Add v0.7.0 env vars: LESSON_DECAY_ENABLED, OBSIDIAN_AUTO_EXPORT, AGENTMEMORY_TOOLS
- Update CONSOLIDATION_ENABLED example to true (opt-in)
- Update Node.js requirement to >=20
- Update export format reference to include v0.7.0 + lessons
2026-04-05 01:10:18 +01:00
Rohit Ghumare e8f410b537 feat: v0.7.0 — lessons, tool visibility, auto-consolidation, obsidian export, npx bootstrap (#82)
* feat: v0.7.0 — lessons, tool visibility, auto-consolidation, obsidian export, npx bootstrap

Five DX improvements based on competitive research against Mem0, Engram, CodeMem:

1. `npx agentmemory` zero-config startup
   - New CLI bootstrap (src/cli.ts) auto-detects and starts iii-engine
   - Tries `iii` binary first, falls back to `docker compose up -d`
   - Bundles iii-config.yaml and docker-compose.yml in dist/

2. Simplified MCP tool surface (7 core tools by default)
   - AGENTMEMORY_TOOLS=all unlocks all 49 tools
   - Default: save, recall, consolidate, forget, sessions, diagnose, lesson_save
   - Call handler remains unfiltered — any tool callable by name

3. Auto-consolidation on session end
   - CONSOLIDATION_ENABLED defaults to true (was false)
   - Session-end hook: session/end → crystallize → consolidate → bridge sync
   - Consolidation pipeline always registered (timer gated by config)

4. First-class lesson memory type with confidence decay
   - Lesson interface: confidence (0-1), reinforcements, decayRate, source
   - 5 functions: lesson-save, lesson-recall, lesson-list, lesson-strengthen, lesson-decay-sweep
   - Dedup via SHA-256 fingerprint — duplicate saves strengthen existing
   - Crystal lessons auto-flow into lesson system at confidence 0.6
   - Daily decay sweep with parallel KV writes

5. Obsidian-compatible Markdown export
   - Export to ~/.agentmemory/vault/ with YAML frontmatter + wikilinks
   - MOC.md (Map of Content) index file
   - Parallel KV reads, auto-export via OBSIDIAN_AUTO_EXPORT=true

Stats: 49 MCP tools, 99 REST endpoints, 573 tests passing

* docs: add AGENTS.md, fix tool/endpoint counts across README, plugin, cli

- Create AGENTS.md with strict consistency rules for MCP tools, REST
  endpoints, versions, KV scopes, and audit operations
- Fix MCP tool count: 38 → 41 across README.md (4 occurrences)
- Fix REST endpoint count: 93/95 → 99 across README.md and index.ts
- Fix plugin.json: version 0.6.1 → 0.7.0, tool count 5 → 41
- Fix cli.ts help text: 48+ → 41 MCP tools
- Fix README api.ts path reference → triggers/api.ts

* fix: address code review findings — consolidation guard, decay bug, async fs, export-import lessons

Inline fixes:
- Revert CONSOLIDATION_ENABLED to opt-in (=== "true"), matching original behavior
- Add early-exit guard in consolidation-pipeline handler when disabled
- Gate session-end crystallize+consolidation calls on CONSOLIDATION_ENABLED
- Fix lesson decay over-decay bug: add lastDecayedAt to Lesson, compute
  incremental delta instead of reapplying full age every sweep run
- Add LESSON_DECAY_ENABLED flag (default true) to gate the sweep timer

Outside diff fixes:
- Add lessons to export-import (export + import + replace cleanup)
- Log warning instead of swallowing obsidian auto-export errors

Nitpick fixes:
- Switch obsidian-export to async fs/promises (mkdir, writeFile)
- Add per-item try/catch in obsidian-export, return errors array
- Replace governance_delete with smart_search in ESSENTIAL_TOOLS (non-destructive default)
- Fix CLI whichBinary for Windows (uses "where" on win32)
- Use dynamic port in CLI error message instead of hardcoded 3111
- Return 201 for newly created lessons, 200 for strengthened
- Wrap lesson audit calls in try/catch so audit failure doesn't surface
- Fix build script to not swallow tsdown failure
- Remove exact tool count from test, use >=41 + uniqueness + required names
- Add test/consistency.test.ts: validates version, tool count, README consistency
- Add isConsolidationEnabled mock to consolidation-pipeline test

579 tests passing (573 original + 6 new consistency checks)

* fix: guard remaining audit calls, correct endpoint count, add CI + npm publish

Review fixes:
- Wrap lesson_recall and lesson_strengthen audit calls in try/catch
- Fix REST endpoint count: 99 → 100 (verified via grep) across index.ts,
  README.md, and AGENTS.md
- Use regex in consistency test for README assertions (flexible phrasing)
- Add consolidation gate tests: disabled returns early, force=true bypasses

CI/CD:
- Add .github/workflows/ci.yml — test on Node 18/20/22
- Add .github/workflows/publish.yml — auto-publish to npm on GitHub release
  (uses NPM_TOKEN secret + provenance)

Nitpick:
- Single-char term filter (t.length > 1) kept intentionally — prevents noise
  from single-letter matches; documented in AGENTS.md if needed

581 tests passing

* fix(ci): add --legacy-peer-deps for zod v3/v4 peer conflict

@anthropic-ai/claude-agent-sdk@0.2.56 requires zod@^4.0.0 as a peer
dependency but the project uses zod@^3.23.0. The lock file resolves
this locally but npm ci is strict about peer deps in CI.

* fix(ci): drop Node 18 from matrix — tsdown requires Node 20+

tsdown/rolldown uses node:util.styleText which is only available in
Node 20.12+. Updated engines field to >=20.0.0 to match.

* fix(ci): add inlineOnly: false to tsdown config, target node20

tsdown errors on CI with "Consider adding inlineOnly option" when
dependencies are bundled. Setting inlineOnly: false suppresses this.
Also updated target from node18 to node20 to match engines field.
2026-04-04 17:57:01 +01:00
Rohit Ghumare e5f42c4d01 docs: update README for v0.6.1 — punchy intro, updated stats (#80)
- Add two-paragraph technical pitch above the fold with 3-line quick start
- Update tool count 37→38 (memory_verify), function count 50→52, test count 573
- Add memory_verify to MCP tools table, mem::verify and mem::cascade-update to functions table
- Add citation provenance and cascading staleness to capabilities table
- Add cross-agent sync and memory trust to comparison table
- Update API endpoint count 93→95, version 0.6.0→0.6.1
2026-03-25 21:21:01 +00:00
Rohit Ghumare 857f71e3c6 feat: v0.6.0 advanced retrieval with real-world benchmarks (#76)
* feat: add 9 orchestration modules for v0.5.0

Add actions, frontier, leases, routines, signals, checkpoints,
flow-compress, mesh, and branch-aware modules with full MCP tools,
REST endpoints, and 170 new tests. Includes SSRF protection,
race-condition-safe keyed mutex locking, SHA-256 fingerprinting,
and fixes for 29 CodeRabbit review findings.

- 9 new source files (src/functions/*)
- 8 new test files (170 tests, total 386)
- 10 new MCP tools, 23 new REST endpoints
- 8 new KV scopes, new types for orchestration
- Version bump to 0.5.0, README and viewer updated

* feat: add sentinels, sketches, crystallize, diagnostics, facets modules

5 new modules inspired by beads patterns but with original naming and
iii-engine real-time streaming (no polling):

- sentinels: event-driven condition watchers (webhook, timer, threshold,
  pattern, approval) that auto-unblock gated actions via SSE
- sketches: ephemeral action graphs with auto-expiry, promote or discard
- crystallize: LLM-powered compaction of completed action chains into
  compact crystal digests with key outcomes and lessons
- diagnostics: self-diagnosis across 8 categories (actions, leases,
  sentinels, sketches, signals, sessions, memories, mesh) with auto-heal
- facets: multi-dimensional tagging (dimension:value) with AND/OR queries

- 5 new source files, 5 new test files (132 tests, total 518)
- 9 new MCP tools (total 37), 21 new REST endpoints (total 93)
- 4 new KV scopes (total 33), new types for all modules
- README stats and function table updated

* fix: address code review findings across v0.5.0 modules

- actions: validate edges before persisting, set blocked status for requires deps
- leases: use mem:action lock key, reject blocked actions, check expiry on release
- checkpoints: validate linkedActionIds exist, check requires edges in unblock
- mesh: add SSRF validation on peer registration
- routines: remove invalid "failed" action status check
- export-import: add v0.5.0 scope export/import (actions, sentinels, sketches, etc)
- mcp/server: validate CSV inputs are strings before splitting
- schema: replace runtime require with static import
- README: fix stale tool/endpoint counts (28→37, 72→93)

* fix: second round code review — mesh locks, routines DAG, MCP input validation, README counts

- mesh.ts: add withKeyedLock on action writes in receive path, add IPv6 private ranges to SSRF check
- routines.ts: validate DAG (duplicate orders, unknown deps), set dep actions to blocked, refresh stepStatus in routine-status
- checkpoints.ts: runtime type enum validation, set linked pending actions to blocked
- leases.ts: validate ttlMs is finite positive number
- export-import.ts: add skip strategy checks for all v0.5.0 import blocks
- mcp/server.ts: typeof guards on tags, config JSON.parse, actionIds, linkedActionIds, categories
- README.md: Tools 18→37, Functions 33→50, stats line updated
- test: update checkpoint test for new blocked-on-create behavior

* fix: third round review — lease renew/release safety, mesh locking, export replace cleanup, MCP input guards

- leases.ts: renew extends from max(now, existing expiry) instead of now; release verifies action ownership before mutation
- mesh.ts: withKeyedLock on memory writes in mesh-receive; applySyncData validates id/updatedAt and locks both memory and action writes
- routines.ts: stepStatus maps "blocked" to "pending" explicitly; progress includes blocked/cancelled counts; routine-freeze wrapped in withKeyedLock
- export-import.ts: remove unused RoutineRun import; replace strategy clears all orchestration namespaces; skip strategy for graphNodes/graphEdges/semantic/procedural
- mcp/server.ts: sentinel_trigger JSON.parse with typeof+try/catch; facet_query typeof guards on matchAll/matchAny; remove redundant requires cast; .filter(Boolean) on concepts/files/tags/requires CSV splits
- README.md: clarify API table is a representative subset

* fix: fourth round review — redirect SSRF, blocked-on-create, missing action handling, boolean normalization

- mesh.ts: add redirect:"error" to both outbound fetch calls to prevent SSRF via redirect
- routines.ts: create actions with status "blocked" directly when hasDeps (eliminates two-pass race); handle missing actions in routine-status as cancelled; progress.total uses run.actionIds.length
- mcp/server.ts: sentinel config accepts object values directly; normalize unreadOnly/dryRun for both JSON booleans and string values
- README.md: consistent bundle size (365KB) across both occurrences

* feat: v0.6.0 advanced retrieval — triple-stream search, stemming, real benchmarks

Search improvements:
- Porter stemmer for word normalization (authentication ↔ authenticating)
- 40+ coding-domain synonym groups (db ↔ database, k8s ↔ kubernetes)
- Binary-search prefix matching replaces O(n) full scan
- Session diversification (max 3 results per session)
- Co-occurrence graph edges between all concept pairs

New retrieval modules:
- Sliding window inference pipeline (context enrichment at ingestion)
- Adaptive query expansion (LLM-generated reformulations)
- Triple-stream search (BM25 + Vector + Graph with RRF fusion)
- Append-only temporal knowledge graph (versioned edges, point-in-time queries)
- Graph-augmented retrieval (entity search + neighborhood expansion)
- Ebbinghaus retention scoring (decay + tiered hot/warm/cold/evictable)

Real-world benchmarks (240 observations, 20 labeled queries):
- Quality eval: 64.1% recall@10 with Xenova embeddings (vs 55.8% grep)
- Scale eval: 92-100% token savings vs built-in memory at 240-50K observations
- Cross-session: 12/12 queries found vs 10/12 for 200-line MEMORY.md cap
- Token measurement uses actual search results (fixed fake constant bug)
- Removed old microbenchmarks (bench.ts, run-bench.ts, COMPARISON.md)
2026-03-18 08:47:35 +00:00
Rohit Ghumare 1ca0ec0414 feat: v0.5.0 orchestration layer — 14 modules, 518 tests (#74)
* feat: add 9 orchestration modules for v0.5.0

Add actions, frontier, leases, routines, signals, checkpoints,
flow-compress, mesh, and branch-aware modules with full MCP tools,
REST endpoints, and 170 new tests. Includes SSRF protection,
race-condition-safe keyed mutex locking, SHA-256 fingerprinting,
and fixes for 29 CodeRabbit review findings.

- 9 new source files (src/functions/*)
- 8 new test files (170 tests, total 386)
- 10 new MCP tools, 23 new REST endpoints
- 8 new KV scopes, new types for orchestration
- Version bump to 0.5.0, README and viewer updated

* feat: add sentinels, sketches, crystallize, diagnostics, facets modules

5 new modules inspired by beads patterns but with original naming and
iii-engine real-time streaming (no polling):

- sentinels: event-driven condition watchers (webhook, timer, threshold,
  pattern, approval) that auto-unblock gated actions via SSE
- sketches: ephemeral action graphs with auto-expiry, promote or discard
- crystallize: LLM-powered compaction of completed action chains into
  compact crystal digests with key outcomes and lessons
- diagnostics: self-diagnosis across 8 categories (actions, leases,
  sentinels, sketches, signals, sessions, memories, mesh) with auto-heal
- facets: multi-dimensional tagging (dimension:value) with AND/OR queries

- 5 new source files, 5 new test files (132 tests, total 518)
- 9 new MCP tools (total 37), 21 new REST endpoints (total 93)
- 4 new KV scopes (total 33), new types for all modules
- README stats and function table updated

* fix: address code review findings across v0.5.0 modules

- actions: validate edges before persisting, set blocked status for requires deps
- leases: use mem:action lock key, reject blocked actions, check expiry on release
- checkpoints: validate linkedActionIds exist, check requires edges in unblock
- mesh: add SSRF validation on peer registration
- routines: remove invalid "failed" action status check
- export-import: add v0.5.0 scope export/import (actions, sentinels, sketches, etc)
- mcp/server: validate CSV inputs are strings before splitting
- schema: replace runtime require with static import
- README: fix stale tool/endpoint counts (28→37, 72→93)

* fix: second round code review — mesh locks, routines DAG, MCP input validation, README counts

- mesh.ts: add withKeyedLock on action writes in receive path, add IPv6 private ranges to SSRF check
- routines.ts: validate DAG (duplicate orders, unknown deps), set dep actions to blocked, refresh stepStatus in routine-status
- checkpoints.ts: runtime type enum validation, set linked pending actions to blocked
- leases.ts: validate ttlMs is finite positive number
- export-import.ts: add skip strategy checks for all v0.5.0 import blocks
- mcp/server.ts: typeof guards on tags, config JSON.parse, actionIds, linkedActionIds, categories
- README.md: Tools 18→37, Functions 33→50, stats line updated
- test: update checkpoint test for new blocked-on-create behavior

* fix: third round review — lease renew/release safety, mesh locking, export replace cleanup, MCP input guards

- leases.ts: renew extends from max(now, existing expiry) instead of now; release verifies action ownership before mutation
- mesh.ts: withKeyedLock on memory writes in mesh-receive; applySyncData validates id/updatedAt and locks both memory and action writes
- routines.ts: stepStatus maps "blocked" to "pending" explicitly; progress includes blocked/cancelled counts; routine-freeze wrapped in withKeyedLock
- export-import.ts: remove unused RoutineRun import; replace strategy clears all orchestration namespaces; skip strategy for graphNodes/graphEdges/semantic/procedural
- mcp/server.ts: sentinel_trigger JSON.parse with typeof+try/catch; facet_query typeof guards on matchAll/matchAny; remove redundant requires cast; .filter(Boolean) on concepts/files/tags/requires CSV splits
- README.md: clarify API table is a representative subset

* fix: fourth round review — redirect SSRF, blocked-on-create, missing action handling, boolean normalization

- mesh.ts: add redirect:"error" to both outbound fetch calls to prevent SSRF via redirect
- routines.ts: create actions with status "blocked" directly when hasDeps (eliminates two-pass race); handle missing actions in routine-status as cancelled; progress.total uses run.actionIds.length
- mcp/server.ts: sentinel config accepts object values directly; normalize unreadOnly/dryRun for both JSON booleans and string values
- README.md: consistent bundle size (365KB) across both occurrences
2026-03-09 09:08:56 +00:00
Rohit Ghumare 3ef216ebd6 fix: replace static thumbnail with animated GIF demo (#73)
Convert mp4 to GIF using ffmpeg two-pass palettegen (720p, 15fps,
Floyd-Steinberg dithering) for inline playback on GitHub README.
Remove unused thumbnail.
2026-03-04 11:27:53 +00:00
Rohit Ghumare 3b3db8d22a fix: use clickable thumbnail for demo video in README (#72)
GitHub doesn't render <video> tags in markdown. Replace with a
clickable thumbnail image that links to the raw mp4 file.
2026-03-04 11:20:00 +00:00
Rohit Ghumare b9d7ea93c8 docs: add demo video to README (#71) 2026-03-04 11:07:01 +00:00
Rohit Ghumare 11652fa742 docs: update README with viewer section and accurate stats (#70)
- Add Real-Time Viewer section with feature list
- Update stats: 87 source files, ~11,300 LOC, 232KB bundled
- Add viewer port info to Quick Start and Configuration
- Add Viewer link to nav bar
2026-03-04 07:38:41 +00:00
Rohit Ghumare 134cf96124 feat: agentmemory v0.4.0 — the memory layer for all AI coding agents (#9)
* feat: agentmemory v0.4.0 — the memory layer for all AI coding agents

7 new features: Claude Code memory bridge, standalone cross-agent MCP server,
knowledge graph with entity extraction, 4-tier memory consolidation pipeline,
team/shared memory, memory governance with audit trail, git-versioned snapshots.

33 functions, 18 MCP tools, 6 MCP resources, 3 MCP prompts, 49 REST endpoints,
21 KV scopes, 216 tests. All features opt-in via env vars.

* fix: address 28 CodeRabbit findings across v0.4.0 codebase

Critical: Fix bin path mismatch (dist/mcp-standalone.mjs -> dist/standalone.mjs)
Bugs: Fix procedural decay, parseFloat||0.5 for zero values, snapshot restore
missing graphNodes/observations, git catch too broad, N+1 graph query, BFS
duplicate edges, array mutation in audit sort, date validation
Improvements: Lazy readline in transport, JSON-RPC validation, persist error
handling, ID collision prevention, defensive null coalescing for concepts/files,
Windows backslash support in config, direction required for bridge sync tool,
try-catch for audit/governance MCP, team profile fallback teamId, POST body for
bridge sync hook, observations validation for graph-extract endpoint, await in test
2026-03-01 18:03:36 +00:00
Rohit Ghumare 5c4ef047ca docs: update README for v0.4.0 (#8)
* docs: update README for v0.4.0 — MCP resources, prompts, enrichment, confidence

Update stats (173 tests, 22 functions, 29 REST + 4 MCP endpoints, 142KB),
add MCP resources/prompts/endpoints sections, document enrich endpoint,
confidence scoring on relationships, and liveness probe.

* fix: correct REST endpoint count to 34 (28 core + 6 MCP)

Update three locations that incorrectly stated 29 endpoints to reflect
the actual 34 endpoints in the API table. Add http language specifier
to MCP endpoints code block.
2026-03-01 16:38:21 +00:00
Rohit Ghumare d400b051da docs: rewrite README for v0.3.0 — what, why, and agent support (#5)
* docs: rewrite README for v0.3.0

- Add "Why agentmemory" section explaining what it provides and comparison table
- Add "Supported Agents" section with native hooks, MCP, and REST API paths
- Add integration decision matrix for choosing the right approach
- Document hybrid search, embedding providers, and progressive disclosure
- Document memory evolution, versioning, relationships, and auto-forget
- Document project profiles, timeline, export/import
- Update all stats (21 functions, 10 MCP tools, 28 endpoints, 144 tests)
- Update data model with new KV scopes (relations, profiles, embeddings, bm25)
- Update config section with embedding, fallback, and search weight env vars

* docs: add banner image to README

* docs: fix banner crop and size

Remove cream strip at bottom, cap width to 720px in README

* docs: include REST API in supported agents intro

Consistent wording in both the intro line and REST section
2026-02-27 11:32:42 +05:30
Rohit Ghumare 54deeb33d8 fix: normalize version to 0.2.0 across all files
Package.json, telemetry, health endpoint, startup log, and README
all consistently reference v0.2.0 now.
2026-02-27 11:33:48 +05:30
Rohit Ghumare ed07418a71 docs: update README for v0.3.0
Reflects all v0.3.0 features: self-evaluation framework, health monitoring,
circuit breaker, BM25 search, dedup, eviction, MCP server (5 tools),
4 skills, 12 hooks, 20 API endpoints, and updated architecture stats.
2026-02-27 11:33:48 +05:30
Rohit Ghumare 6df02d3e20 add plugin marketplace install support
- Add .claude-plugin/marketplace.json for /plugin marketplace add
- Build hook scripts into plugin/scripts/ (self-contained)
- Fix hooks.json to use ${CLAUDE_PLUGIN_ROOT} paths
- Update README with plugin install as primary quick start
2026-02-27 11:33:48 +05:30
Rohit Ghumare feffc5a362 add integration tests, polish README, simplify code
- Add integration test suite covering all 11 API endpoints
- Rewrite README for clarity and user-friendliness
- Extract VIEWER_CSP constant, remove dead IndexEntry.terms field
- Consolidate SIGINT/SIGTERM handlers
2026-02-27 11:33:48 +05:30
Rohit Ghumare 37de9e5d02 feat: agentmemory v0.1.0 -- persistent memory for AI coding agents 2026-02-27 11:32:40 +05:30