leerness 1.9.235 β 1.9.237
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 +73 -0
- package/README.md +3 -3
- package/bin/harness.js +98 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,78 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.237 β 2026-05-24
|
|
4
|
+
|
|
5
|
+
**π session close --auto-cleanup-branches + handoff body 50+ branches κ²½κ³ .**
|
|
6
|
+
|
|
7
|
+
### 1. `session close --auto-cleanup-branches` μ΅μ
(1.9.224 ν¨ν΄ νμ₯)
|
|
8
|
+
- 50+ release/* merged branches μ μλ μ 리 (keep 10)
|
|
9
|
+
- μμ : 1.9.235 κ°λ (merged λ§, νμ¬ branch 보νΈ)
|
|
10
|
+
- `--auto-apply-delivered` (1.9.224) μ λμΌν μμ¨ λͺ¨λ ν¨ν΄
|
|
11
|
+
|
|
12
|
+
### 2. handoff body 50+ branches κ²½κ³ μλ λ
ΈμΆ
|
|
13
|
+
- `## π release/* branches λμ Nκ° (50+) (1.9.237)` λ³Έλ¬Έ μΉμ
μλ
|
|
14
|
+
- 3 κ°μ§ μ 리 μ΅μ
μλ μλ΄:
|
|
15
|
+
- μλ: `leerness release cleanup --apply --keep 10`
|
|
16
|
+
- λ§κ° μλ: `session close --auto-cleanup-branches`
|
|
17
|
+
- drift μλ: `drift check --auto-fix` (1.9.236)
|
|
18
|
+
- AI/μ¬μ©μ λμ νκΈ°λ¬Ό κ°μν
|
|
19
|
+
|
|
20
|
+
### 3. release cleanup μνκ³ μμ± (3 λΌμ΄λ λμ )
|
|
21
|
+
| λΌμ΄λ | κΈ°λ₯ |
|
|
22
|
+
|---|---|
|
|
23
|
+
| 1.9.235 | CLI μ μ€ (μλ) |
|
|
24
|
+
| 1.9.236 | MCP 66 + drift --auto-fix ν΅ν© |
|
|
25
|
+
| **1.9.237** | **session close μλ + handoff body κ²½κ³ ** β |
|
|
26
|
+
|
|
27
|
+
### 4. λμ νκ· (1.9.207~236) β λͺ¨λ μ μ§
|
|
28
|
+
|
|
29
|
+
### 5. stress-v182 β 15/15 PASS
|
|
30
|
+
- 1.9.237 (5): VERSION + flag μ½λ + session close μλ΄ + handoff body κ²½κ³ + 격리 no-warning
|
|
31
|
+
- μ±λ₯ (2): cold_start avg 387ms / handoff 4706ms
|
|
32
|
+
- λμ νκ· (8): 1.9.207~236
|
|
33
|
+
|
|
34
|
+
### 6. μλ release (99 λΌμ΄λ main-push streak Β· 60 λΌμ΄λ npm publish streak π)
|
|
35
|
+
|
|
36
|
+
π **60 λΌμ΄λ npm publish streak λ¬μ±** + 1 λΌμ΄λ ν **R100 main-push streak λλ¬**
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 1.9.236 β 2026-05-24
|
|
41
|
+
|
|
42
|
+
**π MCP 66λ²μ§Έ λꡬ (release_cleanup) + drift check --auto-fix ν΅ν© (50+ branches μλ μ 리).**
|
|
43
|
+
|
|
44
|
+
### 1. MCP 66λ²μ§Έ λꡬ β `leerness_release_cleanup`
|
|
45
|
+
- 1.9.235 release cleanup CLI λ₯Ό μΈλΆ AI μ λ
ΈμΆ
|
|
46
|
+
- μΈμ: `{ path?, apply? (default false), keep? (default 5) }`
|
|
47
|
+
- μλ΅: `{ apply, keep, total, merged, unmerged, deleteCount, toDelete[], recent[], unmergedSample[] }`
|
|
48
|
+
- MCP 65 β **66** (+1)
|
|
49
|
+
|
|
50
|
+
### 2. `drift check --auto-fix` release cleanup ν΅ν© (1.9.82/225 ν¨ν΄ νμ₯)
|
|
51
|
+
- merged `release/*` branches 50κ° μ΄κ³Ό μ μλ μ 리
|
|
52
|
+
- μμ : keep 10 (μ΅κ·Ό 10κ° μ μ§), merged λ§ μμ (unmerged 보νΈ)
|
|
53
|
+
- 1.9.82 audit --fix β 1.9.225 delivered β 1.9.236 release cleanup (3 λΌμ΄λ λμ )
|
|
54
|
+
|
|
55
|
+
### 3. drift ν볡 μμ€ν
νμ₯ λ§€νΈλ¦μ€ (4 μλ ν볡 ν΅ν©)
|
|
56
|
+
| λΌμ΄λ | μ νΈ | μλ ν볡 |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| 1.9.39 | critical | session close μλ |
|
|
59
|
+
| 1.9.82 | 보μ | audit --fix |
|
|
60
|
+
| 1.9.225 | delivered | requests μλ μλ£ |
|
|
61
|
+
| **1.9.236** | **release-branch** | **release cleanup --keep 10** β |
|
|
62
|
+
|
|
63
|
+
### 4. λμ νκ· (1.9.207~235) β λͺ¨λ μ μ§
|
|
64
|
+
|
|
65
|
+
### 5. stress-v181 β 15/15 PASS
|
|
66
|
+
- 1.9.236 (5): VERSION + MCP 66 λ±λ‘ + μ€ νΈμΆ + keep νλΌλ―Έν° + drift ν΅ν© μ½λ
|
|
67
|
+
- μ±λ₯ (2): cold_start avg 389ms / MCP 66 tools/list 363ms
|
|
68
|
+
- λμ νκ· (8): 1.9.207~235
|
|
69
|
+
|
|
70
|
+
### 6. μλ release (98 λΌμ΄λ main-push streak Β· 59 λΌμ΄λ npm publish streak)
|
|
71
|
+
|
|
72
|
+
π **drift μλ ν볡 4 ν΅ν©** β leerness κ° μ€μ€λ‘ λμ νκΈ°λ¬Ό μ 리
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
3
76
|
## 1.9.235 β 2026-05-23
|
|
4
77
|
|
|
5
78
|
**π leerness release cleanup CLI β local release/* branches μ 리 + --keep BUG 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) []() []() []() []() []() []() []() []() [-brightgreen)]() []() []() []()
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
β βββ ββββββ ββββββ ββββββββββββββββββββββββ ββββββββ β
|
|
13
13
|
β βββββββββββββββββββββββββββ ββββββ ββββββββββββββββββββββ β
|
|
14
14
|
β βββββββββββββββββββββββββββ ββββββ βββββββββββββββββββββ β
|
|
15
|
-
β v1.9.
|
|
15
|
+
β v1.9.237 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π 60 npm publish streak Β· release cleanup 3 λΌμ΄λ μμ± β
|
|
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.237';
|
|
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 μ²λ¦¬).
|
|
@@ -6573,6 +6573,25 @@ function handoff(root) {
|
|
|
6573
6573
|
}
|
|
6574
6574
|
} catch {}
|
|
6575
6575
|
|
|
6576
|
+
// 1.9.237: handoff λ³Έλ¬Έ release/* λμ κ²½κ³ β 50+ branches merged μ μλ μλ΄
|
|
6577
|
+
// 1.9.220 λΉμ μμ’
λ£ release-branch-pending μ νΈμ λ³Έλ¬Έ λ³΄κ° (handoff ν€λλΌμΈμ βπ λΉμ μμ’
λ£β λ§ νμ)
|
|
6578
|
+
try {
|
|
6579
|
+
const branchR = cp.spawnSync('git', ['branch', '--merged', 'main', '--list', 'release/*'], { cwd: root, encoding: 'utf8' });
|
|
6580
|
+
if (branchR.status === 0) {
|
|
6581
|
+
const mergedCnt = (branchR.stdout || '').split('\n').filter(l => l.trim() && /release\/\d+\.\d+\.\d+/.test(l)).length;
|
|
6582
|
+
if (mergedCnt > 50) {
|
|
6583
|
+
const isTty = process.stdout && process.stdout.isTTY;
|
|
6584
|
+
const yl5 = s => isTty ? `\x1b[33m${s}\x1b[0m` : s;
|
|
6585
|
+
const dm5 = s => isTty ? `\x1b[2m${s}\x1b[0m` : s;
|
|
6586
|
+
log('');
|
|
6587
|
+
log(yl5(`## π release/* branches λμ ${mergedCnt}κ° (50+) (1.9.237)`));
|
|
6588
|
+
log(dm5(` β μλ μ 리: leerness release cleanup --apply --keep 10`));
|
|
6589
|
+
log(dm5(` β λ§κ° μ μλ: session close --auto-cleanup-branches`));
|
|
6590
|
+
log(dm5(` β drift μλ ν볡: drift check --auto-fix (1.9.236, 50+ μ)`));
|
|
6591
|
+
}
|
|
6592
|
+
}
|
|
6593
|
+
} catch {}
|
|
6594
|
+
|
|
6576
6595
|
// 1.9.224: handoff λ³Έλ¬Έ μλ λ
ΈμΆ β delivered ν¨ν΄ ν보 β₯ 1건 μ (1.9.223 νμ₯)
|
|
6577
6596
|
// "Round X.Y.Z β ꡬν μλ£" ν¨ν΄μ΄ λμ λλ©΄ λ³Έλ¬Έ μΉμ
μΌλ‘ μλ μλ΄ (ν€λλΌμΈλ§μΌλ‘λ λμΉκΈ° μ¬μ)
|
|
6578
6597
|
// 1.9.225: LEERNESS_AUTO_APPLY_DELIVERED=1 env νμ± μ handoff 첫 νΈμΆμμ μλ μ μ© (μμ¨ λͺ¨λμ© opt-in)
|
|
@@ -10507,6 +10526,40 @@ function sessionClose(root, opts = {}) {
|
|
|
10507
10526
|
log(grn(` β λ©±λ±μ± κ²μ¬ ν΅κ³Ό β verified ${idemp.summary.verifiedAreas} μμ`));
|
|
10508
10527
|
}
|
|
10509
10528
|
} catch {}
|
|
10529
|
+
// 1.9.237: session close --auto-cleanup-branches β 50+ release/* branches μ μλ μ 리
|
|
10530
|
+
// 1.9.224 ν¨ν΄ (--auto-apply-delivered) νμ₯ β λ§κ° μ μ΄μ λμ νκΈ°λ¬Ό μλ μ 리
|
|
10531
|
+
// μμ : keep 10, merged λ§, νμ¬ branch 보νΈ
|
|
10532
|
+
try {
|
|
10533
|
+
const branchR = cp.spawnSync('git', ['branch', '--merged', 'main', '--list', 'release/*'], { cwd: root, encoding: 'utf8' });
|
|
10534
|
+
if (branchR.status === 0) {
|
|
10535
|
+
const merged = (branchR.stdout || '').split('\n')
|
|
10536
|
+
.map(l => l.replace(/^\*?\s+/, '').trim())
|
|
10537
|
+
.filter(l => l && /^release\/\d+\.\d+\.\d+$/.test(l));
|
|
10538
|
+
if (merged.length > 50) {
|
|
10539
|
+
if (has('--auto-cleanup-branches')) {
|
|
10540
|
+
merged.sort((a, b) => {
|
|
10541
|
+
const va = a.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
10542
|
+
const vb = b.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
10543
|
+
for (let i = 0; i < 3; i++) if (va[i] !== vb[i]) return vb[i] - va[i];
|
|
10544
|
+
return 0;
|
|
10545
|
+
});
|
|
10546
|
+
const curR = cp.spawnSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: root, encoding: 'utf8' });
|
|
10547
|
+
const cur = (curR.stdout || '').trim();
|
|
10548
|
+
const toDelete = merged.slice(10).filter(b => b !== cur);
|
|
10549
|
+
let okCnt = 0;
|
|
10550
|
+
for (const b of toDelete) {
|
|
10551
|
+
const r = cp.spawnSync('git', ['branch', '-d', b], { cwd: root, encoding: 'utf8' });
|
|
10552
|
+
if (r.status === 0) okCnt++;
|
|
10553
|
+
}
|
|
10554
|
+
log(grn(` β release μ 리 ${okCnt}/${toDelete.length}건 (--auto-cleanup-branches 1.9.237, keep 10)`));
|
|
10555
|
+
} else {
|
|
10556
|
+
log(yel(` π release/* merged ${merged.length}κ° (50+) β cleanup κ°λ₯ (1.9.235)`));
|
|
10557
|
+
log(dim(` β leerness release cleanup --apply --keep 10 (μλ)`));
|
|
10558
|
+
log(dim(` β λλ session close --auto-cleanup-branches (1.9.237 μλ)`));
|
|
10559
|
+
}
|
|
10560
|
+
}
|
|
10561
|
+
}
|
|
10562
|
+
} catch {}
|
|
10510
10563
|
// 1.9.232: λ§κ° μ pulse ν μ€ μλ λ
ΈμΆ β λ€μ λΌμ΄λ μ§μ
μ μ¦μ μν μΈμ§
|
|
10511
10564
|
try {
|
|
10512
10565
|
const rh = _computeRoundHistory(root);
|
|
@@ -13480,6 +13533,42 @@ function driftCheckCmd(root, opts = {}) {
|
|
|
13480
13533
|
log(`β delivered auto-apply μ€λ₯ (1.9.225): ${e.message}`);
|
|
13481
13534
|
}
|
|
13482
13535
|
}
|
|
13536
|
+
// 1.9.236: drift check --auto-fix μ release cleanup ν΅ν© (1.9.235 νμ)
|
|
13537
|
+
// λμ λ 50κ°+ release/* branches β abnormal-shutdown release-branch-pending μ νΈ κ°μ€
|
|
13538
|
+
// μμ : keep 10 (μ΅κ·Ό 10κ° μ μ§), merged λ§ μμ (1.9.235 μμ κ°λ)
|
|
13539
|
+
// μκ³: 50κ° μ΄κ³Ό μλ§ μλ μ 리 (μλ λμ μ μ μ μ΄μ)
|
|
13540
|
+
if (autoFix) {
|
|
13541
|
+
try {
|
|
13542
|
+
const branchR = cp.spawnSync('git', ['branch', '--merged', 'main', '--list', 'release/*'], { cwd: root, encoding: 'utf8' });
|
|
13543
|
+
if (branchR.status === 0) {
|
|
13544
|
+
const merged = (branchR.stdout || '').split('\n')
|
|
13545
|
+
.map(l => l.replace(/^\*?\s+/, '').trim())
|
|
13546
|
+
.filter(l => l && /^release\/\d+\.\d+\.\d+$/.test(l));
|
|
13547
|
+
if (merged.length > 50) {
|
|
13548
|
+
log('');
|
|
13549
|
+
log(`π --auto-fix νμ± (1.9.236) β release/* merged ${merged.length}κ° (50+) μλ μ 리 (keep 10)...`);
|
|
13550
|
+
// μ λ ¬ (semver desc)
|
|
13551
|
+
merged.sort((a, b) => {
|
|
13552
|
+
const va = a.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
13553
|
+
const vb = b.replace('release/', '').split('.').map(n => parseInt(n, 10) || 0);
|
|
13554
|
+
for (let i = 0; i < 3; i++) if (va[i] !== vb[i]) return vb[i] - va[i];
|
|
13555
|
+
return 0;
|
|
13556
|
+
});
|
|
13557
|
+
const currentBranchR = cp.spawnSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: root, encoding: 'utf8' });
|
|
13558
|
+
const currentBranch = (currentBranchR.stdout || '').trim();
|
|
13559
|
+
const toDelete = merged.slice(10).filter(b => b !== currentBranch);
|
|
13560
|
+
let ok = 0;
|
|
13561
|
+
for (const b of toDelete) {
|
|
13562
|
+
const r = cp.spawnSync('git', ['branch', '-d', b], { cwd: root, encoding: 'utf8' });
|
|
13563
|
+
if (r.status === 0) ok++;
|
|
13564
|
+
}
|
|
13565
|
+
log(`β release cleanup μλ μλ£ ${ok}/${toDelete.length}건 (keep 10)`);
|
|
13566
|
+
}
|
|
13567
|
+
}
|
|
13568
|
+
} catch (e) {
|
|
13569
|
+
log(`β release cleanup auto-fix μ€λ₯ (1.9.236): ${e.message}`);
|
|
13570
|
+
}
|
|
13571
|
+
}
|
|
13483
13572
|
if (autoFix && level === 'π΄ critical' && !hasSecurityFired) {
|
|
13484
13573
|
log('');
|
|
13485
13574
|
log(`π§ --auto-fix νμ± β session close μλ μ€ν μ€...`);
|
|
@@ -14468,7 +14557,8 @@ function mcpServeCmd(root) {
|
|
|
14468
14557
|
{ 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' } } } },
|
|
14469
14558
|
{ 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' } } } },
|
|
14470
14559
|
{ 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' } } } },
|
|
14471
|
-
{ 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' } } } }
|
|
14560
|
+
{ 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' } } } },
|
|
14561
|
+
{ name: 'leerness_release_cleanup', description: '1.9.236 (1.9.235 μλ νμ) β local release/* branches μ 리. main μ mergeλ κ²λ§ ν보 (unmerged 보νΈ, νμ¬ branch 보νΈ). μλ΅: { apply, keep, total, merged, unmerged, deleteCount, toDelete[], recent[], unmergedSample[] }. μΈλΆ AIκ° "μ΄μ λμ release branches μ 리 κ°λ₯?"μ νμ. κΈ°λ³Έ dry-run, apply: true μμλ§ μ€ μμ . μΈμ: { path?, apply? (default false), keep? (default 5) }', inputSchema: { type: 'object', properties: { path: { type: 'string' }, apply: { type: 'boolean' }, keep: { type: 'number' } } } }
|
|
14472
14562
|
];
|
|
14473
14563
|
|
|
14474
14564
|
function send(obj) {
|
|
@@ -14645,6 +14735,12 @@ function mcpServeCmd(root) {
|
|
|
14645
14735
|
// 1.9.233: μΉ΄ν
κ³ λ¦¬νλ μ 체 CLI λͺ
λ Ή λͺ©λ‘
|
|
14646
14736
|
cliArgs = ['commands', '--json'];
|
|
14647
14737
|
break;
|
|
14738
|
+
case 'leerness_release_cleanup':
|
|
14739
|
+
// 1.9.236 (1.9.235): local release/* branches μ 리
|
|
14740
|
+
cliArgs = ['release', 'cleanup', '--json'];
|
|
14741
|
+
if (args.apply === true) cliArgs.push('--apply');
|
|
14742
|
+
if (typeof args.keep === 'number') cliArgs.push('--keep', String(args.keep));
|
|
14743
|
+
break;
|
|
14648
14744
|
default:
|
|
14649
14745
|
return send({ jsonrpc: '2.0', id, error: { code: -32601, message: `Unknown tool: ${name}` } });
|
|
14650
14746
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.237",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|