Files
wehub-resource-sync 084fa65ec4
Auto Tag / tag (push) Has been skipped
chore: import upstream snapshot with attribution
2026-07-13 12:05:10 +08:00

6878 lines
177 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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=falseactive 新建或 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"
}
}
}
}
}
}
}
},
"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"
}
},
"securitySchemes": {
"AdminSessionCookie": {
"type": "apiKey",
"in": "cookie",
"name": "dsa_session"
}
}
}
}