leerness 1.9.215 β†’ 1.9.216

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.216 β€” 2026-05-22
4
+
5
+ **πŸ”Œ MCP 5μ’… μΆ”κ°€ β€” 1.9.207~213 μ™ΈλΆ€ AI λ…ΈμΆœ (54 β†’ 59 도ꡬ).**
6
+
7
+ > 백둜그 μ†Œμ§„ ν›„ μ™ΈλΆ€ AI 톡합 κ°€μΉ˜ κ°•ν™” β€” Claude/Codex/Gemini 등이 μ‹ κ·œ 7 λΌμš΄λ“œ κΈ°λŠ₯을 직접 호좜 κ°€λŠ₯
8
+
9
+ ### 1. MCP μ‹ κ·œ 5μ’… (1.9.216 라벨)
10
+ | 도ꡬ | 좜처 | 인자 |
11
+ |---|---|---|
12
+ | `leerness_requests_audit` | 1.9.207 | `{ path? }` β†’ missing/tracked/stale 회수 |
13
+ | `leerness_constraints_check` | 1.9.208 | `{ request, path? }` β†’ ν”Œλž«νΌ alias λ§€μΉ­ |
14
+ | `leerness_pre_wake_audit` | 1.9.209 | `{ path? }` β†’ 6μ˜μ—­ audit |
15
+ | `leerness_intent_classify` | 1.9.213 | `{ request, path? }` β†’ intent + 도메인 + dry-run ν™•μž₯ |
16
+ | `leerness_idempotency_audit` | 1.9.212 | `{ path? }` β†’ 4μ˜μ—­ λ©±λ“±μ„± 검사 |
17
+
18
+ ### 2. 5μΆ• 맀트릭슀 BμΆ• (λ©€ν‹° Sub-Agent) κ°€μΉ˜ κ°•ν™”
19
+ - μ™ΈλΆ€ AI κ°€ leerness 의 7 λΌμš΄λ“œ μ‹ κ·œ κΈ°λŠ₯을 MCP 둜 직접 호좜
20
+ - Claude Desktop / Cursor / Codex CLI λ“±μ—μ„œ leerness MCP server 등둝 β†’ μ¦‰μ‹œ μ‚¬μš© κ°€λŠ₯
21
+ - "μ‚¬μš©μžκ°€ ν–ˆλ˜ μš”μ²­ 쀑 λˆ„λ½λœ 게 μžˆλ‚˜?" "이 κΈ°λŠ₯ κ΅¬ν˜„ μ „ μ–΄λ–€ API κ·œμ •?" "이 μš”μ²­μ€ μ •ν™•νžˆ κ·Έκ²ƒλ§Œ / 포괄적?" 등을 μ™ΈλΆ€ AIκ°€ 회수
22
+
23
+ ### 3. λˆ„μ  νšŒκ·€ (1.9.207~215) β€” λͺ¨λ‘ μœ μ§€
24
+
25
+ ### 4. stress-v161 β€” 19/19 PASS
26
+ - 1.9.216 (8): VERSION + tools/list 59개 + 5μ’… 등둝 + 4μ’… μ‹€ 호좜 검증
27
+ - leerness_intent_classify("λ§΅+캐릭터+κ²Œμž„ κΈ°λŠ₯") β†’ broad/game/8 candidates βœ“
28
+ - leerness_constraints_check("Stripe API") β†’ stripe matched βœ“
29
+ - leerness_pre_wake_audit β†’ audited 0 βœ“
30
+ - leerness_idempotency_audit β†’ clean βœ“
31
+ - leerness_requests_audit β†’ total=0 βœ“
32
+ - μ„±λŠ₯ (2): cold_start 544ms / MCP 59도ꡬ 541ms
33
+ - λˆ„μ  νšŒκ·€ (9): 1.9.207~215
34
+
35
+ ### 5. μžλ™ release (78 λΌμš΄λ“œ main-push streak Β· 39 λΌμš΄λ“œ npm publish streak)
36
+
37
+ πŸŽ‰ **MCP 58 도ꡬ λ§ˆμΌμŠ€ν†€** (이전 53 β†’ 59, +6 in 1.9.158/159/168/216)
38
+
39
+ ---
40
+
3
41
  ## 1.9.215 β€” 2026-05-22
4
42
 
5
43
  **🎯 handoff ν—€λ“œλΌμΈμ— constraints/intent μžλ™ 톡합 + AGENTS.md 7 λΌμš΄λ“œ λˆ„μ .**
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **AI μ½”λ”© μ—μ΄μ „νŠΈμ˜ κ±°μ§“ μ™„λ£ŒΒ·μ€‘λ³΅Β·λ§κ°Β·μΆ©λŒμ„ λ§‰μ•„μ£ΌλŠ” κ²€μˆ˜Β·κΈ°μ–΅Β·ν˜‘μ—… CLI ν•˜λ„€μŠ€.**
4
4
 
5
- [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.215-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v160-17%2F17-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-145-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-77_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![handoff-auto](https://img.shields.io/badge/handoff_ν—€λ“œλΌμΈ-15μš”μ†Œ-success)]() [![perf](https://img.shields.io/badge/cold_start-677ms-success)]() [![install](https://img.shields.io/badge/npm_i_leerness-μ¦‰μ‹œ_μ‚¬μš©_κ°€λŠ₯-success)]() [![sandbox](https://img.shields.io/badge/runCommandSafe-cwd_jail%2Benv_scrub-success)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
5
+ [![npm](https://img.shields.io/badge/npm-leerness-blue)](https://www.npmjs.com/package/leerness) [![version](https://img.shields.io/badge/version-1.9.216-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v161-19%2F19-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-59-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-146-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-78_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/λͺ©μ _맀트릭슀-98%2F100_(5μΆ•)-brightgreen)]() [![mcp-7r](https://img.shields.io/badge/MCP_7λΌμš΄λ“œ-5μ’…_μΆ”κ°€-success)]() [![perf](https://img.shields.io/badge/cold_start-544ms-success)]() [![install](https://img.shields.io/badge/npm_i_leerness-μ¦‰μ‹œ_μ‚¬μš©_κ°€λŠ₯-success)]() [![sandbox](https://img.shields.io/badge/runCommandSafe-cwd_jail%2Benv_scrub-success)]() [![license](https://img.shields.io/badge/license-MIT-lightgrey)]()
6
6
 
7
7
  ```
8
8
  ╔══════════════════════════════════════════════════════════════╗
@@ -12,9 +12,9 @@
12
12
  β•‘ β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β• β•šβ•β•β•β•β–ˆβ–ˆβ•‘ β•‘
13
13
  β•‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘ β•‘
14
14
  β•‘ β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•šβ•β• β•šβ•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β• β•‘
15
- β•‘ v1.9.215 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.216 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ 🎯 handoff ν—€λ“œλΌμΈ constraints/intent μžλ™ 톡합 (15μš”μ†Œ) β•‘
17
+ β•‘ πŸ”Œ MCP 59 도ꡬ (1.9.207~213 μ™ΈλΆ€ AI λ…ΈμΆœ +5μ’…) β•‘
18
18
  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
19
19
  ```
20
20
 
package/bin/harness.js CHANGED
@@ -7,7 +7,7 @@ const cp = require('child_process');
7
7
  const os = require('os'); // 1.9.178: _publishToNpm μ—μ„œ os.tmpdir() μ‚¬μš© (μ „μ—­ import)
8
8
  const readline = require('readline');
9
9
 
10
- const VERSION = '1.9.215';
10
+ const VERSION = '1.9.216';
11
11
 
12
12
  // 1.9.184: DEP0190 (child_process shell: true) deprecation warning μ–΅μ œ (μ‚¬μš©μž λͺ…μ‹œ).
13
13
  // leerness λŠ” cross-platform PATH resolution 을 μœ„ν•΄ shell: true λ₯Ό μ˜λ„μ μœΌλ‘œ μ‚¬μš© (claude.cmd / ollama.cmd λ“± Windows .cmd 처리).
@@ -13284,7 +13284,12 @@ function mcpServeCmd(root) {
13284
13284
  { name: 'leerness_web', description: '1.9.168 β€” Web Bridge (1.9.165 playwright opt-in). sub: check (μ„€μΉ˜ + permissions.browser 확인) | screenshot (URL β†’ PNG) | extract (URL + CSS selector β†’ DOM ν…μŠ€νŠΈ). μ™ΈλΆ€ AIκ°€ leerness 의 μ›Ή μžλ™ν™” λŠ₯λ ₯을 직접 호좜. playwright λ―Έμ„€μΉ˜ μ‹œ 친절 μ•ˆλ‚΄ (graceful). 인자: { sub (required), url?, out?, selector?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'screenshot', 'extract'] }, url: { type: 'string' }, out: { type: 'string' }, selector: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
13285
13285
  { name: 'leerness_pc', description: '1.9.168 β€” PC Bridge (1.9.166 robotjs/nut-tree opt-in). sub: check (μ„€μΉ˜ + permissions.mouse/keyboard) | click (x,y) | type (text) | screenshot (out). ⚠ full permissions ꢌμž₯ (mouse/keyboard μ ‘κ·Ό). μ™ΈλΆ€ AIκ°€ λ°μŠ€ν¬νƒ‘ μžλ™ν™” λŠ₯λ ₯을 직접 호좜. 인자: { sub (required), x?, y?, text?, out?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'click', 'type', 'screenshot'] }, x: { type: 'number' }, y: { type: 'number' }, text: { type: 'string' }, out: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
13286
13286
  { name: 'leerness_lsp', description: '1.9.168 β€” LSP Bridge (1.9.167 typescript opt-in + regex fallback). sub: check (μ„€μΉ˜ μ—¬λΆ€) | symbols (file β†’ function/class/interface/type/enum λͺ©λ‘) | references (name + in 디렉토리 β†’ 호좜 μœ„μΉ˜). μ™ΈλΆ€ AIκ°€ μ½”λ“œ μΈν…”λ¦¬μ „μŠ€λ₯Ό 직접 호좜 (μ˜μ‘΄μ„± 0 fallback λ™μž‘). πŸŽ‰ MCP 53 도ꡬ λ§ˆμΌμŠ€ν†€. 인자: { sub (required), file?, name?, in?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'symbols', 'references'] }, file: { type: 'string' }, name: { type: 'string' }, in: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
13287
- { name: 'leerness_review_request', description: '1.9.176 β€” μ‚¬μš©μž μš”μ²­ 사전 κ²€ν†  (μ‚¬μš©μž λͺ…μ‹œ μš”μ²­). AI μ—μ΄μ „νŠΈκ°€ μ‚¬μš©μž μš”κ΅¬λ₯Ό **무쑰건 κ΅¬ν˜„ μ „**에 호좜. 뢄석: 1) estimatedType (route μΆ”μ •), 2) conflicts (lesson μ‹€νŒ¨/진행쀑 task), 3) reuseCandidates (skill/reuse-map λ§€μΉ­), 4) lessonsRecall (κ³Όκ±° κ²°μ •), 5) planConflicts (진행쀑 milestone), 6) featureConflicts (feature graph μ˜μ—­ κ²ΉμΉ¨), 7) recommendedSteps (μž‘μ—… μœ ν˜•λ³„ 3-5 단계), 8) efficiencyHints, 9) proceed (true/false). μ‚¬μš©μž κ²°μ • 도움. 인자: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } }
13287
+ { name: 'leerness_review_request', description: '1.9.176 β€” μ‚¬μš©μž μš”μ²­ 사전 κ²€ν†  (μ‚¬μš©μž λͺ…μ‹œ μš”μ²­). AI μ—μ΄μ „νŠΈκ°€ μ‚¬μš©μž μš”κ΅¬λ₯Ό **무쑰건 κ΅¬ν˜„ μ „**에 호좜. 뢄석: 1) estimatedType (route μΆ”μ •), 2) conflicts (lesson μ‹€νŒ¨/진행쀑 task), 3) reuseCandidates (skill/reuse-map λ§€μΉ­), 4) lessonsRecall (κ³Όκ±° κ²°μ •), 5) planConflicts (진행쀑 milestone), 6) featureConflicts (feature graph μ˜μ—­ κ²ΉμΉ¨), 7) recommendedSteps (μž‘μ—… μœ ν˜•λ³„ 3-5 단계), 8) efficiencyHints, 9) proceed (true/false). μ‚¬μš©μž κ²°μ • 도움. 인자: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
13288
+ { name: 'leerness_requests_audit', description: '1.9.216 (1.9.207 μ‚¬μš©μž λͺ…μ‹œ) β€” μ‚¬μš©μž λͺ…μ‹œ μš”μ²­ λˆ„λ½ 확인 절차. .harness/user-requests.json 의 open/in-progress μš”μ²­μ„ task-log/plan/decisions 와 λ§€μΉ­ β†’ missing/tracked/stale λΆ„λ₯˜. μ™ΈλΆ€ AIκ°€ "μ‚¬μš©μžκ°€ ν–ˆλ˜ μš”μ²­ 쀑 λˆ„λ½λœ 게 μžˆλ‚˜?"λ₯Ό 직접 회수. 응닡: { total, open, missing[], tracked[], stale[], completed, dropped }. 인자: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
13289
+ { name: 'leerness_constraints_check', description: '1.9.216 (1.9.208 μ‚¬μš©μž λͺ…μ‹œ) β€” ν”Œλž«νΌ/API μ œμ•½ 사전 체크. μ‚¬μš©μž μš”μ²­ ν…μŠ€νŠΈμ—μ„œ ν”Œλž«νΌ alias λ§€μΉ­ (stripe/openai/anthropic/github/discord/twitter 6μ’… + μ‚¬μš©μž μ •μ˜) β†’ 각 ν”Œλž«νΌμ˜ rate-limit / idempotency / auth / cost μ œμ•½ λ…ΈμΆœ. μ™ΈλΆ€ AIκ°€ "이 κΈ°λŠ₯ κ΅¬ν˜„ μ „ μ–΄λ–€ κ·œμ •μ„ 봐야 ν•˜λ‚˜?"λ₯Ό 직접 회수. 인자: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
13290
+ { name: 'leerness_pre_wake_audit', description: '1.9.216 (1.9.209 μ‚¬μš©μž λͺ…μ‹œ) β€” sleep μ „ sub-agent audit. 6 μ˜μ—­ 점검: missing-user-requests / stale-in-progress / drift-handoff-stale / wakeup-missed / next-action-pending / auto-resume-plan. μ™ΈλΆ€ AIκ°€ "κΉ¨μ–΄λ‚˜κΈ° μ „ 점검할 λΆ€λΆ„"을 회수. 응닡: { auditedAt, findings: {critical, warning, info}, summary }. 인자: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
13291
+ { name: 'leerness_intent_classify', description: '1.9.216 (1.9.213 μ‚¬μš©μž λͺ…μ‹œ) β€” μ‚¬μš©μž μ˜λ„ νŒŒμ•… + scope expansion 게이트. 응닡: { intent: precise|broad|default, signals, domain, explicitMentions, expansionCandidates, mode: dry-run }. 3원칙 μ•ˆμ „: (1) Always-Off Opt-In, (2) Dry-run κΈ°λ³Έ (μ‹€ν–‰ X), (3) λͺ…μ‹œ vs μΆ”λ‘  뢄리 라벨링. 5 도메인 (game/web/api/cli/data). μ™ΈλΆ€ AIκ°€ "이 μš”μ²­μ€ μ •ν™•νžˆ κ·Έκ²ƒλ§Œ / 포괄적 / 기본인가?"λ₯Ό 회수. 인자: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
13292
+ { name: 'leerness_idempotency_audit', description: '1.9.216 (1.9.212 μ‚¬μš©μž λͺ…μ‹œ) β€” λ©±λ“±μ„± μœ„λ°˜ 탐지. 4μ˜μ—­ 점검: rule-duplicate (medium) / task-duplicate-request (medium) / user-request-duplicate (low) / wakeup-duplicate (high). 응닡: { violations[], verified[], summary: {totalViolations, high/medium/low, overall} }. μ™ΈλΆ€ AIκ°€ "μ›Œν¬μŠ€νŽ˜μ΄μŠ€μ— 쀑볡/좩돌이 μžˆλ‚˜?"λ₯Ό 회수. πŸŽ‰ MCP 58 도ꡬ λ§ˆμΌμŠ€ν†€ (50β†’58). 인자: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }
13288
13293
  ];
13289
13294
 
13290
13295
  function send(obj) {
@@ -13416,6 +13421,26 @@ function mcpServeCmd(root) {
13416
13421
  // 1.9.176: μ‚¬μš©μž μš”μ²­ 사전 κ²€ν†  (μ‚¬μš©μž λͺ…μ‹œ μš”μ²­)
13417
13422
  cliArgs = ['review-request', String(args.request || ''), '--path', targetPath, '--json'];
13418
13423
  break;
13424
+ case 'leerness_requests_audit':
13425
+ // 1.9.216 (1.9.207): μ‚¬μš©μž μš”μ²­ λˆ„λ½ 확인 절차
13426
+ cliArgs = ['requests', 'audit', '--path', targetPath, '--json'];
13427
+ break;
13428
+ case 'leerness_constraints_check':
13429
+ // 1.9.216 (1.9.208): ν”Œλž«νΌ/API μ œμ•½ 사전 체크
13430
+ cliArgs = ['constraints', 'check', String(args.request || ''), '--path', targetPath, '--json'];
13431
+ break;
13432
+ case 'leerness_pre_wake_audit':
13433
+ // 1.9.216 (1.9.209): pre-wake sub-agent audit
13434
+ cliArgs = ['pre-wake-audit', '--path', targetPath, '--json'];
13435
+ break;
13436
+ case 'leerness_intent_classify':
13437
+ // 1.9.216 (1.9.213): intent inference + scope expansion (dry-run)
13438
+ cliArgs = ['intent', 'expand', String(args.request || ''), '--path', targetPath, '--json'];
13439
+ break;
13440
+ case 'leerness_idempotency_audit':
13441
+ // 1.9.216 (1.9.212): λ©±λ“±μ„± 감사 (rule/task/user-requests/wakeups 4μ˜μ—­)
13442
+ cliArgs = ['idempotency', 'audit', '--path', targetPath, '--json'];
13443
+ break;
13419
13444
  default:
13420
13445
  return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
13421
13446
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.215",
3
+ "version": "1.9.216",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",