{"_id":"@akashahq/vidya","_rev":"3-2da4036d1d2deac1763c3d2a41a5f961","name":"@akashahq/vidya","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@akashahq/vidya","version":"1.0.0","keywords":["openclaw","memory","lancedb","voyage-ai","hybrid-search","embeddings","reranking","ai-agent"],"license":"MIT","_id":"@akashahq/vidya@1.0.0","maintainers":[{"name":"vanitax","email":"roxychen.work@gmail.com"}],"homepage":"https://github.com/AkashaHQ/Vidya#readme","bugs":{"url":"https://github.com/AkashaHQ/Vidya/issues"},"dist":{"shasum":"d6e97d80dba910021c18ad988af5069d88188e39","tarball":"https://registry.npmjs.org/@akashahq/vidya/-/vidya-1.0.0.tgz","fileCount":52,"integrity":"sha512-pmlgvPZ7M0N6slZo4NZkqVU5LFB6B5klpZfPrKXSyvwmpTShDDNGgfcWbmdXns/Vr4dbjmN7matolH8+l1OOPA==","signatures":[{"sig":"MEQCIGG9DixvkrU9rRA/7eBYRJN4FSisotWLOQdAlpaEiXdYAiBIzNM6aNDYDVxDhfoGpY7qdWlLTbcs/QRekqiGBElUzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashahq%2fvidya@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323516},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8fe66da011e88c9751ba85274540a72f79f1da37","scripts":{"test":"npx c8 --reporter=text --reporter=lcov npx tsx --test test/unit.test.ts","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"vanitax","email":"roxychen.work@gmail.com"},"openclaw":{"extensions":["./index.ts"]},"repository":{"url":"git+https://github.com/AkashaHQ/Vidya.git","type":"git"},"_npmVersion":"10.8.2","description":"Vidya — Hybrid memory plugin for OpenClaw agents. LanceDB vector store + Voyage AI embedding/rerank + BM25 keyword search.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@lancedb/lancedb":"^0.26.2","@sinclair/typebox":"0.34.48"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/vidya_1.0.0_1772387847673_0.09152706896494012","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@akashahq/vidya","version":"1.0.1","keywords":["openclaw","memory","lancedb","voyage-ai","hybrid-search","embeddings","reranking","ai-agent"],"license":"MIT","_id":"@akashahq/vidya@1.0.1","maintainers":[{"name":"vanitax","email":"roxychen.work@gmail.com"}],"homepage":"https://github.com/AkashaHQ/Vidya#readme","bugs":{"url":"https://github.com/AkashaHQ/Vidya/issues"},"dist":{"shasum":"c7c1501dbcb0d1ae97968ebb644653dfec02c1f1","tarball":"https://registry.npmjs.org/@akashahq/vidya/-/vidya-1.0.1.tgz","fileCount":52,"integrity":"sha512-23XvAQ+vaPd/ssLBsBVBUThlNp6GUfF25VpqbJDiAbzUEH1RtMsjzZBCsTztto69ZotbIQ+fi7H8SGmX5d6Yzw==","signatures":[{"sig":"MEYCIQDViaZMr2ETlOmkIHZVhXbsJM/WZgn+pJNnFqAtEo36UwIhALPm7C36JaeCLC2nu7EC9XwQU+N2MVRfd2n5jS+N0J9q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashahq%2fvidya@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":323699},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ee5651b6a17bd56f197f07d7c626729d8a386e0b","scripts":{"test":"npx c8 --reporter=text --reporter=lcov npx tsx --test test/unit.test.ts","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"vanitax","email":"roxychen.work@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/AkashaHQ/Vidya.git","type":"git"},"_npmVersion":"10.8.2","description":"Vidya — Hybrid memory plugin for OpenClaw agents. LanceDB vector store + Voyage AI embedding/rerank + BM25 keyword search.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@lancedb/lancedb":"^0.26.2","@sinclair/typebox":"0.34.48"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/vidya_1.0.1_1772390003494_0.9194529667501004","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@akashahq/vidya","version":"1.1.0","description":"Vidya — Hybrid memory plugin for OpenClaw agents. LanceDB vector store + Voyage AI embedding/rerank + BM25 keyword search.","type":"module","main":"dist/index.js","license":"MIT","repository":{"type":"git","url":"git+https://github.com/AkashaHQ/Vidya.git"},"keywords":["openclaw","memory","lancedb","voyage-ai","hybrid-search","embeddings","reranking","ai-agent"],"engines":{"node":">=18"},"dependencies":{"@lancedb/lancedb":"^0.26.2","@sinclair/typebox":"0.34.48"},"openclaw":{"extensions":["./dist/index.js"]},"devDependencies":{"c8":"^11.0.0","typescript":"^5.9.3","tsx":"^4.19.0"},"types":"dist/index.d.ts","scripts":{"build":"tsc","test":"npx c8 --reporter=text --reporter=lcov npx tsx --test test/unit.test.ts","prepublishOnly":"tsc"},"exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"_id":"@akashahq/vidya@1.1.0","gitHead":"49041dc1b8733f6490bd4eb0751107694daf8d75","bugs":{"url":"https://github.com/AkashaHQ/Vidya/issues"},"homepage":"https://github.com/AkashaHQ/Vidya#readme","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Wq7ZUIlyaAPbvD7xe86hgaycqJoWIMrM2VGjmxqUVa6N12LdV2HLSMENc9+p/Tom28Qv6stabPayj66QyrzhzA==","shasum":"d9461f63a429ec0490d64a44a087a330a18457d1","tarball":"https://registry.npmjs.org/@akashahq/vidya/-/vidya-1.1.0.tgz","fileCount":53,"unpackedSize":337916,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@akashahq%2fvidya@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDA73NtD6NOW2iirRWVK8o4/IHbAfuilaqjQdWdnVj1rAIhALSqZ8wsQ4E19uTh5lWHhZ9bi6GoN5itQ46zJ9MBb5xY"}]},"_npmUser":{"name":"vanitax","email":"roxychen.work@gmail.com"},"directories":{},"maintainers":[{"name":"vanitax","email":"roxychen.work@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vidya_1.1.0_1772526006716_0.6999012119348706"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-01T17:57:27.600Z","modified":"2026-03-03T08:20:07.169Z","1.0.0":"2026-03-01T17:57:27.831Z","1.0.1":"2026-03-01T18:33:23.666Z","1.1.0":"2026-03-03T08:20:06.862Z"},"bugs":{"url":"https://github.com/AkashaHQ/Vidya/issues"},"license":"MIT","homepage":"https://github.com/AkashaHQ/Vidya#readme","keywords":["openclaw","memory","lancedb","voyage-ai","hybrid-search","embeddings","reranking","ai-agent"],"repository":{"type":"git","url":"git+https://github.com/AkashaHQ/Vidya.git"},"description":"Vidya — Hybrid memory plugin for OpenClaw agents. LanceDB vector store + Voyage AI embedding/rerank + BM25 keyword search.","maintainers":[{"name":"vanitax","email":"roxychen.work@gmail.com"}],"readme":"# Vidya 🧠\n\n[![CI](https://github.com/AkashaHQ/Vidya/actions/workflows/ci.yml/badge.svg)](https://github.com/AkashaHQ/Vidya/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/AkashaHQ/Vidya/graph/badge.svg)](https://codecov.io/gh/AkashaHQ/Vidya)\n\n**Hybrid Memory for OpenClaw Agents**\n\n> *विद्या (Vidya) — Sanskrit for \"knowledge\"*\n\nA memory plugin for [OpenClaw](https://github.com/openclaw/openclaw) that gives AI agents persistent long-term memory with hybrid retrieval. Combines LanceDB vector search with BM25 full-text search, Voyage AI embeddings and reranking, multi-scope isolation, and intelligent auto-capture.\n\n## Features\n\n- **Hybrid Search** — Vector similarity + BM25 keyword search fused via Reciprocal Rank Fusion (RRF)\n- **Multi-Provider Embeddings** — Voyage AI, OpenAI, or Jina AI embeddings with a single config switch\n- **Voyage AI Reranking** — Cross-encoder reranking (`rerank-2.5`) for high-quality retrieval\n- **Multi-Scope Isolation** — Separate memory spaces per agent, project, or user with access control\n- **Auto-Capture** — Automatically stores important information from conversations using LLM judgment (with heuristic fallback)\n- **Auto-Recall** — Injects relevant memories into agent context before each turn\n- **Noise Filtering** — Filters out agent denials, meta-questions, and boilerplate\n- **MMR Diversity** — Maximal Marginal Relevance deduplication prevents redundant results\n- **Post-Processing Pipeline** — Recency boost, importance weighting, length normalization, time decay\n- **Daily Backups** — Automatic JSONL exports with 7-day rotation\n- **CLI Tools** — List, search, export, import, re-embed, and migrate memories\n- **6 Agent Tools** — `memory_recall`, `memory_store`, `memory_forget`, `memory_update`, `memory_stats`, `memory_list`\n\n## Quick Start\n\n> **⚠️ Upgrading from pre-1.0.1:** The plugin id changed from `memory-lancedb-voyage` to `vidya`. Update your `openclaw.json`:\n> - Rename `plugins.entries.memory-lancedb-voyage` to `plugins.entries.vidya`\n> - Update `plugins.slots.memory` from `\"memory-lancedb-voyage\"` to `\"vidya\"`\n\n### 1. Install\n\n**Option A — OpenClaw CLI** (recommended):\n\n```bash\nopenclaw plugins install @akashahq/vidya\n```\n\nThis handles downloading, placement in `~/.openclaw/extensions/`, and config scaffolding automatically.\n\n**Option B — git clone** (for development):\n\n```bash\ncd ~/.openclaw/extensions\ngit clone https://github.com/AkashaHQ/Vidya.git vidya\ncd vidya\nnpm install\n```\n\n### 2. Configure\n\nAdd to your `openclaw.json`:\n\n> **Note:** The `plugins.entries` key (`\"vidya\"` below) must match the `id` field in the plugin's `openclaw.plugin.json` manifest. If these don't match, OpenClaw won't associate the config with the plugin.\n\n```json\n{\n  \"plugins\": {\n    \"allow\": [\"vidya\"],\n    \"slots\": {\n      \"memory\": \"vidya\"\n    },\n    \"entries\": {\n      \"vidya\": {\n        \"enabled\": true,\n        \"config\": {\n          \"embedding\": {\n            \"apiKey\": \"${VOYAGE_API_KEY}\",\n            \"model\": \"voyage-4-large\"\n          },\n          \"autoCapture\": true,\n          \"autoRecall\": true,\n          \"retrieval\": {\n            \"mode\": \"hybrid\",\n            \"rerank\": \"cross-encoder\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n> **Note:** `plugins.allow` is OpenClaw's plugin allowlist. Plugins not listed here won't be loaded even if they exist in `extensions/`. Add `\"vidya\"` to the array alongside any other plugins you're already using.\n\nYou can also configure via the OpenClaw gateway API:\n\n```\ngateway(action=\"config.patch\", raw=JSON.stringify({\n  plugins: {\n    slots: { memory: \"vidya\" },\n    allow: [\"vidya\"],  // add to allowlist\n    entries: {\n      vidya: {\n        enabled: true,\n        config: {\n          embedding: { apiKey: \"${VOYAGE_API_KEY}\", model: \"voyage-4-large\" },\n          autoCapture: true,\n          autoRecall: true,\n          retrieval: { mode: \"hybrid\", rerank: \"cross-encoder\" }\n        }\n      }\n    }\n  }\n}))\n```\n\nOr via CLI:\n\n```bash\nopenclaw config patch '{\"plugins\":{\"slots\":{\"memory\":\"vidya\"},\"entries\":{\"vidya\":{\"enabled\":true,\"config\":{\"embedding\":{\"apiKey\":\"${VOYAGE_API_KEY}\",\"model\":\"voyage-4-large\"}}}}}}'\n```\n\n### 3. Set API Key\n\n```bash\n# Voyage AI (default)\nexport VOYAGE_API_KEY=\"pa-...\"\n\n# Or for OpenAI / Jina:\n# export OPENAI_API_KEY=\"sk-...\"\n# export JINA_API_KEY=\"jina_...\"\n```\n\nGet your key at [dash.voyageai.com](https://dash.voyageai.com/), [platform.openai.com](https://platform.openai.com/), or [jina.ai](https://jina.ai/).\n\n### 4. Restart OpenClaw\n\n```bash\nopenclaw gateway restart\n```\n\nSee [`config.example.json`](config.example.json) for all available options.\n\n## Configuration\n\n| Section | Key Options | Description |\n|---------|-------------|-------------|\n| `embedding` | `provider`, `apiKey`, `model`, `dimensions`, `baseUrl` | Embedding provider and model. See [Embedding Providers](#embedding-providers) below |\n| `retrieval` | `mode`, `rerank`, `minScore`, `hardMinScore` | `hybrid` (vector+BM25) or `vector` only. Rerank: `cross-encoder`, `lightweight`, or `none` |\n| `autoCapture` | `captureLlm`, `captureLlmModel`, `captureLlmUrl`, `captureLlmApiKey` | LLM judges capture-worthiness. Set `captureLlmUrl` for custom endpoint, `captureLlmApiKey` for auth. Falls back to heuristic if LLM unavailable |\n| `scopes` | `default`, `definitions`, `agentAccess` | Memory isolation. Define scopes and restrict agent access |\n| `sessionMemory` | `enabled`, `messageCount` | Store session summaries on `/new` command |\n| `enableManagementTools` | — | Enables `memory_stats` and `memory_list` tools |\n\n## Embedding Providers\n\nVidya supports three embedding providers. Set `embedding.provider` in your config:\n\n### Voyage AI (default)\n\n```json\n{\n  \"embedding\": {\n    \"provider\": \"voyage\",\n    \"apiKey\": \"${VOYAGE_API_KEY}\",\n    \"model\": \"voyage-4-large\"\n  }\n}\n```\n\nModels: `voyage-4-large` (1024d), `voyage-4` (1024d), `voyage-4-lite` (1024d), `voyage-3-large` (1024d), `voyage-3` (1024d), `voyage-3-lite` (512d), `voyage-code-3` (1024d)\n\nVoyage supports task-aware embeddings (`query` vs `document` input types) and cross-encoder reranking via the same API key.\n\n### OpenAI\n\n```json\n{\n  \"embedding\": {\n    \"provider\": \"openai\",\n    \"apiKey\": \"${OPENAI_API_KEY}\",\n    \"model\": \"text-embedding-3-small\"\n  }\n}\n```\n\nModels: `text-embedding-3-small` (1536d), `text-embedding-3-large` (3072d), `text-embedding-ada-002` (1536d)\n\nSupports `dimensions` parameter for truncated embeddings (e.g., `\"dimensions\": 256`). Use `baseUrl` for Azure OpenAI or compatible endpoints.\n\n### Jina\n\n```json\n{\n  \"embedding\": {\n    \"provider\": \"jina\",\n    \"apiKey\": \"${JINA_API_KEY}\",\n    \"model\": \"jina-embeddings-v3\"\n  }\n}\n```\n\nModels: `jina-embeddings-v3` (1024d), `jina-embeddings-v2-base-en` (768d)\n\nJina v3 supports task-aware embeddings (`retrieval.query` / `retrieval.passage`).\n\n> **Note:** Reranking always uses Voyage AI regardless of embedding provider. If you use OpenAI or Jina for embeddings, set `retrieval.rerank` to `\"lightweight\"` or `\"none\"` unless you also have a Voyage API key configured.\n\n## Auto-Capture (LLM Judgment)\n\nVidya can automatically capture important information from conversations. When `captureLlm` is enabled (default), an LLM evaluates each conversation turn to decide what's worth remembering.\n\n**How it works:**\n1. Heuristic pre-filter checks for trigger patterns (preferences, decisions, entities, etc.)\n2. LLM receives the conversation context and judges capture-worthiness\n3. If the LLM says store, it returns refined memory text with category and importance\n4. If LLM is unavailable, falls back to the heuristic capture\n\n**LLM endpoint:** By default, Vidya calls the OpenClaw gateway (`localhost:3000/v1/chat/completions`). Set `captureLlmUrl` to use any OpenAI-compatible endpoint.\n\n**Authentication:** External LLM APIs (OpenAI, etc.) require an API key. Set `captureLlmApiKey` to send a `Bearer` token with each request. The field supports `${ENV_VAR}` syntax. If omitted, Vidya falls back to the `OPENCLAW_LLM_API_KEY` environment variable. No auth header is sent when the key is empty (suitable for local gateways).\n\n```json\n{\n  \"captureLlm\": true,\n  \"captureLlmModel\": \"anthropic/claude-haiku-4-5-20251001\",\n  \"captureLlmUrl\": \"https://api.openai.com\",\n  \"captureLlmApiKey\": \"${OPENCLAW_LLM_API_KEY}\"\n}\n```\n\nSet `captureLlm: false` to use heuristic-only capture (no LLM calls, lower quality but zero cost).\n\n## Retrieval Pipeline\n\n```\nQuery\n ├─ Adaptive Skip Check (greetings, commands, short text → skip)\n ├─ Vector Search (LanceDB ANN, cosine distance)\n └─ BM25 Full-Text Search (LanceDB FTS index)\n      │\n      ├─ RRF Fusion (weighted combination)\n      ├─ Voyage Rerank (cross-encoder, blended 60/40 with fusion score)\n      ├─ Recency Boost (exponential decay, configurable half-life)\n      ├─ Importance Weighting (per-memory importance score)\n      ├─ Length Normalization (penalize overly long entries)\n      ├─ Time Decay (gradual score reduction for old memories, floor 0.5x)\n      ├─ Hard Min Score Filter (discard low-confidence results)\n      ├─ Noise Filter (remove denials, meta-questions, boilerplate)\n      └─ MMR Diversity (deduplicate similar results, cosine threshold 0.85)\n```\n\n## Agent Tools\n\n| Tool | Description |\n|------|-------------|\n| `memory_recall` | Search memories with hybrid retrieval. Supports scope/category filters. |\n| `memory_store` | Save information with category, importance, and scope. Deduplicates against existing memories. |\n| `memory_forget` | Delete by ID or search query. Shows candidates for ambiguous matches. |\n| `memory_update` | Update text, importance, or category in-place. Supports ID prefix matching. |\n| `memory_stats` | Memory count by scope and category, retrieval config info. *(requires `enableManagementTools`)* |\n| `memory_list` | List recent memories with scope/category/offset filters. *(requires `enableManagementTools`)* |\n\n## CLI\n\n```bash\n# List memories\nopenclaw memory list [--scope global] [--category fact] [--limit 20]\n\n# Search\nopenclaw memory search \"your query\" [--limit 5]\n\n# Stats\nopenclaw memory stats\n\n# Delete\nopenclaw memory delete <memory-id>\n\n# Export to JSONL\nopenclaw memory export [--output memories.jsonl]\n\n# Import from JSONL\nopenclaw memory import <file.jsonl>\n\n# Re-embed all memories (after model change)\nopenclaw memory reembed [--batch-size 10]\n\n# Migrate from legacy DB\nopenclaw memory migrate <old-db-path>\n```\n\n## Architecture\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for the full module dependency map.\n\n```\nindex.ts          → Plugin entry, lifecycle hooks, auto-capture/recall\nsrc/config.ts     → Config parser and validation\nsrc/embedder.ts   → Voyage AI embedding (native fetch, no SDK)\nsrc/store.ts      → LanceDB storage (vector + BM25 search)\nsrc/retriever.ts  → Hybrid retrieval, RRF fusion, reranking, post-processing\nsrc/scopes.ts     → Multi-scope access control\nsrc/tools.ts      → Agent tool definitions\nsrc/noise-filter.ts → Low-quality memory filtering\nsrc/adaptive-retrieval.ts → Skip retrieval for trivial queries\nsrc/migrate.ts    → Legacy DB migration\ncli.ts            → CLI commands\n```\n\n## Benchmarks\n\nTested with 32 integration tests on production data:\n\n| Metric | Score |\n|--------|-------|\n| Exact noun recall | 92% |\n| Semantic recall | 100% |\n| Hybrid recall | 100% |\n| Avg retrieval latency | ~400ms |\n\n## Troubleshooting\n\n### Plugin Not Found / Tools Don't Appear\n\nIf `memory_store`, `memory_recall`, etc. don't show up after installation:\n\n1. **Extension must be directly under `~/.openclaw/extensions/`** — OpenClaw scans `~/.openclaw/extensions/*.ts` and `~/.openclaw/extensions/*/index.ts`. If the plugin is nested inside a `node_modules/` subfolder, it won't be discovered.\n\n2. **Plugin manifest must exist** — Each extension needs an `openclaw.plugin.json` file at its root with a valid `id` field.\n\n3. **Config key must match manifest `id`** — The key in `plugins.entries.<id>` in your `openclaw.json` must exactly match the `id` field in the plugin's `openclaw.plugin.json`. For Vidya, this is `\"vidya\"`.\n\n4. **Run the doctor** — Use `openclaw plugins doctor` to diagnose plugin loading issues.\n\n### jiti Cache\n\nOpenClaw loads `.ts` files via [jiti](https://github.com/unjs/jiti). After modifying `.ts` source files, you must clear the transpilation cache:\n\n```bash\nrm -rf /tmp/jiti/\nopenclaw gateway restart\n```\n\nWithout this, OpenClaw may continue running stale compiled code.\n\n### Vector Dimension Lock\n\nOnce a database is created with a specific embedding model, changing models requires a new `dbPath` or re-embedding all memories via `openclaw memory reembed`.\n\n### Plugin Discovery Order\n\nOpenClaw discovers extensions in this order (first match wins):\n\n1. Paths listed in `plugins.load.paths`\n2. `<workspace>/.openclaw/extensions/*.ts` and `*/index.ts`\n3. `~/.openclaw/extensions/*.ts` and `*/index.ts`\n4. Bundled extensions\n\n## Dependencies\n\n- [`@lancedb/lancedb`](https://github.com/lancedb/lancedb) — Vector database (embedded, no server needed)\n- [`@sinclair/typebox`](https://github.com/sinclairzx81/typebox) — Tool parameter schemas\n- [Voyage AI API](https://voyageai.com/) — Embeddings and reranking (API key required)\n- No `openai` package — all API calls use native `fetch()`\n\n## License\n\n[MIT](LICENSE) © 2026 AKASHA-HQ\n","readmeFilename":"README.md"}