feat(studio/articles): show drafting_model (LLM used for draft)

Adds drafting_model to the article type and surfaces it in the detail sheet
(provider / model line + raw JSON block). Regenerates admin API types.
This commit is contained in:
2026-07-08 22:33:22 +08:00
parent 3f3a8347eb
commit 9c308c28da
3 changed files with 84 additions and 14 deletions

View File

@ -253,7 +253,7 @@ export interface paths {
content: {
"application/json": {
/**
* @example open
* @example dismissed
* @enum {string|null}
*/
status?: "open" | "resolved" | "dismissed" | null;
@ -690,7 +690,7 @@ export interface paths {
content: {
"application/json": {
/**
* @example desktop
* @example ios
* @enum {string|null}
*/
platform?: "ios" | "android" | "web" | "desktop" | null;
@ -941,6 +941,33 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/admin/v1/studio/articles/{article}/preview": {
parameters: {
query?: never;
header?: never;
path: {
/**
* @description The article.
* @example architecto
*/
article: string;
};
cookie?: never;
};
/**
* [文章] Dimzou 草稿预览
* @description 渲染文章当前 Dimzou 草稿(无草稿时回退到最新已发布版本)的正文为 HTML
* 连同标题/摘要/封面返回,供后台预览。管理员权限,绕过 Dimzou 逐用户读权限。
*/
get: operations["Dimzou"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/admin/v1/studio/articles": {
parameters: {
query?: never;
@ -1449,7 +1476,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -1472,7 +1499,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -1495,7 +1522,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -1572,7 +1599,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**
@ -1603,7 +1630,7 @@ export interface paths {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**
@ -2927,6 +2954,38 @@ export interface operations {
requestBody?: never;
responses: never;
};
Dimzou: {
parameters: {
query?: never;
header?: never;
path: {
/**
* @description The article.
* @example architecto
*/
article: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
401: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": {
/** @example false */
success?: boolean;
/** @example Authentication required */
message?: string;
/** @example UNAUTHENTICATED */
code?: string;
};
};
};
};
};
getApiAdminV1StudioArticles: {
parameters: {
query?: never;
@ -3390,7 +3449,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -3406,7 +3465,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -3422,7 +3481,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
};
@ -3740,7 +3799,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**
@ -3803,7 +3862,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**
@ -3872,7 +3931,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**
@ -3968,7 +4027,7 @@ export interface operations {
path: {
/**
* @description The ID of the category.
* @example 2912b591-09f0-4c14-9190-866abd51cbee
* @example 5a37db21-5a9a-4438-8b4a-f0c80fc4f29e
*/
category_id: string;
/**

View File

@ -132,6 +132,8 @@ export interface StudioArticle {
inline_images: Array<{ url: string; alt?: string | null }> | null
inline_image_prompts: unknown[] | null
status: ArticleStatus
/** LLM used to draft the body, e.g. { provider, model, params }. */
drafting_model: { provider?: string; model?: string; [k: string]: unknown } | null
publish_schedule: Record<string, unknown> | null
dimzou_document_id: number | null
dimzou_publication_id: number | null

View File

@ -127,6 +127,14 @@ function ArticlesPage() {
{ label: '标签', value: detail?.tags?.join('、') },
{ label: 'SEO 关键词', value: detail?.seo_keywords?.join('、') },
{ label: 'CTA', value: detail?.cta },
{
label: '起草模型',
value: detail?.drafting_model
? [detail.drafting_model.provider, detail.drafting_model.model]
.filter(Boolean)
.join(' / ') || '—'
: '—',
},
{ label: '封面提示词', value: detail?.cover_image_prompt },
{
label: 'Dimzou 文档',
@ -140,6 +148,7 @@ function ArticlesPage() {
jsonBlocks={[
{ label: '要点 key_takeaways', value: detail?.key_takeaways },
{ label: '大纲 outline', value: detail?.outline },
{ label: '起草模型 drafting_model', value: detail?.drafting_model },
{ label: '计划 plan', value: detail?.plan },
{ label: '发布排期', value: detail?.publish_schedule },
]}