@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
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src-server/readiness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src-server/readiness.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import fs from "node:fs";
2
2
  import { z } from "zod";
3
- import { loadConfig, saveConfig, maskedConfig, mergeConfigPatch, DEFAULT_CONFIG, CONFIG_PATHS, SERVER_BASE_URL, } from "./config.js";
3
+ import { loadConfig, saveConfig, maskedConfig, mergeConfigPatch, DEFAULT_CONFIG, CONFIG_PATHS, SERVER_BASE_URL, getCurrentUserId, resetAllLocalData, } from "./config.js";
4
4
  import { createLlmProvider } from "./llm/index.js";
5
5
  import { fetchCommonBundle, fetchPersonaBundle, assembleFullPrompt } from "./bundle.js";
6
6
  import { runReadinessCheck } from "./readiness.js";
@@ -14,10 +14,11 @@ import { getStockUniverse, getStandardUniverse, getMarketIndex, getAllSectorIndi
14
14
  import { countUniverse, getSyncMeta, listUniverse, vacuumWatchersOlderThan, watchersTableStats } from "./db/sqlite.js";
15
15
  import { runUniverseSync } from "./jobs/universe-sync.js";
16
16
  import { runScreener } from "./screener/engine.js";
17
- import { loadPersona, reloadPersona, PERSONA_OVERRIDE_DIR } from "./personas/loader.js";
17
+ import { loadPersona, reloadPersona, getPersonaOverrideDir } from "./personas/loader.js";
18
18
  import { listAvailablePersonas, runPersonaScreening } from "./personas/runner.js";
19
19
  // SPEC-27 (ADR-011): executePersonaDecision 폐기 → executePersonaCycle (lazy import)
20
20
  import { fetchServerSubscriptions, getLastSync } from "./server-sync.js";
21
+ import { isAdmin } from "./auth/admin.js";
21
22
  import { writeDiary, readDiary, listDiariesForPersona } from "./diary/writer.js";
22
23
  import { extractWakePlan, registerWakePlan } from "./personas/wake-plan.js";
23
24
  export async function registerRoutes(app) {
@@ -55,8 +56,38 @@ export async function registerRoutes(app) {
55
56
  const existing = loadConfig();
56
57
  try {
57
58
  const merged = mergeConfigPatch(existing, body);
58
- const saved = saveConfig(merged);
59
- return { ok: true, config: maskedConfig(saved) };
59
+ // token 변경됐으면 (다른 user 의 것일 수 있으므로) 캐시된 user 식별
60
+ // 정보는 즉시 비움. 다음 ping 응답으로 server 가 새 user_id 알려주면
61
+ // server-sync 가 cfg.auth.userId 채움.
62
+ const oldTok = existing.auth?.deviceToken;
63
+ const newTok = merged.auth?.deviceToken;
64
+ const tokenChanged = newTok !== oldTok;
65
+ if (tokenChanged) {
66
+ merged.auth = {
67
+ ...merged.auth,
68
+ userId: undefined,
69
+ userEmail: undefined,
70
+ };
71
+ merged.subscriptions = [];
72
+ }
73
+ saveConfig(merged);
74
+ // 어떤 config 섹션 변경이든 token 이 있으면 ping 발사.
75
+ // 응답 시점까지 대기 — 그 결과 cfg.auth.userId 가 갱신된 후에 응답
76
+ // 보내야 caller (webui) 가 인증 완료 상태의 config 를 즉시 읽을 수 있음.
77
+ // (이전엔 fire-and-forget 으로 race condition · webui banner 가
78
+ // 「⏳ 인증 중」 에서 멈춰 있었음 — 새로고침 해야 풀림)
79
+ const tokAfter = loadConfig().auth?.deviceToken;
80
+ if (tokAfter && tokAfter.startsWith("mtd_")) {
81
+ try {
82
+ await fetchServerSubscriptions();
83
+ }
84
+ catch (e) {
85
+ console.warn("[/api/config] ping 동기 실패 (config 저장은 OK):", e);
86
+ }
87
+ }
88
+ // ping 끝난 후 최신 config 읽어서 응답 (auth.userId/userEmail 채워진 상태)
89
+ const finalCfg = loadConfig();
90
+ return { ok: true, config: maskedConfig(finalCfg) };
60
91
  }
61
92
  catch (e) {
62
93
  const issues = e.issues;
@@ -64,6 +95,153 @@ export async function registerRoutes(app) {
64
95
  return { ok: false, error: "스키마 오류", issues };
65
96
  }
66
97
  });
98
+ // ── 자격증명 명시 제거 (DELETE) ─────────────────────────────
99
+ // mergeConfigPatch 의 secret-preserve 규칙 때문에 POST /api/config 로는
100
+ // 비우기가 불가능. 명시적 「제거」 API 분리.
101
+ /**
102
+ * DELETE /api/auth/device-token · 「로그아웃」 의미.
103
+ *
104
+ * 동작:
105
+ * - cfg.auth (deviceToken / userId / userEmail) 모두 비움
106
+ * - 메모리 watchers 정리 (이전 user 의 active watchers)
107
+ *
108
+ * 보존 (v2 schema 핵심):
109
+ * - users[<userId>] 의 LLM / broker / subscriptions / allocations 그대로
110
+ * → 재로그인 시 즉시 복원
111
+ * - LOCAL fs (state.json · diary · trade-journal · watchers DB) 그대로
112
+ *
113
+ * 명시적 wipe 는 POST /api/local/reset 사용.
114
+ */
115
+ app.delete("/api/auth/device-token", async () => {
116
+ const cfg = loadConfig();
117
+ const cleared = saveConfig({
118
+ ...cfg,
119
+ auth: { ...cfg.auth, deviceToken: undefined, userId: undefined, userEmail: undefined },
120
+ });
121
+ try {
122
+ getConditionWatcher().clearAll();
123
+ }
124
+ catch {
125
+ /* ignore */
126
+ }
127
+ return { ok: true, config: maskedConfig(cleared) };
128
+ });
129
+ /** DELETE /api/broker · broker 자격증명 제거 (kind=none, key/secret 비움) */
130
+ app.delete("/api/broker", async () => {
131
+ const cfg = loadConfig();
132
+ const cleared = saveConfig({
133
+ ...cfg,
134
+ broker: { kind: "none", appKey: undefined, appSecret: undefined, isDemo: true },
135
+ });
136
+ // server 의 readiness 도 즉시 갱신 (kiwoom_connected:false 반영) →
137
+ // dashboard 가 「broker 제거됐음」 을 본인 새로고침 없이 알 수 있도록.
138
+ if (cleared.auth?.deviceToken?.startsWith("mtd_")) {
139
+ void fetchServerSubscriptions();
140
+ }
141
+ return { ok: true, config: maskedConfig(cleared) };
142
+ });
143
+ /** DELETE /api/llm · LLM 설정 제거 (provider=none, apiKey 비움) */
144
+ app.delete("/api/llm", async () => {
145
+ const cfg = loadConfig();
146
+ const cleared = saveConfig({
147
+ ...cfg,
148
+ llm: { provider: "none", apiKey: undefined, model: undefined, claudeCli: undefined },
149
+ });
150
+ if (cleared.auth?.deviceToken?.startsWith("mtd_")) {
151
+ void fetchServerSubscriptions();
152
+ }
153
+ return { ok: true, config: maskedConfig(cleared) };
154
+ });
155
+ /**
156
+ * GET /api/me/identity · 현재 인증된 user 정보.
157
+ *
158
+ * 응답:
159
+ * { authenticated: true, userId: "...", userEmail: "...", deviceToken: "(masked)" }
160
+ * { authenticated: false }
161
+ *
162
+ * webui 가 「현재 user: <email>」 표시에 사용. server-sync lastSync 결과
163
+ * 도 함께 반환해 인증 실패 banner 등 UX 결정 가능.
164
+ */
165
+ app.get("/api/me/identity", async () => {
166
+ const cfg = loadConfig();
167
+ const tok = cfg.auth?.deviceToken;
168
+ const userId = cfg.auth?.userId;
169
+ const userEmail = cfg.auth?.userEmail;
170
+ const last = getLastSync();
171
+ return {
172
+ authenticated: !!userId,
173
+ userId: userId ?? null,
174
+ userEmail: userEmail ?? null,
175
+ hasToken: !!tok,
176
+ // Phase 5e-0 — admin 판정 (ENV 기반 · web 의 isAdmin 과 동일 default)
177
+ isAdmin: isAdmin(userEmail),
178
+ lastSyncedAt: last?.syncedAt ?? null,
179
+ lastAuthenticated: last?.authenticated ?? false,
180
+ lastError: last?.error ?? null,
181
+ };
182
+ });
183
+ /**
184
+ * POST /api/local/reset · ~/.mulsok-traders/ 사용자 데이터 일체 삭제 (위험).
185
+ *
186
+ * 삭제 대상:
187
+ * - u/ (모든 user 의 user-scoped 데이터)
188
+ * - personas/, diary/, trade-journal/, layer3-patches/, watchers.db
189
+ * (구버전에서 남은 글로벌 잔재)
190
+ * - config.json (모든 자격증명)
191
+ *
192
+ * 보존: market.db (universe + candles · 글로벌 시장 데이터 · 재 sync 비용 큼),
193
+ * krx-holidays.json, logs/
194
+ *
195
+ * 호출 후 사용자가 client 재시작 권장 (메모리에 떠 있는 PriceFeed/Watcher 정리 위함).
196
+ */
197
+ /**
198
+ * POST /api/local/server-sync · 강제 server-sync ping
199
+ *
200
+ * 일반 흐름: startPeriodicSync(3600s) 가 1시간 주기로 자동 ping. 단 watcher
201
+ * 등록·해제·trade 발생 직후 즉시 web 측 readiness 갱신 원할 때 trigger.
202
+ */
203
+ app.post("/api/local/server-sync", async () => {
204
+ const result = await fetchServerSubscriptions();
205
+ return { ok: result.ok, syncedAt: result.syncedAt, error: result.error };
206
+ });
207
+ app.post("/api/local/reset", async (req, reply) => {
208
+ const body = (req.body ?? {});
209
+ if (body.confirm !== "RESET-MY-LOCAL-DATA") {
210
+ reply.code(400);
211
+ return {
212
+ ok: false,
213
+ error: "확인 문자열 필요 — body 에 { confirm: \"RESET-MY-LOCAL-DATA\" }",
214
+ };
215
+ }
216
+ // 메모리 정리 (LOCAL DB / config 삭제 전)
217
+ try {
218
+ getConditionWatcher().clearAll();
219
+ }
220
+ catch {
221
+ /* ignore */
222
+ }
223
+ const removed = [];
224
+ // user-scoped + legacy global 모두 삭제
225
+ const r = resetAllLocalData();
226
+ removed.push(...r.removed);
227
+ // config.json 도 삭제
228
+ try {
229
+ if (fs.existsSync(CONFIG_PATHS.file)) {
230
+ fs.rmSync(CONFIG_PATHS.file, { force: true });
231
+ removed.push("config.json");
232
+ }
233
+ }
234
+ catch (e) {
235
+ console.warn("[local/reset] config.json 삭제 실패:", e);
236
+ }
237
+ // 새 default config 즉시 저장 (다음 요청들이 안전하게 동작)
238
+ saveConfig(DEFAULT_CONFIG);
239
+ return {
240
+ ok: true,
241
+ removed,
242
+ hint: "정상 가동을 위해 클라이언트를 재시작 (또는 dev 환경이면 자동 reload).",
243
+ };
244
+ });
67
245
  // ── Readiness Check · 거래 준비 상태 종합 ──────────────────
68
246
  app.get("/api/readiness", async () => {
69
247
  return runReadinessCheck();
@@ -306,7 +484,9 @@ export async function registerRoutes(app) {
306
484
  // SQLite watchers 테이블 누적 통계 (P1-4 보강 · 모니터링용 · vacuum 시점 판단)
307
485
  let dbStats = null;
308
486
  try {
309
- dbStats = watchersTableStats();
487
+ const userId = getCurrentUserId();
488
+ if (userId)
489
+ dbStats = watchersTableStats(userId);
310
490
  }
311
491
  catch (e) {
312
492
  // SQLite 일시 장애 등 — 응답에 영향 X
@@ -351,7 +531,7 @@ export async function registerRoutes(app) {
351
531
  const q = req.query;
352
532
  const slugs = (q.slugs ?? "neoul").split(",").map((s) => s.trim()).filter(Boolean);
353
533
  const results = await listAvailablePersonas(slugs);
354
- return { ok: true, items: results, overrideDir: PERSONA_OVERRIDE_DIR };
534
+ return { ok: true, items: results, overrideDir: getPersonaOverrideDir() };
355
535
  });
356
536
  app.post("/api/personas/:personaId/reload", async (req, reply) => {
357
537
  const { personaId } = req.params;
@@ -632,7 +812,12 @@ export async function registerRoutes(app) {
632
812
  app.post("/api/diary/:slug/write", async (req, reply) => {
633
813
  const { slug } = req.params;
634
814
  const body = (req.body ?? {});
635
- const r = await writeDiary(slug, { overwrite: body.overwrite });
815
+ // body.date yyyy-mm-dd 형식이면 날짜 backfill (누락 일기 채우기).
816
+ if (body.date && !/^\d{4}-\d{2}-\d{2}$/.test(body.date)) {
817
+ reply.code(400);
818
+ return { ok: false, error: "date 형식: yyyy-mm-dd (예: 2026-05-08)" };
819
+ }
820
+ const r = await writeDiary(slug, { overwrite: body.overwrite, date: body.date, force: body.force });
636
821
  if (!r.ok) {
637
822
  reply.code(500);
638
823
  return r;
@@ -1102,9 +1287,14 @@ export async function registerRoutes(app) {
1102
1287
  return { ok: false, error: "days 는 1 이상 정수" };
1103
1288
  }
1104
1289
  try {
1105
- const before = watchersTableStats();
1106
- const removed = vacuumWatchersOlderThan(days);
1107
- const after = watchersTableStats();
1290
+ const userId = getCurrentUserId();
1291
+ if (!userId) {
1292
+ reply.code(409);
1293
+ return { ok: false, error: "user_id 미설정 — 토큰 등록 후 재시도" };
1294
+ }
1295
+ const before = watchersTableStats(userId);
1296
+ const removed = vacuumWatchersOlderThan(userId, days);
1297
+ const after = watchersTableStats(userId);
1108
1298
  return {
1109
1299
  ok: true,
1110
1300
  days,
@@ -1125,6 +1315,11 @@ export async function registerRoutes(app) {
1125
1315
  maxCodes: body.maxCodes ?? 50,
1126
1316
  candleDays: body.candleDays ?? 120,
1127
1317
  targetCodes: body.targetCodes,
1318
+ onProgress: (done, total, lastCode) => {
1319
+ if (done % 50 === 0 || done === total) {
1320
+ console.log(`[local/sync] ${done}/${total} · last=${lastCode ?? "-"}`);
1321
+ }
1322
+ },
1128
1323
  });
1129
1324
  return { ok: true, result: r };
1130
1325
  }
@@ -1133,6 +1328,72 @@ export async function registerRoutes(app) {
1133
1328
  return { ok: false, error: String(e) };
1134
1329
  }
1135
1330
  });
1331
+ /**
1332
+ * Phase 5e-1a · admin 시세 스냅샷 export.
1333
+ * VACUUM INTO + gzip → ~/.mulsok-traders/u/<userId>/share/market-YYYY-MM-DD.sqlite.gz
1334
+ * Storage 업로드는 5e-1b 별도 phase.
1335
+ */
1336
+ app.post("/api/admin/share/dump", async (req, reply) => {
1337
+ void req;
1338
+ const cfg = loadConfig();
1339
+ if (!isAdmin(cfg.auth?.userEmail)) {
1340
+ reply.code(403);
1341
+ return { ok: false, error: "admin 전용 명령" };
1342
+ }
1343
+ const { exportSnapshot } = await import("./share/snapshot.js");
1344
+ const r = await exportSnapshot();
1345
+ if (!r.ok) {
1346
+ reply.code(500);
1347
+ }
1348
+ return r;
1349
+ });
1350
+ /**
1351
+ * Phase 5e-4 · 명시적 prepare (시세 데이터 download) 시작.
1352
+ * 첫 install 사용자가 cycle 시도 전 진행률 가시화 위해 호출.
1353
+ * 이미 running 이면 trigger 안 하고 같은 state 공유.
1354
+ */
1355
+ app.post("/api/prepare/start", async (req, reply) => {
1356
+ void req;
1357
+ void reply;
1358
+ const { startPrepare } = await import("./share/prepare.js");
1359
+ return startPrepare();
1360
+ });
1361
+ /**
1362
+ * Phase 5e-4 · prepare 진행 상태 polling.
1363
+ * CLI / WebUI 가 1초 간격으로 호출 — progress bar 갱신.
1364
+ */
1365
+ app.get("/api/prepare/status", async (req, reply) => {
1366
+ void req;
1367
+ void reply;
1368
+ const { getPrepareState } = await import("./share/prepare-state.js");
1369
+ return getPrepareState();
1370
+ });
1371
+ /**
1372
+ * Phase 5e-1' · admin SQLite → Supabase Postgres bulk publish.
1373
+ * 환경변수: SUPABASE_URL · SUPABASE_SERVICE_ROLE_KEY (~/.mulsok-traders/.env)
1374
+ */
1375
+ app.post("/api/admin/share/publish-postgres", async (req, reply) => {
1376
+ const cfg = loadConfig();
1377
+ if (!isAdmin(cfg.auth?.userEmail)) {
1378
+ reply.code(403);
1379
+ return { ok: false, error: "admin 전용 명령" };
1380
+ }
1381
+ const body = (req.body ?? {});
1382
+ const { publishToPostgres } = await import("./share/postgres-publish.js");
1383
+ const r = await publishToPostgres({
1384
+ universeOnly: body.universeOnly,
1385
+ candlesOnly: body.candlesOnly,
1386
+ onProgress: (kind, done, total) => {
1387
+ if (done % 10000 === 0 || done === total) {
1388
+ console.log(`[publish-postgres] ${kind} ${done}/${total}`);
1389
+ }
1390
+ },
1391
+ });
1392
+ if (!r.ok) {
1393
+ reply.code(500);
1394
+ }
1395
+ return r;
1396
+ });
1136
1397
  /**
1137
1398
  * 너울 양음양 타겟 배치:
1138
1399
  * ka10031 전일 거래량 상위 (KOSPI + KOSDAQ) + 현재 보유 종목 → 일봉 배치.
@@ -1154,9 +1415,12 @@ export async function registerRoutes(app) {
1154
1415
  if (kosdaqVol.ok)
1155
1416
  for (const r of kosdaqVol.data)
1156
1417
  codes.add(r.symbolCode);
1157
- if (holdingsRes.ok)
1418
+ // holdings.symbolCode 는 account.ts 에서 이미 정규화 후 반환. 안전망 + 단일 helper.
1419
+ if (holdingsRes.ok) {
1420
+ const { normalizeKiwoomCode } = await import("./broker/kiwoom/_helpers/symbol-code.js");
1158
1421
  for (const h of holdingsRes.data.items)
1159
- codes.add(h.symbolCode.replace(/^A/, ""));
1422
+ codes.add(normalizeKiwoomCode(h.symbolCode));
1423
+ }
1160
1424
  const r = await runUniverseSync({
1161
1425
  candleDays,
1162
1426
  targetCodes: Array.from(codes),