From 03989e9df4112895a802f7175dc088ccd8e8603f Mon Sep 17 00:00:00 2001 From: hyowons Date: Fri, 26 Jun 2026 02:00:04 +0900 Subject: [PATCH] =?UTF-8?q?auto:=20=EC=9D=BC=EC=9D=BC=20=EB=B0=B1=EC=97=85?= =?UTF-8?q?=202026-06-26=2002:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- .../whooing-sync/scripts/whooing_sync.py | 2 +- agents/stock/workspace/scripts/behive_web.py | 52 +++++++- .../state/market_indicators_history.jsonl | 2 + .../workspace/state/sim/equity_history.json | 2 +- .../workspace/state/sim/index_history.json | 2 +- .../state/sim/variants/v1/portfolio.json | 10 +- .../state/sim/variants/v101/portfolio.json | 10 +- .../state/sim/variants/v103/portfolio.json | 30 ++--- .../state/sim/variants/v103/trades.jsonl | 1 + .../state/sim/variants/v105/portfolio.json | 49 +++++-- .../state/sim/variants/v105/trades.jsonl | 2 + .../state/sim/variants/v107/portfolio.json | 51 ++++--- .../state/sim/variants/v107/trades.jsonl | 2 + .../state/sim/variants/v147/portfolio.json | 51 ++++--- .../state/sim/variants/v147/trades.jsonl | 2 + .../state/sim/variants/v149/portfolio.json | 51 ++++--- .../state/sim/variants/v149/trades.jsonl | 2 + .../state/sim/variants/v151/portfolio.json | 51 ++++--- .../state/sim/variants/v151/trades.jsonl | 2 + .../state/sim/variants/v155/portfolio.json | 72 +++++++--- .../state/sim/variants/v155/trades.jsonl | 3 + .../state/sim/variants/v157/portfolio.json | 33 ++++- .../state/sim/variants/v157/trades.jsonl | 1 + .../state/sim/variants/v159/portfolio.json | 33 ++++- .../state/sim/variants/v159/trades.jsonl | 1 + .../state/sim/variants/v161/portfolio.json | 33 ++++- .../state/sim/variants/v161/trades.jsonl | 1 + .../state/sim/variants/v165/portfolio.json | 33 ++++- .../state/sim/variants/v165/trades.jsonl | 1 + .../state/sim/variants/v167/portfolio.json | 33 ++++- .../state/sim/variants/v167/trades.jsonl | 1 + .../state/sim/variants/v189/portfolio.json | 33 ++++- .../state/sim/variants/v189/trades.jsonl | 1 + .../state/sim/variants/v195/portfolio.json | 69 +++++----- .../state/sim/variants/v195/trades.jsonl | 3 + .../state/sim/variants/v197/portfolio.json | 51 ++++--- .../state/sim/variants/v197/trades.jsonl | 2 + .../state/sim/variants/v199/portfolio.json | 33 ++++- .../state/sim/variants/v199/trades.jsonl | 1 + .../state/sim/variants/v201/portfolio.json | 69 +++++----- .../state/sim/variants/v201/trades.jsonl | 3 + .../state/sim/variants/v203/portfolio.json | 33 ++++- .../state/sim/variants/v203/trades.jsonl | 1 + .../state/sim/variants/v205/portfolio.json | 51 ++++--- .../state/sim/variants/v205/trades.jsonl | 2 + .../state/sim/variants/v207/portfolio.json | 33 ++++- .../state/sim/variants/v207/trades.jsonl | 1 + .../state/sim/variants/v209/portfolio.json | 33 ++++- .../state/sim/variants/v209/trades.jsonl | 1 + .../state/sim/variants/v211/portfolio.json | 69 +++++----- .../state/sim/variants/v211/trades.jsonl | 3 + .../state/sim/variants/v213/portfolio.json | 72 +++++++--- .../state/sim/variants/v213/trades.jsonl | 3 + .../state/sim/variants/v215/portfolio.json | 88 +++++++----- .../state/sim/variants/v215/trades.jsonl | 4 + .../state/sim/variants/v217/portfolio.json | 45 +++++-- .../state/sim/variants/v217/trades.jsonl | 3 + .../state/sim/variants/v218/portfolio.json | 45 +++++-- .../state/sim/variants/v218/trades.jsonl | 3 + .../state/sim/variants/v223/portfolio.json | 45 +++++-- .../state/sim/variants/v223/trades.jsonl | 3 + .../state/sim/variants/v224/portfolio.json | 45 +++++-- .../state/sim/variants/v224/trades.jsonl | 3 + .../state/sim/variants/v229/portfolio.json | 45 +++++-- .../state/sim/variants/v229/trades.jsonl | 3 + .../state/sim/variants/v230/portfolio.json | 45 +++++-- .../state/sim/variants/v230/trades.jsonl | 3 + .../state/sim/variants/v235/portfolio.json | 45 +++++-- .../state/sim/variants/v235/trades.jsonl | 3 + .../state/sim/variants/v236/portfolio.json | 45 +++++-- .../state/sim/variants/v236/trades.jsonl | 3 + .../state/sim/variants/v265/portfolio.json | 45 +++++-- .../state/sim/variants/v265/trades.jsonl | 3 + .../state/sim/variants/v266/portfolio.json | 45 +++++-- .../state/sim/variants/v266/trades.jsonl | 3 + .../state/sim/variants/v271/portfolio.json | 45 +++++-- .../state/sim/variants/v271/trades.jsonl | 3 + .../state/sim/variants/v272/portfolio.json | 45 +++++-- .../state/sim/variants/v272/trades.jsonl | 3 + .../state/sim/variants/v277/portfolio.json | 45 +++++-- .../state/sim/variants/v277/trades.jsonl | 3 + .../state/sim/variants/v278/portfolio.json | 45 +++++-- .../state/sim/variants/v278/trades.jsonl | 3 + .../state/sim/variants/v283/portfolio.json | 45 +++++-- .../state/sim/variants/v283/trades.jsonl | 3 + .../state/sim/variants/v284/portfolio.json | 45 +++++-- .../state/sim/variants/v284/trades.jsonl | 3 + .../state/sim/variants/v296/portfolio.json | 79 +++++------ .../state/sim/variants/v296/trades.jsonl | 6 + .../state/sim/variants/v298/portfolio.json | 78 ++++------- .../state/sim/variants/v298/trades.jsonl | 3 + .../state/sim/variants/v299/portfolio.json | 42 +++--- .../state/sim/variants/v299/trades.jsonl | 1 + .../state/sim/variants/v300/portfolio.json | 64 +++++++-- .../state/sim/variants/v300/trades.jsonl | 3 + .../state/sim/variants/v301/portfolio.json | 10 +- .../state/sim/variants/v302/portfolio.json | 10 +- .../state/sim/variants/v303/portfolio.json | 43 ++++-- .../state/sim/variants/v303/trades.jsonl | 3 + .../state/sim/variants/v304/portfolio.json | 93 ++++++------- .../state/sim/variants/v304/trades.jsonl | 11 ++ .../state/sim/variants/v305/portfolio.json | 91 ++++++------- .../state/sim/variants/v305/trades.jsonl | 11 ++ .../state/sim/variants/v306/portfolio.json | 57 +++++--- .../state/sim/variants/v306/trades.jsonl | 2 + .../state/sim/variants/v307/portfolio.json | 43 ++++-- .../state/sim/variants/v307/trades.jsonl | 3 + .../state/sim/variants/v308/portfolio.json | 55 +++++--- .../state/sim/variants/v308/trades.jsonl | 2 + .../state/sim/variants/v309/portfolio.json | 60 ++++----- .../state/sim/variants/v309/trades.jsonl | 3 + .../state/sim/variants/v310/portfolio.json | 86 ++++++------ .../state/sim/variants/v310/trades.jsonl | 9 ++ .../state/sim/variants/v311/portfolio.json | 53 +++++--- .../state/sim/variants/v311/trades.jsonl | 2 + .../state/sim/variants/v312/portfolio.json | 72 +++++----- .../state/sim/variants/v312/trades.jsonl | 4 + .../state/sim/variants/v313/portfolio.json | 43 ++++-- .../state/sim/variants/v313/trades.jsonl | 3 + .../state/sim/variants/v314/portfolio.json | 12 +- .../state/sim/variants/v315/portfolio.json | 49 +++++-- .../state/sim/variants/v315/trades.jsonl | 2 + .../state/sim/variants/v316/portfolio.json | 83 ++++++------ .../state/sim/variants/v316/trades.jsonl | 7 + .../state/sim/variants/v317/portfolio.json | 53 +++++--- .../state/sim/variants/v317/trades.jsonl | 2 + .../state/sim/variants/v318/portfolio.json | 44 +++--- .../state/sim/variants/v318/trades.jsonl | 2 + .../state/sim/variants/v319/portfolio.json | 68 +++++----- .../state/sim/variants/v319/trades.jsonl | 6 + .../state/sim/variants/v320/portfolio.json | 83 ++++++------ .../state/sim/variants/v320/trades.jsonl | 7 + .../state/sim/variants/v321/portfolio.json | 69 ++++++---- .../state/sim/variants/v321/trades.jsonl | 3 + .../state/sim/variants/v4/portfolio.json | 58 +++----- .../state/sim/variants/v4/trades.jsonl | 2 + .../state/sim/variants/v40/portfolio.json | 58 +++----- .../state/sim/variants/v40/trades.jsonl | 2 + .../state/sim/variants/v41/portfolio.json | 58 +++----- .../state/sim/variants/v41/trades.jsonl | 2 + .../state/sim/variants/v47/portfolio.json | 49 +++++-- .../state/sim/variants/v47/trades.jsonl | 2 + .../state/sim/variants/v49/portfolio.json | 10 +- .../state/sim/variants/v51/portfolio.json | 10 +- .../state/sim/variants/v57/portfolio.json | 10 +- .../state/sim/variants/v59/portfolio.json | 10 +- .../state/sim/variants/v81/portfolio.json | 10 +- .../state/sim/variants/v87/portfolio.json | 30 ++--- .../state/sim/variants/v87/trades.jsonl | 1 + .../state/sim/variants/v89/portfolio.json | 58 +++----- .../state/sim/variants/v89/trades.jsonl | 2 + .../state/sim/variants/v91/portfolio.json | 10 +- .../state/sim/variants/v93/portfolio.json | 30 ++--- .../state/sim/variants/v93/trades.jsonl | 1 + .../state/sim/variants/v95/portfolio.json | 10 +- .../state/sim/variants/v97/portfolio.json | 58 +++----- .../state/sim/variants/v97/trades.jsonl | 2 + .../state/sim/variants/v99/portfolio.json | 10 +- .../stock/workspace/state/sim/watchlist.json | 125 ------------------ .../stock/workspace/state/trade_journal.jsonl | 1 + workspace/scripts/briefing_mail.py | 21 +++ 161 files changed, 2658 insertions(+), 1563 deletions(-) diff --git a/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py b/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py index 54550af..1ac6b6e 100755 --- a/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py +++ b/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py @@ -941,7 +941,7 @@ def main(): cur_month = datetime.now(KST).strftime("%Y-%m") if ( info.get("side") == "asset" - and carrier in {"kakaobank", "shinhan_bank"} + and carrier in {"kakaobank", "shinhan_bank", "hana_bank"} and diff < 0 and abs(diff) <= 5000 ): diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py index 0e9f1d8..a18e44e 100644 --- a/agents/stock/workspace/scripts/behive_web.py +++ b/agents/stock/workspace/scripts/behive_web.py @@ -5074,6 +5074,33 @@ table.market-adr td.adr-breakdown { font-size: 11px; color: #8b8f9a; } background: rgba(255,77,94,0.15); border-color: #ff4d5e; color: #ff4d5e; } .account-view-pane[hidden] { display: none; } + +/* 옵션 버튼 + 작은 팝업 메뉴 — 상단 자동토글 왼쪽. 클릭하면 팝업 토글, 안에 계좌 나누기 버튼 등을 담는다. */ +.opts-wrap { position: relative; flex: none; display: inline-flex; } +.opts-btn { + flex: none; display: inline-flex; align-items: center; justify-content: center; + min-width: 36px; height: 36px; padding: 0 10px; + background: #1c2230; border: 1px solid #2a3142; color: #e6e6e6; + border-radius: 8px; font-size: 13px; line-height: 1; cursor: pointer; + font-family: inherit; user-select: none; + transition: background 0.15s, color 0.15s, border-color 0.15s, transform 0.1s; +} +.opts-btn:hover { background: #232a3b; } +.opts-btn:active { transform: scale(0.95); } +.opts-btn[aria-expanded="true"] { background: #232a3b; border-color: #3a4256; } +.opts-popup { + position: absolute; top: calc(100% + 6px); right: 0; z-index: 60; + background: #161b27; border: 1px solid #2a3142; border-radius: 10px; + padding: 6px; box-shadow: 0 8px 24px rgba(0,0,0,0.45); + display: flex; flex-direction: column; gap: 4px; min-width: 168px; +} +.opts-popup[hidden] { display: none; } +/* 팝업 메뉴 항목으로 쓰일 때의 계좌 나누기 버튼 — 가로 꽉 채우고 좌측 정렬 + 아이콘. */ +.opts-item { + width: 100%; min-width: 0; height: auto; padding: 9px 11px; + justify-content: flex-start; gap: 9px; font-size: 13px; font-weight: 600; +} +.opts-item .opts-ico { font-size: 16px; line-height: 1; } .holdings-toggle-wrap { margin-top: 4px; } /* 차트 컨트롤 — 자산정보 탭 상단의 공통 기간·단위 select 묶음. */ @@ -7051,6 +7078,24 @@ def render_html() -> str: 'accountViewState=next;' 'applyAccountView(next);' '});' + # 옵션 버튼 → 작은 팝업 토글. 버튼 클릭은 열고/닫고, 바깥 클릭은 닫는다. + # (팝업 안 계좌 나누기 버튼은 위 핸들러가 처리 — 팝업은 그대로 열어둠) + 'document.addEventListener("click",function(e){' + 'var pop=document.getElementById("opts-popup");' + 'var btn=document.getElementById("opts-toggle");' + 'if(!pop||!btn)return;' + 'var ob=e.target.closest&&e.target.closest("#opts-toggle");' + 'if(ob){' + 'e.preventDefault();' + 'var willOpen=pop.hasAttribute("hidden");' + 'if(willOpen){pop.removeAttribute("hidden");btn.setAttribute("aria-expanded","true");}' + 'else{pop.setAttribute("hidden","");btn.setAttribute("aria-expanded","false");}' + 'return;' + '}' + 'if(!pop.hasAttribute("hidden")&&!(e.target.closest&&e.target.closest("#opts-popup"))){' + 'pop.setAttribute("hidden","");btn.setAttribute("aria-expanded","false");' + '}' + '});' # ADR 추세 카드의 기간 버튼 (1주/1달/3달/6달/1년/전체) — localStorage 저장 후 전체 재fetch. 'document.addEventListener("click",function(e){' 'var bt=e.target.closest&&e.target.closest(".adr-range-btn");' @@ -9695,9 +9740,14 @@ window.openPinModal = openPinModal;
- +
+ + +