leerness 1.9.187 β 1.9.188
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 +97 -0
- package/README.md +3 -3
- package/bin/harness.js +65 -21
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,102 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.188 β 2026-05-21
|
|
4
|
+
|
|
5
|
+
**π REPL νκΈ prompt μ λ¬ BUG fix (stdin) + μΈλΆ λͺ¨λΈ νμ + μ
λ ₯ ꡬλΆμ (μ¬μ©μ λͺ
μ 3μ’
).**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 118 λΌμ΄λ. μ¬μ©μ λͺ
μ ν΅μ¬ λ²κ·Έ:
|
|
8
|
+
```
|
|
9
|
+
agent[claude/actor/βΆ]> μ΄ ν΄λμ νμ΄μ¬ νλ‘κ·Έλ¨μ νλ μ μν΄μ€
|
|
10
|
+
ββ claude stream ββ
|
|
11
|
+
μ λ μ΄ νλ‘μ νΈμ **μμ κ°λ°μμ΄μ νλ‘μ νΈ λ§€λμ **μ
λλ€.
|
|
12
|
+
...
|
|
13
|
+
λ©μμ§κ° "μν :"λ‘λ§ λλμ μλλ₯Ό νμ νκΈ° μ΄λ ΅μ΅λλ€.
|
|
14
|
+
```
|
|
15
|
+
μ¬μ©μ μλμ 무κ΄ν μλ΅ β **claudeκ° νκΈ prompt λλΆλΆ("μν :") fragmentλ§ λ°μ**.
|
|
16
|
+
|
|
17
|
+
### κ·Όλ³Έ μμΈ (μ½λ audit)
|
|
18
|
+
|
|
19
|
+
`cp.spawn(cmd, args, { shell: true })` + Windows cmd.exe + νκΈ/νΉμλ¬Έμ promptText:
|
|
20
|
+
- shell:true μΌ λ args κ° joinλμ΄ shell command line νμ±
|
|
21
|
+
- Windows cmd.exeκ° νκΈ/곡백 escape μ€ν¨ β claudeμ μΌλΆ fragmentλ§ μ λ¬
|
|
22
|
+
|
|
23
|
+
### Fix #1 β promptλ₯Ό stdinμΌλ‘ μ λ¬ (shell escape μ°ν)
|
|
24
|
+
|
|
25
|
+
```diff
|
|
26
|
+
- if (provider === 'claude') { cmd = 'claude'; args = ['--print', promptText]; }
|
|
27
|
+
+ // 1.9.188: promptText λ stdin μΌλ‘ β args μμ μ κ±° (νκΈ/νΉμλ¬Έμ μμ )
|
|
28
|
+
+ let useStdinForPrompt = false;
|
|
29
|
+
+ if (provider === 'claude') {
|
|
30
|
+
+ cmd = 'claude';
|
|
31
|
+
+ args = ['--print']; // promptText μ κ±°
|
|
32
|
+
+ useStdinForPrompt = true;
|
|
33
|
+
+ }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
spawn μ:
|
|
37
|
+
```js
|
|
38
|
+
child = cp.spawn(cmd, args, {
|
|
39
|
+
stdio: [useStdinForPrompt ? 'pipe' : 'ignore', 'pipe', 'pipe'],
|
|
40
|
+
shell: true
|
|
41
|
+
});
|
|
42
|
+
if (useStdinForPrompt && child.stdin) {
|
|
43
|
+
child.stdin.write(promptText);
|
|
44
|
+
child.stdin.end();
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`_cliChat` λ λμΌνκ² `runCommandSafe(..., { input: stdinInput })` μΌλ‘ λ³κ²½.
|
|
49
|
+
|
|
50
|
+
### Live κ²μ¦ (νκΈ prompt μ ν μ λ¬)
|
|
51
|
+
```bash
|
|
52
|
+
$ leerness agents multi "μ΄ ν΄λμ νμ΄μ¬ hello world νλ‘κ·Έλ¨ μ μ (μλ΅λ§ μ½λ)" --only claude --execute
|
|
53
|
+
β claude Β· 8279ms Β· 9 ν ν°
|
|
54
|
+
--- μ²μ 600μ ---
|
|
55
|
+
`hello.py` μμ± κΆνμ΄ νμν©λλ€. μΉμΈν΄ μ£ΌμΈμ.
|
|
56
|
+
```
|
|
57
|
+
**1.9.187κΉμ§**: "μμ κ°λ°μ/νλ‘μ νΈ λ§€λμ ..." κ°μ 무κ΄ν μλ΅ (μν fragmentλ§ λ°μ)
|
|
58
|
+
**1.9.188**: `hello.py μμ± κΆν νμ` β μ νν μμ² μ΄ν΄ β
|
|
59
|
+
|
|
60
|
+
### Fix #2 β μΈλΆ λͺ¨λΈ νμ
|
|
61
|
+
**Before**: `β‘ provider=claude Β· model=(κΈ°λ³Έ)`
|
|
62
|
+
**After**: `β‘ provider=claude Β· model=claude-opus-4-7`
|
|
63
|
+
|
|
64
|
+
```js
|
|
65
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ): state.model μλ default (catalog 첫 λͺ¨λΈ)
|
|
66
|
+
if (!state.model) {
|
|
67
|
+
const cat = _PROVIDER_MODEL_CATALOG[state.provider];
|
|
68
|
+
if (cat && cat.length) state.model = cat[0].id;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
prompt λ μΈλΆ λͺ¨λΈ λͺ
μ:
|
|
73
|
+
```
|
|
74
|
+
Before: agent[claude/actor/βΆ]>
|
|
75
|
+
After: agent[claude Β· opus-4-7/actor/βΆ]>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Fix #3 β μ
λ ₯ ꡬλΆμ (Hermes UX μκ°)
|
|
79
|
+
κ° μλ΅ λμ κ°λ‘ λλ°μ΄λ μλ μΆλ ₯ β μ
λ ₯ μμ μκ° λͺ
ν:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
[assistant: claude/claude-opus-4-7, role=actor, 4598ms Β· 425μ]
|
|
83
|
+
|
|
84
|
+
ββββββββββββββββββββββββββββββββββββββββββββββββ...
|
|
85
|
+
agent[claude Β· opus-4-7/actor/βΆ]> _
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`_printInputDivider()` ν¨μ λμ
β ν°λ―Έλ width κΈ°μ€ μλ κΈΈμ΄.
|
|
89
|
+
|
|
90
|
+
### Verified
|
|
91
|
+
- stress-v133: **15/15 PASS** (μ¬μ©μ λͺ
μ 6 + live 2 + λμ 7)
|
|
92
|
+
- e2e 217/217 baseline μ μ§
|
|
93
|
+
- live κ²μ¦:
|
|
94
|
+
- νκΈ prompt "μ΄ ν΄λμ νμ΄μ¬ hello world μ μ" β claude μ ν μλ΅ (12.5μ΄)
|
|
95
|
+
- μλ¬Έ prompt "1+1=?" β claude μλ΅ (9.3μ΄, νκ· μμ)
|
|
96
|
+
- VERSION = 1.9.188 Β· autonomous-rounds = 118 Β· main μλ push 49 λΌμ΄λ μ°μ
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
3
100
|
## 1.9.187 β 2026-05-21
|
|
4
101
|
|
|
5
102
|
**π λΉμν¬λ¦Ώ LEERNESS_* μ€μ μ .env β .harness/leerness-config.json μΌλ‘ λΆλ¦¬ (AI κ°μμ±).**
|
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.188 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π νκΈ prompt stdin μ λ¬ Β· μΈλΆλͺ¨λΈ νμ Β· μ
λ ₯ ꡬλΆμ β
|
|
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.188';
|
|
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 μ²λ¦¬).
|
|
@@ -11048,10 +11048,11 @@ async function _cliChat(root, provider, prompt, opts) {
|
|
|
11048
11048
|
return { ok: false, error: `${provider} λΉνμ± (${status.status}) β .env μμ ${agent.envFlag}=1 + CLI μ€μΉ νμ`, provider };
|
|
11049
11049
|
}
|
|
11050
11050
|
// CLI λ³ λΉ-μΈν°λν°λΈ νΈμΆ μΈμ λ§€ν (read-only λͺ¨λ β REPL μμμ νμΌ μμ X)
|
|
11051
|
-
|
|
11052
|
-
|
|
11053
|
-
|
|
11054
|
-
else if (provider === '
|
|
11051
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ fix): νκΈ/νΉμλ¬Έμ prompt μ shell escape μ€ν¨ ννΌ β stdin μΌλ‘ μ λ¬.
|
|
11052
|
+
let cmd, args, stdinInput = null;
|
|
11053
|
+
if (provider === 'claude') { cmd = 'claude'; args = ['--print']; stdinInput = prompt; }
|
|
11054
|
+
else if (provider === 'codex') { cmd = 'codex'; args = ['exec', '--skip-git-repo-check', '-']; stdinInput = prompt; }
|
|
11055
|
+
else if (provider === 'gemini') { cmd = 'gemini'; args = ['-p', prompt]; } // gemini λ μΈμ only
|
|
11055
11056
|
else if (provider === 'copilot') { cmd = 'gh'; args = ['copilot', 'suggest', prompt]; }
|
|
11056
11057
|
else return { ok: false, error: `provider ${provider} λ―Έμ§μ`, provider };
|
|
11057
11058
|
// runCommandSafe β env scrub + observability μλ
|
|
@@ -11059,7 +11060,8 @@ async function _cliChat(root, provider, prompt, opts) {
|
|
|
11059
11060
|
cwd: process.cwd(), root,
|
|
11060
11061
|
timeout: opts.timeout || 60000,
|
|
11061
11062
|
allowOutsideCwd: true, // CLI κ° cwd λ°μμ μ€νλ μ μμ
|
|
11062
|
-
kind: 'agent_repl_cli', label: `repl-${provider}
|
|
11063
|
+
kind: 'agent_repl_cli', label: `repl-${provider}`,
|
|
11064
|
+
input: stdinInput // 1.9.188: claude/codex λ stdin μ λ¬
|
|
11063
11065
|
});
|
|
11064
11066
|
if (r.status === 0) {
|
|
11065
11067
|
return { ok: true, response: (r.stdout || '').trim(), provider, model: provider };
|
|
@@ -11088,15 +11090,25 @@ async function _cliChatStream(root, provider, promptText, opts) {
|
|
|
11088
11090
|
// 1.9.186 (μ¬μ©μ λͺ
μ fix): claude --output-format=stream-json κ° μΌλΆ λ²μ μμ λΉ μλ΅.
|
|
11089
11091
|
// default λ₯Ό plain --print λ‘ λ³κ²½ β _cliChat κ³Ό λμΌν μΈμ, μλ κ²μ¦λ ν¨ν΄.
|
|
11090
11092
|
// stream νμ μ¬μ© opt-in: LEERNESS_REPL_STREAM_FORMAT=json (μ€μκ° thinking/tool_use λ³΄κ³ μΆμ λ).
|
|
11093
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ fix): shell:true + Windows cmd.exe + νκΈ/νΉμλ¬Έμ promptText β args escape μ€ν¨.
|
|
11094
|
+
// μ¬μ©μ λ³΄κ³ : "μ΄ ν΄λμ νμ΄μ¬ νλ‘κ·Έλ¨ μ μ" 보λμΌλ claudeλ "μν :" fragmentλ§ λ°μ.
|
|
11095
|
+
// ν΄κ²°: promptText λ₯Ό args μμ μ κ±°νκ³ stdin μΌλ‘ μ λ¬ (shell escape μ°ν).
|
|
11091
11096
|
const useStreamJson = process.env.LEERNESS_REPL_STREAM_FORMAT === 'json';
|
|
11097
|
+
let useStdinForPrompt = false; // 1.9.188: claude/codex λ stdin μΌλ‘ prompt μ λ¬ (shell escape μ°ν)
|
|
11092
11098
|
if (provider === 'claude') {
|
|
11093
11099
|
cmd = 'claude';
|
|
11100
|
+
// 1.9.188: promptText λ stdin μΌλ‘ β args μμ μ κ±° (νκΈ/νΉμλ¬Έμ μμ )
|
|
11094
11101
|
args = useStreamJson
|
|
11095
|
-
? ['--print', '--output-format=stream-json', '--verbose'
|
|
11096
|
-
: ['--print'
|
|
11102
|
+
? ['--print', '--output-format=stream-json', '--verbose']
|
|
11103
|
+
: ['--print'];
|
|
11104
|
+
useStdinForPrompt = true;
|
|
11105
|
+
}
|
|
11106
|
+
else if (provider === 'codex') {
|
|
11107
|
+
cmd = 'codex';
|
|
11108
|
+
args = ['exec', '--skip-git-repo-check', '-']; // - = stdin from claude/codex convention
|
|
11109
|
+
useStdinForPrompt = true;
|
|
11097
11110
|
}
|
|
11098
|
-
else if (provider === '
|
|
11099
|
-
else if (provider === 'gemini') { cmd = 'gemini'; args = ['-p', promptText]; }
|
|
11111
|
+
else if (provider === 'gemini') { cmd = 'gemini'; args = ['-p', promptText]; } // gemini -p λ μΈμ λͺ¨λλ§ μ§μ
|
|
11100
11112
|
else if (provider === 'copilot') { cmd = 'gh'; args = ['copilot', 'suggest', promptText]; }
|
|
11101
11113
|
else return { ok: false, error: `provider ${provider} λ―Έμ§μ`, provider };
|
|
11102
11114
|
const t0 = Date.now();
|
|
@@ -11156,17 +11168,26 @@ async function _cliChatStream(root, provider, promptText, opts) {
|
|
|
11156
11168
|
process.stdout.write(dim(`\n ββ ${provider} stream ββ\n`));
|
|
11157
11169
|
let child;
|
|
11158
11170
|
try {
|
|
11159
|
-
// 1.9.186 (μ¬μ©μ λͺ
μ fix):
|
|
11160
|
-
//
|
|
11161
|
-
//
|
|
11162
|
-
//
|
|
11163
|
-
//
|
|
11171
|
+
// 1.9.186 + 1.9.188 (μ¬μ©μ λͺ
μ fix):
|
|
11172
|
+
// Windows .cmd νΈνμ μν΄ shell: true μ μ§.
|
|
11173
|
+
// 1.9.188: promptText κ° νκΈ/νΉμλ¬ΈμμΌ λ shell escape μ€ν¨ β stdin μΌλ‘ μ λ¬.
|
|
11174
|
+
// useStdinForPrompt=true μ stdio[0]='pipe' + child.stdin.write(promptText) + end().
|
|
11175
|
+
// shell μΈμμλ escape-safe flags λ§ λ¨κΉ ('--print' λ±).
|
|
11164
11176
|
child = cp.spawn(cmd, args, {
|
|
11165
11177
|
cwd: process.cwd(),
|
|
11166
11178
|
env: _scrubEnv({}),
|
|
11167
11179
|
shell: true,
|
|
11168
|
-
stdio: ['ignore', 'pipe', 'pipe']
|
|
11180
|
+
stdio: [useStdinForPrompt ? 'pipe' : 'ignore', 'pipe', 'pipe']
|
|
11169
11181
|
});
|
|
11182
|
+
// 1.9.188: promptText λ₯Ό stdin μΌλ‘ μμ μ λ¬
|
|
11183
|
+
if (useStdinForPrompt && child.stdin) {
|
|
11184
|
+
try {
|
|
11185
|
+
child.stdin.write(promptText);
|
|
11186
|
+
child.stdin.end();
|
|
11187
|
+
} catch (e) {
|
|
11188
|
+
// stdin μ°κΈ° μ€ν¨ μ child κ° stdin μ λ°μ μλ β 무μνκ³ μ§ν
|
|
11189
|
+
}
|
|
11190
|
+
}
|
|
11170
11191
|
} catch (e) {
|
|
11171
11192
|
if (spinnerInterval) clearInterval(spinnerInterval);
|
|
11172
11193
|
return resolve({ ok: false, error: 'spawn μ€ν¨: ' + e.message, provider });
|
|
@@ -11571,10 +11592,16 @@ async function _agentRepl(root, opts) {
|
|
|
11571
11592
|
log('');
|
|
11572
11593
|
log(C.dim(' β¨ Tab=provider cycle Β· Shift+Tab=model Β· Ctrl+C=quit'));
|
|
11573
11594
|
log('');
|
|
11574
|
-
// 1.9.
|
|
11595
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ): state.model μ΄ λΉμ΄μμΌλ©΄ catalog 첫 λͺ¨λΈ μλ μ€μ β μΈλΆ λͺ¨λΈ νμ.
|
|
11596
|
+
// "model=(κΈ°λ³Έ)" κ°μ λͺ¨νΈν νμ λμ μ€μ μ¬μ©λ λͺ¨λΈ μ΄λ¦ (μ: claude-opus-4-7) λͺ
μ.
|
|
11597
|
+
if (!state.model) {
|
|
11598
|
+
const cat = _PROVIDER_MODEL_CATALOG[state.provider];
|
|
11599
|
+
if (cat && cat.length) state.model = cat[0].id;
|
|
11600
|
+
}
|
|
11601
|
+
// 1.9.179+1.9.188: μνλ° ν μ€ β μΈλΆ λͺ¨λΈ + μκΉ/ꡬλΆμ κ°ν
|
|
11575
11602
|
const permMode = _readPermissions(root).mode || 'basic';
|
|
11576
11603
|
log(' ' + C.bold('β‘ ') + C.cy(`provider=${state.provider}`) + ' Β· '
|
|
11577
|
-
+ C.mag(`model=${state.model || '(
|
|
11604
|
+
+ C.mag(`model=${state.model || '(unknown)'}`) + ' Β· '
|
|
11578
11605
|
+ C.green(`role=${state.role}`) + ' Β· '
|
|
11579
11606
|
+ C.yel(`perms=${permMode}`) + ' Β· '
|
|
11580
11607
|
+ (state.streamMode ? C.green('βΆ stream=on') : C.dim('β‘ stream=off')));
|
|
@@ -11598,7 +11625,24 @@ async function _agentRepl(root, opts) {
|
|
|
11598
11625
|
}
|
|
11599
11626
|
} catch {}
|
|
11600
11627
|
log('');
|
|
11601
|
-
|
|
11628
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ): prompt μ/μλ ꡬλΆμ + μΈλΆ λͺ¨λΈ λͺ
μ (μ¬μ©μ μ
λ ₯μΉΈ μκ° κ°μ‘°).
|
|
11629
|
+
// λ§€ μλ΅ μ§ν readline.question νΈμΆ μ μ _printInputDivider() νΈμΆνμ¬ μ
λ ₯ μμ λͺ
νν.
|
|
11630
|
+
const _termCols = () => {
|
|
11631
|
+
try { return Math.max(40, (process.stdout.columns || 80)); } catch { return 80; }
|
|
11632
|
+
};
|
|
11633
|
+
const _printInputDivider = () => {
|
|
11634
|
+
if (!isTty) return;
|
|
11635
|
+
const cols = _termCols();
|
|
11636
|
+
const line = 'β'.repeat(Math.min(cols - 4, 120));
|
|
11637
|
+
process.stdout.write('\n' + C.dim(' ' + line) + '\n');
|
|
11638
|
+
};
|
|
11639
|
+
// prompt μ μΈλΆ λͺ¨λΈ νμ (μ¬μ©μ λͺ
μ): agent[claude Β· claude-opus-4-7 / actor / βΆ]>
|
|
11640
|
+
const prompt = () => {
|
|
11641
|
+
if (!isTty) return 'agent> ';
|
|
11642
|
+
const modelShort = (state.model || '').replace(/^(claude|gpt|gemini)-/, '').slice(0, 18);
|
|
11643
|
+
const modelTag = modelShort ? C.dim(' Β· ') + C.mag(modelShort) : '';
|
|
11644
|
+
return C.cy(`agent[${state.provider}${modelTag}${C.cy('/' + state.role)}${state.streamMode ? C.cy('/βΆ') : ''}${C.cy(']>')} `);
|
|
11645
|
+
};
|
|
11602
11646
|
rl.setPrompt(prompt());
|
|
11603
11647
|
|
|
11604
11648
|
// 1.9.170: Tab cycle β provider (Tab) / model within provider (Shift+Tab)
|
|
@@ -12012,13 +12056,13 @@ async function _agentRepl(root, opts) {
|
|
|
12012
12056
|
// 1.9.170: stream λͺ¨λμμλ μ΄λ―Έ μ€μκ°μΌλ‘ μΆλ ₯λμΌλ―λ‘ ν€λλ§ νμ (μλ΅ μ€λ³΅ λ°©μ§)
|
|
12013
12057
|
if (state.streamMode && ['claude', 'codex', 'gemini', 'copilot'].includes(state.provider)) {
|
|
12014
12058
|
log(C.dim(` [assistant: ${state.provider}/${state.model || 'default'}, role=${state.role}, ${dt}ms Β· ${result.response.length}μ]`));
|
|
12015
|
-
log('');
|
|
12016
12059
|
} else {
|
|
12017
12060
|
log('');
|
|
12018
12061
|
log(C.bold(`assistant (${state.model || state.provider}, role=${state.role}, ${dt}ms)`));
|
|
12019
12062
|
log(result.response);
|
|
12020
|
-
log('');
|
|
12021
12063
|
}
|
|
12064
|
+
// 1.9.188 (μ¬μ©μ λͺ
μ): μλ΅ λ + μ
λ ₯ ꡬλΆμ (μ
λ ₯μΉΈ μκ° λͺ
ν)
|
|
12065
|
+
_printInputDivider();
|
|
12022
12066
|
if (state.history.length % 6 === 0) saveSession(); // 6ν΄λ§λ€ μλ μ μ₯
|
|
12023
12067
|
} else {
|
|
12024
12068
|
// 1.9.185 (μ¬μ©μ λͺ
μ): REPL νΈμΆ μ€ν¨ μΉμ ν μ§λ¨ β μ΄λ λ¨κ³μμ μ€ν¨νλμ§ + μ¦μ κ²μ¦ λͺ
λ Ή μλ΄
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.188",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|