leerness 1.9.199 β 1.9.201
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 +102 -0
- package/README.md +3 -3
- package/bin/harness.js +112 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,107 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.201 β 2026-05-22
|
|
4
|
+
|
|
5
|
+
**π― EμΆ (κ²μΌλ¦ λ°©μ§) 9.5/10 β 10/10 λ³΄κ° β next-action queue + leerness next-action take λͺ
λ Ή.**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 131 λΌμ΄λ. 200 λ§μΌμ€ν€ νμ β 100% λ§€νΈλ¦μ€λ₯Ό ν₯ν λ€μ λ¨κ³.
|
|
8
|
+
|
|
9
|
+
### μ¬μ©μ μλ μ λ ¬ (1.9.191 verbatim)
|
|
10
|
+
> *"κ²μΌλ¦ λ°©μ§λ±λ± μ΅κ³ μ λꡬ"*
|
|
11
|
+
|
|
12
|
+
### 1. handoff next-action μλ νμ (EμΆ ν΅μ¬)
|
|
13
|
+
- `_suggestNextActions` (1.9.194) κ° μ μν νλͺ©μ `.harness/next-action-queue.json` μ μλ μ μ₯
|
|
14
|
+
- μ€λ³΅ λ°©μ§ (μ΄λ―Έ μλ title skip), μ΅κ·Ό 20κ°λ§ μ μ§
|
|
15
|
+
- ν¨μ: `_enqueueNextActions(root, actions)` / `_loadNextActionQueue(root)` / `_writeNextActionQueue(root, queue)`
|
|
16
|
+
|
|
17
|
+
### 2. `leerness next-action` μ κ· CLI
|
|
18
|
+
- `next-action list [--json]` β ν μ 체 (default sub)
|
|
19
|
+
- `next-action take [N]` β νμμ κ°μ Έμμ `leerness task add` μλ νΈμΆ (N μλ΅ μ μ΅μ )
|
|
20
|
+
- `next-action add "<text>"` β μλ μΆκ°
|
|
21
|
+
- `next-action clear` β ν μ΄κΈ°ν
|
|
22
|
+
|
|
23
|
+
### 3. 1-step κ²μΌλ¦ λ°©μ§ νλ¦
|
|
24
|
+
```
|
|
25
|
+
$ leerness handoff .
|
|
26
|
+
## π― λ€μ λ¨κ³ μλ μ μ (1.9.194 EμΆ) β ν€μλ "X"
|
|
27
|
+
π‘ κ³Όκ±° μ€ν¨ ννΌ β lessons.md "X" κ΄λ ¨ N건
|
|
28
|
+
`leerness lessons --auto --path .`
|
|
29
|
+
β μ¦μ task add: leerness next-action take (ν +1건 μ μ₯λ¨, 1.9.201)
|
|
30
|
+
|
|
31
|
+
$ leerness next-action take
|
|
32
|
+
β task μΆκ°: T-0042 β "κ³Όκ±° μ€ν¨ ννΌ β lessons.md..."
|
|
33
|
+
π‘ μ€ν λͺ
λ Ή: leerness lessons --auto --path .
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 4. λμ νκ· (1.9.195~200) β λͺ¨λ μ μ§
|
|
37
|
+
|
|
38
|
+
### 5. stress-v146 β 16/16 PASS
|
|
39
|
+
- next-action CLI (7) + μμ μν¬μ€νμ΄μ€ ν΅ν© (1) + μ±λ₯ (2) + λμ νκ· (7)
|
|
40
|
+
- μ±λ₯: --version cold start avg **436 ms** Β· MCP 54 λꡬ **442 ms**
|
|
41
|
+
|
|
42
|
+
### 6. 5μΆ λ§€νΈλ¦μ€ λ³λ
|
|
43
|
+
| μΆ | 1.9.200 | 1.9.201 | Ξ |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| E. κ²μΌλ¦ λ°©μ§ | 9.5/10 | **10/10** β | +0.5 (next-action 1-step μλ task add) |
|
|
46
|
+
| **μ’
ν©** | 48/50 (96%) | **48.5/50 (97%)** | +1% |
|
|
47
|
+
|
|
48
|
+
### 7. 5μΆ λͺ¨λ 9 μ΄μ + 3μΆ 10/10
|
|
49
|
+
- A 10/10 β (1.9.197)
|
|
50
|
+
- D 10/10 β (1.9.196)
|
|
51
|
+
- E 10/10 β (1.9.201) β μ κ·
|
|
52
|
+
- B 9.5/10 (1.9.198)
|
|
53
|
+
- C 9.0/10 (1.9.192)
|
|
54
|
+
|
|
55
|
+
### 8. μλ release νλ¦
|
|
56
|
+
- main μλ push **63 λΌμ΄λ μ°μ** (1.9.140~201)
|
|
57
|
+
- npm publish μλ (1.9.178~)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 1.9.200 β 2026-05-22
|
|
62
|
+
|
|
63
|
+
**π 200 λ§μΌμ€ν€ β 60 λΌμ΄λ μμ¨ λμ + 5μΆ λ§€νΈλ¦μ€ 96/100.**
|
|
64
|
+
|
|
65
|
+
### λμ μ±κ³Ό
|
|
66
|
+
- **62 λΌμ΄λ μ°μ** main μλ push (1.9.140~200)
|
|
67
|
+
- **23 λΌμ΄λ μ°μ** μλ npm publish (1.9.178~200)
|
|
68
|
+
- **8 λΌμ΄λ μ°μ** 5μΆ λ§€νΈλ¦μ€ λ³΄κ° (1.9.192~199): **88% β 96%**
|
|
69
|
+
- μ¬μ©μ λͺ
μ 7건 λͺ¨λ μ¦μ λμ
|
|
70
|
+
|
|
71
|
+
### 5μΆ λ§€νΈλ¦μ€ (1.9.191 β 1.9.200)
|
|
72
|
+
| μΆ | μμ | νμ¬ | Ξ |
|
|
73
|
+
|---|---|---|---|
|
|
74
|
+
| A. λ²μ© AI νλ€μ€ | 9.0 | **10.0** β | +1.0 |
|
|
75
|
+
| B. λ©ν° Sub-Agent μ€μΌμ€νΈλΌ | 8.5 | **9.5** | +1.0 |
|
|
76
|
+
| C. 곡μ νμ€ μ€ν¬ μλ νμ© | 8.0 | **9.0** | +1.0 |
|
|
77
|
+
| D. μ₯κΈ° λ§₯λ½ μ μ§ | 9.5 | **10.0** β | +0.5 |
|
|
78
|
+
| E. κ²μΌλ¦ λ°©μ§ | 9.0 | **9.5** | +0.5 |
|
|
79
|
+
| **μ’
ν©** | **44/50 (88%)** | **48/50 (96%)** | **+8%** |
|
|
80
|
+
|
|
81
|
+
### λ§μΌμ€ν€ λ³΄κ³ μ
|
|
82
|
+
- `_reports/milestone-1.9.200-60-rounds.md` (λΉκ³΅κ°)
|
|
83
|
+
- 60 λΌμ΄λ μ§μ²ν, ν΅μ¬ λ§μΌμ€ν€ 8건, μ¬μ©μ λͺ
μ λμ 7건, ν₯ν λ°©ν₯
|
|
84
|
+
|
|
85
|
+
### μ κ· κΈ°λ₯ (1.9.192~199) μμ½
|
|
86
|
+
1. **1.9.192**: 곡μ catalog μλ λ
ΈμΆ + 24h μΊμ (CμΆ μμ)
|
|
87
|
+
2. **1.9.193**: agents multi consensus β lessons.md μλ
|
|
88
|
+
3. **1.9.194**: handoff next-actions 7 ν΄λ¦¬μ€ν± + 24h+ lazy
|
|
89
|
+
4. **1.9.195**: provider universal probe (13 backend)
|
|
90
|
+
5. **1.9.196**: 7μΌ+/30μΌ+ recall + ScheduleWakeup miss detector
|
|
91
|
+
6. **1.9.197**: provider probe handoff μλ ν΅ν© (60λΆ μΊμ)
|
|
92
|
+
7. **1.9.198**: multi-agent consensus μ΄λ ₯ β best agent μΆμ²
|
|
93
|
+
8. **1.9.199**: last-handoff μ λ° μΈ‘μ + R-0001 κ°ν μλ¦Ό
|
|
94
|
+
|
|
95
|
+
### stress-v145 β 13/13 PASS
|
|
96
|
+
- λ§μΌμ€ν€ λ³΄κ³ μ κ²μ¦ 4 + μ±λ₯ 2 + λμ νκ· 7
|
|
97
|
+
- μ±λ₯: --version cold start avg **1022 ms** Β· MCP 54 λꡬ **789 ms**
|
|
98
|
+
|
|
99
|
+
### μλ release νλ¦
|
|
100
|
+
- main μλ push **62 λΌμ΄λ μ°μ** (1.9.140~200)
|
|
101
|
+
- npm publish μλ (1.9.178~)
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
3
105
|
## 1.9.199 β 2026-05-21
|
|
4
106
|
|
|
5
107
|
**β° wakeup miss μλ ν볡 κ°ν β last-handoff timestamp μ λ° μΈ‘μ + R-0001 λ£° (25λΆ) λλΉ κ°ν μλ¦Ό.**
|
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) []() []() []() []() []() []() [-brightgreen)]() []() []() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
β βββ ββββββ ββββββ ββββββββββββββββββββββββ ββββββββ β
|
|
13
13
|
β βββββββββββββββββββββββββββ ββββββ ββββββββββββββββββββββ β
|
|
14
14
|
β βββββββββββββββββββββββββββ ββββββ βββββββββββββββββββββ β
|
|
15
|
-
β v1.9.
|
|
15
|
+
β v1.9.201 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π― next-action 1step Β· λ§€νΈλ¦μ€ 97/100 Β· AΒ·DΒ·E 10/10 β
|
|
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.
|
|
10
|
+
const VERSION = '1.9.201';
|
|
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 μ²λ¦¬).
|
|
@@ -1733,6 +1733,110 @@ function _loadMultiAgentConsensusHistory(root, keyword) {
|
|
|
1733
1733
|
} catch { return []; }
|
|
1734
1734
|
}
|
|
1735
1735
|
|
|
1736
|
+
// 1.9.201: EμΆ (κ²μΌλ¦ λ°©μ§) 9.5β10 λ³΄κ° β next-action queue μλ μ μ₯ + take λͺ
λ Ή
|
|
1737
|
+
// handoff κ° μ μν next-action top νλͺ©μ .harness/next-action-queue.json μ μ μ₯ β
|
|
1738
|
+
// `leerness next-action take` νΈμΆ μ νμμ pop + leerness task add μλ μ€ν β
|
|
1739
|
+
// AI/μ¬μ©μκ° μ§μ μΆμ /νμ΄ν μμ΄ 1-step μΌλ‘ task μ§μ
|
|
1740
|
+
function _nextActionQueuePath(root) { return path.join(root, '.harness', 'next-action-queue.json'); }
|
|
1741
|
+
function _loadNextActionQueue(root) {
|
|
1742
|
+
try {
|
|
1743
|
+
const fp = _nextActionQueuePath(root);
|
|
1744
|
+
if (!exists(fp)) return { queue: [], at: null };
|
|
1745
|
+
const j = JSON.parse(read(fp));
|
|
1746
|
+
return { queue: Array.isArray(j.queue) ? j.queue : [], at: j.at || null };
|
|
1747
|
+
} catch { return { queue: [], at: null }; }
|
|
1748
|
+
}
|
|
1749
|
+
function _writeNextActionQueue(root, queue) {
|
|
1750
|
+
try {
|
|
1751
|
+
mkdirp(path.join(root, '.harness'));
|
|
1752
|
+
writeUtf8(_nextActionQueuePath(root), JSON.stringify({ queue, at: new Date().toISOString() }, null, 2));
|
|
1753
|
+
return true;
|
|
1754
|
+
} catch { return false; }
|
|
1755
|
+
}
|
|
1756
|
+
// handoff μμ μ μλ next-action λ€μ νμ μλ μ μ₯ (μ€λ³΅ λ°©μ§: μ΄λ―Έ μλ title μ skip)
|
|
1757
|
+
function _enqueueNextActions(root, actions) {
|
|
1758
|
+
if (!Array.isArray(actions) || actions.length === 0) return 0;
|
|
1759
|
+
const state = _loadNextActionQueue(root);
|
|
1760
|
+
const existingTitles = new Set(state.queue.map(a => a.title));
|
|
1761
|
+
let added = 0;
|
|
1762
|
+
for (const a of actions) {
|
|
1763
|
+
if (existingTitles.has(a.title)) continue;
|
|
1764
|
+
state.queue.push({ ...a, addedAt: new Date().toISOString() });
|
|
1765
|
+
existingTitles.add(a.title);
|
|
1766
|
+
added++;
|
|
1767
|
+
}
|
|
1768
|
+
// μ΅κ·Ό 20κ°λ§ μ μ§
|
|
1769
|
+
if (state.queue.length > 20) state.queue = state.queue.slice(-20);
|
|
1770
|
+
if (added > 0) _writeNextActionQueue(root, state.queue);
|
|
1771
|
+
return added;
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
// 1.9.201: next-action CLI λͺ
λ Ή β handoff κ° μ μ₯ν queue μμ take/list/clear
|
|
1775
|
+
async function nextActionCmd(root, sub, ...rest) {
|
|
1776
|
+
root = absRoot(root);
|
|
1777
|
+
const state = _loadNextActionQueue(root);
|
|
1778
|
+
if (!sub || sub === 'list') {
|
|
1779
|
+
if (has('--json')) { log(JSON.stringify(state, null, 2)); return; }
|
|
1780
|
+
log(`# leerness next-action list (1.9.201)`);
|
|
1781
|
+
if (state.queue.length === 0) {
|
|
1782
|
+
log(' (ν λΉμ΄μμ)');
|
|
1783
|
+
log(` β handoff κ° μλμΌλ‘ νμ μ μ₯ν©λλ€. \`leerness handoff .\` ν λ€μ νμΈ.`);
|
|
1784
|
+
return;
|
|
1785
|
+
}
|
|
1786
|
+
log(` ν ${state.queue.length}건 (μμ±: ${state.at || '?'})`);
|
|
1787
|
+
log('');
|
|
1788
|
+
for (let i = 0; i < state.queue.length; i++) {
|
|
1789
|
+
const a = state.queue[i];
|
|
1790
|
+
log(` [${i}] ${a.icon || 'β’'} ${a.title}`);
|
|
1791
|
+
if (a.command) log(` \`${a.command}\``);
|
|
1792
|
+
}
|
|
1793
|
+
log('');
|
|
1794
|
+
log(` β κ°μ Έμ€κΈ°: leerness next-action take [N] (N μλ΅ μ μ΅μ [${state.queue.length - 1}])`);
|
|
1795
|
+
return;
|
|
1796
|
+
}
|
|
1797
|
+
if (sub === 'take') {
|
|
1798
|
+
const n = rest[0] !== undefined ? Number(rest[0]) : state.queue.length - 1;
|
|
1799
|
+
if (state.queue.length === 0) { fail('ν λΉμ΄μμ β handoff λ¨Όμ μ€ν'); return process.exit(1); }
|
|
1800
|
+
if (isNaN(n) || n < 0 || n >= state.queue.length) { fail(`μλͺ»λ index: ${n} (0~${state.queue.length - 1})`); return process.exit(1); }
|
|
1801
|
+
const action = state.queue[n];
|
|
1802
|
+
log(`# leerness next-action take [${n}] (1.9.201)`);
|
|
1803
|
+
log(` ${action.icon || 'β’'} ${action.title}`);
|
|
1804
|
+
if (action.command) log(` \`${action.command}\``);
|
|
1805
|
+
// task add μλ νΈμΆ
|
|
1806
|
+
try {
|
|
1807
|
+
const taskTitle = action.title.replace(/^[^\wκ°-ν£]+/, '').slice(0, 100);
|
|
1808
|
+
// νμμ μ κ±° β write
|
|
1809
|
+
state.queue.splice(n, 1);
|
|
1810
|
+
_writeNextActionQueue(root, state.queue);
|
|
1811
|
+
// leerness task add νΈμΆ
|
|
1812
|
+
const taskResult = cp.spawnSync(process.execPath, [__filename, 'task', 'add', taskTitle, '--path', root], { encoding: 'utf8', timeout: 8000 });
|
|
1813
|
+
if (taskResult.status === 0) {
|
|
1814
|
+
const m = (taskResult.stdout || '').match(/T-\d{4}/);
|
|
1815
|
+
log(` β task μΆκ°: ${m ? m[0] : '?'} β "${taskTitle}"`);
|
|
1816
|
+
if (action.command) log(` π‘ μ€ν λͺ
λ Ή: ${action.command}`);
|
|
1817
|
+
} else {
|
|
1818
|
+
log(` β task add μ€ν¨ (exit ${taskResult.status}) β μλ: leerness task add "${taskTitle}"`);
|
|
1819
|
+
}
|
|
1820
|
+
} catch (e) {
|
|
1821
|
+
log(` β μ²λ¦¬ μ€ν¨: ${e.message}`);
|
|
1822
|
+
}
|
|
1823
|
+
return;
|
|
1824
|
+
}
|
|
1825
|
+
if (sub === 'clear') {
|
|
1826
|
+
_writeNextActionQueue(root, []);
|
|
1827
|
+
ok(`next-action ν μ΄κΈ°ν (${state.queue.length}건 μ κ±°)`);
|
|
1828
|
+
return;
|
|
1829
|
+
}
|
|
1830
|
+
if (sub === 'add') {
|
|
1831
|
+
const title = rest.filter(x => !x.startsWith('-')).join(' ').trim();
|
|
1832
|
+
if (!title) return fail('μ¬μ©λ²: leerness next-action add "<text>"');
|
|
1833
|
+
_enqueueNextActions(root, [{ icon: 'π', title, command: null }]);
|
|
1834
|
+
ok(`next-action μΆκ°: ${title}`);
|
|
1835
|
+
return;
|
|
1836
|
+
}
|
|
1837
|
+
fail(`μ μ μλ sub: ${sub} (list / take / clear / add)`);
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1736
1840
|
// 1.9.194: EμΆ (κ²μΌλ¦ λ°©μ§) β handoff μμ λ€μ λ¨κ³ 1-3κ° μλ μ μ
|
|
1737
1841
|
// νμ¬ in-progress task description + Memory Surface (decisions/lessons/plan) μ‘°ν© β
|
|
1738
1842
|
// "λ€μ λ¨κ³λ‘ 무μμ ν μ§" μΆλ‘ (μ¬μ©μ/AI μ§μ μ
λ ₯ μμ΄ μ¦μ λ
ΈμΆ)
|
|
@@ -3765,6 +3869,11 @@ function handoff(root) {
|
|
|
3765
3869
|
log(dim(` ${a.icon} ${a.title}`));
|
|
3766
3870
|
if (a.command) log(dim(` \`${a.command}\``));
|
|
3767
3871
|
}
|
|
3872
|
+
// 1.9.201: queue μλ μ μ₯ β `leerness next-action take` λ‘ μ¦μ task add κ°λ₯
|
|
3873
|
+
try {
|
|
3874
|
+
const added = _enqueueNextActions(root, actions);
|
|
3875
|
+
if (added > 0) log(dim(` β μ¦μ task add: leerness next-action take (ν +${added}건 μ μ₯λ¨, 1.9.201)`));
|
|
3876
|
+
} catch {}
|
|
3768
3877
|
log(dim(` β μ§μ μ
λ ₯: leerness next-action add "<text>"`));
|
|
3769
3878
|
log('');
|
|
3770
3879
|
}
|
|
@@ -14777,6 +14886,8 @@ async function main() {
|
|
|
14777
14886
|
if (cmd === 'brainstorm') return brainstormCmd(arg('--path', process.cwd()), args.slice(1).filter(x => !x.startsWith('-')).join(' '));
|
|
14778
14887
|
if (cmd === 'roadmap' && args[1] === 'auto') return roadmapAutoCmd(arg('--path', process.cwd()), args[2]);
|
|
14779
14888
|
if (cmd === 'roadmap') return roadmapCmd(args[1] || process.cwd());
|
|
14889
|
+
// 1.9.201: next-action queue CLI (EμΆ 9.5β10)
|
|
14890
|
+
if (cmd === 'next-action') return nextActionCmd(arg('--path', process.cwd()), args[1], ...args.slice(2));
|
|
14780
14891
|
if (cmd === 'rule' && args[1] === 'add') return ruleAdd(arg('--path', process.cwd()), args.slice(2).filter(x => !x.startsWith('-')).join(' '));
|
|
14781
14892
|
if (cmd === 'rule' && args[1] === 'list') return ruleList(arg('--path', process.cwd()));
|
|
14782
14893
|
if (cmd === 'rule' && args[1] === 'remove') return ruleRemove(arg('--path', process.cwd()), args[2]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.201",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|