leerness 1.9.224 β 1.9.225
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 +37 -0
- package/README.md +3 -3
- package/bin/harness.js +40 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.225 β 2026-05-22
|
|
4
|
+
|
|
5
|
+
**π§ drift check --auto-fix delivered ν΅ν© + LEERNESS_AUTO_APPLY_DELIVERED env opt-in.**
|
|
6
|
+
|
|
7
|
+
### 1. `drift check --auto-fix` delivered ν¨ν΄ μλ μ μ© (1.9.82 ν¨ν΄ νμ₯)
|
|
8
|
+
- 1.9.82 보μ μ νΈ β audit --fix μλ νΈμΆ ν¨ν΄μ delivered μμ€ν
μλ μ μ©
|
|
9
|
+
- `--auto-fix` νλκ·Έ μ¬μ© μ `_detectDeliveredRequests` β ν보 μλ μλ£
|
|
10
|
+
- `autoCompleteReason: 'drift-auto-fix-1.9.225'` μΆμ
|
|
11
|
+
- drift score κ°μ€μΉ κ°μ§ λ―Έλ΅ μ νΈ μ κ±° β drift ν볡 μμ±λ ν₯μ
|
|
12
|
+
|
|
13
|
+
### 2. `LEERNESS_AUTO_APPLY_DELIVERED=1` env opt-in (μμ¨ λͺ¨λμ©)
|
|
14
|
+
- handoff 첫 νΈμΆ μ μλ μ μ© (`autoCompleteReason: 'env-auto-apply-1.9.225'`)
|
|
15
|
+
- μμ¨ λͺ¨λμμ λ§€ λΌμ΄λλ§λ€ μλ μ 리 β AIκ° μ κ²½ μΈ νμ X
|
|
16
|
+
- env λ―Έμ€μ μ κΈ°μ‘΄ λμ (μλ΄λ§)
|
|
17
|
+
|
|
18
|
+
### 3. handoff λ³Έλ¬Έ κ°μ΄λ μΆκ°
|
|
19
|
+
- 1.9.224 λ³Έλ¬Έ μΉμ
μ `β μμ¨ λͺ¨λ μλ μ μ©: export LEERNESS_AUTO_APPLY_DELIVERED=1` μλ΄
|
|
20
|
+
- μ¬μ©μκ° μμ¨ λͺ¨λ opt-in λ°κ²¬νκΈ° μ½κ²
|
|
21
|
+
|
|
22
|
+
### 4. μ¬μ©μ μμ² μλ μλ£ μμ€ν
β 4 λΌμ΄λ λμ μμ±
|
|
23
|
+
- 1.9.223 CLI auto-complete (μλ νΈμΆ)
|
|
24
|
+
- 1.9.224 MCP 61 + handoff λ³Έλ¬Έ + session close μλ μ μ©
|
|
25
|
+
- 1.9.225 drift --auto-fix ν΅ν© + env opt-in μλν
|
|
26
|
+
|
|
27
|
+
### 5. λμ νκ· (1.9.207~224) β λͺ¨λ μ μ§
|
|
28
|
+
|
|
29
|
+
### 6. stress-v170 β 14/14 PASS
|
|
30
|
+
- 1.9.225 (5): VERSION + drift auto-fix ν΅ν© + drift κΈ°λ³Έ 보쑴 + env auto-apply + env μμΌλ©΄ λ―Έμ μ©
|
|
31
|
+
- μ±λ₯ (2): cold_start avg 367ms / drift auto-fix 383ms
|
|
32
|
+
- λμ νκ· (7): 1.9.207~224
|
|
33
|
+
|
|
34
|
+
### 7. μλ release (87 λΌμ΄λ main-push streak Β· 48 λΌμ΄λ npm publish streak)
|
|
35
|
+
|
|
36
|
+
π§ **drift ν볡 μμ€ν
λμ κ°ν** (1.9.39/82/225 β 3 λΌμ΄λ)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
3
40
|
## 1.9.224 β 2026-05-22
|
|
4
41
|
|
|
5
42
|
**π MCP 61 λꡬ (leerness_requests_auto_complete) + handoff λ³Έλ¬Έ + session close --auto-apply-delivered.**
|
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.225 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π§ drift --auto-fix delivered + AUTO_APPLY env opt-in β
|
|
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.225';
|
|
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 μ²λ¦¬).
|
|
@@ -6141,8 +6141,25 @@ function handoff(root) {
|
|
|
6141
6141
|
|
|
6142
6142
|
// 1.9.224: handoff λ³Έλ¬Έ μλ λ
ΈμΆ β delivered ν¨ν΄ ν보 β₯ 1건 μ (1.9.223 νμ₯)
|
|
6143
6143
|
// "Round X.Y.Z β ꡬν μλ£" ν¨ν΄μ΄ λμ λλ©΄ λ³Έλ¬Έ μΉμ
μΌλ‘ μλ μλ΄ (ν€λλΌμΈλ§μΌλ‘λ λμΉκΈ° μ¬μ)
|
|
6144
|
+
// 1.9.225: LEERNESS_AUTO_APPLY_DELIVERED=1 env νμ± μ handoff 첫 νΈμΆμμ μλ μ μ© (μμ¨ λͺ¨λμ© opt-in)
|
|
6144
6145
|
try {
|
|
6145
|
-
|
|
6146
|
+
let delivered = _detectDeliveredRequests(root);
|
|
6147
|
+
const envAutoApply = process.env.LEERNESS_AUTO_APPLY_DELIVERED === '1';
|
|
6148
|
+
if (envAutoApply && delivered.candidates && delivered.candidates.length > 0) {
|
|
6149
|
+
let appliedCnt = 0;
|
|
6150
|
+
for (const c of delivered.candidates) {
|
|
6151
|
+
const u = _updateUserRequest(root, c.id, { status: 'completed', autoCompletedAt: new Date().toISOString(), autoCompleteReason: 'env-auto-apply-1.9.225' });
|
|
6152
|
+
if (u) appliedCnt++;
|
|
6153
|
+
}
|
|
6154
|
+
if (appliedCnt > 0) {
|
|
6155
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
6156
|
+
const gr5 = s => isTty ? `\x1b[32m${s}\x1b[0m` : s;
|
|
6157
|
+
log('');
|
|
6158
|
+
log(gr5(`## π₯ μ¬μ©μ μμ² μλ μλ£ (1.9.225, env LEERNESS_AUTO_APPLY_DELIVERED=1, ${appliedCnt}건)`));
|
|
6159
|
+
// μ μ© ν μ¬μ‘°ν
|
|
6160
|
+
delivered = _detectDeliveredRequests(root);
|
|
6161
|
+
}
|
|
6162
|
+
}
|
|
6146
6163
|
if (delivered.candidates && delivered.candidates.length > 0) {
|
|
6147
6164
|
const isTty = process.stdout && process.stdout.isTTY;
|
|
6148
6165
|
const cy4 = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
|
|
@@ -6158,6 +6175,7 @@ function handoff(root) {
|
|
|
6158
6175
|
}
|
|
6159
6176
|
log(dm4(` β κ²ν : leerness requests auto-complete`));
|
|
6160
6177
|
log(dm4(` β μ μ©: leerness requests auto-complete --apply (μμ μ 리)`));
|
|
6178
|
+
log(dm4(` β μμ¨ λͺ¨λ μλ μ μ©: export LEERNESS_AUTO_APPLY_DELIVERED=1 (1.9.225)`));
|
|
6161
6179
|
}
|
|
6162
6180
|
} catch {}
|
|
6163
6181
|
|
|
@@ -12867,6 +12885,26 @@ function driftCheckCmd(root, opts = {}) {
|
|
|
12867
12885
|
log(`β auto-fix 보μ ν볡 μ€λ₯: ${e.message}`);
|
|
12868
12886
|
}
|
|
12869
12887
|
}
|
|
12888
|
+
// 1.9.225: drift check --auto-fix μ delivered ν¨ν΄ μλ μ μ© ν΅ν© (1.9.223/224 μμ€ν
νμ)
|
|
12889
|
+
// μ¬μ©μ μμ²μ "ꡬν μλ£" ν¨ν΄μ΄ λμ λλ©΄ κ°μ§ λ―Έλ΅ μ νΈκ° drift score λ₯Ό κ°μ€μν¬ μ μμ β μλ μ 리.
|
|
12890
|
+
// 1.9.82 audit --fix ν¨ν΄κ³Ό λμΌ: --auto-fix μ μ¦μ μ μ©, μ μ© ν μ¬κ²μ¬.
|
|
12891
|
+
if (autoFix) {
|
|
12892
|
+
try {
|
|
12893
|
+
const delivered = _detectDeliveredRequests(root);
|
|
12894
|
+
if (delivered.candidates && delivered.candidates.length > 0) {
|
|
12895
|
+
log('');
|
|
12896
|
+
log(`π₯ --auto-fix νμ± (1.9.225) β delivered ν¨ν΄ ${delivered.candidates.length}건 μλ μλ£ μ€...`);
|
|
12897
|
+
let ok = 0;
|
|
12898
|
+
for (const c of delivered.candidates) {
|
|
12899
|
+
const u = _updateUserRequest(root, c.id, { status: 'completed', autoCompletedAt: new Date().toISOString(), autoCompleteReason: 'drift-auto-fix-1.9.225' });
|
|
12900
|
+
if (u) ok++;
|
|
12901
|
+
}
|
|
12902
|
+
log(`β delivered μλ μλ£ ${ok}/${delivered.candidates.length}건`);
|
|
12903
|
+
}
|
|
12904
|
+
} catch (e) {
|
|
12905
|
+
log(`β delivered auto-apply μ€λ₯ (1.9.225): ${e.message}`);
|
|
12906
|
+
}
|
|
12907
|
+
}
|
|
12870
12908
|
if (autoFix && level === 'π΄ critical' && !hasSecurityFired) {
|
|
12871
12909
|
log('');
|
|
12872
12910
|
log(`π§ --auto-fix νμ± β session close μλ μ€ν μ€...`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.225",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|