/** * 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 * @description 作品列表(按 created_at 升序,分页)。`?limit=&offset=`,默认第一页。 */ 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}/injection": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get Injection * @description 本章注入透明(B0,读端点):回放确定性 SelectionTrace + 作者覆盖。无 LLM、无 commit。 * * 项目不存在 → 404;无大纲 → selected: [](不报错)。看到的=写章用的(不变量 #6)。 */ get: operations["get_injection_projects__project_id__chapters__chapter_no__injection_get"]; /** * Save Injection * @description 本章注入覆盖(B0 可控版,写端点):存 pin/排除/recent_n → 回放新的确定性 selected。 * * 项目不存在 → 404。upsert 只 flush,端点末尾 commit。覆盖是确定性输入,draft 端点同读, * 故「看到的=写章用的」仍成立(不变量 #6 的作者兜底)。 */ put: operations["save_injection_projects__project_id__chapters__chapter_no__injection_put"]; 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 Draft * @description 读取已保存草稿(含正文),供工作台重访时重载编辑器(镜像 GET /outline 读侧)。 * * 复用 `chapter_repo.get_draft`(与续审 `_resolve_review_draft` 同一读 seam);只读不写库。 * 无草稿行(含空正文)→ 404 NOT_FOUND,工作台据此呈现空编辑器(与其它「缺资源」端点一致)。 * 多版本时该读取固定返草稿版次(DRAFT_VERSION)这条可编辑工作副本,与 PUT 保存的同一行。 */ get: operations["get_draft_projects__project_id__chapters__chapter_no__draft_get"]; /** * Save Draft * @description 自动保存:幂等 upsert 草稿(同章节覆盖同一行,版次不爆炸)。 */ put: operations["save_draft_projects__project_id__chapters__chapter_no__draft_put"]; /** * Stream Draft * @description 流式写章草稿:组装记忆(含作者注入覆盖 + 本章指令)→ 网关流 → 归一 SSE → event-stream。 * * `body.directive`(可选,T4-b)是临时本章指令,直通 assemble→volatile(不持久化); * 无 body 的旧调用方仍可用(向后兼容)。 * * 项目不存在 → 404(在触网关前 fail-fast):否则非法 project_id 会静默烧一次付费/限流的 * LLM 调用并返回 200(QA C1)。 */ 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}/rewrite": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Stream Rewrite * @description 整章再沟通/重写:组装记忆 + 当前草稿 + 作者意见 → 网关流 → 归一 SSE → event-stream。 * * HITL:新版停前端/草稿,接受才落库(不变量 #3);rewrite 是工具非写节点,不破坏章 * 纯函数性(不变量 #7)。项目不存在 → 404(触网关前 fail-fast,同 draft,QA C1)。 */ post: operations["stream_rewrite_projects__project_id__chapters__chapter_no__rewrite_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/chapters/{chapter_no}/rewrite/clarify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Clarify Rewrite * @description 整章重写预检澄清(WFW-9 M2 路线A 两阶段之「问题」阶段):非流式 JSON,只判不改。 * * 镜像 refine 侧 clarify——只判「作者这条整章重写意见清不清楚」,含糊则反问 1 问 + 给选项, * 清楚则给确认语放行;**绝不改正文**(整章重写仍走既有 rewrite SSE 端点)。analyst 档 * (不变量 #2)。只取 `prior_draft` 有界摘录喂预检(不整章入 LLM)。 * * 项目不存在 → 404(触网关前 fail-fast,同 rewrite/draft);无凭据 → 503(dep 解析阶段拦下)。 * **只读不写业务表**(不变量 #3);末尾 `commit()` 让网关 usage_ledger 落库(add-only,否则 * 记账静默丢失,同 rewrite 纪律)。判别/校验失败在 `run_clarify` 内确定性回退 * `need_clarification=false`(不阻塞整章重写主链路)。 */ post: operations["clarify_rewrite_projects__project_id__chapters__chapter_no__rewrite_clarify_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 升序。 * * 项目不存在 → 404(与写端点一致,避免不存在 project 返回误导性空 200)。 * `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 Outline * @description 读取已持久化的大纲(逐章,按 chapter_no 升序)。 * * 可选 `?volume=N`:只返回该卷的章节(前端按卷切换);不传 → 全部章节(向后兼容)。 * 项目不存在 → 404;项目存在但尚无大纲(或该卷无章节)→ 200 空列表(非 404)。 * DB `outline.beats` 是 JSONB `{"beats": [...]}` → 解包成裸 `list[str]`(与 POST 响应同形, * 前端 OpenAPI 类型对齐)。读侧复用 C5 assemble 的 `OutlineRepo`,不写库。 */ get: operations["get_outline_projects__project_id__outline_get"]; 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; }; "/projects/{project_id}/rules": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Rules * @description 规则列表(带 id,供前端删除 handle)。项目不存在 → 404(QA MEDIUM:此前返误导性空 200)。 */ get: operations["list_rules_projects__project_id__rules_get"]; put?: never; /** * Create Rule * @description 新增一条规则(201)。非法 level / 空 content → FastAPI 422;项目不存在 → 404。 * * 项目存在性须在 insert 前校验:否则 FK 违例会逃逸成 500(QA H2),而非干净的 404。 */ post: operations["create_rule_projects__project_id__rules_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/rules/{rule_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete Rule * @description 删除一条本作品规则(204)。项目不存在 → 404;规则不存在 / 不属于该项目 → 404。 * * 删规则是**作者显式动作**(不变量 #3:规则增删不经 AI 静默写库)。repo.delete 只 flush, * 端点提交;删不到行(未知 id / 跨项目)→ 不提交、抛 404。 */ delete: operations["delete_rule_projects__project_id__rules__rule_id__delete"]; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/style": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Get Style * @description 取最新文风指纹(完整 16 维 + 证据 + 版本)。项目不存在 → 404;无指纹 → 404。 */ get: operations["get_style_projects__project_id__style_get"]; put?: never; /** * Learn Style * @description 学文风:写一行 job 返 202,提取经 BackgroundTask 异步跑。 * * 项目不存在 → 404;无凭据 → 503(在调度 job 前拦下)。`mode` 不影响落库逻辑 * (写侧始终 append 新版本,version+1 自动),仅供前端区分首学/更新语义。 */ post: operations["learn_style_projects__project_id__style_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/chapters/{chapter_no}/refine": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Refine Segment * @description 同步回炉:writer 网关纯文本重写选中段,返回 {original, refined}。 * * 项目不存在 → 404;无凭据 → 503。不写库(不变量 #3);末尾 `commit()` 让网关 * usage_ledger 落库(add-only,否则记账静默丢失,同 draft/review 纪律)。 */ post: operations["refine_segment_projects__project_id__chapters__chapter_no__refine_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/chapters/{chapter_no}/refine/clarify": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Clarify Refine * @description 润色预检澄清(WFW-9 M1 路线A 两阶段之「问题」阶段):非流式 JSON,只判不改。 * * 独立于既有 refine 端点——只判「作者这条再沟通意见清不清楚」,含糊则反问 1 问 + 给选项, * 清楚则给确认语放行;**绝不改正文**(正文仍走 refine 端点)。analyst 档(不变量 #2)。 * * 项目不存在 → 404;无凭据 → 503(dep 解析阶段拦下)。**只读不写库**(不变量 #3); * 末尾 `commit()` 让网关 usage_ledger 落库(add-only,否则记账静默丢失,同 refine 纪律)。 * 判别/校验失败在 `run_clarify` 内确定性回退 `need_clarification=false`(不阻塞润色)。 */ post: operations["clarify_refine_projects__project_id__chapters__chapter_no__refine_clarify_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/templates": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Templates * @description 列出当前用户(stub)的模板(分页;`?limit=&offset=`,默认第一页)。 */ get: operations["list_templates_templates_get"]; put?: never; /** * Create Template * @description 新建模板(201)。title/body 空 → FastAPI 422(schema `min_length=1`)。 */ post: operations["create_template_templates_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/templates/{template_id}": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; post?: never; /** * Delete Template * @description 删除模板(204)。不存在 → 404 NOT_FOUND。 */ delete: operations["delete_template_templates__template_id__delete"]; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/ai-messages": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Ai Messages * @description 列出 AI 对话(newest-first)。`chapter_no` → 本章 ∪ 项目级(NULL);缺省 → 仅项目级。 */ get: operations["list_ai_messages_projects__project_id__ai_messages_get"]; put?: never; /** * Append Ai Messages * @description 一批往复 bubble append(201)。项目不存在 → 404;非法 kind/role/空/超上限 → 422。 */ post: operations["append_ai_messages_projects__project_id__ai_messages_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/world/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate World * @description 生成世界观实体预览(不持久化;作者确认后另入库)。无凭据 → 503;项目不存在 → 404。 */ post: operations["generate_world_projects__project_id__world_generate_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/characters/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate Characters * @description 生成角色卡预览(不持久化;注入已有角色防雷同)。无凭据 → 503;项目不存在 → 404。 */ post: operations["generate_characters_projects__project_id__characters_generate_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/characters": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Characters * @description 已入库角色全量列表(设定库 Codex 真源;复用 C5 读侧 SqlCharacterRepo)。 * * 项目不存在 → 404(与写端点一致,避免不存在 project 返回误导性空 200)。 * DB JSONB dict 列 → API list/str 反向解包(入库形变的逆向,见 `_existing_characters`)。 */ get: operations["list_characters_projects__project_id__characters_get"]; put?: never; /** * Ingest Characters * @description 入库作者确认的角色卡。有 continuity 冲突且未确认 → 409;越权写表丢弃 + 审计。 */ post: operations["ingest_characters_projects__project_id__characters_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/world_entities": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List World Entities * @description 已入库世界观实体全量列表(设定库 Codex 真源;复用 C5 读侧 SqlWorldEntityRepo)。 * * 项目不存在 → 404(与写端点一致)。 * DB `rules` JSONB dict `{"rules":[...]}` → 裸 list(worldbuilder 形变的逆向)。 */ get: operations["list_world_entities_projects__project_id__world_entities_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/skills": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Skills * @description 技能库列表(按 name 升序)。技能库 UI 用。 */ get: operations["list_skills_skills_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/skills/project-plan/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate Project Plan * @description 生成结构化立项方案预览(向导阶段,project 未建,不入库)。 * * **不带 project 前缀**——绕开 toolbox 的 `project_repo.get→404`(立项前无 project)。 * **种子门控**:缺 genre 或 logline → 422(空向导不出方案,防 slop)。无凭据 → 503。 */ post: operations["generate_project_plan_skills_project_plan_generate_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/skills/toolbox": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * List Toolbox * @description 创作工具箱全量描述符(legacy + 新工具;前端据此渲染卡片栅格 + 表单 + 路由)。 */ get: operations["list_toolbox_skills_toolbox_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/skills/{tool_key}/generate": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Generate With Tool * @description 通用生成(结构化预览,不入库)。未知/ legacy 工具→404;项目不存在→404;无凭据→503。 */ post: operations["generate_with_tool_projects__project_id__skills__tool_key__generate_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/skills/{tool_key}/ingest": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Ingest With Tool * @description 通用入库(仅可入库工具):过 continuity 预检 + 白名单 → 写 ingest.table。 * * 未知/legacy 工具→404;不可入库工具→422;有冲突且未确认→409;越权写表丢弃+审计。 */ post: operations["ingest_with_tool_projects__project_id__skills__tool_key__ingest_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/chains/{chain_key}/run": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Run Chain * @description 发起多章链:写一行 job 返 202,链经 BackgroundTask 异步跑。 * * 项目不存在 → 404;未知 chain_key → 404;无凭据 → 503(dep 解析阶段拦下); * `count` 越界由 schema Field 在解析阶段 → 422。`gateway` 仅做请求阶段凭据探测—— * 链本体在 BackgroundTask 里用独立 session 重建网关跑(请求 session 即将关闭)。 */ post: operations["run_chain_projects__project_id__chains__chain_key__run_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/projects/{project_id}/chains/runs/{job_id}/resume": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Resume Chain * @description 裁决续跑:仅当 job=awaiting_input,带裁决经 BackgroundTask resume。 * * 项目不存在 → 404;job 不存在 / 不属于该项目 → 404(同案,不枚举);非 awaiting 态 → * 409(CONFLICT)。`awaiting→running` 在 HTTP 处理器内**原子抢占**(条件 UPDATE),避免两个 * 并发 resume 都过守卫后双 `Command(resume=...)` 损坏图(审评 #3);抢不到(已被并发抢走/非 * awaiting)→ 409。resume 经 `Command(resume=decisions)` 从 interrupt 续跑(同 thread_id)。 */ post: operations["resume_chain_projects__project_id__chains_runs__job_id__resume_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; }; "/settings/providers/kimi-code/oauth/start": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Start Oauth * @description 发起 device authorization:返回 202 + user_code/verification_uri,后台轮询 token。 * * 创建一行 `jobs(kind="kimi_oauth")`(202 前持久化供轮询)→ 调度 BackgroundTask 后台 * 轮询。前端展示 user_code + 打开 verification_uri + 轮询 `GET /jobs/{id}`。 */ post: operations["start_oauth_settings_providers_kimi_code_oauth_start_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/settings/providers/kimi-code/oauth/disconnect": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; get?: never; put?: never; /** * Disconnect Oauth * @description 断开 Kimi Code:删除 OAuth 凭据行(token 一并消失)。 */ post: operations["disconnect_oauth_settings_providers_kimi_code_oauth_disconnect_post"]; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; "/settings/providers/kimi-code/oauth/status": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; /** * Oauth Status * @description 连接状态:是否已连接 + access token 过期时刻(**无 token 本体**)。 */ get: operations["oauth_status_settings_providers_kimi_code_oauth_status_get"]; put?: never; post?: never; delete?: never; options?: never; head?: never; patch?: never; trace?: never; }; } export type webhooks = Record; 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; }; /** * AiMessageAppendRequest * @description POST /projects/{id}/ai-messages:一次交换的一批 bubble(批级字段提顶层)。 */ AiMessageAppendRequest: { /** * Thread Id * Format: uuid */ thread_id: string; /** Chapter No */ chapter_no?: number | null; /** * Kind * @enum {string} */ kind: "refine" | "rewrite" | "clarify" | "continue" | "generator"; /** Tool Key */ tool_key?: string | null; /** Messages */ messages: components["schemas"]["AiMessageInput"][]; }; /** * AiMessageInput * @description 一条待落库 bubble(角色 + 人读文本 + 结构化 meta)。 */ AiMessageInput: { /** * Role * @enum {string} */ role: "author" | "ai"; /** Content */ content: string; /** Meta */ meta?: { [key: string]: unknown; }; }; /** * AiMessageListResponse * @description append/list 信封:`messages` 复数键(repo 约定,非 `items`)。 */ AiMessageListResponse: { /** Messages */ messages: components["schemas"]["AiMessageView"][]; }; /** * AiMessageView * @description 聊天留痕视图(append/list 回显;snake_case,镜像 repo view)。 */ AiMessageView: { /** * Id * Format: uuid */ id: string; /** * Project Id * Format: uuid */ project_id: string; /** Chapter No */ chapter_no: number | null; /** * Thread Id * Format: uuid */ thread_id: string; /** Seq */ seq: number; /** Kind */ kind: string; /** Tool Key */ tool_key: string | null; /** Role */ role: string; /** Content */ content: string; /** Meta */ meta?: { [key: string]: unknown; }; /** * Created At * Format: date-time */ created_at: string; }; /** * CapabilitiesView * @description 探测得到的能力矩阵(镜像网关 `Capabilities`)。 */ CapabilitiesView: { /** * Structured Output * @default false */ structured_output: boolean; /** * Prefix Cache * @default false */ prefix_cache: boolean; /** * Thinking * @default false */ thinking: boolean; }; /** * ChainResumeAccepted * @description resume 受理回执(202):job_id + chain_key(前端走 `GET /jobs/{id}` 轮询续跑进度)。 * * 续跑无独立区间(图从检查点续),故不回显 start/count(会是无意义哨兵值)——只回 job 标识。 */ ChainResumeAccepted: { /** * Job Id * Format: uuid */ job_id: string; /** Chain Key */ chain_key: string; }; /** * ChainResumeRequest * @description 裁决续跑:对 awaiting 章最近审稿的每个冲突逐条裁决(复用 `ConflictDecision`)。 */ ChainResumeRequest: { /** * Decisions * @description 对 awaiting 章冲突的裁决清单(采纳/忽略/手改) */ decisions?: components["schemas"]["ConflictDecision"][]; }; /** * ChainRunAccepted * @description 链受理回执(202):job_id + 回显请求参数(前端走 `GET /jobs/{id}` 轮询进度/awaiting)。 */ ChainRunAccepted: { /** * Job Id * Format: uuid */ job_id: string; /** Chain Key */ chain_key: string; /** Start Chapter No */ start_chapter_no: number; /** Count */ count: number; }; /** * ChainRunRequest * @description 发起多章链:从 `start_chapter_no` 起循环写 `count` 章(区间含两端)。 * * `count` 1..50(>50 → 422 VALIDATION,由 Field 约束在边界拦下,不进 BackgroundTask); * `start_chapter_no >= 1`。 */ ChainRunRequest: { /** * Start Chapter No * @description 起始章号(含),>=1 */ start_chapter_no: number; /** * Count * @description 本 run 连续写的章数(1..50,含起始章) */ count: number; }; /** * CharacterCardView * @description 单张角色卡(贴 ww_agents.CharacterCard;预览 + 入库请求共用形)。 */ CharacterCardView: { /** * Name * @description 角色名 */ name: string; /** * Role * @description 角色定位 */ role: string; /** * Traits * @description 性格特质清单(性格三层) */ traits?: string[]; /** * Appearance * @description 外貌形象(缺则空串) * @default */ appearance: string; /** * Motive * @description 核心动机/欲望/恐惧(缺则空串) * @default */ motive: string; /** * Backstory * @description 背景故事 */ backstory: string; /** * Arc * @description 人物弧光(一句话) */ arc: string; /** * Speech Tics * @description 口癖/语言风格 */ speech_tics?: string[]; /** * Tags * @description 人设标签/萌点 */ tags?: string[]; /** * Relations * @description 关系网 */ relations?: components["schemas"]["CharacterRelationView"][]; }; /** * CharacterGenPreviewResponse * @description 角色生成预览(不持久化;作者确认后经 POST /characters 入库)。 */ CharacterGenPreviewResponse: { /** Cards */ cards?: components["schemas"]["CharacterCardView"][]; }; /** * CharacterGenerateRequest * @description POST /projects/:id/characters/generate:据需求生成角色卡(预览,群像防雷同)。 * * `role_mix`(⑦ 群像按定位配比)与 `count` 的关系:`role_mix` 在场时 `count` 取各值之和 * (忽略客户端显式 count),每项数量须 ≥ 1、总和须 ≤ `MAX_GENERATE_COUNT`;缺省则退回 * 单一 `role` + `count` 语义。 */ CharacterGenerateRequest: { /** * Brief * @description 角色生成需求 */ brief: string; /** * Count * @description 生成数量(role_mix 在场时取各值之和) * @default 1 */ count: number; /** * Role * @description 角色定位(主角/CP/对手/导师/工具人 等) */ role?: string | null; /** * Role Mix * @description 按定位配比生成 {定位: 数量};在场时 count=各值之和(每项≥1、总和≤12) */ role_mix?: { [key: string]: number; } | null; }; /** * CharacterIngestRequest * @description POST /projects/:id/characters:把作者确认的角色卡入库。 * * `acknowledge_conflicts`:作者已查看并接受预检冲突时置 `true`,越过 continuity gate * (仿 accept 的冲突裁决:不静默入库,须作者确认;默认 false → 有冲突即 409,见端点)。 */ CharacterIngestRequest: { /** * Cards * @description 待入库的角色卡(至少 1 张) */ cards: components["schemas"]["CharacterCardView"][]; /** * Acknowledge Conflicts * @description 作者已知悉并接受 continuity 冲突 → 放行入库 * @default false */ acknowledge_conflicts: boolean; }; /** * CharacterIngestResponse * @description 角色入库结果(201):写入的角色 + 被白名单丢弃的越权表(审计)。 */ CharacterIngestResponse: { /** * Created * @description 写入的角色名(按入参顺序) */ created?: string[]; /** * Rejected Tables * @description 被权限白名单丢弃的越权写表名(审计;正常为空) */ rejected_tables?: string[]; }; /** * CharacterListResponse * @description GET /projects/:id/characters:已入库角色全量列表(设定库 Codex 真源)。 * * DB JSONB dict 列 → API list/str 反向解包(入库形变的逆向,见 character_repo): * `{"items":[...]}`→list、`{"text":...}`→str;tags/relations 直落 list。 */ CharacterListResponse: { /** Characters */ characters?: components["schemas"]["CharacterCardView"][]; }; /** * CharacterRelationView * @description 单条人物关系(贴 ww_agents.CharacterRelation)。 */ CharacterRelationView: { /** Name */ name: string; /** Kind */ kind: string; /** Note */ note?: string | null; }; /** * ClarifyDecision * @description 润色预检澄清决策(结构化 LLM 输出 + API 响应)。 * * 路线A 两阶段之「问题」阶段:仅判定「要不要反问」并给选项,**不改正文**(正文仍走 * 既有 refine 端点)。纯只读(`clarify_refine_spec.writes=()`,不变量 #3)。 * * **全字段给默认值守解析韧性**(仿 `StyleDriftReview` 降级范式):LLM 漏产/畸形时 * 降级为 `need_clarification=false`(不问、直接放行 refine),绝不阻塞润色主链路。 * * - `need_clarification=false` → `questions` 为空、可给一句 `verification` 确认语; * - `need_clarification=true` → `questions` 恰 1 问(v1 硬上限)、`verification` 可空。 */ ClarifyDecision: { /** * Need Clarification * @description 是否需要向作者反问澄清(含糊/多走法→true;明确→false) * @default false */ need_clarification: boolean; /** * Questions * @description 反问清单(need_clarification=false 时为空;v1 硬上限 1 问) */ questions?: components["schemas"]["ClarifyQuestion"][]; /** * Verification * @description 明确时的一句『我这样理解对吗』确认语(need_clarification=false 时给,可空) */ verification?: string | null; }; /** * ClarifyOption * @description 单个澄清选项:展示文案 + 选中回填值(锚定本段/本章的一种具体走法)。 * * `value` = 作者选中后折进 refine instruction 字符串的内容(零迁移,不落库)。 * 凑不出具体可区分选项时退化为空 options(`ClarifyQuestion.options=[]`),突出自由输入。 */ ClarifyOption: { /** * Label * @description 展示文案(作者看到的选项标签) */ label: string; /** * Value * @description 选中后回填/折进 instruction 的具体走法内容 */ value: string; }; /** * ClarifyQuestion * @description 单条澄清反问:问题 + 2–4 个锚定选项 + 自由输入兜底。 * * `options` 常规 2–4 个(锚定本段/本章的具体走法);凑不出具体可区分选项时留空列表, * 退化为纯自由输入。`allow_free_text` 常驻 True——自由输入永远兜底(作者可不选任一项)。 */ ClarifyQuestion: { /** * Question * @description 反问的澄清问题(一句话,指向本段的分歧点) */ question: string; /** * Options * @description 2–4 个锚定本段/本章的具体走法选项;凑不出具体选项时为空列表 */ options?: components["schemas"]["ClarifyOption"][]; /** * Allow Free Text * @description 是否允许自由输入(常驻兜底) * @default true */ allow_free_text: 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; }; /** * DimensionEntry * @description 单个文风维度:名称 + 判定值 + 原文证据摘录(强类型,替代裸 dict[str, Any])。 */ DimensionEntry: { /** Name */ name: string; /** Value */ value: string; /** Evidence */ evidence?: string[]; }; /** * 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; }; /** * DraftStreamRequest * @description POST /projects/:id/chapters/:no/draft:本章生成的可选输入(T4-b)。 * * `directive` = 作者本章指令(覆盖/补充大纲节拍)。临时输入,不持久化、无迁移; * 后端只入 volatile(守缓存前缀不变量 #9)。无 body 时退化为纯按大纲生成(向后兼容)。 */ DraftStreamRequest: { /** Directive */ directive?: string | null; }; /** * DraftView * @description GET .../draft:回灌已保存草稿(含正文,供工作台重载编辑器)。 * * 与 PUT 的 `DraftResponse` 同元信息,**额外带 `content`**——读侧需要正文以重建编辑器, * 保存侧不回灌正文故不带。`length` 仍按 content 字符数派生。 */ DraftView: { /** * Project Id * Format: uuid */ project_id: string; /** Chapter No */ chapter_no: number; /** Volume */ volume: number; /** Status */ status: string; /** Version */ version: number; /** Content */ content: string; /** Length */ length: number; }; /** ErrorBody */ ErrorBody: { /** Code */ code: string; /** Message */ message: string; /** Details */ details?: { [key: string]: unknown; }; /** Request Id */ request_id?: string | null; }; /** ErrorEnvelope */ ErrorEnvelope: { error: components["schemas"]["ErrorBody"]; }; /** * 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"][]; }; /** * InjectionEntity * @description 一个被注入本章上下文的实体 + 入选理由(喂给透明面板的徽标)。 */ InjectionEntity: { /** * Kind * @description character / world_entity */ kind: string; /** Name */ name: string; /** * Reasons * @description explicit_beat/main_character/recent_digest/foreshadow_window/author_pin */ reasons?: string[]; }; /** * InjectionEntityRef * @description 作者 pin/排除点名的实体引用(kind + name)。 */ InjectionEntityRef: { /** * Kind * @description character / world_entity */ kind: string; /** Name */ name: string; }; /** * InjectionOverrideRequest * @description PUT /projects/:id/chapters/:no/injection:作者对本章注入的覆盖。 * * pinned 强制纳入(加 author_pin 理由);excluded 强制剔除;recent_n 覆盖近况回看章数 * (None=用默认)。空覆盖 = 纯自动选择。 */ InjectionOverrideRequest: { /** Pinned */ pinned?: components["schemas"]["InjectionEntityRef"][]; /** Excluded */ excluded?: components["schemas"]["InjectionEntityRef"][]; /** Recent N */ recent_n?: number | null; }; /** * InjectionResponse * @description GET/PUT /projects/:id/chapters/:no/injection:本章注入留痕 + 作者覆盖回显。 */ InjectionResponse: { /** * Project Id * Format: uuid */ project_id: string; /** Chapter No */ chapter_no: number; /** Selected */ selected?: components["schemas"]["InjectionEntity"][]; /** * Recent N * @description 生效的近况回看章数(默认或被 override 覆盖后的值) */ recent_n: number; /** * Pinned * @description 作者强制纳入的实体(回显) */ pinned?: components["schemas"]["InjectionEntityRef"][]; /** * Excluded * @description 作者强制剔除的实体(回显,供面板恢复) */ excluded?: components["schemas"]["InjectionEntityRef"][]; }; /** * JobResponse * @description 长任务状态(`GET /jobs/{id}`):状态 + 进度 + 结果/错误。 * * `result` 是任务成功后的非密摘要(如 `{"connected": true, ...}`);`error` 是失败后的 * 面向用户文案(已脱敏,绝不含 `str(exc)`,见 `services/job_runner._classify_job_error`)。 */ JobResponse: { /** * Id * Format: uuid */ id: string; /** Kind */ kind: string; /** Status */ status: string; /** * Progress * @default 0 */ progress: number; /** Result */ result?: { [key: string]: unknown; } | null; /** Error */ error?: string | null; }; /** * OAuthDisconnectResponse * @description 断开:是否删到凭据行。 */ OAuthDisconnectResponse: { /** Disconnected */ disconnected: boolean; }; /** * OAuthStartResponse * @description device flow 启动:返回 job_id(轮询 `GET /jobs/{id}`)+ 用户面展示信息。 * * 前端展示 `user_code`、打开 `verification_uri`(或 `verification_uri_complete`),并按 * `interval` 轮询 job 直到 `done`(已连接)/`failed`(过期/拒绝)。**无 token**。 */ OAuthStartResponse: { /** * Job Id * Format: uuid */ job_id: string; /** User Code */ user_code: string; /** Verification Uri */ verification_uri: string; /** Verification Uri Complete */ verification_uri_complete?: string | null; /** Expires In */ expires_in: number; /** Interval */ interval: number; }; /** * OAuthStatusResponse * @description 连接状态:是否已连接 + access token 过期时刻(ISO8601;**无 token 本体**)。 */ OAuthStatusResponse: { /** Connected */ connected: boolean; /** Expires At */ expires_at?: string | null; }; /** * 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"][]; }; /** * OutlineSceneIngestView * @description 细纲入库的单章场景行(贴 ww_agents.Scene;落 outline 表)。 */ OutlineSceneIngestView: { /** Idx */ idx: number; /** Beat */ beat: string; /** * Purpose * @default */ purpose: string; /** * Conflict * @default */ conflict: string; /** * Hook * @default */ hook: string; }; /** * 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?: string[]; /** Structure */ structure?: string | null; /** Tone */ tone?: string | null; /** Ending Type */ ending_type?: string | null; /** Narrative Pov */ narrative_pov?: string | null; }; /** * ProjectListResponse * @description GET /projects:项目列表。 */ ProjectListResponse: { /** Projects */ projects?: components["schemas"]["ProjectResponse"][]; }; /** * ProjectPlanGenerateRequest * @description POST /skills/project-plan/generate:向导草稿种子(不带 project 前缀,立项前 project 未建)。 * * **种子门控**:`genre` + `logline` 为必给种子(端点校验非空,否则 422)——空向导不出方案, * 防 slop。其余字段有则贴合、无则不臆造(序列化进 project_context,仿 `_project_context`)。 * 全字段带 `max_length` 上界(CR-H9),`brief` = 作者一句话方向(可空)。 */ ProjectPlanGenerateRequest: { /** * Genre * @description 题材(种子) */ genre?: string | null; /** * Logline * @description 一句话故事(种子) */ logline?: string | null; /** * Title * @description 暂定书名(可空) */ title?: string | null; /** * Premise * @description 立意(可空) */ premise?: string | null; /** * Theme * @description 主题(可空) */ theme?: string | null; /** * Structure * @description 故事结构(可空) */ structure?: string | null; /** * Tone * @description 基调(可空) */ tone?: string | null; /** * Ending Type * @description 结局取向(可空) */ ending_type?: string | null; /** * Narrative Pov * @description 叙事视角(可空) */ narrative_pov?: string | null; /** * Selling Points * @description 核心卖点(可空) */ selling_points?: string[]; /** * Brief * @description 作者一句话方向/需求(可空) */ brief?: string | null; }; /** * ProjectPlanView * @description 立项方案生成结果(贴 ww_agents.ProjectPlanResult;结构化预览,不入库)。 * * 全字段有默认值(守解析韧性)——前端按字段回填立项向导,只填非空交集、不覆盖作者已编辑值。 */ ProjectPlanView: { /** * Title Candidates * @description 书名候选清单 */ title_candidates?: string[]; /** * Setting * @description 时空背景 * @default */ setting: string; /** * Narrative Structure * @description 叙事结构 * @default */ narrative_structure: string; /** * Story Core * @description 故事核心 * @default */ story_core: string; /** * Ending Design * @description 结局设计 * @default */ ending_design: string; /** * Tone * @description 基调 * @default */ tone: string; }; /** * 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?: string[]; /** Structure */ structure?: string | null; /** Tone */ tone?: string | null; /** Ending Type */ ending_type?: string | null; /** Narrative Pov */ narrative_pov?: string | null; /** * Updated At * @description 项目最近更新时间 */ updated_at?: string | null; /** * Pending Review Count * @description 待审稿章节数 * @default 0 */ pending_review_count: number; }; /** * 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"][]; }; /** * RefineClarifyRequest * @description 润色预检澄清:选段 + 再沟通意见(WFW-9 M1 路线A 两阶段之「问题」阶段)。 * * 与 `RefineRequest` 独立——预检只判「意见清不清楚」,不改正文。`instruction` 为作者的 * 再沟通意见(可空/极短,正是触发反问的场景);带长度上界防超长入参。响应=`ClarifyDecision` * (在 ww_agents,端点直接返回,供前端 gen:api 生成强类型客户端)。 */ RefineClarifyRequest: { /** Segment */ segment: string; /** * Instruction * @default */ instruction: string; }; /** * RefineRequest * @description 回炉:重写选中段(可选改写指令)。 */ RefineRequest: { /** Segment */ segment: string; /** Instruction */ instruction?: string | null; }; /** * RefineResponse * @description 回炉结果:原段 + 重写段(不写库,作者采纳经既有 draft 自动保存合入)。 */ RefineResponse: { /** Original */ original: string; /** Refined */ refined: string; }; /** * ReviewConflictView * @description 单条一致性冲突(chapter_reviews.conflicts JSONB 子项;形对齐 SSE `conflict` 事件)。 * * 强类型化此前的裸 `dict[str, Any]`,给 TS 客户端真实字段类型。容忍历史/缺省(默认值)。 */ ReviewConflictView: { /** * Type * @default */ type: string; /** * Where * @default */ where: string; /** Refs */ refs?: string[]; /** * Suggestion * @default */ suggestion: string; /** Original */ original?: string | null; /** Replacement */ replacement?: string | null; }; /** * 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?: components["schemas"]["ReviewConflictView"][]; /** Foreshadow Sug */ foreshadow_sug?: { [key: string]: unknown; }[]; /** Style */ style?: { [key: string]: unknown; } | null; /** Pace */ pace?: { [key: string]: unknown; } | null; /** Characterization */ characterization?: { [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; }; /** * RewriteClarifyRequest * @description 整章重写预检澄清:章级意见 + 可选当前草稿(WFW-9 M2 路线A 两阶段之「问题」阶段)。 * * 与 `RewriteStreamRequest` 独立——预检只判「作者这条章级意见清不清楚」,**不改正文** * (整章重写仍走既有 rewrite SSE 端点)。`feedback` = 作者对整章的修改意见(触发反问的场景, * 可极短/含糊);`prior_draft` = 当前整章草稿(可选,仅供锚定;端点只取有界摘录喂 analyst 预检, * 不整章入 LLM)。带长度上界防超长入参。响应=`ClarifyDecision`(在 ww_agents,端点直接返回, * 供前端 gen:api 生成强类型客户端)。 */ RewriteClarifyRequest: { /** Feedback */ feedback: string; /** Prior Draft */ prior_draft?: string | null; }; /** * RewriteStreamRequest * @description POST /projects/:id/chapters/:no/rewrite:整章再沟通/重写。 * * `feedback` = 作者对本章的修改意见;`prior_draft` = 当前整章草稿(前端传入,据此 + 记忆 * 注入流式重写一版)。临时输入、不持久化、无迁移;只入 volatile(守缓存前缀不变量 #9)。 * 新版停前端/草稿,接受才落库(HITL,不变量 #3)。 */ RewriteStreamRequest: { /** Feedback */ feedback: string; /** Prior Draft */ prior_draft: string; }; /** * RuleCreateRequest * @description POST /projects/:id/rules:新增一条规则。 */ RuleCreateRequest: { /** * Level * @description 规则级别(global/genre/style/project,越具体越优先) * @enum {string} */ level: "global" | "genre" | "style" | "project"; /** * Content * @description 规则正文(首尾空白会被裁剪,不可全空白) */ content: string; }; /** * RuleListResponse * @description GET /projects/:id/rules:规则列表(规则页)。 */ RuleListResponse: { /** Rules */ rules?: components["schemas"]["RuleView"][]; }; /** * RuleView * @description 规则视图(创建后回显 + 列表项;snake_case)。 * * `id` 是该规则行的稳定主键——前端规则页用它作删除 handle(DELETE /rules/{rule_id})。 */ RuleView: { /** * Id * Format: uuid */ id: string; /** Level */ level: string; /** Content */ content: string; }; /** * SkillListResponse * @description GET /skills:技能库列表(按 name 升序)。 */ SkillListResponse: { /** Skills */ skills?: components["schemas"]["SkillView"][]; }; /** * SkillView * @description 单个 skill 的声明式视图(技能库 UI)。 */ SkillView: { /** Name */ name: string; /** * Scope * @description builtin / custom / community */ scope: string; /** * Tier * @description 能力档位(writer / analyst / light) */ tier: string; /** Reads */ reads?: string[]; /** Writes */ writes?: string[]; /** Genre */ genre?: string | null; }; /** * StyleFingerprintResponse * @description 最新文风指纹(`GET /style`):完整 16 维(名称/值/证据)+ 版本(对齐 UX §6.9)。 * * DB 存两列并行 dict(`{name:value}` + `{name:[evidence]}`);响应合并为 * `list[DimensionEntry]`,给 TS 客户端强类型(替代弱类型 `dict[str, Any]`)。 */ StyleFingerprintResponse: { /** Dimensions */ dimensions?: components["schemas"]["DimensionEntry"][]; /** Version */ version: number; }; /** * StyleLearnRequest * @description 学文风:上传样本正文(前端可读文件转文本)+ 模式(首学 / 更新)。 */ StyleLearnRequest: { /** Samples */ samples: string[]; /** * Mode * @default create * @enum {string} */ mode: "create" | "update"; }; /** * StyleLearnResponse * @description 学文风受理:返回 job_id(长任务,走 `GET /jobs/{id}` 轮询)。 */ StyleLearnResponse: { /** * Job Id * Format: uuid */ job_id: string; }; /** * TeardownIngestView * @description 拆书入库产物(贴 ww_agents.BookTeardownResult;落 rules 表)。F1。 */ TeardownIngestView: { /** * Themes * @description 核心主题/立意清单 */ themes?: string[]; /** * Archetypes * @description 人物原型/角色模板清单 */ archetypes?: string[]; /** * Structure * @description 叙事结构概述 * @default */ structure: string; /** * Hooks * @description 抓人钩子/爽点套路清单 */ hooks?: string[]; }; /** * TemplateCreateRequest * @description POST /templates:新建一条提示词模板。 */ TemplateCreateRequest: { /** * Title * @description 模板标题(非空,纯空白 → 422) */ title: string; /** * Body * @description 模板正文(非空,一键填入生成器的 brief/text) */ body: string; /** * Category * @description 可选分类 */ category?: string | null; /** * Tool Key * @description 可选关联生成器(NULL=通用) */ tool_key?: string | null; }; /** * TemplateResponse * @description 模板视图(列出/创建后回显;snake_case)。 */ TemplateResponse: { /** * Id * Format: uuid */ id: string; /** Title */ title: string; /** Body */ body: string; /** Category */ category?: string | null; /** Tool Key */ tool_key?: 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 * @enum {string} */ tier: "writer" | "analyst" | "light"; /** 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[]; }; /** * ToolDescriptorView * @description 单个生成器卡片描述符视图(前端据此渲染卡片栅格 + 输入表单)。 */ ToolDescriptorView: { /** * Key * @description 路由用稳定标识(brainstorm / book-title ...) */ key: string; /** Title */ title: string; /** Subtitle */ subtitle: string; /** Genre */ genre?: string | null; /** * Is Legacy * @description legacy 工具(spec=None)→ 前端走 legacy_route 跳现有页面 */ is_legacy: boolean; /** * Ingestable * @description 是否可入库(声明了 ingest 目标) */ ingestable: boolean; /** Input Fields */ input_fields?: components["schemas"]["ToolInputFieldView"][]; /** * Legacy Route * @description legacy 工具指向的现有页面路径(含 {id} 占位) */ legacy_route?: string | null; }; /** * ToolGeneratePreviewResponse * @description 通用生成预览:结构化产物(不持久化;仅记 ledger)。 * * `output_kind` = 该工具产物的 schema 名(如 IdeaListResult),供前端按类型选预览渲染器; * `preview` = 解析后的结构化产物(按各工具 output_schema 的形,键名见 ww_agents.schemas)。 */ ToolGeneratePreviewResponse: { /** Tool Key */ tool_key: string; /** * Output Kind * @description 产物 schema 名(前端按此选预览渲染器) */ output_kind: string; /** * Preview * @description 结构化产物(各工具 output_schema 的 model_dump;不入库) */ preview?: { [key: string]: unknown; }; }; /** * ToolGenerateRequest * @description 通用生成请求(覆盖全部工具的可选入参;按工具 input_fields 取用,snake_case)。 */ ToolGenerateRequest: { /** * Brief * @description 一句话需求/方向(可空,空则按题材发散) * @default */ brief: string; /** * Text * @description 原文输入(扩写/降AI 的原文、拆书的样本;text_input 策略工具用) */ text?: string | null; /** * Chapter No * @description 按章展开/续写类工具的章号(开篇/细纲/续写) */ chapter_no?: number | null; /** * Count * @description 生成数量(部分工具可用) */ count?: number | null; /** * Kind * @description 命名对象类别等(部分工具可用) */ kind?: string | null; }; /** * ToolIngestRequest * @description 通用入库请求:待持久化的产物 + 冲突确认。 * * 仅声明了 `ingest` 的工具可用。按入库表取用对应字段: * - world_entities(金手指/词条)→ `world_entities`(贴 WorldEntityCardView:type/name/rules); * - outline(细纲)→ `chapter_no` + `scenes`(贴 OutlineSceneIngestView); * - rules(拆书)→ `teardown`(贴 TeardownIngestView:themes/archetypes/structure/hooks)。 * `acknowledge_conflicts`:作者已查看并接受 continuity 预检冲突时置 true 放行(仿 accept gate)。 */ ToolIngestRequest: { /** * World Entities * @description world_entities 入库项(金手指/词条) */ world_entities?: components["schemas"]["WorldEntityCardView"][]; /** * Chapter No * @description outline 入库的目标章号(细纲) */ chapter_no?: number | null; /** * Scenes * @description outline 入库的场景行(细纲) */ scenes?: components["schemas"]["OutlineSceneIngestView"][]; /** @description rules 入库的拆书结论(F1;拍平为可读规则条目) */ teardown?: components["schemas"]["TeardownIngestView"] | null; /** * Acknowledge Conflicts * @description 作者已知悉并接受 continuity 冲突 → 放行入库 * @default false */ acknowledge_conflicts: boolean; }; /** * ToolIngestResponse * @description 通用入库结果(201):写入项标识 + 被白名单丢弃的越权表(审计)。 */ ToolIngestResponse: { /** * Table * @description 入库目标表 */ table: string; /** * Created * @description 写入项的标识(实体名 / 场景索引),按入参顺序 */ created?: string[]; /** * Rejected Tables * @description 被权限白名单丢弃的越权写表名(审计;正常为空) */ rejected_tables?: string[]; }; /** * ToolInputFieldView * @description 单个声明式表单字段视图(贴 ww_skills.InputField)。 */ ToolInputFieldView: { /** Name */ name: string; /** Label */ label: string; /** * Type * @description 控件类型:text / textarea / number / select 等 */ type: string; /** * Required * @default true */ required: boolean; /** Default */ default?: string | null; /** Help */ help?: string | null; }; /** * ToolboxListResponse * @description GET /skills/toolbox:创作工具箱全量描述符(legacy + 新工具)。 */ ToolboxListResponse: { /** Tools */ tools?: components["schemas"]["ToolDescriptorView"][]; }; /** ValidationError */ ValidationError: { /** Location */ loc: (string | number)[]; /** Message */ msg: string; /** Error Type */ type: string; /** Input */ input?: unknown; /** Context */ ctx?: Record; }; /** * WorldEntityCardView * @description 单个世界观实体卡(贴 ww_agents.WorldEntityCard;预览 + 入库共用形)。 */ WorldEntityCardView: { /** * Type * @description 实体类型(势力 / 地理 / 力量体系 / 物品 / 概念 等) */ type: string; /** * Name * @description 实体名 */ name: string; /** * Rules * @description 该实体的硬规则清单 */ rules?: string[]; }; /** * WorldEntityListResponse * @description GET /projects/:id/world_entities:已入库世界观实体全量列表(设定库 Codex 真源)。 * * DB JSONB dict 列 `{"rules":[...]}`→裸 list(worldbuilder 形变的逆向)。 */ WorldEntityListResponse: { /** World Entities */ world_entities?: components["schemas"]["WorldEntityCardView"][]; }; /** * WorldGenPreviewResponse * @description 世界观生成预览(不持久化;作者确认后另走入库,本期入库端点为角色)。 */ WorldGenPreviewResponse: { /** Entities */ entities?: components["schemas"]["WorldEntityCardView"][]; }; /** * WorldGenerateRequest * @description POST /projects/:id/world/generate:据需求生成世界观实体(预览)。 */ WorldGenerateRequest: { /** * Brief * @description 世界观生成需求(题材/设定方向/约束) */ brief: string; }; }; responses: never; parameters: never; requestBodies: never; headers: never; pathItems: never; } export type $defs = Record; 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": components["schemas"]["JobResponse"]; }; }; /** @description job 不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_projects_projects_get: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProjectListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; 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 资源不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; get_injection_projects__project_id__chapters__chapter_no__injection_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"]["InjectionResponse"]; }; }; /** @description 资源不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; save_injection_projects__project_id__chapters__chapter_no__injection_put: { parameters: { query?: never; header?: never; path: { project_id: string; chapter_no: number; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["InjectionOverrideRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["InjectionResponse"]; }; }; /** @description 资源不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; get_draft_projects__project_id__chapters__chapter_no__draft_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"]["DraftView"]; }; }; /** @description 资源不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @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?: { content: { "application/json": components["schemas"]["DraftStreamRequest"] | null; }; }; responses: { /** @description SSE 事件流(`event: \ndata: `,见 memory/contracts.md) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": unknown; "text/event-stream": unknown; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; stream_rewrite_projects__project_id__chapters__chapter_no__rewrite_post: { parameters: { query?: never; header?: never; path: { project_id: string; chapter_no: number; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RewriteStreamRequest"]; }; }; responses: { /** @description SSE 事件流(`event: \ndata: `,见 memory/contracts.md) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": unknown; "text/event-stream": unknown; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; clarify_rewrite_projects__project_id__chapters__chapter_no__rewrite_clarify_post: { parameters: { query?: never; header?: never; path: { project_id: string; chapter_no: number; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RewriteClarifyRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClarifyDecision"]; }; }; /** @description 项目不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; /** @description LLM 不可用 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; 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 SSE 事件流(`event: \ndata: `,见 memory/contracts.md) */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": unknown; "text/event-stream": 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 资源不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 存在未裁决冲突 */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; /** @description LLM 不可用 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; 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"]; }; }; }; }; get_outline_projects__project_id__outline_get: { parameters: { query?: { volume?: number | 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"]["OutlineResponse"]; }; }; /** @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_rules_projects__project_id__rules_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"]["RuleListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; create_rule_projects__project_id__rules_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RuleCreateRequest"]; }; }; responses: { /** @description Successful Response */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RuleView"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; delete_rule_projects__project_id__rules__rule_id__delete: { parameters: { query?: never; header?: never; path: { project_id: string; rule_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; get_style_projects__project_id__style_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"]["StyleFingerprintResponse"]; }; }; /** @description 项目或指纹不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; learn_style_projects__project_id__style_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["StyleLearnRequest"]; }; }; responses: { /** @description Successful Response */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["StyleLearnResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; refine_segment_projects__project_id__chapters__chapter_no__refine_post: { parameters: { query?: never; header?: never; path: { project_id: string; chapter_no: number; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RefineRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["RefineResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; clarify_refine_projects__project_id__chapters__chapter_no__refine_clarify_post: { parameters: { query?: never; header?: never; path: { project_id: string; chapter_no: number; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["RefineClarifyRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ClarifyDecision"]; }; }; /** @description 项目不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; /** @description LLM 不可用 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; list_templates_templates_get: { parameters: { query?: { limit?: number; offset?: number; }; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TemplateResponse"][]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; create_template_templates_post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["TemplateCreateRequest"]; }; }; responses: { /** @description Successful Response */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["TemplateResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; delete_template_templates__template_id__delete: { parameters: { query?: never; header?: never; path: { template_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 204: { headers: { [name: string]: unknown; }; content?: never; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_ai_messages_projects__project_id__ai_messages_get: { parameters: { query?: { chapter_no?: number | null; kind?: ("refine" | "rewrite" | "clarify" | "continue" | "generator") | null; limit?: number; offset?: number; }; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AiMessageListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; append_ai_messages_projects__project_id__ai_messages_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["AiMessageAppendRequest"]; }; }; responses: { /** @description Successful Response */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["AiMessageListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; generate_world_projects__project_id__world_generate_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["WorldGenerateRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["WorldGenPreviewResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; generate_characters_projects__project_id__characters_generate_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CharacterGenerateRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CharacterGenPreviewResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_characters_projects__project_id__characters_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"]["CharacterListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; ingest_characters_projects__project_id__characters_post: { parameters: { query?: never; header?: never; path: { project_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["CharacterIngestRequest"]; }; }; responses: { /** @description Successful Response */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["CharacterIngestResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_world_entities_projects__project_id__world_entities_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"]["WorldEntityListResponse"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_skills_skills_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"]["SkillListResponse"]; }; }; }; }; generate_project_plan_skills_project_plan_generate_post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ProjectPlanGenerateRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ProjectPlanView"]; }; }; /** @description Validation Error */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["HTTPValidationError"]; }; }; }; }; list_toolbox_skills_toolbox_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"]["ToolboxListResponse"]; }; }; }; }; generate_with_tool_projects__project_id__skills__tool_key__generate_post: { parameters: { query?: never; header?: never; path: { project_id: string; tool_key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ToolGenerateRequest"]; }; }; responses: { /** @description Successful Response */ 200: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ToolGeneratePreviewResponse"]; }; }; /** @description 工具或项目不存在 / legacy 工具无通用执行 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 工具不支持该操作(如不可入库) */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description LLM 不可用 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; ingest_with_tool_projects__project_id__skills__tool_key__ingest_post: { parameters: { query?: never; header?: never; path: { project_id: string; tool_key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ToolIngestRequest"]; }; }; responses: { /** @description Successful Response */ 201: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ToolIngestResponse"]; }; }; /** @description 工具或项目不存在 / legacy 工具无通用执行 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 存在未裁决 continuity 冲突 */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 工具不支持该操作(如不可入库) */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description LLM 不可用 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; run_chain_projects__project_id__chains__chain_key__run_post: { parameters: { query?: never; header?: never; path: { project_id: string; chain_key: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ChainRunRequest"]; }; }; responses: { /** @description Successful Response */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainRunAccepted"]; }; }; /** @description 项目或链 key 不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 请求参数非法(count 越界等) */ 422: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description 无可用 LLM 凭据 */ 503: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; }; }; resume_chain_projects__project_id__chains_runs__job_id__resume_post: { parameters: { query?: never; header?: never; path: { project_id: string; job_id: string; }; cookie?: never; }; requestBody: { content: { "application/json": components["schemas"]["ChainResumeRequest"]; }; }; responses: { /** @description Successful Response */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ChainResumeAccepted"]; }; }; /** @description 项目或 job 不存在 */ 404: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @description job 非 awaiting_input 态,不可续跑 */ 409: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["ErrorEnvelope"]; }; }; /** @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"]; }; }; }; }; start_oauth_settings_providers_kimi_code_oauth_start_post: { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; requestBody?: never; responses: { /** @description Successful Response */ 202: { headers: { [name: string]: unknown; }; content: { "application/json": components["schemas"]["OAuthStartResponse"]; }; }; }; }; disconnect_oauth_settings_providers_kimi_code_oauth_disconnect_post: { 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"]["OAuthDisconnectResponse"]; }; }; }; }; oauth_status_settings_providers_kimi_code_oauth_status_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"]["OAuthStatusResponse"]; }; }; }; }; }