From ce82121f047395815bd32a1425cdf0c13b4d6b5a Mon Sep 17 00:00:00 2001 From: agentson Date: Sun, 22 Feb 2026 13:47:20 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=AF=B8=EA=B5=AC=ED=98=84=20API=204?= =?UTF-8?q?=EA=B0=9C=20=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20=ED=94=84?= =?UTF-8?q?=EB=A1=A0=ED=8A=B8=20=EC=97=B0=EA=B2=B0=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Playbook(/api/playbook/{date}): 프리마켓 플레이북 아코디언 패널 추가 - Scorecard(/api/scorecard/{date}): 일간 스코어카드 KPI 카드 그리드 추가 - Scenarios(/api/scenarios/active): 활성 시나리오 매칭 테이블 추가 - Context(/api/context/{layer}): L1-L7 컨텍스트 트리 테이블 추가 모든 패널 decisions-panel 아래에 섹션 추가 방식으로 배치. refreshAll()에 4개 함수 포함하여 30초 자동 갱신 지원. 보안: - esc() 헬퍼로 innerHTML 삽입 값 XSS 방지 - ctx limit 값 parseInt + 범위 클램핑(1-200) 적용 Co-Authored-By: Claude Sonnet 4.6 --- src/dashboard/static/index.html | 226 ++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) diff --git a/src/dashboard/static/index.html b/src/dashboard/static/index.html index ee6eaed..120b9b2 100644 --- a/src/dashboard/static/index.html +++ b/src/dashboard/static/index.html @@ -172,6 +172,51 @@ /* Spinner */ .spinner { display: inline-block; width: 12px; height: 12px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } + + /* Generic panel */ + .panel { + background: var(--panel); + border: 1px solid var(--border); + border-radius: 10px; + padding: 16px; + margin-top: 20px; + } + + /* Playbook panel - details/summary accordion */ + .playbook-panel details { border: 1px solid var(--border); border-radius: 4px; margin-bottom: 6px; } + .playbook-panel summary { padding: 8px 12px; cursor: pointer; font-weight: 600; background: var(--bg); color: var(--fg); } + .playbook-panel summary:hover { color: var(--accent); } + .playbook-panel pre { margin: 0; padding: 12px; background: var(--bg); overflow-x: auto; + font-size: 11px; color: #a0c4ff; white-space: pre-wrap; } + + /* Scorecard KPI card grid */ + .scorecard-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; } + .kpi-card { background: var(--bg); border: 1px solid var(--border); border-radius: 6px; padding: 12px; text-align: center; } + .kpi-card .kpi-label { font-size: 11px; color: var(--muted); margin-bottom: 4px; } + .kpi-card .kpi-value { font-size: 20px; font-weight: 700; color: var(--fg); } + + /* Scenarios table */ + .scenarios-table { width: 100%; border-collapse: collapse; font-size: 13px; } + .scenarios-table th { background: var(--bg); padding: 8px; text-align: left; border-bottom: 1px solid var(--border); + color: var(--muted); font-size: 11px; font-weight: 600; white-space: nowrap; } + .scenarios-table td { padding: 7px 8px; border-bottom: 1px solid rgba(40,69,95,0.5); } + .scenarios-table tr:hover td { background: rgba(255,255,255,0.02); } + + /* Context table */ + .context-table { width: 100%; border-collapse: collapse; font-size: 12px; } + .context-table th { background: var(--bg); padding: 8px; text-align: left; border-bottom: 1px solid var(--border); + color: var(--muted); font-size: 11px; font-weight: 600; white-space: nowrap; } + .context-table td { padding: 6px 8px; border-bottom: 1px solid rgba(40,69,95,0.5); vertical-align: top; } + .context-value { max-height: 60px; overflow-y: auto; color: #a0c4ff; word-break: break-all; } + + /* Common panel select controls */ + .panel-controls { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; } + .panel-controls select, .panel-controls input[type="number"] { + background: var(--bg); color: var(--fg); border: 1px solid var(--border); + border-radius: 4px; padding: 4px 8px; font-size: 13px; font-family: inherit; + } + .panel-date { color: var(--muted); font-size: 12px; } + .empty-msg { color: var(--muted); text-align: center; padding: 20px 0; font-size: 12px; } @@ -283,6 +328,72 @@ + + +
+
+ 📋 프리마켓 플레이북 +
+ + +
+
+

데이터 없음

+
+ + +
+
+ 📊 일간 스코어카드 +
+ + +
+
+

데이터 없음

+
+ + +
+
+ 🎯 활성 시나리오 매칭 +
+ +
+
+

데이터 없음

+
+ + +
+
+ 🧠 컨텍스트 트리 +
+ + +
+
+

데이터 없음

+