Skip to main content

SCHEMA_JSONC

Constant SCHEMA_JSONC 

Source
pub const SCHEMA_JSONC: &str = "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"$id\": \"settings.schema.jsonc\",\n  \"title\": \"Innate Settings\",\n  \"description\": \"~/.innate/settings.json \u{2014} Innate knowledge layer configuration. Configure with: innate install\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"properties\": {\n    \"$schema\": {\n      \"type\": \"string\",\n      \"description\": \"JSON Schema reference (auto-written by innate on save)\"\n    },\n\n    // \u{2500}\u{2500} LLM \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\n    \"llm\": {\n      \"description\": \"Generative LLM used for knowledge distillation (innate evolve). If absent, Innate falls back to heuristic distillation.\",\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"provider\", \"model_id\"],\n      \"properties\": {\n        \"provider\": {\n          \"type\": \"string\",\n          \"enum\": [\"openai\", \"anthropic\"],\n          \"description\": \"API wire format. Use \\\"openai\\\" for any OpenAI-compatible endpoint (DeepSeek, Ollama, Qwen, Mistral, \u{2026}). Use \\\"anthropic\\\" for api.anthropic.com.\"\n        },\n        \"base_url\": {\n          \"type\": \"string\",\n          \"description\": \"Override the default API base URL. Defaults: openai \u{2192} https://api.openai.com/v1 | anthropic \u{2192} https://api.anthropic.com. Trailing slash is stripped automatically.\"\n        },\n        \"model_id\": {\n          \"type\": \"string\",\n          \"description\": \"Model identifier sent verbatim in the API request body. Examples: gpt-4o-mini, claude-haiku-4-5-20251001, qwen3.7-max, deepseek-chat.\"\n        },\n        \"api_key\": {\n          \"type\": \"string\",\n          \"description\": \"API key (file stored at mode 0600). Env var override chain: INNATE_LLM_API_KEY \u{2192} OPENAI_API_KEY (openai) / ANTHROPIC_API_KEY (anthropic).\"\n        }\n      }\n    },\n\n    // \u{2500}\u{2500} Embedding \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\n    \"embedding\": {\n      \"description\": \"Embedding model for semantic recall (innate recall). If absent, Innate uses a hash-based dummy embedder (no semantic similarity).\",\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"required\": [\"model_id\"],\n      \"properties\": {\n        \"provider\": {\n          \"type\": \"string\",\n          \"enum\": [\"openai\"],\n          \"default\": \"openai\",\n          \"description\": \"Always \\\"openai\\\" \u{2014} only OpenAI-compatible embedding APIs are supported. Anthropic has no embedding API.\"\n        },\n        \"base_url\": {\n          \"type\": \"string\",\n          \"description\": \"Override the default embedding API base URL. Defaults to https://api.openai.com/v1.\"\n        },\n        \"model_id\": {\n          \"type\": \"string\",\n          \"description\": \"Embedding model ID. Examples: text-embedding-3-small, text-embedding-3-large, qwen3-embedding.\"\n        },\n        \"api_key\": {\n          \"type\": \"string\",\n          \"description\": \"API key. Env var override chain: INNATE_LLM_API_KEY \u{2192} OPENAI_API_KEY.\"\n        },\n        \"dim\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"default\": 1536,\n          \"description\": \"Embedding vector dimension \u{2014} must match what the model actually produces. Common values: text-embedding-3-small=1536, text-embedding-3-large=3072, qwen3-embedding=2560. Mismatch causes silent cosine-similarity errors.\"\n        }\n      }\n    },\n\n    // \u{2500}\u{2500} Daemon \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\n    \"daemon\": {\n      \"description\": \"Background daemon that watches session log files and triggers innate evolve after each session ends.\",\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"watch_dirs\": {\n          \"type\": \"array\",\n          \"items\": { \"type\": \"string\" },\n          \"default\": [\"~/.innate/sessions\"],\n          \"description\": \"Directories the daemon tails for .log / .json hook files. Supports ~ expansion. The default directory (~/.innate/sessions) is created automatically.\"\n        },\n        \"auto_start\": {\n          \"type\": \"boolean\",\n          \"default\": true,\n          \"description\": \"Automatically spawn the daemon process when the MCP server starts (innate mcp). The daemon is idempotent \u{2014} a second spawn is a no-op.\"\n        }\n      }\n    },\n\n    // \u{2500}\u{2500} Backup \u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\u{2500}\n    \"backup\": {\n      \"description\": \"Automatic database backup to Cloudflare R2 object storage.\",\n      \"type\": \"object\",\n      \"additionalProperties\": false,\n      \"properties\": {\n        \"enable\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"description\": \"Master switch. Backup is disabled by default \u{2014} set to true to enable.\"\n        },\n        \"r2\": {\n          \"description\": \"Cloudflare R2 credentials. Required when enable=true.\",\n          \"type\": \"object\",\n          \"additionalProperties\": false,\n          \"required\": [\"account_id\", \"bucket\"],\n          \"properties\": {\n            \"account_id\": {\n              \"type\": \"string\",\n              \"description\": \"Cloudflare account ID \u{2014} visible in the R2 dashboard URL (dash.cloudflare.com/<account_id>/r2).\"\n            },\n            \"bucket\": {\n              \"type\": \"string\",\n              \"description\": \"R2 bucket name.\"\n            },\n            \"access_key_id\": {\n              \"type\": \"string\",\n              \"description\": \"R2 API token access key ID (generated in R2 \u{2192} Manage R2 API tokens). Env override: INNATE_R2_ACCESS_KEY_ID.\"\n            },\n            \"secret_access_key\": {\n              \"type\": \"string\",\n              \"description\": \"R2 API token secret access key. Env override: INNATE_R2_SECRET_ACCESS_KEY.\"\n            },\n            \"prefix\": {\n              \"type\": \"string\",\n              \"default\": \"\",\n              \"description\": \"Optional key prefix prepended to every backup object (e.g. \\\"innate/\\\" \u{2192} innate/2024-01-01T00:00:00Z.db.gz).\"\n            }\n          }\n        },\n        \"auto_backup_interval_hours\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"default\": 24,\n          \"description\": \"Minimum hours between automatic backups. A backup is skipped if one already ran within this window. Use innate backup now --force to bypass.\"\n        },\n        \"retention_days\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"default\": 60,\n          \"description\": \"Delete remote backups older than this many days during the next backup run.\"\n        },\n        \"min_backups\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"default\": 5,\n          \"description\": \"Always retain at least this many backup files regardless of age (prevents over-pruning).\"\n        }\n      }\n    }\n  }\n}\n";