leerness 1.9.231 β 1.9.233
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 +70 -0
- package/README.md +3 -3
- package/bin/harness.js +159 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,75 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.233 β 2026-05-23
|
|
4
|
+
|
|
5
|
+
**π leerness commands μ λͺ
λ Ή (9 μΉ΄ν
κ³ λ¦¬ 51 CLI) + MCP 65λ²μ§Έ λꡬ.**
|
|
6
|
+
|
|
7
|
+
### 1. `leerness commands` μ λͺ
λ Ή β μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ©λ‘
|
|
8
|
+
- **9 μΉ΄ν
κ³ λ¦¬ Β· 51 λͺ
λ Ή** ν λμ:
|
|
9
|
+
- status (8) β handoff/health/pulse/round-history/milestones/session-resume/which/memory status
|
|
10
|
+
- task (5) β add/update/drop/export + next-action
|
|
11
|
+
- memory (4) β decision/rule/plan/lesson CRUD
|
|
12
|
+
- audit (10) β audit/drift/scan secrets/encoding/lazy/verify-claim/optimism/requests/pre-wake/idempotency
|
|
13
|
+
- workflow (7) β session close/resume/route/agents/review-request/review/brainstorm
|
|
14
|
+
- release (3) β sync-main/pack/publish
|
|
15
|
+
- skill (2) β list/info/learn/use/optimize/match/suggest + install/install-top/publish/search/discover
|
|
16
|
+
- bridge (3) β web/pc/lsp
|
|
17
|
+
- config (9) β init/migrate/update/wakeup-interval/workspace-dir/intent/constraints/provider/commands
|
|
18
|
+
- `--json` μ΅μ
(μΈλΆ μλν)
|
|
19
|
+
|
|
20
|
+
### 2. MCP 65λ²μ§Έ λꡬ β `leerness_commands`
|
|
21
|
+
- μΈλΆ AI κ° μ 체 CLI λͺ©λ‘μ μ§μ νμ β λ§€λ΄μΌ/λμλ§ λμ μμ±
|
|
22
|
+
- MCP 64 β 65 (+1)
|
|
23
|
+
|
|
24
|
+
### 3. μ€ μΈ‘μ β leerness μ 체 νλ©΄ κ°μν
|
|
25
|
+
- 9 μΉ΄ν
κ³ λ¦¬ Γ νκ· 5.7 λͺ
λ Ή = **51 CLI λͺ
λ Ή**
|
|
26
|
+
- handoff/health/pulse λ± ν΅μ¬ status λͺ
λ Ήμ status μΉ΄ν
κ³ λ¦¬μ κ·Έλ£Ήν
|
|
27
|
+
|
|
28
|
+
### 4. λμ νκ· (1.9.207~232) β λͺ¨λ μ μ§
|
|
29
|
+
|
|
30
|
+
### 5. stress-v178 β 16/16 PASS
|
|
31
|
+
- 1.9.233 (6): VERSION + CLI + --json μΉ΄ν
κ³ λ¦¬ κ²μ¦ + human μΆλ ₯ + MCP 65 + μ€ νΈμΆ
|
|
32
|
+
- μ±λ₯ (2): cold_start avg 413ms / commands 390ms (μ μ λ°μ΄ν°, λΉ λ¦)
|
|
33
|
+
- λμ νκ· (8): 1.9.207~232
|
|
34
|
+
|
|
35
|
+
### 6. μλ release (95 λΌμ΄λ main-push streak Β· 56 λΌμ΄λ npm publish streak)
|
|
36
|
+
|
|
37
|
+
π **μ 체 νλ©΄ κ°μν** β 9 μΉ΄ν
κ³ λ¦¬ Γ 51 CLI Γ 65 MCP λꡬ νλμ
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 1.9.232 β 2026-05-23
|
|
42
|
+
|
|
43
|
+
**π pulse memorySurface BUG fix + handoff --pulse μ΅μ
+ session close μλ pulse.**
|
|
44
|
+
|
|
45
|
+
### 1. pulse memorySurface BUG fix (1.9.231 β 1.9.232)
|
|
46
|
+
- 1.9.231 pulse μ T/D/R/P/L μΉ΄μ΄νΈκ° μλͺ»λ μ κ·μμΌλ‘ λ 0 μΆλ ₯
|
|
47
|
+
- 1.9.232: `memoryStatusCmd` μ λμΌν ν¨ν΄ μ¬μ© (`readProgressRows`, `_extractDecisionBlocks`, `readRules`, `### M-` regex, `### YYYY-MM-DD` regex)
|
|
48
|
+
- κ²μ¦: leerness-pkg β κΈ°μ‘΄ `T0/D0/R0/P0/L0` β μ μ `T0/D0/R1/P1/L0` (active rule + milestone λ°μ)
|
|
49
|
+
|
|
50
|
+
### 2. `leerness handoff --pulse` μ΅μ
μ μ€
|
|
51
|
+
- handoff λμ pulse 1 line νμ μΆλ ₯
|
|
52
|
+
- AI κ° λΉ λ₯Έ μν νμΈ μ μ¬μ© (`handoff` μ 체 νΈμΆ λμ )
|
|
53
|
+
- λ΄λΆ: `pulseCmd` μ§μ νΈμΆ
|
|
54
|
+
|
|
55
|
+
### 3. session close μλ pulse ν μ€ λ
ΈμΆ
|
|
56
|
+
- λ§κ° μ 1.9.217 ν΅ν© λ³΄κ³ λμ pulse ν μ€ μλ μΆκ°
|
|
57
|
+
- λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§: `π v1.9.232 Β· π R188 Β· π§ T0/D0/R1/P1/L0 Β· π― R200 (1d)`
|
|
58
|
+
- AI κ° ν μ€λ‘ 컨ν
μ€νΈ ν보
|
|
59
|
+
|
|
60
|
+
### 4. λμ νκ· (1.9.207~231) β λͺ¨λ μ μ§
|
|
61
|
+
|
|
62
|
+
### 5. stress-v177 β 13/13 PASS
|
|
63
|
+
- 1.9.232 (4): VERSION + pulse BUG fix + handoff --pulse + session close μλ pulse
|
|
64
|
+
- μ±λ₯ (2): cold_start avg 389ms / pulse 1009ms
|
|
65
|
+
- λμ νκ· (7): 1.9.207~231
|
|
66
|
+
|
|
67
|
+
### 6. μλ release (94 λΌμ΄λ main-push streak Β· 55 λΌμ΄λ npm publish streak)
|
|
68
|
+
|
|
69
|
+
π **1 λΌμ΄λ BUG fix + 2 UX κ°μ ** β pulse μμ€ν
μμ μ± κ°ν
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
3
73
|
## 1.9.231 β 2026-05-23
|
|
4
74
|
|
|
5
75
|
**π leerness pulse μ λͺ
λ Ή (ν μ€ μ’
ν© μμ½) + MCP 64λ²μ§Έ λꡬ.**
|
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.233 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π leerness commands Β· 9 μΉ΄ν
κ³ λ¦¬ Β· 51 CLI Β· MCP 65 β
|
|
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.233';
|
|
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 μ²λ¦¬).
|
|
@@ -2227,14 +2227,22 @@ function pulseCmd(root) {
|
|
|
2227
2227
|
const matches = src.match(/name: 'leerness_[a-z_]+'/g) || [];
|
|
2228
2228
|
data.mcpTools = matches.length;
|
|
2229
2229
|
} catch {}
|
|
2230
|
-
// Memory Surface (T/D/R/P/L)
|
|
2230
|
+
// Memory Surface (T/D/R/P/L) β 1.9.232 BUG fix: memoryStatusCmd μ λμΌν ν¨ν΄ μ¬μ©
|
|
2231
2231
|
try {
|
|
2232
|
-
const
|
|
2233
|
-
const
|
|
2234
|
-
const
|
|
2235
|
-
const
|
|
2236
|
-
const
|
|
2237
|
-
|
|
2232
|
+
const rows = readProgressRows(root);
|
|
2233
|
+
const tasksInProgress = rows.filter(r => r.status === 'in-progress').length;
|
|
2234
|
+
const dm = exists(decisionsPath(root)) ? read(decisionsPath(root)) : '';
|
|
2235
|
+
const decisionBlocks = _extractDecisionBlocks(dm);
|
|
2236
|
+
const decisionCount = decisionBlocks.map(b => {
|
|
2237
|
+
const m = b.match(/^### (.+)$/m);
|
|
2238
|
+
return m ? '### ' + m[1].trim() : null;
|
|
2239
|
+
}).filter(Boolean).length;
|
|
2240
|
+
const rulesActive = readRules(root).filter(r => r.status === 'active').length;
|
|
2241
|
+
const planText = exists(planPath(root)) ? read(planPath(root)) : '';
|
|
2242
|
+
const milestonesCnt = (planText.match(/^### M-\d{4}\./gm) || []).length;
|
|
2243
|
+
const lm = exists(lessonsPath(root)) ? read(lessonsPath(root)) : '';
|
|
2244
|
+
const lessonsCount = (lm.match(/^### \d{4}-\d{2}-\d{2}[^\n]*/gm) || []).length;
|
|
2245
|
+
data.memorySurface = `T${tasksInProgress}/D${decisionCount}/R${rulesActive}/P${milestonesCnt}/L${lessonsCount}`;
|
|
2238
2246
|
} catch {}
|
|
2239
2247
|
// λ§μΌμ€ν€ + ETA
|
|
2240
2248
|
try {
|
|
@@ -2263,13 +2271,121 @@ function pulseCmd(root) {
|
|
|
2263
2271
|
if (data.abnormalShutdown !== 'none') {
|
|
2264
2272
|
line += ` Β· π abnormal:${data.abnormalShutdown}`;
|
|
2265
2273
|
}
|
|
2266
|
-
log(cy(`# leerness pulse (1.9.231) β ν μ€ μ’
ν© μμ½`));
|
|
2274
|
+
log(cy(`# leerness pulse (1.9.231/1.9.232) β ν μ€ μ’
ν© μμ½`));
|
|
2267
2275
|
log('');
|
|
2268
2276
|
log(` ${line}`);
|
|
2269
2277
|
log('');
|
|
2270
2278
|
log(dm(` β μμΈ: leerness handoff . | health . | round-history | milestones`));
|
|
2271
2279
|
}
|
|
2272
2280
|
|
|
2281
|
+
// 1.9.233: leerness commands β μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ
λ Ή λͺ©λ‘
|
|
2282
|
+
// λν/AI/MCP/CI κ° λΉ λ₯΄κ² μ 체 κΈ°λ₯μ νμ
ν μ μλλ‘.
|
|
2283
|
+
// μΉ΄ν
κ³ λ¦¬: status (handoff/health/pulse/round-history/milestones/session-resume/which/memory status)
|
|
2284
|
+
// task (task add/update/drop/export/sync)
|
|
2285
|
+
// memory (decision/rule/plan/lesson add/list/drop)
|
|
2286
|
+
// workflow (route/agents/orchestrate/review/persona)
|
|
2287
|
+
// release (release pack/bump/note/publish/sync-main)
|
|
2288
|
+
// audit (audit/scan secrets/encoding check/drift check/optimism-check/verify-claim/lazy detect)
|
|
2289
|
+
// skill (skill list/info/learn/use/optimize/match/suggest/install/publish/discover)
|
|
2290
|
+
// bridge (web/pc/lsp β opt-in)
|
|
2291
|
+
// config (init/migrate/update/auto-update/setup-agents/install/workspace-dir/wakeup-interval)
|
|
2292
|
+
// advanced (intent/requests/constraints/pre-wake-audit/idempotency/round-history/milestones/pulse)
|
|
2293
|
+
function commandsCmd(root) {
|
|
2294
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
2295
|
+
const cy = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
|
|
2296
|
+
const gr = s => isTty ? `\x1b[32m${s}\x1b[0m` : s;
|
|
2297
|
+
const yl = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
2298
|
+
const dm = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
2299
|
+
const cats = {
|
|
2300
|
+
status: [
|
|
2301
|
+
{ cmd: 'handoff [path] [--json] [--pulse] [--compact] [--quiet]', desc: 'μΈμ
μμ 컨ν
μ€νΈ + 7 ν΅ν© νλ' },
|
|
2302
|
+
{ cmd: 'health [path] [--json] [--strict]', desc: 'μ’
ν© ν¬μ€ + drift/security/skill/memory/featureGraph/roundHistory/milestones' },
|
|
2303
|
+
{ cmd: 'pulse [path] [--json]', desc: 'ν μ€ μ’
ν© μμ½ (1.9.231)' },
|
|
2304
|
+
{ cmd: 'round-history [path] [--json]', desc: 'git tag κΈ°λ° μμ¨ λΌμ΄λ ν΅κ³ (1.9.226)' },
|
|
2305
|
+
{ cmd: 'milestones [path] [--json]', desc: 'λλ¬ λ§μΌμ€ν€ + λ€μ ETA (1.9.229)' },
|
|
2306
|
+
{ cmd: 'session-resume [path] [--auto-fix] [--json]', desc: 'λΉμ μ μ’
λ£ κ°μ§ + μμ¨ μ¬κ° (1.9.220/222)' },
|
|
2307
|
+
{ cmd: 'which', desc: 'νμ± provider + κ²½λ‘ μ§λ¨' },
|
|
2308
|
+
{ cmd: 'memory status [path] [--json]', desc: 'T/D/R/P/L Memory Surface (1.9.114)' }
|
|
2309
|
+
],
|
|
2310
|
+
task: [
|
|
2311
|
+
{ cmd: 'task add "<request>"', desc: 'task μΆκ° (μλ dedup 1.9.212, review trigger 1.9.177)' },
|
|
2312
|
+
{ cmd: 'task update <id> --status <S>', desc: 'task μν κ°±μ ' },
|
|
2313
|
+
{ cmd: 'task drop <id>', desc: 'task λλ‘' },
|
|
2314
|
+
{ cmd: 'task export --to <path>', desc: 'TodoWrite JSON νμ export (1.9.60)' },
|
|
2315
|
+
{ cmd: 'next-action take|list [--json]', desc: 'next-action queue (1.9.201)' }
|
|
2316
|
+
],
|
|
2317
|
+
memory: [
|
|
2318
|
+
{ cmd: 'decision add|list|drop <id>', desc: 'decisions.md CRUD (1.9.108/118/125)' },
|
|
2319
|
+
{ cmd: 'rule add|list|pause|resume|remove', desc: 'rules.md CRUD (1.9.8/109)' },
|
|
2320
|
+
{ cmd: 'plan add|list <M-id>', desc: 'plan.md milestone CRUD (1.9.110/119)' },
|
|
2321
|
+
{ cmd: 'lesson save|list|drop', desc: 'lessons.md CRUD (1.9.112/117/124)' }
|
|
2322
|
+
],
|
|
2323
|
+
audit: [
|
|
2324
|
+
{ cmd: 'audit [path] [--fix] [--strict] [--json]', desc: 'λ©ν + 보μ + npm CVE ν΅ν© κ°μ¬' },
|
|
2325
|
+
{ cmd: 'drift check [path] [--auto-fix] [--json]', desc: 'drift μ νΈ + μλ ν볡 (1.9.37/82/225)' },
|
|
2326
|
+
{ cmd: 'scan secrets [path]', desc: 'μν¬λ¦Ώ νμ§' },
|
|
2327
|
+
{ cmd: 'encoding check [path]', desc: 'μΈμ½λ© κ²μ¦' },
|
|
2328
|
+
{ cmd: 'lazy detect [path] [--json]', desc: 'κ²μΌλ₯Έ μμ
κ°μ§ (1.9.101)' },
|
|
2329
|
+
{ cmd: 'verify-claim <T-ID> [--run-tests] [--strict-claims]', desc: 'μ£Όμ₯ κ²μ¦ (1.9.18~26)' },
|
|
2330
|
+
{ cmd: 'optimism-check <T-ID>', desc: 'λκ΄μ API κ°μ§ (1.9.26)' },
|
|
2331
|
+
{ cmd: 'requests audit|list|complete|drop|auto-complete', desc: 'μ¬μ©μ μμ² μΆμ (1.9.207/223)' },
|
|
2332
|
+
{ cmd: 'pre-wake-audit [path] [--last]', desc: 'sleep μ μ κ² (1.9.209)' },
|
|
2333
|
+
{ cmd: 'idempotency audit', desc: 'λ©±λ±μ± μλ° νμ§ (1.9.212)' }
|
|
2334
|
+
],
|
|
2335
|
+
workflow: [
|
|
2336
|
+
{ cmd: 'session close [path] [--json] [--auto-apply-delivered]', desc: 'μΈμ
λ§κ° + 9 μΉ΄ν
κ³ λ¦¬ + μλ ν΅ν©' },
|
|
2337
|
+
{ cmd: 'resume [path]', desc: 'auto-resume-plan μ μ© (1.9.203)' },
|
|
2338
|
+
{ cmd: 'route <task-type>', desc: 'μμ
μ ν λΆλ₯ (11μ’
)' },
|
|
2339
|
+
{ cmd: 'agents list|check|quota|dispatch|multi', desc: 'μΈλΆ AI CLI μ€μΌμ€νΈλ μ΄μ
' },
|
|
2340
|
+
{ cmd: 'review-request "<request>"', desc: 'μ¬μ©μ μμ² μ¬μ κ²ν (1.9.176)' },
|
|
2341
|
+
{ cmd: 'review <file> --persona <ids>', desc: 'νλ₯΄μλ 리뷰 (1.9.29)' },
|
|
2342
|
+
{ cmd: 'brainstorm "<topic>" [--include-code]', desc: 'μν¬μ€νμ΄μ€ νμ + μ½λ grep' }
|
|
2343
|
+
],
|
|
2344
|
+
release: [
|
|
2345
|
+
{ cmd: 'release sync-main [path]', desc: 'main merge + push + μλ npm publish (1.9.140/178)' },
|
|
2346
|
+
{ cmd: 'release pack', desc: 'tarball μμ±' },
|
|
2347
|
+
{ cmd: 'release publish', desc: 'GitHub release λ°ν' }
|
|
2348
|
+
],
|
|
2349
|
+
skill: [
|
|
2350
|
+
{ cmd: 'skill list|info|learn|use|optimize|match|suggest', desc: 'skill μΉ΄νλ‘κ·Έ CRUD' },
|
|
2351
|
+
{ cmd: 'skill install|install-top|publish|search|discover', desc: 'skill λ°°ν¬ + κ²μ' }
|
|
2352
|
+
],
|
|
2353
|
+
bridge: [
|
|
2354
|
+
{ cmd: 'web check|screenshot|extract <url>', desc: 'playwright bridge (opt-in, 1.9.165)' },
|
|
2355
|
+
{ cmd: 'pc check|click|type|screenshot', desc: 'robotjs/nut-tree bridge (opt-in, 1.9.166)' },
|
|
2356
|
+
{ cmd: 'lsp check|symbols|references', desc: 'LSP μ΄λν° (1.9.167)' }
|
|
2357
|
+
],
|
|
2358
|
+
config: [
|
|
2359
|
+
{ cmd: 'init [path]', desc: 'μν¬μ€νμ΄μ€ μ΄κΈ°ν' },
|
|
2360
|
+
{ cmd: 'migrate [path] [--dry-run]', desc: 'μ
λ°μ΄νΈ λ§μ΄κ·Έλ μ΄μ
' },
|
|
2361
|
+
{ cmd: 'update [--check|--yes|--force]', desc: 'μκ° μ
λ°μ΄νΈ' },
|
|
2362
|
+
{ cmd: 'wakeup-interval get|set|auto|history|record', desc: 'adaptive wakeup (1.9.210)' },
|
|
2363
|
+
{ cmd: 'workspace-dir get|guide', desc: 'μν¬μ€νμ΄μ€ λλ ν 리 (1.9.211)' },
|
|
2364
|
+
{ cmd: 'intent classify|expand|domains "<request>"', desc: 'μλ νμ
+ scope (1.9.213)' },
|
|
2365
|
+
{ cmd: 'constraints list|check|add', desc: 'νλ«νΌ/API μ μ½ (1.9.208)' },
|
|
2366
|
+
{ cmd: 'provider list|add|remove|sync', desc: 'Provider Registry (1.9.157~160)' },
|
|
2367
|
+
{ cmd: 'commands [--json]', desc: 'μ 체 λͺ
λ Ή μΉ΄ν
κ³ λ¦¬ λͺ©λ‘ (1.9.233)' }
|
|
2368
|
+
]
|
|
2369
|
+
};
|
|
2370
|
+
if (has('--json')) {
|
|
2371
|
+
log(JSON.stringify({ version: VERSION, totalCommands: Object.values(cats).reduce((s, a) => s + a.length, 0), categories: cats }, null, 2));
|
|
2372
|
+
return;
|
|
2373
|
+
}
|
|
2374
|
+
log(cy(`# leerness commands (1.9.233) β μ 체 CLI λͺ
λ Ή μΉ΄ν
κ³ λ¦¬ λͺ©λ‘`));
|
|
2375
|
+
log('');
|
|
2376
|
+
for (const [catName, list] of Object.entries(cats)) {
|
|
2377
|
+
log(gr(`## ${catName} (${list.length}κ°)`));
|
|
2378
|
+
list.forEach(c => {
|
|
2379
|
+
log(` β’ ${c.cmd}`);
|
|
2380
|
+
log(dm(` ${c.desc}`));
|
|
2381
|
+
});
|
|
2382
|
+
log('');
|
|
2383
|
+
}
|
|
2384
|
+
log(dm(` β μ΄ ${Object.values(cats).reduce((s, a) => s + a.length, 0)} λͺ
λ Ή (9 μΉ΄ν
κ³ λ¦¬)`));
|
|
2385
|
+
log(dm(` β MCP λꡬ: 65 (μΈλΆ AI λ
ΈμΆ)`));
|
|
2386
|
+
log(dm(` β λΉ λ₯Έ μμ: leerness pulse | handoff | health`));
|
|
2387
|
+
}
|
|
2388
|
+
|
|
2273
2389
|
function roundHistoryCmd(root) {
|
|
2274
2390
|
root = absRoot(root);
|
|
2275
2391
|
const isTty = process.stdout && process.stdout.isTTY;
|
|
@@ -7265,6 +7381,10 @@ function _handoffWorkspace(rootBase) {
|
|
|
7265
7381
|
}
|
|
7266
7382
|
|
|
7267
7383
|
function handoffCmd(root) {
|
|
7384
|
+
// 1.9.232: --pulse μ΅μ
β pulse 1 line νμμΌλ‘ μΆλ ₯ (handoff μ 체 λμ )
|
|
7385
|
+
if (has('--pulse')) {
|
|
7386
|
+
return pulseCmd(absRoot(root));
|
|
7387
|
+
}
|
|
7268
7388
|
// 1.9.17: --all-apps / --include ν΅ν© λͺ¨λ
|
|
7269
7389
|
if (has('--all-apps') || arg('--include', null)) {
|
|
7270
7390
|
return _handoffWorkspace(absRoot(root));
|
|
@@ -10349,6 +10469,28 @@ function sessionClose(root, opts = {}) {
|
|
|
10349
10469
|
log(grn(` β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified ${idemp.summary.verifiedAreas} μμ`));
|
|
10350
10470
|
}
|
|
10351
10471
|
} catch {}
|
|
10472
|
+
// 1.9.232: λ§κ° μ pulse ν μ€ μλ λ
ΈμΆ β λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§
|
|
10473
|
+
try {
|
|
10474
|
+
const rh = _computeRoundHistory(root);
|
|
10475
|
+
const ms = _computeMilestones(root);
|
|
10476
|
+
const rows = readProgressRows(root);
|
|
10477
|
+
const tIn = rows.filter(r => r.status === 'in-progress').length;
|
|
10478
|
+
const dm = exists(decisionsPath(root)) ? read(decisionsPath(root)) : '';
|
|
10479
|
+
const dCnt = _extractDecisionBlocks(dm).length;
|
|
10480
|
+
const rActive = readRules(root).filter(r => r.status === 'active').length;
|
|
10481
|
+
const planText = exists(planPath(root)) ? read(planPath(root)) : '';
|
|
10482
|
+
const pCnt = (planText.match(/^### M-\d{4}\./gm) || []).length;
|
|
10483
|
+
const lm = exists(lessonsPath(root)) ? read(lessonsPath(root)) : '';
|
|
10484
|
+
const lCnt = (lm.match(/^### \d{4}-\d{2}-\d{2}[^\n]*/gm) || []).length;
|
|
10485
|
+
const mem = `T${tIn}/D${dCnt}/R${rActive}/P${pCnt}/L${lCnt}`;
|
|
10486
|
+
let pulseLine = `π v${VERSION} Β· π R${rh.roundCount} Β· π§ ${mem}`;
|
|
10487
|
+
if (ms.next) {
|
|
10488
|
+
const eta = ms.next.etaDays != null ? ` (${ms.next.etaDays}d)` : '';
|
|
10489
|
+
pulseLine += ` Β· π― R${ms.next.milestone}${eta}`;
|
|
10490
|
+
}
|
|
10491
|
+
log('');
|
|
10492
|
+
log(` ${pulseLine} ${dim('β leerness pulse (1.9.232)')}`);
|
|
10493
|
+
} catch {}
|
|
10352
10494
|
} catch {}
|
|
10353
10495
|
}
|
|
10354
10496
|
}
|
|
@@ -14198,7 +14340,8 @@ function mcpServeCmd(root) {
|
|
|
14198
14340
|
{ name: 'leerness_requests_auto_complete', description: '1.9.224 (1.9.223 μλ νμ) β delivered ν¨ν΄ μλ κ°μ§ + μλ μλ£. "Round X.Y.Z β ꡬν μλ£" / "implemented" / "delivered" ν¨ν΄μ΄ μλ open μμ² μ€ νμ¬ λ²μ μ΄νμΈ κ²μ νλ³΄λ‘ λΆλ₯. μλ΅: { total, candidates: [{id, text, claimedVersion, currentVersion, deliveredKeyword, recordedAt}], currentVersion, applied (apply=true μ), completedIds[] }. μΈλΆ AIκ° "μ΄μ λμ λ κ°μ§ λ―Έλ΅ μ νΈ μ 리 κ°λ₯νκ°?"λ₯Ό νμ. κΈ°λ³Έ dry-run, apply: true λͺ
μ μμλ§ μ€ μ μ©. μΈμ: { path?, apply? (default false) }', inputSchema: { type: 'object', properties: { path: { type: 'string' }, apply: { type: 'boolean' } } } },
|
|
14199
14341
|
{ name: 'leerness_round_history', description: '1.9.226 β μμ¨ λΌμ΄λ ν΅κ³. git tag v1.9.X κΈ°λ° λμ λΌμ΄λ μΉ΄μ΄νΈ + λ€μ λ§μΌμ€ν€ (50/75/100/125/150/175/200/250/300/400/500) + νκ· rounds/day. μλ΅: { currentVersion, roundCount, baselineVersion, latestTags[], nextMilestone, roundsToNextMilestone, firstTagAt, latestTagAt, daysActive, avgRoundsPerDay }. μΈλΆ AIκ° "μ΄ νλ‘μ νΈλ μΌλ§λ μ§νλκ³ λ€μ λ§μΌμ€ν€κΉμ§ λͺ λΌμ΄λ λ¨μλ?"λ₯Ό νμ. μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
14200
14342
|
{ name: 'leerness_milestones', description: '1.9.229 (1.9.226 νμ₯) β λλ¬ λ§μΌμ€ν€ + λ€μ ETA. git tag μμ°¨ λΆμμΌλ‘ 25/50/75/100/125/150/175/200/250/300/400/500 λ§μΌμ€ν€ λλ¬ μΌμ + λ€μ λ§μΌμ€ν€ ETA (νμ¬ μλ κΈ°μ€) κ³μ°. μλ΅: { totalRounds, reached: [{milestone, version, reachedAt, daysFromBaseline}], next: {milestone, roundsRemaining, etaDays, etaDate}, baselineAt, avgRoundsPerDay }. μΈλΆ AIκ° "μ§κΈκΉμ§ μ΄λ€ λ§μΌμ€ν€μ μΈμ λ¬μ±νκ³ λ€μ λ§μΌμ€ν€ μμ λλ¬μΌμ?"μ νμ. μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
14201
|
-
{ name: 'leerness_pulse', description: '1.9.231 β ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν). μλ΅: { version, roundCount, mcpTools, memorySurface, security, health, driftScore, nextMilestone, etaDays, abnormalShutdown }. μΈλΆ AIκ° "leerness μν ν λμ 보기"λ₯Ό κ°λ²Όμ΄ λ¨μΌ νΈμΆλ‘ νμ. handoff λ³΄λ€ 5λ°° λΉ λ¦ (drift/health κ³μ° skip). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }
|
|
14343
|
+
{ name: 'leerness_pulse', description: '1.9.231 β ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν). μλ΅: { version, roundCount, mcpTools, memorySurface, security, health, driftScore, nextMilestone, etaDays, abnormalShutdown }. μΈλΆ AIκ° "leerness μν ν λμ 보기"λ₯Ό κ°λ²Όμ΄ λ¨μΌ νΈμΆλ‘ νμ. handoff λ³΄λ€ 5λ°° λΉ λ¦ (drift/health κ³μ° skip). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
14344
|
+
{ name: 'leerness_commands', description: '1.9.233 β μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ
λ Ή λͺ©λ‘ (9 μΉ΄ν
κ³ λ¦¬). μλ΅: { version, totalCommands, categories: { status, task, memory, audit, workflow, release, skill, bridge, config } }. μΈλΆ AIκ° "leerness κ° μ 곡νλ λͺ
λ Ήμ΄ λκ° μλ"λ₯Ό μ§μ νμ. λ§€λ΄μΌ/λμλ§ λμ μμ±. μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }
|
|
14202
14345
|
];
|
|
14203
14346
|
|
|
14204
14347
|
function send(obj) {
|
|
@@ -14371,6 +14514,10 @@ function mcpServeCmd(root) {
|
|
|
14371
14514
|
// 1.9.231: ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν)
|
|
14372
14515
|
cliArgs = ['pulse', '--path', targetPath, '--json'];
|
|
14373
14516
|
break;
|
|
14517
|
+
case 'leerness_commands':
|
|
14518
|
+
// 1.9.233: μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ
λ Ή λͺ©λ‘
|
|
14519
|
+
cliArgs = ['commands', '--json'];
|
|
14520
|
+
break;
|
|
14374
14521
|
default:
|
|
14375
14522
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
14376
14523
|
}
|
|
@@ -18030,6 +18177,8 @@ async function main() {
|
|
|
18030
18177
|
if (cmd === 'milestones') return milestonesCmd(arg('--path', process.cwd()));
|
|
18031
18178
|
// 1.9.231: leerness pulse β ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν)
|
|
18032
18179
|
if (cmd === 'pulse') return pulseCmd(arg('--path', process.cwd()));
|
|
18180
|
+
// 1.9.233: leerness commands β μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ
λ Ή λͺ©λ‘
|
|
18181
|
+
if (cmd === 'commands') return commandsCmd(arg('--path', process.cwd()));
|
|
18033
18182
|
// 1.9.208: leerness constraints <list|check|add> β νλ«νΌ/API μ μ½ μ¬μ μ²΄ν¬ (μ¬μ©μ λͺ
μ)
|
|
18034
18183
|
if (cmd === 'constraints') return constraintsCmd(arg('--path', process.cwd()), args[1], ...args.slice(2));
|
|
18035
18184
|
// 1.9.209: leerness pre-wake-audit β sleep μ sub-agent audit (μ¬μ©μ λͺ
μ)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.233",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|