@mulsok/traders-client 0.1.0 → 0.2.1

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 (81) hide show
  1. package/CHANGELOG.md +80 -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/schema.js +13 -0
  51. package/dist/server/personas/schema.js.map +1 -1
  52. package/dist/server/personas/wake-plan.js +4 -67
  53. package/dist/server/personas/wake-plan.js.map +1 -1
  54. package/dist/server/readiness.js +70 -0
  55. package/dist/server/readiness.js.map +1 -1
  56. package/dist/server/routes.js +300 -13
  57. package/dist/server/routes.js.map +1 -1
  58. package/dist/server/screener/engine.js +110 -1
  59. package/dist/server/screener/engine.js.map +1 -1
  60. package/dist/server/screener/indicators.js +63 -0
  61. package/dist/server/screener/indicators.js.map +1 -0
  62. package/dist/server/server-sync.js +387 -126
  63. package/dist/server/server-sync.js.map +1 -1
  64. package/dist/server/share/postgres-publish.js +139 -0
  65. package/dist/server/share/postgres-publish.js.map +1 -0
  66. package/dist/server/share/prepare-state.js +50 -0
  67. package/dist/server/share/prepare-state.js.map +1 -0
  68. package/dist/server/share/prepare.js +61 -0
  69. package/dist/server/share/prepare.js.map +1 -0
  70. package/dist/server/share/publish-cron.js +96 -0
  71. package/dist/server/share/publish-cron.js.map +1 -0
  72. package/dist/server/share/snapshot.js +81 -0
  73. package/dist/server/share/snapshot.js.map +1 -0
  74. package/dist/server/watchers/condition-watcher.js +57 -16
  75. package/dist/server/watchers/condition-watcher.js.map +1 -1
  76. package/dist/web/assets/index-B1C-UX9W.js +88 -0
  77. package/dist/web/assets/index-N7Xwheka.css +1 -0
  78. package/dist/web/index.html +2 -2
  79. package/package.json +4 -5
  80. package/dist/web/assets/index-62SMpbaf.js +0 -79
  81. package/dist/web/assets/index-BPLQR0wt.css +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,80 @@
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.1] — 2026-05-10
9
+
10
+ Onboarding UX hotfix — 토큰 등록 후 web dashboard 의 Step 4 (broker/llm)
11
+ 진입까지 1시간 polling 대기하던 문제 근본 해결.
12
+
13
+ ### Fixed
14
+ - **server-sync 의 self-bootstrap** — 첫 ping 에서 user_id 받자마자 즉시
15
+ 한 번 더 self-recurse 해서 readiness payload 동봉한 두 번째 ping trigger.
16
+ 이전엔 다음 1시간 cron 까지 wait 했음. recursion depth 1 cap.
17
+ - `/api/health` 의 `version` 이 "0.0.0" hard-coded 였던 display bug —
18
+ runtime 에 package.json 에서 read.
19
+
20
+ ### 영향
21
+ - 신규 사용자: `mulsok-client config token <T>` 직후 5초 안에 dashboard
22
+ Step 4 자동 진입 (이전 1시간 wait → 즉시).
23
+ - 기존 사용자: 변경 없음 (cfg.auth.userId 이미 채워진 상태).
24
+
25
+ ## [0.2.0] — 2026-05-10
26
+
27
+ Phase 5e (ADR-016) — admin SQLite ↔ Supabase Postgres ↔ client SQLite 의
28
+ 시세 동기화 인프라. 신규 사용자가 키움 호출 없이 admin 이 publish 한
29
+ 시세를 download 받아 페르소나 분석 가능.
30
+
31
+ ### Added
32
+ - `mulsok-client prepare` — 시세 데이터 download 진행률 CLI (5~10분 첫 install)
33
+ - `mulsok-client share dump` — admin SQLite VACUUM INTO + gzip backup
34
+ - `mulsok-client share publish-postgres` — admin SQLite → Supabase Postgres bulk upsert
35
+ - WebUI `PreparePage` — 첫 진입 자동 진행 화면 (readiness 미충족 감지)
36
+ - daemon startup catch-up — 마지막 sync/publish > 6h 면 즉시 fire-and-forget trigger
37
+ - daemon publish cron — 매일 16:35 KST 자동 sync + publish (admin only · 평일)
38
+ - daemon market-pull periodic — 매시간 server-sync 시 vercel `/api/market/*` 에서 incremental pull
39
+
40
+ ### Changed
41
+ - 키움 fetch 에 30s timeout (AbortController) — fetch + body read 둘 다 보호. rate limiter chain hang 차단.
42
+ - `getDailyChartDeep` 의 `maxRounds` 동적 계산 (`Math.max(6, ⌈totalDays/100⌉)`) — 5,000봉 (20년) backfill 가능
43
+ - universe sync 의 resume 최적화 — 이미 deep 한 종목 skip
44
+ - `/api/local/sync` 의 `onProgress` console.log — 진행 가시화
45
+ - readiness `data-prepared` 항목 detail 에 prepare 진행 hint
46
+ - universe-sync cron 자체는 SPEC-27 ADR-012 로 폐기 유지 — publish-cron 안에서 universe-sync 먼저 실행하도록 통합
47
+
48
+ ### Fixed
49
+ - vercel `/api/market/candles` cursor pagination 의 date 경계 안전 — `last_date` row 들 drop 후 `next_since` 응답 (silent data loss 방지)
50
+
51
+ ### Infra
52
+ - `supabase/migrations/0033_market_schema.sql`
53
+ - `market.{universe,daily_candles,sync_meta}` 테이블 + RLS (service_role 전용)
54
+ - `pgrst.db_schemas` 에 `market` 추가 (PostgREST 노출)
55
+ - `pgrst.db_max_rows = 250000` (default 1,000 의 server-side cap 해소)
56
+
57
+ ### Dependencies
58
+ - 추가: `@supabase/supabase-js@^2.105.4`
59
+
60
+ ### Notes
61
+ - 첫 install 시 `mulsok-client prepare` 또는 webui 진입 시 자동으로 시세 데이터 download
62
+ - 매시간 background market-pull 로 자동 갱신 (수 초 incremental)
63
+ - admin 만 publish 권한 — `SUPABASE_URL` · `SUPABASE_SERVICE_ROLE_KEY` 환경변수 필요
64
+
65
+ ## [0.1.1] — 2026-05-09
66
+
67
+ ### Added
68
+ - backfill resume 최적화 — 이미 candleDays 이상 보유한 종목은 skip
69
+ - 보통주 우선 정렬 (D1) — screener 가 reject 하는 비보통주 후순위 처리
70
+
71
+ ### Fixed
72
+ - ETF prefix 보강 (TREX · 파워 · KoAct · 마스터 · 히어로즈)
73
+ - `screener.maxPeriod` 계산 누락으로 candles 부족 영구 fail
74
+
75
+ ### Removed
76
+ - dante 페르소나 artifacts 제거 — 너울 단독 운영 복원
77
+
78
+ ## [0.1.0]
79
+
80
+ 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