@mulsok/traders-client 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +42 -5
  3. package/bin/cli.js +618 -38
  4. package/dist/server/auth/admin.js +32 -0
  5. package/dist/server/auth/admin.js.map +1 -0
  6. package/dist/server/broker/kiwoom/_helpers/symbol-code.js +21 -0
  7. package/dist/server/broker/kiwoom/_helpers/symbol-code.js.map +1 -0
  8. package/dist/server/broker/kiwoom/client.js +23 -4
  9. package/dist/server/broker/kiwoom/client.js.map +1 -1
  10. package/dist/server/broker/kiwoom/endpoints/account.js +14 -6
  11. package/dist/server/broker/kiwoom/endpoints/account.js.map +1 -1
  12. package/dist/server/broker/kiwoom/endpoints/quote.js +99 -13
  13. package/dist/server/broker/kiwoom/endpoints/quote.js.map +1 -1
  14. package/dist/server/broker/kiwoom/index.js +1 -1
  15. package/dist/server/broker/kiwoom/index.js.map +1 -1
  16. package/dist/server/broker/kiwoom/order-tracker.js +13 -0
  17. package/dist/server/broker/kiwoom/order-tracker.js.map +1 -1
  18. package/dist/server/broker/kiwoom/price-feed.js +13 -0
  19. package/dist/server/broker/kiwoom/price-feed.js.map +1 -1
  20. package/dist/server/broker/kiwoom/ws/endpoints/condition.js +3 -2
  21. package/dist/server/broker/kiwoom/ws/endpoints/condition.js.map +1 -1
  22. package/dist/server/calendar/kst-marker.js +68 -0
  23. package/dist/server/calendar/kst-marker.js.map +1 -0
  24. package/dist/server/config.js +370 -72
  25. package/dist/server/config.js.map +1 -1
  26. package/dist/server/db/sqlite.js +53 -29
  27. package/dist/server/db/sqlite.js.map +1 -1
  28. package/dist/server/diary/writer.js +151 -46
  29. package/dist/server/diary/writer.js.map +1 -1
  30. package/dist/server/index.js +166 -11
  31. package/dist/server/index.js.map +1 -1
  32. package/dist/server/jobs/universe-sync.js +48 -11
  33. package/dist/server/jobs/universe-sync.js.map +1 -1
  34. package/dist/server/jobs/watchdog.js +4 -0
  35. package/dist/server/jobs/watchdog.js.map +1 -1
  36. package/dist/server/journal/telemetry.js +11 -0
  37. package/dist/server/journal/telemetry.js.map +1 -1
  38. package/dist/server/journal/trade-journal.js +42 -16
  39. package/dist/server/journal/trade-journal.js.map +1 -1
  40. package/dist/server/llm/context-builder.js +9 -5
  41. package/dist/server/llm/context-builder.js.map +1 -1
  42. package/dist/server/personas/loader.js +46 -16
  43. package/dist/server/personas/loader.js.map +1 -1
  44. package/dist/server/personas/persona-agent.js +93 -21
  45. package/dist/server/personas/persona-agent.js.map +1 -1
  46. package/dist/server/personas/persona-state.js +198 -19
  47. package/dist/server/personas/persona-state.js.map +1 -1
  48. package/dist/server/personas/runner.js +29 -0
  49. package/dist/server/personas/runner.js.map +1 -1
  50. package/dist/server/personas/wake-plan.js +4 -67
  51. package/dist/server/personas/wake-plan.js.map +1 -1
  52. package/dist/server/readiness.js +70 -0
  53. package/dist/server/readiness.js.map +1 -1
  54. package/dist/server/routes.js +276 -12
  55. package/dist/server/routes.js.map +1 -1
  56. package/dist/server/screener/engine.js +8 -1
  57. package/dist/server/screener/engine.js.map +1 -1
  58. package/dist/server/screener/indicators.js +63 -0
  59. package/dist/server/screener/indicators.js.map +1 -0
  60. package/dist/server/server-sync.js +365 -125
  61. package/dist/server/server-sync.js.map +1 -1
  62. package/dist/server/share/postgres-publish.js +139 -0
  63. package/dist/server/share/postgres-publish.js.map +1 -0
  64. package/dist/server/share/prepare-state.js +50 -0
  65. package/dist/server/share/prepare-state.js.map +1 -0
  66. package/dist/server/share/prepare.js +61 -0
  67. package/dist/server/share/prepare.js.map +1 -0
  68. package/dist/server/share/publish-cron.js +96 -0
  69. package/dist/server/share/publish-cron.js.map +1 -0
  70. package/dist/server/share/snapshot.js +81 -0
  71. package/dist/server/share/snapshot.js.map +1 -0
  72. package/dist/server/watchers/condition-watcher.js +57 -16
  73. package/dist/server/watchers/condition-watcher.js.map +1 -1
  74. package/dist/web/assets/index-B1C-UX9W.js +88 -0
  75. package/dist/web/assets/index-N7Xwheka.css +1 -0
  76. package/dist/web/index.html +2 -2
  77. package/package.json +4 -5
  78. package/dist/web/assets/index-62SMpbaf.js +0 -79
  79. package/dist/web/assets/index-BPLQR0wt.css +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,63 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@mulsok/traders-client`.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) ·
6
+ versioning [SemVer](https://semver.org/).
7
+
8
+ ## [0.2.0] — 2026-05-10
9
+
10
+ Phase 5e (ADR-016) — admin SQLite ↔ Supabase Postgres ↔ client SQLite 의
11
+ 시세 동기화 인프라. 신규 사용자가 키움 호출 없이 admin 이 publish 한
12
+ 시세를 download 받아 페르소나 분석 가능.
13
+
14
+ ### Added
15
+ - `mulsok-client prepare` — 시세 데이터 download 진행률 CLI (5~10분 첫 install)
16
+ - `mulsok-client share dump` — admin SQLite VACUUM INTO + gzip backup
17
+ - `mulsok-client share publish-postgres` — admin SQLite → Supabase Postgres bulk upsert
18
+ - WebUI `PreparePage` — 첫 진입 자동 진행 화면 (readiness 미충족 감지)
19
+ - daemon startup catch-up — 마지막 sync/publish > 6h 면 즉시 fire-and-forget trigger
20
+ - daemon publish cron — 매일 16:35 KST 자동 sync + publish (admin only · 평일)
21
+ - daemon market-pull periodic — 매시간 server-sync 시 vercel `/api/market/*` 에서 incremental pull
22
+
23
+ ### Changed
24
+ - 키움 fetch 에 30s timeout (AbortController) — fetch + body read 둘 다 보호. rate limiter chain hang 차단.
25
+ - `getDailyChartDeep` 의 `maxRounds` 동적 계산 (`Math.max(6, ⌈totalDays/100⌉)`) — 5,000봉 (20년) backfill 가능
26
+ - universe sync 의 resume 최적화 — 이미 deep 한 종목 skip
27
+ - `/api/local/sync` 의 `onProgress` console.log — 진행 가시화
28
+ - readiness `data-prepared` 항목 detail 에 prepare 진행 hint
29
+ - universe-sync cron 자체는 SPEC-27 ADR-012 로 폐기 유지 — publish-cron 안에서 universe-sync 먼저 실행하도록 통합
30
+
31
+ ### Fixed
32
+ - vercel `/api/market/candles` cursor pagination 의 date 경계 안전 — `last_date` row 들 drop 후 `next_since` 응답 (silent data loss 방지)
33
+
34
+ ### Infra
35
+ - `supabase/migrations/0033_market_schema.sql`
36
+ - `market.{universe,daily_candles,sync_meta}` 테이블 + RLS (service_role 전용)
37
+ - `pgrst.db_schemas` 에 `market` 추가 (PostgREST 노출)
38
+ - `pgrst.db_max_rows = 250000` (default 1,000 의 server-side cap 해소)
39
+
40
+ ### Dependencies
41
+ - 추가: `@supabase/supabase-js@^2.105.4`
42
+
43
+ ### Notes
44
+ - 첫 install 시 `mulsok-client prepare` 또는 webui 진입 시 자동으로 시세 데이터 download
45
+ - 매시간 background market-pull 로 자동 갱신 (수 초 incremental)
46
+ - admin 만 publish 권한 — `SUPABASE_URL` · `SUPABASE_SERVICE_ROLE_KEY` 환경변수 필요
47
+
48
+ ## [0.1.1] — 2026-05-09
49
+
50
+ ### Added
51
+ - backfill resume 최적화 — 이미 candleDays 이상 보유한 종목은 skip
52
+ - 보통주 우선 정렬 (D1) — screener 가 reject 하는 비보통주 후순위 처리
53
+
54
+ ### Fixed
55
+ - ETF prefix 보강 (TREX · 파워 · KoAct · 마스터 · 히어로즈)
56
+ - `screener.maxPeriod` 계산 누락으로 candles 부족 영구 fail
57
+
58
+ ### Removed
59
+ - dante 페르소나 artifacts 제거 — 너울 단독 운영 복원
60
+
61
+ ## [0.1.0]
62
+
63
+ Initial public release.
package/README.md CHANGED
@@ -6,6 +6,10 @@ mulsok-traders 데스크톱 클라이언트 — 한국 주식 AI 자율 트레
6
6
 
7
7
  > **베타 1라운드** · macOS only · claude CLI (Claude Code) 권장
8
8
 
9
+ > 🖥 → ⌨ **SSH · 헤드리스 환경 사용자**: 이 패키지의 모든 운영을 webui 없이
10
+ > CLI 만으로 진행할 수 있습니다. 단계별 가이드 →
11
+ > [mulsok-traders.vercel.app/guide?mode=cli](https://mulsok-traders.vercel.app/guide?mode=cli)
12
+
9
13
  ## 설치
10
14
 
11
15
  ```bash
@@ -39,14 +43,47 @@ claude --version # 2.x 이상 (https://claude.com/claude-code)
39
43
 
40
44
  ## 명령어
41
45
 
46
+ CLI 가 모든 운영 명령을 제공합니다 — webui 없이도 헤드리스 / SSH 환경에서 daemon 을 완전히 제어할 수 있습니다.
47
+
48
+ ### Daemon lifecycle
49
+
50
+ ```bash
51
+ mulsok-client status [--json] # daemon · 인증 · 설정 · 계좌 · 감시자 · readiness
52
+ mulsok-client logs # 로그 실시간 tail (Ctrl+C 종료)
53
+ mulsok-client update # npm update + daemon 재시작
54
+ mulsok-client uninstall # 데몬 제거 (데이터 보존)
55
+ mulsok-client help # 도움말
56
+ ```
57
+
58
+ ### 설정 (config — webui 우회)
59
+
60
+ ```bash
61
+ mulsok-client config show # 현재 설정 (마스킹 표 출력)
62
+ mulsok-client config token <T> # 디바이스 인증 (인자 없으면 stdin 비밀 입력)
63
+ mulsok-client config llm <provider> [--api-key=K] [--model=M]
64
+ # provider: claude-cli·anthropic·openai·gemini
65
+ mulsok-client config broker kiwoom \
66
+ --app-key=K --app-secret=S [--demo|--live]
67
+ mulsok-client config subs list # 구독 목록
68
+ mulsok-client config subs add <slug> # 구독 추가
69
+ mulsok-client config subs remove <slug> # 구독 제거
70
+ ```
71
+
72
+ ### 운영
73
+
42
74
  ```bash
43
- mulsok-client status # 데몬 상태 + readiness
44
- mulsok-client logs # 로그 실시간 tail
45
- mulsok-client update # 최신 버전 받기 + 자동 재시작
46
- mulsok-client uninstall # 데몬 제거 (데이터 보존)
47
- mulsok-client help # 도움말
75
+ mulsok-client safety status # 현재 safety 상태
76
+ mulsok-client safety halt [reason] # 긴급 정지
77
+ mulsok-client safety resume # 정상 가동 재개
78
+ mulsok-client cycle <slug> # 수동 cycle (7~13분 · 분석 후 요약)
79
+ mulsok-client diary <slug> [--date=YYYY-MM-DD] # 일기 본문 (markdown ANSI · default 오늘)
80
+ mulsok-client diary <slug> --list [--limit=30] # 일기 목록 (날짜·길이·발췌)
81
+ mulsok-client journal [--days=7] [--tail=10] # 최근 이벤트 timeline
82
+ mulsok-client watchers [--persona=slug] # active 감시자 표
48
83
  ```
49
84
 
85
+ > 모든 명령은 **daemon HTTP API (127.0.0.1:5903) thin wrapper** 입니다. webui 와 동일한 데이터 흐름이라 인증 토큰·종목 정보 등은 daemon 안에 그대로 보관되며 외부로 송신되지 않습니다.
86
+
50
87
  ## 업데이트
51
88
 
52
89
  ```bash