Files

1 line
11 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}