genetics-mcp 2.16.0 → 2.16.2
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": "cb4ce550b4ce5e37a8f575280536b5983042572d6e83854c0e67a5c9eee0a030",
|
|
3
|
+
"aarch64-unknown-linux-musl": "27ac0333d512f9cdff5901852b629c9c845e5998807c5be7474d3b5d152fb94a",
|
|
4
|
+
"x86_64-apple-darwin": "db3920a2b802ff637f6e6b7f857aec5db825fc90159adca78fa2f1bad7c7f284",
|
|
5
|
+
"x86_64-unknown-linux-musl": "31351ff121ee16e70825379b81398fb23d3614e27e7cc59cf7c0385ae98e1a1d"
|
|
6
6
|
}
|
|
Binary file
|
|
Binary file
|
package/genetics.mjs
CHANGED
|
@@ -2441,12 +2441,14 @@ const TOOLS = [
|
|
|
2441
2441
|
+ '언제 부르는가: 작업을 시작할 때(「내가 붙을 일이 이미 있나」 — 새로 벌이기 전에 먼저) · '
|
|
2442
2442
|
+ '사람이 「지금 뭐가 진행 중이지」라고 물을 때 · 세션 요지에 「어느 일에도 속해 있지 않다」가 왔을 때.\n'
|
|
2443
2443
|
+ '「계획」 = 사람이 착수 전에 세운 일(세션 0) — 이 목록에서 이름을 보고 그 방향의 작업이면 '
|
|
2444
|
-
+ '
|
|
2444
|
+
+ 'claim 으로 **착수를 선언**한다(즉시 잠정 효력 — 세션 요지·화면에 「선언(잠정)」이 선다. '
|
|
2445
|
+
+ '사실이 되는 것은 사람이 화면에서 확정할 때고, 판정기는 증거로 따로 검증한다).\n'
|
|
2445
2446
|
+ '요지 전문은 get_case(tenant, "work/<slug>.md") 로 읽는다. **0 이면 0 이라고 말한다.**',
|
|
2446
2447
|
inputSchema: {
|
|
2447
2448
|
type: 'object',
|
|
2448
2449
|
properties: {
|
|
2449
2450
|
tenant: { type: 'string', description: '대상 소속처 slug(이름도 받는다 — list_my_tenants 참조).' },
|
|
2451
|
+
claim: { type: 'string', description: '이 일(slug)에 붙겠다고 선언한다 — 잠정이며, 다른 일을 선언하면 앞 선언은 대체된다. 비우면 목록만 읽는다.' },
|
|
2450
2452
|
},
|
|
2451
2453
|
required: ['tenant'],
|
|
2452
2454
|
},
|
|
@@ -2909,9 +2911,25 @@ function tenantNotice() {
|
|
|
2909
2911
|
const now = Date.now();
|
|
2910
2912
|
if (now - tenantSaidAt < TENANT_NOTICE_MS) return '';
|
|
2911
2913
|
tenantSaidAt = now;
|
|
2914
|
+
// 관측 밖 자백(2026-08-31) — 비-git·비앵커 폴더는 훅이 자동으로 안 걸리는데 그 침묵의 값을
|
|
2915
|
+
// HNL 모노폴더에서 치렀다(소속처 전체 세션 0건이 사람이 물어봐서야 드러났다). 조용히 건너뛰는
|
|
2916
|
+
// 것이 가장 나쁘다 — 같은 알림에 한 문장으로 잇는다(앵커되면 다음 부팅에 저절로 걸린다).
|
|
2917
|
+
let tail = '';
|
|
2918
|
+
try {
|
|
2919
|
+
const cwd = process.cwd();
|
|
2920
|
+
if (!fs.existsSync(path.join(cwd, '.git'))) {
|
|
2921
|
+
let hooked = false;
|
|
2922
|
+
try { hooked = fs.readFileSync(path.join(cwd, '.claude/settings.json'), 'utf8').includes('gcell'); }
|
|
2923
|
+
catch { /* 파일이 없으면 안 걸린 것 */ }
|
|
2924
|
+
if (!hooked) {
|
|
2925
|
+
tail = ' 지금 이 폴더는 세포 관측 밖이기도 하다(비-git·비앵커 폴더는 훅이 자동으로 안 걸린다) — '
|
|
2926
|
+
+ '앵커되면 다음 부팅부터 훅·메일·트리거가 자동으로 돈다.';
|
|
2927
|
+
}
|
|
2928
|
+
}
|
|
2929
|
+
} catch { /* 알림은 최선일 뿐 — 실패해도 본문은 나간다 */ }
|
|
2912
2930
|
return 'genetics: 이 세션은 아직 어느 소속처에도 안 붙어 있다 — 이 폴더에 앞 세션이 없어 '
|
|
2913
2931
|
+ '자동 등록이 안 됐다. `push_session` 으로 한 번 정하면 그 뒤는 자동이고, '
|
|
2914
|
-
+ '그래야 메일·보유자·「이 세션이 속한 일」이 이 저장소에서 돈다.';
|
|
2932
|
+
+ '그래야 메일·보유자·「이 세션이 속한 일」이 이 저장소에서 돈다.' + tail;
|
|
2915
2933
|
}
|
|
2916
2934
|
|
|
2917
2935
|
function worldDelta() {
|
|
@@ -3746,15 +3764,25 @@ async function callTool(name, args = {}) {
|
|
|
3746
3764
|
return `이 저장소에서 최근에 바뀐 것:\n${facts.map((f) => ` · ${f}`).join('\n')}`;
|
|
3747
3765
|
}
|
|
3748
3766
|
case 'works': {
|
|
3767
|
+
if (args.claim) {
|
|
3768
|
+
// 착수 선언(088) — 세션 이름은 이 자리(로컬)가 안다. mail 도구의 그 관용구다.
|
|
3769
|
+
const mine = mySessionId();
|
|
3770
|
+
if (!mine) return '이 자리의 세션 이름을 못 찾아 선언할 수 없다 — 목록만 읽으려면 claim 없이 다시 부른다.';
|
|
3771
|
+
const r = await api('POST', '/api/work/claim', {
|
|
3772
|
+
tenant: args.tenant, work: String(args.claim), session: mine,
|
|
3773
|
+
});
|
|
3774
|
+
return `«${r.work?.name || r.work?.slug}» (${r.work?.slug}) — ${r.says}`;
|
|
3775
|
+
}
|
|
3749
3776
|
const r = await api('GET', '/api/work/list?tenant=' + encodeURIComponent(args.tenant));
|
|
3750
3777
|
const rows = r.works || [];
|
|
3751
3778
|
const lines = [`${r.tenant} — 열린 일 ${r.open ?? rows.length}개` + ((r.closed ?? 0) > 0 ? ` (지난 일 ${r.closed}개)` : '')];
|
|
3752
3779
|
for (const w of rows) {
|
|
3753
3780
|
lines.push(` · «${w.name || w.slug}» (${w.slug}) — ${w.word} · 세션 ${w.sessions}`
|
|
3781
|
+
+ (w.stale ? ` · 낡음 ${w.stale}일째(AI 관측 — 활동이 멎었다: 사람이 닫거나 다시 살릴 일)` : '')
|
|
3754
3782
|
+ (w.doc ? ` · 요지: get_case(tenant, "${w.doc}")` : ' · 요지 문서 아직 없음'));
|
|
3755
3783
|
}
|
|
3756
3784
|
if (!rows.length) lines.push('열린 일이 없다 — 0건은 0건이다. 착수 전에 세우려면 사람이 군체 화면의 「일 열기」로 연다.');
|
|
3757
|
-
else lines.push('
|
|
3785
|
+
else lines.push('붙을 일이 보이면 works(tenant, claim: "<slug>") 로 선언한다 — 확정은 사람이 화면에서 한다.');
|
|
3758
3786
|
return lines.join('\n');
|
|
3759
3787
|
}
|
|
3760
3788
|
case 'list_breaks': {
|
|
@@ -3788,6 +3816,12 @@ async function callTool(name, args = {}) {
|
|
|
3788
3816
|
if (!args.tags || !args.tags.length) {
|
|
3789
3817
|
lines.push('갈래(tags)가 없어 이 결정은 「일」 후보 계산에 안 들어간다.');
|
|
3790
3818
|
}
|
|
3819
|
+
// 전체 맥락 정리 줄이 섰는지도 말한다 — 결정 저장이 종합의 박자가 됐다(2026-08-31). 옛 서버(칸 없음)는 침묵.
|
|
3820
|
+
if (r.insights_queued === true) {
|
|
3821
|
+
lines.push('이 결정으로 전체 맥락 정리가 다시 돕니다(몇 분 뒤 지식 화면에).');
|
|
3822
|
+
} else if (r.insights_queued === false) {
|
|
3823
|
+
lines.push('전체 맥락 정리 줄은 안 섰다 — 재료가 아직 문턱 아래(배경 문서 3장 또는 결정·사례 5장)거나 이미 줄이 서 있다.');
|
|
3824
|
+
}
|
|
3791
3825
|
return lines.join('\n');
|
|
3792
3826
|
}
|
|
3793
3827
|
case 'remember_case': {
|