feat(hub): add AI coach page with daily summary and chat

Aggregate four-account trades via hub_ai module and /api/hub/trades/today; store sessions in JSON; default OpenAI config matches instances.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-06 23:51:36 +08:00
parent 4fad5696df
commit cee641ba5d
23 changed files with 1557 additions and 14 deletions
+39 -2
View File
@@ -15,7 +15,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
<link rel="stylesheet" href="/assets/app.css?v=20260604-hub-theme4" />
<link rel="stylesheet" href="/assets/app.css?v=20260606-hub-ai" />
</head>
<body>
<div class="app-bg" aria-hidden="true"></div>
@@ -46,6 +46,7 @@
<nav class="top-nav">
<a href="/monitor" id="nav-monitor">监控区</a>
<a href="/market" id="nav-market">行情区</a>
<a href="/ai" id="nav-ai">AI 教练</a>
<a href="/settings" id="nav-settings">系统设置</a>
</nav>
<button type="button" id="btn-logout" class="ghost" title="退出登录">退出</button>
@@ -203,6 +204,42 @@
</div>
</div>
<div id="page-ai" class="page hidden">
<div class="page-head">
<h1><span class="head-tag">AI</span> 教练</h1>
<p class="page-desc">四户今日总结 · 口语化陪聊(单会话,点「新开对话」清空上下文)</p>
</div>
<div class="ai-layout">
<section class="ai-panel ai-summary-panel">
<div class="ai-panel-head">
<h2>今日总结</h2>
<div class="ai-panel-actions">
<span id="ai-summary-meta" class="toolbar-meta"></span>
<button type="button" id="btn-ai-summary" class="primary">生成今日总结</button>
</div>
</div>
<div id="ai-summary-stats" class="ai-stats-row" aria-live="polite"></div>
<div id="ai-summary-body" class="ai-md-body">
<p class="ai-placeholder">点击「生成今日总结」聚合四户平仓与持仓数据(未启用账户显示「未监控」)。</p>
</div>
</section>
<section class="ai-panel ai-chat-panel">
<div class="ai-panel-head">
<h2 id="ai-chat-title">聊天</h2>
<div class="ai-panel-actions">
<span id="ai-chat-meta" class="toolbar-meta"></span>
<button type="button" id="btn-ai-chat-new" class="ghost">新开对话</button>
</div>
</div>
<div id="ai-chat-messages" class="ai-chat-messages" aria-live="polite"></div>
<form id="ai-chat-form" class="ai-chat-form">
<textarea id="ai-chat-input" rows="3" placeholder="聊聊行情、心态、纪律、执行…" autocomplete="off"></textarea>
<button type="submit" id="btn-ai-chat-send" class="primary">发送</button>
</form>
</section>
</div>
</div>
<div id="page-settings" class="page hidden">
<div class="page-head">
<h1><span class="head-tag">CFG</span> 系统设置</h1>
@@ -250,6 +287,6 @@
<div id="toast"></div>
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
<script src="/assets/chart.js?v=20260604-upnl-contracts"></script>
<script src="/assets/app.js?v=20260604-iframe-theme-flash"></script>
<script src="/assets/app.js?v=20260606-hub-ai"></script>
</body>
</html>