开发者
API 规格
FastAPI OpenAPI 规格产物,供外部集成和开发调试参考。
{
"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"
}
}
}
}