DSA DOCS

DSA 文档中心

围绕 DSA 真实使用路径:快速开始、Actions、本地、Docker,以及源项目完整文档。

GitHub Actions 部署 本地运行 Docker 部署 打开 DSA 仓库
开发者

API 规格

FastAPI OpenAPI 规格产物,供外部集成和开发调试参考。

源文档 版本: v3.26.1-2-g487e49e 更新: 2026-07-16
API
{
  "openapi": "3.1.0",
  "info": {
    "title": "Daily Stock Analysis API",
    "description": "A股/港股/美股自选股智能分析系统 API\n\n## 功能模块\n- 股票分析:触发 AI 智能分析\n- 历史记录:查询历史分析报告\n- 股票数据:获取行情数据\n\n## 认证方式\n支持可选管理员认证:ADMIN_AUTH_ENABLED=true 时,除登录、状态、健康检查和 OpenAPI 文档外,/api/v1/* 需要有效管理员会话 Cookie;关闭时不强制认证。",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "http://localhost:8000",
      "description": "本地开发服务器"
    }
  ],
  "tags": [
    {
      "name": "Health",
      "description": "健康检查接口"
    },
    {
      "name": "Analysis",
      "description": "股票分析相关接口"
    },
    {
      "name": "History",
      "description": "历史记录相关接口"
    },
    {
      "name": "SystemConfig",
      "description": "系统配置管理接口"
    },
    {
      "name": "DecisionSignals",
      "description": "AI 决策信号资产接口"
    }
  ],
  "paths": {
    "/": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "API 根路由",
        "description": "返回 API 运行状态信息",
        "operationId": "root",
        "responses": {
          "200": {
            "description": "API 正常运行",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RootResponse"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "根路径健康检查",
        "description": "用于负载均衡器或监控系统检查服务状态;即使静态 Web 前端已构建,也返回 JSON 而不是 SPA HTML fallback。",
        "operationId": "rootHealthCheck",
        "responses": {
          "200": {
            "description": "服务健康",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/health": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "健康检查",
        "description": "用于负载均衡器或监控系统检查服务状态",
        "operationId": "healthCheck",
        "responses": {
          "200": {
            "description": "服务健康",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/health": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "v1 健康检查",
        "description": "API v1 前缀下的健康检查接口,用于监控系统和客户端探测服务状态。",
        "operationId": "v1HealthCheck",
        "responses": {
          "200": {
            "description": "服务健康",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/analyze": {
      "post": {
        "tags": [
          "Analysis"
        ],
        "summary": "触发股票分析",
        "description": "启动 AI 智能分析任务,支持单只或多只股票批量分析",
        "operationId": "triggerAnalysis",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnalyzeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "分析完成(同步模式)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalysisResult"
                }
              }
            }
          },
          "202": {
            "description": "分析任务已接受(异步模式)",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/TaskAccepted"
                    },
                    {
                      "$ref": "#/components/schemas/BatchTaskAcceptedResponse"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "请求参数错误",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "股票正在分析中,拒绝重复提交",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DuplicateTaskError"
                }
              }
            }
          },
          "500": {
            "description": "分析失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/tasks": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "获取分析任务列表",
        "description": "获取当前所有分析任务,支持按状态筛选。返回进行中和最近完成的任务。",
        "operationId": "getAnalysisTasks",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "筛选状态:pending, processing, completed, failed, cancel_requested, cancelled(支持逗号分隔多个)",
            "schema": {
              "type": "string",
              "example": "pending,processing"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "返回数量限制",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "任务列表",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaskListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/tasks/stream": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "任务状态 SSE 流",
        "description": "通过 Server-Sent Events 实时推送任务状态变化。\n\n## 事件类型\n- `connected`: 连接成功\n- `task_created`: 新任务创建\n- `task_started`: 任务开始执行\n- `task_completed`: 任务完成\n- `task_failed`: 任务失败\n- `heartbeat`: 心跳(每 30 秒)",
        "operationId": "taskStream",
        "responses": {
          "200": {
            "description": "SSE 事件流",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "example": "event: task_created\ndata: {\"task_id\": \"abc123\", \"stock_code\": \"600519\", \"status\": \"pending\"}\n\n"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/history": {
      "get": {
        "tags": [
          "History"
        ],
        "summary": "获取历史分析列表",
        "description": "分页获取历史分析记录摘要,支持按股票代码、报告类型和日期范围筛选",
        "operationId": "getHistoryList",
        "parameters": [
          {
            "name": "stock_code",
            "in": "query",
            "description": "股票代码筛选",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "report_type",
            "in": "query",
            "description": "报告类型筛选(如 market_review);不传则返回所有类型历史。",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "description": "开始日期 (YYYY-MM-DD)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "end_date",
            "in": "query",
            "description": "结束日期 (YYYY-MM-DD)",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "页码(从 1 开始)",
            "schema": {
              "type": "integer",
              "default": 1,
              "minimum": 1
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "每页数量",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "历史记录列表",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistoryListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/history/{query_id}": {
      "get": {
        "tags": [
          "History"
        ],
        "summary": "获取历史报告详情",
        "description": "根据 query_id 获取完整的历史分析报告",
        "operationId": "getHistoryDetail",
        "parameters": [
          {
            "name": "query_id",
            "in": "path",
            "required": true,
            "description": "分析记录唯一标识",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "报告详情",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalysisReport"
                }
              }
            }
          },
          "404": {
            "description": "报告不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/history/{query_id}/news": {
      "get": {
        "tags": [
          "History"
        ],
        "summary": "获取历史报告关联新闻",
        "description": "根据 query_id 获取关联的新闻情报列表(为空也返回 200)",
        "operationId": "getHistoryNews",
        "parameters": [
          {
            "name": "query_id",
            "in": "path",
            "required": true,
            "description": "分析记录唯一标识",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "返回数量限制",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "新闻情报列表",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NewsIntelResponse"
                }
              }
            }
          },
          "500": {
            "description": "服务器错误",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/system/config": {
      "get": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "获取系统配置",
        "description": "读取当前系统配置并返回分类后的显示值。服务端掩码的敏感字段可能返回 mask_token;客户端应结合 raw_value_exists 与 is_masked 判断。",
        "operationId": "getSystemConfig",
        "parameters": [
          {
            "name": "include_schema",
            "in": "query",
            "description": "是否携带字段元数据(默认 true)",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "配置读取成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemConfigResponse"
                }
              }
            }
          },
          "401": {
            "description": "未认证",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "读取失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "更新系统配置",
        "description": "按键更新系统配置。若字段值为掩码(如 ******),则保留原值不覆盖。",
        "operationId": "updateSystemConfig",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateSystemConfigRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "更新成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateSystemConfigResponse"
                }
              }
            }
          },
          "400": {
            "description": "参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemConfigValidationErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "配置版本冲突",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemConfigConflictResponse"
                }
              }
            }
          },
          "500": {
            "description": "更新失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/system/config/export": {
      "get": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "导出 `.env` 备份",
        "description": "返回当前已保存 `.env` 的原始文本内容,用于配置备份。",
        "operationId": "exportSystemConfig",
        "responses": {
          "200": {
            "description": "导出成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportSystemConfigResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "未开启管理员鉴权(`ADMIN_AUTH_ENABLED=false`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "导出失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/system/config/import": {
      "post": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "导入 `.env` 备份",
        "description": "按键级覆盖方式把备份文本合并到当前 `.env`,并沿用现有配置版本冲突保护。",
        "operationId": "importSystemConfig",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportSystemConfigRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "导入成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateSystemConfigResponse"
                }
              }
            }
          },
          "400": {
            "description": "导入文件无效或配置校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/SystemConfigValidationErrorResponse"
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "未认证",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "未开启管理员鉴权(`ADMIN_AUTH_ENABLED=false`)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "配置版本冲突",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemConfigConflictResponse"
                }
              }
            }
          },
          "500": {
            "description": "导入失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/system/config/validate": {
      "post": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "校验配置",
        "description": "仅校验提交内容,不写入 .env。用于前端保存前预检查。",
        "operationId": "validateSystemConfig",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateSystemConfigRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "校验完成",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateSystemConfigResponse"
                }
              }
            }
          },
          "500": {
            "description": "校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/system/config/schema": {
      "get": {
        "tags": [
          "SystemConfig"
        ],
        "summary": "获取配置字段元数据",
        "description": "返回配置分类、字段类型、校验规则和 UI 控件建议,用于前端动态渲染。",
        "operationId": "getSystemConfigSchema",
        "responses": {
          "200": {
            "description": "元数据读取成功",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemConfigSchemaResponse"
                }
              }
            }
          },
          "500": {
            "description": "元数据读取失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals": {
      "post": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "创建或去重决策信号",
        "description": "显式写入 DecisionSignal。未传 horizon/expires_at 时由服务补默认生命周期;命中同源去重键或窄 relaxed 去重时返回已有记录和 created=false;active 新建或 expired 续期会失效同股旧 active 相反信号,active duplicate retry 也会重跑该修复;普通旧 duplicate/replay 不作为新的激活事件;不保证并发绝对幂等。",
        "operationId": "createDecisionSignal",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecisionSignalCreateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "请求字段非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "请求体或路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "创建失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询决策信号列表",
        "description": "分页查询 DecisionSignal;读取前会懒过期已到 expires_at 的 active 信号。当 source_type=analysis 且只传 source_report_id 查询时,若无命中信号会尝试基于该历史报告一次性懒回填 (仅首次命中列表场景,且该精确查询会触发历史决策信号回填写入,属于 read-with-write 行为;不影响其他分页列表筛选参数场景)。holding_only=true 只读取 active 账户的 portfolio_positions 缓存持仓,不触发 portfolio snapshot replay。",
        "operationId": "listDecisionSignals",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "market",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market filter: cn/hk/us/jp/kr/tw",
              "title": "Market"
            },
            "description": "Optional market filter: cn/hk/us/jp/kr/tw"
          },
          {
            "name": "stock_code",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional stock code filter",
              "title": "Stock Code"
            },
            "description": "Optional stock code filter"
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional decision action filter",
              "title": "Action"
            },
            "description": "Optional decision action filter"
          },
          {
            "name": "market_phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market phase filter",
              "title": "Market Phase"
            },
            "description": "Optional market phase filter"
          },
          {
            "name": "decision_profile",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional decision profile filter: conservative/balanced/aggressive/unknown",
              "title": "Decision Profile"
            },
            "description": "Optional decision profile filter: conservative/balanced/aggressive/unknown"
          },
          {
            "name": "source_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional source type filter",
              "title": "Source Type"
            },
            "description": "Optional source type filter"
          },
          {
            "name": "source_report_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional source report id filter",
              "title": "Source Report Id"
            },
            "description": "Optional source report id filter"
          },
          {
            "name": "trace_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional trace id filter",
              "title": "Trace Id"
            },
            "description": "Optional trace id filter"
          },
          {
            "name": "trigger_source",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional trigger source filter",
              "title": "Trigger Source"
            },
            "description": "Optional trigger source filter"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional status filter",
              "title": "Status"
            },
            "description": "Optional status filter"
          },
          {
            "name": "created_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive created_at lower bound",
              "title": "Created From"
            },
            "description": "Inclusive created_at lower bound"
          },
          {
            "name": "created_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive created_at upper bound",
              "title": "Created To"
            },
            "description": "Inclusive created_at upper bound"
          },
          {
            "name": "expires_from",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive expires_at lower bound",
              "title": "Expires From"
            },
            "description": "Inclusive expires_at lower bound"
          },
          {
            "name": "expires_to",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive expires_at upper bound",
              "title": "Expires To"
            },
            "description": "Inclusive expires_at upper bound"
          },
          {
            "name": "holding_only",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Filter to active cached portfolio holdings only",
              "default": false,
              "title": "Holding Only"
            },
            "description": "Filter to active cached portfolio holdings only"
          },
          {
            "name": "account_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional active portfolio account id for holding_only",
              "title": "Account Id"
            },
            "description": "Optional active portfolio account id for holding_only"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "title": "Page"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Page Size"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalListResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "查询参数非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "查询参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/latest/{stock_code}": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询股票最新 active 决策信号",
        "description": "返回指定股票最新 active 信号列表;读取前会执行懒过期。",
        "operationId": "getLatestDecisionSignals",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "stock_code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Stock Code"
            }
          },
          {
            "name": "market",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market filter: cn/hk/us/jp/kr/tw",
              "title": "Market"
            },
            "description": "Optional market filter: cn/hk/us/jp/kr/tw"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 1,
              "title": "Limit"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalListResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "请求参数非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "路径或查询参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/{signal_id}": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询单条决策信号",
        "description": "按 ID 查询单条 DecisionSignal;读取前会执行懒过期。",
        "operationId": "getDecisionSignal",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Signal Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalItem"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/{signal_id}/status": {
      "patch": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "更新决策信号状态",
        "description": "只更新合法状态和可选 metadata;省略 metadata 时保留原值,null 时清空,object 时按整包替换并保持正式 decision_profile 身份。expired/invalidated/closed/archived 等 terminal 状态不能直接 PATCH 回 active。",
        "operationId": "updateDecisionSignalStatus",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Signal Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecisionSignalStatusUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalItem"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "状态非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "请求体或路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "更新失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/analysis/tasks/{task_id}/flow": {
      "get": {
        "tags": [
          "Analysis"
        ],
        "summary": "获取分析任务运行流",
        "description": "根据 task_id 查询活跃任务或已落库任务的运行流快照。活跃任务缺少诊断时返回 skeleton flow;完成任务可按同一 task_id/query_id 尝试读取历史诊断。",
        "operationId": "getTaskRunFlow",
        "parameters": [
          {
            "name": "task_id",
            "in": "path",
            "required": true,
            "description": "分析任务 ID",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "任务运行流快照",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunFlowSnapshot"
                }
              }
            }
          },
          "404": {
            "description": "任务不存在或已过期",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "服务器错误",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/history/{record_id}/flow": {
      "get": {
        "tags": [
          "History"
        ],
        "summary": "获取历史报告运行流",
        "description": "根据历史记录 ID 或可解析的 query_id 获取历史报告运行流快照。旧历史缺少诊断时返回 skeleton/unknown 状态,不影响报告详情读取。",
        "operationId": "getHistoryRunFlow",
        "parameters": [
          {
            "name": "record_id",
            "in": "path",
            "required": true,
            "description": "历史记录主键 ID 或 query_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "历史报告运行流快照",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RunFlowSnapshot"
                }
              }
            }
          },
          "404": {
            "description": "报告不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "服务器错误",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/usage/summary": {
      "get": {
        "tags": [
          "Usage"
        ],
        "summary": "LLM token usage summary",
        "description": "Aggregate token consumption by period, call type, and model.",
        "operationId": "get_usage_summary_api_v1_usage_summary_get",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "'today' | 'month' | 'all'",
              "default": "month",
              "title": "Period"
            },
            "description": "'today' | 'month' | 'all'"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageSummaryResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/usage/dashboard": {
      "get": {
        "tags": [
          "Usage"
        ],
        "summary": "LLM token usage monitoring dashboard",
        "description": "Return token totals, model breakdowns, and recent LLM call records.",
        "operationId": "get_usage_dashboard_api_v1_usage_dashboard_get",
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "'today' | 'month' | 'all'",
              "default": "month",
              "title": "Period"
            },
            "description": "'today' | 'month' | 'all'"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 200,
              "minimum": 1,
              "description": "Recent call records to include",
              "default": 50,
              "title": "Limit"
            },
            "description": "Recent call records to include"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsageDashboardResponse"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/outcomes/run": {
      "post": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "触发决策信号后验评估",
        "description": "显式触发 signal-level outcome 计算;默认跳过 completed 和终态 unable,但会重算缺少行情数据等可恢复 unable;force=true 会重算并覆盖同一 signal_id+horizon+engine_version。",
        "operationId": "runDecisionSignalOutcomes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecisionSignalOutcomeRunRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalOutcomeRunResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "请求字段非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "请求体校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "后验计算失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "AdminSessionCookie": []
          }
        ]
      }
    },
    "/api/v1/decision-signals/outcomes": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询决策信号后验结果",
        "description": "分页查询 signal-level outcome;默认只查当前 signal 后验 engine_version。",
        "operationId": "listDecisionSignalOutcomes",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "exclusiveMinimum": 0
                },
                {
                  "type": "null"
                }
              ],
              "title": "Signal Id"
            }
          },
          {
            "name": "horizon",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Horizon"
            }
          },
          {
            "name": "engine_version",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Engine Version"
            }
          },
          {
            "name": "eval_status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Eval Status"
            }
          },
          {
            "name": "outcome",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Outcome"
            }
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "title": "Page"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Page Size"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalOutcomeListResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "查询参数非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "查询参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/outcomes/stats": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询决策信号后验统计",
        "description": "默认统计当前 engine_version,且排除 archived 信号。",
        "operationId": "getDecisionSignalOutcomeStats",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "horizons",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Horizons"
            }
          },
          {
            "name": "engine_version",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Engine Version"
            }
          },
          {
            "name": "statuses",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Statuses"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalOutcomeStatsResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "查询参数非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "查询参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "统计失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/{signal_id}/outcomes": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询单个决策信号后验结果",
        "description": "返回指定 signal_id 在当前 engine_version 下的后验结果。",
        "operationId": "listDecisionSignalOutcomesBySignal",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Signal Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalOutcomeListResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/{signal_id}/feedback": {
      "get": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "查询决策信号用户反馈",
        "description": "没有反馈时返回 feedback_value=null;信号不存在时返回 404。",
        "operationId": "getDecisionSignalFeedback",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Signal Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalFeedbackItem"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "查询失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "写入决策信号用户反馈",
        "description": "按 signal_id upsert 最新 useful/not_useful 反馈。",
        "operationId": "putDecisionSignalFeedback",
        "security": [
          {
            "AdminSessionCookie": []
          }
        ],
        "parameters": [
          {
            "name": "signal_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Signal Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecisionSignalFeedbackRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalFeedbackItem"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "请求字段非法",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "信号不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "请求体或路径参数校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "更新失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/alerts/triggers": {
      "get": {
        "tags": [
          "Alerts"
        ],
        "summary": "List alert trigger history",
        "operationId": "list_triggers_api_v1_alerts_triggers_get",
        "parameters": [
          {
            "name": "rule_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional rule id filter",
              "title": "Rule Id"
            },
            "description": "Optional rule id filter"
          },
          {
            "name": "target",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional target filter",
              "title": "Target"
            },
            "description": "Optional target filter"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional status filter",
              "title": "Status"
            },
            "description": "Optional status filter"
          },
          {
            "name": "page",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "title": "Page"
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "default": 20,
              "title": "Page Size"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertTriggerListResponse"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/portfolio/risk": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Get portfolio risk report",
        "operationId": "get_risk_report_api_v1_portfolio_risk_get",
        "parameters": [
          {
            "name": "account_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional account id",
              "title": "Account Id"
            },
            "description": "Optional account id"
          },
          {
            "name": "as_of",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Risk report date, default today",
              "title": "As Of"
            },
            "description": "Risk report date, default today"
          },
          {
            "name": "cost_method",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Cost method: fifo or avg",
              "default": "fifo",
              "title": "Cost Method"
            },
            "description": "Cost method: fifo or avg"
          },
          {
            "name": "include_realtime",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Whether today's risk snapshot should try realtime quotes before historical close fallback",
              "default": true,
              "title": "Include Realtime"
            },
            "description": "Whether today's risk snapshot should try realtime quotes before historical close fallback"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioRiskResponse"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Bad Request"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Internal Server Error"
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/decision-signals/reassess": {
      "post": {
        "tags": [
          "DecisionSignals"
        ],
        "summary": "重评估决策风格并可选保存",
        "description": "基于 source_report_id 对应的持久化历史报告快照重新计算 decision_profile 信号;persist=false 返回只读 preview,persist=true 将通过 guardrail 的服务端结果写入 DecisionSignal。",
        "operationId": "reassessDecisionSignalPreview",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecisionSignalReassessRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalReassessResponse"
                }
              }
            }
          },
          "401": {
            "description": "未登录或管理员会话无效(ADMIN_AUTH_ENABLED=true 时)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "400": {
            "description": "历史报告不适用或持久化被风控阻断",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecisionSignalReassessErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "来源历史报告不存在",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "请求体校验失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "重评估失败",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "AdminSessionCookie": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "RootResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "example": "Daily Stock Analysis API is running"
          },
          "version": {
            "type": "string",
            "example": "1.0.0"
          }
        },
        "required": [
          "message"
        ]
      },
      "HealthResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "example": "ok"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "status"
        ]
      },
      "AnalyzeRequest": {
        "type": "object",
        "properties": {
          "stock_code": {
            "type": "string",
            "description": "单只股票代码",
            "example": "600519"
          },
          "stock_codes": {
            "type": "array",
            "description": "多只股票代码(与 stock_code 二选一)",
            "items": {
              "type": "string"
            },
            "example": [
              "600519",
              "000858"
            ]
          },
          "report_type": {
            "type": "string",
            "enum": [
              "simple",
              "detailed",
              "full",
              "brief"
            ],
            "default": "detailed",
            "description": "报告类型:simple(精简) / detailed(完整) / full(完整) / brief(简洁)"
          },
          "force_refresh": {
            "type": "boolean",
            "default": false,
            "description": "是否强制刷新(忽略缓存)"
          },
          "async_mode": {
            "type": "boolean",
            "default": false,
            "description": "是否使用异步模式"
          },
          "analysis_phase": {
            "type": "string",
            "enum": [
              "auto",
              "premarket",
              "intraday",
              "postmarket"
            ],
            "default": "auto",
            "description": "分析阶段覆盖:auto(自动推断) / premarket(盘前) / intraday(盘中) / postmarket(盘后)"
          }
        }
      },
      "AnalysisResult": {
        "type": "object",
        "properties": {
          "query_id": {
            "type": "string",
            "description": "分析记录唯一标识"
          },
          "stock_code": {
            "type": "string"
          },
          "stock_name": {
            "type": "string"
          },
          "report": {
            "$ref": "#/components/schemas/AnalysisReport"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "query_id",
          "stock_code",
          "report",
          "created_at"
        ]
      },
      "TaskAccepted": {
        "type": "object",
        "properties": {
          "task_id": {
            "type": "string",
            "description": "任务 ID,用于查询状态"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing"
            ],
            "example": "pending"
          },
          "message": {
            "type": "string",
            "example": "Analysis task accepted"
          },
          "analysis_phase": {
            "type": "string",
            "enum": [
              "auto",
              "premarket",
              "intraday",
              "postmarket"
            ],
            "default": "auto",
            "description": "请求的分析阶段"
          }
        },
        "required": [
          "task_id",
          "status"
        ]
      },
      "BatchTaskAcceptedItem": {
        "type": "object",
        "properties": {
          "task_id": {
            "type": "string",
            "description": "任务 ID,用于查询状态"
          },
          "stock_code": {
            "type": "string",
            "description": "股票代码"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing"
            ]
          },
          "message": {
            "type": "string"
          },
          "analysis_phase": {
            "type": "string",
            "enum": [
              "auto",
              "premarket",
              "intraday",
              "postmarket"
            ],
            "default": "auto",
            "description": "请求的分析阶段"
          }
        },
        "required": [
          "task_id",
          "stock_code",
          "status"
        ]
      },
      "BatchDuplicateTaskItem": {
        "type": "object",
        "properties": {
          "stock_code": {
            "type": "string",
            "description": "股票代码"
          },
          "existing_task_id": {
            "type": "string",
            "description": "已存在的任务 ID"
          },
          "message": {
            "type": "string",
            "description": "错误信息"
          }
        },
        "required": [
          "stock_code",
          "existing_task_id",
          "message"
        ]
      },
      "BatchTaskAcceptedResponse": {
        "type": "object",
        "properties": {
          "accepted": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchTaskAcceptedItem"
            }
          },
          "duplicates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchDuplicateTaskItem"
            }
          },
          "message": {
            "type": "string",
            "description": "汇总信息"
          }
        },
        "required": [
          "accepted",
          "duplicates",
          "message"
        ]
      },
      "TaskStatus": {
        "type": "object",
        "properties": {
          "task_id": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed"
            ]
          },
          "progress": {
            "type": "integer",
            "description": "进度百分比 (0-100)"
          },
          "result": {
            "$ref": "#/components/schemas/AnalysisResult"
          },
          "error": {
            "type": "string",
            "description": "错误信息(仅在 failed 时存在)"
          },
          "analysis_phase": {
            "type": "string",
            "enum": [
              "auto",
              "premarket",
              "intraday",
              "postmarket"
            ],
            "nullable": true,
            "description": "请求的分析阶段;无持久化字段的历史 DB fallback 可能为空"
          }
        },
        "required": [
          "task_id",
          "status"
        ]
      },
      "TaskInfo": {
        "type": "object",
        "description": "任务详情(用于任务列表和 SSE 事件)",
        "properties": {
          "task_id": {
            "type": "string",
            "description": "任务 ID"
          },
          "stock_code": {
            "type": "string",
            "description": "股票代码"
          },
          "stock_name": {
            "type": "string",
            "description": "股票名称"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed"
            ],
            "description": "任务状态"
          },
          "progress": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "进度百分比"
          },
          "message": {
            "type": "string",
            "description": "状态消息"
          },
          "report_type": {
            "type": "string",
            "enum": [
              "simple",
              "detailed"
            ],
            "description": "报告类型"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "description": "创建时间"
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "description": "开始执行时间"
          },
          "completed_at": {
            "type": "string",
            "format": "date-time",
            "description": "完成时间"
          },
          "error": {
            "type": "string",
            "description": "错误信息"
          },
          "analysis_phase": {
            "type": "string",
            "enum": [
              "auto",
              "premarket",
              "intraday",
              "postmarket"
            ],
            "default": "auto",
            "description": "请求的分析阶段"
          }
        },
        "required": [
          "task_id",
          "stock_code",
          "status",
          "created_at"
        ]
      },
      "TaskListResponse": {
        "type": "object",
        "description": "任务列表响应",
        "properties": {
          "total": {
            "type": "integer",
            "description": "任务总数"
          },
          "pending": {
            "type": "integer",
            "description": "等待中的任务数"
          },
          "processing": {
            "type": "integer",
            "description": "处理中的任务数"
          },
          "tasks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TaskInfo"
            },
            "description": "任务列表"
          }
        },
        "required": [
          "total",
          "pending",
          "processing",
          "tasks"
        ]
      },
      "DuplicateTaskError": {
        "type": "object",
        "description": "重复任务错误响应",
        "properties": {
          "error": {
            "type": "string",
            "example": "duplicate_task",
            "description": "错误类型"
          },
          "message": {
            "type": "string",
            "example": "股票 600519 正在分析中",
            "description": "错误信息"
          },
          "stock_code": {
            "type": "string",
            "example": "600519",
            "description": "股票代码"
          },
          "existing_task_id": {
            "type": "string",
            "example": "abc123def456",
            "description": "已存在的任务 ID"
          }
        },
        "required": [
          "error",
          "message",
          "stock_code",
          "existing_task_id"
        ]
      },
      "HistoryListResponse": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "description": "总记录数"
          },
          "page": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HistoryItem"
            }
          }
        },
        "required": [
          "total",
          "page",
          "limit",
          "items"
        ]
      },
      "NewsIntelItem": {
        "type": "object",
        "description": "新闻情报条目",
        "properties": {
          "title": {
            "type": "string",
            "description": "新闻标题"
          },
          "snippet": {
            "type": "string",
            "description": "新闻摘要(最多50字)"
          },
          "url": {
            "type": "string",
            "description": "新闻链接"
          }
        },
        "required": [
          "title",
          "url"
        ]
      },
      "NewsIntelResponse": {
        "type": "object",
        "description": "新闻情报响应",
        "properties": {
          "total": {
            "type": "integer",
            "description": "新闻条数"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NewsIntelItem"
            },
            "description": "新闻列表"
          }
        },
        "required": [
          "total",
          "items"
        ]
      },
      "HistoryItem": {
        "type": "object",
        "description": "历史记录摘要(列表展示用)",
        "properties": {
          "query_id": {
            "type": "string"
          },
          "stock_code": {
            "type": "string"
          },
          "stock_name": {
            "type": "string"
          },
          "report_type": {
            "type": "string"
          },
          "sentiment_score": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "operation_advice": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "description": "结构化建议动作 taxonomy",
            "nullable": true,
            "enum": [
              "buy",
              "add",
              "hold",
              "reduce",
              "sell",
              "watch",
              "avoid",
              "alert"
            ]
          },
          "action_label": {
            "type": "string",
            "description": "建议动作展示标签",
            "nullable": true
          },
          "model_used": {
            "type": "string",
            "description": "历史记录中展示的模型快照,仅用于展示与排障,不影响 provider/model/base URL 运行时路由"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "query_id",
          "stock_code",
          "created_at"
        ]
      },
      "AnalysisReport": {
        "type": "object",
        "description": "完整分析报告",
        "properties": {
          "meta": {
            "type": "object",
            "description": "元信息",
            "properties": {
              "query_id": {
                "type": "string"
              },
              "stock_code": {
                "type": "string"
              },
              "stock_name": {
                "type": "string"
              },
              "report_type": {
                "type": "string"
              },
              "created_at": {
                "type": "string",
                "format": "date-time"
              },
              "model_used": {
                "type": "string",
                "description": "历史快照中的模型名称,仅供展示,不参与运行时 provider/model/base URL 路由、清理或迁移"
              }
            }
          },
          "summary": {
            "type": "object",
            "description": "概览区(首屏展示)",
            "properties": {
              "analysis_summary": {
                "type": "string",
                "description": "关键结论"
              },
              "operation_advice": {
                "type": "string",
                "description": "操作建议"
              },
              "action": {
                "type": "string",
                "description": "结构化建议动作 taxonomy",
                "nullable": true,
                "enum": [
                  "buy",
                  "add",
                  "hold",
                  "reduce",
                  "sell",
                  "watch",
                  "avoid",
                  "alert"
                ]
              },
              "action_label": {
                "type": "string",
                "description": "建议动作展示标签",
                "nullable": true
              },
              "trend_prediction": {
                "type": "string",
                "description": "趋势预测"
              },
              "sentiment_score": {
                "type": "integer",
                "description": "情绪评分 (0-100)"
              },
              "sentiment_label": {
                "type": "string",
                "description": "情绪标签",
                "enum": [
                  "极度悲观",
                  "悲观",
                  "中性",
                  "乐观",
                  "极度乐观"
                ]
              }
            }
          },
          "strategy": {
            "type": "object",
            "description": "策略点位区",
            "properties": {
              "ideal_buy": {
                "type": "string",
                "description": "理想买入价"
              },
              "secondary_buy": {
                "type": "string",
                "description": "第二买入价"
              },
              "stop_loss": {
                "type": "string",
                "description": "止损价"
              },
              "take_profit": {
                "type": "string",
                "description": "止盈价"
              }
            }
          },
          "details": {
            "type": "object",
            "description": "详情区(可折叠)",
            "properties": {
              "news_content": {
                "type": "string",
                "description": "新闻摘要"
              },
              "raw_result": {
                "type": "object",
                "description": "原始分析结果(JSON)"
              },
              "context_snapshot": {
                "type": "object",
                "description": "分析时上下文快照(JSON)"
              },
              "market_structure": {
                "type": "object",
                "description": "市场结构上下文(题材主线与个股市场位置信息,JSON)"
              }
            }
          }
        },
        "required": [
          "meta",
          "summary"
        ]
      },
      "StockQuote": {
        "type": "object",
        "description": "股票实时行情",
        "properties": {
          "stock_code": {
            "type": "string"
          },
          "stock_name": {
            "type": "string"
          },
          "current_price": {
            "type": "number"
          },
          "change": {
            "type": "number",
            "description": "涨跌额"
          },
          "change_percent": {
            "type": "number",
            "description": "涨跌幅 (%)"
          },
          "open": {
            "type": "number"
          },
          "high": {
            "type": "number"
          },
          "low": {
            "type": "number"
          },
          "prev_close": {
            "type": "number"
          },
          "volume": {
            "type": "number",
            "description": "成交量(股)"
          },
          "amount": {
            "type": "number",
            "description": "成交额(元)"
          },
          "update_time": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "stock_code",
          "current_price"
        ]
      },
      "SystemConfigFieldSchema": {
        "type": "object",
        "description": "系统配置字段元数据",
        "properties": {
          "key": {
            "type": "string",
            "description": "配置键名(ENV 变量)",
            "example": "GEMINI_API_KEY"
          },
          "title": {
            "type": "string",
            "description": "前端展示标题",
            "example": "Gemini API Key"
          },
          "description": {
            "type": "string",
            "description": "字段说明"
          },
          "category": {
            "type": "string",
            "enum": [
              "base",
              "data_source",
              "ai_model",
              "notification",
              "system",
              "backtest",
              "uncategorized"
            ],
            "description": "分类"
          },
          "data_type": {
            "type": "string",
            "enum": [
              "string",
              "integer",
              "number",
              "boolean",
              "array",
              "json",
              "time"
            ]
          },
          "ui_control": {
            "type": "string",
            "enum": [
              "text",
              "password",
              "number",
              "select",
              "textarea",
              "switch",
              "time"
            ],
            "description": "前端控件建议"
          },
          "is_sensitive": {
            "type": "boolean"
          },
          "is_required": {
            "type": "boolean"
          },
          "is_editable": {
            "type": "boolean"
          },
          "default_value": {
            "type": "string",
            "nullable": true
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "可选值列表(用于 select)"
          },
          "validation": {
            "type": "object",
            "description": "校验规则定义(min/max/regex/enum/custom)"
          },
          "display_order": {
            "type": "integer"
          }
        },
        "required": [
          "key",
          "category",
          "data_type",
          "ui_control",
          "is_sensitive",
          "is_required",
          "is_editable",
          "display_order"
        ]
      },
      "SystemConfigCategorySchema": {
        "type": "object",
        "description": "配置分类元数据",
        "properties": {
          "category": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "display_order": {
            "type": "integer"
          },
          "fields": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemConfigFieldSchema"
            }
          }
        },
        "required": [
          "category",
          "title",
          "display_order",
          "fields"
        ]
      },
      "SystemConfigSchemaResponse": {
        "type": "object",
        "description": "配置元数据响应",
        "properties": {
          "schema_version": {
            "type": "string",
            "example": "2026-02-09"
          },
          "categories": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemConfigCategorySchema"
            }
          }
        },
        "required": [
          "schema_version",
          "categories"
        ]
      },
      "SystemConfigItem": {
        "type": "object",
        "description": "系统配置项(含脱敏显示值)",
        "properties": {
          "key": {
            "type": "string"
          },
          "value": {
            "type": "string",
            "description": "当前配置值;敏感字段可能返回掩码,真实值不保证返回,客户端应结合 raw_value_exists 与 is_masked 判断"
          },
          "raw_value_exists": {
            "type": "boolean",
            "description": "保存配置中是否存在该 key 的原始值;为 false 时 value 可能来自默认值或运行时环境,敏感运行时值仍可能被服务端掩码"
          },
          "is_masked": {
            "type": "boolean",
            "description": "value 是否为服务端掩码显示值"
          },
          "schema": {
            "$ref": "#/components/schemas/SystemConfigFieldSchema"
          }
        },
        "required": [
          "key",
          "value",
          "raw_value_exists",
          "is_masked"
        ]
      },
      "SystemConfigResponse": {
        "type": "object",
        "description": "系统配置读取响应",
        "properties": {
          "config_version": {
            "type": "string",
            "description": "配置版本(用于乐观锁)",
            "example": "2026-02-09T13:20:31Z:sha256:4f9a..."
          },
          "mask_token": {
            "type": "string",
            "example": "******"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemConfigItem"
            }
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "config_version",
          "mask_token",
          "items"
        ]
      },
      "ExportSystemConfigResponse": {
        "type": "object",
        "description": "`.env` 原文导出响应",
        "properties": {
          "content": {
            "type": "string",
            "description": "当前已保存 `.env` 的原始文本内容"
          },
          "config_version": {
            "type": "string",
            "description": "导出时对应的配置版本"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "content",
          "config_version"
        ]
      },
      "SystemConfigUpdateItem": {
        "type": "object",
        "description": "配置更新项",
        "properties": {
          "key": {
            "type": "string",
            "example": "STOCK_LIST"
          },
          "value": {
            "type": "string",
            "description": "字段新值;若敏感字段传入掩码 token 则表示保持原值"
          }
        },
        "required": [
          "key",
          "value"
        ]
      },
      "UpdateSystemConfigRequest": {
        "type": "object",
        "description": "系统配置更新请求",
        "properties": {
          "config_version": {
            "type": "string"
          },
          "mask_token": {
            "type": "string",
            "default": "******"
          },
          "reload_now": {
            "type": "boolean",
            "default": true
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemConfigUpdateItem"
            },
            "minItems": 1
          }
        },
        "required": [
          "config_version",
          "items"
        ]
      },
      "ImportSystemConfigRequest": {
        "type": "object",
        "description": "`.env` 导入请求",
        "properties": {
          "config_version": {
            "type": "string"
          },
          "content": {
            "type": "string",
            "description": "待导入的 `.env` 原始文本"
          },
          "reload_now": {
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "config_version",
          "content"
        ]
      },
      "UpdateSystemConfigResponse": {
        "type": "object",
        "description": "系统配置更新结果",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "config_version": {
            "type": "string"
          },
          "applied_count": {
            "type": "integer"
          },
          "skipped_masked_count": {
            "type": "integer"
          },
          "reload_triggered": {
            "type": "boolean"
          },
          "updated_keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "success",
          "config_version",
          "applied_count",
          "skipped_masked_count",
          "reload_triggered",
          "updated_keys"
        ]
      },
      "ValidateSystemConfigRequest": {
        "type": "object",
        "description": "配置校验请求",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SystemConfigUpdateItem"
            },
            "minItems": 1
          }
        },
        "required": [
          "items"
        ]
      },
      "ConfigValidationIssue": {
        "type": "object",
        "description": "配置校验问题",
        "properties": {
          "key": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "example": "invalid_format"
          },
          "message": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "error",
              "warning"
            ]
          },
          "expected": {
            "type": "string"
          },
          "actual": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "code",
          "message",
          "severity"
        ]
      },
      "ValidateSystemConfigResponse": {
        "type": "object",
        "description": "配置校验结果",
        "properties": {
          "valid": {
            "type": "boolean"
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConfigValidationIssue"
            }
          }
        },
        "required": [
          "valid",
          "issues"
        ]
      },
      "SystemConfigValidationErrorResponse": {
        "type": "object",
        "description": "配置更新校验失败响应",
        "properties": {
          "error": {
            "type": "string",
            "example": "validation_failed"
          },
          "message": {
            "type": "string"
          },
          "issues": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConfigValidationIssue"
            }
          }
        },
        "required": [
          "error",
          "message",
          "issues"
        ]
      },
      "SystemConfigConflictResponse": {
        "type": "object",
        "description": "配置版本冲突响应",
        "properties": {
          "error": {
            "type": "string",
            "example": "config_version_conflict"
          },
          "message": {
            "type": "string"
          },
          "current_config_version": {
            "type": "string"
          }
        },
        "required": [
          "error",
          "message",
          "current_config_version"
        ]
      },
      "DecisionAction": {
        "type": "string",
        "enum": [
          "buy",
          "add",
          "hold",
          "reduce",
          "sell",
          "watch",
          "avoid",
          "alert"
        ],
        "description": "八态建议动作,独立于旧 decision_type=buy|hold|sell 统计口径。"
      },
      "MarketPhaseValue": {
        "type": "string",
        "enum": [
          "premarket",
          "intraday",
          "lunch_break",
          "closing_auction",
          "postmarket",
          "non_trading",
          "unknown"
        ]
      },
      "DecisionSignalCreateRequest": {
        "properties": {
          "stock_code": {
            "type": "string",
            "maxLength": 32,
            "minLength": 1,
            "title": "Stock Code"
          },
          "stock_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 64,
            "title": "Stock Name"
          },
          "market": {
            "type": "string",
            "enum": [
              "cn",
              "hk",
              "us",
              "jp",
              "kr",
              "tw"
            ],
            "title": "Market"
          },
          "source_type": {
            "type": "string",
            "enum": [
              "analysis",
              "agent",
              "alert",
              "market_review",
              "manual"
            ],
            "title": "Source Type"
          },
          "source_agent": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 64,
            "title": "Source Agent"
          },
          "source_report_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Report Id"
          },
          "trace_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 64,
            "title": "Trace Id"
          },
          "decision_profile": {
            "type": "string",
            "enum": [
              "conservative",
              "balanced",
              "aggressive"
            ],
            "title": "Decision Profile",
            "description": "Optional decision profile. Omit to use server-side default/fallback; explicit null is rejected."
          },
          "market_phase": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "premarket",
                  "intraday",
                  "lunch_break",
                  "closing_auction",
                  "postmarket",
                  "non_trading",
                  "unknown"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Phase"
          },
          "trigger_source": {
            "type": "string",
            "maxLength": 64,
            "minLength": 1,
            "title": "Trigger Source"
          },
          "action": {
            "type": "string",
            "enum": [
              "buy",
              "add",
              "hold",
              "reduce",
              "sell",
              "watch",
              "avoid",
              "alert"
            ],
            "title": "Action"
          },
          "action_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 32,
            "title": "Action Label"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "horizon": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "intraday",
                  "1d",
                  "3d",
                  "5d",
                  "10d",
                  "swing",
                  "long"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "entry_low": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry Low"
          },
          "entry_high": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry High"
          },
          "stop_loss": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Stop Loss"
          },
          "target_price": {
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Price"
          },
          "invalidation": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Invalidation"
          },
          "watch_conditions": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Watch Conditions"
          },
          "reason": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "risk_summary": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Risk Summary"
          },
          "catalyst_summary": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Catalyst Summary"
          },
          "evidence": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Evidence"
          },
          "data_quality_summary": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Data Quality Summary"
          },
          "plan_quality": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "complete",
                  "partial",
                  "minimal",
                  "unknown"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Plan Quality"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "active",
                  "expired",
                  "invalidated",
                  "closed",
                  "archived"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Optional metadata object. Omitted or null values are treated as absent."
          },
          "report_language": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "zh",
                  "en",
                  "ko"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Report Language"
          }
        },
        "type": "object",
        "required": [
          "stock_code",
          "market",
          "source_type",
          "trigger_source",
          "action"
        ],
        "title": "DecisionSignalCreateRequest"
      },
      "DecisionSignalStatusUpdateRequest": {
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "active",
              "expired",
              "invalidated",
              "closed",
              "archived"
            ],
            "title": "Status"
          },
          "metadata": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Metadata",
            "description": "Optional replacement metadata. Omit to preserve the stored value; null clears it; an object replaces it while preserving the formal decision_profile identity."
          }
        },
        "type": "object",
        "required": [
          "status"
        ],
        "title": "DecisionSignalStatusUpdateRequest"
      },
      "DecisionSignalItem": {
        "properties": {
          "id": {
            "type": "integer",
            "title": "Id"
          },
          "stock_code": {
            "type": "string",
            "title": "Stock Code"
          },
          "stock_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stock Name"
          },
          "market": {
            "type": "string",
            "title": "Market"
          },
          "source_type": {
            "type": "string",
            "title": "Source Type"
          },
          "source_agent": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Agent"
          },
          "source_report_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Report Id"
          },
          "trace_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trace Id"
          },
          "decision_profile": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "conservative",
                  "balanced",
                  "aggressive"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Decision Profile"
          },
          "market_phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Phase"
          },
          "trigger_source": {
            "type": "string",
            "title": "Trigger Source"
          },
          "action": {
            "type": "string",
            "title": "Action"
          },
          "action_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Action Label"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "horizon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "entry_low": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry Low"
          },
          "entry_high": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry High"
          },
          "stop_loss": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stop Loss"
          },
          "target_price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Price"
          },
          "invalidation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invalidation"
          },
          "watch_conditions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Watch Conditions"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "risk_summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Risk Summary"
          },
          "catalyst_summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Catalyst Summary"
          },
          "evidence": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Evidence"
          },
          "data_quality_summary": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Data Quality Summary"
          },
          "plan_quality": {
            "type": "string",
            "title": "Plan Quality"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          },
          "metadata": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Metadata"
          }
        },
        "type": "object",
        "required": [
          "id",
          "stock_code",
          "market",
          "source_type",
          "trigger_source",
          "action",
          "plan_quality",
          "status"
        ],
        "title": "DecisionSignalItem"
      },
      "DecisionSignalMutationResponse": {
        "properties": {
          "item": {
            "$ref": "#/components/schemas/DecisionSignalItem"
          },
          "created": {
            "type": "boolean",
            "title": "Created"
          }
        },
        "type": "object",
        "required": [
          "item",
          "created"
        ],
        "title": "DecisionSignalMutationResponse"
      },
      "DecisionSignalListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DecisionSignalItem"
            },
            "type": "array",
            "title": "Items"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "page": {
            "type": "integer",
            "title": "Page"
          },
          "page_size": {
            "type": "integer",
            "title": "Page Size"
          }
        },
        "type": "object",
        "required": [
          "total",
          "page",
          "page_size"
        ],
        "title": "DecisionSignalListResponse"
      },
      "ErrorResponse": {
        "properties": {
          "error": {
            "type": "string",
            "title": "Error",
            "description": "错误类型",
            "example": "validation_error"
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "错误详情",
            "example": "请求参数错误"
          },
          "detail": {
            "anyOf": [
              {},
              {
                "type": "null"
              }
            ],
            "title": "Detail",
            "description": "附加错误信息"
          }
        },
        "type": "object",
        "required": [
          "error",
          "message"
        ],
        "title": "ErrorResponse",
        "description": "错误响应",
        "example": {
          "error": "not_found",
          "message": "资源不存在"
        }
      },
      "RunFlowLane": {
        "type": "object",
        "description": "运行流泳道定义",
        "properties": {
          "id": {
            "type": "string",
            "description": "稳定泳道 ID"
          },
          "label": {
            "type": "string",
            "description": "展示标签"
          },
          "order": {
            "type": "integer",
            "description": "展示顺序"
          }
        },
        "required": [
          "id",
          "label",
          "order"
        ]
      },
      "RunFlowNode": {
        "type": "object",
        "description": "运行流中的一个节点",
        "properties": {
          "id": {
            "type": "string",
            "description": "稳定节点 ID"
          },
          "lane": {
            "type": "string",
            "description": "所属泳道 ID"
          },
          "kind": {
            "type": "string",
            "enum": [
              "entry",
              "queue",
              "data_source",
              "analysis",
              "model",
              "artifact",
              "notification"
            ],
            "description": "节点类型"
          },
          "label": {
            "type": "string",
            "description": "展示标签"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "success",
              "failed",
              "degraded",
              "fallback",
              "timeout",
              "cancel_requested",
              "cancelled",
              "skipped",
              "unknown"
            ],
            "description": "节点状态"
          },
          "provider": {
            "type": "string",
            "nullable": true,
            "description": "Provider、模型或通知渠道名称"
          },
          "started_at": {
            "type": "string",
            "nullable": true,
            "description": "开始时间 ISO 字符串"
          },
          "ended_at": {
            "type": "string",
            "nullable": true,
            "description": "结束时间 ISO 字符串"
          },
          "duration_ms": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "耗时毫秒数"
          },
          "attempts": {
            "type": "integer",
            "nullable": true,
            "minimum": 1,
            "description": "节点代表的尝试次数"
          },
          "record_count": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "返回记录数"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "description": "短脱敏状态说明"
          },
          "metadata": {
            "type": "object",
            "description": "脱敏后的低敏元数据",
            "additionalProperties": true
          }
        },
        "required": [
          "id",
          "lane",
          "kind",
          "label",
          "status"
        ]
      },
      "RunFlowEdge": {
        "type": "object",
        "description": "运行流中的有向连线",
        "properties": {
          "id": {
            "type": "string",
            "description": "稳定连线 ID"
          },
          "from": {
            "type": "string",
            "description": "来源节点 ID"
          },
          "to": {
            "type": "string",
            "description": "目标节点 ID"
          },
          "kind": {
            "type": "string",
            "enum": [
              "data",
              "control",
              "fallback",
              "retry"
            ],
            "description": "连线类型"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "success",
              "failed",
              "degraded",
              "fallback",
              "timeout",
              "cancel_requested",
              "cancelled",
              "skipped",
              "unknown"
            ],
            "description": "连线状态"
          },
          "label": {
            "type": "string",
            "nullable": true,
            "description": "短展示标签"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "description": "短脱敏说明"
          },
          "metadata": {
            "type": "object",
            "description": "脱敏后的低敏元数据",
            "additionalProperties": true
          }
        },
        "required": [
          "id",
          "from",
          "to",
          "kind",
          "status"
        ]
      },
      "RunFlowEvent": {
        "type": "object",
        "description": "运行流事件",
        "properties": {
          "id": {
            "type": "string",
            "description": "稳定事件 ID"
          },
          "timestamp": {
            "type": "string",
            "nullable": true,
            "description": "事件时间 ISO 字符串"
          },
          "severity": {
            "type": "string",
            "enum": [
              "info",
              "success",
              "warning",
              "danger"
            ],
            "description": "事件严重级别"
          },
          "type": {
            "type": "string",
            "description": "稳定事件类型"
          },
          "node_id": {
            "type": "string",
            "nullable": true,
            "description": "关联节点 ID"
          },
          "title": {
            "type": "string",
            "description": "短标题"
          },
          "message": {
            "type": "string",
            "nullable": true,
            "description": "短脱敏说明"
          },
          "metadata": {
            "type": "object",
            "description": "脱敏后的低敏元数据",
            "additionalProperties": true
          }
        },
        "required": [
          "id",
          "severity",
          "type",
          "title"
        ]
      },
      "RunFlowSummary": {
        "type": "object",
        "description": "运行流摘要指标",
        "properties": {
          "elapsed_ms": {
            "type": "integer",
            "nullable": true,
            "minimum": 0,
            "description": "观测到的总耗时毫秒数"
          },
          "bottleneck_node_id": {
            "type": "string",
            "nullable": true,
            "description": "耗时最长节点 ID"
          },
          "failed_attempts": {
            "type": "integer",
            "minimum": 0,
            "description": "失败尝试次数"
          },
          "fallback_count": {
            "type": "integer",
            "minimum": 0,
            "description": "fallback 或 retry 转换次数"
          },
          "model": {
            "type": "string",
            "nullable": true,
            "description": "诊断中观测到的脱敏模型名"
          },
          "data_source_count": {
            "type": "integer",
            "minimum": 0,
            "description": "数据来源节点数量"
          },
          "event_count": {
            "type": "integer",
            "minimum": 0,
            "description": "事件数量"
          }
        },
        "required": [
          "failed_attempts",
          "fallback_count",
          "data_source_count",
          "event_count"
        ]
      },
      "RunFlowSnapshot": {
        "type": "object",
        "description": "任务或历史报告运行流快照",
        "properties": {
          "task_id": {
            "type": "string",
            "description": "任务 ID 或 query_id"
          },
          "trace_id": {
            "type": "string",
            "nullable": true,
            "description": "诊断 trace ID"
          },
          "stock_code": {
            "type": "string",
            "description": "股票代码"
          },
          "stock_name": {
            "type": "string",
            "nullable": true,
            "description": "股票名称"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "running",
              "success",
              "failed",
              "degraded",
              "fallback",
              "timeout",
              "cancel_requested",
              "cancelled",
              "skipped",
              "unknown"
            ],
            "description": "整体运行流状态"
          },
          "summary": {
            "$ref": "#/components/schemas/RunFlowSummary"
          },
          "lanes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RunFlowLane"
            }
          },
          "nodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RunFlowNode"
            }
          },
          "edges": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RunFlowEdge"
            }
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RunFlowEvent"
            }
          },
          "generated_at": {
            "type": "string",
            "description": "快照生成时间 ISO 字符串"
          }
        },
        "required": [
          "task_id",
          "stock_code",
          "status",
          "summary",
          "lanes",
          "nodes",
          "edges",
          "events",
          "generated_at"
        ]
      },
      "UsageDashboardResponse": {
        "properties": {
          "period": {
            "type": "string",
            "title": "Period",
            "description": "'today' | 'month' | 'all'"
          },
          "from_date": {
            "type": "string",
            "title": "From Date",
            "description": "ISO date string"
          },
          "to_date": {
            "type": "string",
            "title": "To Date",
            "description": "ISO date string"
          },
          "total_calls": {
            "type": "integer",
            "title": "Total Calls"
          },
          "total_prompt_tokens": {
            "type": "integer",
            "title": "Total Prompt Tokens",
            "default": 0
          },
          "total_completion_tokens": {
            "type": "integer",
            "title": "Total Completion Tokens",
            "default": 0
          },
          "total_tokens": {
            "type": "integer",
            "title": "Total Tokens"
          },
          "by_call_type": {
            "items": {
              "$ref": "#/components/schemas/CallTypeBreakdown"
            },
            "type": "array",
            "title": "By Call Type"
          },
          "by_model": {
            "items": {
              "$ref": "#/components/schemas/ModelBreakdown"
            },
            "type": "array",
            "title": "By Model"
          },
          "recent_calls": {
            "items": {
              "$ref": "#/components/schemas/UsageCallRecord"
            },
            "type": "array",
            "title": "Recent Calls"
          }
        },
        "type": "object",
        "required": [
          "period",
          "from_date",
          "to_date",
          "total_calls",
          "total_tokens",
          "by_call_type",
          "by_model",
          "recent_calls"
        ],
        "title": "UsageDashboardResponse"
      },
      "UsageCallRecord": {
        "properties": {
          "id": {
            "type": "integer",
            "title": "Id"
          },
          "called_at": {
            "type": "string",
            "title": "Called At",
            "description": "ISO datetime string"
          },
          "call_type": {
            "type": "string",
            "title": "Call Type"
          },
          "model": {
            "type": "string",
            "title": "Model"
          },
          "stock_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stock Code"
          },
          "prompt_tokens": {
            "type": "integer",
            "title": "Prompt Tokens"
          },
          "completion_tokens": {
            "type": "integer",
            "title": "Completion Tokens"
          },
          "total_tokens": {
            "type": "integer",
            "title": "Total Tokens"
          }
        },
        "type": "object",
        "required": [
          "id",
          "called_at",
          "call_type",
          "model",
          "prompt_tokens",
          "completion_tokens",
          "total_tokens"
        ],
        "title": "UsageCallRecord"
      },
      "CallTypeBreakdown": {
        "properties": {
          "call_type": {
            "type": "string",
            "title": "Call Type",
            "description": "'analysis' | 'agent' | 'market_review'"
          },
          "calls": {
            "type": "integer",
            "title": "Calls"
          },
          "prompt_tokens": {
            "type": "integer",
            "title": "Prompt Tokens",
            "default": 0
          },
          "completion_tokens": {
            "type": "integer",
            "title": "Completion Tokens",
            "default": 0
          },
          "total_tokens": {
            "type": "integer",
            "title": "Total Tokens"
          }
        },
        "type": "object",
        "required": [
          "call_type",
          "calls",
          "total_tokens"
        ],
        "title": "CallTypeBreakdown"
      },
      "ModelBreakdown": {
        "properties": {
          "model": {
            "type": "string",
            "title": "Model"
          },
          "calls": {
            "type": "integer",
            "title": "Calls"
          },
          "prompt_tokens": {
            "type": "integer",
            "title": "Prompt Tokens",
            "default": 0
          },
          "completion_tokens": {
            "type": "integer",
            "title": "Completion Tokens",
            "default": 0
          },
          "total_tokens": {
            "type": "integer",
            "title": "Total Tokens"
          },
          "max_total_tokens": {
            "type": "integer",
            "title": "Max Total Tokens",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "model",
          "calls",
          "total_tokens"
        ],
        "title": "ModelBreakdown"
      },
      "UsageSummaryResponse": {
        "properties": {
          "period": {
            "type": "string",
            "title": "Period",
            "description": "'today' | 'month' | 'all'"
          },
          "from_date": {
            "type": "string",
            "title": "From Date",
            "description": "ISO date string"
          },
          "to_date": {
            "type": "string",
            "title": "To Date",
            "description": "ISO date string"
          },
          "total_calls": {
            "type": "integer",
            "title": "Total Calls"
          },
          "total_prompt_tokens": {
            "type": "integer",
            "title": "Total Prompt Tokens",
            "default": 0
          },
          "total_completion_tokens": {
            "type": "integer",
            "title": "Total Completion Tokens",
            "default": 0
          },
          "total_tokens": {
            "type": "integer",
            "title": "Total Tokens"
          },
          "by_call_type": {
            "items": {
              "$ref": "#/components/schemas/CallTypeBreakdown"
            },
            "type": "array",
            "title": "By Call Type"
          },
          "by_model": {
            "items": {
              "$ref": "#/components/schemas/ModelBreakdown"
            },
            "type": "array",
            "title": "By Model"
          }
        },
        "type": "object",
        "required": [
          "period",
          "from_date",
          "to_date",
          "total_calls",
          "total_tokens",
          "by_call_type",
          "by_model"
        ],
        "title": "UsageSummaryResponse"
      },
      "DecisionSignalFeedbackItem": {
        "properties": {
          "signal_id": {
            "type": "integer",
            "title": "Signal Id"
          },
          "feedback_value": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "useful",
                  "not_useful"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Feedback Value"
          },
          "reason_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason Code"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note"
          },
          "source": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "web",
                  "api"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Source"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "signal_id"
        ],
        "title": "DecisionSignalFeedbackItem"
      },
      "DecisionSignalFeedbackRequest": {
        "properties": {
          "feedback_value": {
            "type": "string",
            "enum": [
              "useful",
              "not_useful"
            ],
            "title": "Feedback Value"
          },
          "reason_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 64,
            "title": "Reason Code"
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 1000,
            "title": "Note"
          },
          "source": {
            "type": "string",
            "enum": [
              "web",
              "api"
            ],
            "title": "Source",
            "default": "api"
          }
        },
        "type": "object",
        "required": [
          "feedback_value"
        ],
        "title": "DecisionSignalFeedbackRequest"
      },
      "DecisionSignalOutcomeItem": {
        "properties": {
          "id": {
            "type": "integer",
            "title": "Id"
          },
          "signal_id": {
            "type": "integer",
            "title": "Signal Id"
          },
          "horizon": {
            "type": "string",
            "title": "Horizon"
          },
          "engine_version": {
            "type": "string",
            "title": "Engine Version"
          },
          "eval_status": {
            "type": "string",
            "title": "Eval Status"
          },
          "outcome": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Outcome"
          },
          "direction_expected": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direction Expected"
          },
          "direction_correct": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Direction Correct"
          },
          "unable_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unable Reason"
          },
          "anchor_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Anchor Date"
          },
          "eval_window_days": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eval Window Days"
          },
          "start_price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Price"
          },
          "end_close": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Close"
          },
          "max_high": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max High"
          },
          "min_low": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Low"
          },
          "stock_return_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stock Return Pct"
          },
          "action": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Action"
          },
          "market": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market"
          },
          "market_phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Phase"
          },
          "source_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Type"
          },
          "source_agent": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Agent"
          },
          "plan_quality": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Plan Quality"
          },
          "data_quality_level": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Quality Level"
          },
          "holding_state": {
            "type": "string",
            "title": "Holding State"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At"
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated At"
          }
        },
        "type": "object",
        "required": [
          "id",
          "signal_id",
          "horizon",
          "engine_version",
          "eval_status",
          "holding_state"
        ],
        "title": "DecisionSignalOutcomeItem"
      },
      "DecisionSignalOutcomeListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DecisionSignalOutcomeItem"
            },
            "type": "array",
            "title": "Items"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "page": {
            "type": "integer",
            "title": "Page"
          },
          "page_size": {
            "type": "integer",
            "title": "Page Size"
          }
        },
        "type": "object",
        "required": [
          "total",
          "page",
          "page_size"
        ],
        "title": "DecisionSignalOutcomeListResponse"
      },
      "DecisionSignalOutcomeRunRequest": {
        "properties": {
          "signal_id": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Signal Id"
          },
          "horizons": {
            "anyOf": [
              {
                "items": {
                  "type": "string",
                  "enum": [
                    "intraday",
                    "1d",
                    "3d",
                    "5d",
                    "10d",
                    "swing",
                    "long"
                  ]
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizons"
          },
          "force": {
            "type": "boolean",
            "title": "Force",
            "default": false
          },
          "market": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "cn",
                  "hk",
                  "us",
                  "jp",
                  "kr",
                  "tw"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Market"
          },
          "stock_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "maxLength": 32,
            "title": "Stock Code"
          },
          "action": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "buy",
                  "add",
                  "hold",
                  "reduce",
                  "sell",
                  "watch",
                  "avoid",
                  "alert"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Action"
          },
          "source_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "analysis",
                  "agent",
                  "alert",
                  "market_review",
                  "manual"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Source Type"
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "active",
                  "expired",
                  "invalidated",
                  "closed",
                  "archived"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          },
          "limit": {
            "type": "integer",
            "maximum": 500.0,
            "minimum": 1.0,
            "title": "Limit",
            "default": 100
          }
        },
        "type": "object",
        "title": "DecisionSignalOutcomeRunRequest"
      },
      "DecisionSignalOutcomeRunResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/DecisionSignalOutcomeItem"
            },
            "type": "array",
            "title": "Items"
          },
          "evaluated": {
            "type": "integer",
            "title": "Evaluated"
          },
          "created": {
            "type": "integer",
            "title": "Created"
          },
          "updated": {
            "type": "integer",
            "title": "Updated"
          },
          "skipped": {
            "type": "integer",
            "title": "Skipped"
          },
          "engine_version": {
            "type": "string",
            "title": "Engine Version"
          }
        },
        "type": "object",
        "required": [
          "evaluated",
          "created",
          "updated",
          "skipped",
          "engine_version"
        ],
        "title": "DecisionSignalOutcomeRunResponse"
      },
      "DecisionSignalOutcomeStatsBucket": {
        "properties": {
          "dimension": {
            "type": "string",
            "title": "Dimension"
          },
          "value": {
            "type": "string",
            "title": "Value"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "completed": {
            "type": "integer",
            "title": "Completed"
          },
          "unable": {
            "type": "integer",
            "title": "Unable"
          },
          "hit": {
            "type": "integer",
            "title": "Hit"
          },
          "miss": {
            "type": "integer",
            "title": "Miss"
          },
          "neutral": {
            "type": "integer",
            "title": "Neutral"
          },
          "hit_rate_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hit Rate Pct"
          },
          "avg_stock_return_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Stock Return Pct"
          },
          "unable_reasons": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Unable Reasons"
          }
        },
        "type": "object",
        "required": [
          "dimension",
          "value",
          "total",
          "completed",
          "unable",
          "hit",
          "miss",
          "neutral"
        ],
        "title": "DecisionSignalOutcomeStatsBucket"
      },
      "DecisionSignalOutcomeStatsResponse": {
        "properties": {
          "engine_version": {
            "type": "string",
            "title": "Engine Version"
          },
          "horizons": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizons"
          },
          "statuses": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Statuses"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "completed": {
            "type": "integer",
            "title": "Completed"
          },
          "unable": {
            "type": "integer",
            "title": "Unable"
          },
          "hit": {
            "type": "integer",
            "title": "Hit"
          },
          "miss": {
            "type": "integer",
            "title": "Miss"
          },
          "neutral": {
            "type": "integer",
            "title": "Neutral"
          },
          "hit_rate_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Hit Rate Pct"
          },
          "avg_stock_return_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Stock Return Pct"
          },
          "unable_reasons": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Unable Reasons"
          },
          "breakdowns": {
            "additionalProperties": {
              "items": {
                "$ref": "#/components/schemas/DecisionSignalOutcomeStatsBucket"
              },
              "type": "array"
            },
            "type": "object",
            "title": "Breakdowns"
          }
        },
        "type": "object",
        "required": [
          "engine_version",
          "total",
          "completed",
          "unable",
          "hit",
          "miss",
          "neutral"
        ],
        "title": "DecisionSignalOutcomeStatsResponse"
      },
      "AlertTriggerItem": {
        "properties": {
          "id": {
            "type": "integer",
            "title": "Id"
          },
          "rule_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rule Id"
          },
          "target": {
            "type": "string",
            "title": "Target"
          },
          "observed_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed Value"
          },
          "threshold": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "data_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Source"
          },
          "data_timestamp": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Data Timestamp"
          },
          "triggered_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Triggered At"
          },
          "status": {
            "type": "string",
            "title": "Status"
          },
          "diagnostics": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Diagnostics"
          },
          "market_phase_summary": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketPhaseSummary"
              },
              {
                "type": "null"
              }
            ]
          },
          "analysis_context_pack_overview": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnalysisContextPackOverview"
              },
              {
                "type": "null"
              }
            ]
          },
          "analysis_visibility_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysis Visibility Source",
            "description": "公开摘要来源:alert_trigger_market_context / analysis_history_snapshot / evaluator_snapshot / legacy_text / null"
          },
          "decision_signal_summary": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Decision Signal Summary"
          }
        },
        "type": "object",
        "required": [
          "id",
          "target",
          "status"
        ],
        "title": "AlertTriggerItem"
      },
      "AlertTriggerListResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AlertTriggerItem"
            },
            "type": "array",
            "title": "Items"
          },
          "total": {
            "type": "integer",
            "title": "Total"
          },
          "page": {
            "type": "integer",
            "title": "Page"
          },
          "page_size": {
            "type": "integer",
            "title": "Page Size"
          }
        },
        "type": "object",
        "required": [
          "total",
          "page",
          "page_size"
        ],
        "title": "AlertTriggerListResponse"
      },
      "PortfolioDecisionSignalRiskBlock": {
        "properties": {
          "available": {
            "type": "boolean",
            "title": "Available",
            "default": true
          },
          "total": {
            "type": "integer",
            "title": "Total",
            "default": 0
          },
          "actions": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Actions"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/PortfolioDecisionSignalRiskItem"
            },
            "type": "array",
            "title": "Items"
          }
        },
        "type": "object",
        "title": "PortfolioDecisionSignalRiskBlock"
      },
      "PortfolioDecisionSignalRiskItem": {
        "properties": {
          "account_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Account Id"
          },
          "symbol": {
            "type": "string",
            "title": "Symbol"
          },
          "market": {
            "type": "string",
            "title": "Market"
          },
          "signal": {
            "additionalProperties": true,
            "type": "object",
            "title": "Signal"
          }
        },
        "type": "object",
        "required": [
          "symbol",
          "market"
        ],
        "title": "PortfolioDecisionSignalRiskItem"
      },
      "PortfolioRiskResponse": {
        "properties": {
          "as_of": {
            "type": "string",
            "title": "As Of"
          },
          "account_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Account Id"
          },
          "cost_method": {
            "type": "string",
            "title": "Cost Method"
          },
          "currency": {
            "type": "string",
            "title": "Currency"
          },
          "thresholds": {
            "additionalProperties": true,
            "type": "object",
            "title": "Thresholds"
          },
          "concentration": {
            "additionalProperties": true,
            "type": "object",
            "title": "Concentration"
          },
          "sector_concentration": {
            "additionalProperties": true,
            "type": "object",
            "title": "Sector Concentration"
          },
          "drawdown": {
            "additionalProperties": true,
            "type": "object",
            "title": "Drawdown"
          },
          "stop_loss": {
            "additionalProperties": true,
            "type": "object",
            "title": "Stop Loss"
          },
          "decision_signal_risk": {
            "$ref": "#/components/schemas/PortfolioDecisionSignalRiskBlock"
          }
        },
        "type": "object",
        "required": [
          "as_of",
          "cost_method",
          "currency"
        ],
        "title": "PortfolioRiskResponse"
      },
      "MarketPhaseSummary": {
        "properties": {
          "market": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market",
            "description": "市场区域"
          },
          "phase": {
            "type": "string",
            "enum": [
              "premarket",
              "intraday",
              "lunch_break",
              "closing_auction",
              "postmarket",
              "non_trading",
              "unknown"
            ],
            "title": "Phase",
            "description": "市场阶段"
          },
          "market_local_time": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Local Time",
            "description": "市场本地时间"
          },
          "session_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Session Date",
            "description": "市场本地日期"
          },
          "effective_daily_bar_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Effective Daily Bar Date",
            "description": "最新可复用完整日线日期"
          },
          "is_trading_day": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Trading Day",
            "description": "是否交易日"
          },
          "is_market_open_now": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Market Open Now",
            "description": "当前是否开市"
          },
          "is_partial_bar": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Partial Bar",
            "description": "最新日线是否可能未完成"
          },
          "minutes_to_open": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minutes To Open",
            "description": "距离开盘分钟数"
          },
          "minutes_to_close": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Minutes To Close",
            "description": "距离收盘分钟数"
          },
          "trigger_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Source",
            "description": "触发来源"
          },
          "analysis_intent": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Analysis Intent",
            "description": "分析意图"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "description": "阶段推断降级告警码"
          }
        },
        "type": "object",
        "required": [
          "phase"
        ],
        "title": "MarketPhaseSummary",
        "description": "Low-sensitivity market phase metadata exposed on report meta."
      },
      "AnalysisContextPackOverview": {
        "properties": {
          "pack_version": {
            "type": "string",
            "title": "Pack Version",
            "description": "AnalysisContextPack 版本"
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created At",
            "description": "创建时间"
          },
          "subject": {
            "$ref": "#/components/schemas/AnalysisContextPackOverviewSubject"
          },
          "blocks": {
            "items": {
              "$ref": "#/components/schemas/AnalysisContextPackOverviewBlock"
            },
            "type": "array",
            "title": "Blocks"
          },
          "counts": {
            "$ref": "#/components/schemas/AnalysisContextPackOverviewCounts"
          },
          "data_quality": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnalysisContextPackOverviewDataQuality"
              },
              {
                "type": "null"
              }
            ],
            "description": "本次分析输入数据质量低敏摘要"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "description": "顶层数据质量提醒"
          },
          "metadata": {
            "$ref": "#/components/schemas/AnalysisContextPackOverviewMetadata"
          }
        },
        "type": "object",
        "required": [
          "pack_version",
          "subject",
          "counts"
        ],
        "title": "AnalysisContextPackOverview",
        "description": "历史/API 可见的低敏 AnalysisContextPack 摘要"
      },
      "AnalysisContextPackOverviewSubject": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "股票代码"
          },
          "stock_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stock Name",
            "description": "股票名称"
          },
          "market": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market",
            "description": "市场"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "AnalysisContextPackOverviewSubject",
        "description": "AnalysisContextPack 可见摘要标的信息"
      },
      "AnalysisContextPackOverviewBlock": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key",
            "description": "数据块稳定 key"
          },
          "label": {
            "type": "string",
            "title": "Label",
            "description": "数据块展示名称"
          },
          "status": {
            "type": "string",
            "enum": [
              "available",
              "missing",
              "not_supported",
              "fallback",
              "stale",
              "estimated",
              "partial",
              "fetch_failed"
            ],
            "title": "Status",
            "description": "数据块质量状态"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Source",
            "description": "数据来源"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "description": "数据块告警码"
          },
          "missing_reasons": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Missing Reasons",
            "description": "缺失原因"
          }
        },
        "type": "object",
        "required": [
          "key",
          "label",
          "status"
        ],
        "title": "AnalysisContextPackOverviewBlock",
        "description": "AnalysisContextPack 可见摘要数据块"
      },
      "AnalysisContextPackOverviewCounts": {
        "properties": {
          "available": {
            "type": "integer",
            "title": "Available",
            "default": 0
          },
          "missing": {
            "type": "integer",
            "title": "Missing",
            "default": 0
          },
          "not_supported": {
            "type": "integer",
            "title": "Not Supported",
            "default": 0
          },
          "fallback": {
            "type": "integer",
            "title": "Fallback",
            "default": 0
          },
          "stale": {
            "type": "integer",
            "title": "Stale",
            "default": 0
          },
          "estimated": {
            "type": "integer",
            "title": "Estimated",
            "default": 0
          },
          "partial": {
            "type": "integer",
            "title": "Partial",
            "default": 0
          },
          "fetch_failed": {
            "type": "integer",
            "title": "Fetch Failed",
            "default": 0
          }
        },
        "type": "object",
        "title": "AnalysisContextPackOverviewCounts",
        "description": "AnalysisContextPack 可见摘要状态计数"
      },
      "AnalysisContextPackOverviewDataQuality": {
        "properties": {
          "overall_score": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 100.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Overall Score",
            "description": "输入数据质量总分"
          },
          "level": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "good",
                  "usable",
                  "limited",
                  "poor"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Level",
            "description": "输入数据质量等级"
          },
          "block_scores": {
            "additionalProperties": {
              "type": "integer"
            },
            "type": "object",
            "title": "Block Scores",
            "description": "固定数据块质量分"
          },
          "limitations": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Limitations",
            "description": "低敏数据限制说明"
          }
        },
        "type": "object",
        "title": "AnalysisContextPackOverviewDataQuality",
        "description": "AnalysisContextPack 可见摘要数据质量评分"
      },
      "AnalysisContextPackOverviewMetadata": {
        "properties": {
          "trigger_source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trigger Source",
            "description": "触发来源"
          },
          "news_result_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "News Result Count",
            "description": "新闻结果数量"
          }
        },
        "type": "object",
        "title": "AnalysisContextPackOverviewMetadata",
        "description": "AnalysisContextPack 可见摘要元数据"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "DecisionSignalReassessRequest": {
        "properties": {
          "source_report_id": {
            "type": "integer",
            "exclusiveMinimum": 0.0,
            "title": "Source Report Id"
          },
          "decision_profile": {
            "type": "string",
            "enum": [
              "conservative",
              "balanced",
              "aggressive"
            ],
            "title": "Decision Profile"
          },
          "persist": {
            "type": "boolean",
            "title": "Persist",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "source_report_id",
          "decision_profile"
        ],
        "title": "DecisionSignalReassessRequest"
      },
      "DecisionSignalReassessResponse": {
        "properties": {
          "preview": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DecisionSignalPreview"
              },
              {
                "type": "null"
              }
            ]
          },
          "item": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DecisionSignalItem"
              },
              {
                "type": "null"
              }
            ]
          },
          "created": {
            "type": "boolean",
            "title": "Created",
            "default": false
          },
          "persist_status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "created",
                  "existing",
                  "refreshed"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Persist Status"
          },
          "warnings": {
            "items": {
              "$ref": "#/components/schemas/DecisionSignalWarning"
            },
            "type": "array",
            "title": "Warnings"
          },
          "blocked_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blocked Reason"
          }
        },
        "type": "object",
        "title": "DecisionSignalReassessResponse"
      },
      "DecisionSignalReassessErrorResponse": {
        "properties": {
          "error": {
            "type": "string",
            "enum": [
              "unsupported_report_type",
              "unsupported_report_snapshot",
              "guardrail_blocked"
            ],
            "title": "Error"
          },
          "message": {
            "type": "string",
            "title": "Message"
          },
          "blocked_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Blocked Reason"
          },
          "warnings": {
            "items": {
              "$ref": "#/components/schemas/DecisionSignalWarning"
            },
            "type": "array",
            "title": "Warnings"
          }
        },
        "type": "object",
        "required": [
          "error",
          "message"
        ],
        "title": "DecisionSignalReassessErrorResponse"
      },
      "DecisionSignalWarning": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code"
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message"
          },
          "params": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Params"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "DecisionSignalWarning"
      },
      "DecisionSignalPreview": {
        "properties": {
          "action": {
            "type": "string",
            "title": "Action"
          },
          "score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Score"
          },
          "confidence": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confidence"
          },
          "horizon": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Horizon"
          },
          "entry_low": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry Low"
          },
          "entry_high": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Entry High"
          },
          "stop_loss": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stop Loss"
          },
          "target_price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Target Price"
          },
          "invalidation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Invalidation"
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "risk_summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Risk Summary"
          },
          "watch_conditions": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Watch Conditions"
          },
          "metadata": {
            "additionalProperties": true,
            "type": "object",
            "title": "Metadata"
          }
        },
        "type": "object",
        "required": [
          "action",
          "metadata"
        ],
        "title": "DecisionSignalPreview"
      }
    },
    "securitySchemes": {
      "AdminSessionCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "dsa_session"
      }
    }
  }
}