leerness 1.9.182 โ†’ 1.9.183

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,85 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.183 โ€” 2026-05-21
4
+
5
+ **๐Ÿ“ฆ npm i leerness + ๊ตฌ๋ฒ„์ „ ์ž๋™ ๊ฐ์ง€/๊ฒฝ๊ณ /์—…๋ฐ์ดํŠธ ๋ช…๋ น์–ด ์•ˆ๋‚ด (์‚ฌ์šฉ์ž ๋ช…์‹œ 3์ข…).**
6
+
7
+ ์ž์œจ ๋ชจ๋“œ 113 ๋ผ์šด๋“œ. ์‚ฌ์šฉ์ž ๋ช…์‹œ:
8
+ 1. *"(vercel/anthropic) ํ‘œ๊ธฐ๋Š” ์ œ๊ฑฐ"* โ†’ ์ผ๋ฐ˜ํ™”
9
+ 2. *"vercel/anthropic ํฌํ•จํ•œ ๋‹ค๋ฅธ ๊ณต์‹ ์Šคํ‚ฌ๋„ ์ž๋™ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธ"* โ†’ ๊ฒ€์ฆ ํ†ต๊ณผ
10
+ 3. *"npm i leerness ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ + ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€/๊ฒฝ๊ณ /์—…๋ฐ์ดํŠธ ๋ช…๋ น์–ด ์•ˆ๋‚ด"* โ†’ ๋ชจ๋“  ๋ช…๋ น์— stale check ์ง„์ž…
11
+
12
+ ### 1. ํ‘œ๊ธฐ ์ผ๋ฐ˜ํ™”
13
+ ```diff
14
+ - ๐ŸŒ ๊ณต์‹ catalog ์ž๋™ ํƒ์ƒ‰ (vercel/anthropic) ยท ์ž๊ฐ€ ์„ฑ์žฅํ˜•
15
+ + ๐ŸŒ ๊ณต์‹ catalog ์ž๋™ ํƒ์ƒ‰ ยท ์ž๊ฐ€ ์„ฑ์žฅํ˜• ยท ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€/์•ˆ๋‚ด
16
+ ```
17
+
18
+ ### 2. ๋‹ค๋ฅธ ๊ณต์‹ catalog ์ž๋™ ํƒ์ƒ‰ ํ™•์ธ (live)
19
+ ```bash
20
+ $ leerness skill discover --all-presets
21
+ fetching vercel-labs/agent-skills...
22
+ โœ“ vercel-labs/agent-skills: 8๊ฐœ skill ๋ฐœ๊ฒฌ
23
+ fetching anthropics/skills...
24
+ โœ“ anthropics/skills: 17๊ฐœ skill ๋ฐœ๊ฒฌ
25
+ ์ „์ฒด 25๊ฑด
26
+ ```
27
+ **vercel + anthropic ๋ชจ๋‘ ์ •์ƒ ์ž‘๋™**. ๋‹ค๋ฅธ ๊ณต์‹ organization์€ `--github <owner/repo>` ์˜ต์…˜์œผ๋กœ ์ฆ‰์‹œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ (`vercel-labs/agent-skills`, `anthropics/skills` ์™ธ์— ์ƒˆ ๊ณต์‹ ๋“ฑ์žฅ ์‹œ preset ๋“ฑ๋ก).
28
+
29
+ ์กฐ์‚ฌ ๊ฒฐ๊ณผ โ€” 1.9.183 ์‹œ์  ํ‘œ์ค€ SKILL.md ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐ–์ถ˜ ๊ณต์‹ organization:
30
+ - `vercel-labs/agent-skills` (8๊ฐœ) โ† preset `vercel`
31
+ - `anthropics/skills` (17๊ฐœ) โ† preset `anthropic`
32
+ - `modelcontextprotocol/servers` โ€” SKILL.md ํ˜•์‹ ์•„๋‹˜ (MCP server ๊ตฌํ˜„ โ€” leerness skill ํ˜ธํ™˜์„ฑ X)
33
+ - ๊ธฐํƒ€ โ€” ๋ฏธ๋ฐœ๊ฒฌ. ์ƒˆ ๊ณต์‹ ๋“ฑ์žฅ ์‹œ ์ฆ‰์‹œ preset ๋“ฑ๋ก ๊ฐ€๋Šฅ.
34
+
35
+ ### 3. ๊ตฌ๋ฒ„์ „ ์ž๋™ ๊ฐ์ง€ ๊ฐ•ํ™” (๋ชจ๋“  ๋ช…๋ น)
36
+ **Before**: init/migrate ์‹œ์ ๋งŒ stale check (๋‹ค๋ฅธ ๋ช…๋ น์€ skip)
37
+ **After**: ๊ฑฐ์˜ ๋ชจ๋“  ๋ช…๋ น ์‹œ์ ์— stale check (init/migrate/mcp/release/version/help ์ œ์™ธ โ€” ์ถœ๋ ฅ ๋ฏผ๊ฐ ๋ช…๋ น์€ skip)
38
+
39
+ ```js
40
+ // 1.9.183 (์‚ฌ์šฉ์ž ๋ช…์‹œ): ๋ชจ๋“  ๋ช…๋ น ์‹œ์ ์—์„œ ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€ + ๊ฒฝ๊ณ  + ์—…๋ฐ์ดํŠธ ๋ช…๋ น์–ด ์•ˆ๋‚ด
41
+ const _staleSkip = new Set(['init', 'migrate', 'usage', 'mcp', 'release', 'session-close', '--version', '--help', 'help', 'update', 'whats-new']);
42
+ if (!_staleSkip.has(cmd) && process.env.LEERNESS_NO_STALE_CHECK !== '1' && !has('--no-stale-check')) {
43
+ const cached = readUpdateCache(root);
44
+ if (cacheFresh(cached, 24) && cached.nextLeerness && compareVer(cached.nextLeerness, VERSION) > 0) {
45
+ process.stderr.write(` โš  leerness v${VERSION} โ†’ v${cached.nextLeerness} ์‚ฌ์šฉ ๊ฐ€๋Šฅ ยท npm i leerness@latest ๊ถŒ์žฅ ...`);
46
+ }
47
+ }
48
+ ```
49
+
50
+ **์‹ค ๋™์ž‘ ๊ฒ€์ฆ** (์บ์‹œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜):
51
+ ```
52
+ $ leerness audit .
53
+ โš  leerness v1.9.183 โ†’ v1.9.999 ์‚ฌ์šฉ ๊ฐ€๋Šฅ ยท npm i leerness@latest ๊ถŒ์žฅ (LEERNESS_NO_STALE_CHECK=1 ๋กœ ๋„๊ธฐ)
54
+ โœ“ no duplicate design guide candidates
55
+ [...]
56
+ ```
57
+
58
+ ### 4. `npm i leerness` ์ฒซ ๊ถŒ์žฅ (๊ธ€๋กœ๋ฒŒ โ†’ ๋กœ์ปฌ ์šฐ์„ )
59
+ init ์‹œ์  stale ๋ฉ”์‹œ์ง€๋„ ๊ฐฑ์‹ :
60
+ ```
61
+ ํ•ด๊ฒฐ โ€” ์…‹ ์ค‘ ํ•˜๋‚˜ ์‹คํ–‰ ํ›„ ๋‹ค์‹œ ์‹œ๋„:
62
+ npm i leerness@latest # ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ์„ค์น˜ (1.9.183 ๊ถŒ์žฅ)
63
+ npm i -g leerness@latest # ๊ธ€๋กœ๋ฒŒ ์„ค์น˜
64
+ npx --yes clear-npx-cache && npx leerness@latest init .
65
+ ```
66
+
67
+ ### npm registry ์ƒํƒœ
68
+ ```bash
69
+ $ npm view leerness version
70
+ 1.9.182 โ† ์ง์ „ publish
71
+ $ npm view leerness dist-tags
72
+ { latest: '1.9.182' }
73
+ ```
74
+ ์ด๋ฒˆ ๋ผ์šด๋“œ release sync-main ํ›„ `latest: '1.9.183'` ์œผ๋กœ ์ž๋™ ๊ฐฑ์‹ .
75
+
76
+ ### Verified
77
+ - stress-v128: **16/16** (์‚ฌ์šฉ์ž ๋ช…์‹œ 3 + ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€ 4 + npm ๋ฐฐํฌ 2 + VERSION+๋ˆ„์  7)
78
+ - e2e 217/217 baseline ์œ ์ง€
79
+ - VERSION = 1.9.183 ยท autonomous-rounds = 113 ยท main ์ž๋™ push 44 ๋ผ์šด๋“œ ์—ฐ์†
80
+
81
+ ---
82
+
3
83
  ## 1.9.182 โ€” 2026-05-21
4
84
 
5
85
  **๐ŸŒ ๊ณต์‹ ์กฐ์ง ์Šคํ‚ฌ catalog ์ž๋™ ํƒ์ƒ‰ โ€” vercel-labs/agent-skills + anthropics/skills ์ง์ ‘ ํ†ตํ•ฉ (์‚ฌ์šฉ์ž ๋ช…์‹œ).**
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.182-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v127-16%2F16-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-112-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-43_rounds-success)]() [![skill-presets](https://img.shields.io/badge/skill_catalog-vercel%2Banthropic_ํ†ตํ•ฉ-success)]() [![skill-auto](https://img.shields.io/badge/skill_auto--install-handoff_ํ†ตํ•ฉ_(opt--in)-success)]() [![direction](https://img.shields.io/badge/๋ฐฉํ–ฅ์„ฑ_ํ‰๊ฐ€-86%2F100_(์˜ฌ๋ฐ”๋ฅธ_๋ฐฉํ–ฅ)-brightgreen)]() [![npm-auto](https://img.shields.io/badge/npm_auto--publish-NPM__TOKEN_ํ†ตํ•ฉ-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.183-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v128-16%2F16-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-113-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-44_rounds-success)]() [![install](https://img.shields.io/badge/npm_i_leerness-์ฆ‰์‹œ_์‚ฌ์šฉ_๊ฐ€๋Šฅ-success)]() [![stale-check](https://img.shields.io/badge/๊ตฌ๋ฒ„์ „_๊ฐ์ง€-๋ชจ๋“ _๋ช…๋ น_์‹œ์ -success)]() [![skill-presets](https://img.shields.io/badge/skill_catalog-๊ณต์‹_2์ข…%2B--github_ํ™•์žฅ-success)]() [![direction](https://img.shields.io/badge/๋ฐฉํ–ฅ์„ฑ_ํ‰๊ฐ€-86%2F100-brightgreen)]() [![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.182 AI Agent Reliability Harness + Sandbox โ•‘
15
+ โ•‘ v1.9.183 AI Agent Reliability Harness + Sandbox โ•‘
16
16
  โ•‘ verify ยท remember ยท orchestrate ยท audit ยท sandbox ยท drift โ•‘
17
- โ•‘ ๐ŸŒ ๊ณต์‹ catalog ์ž๋™ ํƒ์ƒ‰ (vercel/anthropic) ยท ์ž๊ฐ€ ์„ฑ์žฅํ˜• โ•‘
17
+ โ•‘ ๐ŸŒ ๊ณต์‹ catalog ์ž๋™ ํƒ์ƒ‰ ยท ์ž๊ฐ€ ์„ฑ์žฅํ˜• ยท ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€/์•ˆ๋‚ด โ•‘
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.182';
10
+ const VERSION = '1.9.183';
11
11
  const MARK = '<!-- leerness:managed -->';
12
12
  const README_START = '<!-- leerness:project-readme:start -->';
13
13
  const README_END = '<!-- leerness:project-readme:end -->';
@@ -5102,9 +5102,10 @@ async function _warnIfStale(root, opts = {}) {
5102
5102
  log(C.d(' npm registry latest: ') + C.b(`v${latest}`));
5103
5103
  log(C.d(' ์ด CLI๊ฐ€ ์‹คํ–‰ํ•œ ๋ฒ„์ „: ') + C.b(`v${VERSION}`) + C.d(' (npx ์บ์‹œ ๋˜๋Š” ๊ธ€๋กœ๋ฒŒ ์„ค์น˜ stale)'));
5104
5104
  log('');
5105
- log(C.d(' ํ•ด๊ฒฐ โ€” ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์‹คํ–‰ ํ›„ ๋‹ค์‹œ ์‹œ๋„:'));
5105
+ log(C.d(' ํ•ด๊ฒฐ โ€” ์…‹ ์ค‘ ํ•˜๋‚˜ ์‹คํ–‰ ํ›„ ๋‹ค์‹œ ์‹œ๋„:'));
5106
+ log(' ' + C.b('npm i leerness@latest') + C.d(' # ํ”„๋กœ์ ํŠธ ๋กœ์ปฌ ์„ค์น˜ (1.9.183 ๊ถŒ์žฅ)'));
5107
+ log(' ' + C.b('npm i -g leerness@latest') + C.d(' # ๊ธ€๋กœ๋ฒŒ ์„ค์น˜'));
5106
5108
  log(' ' + C.b('npx --yes clear-npx-cache && npx leerness@latest init .'));
5107
- log(' ' + C.b('npm i -g leerness@latest โ†’ leerness init .'));
5108
5109
  log('');
5109
5110
  log(C.d(' (์ด ๊ฒฝ๊ณ ๋Š” LEERNESS_NO_STALE_CHECK=1 ๋˜๋Š” --no-stale-check๋กœ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)'));
5110
5111
  log('');
@@ -13622,6 +13623,22 @@ async function main() {
13622
13623
  if (exists(path.join(root, '.harness'))) _bumpUsage(root, cmd);
13623
13624
  } catch {}
13624
13625
  }
13626
+ // 1.9.183 (์‚ฌ์šฉ์ž ๋ช…์‹œ): ๋ชจ๋“  ๋ช…๋ น ์‹œ์ ์—์„œ ๊ตฌ๋ฒ„์ „ ๊ฐ์ง€ + ๊ฒฝ๊ณ  + ์—…๋ฐ์ดํŠธ ๋ช…๋ น์–ด ์•ˆ๋‚ด.
13627
+ // init/migrate ๋Š” ์ด๋ฏธ _warnIfStale ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ์ œ์™ธ. mcp/version/help ๋“ฑ ์ถœ๋ ฅ ๋ฏผ๊ฐ ๋ช…๋ น๋„ ์ œ์™ธ.
13628
+ // 24h ์บ์‹œ (.harness/cache/update-check.json) ํ™œ์šฉ โ€” ๋„คํŠธ์›Œํฌ ๋น„์ฐจ๋‹จ.
13629
+ const _staleSkip = new Set(['init', 'migrate', 'usage', 'mcp', 'release', 'session-close', '--version', '--help', 'help', 'update', 'whats-new']);
13630
+ if (!_staleSkip.has(cmd) && process.env.LEERNESS_NO_STALE_CHECK !== '1' && !has('--no-stale-check')) {
13631
+ try {
13632
+ const root = absRoot(arg('--path', args[1] && !args[1].startsWith('-') ? args[1] : process.cwd()));
13633
+ // ์บ์‹œ fresh ์‹œ์—๋งŒ ์ฆ‰์‹œ ๋น„๊ต (๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ X โ€” ๋น„์ฐจ๋‹จ). offline + cache ์—†์œผ๋ฉด skip.
13634
+ const cached = readUpdateCache(root);
13635
+ if (cacheFresh(cached, 24) && cached.nextLeerness && compareVer(cached.nextLeerness, VERSION) > 0) {
13636
+ const isTty = process.stdout && process.stdout.isTTY;
13637
+ const C = isTty ? { y: s => `\x1b[33m${s}\x1b[0m`, b: s => `\x1b[1m${s}\x1b[0m`, d: s => `\x1b[2m${s}\x1b[0m` } : { y: s => s, b: s => s, d: s => s };
13638
+ process.stderr.write(C.y(' โš  ') + C.b(`leerness v${VERSION} โ†’ v${cached.nextLeerness} ์‚ฌ์šฉ ๊ฐ€๋Šฅ`) + C.d(` ยท ${C.b('npm i leerness@latest')} ๊ถŒ์žฅ (LEERNESS_NO_STALE_CHECK=1 ๋กœ ๋„๊ธฐ)`) + '\n');
13639
+ }
13640
+ } catch {}
13641
+ }
13625
13642
  if (cmd === 'init') return await install(args[1] || process.cwd(), { force:false, dry:false, migration:false });
13626
13643
  // 1.9.64: install <skill-id-or-url> ๋ณ„์นญ (= skill install). ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น ๋‹จ์ถ•ํ˜•.
13627
13644
  // ๋‹จ, init์ด leerness install . ๊ฐ™์€ ํ˜•ํƒœ๋กœ๋„ ๋™์ž‘ํ•˜๋˜ ์˜› ํ˜ธํ™˜์€ ์œ ์ง€ โ€” args[1]์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฉด init์œผ๋กœ ๋ผ์šฐํŒ….
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.182",
3
+ "version": "1.9.183",
4
4
  "description": "Leerness: ๋น„ํŒŒ๊ดด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์ž๋™ ๋ฒ„์ „ ๊ฐ์ง€ยท์—…๋ฐ์ดํŠธ, ๊ณ„ํš/์ง„ํ–‰/ํ•ธ๋“œ์˜คํ”„ ์ž๋™ํ™”, ๊ฒŒ์œผ๋ฆ„ยท์‹œํฌ๋ฆฟยท์ธ์ฝ”๋”ฉ ์ž๋™ ๊ฐ€๋“œ, Claude Code ์Šฌ๋ž˜์‹œ ํ†ตํ•ฉ์„ ๊ฐ–์ถ˜ ํ•œ๊ตญ์–ด ์šฐ์„  AI ๊ฐœ๋ฐœ ํ•˜๋„ค์Šค.",
5
5
  "keywords": [
6
6
  "leerness",