@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,22 +1,36 @@
1
1
  /**
2
2
  * SPEC-27 · Stateful Persona Agent — state.json read/write 모듈.
3
3
  *
4
- * 페르소나별 ~/.mulsok-traders/personas/<slug>/state.json 을 zod 검증으로 read/write.
5
- * AI agent 가 직접 도구로 read/write 하지만, 시스템 (watchdog 등) 도 동일 모듈로 read 한다.
4
+ * 페르소나별 ~/.mulsok-traders/u/<userId>/personas/<slug>/state.json 을
5
+ * zod 검증으로 read/write. AI agent 가 직접 도구로 read/write 하지만,
6
+ * 시스템 (watchdog 등) 도 동일 모듈로 read 한다.
7
+ *
8
+ * user_id 무관 글로벌 path 였던 이전 구조는 폐기 — token 교체 시 다른 user
9
+ * 데이터가 새 user 의 readiness 로 잘못 보고되는 문제 차단.
6
10
  */
7
11
  import fs from "node:fs";
8
12
  import path from "node:path";
9
- import os from "node:os";
10
13
  import { z } from "zod";
11
- const ROOT = path.join(os.homedir(), ".mulsok-traders", "personas");
14
+ import { ensureUserDir, requireUserId } from "../config.js";
15
+ import { normalizeKstDateMarker } from "../calendar/kst-marker.js";
16
+ import { isTradingDay, nextTradingDay } from "../calendar/krx-holidays.js";
17
+ /** 인증된 user 의 personas root. user_id 미설정 시 throw. */
18
+ function getRoot(userId = requireUserId()) {
19
+ return ensureUserDir(userId, "personas");
20
+ }
12
21
  // AI 가 자유 필드명 사용해도 정합되도록 preprocess 로 normalize.
13
22
  // 별칭 매핑: symbolCode→code, symbolName→name, note→reason,
14
23
  // entryTriggerKrw→triggerPrice, stopLossKrw→stopPrice
24
+ //
25
+ // preprocess 결과가 spread (...o) 로 추가 메타 (score · watcherIds · stars 등) 보존.
26
+ // 명시 9개 키는 별칭 매핑 후 override (없으면 별칭 값으로 채움). 이 패턴 없이는
27
+ // `.passthrough()` 가 무용 — preprocess 의 명시 객체에 키 자체가 없으므로.
15
28
  export const WatchlistItemSchema = z.preprocess((v) => {
16
29
  if (!v || typeof v !== "object")
17
30
  return v;
18
31
  const o = v;
19
32
  return {
33
+ ...o, // score, watcherIds, stars 등 추가 메타 보존
20
34
  code: o.code ?? o.symbolCode ?? o.symbol_code ?? o.symbolcode,
21
35
  name: o.name ?? o.symbolName ?? o.symbol_name ?? o.symbolname,
22
36
  pattern: o.pattern,
@@ -38,14 +52,26 @@ export const WatchlistItemSchema = z.preprocess((v) => {
38
52
  addedAt: z.string().min(1),
39
53
  expiresAt: z.string().optional(),
40
54
  }).passthrough()); // 추가 필드 (score, stars, watcherIds 등) 보존
41
- export const PositionSchema = z.object({
55
+ // 별칭 매핑: avgBuyPriceKrw → avgPriceKrw. spread 로 추가 메타 보존.
56
+ // agent 가 자유롭게 추가 키 (splitTier · stopPriceKrw · target1PriceKrw · target2PriceKrw ·
57
+ // clientOrderId · brokerOrderNo · watcherIds 등) 를 넣어도 보존되어 다음 사이클에서
58
+ // agent 가 자기 컨텍스트를 잃지 않는다 (특히 watcherIds 끊기면 손절·익절 link 손실).
59
+ export const PositionSchema = z.preprocess((v) => {
60
+ if (!v || typeof v !== "object")
61
+ return v;
62
+ const o = v;
63
+ return {
64
+ ...o,
65
+ avgPriceKrw: o.avgPriceKrw ?? o.avgBuyPriceKrw ?? o.avg_price_krw ?? o.avg_buy_price_krw,
66
+ };
67
+ }, z.object({
42
68
  code: z.string().min(1),
43
69
  name: z.string().min(1),
44
70
  quantity: z.number().int().nonnegative(),
45
71
  avgPriceKrw: z.number().nonnegative(),
46
72
  boughtAt: z.string().min(1),
47
73
  rationale: z.string().default(""),
48
- });
74
+ }).passthrough());
49
75
  // passthrough() — AI 가 자유 필드 (activeWatchers · notes 등) 추가해도 보존.
50
76
  // 우리가 강제하는 핵심 필드는 명시 + 검증, 그 외는 통과.
51
77
  export const PersonaStateSchema = z.object({
@@ -64,7 +90,7 @@ export const PersonaStateSchema = z.object({
64
90
  memo: z.string().optional(),
65
91
  }).passthrough();
66
92
  export function personaDir(slug) {
67
- return path.join(ROOT, slug);
93
+ return path.join(getRoot(), slug);
68
94
  }
69
95
  export function statePath(slug) {
70
96
  return path.join(personaDir(slug), "state.json");
@@ -80,7 +106,14 @@ function ensureDir(slug) {
80
106
  if (!fs.existsSync(dir))
81
107
  fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
82
108
  }
83
- /** state.json 이 없으면 default 생성 후 반환. 잘못된 형식이면 default 로 초기화 + warn. */
109
+ /**
110
+ * state.json 이 없으면 default 생성 후 반환.
111
+ * 손상 (JSON parse 실패 / zod 검증 실패) 시 — 원본을 .bak-corrupt-<ts> 로 격리한 뒤
112
+ * default 반환. 디스크의 state.json 은 덮어쓰지 않는다 (사용자가 backup 에서 복구 가능).
113
+ *
114
+ * 이전 동작은 손상된 파일을 silent default 로 덮어쓰기 → 사용자 watchlist/positions 가
115
+ * 사라지는 사고 (2026-05-08, AI agent 의 trailing comma write). 새 정책은 격리·보존.
116
+ */
84
117
  export function loadState(slug) {
85
118
  ensureDir(slug);
86
119
  const p = statePath(slug);
@@ -89,21 +122,45 @@ export function loadState(slug) {
89
122
  fs.writeFileSync(p, JSON.stringify(init, null, 2), { mode: 0o600 });
90
123
  return init;
91
124
  }
125
+ let raw;
126
+ try {
127
+ raw = fs.readFileSync(p, "utf-8");
128
+ }
129
+ catch (e) {
130
+ console.warn(`[persona-state] ${slug} read fs 실패 · default:`, e);
131
+ return PersonaStateSchema.parse({ slug });
132
+ }
133
+ let json;
92
134
  try {
93
- const raw = fs.readFileSync(p, "utf-8");
94
- const parsed = PersonaStateSchema.safeParse(JSON.parse(raw));
95
- if (!parsed.success) {
96
- console.warn(`[persona-state] ${slug} 잘못된 형식 · default 로 초기화:`, parsed.error.issues);
97
- const init = PersonaStateSchema.parse({ slug });
98
- fs.writeFileSync(p, JSON.stringify(init, null, 2), { mode: 0o600 });
99
- return init;
100
- }
101
- return parsed.data;
135
+ json = JSON.parse(raw);
102
136
  }
103
137
  catch (e) {
104
- console.warn(`[persona-state] ${slug} read 실패 · default:`, e);
138
+ quarantineCorruptState(p, raw, `JSON parse 실패: ${String(e)}`);
139
+ return PersonaStateSchema.parse({ slug });
140
+ }
141
+ const parsed = PersonaStateSchema.safeParse(json);
142
+ if (!parsed.success) {
143
+ const reason = `zod 검증 실패: ${parsed.error.issues.map((i) => i.path.join(".") + ": " + i.message).join(" · ")}`;
144
+ quarantineCorruptState(p, raw, reason);
105
145
  return PersonaStateSchema.parse({ slug });
106
146
  }
147
+ return parsed.data;
148
+ }
149
+ /**
150
+ * 손상된 state.json 을 격리. 원본을 .bak-corrupt-<timestamp> 로 복사하고 warn 출력.
151
+ * 디스크의 state.json 자체는 건드리지 않는다 (호출자가 default fallback 으로 진행하되,
152
+ * 사용자/오퍼레이터는 backup 에서 손으로 복구 가능).
153
+ */
154
+ function quarantineCorruptState(originalPath, raw, reason) {
155
+ const backup = `${originalPath}.bak-corrupt-${Date.now()}`;
156
+ try {
157
+ fs.writeFileSync(backup, raw, { mode: 0o600 });
158
+ }
159
+ catch (e) {
160
+ console.warn(`[persona-state] 백업 작성 실패 (${backup}):`, e);
161
+ return;
162
+ }
163
+ console.warn(`[persona-state] ${path.basename(originalPath)} 손상 · ${reason}\n → 백업: ${backup}\n → default 로 fallback (디스크는 그대로)`);
107
164
  }
108
165
  export function saveState(slug, state) {
109
166
  ensureDir(slug);
@@ -111,6 +168,128 @@ export function saveState(slug, state) {
111
168
  fs.writeFileSync(statePath(slug), JSON.stringify(validated, null, 2), { mode: 0o600 });
112
169
  return validated;
113
170
  }
171
+ /* ================================================================
172
+ <state_update> 블록 추출 + 적용 — 2026-05-08 ADR
173
+ ================================================================
174
+ AI agent 가 state.json 을 raw Write/Edit 으로 직접 쓰지 않고, 사이클 마지막
175
+ 응답에 다음 블록을 포함:
176
+
177
+ <state_update>
178
+ { "watchlist": [...], "positions": [...], "nextRunAt": "...", ... }
179
+ </state_update>
180
+
181
+ 시스템이 블록을 추출해 zod 부분 검증 → 기존 state 와 머지 후 saveState 호출.
182
+ blocked 키 (slug · version) 는 system 이 강제 (AI 가 잘못 쓰면 무시).
183
+
184
+ 배경: 2026-05-08 AI 가 state.json 에 trailing comma 가 든 raw JSON 을 Write 도구로
185
+ 덮어써 watchlist/positions 사라짐 사고. saveState 경로 (zod + JSON.stringify) 만
186
+ 사용해 직렬화하면 손상 불가능.
187
+ */
188
+ const STATE_UPDATE_RE = /<state_update>\s*([\s\S]*?)\s*<\/state_update>/;
189
+ /**
190
+ * agent 응답 텍스트에서 `<state_update>...</state_update>` JSON 블록 추출.
191
+ * 없으면 ok=false / 있으나 JSON.parse 실패면 ok=false reason 명시.
192
+ */
193
+ export function extractStateUpdate(text) {
194
+ const m = STATE_UPDATE_RE.exec(text);
195
+ if (!m)
196
+ return { ok: false, reason: "state_update 블록 없음" };
197
+ const inner = m[1].trim();
198
+ if (!inner)
199
+ return { ok: false, reason: "state_update 블록이 비어있음" };
200
+ try {
201
+ return { ok: true, payload: JSON.parse(inner) };
202
+ }
203
+ catch (e) {
204
+ return { ok: false, reason: `state_update JSON.parse 실패: ${String(e)}` };
205
+ }
206
+ }
207
+ export function normalizeNextRunAt(input) {
208
+ if (input === null || input === undefined)
209
+ return { value: null };
210
+ if (typeof input !== "string") {
211
+ return { value: null, warn: `nextRunAt 이 string 이 아님 (받음: ${typeof input}) → null 처리` };
212
+ }
213
+ const trimmed = input.trim();
214
+ if (!trimmed)
215
+ return { value: null };
216
+ const parsed = normalizeKstDateMarker(trimmed);
217
+ if (!parsed) {
218
+ return { value: null, warn: `nextRunAt 파싱 실패 ("${input}") → null 처리` };
219
+ }
220
+ if (Number.isNaN(parsed.getTime())) {
221
+ return { value: null, warn: `nextRunAt invalid date ("${input}") → null 처리` };
222
+ }
223
+ if (isTradingDay(parsed)) {
224
+ return { value: parsed.toISOString() };
225
+ }
226
+ // 비거래일 (토/일/공휴일) → 다음 거래일로 보정. KST 시각 부분 보존.
227
+ const nextTd = nextTradingDay(parsed);
228
+ const parsedKst = new Date(parsed.getTime() + 9 * 3600_000);
229
+ const hh = String(parsedKst.getUTCHours()).padStart(2, "0");
230
+ const mm = String(parsedKst.getUTCMinutes()).padStart(2, "0");
231
+ const ss = String(parsedKst.getUTCSeconds()).padStart(2, "0");
232
+ const ymd = new Date(nextTd.getTime() + 9 * 3600_000).toISOString().slice(0, 10);
233
+ const corrected = new Date(`${ymd}T${hh}:${mm}:${ss}+09:00`);
234
+ if (Number.isNaN(corrected.getTime())) {
235
+ return {
236
+ value: parsed.toISOString(),
237
+ warn: `nextRunAt 거래일 보정 실패 ("${input}") → 원본 ISO 유지`,
238
+ };
239
+ }
240
+ const inputKst = parsedKst.toISOString().slice(0, 10);
241
+ return {
242
+ value: corrected.toISOString(),
243
+ warn: `nextRunAt 비거래일 ("${input}" → ${inputKst} KST) → 다음 거래일 ${ymd} ${hh}:${mm}:${ss} KST 로 보정`,
244
+ };
245
+ }
246
+ /** PersonaStateSchema 의 부분 갱신 형태 — 일부 키만 보내도 OK. */
247
+ const StateUpdatePayloadSchema = PersonaStateSchema.partial();
248
+ /**
249
+ * 추출된 payload 를 기존 state 에 머지 후 saveState. 누락 키는 기존 값 유지.
250
+ * slug / version 은 system 이 강제 (AI 가 잘못 보내면 override).
251
+ */
252
+ export function applyStateUpdate(slug, payload) {
253
+ // 시스템이 강제하는 키는 검증 전에 제거 (AI 가 잘못 보내도 zod 가 막지 않게).
254
+ let normalizedPayload = payload;
255
+ if (payload && typeof payload === "object" && !Array.isArray(payload)) {
256
+ const { slug: _slug, version: _version, ...rest } = payload;
257
+ void _slug;
258
+ void _version;
259
+ normalizedPayload = rest;
260
+ }
261
+ const parsed = StateUpdatePayloadSchema.safeParse(normalizedPayload);
262
+ if (!parsed.success) {
263
+ return {
264
+ ok: false,
265
+ reason: `zod 검증 실패: ${parsed.error.issues.map((i) => i.path.join(".") + ": " + i.message).join(" · ")}`,
266
+ };
267
+ }
268
+ const current = loadState(slug);
269
+ // nextRunAt 시스템 가드 — KST 마커 정규화 + 거래일 보정. payload 에 nextRunAt 키가
270
+ // 명시된 경우만 처리 (생략된 경우엔 current 의 값 유지).
271
+ let nextRunAt = current.nextRunAt;
272
+ if ("nextRunAt" in parsed.data) {
273
+ const r = normalizeNextRunAt(parsed.data.nextRunAt);
274
+ if (r.warn)
275
+ console.warn(`[persona-state] ${slug} ${r.warn}`);
276
+ nextRunAt = r.value;
277
+ }
278
+ const merged = {
279
+ ...current,
280
+ ...parsed.data,
281
+ nextRunAt,
282
+ slug,
283
+ version: 1,
284
+ };
285
+ try {
286
+ const saved = saveState(slug, merged);
287
+ return { ok: true, applied: saved };
288
+ }
289
+ catch (e) {
290
+ return { ok: false, reason: `saveState 실패: ${String(e)}` };
291
+ }
292
+ }
114
293
  export function loadStrategy(slug) {
115
294
  ensureDir(slug);
116
295
  const p = strategyPath(slug);
@@ -159,7 +338,7 @@ function defaultStrategyMd(slug) {
159
338
  Path 안전 검증 — agent 도구가 페르소나 폴더 밖 접근 시도 차단
160
339
  ================================================================ */
161
340
  /**
162
- * 주어진 path 가 ~/.mulsok-traders/personas/<slug>/ 안에 있는지 검증.
341
+ * 주어진 path 가 ~/.mulsok-traders/u/<userId>/personas/<slug>/ 안에 있는지 검증.
163
342
  * 도구 호출 (Read/Write/Edit) 의 path 인자에 사용.
164
343
  */
165
344
  export function isPathInPersonaDir(slug, target) {
@@ -1 +1 @@
1
- {"version":3,"file":"persona-state.js","sourceRoot":"","sources":["../../../src-server/personas/persona-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"persona-state.js","sourceRoot":"","sources":["../../../src-server/personas/persona-state.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,35 @@ export async function runPersonaScreening(slug) {
32
32
  skipReason: `페르소나 ${slug} 는 frontmatter 에 screener 설정이 없음`,
33
33
  };
34
34
  }
35
+ // Phase 5c · 데이터 준비 가드 — backfill 미완료 시 명확한 reason 으로 skip.
36
+ // 임계 120봉 (너울 longMaBreakoutBonus 120 기준) · ≥500 deep stocks 보장.
37
+ // 추후 더 깊은 EMA 페르소나 추가 시 임계 상향.
38
+ try {
39
+ const { getDb } = await import("../db/sqlite.js");
40
+ const db = getDb();
41
+ const row = db.prepare(`SELECT COUNT(*) AS n FROM (
42
+ SELECT code FROM daily_candles GROUP BY code HAVING COUNT(*) >= 120
43
+ )`).get();
44
+ if (row.n < 500) {
45
+ return {
46
+ persona: metaOf(persona),
47
+ screener: emptyResult(),
48
+ screenedAt: new Date().toISOString(),
49
+ skipped: true,
50
+ skipReason: `data_not_ready · ${row.n}/500 종목 deep candle 보유 — backfill 진행 중 (자동 또는 \`mulsok-client sync\` 수동)`,
51
+ };
52
+ }
53
+ }
54
+ catch {
55
+ // DB 미초기화 등 — backfill 자체가 안 시작됨
56
+ return {
57
+ persona: metaOf(persona),
58
+ screener: emptyResult(),
59
+ screenedAt: new Date().toISOString(),
60
+ skipped: true,
61
+ skipReason: "data_not_ready · daily_candles DB 미초기화 — daemon 가동 후 자동 backfill 또는 수동 트리거",
62
+ };
63
+ }
35
64
  const filter = configToFilter(cfg);
36
65
  const screener = await runScreener(filter);
37
66
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src-server/personas/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src-server/personas/runner.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,10 @@
18
18
  */
19
19
  import { z } from "zod";
20
20
  import { getConditionWatcher } from "../watchers/condition-watcher.js";
21
- import { nextTradingDay, isKrxHoliday } from "../calendar/krx-holidays.js";
21
+ import { normalizeKstDateMarker } from "../calendar/kst-marker.js";
22
+ // Backward-compat re-export — 기존 `import { normalizeKstDateMarker } from ".../wake-plan"`
23
+ // 의존자 (테스트 · persona-state 등) 호환. 실 정의는 calendar/kst-marker.ts.
24
+ export { normalizeKstDateMarker };
22
25
  /* ─────────── 스키마 ─────────── */
23
26
  const ComparisonOpSchema = z.enum(["gte", "gt", "lte", "lt", "eq"]);
24
27
  // Minimum interval (SPEC-4 · 무한 루프 방어 · 자율성 침해 X · 명백한 버그 가드)
@@ -161,72 +164,6 @@ function firstJsonObject(text) {
161
164
  }
162
165
  return undefined;
163
166
  }
164
- /* ─────────── KST 시각 마커 정규화 ─────────── */
165
- /**
166
- * "오늘T15:25:00+09:00", "내일T08:50:00+09:00", "다음월요일T08:50:00+09:00",
167
- * "다음거래일T08:50:00+09:00", 또는 ISO8601 절대 시각을 실 Date 로.
168
- *
169
- * 「다음거래일」 처리: KRX 공휴일 + 주말 모두 skip (calendar/krx-holidays.ts).
170
- * 「내일」 처리: 단순 +1일 (휴장일 검증 X · LLM 의도 그대로). 휴장일 발화하면
171
- * safety:market_closed 로 차단되므로 사용자가 정확하면 "다음거래일" 사용 권장.
172
- */
173
- export function normalizeKstDateMarker(input) {
174
- // ISO8601 시도
175
- const direct = new Date(input);
176
- if (!Number.isNaN(direct.getTime()) && /\d{4}/.test(input))
177
- return direct;
178
- const m = input.match(/^(오늘|내일|다음(?:주)?월요일|다음거래일)T(\d{2}):(\d{2}):(\d{2})([+-]\d{2}:\d{2})$/);
179
- if (!m)
180
- return null;
181
- const [, dayKey, hh, mm, ss, tz] = m;
182
- const nowUtc = new Date();
183
- const kstOffsetMs = 9 * 3600 * 1000;
184
- const kstNow = new Date(nowUtc.getTime() + kstOffsetMs);
185
- const kstDay = kstNow.getUTCDay(); // 0 = 일, 1 = 월, ...
186
- let offsetDays = 0;
187
- if (dayKey === "오늘") {
188
- offsetDays = 0;
189
- }
190
- else if (dayKey === "내일") {
191
- offsetDays = 1;
192
- }
193
- else if (dayKey.includes("월요일")) {
194
- // 다음 월요일
195
- offsetDays = kstDay === 0 ? 1 : (8 - kstDay) % 7;
196
- if (offsetDays === 0)
197
- offsetDays = 7; // 오늘이 월요일이면 다음 주 월요일
198
- }
199
- else if (dayKey === "다음거래일") {
200
- // KRX 공휴일 + 주말 모두 skip (D 보강 · 공휴일 캘린더 활용)
201
- // 1) +1일 후보
202
- let candidate = new Date(nowUtc.getTime() + 86400_000);
203
- // 2) 시각 부분을 hh:mm:ss 로 맞춰서 거래일 검증 (장 시간대 고려)
204
- const candidateIso = `${candidate.toISOString().slice(0, 10)}T${hh}:${mm}:${ss}${tz}`;
205
- candidate = new Date(candidateIso);
206
- if (!Number.isNaN(candidate.getTime())) {
207
- // 3) 휴장일이면 다음 거래일로
208
- if (isKrxHoliday(candidate)) {
209
- candidate = nextTradingDay(candidate);
210
- // 시각 부분 다시 적용 (nextTradingDay 는 시각 그대로 두지만 안전)
211
- const adjusted = `${candidate.toISOString().slice(0, 10)}T${hh}:${mm}:${ss}${tz}`;
212
- const adjustedDate = new Date(adjusted);
213
- return Number.isNaN(adjustedDate.getTime()) ? null : adjustedDate;
214
- }
215
- return candidate;
216
- }
217
- // fallback: 이전 단순 로직
218
- offsetDays = 1;
219
- const nextDay = (kstDay + offsetDays) % 7;
220
- if (nextDay === 6)
221
- offsetDays += 2;
222
- else if (nextDay === 0)
223
- offsetDays += 1;
224
- }
225
- const ymd = new Date(kstNow.getTime() + offsetDays * 86400000).toISOString().slice(0, 10);
226
- const iso = `${ymd}T${hh}:${mm}:${ss}${tz}`;
227
- const d = new Date(iso);
228
- return Number.isNaN(d.getTime()) ? null : d;
229
- }
230
167
  export function registerWakePlan(personaSlug, plan) {
231
168
  const cw = getConditionWatcher();
232
169
  const registered = [];
@@ -1 +1 @@
1
- {"version":3,"file":"wake-plan.js","sourceRoot":"","sources":["../../../src-server/personas/wake-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wake-plan.js","sourceRoot":"","sources":["../../../src-server/personas/wake-plan.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,31 @@ import { loadConfig, SERVER_BASE_URL } from "./config.js";
18
18
  import { createLlmProvider } from "./llm/index.js";
19
19
  import { fetchCommonBundle, fetchPersonaBundle } from "./bundle.js";
20
20
  import { getAccessToken, getDeposit, kiwoomHostLabel } from "./broker/kiwoom/index.js";
21
+ import { getDb } from "./db/sqlite.js";
22
+ /**
23
+ * 페르소나 평가 가능한 최소 봉수 (현재 너울 = longMaBreakoutBonus 120 기준).
24
+ * 새 페르소나가 더 깊은 EMA 사용 시 상향 검토 (224 → 329, 448 → 538).
25
+ */
26
+ const MIN_CANDLES_FOR_DEEP_PERSONA = 120;
27
+ /** 「준비됨」 판정 — universe 의 최소 N개 종목이 deep 깊이 보유 */
28
+ const MIN_DEEP_STOCKS = 500;
29
+ /** 캔들 깊이 통계 — Phase 5c data-readiness check 의 핵심 helper */
30
+ function getCandleDepthStats() {
31
+ try {
32
+ const db = getDb();
33
+ const totalRow = db.prepare("SELECT COUNT(DISTINCT code) AS n FROM daily_candles").get();
34
+ const deepRow = db
35
+ .prepare(`SELECT COUNT(*) AS n FROM (
36
+ SELECT code FROM daily_candles GROUP BY code HAVING COUNT(*) >= ?
37
+ )`)
38
+ .get(MIN_CANDLES_FOR_DEEP_PERSONA);
39
+ return { totalStocks: totalRow.n, deepStocks: deepRow.n };
40
+ }
41
+ catch {
42
+ // DB 미생성 등 — 0/0 반환 (data-prepared = todo)
43
+ return { totalStocks: 0, deepStocks: 0 };
44
+ }
45
+ }
21
46
  export async function runReadinessCheck() {
22
47
  const cfg = loadConfig();
23
48
  const items = [];
@@ -375,6 +400,51 @@ export async function runReadinessCheck() {
375
400
  blocking: false,
376
401
  });
377
402
  }
403
+ /* ──────────────────────────────────────────────────
404
+ * 7. 데이터 준비 (data-prepared) — Phase 5c
405
+ *
406
+ * 페르소나가 평가 가능한 최소 봉수 (현재 너울 120봉 기준) 를 보유한 종목
407
+ * 수가 충분한지 (≥500). 미달 시 사용자에게 backfill 진행 안내.
408
+ * blocking — 데이터 부족하면 분석 시작해도 「후보 0」 만 나옴.
409
+ * 추후 깊은 EMA 페르소나 추가 시 MIN_CANDLES_FOR_DEEP_PERSONA 상향.
410
+ * ────────────────────────────────────────────────── */
411
+ const depthStats = getCandleDepthStats();
412
+ if (depthStats.deepStocks >= MIN_DEEP_STOCKS) {
413
+ items.push({
414
+ id: "data-prepared",
415
+ label: "시장 데이터 준비",
416
+ status: "ok",
417
+ detail: `${depthStats.deepStocks.toLocaleString()} 종목 ≥${MIN_CANDLES_FOR_DEEP_PERSONA}봉 (총 ${depthStats.totalStocks.toLocaleString()})`,
418
+ blocking: true,
419
+ });
420
+ }
421
+ else {
422
+ // Phase 5e-4 · prepare 진행 중이면 progress hint 추가
423
+ const { getPrepareState } = await import("./share/prepare-state.js");
424
+ const prep = getPrepareState();
425
+ const hint = prep.running
426
+ ? ` · prepare 진행 중 (page ${prep.candles.pages} · ${prep.candles.returned.toLocaleString()} row)`
427
+ : " · `mulsok-client prepare` 실행 또는 webui 첫 진입";
428
+ if (depthStats.totalStocks === 0) {
429
+ items.push({
430
+ id: "data-prepared",
431
+ label: "시장 데이터 준비",
432
+ status: "todo",
433
+ detail: `초기 데이터 미수집${hint}`,
434
+ blocking: true,
435
+ });
436
+ }
437
+ else {
438
+ const pct = Math.round((depthStats.deepStocks / depthStats.totalStocks) * 100);
439
+ items.push({
440
+ id: "data-prepared",
441
+ label: "시장 데이터 준비",
442
+ status: "fail",
443
+ detail: `${depthStats.deepStocks.toLocaleString()} / ${MIN_DEEP_STOCKS}+ 필요 (${depthStats.totalStocks.toLocaleString()} 종목 중 ${pct}% 깊이)${hint}`,
444
+ blocking: true,
445
+ });
446
+ }
447
+ }
378
448
  const blocking = items.filter((i) => i.blocking);
379
449
  const okCount = blocking.filter((i) => i.status === "ok").length;
380
450
  const report = {