diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index d21c100..ec895a4 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -12,7 +12,7 @@ "name": "claude-code", "source": "./plugins/claude-code", "description": "Persistent semantic memory for Claude Code — user preferences, project context, prior decisions, and codebase facts that survive across sessions.", - "version": "0.1.13", + "version": "0.1.14", "category": "productivity", "homepage": "https://docs.atomicstrata.ai/integrations/coding-agents/claude-code", "license": "Apache-2.0" diff --git a/plugins/claude-code/.claude-plugin/plugin.json b/plugins/claude-code/.claude-plugin/plugin.json index 02e26bd..a0fffae 100644 --- a/plugins/claude-code/.claude-plugin/plugin.json +++ b/plugins/claude-code/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "atomicmemory", - "version": "0.1.13", + "version": "0.1.14", "description": "Persistent semantic memory for Claude Code — user preferences, project context, prior decisions, and codebase facts that survive across sessions.", "author": { "name": "AtomicMemory", diff --git a/plugins/claude-code/package.json b/plugins/claude-code/package.json index bfcbbfb..2b382fc 100644 --- a/plugins/claude-code/package.json +++ b/plugins/claude-code/package.json @@ -1,6 +1,6 @@ { "name": "@atomicmemory/claude-code-plugin", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory plugin for Claude Code — persistent semantic memory across sessions.", "private": false, "license": "Apache-2.0", diff --git a/plugins/codex/.codex-plugin/plugin.json b/plugins/codex/.codex-plugin/plugin.json index fa6d60e..ed3e983 100644 --- a/plugins/codex/.codex-plugin/plugin.json +++ b/plugins/codex/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "atomicmemory", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory memory layer for Codex. Pluggable semantic memory — swap backends through the SDK's MemoryProvider model by config, not code change.", "author": { "name": "AtomicMemory", diff --git a/plugins/codex/package.json b/plugins/codex/package.json index 1a8a2ac..cc7f808 100644 --- a/plugins/codex/package.json +++ b/plugins/codex/package.json @@ -1,6 +1,6 @@ { "name": "@atomicmemory/codex-plugin", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory plugin for OpenAI Codex — plugin manifest, MCP server config, and memory protocol skill.", "private": true, "license": "Apache-2.0", diff --git a/plugins/codex/skills/atomicmemory/SKILL.md b/plugins/codex/skills/atomicmemory/SKILL.md index 12d3432..641d87b 100644 --- a/plugins/codex/skills/atomicmemory/SKILL.md +++ b/plugins/codex/skills/atomicmemory/SKILL.md @@ -10,7 +10,7 @@ description: > license: Apache-2.0 metadata: author: AtomicMemory - version: "0.1.13" + version: "0.1.14" category: ai-memory tags: "memory, semantic-search, codex, pluggable" --- diff --git a/plugins/cursor/package.json b/plugins/cursor/package.json index 9f51a24..5ae52bb 100644 --- a/plugins/cursor/package.json +++ b/plugins/cursor/package.json @@ -1,6 +1,6 @@ { "name": "@atomicmemory/cursor-plugin", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory integration for Cursor - MCP configuration and project rules for persistent semantic memory.", "private": true, "license": "Apache-2.0", diff --git a/plugins/hermes/package.json b/plugins/hermes/package.json index 7a9b3f0..27d4a26 100644 --- a/plugins/hermes/package.json +++ b/plugins/hermes/package.json @@ -1,6 +1,6 @@ { "name": "@atomicmemory/hermes-plugin", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory native Hermes memory provider — Python SDK-backed, cross-tool memory by default.", "publishConfig": { "access": "public", diff --git a/plugins/hermes/plugin.yaml b/plugins/hermes/plugin.yaml index 818b50f..bad0d0e 100644 --- a/plugins/hermes/plugin.yaml +++ b/plugins/hermes/plugin.yaml @@ -1,5 +1,5 @@ name: atomicmemory -version: 0.1.13 +version: 0.1.14 description: "AtomicMemory native Hermes memory provider — Python SDK-backed, cross-tool memory by default." pip_dependencies: - "atomicmemory>=1.0.1,<2.0.0" diff --git a/plugins/hermes/pyproject.toml b/plugins/hermes/pyproject.toml index 867baa7..9525b58 100644 --- a/plugins/hermes/pyproject.toml +++ b/plugins/hermes/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "atomicmemory-hermes" -version = "0.1.13" +version = "0.1.14" description = "AtomicMemory native Hermes memory provider." readme = "README.md" requires-python = ">=3.10" diff --git a/plugins/openclaw/openclaw.plugin.json b/plugins/openclaw/openclaw.plugin.json index 1466713..605d370 100644 --- a/plugins/openclaw/openclaw.plugin.json +++ b/plugins/openclaw/openclaw.plugin.json @@ -1,10 +1,13 @@ { "id": "atomicmemory", "name": "AtomicMemory", - "version": "0.1.13", + "version": "0.1.14", "description": "Persistent semantic memory for OpenClaw agents — cross-channel user memory and deterministic session snapshots via the AtomicMemory SDK's pluggable MemoryProvider model.", "kind": "memory", "skills": ["./skills/atomicmemory"], + "contracts": { + "tools": ["memory_search", "memory_ingest", "memory_package", "memory_list"] + }, "configSchema": { "type": "object", "additionalProperties": false, diff --git a/plugins/openclaw/package.json b/plugins/openclaw/package.json index aa58a46..1a46057 100644 --- a/plugins/openclaw/package.json +++ b/plugins/openclaw/package.json @@ -1,6 +1,6 @@ { "name": "@atomicmemory/openclaw-plugin", - "version": "0.1.13", + "version": "0.1.14", "description": "AtomicMemory plugin for OpenClaw — persistent semantic memory and deterministic session snapshots across channels.", "type": "module", "main": "dist/index.js", diff --git a/plugins/openclaw/skills/atomicmemory/skill.yaml b/plugins/openclaw/skills/atomicmemory/skill.yaml index 12de2b2..f64d3d1 100644 --- a/plugins/openclaw/skills/atomicmemory/skill.yaml +++ b/plugins/openclaw/skills/atomicmemory/skill.yaml @@ -1,5 +1,5 @@ name: atomicmemory -version: 0.1.13 +version: 0.1.14 author: name: AtomicMemory url: https://atomicmem.ai diff --git a/plugins/openclaw/src/index.test.ts b/plugins/openclaw/src/index.test.ts index cb97a26..a31e190 100644 --- a/plugins/openclaw/src/index.test.ts +++ b/plugins/openclaw/src/index.test.ts @@ -8,8 +8,27 @@ import test from 'node:test'; import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { dirname, resolve } from 'node:path'; import plugin, { createOpenClawPlugin } from './index.js'; +const PLUGIN_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const EXPECTED_TOOL_NAMES = ['memory_ingest', 'memory_list', 'memory_package', 'memory_search']; + +test('manifest declares contracts.tools matching the tools register() exposes', () => { + const manifest = JSON.parse( + readFileSync(resolve(PLUGIN_ROOT, 'openclaw.plugin.json'), 'utf8'), + ); + assert.ok(manifest.contracts, 'openclaw.plugin.json must declare a contracts block'); + assert.ok(Array.isArray(manifest.contracts.tools), 'contracts.tools must be an array'); + assert.deepEqual( + [...manifest.contracts.tools].sort(), + EXPECTED_TOOL_NAMES, + 'contracts.tools must match the tools register() actually exposes', + ); +}); + test('register exposes memory tools without requiring provider config', () => { const tools: Array<{ name: string }> = [];