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
|
|
Binary file
|
package/bin/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"aarch64-apple-darwin": "
|
|
3
|
-
"aarch64-unknown-linux-musl": "
|
|
4
|
-
"x86_64-apple-darwin": "
|
|
5
|
-
"x86_64-unknown-linux-musl": "
|
|
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)} — ${
|
|
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 =
|
|
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
|
*
|