leerness 1.9.176 β†’ 1.9.177

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,50 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.9.177 β€” 2026-05-21
4
+
5
+ **πŸ” `task add` μžλ™ review-request trigger β€” μ‚¬μš©μž λͺ…μ‹œ 1.9.176 μžλ™ν™”.**
6
+
7
+ 자율 λͺ¨λ“œ 107 λΌμš΄λ“œ. 1.9.176 (μ‚¬μš©μž λͺ…μ‹œ: 무쑰건 κ΅¬ν˜„ μ „ 사전 κ²€ν† ) 의 μžλ™ν™” β€” μ‚¬μš©μž/AIκ°€ `task add` 호좜 μ‹œ reviewλ₯Ό 직접 μ‹€ν–‰ν•˜μ§€ μ•Šμ•„λ„ μžλ™ trigger.
8
+
9
+ ### 톡합 흐름
10
+ ```bash
11
+ $ leerness task add "OAuth 둜그인 κ΅¬ν˜„ν•΄μ€˜"
12
+ βœ“ task added: T-0001
13
+
14
+ πŸ” review-request (1.9.177 μžλ™): type=feature Β· βœ“ μ§„ν–‰ μ•ˆμ „ (705ms)
15
+ ꢌμž₯ 단계:
16
+ 1) leerness reuse find "<핡심 capability>" β€” 쀑볡 κ΅¬ν˜„ 사전 차단
17
+ 2) leerness plan add "<milestone>" β€” μ§„ν–‰ 좔적
18
+ ... +2건 (leerness review-request "OAuth 둜그인 κ΅¬ν˜„ν•΄μ€˜" 으둜 전체 보기)
19
+ πŸ’‘ πŸ‘₯ leerness agents recommend feature β€” μž‘μ—… μœ ν˜•λ³„ sub-agent λ§€ν•‘ ν™œμš© κ°€λŠ₯
20
+ ```
21
+
22
+ β†’ μ‚¬μš©μž/AIκ°€ λͺ…μ‹œμ μœΌλ‘œ `:review` 호좜 μ•ˆ 해도, `task add` 만으둜 μžλ™ 사전 κ²€ν†  μ™„λ£Œ. **1.9.176 μ‚¬μš©μž λͺ…μ‹œ μ˜λ„κ°€ default λ™μž‘μ— 톡합**.
23
+
24
+ ### Opt-out (3 κ°€μ§€)
25
+ 1. CLI ν”Œλž˜κ·Έ: `leerness task add "..." --no-review`
26
+ 2. ν™˜κ²½λ³€μˆ˜: `LEERNESS_NO_AUTO_REVIEW=1`
27
+ 3. 운영 메타: `--status done|dropped|blocked` (이미 μ’…λ£Œλœ μž‘μ—…μ€ review λΆˆν•„μš”)
28
+
29
+ ### ν‘œμ‹œ μ •μ±… (κ°„κ²°)
30
+ - 헀더 1쀄: `type=X Β· ⚠ N 좩돌 Β· πŸ” N μž¬μ‚¬μš© 후보 Β· βœ“ μ§„ν–‰ μ•ˆμ „ / ⚠ 확인 ν•„μš” (ms)`
31
+ - ꢌμž₯ 단계 첫 2건 (λ‚˜λ¨Έμ§€λŠ” `leerness review-request` 직접 호좜 μ•ˆλ‚΄)
32
+ - 효율 μ œμ•ˆ 1건 (κ°€μž₯ μ€‘μš”ν•œ hint)
33
+ - `proceed=false` μ‹œ ⚠ μ‚¬μœ  λ…ΈμΆœ
34
+
35
+ ### MCP ν˜Έν™˜μ„±
36
+ `leerness_task_add` (MCP) 호좜 μ‹œμ—λ„ μžλ™ review λ™μž‘ β€” μ™ΈλΆ€ AI (Claude/Codex/Gemini)κ°€ task 등둝 μ‹œ μžλ™μœΌλ‘œ 사전 κ²€ν†  κ²°κ³Ό λ°›μŒ.
37
+
38
+ ### μ„±λŠ₯
39
+ μ‹€μΈ‘: ~1.1초 task add (이전 ~30ms + review 1초 μΆ”κ°€). brainstorm/reuse-map 회수 λΉ„μš© β€” opt-out κ°€λŠ₯.
40
+
41
+ ### Verified
42
+ - e2e 217/217 baseline μœ μ§€
43
+ - stress-v122: **18/18** (taskAdd 톡합 4 + μ‹€ λ™μž‘ 7 + MCP ν˜Έν™˜ 1 + λˆ„μ  νšŒκ·€ 6)
44
+ - VERSION = 1.9.177 / autonomous-rounds = 107 / main μžλ™ push 38 λΌμš΄λ“œ 연속
45
+
46
+ ---
47
+
3
48
  ## 1.9.176 β€” 2026-05-21
4
49
 
5
50
  **⚠ μ‚¬μš©μž λͺ…μ‹œ: `leerness review-request` β€” μ‚¬μš©μž μš”κ΅¬λ₯Ό 무쑰건 κ΅¬ν˜„ μ „ 사전 κ²€ν† .**
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.176-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v121-23%2F23-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-106-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-37_rounds-success)]() [![review-request](https://img.shields.io/badge/review--request-사전_κ²€ν† _9_μ‹ ν˜Έ-success)]() [![repl-slash](https://img.shields.io/badge/REPL_slash-:web%2F:pc%2F:lsp%2F:review-success)]() [![lsp-multi](https://img.shields.io/badge/LSP_λ‹€κ΅­μ–΄-JS%2FPython%2FGo%2FRust%2FJava-success)]() [![capability](https://img.shields.io/badge/6_capability-72%25_production--ready-brightgreen)]() [![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.177-green)]() [![tests](https://img.shields.io/badge/e2e-217%2F217-success)]() [![stress](https://img.shields.io/badge/stress--v122-18%2F18-success)]() [![mcp](https://img.shields.io/badge/MCP--tools-54-brightgreen)]() [![rounds](https://img.shields.io/badge/autonomous--rounds-107-blueviolet)]() [![main-push](https://img.shields.io/badge/release--main--push-38_rounds-success)]() [![auto-review](https://img.shields.io/badge/task_add-μžλ™_review_trigger-success)]() [![review-request](https://img.shields.io/badge/review--request-사전_κ²€ν† _9_μ‹ ν˜Έ-success)]() [![repl-slash](https://img.shields.io/badge/REPL_slash-:web%2F:pc%2F:lsp%2F:review-success)]() [![capability](https://img.shields.io/badge/6_capability-72%25_production--ready-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.176 AI Agent Reliability Harness + Sandbox β•‘
15
+ β•‘ v1.9.177 AI Agent Reliability Harness + Sandbox β•‘
16
16
  β•‘ verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β•‘
17
- β•‘ ⚠ review-request β€” 무쑰건 κ΅¬ν˜„ μ „ 좩돌/효율 사전 κ²€ν†  β•‘
17
+ β•‘ πŸ” task add μžλ™ review trigger β€” default 사전 κ²€ν†  β•‘
18
18
  β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
19
19
  ```
20
20
 
package/bin/harness.js CHANGED
@@ -6,7 +6,7 @@ const path = require('path');
6
6
  const cp = require('child_process');
7
7
  const readline = require('readline');
8
8
 
9
- const VERSION = '1.9.176';
9
+ const VERSION = '1.9.177';
10
10
  const MARK = '<!-- leerness:managed -->';
11
11
  const README_START = '<!-- leerness:project-readme:start -->';
12
12
  const README_END = '<!-- leerness:project-readme:end -->';
@@ -1600,6 +1600,42 @@ function taskAdd(root, text) {
1600
1600
  upsertProgress(root, { id, status: arg('--status','requested'), request: text, evidence: arg('--evidence','user-request'), nextAction: arg('--next','λ‹€μŒ μ•‘μ…˜ μž‘μ„±') });
1601
1601
  ok(`task added: ${id}`);
1602
1602
  _autoRoadmap(absRoot(root), 'data-change');
1603
+ // 1.9.177: task add μžλ™ review-request trigger (μ‚¬μš©μž λͺ…μ‹œ 1.9.176 μžλ™ν™”).
1604
+ // μ‚¬μš©μžκ°€ task μΆ”κ°€ μ‹œ μžλ™μœΌλ‘œ 사전 κ²€ν†  β€” 좩돌/μž¬μ‚¬μš©/효율/ꢌμž₯ 단계 κ²°κ³Όλ₯Ό 등둝 직후 ν‘œμ‹œ.
1605
+ // opt-out: --no-review λ˜λŠ” env LEERNESS_NO_AUTO_REVIEW=1, λ˜λŠ” status=in-progress/done 같은 운영 메타.
1606
+ if (!has('--no-review')
1607
+ && process.env.LEERNESS_NO_AUTO_REVIEW !== '1'
1608
+ && !/^(done|dropped|blocked)$/i.test(arg('--status', 'requested'))
1609
+ && text && text.trim()) {
1610
+ try {
1611
+ const t0 = Date.now();
1612
+ const r = cp.spawnSync(process.execPath, [__filename, 'review-request', text, '--path', absRoot(root), '--json'], {
1613
+ encoding: 'utf8', timeout: 15000,
1614
+ env: { ...process.env, LEERNESS_NO_BANNER: '1', LEERNESS_NO_PROMPT: '1', LEERNESS_NO_DRIFT_CHECK: '1' }
1615
+ });
1616
+ if (r.status === 0 && r.stdout) {
1617
+ const j = JSON.parse(r.stdout);
1618
+ log('');
1619
+ log(`πŸ” review-request (1.9.177 μžλ™): type=${j.estimatedType}` +
1620
+ (j.conflicts.length ? ` · ⚠ ${j.conflicts.length} 좩돌` : '') +
1621
+ (j.reuseCandidates.length ? ` Β· πŸ” ${j.reuseCandidates.length} μž¬μ‚¬μš© 후보` : '') +
1622
+ ` Β· ${j.proceed ? 'βœ“ μ§„ν–‰ μ•ˆμ „' : '⚠ 확인 ν•„μš”'} (${Date.now() - t0}ms)`);
1623
+ // ꢌμž₯ 단계 첫 2건 λ…ΈμΆœ
1624
+ if (j.recommendedSteps && j.recommendedSteps.length) {
1625
+ log(' ꢌμž₯ 단계:');
1626
+ j.recommendedSteps.slice(0, 2).forEach(s => log(' ' + s));
1627
+ if (j.recommendedSteps.length > 2) log(` ... +${j.recommendedSteps.length - 2}건 (leerness review-request "${text.slice(0, 30)}" 으둜 전체 보기)`);
1628
+ }
1629
+ // 효율 μ œμ•ˆ 1건만
1630
+ if (j.efficiencyHints && j.efficiencyHints.length) {
1631
+ log(` πŸ’‘ ${j.efficiencyHints[0]}`);
1632
+ }
1633
+ if (!j.proceed) {
1634
+ log(` ⚠ ${j.proceedReason}`);
1635
+ }
1636
+ }
1637
+ } catch {} // review μ‹€νŒ¨λŠ” task add μžμ²΄μ— 영ν–₯ X
1638
+ }
1603
1639
  }
1604
1640
  function taskUpdate(root, id) {
1605
1641
  if (!id) return fail('id required (e.g., task update T-0001 --status in-progress)');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "leerness",
3
- "version": "1.9.176",
3
+ "version": "1.9.177",
4
4
  "description": "Leerness: λΉ„νŒŒκ΄΄ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜, μžλ™ 버전 κ°μ§€Β·μ—…λ°μ΄νŠΈ, κ³„νš/μ§„ν–‰/ν•Έλ“œμ˜€ν”„ μžλ™ν™”, κ²ŒμœΌλ¦„Β·μ‹œν¬λ¦ΏΒ·μΈμ½”λ”© μžλ™ κ°€λ“œ, Claude Code μŠ¬λž˜μ‹œ 톡합을 κ°–μΆ˜ ν•œκ΅­μ–΄ μš°μ„  AI 개발 ν•˜λ„€μŠ€.",
5
5
  "keywords": [
6
6
  "leerness",