918151bda8
feat(agent-office): GET /agents/{id}/tasks에 task_type/days 필터 추가
2026-05-23 02:11:28 +09:00
2ce6721c35
fix(tests): fresh_db fixture가 매 test마다 db.DB_PATH 재패치 (cross-file isolation)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 02:08:01 +09:00
c5303151c0
feat(lotto-agent): sync_evolver_activity 매일 09:30 cron + 멱등 가드 + 3 테스트
...
- LottoAgent.sync_evolver_activity(): lotto-lab evolver status polling → agent_office.db task+log 미러링
- UTC 날짜 기준 멱등 guard (get_tasks_by_agent_date_kind 활용)
- 일요일(dow=6) → 5 clamp (lotto-lab trials는 0~5)
- 월요일 6-trial 완성 시 evolver_generate task 추가 생성
- scheduler.py: lotto_evolver_activity_sync cron 09:30 등록
- tests: creates_apply_task / idempotent / no_picks_no_task 3종
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 02:06:30 +09:00
ee61405ff1
feat(lotto-agent): run_weekly_evolution_report task_id wrap
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 01:59:56 +09:00
fef5f7a835
feat(lotto-agent): run_daily_digest task_id wrap
...
daily_digest에 create_task/update_task_status/add_log task_id wrap 적용.
test_run_daily_digest_creates_task 추가 (75 passed).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 01:57:40 +09:00
e47ccdb762
feat(lotto-agent): run_signal_check task_id wrap + 단위 테스트
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 01:55:20 +09:00
4b6996b0f7
feat(lotto-agent): get_agent_tasks 필터 + get_tasks_by_agent_date_kind 멱등 guard
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-23 01:52:05 +09:00
0f8c71c552
fix(lotto-evolver): previous_base diff + 일요일 cron skip + idempotent evaluate
...
- weight_evolver.evaluate_weekly: save_base_history 직전에 current_base를
previous_base로 캡처해 return dict에 포함 → formatter가 진짜 diff 표시 가능
- evaluate_weekly: same effective_from row 이미 존재 시 save skip + idempotent
return (토 22:00 lotto cron과 agent-office 22:15 재호출 중복 row 방지)
- main._run_weight_evolver_daily: 일요일(weekday=6) 도 skip — 토요일 trial을
INSERT OR REPLACE로 덮어쓰는 문제 방지
- telegram_lotto._format_evolution_report: eval_result.previous_base 우선
사용 (없으면 current_base 폴백) → diff 자기 자신 비교 버그 수정
- test_lotto_evolution_format: previous_base 키 추가 + 새 diff 검증 테스트
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 03:35:20 +09:00
92329f6fd5
feat(lotto-evolver): LottoAgent.run_weekly_evolution_report + 토 22:15 cron
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 03:24:18 +09:00
d0047c2b9d
feat(lotto-evolver): 텔레그램 주간 evolution report 포맷 + 발송
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 03:21:23 +09:00
088944499c
feat(lotto-evolver): service_proxy.lotto_evolver_status/evaluate helpers
2026-05-22 03:17:50 +09:00
f509339cbb
fix(lotto-signals): draw_no 모든 source에 전달 (drift baseline 회차 가드 활성화)
...
light/sim source에서도 current_draw_no를 항상 fetch해 drift/confidence
메트릭의 회차 단위 중복 push 가드가 올바르게 동작하도록 수정.
lotto_latest_draw() 헬퍼를 service_proxy에 추가하고 run_signal_check에서
source에 무관하게 최신 회차를 먼저 조회; deep_check는 curate_weekly
반환값을 우선 사용.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 08:24:02 +09:00
b3c0683364
feat(lotto-signals): GET signals/baselines + POST signal-check endpoint
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 03:20:08 +09:00
17321d948e
feat(lotto-signals): urgent 텔레그램 발송 + throttle/cap + daily digest 발송 + baseline_mu/sigma 노출
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 03:13:29 +09:00
8552cbc184
feat(lotto-signals): 텔레그램 urgent/digest 메시지 포맷
2026-05-20 03:07:30 +09:00
b1c786e59d
feat(lotto-signals): scheduler cron 4종 등록 (light/sim/deep/digest)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 03:04:14 +09:00
b885d02ac4
fix(tests): test_lotto_signal_runner DB_PATH 패치 (import order 안전)
...
db.DB_PATH = _TMP를 from app import db 직후에 주입해
타 테스트 파일이 app.db를 먼저 import해 DB_PATH가 동결된 경우에도
올바른 임시 경로를 사용하도록 수정.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 03:02:40 +09:00
b35fab777e
feat(lotto-signals): LottoAgent.run_signal_check/run_daily_digest (텔레그램 X)
...
Phase 2: on_command에 signal_check/light_check/sim_check/deep_check/daily_digest 액션 추가.
run_signal_check는 lotto_signals DB INSERT만, run_daily_digest는 24h 발화 카운트 반환.
텔레그램 발송은 Task 9 (Phase 3)에서 추가 예정.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:54:09 +09:00
43081bea0e
feat(lotto-signals): config env vars 7종 추가 (window/임계치/digest/throttle)
2026-05-20 02:51:28 +09:00
bebe5797e7
feat(lotto-signals): signal_runner orchestrator + service_proxy GET helpers
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:48:12 +09:00
9e1001b935
feat(lotto-signals): lotto_signals/lotto_baselines 테이블 + CRUD
...
agent-office DB에 lotto_signals, lotto_baselines 테이블 추가 및
insert/mark/query/upsert CRUD 헬퍼 함수 구현 (throttle, z-score, baseline 관리)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:43:27 +09:00
e5465ad136
fix(lotto-signals): pstdev→stdev (ddof=1 sample) + z=None contract 문서화
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:41:09 +09:00
21d46d95dd
feat(lotto-signals): 메트릭 함수·adaptive baseline 순수함수 구현
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:38:33 +09:00
ac4a574ef2
test(lotto-signals): floating-point 임계치 보정 + import 정리 + decide_fire 분리
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:36:32 +09:00
c985d2c605
test(lotto-signals): 메트릭 함수·adaptive baseline 단위 테스트
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-20 02:32:10 +09:00
7a470aad44
perf(infra): NAS CPU 폭주 5건 일괄 fix (CHECK_POINT 🔴 즉시)
...
J4025 Celeron 2C/2.0GHz에서 oversaturation을 일으키던 5개 패턴 해소.
1) 09:00 cron 스태거링 — agent-office insta_trends 09:00 / lotto 09:05 /
youtube 09:10, realestate-lab collect 09:15. 동시 실행 4개가 직렬
분산되어 1분 단위로 분산됨.
2) lotto Monte Carlo 08:05 → 08:30 — stock 08:00 cron과 25분 분리.
3) insta-lab card_renderer.render_slate를 asyncio.Semaphore(1)로 감쌈.
동시 슬레이트 렌더 요청이 와도 Chromium 인스턴스 1개만 직렬 launch.
4) docker-compose healthcheck interval 30s → 60s (9 백엔드 + frontend
총 10개). 30초마다 동시 healthcheck로 인한 CPU 잡음 절반으로.
5) 9개 백엔드 Dockerfile CMD에 --workers 1 명시. 기본값 의존 제거.
CHECK_POINT.md 갱신 — 즉시 5건 체크 + 변경 이력 한 줄.
적용 효과 검증: NAS 재기동 후 `docker stats` 비교.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-18 10:31:02 +09:00
de8adaeadd
refactor(agent-office): drop the random idle→break→idle cycle
...
The pixel-office game UI is gone, so simulating coffee-break /
nap / walk states no longer serves any purpose. Remove:
- scheduler's _check_idle_breaks job (no more 60s idle scan)
- BaseAgent.check_idle_break() and _break_until field
- 'break' from VALID_STATES and from transition() branches
- IDLE_BREAK_THRESHOLD / BREAK_DURATION_MIN / BREAK_DURATION_MAX
config knobs
- 'idle/break' guard in each agent's on_schedule (now just 'idle')
Agents now sit in 'idle' between scheduled jobs and explicit
commands. Display reads 'Idle' instead of churning between idle
and break.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-18 08:44:50 +09:00
42bd53ee7b
feat(insta): _bg_extract uses preferences + 09:00 trends_collect cron
2026-05-16 17:58:52 +09:00
86694ae4fe
feat(agent-office): InstaAgent collect_trends action + preferences-aware on_schedule
2026-05-16 17:57:44 +09:00
5485d4858a
chore: remove blog-lab service and BlogAgent (replaced by insta-lab)
2026-05-16 00:52:05 +09:00
fbd963db86
feat(agent-office): telegram render_<id> callback dispatches to InstaAgent
2026-05-16 00:49:30 +09:00
9095423026
feat(agent-office): register InstaAgent + 09:30 cron job
2026-05-16 00:47:28 +09:00
6eb24090ed
feat(agent-office): InstaAgent — daily extract + keyword push + media group render
2026-05-16 00:47:24 +09:00
8cb5a01431
feat(agent-office): replace blog_* proxy with insta_* helpers
2026-05-16 00:47:16 +09:00
8a4a8790ca
chore(agent-office): swap BLOG_LAB_URL for INSTA_LAB_URL
2026-05-16 00:47:12 +09:00
ace0339d33
refactor: rename stock-lab → stock (graduation)
...
- git mv stock-lab/ → stock/
- docker-compose.yml: 서비스 키 + container_name + build.context +
frontend.depends_on + agent-office STOCK_LAB_URL → STOCK_URL
- agent-office/app: config.py, service_proxy.py, agents/stock.py, tests/
STOCK_LAB_URL → STOCK_URL
- nginx/default.conf: proxy_pass http://stock-lab → http://stock (3 lines)
- CLAUDE.md / README.md / STATUS.md / scripts/ 문구 갱신
- stock/ 내부 자기 참조 갱신
lab 네이밍 정책 (feedback_lab_naming.md) graduation.
API URL / Python import / DB 파일명 변경 없음.
2026-05-15 01:45:44 +09:00
9f91dae1a4
feat(agent-office): add run_ai_news command for manual trigger
2026-05-13 23:59:30 +09:00
f37b21a408
fix(agent-office): on_ai_news_schedule — graceful fail on missing telegram_text
2026-05-13 23:48:59 +09:00
df7a8d985e
feat(agent-office): cron mon-fri 08:00 ai_news sentiment job
2026-05-13 23:46:37 +09:00
c5d0c84183
feat(agent-office): on_ai_news_schedule (cron handler + telegram dispatch)
2026-05-13 23:46:17 +09:00
53a78a1062
feat(agent-office): refresh_ai_news_sentiment service helper
2026-05-13 23:45:51 +09:00
2b5009f864
fix(sqlite): WAL + busy_timeout 120s standardized across all labs
...
8개 lab의 _conn() 함수에 표준 동시성 패턴 통일:
- timeout=120.0 (connection 획득)
- PRAGMA journal_mode=WAL (reader/writer 분리)
- PRAGMA busy_timeout=120000 (트랜잭션 충돌 시 120초 대기)
stock-lab/screener/router.py 의 검증된 패턴(d9b6122 ) 을 lotto, stock-lab(메인),
music-lab, blog-lab, realestate-lab, agent-office, personal, travel-proxy 로 확산.
기존 'database is locked' 오류 윈도우를 흡수.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-13 22:12:01 +09:00
119ac88e1e
feat(agent-office): stock screener 평일 16:30 KST 자동 잡 + 텔레그램 전송
...
- StockAgent.on_screener_schedule: snapshot/refresh → screener/run(mode=auto)
→ telegram_payload(MarkdownV2) 발송. skipped_holiday는 무발신,
실패 시 운영자 HTML 알림.
- service_proxy: refresh_screener_snapshot, run_stock_screener 추가
(각각 180s timeout, STOCK_LAB_URL 기존 env 재사용).
- telegram.messaging.send_raw: parse_mode 파라미터 추가
(기본 HTML 유지, MarkdownV2 페이로드 직접 전달용).
- scheduler: cron day_of_week=mon-fri hour=16 minute=30 id=stock_screener
(Asia/Seoul TZ).
- on_command 'run_screener' 수동 트리거 추가.
- tests: 성공/휴일/스냅샷실패/run실패/이상status 5케이스.
2026-05-12 14:54:24 +09:00
fb81c51dc8
feat(curator): 큐레이션 후 텔레그램 자동 푸시 + cron 09:00 변경
2026-05-11 08:55:12 +09:00
715e1598ce
feat(agent-office): /api/agent-office/notify/lotto-prize 웹훅
2026-05-11 08:54:19 +09:00
57a4a72ff1
feat(curator): 텔레그램 큐레이션·당첨 알림 포맷터
2026-05-11 08:53:10 +09:00
e14278ec69
feat(curator): pipeline 4계층 직렬화 + retrospective 컨텍스트 + N=30
2026-05-11 08:51:07 +09:00
ff3134b838
feat(curator): build_retrospective + lotto review service proxy
2026-05-11 08:49:58 +09:00
95c5dc4217
feat(curator): SYSTEM_PROMPT 회고 + 4계층 규칙
2026-05-11 08:48:06 +09:00
9fb1c37eae
feat(curator): 4계층 picks + tier_rationale + narrative.retrospective 스키마
2026-05-11 08:46:50 +09:00