leerness 1.9.220 β 1.9.221
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 +34 -0
- package/README.md +3 -3
- package/bin/harness.js +29 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,39 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.221 β 2026-05-22
|
|
4
|
+
|
|
5
|
+
**π MCP 60 λꡬ λ§μΌμ€ν€ + abnormalShutdown JSON ν΅ν© (handoff/session close).**
|
|
6
|
+
|
|
7
|
+
### 1. MCP 60λ²μ§Έ λꡬ β `leerness_session_resume`
|
|
8
|
+
- 1.9.220 λΉμ μ μ’
λ£ κ°μ§ μμ€ν
μ μΈλΆ AIμ λ
ΈμΆ
|
|
9
|
+
- μΈμ: `{ path? }`
|
|
10
|
+
- μλ΅: `{ abnormalShutdown, severity, signals[], resumeGuide[] }`
|
|
11
|
+
- 5μ νΈ λΆμ (last-handoff/wakeup-missed/in-progress-stale/auto-resume-plan/release-branch)
|
|
12
|
+
|
|
13
|
+
### 2. handoff --json `abnormalShutdown` νλ μΆκ°
|
|
14
|
+
- `{ detected, severity, signalCount, signals[], resumeGuide[] }`
|
|
15
|
+
- μΈλΆ λͺ¨λν°λ§ λꡬ / CI κ° λΉμ μ μ’
λ£ μλ κ°μ§
|
|
16
|
+
- 1.9.218 ν΅ν© ν¨ν΄ νμ₯ (handoff JSON 4μ’
νλ μμ±: userRequests/preWake/idempotency/abnormalShutdown)
|
|
17
|
+
|
|
18
|
+
### 3. session close --json λμΌ ν΅ν©
|
|
19
|
+
- λ§κ° μ λ€μ λΌμ΄λ μ§μ
μ μ¬κ° κ°μ΄λ μλ νμ
|
|
20
|
+
- CI λ§κ° ν λΉμ μ μ’
λ£ detect κ°λ₯
|
|
21
|
+
|
|
22
|
+
### 4. λμ νκ· (1.9.207~220) β λͺ¨λ μ μ§
|
|
23
|
+
|
|
24
|
+
### 5. stress-v166 β 16/16 PASS
|
|
25
|
+
- 1.9.221 (4): VERSION + MCP 60 + session_resume λ±λ‘ + μ€ νΈμΆ (high severity μλ΅)
|
|
26
|
+
- abnormalShutdown JSON ν΅ν© (3): handoff/session close + wakeup miss μλ리μ€
|
|
27
|
+
- μ±λ₯ (2): cold_start 374ms / MCP 60 λꡬ 385ms
|
|
28
|
+
- λμ νκ· (7): 1.9.207~220
|
|
29
|
+
|
|
30
|
+
### 6. μλ release (83 λΌμ΄λ main-push streak Β· 44 λΌμ΄λ npm publish streak)
|
|
31
|
+
|
|
32
|
+
π **MCP 60 λꡬ λλ¬** (53 β 60, +7: 1.9.168 +3 / 1.9.216 +5 / 1.9.221 +1)
|
|
33
|
+
π **handoff/session close JSON 4 ν΅ν© νλ μμ±** (userRequests/preWake/idempotency/abnormalShutdown)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
3
37
|
## 1.9.220 β 2026-05-22
|
|
4
38
|
|
|
5
39
|
**π λΉμ μ μ’
λ£ ν μμ¨ μ¬κ° μμ€ν
(μ¬μ©μ λͺ
μ).**
|
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.221 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π MCP 60 λꡬ λ§μΌμ€ν€ Β· handoff JSON 4 ν΅ν© νλ μμ± β
|
|
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.221';
|
|
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 μ²λ¦¬).
|
|
@@ -5697,6 +5697,17 @@ function handoff(root) {
|
|
|
5697
5697
|
overall: idemp.summary.overall
|
|
5698
5698
|
};
|
|
5699
5699
|
} catch {}
|
|
5700
|
+
// 1.9.221: abnormalShutdown μλ κ°μ§ (1.9.220 ν΅ν©)
|
|
5701
|
+
try {
|
|
5702
|
+
const ad = _detectAbnormalShutdown(root);
|
|
5703
|
+
result.abnormalShutdown = {
|
|
5704
|
+
detected: ad.abnormalShutdown,
|
|
5705
|
+
severity: ad.severity,
|
|
5706
|
+
signalCount: ad.signals.length,
|
|
5707
|
+
signals: ad.signals.map(s => ({ kind: s.kind, severity: s.severity, detail: s.detail })),
|
|
5708
|
+
resumeGuide: ad.resumeGuide
|
|
5709
|
+
};
|
|
5710
|
+
} catch {}
|
|
5700
5711
|
log(JSON.stringify(result, null, 2));
|
|
5701
5712
|
return;
|
|
5702
5713
|
}
|
|
@@ -9723,6 +9734,17 @@ function sessionClose(root, opts = {}) {
|
|
|
9723
9734
|
overall: idemp.summary.overall
|
|
9724
9735
|
};
|
|
9725
9736
|
} catch {}
|
|
9737
|
+
try {
|
|
9738
|
+
// 1.9.221: abnormalShutdown μλ κ°μ§ (1.9.220 ν΅ν©) β session close μ λ€μ μ¬κ° κ°μ΄λ νμ
|
|
9739
|
+
const ad = _detectAbnormalShutdown(root);
|
|
9740
|
+
jsonResult.abnormalShutdown = {
|
|
9741
|
+
detected: ad.abnormalShutdown,
|
|
9742
|
+
severity: ad.severity,
|
|
9743
|
+
signalCount: ad.signals.length,
|
|
9744
|
+
signals: ad.signals.map(s => ({ kind: s.kind, severity: s.severity, detail: s.detail })),
|
|
9745
|
+
resumeGuide: ad.resumeGuide
|
|
9746
|
+
};
|
|
9747
|
+
} catch {}
|
|
9726
9748
|
|
|
9727
9749
|
process.stdout.write(JSON.stringify(jsonResult, null, 2) + '\n');
|
|
9728
9750
|
} else {
|
|
@@ -13598,7 +13620,8 @@ function mcpServeCmd(root) {
|
|
|
13598
13620
|
{ name: 'leerness_constraints_check', description: '1.9.216 (1.9.208 μ¬μ©μ λͺ
μ) β νλ«νΌ/API μ μ½ μ¬μ 체ν¬. μ¬μ©μ μμ² ν
μ€νΈμμ νλ«νΌ alias λ§€μΉ (stripe/openai/anthropic/github/discord/twitter 6μ’
+ μ¬μ©μ μ μ) β κ° νλ«νΌμ rate-limit / idempotency / auth / cost μ μ½ λ
ΈμΆ. μΈλΆ AIκ° "μ΄ κΈ°λ₯ ꡬν μ μ΄λ€ κ·μ μ λ΄μΌ νλ?"λ₯Ό μ§μ νμ. μΈμ: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
|
|
13599
13621
|
{ name: 'leerness_pre_wake_audit', description: '1.9.216 (1.9.209 μ¬μ©μ λͺ
μ) β sleep μ sub-agent audit. 6 μμ μ κ²: missing-user-requests / stale-in-progress / drift-handoff-stale / wakeup-missed / next-action-pending / auto-resume-plan. μΈλΆ AIκ° "κΉ¨μ΄λκΈ° μ μ κ²ν λΆλΆ"μ νμ. μλ΅: { auditedAt, findings: {critical, warning, info}, summary }. μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
13600
13622
|
{ name: 'leerness_intent_classify', description: '1.9.216 (1.9.213 μ¬μ©μ λͺ
μ) β μ¬μ©μ μλ νμ
+ scope expansion κ²μ΄νΈ. μλ΅: { intent: precise|broad|default, signals, domain, explicitMentions, expansionCandidates, mode: dry-run }. 3μμΉ μμ : (1) Always-Off Opt-In, (2) Dry-run κΈ°λ³Έ (μ€ν X), (3) λͺ
μ vs μΆλ‘ λΆλ¦¬ λΌλ²¨λ§. 5 λλ©μΈ (game/web/api/cli/data). μΈλΆ AIκ° "μ΄ μμ²μ μ νν κ·Έκ²λ§ / ν¬κ΄μ / κΈ°λ³ΈμΈκ°?"λ₯Ό νμ. μΈμ: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
|
|
13601
|
-
{ name: 'leerness_idempotency_audit', description: '1.9.216 (1.9.212 μ¬μ©μ λͺ
μ) β λ©±λ±μ± μλ° νμ§. 4μμ μ κ²: rule-duplicate (medium) / task-duplicate-request (medium) / user-request-duplicate (low) / wakeup-duplicate (high). μλ΅: { violations[], verified[], summary: {totalViolations, high/medium/low, overall} }. μΈλΆ AIκ° "μν¬μ€νμ΄μ€μ μ€λ³΅/μΆ©λμ΄ μλ?"λ₯Ό νμ. π MCP 58 λꡬ λ§μΌμ€ν€ (50β58). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }
|
|
13623
|
+
{ name: 'leerness_idempotency_audit', description: '1.9.216 (1.9.212 μ¬μ©μ λͺ
μ) β λ©±λ±μ± μλ° νμ§. 4μμ μ κ²: rule-duplicate (medium) / task-duplicate-request (medium) / user-request-duplicate (low) / wakeup-duplicate (high). μλ΅: { violations[], verified[], summary: {totalViolations, high/medium/low, overall} }. μΈλΆ AIκ° "μν¬μ€νμ΄μ€μ μ€λ³΅/μΆ©λμ΄ μλ?"λ₯Ό νμ. π MCP 58 λꡬ λ§μΌμ€ν€ (50β58). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
13624
|
+
{ name: 'leerness_session_resume', description: '1.9.221 (1.9.220 μ¬μ©μ λͺ
μ) β λΉμ μ μ’
λ£ κ°μ§ + μμ¨ μ¬κ°. 5μ νΈ λΆμ: last-handoff-stale / wakeup-missed / in-progress-stale / auto-resume-plan-unused / release-branch-pending. μλ΅: { abnormalShutdown, severity (none/low/medium/high), signals[], resumeGuide[] }. μΈλΆ AIκ° "μ μ /μμ€ν
μ’
λ£/μΈμ
μ’
λ£ ν leerness μνκ° μ μμΈκ°? μ΄λ»κ² μ¬κ°?"λ₯Ό νμ. π MCP 60 λꡬ λ§μΌμ€ν€ (53β60, +7 in 1.9.168/216/221). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }
|
|
13602
13625
|
];
|
|
13603
13626
|
|
|
13604
13627
|
function send(obj) {
|
|
@@ -13750,6 +13773,10 @@ function mcpServeCmd(root) {
|
|
|
13750
13773
|
// 1.9.216 (1.9.212): λ©±λ±μ± κ°μ¬ (rule/task/user-requests/wakeups 4μμ)
|
|
13751
13774
|
cliArgs = ['idempotency', 'audit', '--path', targetPath, '--json'];
|
|
13752
13775
|
break;
|
|
13776
|
+
case 'leerness_session_resume':
|
|
13777
|
+
// 1.9.221 (1.9.220): λΉμ μ μ’
λ£ κ°μ§ + μμ¨ μ¬κ°
|
|
13778
|
+
cliArgs = ['session-resume', '--path', targetPath, '--json'];
|
|
13779
|
+
break;
|
|
13753
13780
|
default:
|
|
13754
13781
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
13755
13782
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.221",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|