leerness 1.9.86 → 1.9.88
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 +45 -0
- package/README.md +4 -2
- package/bin/harness.js +38 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.88 — 2026-05-20
|
|
4
|
+
|
|
5
|
+
**`handoff`에 brainstorm 자동 hits 노출** (1.9.72 brainstorm 통합).
|
|
6
|
+
|
|
7
|
+
### Added — handoff 자동 brainstorm hits
|
|
8
|
+
- handoff 자동 skill 추천 (1.9.67) + history hit (1.9.69) 블록 끝에 추가:
|
|
9
|
+
- **🧩 brainstorm 자동 hits (1.9.88)** — 현재 task 키워드로 자동 호출
|
|
10
|
+
- 미리보기 1줄씩: `💭 decisions` / `⚠ lessons` / `📜 task-log fail` / `📚 skill`
|
|
11
|
+
- 최대 4건 노출.
|
|
12
|
+
- 모든 데이터 없으면 출력 안 함 (잡음 방지).
|
|
13
|
+
- 끄기: `--no-brainstorm-hits` 또는 `LEERNESS_NO_BRAINSTORM_HITS=1`.
|
|
14
|
+
|
|
15
|
+
### Use Case
|
|
16
|
+
- AI 에이전트가 세션 시작 시 같은 주제 과거 결정/실패/skill을 즉시 인지.
|
|
17
|
+
- "같은 키워드로 어떤 결정을 내렸지?" "어떤 실패가 있었지?" "어떤 skill 썼지?" 한 줄씩 자동 회수.
|
|
18
|
+
|
|
19
|
+
### Verified
|
|
20
|
+
- stress-v34 — handoff brainstorm hits 노출 + --no-brainstorm-hits + 누적 회귀.
|
|
21
|
+
- e2e 219/219 PASS 유지.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1.9.87 — 2026-05-20
|
|
26
|
+
|
|
27
|
+
**`session-workflow.md` 템플릿에 1.9.69~86 누적 신규 기능 안내 추가** (init 가이드 정확성).
|
|
28
|
+
|
|
29
|
+
### Updated
|
|
30
|
+
- `init` 시 생성되는 `.harness/session-workflow.md` 템플릿 갱신:
|
|
31
|
+
- `📊 빠른 체크리스트` — `leerness health` / `.env` ↔ `.env.example` / `LEERNESS_AUTO_SECURITY_FIX` 라인 추가.
|
|
32
|
+
- 안내 라인 7개 추가:
|
|
33
|
+
- 1.9.69+ handoff history hit
|
|
34
|
+
- 1.9.76+ handoff 보안 요약
|
|
35
|
+
- 1.9.80+ CRITICAL + 자동 회복
|
|
36
|
+
- 1.9.81+ 통합 헤드라인
|
|
37
|
+
- 1.9.85+ `leerness health` 종합 점검
|
|
38
|
+
- 1.9.78/82+ drift `--auto-fix` 보안 회복
|
|
39
|
+
- 1.9.86+ MCP **18 도구** 목록
|
|
40
|
+
- AI 에이전트가 `init` 직후 곧바로 최신 워크플로 인지 가능.
|
|
41
|
+
|
|
42
|
+
### Verified
|
|
43
|
+
- stress-v33 — session-workflow.md 안내 포함 확인 + 누적 회귀.
|
|
44
|
+
- e2e 219/219 PASS 유지.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
3
48
|
## 1.9.86 — 2026-05-20
|
|
4
49
|
|
|
5
50
|
**MCP server 18번째 도구 `leerness_health` 추가** (1.9.85 health 외부 AI 노출).
|
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.88 AI Agent Reliability Harness ║
|
|
16
16
|
║ verify · remember · orchestrate · audit · prevent drift ║
|
|
17
17
|
╚══════════════════════════════════════════════════════════════╝
|
|
18
18
|
```
|
|
@@ -433,6 +433,8 @@ npm test # = node ./scripts/e2e.js
|
|
|
433
433
|
|
|
434
434
|
## 변경 이력 (최근)
|
|
435
435
|
|
|
436
|
+
- **1.9.88** — **`handoff`에 brainstorm 자동 hits 노출** — 현재 task 키워드로 자동 호출 → decisions / lessons / task-log fail / skill 미리보기 1줄씩 (1.9.72 brainstorm 통합).
|
|
437
|
+
- **1.9.87** — **`session-workflow.md` 템플릿 갱신** — 1.9.69~86 누적 신규 기능 안내 추가 (handoff history hit / 보안 요약 / CRITICAL / 헤드라인 / health / drift --auto-fix 보안 / MCP 18 도구). init 가이드 정확성 보장.
|
|
436
438
|
- **1.9.86** — **MCP server 18번째 도구 `leerness_health`** — 1.9.85 health 종합 헬스 체크를 외부 AI에 노출. drift + 보안 + skill + MCP + tasks 한 호출.
|
|
437
439
|
- **1.9.85** — **`leerness health` 새 명령** — drift + 보안 + skill + MCP + 누적 통계 종합 헬스 체크. `--json` / `--strict` 옵션.
|
|
438
440
|
- **1.9.84** — **MCP server 17번째 도구 `leerness_skill_list`** — 외부 AI에 skill 카탈로그 (id/이름/출처/능력/사용 횟수) 조회 노출. `skill list --json` 옵션도 함께 추가.
|
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.88';
|
|
10
10
|
const MARK = '<!-- leerness:managed -->';
|
|
11
11
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
12
12
|
const README_END = '<!-- leerness:project-readme:end -->';
|
|
@@ -291,6 +291,13 @@ leerness audit . --fix # 누락 메타 자동 보강
|
|
|
291
291
|
- 1.9.56+ handoff가 매 세션 시작 시 **과거 lessons 자동 재상기** (현재 task 키워드 기준).
|
|
292
292
|
- 1.9.67+ handoff가 현재 task와 매칭되는 **설치된 skill을 자동 추천** (jaccard 기반, default ON, \`--no-skill-suggest\`로 끄기).
|
|
293
293
|
- 1.9.67+ lessons 인덱스에 \`task-log.md\` 실패 라인까지 포함 → 회수 범위 확장.
|
|
294
|
+
- 1.9.69+ handoff가 \`skill-suggestions.md\` rolling history (과거 같은 키워드 매칭 결과)도 자동 노출.
|
|
295
|
+
- 1.9.76+ handoff에 보안 요약 1~2 line 자동 (\`.env\` ↔ \`.env.example\` 동기화 + \`.gitignore\` 시크릿 누락).
|
|
296
|
+
- 1.9.80+ \`.env\` 가 \`.gitignore\` 에 누락 시 🚨 CRITICAL + \`LEERNESS_AUTO_SECURITY_FIX=1\` 환경변수 시 \`audit --fix\` 자동 실행.
|
|
297
|
+
- 1.9.81+ handoff Date/Project 직후 통합 헤드라인 한 줄 (drift / 보안 / MCP / skill query / 설치 skill 수).
|
|
298
|
+
- 1.9.85+ \`leerness health\` 한 줄로 종합 점검 (drift + 보안 + skills + usage + tasks).
|
|
299
|
+
- 1.9.78/82+ \`leerness drift check --auto-fix\` 가 보안 신호 발견 시 \`audit --fix\` 자동 실행 → 재검사.
|
|
300
|
+
- 1.9.86+ MCP server **18 도구** (handoff/drift/audit/verify_claim/contract/agents/reuse/whats_new/usage_stats/session_close/skill_suggest/lessons/task_export/env_check/brainstorm/skill_match/skill_list/health).
|
|
294
301
|
|
|
295
302
|
---
|
|
296
303
|
|
|
@@ -300,8 +307,11 @@ leerness audit . --fix # 누락 메타 자동 보강
|
|
|
300
307
|
- [ ] plan/progress-tracker에 이번 라운드 task 등록됨 (또는 task sync)
|
|
301
308
|
- [ ] 모든 done 항목에 evidence 첨부됨 (verify-claim PASS)
|
|
302
309
|
- [ ] sub-agent 사용 시 contract verify PASS
|
|
303
|
-
- [ ] drift 점수 ≤ 30 (attention 이하)
|
|
310
|
+
- [ ] drift 점수 ≤ 30 (attention 이하) — \`leerness drift check\` (1.9.78: 5신호 + 보안)
|
|
304
311
|
- [ ] session close 호출됨
|
|
312
|
+
- [ ] (1.9.85+) \`leerness health\`로 종합 점검 — drift + 보안 + skill + MCP + tasks
|
|
313
|
+
- [ ] (1.9.75/76+) \`.env\` 사용 중이면 \`.gitignore\` 시크릿 패턴 OK + \`.env.example\` 동기화
|
|
314
|
+
- [ ] (1.9.80+) 보안 critical 시 \`LEERNESS_AUTO_SECURITY_FIX=1\` 또는 \`audit --fix\`로 자동 회복
|
|
305
315
|
|
|
306
316
|
## Anti-pattern (drift 신호)
|
|
307
317
|
|
|
@@ -1987,6 +1997,31 @@ function handoff(root) {
|
|
|
1987
1997
|
log('');
|
|
1988
1998
|
}
|
|
1989
1999
|
}
|
|
2000
|
+
// 1.9.88: brainstorm 자동 hits — 현재 task 키워드로 누적 컨텍스트 자동 회수
|
|
2001
|
+
// decisions / lessons / skillHistory / taskLogFails 각각 1건씩 미리보기
|
|
2002
|
+
// 끄기: --no-brainstorm-hits 또는 LEERNESS_NO_BRAINSTORM_HITS=1
|
|
2003
|
+
if (!has('--no-brainstorm-hits') && process.env.LEERNESS_NO_BRAINSTORM_HITS !== '1') {
|
|
2004
|
+
try {
|
|
2005
|
+
const r = cp.spawnSync(process.execPath, [__filename, 'brainstorm', keyword, '--path', root, '--json'],
|
|
2006
|
+
{ encoding: 'utf8', timeout: 8000, env: { ...process.env, LEERNESS_NO_PROMPT: '1', LEERNESS_NO_DRIFT_CHECK: '1' } });
|
|
2007
|
+
const bj = JSON.parse(r.stdout);
|
|
2008
|
+
const hits = bj.hits || {};
|
|
2009
|
+
const items = [];
|
|
2010
|
+
if (hits.decisions?.length) items.push(`💭 decisions: ${hits.decisions[0].title}`);
|
|
2011
|
+
if (hits.lessons?.length) items.push(`⚠ lessons: ${hits.lessons[0].title}`);
|
|
2012
|
+
if (hits.taskLogFails?.length) items.push(`📜 task-log fail: ${hits.taskLogFails[0].title}`);
|
|
2013
|
+
if (hits.skills?.length) items.push(`📚 skill: ${hits.skills[0].id} (${hits.skills[0].displayNameKo || ''})`);
|
|
2014
|
+
if (items.length) {
|
|
2015
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
2016
|
+
const mag = s => isTty ? `\x1b[35m${s}\x1b[0m` : s;
|
|
2017
|
+
const dim = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
2018
|
+
log(mag(`## 🧩 brainstorm 자동 hits (1.9.88) — 키워드 "${keyword}" 누적 컨텍스트`));
|
|
2019
|
+
for (const it of items.slice(0, 4)) log(dim(` ${it}`));
|
|
2020
|
+
log(dim(` → 전체: leerness brainstorm "${keyword}" --path .`));
|
|
2021
|
+
log('');
|
|
2022
|
+
}
|
|
2023
|
+
} catch {}
|
|
2024
|
+
}
|
|
1990
2025
|
}
|
|
1991
2026
|
} catch {}
|
|
1992
2027
|
}
|
|
@@ -3398,7 +3433,7 @@ function _banner(opts = {}) {
|
|
|
3398
3433
|
lines.push('');
|
|
3399
3434
|
for (const ln of lines) log(ln);
|
|
3400
3435
|
if (opts.quickStart) {
|
|
3401
|
-
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.
|
|
3436
|
+
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.88+ 워크플로)')));
|
|
3402
3437
|
log(' ' + C.green('npx leerness@latest init .') + C.dim(' # 신규 프로젝트 + 외부 AI CLI 설정'));
|
|
3403
3438
|
log(' ' + C.green('npx leerness handoff .') + C.dim(' # 컨텍스트 + lessons + 매칭 skill + 이전 history hit (1.9.69)'));
|
|
3404
3439
|
log(' ' + C.green('npx leerness skill match "<query>"') + C.dim(' # 매칭 skill + rolling history 자동 누적 (1.9.68)'));
|