leerness 1.9.90 → 1.9.91
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 +17 -0
- package/README.md +3 -2
- package/bin/harness.js +6 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.91 — 2026-05-20
|
|
4
|
+
|
|
5
|
+
**MCP server 19번째 도구 `leerness_skill_search`** (1.9.90 외부 AI 노출).
|
|
6
|
+
|
|
7
|
+
### Added — MCP 19번째 도구
|
|
8
|
+
- `leerness_skill_search` — 1.9.90 skill search 명령을 외부 AI에 노출.
|
|
9
|
+
- inputSchema: `{ capability: string (required), path: string }`
|
|
10
|
+
- 응답: `skill search --json` 결과
|
|
11
|
+
- 외부 AI가 capability 키워드로 사용 가능한 skill 직접 검색.
|
|
12
|
+
- MCP server 도구 카운트: **18 → 19**.
|
|
13
|
+
|
|
14
|
+
### Verified
|
|
15
|
+
- stress-v37 — MCP 19 도구 + skill_search 호출 + 누적 회귀.
|
|
16
|
+
- e2e 219/219 PASS 유지.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
3
20
|
## 1.9.90 — 2026-05-20
|
|
4
21
|
|
|
5
22
|
**`leerness skill search <capability>` 새 명령** — capability 배열 부분 일치 검색.
|
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) []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
╔══════════════════════════════════════════════════════════════╗
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
║ ██║ ██╔══╝ ██╔══╝ ██╔══██╗██║╚██╗██║██╔══╝ ╚════██║ ║
|
|
13
13
|
║ ███████╗███████╗███████╗██║ ██║██║ ╚████║███████╗███████║ ║
|
|
14
14
|
║ ╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝ ║
|
|
15
|
-
║ v1.9.
|
|
15
|
+
║ v1.9.91 AI Agent Reliability Harness ║
|
|
16
16
|
║ verify · remember · orchestrate · audit · prevent drift ║
|
|
17
17
|
╚══════════════════════════════════════════════════════════════╝
|
|
18
18
|
```
|
|
@@ -433,6 +433,7 @@ npm test # = node ./scripts/e2e.js
|
|
|
433
433
|
|
|
434
434
|
## 변경 이력 (최근)
|
|
435
435
|
|
|
436
|
+
- **1.9.91** — **MCP server 19번째 도구 `leerness_skill_search`** — 1.9.90 skill search를 외부 AI에 노출.
|
|
436
437
|
- **1.9.90** — **`leerness skill search <capability>` 새 명령** — capability 배열 부분 일치 검색 (skill match와 다른 정확 매칭). `--json` 옵션.
|
|
437
438
|
- **1.9.89** — **자율 모드 19 라운드 종합 검증** — stress-v35 24/24 PASS + handoff 692ms / health 689ms (회귀 없음). 자율 모드 (1.9.70~88) 안정 완료.
|
|
438
439
|
- **1.9.88** — **`handoff`에 brainstorm 자동 hits 노출** — 현재 task 키워드로 자동 호출 → decisions / lessons / task-log fail / skill 미리보기 1줄씩 (1.9.72 brainstorm 통합).
|
package/bin/harness.js
CHANGED
|
@@ -6,7 +6,7 @@ const path = require('path');
|
|
|
6
6
|
const cp = require('child_process');
|
|
7
7
|
const readline = require('readline');
|
|
8
8
|
|
|
9
|
-
const VERSION = '1.9.
|
|
9
|
+
const VERSION = '1.9.91';
|
|
10
10
|
const MARK = '<!-- leerness:managed -->';
|
|
11
11
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
12
12
|
const README_END = '<!-- leerness:project-readme:end -->';
|
|
@@ -3433,7 +3433,7 @@ function _banner(opts = {}) {
|
|
|
3433
3433
|
lines.push('');
|
|
3434
3434
|
for (const ln of lines) log(ln);
|
|
3435
3435
|
if (opts.quickStart) {
|
|
3436
|
-
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.
|
|
3436
|
+
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.91+ 워크플로)')));
|
|
3437
3437
|
log(' ' + C.green('npx leerness@latest init .') + C.dim(' # 신규 프로젝트 + 외부 AI CLI 설정'));
|
|
3438
3438
|
log(' ' + C.green('npx leerness handoff .') + C.dim(' # 컨텍스트 + lessons + 매칭 skill + 이전 history hit (1.9.69)'));
|
|
3439
3439
|
log(' ' + C.green('npx leerness skill match "<query>"') + C.dim(' # 매칭 skill + rolling history 자동 누적 (1.9.68)'));
|
|
@@ -3443,7 +3443,7 @@ function _banner(opts = {}) {
|
|
|
3443
3443
|
log(' ' + C.green('npx leerness session close .') + C.dim(' # 마감 + 다음 라운드 추천 (default)'));
|
|
3444
3444
|
log('');
|
|
3445
3445
|
log(C.bold(C.cyan(' 🤖 메인 에이전트 (Claude/Cursor/Copilot)용')));
|
|
3446
|
-
log(' ' + C.green('npx leerness mcp serve') + C.dim(' # MCP 서버 —
|
|
3446
|
+
log(' ' + C.green('npx leerness mcp serve') + C.dim(' # MCP 서버 — 19 도구 (skill_search 포함, 1.9.91)'));
|
|
3447
3447
|
log(' ' + C.green('npx leerness agents bench "<task>"') + C.dim(' # 3 CLI 동시 비교'));
|
|
3448
3448
|
log('');
|
|
3449
3449
|
}
|
|
@@ -7431,7 +7431,8 @@ function mcpServeCmd(root) {
|
|
|
7431
7431
|
{ name: 'leerness_brainstorm', description: '1.9.16/72/77 — 누적 컨텍스트(decisions+skills+tasks+rules+evidence+lessons+skillHistory+taskLogFails) 자원 회수. 외부 AI가 새 작업 시작 전 호출', inputSchema: { type: 'object', properties: { topic: { type: 'string' }, path: { type: 'string' }, allApps: { type: 'boolean' } }, required: ['topic'] } },
|
|
7432
7432
|
{ name: 'leerness_skill_match', description: '1.9.45/50/83 — 사용자 task 키워드에 매칭되는 설치된 skill 추천 (jaccard 또는 embedding). 1.9.68 rolling history 자동 누적', inputSchema: { type: 'object', properties: { query: { type: 'string' }, path: { type: 'string' }, useEmbedding: { type: 'boolean' } }, required: ['query'] } },
|
|
7433
7433
|
{ name: 'leerness_skill_list', description: '1.9.84 — 워크스페이스에 설치된 skill 목록 + 사용 횟수 + 출처 (catalog/user). 외부 AI가 사용 가능한 skill 조회', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
7434
|
-
{ name: 'leerness_health', description: '1.9.85/86 — 종합 헬스 체크 (drift + 보안 + skills + MCP + tasks + issues 배열). 외부 AI가 워크스페이스 상태 한 번에 확인', inputSchema: { type: 'object', properties: { path: { type: 'string' }, strict: { type: 'boolean' } } } }
|
|
7434
|
+
{ name: 'leerness_health', description: '1.9.85/86 — 종합 헬스 체크 (drift + 보안 + skills + MCP + tasks + issues 배열). 외부 AI가 워크스페이스 상태 한 번에 확인', inputSchema: { type: 'object', properties: { path: { type: 'string' }, strict: { type: 'boolean' } } } },
|
|
7435
|
+
{ name: 'leerness_skill_search', description: '1.9.90/91 — capability 배열에서 부분 일치하는 skill 검색 (substring + case-insensitive). skill match와 다른 정확 매칭', inputSchema: { type: 'object', properties: { capability: { type: 'string' }, path: { type: 'string' } }, required: ['capability'] } }
|
|
7435
7436
|
];
|
|
7436
7437
|
|
|
7437
7438
|
function send(obj) {
|
|
@@ -7481,6 +7482,7 @@ function mcpServeCmd(root) {
|
|
|
7481
7482
|
case 'leerness_skill_match': cliArgs = ['skill', 'match', args.query || '', '--path', targetPath, '--json', ...(args.useEmbedding ? ['--embedding'] : [])]; break;
|
|
7482
7483
|
case 'leerness_skill_list': cliArgs = ['skill', 'list', targetPath, '--json']; break;
|
|
7483
7484
|
case 'leerness_health': cliArgs = ['health', targetPath, '--json', ...(args.strict ? ['--strict'] : [])]; break;
|
|
7485
|
+
case 'leerness_skill_search': cliArgs = ['skill', 'search', args.capability || '', '--path', targetPath, '--json']; break;
|
|
7484
7486
|
default:
|
|
7485
7487
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
7486
7488
|
}
|