f54ade2c0d
feat(agent-office): 보유종목 브리핑 텔레그램 포매터
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 22:21:58 +09:00
11212c4afd
fix(agent-office): 일요 회고 견고화 (dead import 제거·send 가드·부분 payload 방어)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 18:02:01 +09:00
c4ba7e81e6
feat(agent-office): 일요 회고 텔레그램 포매터
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 17:51:34 +09:00
5613497367
feat(agent-office): /agents/{id}/logs 엔드포인트가 service /logs/recent 와 merge
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:46:44 +09:00
ed30790f22
feat(agent-office): fetch_service_logs 추가 (path_prefix 정규식 필터)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-28 02:42:23 +09:00
03edfb04aa
refactor(agent-office): tarot 모듈 제거 (tarot-lab으로 cutover 완료)
...
- DELETE: app/tarot/ 디렉토리 (pipeline, prompt, schema 모듈)
- DELETE: app/routers/tarot.py (FastAPI 라우터)
- DELETE: 4개 tarot 테스트 파일 (test_tarot_*.py)
- MODIFY: app/main.py — tarot 라우터 import + register 제거
- MODIFY: app/models.py — 5개 Tarot* 클래스 제거
- MODIFY: app/config.py — 4개 TAROT_* 환경변수 제거
- MODIFY: app/db.py — 6개 tarot_readings CRUD 함수 제거
KEEP:
- tarot_readings CREATE TABLE 블록 (DB 호환성)
- CREATE INDEX ... tarot_readings 인덱스 2개
- scripts/migrate_tarot_to_lab.py (cutover 마이그레이션)
- tests/test_migrate_tarot.py (마이그레이션 테스트)
테스트: 88 pass (migrate_tarot tests 포함)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-25 18:54:12 +09:00
901d3535ee
feat(agent-office): tarot_readings 1회성 마이그레이션 스크립트 (3 테스트)
2026-05-25 18:35:36 +09:00
3bf87a93fb
feat(agent-office): /api/agent-office/tarot 5 endpoint (T6)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 00:23:52 +09:00
4623c68d4e
feat(agent-office): Tarot Claude 파이프라인 + reroll 1회 (T5)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 00:18:42 +09:00
f79dc87d75
feat(agent-office): Tarot 응답 스키마 검증 (T4)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 00:13:38 +09:00
0b29283043
feat(agent-office): tarot_readings 테이블 + CRUD (T1)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-24 00:03:47 +09:00
0190a6c206
feat(agent-office): 인스타 큐레이터 후보를 중복 제거 + 신뢰도 0.7+ 필터
...
_dedup_and_filter_keywords: score>=0.7만 남기고 동일 keyword 중복 제거
(최고 score 유지) 후 내림차순. _push_keyword_candidates가 이 필터를 거쳐
"확실한 것만" 전송, 후보 없으면 안내 메시지. 헬퍼 테스트 5건.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-23 02:50:33 +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
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
d0047c2b9d
feat(lotto-evolver): 텔레그램 주간 evolution report 포맷 + 발송
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-22 03:21:23 +09:00
8552cbc184
feat(lotto-signals): 텔레그램 urgent/digest 메시지 포맷
2026-05-20 03:07:30 +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
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
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
86694ae4fe
feat(agent-office): InstaAgent collect_trends action + preferences-aware on_schedule
2026-05-16 17:57:44 +09:00
6eb24090ed
feat(agent-office): InstaAgent — daily extract + keyword push + media group render
2026-05-16 00:47:24 +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
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
57a4a72ff1
feat(curator): 텔레그램 큐레이션·당첨 알림 포맷터
2026-05-11 08:53:10 +09:00
ff3134b838
feat(curator): build_retrospective + lotto review service proxy
2026-05-11 08:49:58 +09:00
9fb1c37eae
feat(curator): 4계층 picks + tier_rationale + narrative.retrospective 스키마
2026-05-11 08:46:50 +09:00
97b15cb985
fix(pipeline): premature state update + reject 재생성 알림
...
버그1: /feedback approve가 bg task 시작 전에 state를 next_pending으로 set →
polling이 빈 video_url로 알림 발송. bg task의 run_step이 state를 set하도록
일임 — 이중 update 제거.
버그2: reject 후 같은 *_pending 상태로 재생성됐을 때 dedupe에 막혀 알림이
안 감. dedupe 키에 feedback_count_per_step[step]을 포함 — 재생성마다
count가 증가하므로 키가 달라져 재알림 동작.
2026-05-08 23:08:24 +09:00
7552ce4263
feat(agent-office): youtube_publisher 에이전트 + 30s 폴링
...
- YoutubePublisherAgent: 음악 파이프라인의 *_pending 상태를 폴링하여
텔레그램 단일 채널로 단계별 검토 요청 발송, reply 수신 시 의도 분류
후 music-lab에 feedback POST
- service_proxy: pipeline list/get/feedback/telegram-msg/lookup-by-msg
헬퍼 5종 추가 (MUSIC_LAB_URL 사용)
- scheduler: 30초 interval로 poll_state_changes 실행
- telegram webhook: reply_to_message 가 파이프라인 메시지면
youtube_publisher 로 라우팅 (슬래시 명령보다 우선)
- 테스트 4종 추가 (4 PASS)
2026-05-07 17:20:21 +09:00
17034ea6ea
feat(agent-office): 텔레그램 자연어 의도 분류
2026-05-07 17:15:24 +09:00
1d6c1b4329
fix(agent-office): bookmark field name + service_proxy contract + mktemp
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 09:09:05 +09:00
32e021cfc7
feat(agent-office): drop daily realestate cron + bookmark callback routing
...
- scheduler.py: remove _run_realestate_schedule() and its 09:15 cron job
- service_proxy.py: add realestate_bookmark_toggle() helper (PATCH bookmark endpoint)
- webhook.py: add _handle_realestate_bookmark() dispatcher before DB-lookup path;
realestate_bookmark_{id} callbacks are handled inline without a DB entry
- tests/test_realestate_callback.py: 4 new unit tests covering happy path,
invalid id, proxy error, and regression that approve/reject still uses DB path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 09:01:38 +09:00
3749d79168
feat(agent-office): realestate on_new_matches + /notify endpoint
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 08:57:52 +09:00
0de2d3cf93
feat(agent-office-telegram): realestate match formatter + keyboard
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 08:54:34 +09:00
e16cf8f817
feat(agent-office): 큐레이터 응답 검증 스키마 + 테스트
2026-04-15 08:27:07 +09:00