leerness 1.9.215 β 1.9.216
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 +38 -0
- package/README.md +3 -3
- package/bin/harness.js +27 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.216 β 2026-05-22
|
|
4
|
+
|
|
5
|
+
**π MCP 5μ’
μΆκ° β 1.9.207~213 μΈλΆ AI λ
ΈμΆ (54 β 59 λꡬ).**
|
|
6
|
+
|
|
7
|
+
> λ°±λ‘κ·Έ μμ§ ν μΈλΆ AI ν΅ν© κ°μΉ κ°ν β Claude/Codex/Gemini λ±μ΄ μ κ· 7 λΌμ΄λ κΈ°λ₯μ μ§μ νΈμΆ κ°λ₯
|
|
8
|
+
|
|
9
|
+
### 1. MCP μ κ· 5μ’
(1.9.216 λΌλ²¨)
|
|
10
|
+
| λꡬ | μΆμ² | μΈμ |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| `leerness_requests_audit` | 1.9.207 | `{ path? }` β missing/tracked/stale νμ |
|
|
13
|
+
| `leerness_constraints_check` | 1.9.208 | `{ request, path? }` β νλ«νΌ alias λ§€μΉ |
|
|
14
|
+
| `leerness_pre_wake_audit` | 1.9.209 | `{ path? }` β 6μμ audit |
|
|
15
|
+
| `leerness_intent_classify` | 1.9.213 | `{ request, path? }` β intent + λλ©μΈ + dry-run νμ₯ |
|
|
16
|
+
| `leerness_idempotency_audit` | 1.9.212 | `{ path? }` β 4μμ λ©±λ±μ± κ²μ¬ |
|
|
17
|
+
|
|
18
|
+
### 2. 5μΆ λ§€νΈλ¦μ€ BμΆ (λ©ν° Sub-Agent) κ°μΉ κ°ν
|
|
19
|
+
- μΈλΆ AI κ° leerness μ 7 λΌμ΄λ μ κ· κΈ°λ₯μ MCP λ‘ μ§μ νΈμΆ
|
|
20
|
+
- Claude Desktop / Cursor / Codex CLI λ±μμ leerness MCP server λ±λ‘ β μ¦μ μ¬μ© κ°λ₯
|
|
21
|
+
- "μ¬μ©μκ° νλ μμ² μ€ λλ½λ κ² μλ?" "μ΄ κΈ°λ₯ ꡬν μ μ΄λ€ API κ·μ ?" "μ΄ μμ²μ μ νν κ·Έκ²λ§ / ν¬κ΄μ ?" λ±μ μΈλΆ AIκ° νμ
|
|
22
|
+
|
|
23
|
+
### 3. λμ νκ· (1.9.207~215) β λͺ¨λ μ μ§
|
|
24
|
+
|
|
25
|
+
### 4. stress-v161 β 19/19 PASS
|
|
26
|
+
- 1.9.216 (8): VERSION + tools/list 59κ° + 5μ’
λ±λ‘ + 4μ’
μ€ νΈμΆ κ²μ¦
|
|
27
|
+
- leerness_intent_classify("λ§΅+μΊλ¦ν°+κ²μ κΈ°λ₯") β broad/game/8 candidates β
|
|
28
|
+
- leerness_constraints_check("Stripe API") β stripe matched β
|
|
29
|
+
- leerness_pre_wake_audit β audited 0 β
|
|
30
|
+
- leerness_idempotency_audit β clean β
|
|
31
|
+
- leerness_requests_audit β total=0 β
|
|
32
|
+
- μ±λ₯ (2): cold_start 544ms / MCP 59λꡬ 541ms
|
|
33
|
+
- λμ νκ· (9): 1.9.207~215
|
|
34
|
+
|
|
35
|
+
### 5. μλ release (78 λΌμ΄λ main-push streak Β· 39 λΌμ΄λ npm publish streak)
|
|
36
|
+
|
|
37
|
+
π **MCP 58 λꡬ λ§μΌμ€ν€** (μ΄μ 53 β 59, +6 in 1.9.158/159/168/216)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
3
41
|
## 1.9.215 β 2026-05-22
|
|
4
42
|
|
|
5
43
|
**π― handoff ν€λλΌμΈμ constraints/intent μλ ν΅ν© + AGENTS.md 7 λΌμ΄λ λμ .**
|
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.216 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π MCP 59 λꡬ (1.9.207~213 μΈλΆ AI λ
ΈμΆ +5μ’
) β
|
|
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.216';
|
|
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 μ²λ¦¬).
|
|
@@ -13284,7 +13284,12 @@ function mcpServeCmd(root) {
|
|
|
13284
13284
|
{ name: 'leerness_web', description: '1.9.168 β Web Bridge (1.9.165 playwright opt-in). sub: check (μ€μΉ + permissions.browser νμΈ) | screenshot (URL β PNG) | extract (URL + CSS selector β DOM ν
μ€νΈ). μΈλΆ AIκ° leerness μ μΉ μλν λ₯λ ₯μ μ§μ νΈμΆ. playwright λ―Έμ€μΉ μ μΉμ μλ΄ (graceful). μΈμ: { sub (required), url?, out?, selector?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'screenshot', 'extract'] }, url: { type: 'string' }, out: { type: 'string' }, selector: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
|
|
13285
13285
|
{ name: 'leerness_pc', description: '1.9.168 β PC Bridge (1.9.166 robotjs/nut-tree opt-in). sub: check (μ€μΉ + permissions.mouse/keyboard) | click (x,y) | type (text) | screenshot (out). β full permissions κΆμ₯ (mouse/keyboard μ κ·Ό). μΈλΆ AIκ° λ°μ€ν¬ν μλν λ₯λ ₯μ μ§μ νΈμΆ. μΈμ: { sub (required), x?, y?, text?, out?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'click', 'type', 'screenshot'] }, x: { type: 'number' }, y: { type: 'number' }, text: { type: 'string' }, out: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
|
|
13286
13286
|
{ name: 'leerness_lsp', description: '1.9.168 β LSP Bridge (1.9.167 typescript opt-in + regex fallback). sub: check (μ€μΉ μ¬λΆ) | symbols (file β function/class/interface/type/enum λͺ©λ‘) | references (name + in λλ ν 리 β νΈμΆ μμΉ). μΈλΆ AIκ° μ½λ μΈν
리μ μ€λ₯Ό μ§μ νΈμΆ (μμ‘΄μ± 0 fallback λμ). π MCP 53 λꡬ λ§μΌμ€ν€. μΈμ: { sub (required), file?, name?, in?, path? }', inputSchema: { type: 'object', properties: { sub: { type: 'string', enum: ['check', 'symbols', 'references'] }, file: { type: 'string' }, name: { type: 'string' }, in: { type: 'string' }, path: { type: 'string' } }, required: ['sub'] } },
|
|
13287
|
-
{ name: 'leerness_review_request', description: '1.9.176 β μ¬μ©μ μμ² μ¬μ κ²ν (μ¬μ©μ λͺ
μ μμ²). AI μμ΄μ νΈκ° μ¬μ©μ μꡬλ₯Ό **무쑰건 ꡬν μ **μ νΈμΆ. λΆμ: 1) estimatedType (route μΆμ ), 2) conflicts (lesson μ€ν¨/μ§νμ€ task), 3) reuseCandidates (skill/reuse-map λ§€μΉ), 4) lessonsRecall (κ³Όκ±° κ²°μ ), 5) planConflicts (μ§νμ€ milestone), 6) featureConflicts (feature graph μμ κ²ΉμΉ¨), 7) recommendedSteps (μμ
μ νλ³ 3-5 λ¨κ³), 8) efficiencyHints, 9) proceed (true/false). μ¬μ©μ κ²°μ λμ. μΈμ: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } }
|
|
13287
|
+
{ name: 'leerness_review_request', description: '1.9.176 β μ¬μ©μ μμ² μ¬μ κ²ν (μ¬μ©μ λͺ
μ μμ²). AI μμ΄μ νΈκ° μ¬μ©μ μꡬλ₯Ό **무쑰건 ꡬν μ **μ νΈμΆ. λΆμ: 1) estimatedType (route μΆμ ), 2) conflicts (lesson μ€ν¨/μ§νμ€ task), 3) reuseCandidates (skill/reuse-map λ§€μΉ), 4) lessonsRecall (κ³Όκ±° κ²°μ ), 5) planConflicts (μ§νμ€ milestone), 6) featureConflicts (feature graph μμ κ²ΉμΉ¨), 7) recommendedSteps (μμ
μ νλ³ 3-5 λ¨κ³), 8) efficiencyHints, 9) proceed (true/false). μ¬μ©μ κ²°μ λμ. μΈμ: { request (required), path? }', inputSchema: { type: 'object', properties: { request: { type: 'string' }, path: { type: 'string' } }, required: ['request'] } },
|
|
13288
|
+
{ name: 'leerness_requests_audit', description: '1.9.216 (1.9.207 μ¬μ©μ λͺ
μ) β μ¬μ©μ λͺ
μ μμ² λλ½ νμΈ μ μ°¨. .harness/user-requests.json μ open/in-progress μμ²μ task-log/plan/decisions μ λ§€μΉ β missing/tracked/stale λΆλ₯. μΈλΆ AIκ° "μ¬μ©μκ° νλ μμ² μ€ λλ½λ κ² μλ?"λ₯Ό μ§μ νμ. μλ΅: { total, open, missing[], tracked[], stale[], completed, dropped }. μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
13289
|
+
{ 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'] } },
|
|
13290
|
+
{ 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' } } } },
|
|
13291
|
+
{ 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'] } },
|
|
13292
|
+
{ 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' } } } }
|
|
13288
13293
|
];
|
|
13289
13294
|
|
|
13290
13295
|
function send(obj) {
|
|
@@ -13416,6 +13421,26 @@ function mcpServeCmd(root) {
|
|
|
13416
13421
|
// 1.9.176: μ¬μ©μ μμ² μ¬μ κ²ν (μ¬μ©μ λͺ
μ μμ²)
|
|
13417
13422
|
cliArgs = ['review-request', String(args.request || ''), '--path', targetPath, '--json'];
|
|
13418
13423
|
break;
|
|
13424
|
+
case 'leerness_requests_audit':
|
|
13425
|
+
// 1.9.216 (1.9.207): μ¬μ©μ μμ² λλ½ νμΈ μ μ°¨
|
|
13426
|
+
cliArgs = ['requests', 'audit', '--path', targetPath, '--json'];
|
|
13427
|
+
break;
|
|
13428
|
+
case 'leerness_constraints_check':
|
|
13429
|
+
// 1.9.216 (1.9.208): νλ«νΌ/API μ μ½ μ¬μ 체ν¬
|
|
13430
|
+
cliArgs = ['constraints', 'check', String(args.request || ''), '--path', targetPath, '--json'];
|
|
13431
|
+
break;
|
|
13432
|
+
case 'leerness_pre_wake_audit':
|
|
13433
|
+
// 1.9.216 (1.9.209): pre-wake sub-agent audit
|
|
13434
|
+
cliArgs = ['pre-wake-audit', '--path', targetPath, '--json'];
|
|
13435
|
+
break;
|
|
13436
|
+
case 'leerness_intent_classify':
|
|
13437
|
+
// 1.9.216 (1.9.213): intent inference + scope expansion (dry-run)
|
|
13438
|
+
cliArgs = ['intent', 'expand', String(args.request || ''), '--path', targetPath, '--json'];
|
|
13439
|
+
break;
|
|
13440
|
+
case 'leerness_idempotency_audit':
|
|
13441
|
+
// 1.9.216 (1.9.212): λ©±λ±μ± κ°μ¬ (rule/task/user-requests/wakeups 4μμ)
|
|
13442
|
+
cliArgs = ['idempotency', 'audit', '--path', targetPath, '--json'];
|
|
13443
|
+
break;
|
|
13419
13444
|
default:
|
|
13420
13445
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
13421
13446
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.216",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|