A community based topic aggregation platform built on atproto

feat: update external embed lexicon schema for nested structure

Update external embed lexicon to use proper nested structure with dedicated
external object, aligning with atproto conventions and enabling better validation.

**Schema Changes:**
1. Main object now requires "external" property (was flat structure)
2. Add dedicated "external" definition with link metadata
3. Update embedType known values:
- OLD: ["article", "image", "video-stream"]
- NEW: ["article", "image", "video", "website"]
- Removed "video-stream" (use "video" instead)
- Added "website" for generic pages

**Before (flat structure):**
```json
{
"$type": "social.coves.embed.external",
"uri": "https://example.com",
"title": "Example",
"thumb": {...}
}
```

**After (nested structure):**
```json
{
"$type": "social.coves.embed.external",
"external": {
"uri": "https://example.com",
"title": "Example",
"thumb": {...}
}
}
```

**Rationale:**
- Follows atproto pattern (app.bsky.embed.external uses same structure)
- Enables future extensibility (can add external-level metadata)
- Clearer separation between embed type and embedded content
- Better validation with required "external" property

**embedType Values:**
- "article": Blog posts, news articles (rich text content)
- "image": Image galleries, photos (visual content)
- "video": Video embeds from Streamable, YouTube, etc.
- "website": Generic web pages without specific type

This aligns our lexicon with atproto best practices and prepares for
potential federation with other atproto implementations.

Breaking change: Clients must update to use nested structure.

Changed files
+13 -2
internal
atproto
lexicon
social
coves
+13 -2
internal/atproto/lexicon/social/coves/embed/external.json
···
"main": {
"type": "object",
"description": "External link embed with preview metadata and provider support",
"required": ["uri"],
"properties": {
"uri": {
···
},
"embedType": {
"type": "string",
-
"knownValues": ["article", "image", "video-stream"],
-
"description": "Type hint for special handling of known providers"
},
"provider": {
"type": "string",
···
"main": {
"type": "object",
"description": "External link embed with preview metadata and provider support",
+
"required": ["external"],
+
"properties": {
+
"external": {
+
"type": "ref",
+
"ref": "#external"
+
}
+
}
+
},
+
"external": {
+
"type": "object",
+
"description": "External link metadata",
"required": ["uri"],
"properties": {
"uri": {
···
},
"embedType": {
"type": "string",
+
"knownValues": ["article", "image", "video", "website"],
+
"description": "Type hint for content rendering and filtering"
},
"provider": {
"type": "string",