genetics-mcp 2.9.0 → 2.9.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.
Binary file
package/bin/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "aarch64-apple-darwin": "3f5fdf3c6029d94eafdb4ecf34f502676b3262f15de05eb54ecf6483d2d0f829",
3
- "aarch64-unknown-linux-musl": "5588db11a4aad41a65609d4cf14f389d106fb8b74023aa745ae4765738243006",
4
- "x86_64-apple-darwin": "8c440a19d2aee09dc8e2c3fe0a1b513563a7ab023d97722b99e5bae8eeb2cc62",
5
- "x86_64-unknown-linux-musl": "f01bf90ab7014764487773b9ac91ad8532ac6a727eedd6ff50151c3e6eab127e"
2
+ "aarch64-apple-darwin": "0be4865075eacbd2c83cb2fad02b92458969a33eea636b2f68d7d704f6cf60b5",
3
+ "aarch64-unknown-linux-musl": "206709a078fa1814b49aa8e59012a28542496bc1d08b4e75c9ee716c00a09a11",
4
+ "x86_64-apple-darwin": "519dfad58dc6e7dc67a820bd386e4a6d54eb4e3c5c706f5178d147d0d0ed0cae",
5
+ "x86_64-unknown-linux-musl": "56b7c532ae56e814abfbe460d7761ddec3a0631f2eea0cc68ad29d6efe2fa2cd"
6
6
  }
Binary file
Binary file
package/genetics.mjs CHANGED
@@ -2252,6 +2252,23 @@ function cellClean(s) {
2252
2252
  * `gcell delta` 의 글 출력은 2026-08-23 에 고쳤는데, MCP 는 `--json` 을 **자기가 포맷**하고
2253
2253
  * 있어서 여기만 여전히 시각을 버리고 있었다. 같은 결함이 두 자리에 있었던 것이다.
2254
2254
  */
2255
+ /**
2256
+ * 사건 한 줄을 **누구**로 부를까. 서버의 `world_who()`(`lib/world_delta.php`)와 **같은 규칙**이다 —
2257
+ * 두 자로 말하면 같은 사실을 화면과 도구가 다르게 말한다.
2258
+ *
2259
+ * ⚠ **`unknown` 은 이름이 아니다.** 전에는 `client` 하나만 찍어 「unknown 세션이 썼다」로
2260
+ * 나갔고, 사람이 읽으면 「unknown 이라는 세포」로 보였다(사용자 지적 2026-08-24).
2261
+ * 세포는 세션을 알고 있었다 — 아는 것을 안 쓰고 모르는 것을 이름 자리에 놓고 있었다.
2262
+ */
2263
+ function worldWho(c) {
2264
+ const client = cellClean(c.client || '').trim();
2265
+ const sid = cellClean(c.session || c.session_uuid || '').trim();
2266
+ const short = sid ? sid.slice(0, 8) : '';
2267
+ if (client && client !== 'unknown') return short ? `${client}(${short}) 세션이` : `${client} 세션이`;
2268
+ if (short) return `${short} 세션이`;
2269
+ return '누군가';
2270
+ }
2271
+
2255
2272
  function worldFacts(max = 8) {
2256
2273
  const { bin } = cellCheck();
2257
2274
  if (!bin) return null; // 세포가 없다 — 「없다」와 구별한다
@@ -2266,7 +2283,7 @@ function worldFacts(max = 8) {
2266
2283
  const t = at > 0
2267
2284
  ? new Date(at * 1000).toTimeString().slice(0, 5)
2268
2285
  : '시각 미상';
2269
- return `${cellClean(c.path)} — ${cellClean(c.client)} 세션이 ${t}에 썼다`;
2286
+ return `${cellClean(c.path)} — ${worldWho(c)} ${t}에 썼다`;
2270
2287
  });
2271
2288
  if (ch.length > max) out.push(`그 밖 ${ch.length - max}건`);
2272
2289
  return out;
@@ -2405,10 +2422,33 @@ async function brainPull() {
2405
2422
  */
2406
2423
  function brainFresh(ev, first, now) {
2407
2424
  if (!first) return true;
2408
- const at = Date.parse(String(ev?.at || '')) || 0;
2425
+ const at = brainAtMs(ev);
2409
2426
  return at > 0 && now - at <= BRAIN_FRESH_MS;
2410
2427
  }
2411
2428
 
2429
+ /**
2430
+ * 서버가 준 `at` 을 밀리초로. **서버는 시간대 표식 없는 UTC 로 준다.**
2431
+ *
2432
+ * ⚠⚠ 맨몸 `Date.parse("2026-08-24 01:50:30")` 은 그 문자열을 **로컬 시각**으로 읽는다.
2433
+ * 서버는 `world_at()` 에서 `gmdate('Y-m-d H:i:s')` 로 쓰므로 실제로는 UTC 다
2434
+ * (서버 스스로도 그것을 안다 — `world_delta.php` 가 화면에 쓸 때 `…substr(at,11,5) . 'Z'`).
2435
+ * 그래서 **KST(+9) 기계에서는 방금 난 모순이 9시간 낡은 것**으로 보인다.
2436
+ * 첫 바퀴는 나이를 보고 버리므로 백신이 통째로 사라지고, **커서는 그대로 전진해**
2437
+ * 그 사건들은 이 세션에서 영영 안 온다. 조용한 손실이다.
2438
+ *
2439
+ * 2026-08-24 실측: 같은 하네스에 서버 꼴을 넣으면 백신 0건, `Z` 를 붙이면 1건.
2440
+ * 내 첫 PoC 가 이걸 놓친 이유는 픽스처가 `toISOString()` 이라 **실제로 깨지는 그 꼴을
2441
+ * 비켜 갔기** 때문이다 — 픽스처는 서버가 진짜 주는 글자여야 한다.
2442
+ *
2443
+ * ⚠ 시각을 못 읽으면 **0**. 모르는 것을 「방금」으로 치는 쪽이 더 위험하다.
2444
+ */
2445
+ const BRAIN_AT_NAIVE = /^(\d{4}-\d{2}-\d{2})[ T](\d{2}:\d{2}:\d{2})$/;
2446
+ function brainAtMs(ev) {
2447
+ const s = String(ev?.at || '').trim();
2448
+ const m = BRAIN_AT_NAIVE.exec(s);
2449
+ return (m ? Date.parse(`${m[1]}T${m[2]}Z`) : Date.parse(s)) || 0;
2450
+ }
2451
+
2412
2452
  /**
2413
2453
  * 큐에 쌓인 모순을 **한 번씩만** 말한다.
2414
2454
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genetics-mcp",
3
- "version": "2.9.0",
3
+ "version": "2.9.1",
4
4
  "description": "문서 포털 발행·세션 이식·사례 기억 MCP — 데이터를 주면 규격 문서가 나온다 (짝인 스킬 동봉)",
5
5
  "author": "주식회사 LIM (LIM Inc.)",
6
6
  "license": "SEE LICENSE IN LICENSE",