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 +45 -0
- package/README.md +3 -3
- package/bin/harness.js +37 -1
- package/package.json +1 -1
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
|
-
[](https://www.npmjs.com/package/leerness) [](https://www.npmjs.com/package/leerness) []() []() []() []() []() []() []() []() []() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
β βββ ββββββ ββββββ ββββββββββββββββββββββββ ββββββββ β
|
|
13
13
|
β βββββββββββββββββββββββββββ ββββββ ββββββββββββββββββββββ β
|
|
14
14
|
β βββββββββββββββββββββββββββ ββββββ βββββββββββββββββββββ β
|
|
15
|
-
β v1.9.
|
|
15
|
+
β v1.9.177 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
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.
|
|
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.
|
|
3
|
+
"version": "1.9.177",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|