leerness 1.9.242 โ 1.9.244
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 +91 -0
- package/README.md +3 -3
- package/bin/harness.js +79 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,96 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.244 โ 2026-05-26 ๐ R200 + ๐จ HOTFIX
|
|
4
|
+
|
|
5
|
+
**๐จ HOTFIX: REPL agent ReferenceError `_lastCycleLines` (1.9.189 ํ๊ท ๋ฒ๊ทธ) + ๐ R200 ๋ง์ผ์คํค ๋๋ฌ.**
|
|
6
|
+
|
|
7
|
+
### ๐จ ์ฌ์ฉ์ ๋ณด๊ณ ๋ฒ๊ทธ (์ค ํ๊ฒฝ 1.9.243 npx ์ค์น)
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
agent[claude ยท sonnet-4-7/actor/โถ]> ์นํ์ด์ง ์ ์ํด์ค
|
|
11
|
+
.../leerness/bin/harness.js:16839
|
|
12
|
+
_lastCycleLines = 0; // 1.9.189: ์ฌ์ฉ์ ์
๋ ฅ ์ cycle overwrite ์ถ์ reset
|
|
13
|
+
^
|
|
14
|
+
ReferenceError: _lastCycleLines is not defined
|
|
15
|
+
at Interface.<anonymous> (.../harness.js:16839:23)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**์์ธ:** `let _lastCycleLines = 0;` ๋ณ์๊ฐ `if (isTty) { try { ... } }` ๋ธ๋ก ์ค์ฝํ ๋ด๋ถ์ ์ ์ธ๋์ด ์์์ (line 16418). `rl.on('line')` ํธ๋ค๋ฌ๋ ์ธ๋ถ ์ค์ฝํ (line 16836+) ๋ผ์ ReferenceError.
|
|
19
|
+
|
|
20
|
+
**Fix (1.9.244):**
|
|
21
|
+
- `let _lastCycleLines = 0;` ๋ฅผ outer function ์ค์ฝํ (line 16399) ๋ก hoist
|
|
22
|
+
- ๋ ๊ณณ (cycleProvider/cycleModel + rl.on('line') ํธ๋ค๋ฌ) ๋์ผ closure ๊ณต์
|
|
23
|
+
- ๊ฒ์ฆ: stress-v189 A5 โ REPL agent ์ง์
+ stdin input โ no ReferenceError ํ์ธ
|
|
24
|
+
|
|
25
|
+
### ๐ R200 ๋ง์ผ์คํค ๋๋ฌ
|
|
26
|
+
|
|
27
|
+
- v1.9.6 baseline ~ v1.9.244 โ **200 ๋์ ๋ผ์ด๋** (round-history JSON: `roundCount=200`)
|
|
28
|
+
- **106 main-push streak** (1.9.140~) ยท **๐ 67 npm publish streak** (1.9.178~)
|
|
29
|
+
- handoff/session close/health JSON **10 ํ๋** ร 3 = 30 ํตํฉ ํฌ์ธํธ
|
|
30
|
+
- MCP **69 ๋๊ตฌ** ยท CLI **56 ๋ช
๋ น** ยท 9 ์นดํ
๊ณ ๋ฆฌ
|
|
31
|
+
- 6 ๋ฅ๋ ฅ ๋งคํธ๋ฆญ์ค + 5์ถ ๋งคํธ๋ฆญ์ค 100/100
|
|
32
|
+
|
|
33
|
+
### ๋์ ํ๊ท (1.9.207~243) โ ๋ชจ๋ ์ ์ง
|
|
34
|
+
- CJK ๋ถ๋ฅ (1.9.243) ยท env encoding --apply (1.9.242) ยท env summary (1.9.241) ยท py-check (1.9.239)
|
|
35
|
+
- ๋น์ ์์ข
๋ฃ + delivered + release cleanup + round-history + milestones + recentChanges + ๋ชจ๋ 1.9.207~218 ์ฌ์ฉ์ ๋ช
์ ์ ๊ท 7์ข
|
|
36
|
+
|
|
37
|
+
### stress-v189 โ **20/20 PASS ยท 100%**
|
|
38
|
+
- 1.9.244 HOTFIX (6): VERSION + _lastCycleLines ๋จ์ผ ์ ์ธ + 15 refs + hotfix ์ฃผ์ + agent input no-crash + agent --help no-crash
|
|
39
|
+
- R200 ๋ง์ผ์คํค (1): roundCount=200 ํ์ธ
|
|
40
|
+
- ์ฑ๋ฅ (1): cold start avg 373ms
|
|
41
|
+
- ๋์ ํ๊ท (12): 1.9.170~243
|
|
42
|
+
|
|
43
|
+
๐จ **์ฌ์ฉ์ ๋ณด๊ณ ๋ฒ๊ทธ ์ฆ์ ํจ์น** โ ์ค ํ๊ฒฝ 1.9.243 ์ฌ์ฉ ์ค ๋ฐ๊ฒฌ๋ critical REPL ํฌ๋์ ํ๋ณต.
|
|
44
|
+
๐ **R200 ์์จ ๋ชจ๋ ๋ง์ผ์คํค** โ 200 ๋ผ์ด๋ ๋์ ๋จ ํ ๋ฒ๋ ์์จ ํ๋ฆ ๋๊น ์์ด ์งํ.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 1.9.243 โ 2026-05-26
|
|
49
|
+
|
|
50
|
+
**๐ UR-0014 3๋จ๊ณ: CJK ๋ค๊ตญ์ด ๋ถ๋ฅ (ํ๊ตญ์ด/์ผ๋ณธ์ด/์ค๊ตญ์ด) + session close --auto-fix-encoding + handoff body --apply ์ง์
์ .**
|
|
51
|
+
|
|
52
|
+
### ์ฌ์ฉ์ ๋ช
์ (UR-0014) โ 3๋จ๊ณ ๋ค๊ตญ์ด ๋ณด๊ฐ + ๋ง๊ฐ ์๋ํ
|
|
53
|
+
|
|
54
|
+
1.9.241 (๊ฐ์ง) โ 1.9.242 (์๋ ์์ ) โ 1.9.243 (๋ค๊ตญ์ด + ๋ง๊ฐ ์๋ ํตํฉ):
|
|
55
|
+
|
|
56
|
+
### 1. CJK ๋ถ๋ฅ โ Korean/Japanese/Chinese ์๋ ์๋ณ
|
|
57
|
+
- `_scanShellScriptsEncoding()` ์ `riskType` ํ๋ ์ถ๊ฐ
|
|
58
|
+
- UTF-8 byte range ๋ถ๋ฅ:
|
|
59
|
+
- Korean (Hangul U+AC00-D7AF) โ 0xEA-0xED ์์ โ CP949 ์ํ
|
|
60
|
+
- Japanese (Hiragana/Katakana U+3040-30FF) โ 0xE3 ์์ โ CP932 (Shift-JIS) ์ํ
|
|
61
|
+
- Chinese (CJK Unified U+4E00-9FFF) โ 0xE4-0xE9 ์์ โ CP936 (GBK) ์ํ
|
|
62
|
+
- `atRisk[].cjk`: { korean, japanese, chinese, other } ์ธ๋ถ ์นด์ดํธ
|
|
63
|
+
- `result.riskTypeCounts`: ๋ถ๋ฅ๋ณ ์์ฝ ํต๊ณ
|
|
64
|
+
- Locale ๋ณ ์ ํํ ์ํ ๋ฉ์์ง ("Windows ํ๊ตญ์ด/์ผ๋ณธ์ด/์ค๊ตญ์ด PowerShell ์์ CPxxx ๋ก ์ค์ธ์ ๊ฐ๋ฅ")
|
|
65
|
+
|
|
66
|
+
### 2. session close --auto-fix-encoding ๋ง๊ฐ ์๋ ํ๋ณต
|
|
67
|
+
- 1.9.224 (--auto-apply-delivered) + 1.9.237 (--auto-cleanup-branches) ํจํด ํ์ฅ
|
|
68
|
+
- ๋ง๊ฐ ์ ์
ธ ์คํฌ๋ฆฝํธ ์ธ์ฝ๋ฉ ์ํ ์๋ BOM ์ถ๊ฐ
|
|
69
|
+
- ๊ธฐ๋ณธ: ์๋ด๋ง (`์๋ ํ๋ณต ๊ฐ๋ฅ` hint) ยท `--auto-fix-encoding` ๋ช
์ ์์๋ง ๋ณ๊ฒฝ
|
|
70
|
+
- agent-mode stop ํ๋ฆ์ ์๋ chain (`session close --auto-apply-delivered --auto-cleanup-branches --auto-fix-encoding`)
|
|
71
|
+
|
|
72
|
+
### 3. handoff body --apply ์ง์
์ ํ์
|
|
73
|
+
- ์ธ์ฝ๋ฉ ์ํ ๋ฐ๊ฒฌ ์ ๋ณธ๋ฌธ์ ์๋ ์๋ด 2์ค ์ถ๊ฐ:
|
|
74
|
+
- `โ ์๋ ํ๋ณต: leerness env encoding --apply (UTF-8 BOM ์๋ ์ถ๊ฐ, 1.9.242)`
|
|
75
|
+
- `โ ๋ง๊ฐ ์ ์๋: session close --auto-fix-encoding (1.9.243)`
|
|
76
|
+
- CJK ๋ถ๋ฅ ์์ฝ ํ์: `๋ถ๋ฅ: korean=N, japanese=M, chinese=K (1.9.243 CJK)`
|
|
77
|
+
|
|
78
|
+
### 4. ๋์ ํ๊ท (1.9.207~242) โ ๋ชจ๋ ์ ์ง
|
|
79
|
+
- MCP 69 ๋๊ตฌ ์ ์ง
|
|
80
|
+
- JSON ํตํฉ 10 ํ๋ (envInfo) ์ ์ง
|
|
81
|
+
- drift check --auto-fix env encoding ํตํฉ ์ ์ง
|
|
82
|
+
|
|
83
|
+
### 5. stress-v188 โ **24/24 PASS ยท 100%**
|
|
84
|
+
- 1.9.243 (8): VERSION + CJK 3์ข
๋ถ๋ฅ ์ ํ๋ + riskTypeCounts + atRisk[].cjk + session close ์๋/๊ธฐ๋ณธ ๋ชจ๋ + handoff body ์ง์
์ + agent-mode stop chain
|
|
85
|
+
- ์ฑ๋ฅ (2): cold_start avg 333ms ยท session close --auto-fix 438ms
|
|
86
|
+
- ๋์ ํ๊ท (14): 1.9.207~242 + ๋ณด์ + npm publish
|
|
87
|
+
|
|
88
|
+
### 6. ์๋ release (105 ๋ผ์ด๋ main-push streak ยท 66 ๋ผ์ด๋ npm publish streak)
|
|
89
|
+
|
|
90
|
+
๐ **๋ค๊ตญ์ด CJK ์์ ์๋ํ** โ Korean/Japanese/Chinese PowerShell ์ธ์ฝ๋ฉ ์ค์ธ์ ์ฌ์ ์ฐจ๋จ
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
3
94
|
## 1.9.242 โ 2026-05-26
|
|
4
95
|
|
|
5
96
|
**๐ UR-0014 2๋จ๊ณ: env encoding --apply (BOM ์๋ ์ถ๊ฐ) + JSON 10 ํ๋ envInfo + drift --auto-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,9 +12,9 @@
|
|
|
12
12
|
โ โโโ โโโโโโ โโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโ โ
|
|
13
13
|
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โ
|
|
14
14
|
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโ โโโโโโโโโโโโโโโโโโโโโ โ
|
|
15
|
-
โ v1.9.
|
|
15
|
+
โ v1.9.244 AI Agent Reliability Harness + Sandbox โ
|
|
16
16
|
โ verify ยท remember ยท orchestrate ยท audit ยท sandbox ยท drift โ
|
|
17
|
-
โ
|
|
17
|
+
โ ๐จ HOTFIX REPL ReferenceError + ๐ R200 ์์จ ๋ง์ผ์คํค โ
|
|
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.244';
|
|
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 ์ฒ๋ฆฌ).
|
|
@@ -2308,7 +2308,7 @@ function agentModeCmd(root, sub) {
|
|
|
2308
2308
|
log('');
|
|
2309
2309
|
log(` start ์ง์
(handoff + drift --auto-fix + session-resume --auto-fix)`);
|
|
2310
2310
|
log(` tick ๋งค ๋ผ์ด๋ (pulse + ํต์ฌ ์ ํธ)`);
|
|
2311
|
-
log(` stop ๋ง๊ฐ (session close --auto-apply-delivered --auto-cleanup-branches)`);
|
|
2311
|
+
log(` stop ๋ง๊ฐ (session close --auto-apply-delivered --auto-cleanup-branches --auto-fix-encoding)`);
|
|
2312
2312
|
log('');
|
|
2313
2313
|
log(dm(` ์ฌ์ฉ์ ๋ช
์ UR-0013 (Python + agent-mode ํจ์จํ)`));
|
|
2314
2314
|
return;
|
|
@@ -2337,8 +2337,8 @@ function agentModeCmd(root, sub) {
|
|
|
2337
2337
|
}
|
|
2338
2338
|
if (sub === 'stop') {
|
|
2339
2339
|
log(cy(`# leerness agent-mode stop (1.9.239) โ ํตํฉ ๋ง๊ฐ`));
|
|
2340
|
-
log(dm(` โ session close --auto-apply-delivered --auto-cleanup-branches`));
|
|
2341
|
-
const r = spawnChild(['session', 'close', root, '--auto-apply-delivered', '--auto-cleanup-branches']);
|
|
2340
|
+
log(dm(` โ session close --auto-apply-delivered --auto-cleanup-branches --auto-fix-encoding`));
|
|
2341
|
+
const r = spawnChild(['session', 'close', root, '--auto-apply-delivered', '--auto-cleanup-branches', '--auto-fix-encoding']);
|
|
2342
2342
|
process.stdout.write(r.stdout || '');
|
|
2343
2343
|
return;
|
|
2344
2344
|
}
|
|
@@ -2442,6 +2442,35 @@ function _collectRuntimeEnv() {
|
|
|
2442
2442
|
// ์ํ ์๊ทธ๋: ํ๊ตญ์ด (๋๋ ๋น-ASCII) ๋ฌธ์ + BOM ์์ + Windows ํ๊ฒฝ
|
|
2443
2443
|
function _scanShellScriptsEncoding(root) {
|
|
2444
2444
|
const result = { scanned: 0, atRisk: [], notes: [] };
|
|
2445
|
+
// 1.9.243: CJK ๋ถ๋ฅ โ Korean/Japanese/Chinese ๋น-ASCII ํจํด ํต๊ณ (UR-0014 3๋จ๊ณ)
|
|
2446
|
+
function _classifyCJK(buf, len) {
|
|
2447
|
+
let korean = 0, japanese = 0, chinese = 0, other = 0;
|
|
2448
|
+
for (let i = 0; i < Math.min(buf.length, len); i++) {
|
|
2449
|
+
const b = buf[i];
|
|
2450
|
+
if (b < 0x80) continue;
|
|
2451
|
+
// UTF-8 3-byte ์ํ์ค ์์ ๋ฐ์ดํธ ๋ถ๋ฅ
|
|
2452
|
+
// Korean Hangul Syllables U+AC00-D7AF โ 3-byte: EA B0 80 ~ ED 9F BF
|
|
2453
|
+
if (b >= 0xEA && b <= 0xED) korean++;
|
|
2454
|
+
// Japanese Hiragana/Katakana U+3040-30FF โ 3-byte: E3 81 80 ~ E3 83 BF
|
|
2455
|
+
else if (b === 0xE3) japanese++;
|
|
2456
|
+
// CJK Unified Ideographs U+4E00-9FFF โ 3-byte: E4 B8 80 ~ E9 BF BF
|
|
2457
|
+
else if (b >= 0xE4 && b <= 0xE9) chinese++;
|
|
2458
|
+
else other++;
|
|
2459
|
+
}
|
|
2460
|
+
return { korean, japanese, chinese, other };
|
|
2461
|
+
}
|
|
2462
|
+
function _riskLabel(cjk) {
|
|
2463
|
+
if (cjk.korean >= cjk.japanese && cjk.korean >= cjk.chinese && cjk.korean > 0) {
|
|
2464
|
+
return { type: 'korean', risk: 'Windows ํ๊ตญ์ด PowerShell ์์ CP949 ๋ก ์ค์ธ์ ๊ฐ๋ฅ (BOM ์ถ๊ฐ ๊ถ์ฅ)' };
|
|
2465
|
+
}
|
|
2466
|
+
if (cjk.japanese > cjk.korean && cjk.japanese >= cjk.chinese) {
|
|
2467
|
+
return { type: 'japanese', risk: 'Windows ์ผ๋ณธ์ด PowerShell ์์ CP932 (Shift-JIS) ๋ก ์ค์ธ์ ๊ฐ๋ฅ (BOM ์ถ๊ฐ ๊ถ์ฅ)' };
|
|
2468
|
+
}
|
|
2469
|
+
if (cjk.chinese > 0) {
|
|
2470
|
+
return { type: 'chinese', risk: 'Windows ์ค๊ตญ์ด PowerShell ์์ CP936 (GBK) ๋ก ์ค์ธ์ ๊ฐ๋ฅ (BOM ์ถ๊ฐ ๊ถ์ฅ)' };
|
|
2471
|
+
}
|
|
2472
|
+
return { type: 'non-ascii', risk: 'Windows ๋น-ASCII ์
ธ ์คํฌ๋ฆฝํธ โ BOM ์๋ UTF-8 ์ธ์ฝ๋ฉ ์ค์ธ์ ๊ฐ๋ฅ (BOM ์ถ๊ฐ ๊ถ์ฅ)' };
|
|
2473
|
+
}
|
|
2445
2474
|
function walk(dir, depth = 0) {
|
|
2446
2475
|
if (depth > 3) return; // ๋๋ฌด ๊น์ด ๋ค์ด๊ฐ์ง ์์
|
|
2447
2476
|
let entries;
|
|
@@ -2462,12 +2491,17 @@ function _scanShellScriptsEncoding(root) {
|
|
|
2462
2491
|
if (buf[i] >= 0x80) { nonAscii = true; break; }
|
|
2463
2492
|
}
|
|
2464
2493
|
if (nonAscii && !hasBOM) {
|
|
2494
|
+
// 1.9.243: CJK ๋ถ๋ฅ ์ถ๊ฐ
|
|
2495
|
+
const cjk = _classifyCJK(buf, 4096);
|
|
2496
|
+
const label = _riskLabel(cjk);
|
|
2465
2497
|
result.atRisk.push({
|
|
2466
2498
|
file: path.relative(root, fp),
|
|
2467
2499
|
ext: path.extname(fp),
|
|
2468
2500
|
hasBOM: false,
|
|
2469
2501
|
nonAscii: true,
|
|
2470
|
-
|
|
2502
|
+
riskType: label.type,
|
|
2503
|
+
cjk,
|
|
2504
|
+
risk: label.risk
|
|
2471
2505
|
});
|
|
2472
2506
|
}
|
|
2473
2507
|
} catch {}
|
|
@@ -2478,6 +2512,9 @@ function _scanShellScriptsEncoding(root) {
|
|
|
2478
2512
|
if (result.atRisk.length > 0) {
|
|
2479
2513
|
result.notes.push('ํด๊ฒฐ: ํ์ผ ์์์ UTF-8 BOM ์ถ๊ฐ (EF BB BF) ๋๋ .ps1 ์ฒซ ์ค์ $OutputEncoding/[Console]::OutputEncoding ์ค์ ');
|
|
2480
2514
|
}
|
|
2515
|
+
// 1.9.243: ๋ถ๋ฅ๋ณ ํต๊ณ ์์ฝ
|
|
2516
|
+
const types = result.atRisk.reduce((m, r) => { m[r.riskType] = (m[r.riskType] || 0) + 1; return m; }, {});
|
|
2517
|
+
result.riskTypeCounts = types;
|
|
2481
2518
|
return result;
|
|
2482
2519
|
}
|
|
2483
2520
|
|
|
@@ -6948,8 +6985,13 @@ function handoff(root) {
|
|
|
6948
6985
|
log(dm5(` ${r.risk}`));
|
|
6949
6986
|
});
|
|
6950
6987
|
if (scan.atRisk.length > 3) log(dm5(` ... +${scan.atRisk.length - 3}๊ฑด ๋`));
|
|
6988
|
+
// 1.9.243: CJK ๋ถ๋ฅ ์์ฝ (UR-0014 3๋จ๊ณ)
|
|
6989
|
+
const types = scan.riskTypeCounts || {};
|
|
6990
|
+
const tList = Object.entries(types).filter(([_, c]) => c > 0).map(([t, c]) => `${t}=${c}`);
|
|
6991
|
+
if (tList.length > 0) log(dm5(` ๋ถ๋ฅ: ${tList.join(', ')} (1.9.243 CJK)`));
|
|
6951
6992
|
log(dm5(` โ ์์ธ: leerness env encoding`));
|
|
6952
|
-
log(dm5(` โ
|
|
6993
|
+
log(dm5(` โ ์๋ ํ๋ณต: leerness env encoding --apply (UTF-8 BOM ์๋ ์ถ๊ฐ, 1.9.242)`));
|
|
6994
|
+
log(dm5(` โ ๋ง๊ฐ ์ ์๋: session close --auto-fix-encoding (1.9.243)`));
|
|
6953
6995
|
}
|
|
6954
6996
|
} catch {}
|
|
6955
6997
|
|
|
@@ -10967,6 +11009,31 @@ function sessionClose(root, opts = {}) {
|
|
|
10967
11009
|
}
|
|
10968
11010
|
}
|
|
10969
11011
|
} catch {}
|
|
11012
|
+
// 1.9.243: session close --auto-fix-encoding โ ์
ธ ์คํฌ๋ฆฝํธ ์ธ์ฝ๋ฉ ์ํ ์๋ ํ๋ณต (UR-0014 3๋จ๊ณ)
|
|
11013
|
+
// 1.9.224 (--auto-apply-delivered) / 1.9.237 (--auto-cleanup-branches) ํจํด ํ์ฅ
|
|
11014
|
+
// ๋ง๊ฐ ์ ํ๊ตญ์ด/์ผ๋ณธ์ด/์ค๊ตญ์ด PowerShell ์ธ์ฝ๋ฉ ์ํ ์๋ BOM ์ถ๊ฐ
|
|
11015
|
+
try {
|
|
11016
|
+
const encScan = _scanShellScriptsEncoding(root);
|
|
11017
|
+
if (encScan.atRisk && encScan.atRisk.length > 0) {
|
|
11018
|
+
if (has('--auto-fix-encoding')) {
|
|
11019
|
+
let ok = 0;
|
|
11020
|
+
for (const r of encScan.atRisk) {
|
|
11021
|
+
try {
|
|
11022
|
+
const fullPath = path.join(root, r.file);
|
|
11023
|
+
const orig = fs.readFileSync(fullPath);
|
|
11024
|
+
const bom = Buffer.from([0xEF, 0xBB, 0xBF]);
|
|
11025
|
+
const fixed = Buffer.concat([bom, orig]);
|
|
11026
|
+
fs.writeFileSync(fullPath, fixed);
|
|
11027
|
+
ok++;
|
|
11028
|
+
} catch {}
|
|
11029
|
+
}
|
|
11030
|
+
log(grn(` โ ์ธ์ฝ๋ฉ ์ํ ${ok}/${encScan.atRisk.length}๊ฑด UTF-8 BOM ์๋ ์ถ๊ฐ (--auto-fix-encoding 1.9.243)`));
|
|
11031
|
+
} else {
|
|
11032
|
+
log(yel(` โ ์
ธ ์คํฌ๋ฆฝํธ ์ธ์ฝ๋ฉ ์ํ ${encScan.atRisk.length}๊ฑด (1.9.241) โ ์๋ ํ๋ณต ๊ฐ๋ฅ`));
|
|
11033
|
+
log(dim(` โ leerness env encoding --apply (์๋) ๋๋ session close --auto-fix-encoding (1.9.243 ์๋)`));
|
|
11034
|
+
}
|
|
11035
|
+
}
|
|
11036
|
+
} catch {}
|
|
10970
11037
|
// 1.9.232: ๋ง๊ฐ ์ pulse ํ ์ค ์๋ ๋
ธ์ถ โ ๋ค์ ๋ผ์ด๋ ์ง์
์ ์ฆ์ ์ํ ์ธ์ง
|
|
10971
11038
|
try {
|
|
10972
11039
|
const rh = _computeRoundHistory(root);
|
|
@@ -16326,6 +16393,11 @@ async function _agentRepl(root, opts) {
|
|
|
16326
16393
|
};
|
|
16327
16394
|
rl.setPrompt(prompt());
|
|
16328
16395
|
|
|
16396
|
+
// 1.9.244 HOTFIX: _lastCycleLines ๋ฅผ outer ์ค์ฝํ๋ก hoist
|
|
16397
|
+
// 1.9.189 ํ๊ท ๋ฒ๊ทธ fix โ rl.on('line') ํธ๋ค๋ฌ๊ฐ try ๋ธ๋ก ์ธ๋ถ์์ ์ ๊ทผ ์ ReferenceError ๋ฐ์ํ์.
|
|
16398
|
+
// ์ฌ์ฉ์ ๋ณด๊ณ : REPL agent ์ง์
ํ ์ฑํ
์
๋ ฅ ์ "_lastCycleLines is not defined" ํฌ๋์.
|
|
16399
|
+
let _lastCycleLines = 0; // ์ง์ cycle ์ถ๋ ฅ ๋ผ์ธ ์ (overwrite ์ฉ) โ 1.9.189/244
|
|
16400
|
+
|
|
16329
16401
|
// 1.9.170: Tab cycle โ provider (Tab) / model within provider (Shift+Tab)
|
|
16330
16402
|
// ์ฌ์ฉ์ ๋ช
์ ์์ฒญ: "ํญ ํค ๋ฑ์ผ๋ก provider/๋ชจ๋ธ ์
๋ ๊ณผ ์ ํ์ ๊ฐํธํ๊ฒ"
|
|
16331
16403
|
// readline์ default tab=completion ๋์์ keypress ๋ฆฌ์ค๋๋ก ๊ฐ๋ก์ฑ์ cycle ์ํ.
|
|
@@ -16348,7 +16420,7 @@ async function _agentRepl(root, opts) {
|
|
|
16348
16420
|
// 1.9.180+1.9.189: cycleProvider/cycleModel โ ํ ์ค ๊ฐฑ์ (in-place overwrite).
|
|
16349
16421
|
// 1.9.180๊น์ง: ๋งค Tab ๋๋ฆ๋ง๋ค ์ ์ค ์ถ๋ ฅ โ ์ฑํ
์ด๋ ฅ์ผ๋ก ๋์ (์ฌ์ฉ์ ๋ช
์: "์ง์ ธ๋ถํด๋ณด์ฌ").
|
|
16350
16422
|
// 1.9.189: ANSI cursor up + line clear ๋ก ์ด์ cycle ๋ผ์ธ ๋ฎ์ด์ โ ๋ง์ง๋ง 1๊ฑด๋ง ํ์.
|
|
16351
|
-
|
|
16423
|
+
// 1.9.244: _lastCycleLines ๋ outer ์ค์ฝํ (์)์์ ์ ์ธ โ rl.on('line') ํธ๋ค๋ฌ์ ๊ณต์ .
|
|
16352
16424
|
const _clearLastCycle = () => {
|
|
16353
16425
|
if (!isTty || _lastCycleLines === 0) return;
|
|
16354
16426
|
// ํ์ฌ prompt ๋ผ์ธ + ์ด์ cycle ๋ผ์ธ๋ค ํด๋ฆฌ์ด
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.244",
|
|
4
4
|
"description": "Leerness: ๋นํ๊ดด ๋ง์ด๊ทธ๋ ์ด์
, ์๋ ๋ฒ์ ๊ฐ์งยท์
๋ฐ์ดํธ, ๊ณํ/์งํ/ํธ๋์คํ ์๋ํ, ๊ฒ์ผ๋ฆยท์ํฌ๋ฆฟยท์ธ์ฝ๋ฉ ์๋ ๊ฐ๋, Claude Code ์ฌ๋์ ํตํฉ์ ๊ฐ์ถ ํ๊ตญ์ด ์ฐ์ AI ๊ฐ๋ฐ ํ๋ค์ค.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|