leerness 1.9.192 โ†’ 1.9.193

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,60 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.193 โ€” 2026-05-21
4
+
5
+ **๐Ÿค– B์ถ• (๋ฉ€ํ‹ฐ Sub-Agent ์˜ค์ผ€์ŠคํŠธ๋ผ) ๋ณด๊ฐ• โ€” agents multi consensus ๊ฒฐ๊ณผ ์ž๋™ lessons.md ์ €์žฅ + ์บ์‹œ 7์ผ stale hint.**
6
+
7
+ ์ž์œจ ๋ชจ๋“œ 123 ๋ผ์šด๋“œ. 1.9.192 C์ถ• ๋ณด๊ฐ•์— ์ด์–ด, 5์ถ• ๋งคํŠธ๋ฆญ์Šค์—์„œ ๋‘ ๋ฒˆ์งธ๋กœ ์ ์ˆ˜๊ฐ€ ๋‚ฎ์•˜๋˜ **B์ถ• (8.5/10 โ†’ ๋ชฉํ‘œ 9/10)** ๋ณด๊ฐ•.
8
+
9
+ ### ์‚ฌ์šฉ์ž ์˜๋„ ์ •๋ ฌ (1.9.191 verbatim)
10
+ > *"๋ฉ€ํ‹ฐ ์„œ๋ธŒ ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ผ ... ์ตœ๊ณ ์˜ ๋„๊ตฌ"*
11
+
12
+ ### 1. agents multi --execute โ†’ lessons.md ์ž๋™ ์ €์žฅ (B์ถ• ํ•ต์‹ฌ)
13
+ - ๋งค `agents multi --execute` ํ˜ธ์ถœ ์‹œ consensus best agent + score ๊ฐ€ `.harness/lessons.md`์— ๊ธฐ๋ก
14
+ - ๊ฐ™์€ keyword ์žฌ๋ฐœ ์‹œ handoff lessons auto-recall (1.9.56)๊ฐ€ ์ž๋™ ๋งค์นญ โ†’ ๊ณผ๊ฑฐ best agent ์šฐ์„  ์‹œ๋„
15
+ - ๋„๊ธฐ: `LEERNESS_NO_MULTIAGENT_LESSON=1`
16
+
17
+ **lesson ๋ธ”๋ก ํฌ๋งท:**
18
+ ```markdown
19
+ ### 2026-05-21 multi-agent consensus โ€” best=claude (1.9.193)
20
+ - task: ...
21
+ - agents: claude, codex, gemini (3/3 success)
22
+ - best agent: claude, score=0.873
23
+ - others: codex=0.71, gemini=0.65
24
+ - lesson: ๊ฐ™์€ keyword ์žฌ๋ฐœ ์‹œ claude ์šฐ์„  ์‹œ๋„ (multi-signal consensus ์ž…์ฆ)
25
+ ```
26
+
27
+ ### 2. skill auto-cache age 7์ผ stale ๊ฐ•์กฐ (1.9.192 ํ›„์†)
28
+ - handoff body์—์„œ ์บ์‹œ age โ‰ฅ 7์ผ (veryStale) ์‹œ `โš  7์ผ+` ํ‘œ์‹œ
29
+ - ๊ฐฑ์‹  ๊ถŒ์žฅ hint: `1.9.193 7์ผ+ stale` ๋˜๋Š” `24h+ expired` ๋ช…์‹œ
30
+ - ์‚ฌ์šฉ์ž๊ฐ€ "์˜ค๋ž˜๋œ catalog ์ž„์„ ์ธ์ง€" โ†’ ์ž๋™ ๊ฒŒ์œผ๋ฆ„ ๋ฐฉ์ง€
31
+
32
+ ### 3. ๋ˆ„์  ํšŒ๊ท€ (1.9.187~192) โ€” ๋ชจ๋‘ ์œ ์ง€
33
+ - [1.9.192] _loadOfficialSkillCache + 24h ์บ์‹œ
34
+ - [1.9.191] ๊ตฌ์กฐ ์ตœ์ ํ™” ๋ณด๊ณ ์„œ 88/100
35
+ - [1.9.190] _selectOne/_selectMany Ctrl+C ์ฆ‰์‹œ ์ข…๋ฃŒ
36
+ - [1.9.189] _showSlashCommandList + Tab cycle ํ•œ ์ค„ ๊ฐฑ์‹ 
37
+ - [1.9.188] stdin prompt ์ „๋‹ฌ (useStdinForPrompt)
38
+ - [1.9.187] _loadLeernessConfig (.harness/leerness-config.json)
39
+
40
+ ### 4. stress-v138 โ€” 16/16 PASS
41
+ - consensus auto-lessons (3) + cache age hint (2) + 1.9.192 ์ž”์กด (2)
42
+ - ์„ฑ๋Šฅ: --version cold start avg **396 ms** (376/382/430) ยท MCP 54 ๋„๊ตฌ **369 ms**
43
+ - ๋ˆ„์  ํšŒ๊ท€ 1.9.187~192 (7)
44
+
45
+ ### 5. 5์ถ• ๋งคํŠธ๋ฆญ์Šค ๋ณ€๋™
46
+ | ์ถ• | 1.9.192 | 1.9.193 | ฮ” |
47
+ |---|---|---|---|
48
+ | B. ๋ฉ€ํ‹ฐ Sub-Agent ์˜ค์ผ€์ŠคํŠธ๋ผ | 8.5/10 | **9/10** | +0.5 (consensus ์ž๋™ lessons โ†’ ํ•™์Šต ์‚ฌ์ดํด ์™„์„ฑ) |
49
+ | C. ๊ณต์‹ ํ‘œ์ค€ ์Šคํ‚ฌ ์ž๋™ ํ™œ์šฉ | 9/10 | 9/10 | (์œ ์ง€) |
50
+ | ์ข…ํ•ฉ | 45/50 (90%) | **45.5/50 (91%)** | +1% |
51
+
52
+ ### 6. ์ž๋™ release ํ๋ฆ„
53
+ - main ์ž๋™ push **55 ๋ผ์šด๋“œ ์—ฐ์†** (1.9.140~193)
54
+ - npm publish ์ž๋™ (1.9.178~)
55
+
56
+ ---
57
+
3
58
  ## 1.9.192 โ€” 2026-05-21
4
59
 
5
60
  **๐ŸŒ C์ถ• (๊ณต์‹ ํ‘œ์ค€ ์Šคํ‚ฌ ์ž๋™ ํ™œ์šฉ) ๋ณด๊ฐ• โ€” handoff์— ๊ณต์‹ organization catalog ์ž๋™ ๋…ธ์ถœ + 24h ์บ์‹œ.**
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.192-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v137-17%2F17-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-122-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-54_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/๋ชฉ์ _๋งคํŠธ๋ฆญ์Šค-90%2F100_(5์ถ•)-brightgreen)]() [![official-skills](https://img.shields.io/badge/official_skills-handoff_์ž๋™_๋…ธ์ถœ-success)]() [![perf](https://img.shields.io/badge/cold_start-398ms-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.193-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v138-16%2F16-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-123-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-55_rounds-success)]() [![goal-matrix](https://img.shields.io/badge/๋ชฉ์ _๋งคํŠธ๋ฆญ์Šค-91%2F100_(5์ถ•)-brightgreen)]() [![multi-agent](https://img.shields.io/badge/multi--agent-consensus_lessons_์ž๋™-success)]() [![perf](https://img.shields.io/badge/cold_start-396ms-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.192 AI Agent Reliability Harness + Sandbox โ•‘
15
+ โ•‘ v1.9.193 AI Agent Reliability Harness + Sandbox โ•‘
16
16
  โ•‘ verify ยท remember ยท orchestrate ยท audit ยท sandbox ยท drift โ•‘
17
- โ•‘ ๐ŸŒ official skills handoff ์ž๋™ ยท ๋งคํŠธ๋ฆญ์Šค 90/100 ยท 122 ๋ผ์šด๋“œ โ•‘
17
+ โ•‘ ๐Ÿค– multi-agent consensus lessons ์ž๋™ ยท 91/100 ยท 123 ๋ผ์šด๋“œ โ•‘
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.192';
10
+ const VERSION = '1.9.193';
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 ์ฒ˜๋ฆฌ).
@@ -3524,6 +3524,7 @@ function handoff(root) {
3524
3524
  // 1.9.192: ๊ณต์‹ organization skill catalog ์ž๋™ ๋งค์นญ (C์ถ• ๋ณด๊ฐ• โ€” ์‚ฌ์šฉ์ž ์˜๋„)
3525
3525
  // "๊ณต์‹ ํ‘œ์ค€ํ™”๋œ ์Šคํ‚ฌ์„ ์ ์žฌ์ ์†Œ๋กœ ์ž๋™ ํ™œ์šฉ ... ์ตœ๊ณ ์˜ ๋„๊ตฌ" โ€” handoff ์‹œ keyword ๊ธฐ๋ฐ˜ ์ž๋™ ์ถ”์ฒœ
3526
3526
  // ์บ์‹œ (.harness/skill-auto-cache.json, 24h TTL) ์‚ฌ์šฉ โ†’ GitHub API ๋ถ€๋‹ด X
3527
+ // 1.9.193: cache age > 7์ผ โ†’ ์ž๋™ refresh ๊ถŒ์žฅ hint ๊ฐ•ํ™”
3527
3528
  // ๋„๊ธฐ: --no-official-skills ๋˜๋Š” LEERNESS_NO_OFFICIAL_SKILLS=1
3528
3529
  if (!has('--no-official-skills') && !has('--quiet') && process.env.LEERNESS_NO_OFFICIAL_SKILLS !== '1') {
3529
3530
  try {
@@ -3532,14 +3533,18 @@ function handoff(root) {
3532
3533
  const isTty = process.stdout && process.stdout.isTTY;
3533
3534
  const cyan = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
3534
3535
  const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
3536
+ const yel = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
3535
3537
  const cacheAge = ofm.ageHours != null ? (ofm.ageHours < 24 ? `${ofm.ageHours}h` : `${Math.floor(ofm.ageHours/24)}d`) : '?';
3536
- log(cyan(`## ๐ŸŒ ๊ณต์‹ organization ์Šคํ‚ฌ ์ž๋™ ๋งค์นญ (1.9.192) โ€” ํ‚ค์›Œ๋“œ "${keyword}"`));
3537
- log(dim(` vercel-labs/anthropics ๋“ฑ catalog ์บ์‹œ ${cacheAge}${ofm.expired ? ' โš  ๋งŒ๋ฃŒ' : ''} ยท ${ofm.total}/${ofm.cacheTotal}๊ฑด ๋งค์นญ`));
3538
+ // 1.9.193: cache age 7์ผ ์ด์ƒ์ด๋ฉด ๊ฐ•์กฐ ํ‘œ์‹œ (week stale)
3539
+ const veryStale = ofm.ageHours != null && ofm.ageHours >= 24 * 7;
3540
+ log(cyan(`## ๐ŸŒ ๊ณต์‹ organization ์Šคํ‚ฌ ์ž๋™ ๋งค์นญ (1.9.192/193) โ€” ํ‚ค์›Œ๋“œ "${keyword}"`));
3541
+ const ageLabel = veryStale ? yel(`${cacheAge} โš  7์ผ+`) : (ofm.expired ? yel(`${cacheAge} โš  ๋งŒ๋ฃŒ`) : `${cacheAge} โœ“`);
3542
+ log(dim(` vercel-labs/anthropics ๋“ฑ catalog ์บ์‹œ ${ageLabel} ยท ${ofm.total}/${ofm.cacheTotal}๊ฑด ๋งค์นญ`));
3538
3543
  for (const e of ofm.entries) {
3539
3544
  log(dim(` โ€ข [${e.preset || e.source || '?'}] ${e.name} โ€” ${(e.description || '').slice(0, 70)}`));
3540
3545
  }
3541
3546
  log(dim(` โ†’ ์„ค์น˜: leerness skill auto-install --yes`));
3542
- if (ofm.expired) log(dim(` โ†’ ๊ฐฑ์‹ : leerness skill auto-cache refresh`));
3547
+ if (ofm.expired || veryStale) log(yel(` โ†’ ๊ฐฑ์‹  ๊ถŒ์žฅ: leerness skill auto-cache refresh (1.9.193 ${veryStale ? '7์ผ+ stale' : '24h+ expired'})`));
3543
3548
  log('');
3544
3549
  } else if (ofm.cacheTotal === 0) {
3545
3550
  // ์บ์‹œ ์—†์Œ โ€” ์ฒซ ์‚ฌ์šฉ ์•ˆ๋‚ด
@@ -6047,6 +6052,21 @@ function agentsCmd(root, sub, ...args) {
6047
6052
  const block = `\n## ${today()} agents multi --execute (1.9.156)\n- task: ${task.slice(0, 200)}\n- agents: ${ready.map(x => x.def.id).join(', ')}\n- success: ${ok.length}/${ready.length}\n- best: ${best.agent} (score=${best.score.toFixed(3)})\n`;
6048
6053
  append(tlp, block);
6049
6054
  } catch {}
6055
+ // 1.9.193: B์ถ• (๋ฉ€ํ‹ฐ Sub-Agent ์˜ค์ผ€์ŠคํŠธ๋ผ) ๋ณด๊ฐ• โ€” consensus ๊ฒฐ๊ณผ๋ฅผ lessons.md ์— ์ž๋™ ๊ธฐ๋ก
6056
+ // ๊ฐ™์€ task ์žฌ์‹œ๋„ ์‹œ ๊ณผ๊ฑฐ best agent + score ๊ฐ€ handoff lessons auto-recall ์—์„œ ๋งค์นญ
6057
+ // ๋„๊ธฐ: LEERNESS_NO_MULTIAGENT_LESSON=1
6058
+ if (process.env.LEERNESS_NO_MULTIAGENT_LESSON !== '1') {
6059
+ try {
6060
+ const lp = lessonsPath(root);
6061
+ const lessonBlock = `\n### ${today()} multi-agent consensus โ€” best=${best.agent} (1.9.193)\n`
6062
+ + `- task: ${task.slice(0, 200)}\n`
6063
+ + `- agents: ${ready.map(x => x.def.id).join(', ')} (${ok.length}/${ready.length} success)\n`
6064
+ + `- best agent: ${best.agent}, score=${best.score.toFixed(3)}\n`
6065
+ + (scored.length > 1 ? `- others: ${scored.slice(1, 4).map(s => `${s.agent}=${s.score.toFixed(2)}`).join(', ')}\n` : '')
6066
+ + `- lesson: ๊ฐ™์€ keyword ์žฌ๋ฐœ ์‹œ ${best.agent} ์šฐ์„  ์‹œ๋„ (multi-signal consensus ์ž…์ฆ)\n`;
6067
+ append(lp, lessonBlock);
6068
+ } catch {}
6069
+ }
6050
6070
  }
6051
6071
  if (failures.length && !best) {
6052
6072
  process.exitCode = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.192",
3
+ "version": "1.9.193",
4
4
  "description": "Leerness: ๋น„ํŒŒ๊ดด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์ž๋™ ๋ฒ„์ „ ๊ฐ์ง€ยท์—…๋ฐ์ดํŠธ, ๊ณ„ํš/์ง„ํ–‰/ํ•ธ๋“œ์˜คํ”„ ์ž๋™ํ™”, ๊ฒŒ์œผ๋ฆ„ยท์‹œํฌ๋ฆฟยท์ธ์ฝ”๋”ฉ ์ž๋™ ๊ฐ€๋“œ, Claude Code ์Šฌ๋ž˜์‹œ ํ†ตํ•ฉ์„ ๊ฐ–์ถ˜ ํ•œ๊ตญ์–ด ์šฐ์„  AI ๊ฐœ๋ฐœ ํ•˜๋„ค์Šค.",
5
5
  "keywords": [
6
6
  "leerness",