pageta/app-manifest.json
Till JS 91cca50950 Primary-Switch zu pageta.com (Brand-Lead-Domain für native App)
Vorbereitung für pageta-native (siehe mana/docs/playbooks/PAGETA_NATIVE_GREENFIELD.md).
AASA + Universal-Links brauchen eine Lead-Domain — pageta.com gewinnt
gegen pageta.mana.how.

- app-manifest.json: homepage, icon, endpoints.base_url,
  link_patterns.template alle auf pageta.com.
- api/index.ts: PUBLIC_WEB_ORIGIN-Fallback pageta.com. pageta.mana.how
  bleibt im CORS-Allowlist (hardcoded, line 46) — kein Cutover, beide
  Domains parallel.
- api/config.ts: User-Agent für Crawls auf pageta.com.
- web/auth/session.svelte.ts: buildLoginRedirect-Fallback pageta.com.

Co-Existenz-Pattern: pageta.mana.how funktioniert weiter (Cloudflared-
Ingress + CORS-Allowlist + sso-origins), aber die Manifest sagt
pageta.com ist primary. Cookie-SSO über .mana.how-Subdomain greift
nur auf pageta.mana.how — pageta.com nutzt Bearer-Flow (Cards-Pattern,
existiert schon in session.svelte.ts).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 14:47:21 +02:00

113 lines
3.6 KiB
JSON

{
"$schema": "https://pkg.mana.how/@mana/shared-share-protocol/0.1/manifest.json",
"schema_version": "0.1",
"id": "pageta",
"name": "Pageta",
"version": "0.0.1",
"homepage": "https://pageta.com",
"icon": "https://pageta.com/icon-512.svg",
"description": "Reader for curated news, save-it-later articles with highlights, and RSS-feed discovery. A standalone web app of mana e.V.",
"description_de": "Lese-App für kuratierte News, gespeicherte Artikel mit Markierungen und RSS-Feed-Recherche. Eigenständige Webapp des Vereins mana e.V.",
"ownership": { "kind": "verein" },
"tier_required": "public",
"endpoints": {
"base_url": "https://pageta.com",
"health": "/healthz",
"dsgvo_export": "/api/v1/dsgvo/export",
"search": "/api/v1/search",
"share_receive": "/api/v1/share/receive",
"tool_invoke": "/api/v1/tools/:name",
"deep_link_scheme": "pageta://",
"link_patterns": [
{
"pattern": "article/(?<id>[a-z0-9_-]+)",
"template": "https://pageta.com/article/{id}"
}
]
},
"shares": [],
"accepts": [
{
"type": "mana/url",
"handler": "receive_url",
"description": "Save a URL into the user's reading list (Mozilla-Readability-extracted).",
"description_de": "URL als Artikel in die Lese-Liste übernehmen (mit Mozilla-Readability extrahiert)."
}
],
"tools": [
{
"name": "pageta.save_article",
"description": "Extract a URL and save it to the user's reading list.",
"description_de": "URL extrahieren und in die Lese-Liste speichern.",
"input_schema": {
"type": "object",
"required": ["url"],
"properties": {
"url": { "type": "string", "format": "uri" },
"userNote": { "type": "string", "maxLength": 2000 }
}
}
},
{
"name": "pageta.list_articles",
"description": "Return the user's own reading list, optionally filtered by status.",
"description_de": "Eigene Lese-Liste abrufen, optional nach Status filtern.",
"input_schema": {
"type": "object",
"properties": {
"status": { "type": "string", "enum": ["unread", "reading", "finished", "archived"] },
"limit": { "type": "integer", "minimum": 1, "maximum": 200 }
}
}
},
{
"name": "pageta.archive_article",
"description": "Set an article's status to 'archived'.",
"description_de": "Artikel auf Status 'archived' setzen.",
"input_schema": {
"type": "object",
"required": ["id"],
"properties": { "id": { "type": "string" } }
}
},
{
"name": "pageta.add_article_tag",
"description": "Attach a tag to an article (kebab-case, max 64 chars).",
"description_de": "Tag zu einem Artikel hinzufügen (kebab-case, max 64 Zeichen).",
"input_schema": {
"type": "object",
"required": ["id", "tag"],
"properties": {
"id": { "type": "string" },
"tag": { "type": "string", "minLength": 1, "maxLength": 64 }
}
}
},
{
"name": "pageta.add_article_highlight",
"description": "Store a plain-text selection as a highlight on the article.",
"description_de": "Plain-Text-Selektion als Markierung speichern.",
"input_schema": {
"type": "object",
"required": ["id", "text"],
"properties": {
"id": { "type": "string" },
"text": { "type": "string", "minLength": 1, "maxLength": 5000 },
"color": { "type": "string", "enum": ["yellow", "green", "blue", "pink"] },
"note": { "type": "string", "maxLength": 2000 }
}
}
}
],
"search": {
"types": ["article", "highlight"],
"languages": ["de", "en"],
"max_results": 30,
"timeout_ms": 3000
},
"data": {
"personal_data_categories": ["saved_urls", "highlights", "reading_preferences"],
"encrypted_at_rest": false,
"storage_location": "EU"
}
}