{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://kebab.local/wire-schema/v1/schema.schema.json", "title": "schema.v1", "description": "kebab introspection report — wire schemas, capabilities, model versions, and index stats.", "type": "object", "required": ["schema_version", "kebab_version", "wire", "capabilities", "models", "stats"], "properties": { "schema_version": { "const": "schema.v1" }, "kebab_version": { "type": "string" }, "wire": { "type": "object", "required": ["schemas"], "properties": { "schemas": { "type": "array", "items": { "type": "string", "pattern": "^[a-z_]+\\.v[0-9]+$" } } } }, "capabilities": { "type": "object", "additionalProperties": { "type": "boolean" }, "required": [ "json_mode", "ingest_progress", "ingest_cancellation", "rag_multi_turn", "search_cache", "incremental_ingest", "streaming_ask", "http_daemon", "mcp_server", "single_file_ingest", "bulk_search" ] }, "models": { "type": "object", "required": [ "parser_version", "chunker_version", "embedding_version", "prompt_template_version", "index_version", "corpus_revision" ], "properties": { "parser_version": { "type": "string" }, "chunker_version": { "type": "string" }, "embedding_version": { "type": "string" }, "prompt_template_version": { "type": "string" }, "index_version": { "type": "string" }, "corpus_revision": { "type": "integer", "minimum": 0 } } }, "stats": { "type": "object", "required": ["doc_count", "chunk_count", "asset_count", "last_ingest_at"], "properties": { "doc_count": { "type": "integer", "minimum": 0 }, "chunk_count": { "type": "integer", "minimum": 0 }, "asset_count": { "type": "integer", "minimum": 0 }, "last_ingest_at": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "media_breakdown": { "type": "object", "description": "p9-fb-37: per-media-kind doc count. 5 keys (markdown/pdf/image/audio/other), zero-padded.", "additionalProperties": { "type": "integer", "minimum": 0 } }, "lang_breakdown": { "type": "object", "description": "p9-fb-37: per-language doc count. NULL lang keyed as the literal string 'null'. Map may be empty on empty corpus.", "additionalProperties": { "type": "integer", "minimum": 0 } }, "index_bytes": { "type": "object", "description": "p9-fb-37: on-disk byte sums.", "required": ["sqlite", "lancedb"], "properties": { "sqlite": { "type": "integer", "minimum": 0 }, "lancedb": { "type": "integer", "minimum": 0 } } }, "stale_doc_count": { "type": "integer", "minimum": 0, "description": "p9-fb-37: docs whose updated_at exceeds config.search.stale_threshold_days. 0 when threshold=0." } } } } }