{"id":"d8f392e1-017f-4d4f-8155-da3b46711dd5","entityType":"agent","slug":"clawhub-chen-feng123-quickrecall","name":"QuickRecall - Zero-Dependency Memory Engine.  常用记忆优先出现。零依赖 AI 记忆引擎，纯 Node.js。/ Prioritizes frequently used memories. Zero deps.","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chen-feng123-quickrecall","canonicalPath":"/agent/clawhub-chen-feng123-quickrecall","generatedAt":"2026-10-11T22:55:42.670Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":null},"description":"Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dep...","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s173bjpr98qcngds2npjsk01ah85y9vx:quickrecall","sourceUrl":"https://clawhub.ai/chen-feng123/quickrecall","homepage":"https://clawhub.ai/chen-feng123/skills/quickrecall","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chen-feng123/quickrecall","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chen-feng123/skills/quickrecall","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"QuickRecall - Zero-Dependency Memory Engine.  常用记忆优先出现。零依赖 AI 记忆引擎，纯 Node.js。/ Prioritizes frequently used memories. Zero deps. technical dossier on Xpersona wi"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":null},"stars":null,"forks":null,"downloads":1006,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.5","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:02:42.187Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T19:02:42.250Z","lastCrawledAt":"2026-10-11T19:02:42.187Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T19:02:42.187Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.5","createdAt":"2026-05-04T12:01:20.725Z","changelog":"Version 1.0.5 - No changes detected in the skill files or documentation. - No new features, fixes, or updates in this release.","fileCount":11,"zipByteSize":13020},{"version":"1.0.4","createdAt":"2026-05-04T11:39:44.716Z","changelog":"No changes detected in this version. - Version 1.0.4 contains no file or documentation updates since the previous release. - All features, API, and documentation remain unchanged.","fileCount":10,"zipByteSize":11957},{"version":"1.0.3","createdAt":"2026-05-04T11:34:30.513Z","changelog":"No changes detected in this version. - No updates or modifications found in the latest version. - Functionality and documentation remain unchanged.","fileCount":10,"zipByteSize":11526},{"version":"1.0.2","createdAt":"2026-05-04T11:25:32.173Z","changelog":"**Major update: Refactored, streamlined, and rebranded the memory engine with expanded Node.js and CLI support.** - Project renamed to \"memory-enhancement-engine\"; description and documentation updated to reflect new features and usage. - Simplified file structure: removed server/api scripts and legacy assets; added core `memory.js`, CLI `memo.cjs`, and migration/init utilities. - Dropped external REST API endpoints; direct Node.js integration and CLI operations are now primary usage methods. - Enhanced memory scoring: semantic/bigram recall, hotness, time-decay, and importance weighting. - Auto-compaction, pruning, and stat reporting features introduced. - Zero external dependencies retained—pure Node.js memory engine.","fileCount":10,"zipByteSize":11532},{"version":"1.0.1","createdAt":"2026-05-02T11:39:17.305Z","changelog":"Version 1.0.1 — No code or functionality changes. - No file changes detected. - Documentation, features, and API remain the same as in the previous version.","fileCount":12,"zipByteSize":24634},{"version":"1.0.0","createdAt":"2026-05-02T11:19:06.687Z","changelog":"First release. QuickRecall v1.0 — Zero-dependency memory engine with hotness-prioritized recall. 11 RESTful API endpoints (health, license, status, write, query, compact, tags, by-tag, get-by-id, delete, session-restore) Hybrid scoring: 50% semantic similarity + 30% recency decay + 20% access frequency (hotness) Tag-based filtering for exact AND queries Chinese synonym expansion for semantic search In-memory LRU cache with configurable TTL Automatic persistence to JSON file Auto-decay: old/low-importance memories fade over time Max 1000 memories with automatic least-important eviction Data stays local — no telemetry, no network calls Single dependency: express (69 packages total)","fileCount":12,"zipByteSize":24648}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173bjpr98qcngds2npjsk01ah85y9vx:quickrecall","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s173bjpr98qcngds2npjsk01ah85y9vx:quickrecall` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/chen-feng123/quickrecall before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T22:55:42.669Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chen-feng123-quickrecall/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":null},"readme":"Skill: QuickRecall - Zero-Dependency Memory Engine.  常用记忆优先出现。零依赖 AI 记忆引擎，纯 Node.js。/ Prioritizes frequently used memories. Zero deps.\n\nOwner: chen-feng123\n\nSummary: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dep...\n\nTags: latest:1.0.5, zero-dependency:1.0.0\n\nVersion history:\n\nv1.0.5 | 2026-05-04T12:01:20.725Z | user\n\nVersion 1.0.5\n\n- No changes detected in the skill files or documentation.\n- No new features, fixes, or updates in this release.\n\nv1.0.4 | 2026-05-04T11:39:44.716Z | user\n\nNo changes detected in this version.\n\n- Version 1.0.4 contains no file or documentation updates since the previous release.\n- All features, API, and documentation remain unchanged.\n\nv1.0.3 | 2026-05-04T11:34:30.513Z | user\n\nNo changes detected in this version.\n\n- No updates or modifications found in the latest version.\n- Functionality and documentation remain unchanged.\n\nv1.0.2 | 2026-05-04T11:25:32.173Z | user\n\n**Major update: Refactored, streamlined, and rebranded the memory engine with expanded Node.js and CLI support.**\n\n- Project renamed to \"memory-enhancement-engine\"; description and documentation updated to reflect new features and usage.\n- Simplified file structure: removed server/api scripts and legacy assets; added core `memory.js`, CLI `memo.cjs`, and migration/init utilities.\n- Dropped external REST API endpoints; direct Node.js integration and CLI operations are now primary usage methods.\n- Enhanced memory scoring: semantic/bigram recall, hotness, time-decay, and importance weighting.\n- Auto-compaction, pruning, and stat reporting features introduced.\n- Zero external dependencies retained—pure Node.js memory engine.\n\nv1.0.1 | 2026-05-02T11:39:17.305Z | user\n\nVersion 1.0.1 — No code or functionality changes.\n\n- No file changes detected.\n- Documentation, features, and API remain the same as in the previous version.\n\nv1.0.0 | 2026-05-02T11:19:06.687Z | user\n\nFirst release. QuickRecall v1.0 — Zero-dependency memory engine with hotness-prioritized recall.\n\n11 RESTful API endpoints (health, license, status, write, query, compact, tags, by-tag, get-by-id, delete, session-restore)\nHybrid scoring: 50% semantic similarity + 30% recency decay + 20% access frequency (hotness)\nTag-based filtering for exact AND queries\nChinese synonym expansion for semantic search\nIn-memory LRU cache with configurable TTL\nAutomatic persistence to JSON file\nAuto-decay: old/low-importance memories fade over time\nMax 1000 memories with automatic least-important eviction\nData stays local — no telemetry, no network calls\nSingle dependency: express (69 packages total)\n\nArchive index:\n\nArchive v1.0.5: 11 files, 13020 bytes\n\nFiles: memo.cjs (5737b), memory.js (8411b), package.json (503b), README.md (1254b), references/API_SPEC.md (1696b), references/USE_GUIDE.md (1803b), scripts/init-memory.mjs (122b), scripts/test-client.js (2293b), skill-card.md (1890b), SKILL.md (3353b), _meta.json (130b)\n\nFile v1.0.5:SKILL.md\n\n---\nname: memory-enhancement-engine\ndescription: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\ntags:\n  - memory\n  - persistent\n  - semantic-search\n  - hotness\n  - recall\n  - ai-agent\n  - nodejs\nfeatures:\n  - Hotness-prioritized recall\n  - Semantic search (bigram + character overlap)\n  - Importance weighting (0-2.0)\n  - Exponential time decay\n  - Auto-compaction and pruning\n  - Zero external dependencies\n  - Pure Node.js\n---\n\n# Memory Enhancement Engine\n\n**记忆增加引擎** — Persistent memory engine with hotness-prioritized semantic recall.\n\nMemories that are recalled more often appear first — not just keyword matches.\n\n## Quick Start\n\n```bash\n# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\"\n```\n\n## Core Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);\n```\n\n## API\n\n| Method | Description |\n|--------|-------------|\n| `add(content, importance, metadata)` | Write a memory |\n| `retrieve(query, k)` | Semantic search (returns sorted by score) |\n| `getRecent(n)` | Get N most recent memories |\n| `remove(predicate)` | Remove memories matching predicate |\n| `compact(groupSize, minImportance)` | Compact old memories into summaries |\n| `getStatus()` | Get engine stats (count, size, etc.) |\n\n## Scoring Formula\n\n```\nscore = similarity × 0.5 + recency × 0.3 + hotness × 0.2\n```\n\nWhere hotness = log(1 + access_count) × exp(-time_delta / 86400)\n\n## Features\n\n- **Hotness-Prioritized Recall** — Frequently accessed memories get boosted scores\n- **Semantic Search** — Bigram overlap + character-level similarity\n- **Importance Weighting** — 0.0 (trivial) to 2.0 (critical)\n- **Time Decay** — Half-life configurable (default 2 hours)\n- **Auto-Prune** — Beyond 1000 entries, least important are pruned\n- **Auto-Compaction** — Merge low-importance groups into summaries\n- **No Server Needed** — Direct Node.js require, stores to local JSON\n\n## Installation\n\n| Method | Command |\n|--------|---------|\n| Copy | Copy `memory.js` + `memo.cjs` to your project |\n| ClawHub | `clawhub install memory-enhancement-engine` |\n\n## File Structure\n\n```\nmemory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├── memo.cjs             # CLI tool\n├── package.json\n├── assets/\n│   └── icon.svg\n├── references/\n│   ├── API_SPEC.md\n│   └── USE_GUIDE.md\n└── scripts/\n    ├── init-memory.mjs  # One-time migration\n    └── test-client.js\n```\n\n## License\n\nMIT\n\nFile v1.0.5:README.md\n\n# 宙一记忆系统 v3 — 初始化说明\n\n## 架构\n\n本系统把封装技能中的记忆引擎能力**内化到工作区**。\n\n```\nmemo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态\n```\n\n## 如何使用\n\n### 写入一条记忆\n\n```bash\nnode scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]\n```\n\n### 检索记忆\n\n```bash\nnode scripts/memo.cjs query \"关键词\" [k=5] [min_imp=0]\n```\n\n### 查看状态\n\n```bash\nnode scripts/memo.cjs status\n```\n\n### 压缩旧记忆\n\n```bash\nnode scripts/memo.cjs compact [group_size=5] [min_imp=0.5]\n```\n\n## 封装技能 vs 宙一记忆系统\n\n封装技能（卖的产品）：\n- 独立部署，接受外部请求\n- x402 支付验证\n- REST API 对外暴露\n- 多租户隔离\n\n宙一记忆系统（这里）：\n- 本地文件持久化，直接读写\n- 无支付、无网络依赖\n- 在启动流程中自动调用（AGENTS.md）\n- 只有我一个用户\n- 但要完整保留：语义检索、权重、时间衰减、压缩能力\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1777896080725\n}\n\nFile v1.0.5:references/API_SPEC.md\n\n# Memory Enhancement Engine — API Specification\n\n## `MemorySystem`\n\nCore class with persistent storage to local JSON file.\n\n### Constructor\n\n```javascript\nnew MemorySystem(config)\n```\n\n**Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `decayHalfLifeHours` | number | 2 | Exponential decay half-life |\n| `simWeight` | number | 0.6 | Semantic similarity weight |\n| `recencyWeight` | number | 0.4 | Recency weight |\n| `storePath` | string | auto | Path to MEMORY_STORE.json |\n\n---\n\n### Methods\n\n#### `add(entry) -> string`\nWrite a new memory.\n\n- **Input:** `{ content: string, importance?: number (0-2.0), metadata?: object }`\n- **Output:** `memory_id` — unique 12-char hex hash\n- **Errors:** Empty content → `Error`\n\n#### `query(text, k=5) -> Array`\nSemantic search.\n\n- **Input:** `text` — search query string; `k` — max results (1-50)\n- **Output:** `[{id, content, importance, score, metadata, created_at, accessed_at, hit_count}, ...]`\n- **Scoring:** similarity × simWeight + recency × recencyWeight + hotness × 0.2\n\n#### `recent(n=10) -> Array`\nGet N most recently created memories.\n\n#### `get(id) -> object|null`\nGet a single memory by ID. Increments hit_count.\n\n#### `delete(id) -> boolean`\nDelete memory by ID. Returns true if existed.\n\n#### `compact(groupSize=5, minImportance=0.5) -> Array`\nCompact low-importance memories into summaries.\n\n- Groups oldest unaccessed memories, merges their content\n- Returns compaction report: `[{group, summary, importance, original_ids}]`\n\n#### `status() -> object`\nEngine stats:\n```json\n{\n  \"count\": 78,\n  \"storeSize\": 30536,\n  \"decayHalfLifeHours\": 2,\n  \"totalCompactions\": 3\n}\n```\n\nFile v1.0.5:references/USE_GUIDE.md\n\n# Memory Enhancement Engine — Usage Guide\n\n## Installation\n\n### Method 1: Copy files\n```bash\n# Copy to your project\ncp -r memory-enhancement-engine ./my-project/\n```\n\n### Method 2: ClawHub\n```bash\nclawhub install memory-enhancement-engine\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Initialize\nconst mem = new MemorySystem();\n\n// Store memories\nmem.add({ content: \"User prefers dark theme\", importance: 1.5 });\nmem.add({ content: \"Billing is on the 15th of each month\", importance: 1.2 });\n\n// Search\nconst results = mem.query(\"dark mode preference\");\nconsole.log(results[0].content); // \"User prefers dark theme\"\nconsole.log(results[0].score);   // 0.87 (example)\n\n// Check status\nconst stats = mem.status();\nconsole.log(`Memories stored: ${stats.count}`);\n```\n\n### CLI Tool\n\n```bash\n# View status\nnode memo.cjs status\n\n# Search memories\nnode memo.cjs query \"dark theme\"\n\n# View recent\nnode memo.cjs recent\n\n# Compact old memories\nnode memo.cjs compact 5 0.3\n```\n\n### With Metadata\n\n```javascript\nmem.add({\n  content: \"Database connection string format\",\n  importance: 0.8,\n  metadata: {\n    tags: [\"technical\", \"config\"],\n    source: \"documentation\",\n    category: \"backend\"\n  }\n});\n\n// Search with metadata context\nconst results = mem.query(\"database config\");\n```\n\n## Best Practices\n\n1. **Importance Levels** — Use 1.5+ for critical facts, 0.5-1.0 for normal info, 0.3 for ephemeral\n2. **Compaction** — Run `compact()` periodically to keep memory lean (suggested: every 500 writes)\n3. **Backup** — `MEMORY_STORE.json` is your persistence file; back it up regularly\n4. **Capacity** — Default max 1000, adjust via constructor if needed\n\n## Test\n\n```bash\n# Run test client\nnode scripts/test-client.js\n```\n\nFile v1.0.5:skill-card.md\n\n## Description:\n\nPersistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chen-feng123](https://clawhub.ai/user/chen-feng123)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent builders use this skill to add local persistent memory with semantic recall, importance weighting, recency scoring, and compaction to Node.js-based agent workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Persistent local memory can retain sensitive information in MEMORY_STORE.json.\n\nMitigation: Do not store secrets or credentials, review expected storage behavior before installing, and keep backups of MEMORY_STORE.json.\n\nRisk: Compaction can retain or lose user data in ways users should review first.\n\nMitigation: Avoid running compaction until the behavior is fixed or clearly accepted, and back up MEMORY_STORE.json before compaction.\n\n## Reference(s):\n\n- [Memory Enhancement Engine API Specification](artifact/references/API_SPEC.md)\n- [Memory Enhancement Engine Usage Guide](artifact/references/USE_GUIDE.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with JavaScript examples and shell command snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [No network output; API and CLI use can create or update a local MEMORY_STORE.json file.]\n\n## Skill Version(s):\n\n1.0.5 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.0.5:package.json\n\n{\n  \"name\": \"memory-enhancement-engine\",\n  \"version\": \"4.1.0\",\n  \"description\": \"Persistent memory engine with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\",\n  \"main\": \"memory.js\",\n  \"dependencies\": {},\n  \"keywords\": [\n    \"memory\",\n    \"persistent\",\n    \"semantic-search\",\n    \"hotness\",\n    \"recall\",\n    \"ai-agent\",\n    \"memory-engine\",\n    \"zero-dependency\"\n  ],\n  \"author\": \"ZhouYi\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.4: 10 files, 11957 bytes\n\nFiles: memo.cjs (5737b), memory.js (8117b), package.json (503b), README.md (1254b), references/API_SPEC.md (1696b), references/USE_GUIDE.md (1803b), scripts/init-memory.mjs (122b), scripts/test-client.js (2953b), SKILL.md (3353b), _meta.json (130b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: memory-enhancement-engine\ndescription: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\ntags:\n  - memory\n  - persistent\n  - semantic-search\n  - hotness\n  - recall\n  - ai-agent\n  - nodejs\nfeatures:\n  - Hotness-prioritized recall\n  - Semantic search (bigram + character overlap)\n  - Importance weighting (0-2.0)\n  - Exponential time decay\n  - Auto-compaction and pruning\n  - Zero external dependencies\n  - Pure Node.js\n---\n\n# Memory Enhancement Engine\n\n**记忆增加引擎** — Persistent memory engine with hotness-prioritized semantic recall.\n\nMemories that are recalled more often appear first — not just keyword matches.\n\n## Quick Start\n\n```bash\n# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\"\n```\n\n## Core Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);\n```\n\n## API\n\n| Method | Description |\n|--------|-------------|\n| `add(content, importance, metadata)` | Write a memory |\n| `retrieve(query, k)` | Semantic search (returns sorted by score) |\n| `getRecent(n)` | Get N most recent memories |\n| `remove(predicate)` | Remove memories matching predicate |\n| `compact(groupSize, minImportance)` | Compact old memories into summaries |\n| `getStatus()` | Get engine stats (count, size, etc.) |\n\n## Scoring Formula\n\n```\nscore = similarity × 0.5 + recency × 0.3 + hotness × 0.2\n```\n\nWhere hotness = log(1 + access_count) × exp(-time_delta / 86400)\n\n## Features\n\n- **Hotness-Prioritized Recall** — Frequently accessed memories get boosted scores\n- **Semantic Search** — Bigram overlap + character-level similarity\n- **Importance Weighting** — 0.0 (trivial) to 2.0 (critical)\n- **Time Decay** — Half-life configurable (default 2 hours)\n- **Auto-Prune** — Beyond 1000 entries, least important are pruned\n- **Auto-Compaction** — Merge low-importance groups into summaries\n- **No Server Needed** — Direct Node.js require, stores to local JSON\n\n## Installation\n\n| Method | Command |\n|--------|---------|\n| Copy | Copy `memory.js` + `memo.cjs` to your project |\n| ClawHub | `clawhub install memory-enhancement-engine` |\n\n## File Structure\n\n```\nmemory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├── memo.cjs             # CLI tool\n├── package.json\n├── assets/\n│   └── icon.svg\n├── references/\n│   ├── API_SPEC.md\n│   └── USE_GUIDE.md\n└── scripts/\n    ├── init-memory.mjs  # One-time migration\n    └── test-client.js\n```\n\n## License\n\nMIT\n\nFile v1.0.4:README.md\n\n# 宙一记忆系统 v3 — 初始化说明\n\n## 架构\n\n本系统把封装技能中的记忆引擎能力**内化到工作区**。\n\n```\nmemo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态\n```\n\n## 如何使用\n\n### 写入一条记忆\n\n```bash\nnode scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]\n```\n\n### 检索记忆\n\n```bash\nnode scripts/memo.cjs query \"关键词\" [k=5] [min_imp=0]\n```\n\n### 查看状态\n\n```bash\nnode scripts/memo.cjs status\n```\n\n### 压缩旧记忆\n\n```bash\nnode scripts/memo.cjs compact [group_size=5] [min_imp=0.5]\n```\n\n## 封装技能 vs 宙一记忆系统\n\n封装技能（卖的产品）：\n- 独立部署，接受外部请求\n- x402 支付验证\n- REST API 对外暴露\n- 多租户隔离\n\n宙一记忆系统（这里）：\n- 本地文件持久化，直接读写\n- 无支付、无网络依赖\n- 在启动流程中自动调用（AGENTS.md）\n- 只有我一个用户\n- 但要完整保留：语义检索、权重、时间衰减、压缩能力\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1777894784716\n}\n\nFile v1.0.4:references/API_SPEC.md\n\n# Memory Enhancement Engine — API Specification\n\n## `MemorySystem`\n\nCore class with persistent storage to local JSON file.\n\n### Constructor\n\n```javascript\nnew MemorySystem(config)\n```\n\n**Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `decayHalfLifeHours` | number | 2 | Exponential decay half-life |\n| `simWeight` | number | 0.6 | Semantic similarity weight |\n| `recencyWeight` | number | 0.4 | Recency weight |\n| `storePath` | string | auto | Path to MEMORY_STORE.json |\n\n---\n\n### Methods\n\n#### `add(entry) -> string`\nWrite a new memory.\n\n- **Input:** `{ content: string, importance?: number (0-2.0), metadata?: object }`\n- **Output:** `memory_id` — unique 12-char hex hash\n- **Errors:** Empty content → `Error`\n\n#### `query(text, k=5) -> Array`\nSemantic search.\n\n- **Input:** `text` — search query string; `k` — max results (1-50)\n- **Output:** `[{id, content, importance, score, metadata, created_at, accessed_at, hit_count}, ...]`\n- **Scoring:** similarity × simWeight + recency × recencyWeight + hotness × 0.2\n\n#### `recent(n=10) -> Array`\nGet N most recently created memories.\n\n#### `get(id) -> object|null`\nGet a single memory by ID. Increments hit_count.\n\n#### `delete(id) -> boolean`\nDelete memory by ID. Returns true if existed.\n\n#### `compact(groupSize=5, minImportance=0.5) -> Array`\nCompact low-importance memories into summaries.\n\n- Groups oldest unaccessed memories, merges their content\n- Returns compaction report: `[{group, summary, importance, original_ids}]`\n\n#### `status() -> object`\nEngine stats:\n```json\n{\n  \"count\": 78,\n  \"storeSize\": 30536,\n  \"decayHalfLifeHours\": 2,\n  \"totalCompactions\": 3\n}\n```\n\nFile v1.0.4:references/USE_GUIDE.md\n\n# Memory Enhancement Engine — Usage Guide\n\n## Installation\n\n### Method 1: Copy files\n```bash\n# Copy to your project\ncp -r memory-enhancement-engine ./my-project/\n```\n\n### Method 2: ClawHub\n```bash\nclawhub install memory-enhancement-engine\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Initialize\nconst mem = new MemorySystem();\n\n// Store memories\nmem.add({ content: \"User prefers dark theme\", importance: 1.5 });\nmem.add({ content: \"Billing is on the 15th of each month\", importance: 1.2 });\n\n// Search\nconst results = mem.query(\"dark mode preference\");\nconsole.log(results[0].content); // \"User prefers dark theme\"\nconsole.log(results[0].score);   // 0.87 (example)\n\n// Check status\nconst stats = mem.status();\nconsole.log(`Memories stored: ${stats.count}`);\n```\n\n### CLI Tool\n\n```bash\n# View status\nnode memo.cjs status\n\n# Search memories\nnode memo.cjs query \"dark theme\"\n\n# View recent\nnode memo.cjs recent\n\n# Compact old memories\nnode memo.cjs compact 5 0.3\n```\n\n### With Metadata\n\n```javascript\nmem.add({\n  content: \"Database connection string format\",\n  importance: 0.8,\n  metadata: {\n    tags: [\"technical\", \"config\"],\n    source: \"documentation\",\n    category: \"backend\"\n  }\n});\n\n// Search with metadata context\nconst results = mem.query(\"database config\");\n```\n\n## Best Practices\n\n1. **Importance Levels** — Use 1.5+ for critical facts, 0.5-1.0 for normal info, 0.3 for ephemeral\n2. **Compaction** — Run `compact()` periodically to keep memory lean (suggested: every 500 writes)\n3. **Backup** — `MEMORY_STORE.json` is your persistence file; back it up regularly\n4. **Capacity** — Default max 1000, adjust via constructor if needed\n\n## Test\n\n```bash\n# Run test client\nnode scripts/test-client.js\n```\n\nFile v1.0.4:package.json\n\n{\n  \"name\": \"memory-enhancement-engine\",\n  \"version\": \"4.1.0\",\n  \"description\": \"Persistent memory engine with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\",\n  \"main\": \"memory.js\",\n  \"dependencies\": {},\n  \"keywords\": [\n    \"memory\",\n    \"persistent\",\n    \"semantic-search\",\n    \"hotness\",\n    \"recall\",\n    \"ai-agent\",\n    \"memory-engine\",\n    \"zero-dependency\"\n  ],\n  \"author\": \"ZhouYi\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.3: 10 files, 11526 bytes\n\nFiles: memo.cjs (5737b), memory.js (8117b), package.json (503b), README.md (1254b), references/API_SPEC.md (1696b), references/USE_GUIDE.md (1803b), scripts/init-memory.mjs (122b), scripts/test-client.js (1862b), SKILL.md (3353b), _meta.json (130b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: memory-enhancement-engine\ndescription: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\ntags:\n  - memory\n  - persistent\n  - semantic-search\n  - hotness\n  - recall\n  - ai-agent\n  - nodejs\nfeatures:\n  - Hotness-prioritized recall\n  - Semantic search (bigram + character overlap)\n  - Importance weighting (0-2.0)\n  - Exponential time decay\n  - Auto-compaction and pruning\n  - Zero external dependencies\n  - Pure Node.js\n---\n\n# Memory Enhancement Engine\n\n**记忆增加引擎** — Persistent memory engine with hotness-prioritized semantic recall.\n\nMemories that are recalled more often appear first — not just keyword matches.\n\n## Quick Start\n\n```bash\n# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\"\n```\n\n## Core Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);\n```\n\n## API\n\n| Method | Description |\n|--------|-------------|\n| `add(content, importance, metadata)` | Write a memory |\n| `retrieve(query, k)` | Semantic search (returns sorted by score) |\n| `getRecent(n)` | Get N most recent memories |\n| `remove(predicate)` | Remove memories matching predicate |\n| `compact(groupSize, minImportance)` | Compact old memories into summaries |\n| `getStatus()` | Get engine stats (count, size, etc.) |\n\n## Scoring Formula\n\n```\nscore = similarity × 0.5 + recency × 0.3 + hotness × 0.2\n```\n\nWhere hotness = log(1 + access_count) × exp(-time_delta / 86400)\n\n## Features\n\n- **Hotness-Prioritized Recall** — Frequently accessed memories get boosted scores\n- **Semantic Search** — Bigram overlap + character-level similarity\n- **Importance Weighting** — 0.0 (trivial) to 2.0 (critical)\n- **Time Decay** — Half-life configurable (default 2 hours)\n- **Auto-Prune** — Beyond 1000 entries, least important are pruned\n- **Auto-Compaction** — Merge low-importance groups into summaries\n- **No Server Needed** — Direct Node.js require, stores to local JSON\n\n## Installation\n\n| Method | Command |\n|--------|---------|\n| Copy | Copy `memory.js` + `memo.cjs` to your project |\n| ClawHub | `clawhub install memory-enhancement-engine` |\n\n## File Structure\n\n```\nmemory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├── memo.cjs             # CLI tool\n├── package.json\n├── assets/\n│   └── icon.svg\n├── references/\n│   ├── API_SPEC.md\n│   └── USE_GUIDE.md\n└── scripts/\n    ├── init-memory.mjs  # One-time migration\n    └── test-client.js\n```\n\n## License\n\nMIT\n\nFile v1.0.3:README.md\n\n# 宙一记忆系统 v3 — 初始化说明\n\n## 架构\n\n本系统把封装技能中的记忆引擎能力**内化到工作区**。\n\n```\nmemo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态\n```\n\n## 如何使用\n\n### 写入一条记忆\n\n```bash\nnode scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]\n```\n\n### 检索记忆\n\n```bash\nnode scripts/memo.cjs query \"关键词\" [k=5] [min_imp=0]\n```\n\n### 查看状态\n\n```bash\nnode scripts/memo.cjs status\n```\n\n### 压缩旧记忆\n\n```bash\nnode scripts/memo.cjs compact [group_size=5] [min_imp=0.5]\n```\n\n## 封装技能 vs 宙一记忆系统\n\n封装技能（卖的产品）：\n- 独立部署，接受外部请求\n- x402 支付验证\n- REST API 对外暴露\n- 多租户隔离\n\n宙一记忆系统（这里）：\n- 本地文件持久化，直接读写\n- 无支付、无网络依赖\n- 在启动流程中自动调用（AGENTS.md）\n- 只有我一个用户\n- 但要完整保留：语义检索、权重、时间衰减、压缩能力\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1777894470513\n}\n\nFile v1.0.3:references/API_SPEC.md\n\n# Memory Enhancement Engine — API Specification\n\n## `MemorySystem`\n\nCore class with persistent storage to local JSON file.\n\n### Constructor\n\n```javascript\nnew MemorySystem(config)\n```\n\n**Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `decayHalfLifeHours` | number | 2 | Exponential decay half-life |\n| `simWeight` | number | 0.6 | Semantic similarity weight |\n| `recencyWeight` | number | 0.4 | Recency weight |\n| `storePath` | string | auto | Path to MEMORY_STORE.json |\n\n---\n\n### Methods\n\n#### `add(entry) -> string`\nWrite a new memory.\n\n- **Input:** `{ content: string, importance?: number (0-2.0), metadata?: object }`\n- **Output:** `memory_id` — unique 12-char hex hash\n- **Errors:** Empty content → `Error`\n\n#### `query(text, k=5) -> Array`\nSemantic search.\n\n- **Input:** `text` — search query string; `k` — max results (1-50)\n- **Output:** `[{id, content, importance, score, metadata, created_at, accessed_at, hit_count}, ...]`\n- **Scoring:** similarity × simWeight + recency × recencyWeight + hotness × 0.2\n\n#### `recent(n=10) -> Array`\nGet N most recently created memories.\n\n#### `get(id) -> object|null`\nGet a single memory by ID. Increments hit_count.\n\n#### `delete(id) -> boolean`\nDelete memory by ID. Returns true if existed.\n\n#### `compact(groupSize=5, minImportance=0.5) -> Array`\nCompact low-importance memories into summaries.\n\n- Groups oldest unaccessed memories, merges their content\n- Returns compaction report: `[{group, summary, importance, original_ids}]`\n\n#### `status() -> object`\nEngine stats:\n```json\n{\n  \"count\": 78,\n  \"storeSize\": 30536,\n  \"decayHalfLifeHours\": 2,\n  \"totalCompactions\": 3\n}\n```\n\nFile v1.0.3:references/USE_GUIDE.md\n\n# Memory Enhancement Engine — Usage Guide\n\n## Installation\n\n### Method 1: Copy files\n```bash\n# Copy to your project\ncp -r memory-enhancement-engine ./my-project/\n```\n\n### Method 2: ClawHub\n```bash\nclawhub install memory-enhancement-engine\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Initialize\nconst mem = new MemorySystem();\n\n// Store memories\nmem.add({ content: \"User prefers dark theme\", importance: 1.5 });\nmem.add({ content: \"Billing is on the 15th of each month\", importance: 1.2 });\n\n// Search\nconst results = mem.query(\"dark mode preference\");\nconsole.log(results[0].content); // \"User prefers dark theme\"\nconsole.log(results[0].score);   // 0.87 (example)\n\n// Check status\nconst stats = mem.status();\nconsole.log(`Memories stored: ${stats.count}`);\n```\n\n### CLI Tool\n\n```bash\n# View status\nnode memo.cjs status\n\n# Search memories\nnode memo.cjs query \"dark theme\"\n\n# View recent\nnode memo.cjs recent\n\n# Compact old memories\nnode memo.cjs compact 5 0.3\n```\n\n### With Metadata\n\n```javascript\nmem.add({\n  content: \"Database connection string format\",\n  importance: 0.8,\n  metadata: {\n    tags: [\"technical\", \"config\"],\n    source: \"documentation\",\n    category: \"backend\"\n  }\n});\n\n// Search with metadata context\nconst results = mem.query(\"database config\");\n```\n\n## Best Practices\n\n1. **Importance Levels** — Use 1.5+ for critical facts, 0.5-1.0 for normal info, 0.3 for ephemeral\n2. **Compaction** — Run `compact()` periodically to keep memory lean (suggested: every 500 writes)\n3. **Backup** — `MEMORY_STORE.json` is your persistence file; back it up regularly\n4. **Capacity** — Default max 1000, adjust via constructor if needed\n\n## Test\n\n```bash\n# Run test client\nnode scripts/test-client.js\n```\n\nFile v1.0.3:package.json\n\n{\n  \"name\": \"memory-enhancement-engine\",\n  \"version\": \"4.1.0\",\n  \"description\": \"Persistent memory engine with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\",\n  \"main\": \"memory.js\",\n  \"dependencies\": {},\n  \"keywords\": [\n    \"memory\",\n    \"persistent\",\n    \"semantic-search\",\n    \"hotness\",\n    \"recall\",\n    \"ai-agent\",\n    \"memory-engine\",\n    \"zero-dependency\"\n  ],\n  \"author\": \"ZhouYi\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.2: 10 files, 11532 bytes\n\nFiles: memo.cjs (5747b), memory.js (8117b), package.json (503b), README.md (1254b), references/API_SPEC.md (1696b), references/USE_GUIDE.md (1803b), scripts/init-memory.mjs (122b), scripts/test-client.js (1862b), SKILL.md (3353b), _meta.json (130b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: memory-enhancement-engine\ndescription: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\ntags:\n  - memory\n  - persistent\n  - semantic-search\n  - hotness\n  - recall\n  - ai-agent\n  - nodejs\nfeatures:\n  - Hotness-prioritized recall\n  - Semantic search (bigram + character overlap)\n  - Importance weighting (0-2.0)\n  - Exponential time decay\n  - Auto-compaction and pruning\n  - Zero external dependencies\n  - Pure Node.js\n---\n\n# Memory Enhancement Engine\n\n**记忆增加引擎** — Persistent memory engine with hotness-prioritized semantic recall.\n\nMemories that are recalled more often appear first — not just keyword matches.\n\n## Quick Start\n\n```bash\n# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\"\n```\n\n## Core Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);\n```\n\n## API\n\n| Method | Description |\n|--------|-------------|\n| `add(content, importance, metadata)` | Write a memory |\n| `retrieve(query, k)` | Semantic search (returns sorted by score) |\n| `getRecent(n)` | Get N most recent memories |\n| `remove(predicate)` | Remove memories matching predicate |\n| `compact(groupSize, minImportance)` | Compact old memories into summaries |\n| `getStatus()` | Get engine stats (count, size, etc.) |\n\n## Scoring Formula\n\n```\nscore = similarity × 0.5 + recency × 0.3 + hotness × 0.2\n```\n\nWhere hotness = log(1 + access_count) × exp(-time_delta / 86400)\n\n## Features\n\n- **Hotness-Prioritized Recall** — Frequently accessed memories get boosted scores\n- **Semantic Search** — Bigram overlap + character-level similarity\n- **Importance Weighting** — 0.0 (trivial) to 2.0 (critical)\n- **Time Decay** — Half-life configurable (default 2 hours)\n- **Auto-Prune** — Beyond 1000 entries, least important are pruned\n- **Auto-Compaction** — Merge low-importance groups into summaries\n- **No Server Needed** — Direct Node.js require, stores to local JSON\n\n## Installation\n\n| Method | Command |\n|--------|---------|\n| Copy | Copy `memory.js` + `memo.cjs` to your project |\n| ClawHub | `clawhub install memory-enhancement-engine` |\n\n## File Structure\n\n```\nmemory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├── memo.cjs             # CLI tool\n├── package.json\n├── assets/\n│   └── icon.svg\n├── references/\n│   ├── API_SPEC.md\n│   └── USE_GUIDE.md\n└── scripts/\n    ├── init-memory.mjs  # One-time migration\n    └── test-client.js\n```\n\n## License\n\nMIT\n\nFile v1.0.2:README.md\n\n# 宙一记忆系统 v3 — 初始化说明\n\n## 架构\n\n本系统把封装技能中的记忆引擎能力**内化到工作区**。\n\n```\nmemo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态\n```\n\n## 如何使用\n\n### 写入一条记忆\n\n```bash\nnode scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]\n```\n\n### 检索记忆\n\n```bash\nnode scripts/memo.cjs query \"关键词\" [k=5] [min_imp=0]\n```\n\n### 查看状态\n\n```bash\nnode scripts/memo.cjs status\n```\n\n### 压缩旧记忆\n\n```bash\nnode scripts/memo.cjs compact [group_size=5] [min_imp=0.5]\n```\n\n## 封装技能 vs 宙一记忆系统\n\n封装技能（卖的产品）：\n- 独立部署，接受外部请求\n- x402 支付验证\n- REST API 对外暴露\n- 多租户隔离\n\n宙一记忆系统（这里）：\n- 本地文件持久化，直接读写\n- 无支付、无网络依赖\n- 在启动流程中自动调用（AGENTS.md）\n- 只有我一个用户\n- 但要完整保留：语义检索、权重、时间衰减、压缩能力\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1777893932173\n}\n\nFile v1.0.2:references/API_SPEC.md\n\n# Memory Enhancement Engine — API Specification\n\n## `MemorySystem`\n\nCore class with persistent storage to local JSON file.\n\n### Constructor\n\n```javascript\nnew MemorySystem(config)\n```\n\n**Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `decayHalfLifeHours` | number | 2 | Exponential decay half-life |\n| `simWeight` | number | 0.6 | Semantic similarity weight |\n| `recencyWeight` | number | 0.4 | Recency weight |\n| `storePath` | string | auto | Path to MEMORY_STORE.json |\n\n---\n\n### Methods\n\n#### `add(entry) -> string`\nWrite a new memory.\n\n- **Input:** `{ content: string, importance?: number (0-2.0), metadata?: object }`\n- **Output:** `memory_id` — unique 12-char hex hash\n- **Errors:** Empty content → `Error`\n\n#### `query(text, k=5) -> Array`\nSemantic search.\n\n- **Input:** `text` — search query string; `k` — max results (1-50)\n- **Output:** `[{id, content, importance, score, metadata, created_at, accessed_at, hit_count}, ...]`\n- **Scoring:** similarity × simWeight + recency × recencyWeight + hotness × 0.2\n\n#### `recent(n=10) -> Array`\nGet N most recently created memories.\n\n#### `get(id) -> object|null`\nGet a single memory by ID. Increments hit_count.\n\n#### `delete(id) -> boolean`\nDelete memory by ID. Returns true if existed.\n\n#### `compact(groupSize=5, minImportance=0.5) -> Array`\nCompact low-importance memories into summaries.\n\n- Groups oldest unaccessed memories, merges their content\n- Returns compaction report: `[{group, summary, importance, original_ids}]`\n\n#### `status() -> object`\nEngine stats:\n```json\n{\n  \"count\": 78,\n  \"storeSize\": 30536,\n  \"decayHalfLifeHours\": 2,\n  \"totalCompactions\": 3\n}\n```\n\nFile v1.0.2:references/USE_GUIDE.md\n\n# Memory Enhancement Engine — Usage Guide\n\n## Installation\n\n### Method 1: Copy files\n```bash\n# Copy to your project\ncp -r memory-enhancement-engine ./my-project/\n```\n\n### Method 2: ClawHub\n```bash\nclawhub install memory-enhancement-engine\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Initialize\nconst mem = new MemorySystem();\n\n// Store memories\nmem.add({ content: \"User prefers dark theme\", importance: 1.5 });\nmem.add({ content: \"Billing is on the 15th of each month\", importance: 1.2 });\n\n// Search\nconst results = mem.query(\"dark mode preference\");\nconsole.log(results[0].content); // \"User prefers dark theme\"\nconsole.log(results[0].score);   // 0.87 (example)\n\n// Check status\nconst stats = mem.status();\nconsole.log(`Memories stored: ${stats.count}`);\n```\n\n### CLI Tool\n\n```bash\n# View status\nnode memo.cjs status\n\n# Search memories\nnode memo.cjs query \"dark theme\"\n\n# View recent\nnode memo.cjs recent\n\n# Compact old memories\nnode memo.cjs compact 5 0.3\n```\n\n### With Metadata\n\n```javascript\nmem.add({\n  content: \"Database connection string format\",\n  importance: 0.8,\n  metadata: {\n    tags: [\"technical\", \"config\"],\n    source: \"documentation\",\n    category: \"backend\"\n  }\n});\n\n// Search with metadata context\nconst results = mem.query(\"database config\");\n```\n\n## Best Practices\n\n1. **Importance Levels** — Use 1.5+ for critical facts, 0.5-1.0 for normal info, 0.3 for ephemeral\n2. **Compaction** — Run `compact()` periodically to keep memory lean (suggested: every 500 writes)\n3. **Backup** — `MEMORY_STORE.json` is your persistence file; back it up regularly\n4. **Capacity** — Default max 1000, adjust via constructor if needed\n\n## Test\n\n```bash\n# Run test client\nnode scripts/test-client.js\n```\n\nFile v1.0.2:package.json\n\n{\n  \"name\": \"memory-enhancement-engine\",\n  \"version\": \"4.1.0\",\n  \"description\": \"Persistent memory engine with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\",\n  \"main\": \"memory.js\",\n  \"dependencies\": {},\n  \"keywords\": [\n    \"memory\",\n    \"persistent\",\n    \"semantic-search\",\n    \"hotness\",\n    \"recall\",\n    \"ai-agent\",\n    \"memory-engine\",\n    \"zero-dependency\"\n  ],\n  \"author\": \"ZhouYi\",\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.1: 12 files, 24634 bytes\n\nFiles: assets/icon.svg (572b), index.js (11871b), memory.js (22783b), package.json (349b), references/API_SPEC.md (12538b), references/USE_GUIDE.md (4143b), scripts/setup.sh (932b), scripts/start.sh (461b), scripts/test-client.js (3118b), scripts/test-client.py (2843b), SKILL.md (5800b), _meta.json (130b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: \"QuickRecall - Zero-Dependency Memory Engine\"\ndescription: \"常用记忆优先出现。零依赖的 AI 记忆引擎，纯 Node.js，无数据库无插件。\"\ntags:\n  - memory\n  - recall\n  - hotness\n  - semantic-search\n  - zero-dependency\n  - express\n  - nodejs\nfeatures:\n  - 热点优先召回（Hotness driven）\n  - 语义检索（TF-IDF）\n  - 零外部依赖\n  - 标签系统（AND 过滤）\n  - 中文同义词扩展\n  - 10 个 REST API 端点\n---\n\n# QuickRecall — 快忆 | Zero-Dependency Memory Engine\n\n```\n常用记忆优先出现，而非关键词匹配。\nWhat users recall most appears first — not just keyword matches.\n```\n\n---\n\n# 中文\n\n## 为什么选择 QuickRecall？\n\n**更快找到用户真正需要的记忆。**\n\n大多数 AI 记忆系统只做语义匹配：查\"天气怎么样\" → 返回所有关于天气的结果。\n\nQuickRecall 不只做语义匹配。它还会追踪**哪些记忆被频繁访问**，自动将热点记忆排在前面。用户常用的信息，下次问的时候第一个出现。\n\n```\n普通记忆系统：准确匹配，但冷的冷的，热的热的，混在一起。\nQuickRecall：热门优先，冷门在后，永远给你最可能需要的。\n```\n\n## 核心特点\n\n| 特点 | 说明 |\n|------|------|\n| 热点优先召回 | 高频访问的记忆提升权重，常用信息优先出现 |\n| 混合评分引擎 | 语义匹配 × 50% + 时间衰减 × 30% + 热度 × 20% |\n| 零外部依赖 | 安装即用，不需要配置任何数据库、向量引擎、云服务 |\n| 中文原生支持 | TF-IDF 分词、70+ 组同义词扩展、标签系统 |\n| 安全无插件 | 纯 Node.js，不需要浏览器插件或第三方扩展 |\n| 自动维护 | 超过 1000 条自动淘汰，内置压缩机制 |\n\n## 快速开始\n\n```bash\nnpm install && node index.js\n\n# 写一条记忆\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\":\"用户偏好深色主题\",\"importance\":1.5,\"metadata\":{\"tags\":[\"preference\"]}}'\n\n# 检索\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"用户喜欢什么\",\"k\":3}'\n```\n\n## 十步 API\n\n| 方法 | 端点 | 功能 |\n|------|------|------|\n| GET | `/api/v1/health` | 健康检查 |\n| GET | `/api/v1/status` | 服务状态 |\n| POST | `/api/v1/memories` | 写入记忆 |\n| GET | `/api/v1/memories` | 列出所有记忆 |\n| GET | `/api/v1/memories/:id` | 按 ID 获取 |\n| DELETE | `/api/v1/memories/:id` | 删除记忆 |\n| POST | `/api/v1/memories/query` | 语义检索 |\n| GET | `/api/v1/memories/tags` | 列出所有标签 |\n| GET | `/api/v1/memories/by-tag/:tag` | 按标签获取 |\n| GET | `/api/v1/license` | 许可证信息 |\n\n## 许可证\n\nMIT\n\n---\n\n# English\n\n## Why QuickRecall?\n\n**Find the memory your user actually needs — faster.**\n\nMost memory systems only do semantic matching. Search for \"weather\" and you get all weather-related results in a flat list.\n\nQuickRecall goes further. It tracks **access frequency** with a Hotness mechanism, automatically prioritizing frequently recalled memories. The next time a user asks about something, the most relevant result is also the one that's been most useful.\n\n```\nOther systems: matches keywords, but no sense of what matters.\nQuickRecall: prioritizes hot spots, delivers what's most likely needed.\n```\n\n## Core Features\n\n| Feature | Description |\n|---------|-------------|\n| Hotness-Prioritized Recall | Frequently accessed memories get boosted scores |\n| Hybrid Scoring Engine | 50% semantic + 30% recency + 20% hotness |\n| Zero External Dependencies | No databases, vector stores, or cloud services needed |\n| Chinese & English Support | TF-IDF with 70+ Chinese synonym groups |\n| No Plugins Required | Pure Node.js, no browser extensions needed |\n| Auto Maintenance | Prune beyond 1000 memories, built-in compaction |\n\n## Quick Start\n\n```bash\nnpm install && node index.js\n\n# Write a memory\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\":\"User prefers dark theme\",\"importance\":1.5,\"metadata\":{\"tags\":[\"preference\"]}}'\n\n# Query\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"user preferences\",\"k\":3}'\n```\n\n## API Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/api/v1/health` | Health check |\n| GET | `/api/v1/status` | Server status |\n| POST | `/api/v1/memories` | Write memory |\n| GET | `/api/v1/memories` | List all memories |\n| GET | `/api/v1/memories/:id` | Get by ID |\n| DELETE | `/api/v1/memories/:id` | Delete memory |\n| POST | `/api/v1/memories/query` | Semantic query |\n| GET | `/api/v1/memories/tags` | List all tags |\n| GET | `/api/v1/memories/by-tag/:tag` | Get by tag |\n| GET | `/api/v1/license` | License info |\n\n## Directory Structure\n\n```\nQuickRecall/\n├── SKILL.md                    # This file\n├── scripts/\n│   ├── setup.sh                # Install & start\n│   ├── start.sh                # Restart service\n│   ├── test-client.py          # Python test client\n│   └── test-client.js          # Node.js test client\n├── references/\n│   ├── API_SPEC.md             # API specification\n│   └── USE_GUIDE.md            # Usage guide & examples\n├── assets/\n│   ├── icon.svg                # Skill icon\n│   └── icon-128.png            # Skill icon 128px\n└── server/\n    ├── package.json            # Dependencies (express only)\n    ├── .env.example            # Environment variables\n    └── src/\n        ├── index.js            # Express API server\n        └── memory.js           # v1.0 memory engine core\n```\n\n## License\n\nMIT\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1777721957305\n}\n\nFile v1.0.1:references/API_SPEC.md\n\n# 持续记忆服务 v4.1 — API 规范\r\n\r\n---\r\n\r\n## 通用约定\r\n\r\n- 基础路径：`https://yuanzhouyi.com/api/v1`\r\n- 请求体格式：`application/json`\r\n- 响应体格式：`application/json`\r\n\r\n## 定价（人民币 · 一次性购买）\r\n\r\n| 版本 | 价格 | 说明 |\r\n|------|------|------|\r\n| 技能包（本地安装） | 9.99 元 | 永久使用，含后续 4.x 版本更新 |\r\n| API 远程调用 | 可选（百炼平台） | 按次计费 |\r\n\r\n---\r\n\r\n## API 列表\r\n\r\n| 方法 | 路径 | 功能 | 状态 |\r\n|------|------|------|------|\r\n| GET | /api/v1/health | 健康检查 | 免费 |\r\n| GET | /api/v1/status | 系统状态 | 免费 |\r\n| POST | /api/v1/memories | 写入记忆 | 免费 |\r\n| POST | /api/v1/memories/query | 检索记忆 | 免费 |\r\n| POST | /api/v1/memories/compact | 压缩记忆 | 免费 |\r\n| GET | /api/v1/memories/:id | 获取单条记忆 | 免费 |\r\n| DELETE | /api/v1/memories/:id | 删除单条记忆 | 免费 |\r\n| GET | /api/v1/memories/tags | 列出所有标签 | 免费 |\r\n| GET | /api/v1/memories/by-tag/:tag | 按标签检索 | 免费 |\r\n| POST | /api/v1/session/restore | 会话恢复 | 免费 |\r\n\r\n### 通用错误响应\r\n\r\n400 Bad Request\r\n```json\r\n{ \"code\": \"INVALID_PARAM\", \"message\": \"…\", \"details\": { \"field\": \"…\", \"reason\": \"…\" } }\r\n```\r\n\r\n404 Not Found\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n500 Internal Server Error\r\n```json\r\n{ \"code\": \"INTERNAL_ERROR\", \"message\": \"Internal server error\" }\r\n```\r\n\r\n---\r\n\r\n## API 1：写入记忆\r\n\r\n**功能名称：** 写入记忆\r\n\r\n**功能描述：** 系统接收一段文本内容及可选的重要性权重和标签元数据，保存到记忆存储中。如果记忆总数超过上限（1000 条），自动淘汰最不重要的旧记忆。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| content | string | 是 | 长度 1-5000 字符，不能为空或纯空白 | 要记忆的文本内容 |\r\n| importance | number | 否 | 范围 0.0 - 2.0，默认 1.0 | 重要性权重，越高越不易被淘汰 |\r\n| metadata | object | 否 | JSON 序列化后不超过 1KB | 附加元数据（source, category, tags 等） |\r\n\r\n注意：`metadata` 中如果包含 `tags` 字段，应传入字符串数组，例如 `tags: [\"preference\", \"theme\"]`。标签用于后续筛选检索。\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n  \"importance\": 1.5,\r\n  \"metadata\": {\r\n    \"source\": \"chat\",\r\n    \"category\": \"preference\",\r\n    \"tags\": [\"preference\", \"theme\"]\r\n  }\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (201 Created)：\r\n```json\r\n{\r\n  \"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\r\n  \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n  \"importance\": 1.5,\r\n  \"timestamp\": 1746064800000,\r\n  \"metadata\": { \"source\": \"chat\", \"category\": \"preference\", \"tags\": [\"preference\", \"theme\"] },\r\n  \"memory_count\": 42\r\n}\r\n```\r\n\r\n错误响应：\r\n\r\n400 Bad Request — content 为空或超出长度\r\n```json\r\n{\r\n  \"code\": \"INVALID_CONTENT\",\r\n  \"message\": \"Content must be between 1 and 5000 characters\",\r\n  \"details\": { \"field\": \"content\", \"reason\": \"empty\" }\r\n}\r\n```\r\n\r\n400 Bad Request — importance 超出范围\r\n```json\r\n{\r\n  \"code\": \"INVALID_PARAM\",\r\n  \"message\": \"Importance must be a number between 0.0 and 2.0\",\r\n  \"details\": { \"field\": \"importance\", \"reason\": \"out of range\" }\r\n}\r\n```\r\n\r\n400 Bad Request — metadata 过大\r\n```json\r\n{\r\n  \"code\": \"INVALID_PARAM\",\r\n  \"message\": \"Metadata must not exceed 1KB\",\r\n  \"details\": { \"field\": \"metadata\", \"reason\": \"too large\" }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 2：检索记忆\r\n\r\n**功能名称：** 检索记忆\r\n\r\n**功能描述：** 接收一段查询文本，在已保存的记忆中执行 TF-IDF 语义相似度检索，结合同义词扩展（70+ 中文同义词组）、时间衰减分数、热度分数和重要性权重，返回最相关的前 K 条记忆及评分详情。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories/query`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| query | string | 是 | 长度 1-2000 字符，不能为空 | 用于检索的查询文本 |\r\n| k | number | 否 | 整数，范围 1-50，默认 5 | 返回的最相关记忆数 |\r\n| min_importance | number | 否 | 范围 0.0 - 2.0，默认 0 | 最低重要性阈值，低于此值的记忆不返回 |\r\n| max_age_seconds | number | 否 | 必须大于 0，默认不过滤 | 只检索距今 N 秒内的记忆（时间过滤器） |\r\n| tags_filter | string[] | 否 | 非空字符串数组 | 标签精确 AND 过滤，记忆必须同时包含所有指定标签 |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"query\": \"用户对界面有什么偏好\",\r\n  \"k\": 5,\r\n  \"min_importance\": 0.5,\r\n  \"tags_filter\": [\"preference\"]\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"count\": 2,\r\n  \"results\": [\r\n    {\r\n      \"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\r\n      \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n      \"importance\": 1.5,\r\n      \"timestamp\": 1746064800000,\r\n      \"metadata\": { \"source\": \"chat\", \"category\": \"preference\", \"tags\": [\"preference\", \"theme\"] },\r\n      \"score\": 0.85,\r\n      \"hit_count\": 3\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n| 响应字段 | 类型 | 描述 |\r\n|---------|------|------|\r\n| count | number | 返回的记忆数 |\r\n| results[].id | string | UUID |\r\n| results[].content | string | 记忆内容 |\r\n| results[].importance | number | 重要性权重 |\r\n| results[].timestamp | number | Unix 毫秒时间戳 |\r\n| results[].metadata | object | 附加元数据（含 tags 标签） |\r\n| results[].score | number | 综合评分（语义×0.5 + 衰减×0.3 + 热度×0.2） |\r\n| results[].hit_count | number | 该记忆被访问的次数 |\r\n\r\n错误响应：\r\n\r\n400 Bad Request — query 为空\r\n```json\r\n{\r\n  \"code\": \"INVALID_QUERY\",\r\n  \"message\": \"Query must be between 1 and 2000 characters\",\r\n  \"details\": { \"field\": \"query\", \"reason\": \"empty\" }\r\n}\r\n```\r\n\r\n400 Bad Request — query 过长\r\n```json\r\n{\r\n  \"code\": \"INVALID_QUERY\",\r\n  \"message\": \"Query must be between 1 and 2000 characters\",\r\n  \"details\": { \"field\": \"query\", \"reason\": \"too long\", \"max\": 2000 }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 3：压缩记忆\r\n\r\n**功能名称：** 压缩记忆\r\n\r\n**功能描述：** 将低重要性的旧记忆按时间顺序分组，每组合并为一条摘要（内置拼接功能，无需外部回调）。重要记忆（≥ min_importance）会被保护，不参与压缩。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories/compact`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| group_size | number | 否 | 整数，范围 2-20，默认 5 | 每组最多合并多少条记忆 |\r\n| min_importance | number | 否 | 范围 0.0 - 2.0，默认 0.5 | 重要性 ≥ 此值的记忆不会被压缩（保护重要信息） |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"group_size\": 5,\r\n  \"min_importance\": 0.5\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"removed\": 12,\r\n  \"remaining\": 88\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 4：获取单条记忆\r\n\r\n**功能名称：** 获取单条记忆\r\n\r\n**描述：** 根据 UUID 返回指定记忆的完整信息。\r\n\r\n**输入：** `GET /api/v1/memories/:id`\r\n\r\n**输出：**\r\n\r\n200 OK:\r\n```json\r\n{\r\n  \"id\": \"a1b2c3d4-...\",\r\n  \"content\": \"用户偏好深色主题\",\r\n  \"importance\": 1.5,\r\n  \"timestamp\": 1746064800000,\r\n  \"metadata\": {},\r\n  \"hit_count\": 3,\r\n  \"score\": 0.0\r\n}\r\n```\r\n\r\n404 Not Found:\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n---\r\n\r\n## API 5：删除单条记忆\r\n\r\n**功能名称：** 删除单条记忆\r\n\r\n**描述：** 根据 UUID 删除指定记忆。\r\n\r\n**输入：** `DELETE /api/v1/memories/:id`\r\n\r\n**输出：**\r\n\r\n200 OK:\r\n```json\r\n{ \"removed\": 1, \"remaining\": 41 }\r\n```\r\n\r\n404 Not Found:\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n---\r\n\r\n## API 6：列出所有标签\r\n\r\n**功能名称：** 列出所有标签\r\n\r\n**描述：** 返回当前记忆库中所有已使用的标签，按字母/字典序排序。\r\n\r\n**输入：** `GET /api/v1/memories/tags`\r\n\r\n**输出：** 200 OK\r\n```json\r\n{ \"tags\": [\"debug\", \"error\", \"preference\", \"theme\"], \"count\": 4 }\r\n```\r\n\r\n---\r\n\r\n## API 7：按标签检索\r\n\r\n**功能名称：** 按标签检索\r\n\r\n**描述：** 返回所有包含指定标签的记忆，按重要性降序排列。\r\n\r\n**输入：** `GET /api/v1/memories/by-tag/:tag`\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"count\": 2,\r\n  \"results\": [\r\n    {\r\n      \"id\": \"a1b2c3d4-...\",\r\n      \"content\": \"用户偏好深色主题\",\r\n      \"importance\": 1.5,\r\n      \"timestamp\": 1746064800000,\r\n      \"metadata\": { \"tags\": [\"preference\", \"theme\"] }\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 8：会话恢复\r\n\r\n**功能名称：** 会话恢复\r\n\r\n**功能描述：** 给定当前对话上下文，从全局记忆中检索相关条目，并从指定工作空间的标签中获取近期记忆，返回完整的上下文恢复数据。用于 Agent 启动新会话时恢复到之前状态。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/session/restore`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| context | string | 是 | 长度 1-2000 字符，不能为空 | 当前对话上下文，用于语义检索 |\r\n| workspace_id | string | 否 | 长度 1-64 字符 | 工作空间 ID，用于在 metadata.tags 中匹配 |\r\n| k | number | 否 | 整数，范围 1-50，默认 10 | 全局检索返回的最大记忆数 |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"context\": \"正在讨论用户界面偏好和主题设置\",\r\n  \"workspace_id\": \"agent-alpha\",\r\n  \"k\": 10\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"workspace_id\": \"agent-alpha\",\r\n  \"global\": {\r\n    \"count\": 3,\r\n    \"memories\": [\r\n      {\r\n        \"id\": \"a1b2c3d4-...\",\r\n        \"content\": \"用户偏好深色主题\",\r\n        \"importance\": 1.5,\r\n        \"timestamp\": 1746064800000,\r\n        \"score\": 0.85\r\n      }\r\n    ]\r\n  },\r\n  \"workspace\": {\r\n    \"count\": 5,\r\n    \"memories\": [\r\n      {\r\n        \"id\": \"b2c3d4e5-...\",\r\n        \"content\": \"用户今天的提问与界面设计相关\",\r\n        \"importance\": 1.2,\r\n        \"timestamp\": 1746064800000\r\n      }\r\n    ]\r\n  },\r\n  \"status\": {\r\n    \"global_memory_count\": 42,\r\n    \"workspace_count\": 3\r\n  }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 9：健康检查\r\n\r\n**功能名称：** GET /api/v1/health — 健康检查\r\n\r\n**功能描述：** 返回服务是否正常运行。无需认证，免费访问。\r\n\r\n**输入：** 无\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"status\": \"ok\",\r\n  \"service\": \"memory-continuity\",\r\n  \"version\": \"4.1.0\"\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 10：查询系统状态\r\n\r\n**功能名称：** GET /api/v1/status — 查询系统状态\r\n\r\n**功能描述：** 返回系统当前状态，包括记忆数量、运行配置。\r\n\r\n**输入：** 无\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"memories\": 42,\r\n  \"config\": {\r\n    \"decay_rate\": 3600,\r\n    \"sim_weight\": 0.5,\r\n    \"recency_weight\": 0.3,\r\n    \"hotness_weight\": 0.2,\r\n    \"hotness_decay\": 86400,\r\n    \"max_memories\": 1000,\r\n    \"default_importance\": 1.0,\r\n    \"cache_ttl\": 300,\r\n    \"synonym_boost\": 0.15\r\n  }\r\n}\r\n```\r\n\r\n---\r\n\r\n## 错误码汇总\r\n\r\n| HTTP 状态码 | code | 触发条件 |\r\n|------------|------|---------|\r\n| 400 | INVALID_CONTENT | content 为空或超出 5000 字符 |\r\n| 400 | INVALID_QUERY | query 为空或超出 2000 字符 |\r\n| 400 | INVALID_PARAM | 参数校验失败（importance 范围、metadata 大小、context 空等） |\r\n| 404 | NOT_FOUND | 指定 ID 的记忆不存在 |\r\n| 500 | INTERNAL_ERROR | 服务器内部错误 |\r\n\r\n---\r\n\r\n## 变更记录\r\n\r\n| 日期 | 版本 | 变更说明 |\r\n|------|------|---------|\r\n| 2026-05-02 | 4.1.0 | **重大更新**: 重写引擎至 v4.1 |\r\n| | | - TF-IDF 语义检索（替代 Bigram） |\r\n| | | - 70+ 中文同义词组扩展 |\r\n| | | - Hotness 热度机制/标签系统/检索缓存 |\r\n| | | - 新增 API：GET /memories/:id, DELETE /memories/:id, GET /memories/tags, GET /memories/by-tag/:tag |\r\n| | | - 检索响应新增 score / hit_count 字段 |\r\n| | | - compact 内置摘要器（无需外部回调） |\r\n| | | - 新 API_SPEC.md 全面更新 |\r\n| 2026-04-26 | 1.0.0 | 初版创建 |\n\nFile v1.0.1:references/USE_GUIDE.md\n\n# 持续记忆服务 v4.1 — 使用指南\n\n---\n\n## 快速开始\n\n### 1. 启动服务\n\n```bash\ncd server\nnpm install\nnode src/index.js\n```\n\n### 2. 写入一条记忆（含标签）\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"content\": \"元说：深色主题是首选\",\n    \"importance\": 1.5,\n    \"metadata\": {\n      \"source\": \"chat\",\n      \"tags\": [\"preference\", \"theme\"]\n    }\n  }'\n```\n\n### 3. 语义检索记忆\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"用户喜欢什么主题\",\n    \"k\": 3\n  }'\n```\n\n### 4. 按标签过滤检索\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"用户偏好\",\n    \"k\": 5,\n    \"tags_filter\": [\"theme\"]\n  }'\n```\n\n### 5. 健康检查\n\n```\ncurl http://localhost:3000/api/v1/health\n```\n\n### 6. 获取系统状态\n\n```\ncurl http://localhost:3000/api/v1/status\n```\n\n### 7. 列出所有标签\n\n```\ncurl http://localhost:3000/api/v1/memories/tags\n```\n\n### 8. 按标签获取记忆\n\n```\ncurl http://localhost:3000/api/v1/memories/by-tag/preference\n```\n\n---\n\n## Python 示例\n\n```python\nimport requests\n\nBASE_URL = \"http://localhost:3000/api/v1\"\n\n# 写入记忆（含标签）\nresp = requests.post(f\"{BASE_URL}/memories\", json={\n    \"content\": \"Python 客户端示例写入的记忆\",\n    \"importance\": 1.0,\n    \"metadata\": {\"source\": \"test\", \"tags\": [\"python\", \"example\"]}\n})\nprint(resp.status_code, resp.json())\n\n# 语义检索\nresp = requests.post(f\"{BASE_URL}/memories/query\", json={\n    \"query\": \"示例\",\n    \"k\": 5\n})\nprint(resp.status_code, resp.json()[\"count\"], \"results\")\n\n# 带标签过滤的检索\nresp = requests.post(f\"{BASE_URL}/memories/query\", json={\n    \"query\": \"Python\",\n    \"k\": 5,\n    \"tags_filter\": [\"python\"]\n})\nprint(\"Tag filtered:\", resp.json())\n\n# 查看所有标签\nresp = requests.get(f\"{BASE_URL}/memories/tags\")\nprint(\"Tags:\", resp.json()[\"tags\"])\n```\n\n---\n\n## Node.js 示例\n\n```javascript\nconst BASE_URL = \"http://localhost:3000/api/v1\";\n\n// 写入记忆\nconst addResp = await fetch(`${BASE_URL}/memories`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({\n    content: \"Node.js 客户端示例写入的记忆\",\n    importance: 1.0,\n    metadata: { source: \"test\", tags: [\"node\", \"example\"] }\n  })\n});\nconsole.log(await addResp.json());\n\n// 检索记忆\nconst queryResp = await fetch(`${BASE_URL}/memories/query`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({ query: \"示例\", k: 5 })\n});\nconst data = await queryResp.json();\nconsole.log(`${data.count} results:`);\ndata.results.forEach(r => {\n  console.log(`  [${r.score.toFixed(3)}] ${r.content} (hits: ${r.hit_count})`);\n});\n```\n\n---\n\n## 定价摘要\n\n| 版本 | 价格 | 说明 |\n|------|------|------|\n| 技能包（本地安装） | 9.99 元 | 永久使用，含核心引擎 + API 服务 |\n| API 远程调用 | 可选 | 通过百炼平台按次计费（开发中） |\n\n---\n\n## 常见问题\n\n**Q: 记忆会过期吗？**\nA: 记忆不会自动删除，但会随时间衰减权重，检索时近期记忆优先级更高。超过 1000 条时会自动淘汰最不重要的旧记忆。\n\n**Q: 如何删除一条记忆？**\nA: 使用 `DELETE /api/v1/memories/:id` 接口。\n\n**Q: 什么是标签？如何利用它？**\nA: 标签是附加在 metadata.tags 上的字符串数组。你可以用它给记忆分类（如 \"preference\", \"debug\", \"task\"），然后在查询时使用 `tags_filter` 进行精确 AND 过滤，也可以直接通过 `GET /api/v1/memories/by-tag/:tag` 获取某个标签的所有记忆。\n\n**Q: Hotness 热度机制是什么？**\nA: 高频访问的记忆会自动提升权重。访问次数越多、越近期的访问，对检索排名的贡献越大，确保热数据优先被召回。\n\n**Q: 同义词检索怎么用？**\nA: 无需配置。系统内置 70+ 组中文同义词（如 \"接口\" ↔ \"API\"、\"用户\" ↔ \"客户\"），查询时自动扩展，提升语义匹配率。\n\nFile v1.0.1:package.json\n\n{\n  \"name\": \"quickrecall\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Zero-dependency memory engine. Hotness-prioritized recall.\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"dev\": \"node --watch index.js\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.18.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.0: 12 files, 24648 bytes\n\nFiles: assets/icon.svg (572b), index.js (11871b), memory.js (22783b), package.json (349b), references/API_SPEC.md (12538b), references/USE_GUIDE.md (4143b), scripts/setup.sh (932b), scripts/start.sh (461b), scripts/test-client.js (3141b), scripts/test-client.py (2843b), SKILL.md (5800b), _meta.json (130b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: \"QuickRecall - Zero-Dependency Memory Engine\"\ndescription: \"常用记忆优先出现。零依赖的 AI 记忆引擎，纯 Node.js，无数据库无插件。\"\ntags:\n  - memory\n  - recall\n  - hotness\n  - semantic-search\n  - zero-dependency\n  - express\n  - nodejs\nfeatures:\n  - 热点优先召回（Hotness driven）\n  - 语义检索（TF-IDF）\n  - 零外部依赖\n  - 标签系统（AND 过滤）\n  - 中文同义词扩展\n  - 10 个 REST API 端点\n---\n\n# QuickRecall — 快忆 | Zero-Dependency Memory Engine\n\n```\n常用记忆优先出现，而非关键词匹配。\nWhat users recall most appears first — not just keyword matches.\n```\n\n---\n\n# 中文\n\n## 为什么选择 QuickRecall？\n\n**更快找到用户真正需要的记忆。**\n\n大多数 AI 记忆系统只做语义匹配：查\"天气怎么样\" → 返回所有关于天气的结果。\n\nQuickRecall 不只做语义匹配。它还会追踪**哪些记忆被频繁访问**，自动将热点记忆排在前面。用户常用的信息，下次问的时候第一个出现。\n\n```\n普通记忆系统：准确匹配，但冷的冷的，热的热的，混在一起。\nQuickRecall：热门优先，冷门在后，永远给你最可能需要的。\n```\n\n## 核心特点\n\n| 特点 | 说明 |\n|------|------|\n| 热点优先召回 | 高频访问的记忆提升权重，常用信息优先出现 |\n| 混合评分引擎 | 语义匹配 × 50% + 时间衰减 × 30% + 热度 × 20% |\n| 零外部依赖 | 安装即用，不需要配置任何数据库、向量引擎、云服务 |\n| 中文原生支持 | TF-IDF 分词、70+ 组同义词扩展、标签系统 |\n| 安全无插件 | 纯 Node.js，不需要浏览器插件或第三方扩展 |\n| 自动维护 | 超过 1000 条自动淘汰，内置压缩机制 |\n\n## 快速开始\n\n```bash\nnpm install && node index.js\n\n# 写一条记忆\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\":\"用户偏好深色主题\",\"importance\":1.5,\"metadata\":{\"tags\":[\"preference\"]}}'\n\n# 检索\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"用户喜欢什么\",\"k\":3}'\n```\n\n## 十步 API\n\n| 方法 | 端点 | 功能 |\n|------|------|------|\n| GET | `/api/v1/health` | 健康检查 |\n| GET | `/api/v1/status` | 服务状态 |\n| POST | `/api/v1/memories` | 写入记忆 |\n| GET | `/api/v1/memories` | 列出所有记忆 |\n| GET | `/api/v1/memories/:id` | 按 ID 获取 |\n| DELETE | `/api/v1/memories/:id` | 删除记忆 |\n| POST | `/api/v1/memories/query` | 语义检索 |\n| GET | `/api/v1/memories/tags` | 列出所有标签 |\n| GET | `/api/v1/memories/by-tag/:tag` | 按标签获取 |\n| GET | `/api/v1/license` | 许可证信息 |\n\n## 许可证\n\nMIT\n\n---\n\n# English\n\n## Why QuickRecall?\n\n**Find the memory your user actually needs — faster.**\n\nMost memory systems only do semantic matching. Search for \"weather\" and you get all weather-related results in a flat list.\n\nQuickRecall goes further. It tracks **access frequency** with a Hotness mechanism, automatically prioritizing frequently recalled memories. The next time a user asks about something, the most relevant result is also the one that's been most useful.\n\n```\nOther systems: matches keywords, but no sense of what matters.\nQuickRecall: prioritizes hot spots, delivers what's most likely needed.\n```\n\n## Core Features\n\n| Feature | Description |\n|---------|-------------|\n| Hotness-Prioritized Recall | Frequently accessed memories get boosted scores |\n| Hybrid Scoring Engine | 50% semantic + 30% recency + 20% hotness |\n| Zero External Dependencies | No databases, vector stores, or cloud services needed |\n| Chinese & English Support | TF-IDF with 70+ Chinese synonym groups |\n| No Plugins Required | Pure Node.js, no browser extensions needed |\n| Auto Maintenance | Prune beyond 1000 memories, built-in compaction |\n\n## Quick Start\n\n```bash\nnpm install && node index.js\n\n# Write a memory\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\":\"User prefers dark theme\",\"importance\":1.5,\"metadata\":{\"tags\":[\"preference\"]}}'\n\n# Query\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"query\":\"user preferences\",\"k\":3}'\n```\n\n## API Endpoints\n\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | `/api/v1/health` | Health check |\n| GET | `/api/v1/status` | Server status |\n| POST | `/api/v1/memories` | Write memory |\n| GET | `/api/v1/memories` | List all memories |\n| GET | `/api/v1/memories/:id` | Get by ID |\n| DELETE | `/api/v1/memories/:id` | Delete memory |\n| POST | `/api/v1/memories/query` | Semantic query |\n| GET | `/api/v1/memories/tags` | List all tags |\n| GET | `/api/v1/memories/by-tag/:tag` | Get by tag |\n| GET | `/api/v1/license` | License info |\n\n## Directory Structure\n\n```\nQuickRecall/\n├── SKILL.md                    # This file\n├── scripts/\n│   ├── setup.sh                # Install & start\n│   ├── start.sh                # Restart service\n│   ├── test-client.py          # Python test client\n│   └── test-client.js          # Node.js test client\n├── references/\n│   ├── API_SPEC.md             # API specification\n│   └── USE_GUIDE.md            # Usage guide & examples\n├── assets/\n│   ├── icon.svg                # Skill icon\n│   └── icon-128.png            # Skill icon 128px\n└── server/\n    ├── package.json            # Dependencies (express only)\n    ├── .env.example            # Environment variables\n    └── src/\n        ├── index.js            # Express API server\n        └── memory.js           # v1.0 memory engine core\n```\n\n## License\n\nMIT\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777720746687\n}\n\nFile v1.0.0:references/API_SPEC.md\n\n# 持续记忆服务 v4.1 — API 规范\r\n\r\n---\r\n\r\n## 通用约定\r\n\r\n- 基础路径：`https://yuanzhouyi.com/api/v1`\r\n- 请求体格式：`application/json`\r\n- 响应体格式：`application/json`\r\n\r\n## 定价（人民币 · 一次性购买）\r\n\r\n| 版本 | 价格 | 说明 |\r\n|------|------|------|\r\n| 技能包（本地安装） | 9.99 元 | 永久使用，含后续 4.x 版本更新 |\r\n| API 远程调用 | 可选（百炼平台） | 按次计费 |\r\n\r\n---\r\n\r\n## API 列表\r\n\r\n| 方法 | 路径 | 功能 | 状态 |\r\n|------|------|------|------|\r\n| GET | /api/v1/health | 健康检查 | 免费 |\r\n| GET | /api/v1/status | 系统状态 | 免费 |\r\n| POST | /api/v1/memories | 写入记忆 | 免费 |\r\n| POST | /api/v1/memories/query | 检索记忆 | 免费 |\r\n| POST | /api/v1/memories/compact | 压缩记忆 | 免费 |\r\n| GET | /api/v1/memories/:id | 获取单条记忆 | 免费 |\r\n| DELETE | /api/v1/memories/:id | 删除单条记忆 | 免费 |\r\n| GET | /api/v1/memories/tags | 列出所有标签 | 免费 |\r\n| GET | /api/v1/memories/by-tag/:tag | 按标签检索 | 免费 |\r\n| POST | /api/v1/session/restore | 会话恢复 | 免费 |\r\n\r\n### 通用错误响应\r\n\r\n400 Bad Request\r\n```json\r\n{ \"code\": \"INVALID_PARAM\", \"message\": \"…\", \"details\": { \"field\": \"…\", \"reason\": \"…\" } }\r\n```\r\n\r\n404 Not Found\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n500 Internal Server Error\r\n```json\r\n{ \"code\": \"INTERNAL_ERROR\", \"message\": \"Internal server error\" }\r\n```\r\n\r\n---\r\n\r\n## API 1：写入记忆\r\n\r\n**功能名称：** 写入记忆\r\n\r\n**功能描述：** 系统接收一段文本内容及可选的重要性权重和标签元数据，保存到记忆存储中。如果记忆总数超过上限（1000 条），自动淘汰最不重要的旧记忆。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| content | string | 是 | 长度 1-5000 字符，不能为空或纯空白 | 要记忆的文本内容 |\r\n| importance | number | 否 | 范围 0.0 - 2.0，默认 1.0 | 重要性权重，越高越不易被淘汰 |\r\n| metadata | object | 否 | JSON 序列化后不超过 1KB | 附加元数据（source, category, tags 等） |\r\n\r\n注意：`metadata` 中如果包含 `tags` 字段，应传入字符串数组，例如 `tags: [\"preference\", \"theme\"]`。标签用于后续筛选检索。\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n  \"importance\": 1.5,\r\n  \"metadata\": {\r\n    \"source\": \"chat\",\r\n    \"category\": \"preference\",\r\n    \"tags\": [\"preference\", \"theme\"]\r\n  }\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (201 Created)：\r\n```json\r\n{\r\n  \"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\r\n  \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n  \"importance\": 1.5,\r\n  \"timestamp\": 1746064800000,\r\n  \"metadata\": { \"source\": \"chat\", \"category\": \"preference\", \"tags\": [\"preference\", \"theme\"] },\r\n  \"memory_count\": 42\r\n}\r\n```\r\n\r\n错误响应：\r\n\r\n400 Bad Request — content 为空或超出长度\r\n```json\r\n{\r\n  \"code\": \"INVALID_CONTENT\",\r\n  \"message\": \"Content must be between 1 and 5000 characters\",\r\n  \"details\": { \"field\": \"content\", \"reason\": \"empty\" }\r\n}\r\n```\r\n\r\n400 Bad Request — importance 超出范围\r\n```json\r\n{\r\n  \"code\": \"INVALID_PARAM\",\r\n  \"message\": \"Importance must be a number between 0.0 and 2.0\",\r\n  \"details\": { \"field\": \"importance\", \"reason\": \"out of range\" }\r\n}\r\n```\r\n\r\n400 Bad Request — metadata 过大\r\n```json\r\n{\r\n  \"code\": \"INVALID_PARAM\",\r\n  \"message\": \"Metadata must not exceed 1KB\",\r\n  \"details\": { \"field\": \"metadata\", \"reason\": \"too large\" }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 2：检索记忆\r\n\r\n**功能名称：** 检索记忆\r\n\r\n**功能描述：** 接收一段查询文本，在已保存的记忆中执行 TF-IDF 语义相似度检索，结合同义词扩展（70+ 中文同义词组）、时间衰减分数、热度分数和重要性权重，返回最相关的前 K 条记忆及评分详情。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories/query`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| query | string | 是 | 长度 1-2000 字符，不能为空 | 用于检索的查询文本 |\r\n| k | number | 否 | 整数，范围 1-50，默认 5 | 返回的最相关记忆数 |\r\n| min_importance | number | 否 | 范围 0.0 - 2.0，默认 0 | 最低重要性阈值，低于此值的记忆不返回 |\r\n| max_age_seconds | number | 否 | 必须大于 0，默认不过滤 | 只检索距今 N 秒内的记忆（时间过滤器） |\r\n| tags_filter | string[] | 否 | 非空字符串数组 | 标签精确 AND 过滤，记忆必须同时包含所有指定标签 |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"query\": \"用户对界面有什么偏好\",\r\n  \"k\": 5,\r\n  \"min_importance\": 0.5,\r\n  \"tags_filter\": [\"preference\"]\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"count\": 2,\r\n  \"results\": [\r\n    {\r\n      \"id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\r\n      \"content\": \"用户偏好深色主题，所有界面应使用暗色模式\",\r\n      \"importance\": 1.5,\r\n      \"timestamp\": 1746064800000,\r\n      \"metadata\": { \"source\": \"chat\", \"category\": \"preference\", \"tags\": [\"preference\", \"theme\"] },\r\n      \"score\": 0.85,\r\n      \"hit_count\": 3\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n| 响应字段 | 类型 | 描述 |\r\n|---------|------|------|\r\n| count | number | 返回的记忆数 |\r\n| results[].id | string | UUID |\r\n| results[].content | string | 记忆内容 |\r\n| results[].importance | number | 重要性权重 |\r\n| results[].timestamp | number | Unix 毫秒时间戳 |\r\n| results[].metadata | object | 附加元数据（含 tags 标签） |\r\n| results[].score | number | 综合评分（语义×0.5 + 衰减×0.3 + 热度×0.2） |\r\n| results[].hit_count | number | 该记忆被访问的次数 |\r\n\r\n错误响应：\r\n\r\n400 Bad Request — query 为空\r\n```json\r\n{\r\n  \"code\": \"INVALID_QUERY\",\r\n  \"message\": \"Query must be between 1 and 2000 characters\",\r\n  \"details\": { \"field\": \"query\", \"reason\": \"empty\" }\r\n}\r\n```\r\n\r\n400 Bad Request — query 过长\r\n```json\r\n{\r\n  \"code\": \"INVALID_QUERY\",\r\n  \"message\": \"Query must be between 1 and 2000 characters\",\r\n  \"details\": { \"field\": \"query\", \"reason\": \"too long\", \"max\": 2000 }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 3：压缩记忆\r\n\r\n**功能名称：** 压缩记忆\r\n\r\n**功能描述：** 将低重要性的旧记忆按时间顺序分组，每组合并为一条摘要（内置拼接功能，无需外部回调）。重要记忆（≥ min_importance）会被保护，不参与压缩。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/memories/compact`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| group_size | number | 否 | 整数，范围 2-20，默认 5 | 每组最多合并多少条记忆 |\r\n| min_importance | number | 否 | 范围 0.0 - 2.0，默认 0.5 | 重要性 ≥ 此值的记忆不会被压缩（保护重要信息） |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"group_size\": 5,\r\n  \"min_importance\": 0.5\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"removed\": 12,\r\n  \"remaining\": 88\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 4：获取单条记忆\r\n\r\n**功能名称：** 获取单条记忆\r\n\r\n**描述：** 根据 UUID 返回指定记忆的完整信息。\r\n\r\n**输入：** `GET /api/v1/memories/:id`\r\n\r\n**输出：**\r\n\r\n200 OK:\r\n```json\r\n{\r\n  \"id\": \"a1b2c3d4-...\",\r\n  \"content\": \"用户偏好深色主题\",\r\n  \"importance\": 1.5,\r\n  \"timestamp\": 1746064800000,\r\n  \"metadata\": {},\r\n  \"hit_count\": 3,\r\n  \"score\": 0.0\r\n}\r\n```\r\n\r\n404 Not Found:\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n---\r\n\r\n## API 5：删除单条记忆\r\n\r\n**功能名称：** 删除单条记忆\r\n\r\n**描述：** 根据 UUID 删除指定记忆。\r\n\r\n**输入：** `DELETE /api/v1/memories/:id`\r\n\r\n**输出：**\r\n\r\n200 OK:\r\n```json\r\n{ \"removed\": 1, \"remaining\": 41 }\r\n```\r\n\r\n404 Not Found:\r\n```json\r\n{ \"code\": \"NOT_FOUND\", \"message\": \"Memory not found\" }\r\n```\r\n\r\n---\r\n\r\n## API 6：列出所有标签\r\n\r\n**功能名称：** 列出所有标签\r\n\r\n**描述：** 返回当前记忆库中所有已使用的标签，按字母/字典序排序。\r\n\r\n**输入：** `GET /api/v1/memories/tags`\r\n\r\n**输出：** 200 OK\r\n```json\r\n{ \"tags\": [\"debug\", \"error\", \"preference\", \"theme\"], \"count\": 4 }\r\n```\r\n\r\n---\r\n\r\n## API 7：按标签检索\r\n\r\n**功能名称：** 按标签检索\r\n\r\n**描述：** 返回所有包含指定标签的记忆，按重要性降序排列。\r\n\r\n**输入：** `GET /api/v1/memories/by-tag/:tag`\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"count\": 2,\r\n  \"results\": [\r\n    {\r\n      \"id\": \"a1b2c3d4-...\",\r\n      \"content\": \"用户偏好深色主题\",\r\n      \"importance\": 1.5,\r\n      \"timestamp\": 1746064800000,\r\n      \"metadata\": { \"tags\": [\"preference\", \"theme\"] }\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 8：会话恢复\r\n\r\n**功能名称：** 会话恢复\r\n\r\n**功能描述：** 给定当前对话上下文，从全局记忆中检索相关条目，并从指定工作空间的标签中获取近期记忆，返回完整的上下文恢复数据。用于 Agent 启动新会话时恢复到之前状态。\r\n\r\n**输入：**\r\n\r\n请求方法：`POST`\r\n路径：`/api/v1/session/restore`\r\n\r\n请求体 (JSON)：\r\n| 字段 | 类型 | 必填 | 校验规则 | 描述 |\r\n|------|------|------|---------|------|\r\n| context | string | 是 | 长度 1-2000 字符，不能为空 | 当前对话上下文，用于语义检索 |\r\n| workspace_id | string | 否 | 长度 1-64 字符 | 工作空间 ID，用于在 metadata.tags 中匹配 |\r\n| k | number | 否 | 整数，范围 1-50，默认 10 | 全局检索返回的最大记忆数 |\r\n\r\n请求体示例：\r\n```json\r\n{\r\n  \"context\": \"正在讨论用户界面偏好和主题设置\",\r\n  \"workspace_id\": \"agent-alpha\",\r\n  \"k\": 10\r\n}\r\n```\r\n\r\n**输出：**\r\n\r\n成功响应 (200 OK)：\r\n```json\r\n{\r\n  \"workspace_id\": \"agent-alpha\",\r\n  \"global\": {\r\n    \"count\": 3,\r\n    \"memories\": [\r\n      {\r\n        \"id\": \"a1b2c3d4-...\",\r\n        \"content\": \"用户偏好深色主题\",\r\n        \"importance\": 1.5,\r\n        \"timestamp\": 1746064800000,\r\n        \"score\": 0.85\r\n      }\r\n    ]\r\n  },\r\n  \"workspace\": {\r\n    \"count\": 5,\r\n    \"memories\": [\r\n      {\r\n        \"id\": \"b2c3d4e5-...\",\r\n        \"content\": \"用户今天的提问与界面设计相关\",\r\n        \"importance\": 1.2,\r\n        \"timestamp\": 1746064800000\r\n      }\r\n    ]\r\n  },\r\n  \"status\": {\r\n    \"global_memory_count\": 42,\r\n    \"workspace_count\": 3\r\n  }\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 9：健康检查\r\n\r\n**功能名称：** GET /api/v1/health — 健康检查\r\n\r\n**功能描述：** 返回服务是否正常运行。无需认证，免费访问。\r\n\r\n**输入：** 无\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"status\": \"ok\",\r\n  \"service\": \"memory-continuity\",\r\n  \"version\": \"4.1.0\"\r\n}\r\n```\r\n\r\n---\r\n\r\n## API 10：查询系统状态\r\n\r\n**功能名称：** GET /api/v1/status — 查询系统状态\r\n\r\n**功能描述：** 返回系统当前状态，包括记忆数量、运行配置。\r\n\r\n**输入：** 无\r\n\r\n**输出：** 200 OK\r\n```json\r\n{\r\n  \"memories\": 42,\r\n  \"config\": {\r\n    \"decay_rate\": 3600,\r\n    \"sim_weight\": 0.5,\r\n    \"recency_weight\": 0.3,\r\n    \"hotness_weight\": 0.2,\r\n    \"hotness_decay\": 86400,\r\n    \"max_memories\": 1000,\r\n    \"default_importance\": 1.0,\r\n    \"cache_ttl\": 300,\r\n    \"synonym_boost\": 0.15\r\n  }\r\n}\r\n```\r\n\r\n---\r\n\r\n## 错误码汇总\r\n\r\n| HTTP 状态码 | code | 触发条件 |\r\n|------------|------|---------|\r\n| 400 | INVALID_CONTENT | content 为空或超出 5000 字符 |\r\n| 400 | INVALID_QUERY | query 为空或超出 2000 字符 |\r\n| 400 | INVALID_PARAM | 参数校验失败（importance 范围、metadata 大小、context 空等） |\r\n| 404 | NOT_FOUND | 指定 ID 的记忆不存在 |\r\n| 500 | INTERNAL_ERROR | 服务器内部错误 |\r\n\r\n---\r\n\r\n## 变更记录\r\n\r\n| 日期 | 版本 | 变更说明 |\r\n|------|------|---------|\r\n| 2026-05-02 | 4.1.0 | **重大更新**: 重写引擎至 v4.1 |\r\n| | | - TF-IDF 语义检索（替代 Bigram） |\r\n| | | - 70+ 中文同义词组扩展 |\r\n| | | - Hotness 热度机制/标签系统/检索缓存 |\r\n| | | - 新增 API：GET /memories/:id, DELETE /memories/:id, GET /memories/tags, GET /memories/by-tag/:tag |\r\n| | | - 检索响应新增 score / hit_count 字段 |\r\n| | | - compact 内置摘要器（无需外部回调） |\r\n| | | - 新 API_SPEC.md 全面更新 |\r\n| 2026-04-26 | 1.0.0 | 初版创建 |\n\nFile v1.0.0:references/USE_GUIDE.md\n\n# 持续记忆服务 v4.1 — 使用指南\n\n---\n\n## 快速开始\n\n### 1. 启动服务\n\n```bash\ncd server\nnpm install\nnode src/index.js\n```\n\n### 2. 写入一条记忆（含标签）\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"content\": \"元说：深色主题是首选\",\n    \"importance\": 1.5,\n    \"metadata\": {\n      \"source\": \"chat\",\n      \"tags\": [\"preference\", \"theme\"]\n    }\n  }'\n```\n\n### 3. 语义检索记忆\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"用户喜欢什么主题\",\n    \"k\": 3\n  }'\n```\n\n### 4. 按标签过滤检索\n\n```bash\ncurl -X POST http://localhost:3000/api/v1/memories/query \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"用户偏好\",\n    \"k\": 5,\n    \"tags_filter\": [\"theme\"]\n  }'\n```\n\n### 5. 健康检查\n\n```\ncurl http://localhost:3000/api/v1/health\n```\n\n### 6. 获取系统状态\n\n```\ncurl http://localhost:3000/api/v1/status\n```\n\n### 7. 列出所有标签\n\n```\ncurl http://localhost:3000/api/v1/memories/tags\n```\n\n### 8. 按标签获取记忆\n\n```\ncurl http://localhost:3000/api/v1/memories/by-tag/preference\n```\n\n---\n\n## Python 示例\n\n```python\nimport requests\n\nBASE_URL = \"http://localhost:3000/api/v1\"\n\n# 写入记忆（含标签）\nresp = requests.post(f\"{BASE_URL}/memories\", json={\n    \"content\": \"Python 客户端示例写入的记忆\",\n    \"importance\": 1.0,\n    \"metadata\": {\"source\": \"test\", \"tags\": [\"python\", \"example\"]}\n})\nprint(resp.status_code, resp.json())\n\n# 语义检索\nresp = requests.post(f\"{BASE_URL}/memories/query\", json={\n    \"query\": \"示例\",\n    \"k\": 5\n})\nprint(resp.status_code, resp.json()[\"count\"], \"results\")\n\n# 带标签过滤的检索\nresp = requests.post(f\"{BASE_URL}/memories/query\", json={\n    \"query\": \"Python\",\n    \"k\": 5,\n    \"tags_filter\": [\"python\"]\n})\nprint(\"Tag filtered:\", resp.json())\n\n# 查看所有标签\nresp = requests.get(f\"{BASE_URL}/memories/tags\")\nprint(\"Tags:\", resp.json()[\"tags\"])\n```\n\n---\n\n## Node.js 示例\n\n```javascript\nconst BASE_URL = \"http://localhost:3000/api/v1\";\n\n// 写入记忆\nconst addResp = await fetch(`${BASE_URL}/memories`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({\n    content: \"Node.js 客户端示例写入的记忆\",\n    importance: 1.0,\n    metadata: { source: \"test\", tags: [\"node\", \"example\"] }\n  })\n});\nconsole.log(await addResp.json());\n\n// 检索记忆\nconst queryResp = await fetch(`${BASE_URL}/memories/query`, {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({ query: \"示例\", k: 5 })\n});\nconst data = await queryResp.json();\nconsole.log(`${data.count} results:`);\ndata.results.forEach(r => {\n  console.log(`  [${r.score.toFixed(3)}] ${r.content} (hits: ${r.hit_count})`);\n});\n```\n\n---\n\n## 定价摘要\n\n| 版本 | 价格 | 说明 |\n|------|------|------|\n| 技能包（本地安装） | 9.99 元 | 永久使用，含核心引擎 + API 服务 |\n| API 远程调用 | 可选 | 通过百炼平台按次计费（开发中） |\n\n---\n\n## 常见问题\n\n**Q: 记忆会过期吗？**\nA: 记忆不会自动删除，但会随时间衰减权重，检索时近期记忆优先级更高。超过 1000 条时会自动淘汰最不重要的旧记忆。\n\n**Q: 如何删除一条记忆？**\nA: 使用 `DELETE /api/v1/memories/:id` 接口。\n\n**Q: 什么是标签？如何利用它？**\nA: 标签是附加在 metadata.tags 上的字符串数组。你可以用它给记忆分类（如 \"preference\", \"debug\", \"task\"），然后在查询时使用 `tags_filter` 进行精确 AND 过滤，也可以直接通过 `GET /api/v1/memories/by-tag/:tag` 获取某个标签的所有记忆。\n\n**Q: Hotness 热度机制是什么？**\nA: 高频访问的记忆会自动提升权重。访问次数越多、越近期的访问，对检索排名的贡献越大，确保热数据优先被召回。\n\n**Q: 同义词检索怎么用？**\nA: 无需配置。系统内置 70+ 组中文同义词（如 \"接口\" ↔ \"API\"、\"用户\" ↔ \"客户\"），查询时自动扩展，提升语义匹配率。\n\nFile v1.0.0:package.json\n\n{\n  \"name\": \"quickrecall\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Zero-dependency memory engine. Hotness-prioritized recall.\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"dev\": \"node --watch index.js\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.18.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"license\": \"MIT\"\n}","readmeExcerpt":"Skill: QuickRecall - Zero-Dependency Memory Engine. 常用记忆优先出现。零依赖 AI 记忆引擎，纯 Node.js。/ Prioritizes frequently used memories. Zero deps. Owner: chen-feng123 Summary: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dep... Tags: latest:1.0.5, zero-dependency:1.0.0 Version history: v1.0.5 | 2026-05-04T12:01:20.725Z | u","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\""},{"language":"javascript","snippet":"const { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);"},{"language":"text","snippet":"score = similarity × 0.5 + recency × 0.3 + hotness × 0.2"},{"language":"text","snippet":"memory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├── memo.cjs             # CLI tool\n├── package.json\n├── assets/\n│   └── icon.svg\n├── references/\n│   ├── API_SPEC.md\n│   └── USE_GUIDE.md\n└── scripts/\n    ├── init-memory.mjs  # One-time migration\n    └── test-client.js"},{"language":"text","snippet":"memo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态"},{"language":"bash","snippet":"node scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: memory-enhancement-engine\ndescription: Persistent memory engine for AI agents with semantic recall, hotness prioritization, importance weighting, time decay, and auto-compaction. Zero external dependencies. Pure Node.js.\ntags:\n  - memory\n  - persistent\n  - semantic-search\n  - hotness\n  - recall\n  - ai-agent\n  - nodejs\nfeatures:\n  - Hotness-prioritized recall\n  - Semantic search (bigram + character overlap)\n  - Importance weighting (0-2.0)\n  - Exponential time decay\n  - Auto-compaction and pruning\n  - Zero external dependencies\n  - Pure Node.js\n---\n\n# Memory Enhancement Engine\n\n**记忆增加引擎** — Persistent memory engine with hotness-prioritized semantic recall.\n\nMemories that are recalled more often appear first — not just keyword matches.\n\n## Quick Start\n\n```bash\n# Node.js API\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\nconst mem = new MemorySystem();\n\n# CLI tool (view / search / compact)\nnode memory-enhancement-engine/memo.cjs status\nnode memory-enhancement-engine/memo.cjs query \"something to find\"\n```\n\n## Core Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Create engine (stores to MEMORY_STORE.json automatically)\nconst mem = new MemorySystem({ decayHalfLifeHours: 2 });\n\n// Write a memory\nmem.add({\n  content: \"Paris is the capital of France.\",\n  importance: 1.5,\n  metadata: { tags: [\"geography\", \"fact\"] }\n});\n\n// Semantic search\nconst results = mem.query(\"France capital\");\nconsole.log(results);\n\n// Get recent memories\nconst recent = mem.recent(10);\n\n// Compact old memories (summarize low-importance clusters)\nmem.compact(5, 0.3);\n```\n\n## API\n\n| Method | Description |\n|--------|-------------|\n| `add(content, importance, metadata)` | Write a memory |\n| `retrieve(query, k)` | Semantic search (returns sorted by score) |\n| `getRecent(n)` | Get N most recent memories |\n| `remove(predicate)` | Remove memories matching predicate |\n| `compact(groupSize, minImportance)` | Compact old memories into summaries |\n| `getStatus()` | Get engine stats (count, size, etc.) |\n\n## Scoring Formula\n\n```\nscore = similarity × 0.5 + recency × 0.3 + hotness × 0.2\n```\n\nWhere hotness = log(1 + access_count) × exp(-time_delta / 86400)\n\n## Features\n\n- **Hotness-Prioritized Recall** — Frequently accessed memories get boosted scores\n- **Semantic Search** — Bigram overlap + character-level similarity\n- **Importance Weighting** — 0.0 (trivial) to 2.0 (critical)\n- **Time Decay** — Half-life configurable (default 2 hours)\n- **Auto-Prune** — Beyond 1000 entries, least important are pruned\n- **Auto-Compaction** — Merge low-importance groups into summaries\n- **No Server Needed** — Direct Node.js require, stores to local JSON\n\n## Installation\n\n| Method | Command |\n|--------|---------|\n| Copy | Copy `memory.js` + `memo.cjs` to your project |\n| ClawHub | `clawhub install memory-enhancement-engine` |\n\n## File Structure\n\n```\nmemory-enhancement-engine/\n├── SKILL.md\n├── memory.js            # Core engine\n├"},{"path":"README.md","content":"# 宙一记忆系统 v3 — 初始化说明\n\n## 架构\n\n本系统把封装技能中的记忆引擎能力**内化到工作区**。\n\n```\nmemo-lib/\n├── memory.js          ← 记忆引擎核心（从封装技能复制，适度精简）\n├── MEMORY_STORE.json  ← 持久化存储文件（自动管理，不要手动编辑）\n└── README.md          ← 本文件\n\nscripts/\n└── memo.cjs           ← CLI 工具：写入/检索/查询/压缩/状态\n```\n\n## 如何使用\n\n### 写入一条记忆\n\n```bash\nnode scripts/memo.cjs add \"内容\" [importance=1.0] [tag1,tag2]\n```\n\n### 检索记忆\n\n```bash\nnode scripts/memo.cjs query \"关键词\" [k=5] [min_imp=0]\n```\n\n### 查看状态\n\n```bash\nnode scripts/memo.cjs status\n```\n\n### 压缩旧记忆\n\n```bash\nnode scripts/memo.cjs compact [group_size=5] [min_imp=0.5]\n```\n\n## 封装技能 vs 宙一记忆系统\n\n封装技能（卖的产品）：\n- 独立部署，接受外部请求\n- x402 支付验证\n- REST API 对外暴露\n- 多租户隔离\n\n宙一记忆系统（这里）：\n- 本地文件持久化，直接读写\n- 无支付、无网络依赖\n- 在启动流程中自动调用（AGENTS.md）\n- 只有我一个用户\n- 但要完整保留：语义检索、权重、时间衰减、压缩能力"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn78b7srwrx8xth7a4wcnapxyh85z0ts\",\n  \"slug\": \"quickrecall\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1777896080725\n}"},{"path":"references/API_SPEC.md","content":"# Memory Enhancement Engine — API Specification\n\n## `MemorySystem`\n\nCore class with persistent storage to local JSON file.\n\n### Constructor\n\n```javascript\nnew MemorySystem(config)\n```\n\n**Parameters:**\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `decayHalfLifeHours` | number | 2 | Exponential decay half-life |\n| `simWeight` | number | 0.6 | Semantic similarity weight |\n| `recencyWeight` | number | 0.4 | Recency weight |\n| `storePath` | string | auto | Path to MEMORY_STORE.json |\n\n---\n\n### Methods\n\n#### `add(entry) -> string`\nWrite a new memory.\n\n- **Input:** `{ content: string, importance?: number (0-2.0), metadata?: object }`\n- **Output:** `memory_id` — unique 12-char hex hash\n- **Errors:** Empty content → `Error`\n\n#### `query(text, k=5) -> Array`\nSemantic search.\n\n- **Input:** `text` — search query string; `k` — max results (1-50)\n- **Output:** `[{id, content, importance, score, metadata, created_at, accessed_at, hit_count}, ...]`\n- **Scoring:** similarity × simWeight + recency × recencyWeight + hotness × 0.2\n\n#### `recent(n=10) -> Array`\nGet N most recently created memories.\n\n#### `get(id) -> object|null`\nGet a single memory by ID. Increments hit_count.\n\n#### `delete(id) -> boolean`\nDelete memory by ID. Returns true if existed.\n\n#### `compact(groupSize=5, minImportance=0.5) -> Array`\nCompact low-importance memories into summaries.\n\n- Groups oldest unaccessed memories, merges their content\n- Returns compaction report: `[{group, summary, importance, original_ids}]`\n\n#### `status() -> object`\nEngine stats:\n```json\n{\n  \"count\": 78,\n  \"storeSize\": 30536,\n  \"decayHalfLifeHours\": 2,\n  \"totalCompactions\": 3\n}\n```"},{"path":"references/USE_GUIDE.md","content":"# Memory Enhancement Engine — Usage Guide\n\n## Installation\n\n### Method 1: Copy files\n```bash\n# Copy to your project\ncp -r memory-enhancement-engine ./my-project/\n```\n\n### Method 2: ClawHub\n```bash\nclawhub install memory-enhancement-engine\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nconst { MemorySystem } = require('./memory-enhancement-engine/memory.js');\n\n// Initialize\nconst mem = new MemorySystem();\n\n// Store memories\nmem.add({ content: \"User prefers dark theme\", importance: 1.5 });\nmem.add({ content: \"Billing is on the 15th of each month\", importance: 1.2 });\n\n// Search\nconst results = mem.query(\"dark mode preference\");\nconsole.log(results[0].content); // \"User prefers dark theme\"\nconsole.log(results[0].score);   // 0.87 (example)\n\n// Check status\nconst stats = mem.status();\nconsole.log(`Memories stored: ${stats.count}`);\n```\n\n### CLI Tool\n\n```bash\n# View status\nnode memo.cjs status\n\n# Search memories\nnode memo.cjs query \"dark theme\"\n\n# View recent\nnode memo.cjs recent\n\n# Compact old memories\nnode memo.cjs compact 5 0.3\n```\n\n### With Metadata\n\n```javascript\nmem.add({\n  content: \"Database connection string format\",\n  importance: 0.8,\n  metadata: {\n    tags: [\"technical\", \"config\"],\n    source: \"documentation\",\n    category: \"backend\"\n  }\n});\n\n// Search with metadata context\nconst results = mem.query(\"database config\");\n```\n\n## Best Practices\n\n1. **Importance Levels** — Use 1.5+ for critical facts, 0.5-1.0 for normal info, 0.3 for ephemeral\n2. **Compaction** — Run `compact()` periodically to keep memory lean (suggested: every 500 writes)\n3. **Backup** — `MEMORY_STORE.json` is your persistence file; back it up regularly\n4. **Capacity** — Default max 1000, adjust via constructor if needed\n\n## Test\n\n```bash\n# Run test client\nnode scripts/test-client.js\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1230,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T19:02:42.250Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:55:42.670Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}