leerness 1.9.230 β 1.9.232
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 +62 -0
- package/README.md +3 -3
- package/bin/harness.js +117 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.232 β 2026-05-23
|
|
4
|
+
|
|
5
|
+
**π pulse memorySurface BUG fix + handoff --pulse μ΅μ
+ session close μλ pulse.**
|
|
6
|
+
|
|
7
|
+
### 1. pulse memorySurface BUG fix (1.9.231 β 1.9.232)
|
|
8
|
+
- 1.9.231 pulse μ T/D/R/P/L μΉ΄μ΄νΈκ° μλͺ»λ μ κ·μμΌλ‘ λ 0 μΆλ ₯
|
|
9
|
+
- 1.9.232: `memoryStatusCmd` μ λμΌν ν¨ν΄ μ¬μ© (`readProgressRows`, `_extractDecisionBlocks`, `readRules`, `### M-` regex, `### YYYY-MM-DD` regex)
|
|
10
|
+
- κ²μ¦: leerness-pkg β κΈ°μ‘΄ `T0/D0/R0/P0/L0` β μ μ `T0/D0/R1/P1/L0` (active rule + milestone λ°μ)
|
|
11
|
+
|
|
12
|
+
### 2. `leerness handoff --pulse` μ΅μ
μ μ€
|
|
13
|
+
- handoff λμ pulse 1 line νμ μΆλ ₯
|
|
14
|
+
- AI κ° λΉ λ₯Έ μν νμΈ μ μ¬μ© (`handoff` μ 체 νΈμΆ λμ )
|
|
15
|
+
- λ΄λΆ: `pulseCmd` μ§μ νΈμΆ
|
|
16
|
+
|
|
17
|
+
### 3. session close μλ pulse ν μ€ λ
ΈμΆ
|
|
18
|
+
- λ§κ° μ 1.9.217 ν΅ν© λ³΄κ³ λμ pulse ν μ€ μλ μΆκ°
|
|
19
|
+
- λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§: `π v1.9.232 Β· π R188 Β· π§ T0/D0/R1/P1/L0 Β· π― R200 (1d)`
|
|
20
|
+
- AI κ° ν μ€λ‘ 컨ν
μ€νΈ ν보
|
|
21
|
+
|
|
22
|
+
### 4. λμ νκ· (1.9.207~231) β λͺ¨λ μ μ§
|
|
23
|
+
|
|
24
|
+
### 5. stress-v177 β 13/13 PASS
|
|
25
|
+
- 1.9.232 (4): VERSION + pulse BUG fix + handoff --pulse + session close μλ pulse
|
|
26
|
+
- μ±λ₯ (2): cold_start avg 389ms / pulse 1009ms
|
|
27
|
+
- λμ νκ· (7): 1.9.207~231
|
|
28
|
+
|
|
29
|
+
### 6. μλ release (94 λΌμ΄λ main-push streak Β· 55 λΌμ΄λ npm publish streak)
|
|
30
|
+
|
|
31
|
+
π **1 λΌμ΄λ BUG fix + 2 UX κ°μ ** β pulse μμ€ν
μμ μ± κ°ν
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 1.9.231 β 2026-05-23
|
|
36
|
+
|
|
37
|
+
**π leerness pulse μ λͺ
λ Ή (ν μ€ μ’
ν© μμ½) + MCP 64λ²μ§Έ λꡬ.**
|
|
38
|
+
|
|
39
|
+
### 1. `leerness pulse` μ λͺ
λ Ή β ν μ€ μ’
ν© μμ½
|
|
40
|
+
- 10 ν΅μ¬ μ§νλ₯Ό 1 lineμΌλ‘: `π v1.9.231 Β· π R187 Β· π MCP 64 Β· π§ T0/D0/R0/P0/L0 Β· π― R200 (1d) Β· π abnormal:medium`
|
|
41
|
+
- `--json` μ΅μ
: `{ version, roundCount, mcpTools, memorySurface, security, health, driftScore, nextMilestone, etaDays, abnormalShutdown }`
|
|
42
|
+
- **handoff λ³΄λ€ κ°λ²Όμ**: drift/health κ³μ° skip β λ λΉ λ¦
|
|
43
|
+
|
|
44
|
+
### 2. MCP 64λ²μ§Έ λꡬ β `leerness_pulse`
|
|
45
|
+
- μΈλΆ AIκ° κ°λ²Όμ΄ λ¨μΌ νΈμΆλ‘ leerness μ 체 μν νμ
|
|
46
|
+
- 1.9.230 (62) β 1.9.231 (**64**, +1)
|
|
47
|
+
|
|
48
|
+
### 3. μ€ μΈ‘μ β leerness μ체 pulse
|
|
49
|
+
- π νλμ 보기: R187 / MCP 64 / R200 ETA 1d / abnormal:medium
|
|
50
|
+
- handoff (~1019ms) β pulse (~945ms) β λ λΉ λ₯΄κ² ν΅μ¬λ§
|
|
51
|
+
|
|
52
|
+
### 4. λμ νκ· (1.9.207~230) β λͺ¨λ μ μ§
|
|
53
|
+
|
|
54
|
+
### 5. stress-v176 β 16/16 PASS
|
|
55
|
+
- 1.9.231 (6): VERSION + CLI ν μ€ + --json + git fallback + MCP 64 + μ€ νΈμΆ
|
|
56
|
+
- μ±λ₯ (2): cold_start avg 394ms / pulse 945ms
|
|
57
|
+
- λμ νκ· (8): 1.9.207~230
|
|
58
|
+
|
|
59
|
+
### 6. μλ release (93 λΌμ΄λ main-push streak Β· 54 λΌμ΄λ npm publish streak)
|
|
60
|
+
|
|
61
|
+
π **λΉ λ₯Έ μν νμΈ λͺ
λ Ή μ μ€** β pulse κ° handoffλ³΄λ€ κ°λ²Όμμ μλνμ μ΅μ
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
3
65
|
## 1.9.230 β 2026-05-23
|
|
4
66
|
|
|
5
67
|
**π handoff/session close/health --json milestones ν΅ν© (7 νλ μμ±) + ν€λλΌμΈ ETA μλ° νμ.**
|
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.232 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π pulse BUG fix Β· handoff --pulse Β· session close μλ β
|
|
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.232';
|
|
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 μ²λ¦¬).
|
|
@@ -2196,6 +2196,88 @@ function milestonesCmd(root) {
|
|
|
2196
2196
|
}
|
|
2197
2197
|
}
|
|
2198
2198
|
|
|
2199
|
+
// 1.9.231: leerness pulse β ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν)
|
|
2200
|
+
// handoff ν€λλΌμΈμ μΆμ½ λ²μ β μ¬μ©μκ° λΉ λ₯΄κ² μν νμ
|
|
2201
|
+
// μλ΅ (--json): { version, roundCount, mcpTools, memorySurface, security, health, driftScore, nextMilestone, etaDays, abnormal }
|
|
2202
|
+
function pulseCmd(root) {
|
|
2203
|
+
root = absRoot(root);
|
|
2204
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
2205
|
+
const cy = s => isTty ? `\x1b[36m${s}\x1b[0m` : s;
|
|
2206
|
+
const gr = s => isTty ? `\x1b[32m${s}\x1b[0m` : s;
|
|
2207
|
+
const yl = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
2208
|
+
const rd = s => isTty ? `\x1b[31m${s}\x1b[0m` : s;
|
|
2209
|
+
const dm = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
2210
|
+
const data = {
|
|
2211
|
+
version: VERSION,
|
|
2212
|
+
roundCount: 0,
|
|
2213
|
+
mcpTools: 0,
|
|
2214
|
+
memorySurface: 'T0/D0/R0/P0/L0',
|
|
2215
|
+
security: 'unknown',
|
|
2216
|
+
health: 'unknown',
|
|
2217
|
+
driftScore: null,
|
|
2218
|
+
nextMilestone: null,
|
|
2219
|
+
etaDays: null,
|
|
2220
|
+
abnormalShutdown: 'none'
|
|
2221
|
+
};
|
|
2222
|
+
// λΌμ΄λ μΉ΄μ΄νΈ
|
|
2223
|
+
try { data.roundCount = _computeRoundHistory(root).roundCount; } catch {}
|
|
2224
|
+
// MCP λꡬ μ (μ½λ grep)
|
|
2225
|
+
try {
|
|
2226
|
+
const src = read(__filename);
|
|
2227
|
+
const matches = src.match(/name: 'leerness_[a-z_]+'/g) || [];
|
|
2228
|
+
data.mcpTools = matches.length;
|
|
2229
|
+
} catch {}
|
|
2230
|
+
// Memory Surface (T/D/R/P/L) β 1.9.232 BUG fix: memoryStatusCmd μ λμΌν ν¨ν΄ μ¬μ©
|
|
2231
|
+
try {
|
|
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}`;
|
|
2246
|
+
} catch {}
|
|
2247
|
+
// λ§μΌμ€ν€ + ETA
|
|
2248
|
+
try {
|
|
2249
|
+
const ms = _computeMilestones(root);
|
|
2250
|
+
if (ms.next) {
|
|
2251
|
+
data.nextMilestone = ms.next.milestone;
|
|
2252
|
+
data.etaDays = ms.next.etaDays;
|
|
2253
|
+
}
|
|
2254
|
+
} catch {}
|
|
2255
|
+
// λΉμ μ μ’
λ£
|
|
2256
|
+
try {
|
|
2257
|
+
const ad = _detectAbnormalShutdown(root);
|
|
2258
|
+
if (ad.abnormalShutdown) data.abnormalShutdown = ad.severity;
|
|
2259
|
+
} catch {}
|
|
2260
|
+
// drift score (κ°λ¨ β env μ€μ μ skip)
|
|
2261
|
+
if (process.env.LEERNESS_NO_DRIFT_CHECK !== '1') {
|
|
2262
|
+
// μ§μ κ³μ° skip β handoff μ λ³λ νΈμΆμ΄ λΉ λ¦. pulse λ κ°λ²Όμ μ°μ .
|
|
2263
|
+
}
|
|
2264
|
+
if (has('--json')) { log(JSON.stringify(data, null, 2)); return; }
|
|
2265
|
+
// ν μ€ μΆλ ₯
|
|
2266
|
+
let line = `π v${data.version} Β· π R${data.roundCount} Β· π MCP ${data.mcpTools} Β· π§ ${data.memorySurface}`;
|
|
2267
|
+
if (data.nextMilestone) {
|
|
2268
|
+
const eta = data.etaDays != null ? ` (${data.etaDays}d)` : '';
|
|
2269
|
+
line += ` Β· π― R${data.nextMilestone}${eta}`;
|
|
2270
|
+
}
|
|
2271
|
+
if (data.abnormalShutdown !== 'none') {
|
|
2272
|
+
line += ` Β· π abnormal:${data.abnormalShutdown}`;
|
|
2273
|
+
}
|
|
2274
|
+
log(cy(`# leerness pulse (1.9.231/1.9.232) β ν μ€ μ’
ν© μμ½`));
|
|
2275
|
+
log('');
|
|
2276
|
+
log(` ${line}`);
|
|
2277
|
+
log('');
|
|
2278
|
+
log(dm(` β μμΈ: leerness handoff . | health . | round-history | milestones`));
|
|
2279
|
+
}
|
|
2280
|
+
|
|
2199
2281
|
function roundHistoryCmd(root) {
|
|
2200
2282
|
root = absRoot(root);
|
|
2201
2283
|
const isTty = process.stdout && process.stdout.isTTY;
|
|
@@ -7191,6 +7273,10 @@ function _handoffWorkspace(rootBase) {
|
|
|
7191
7273
|
}
|
|
7192
7274
|
|
|
7193
7275
|
function handoffCmd(root) {
|
|
7276
|
+
// 1.9.232: --pulse μ΅μ
β pulse 1 line νμμΌλ‘ μΆλ ₯ (handoff μ 체 λμ )
|
|
7277
|
+
if (has('--pulse')) {
|
|
7278
|
+
return pulseCmd(absRoot(root));
|
|
7279
|
+
}
|
|
7194
7280
|
// 1.9.17: --all-apps / --include ν΅ν© λͺ¨λ
|
|
7195
7281
|
if (has('--all-apps') || arg('--include', null)) {
|
|
7196
7282
|
return _handoffWorkspace(absRoot(root));
|
|
@@ -10275,6 +10361,28 @@ function sessionClose(root, opts = {}) {
|
|
|
10275
10361
|
log(grn(` β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified ${idemp.summary.verifiedAreas} μμ`));
|
|
10276
10362
|
}
|
|
10277
10363
|
} catch {}
|
|
10364
|
+
// 1.9.232: λ§κ° μ pulse ν μ€ μλ λ
ΈμΆ β λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§
|
|
10365
|
+
try {
|
|
10366
|
+
const rh = _computeRoundHistory(root);
|
|
10367
|
+
const ms = _computeMilestones(root);
|
|
10368
|
+
const rows = readProgressRows(root);
|
|
10369
|
+
const tIn = rows.filter(r => r.status === 'in-progress').length;
|
|
10370
|
+
const dm = exists(decisionsPath(root)) ? read(decisionsPath(root)) : '';
|
|
10371
|
+
const dCnt = _extractDecisionBlocks(dm).length;
|
|
10372
|
+
const rActive = readRules(root).filter(r => r.status === 'active').length;
|
|
10373
|
+
const planText = exists(planPath(root)) ? read(planPath(root)) : '';
|
|
10374
|
+
const pCnt = (planText.match(/^### M-\d{4}\./gm) || []).length;
|
|
10375
|
+
const lm = exists(lessonsPath(root)) ? read(lessonsPath(root)) : '';
|
|
10376
|
+
const lCnt = (lm.match(/^### \d{4}-\d{2}-\d{2}[^\n]*/gm) || []).length;
|
|
10377
|
+
const mem = `T${tIn}/D${dCnt}/R${rActive}/P${pCnt}/L${lCnt}`;
|
|
10378
|
+
let pulseLine = `π v${VERSION} Β· π R${rh.roundCount} Β· π§ ${mem}`;
|
|
10379
|
+
if (ms.next) {
|
|
10380
|
+
const eta = ms.next.etaDays != null ? ` (${ms.next.etaDays}d)` : '';
|
|
10381
|
+
pulseLine += ` Β· π― R${ms.next.milestone}${eta}`;
|
|
10382
|
+
}
|
|
10383
|
+
log('');
|
|
10384
|
+
log(` ${pulseLine} ${dim('β leerness pulse (1.9.232)')}`);
|
|
10385
|
+
} catch {}
|
|
10278
10386
|
} catch {}
|
|
10279
10387
|
}
|
|
10280
10388
|
}
|
|
@@ -14123,7 +14231,8 @@ function mcpServeCmd(root) {
|
|
|
14123
14231
|
{ name: 'leerness_session_resume', description: '1.9.221 (1.9.220 μ¬μ©μ λͺ
μ) β λΉμ μ μ’
λ£ κ°μ§ + μμ¨ μ¬κ°. 5μ νΈ λΆμ: last-handoff-stale / wakeup-missed / in-progress-stale / auto-resume-plan-unused / release-branch-pending. μλ΅: { abnormalShutdown, severity (none/low/medium/high), signals[], resumeGuide[] }. μΈλΆ AIκ° "μ μ /μμ€ν
μ’
λ£/μΈμ
μ’
λ£ ν leerness μνκ° μ μμΈκ°? μ΄λ»κ² μ¬κ°?"λ₯Ό νμ. π MCP 60 λꡬ λ§μΌμ€ν€ (53β60, +7 in 1.9.168/216/221). μΈμ: { path? }', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },
|
|
14124
14232
|
{ 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' } } } },
|
|
14125
14233
|
{ 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' } } } },
|
|
14126
|
-
{ 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' } } } }
|
|
14234
|
+
{ 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' } } } },
|
|
14235
|
+
{ 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' } } } }
|
|
14127
14236
|
];
|
|
14128
14237
|
|
|
14129
14238
|
function send(obj) {
|
|
@@ -14292,6 +14401,10 @@ function mcpServeCmd(root) {
|
|
|
14292
14401
|
// 1.9.229: λλ¬ λ§μΌμ€ν€ + λ€μ ETA
|
|
14293
14402
|
cliArgs = ['milestones', '--path', targetPath, '--json'];
|
|
14294
14403
|
break;
|
|
14404
|
+
case 'leerness_pulse':
|
|
14405
|
+
// 1.9.231: ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν)
|
|
14406
|
+
cliArgs = ['pulse', '--path', targetPath, '--json'];
|
|
14407
|
+
break;
|
|
14295
14408
|
default:
|
|
14296
14409
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
14297
14410
|
}
|
|
@@ -17949,6 +18062,8 @@ async function main() {
|
|
|
17949
18062
|
if (cmd === 'round-history') return roundHistoryCmd(arg('--path', process.cwd()));
|
|
17950
18063
|
// 1.9.229: leerness milestones β λλ¬ λ§μΌμ€ν€ + λ€μ ETA (1.9.226 νμ₯)
|
|
17951
18064
|
if (cmd === 'milestones') return milestonesCmd(arg('--path', process.cwd()));
|
|
18065
|
+
// 1.9.231: leerness pulse β ν μ€ μ’
ν© μμ½ (10 ν΅μ¬ μ§ν)
|
|
18066
|
+
if (cmd === 'pulse') return pulseCmd(arg('--path', process.cwd()));
|
|
17952
18067
|
// 1.9.208: leerness constraints <list|check|add> β νλ«νΌ/API μ μ½ μ¬μ μ²΄ν¬ (μ¬μ©μ λͺ
μ)
|
|
17953
18068
|
if (cmd === 'constraints') return constraintsCmd(arg('--path', process.cwd()), args[1], ...args.slice(2));
|
|
17954
18069
|
// 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.232",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|