leerness 1.9.195 β 1.9.196
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 +70 -0
- package/README.md +3 -3
- package/bin/harness.js +69 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.196 β 2026-05-21
|
|
4
|
+
|
|
5
|
+
**π DμΆ (μ₯κΈ° λ§₯λ½ μ μ§) λ³΄κ° β 7μΌ+ μ₯κΈ° μ 체 + 30μΌ+ lessons νκ³ + ScheduleWakeup miss detector.**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 126 λΌμ΄λ. μ¬μ©μ λͺ
μ:
|
|
8
|
+
> *"λ€μ λΌμ΄λ μ§ννκ³ , ScheduleWakeup κ° μ μμ μΌλ‘ μλνλλ‘ μ‘°μ·¨λ₯Ό μ·¨ν΄μ€"*
|
|
9
|
+
|
|
10
|
+
5μΆ λ§€νΈλ¦μ€ λ§μ§λ§ λ―Έλ³΄κ° μΆμΈ **DμΆ (9.5/10 β λͺ©ν 10/10)** + μ¬μ©μ λͺ
μ ScheduleWakeup μμ ν.
|
|
11
|
+
|
|
12
|
+
### 1. DμΆ ν΅μ¬ β μ₯κΈ° μ 체 + 30μΌ+ νκ³ (handoff μλ)
|
|
13
|
+
**7μΌ+ critical λ¨κ³** (24h+ lazy λ€μ λ¨κ³):
|
|
14
|
+
```
|
|
15
|
+
## β μ§μ² μ 체 κ°μ§ (1.9.194 EμΆ) β progress-tracker λ§μ§λ§ λ³λ 8d μ
|
|
16
|
+
...
|
|
17
|
+
π΄ 7μΌ+ μ₯κΈ° μ 체 (8d) β μ₯κΈ° λ§₯λ½ μμ€ μν (1.9.196 DμΆ)
|
|
18
|
+
β μ¦μ νκ³ : leerness retro . --since 8d
|
|
19
|
+
β λλ archive: leerness task drop T-XXXX
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**30μΌ+ μ₯κΈ° lessons νκ³ ** (long-term memory recall):
|
|
23
|
+
- handoff keyword λ§€μΉ + lessons.md 30μΌ+ μ λΈλ‘
|
|
24
|
+
- μ μΉμ
: `## π μ₯κΈ° lessons νκ³ (1.9.196 DμΆ) β ν€μλ "X" κ΄λ ¨ 30μΌ+ N건`
|
|
25
|
+
- μνμ§ κ³Όκ±° κ΅ν μλ μ¬μκΈ° β κ°μ μ€μ λ°λ³΅ λ°©μ§
|
|
26
|
+
- λκΈ°: `--no-longterm-recall` / `LEERNESS_NO_LONGTERM_RECALL=1`
|
|
27
|
+
|
|
28
|
+
### 2. ScheduleWakeup μμ ν (μ¬μ©μ λͺ
μ) β λ€μΈ΅ redundancy
|
|
29
|
+
**Layer 1**: λ μ§§μ ScheduleWakeup (1.9.193λΆν° 900s β **270s** β 5λΆ cache μμ μ μ§)
|
|
30
|
+
**Layer 2**: CronCreate every 13min (durable: false) β primary λλ½ μ backup
|
|
31
|
+
**Layer 3**: handoffμ wakeup miss detector β 60λΆ+ 무 νλ μ μλ¦Ό
|
|
32
|
+
```
|
|
33
|
+
## β° ScheduleWakeup miss μμ¬ (1.9.196) β λ§μ§λ§ νλ 90λΆ μ
|
|
34
|
+
μμ¨ λͺ¨λ μ μ cycle: ~15λΆ. 60λΆ μ΄μ 무 νλ β μμ€ν
sleep λλ wakeup λλ½
|
|
35
|
+
β μ¬κ°: μ¬μ©μκ° "λ€μ λΌμ΄λ" λλ "/loop" μ
λ ₯
|
|
36
|
+
```
|
|
37
|
+
λκΈ°: `LEERNESS_NO_WAKEUP_MISS=1`
|
|
38
|
+
|
|
39
|
+
### 3. λμ νκ· (1.9.190~195) β λͺ¨λ μ μ§
|
|
40
|
+
- [1.9.195] _probeProviderEndpoints (provider universal probe)
|
|
41
|
+
- [1.9.194] _suggestNextActions (handoff next-actions)
|
|
42
|
+
- [1.9.193] agents multi consensus β lessons.md
|
|
43
|
+
- [1.9.192] _loadOfficialSkillCache + 24h μΊμ
|
|
44
|
+
- [1.9.191] ꡬ쑰 μ΅μ ν λ³΄κ³ μ 88/100
|
|
45
|
+
- [1.9.190] _selectOne/_selectMany Ctrl+C μ¦μ μ’
λ£
|
|
46
|
+
|
|
47
|
+
### 4. stress-v141 β 15/15 PASS
|
|
48
|
+
- DμΆ λ³΄κ° (6: ν¨μ + 7μΌ+ + 30μΌ+ + miss detector + μμ μν¬μ€νμ΄μ€ ν΅ν©) + μ±λ₯ (2) + λμ νκ· (7)
|
|
49
|
+
- μ±λ₯: --version cold start avg **709 ms** Β· MCP 54 λꡬ **534 ms**
|
|
50
|
+
|
|
51
|
+
### 5. 5μΆ λ§€νΈλ¦μ€ λ³λ
|
|
52
|
+
| μΆ | 1.9.195 | 1.9.196 | Ξ |
|
|
53
|
+
|---|---|---|---|
|
|
54
|
+
| D. μ₯κΈ° λ§₯λ½ μ μ§ | 9.5/10 | **10/10** | +0.5 (7μΌ+ critical + 30μΌ+ recall + miss detector) |
|
|
55
|
+
| μ’
ν© | 46.5/50 (93%) | **47/50 (94%)** | +1% |
|
|
56
|
+
|
|
57
|
+
### 6. 5μΆ λͺ¨λ λ³΄κ° μλ£
|
|
58
|
+
| μΆ | μμ | νμ¬ | Ξ |
|
|
59
|
+
|---|---|---|---|
|
|
60
|
+
| A. λ²μ© AI νλ€μ€ | 9 | **9.5** | +0.5 (1.9.195 probe) |
|
|
61
|
+
| B. λ©ν° Sub-Agent | 8.5 | **9** | +0.5 (1.9.193 consensus lessons) |
|
|
62
|
+
| C. 곡μ μ€ν¬ μλ | 8 | **9** | +1 (1.9.192 official catalog) |
|
|
63
|
+
| D. μ₯κΈ° λ§₯λ½ μ μ§ | 9.5 | **10** | +0.5 (1.9.196 7μΌ+/30μΌ+ recall) |
|
|
64
|
+
| E. κ²μΌλ¦ λ°©μ§ | 9 | **9.5** | +0.5 (1.9.194 next-actions) |
|
|
65
|
+
| **μ’
ν©** | 44/50 (88%) | **47/50 (94%)** | **+6%** |
|
|
66
|
+
|
|
67
|
+
### 7. μλ release νλ¦
|
|
68
|
+
- main μλ push **58 λΌμ΄λ μ°μ** (1.9.140~196)
|
|
69
|
+
- npm publish μλ (1.9.178~)
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
3
73
|
## 1.9.195 β 2026-05-21
|
|
4
74
|
|
|
5
75
|
**π AμΆ (λ²μ© AI νλ€μ€) λ³΄κ° β `leerness provider probe` μ κ· λͺ
λ Ή (CLI/endpoint/API ν€ 3μ’
μλ κ°μ§).**
|
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.196 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π 5μΆ λ³΄κ° μλ£ (94/100) Β· 30μΌ+ recall Β· 126 λΌμ΄λ β
|
|
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.196';
|
|
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 μ²λ¦¬).
|
|
@@ -3704,10 +3704,78 @@ function handoff(root) {
|
|
|
3704
3704
|
log(dim(` β λ³κ²½: leerness task update ${latestRow.id} --status in-progress λλ --status completed`));
|
|
3705
3705
|
log(dim(` β νκ³ : leerness lazy detect --json`));
|
|
3706
3706
|
log('');
|
|
3707
|
+
// 1.9.196: DμΆ (μ₯κΈ° λ§₯λ½) λ³΄κ° β 7μΌ+ critical λ¨κ³ μλ¦Ό + μλ νκ³ κΆμ₯
|
|
3708
|
+
if (ageHours >= 24 * 7) {
|
|
3709
|
+
const days = Math.floor(ageHours / 24);
|
|
3710
|
+
log(yel(` π΄ 7μΌ+ μ₯κΈ° μ 체 (${days}d) β μ₯κΈ° λ§₯λ½ μμ€ μν (1.9.196 DμΆ)`));
|
|
3711
|
+
log(dim(` β μ¦μ νκ³ : leerness retro . --since ${days}d`));
|
|
3712
|
+
log(dim(` β λλ archive: leerness task drop ${latestRow.id}`));
|
|
3713
|
+
log('');
|
|
3714
|
+
}
|
|
3707
3715
|
}
|
|
3708
3716
|
}
|
|
3709
3717
|
} catch {}
|
|
3710
3718
|
}
|
|
3719
|
+
// 1.9.196: DμΆ (μ₯κΈ° λ§₯λ½ μ μ§) λ³΄κ° β 30μΌ+ μ lessons μλ νκ³ (long-term memory recall)
|
|
3720
|
+
// keyword μ λ§€μΉλλ 30μΌ+ μ€λλ lessons 1건 λ
ΈμΆ β μνμ§ κ³Όκ±° κ΅ν μ¬μκΈ°
|
|
3721
|
+
// λκΈ°: --no-longterm-recall λλ LEERNESS_NO_LONGTERM_RECALL=1
|
|
3722
|
+
if (!has('--no-longterm-recall') && !has('--quiet') && process.env.LEERNESS_NO_LONGTERM_RECALL !== '1') {
|
|
3723
|
+
try {
|
|
3724
|
+
const lp = lessonsPath(root);
|
|
3725
|
+
if (exists(lp)) {
|
|
3726
|
+
const lt = read(lp);
|
|
3727
|
+
const cutoff = Date.now() - 30 * 24 * 3600 * 1000;
|
|
3728
|
+
const fuzzyRe = new RegExp(escapeRegex(keyword.slice(0, Math.max(4, Math.floor(keyword.length * 0.7)))), 'i');
|
|
3729
|
+
// ### YYYY-MM-DD λΈλ‘ λΆλ¦¬ β 30μΌ+ μ΄μ + keyword λ§€μΉ
|
|
3730
|
+
const blocks = lt.split(/\n### /).slice(1).map(b => '### ' + b);
|
|
3731
|
+
const matches = [];
|
|
3732
|
+
for (const b of blocks) {
|
|
3733
|
+
const m = b.match(/^### (\d{4}-\d{2}-\d{2})/);
|
|
3734
|
+
if (!m) continue;
|
|
3735
|
+
const blockDate = new Date(m[1]).getTime();
|
|
3736
|
+
if (isNaN(blockDate) || blockDate > cutoff) continue;
|
|
3737
|
+
if (fuzzyRe.test(b)) matches.push({ date: m[1], title: (b.split('\n')[0] || '').slice(0, 80) });
|
|
3738
|
+
}
|
|
3739
|
+
if (matches.length > 0) {
|
|
3740
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
3741
|
+
const blu = s => isTty ? `\x1b[34m${s}\x1b[0m` : s;
|
|
3742
|
+
const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
3743
|
+
const oldest = matches[matches.length - 1];
|
|
3744
|
+
const ageDays = Math.floor((Date.now() - new Date(oldest.date).getTime()) / (24 * 3600 * 1000));
|
|
3745
|
+
log(blu(`## π μ₯κΈ° lessons νκ³ (1.9.196 DμΆ) β ν€μλ "${keyword}" κ΄λ ¨ 30μΌ+ ${matches.length}건`));
|
|
3746
|
+
log(dim(` μ΅μ€λλ: ${oldest.date} (${ageDays}μΌ μ ) β ${oldest.title}`));
|
|
3747
|
+
if (matches.length > 1) {
|
|
3748
|
+
log(dim(` μ΅κ·Ό30μΌ+: ${matches[0].date} β ${matches[0].title}`));
|
|
3749
|
+
}
|
|
3750
|
+
log(dim(` β μ 체 νκ³ : cat .harness/lessons.md`));
|
|
3751
|
+
log('');
|
|
3752
|
+
}
|
|
3753
|
+
}
|
|
3754
|
+
} catch {}
|
|
3755
|
+
}
|
|
3756
|
+
}
|
|
3757
|
+
}
|
|
3758
|
+
} catch {}
|
|
3759
|
+
}
|
|
3760
|
+
// 1.9.196: ScheduleWakeup miss detector β μμ¨ λͺ¨λ μ¬μ©μ λͺ
μ "λͺ»μΌμ΄λλ κ²½μ° μ’
μ’
μμ" (1.9.191) νμ
|
|
3761
|
+
// λ§μ§λ§ session μκ° (handoff mtime λλ task-log λ§μ§λ§ entry) > 2h ago μ μλ¦Ό
|
|
3762
|
+
// λκΈ°: LEERNESS_NO_WAKEUP_MISS=1
|
|
3763
|
+
if (process.env.LEERNESS_NO_WAKEUP_MISS !== '1' && !has('--quiet') && !has('--no-wakeup-miss')) {
|
|
3764
|
+
try {
|
|
3765
|
+
const tlp = taskLogPath(root);
|
|
3766
|
+
if (exists(tlp)) {
|
|
3767
|
+
const ageMs = Date.now() - fs.statSync(tlp).mtimeMs;
|
|
3768
|
+
const ageMin = Math.floor(ageMs / 60000);
|
|
3769
|
+
// μμ¨ λͺ¨λλ ~15λΆ cycle. 60λΆ μ΄μ 무 νλμ΄λ©΄ wakeup miss μμ¬ (CronCreate 13min λ°±μ
κ³Ό ν¨κ»)
|
|
3770
|
+
if (ageMin >= 60) {
|
|
3771
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
3772
|
+
const yel = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
3773
|
+
const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
3774
|
+
const label = ageMin < 120 ? `${ageMin}λΆ` : (ageMin < 1440 ? `${Math.floor(ageMin/60)}μκ°` : `${Math.floor(ageMin/1440)}μΌ`);
|
|
3775
|
+
log(yel(`## β° ScheduleWakeup miss μμ¬ (1.9.196) β λ§μ§λ§ νλ ${label} μ `));
|
|
3776
|
+
log(dim(` μμ¨ λͺ¨λ μ μ cycle: ~15λΆ. 60λΆ μ΄μ 무 νλ β μμ€ν
sleep λλ wakeup λλ½ κ°λ₯μ±`));
|
|
3777
|
+
log(dim(` β μ¬κ°: μ¬μ©μκ° "λ€μ λΌμ΄λ" λλ "/loop" μ
λ ₯`));
|
|
3778
|
+
log('');
|
|
3711
3779
|
}
|
|
3712
3780
|
}
|
|
3713
3781
|
} catch {}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.196",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|