leerness 1.9.133 → 1.9.134
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 +23 -0
- package/README.md +2 -2
- package/bin/harness.js +29 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.134 — 2026-05-20
|
|
4
|
+
|
|
5
|
+
**`leerness task list --json` + MCP 41번째 도구 `leerness_task_list`** — progress-tracker.md 전체 task JSON 조회.
|
|
6
|
+
|
|
7
|
+
### Added — `task list --json`
|
|
8
|
+
- `--json` 옵션: `{ version, root, total, tasks: [{ id, status, request, evidence, nextAction, updated }] }`
|
|
9
|
+
- `--status` 필터: planned/requested/in-progress/done/dropped/incomplete/blocked
|
|
10
|
+
- 필터 적용 시 `statusFilter` 필드 포함
|
|
11
|
+
|
|
12
|
+
### Added — MCP 41번째 도구 `leerness_task_list`
|
|
13
|
+
- 외부 AI 가 task 전체 상태 회수 (memory_status 보다 task 전용 + 필터 지원)
|
|
14
|
+
- 인자: `{ path?, status? }`
|
|
15
|
+
|
|
16
|
+
### Task surface JSON 명령 매트릭스
|
|
17
|
+
| Op | CLI | MCP |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| CREATE | task add | leerness_task_add (1.9.105) |
|
|
20
|
+
| READ | **task list --json** | **leerness_task_list (1.9.134)** ✓ |
|
|
21
|
+
| UPDATE | task update | leerness_task_update (1.9.106) |
|
|
22
|
+
| DELETE | task drop | leerness_task_drop (1.9.107) |
|
|
23
|
+
|
|
24
|
+
### MCP 도구 누계: 41 (1.9.128: 40 → 1.9.134: 41)
|
|
25
|
+
|
|
3
26
|
## 1.9.133 — 2026-05-20
|
|
4
27
|
|
|
5
28
|
**brainstorm 텍스트 모드에 lessonsExplicit / planMilestones display 추가** — 1.9.116에서 데이터 수집은 했지만 display는 누락된 pre-existing gap fix.
|
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.134 AI Agent Reliability Harness ║
|
|
16
16
|
║ verify · remember · orchestrate · audit · prevent drift ║
|
|
17
17
|
╚══════════════════════════════════════════════════════════════╝
|
|
18
18
|
```
|
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.134';
|
|
10
10
|
const MARK = '<!-- leerness:managed -->';
|
|
11
11
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
12
12
|
const README_END = '<!-- leerness:project-readme:end -->';
|
|
@@ -334,6 +334,7 @@ leerness audit . --fix # 누락 메타 자동 보강
|
|
|
334
334
|
- 1.9.131+ \`brainstorm\` 회수 범위에 3 archive 파일 (decisions/lessons/plan archive) 통합 — 과거 제거된 ideas 가 새 brainstorm 시 다시 후보로 노출. \`hits.archive\` 필드 + 복원 안내 라인.
|
|
335
335
|
- 1.9.132+ \`session close\` 텍스트 모드에 archive 누적 라인 추가 — 마감 시점 DELETE 활동 가시화 (handoff 7번째 회수와 symmetric). archive 가시성 6 surface 완성.
|
|
336
336
|
- 1.9.133+ \`brainstorm\` 텍스트 모드 lessonsExplicit / planMilestones display 추가 — 1.9.116에서 데이터 수집은 했지만 display 누락된 pre-existing gap fix.
|
|
337
|
+
- 1.9.134+ \`leerness task list --json\` + MCP **41 도구** (\`leerness_task_list\`) — progress-tracker.md task 전체 JSON 조회 + \`--status\` 필터. Task surface CRUD MCP 완전 완성 (add/list/update/drop).
|
|
337
338
|
|
|
338
339
|
---
|
|
339
340
|
|
|
@@ -1365,11 +1366,32 @@ function planRemoveCmd(root, target) {
|
|
|
1365
1366
|
function planSync(root) { append(taskLogPath(root), `\n## ${today()}\n- Synced plan.md and progress-tracker.md.\n`); ok('plan/progress sync noted'); }
|
|
1366
1367
|
|
|
1367
1368
|
function taskList(root) {
|
|
1369
|
+
// 1.9.134: --json 옵션 추가 + --status 필터
|
|
1368
1370
|
const rows = readProgressRows(root);
|
|
1369
|
-
|
|
1371
|
+
const statusFilter = arg('--status', '');
|
|
1372
|
+
const filtered = statusFilter ? rows.filter(r => r.status === statusFilter) : rows;
|
|
1373
|
+
if (has('--json')) {
|
|
1374
|
+
const payload = {
|
|
1375
|
+
version: VERSION,
|
|
1376
|
+
root: absRoot(root),
|
|
1377
|
+
total: filtered.length,
|
|
1378
|
+
tasks: filtered.map(r => ({
|
|
1379
|
+
id: r.id,
|
|
1380
|
+
status: r.status,
|
|
1381
|
+
request: r.request,
|
|
1382
|
+
evidence: r.evidence,
|
|
1383
|
+
nextAction: r.nextAction,
|
|
1384
|
+
updated: r.updated
|
|
1385
|
+
}))
|
|
1386
|
+
};
|
|
1387
|
+
if (statusFilter) payload.statusFilter = statusFilter;
|
|
1388
|
+
process.stdout.write(JSON.stringify(payload, null, 2) + '\n');
|
|
1389
|
+
return;
|
|
1390
|
+
}
|
|
1391
|
+
if (!filtered.length) return log('(no tasks)');
|
|
1370
1392
|
log('| ID | Status | Request | Evidence | Next Action | Updated |');
|
|
1371
1393
|
log('|---|---|---|---|---|---|');
|
|
1372
|
-
for (const r of
|
|
1394
|
+
for (const r of filtered) log(`| ${r.id} | ${r.status} | ${r.request} | ${r.evidence} | ${r.nextAction} | ${r.updated} |`);
|
|
1373
1395
|
}
|
|
1374
1396
|
function taskAdd(root, text) {
|
|
1375
1397
|
const id = nextId(root, 'T');
|
|
@@ -4271,7 +4293,7 @@ function _banner(opts = {}) {
|
|
|
4271
4293
|
lines.push('');
|
|
4272
4294
|
for (const ln of lines) log(ln);
|
|
4273
4295
|
if (opts.quickStart) {
|
|
4274
|
-
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.
|
|
4296
|
+
log(C.bold(C.cyan(' ✨ 빠른 시작 (1.9.134+ task list --json + MCP 41 — 64 라운드 자율 누적)')));
|
|
4275
4297
|
log(' ' + C.green('npx leerness@latest init .') + C.dim(' # 신규 프로젝트 + 외부 AI CLI 설정'));
|
|
4276
4298
|
log(' ' + C.green('npx leerness handoff .') + C.dim(' # 컨텍스트 + lessons + 매칭 skill + history hit + brainstorm hits + 헤드라인'));
|
|
4277
4299
|
log(' ' + C.green('npx leerness handoff . --quiet') + C.dim(' # 자동화/CI 모드 (1.9.99) — 자동 회수 라인 비활성'));
|
|
@@ -8588,7 +8610,8 @@ function mcpServeCmd(root) {
|
|
|
8588
8610
|
{ name: 'leerness_decision_drop', description: '1.9.125 — decisions.md 에서 특정 결정 제거 (target: date YYYY-MM-DD 또는 title substring). 제거된 블록은 .harness/decisions.archive.md 에 자동 보존', inputSchema: { type: 'object', properties: { target: { type: 'string' }, path: { type: 'string' } }, required: ['target'] } },
|
|
8589
8611
|
{ name: 'leerness_plan_remove', description: '1.9.126 — plan.md 에서 특정 milestone 블록 (### M-XXXX) 제거 (target: M-XXXX 또는 title substring). 제거된 블록은 .harness/plan.archive.md 에 자동 보존. Memory Surface DELETE 5종 완전 완성', inputSchema: { type: 'object', properties: { target: { type: 'string' }, path: { type: 'string' } }, required: ['target'] } },
|
|
8590
8612
|
{ name: 'leerness_memory_archive_list', description: '1.9.127 — DELETE 5종 archive 파일 통합 조회 JSON ({ decisions: [], lessons: [], plan: [], totals: { decisions, lessons, plan, all } }). 외부 AI가 과거에 제거된 항목을 회수/복원 후보로 참조. --surface 필터: decisions|lessons|plan', inputSchema: { type: 'object', properties: { surface: { type: 'string' }, path: { type: 'string' } } } },
|
|
8591
|
-
{ name: 'leerness_memory_restore', description: '1.9.128 — archive 의 항목을 active 파일로 복귀 (DELETE→RESTORE cycle). surface: decisions|lessons|plan. target: date YYYY-MM-DD 또는 target substring 매칭. 복원된 블록은 archive 에서 제거됨. 🎉 MCP 40 도구 마일스톤', inputSchema: { type: 'object', properties: { surface: { type: 'string', enum: ['decisions', 'lessons', 'plan'] }, target: { type: 'string' }, path: { type: 'string' } }, required: ['surface', 'target'] } }
|
|
8613
|
+
{ name: 'leerness_memory_restore', description: '1.9.128 — archive 의 항목을 active 파일로 복귀 (DELETE→RESTORE cycle). surface: decisions|lessons|plan. target: date YYYY-MM-DD 또는 target substring 매칭. 복원된 블록은 archive 에서 제거됨. 🎉 MCP 40 도구 마일스톤', inputSchema: { type: 'object', properties: { surface: { type: 'string', enum: ['decisions', 'lessons', 'plan'] }, target: { type: 'string' }, path: { type: 'string' } }, required: ['surface', 'target'] } },
|
|
8614
|
+
{ name: 'leerness_task_list', description: '1.9.134 — progress-tracker.md 전체 task 조회 JSON ({ total, tasks: [{ id, status, request, evidence, nextAction, updated }] }). --status 필터 지원 (planned|in-progress|done 등). 외부 AI가 task 상태 회수', inputSchema: { type: 'object', properties: { path: { type: 'string' }, status: { type: 'string' } } } }
|
|
8592
8615
|
];
|
|
8593
8616
|
|
|
8594
8617
|
function send(obj) {
|
|
@@ -8660,6 +8683,7 @@ function mcpServeCmd(root) {
|
|
|
8660
8683
|
case 'leerness_plan_remove': cliArgs = ['plan', 'remove', String(args.target || ''), '--path', targetPath]; break;
|
|
8661
8684
|
case 'leerness_memory_archive_list': cliArgs = ['memory', 'archive', 'list', '--path', targetPath, '--json', ...(args.surface ? ['--surface', args.surface] : [])]; break;
|
|
8662
8685
|
case 'leerness_memory_restore': cliArgs = ['memory', 'restore', String(args.surface || ''), String(args.target || ''), '--path', targetPath]; break;
|
|
8686
|
+
case 'leerness_task_list': cliArgs = ['task', 'list', '--path', targetPath, '--json', ...(args.status ? ['--status', args.status] : [])]; break;
|
|
8663
8687
|
default:
|
|
8664
8688
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
8665
8689
|
}
|