{
  "version": "2.3.0",
  "description": "Machine-readable index for XanoScript documentation (version mirrors version.json)",

  "topics": {
    "survival": {
      "file": "survival.md",
      "description": "Minimal syntax survival kit for writing valid XanoScript",
      "applyTo": [],
      "priority": 0,
      "aliases": ["minimal", "tiny", "nano", "small"]
    },
    "working": {
      "file": "working.md",
      "description": "Complete working reference for common XanoScript tasks",
      "applyTo": [],
      "priority": 0,
      "aliases": ["compact", "reference", "medium"]
    },
    "readme": {
      "file": "README.md",
      "description": "XanoScript overview, workspace structure, and quick reference",
      "applyTo": [],
      "aliases": ["overview", "intro", "index"]
    },
    "essentials": {
      "file": "essentials.md",
      "description": "Common patterns, quick reference, and common mistakes to avoid",
      "applyTo": ["**/*.xs"],
      "priority": 2,
      "aliases": ["quick", "common", "basics", "start", "cheatsheet", "quickstart", "patterns", "mistakes"]
    },
    "syntax": {
      "file": "syntax.md",
      "description": "Expressions, operators, and filters for all XanoScript code",
      "applyTo": ["**/*.xs"],
      "priority": 1,
      "aliases": ["filters", "operators", "expressions"]
    },
    "syntax/string-filters": {
      "file": "syntax/string-filters.md",
      "description": "String filters, regex, encoding, security filters, text functions",
      "applyTo": [],
      "aliases": ["string", "regex", "encoding", "security-filters"]
    },
    "syntax/array-filters": {
      "file": "syntax/array-filters.md",
      "description": "Array filters, functional operations, and array functions",
      "applyTo": [],
      "aliases": ["array", "map", "filter", "reduce", "sort"]
    },
    "syntax/functions": {
      "file": "syntax/functions.md",
      "description": "Math filters/functions, object functions, bitwise operations",
      "applyTo": [],
      "aliases": ["math", "object", "bitwise"]
    },
    "types": {
      "file": "types.md",
      "description": "Data types, input blocks, and validation",
      "applyTo": ["function/**/*.xs", "api/**/*.xs", "ai/tool/*.xs", "ai/agent/*.xs"],
      "priority": 5,
      "aliases": ["validation", "input", "data-types"]
    },
    "tables": {
      "file": "tables.md",
      "description": "Database schema definitions with indexes and relationships",
      "applyTo": ["table/*.xs"],
      "priority": 3,
      "aliases": ["schema", "fields", "indexes"]
    },
    "functions": {
      "file": "functions.md",
      "description": "Reusable function stacks with inputs and responses",
      "applyTo": ["function/**/*.xs"],
      "priority": 3,
      "aliases": ["fn", "reusable", "stack"]
    },
    "apis": {
      "file": "apis.md",
      "description": "HTTP endpoint definitions with authentication and CRUD patterns",
      "applyTo": ["api/**/*.xs"],
      "priority": 3,
      "aliases": ["endpoints", "http", "rest", "query"]
    },
    "tasks": {
      "file": "tasks.md",
      "description": "Scheduled and cron jobs",
      "applyTo": ["task/*.xs"],
      "priority": 3,
      "aliases": ["scheduled", "jobs", "cron"]
    },
    "triggers": {
      "file": "triggers.md",
      "description": "Event-driven handlers (table, realtime, workspace, agent, MCP)",
      "applyTo": ["*/trigger/*.xs", "ai/*/trigger/*.xs", "realtime/trigger/*.xs"],
      "priority": 3,
      "aliases": ["events", "hooks", "handlers"]
    },
    "database": {
      "file": "database.md",
      "description": "All db.* operations: query, get, add, edit, patch, delete",
      "applyTo": ["function/**/*.xs", "api/**/*.xs", "task/*.xs", "ai/tool/*.xs"],
      "priority": 5,
      "aliases": ["db", "crud", "query", "sql"]
    },
    "agents": {
      "file": "agents.md",
      "description": "AI agent configuration with LLM providers and tools",
      "applyTo": ["ai/agent/*.xs"],
      "priority": 3,
      "aliases": ["ai", "llm", "chatbot"]
    },
    "tools": {
      "file": "tools.md",
      "description": "AI tools for agents and MCP servers",
      "applyTo": ["ai/tool/*.xs"],
      "priority": 3,
      "aliases": ["ai-tools", "agent-tools"]
    },
    "mcp-servers": {
      "file": "mcp-servers.md",
      "description": "MCP server definitions exposing tools",
      "applyTo": ["ai/mcp_server/*.xs"],
      "priority": 3,
      "aliases": ["mcp", "model-context-protocol"]
    },
    "unit-testing": {
      "file": "unit-testing.md",
      "description": "Unit tests, mocks, and assertions within functions, APIs, and middleware",
      "applyTo": ["function/**/*.xs", "api/**/*.xs", "middleware/*.xs"],
      "priority": 7,
      "aliases": ["tests", "unit-tests", "mocks", "assertions"]
    },
    "workflow-tests": {
      "file": "workflow-tests.md",
      "description": "End-to-end workflow tests with data source selection and tags",
      "applyTo": ["workflow_test/*.xs"],
      "priority": 3,
      "aliases": ["e2e", "workflow", "integration-tests"]
    },
    "integrations": {
      "file": "integrations.md",
      "description": "External service integrations index - see sub-topics for details",
      "applyTo": [],
      "aliases": ["external", "services", "cloud"]
    },
    "integrations/cloud-storage": {
      "file": "integrations/cloud-storage.md",
      "description": "AWS S3, Azure Blob, and GCP Storage operations (external buckets, not native Xano storage)",
      "applyTo": [],
      "aliases": ["s3", "azure", "gcp", "external-storage", "bucket"]
    },
    "integrations/search": {
      "file": "integrations/search.md",
      "description": "Elasticsearch, OpenSearch, and Algolia search operations",
      "applyTo": [],
      "aliases": ["elasticsearch", "algolia", "full-text"]
    },
    "integrations/redis": {
      "file": "integrations/redis.md",
      "description": "Redis caching, rate limiting, and queue operations",
      "applyTo": [],
      "aliases": ["cache", "rate-limit", "queue"]
    },
    "integrations/external-apis": {
      "file": "integrations/external-apis.md",
      "description": "HTTP requests with api.request patterns",
      "applyTo": [],
      "aliases": ["http", "api", "request", "fetch"]
    },
    "integrations/utilities": {
      "file": "integrations/utilities.md",
      "description": "Local storage, email, zip, and Lambda utilities",
      "applyTo": [],
      "aliases": ["email", "zip", "lambda", "archive"]
    },
    "file-uploads": {
      "file": "file-uploads.md",
      "description": "Uploading files to native Xano storage: file? input, create_attachment, sign_private_url",
      "applyTo": [],
      "priority": 9,
      "aliases": ["file-upload", "upload", "uploads", "attachment", "attachments", "file", "files", "private-storage", "storage", "multipart"]
    },
    "frontend": {
      "file": "frontend.md",
      "description": "Static frontend development and deployment",
      "applyTo": ["static/**/*"],
      "priority": 3,
      "aliases": ["static", "html", "css", "web"]
    },
    "addons": {
      "file": "addons.md",
      "description": "Reusable subqueries for fetching related data",
      "applyTo": ["addon/*.xs"],
      "priority": 3,
      "aliases": ["subqueries", "relations"]
    },
    "debugging": {
      "file": "debugging.md",
      "description": "Logging, inspecting, and debugging XanoScript execution",
      "applyTo": ["**/*.xs"],
      "priority": 8,
      "aliases": ["logs", "debug", "trace"]
    },
    "performance": {
      "file": "performance.md",
      "description": "Performance optimization best practices",
      "applyTo": ["function/**/*.xs", "api/**/*.xs"],
      "priority": 7,
      "aliases": ["optimization", "speed", "caching"]
    },
    "realtime": {
      "file": "realtime.md",
      "description": "Real-time channels and events for push updates",
      "applyTo": ["realtime/channel/*.xs", "realtime/trigger/*.xs"],
      "priority": 3,
      "aliases": ["websocket", "channels", "pubsub"]
    },
    "security": {
      "file": "security.md",
      "description": "Security best practices for authentication and authorization",
      "applyTo": ["function/**/*.xs", "api/**/*.xs"],
      "priority": 6,
      "aliases": ["auth", "authorization", "permissions"]
    },
    "streaming": {
      "file": "streaming.md",
      "description": "Streaming data from files, requests, and responses",
      "applyTo": [],
      "aliases": ["stream", "large-files"]
    },
    "middleware": {
      "file": "middleware.md",
      "description": "Request/response interceptors for functions, queries, tasks, and tools",
      "applyTo": ["middleware/*.xs"],
      "priority": 3,
      "aliases": ["interceptors", "hooks"]
    },
    "branch": {
      "file": "branch.md",
      "description": "Branch-level settings: middleware, history retention, visual styling",
      "applyTo": ["branch.xs"],
      "priority": 3,
      "aliases": ["settings", "config"]
    },
    "workspace": {
      "file": "workspace.md",
      "description": "Workspace-level settings: environment variables, preferences, realtime",
      "applyTo": ["workspace/**/*.xs"],
      "priority": 3,
      "aliases": ["env", "environment", "preferences"]
    }
  },

  "filters": {
    "trim": { "file": "syntax.md", "category": "string" },
    "ltrim": { "file": "syntax.md", "category": "string" },
    "rtrim": { "file": "syntax.md", "category": "string" },
    "to_lower": { "file": "syntax.md", "category": "string" },
    "to_upper": { "file": "syntax.md", "category": "string" },
    "capitalize": { "file": "syntax.md", "category": "string" },
    "substr": { "file": "syntax.md", "category": "string" },
    "split": { "file": "syntax.md", "category": "string" },
    "replace": { "file": "syntax.md", "category": "string" },
    "contains": { "file": "syntax.md", "category": "string" },
    "strlen": { "file": "syntax.md", "category": "string" },
    "first": { "file": "syntax.md", "category": "array" },
    "last": { "file": "syntax.md", "category": "array" },
    "count": { "file": "syntax.md", "category": "array" },
    "map": { "file": "syntax.md", "category": "array" },
    "filter": { "file": "syntax.md", "category": "array" },
    "find": { "file": "syntax.md", "category": "array" },
    "reduce": { "file": "syntax.md", "category": "array" },
    "push": { "file": "syntax.md", "category": "array" },
    "pop": { "file": "syntax.md", "category": "array" },
    "join": { "file": "syntax.md", "category": "array" },
    "sort": { "file": "syntax.md", "category": "array" },
    "unique": { "file": "syntax.md", "category": "array" },
    "get": { "file": "syntax.md", "category": "object" },
    "set": { "file": "syntax.md", "category": "object" },
    "has": { "file": "syntax.md", "category": "object" },
    "keys": { "file": "syntax.md", "category": "object" },
    "values": { "file": "syntax.md", "category": "object" },
    "to_int": { "file": "syntax.md", "category": "type" },
    "to_text": { "file": "syntax.md", "category": "type" },
    "to_bool": { "file": "syntax.md", "category": "type" },
    "to_decimal": { "file": "syntax.md", "category": "type" },
    "json_encode": { "file": "syntax.md", "category": "type" },
    "json_decode": { "file": "syntax.md", "category": "type" },
    "round": { "file": "syntax.md", "category": "math" },
    "abs": { "file": "syntax.md", "category": "math" },
    "ceil": { "file": "syntax.md", "category": "math" },
    "floor": { "file": "syntax.md", "category": "math" },
    "add": { "file": "syntax.md", "category": "math" },
    "subtract": { "file": "syntax.md", "category": "math" }
  },

  "constructs": {
    "table": { "file": "tables.md", "triggers": "triggers.md" },
    "function": { "file": "functions.md", "testing": "unit-testing.md" },
    "query": { "file": "apis.md", "auth": "security.md" },
    "api_group": { "file": "apis.md" },
    "task": { "file": "tasks.md" },
    "agent": { "file": "agents.md", "tools": "tools.md" },
    "tool": { "file": "tools.md", "mcp": "mcp-servers.md" },
    "mcp_server": { "file": "mcp-servers.md", "triggers": "triggers.md" },
    "table_trigger": { "file": "triggers.md", "section": "table-trigger" },
    "realtime_trigger": { "file": "triggers.md", "section": "realtime-trigger" },
    "workspace_trigger": { "file": "triggers.md", "section": "workspace-trigger" },
    "agent_trigger": { "file": "triggers.md", "section": "agent-trigger" },
    "mcp_server_trigger": { "file": "triggers.md", "section": "mcp-server-trigger" },
    "addon": { "file": "addons.md" },
    "middleware": { "file": "middleware.md" },
    "realtime_channel": { "file": "realtime.md" }
  },

  "operations": {
    "db.query": { "file": "database.md" },
    "db.get": { "file": "database.md" },
    "db.has": { "file": "database.md" },
    "db.add": { "file": "database.md" },
    "db.edit": { "file": "database.md" },
    "db.patch": { "file": "database.md" },
    "db.del": { "file": "database.md" },
    "db.truncate": { "file": "database.md" },
    "api.request": { "file": "integrations/external-apis.md" },
    "function.run": { "file": "functions.md" },
    "redis.get": { "file": "integrations/redis.md" },
    "redis.set": { "file": "integrations/redis.md" },
    "array.push": { "file": "syntax/array-filters.md" },
    "array.pop": { "file": "syntax/array-filters.md" },
    "array.shift": { "file": "syntax/array-filters.md" },
    "array.unshift": { "file": "syntax/array-filters.md" },
    "array.merge": { "file": "syntax/array-filters.md" },
    "array.find": { "file": "syntax/array-filters.md" },
    "array.find_index": { "file": "syntax/array-filters.md" },
    "array.has": { "file": "syntax/array-filters.md" },
    "array.every": { "file": "syntax/array-filters.md" },
    "array.filter": { "file": "syntax/array-filters.md" },
    "array.filter_count": { "file": "syntax/array-filters.md" },
    "array.map": { "file": "syntax/array-filters.md" },
    "array.partition": { "file": "syntax/array-filters.md" },
    "array.group_by": { "file": "syntax/array-filters.md" },
    "array.union": { "file": "syntax/array-filters.md" },
    "array.difference": { "file": "syntax/array-filters.md" },
    "array.intersection": { "file": "syntax/array-filters.md" },
    "text.contains": { "file": "syntax/string-filters.md" },
    "text.icontains": { "file": "syntax/string-filters.md" },
    "text.starts_with": { "file": "syntax/string-filters.md" },
    "text.istarts_with": { "file": "syntax/string-filters.md" },
    "text.ends_with": { "file": "syntax/string-filters.md" },
    "text.iends_with": { "file": "syntax/string-filters.md" },
    "text.trim": { "file": "syntax/string-filters.md" },
    "text.ltrim": { "file": "syntax/string-filters.md" },
    "text.rtrim": { "file": "syntax/string-filters.md" },
    "text.append": { "file": "syntax/string-filters.md" },
    "text.prepend": { "file": "syntax/string-filters.md" },
    "math.add": { "file": "syntax/functions.md" },
    "math.sub": { "file": "syntax/functions.md" },
    "math.mul": { "file": "syntax/functions.md" },
    "math.div": { "file": "syntax/functions.md" },
    "math.bitwise.and": { "file": "syntax/functions.md" },
    "math.bitwise.or": { "file": "syntax/functions.md" },
    "math.bitwise.xor": { "file": "syntax/functions.md" },
    "object.keys": { "file": "syntax/functions.md" },
    "object.values": { "file": "syntax/functions.md" },
    "object.entries": { "file": "syntax/functions.md" },
    "redis.remove": { "file": "integrations/redis.md" },
    "redis.keys": { "file": "integrations/redis.md" },
    "security.jwe_encode": { "file": "security.md" },
    "security.jwe_decode": { "file": "security.md" },
    "security.create_curve_key": { "file": "security.md" },
    "security.create_secret_key": { "file": "security.md" },
    "util.set_header": { "file": "integrations/utilities.md" },
    "util.get_env": { "file": "integrations/utilities.md" },
    "util.get_all_input": { "file": "integrations/utilities.md" },
    "util.get_input": { "file": "integrations/utilities.md" },
    "storage.create_attachment": { "file": "file-uploads.md" },
    "storage.create_image": { "file": "file-uploads.md" },
    "storage.sign_private_url": { "file": "file-uploads.md" },
    "storage.create_file_resource": { "file": "integrations/utilities.md" },
    "storage.read_file_resource": { "file": "integrations/utilities.md" },
    "storage.delete_file": { "file": "integrations/utilities.md" },
    "cloud.aws.s3.upload_file": { "file": "integrations/cloud-storage.md" },
    "cloud.aws.s3.read_file": { "file": "integrations/cloud-storage.md" },
    "cloud.aws.s3.sign_url": { "file": "integrations/cloud-storage.md" },
    "cloud.aws.s3.list_directory": { "file": "integrations/cloud-storage.md" },
    "cloud.aws.s3.delete_file": { "file": "integrations/cloud-storage.md" },
    "cloud.aws.s3.get_file_info": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.upload_file": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.read_file": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.sign_url": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.list_directory": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.delete_file": { "file": "integrations/cloud-storage.md" },
    "cloud.azure.storage.get_file_info": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.upload_file": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.read_file": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.sign_url": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.list_directory": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.delete_file": { "file": "integrations/cloud-storage.md" },
    "cloud.google.storage.get_file_info": { "file": "integrations/cloud-storage.md" },
    "cloud.elasticsearch.request": { "file": "integrations/search.md" },
    "cloud.aws.opensearch.request": { "file": "integrations/search.md" },
    "cloud.algolia.request": { "file": "integrations/search.md" }
  },

  "tasks": {
    "authentication": ["security.md", "apis.md"],
    "authorization": ["security.md"],
    "rate_limiting": ["security.md", "integrations/redis.md"],
    "error_handling": ["syntax.md", "essentials.md"],
    "pagination": ["database.md", "apis.md"],
    "file_upload": ["file-uploads.md", "integrations/cloud-storage.md", "streaming.md"],
    "caching": ["performance.md", "integrations/redis.md"],
    "search": ["integrations/search.md"],
    "email": ["integrations/utilities.md"],
    "scheduled_jobs": ["tasks.md"],
    "realtime": ["realtime.md", "triggers.md"],
    "ai_agents": ["agents.md", "tools.md", "mcp-servers.md"]
  }
}
