feat: add seo_meta service for AI-generated SEO metadata with CLI management and database layer
DevPlace CI / test (push) Failing after 2m13s
DevPlace CI / test (push) Failing after 2m13s
Implement a new `SeoMetaService` subservice that generates clean SEO title/description/keywords for published content items, distinct from the existing SEO diagnostics auditor. Add `seo_metadata` polymorphic table with soft-delete support, batch query methods, and usage tracking. Extend the CLI with `seo-meta prune` and `seo-meta clear` commands for job row lifecycle management. Wire `schedule_seo_meta_for_table` into content creation and editing flows in `content.py`. Document the new service in `AGENTS.md` and `README.md`, including the `extra_head` site setting for custom `<head>` injection.
This commit is contained in:
@@ -618,6 +618,23 @@ ACTIONS: tuple[Action, ...] = (
|
||||
params=(path("uid", "SEO job uid returned by seo_diagnostics."),),
|
||||
requires_auth=False,
|
||||
),
|
||||
Action(
|
||||
name="seo_meta_status",
|
||||
method="GET",
|
||||
path="/tools/seo-meta/{target_type}/{target_uid}",
|
||||
summary="Read the SEO metadata generated for a content item",
|
||||
description=(
|
||||
"Returns the clean SEO title, description and keywords for a published content "
|
||||
"item. target_type is one of post, project, gist, news or issue and target_uid "
|
||||
"is its uid (or issue number). When the AI value is not ready yet a plain-content "
|
||||
"default is returned with status 'pending'."
|
||||
),
|
||||
params=(
|
||||
path("target_type", "One of post, project, gist, news or issue."),
|
||||
path("target_uid", "The content uid (or issue number)."),
|
||||
),
|
||||
requires_auth=False,
|
||||
),
|
||||
Action(
|
||||
name="deepsearch",
|
||||
method="POST",
|
||||
|
||||
Reference in New Issue
Block a user