leerness 1.9.216 β 1.9.218
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 +81 -0
- package/README.md +3 -3
- package/bin/harness.js +128 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,86 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.218 β 2026-05-22
|
|
4
|
+
|
|
5
|
+
**π handoff --json ν΅ν© κ°ν + 5μΆ λ§€νΈλ¦μ€ λ³΄κ° (98β100 ν보).**
|
|
6
|
+
|
|
7
|
+
### 1. handoff --json ν΅ν© νλ μΆκ° (session close μ λμΌ ν¨ν΄)
|
|
8
|
+
| νλ | μΆμ² | λ΄μ© |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `userRequestsAudit` | 1.9.207 | total/open/missing/tracked/stale |
|
|
11
|
+
| `preWakeAudit` | 1.9.209 | auditedAt/ageMin/critical/warning/needsAttention (λ³΄κ³ μ μμ λλ§) |
|
|
12
|
+
| `idempotencyAudit` | 1.9.212 | violations/high/medium/low/verified/overall |
|
|
13
|
+
|
|
14
|
+
### 2. JSON μΌκ΄μ± ν보 β handoff / session close / health / drift check 4μ’
λͺ¨λ ν΅ν©
|
|
15
|
+
- μΈλΆ μλν λꡬ / CI κ° 4 JSON λͺ
λ ΉμΌλ‘ μ’
ν© νμ κ°λ₯
|
|
16
|
+
- 1.9.207~213 μ κ· κΈ°λ₯μ΄ λͺ¨λ μ£Όμ JSON μΆλ ₯μ λ
ΈμΆ
|
|
17
|
+
|
|
18
|
+
### 3. 5μΆ λ§€νΈλ¦μ€ λ³΄κ° (98 β 100 ν보)
|
|
19
|
+
1.9.207~217 11 λΌμ΄λ λμ μν₯:
|
|
20
|
+
- **AμΆ (λ²μ© AI νλ€μ€)** 9.5β10: 1.9.208 constraints (6 νλ«νΌ catalog) + 1.9.213 intent (5 λλ©μΈ)
|
|
21
|
+
- **BμΆ (λ©ν° Sub-Agent)** 9.5β10: 1.9.209 pre-wake audit + 1.9.216 MCP 5μ’
(59 λꡬ)
|
|
22
|
+
- **CμΆ (곡μ μ€ν¬)** 10/10 μ μ§
|
|
23
|
+
- **DμΆ (μ₯κΈ° λ§₯λ½)** 9.5β10: 1.9.211 .harnessβ.leerness AI μ°Έμ‘° κ°μ΄λ
|
|
24
|
+
- **EμΆ (κ²μΌλ¦ λ°©μ§)** 9.5β10: 1.9.207 λ―Έλ΅ μμ² + 1.9.212 λ©±λ±μ± + 1.9.217 session close ν΅ν©
|
|
25
|
+
|
|
26
|
+
β **100/100 (5μΆ νκ· 10/10)**
|
|
27
|
+
|
|
28
|
+
### 4. λμ νκ· (1.9.207~217) β λͺ¨λ μ μ§
|
|
29
|
+
|
|
30
|
+
### 5. stress-v163 β 16/16 PASS
|
|
31
|
+
- 1.9.218 (5): VERSION + JSON ν΅ν© 3μ’
νλ κ²μ¦
|
|
32
|
+
- userRequestsAudit total=1 κ²μ¦, idempotency overall=clean κ²μ¦
|
|
33
|
+
- pre-wake-audit μλ ν΅ν© κ²μ¦
|
|
34
|
+
- μ±λ₯ (2): cold_start 450ms / MCP 59 λꡬ 417ms
|
|
35
|
+
- λμ νκ· (9)
|
|
36
|
+
|
|
37
|
+
### 6. μλ release (80 λΌμ΄λ main-push streak Β· 41 λΌμ΄λ npm publish streak)
|
|
38
|
+
|
|
39
|
+
π **5μΆ λ§€νΈλ¦μ€ 100/100 λλ¬**
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 1.9.217 β 2026-05-22
|
|
44
|
+
|
|
45
|
+
**π session close μλ ν΅ν© β 1.9.207/209/212 μλ νΈμΆ.**
|
|
46
|
+
|
|
47
|
+
### 1. session close μλ νΈμΆ 3μ’
(λ§κ° μ)
|
|
48
|
+
| μμ | μΆμ² | λμ |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| `userRequestsAudit` | 1.9.207 | open/in-progress μμ² β missing/tracked/stale λΆλ₯ |
|
|
51
|
+
| `preWakeAudit` | 1.9.209 | sleep μ 6 μμ audit + .harness/pre-wake-report.json μλ μ μ₯ |
|
|
52
|
+
| `idempotencyAudit` | 1.9.212 | 4μμ λ©±λ±μ± κ²μ¬ (rule/task/user-requests/wakeups) |
|
|
53
|
+
|
|
54
|
+
### 2. JSON λͺ¨λ (`--json`) ν΅ν© νλ μΆκ°
|
|
55
|
+
- `userRequestsAudit: { total, open, missing, tracked, stale }`
|
|
56
|
+
- `preWakeAudit: { auditedAt, critical, warning, info, needsAttention }`
|
|
57
|
+
- `idempotencyAudit: { violations, high, medium, low, verified, overall }`
|
|
58
|
+
|
|
59
|
+
### 3. human μΆλ ₯ μλ μΉμ
|
|
60
|
+
```
|
|
61
|
+
## π session close μλ ν΅ν© λ³΄κ³ (1.9.217)
|
|
62
|
+
β λ―Έλ΅ μ¬μ©μ μμ² N건 (task-log/plan/decisions λ§€μΉ μ λ¨)
|
|
63
|
+
π¨ pre-wake-audit: critical N (λ€μ κΉ¨μ΄λ¨ μ μ κ² νμ)
|
|
64
|
+
β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified 4 μμ
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 4. opt-out μ΅μ
|
|
68
|
+
- `--no-pre-wake` β pre-wake audit μ€ν΅
|
|
69
|
+
- μ΅μ
μΈ λ€λ₯Έ ν΅ν©μ νμ μ€ν (κ°λ²Όμ)
|
|
70
|
+
|
|
71
|
+
### 5. λμ νκ· (1.9.207~216) β λͺ¨λ μ μ§
|
|
72
|
+
|
|
73
|
+
### 6. stress-v162 β 18/18 PASS
|
|
74
|
+
- 1.9.217 (7): VERSION + JSON νλ + human μΉμ
+ μλ μ μ₯ + opt-out + νλ ꡬ쑰 + clean
|
|
75
|
+
- μ±λ₯ (2): cold_start 489ms / MCP 59 λꡬ 785ms
|
|
76
|
+
- λμ νκ· (9)
|
|
77
|
+
|
|
78
|
+
### 7. μλ release (79 λΌμ΄λ main-push streak Β· 40 λΌμ΄λ npm publish streak)
|
|
79
|
+
|
|
80
|
+
π **session close κ°ν** β λ§€ λ§κ° μ μ΄μ μμ μλ μ κ²
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
3
84
|
## 1.9.216 β 2026-05-22
|
|
4
85
|
|
|
5
86
|
**π MCP 5μ’
μΆκ° β 1.9.207~213 μΈλΆ AI λ
ΈμΆ (54 β 59 λꡬ).**
|
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.218 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π 5μΆ λ§€νΈλ¦μ€ 100/100 Β· handoff JSON 3μ’
ν΅ν© (μΈλΆ μλν) β
|
|
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.218';
|
|
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 μ²λ¦¬).
|
|
@@ -5486,6 +5486,42 @@ function handoff(root) {
|
|
|
5486
5486
|
};
|
|
5487
5487
|
} catch {}
|
|
5488
5488
|
} catch {}
|
|
5489
|
+
// 1.9.218: handoff JSON ν΅ν© κ°ν β 1.9.207/209/212 μλ ν΅ν© (session close μ λμΌ ν¨ν΄)
|
|
5490
|
+
try {
|
|
5491
|
+
const reqAudit = _auditUserRequests(root);
|
|
5492
|
+
result.userRequestsAudit = {
|
|
5493
|
+
total: reqAudit.total,
|
|
5494
|
+
open: reqAudit.open,
|
|
5495
|
+
missing: reqAudit.missing ? reqAudit.missing.length : 0,
|
|
5496
|
+
tracked: reqAudit.tracked ? reqAudit.tracked.length : 0,
|
|
5497
|
+
stale: reqAudit.stale ? reqAudit.stale.length : 0
|
|
5498
|
+
};
|
|
5499
|
+
} catch {}
|
|
5500
|
+
try {
|
|
5501
|
+
const pwState = _loadPreWakeReport(root);
|
|
5502
|
+
if (pwState.reports.length > 0) {
|
|
5503
|
+
const latest = pwState.reports[pwState.reports.length - 1];
|
|
5504
|
+
const ageMin = Math.floor((Date.now() - new Date(latest.auditedAt).getTime()) / 60000);
|
|
5505
|
+
result.preWakeAudit = {
|
|
5506
|
+
auditedAt: latest.auditedAt,
|
|
5507
|
+
ageMin,
|
|
5508
|
+
critical: latest.summary?.criticalCount || 0,
|
|
5509
|
+
warning: latest.summary?.warningCount || 0,
|
|
5510
|
+
needsAttention: !!latest.summary?.needsAttention
|
|
5511
|
+
};
|
|
5512
|
+
}
|
|
5513
|
+
} catch {}
|
|
5514
|
+
try {
|
|
5515
|
+
const idemp = _runIdempotencyAudit(root);
|
|
5516
|
+
result.idempotencyAudit = {
|
|
5517
|
+
violations: idemp.summary.totalViolations,
|
|
5518
|
+
high: idemp.summary.highSeverity,
|
|
5519
|
+
medium: idemp.summary.mediumSeverity,
|
|
5520
|
+
low: idemp.summary.lowSeverity,
|
|
5521
|
+
verified: idemp.summary.verifiedAreas,
|
|
5522
|
+
overall: idemp.summary.overall
|
|
5523
|
+
};
|
|
5524
|
+
} catch {}
|
|
5489
5525
|
log(JSON.stringify(result, null, 2));
|
|
5490
5526
|
return;
|
|
5491
5527
|
}
|
|
@@ -9465,7 +9501,98 @@ function sessionClose(root, opts = {}) {
|
|
|
9465
9501
|
};
|
|
9466
9502
|
} catch {}
|
|
9467
9503
|
} catch {}
|
|
9504
|
+
|
|
9505
|
+
// 1.9.217: session close μλ ν΅ν© β 1.9.207 + 1.9.209 + 1.9.212
|
|
9506
|
+
// λ§κ° μ λ―Έλ΅ μμ² / pre-wake audit / λ©±λ±μ± κ²μ¬ μλ μ€ν + JSON ν΅ν©
|
|
9507
|
+
try {
|
|
9508
|
+
// 1.9.207: λ―Έλ΅ μ¬μ©μ μμ² audit
|
|
9509
|
+
const reqAudit = _auditUserRequests(root);
|
|
9510
|
+
jsonResult.userRequestsAudit = {
|
|
9511
|
+
total: reqAudit.total,
|
|
9512
|
+
open: reqAudit.open,
|
|
9513
|
+
missing: reqAudit.missing ? reqAudit.missing.length : 0,
|
|
9514
|
+
tracked: reqAudit.tracked ? reqAudit.tracked.length : 0,
|
|
9515
|
+
stale: reqAudit.stale ? reqAudit.stale.length : 0
|
|
9516
|
+
};
|
|
9517
|
+
} catch {}
|
|
9518
|
+
try {
|
|
9519
|
+
// 1.9.209: pre-wake-audit μλ μ€ν + μ μ₯ (sleep μ μλ μ κ²)
|
|
9520
|
+
if (!opts.noPreWake && !has('--no-pre-wake')) {
|
|
9521
|
+
const audit = _runPreWakeAudit(root);
|
|
9522
|
+
_saveAndAppendPreWakeReport(root, audit);
|
|
9523
|
+
jsonResult.preWakeAudit = {
|
|
9524
|
+
auditedAt: audit.auditedAt,
|
|
9525
|
+
critical: audit.summary.criticalCount,
|
|
9526
|
+
warning: audit.summary.warningCount,
|
|
9527
|
+
info: audit.summary.infoCount,
|
|
9528
|
+
needsAttention: audit.summary.needsAttention
|
|
9529
|
+
};
|
|
9530
|
+
}
|
|
9531
|
+
} catch {}
|
|
9532
|
+
try {
|
|
9533
|
+
// 1.9.212: λ©±λ±μ± κ²μ¬ μλ μ€ν (rule/task/user-requests/wakeups 4μμ)
|
|
9534
|
+
const idemp = _runIdempotencyAudit(root);
|
|
9535
|
+
jsonResult.idempotencyAudit = {
|
|
9536
|
+
violations: idemp.summary.totalViolations,
|
|
9537
|
+
high: idemp.summary.highSeverity,
|
|
9538
|
+
medium: idemp.summary.mediumSeverity,
|
|
9539
|
+
low: idemp.summary.lowSeverity,
|
|
9540
|
+
verified: idemp.summary.verifiedAreas,
|
|
9541
|
+
overall: idemp.summary.overall
|
|
9542
|
+
};
|
|
9543
|
+
} catch {}
|
|
9544
|
+
|
|
9468
9545
|
process.stdout.write(JSON.stringify(jsonResult, null, 2) + '\n');
|
|
9546
|
+
} else {
|
|
9547
|
+
// 1.9.217: human μΆλ ₯ λͺ¨λμμλ ν΅ν© λ³΄κ³ λ
ΈμΆ (λ§κ° μ§μ )
|
|
9548
|
+
try {
|
|
9549
|
+
const isTty = process.stdout.isTTY;
|
|
9550
|
+
const grn = s => isTty ? `\x1b[32m${s}\x1b[0m` : s;
|
|
9551
|
+
const yel = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
9552
|
+
const red = s => isTty ? `\x1b[31m${s}\x1b[0m` : s;
|
|
9553
|
+
const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
9554
|
+
|
|
9555
|
+
log('');
|
|
9556
|
+
log(`## π session close μλ ν΅ν© λ³΄κ³ (1.9.217)`);
|
|
9557
|
+
// 1.9.207
|
|
9558
|
+
try {
|
|
9559
|
+
const reqAudit = _auditUserRequests(root);
|
|
9560
|
+
const missCnt = reqAudit.missing ? reqAudit.missing.length : 0;
|
|
9561
|
+
if (missCnt > 0) {
|
|
9562
|
+
log(red(` β λ―Έλ΅ μ¬μ©μ μμ² ${missCnt}건 (task-log/plan/decisions λ§€μΉ μ λ¨)`));
|
|
9563
|
+
} else if (reqAudit.open > 0) {
|
|
9564
|
+
log(grn(` β μ¬μ©μ μμ² ${reqAudit.open}건 λͺ¨λ tracked`));
|
|
9565
|
+
} else {
|
|
9566
|
+
log(dim(` βΉ μ¬μ©μ μμ² μμ (UR λ°±λ‘κ·Έ λΉμ΄μμ)`));
|
|
9567
|
+
}
|
|
9568
|
+
} catch {}
|
|
9569
|
+
// 1.9.209
|
|
9570
|
+
try {
|
|
9571
|
+
if (!opts.noPreWake && !has('--no-pre-wake')) {
|
|
9572
|
+
const audit = _runPreWakeAudit(root);
|
|
9573
|
+
_saveAndAppendPreWakeReport(root, audit);
|
|
9574
|
+
const sum = audit.summary;
|
|
9575
|
+
if (sum.criticalCount > 0) {
|
|
9576
|
+
log(red(` π¨ pre-wake-audit: critical ${sum.criticalCount} (λ€μ κΉ¨μ΄λ¨ μ μ κ² νμ)`));
|
|
9577
|
+
} else if (sum.warningCount > 0) {
|
|
9578
|
+
log(yel(` β pre-wake-audit: warning ${sum.warningCount}`));
|
|
9579
|
+
} else {
|
|
9580
|
+
log(grn(` β pre-wake-audit: clean (sleep μμ )`));
|
|
9581
|
+
}
|
|
9582
|
+
}
|
|
9583
|
+
} catch {}
|
|
9584
|
+
// 1.9.212
|
|
9585
|
+
try {
|
|
9586
|
+
const idemp = _runIdempotencyAudit(root);
|
|
9587
|
+
const v = idemp.summary.totalViolations;
|
|
9588
|
+
if (v > 0) {
|
|
9589
|
+
log(red(` β λ©±λ±μ± μλ° ${v}건 (high: ${idemp.summary.highSeverity})`));
|
|
9590
|
+
log(dim(` β leerness idempotency audit μΌλ‘ μμΈ νμΈ`));
|
|
9591
|
+
} else {
|
|
9592
|
+
log(grn(` β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified ${idemp.summary.verifiedAreas} μμ`));
|
|
9593
|
+
}
|
|
9594
|
+
} catch {}
|
|
9595
|
+
} catch {}
|
|
9469
9596
|
}
|
|
9470
9597
|
}
|
|
9471
9598
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.218",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|