genetics-mcp 2.15.0 → 2.16.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": "5a7f8fe339f57613e1a5c3aac3ea9419eef9b594dec90242f8ba10ecfd52f8dc",
3
- "aarch64-unknown-linux-musl": "09f0484776de01c1d4152a02081d68dcf5db5dd9edd749b4e19304539208e714",
4
- "x86_64-apple-darwin": "67fc347c2c744d50c034a8bb95a6693707bb3b44687c5f4ddb3b9ded7b3b6c1a",
5
- "x86_64-unknown-linux-musl": "083bd1678726e3925c7658cfc51372053a295cc8db139eff5433ba88e1aae3b6"
2
+ "aarch64-apple-darwin": "09d3391769ea588eb4466e5573af12e78502f18e84a63ea17b011363ba362dba",
3
+ "aarch64-unknown-linux-musl": "24c51bdde8cdcf0aca39eb7b12b6cdd097efe8e981201a26fa991714c8920934",
4
+ "x86_64-apple-darwin": "e4fcb9442e74ac32f0b53d684e67d0c0a2ca705d9784615b519f9cd31e779fcc",
5
+ "x86_64-unknown-linux-musl": "606f5a7fcad01c30d809cfe6f797c2e7e234fdc56d66a6add604a74f55a13a89"
6
6
  }
Binary file
Binary file
package/genetics.mjs CHANGED
@@ -2434,6 +2434,25 @@ const TOOLS = [
2434
2434
  required: ['tenant'],
2435
2435
  },
2436
2436
  },
2437
+ {
2438
+ name: 'works',
2439
+ description:
2440
+ '**이 소속처에 지금 어떤 일이 있나** — 열린 일의 목록·상태(계획/진행 중/멈춤)·세션 수.\n'
2441
+ + '언제 부르는가: 작업을 시작할 때(「내가 붙을 일이 이미 있나」 — 새로 벌이기 전에 먼저) · '
2442
+ + '사람이 「지금 뭐가 진행 중이지」라고 물을 때 · 세션 요지에 「어느 일에도 속해 있지 않다」가 왔을 때.\n'
2443
+ + '「계획」 = 사람이 착수 전에 세운 일(세션 0) — 이 목록에서 이름을 보고 그 방향의 작업이면 '
2444
+ + 'claim 으로 **착수를 선언**한다(즉시 잠정 효력 — 세션 요지·화면에 「선언(잠정)」이 선다. '
2445
+ + '사실이 되는 것은 사람이 화면에서 확정할 때고, 판정기는 증거로 따로 검증한다).\n'
2446
+ + '요지 전문은 get_case(tenant, "work/<slug>.md") 로 읽는다. **0 이면 0 이라고 말한다.**',
2447
+ inputSchema: {
2448
+ type: 'object',
2449
+ properties: {
2450
+ tenant: { type: 'string', description: '대상 소속처 slug(이름도 받는다 — list_my_tenants 참조).' },
2451
+ claim: { type: 'string', description: '이 일(slug)에 붙겠다고 선언한다 — 잠정이며, 다른 일을 선언하면 앞 선언은 대체된다. 비우면 목록만 읽는다.' },
2452
+ },
2453
+ required: ['tenant'],
2454
+ },
2455
+ },
2437
2456
  {
2438
2457
  name: 'search_cases',
2439
2458
  description:
@@ -3728,6 +3747,28 @@ async function callTool(name, args = {}) {
3728
3747
  if (!facts.length) return '이 저장소에서 최근에 남이 바꾼 것은 없다.';
3729
3748
  return `이 저장소에서 최근에 바뀐 것:\n${facts.map((f) => ` · ${f}`).join('\n')}`;
3730
3749
  }
3750
+ case 'works': {
3751
+ if (args.claim) {
3752
+ // 착수 선언(088) — 세션 이름은 이 자리(로컬)가 안다. mail 도구의 그 관용구다.
3753
+ const mine = mySessionId();
3754
+ if (!mine) return '이 자리의 세션 이름을 못 찾아 선언할 수 없다 — 목록만 읽으려면 claim 없이 다시 부른다.';
3755
+ const r = await api('POST', '/api/work/claim', {
3756
+ tenant: args.tenant, work: String(args.claim), session: mine,
3757
+ });
3758
+ return `«${r.work?.name || r.work?.slug}» (${r.work?.slug}) — ${r.says}`;
3759
+ }
3760
+ const r = await api('GET', '/api/work/list?tenant=' + encodeURIComponent(args.tenant));
3761
+ const rows = r.works || [];
3762
+ const lines = [`${r.tenant} — 열린 일 ${r.open ?? rows.length}개` + ((r.closed ?? 0) > 0 ? ` (지난 일 ${r.closed}개)` : '')];
3763
+ for (const w of rows) {
3764
+ lines.push(` · «${w.name || w.slug}» (${w.slug}) — ${w.word} · 세션 ${w.sessions}`
3765
+ + (w.stale ? ` · 낡음 ${w.stale}일째(AI 관측 — 활동이 멎었다: 사람이 닫거나 다시 살릴 일)` : '')
3766
+ + (w.doc ? ` · 요지: get_case(tenant, "${w.doc}")` : ' · 요지 문서 아직 없음'));
3767
+ }
3768
+ if (!rows.length) lines.push('열린 일이 없다 — 0건은 0건이다. 착수 전에 세우려면 사람이 군체 화면의 「일 열기」로 연다.');
3769
+ else lines.push('붙을 일이 보이면 works(tenant, claim: "<slug>") 로 선언한다 — 확정은 사람이 화면에서 한다.');
3770
+ return lines.join('\n');
3771
+ }
3731
3772
  case 'list_breaks': {
3732
3773
  const r = await api('GET', '/api/breaks?tenant=' + encodeURIComponent(args.tenant));
3733
3774
  const c = r.counts || {};
@@ -3759,6 +3800,12 @@ async function callTool(name, args = {}) {
3759
3800
  if (!args.tags || !args.tags.length) {
3760
3801
  lines.push('갈래(tags)가 없어 이 결정은 「일」 후보 계산에 안 들어간다.');
3761
3802
  }
3803
+ // 전체 맥락 정리 줄이 섰는지도 말한다 — 결정 저장이 종합의 박자가 됐다(2026-08-31). 옛 서버(칸 없음)는 침묵.
3804
+ if (r.insights_queued === true) {
3805
+ lines.push('이 결정으로 전체 맥락 정리가 다시 돕니다(몇 분 뒤 지식 화면에).');
3806
+ } else if (r.insights_queued === false) {
3807
+ lines.push('전체 맥락 정리 줄은 안 섰다 — 재료가 아직 문턱 아래(배경 문서 3장 또는 결정·사례 5장)거나 이미 줄이 서 있다.');
3808
+ }
3762
3809
  return lines.join('\n');
3763
3810
  }
3764
3811
  case 'remember_case': {
@@ -3833,7 +3880,7 @@ async function callTool(name, args = {}) {
3833
3880
  ...myCitation(), // 세션 uuid 는 우리가 채운다 — 없으면 서버가 안 적는다
3834
3881
  });
3835
3882
  return `${r.says || '판정을 적었다.'}\n`
3836
- + '(세션이 중계한 판정이다 — 사람이 지식 화면에서 누른 판정만 도구 직전 알림·검색에 반영된다.)';
3883
+ + '(세션이 중계한 판정이다 — 사람이 지식 화면에서 누른 판정만 도구 직전 알림(트리거 제외)에 반영된다.)';
3837
3884
  }
3838
3885
  case 'review_verdict': {
3839
3886
  const r = await api('POST', '/api/wiki/review_verdict?tenant=' + encodeURIComponent(args.tenant), {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "genetics-mcp",
3
- "version": "2.15.0",
3
+ "version": "2.16.1",
4
4
  "description": "문서 포털 발행·세션 이식·사례 기억 MCP — 데이터를 주면 규격 문서가 나온다 (짝인 스킬 동봉)",
5
5
  "author": "주식회사 LIM (LIM Inc.)",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "scripts",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "dependencies": {
8
+ "playwright-core": "^1.62.1"
9
+ }
10
+ },
11
+ "node_modules/playwright-core": {
12
+ "version": "1.62.1",
13
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz",
14
+ "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==",
15
+ "license": "Apache-2.0",
16
+ "bin": {
17
+ "playwright-core": "cli.js"
18
+ },
19
+ "engines": {
20
+ "node": ">=20"
21
+ }
22
+ }
23
+ }
24
+ }