- 伏笔账本:纯函数状态机(OPEN/PARTIAL/CLOSED/OVERDUE) + ForeshadowLedger repo;验收后到期扫描(BackgroundTask 自建 session 置 OVERDUE);登记/状态变更端点 - 节奏 + 三审齐:foreshadow-analyst + pace-checker 并入 LangGraph 并行审(REVIEW_SPECS),collect 分列落 chapter_reviews(conflicts/foreshadow_sug/pace),review SSE 加 foreshadow/pace 事件 - 大纲:outliner Agent 产 OutlineResult(含 foreshadow_windows),POST /outline 逐章 upsert outline 表;GET /foreshadow?status= 看板 - 前端:伏笔四泳道看板(OVERDUE 琥珀) + 大纲编辑器(窗口徽标) + 节奏节拍图(▁▃▅) + 审稿页消费 foreshadow/pace SSE - bugfix(T3.8):并行三审共用请求 session 记账触发 'Session is already flushing' → foreshadow/pace 静默丢失;SqlAlchemyLedgerSink.record 改 add-only(靠端点/事务 commit),加并发回归测试 - M3 E2E:真实 DB + mock 网关零 token 走通 埋设→进展→验收后扫描 OVERDUE→看板 + 大纲含窗口 + 三审齐 SSE/留痕;E2E 暴露并钉住上述 bug - 门禁绿:mypy 111 / pytest 228(0 xfailed) / alembic 无漂移;前端 gen:api/lint/tsc/vitest 69/build
1356 lines
41 KiB
TypeScript
1356 lines
41 KiB
TypeScript
/**
|
||
* This file was auto-generated by openapi-typescript.
|
||
* Do not make direct changes to the file.
|
||
*/
|
||
|
||
export interface paths {
|
||
"/": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Root */
|
||
get: operations["root__get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/health": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Health */
|
||
get: operations["health_health_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/jobs/{job_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Get Job */
|
||
get: operations["get_job_jobs__job_id__get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** List Projects */
|
||
get: operations["list_projects_projects_get"];
|
||
put?: never;
|
||
/** Create Project */
|
||
post: operations["create_project_projects_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** Get Project */
|
||
get: operations["get_project_projects__project_id__get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/chapters/{chapter_no}/draft": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
/**
|
||
* Save Draft
|
||
* @description 自动保存:幂等 upsert 草稿(同章节覆盖同一行,版次不爆炸)。
|
||
*/
|
||
put: operations["save_draft_projects__project_id__chapters__chapter_no__draft_put"];
|
||
/**
|
||
* Stream Draft
|
||
* @description 流式写章草稿:组装记忆 → 网关流 → 归一为 SSE 事件 → text/event-stream。
|
||
*/
|
||
post: operations["stream_draft_projects__project_id__chapters__chapter_no__draft_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/chapters/{chapter_no}/review": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Review Chapter
|
||
* @description 续审(SSE):组审稿上下文 → 跑审稿子图 → 归一为 section/conflict/done 事件。
|
||
*
|
||
* 提交边界:网关 ledger + collect 经 review_repo.record 均只 flush;端点在**流耗尽后**
|
||
* `await session.commit()`(镜像 draft 端点,否则记账/留痕静默丢失)。
|
||
*/
|
||
post: operations["review_chapter_projects__project_id__chapters__chapter_no__review_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/chapters/{chapter_no}/reviews": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List Reviews
|
||
* @description 审稿历史(新→旧):供前端审稿页加载既往审稿留痕 + 裁决。
|
||
*/
|
||
get: operations["list_reviews_projects__project_id__chapters__chapter_no__reviews_get"];
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/chapters/{chapter_no}/accept": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Accept Chapter
|
||
* @description 验收事务 + 冲突 gate(§5.5):gate(事务前)→ 终稿提炼 digest(事务外,R2)→
|
||
* 单原子事务(晋升 + digest + 裁决留痕)→ 一次 commit → 登记**验收后伏笔到期扫描**
|
||
* BackgroundTask(M3-b/d,§6.2)。
|
||
*
|
||
* 到期扫描接 §5.5 步骤 3 的 `TODO(M3)` 占位:验收提交成功**后**,把
|
||
* `current_ch > expected_close_to AND status≠CLOSED` 的伏笔确定性置 OVERDUE。
|
||
* 伏笔登记/回收(PARTIAL/CLOSED)的「采纳建议」经作者经 foreshadow 端点显式确认,
|
||
* 不在验收事务里 AI 静默改库(不变量 #3)。**§7.4 持久性局限**:BackgroundTask 进程内
|
||
* 跑、重启丢失——原型可接受(见 `services/foreshadow_scan.py`,不引入 jobs 表)。
|
||
*/
|
||
post: operations["accept_chapter_projects__project_id__chapters__chapter_no__accept_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/foreshadow": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/**
|
||
* List Foreshadow
|
||
* @description 伏笔看板:按 `status` 过滤(缺省=全部),按 code 升序。
|
||
*
|
||
* `status` 非法(不在 OPEN/PARTIAL/CLOSED/OVERDUE)→ VALIDATION 信封。四泳道前端
|
||
* 据 `status` 分组;OVERDUE 泳道 + 逾期标记用 `expected_close_to`(看板字段已齐)。
|
||
*/
|
||
get: operations["list_foreshadow_projects__project_id__foreshadow_get"];
|
||
put?: never;
|
||
/**
|
||
* Register Foreshadow
|
||
* @description 登记一条伏笔(status=OPEN)。重复 `code` → DB 唯一约束冲突 → VALIDATION 信封。
|
||
*/
|
||
post: operations["register_foreshadow_projects__project_id__foreshadow_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/foreshadow/{code}": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
/**
|
||
* Update Foreshadow
|
||
* @description 状态机转移 和/或 追加进展。非法转移 → VALIDATION 信封;不存在 → NOT_FOUND。
|
||
*
|
||
* `to_status` 与 `progress_entry` 皆可选;两者都缺 → VALIDATION(无操作)。先转移、后追加。
|
||
*/
|
||
patch: operations["update_foreshadow_projects__project_id__foreshadow__code__patch"];
|
||
trace?: never;
|
||
};
|
||
"/projects/{project_id}/outline": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/**
|
||
* Generate Outline
|
||
* @description 生成大纲并逐章持久化。无凭据 → LLM_UNAVAILABLE;项目不存在 → NOT_FOUND。
|
||
*/
|
||
post: operations["generate_outline_projects__project_id__outline_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/settings/providers": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
/** List Providers */
|
||
get: operations["list_providers_settings_providers_get"];
|
||
/** Upsert Providers */
|
||
put: operations["upsert_providers_settings_providers_put"];
|
||
post?: never;
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
"/settings/providers/test": {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
get?: never;
|
||
put?: never;
|
||
/** Test Connection */
|
||
post: operations["test_connection_settings_providers_test_post"];
|
||
delete?: never;
|
||
options?: never;
|
||
head?: never;
|
||
patch?: never;
|
||
trace?: never;
|
||
};
|
||
}
|
||
export type webhooks = Record<string, never>;
|
||
export interface components {
|
||
schemas: {
|
||
/**
|
||
* AcceptRequest
|
||
* @description POST /projects/:id/chapters/:no/accept:裁决清单 + 可能改过的终稿。
|
||
*/
|
||
AcceptRequest: {
|
||
/**
|
||
* Final Text
|
||
* @description 作者裁决/改稿后的最终验收文本
|
||
*/
|
||
final_text: string;
|
||
/**
|
||
* Decisions
|
||
* @description 对最近审稿每个冲突的裁决(每冲突必有其一,R5)
|
||
*/
|
||
decisions?: components["schemas"]["ConflictDecision"][];
|
||
};
|
||
/**
|
||
* AcceptResponse
|
||
* @description 验收「本次将更新」清单(ARCH §7.2 写回结果)。
|
||
*/
|
||
AcceptResponse: {
|
||
/**
|
||
* Project Id
|
||
* Format: uuid
|
||
*/
|
||
project_id: string;
|
||
/** Chapter No */
|
||
chapter_no: number;
|
||
/**
|
||
* Accepted Version
|
||
* @description 晋升到的 accepted 版次(max+1)
|
||
*/
|
||
accepted_version: number;
|
||
/**
|
||
* Digest Added
|
||
* @description 是否新增了一行 chapter_digests
|
||
*/
|
||
digest_added: boolean;
|
||
/**
|
||
* Decisions Recorded
|
||
* @description 本次写回的裁决条数
|
||
*/
|
||
decisions_recorded: number;
|
||
/**
|
||
* Review Id
|
||
* @description 写回裁决的审稿留痕行 id
|
||
*/
|
||
review_id?: string | null;
|
||
};
|
||
/**
|
||
* CapabilitiesView
|
||
* @description 探测得到的能力矩阵(镜像网关 `Capabilities`)。
|
||
*/
|
||
CapabilitiesView: {
|
||
/**
|
||
* Structured Output
|
||
* @default false
|
||
*/
|
||
structured_output: boolean;
|
||
/**
|
||
* Prefix Cache
|
||
* @default false
|
||
*/
|
||
prefix_cache: boolean;
|
||
/**
|
||
* Thinking
|
||
* @default false
|
||
*/
|
||
thinking: boolean;
|
||
};
|
||
/**
|
||
* ConflictDecision
|
||
* @description 对最近一次审稿留痕里**某个冲突**(按其在 conflicts 列表的下标定位)的裁决。
|
||
*/
|
||
ConflictDecision: {
|
||
/**
|
||
* Conflict Index
|
||
* @description 冲突在最近审稿 conflicts 列表中的下标
|
||
*/
|
||
conflict_index: number;
|
||
/**
|
||
* Verdict
|
||
* @description 采纳改法 / 忽略 / 手改
|
||
* @enum {string}
|
||
*/
|
||
verdict: "accept" | "ignore" | "manual";
|
||
/**
|
||
* Note
|
||
* @description 可选裁决备注(如手改说明)
|
||
*/
|
||
note?: string | null;
|
||
};
|
||
/**
|
||
* DraftResponse
|
||
* @description 草稿保存结果(脱敏:只回元信息 + 长度,不回灌正文以外的衍生)。
|
||
*/
|
||
DraftResponse: {
|
||
/**
|
||
* Project Id
|
||
* Format: uuid
|
||
*/
|
||
project_id: string;
|
||
/** Chapter No */
|
||
chapter_no: number;
|
||
/** Volume */
|
||
volume: number;
|
||
/** Status */
|
||
status: string;
|
||
/** Version */
|
||
version: number;
|
||
/** Length */
|
||
length: number;
|
||
};
|
||
/**
|
||
* DraftSaveRequest
|
||
* @description PUT /projects/:id/chapters/:no/draft:自动保存草稿正文。
|
||
*/
|
||
DraftSaveRequest: {
|
||
/** Text */
|
||
text: string;
|
||
};
|
||
/**
|
||
* ForeshadowBoardResponse
|
||
* @description GET /projects/:id/foreshadow?status=:伏笔看板(四泳道 + OVERDUE 字段齐)。
|
||
*
|
||
* `status` 缺省返回全部;按 `code` 升序(repo `list_by_status` 已排序)。前端按
|
||
* `status` 分四泳道(OPEN/PARTIAL/CLOSED/OVERDUE),用 `expected_close_to` 标逾期。
|
||
*/
|
||
ForeshadowBoardResponse: {
|
||
/** Foreshadow */
|
||
foreshadow?: components["schemas"]["ForeshadowView"][];
|
||
};
|
||
/**
|
||
* ForeshadowRegisterRequest
|
||
* @description POST /projects/:id/foreshadow:作者显式登记一条伏笔(status 落 OPEN)。
|
||
*/
|
||
ForeshadowRegisterRequest: {
|
||
/**
|
||
* Code
|
||
* @description 伏笔代号,`(project_id, code)` 唯一
|
||
*/
|
||
code: string;
|
||
/**
|
||
* Title
|
||
* @description 伏笔标题/一句话描述
|
||
*/
|
||
title: string;
|
||
/**
|
||
* Planted At
|
||
* @description 埋设章号
|
||
*/
|
||
planted_at?: number | null;
|
||
/**
|
||
* Content
|
||
* @description 伏笔正文/线索
|
||
*/
|
||
content?: string | null;
|
||
/**
|
||
* Expected Close From
|
||
* @description 预期回收窗口起始章
|
||
*/
|
||
expected_close_from?: number | null;
|
||
/**
|
||
* Expected Close To
|
||
* @description 预期回收窗口结束章(到期判据用)
|
||
*/
|
||
expected_close_to?: number | null;
|
||
/**
|
||
* Importance
|
||
* @description 重要度(自由文本,看板用)
|
||
*/
|
||
importance?: string | null;
|
||
};
|
||
/**
|
||
* ForeshadowTransitionRequest
|
||
* @description PATCH /projects/:id/foreshadow/:code:状态机转移 和/或 追加一条进展。
|
||
*
|
||
* 两字段皆可选:`to_status` 走状态机(非法 → VALIDATION 信封);`progress_entry`
|
||
* append-only 追加到 progress JSONB。二者可同时给(先转移、后追加进展)。
|
||
*/
|
||
ForeshadowTransitionRequest: {
|
||
/**
|
||
* To Status
|
||
* @description 目标状态(OPEN/PARTIAL/CLOSED/OVERDUE)
|
||
*/
|
||
to_status?: string | null;
|
||
/**
|
||
* Progress Entry
|
||
* @description 追加一条进展记录(append-only,不覆盖历史)
|
||
*/
|
||
progress_entry?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
};
|
||
/**
|
||
* ForeshadowView
|
||
* @description 伏笔账本视图(登记/状态变更/看板共用;snake_case)。形对齐 `ForeshadowLedgerView`。
|
||
*/
|
||
ForeshadowView: {
|
||
/** Code */
|
||
code: string;
|
||
/** Title */
|
||
title: string;
|
||
/** Status */
|
||
status: string;
|
||
/** Planted At */
|
||
planted_at?: number | null;
|
||
/** Content */
|
||
content?: string | null;
|
||
/** Expected Close From */
|
||
expected_close_from?: number | null;
|
||
/** Expected Close To */
|
||
expected_close_to?: number | null;
|
||
/** Importance */
|
||
importance?: string | null;
|
||
/** Links */
|
||
links?: {
|
||
[key: string]: unknown;
|
||
}[];
|
||
/** Progress */
|
||
progress?: {
|
||
[key: string]: unknown;
|
||
}[];
|
||
};
|
||
/**
|
||
* ForeshadowWindowView
|
||
* @description 单章关联的伏笔回收窗口(snake_case;形对齐 `ww_agents.ForeshadowWindow`)。
|
||
*/
|
||
ForeshadowWindowView: {
|
||
/** Code */
|
||
code: string;
|
||
/** Plant Chapter */
|
||
plant_chapter?: number | null;
|
||
/** Expected Close From */
|
||
expected_close_from?: number | null;
|
||
/** Expected Close To */
|
||
expected_close_to?: number | null;
|
||
};
|
||
/** HTTPValidationError */
|
||
HTTPValidationError: {
|
||
/** Detail */
|
||
detail?: components["schemas"]["ValidationError"][];
|
||
};
|
||
/**
|
||
* OutlineChapterView
|
||
* @description 单章大纲视图:章号 + 卷 + 节拍 + 伏笔窗口。
|
||
*/
|
||
OutlineChapterView: {
|
||
/** No */
|
||
no: number;
|
||
/** Volume */
|
||
volume: number;
|
||
/** Beats */
|
||
beats?: string[];
|
||
/** Foreshadow Windows */
|
||
foreshadow_windows?: components["schemas"]["ForeshadowWindowView"][];
|
||
};
|
||
/**
|
||
* OutlineGenerateRequest
|
||
* @description POST /projects/:id/outline:触发大纲生成 + 持久化。
|
||
*
|
||
* M3 简单分卷:`volume` 缺省=1(schema 无逐章卷号;本端点把整批章节落到同一卷)。
|
||
*/
|
||
OutlineGenerateRequest: {
|
||
/**
|
||
* Volume
|
||
* @description 本批大纲所属卷号(M3 默认全卷 1)
|
||
* @default 1
|
||
*/
|
||
volume: number;
|
||
};
|
||
/**
|
||
* OutlineResponse
|
||
* @description 大纲生成响应:逐章已持久化的大纲(含窗口,供前端 T3.6)。
|
||
*/
|
||
OutlineResponse: {
|
||
/** Chapters */
|
||
chapters?: components["schemas"]["OutlineChapterView"][];
|
||
};
|
||
/**
|
||
* ProjectCreateRequest
|
||
* @description POST /projects:立项向导字段(owner_id 由后端补 stub,不入参)。
|
||
*/
|
||
ProjectCreateRequest: {
|
||
/** Title */
|
||
title: string;
|
||
/** Genre */
|
||
genre?: string | null;
|
||
/** Logline */
|
||
logline?: string | null;
|
||
/** Premise */
|
||
premise?: string | null;
|
||
/** Theme */
|
||
theme?: string | null;
|
||
/** Selling Points */
|
||
selling_points?: unknown[];
|
||
/** Structure */
|
||
structure?: string | null;
|
||
};
|
||
/**
|
||
* ProjectListResponse
|
||
* @description GET /projects:项目列表。
|
||
*/
|
||
ProjectListResponse: {
|
||
/** Projects */
|
||
projects?: components["schemas"]["ProjectResponse"][];
|
||
};
|
||
/**
|
||
* ProjectResponse
|
||
* @description 项目视图(创建/列表/详情共用)。
|
||
*/
|
||
ProjectResponse: {
|
||
/**
|
||
* Id
|
||
* Format: uuid
|
||
*/
|
||
id: string;
|
||
/** Title */
|
||
title: string;
|
||
/** Genre */
|
||
genre?: string | null;
|
||
/** Logline */
|
||
logline?: string | null;
|
||
/** Premise */
|
||
premise?: string | null;
|
||
/** Theme */
|
||
theme?: string | null;
|
||
/** Selling Points */
|
||
selling_points?: unknown[];
|
||
/** Structure */
|
||
structure?: string | null;
|
||
};
|
||
/**
|
||
* ProviderCredentialInput
|
||
* @description 单条提供商凭据写入。
|
||
*/
|
||
ProviderCredentialInput: {
|
||
/** Provider */
|
||
provider: string;
|
||
/** Api Key */
|
||
api_key: string;
|
||
};
|
||
/**
|
||
* ProviderView
|
||
* @description 已配置提供商(掩码视图)。
|
||
*/
|
||
ProviderView: {
|
||
/** Provider */
|
||
provider: string;
|
||
/** Masked Key */
|
||
masked_key: string;
|
||
};
|
||
/**
|
||
* ProvidersResponse
|
||
* @description GET/PUT 响应:已配置提供商(掩码)+ 当前档位路由。
|
||
*/
|
||
ProvidersResponse: {
|
||
/** Providers */
|
||
providers?: components["schemas"]["ProviderView"][];
|
||
/** Tier Routing */
|
||
tier_routing?: components["schemas"]["TierRoutingView"][];
|
||
};
|
||
/**
|
||
* ProvidersUpsertRequest
|
||
* @description PUT 请求:可同时 upsert 若干凭据与档位路由(幂等)。
|
||
*/
|
||
ProvidersUpsertRequest: {
|
||
/** Credentials */
|
||
credentials?: components["schemas"]["ProviderCredentialInput"][];
|
||
/** Tier Routing */
|
||
tier_routing?: components["schemas"]["TierRoutingInput"][];
|
||
};
|
||
/**
|
||
* ReviewHistoryItem
|
||
* @description 单条审稿留痕(GET .../reviews 历史项;snake_case)。
|
||
*/
|
||
ReviewHistoryItem: {
|
||
/**
|
||
* Id
|
||
* Format: uuid
|
||
*/
|
||
id: string;
|
||
/**
|
||
* Project Id
|
||
* Format: uuid
|
||
*/
|
||
project_id: string;
|
||
/** Chapter No */
|
||
chapter_no: number;
|
||
/** Chapter Version */
|
||
chapter_version?: number | null;
|
||
/** Conflicts */
|
||
conflicts?: {
|
||
[key: string]: unknown;
|
||
}[];
|
||
/** Foreshadow Sug */
|
||
foreshadow_sug?: {
|
||
[key: string]: unknown;
|
||
}[];
|
||
/** Style */
|
||
style?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
/** Pace */
|
||
pace?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
/** Health Score */
|
||
health_score?: number | null;
|
||
/** Decisions */
|
||
decisions?: {
|
||
[key: string]: unknown;
|
||
} | null;
|
||
};
|
||
/**
|
||
* ReviewHistoryResponse
|
||
* @description GET /projects/:id/chapters/:no/reviews:审稿历史(新→旧)。
|
||
*/
|
||
ReviewHistoryResponse: {
|
||
/** Reviews */
|
||
reviews?: components["schemas"]["ReviewHistoryItem"][];
|
||
};
|
||
/**
|
||
* ReviewRequest
|
||
* @description POST /projects/:id/chapters/:no/review:可选携带待审草稿正文。
|
||
*
|
||
* 不传 `draft` 时端点回退到已保存的草稿(chapter_repo)。
|
||
*/
|
||
ReviewRequest: {
|
||
/** Draft */
|
||
draft?: string | null;
|
||
};
|
||
/**
|
||
* TestConnectionRequest
|
||
* @description POST /test:最小探测请求。
|
||
*/
|
||
TestConnectionRequest: {
|
||
/** Provider */
|
||
provider: string;
|
||
};
|
||
/**
|
||
* TestConnectionResponse
|
||
* @description POST /test 响应:连通性 + 能力矩阵。
|
||
*/
|
||
TestConnectionResponse: {
|
||
/** Provider */
|
||
provider: string;
|
||
/** Ok */
|
||
ok: boolean;
|
||
capabilities: components["schemas"]["CapabilitiesView"];
|
||
};
|
||
/**
|
||
* TierRoutingInput
|
||
* @description 单条档位路由写入。
|
||
*/
|
||
TierRoutingInput: {
|
||
/** Tier */
|
||
tier: string;
|
||
/** Provider */
|
||
provider: string;
|
||
/** Model */
|
||
model: string;
|
||
/** Fallback */
|
||
fallback?: string[];
|
||
};
|
||
/**
|
||
* TierRoutingView
|
||
* @description 档位 → provider:model 路由(含回退链)。
|
||
*/
|
||
TierRoutingView: {
|
||
/** Tier */
|
||
tier: string;
|
||
/** Provider */
|
||
provider: string;
|
||
/** Model */
|
||
model: string;
|
||
/** Fallback */
|
||
fallback?: string[];
|
||
};
|
||
/** ValidationError */
|
||
ValidationError: {
|
||
/** Location */
|
||
loc: (string | number)[];
|
||
/** Message */
|
||
msg: string;
|
||
/** Error Type */
|
||
type: string;
|
||
/** Input */
|
||
input?: unknown;
|
||
/** Context */
|
||
ctx?: Record<string, never>;
|
||
};
|
||
};
|
||
responses: never;
|
||
parameters: never;
|
||
requestBodies: never;
|
||
headers: never;
|
||
pathItems: never;
|
||
}
|
||
export type $defs = Record<string, never>;
|
||
export interface operations {
|
||
root__get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
[key: string]: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
health_health_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
[key: string]: string;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_job_jobs__job_id__get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
job_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": {
|
||
[key: string]: unknown;
|
||
};
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_projects_projects_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProjectListResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
create_project_projects_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ProjectCreateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProjectResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
get_project_projects__project_id__get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProjectResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
save_draft_projects__project_id__chapters__chapter_no__draft_put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
chapter_no: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["DraftSaveRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["DraftResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
stream_draft_projects__project_id__chapters__chapter_no__draft_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
chapter_no: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
review_chapter_projects__project_id__chapters__chapter_no__review_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
chapter_no: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ReviewRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": unknown;
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_reviews_projects__project_id__chapters__chapter_no__reviews_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
chapter_no: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ReviewHistoryResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
accept_chapter_projects__project_id__chapters__chapter_no__accept_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
chapter_no: number;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["AcceptRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["AcceptResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_foreshadow_projects__project_id__foreshadow_get: {
|
||
parameters: {
|
||
query?: {
|
||
status?: string | null;
|
||
};
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ForeshadowBoardResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
register_foreshadow_projects__project_id__foreshadow_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ForeshadowRegisterRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
201: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ForeshadowView"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
update_foreshadow_projects__project_id__foreshadow__code__patch: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
code: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ForeshadowTransitionRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ForeshadowView"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
generate_outline_projects__project_id__outline_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path: {
|
||
project_id: string;
|
||
};
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["OutlineGenerateRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["OutlineResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
list_providers_settings_providers_get: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody?: never;
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProvidersResponse"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
upsert_providers_settings_providers_put: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["ProvidersUpsertRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["ProvidersResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
test_connection_settings_providers_test_post: {
|
||
parameters: {
|
||
query?: never;
|
||
header?: never;
|
||
path?: never;
|
||
cookie?: never;
|
||
};
|
||
requestBody: {
|
||
content: {
|
||
"application/json": components["schemas"]["TestConnectionRequest"];
|
||
};
|
||
};
|
||
responses: {
|
||
/** @description Successful Response */
|
||
200: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["TestConnectionResponse"];
|
||
};
|
||
};
|
||
/** @description Validation Error */
|
||
422: {
|
||
headers: {
|
||
[name: string]: unknown;
|
||
};
|
||
content: {
|
||
"application/json": components["schemas"]["HTTPValidationError"];
|
||
};
|
||
};
|
||
};
|
||
};
|
||
}
|