1 line
11 KiB
JSON
1 line
11 KiB
JSON
{"repo": "barrelc/kimi-mneme", "files": {"docs/CONFIG.md": {"c288532cc759da53083a05cb8575e18f7fa69517": {"t": 1785674075.6923666, "n": 10395, "h": "d5f6c0d5b6208f37", "c": "# Configuration\n\n## Configuration File\n\nDefault location: `~/.kimi/mneme/config.json`\n\nCreated automatically on first run with sensible defaults.\n\n## Full Configuration Reference\n\n```json\n{\n \"db\": {\n \"path\": \"~/.kimi/mneme/mneme.db\",\n \"backup_enabled\": true,\n \"backup_interval_days\": 7\n },\n \"vector\": {\n \"path\": \"~/.kimi/mneme/vectors\",\n \"embedding_model\": \"sentence-transformers/all-MiniLM-L6-v2\",\n \"chunk_size\": 512,\n \"chunk_overlap\": 50\n },\n \"llm\": {\n \"provider\": \"kimi\",\n \"model\": \"kimi-k2.5\",\n \"base_url\": null,\n \"api_key\": null,\n \"timeout\": 60.0,\n \"options\": {}\n },\n \"compression\": {\n \"enabled\": true,\n \"provider\": null,\n \"model\": null,\n \"batch_size\": 10,\n \"min_observations\": 5,\n \"trigger\": \"session_end\"\n },\n \"structuring\": {\n \"enabled\": true,\n \"provider\": null,\n \"model\": null,\n \"fallback_to_heuristic\": true,\n \"heuristic_threshold_chars\": 300,\n \"batch_size\": 5,\n \"worker_interval_seconds\": 5,\n \"max_retry_count\": 3\n },\n \"injection\": {\n \"enabled\": true,\n \"max_tokens\": 1500,\n \"min_relevance\": 0.7,\n \"max_results\": 2,\n \"recency_boost_days\": 7,\n \"format\": \"markdown\",\n \"use_vector\": false\n },\n \"server\": {\n \"enabled\": true,\n \"auto_start\": true,\n \"host\": \"127.0.0.1\",\n \"port\": 37777,\n \"cors_origins\": [\"http://localhost:37777\", \"http://127.0.0.1:37777\"],\n \"loop\": \"auto\"\n },\n \"mcp\": {\n \"enabled\": true,\n \"auto_start\": false,\n \"transport\": \"stdio\",\n \"port\": 37778\n },\n \"privacy\": {\n \"exclude_tags\": [\"<private>\", \"<secret>\"],\n \"exclude_patterns\": [\n \"*.env*\",\n \"*.env.local\",\n \"*secret*\",\n \"*password*\",\n \"*token*\",\n \"*api_key*\",\n \"*private_key*\"\n ],\n \"max_content_length\": 100000\n },\n \"hooks\": {\n \"fire_and_forget\": true,\n \"timeout_seconds\": 30,\n \"batch_writes\": true,\n \"batch_interval_seconds\": 5\n },\n \"logging\": {\n \"level\": \"INFO\",\n \"file\": \"~/.kimi/mneme/mneme.log\",\n \"max_size_mb\": 10,\n \"backup_count\": 5\n }\n}\n```\n\n## Configuration Sections\n\n### Database\n\n> **Note:** `sqlite3` CLI is required for database inspection and internal operations. Install via your system package manager (`apt install sqlite3`, `brew install sqlite3`, `winget install SQLite.SQLite`, etc.).\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `db.path` | string | `~/.kimi/mneme/mneme.db` | SQLite database file path |\n| `db.backup_enabled` | boolean | `true` | Enable automatic backups |\n| `db.backup_interval_days` | integer | `7` | Days between backups |\n\n### Vector Store\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `vector.path` | string | `~/.kimi/mneme/vectors` | Vector store directory (embeddings cache) |\n| `vector.embedding_model` | string | `sentence-transformers/all-MiniLM-L6-v2` | Model for embeddings |\n| `vector.chunk_size` | integer | `512` | Text chunk size for embedding |\n| `vector.chunk_overlap` | integer | `50` | Overlap between chunks |\n\n### LLM (Global Settings)\n\nThe `llm` section defines the default provider for all AI-powered features (structuring, compression). Individual sections (`compression`, `structuring`) can override these with their own `provider` and `model`.\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `llm.provider` | string | `kimi` | LLM provider: `kimi`, `ollama`, `openai_compatible` |\n| `llm.model` | string | `kimi-k2.5` | Model name (provider-specific) |\n| `llm.base_url` | string | `null` | Custom base URL for the API |\n| `llm.api_key` | string | `null` | API key or token |\n| `llm.timeout` | float | `60.0` | Request timeout in seconds |\n| `llm.options` | object | `{}` | Provider-specific extra options |\n\n#### Provider Examples\n\n**Kimi / Moonshot** (default — tries OAuth first, falls back to API key):\n\nWhen you log in to Kimi CLI via `kimi login`, mneme will automatically try to reuse that OAuth token. However, the Kimi Code API (`api.kimi.com/coding/v1`) is restricted to official Coding Agents and may return **403 Forbidden**. If that happens, mneme falls back to heuristic structuring (rule-based, no AI).\n\nTo enable full AI structuring, provide a **Moonshot API key** from https://platform.moonshot.cn:\n\n```bash\nexport MOONSHOT_API_KEY=\"sk-your-key-here\"\n```\n\nOr configure explicitly in `config.json`:\n```json\n{\n \"llm\": {\n \"provider\": \"openai_compatible\",\n \"model\": \"moonshot-v1-8k\",\n \"base_url\": \"https://api.moonshot.cn/v1\",\n \"api_key\": \"sk-your-key-here\"\n }\n}\n```\n\n**Ollama** (local, free, no API key needed):\n```json\n{\n \"llm\": {\n \"provider\": \"ollama\",\n \"model\": \"llama3.2\",\n \"base_url\": \"http://localhost:11434\"\n }\n}\n```\n\n**OpenAI-compatible** (vLLM, LM Studio, etc.):\n```json\n{\n \"llm\": {\n \"provider\": \"openai_compatible\",\n \"model\": \"qwen2.5-coder\",\n \"base_url\": \"http://localhost:8000/v1\",\n \"api_key\": \"sk-optional\"\n }\n}\n```\n\n### Compression (AI Summarization)\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `compression.enabled` | boolean | `true` | Enable AI compression |\n| `compression.provider` | string | `null` | Override `llm.provider` (null = use global) |\n| `compression.model` | string | `null` | Override `llm.model` (null = use global) |\n| `compression.batch_size` | integer | `10` | Observations per batch |\n| `compression.min_observations` | integer | `5` | Min observations to compress |\n| `compression.trigger` | string | `session_end` | When to compress: `session_end`, `threshold`, `manual` |\n\n### Structuring\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `structuring.enabled` | boolean | `true` | Enable AI structuring |\n| `structuring.provider` | string | `null` | Override `llm.provider` (null = use global) |\n| `structuring.model` | string | `null` | Override `llm.model` (null = use global) |\n| `structuring.fallback_to_heuristic` | boolean | `true` | Use heuristic when AI fails |\n| `structuring.heuristic_threshold_chars` | integer | `300` | Use heuristic for short outputs |\n| `structuring.batch_size` | integer | `5` | Observations per batch |\n| `structuring.worker_interval_seconds` | integer | `5` | Worker poll interval |\n| `structuring.max_retry_count` | integer | `3` | Max retries per observation |\n\n### Context Injection\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `injection.enabled` | boolean | `true` | Inject past context at session start |\n| `injection.max_tokens` | integer | `1500` | Max tokens to inject |\n| `injection.min_relevance` | float | `0.7` | Minimum relevance score (0.0–1.0) |\n| `injection.max_results` | integer | `2` | Max sessions to inject |\n| `injection.recency_boost_days` | integer | `7` | Only consider sessions within N days |\n| `injection.format` | string | `markdown` | Output format: `markdown`, `json`, `plain` |\n| `injection.use_vector` | boolean | `false` | Use vector search for relevance scoring |\n\n### Web Server\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `server.enabled` | boolean | `true` | Start web server |\n| `server.auto_start` | boolean | `true` | Auto-start server on launch |\n| `server.host` | string | `127.0.0.1` | Bind address |\n| `server.port` | integer | `37777` | Port number |\n| `server.cors_origins` | array | `[\"http://localhost:37777\", \"http://127.0.0.1:37777\"]` | Allowed CORS origins |\n\n| `server.loop` | string | `auto` | Event loop: `auto`, `asyncio`, `winloop` (Windows only) |\n\n### MCP Server\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `mcp.enabled` | boolean | `true` | Enable MCP server |\n| `mcp.auto_start` | boolean | `false` | Auto-start MCP with FastAPI |\n| `mcp.transport` | string | `stdio` | Transport: `stdio` or `sse` |\n| `mcp.port` | integer | `37778` | Port for SSE transport |\n\n### Privacy\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `privacy.exclude_tags` | array | `[\"<private>\", \"<secret>\"]` | HTML-like tags to exclude |\n| `privacy.exclude_patterns` | array | `[\"*.env*\", ...]` | Glob patterns to exclude |\n| `privacy.max_content_length` | integer | `100000` | Max characters to store |\n\n### Hooks\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `hooks.fire_and_forget` | boolean | `true` | Non-blocking hook execution |\n| `hooks.timeout_seconds` | integer | `30` | Hook timeout |\n| `hooks.batch_writes` | boolean | `true` | Batch DB writes |\n| `hooks.batch_interval_seconds` | integer | `5` | Batch flush interval |\n\n### Logging\n\n| Key | Type | Default | Description |\n|-----|------|---------|-------------|\n| `logging.level` | string | `INFO` | Log level: DEBUG, INFO, WARNING, ERROR |\n| `logging.file` | string | `~/.kimi/mneme/mneme.log` | Log file path |\n| `logging.max_size_mb` | integer | `10` | Max log file size |\n| `logging.backup_count` | integer | `5` | Number of backup files |\n\n## Environment Variables\n\nAll config values can be overridden via environment variables:\n\n```bash\n# Database\nexport MNEME_DB_PATH=\"/custom/path/mneme.db\"\n\n# Vector store\n# Vector store (embeddings cache, optional)\n# export MNEME_VECTOR_PATH=\"/custom/path/vectors\"\n\n# LLM provider\nexport MNEME_LLM_PROVIDER=\"ollama\"\nexport MNEME_LLM_MODEL=\"llama3.2\"\nexport MNEME_LLM_BASE_URL=\"http://localhost:11434\"\nexport MNEME_LLM_API_KEY=\"sk-...\"\n\n# Moonshot API key (alternative to Kimi OAuth)\nexport MOONSHOT_API_KEY=\"sk-...\"\n\n# Structuring\nexport MNEME_STRUCTURING_ENABLED=\"true\"\n\n# Server\nexport MNEME_SERVER_PORT=\"37777\"\nexport MNEME_SERVER_HOST=\"0.0.0.0\"\n\n# Logging\nexport MNEME_LOG_LEVEL=\"DEBUG\"\n```\n\nEnvironment variables take precedence over config file values.\n\n## Per-Project Configuration\n\nCreate `.mneme.json` in project root for project-specific settings:\n\n```json\n{\n \"llm\": {\n \"provider\": \"ollama\",\n \"model\": \"codellama\"\n },\n \"privacy\": {\n \"exclude_patterns\": [\"*.local.env\", \"secrets/\"]\n },\n \"injection\": {\n \"max_tokens\": 1000,\n \"recency_boost_days\": 14,\n \"include_patterns\": true\n },\n \"compression\": {\n \"min_observations\": 3\n }\n}\n```\n\nProject config merges with global config (project values override global). The file is searched in:\n1. Current working directory\n2. Parent directories (up to filesystem root)\n\nThis makes it work automatically when you `cd` into a project.\n"}}}} |