genetics-mcp 2.11.0 → 2.12.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.
|
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": "120fb6e8d92e357896bd9aae54e331d6357ba0e58180e07627790b0f7f80205c",
|
|
3
|
+
"aarch64-unknown-linux-musl": "afb8f44bab3d89afc13d48e73a289a3350220eb1f972fc6d2dc3b056a0f08f03",
|
|
4
|
+
"x86_64-apple-darwin": "bd98d24f456e3f86b2dfa3fe160cee5e9f6cf5a4058935a96b3fcf9ca5f6e599",
|
|
5
|
+
"x86_64-unknown-linux-musl": "575d69b978238775553d42341bac96ca2769ce61d67d740bc6fc6b855df7ac8f"
|
|
6
6
|
}
|
|
Binary file
|
|
Binary file
|
package/genetics.mjs
CHANGED
|
@@ -4043,7 +4043,7 @@ const IS_MAIN = (() => {
|
|
|
4043
4043
|
* 자리는 판이 바뀌어도 안 움직이는 `~/.config/genetics/bin/gcell` 이다. 훅이 그 경로를
|
|
4044
4044
|
* 가리키므로, 갈아 끼워도 훅을 다시 걸 필요가 없다.
|
|
4045
4045
|
*/
|
|
4046
|
-
function cellInstall({ hooks = true } = {}) {
|
|
4046
|
+
function cellInstall({ hooks = true, ifRepo = false } = {}) {
|
|
4047
4047
|
const out = [];
|
|
4048
4048
|
const t = cellTarget();
|
|
4049
4049
|
if (!t) {
|
|
@@ -4057,7 +4057,7 @@ function cellInstall({ hooks = true } = {}) {
|
|
|
4057
4057
|
return { ok: false, out: ['이 판에 세포가 안 실려 있다(패키지가 반쪽이다).'] };
|
|
4058
4058
|
}
|
|
4059
4059
|
if (sha256File(CELL_PATH) === want) {
|
|
4060
|
-
out.push(`세포는 이미 이 판이다(${VERSION}).`);
|
|
4060
|
+
if (!ifRepo) out.push(`세포는 이미 이 판이다(${VERSION}).`); // 자동 걸음은 조용하다 — 매 부팅 말하면 그것이 소음이다
|
|
4061
4061
|
} else {
|
|
4062
4062
|
fs.mkdirSync(CELL_DIR, { recursive: true });
|
|
4063
4063
|
fs.copyFileSync(src, CELL_PATH);
|
|
@@ -4068,9 +4068,18 @@ function cellInstall({ hooks = true } = {}) {
|
|
|
4068
4068
|
out.push(`세포를 ${CELL_PATH} 에 깔았다(${VERSION} · ${want.slice(0, 12)}…).`);
|
|
4069
4069
|
}
|
|
4070
4070
|
if (hooks) {
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4071
|
+
// `ifRepo` 는 **자동으로 부를 때만** 준다 — 사람이 `install_cell` 을 부른 자리는 자기가
|
|
4072
|
+
// 정한 곳이지만, 부팅마다 도는 걸음은 git 저장소가 아닌 폴더에 설정을 만들면 안 된다.
|
|
4073
|
+
const a = ['install-hooks', '--apply'];
|
|
4074
|
+
if (ifRepo) a.push('--if-repo');
|
|
4075
|
+
const r = spawnSync(CELL_PATH, a, { encoding: 'utf8', timeout: 10_000 });
|
|
4076
|
+
// 세포의 `HOOKS_UNCHANGED` 와 **글자 그대로** 맞춘다 — smoke 가 두 파일을 대조한다.
|
|
4077
|
+
const so = r.stdout || '';
|
|
4078
|
+
const quiet = r.status === 0 && (so.includes('바뀐 것 없다.') || so.includes('git 저장소가 아니다'));
|
|
4079
|
+
if (!quiet) {
|
|
4080
|
+
out.push(r.status === 0 ? '훅을 걸었다(이 저장소의 .claude/settings.json).'
|
|
4081
|
+
: `훅을 못 걸었다: ${cellClean(r.stderr || r.stdout || '이유 없음')}`);
|
|
4082
|
+
}
|
|
4074
4083
|
}
|
|
4075
4084
|
return { ok: true, out };
|
|
4076
4085
|
}
|
|
@@ -4106,15 +4115,36 @@ function cellUninstall() {
|
|
|
4106
4115
|
}
|
|
4107
4116
|
|
|
4108
4117
|
/** 뜰 때 세포를 이 판에 맞춘다. 실패해도 서버는 산다 — 대신 **말한다.** */
|
|
4118
|
+
/*
|
|
4119
|
+
* ★★ **훅은 바이너리 판과 무관하게 매 부팅 맞춘다**(2026-08-26, 사용자 결정).
|
|
4120
|
+
*
|
|
4121
|
+
* 전에는 `hooks: false` 였고, 판이 같으면 아예 일찍 되돌아갔다. 그 둘이 겹쳐 두 가지가 샜다 —
|
|
4122
|
+
* ① **새 이벤트가 어디서도 저절로 안 걸린다.** SessionStart 를 실어 보내도 기존 설정에는
|
|
4123
|
+
* 그 칸이 없어, 사람이 저장소마다 `install_cell` 을 불러야 했다.
|
|
4124
|
+
* ② **설정이 옛 경로를 가리키면 판올림이 무의미하다.** 세포만 갈아 끼우고 설정을 두면
|
|
4125
|
+
* 훅은 계속 옛 바이너리를 부른다(실측: report-portal 이 13시간 전 것으로 돌고 있었다).
|
|
4126
|
+
*
|
|
4127
|
+
* 매 부팅 쓰지 않는다 — 세포가 **같으면 안 쓴다**(`HOOKS_UNCHANGED`). 안 그러면 mtime 만
|
|
4128
|
+
* 흔들려 「누군가 settings.json 을 썼다」가 매번 뜬다.
|
|
4129
|
+
* 그리고 자동 걸음은 `--if-repo` 를 태운다 — git 저장소가 아닌 폴더에 설정을 만들지 않는다.
|
|
4130
|
+
*/
|
|
4109
4131
|
function ensureCellOnBoot() {
|
|
4110
4132
|
if (process.env.GENETICS_NO_CELL) return; // 자동 설치를 원치 않는 사람의 탈출구
|
|
4111
|
-
|
|
4133
|
+
const hooks = !process.env.GENETICS_NO_HOOKS; // 훅만 따로 끄는 탈출구
|
|
4112
4134
|
try {
|
|
4135
|
+
// 사람이 손으로 지정한 자리(개발 기계) — **바이너리는 안 건드리되 훅은 맞춘다.**
|
|
4136
|
+
// 그 자리를 쓰는 이유는 「내가 굽는 세포를 쓰겠다」이지 「설정을 낡게 두겠다」가 아니다.
|
|
4137
|
+
if (cfg.GENETICS_CELL_BIN) {
|
|
4138
|
+
if (hooks) cellInstall({ hooks: true, ifRepo: true }).out
|
|
4139
|
+
.forEach((l) => process.stderr.write(`genetics: ${l}\n`));
|
|
4140
|
+
return;
|
|
4141
|
+
}
|
|
4113
4142
|
const t = cellTarget();
|
|
4114
4143
|
if (!t) return; // 그 플랫폼은 도구 응답이 말한다(cellNotice)
|
|
4115
|
-
|
|
4116
|
-
|
|
4117
|
-
|
|
4144
|
+
const { ok, out } = cellInstall({ hooks, ifRepo: true });
|
|
4145
|
+
if (!ok || out.length) {
|
|
4146
|
+
process.stderr.write(`genetics: ${ok ? '' : '세포 설치 실패 — '}${out.join(' ')}\n`);
|
|
4147
|
+
}
|
|
4118
4148
|
} catch (e) {
|
|
4119
4149
|
process.stderr.write(`genetics: 세포를 못 맞췄다 — ${e.message} (서버는 계속 돈다)\n`);
|
|
4120
4150
|
}
|