{
  "openapi": "3.1.0",
  "info": {
    "title": "Bobcorn Public Metadata API",
    "version": "1.12.4",
    "summary": "Read-only static metadata endpoints for Bobcorn.",
    "description": "Bobcorn is a local-first desktop app. This OpenAPI document describes public website metadata endpoints only. These endpoints do not provide hosted project storage, OAuth, user accounts, remote export jobs, or webhooks."
  },
  "servers": [
    {
      "url": "https://bobcorn.caldis.me",
      "description": "Bobcorn public website"
    }
  ],
  "tags": [
    {
      "name": "Discovery",
      "description": "Agent and crawler discovery files"
    },
    {
      "name": "Metadata",
      "description": "Release, changelog, and documentation metadata"
    },
    {
      "name": "Access",
      "description": "Authentication, rate-limit, error, and status metadata for static endpoints"
    }
  ],
  "paths": {
    "/release.json": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Get latest Bobcorn release metadata",
        "operationId": "getReleaseMetadata",
        "responses": {
          "200": {
            "description": "Current release metadata and platform download URLs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseMetadata"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the current Bobcorn version, GitHub release URLs, and platform download URLs. This endpoint is static, public, read-only, and does not require authentication."
      }
    },
    "/changelog.json": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Get Bobcorn changelog entries",
        "operationId": "getChangelog",
        "responses": {
          "200": {
            "description": "Localized changelog entries.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ChangelogEntry"
                  }
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns localized Bobcorn release notes. The response is an array of release entries ordered by newest release first."
      }
    },
    "/index.md": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Get the Bobcorn homepage as Markdown",
        "operationId": "getHomepageMarkdown",
        "responses": {
          "200": {
            "description": "Markdown homepage.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the canonical homepage content as Markdown for agents that prefer text over HTML."
      }
    },
    "/llms.txt": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get concise Bobcorn agent context",
        "operationId": "getLlmsTxt",
        "responses": {
          "200": {
            "description": "Concise agent-readable context.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns concise product context, use cases, constraints, and canonical resource links for AI agents."
      }
    },
    "/llms-full.txt": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get full Bobcorn agent context",
        "operationId": "getLlmsFullTxt",
        "responses": {
          "200": {
            "description": "Full product and integration context for agents.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the full product and integration context in one request for AI agents that should avoid crawling multiple pages."
      }
    },
    "/.well-known/agent.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get Bobcorn agent discovery metadata",
        "operationId": "getAgentDiscovery",
        "responses": {
          "200": {
            "description": "Agent discovery metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentDiscovery"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the Bobcorn agent discovery document with product identity, documentation links, unauthenticated access model, capabilities, and limitations."
      }
    },
    "/.well-known/agent-card.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get Bobcorn A2A agent card",
        "operationId": "getAgentCard",
        "responses": {
          "200": {
            "description": "A2A agent card.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentCard"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the Bobcorn Agent-to-Agent card for pre-connection capability discovery."
      }
    },
    "/.well-known/ai-plugin.json": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get Bobcorn legacy AI plugin descriptor",
        "operationId": "getAiPluginDescriptor",
        "responses": {
          "200": {
            "description": "Legacy AI plugin descriptor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiPluginDescriptor"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns the legacy AI plugin descriptor for tools that still inspect ai-plugin.json manifests."
      }
    },
    "/api/mcp.html": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "summary": "Get Bobcorn MCP status page",
        "operationId": "getMcpStatusPage",
        "responses": {
          "200": {
            "description": "Human-readable MCP availability status and alternatives.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        },
        "description": "Returns a human-readable page explaining that Bobcorn does not currently provide a hosted MCP server and listing supported alternatives."
      }
    },
    "/api/auth.json": {
      "get": {
        "tags": [
          "Access"
        ],
        "summary": "Get Bobcorn public metadata auth model",
        "operationId": "getAuthModel",
        "description": "Returns the machine-readable no-auth access model for Bobcorn public website metadata. These static endpoints do not use API keys, OAuth, cookies, or user accounts.",
        "responses": {
          "200": {
            "description": "Get Bobcorn public metadata auth model.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthModel"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        }
      }
    },
    "/api/rate-limits.json": {
      "get": {
        "tags": [
          "Access"
        ],
        "summary": "Get Bobcorn public metadata rate-limit notes",
        "operationId": "getRateLimitNotes",
        "description": "Returns rate-limit notes for Bobcorn public website metadata. Bobcorn does not operate a hosted account API with product-level quotas.",
        "responses": {
          "200": {
            "description": "Get Bobcorn public metadata rate-limit notes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitNotes"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        }
      }
    },
    "/api/errors.json": {
      "get": {
        "tags": [
          "Access"
        ],
        "summary": "Get Bobcorn static metadata error model",
        "operationId": "getErrorModel",
        "description": "Returns known static-site error cases and recovery guidance for agents.",
        "responses": {
          "200": {
            "description": "Get Bobcorn static metadata error model.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorModel"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        }
      }
    },
    "/status.json": {
      "get": {
        "tags": [
          "Metadata"
        ],
        "summary": "Get Bobcorn public website status",
        "operationId": "getPublicWebsiteStatus",
        "description": "Returns public website metadata status. It does not describe hosted project API health because that surface is not provided.",
        "responses": {
          "200": {
            "description": "Get Bobcorn public website status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected static-site response. GitHub Pages may return an HTML error page for missing static files.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string",
                  "description": "GitHub Pages HTML error response."
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {},
    "schemas": {
      "ReleaseMetadata": {
        "type": "object",
        "required": [
          "version",
          "tag",
          "repo",
          "latestUrl",
          "downloads"
        ],
        "properties": {
          "version": {
            "type": "string",
            "description": "Semantic version of the current Bobcorn release.",
            "examples": [
              "1.12.4"
            ]
          },
          "tag": {
            "type": "string",
            "description": "Git tag for the current release.",
            "examples": [
              "v1.12.4"
            ]
          },
          "repo": {
            "type": "string",
            "description": "GitHub repository in owner/name form.",
            "examples": [
              "Caldis/bobcorn"
            ]
          },
          "releasesUrl": {
            "type": "string",
            "format": "uri",
            "description": "GitHub Releases page."
          },
          "latestUrl": {
            "type": "string",
            "format": "uri",
            "description": "GitHub latest release URL."
          },
          "releaseUrl": {
            "type": "string",
            "format": "uri",
            "description": "Specific GitHub release URL for this version."
          },
          "downloads": {
            "type": "object",
            "description": "Platform-specific download URLs keyed by platform identifier.",
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          }
        },
        "description": "Current Bobcorn release metadata and platform download links."
      },
      "ChangelogEntry": {
        "type": "object",
        "required": [
          "version",
          "date",
          "changes"
        ],
        "properties": {
          "version": {
            "type": "string",
            "description": "Release version."
          },
          "date": {
            "type": "string",
            "description": "Release date in YYYY-MM-DD format."
          },
          "summary": {
            "type": "object",
            "description": "Localized one-line release summaries.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "changes": {
            "type": "object",
            "description": "Localized release note bullet lists.",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "description": "One localized Bobcorn changelog entry."
      },
      "AgentDiscovery": {
        "type": "object",
        "required": [
          "name",
          "url",
          "openapi_url",
          "auth"
        ],
        "properties": {
          "schema_version": {
            "type": "string",
            "description": "Discovery document schema version."
          },
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "description": {
            "type": "string",
            "description": "Short product description."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical product homepage."
          },
          "repository": {
            "type": "string",
            "format": "uri",
            "description": "Source code repository."
          },
          "documentation_url": {
            "type": "string",
            "format": "uri",
            "description": "Developer portal URL."
          },
          "openapi_url": {
            "type": "string",
            "format": "uri",
            "description": "OpenAPI service description URL."
          },
          "auth": {
            "type": "object",
            "description": "Authentication model for public metadata endpoints."
          },
          "capabilities": {
            "type": "array",
            "description": "Current agent-readable capabilities.",
            "items": {
              "type": "string"
            }
          },
          "limitations": {
            "type": "array",
            "description": "Explicit product limitations agents must not infer around.",
            "items": {
              "type": "string"
            }
          },
          "contact": {
            "type": "object",
            "description": "Public support and maintainer links."
          }
        },
        "description": "Bobcorn agent discovery metadata."
      },
      "McpDiscovery": {
        "type": "object",
        "required": [
          "name",
          "status",
          "alternatives"
        ],
        "properties": {
          "schema_version": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "product": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "status": {
            "type": "string",
            "enum": [
              "available",
              "not_provided"
            ]
          },
          "description": {
            "type": "string"
          },
          "alternatives": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "AgentCard": {
        "type": "object",
        "description": "Agent-to-Agent capability card for Bobcorn.",
        "required": [
          "schemaVersion",
          "name",
          "description",
          "url",
          "version",
          "skills"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "description": "A2A card schema version."
          },
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "description": {
            "type": "string",
            "description": "Agent-readable product summary."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical product homepage."
          },
          "provider": {
            "type": "object",
            "description": "Provider organization metadata."
          },
          "version": {
            "type": "string",
            "description": "Bobcorn release version described by this card."
          },
          "documentationUrl": {
            "type": "string",
            "format": "uri",
            "description": "Developer portal URL."
          },
          "capabilities": {
            "type": "object",
            "description": "Boolean A2A capability flags."
          },
          "authentication": {
            "type": "object",
            "description": "Authentication scheme notes."
          },
          "defaultInputModes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Accepted input MIME types."
          },
          "defaultOutputModes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Returned output MIME types."
          },
          "skills": {
            "type": "array",
            "description": "Agent skills exposed by this card.",
            "items": {
              "$ref": "#/components/schemas/AgentCardSkill"
            }
          }
        }
      },
      "AgentCardSkill": {
        "type": "object",
        "description": "One documented skill in the Bobcorn A2A card.",
        "required": [
          "id",
          "name",
          "description"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Stable skill identifier."
          },
          "name": {
            "type": "string",
            "description": "Human-readable skill name."
          },
          "description": {
            "type": "string",
            "description": "What the skill helps an agent do."
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Search tags for the skill."
          },
          "examples": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Example user questions for this skill."
          }
        }
      },
      "AiPluginDescriptor": {
        "type": "object",
        "description": "Legacy ai-plugin.json descriptor for Bobcorn public metadata.",
        "required": [
          "schema_version",
          "name_for_human",
          "name_for_model",
          "description_for_model",
          "auth",
          "api"
        ],
        "properties": {
          "schema_version": {
            "type": "string",
            "description": "Plugin manifest schema version."
          },
          "name_for_human": {
            "type": "string",
            "description": "Human-readable product name."
          },
          "name_for_model": {
            "type": "string",
            "description": "Model-facing product identifier."
          },
          "description_for_human": {
            "type": "string",
            "description": "Human-readable description."
          },
          "description_for_model": {
            "type": "string",
            "description": "Model-facing usage description."
          },
          "auth": {
            "type": "object",
            "description": "Authentication requirements. Bobcorn public metadata uses none."
          },
          "api": {
            "type": "object",
            "description": "OpenAPI service description pointer."
          },
          "logo_url": {
            "type": "string",
            "format": "uri",
            "description": "Product icon URL."
          },
          "contact_email": {
            "type": "string",
            "description": "Contact email listed for legacy plugin clients."
          },
          "legal_info_url": {
            "type": "string",
            "format": "uri",
            "description": "Legal or privacy page URL."
          }
        }
      },
      "AuthModel": {
        "type": "object",
        "description": "No-auth access model for Bobcorn public website metadata.",
        "required": [
          "name",
          "authentication",
          "appliesTo"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Document name."
          },
          "authentication": {
            "type": "object",
            "description": "Authentication requirements for static metadata endpoints.",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "none"
                ],
                "description": "Authentication type."
              },
              "apiKeys": {
                "type": "boolean",
                "description": "Whether API keys are required."
              },
              "oauth": {
                "type": "boolean",
                "description": "Whether OAuth is provided or required."
              },
              "cookies": {
                "type": "boolean",
                "description": "Whether session cookies are required."
              },
              "userAccounts": {
                "type": "boolean",
                "description": "Whether user accounts are provided."
              },
              "notes": {
                "type": "string",
                "description": "Human-readable access notes."
              }
            }
          },
          "appliesTo": {
            "type": "array",
            "description": "Static paths covered by this access model.",
            "items": {
              "type": "string"
            }
          },
          "localProjectAccess": {
            "type": "object",
            "description": "Local project-file access requirements."
          }
        }
      },
      "RateLimitNotes": {
        "type": "object",
        "description": "Rate-limit notes for Bobcorn public website metadata.",
        "required": [
          "name",
          "productRateLimits",
          "rateLimitHeaders",
          "notes"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "productRateLimits": {
            "type": "boolean",
            "description": "Whether Bobcorn operates product-level API quotas."
          },
          "rateLimitHeaders": {
            "type": "boolean",
            "description": "Whether Bobcorn static files return X-RateLimit headers."
          },
          "notes": {
            "type": "string"
          },
          "agentGuidance": {
            "type": "string"
          }
        }
      },
      "ErrorModel": {
        "type": "object",
        "description": "Known static-site errors and recovery guidance.",
        "required": [
          "name",
          "hostedApi",
          "structuredApiErrors",
          "knownErrors"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "hostedApi": {
            "type": "boolean",
            "description": "Whether Bobcorn operates a hosted JSON API for project actions."
          },
          "structuredApiErrors": {
            "type": "boolean",
            "description": "Whether hosted API JSON errors exist."
          },
          "notes": {
            "type": "string"
          },
          "knownErrors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/KnownError"
            }
          }
        }
      },
      "KnownError": {
        "type": "object",
        "description": "One documented static-site error case.",
        "required": [
          "status",
          "code",
          "message",
          "resolution"
        ],
        "properties": {
          "status": {
            "type": "integer",
            "description": "HTTP status code."
          },
          "code": {
            "type": "string",
            "description": "Stable error code."
          },
          "message": {
            "type": "string",
            "description": "Human-readable error message."
          },
          "resolution": {
            "type": "string",
            "description": "Agent recovery guidance."
          }
        }
      },
      "Status": {
        "type": "object",
        "description": "Status of Bobcorn public website metadata surfaces.",
        "required": [
          "status",
          "name",
          "updated",
          "components"
        ],
        "properties": {
          "status": {
            "type": "string",
            "description": "Overall status."
          },
          "name": {
            "type": "string"
          },
          "updated": {
            "type": "string",
            "description": "Last status document update date."
          },
          "components": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Named status components."
          },
          "notes": {
            "type": "string"
          }
        }
      }
    }
  },
  "security": []
}
