18e309a14b
feat(agent-office): replace canvas office with 3x3 agent grid
...
- AgentOffice renders TopBar + AgentGrid + dynamic right panel
- Right panel: SidePanel (active) / EmptyDetailPanel (initial or placeholder)
- TopBar simplified to connected status only (theme/zoom dropped)
- Wire AgentGrid through useAgentManager state
- Remove canvas/ (9 files), useOfficeCanvas, office-map.json
- New CSS for grid cards (state dot, notification badge, accent border)
- Mobile: 2-column grid + bottom-sheet panel
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 21:03:15 +09:00
80598cda93
refactor(agent-office): SidePanel uses central AGENT_META + image header
...
- emoji icon replaced with agent_{id}.png image
- AGENT_META imported from constants (single source of truth)
- blog removed, insta added (matches backend agent registry)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:59:25 +09:00
e49457ca46
feat(agent-office): EmptyDetailPanel for initial + placeholder views
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:58:06 +09:00
e04e2b010c
feat(agent-office): AgentGrid renders 9 slots from GRID_SLOTS
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:57:20 +09:00
3fd923400f
feat(agent-office): PlaceholderCard for unstaffed slots
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:56:02 +09:00
6d1f4914ca
test(agent-office): cover pulse class for AgentCard state dot
...
Adds two tests verifying that working state adds the pulse class and
idle state does not. Pulse animation is part of the design spec §5
but was not covered by the original 8 tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:55:24 +09:00
1630109856
feat(agent-office): AgentCard component with state dot + badge
...
- state→color mapping via STATE_COLORS
- notification badge with 9+ overflow
- active prop for selected card border
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:52:34 +09:00
50d427e367
refactor(agent-office): derive ACTIVE_AGENT_IDS from GRID_SLOTS
...
Eliminates dual-write drift risk between ACTIVE_AGENT_IDS list
and GRID_SLOTS slot ordering. Single source of truth is now
GRID_SLOTS; ACTIVE_AGENT_IDS is computed from it.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:50:42 +09:00
07f1d34f4c
feat(agent-office): centralize AGENT_META + grid slot layout
...
- 5 active agents (stock/music/insta/realestate/lotto) + 4 placeholders
- AGENT_META, GRID_SLOTS, STATE_COLORS in single constants module
- blog removed (replaced by insta)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:47:47 +09:00
d2838dfb7a
docs(agent-office): implementation plan for 3x3 grid redesign
...
11 tasks covering AGENT_META centralization, AgentCard/PlaceholderCard/
AgentGrid/EmptyDetailPanel new components, SidePanel image header,
TopBar simplification, canvas removal, build + manual verification.
TDD for pure logic (constants, AgentCard); visual verification for layout.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:36:52 +09:00
ce09f804b6
docs(agent-office): 3x3 grid redesign design spec
...
Replace pixel-office canvas with 3x3 agent image grid.
- 5 active agents (stock/music/insta/realestate/lotto) + 4 placeholders
- Drop blog from AGENT_META, insta replaces it
- New assets dir: src/pages/agent-office/assets/agents/
- Remove canvas/ dir + useOfficeCanvas + office-map.json
- Keep useAgentManager (WebSocket) + 4-tab SidePanel
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 20:26:57 +09:00
534ded59e8
docs(signal-v2): amend spread formula to absolute (q90-q10) for Chronos-bolt zero-shot reality
...
Phase 0 spec §6.1 originally specified relative spread (q90-q10)/median < 0.6.
Phase 3b smoke (005930: median=-0.59%, q90-q10=15.3%) revealed Chronos-bolt
zero-shot median frequently sits near zero, causing relative spread to explode
(15.3/0.0059 ≈ 25) and reject every signal. Absolute spread (0.153 < 0.6)
preserves the threshold semantic and keeps Phase 7 IC validation tractable.
Phase 4 spec §4.2 + Phase 0 §6.1 both amended with cross-reference.
chronos_predictor.py conf calculation unchanged — monotonic mapping there
is independent of hard-gate semantics.
2026-05-17 13:10:50 +09:00
f4b78da176
docs(signal-v2): Phase 4 implementation plan — 4 tasks TDD
...
Task 1: foundation (config 6 env + state.signals)
Task 2: signal_generator + 9 unit tests (TDD)
Task 3: pull_worker + main.py integration + 1 test
Task 4: user manual (.env optional + smoke + push)
10 new tests, total 55 signal_v2 tests. ~3-5 days.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 12:52:13 +09:00
aeeab6704f
fix(insta): SlateDetail JSON 객체 렌더 오류 + 카드 생성 시 자동 스크롤
...
(1) React error #31 fix: cover_copy/cta_copy는 객체({headline,body,accent_color}),
body_copies는 배열 — 직접 {slate.cover_copy}로 렌더하면 에러. 필드별로
분해 렌더하고, 10페이지 전체 카피(커버 1 + 본문 8 + CTA 1)를 detail에
노출하도록 SlateDetail 확장.
(2) UX: handleCreateSlate 시작 시 window.scrollTo(0, 0)로 상단 progress 배너
노출 보장. KeywordsPanel의 🎴 버튼도 부모 handleCreateSlate 위임으로
통합 — Trends/Cards 양쪽 어디서 눌러도 동일 흐름(배너 + 자동 미리보기).
(3) KeywordsPanel의 자체 slatePoll 제거 — 상단 ic-slate-progress 배너로
일원화하여 중복 진행 표시 회피.
2026-05-17 12:51:26 +09:00
6222b56716
feat(insta): trends 카드 생성 시 progress 배너 + 자동 미리보기 전환
...
Trends 탭의 🎴 버튼 클릭이 silent로 끝나 사용자에게 무동작처럼 보이던
이슈 fix. handleCreateSlate를 3초 간격 폴링으로 확장 (최대 8분):
- 시작/진행/성공/실패 상단 배너로 시각화
- 카드 생성 완료 시 자동으로 Cards 탭 전환 + 새 슬레이트 자동 선택
→ SlateDetail이 카피·이미지 미리보기 즉시 표시
- 실패 시 에러 메시지 + 클릭으로 dismiss
- "Claude 카피 추론 + Playwright 카드 10장 생성 중 (3~7분)" 안내 문구
2026-05-17 12:41:04 +09:00
9e9eed2162
docs(signal-v2): Phase 4 signal generator spec
...
매수/매도 룰 (Phase 0 spec §6.1-§6.3) + confidence_webai 공식
(chronos*0.5 + minute*0.3 + screener*0.2) + SignalDedup 24h. 6 env
외부화 (STOP_LOSS/TAKE_PROFIT/SPREAD/BID_RATIO/CONFIDENCE/MIN_MOMENTUM).
state.signals = Phase 0 spec §5.2 schema. 10 new tests.
brainstorming 6 decisions: scope=A(생성만) / trigger=A(매 cycle) /
minute_score=A(linear 5-level) / thresholds=A+(6 env) / state=A(spec §5.2) /
test=A(9 unit + 1 integration).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-17 12:40:24 +09:00
06affd9614
feat(insta): swap google_trends source for youtube_trending (Google Trends API 폐기 대응)
2026-05-17 11:54:10 +09:00
b0eda14982
feat(insta): Trends tab — account focus + external trends + impact preview
...
- api.js: add getInstaTrends, instaCollectTrends, getInstaPreferences, putInstaPreferences helpers
- InstaCards.jsx: add Cards/Trends tab bar with URL sync (?tab=trends); add AccountFocusPanel (category weight sliders + save), ExternalTrendsPanel (Naver+Google trend rows + manual collect), PreferenceImpactPanel (next extract preview); existing 5-panel Cards tab preserved intact
- InstaCards.css: add ic-tabbar, ic-tab, ic-trends-grid, ic-panel base, ic-focus/ic-trend/ic-impact component styles
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 18:04:47 +09:00
1f55d24ce6
docs(signal-v2): Phase 3b implementation plan — 7 tasks TDD
...
Task 1: foundation (config + state + requirements)
Task 2: kis_client.get_daily_ohlcv + 1 test
Task 3: momentum_classifier (pure functions) + 6 tests
Task 4: chronos_predictor + 4 tests (mock pipeline)
Task 5: pull_worker post-close cycle + scheduler trigger + 1 test
Task 6: main.py lifespan ChronosPredictor
Task 7: user manual (pip install + .env + smoke + push)
12 new tests, total 45 signal_v2 tests. ~1 week.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:42:17 +09:00
6eb4ab1204
docs(signal-v2): Phase 3b Chronos-2 + minute momentum spec
...
KIS daily OHLCV fetch (kis_client.get_daily_ohlcv, FHKST03010100) +
ChronosPredictor (HuggingFace amazon/chronos-2 zero-shot, env-configurable
model, always-loaded) + minute momentum classifier (5-level rule:
strong_up/weak_up/neutral/weak_down/strong_down) + post-close cycle
trigger (16:00 KST). 12 new tests (33 → 45 total).
brainstorming 7 decisions: daily=B(KIS REST) / freq=A(post-close 1x) /
model=A(env CHRONOS_MODEL) / momentum=A(5-level rule) / state=B(median+
q10+q90+conf+as_of) / test=A(mock+pure) / scope=integrated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 17:37:17 +09:00
78b77e2691
docs(signal-v2): Phase 3a implementation plan — 7 tasks TDD
...
Task 1: config + state + websockets dep
Task 2: scheduler NXT windows + 3 tests
Task 3: kis_client REST + 4 tests
Task 4: kis_websocket + 4 tests (most heavy)
Task 5: pull_worker minute cycle + 2 tests
Task 6: main.py KIS lifespan + 1 test
Task 7: user manual .env + smoke + push
13 new tests, total 32 signal_v2 tests. ~1 week.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:00:43 +09:00
1813db761f
docs(signal-v2): Phase 3a KIS data collection spec
...
KIS REST client (minute OHLCV + asking price polling, V1 token
read-only share) + KIS WebSocket client (approval_key + portfolio
asking_price realtime subscribe) + PollState extension + scheduler
NXT windows (20:00-23:30 / 04:30-07:00). 13 new tests.
brainstorming 6 decisions: scope=B(3a/3b split) / data=B(REST minute +
WS asking) / auth=A(V1 token share) / subscribe=A(portfolio WS +
screener REST) / NXT=C(scheduler extend) / test=A(respx + WS mock).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 04:50:16 +09:00
01d9b2f872
docs(signal-v2): Phase 2 implementation plan — 6 tasks TDD
...
Task 1: foundation (config + state + gitignore + requirements)
Task 2: stock_client + 6 tests (httpx retry + cache)
Task 3: scheduler + 5 tests (market windows + holidays)
Task 4: rate_limit + 3 tests (SQLite WAL dedup)
Task 5: pull_worker + FastAPI app + 2 tests (lifespan + /health)
Task 6: holidays sync + start.bat + user .env + manual smoke
Total 16 tests. ~1 week.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 03:31:31 +09:00
b9dabd07e0
docs(signal-v2): Phase 2 web-ai pull worker spec
...
stock pull worker + asyncio scheduler + rate limit SQLite + FastAPI
app (:8001). 16 tests planned. brainstorming 6 decisions:
batch=A(separate FastAPI :8001) / scope=A(3 items) / scheduler=B(asyncio
cron) / http=B(httpx + custom retry + memory cache) / rate-limit=A(SQLite
WAL) / test=B(pytest-asyncio + httpx mock).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 03:14:45 +09:00
a8e411ec22
feat(insta): replace Blog Lab page with Insta cards UI
...
/blog-lab → /insta route. New InstaCards page consumes insta-lab API
(news/keywords/slates + 10-page card preview + prompt template editor).
25개 blog-marketing API helper 제거, 13개 insta helper 추가.
2026-05-16 02:47:19 +09:00
f261a80d52
docs(signal-v1): web-ai V1 rename plan — 13 step atomic refactor
...
Single big task (Task 1) for atomic mv + load_dotenv update +
new CLAUDE.md/start.bat + verification. Task 2 = user manual
push + 30-min runtime verification.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 00:23:38 +09:00
42e9c8df27
docs(signal-v1): web-ai V1 → signal_v1/ rename spec
...
atomic refactor (single commit) of web-ai root V1 assets into
signal_v1/ subdirectory. V2 (signal_v2/) Phase 2 will be added
alongside in subsequent slice. Pattern mirrors stock-lab → stock
graduation.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 00:19:00 +09:00
c84c6b5bac
docs(signal-v2): Phase 1 implementation plan — 7 tasks TDD
...
7 tasks: auth.py + verify_webai_key (Task 1) → portfolio + pnl_pct
(Task 2) → news-sentiment (Task 3) → common edge cases (Task 4) →
docker-compose env (Task 5) → nginx config (Task 6) → deploy +
manual smoke (Task 7). 16 tests total (4 unit + 12 integration).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 08:30:53 +09:00
094366a162
docs(signal-v2): Phase 1 stock WebAI API spec
...
3 endpoints + X-WebAI-Key auth + nginx rate limit + 15 tests.
brainstorming 7 decisions: scope=B / auth=A(static key) / portfolio=B(pnl_pct) /
news-sentiment=A(daily dump) / endpoint=1(/api/webai prefix) / rate=B(nginx) /
test=B(pytest schema).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 08:24:37 +09:00
3bf7ce446f
docs: rename stock-lab → stock in CLAUDE.md (graduation)
2026-05-15 01:49:16 +09:00
8391919b90
docs(stock): rename plan — stock-lab → stock (6 tasks atomic)
...
Task 1 grep 사전 검토 → Task 2 web-backend atomic commit
(git mv + docker-compose + agent-office + nginx + 운영 문서) → Task 3 web-ui
CLAUDE.md → Task 4 workspace/CLAUDE.md → Task 5 메모리 (4 파일 + graduation
사례) → Task 6 배포 + NAS 검증.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 01:37:32 +09:00
ed7e927dc1
docs(stock): rename stock-lab → stock graduation spec
...
lab 네이밍 정책 (feedback_lab_naming.md) 에 따라 정식 서비스 graduation.
디렉토리/컨테이너/환경변수 갱신, API URL/Python import/DB 파일명은 그대로.
Confidence Signal Pipeline V2 Phase 1 작업 시작 전 선행.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 01:34:45 +09:00
309bedadeb
docs(signal-v2): amend Phase 0 — Chronos-2 + Qwen3 14B Q4 채택 (11 보정)
...
모델 결정 보정:
- 시점 예측: LSTM → Chronos-2 (Amazon, 120M, zero-shot quantile 분포)
- 2차 검증: Claude Haiku 4.5 (API) → Qwen3 14B Q4 (Ollama on web-ai)
영향:
- VRAM: ~9.3GB / 16GB (Chronos-2 1GB + Qwen3 8.3GB, 여유 6GB)
- LLM 비용: 월 ~₩45,000 (오류 추정) → 실제 0 (로컬 Ollama)
- 응답 시간: 5초 → ~13초 (분봉 흐름 OK)
- Phase 3 -1주 (LSTM 학습 인프라 제거), Phase 5 +0주
- 야간 재학습 cron 폐기 (Chronos-2 zero-shot)
Backlog 추가:
- Qwen3 14B 개발자 보조 endpoint (전략 해석 / 코드 자동화)
- Claude API 폴백 (web-ai 장애 시)
- Kimi K2.6 API 옵션 (저비용 외부 대안)
위험 매트릭스:
- Qwen3 한국어 메시지 품질 — Phase 5 A/B 테스트 1주 (vs Claude Haiku)
- VRAM 동거 swap 위험 — 8B 다운그레이드 fallback
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 01:21:24 +09:00
ebdfcd758b
docs(signal-v2): Phase 0 architecture & contract spec
...
확신의 신호 파이프라인 V2. 4 서비스 분담:
- stock-lab: 가치 발굴 (8 노드 + ATR)
- web-ai (Windows GPU): 시점 분석 (LSTM + KIS 분봉/NXT + 분봉 모멘텀)
- agent-office: Claude 2차 검증 + 이중 텔레그램 (본인 풀 / 아내 간소화)
- web-ui: 캔버스 settings 편집
6 핵심 결정: pull 채널, KIS 직접, Claude context augmentation, 매수+매도,
양쪽 메시지 단일 콜 생성, 시간대별 폴링.
Phase 1-7 분해 (총 10-12주), backlog, 위험 매트릭스, NOT 범위 명시.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-15 00:56:01 +09:00
cefaeca449
docs(ai_news): Phase 1 implementation plan — articles source (8 tasks)
...
8-task TDD plan. schema(source 컬럼) → articles_source 모듈 + 6 tests
→ analyzer(summary) → pipeline 교체 → telegram 매핑 라인 → router →
scraper deprecate → 운영 검증. 신규 단위 테스트 6 + 갱신 4.
선행 spec: docs/superpowers/specs/2026-05-14-ai-news-articles-source-design.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 01:58:27 +09:00
cdfa31b0c1
docs(ai_news): Phase 1 design — articles table reuse (replace Naver scraper)
...
기존 articles 테이블 재사용 + 종목명 substring 매핑. Naver 차단/중복
인프라 해소, LLM 입력에 summary 포함. weight=0 유지 (검증 전 차단),
news_sentiment.source 컬럼 추가 (Phase 2 비교 baseline).
선행 review (adversarial)에서 가장 강한 비판: "이미 매일 수집 중인
articles 테이블을 무시하고 Naver를 100번 더 긁는 중복" → 해소.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-14 01:47:25 +09:00
ec3ca5fcfa
feat(screener): canvas adds AI news node (12 nodes, 18 edges)
2026-05-13 23:51:09 +09:00
7ebeba2f3d
docs(screener): AI news sentiment node implementation plan (15 tasks)
...
15-task TDD plan for 8th score node ai_news. backend (scraper + analyzer +
pipeline + telegram + node + router) + agent-office (service_proxy + cron
handler + scheduler) + frontend (canvasLayout 1 file). 단위 테스트 22개
(scraper 4, analyzer 4, pipeline 3, telegram 4, node 5, router 2).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 23:18:00 +09:00
5e66d96c61
docs(screener): AI news sentiment node design spec
...
8번째 점수 노드 ai_news 설계. 평일 08:00 KST agent-office cron 으로
시총 상위 100종목 네이버 뉴스 스크래핑 + Claude Haiku 호재/악재 분석,
news_sentiment 일별 저장, 호재/악재 Top 5 텔레그램 알림, 16:30
스크리너 잡이 percentile_rank 로 가중합에 활용.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 23:09:45 +09:00
fde63d757b
docs(screener): note canvas mode in page structure
2026-05-13 21:57:10 +09:00
4b64761800
fix(screener): silence ESLint no-empty / no-undef in canvas helpers
...
빈 catch 블록 3곳에 의도 주석 추가, test-setup.js 의 beforeEach
명시적 import. 우리 신규 코드의 lint error 0으로 정리.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 21:56:42 +09:00
1449342f96
style(screener): canvas mode styles (toggle, nodes, toolbar, layout)
2026-05-13 21:55:10 +09:00
2effc47593
feat(screener): integrate mode toggle (form|canvas) with lazy canvas
2026-05-13 21:52:31 +09:00
f8574f1b45
feat(screener): CanvasLayout (canvas + result grid)
2026-05-13 21:51:16 +09:00
2da7255c03
feat(screener): ScreenerCanvas root component (react-flow + 11 nodes + 16 edges)
2026-05-13 21:49:19 +09:00
b4ad0b1abf
feat(screener): CanvasToolbar floating panel
2026-05-13 21:47:52 +09:00
4e134eb59a
feat(screener): ScoreNodeCard with weight slider + active toggle + params
2026-05-13 21:46:09 +09:00
b1a1bb22f9
feat(screener): GateNodeCard for hygiene gate
2026-05-13 21:43:39 +09:00
f10fa062e9
feat(screener): FixedNodeCard for data/combine/result nodes
2026-05-13 21:43:25 +09:00
40e3e2cf39
feat(screener): ModeToggle segment control component
2026-05-13 21:42:07 +09:00