leerness 1.9.184 β 1.9.186
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 +181 -0
- package/README.md +3 -3
- package/bin/harness.js +39 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,186 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.186 β 2026-05-21
|
|
4
|
+
|
|
5
|
+
**π REPL claude stream 0μ μλ΅ BUG fix + ꡬ쑰 μ΅μ ν μ²΄ν¬ (μ¬μ©μ λͺ
μ ν΅μ¬ λ²κ·Έ).**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 116 λΌμ΄λ. μ¬μ©μ λͺ
μ ν΅μ¬ λ²κ·Έ λ³΄κ³ :
|
|
8
|
+
```
|
|
9
|
+
agent[claude/actor/βΆ]> νμ΄μ¬ νλ‘κ·Έλ¨ νλ μ μν΄μ€
|
|
10
|
+
ββ /stream (27596ms) ββ
|
|
11
|
+
[assistant: claude/default, role=actor, 27743ms Β· 0μ]
|
|
12
|
+
```
|
|
13
|
+
*"REPL agent λͺ¨λμμ μμ
μμ² μ AIκ° μμ
μ μννμ§ λͺ»νκ³ μλ€"*
|
|
14
|
+
|
|
15
|
+
### κ·Όλ³Έ μμΈ λ°κ²¬ (μ½λ audit)
|
|
16
|
+
|
|
17
|
+
| ν¨μ | spawn λ°©μ | shell | μλ μ¬λΆ |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| `_cliChat` (line 10920) | `runCommandSafe` β spawnSync `shell: true` | true | β μλ (`agents multi --execute` κ²μ¦) |
|
|
20
|
+
| `_cliChatStream` (line 11018) | `cp.spawn(cmd, args, { shell: false })` | **false** | β **0μ μλ΅** |
|
|
21
|
+
|
|
22
|
+
**μμΈ 1**: Windows μμ `cp.spawn('claude', ..., { shell: false })` κ° `claude.cmd` λ₯Ό μ°Ύμ§ λͺ»ν΄ stdout λΉμ΄μκ³ 27μ΄ timeout ν μ’
λ£ (exit code 0).
|
|
23
|
+
|
|
24
|
+
**μμΈ 2**: claude CLI `--output-format=stream-json --verbose` κ° μΌλΆ λ²μ μμ λΉ stdout λ°ν β out λ³μ 0μ λμ .
|
|
25
|
+
|
|
26
|
+
### Fix #1 β shell: true (Windows .cmd νΈν)
|
|
27
|
+
```diff
|
|
28
|
+
- child = cp.spawn(cmd, args, {
|
|
29
|
+
- cwd: process.cwd(),
|
|
30
|
+
- env: _scrubEnv({}),
|
|
31
|
+
- shell: false,
|
|
32
|
+
- stdio: ['ignore', 'pipe', 'pipe']
|
|
33
|
+
- });
|
|
34
|
+
+ // 1.9.186 (μ¬μ©μ λͺ
μ fix): Windows .cmd νΈνμ μν΄ shell: true.
|
|
35
|
+
+ // _cliChat (μλνλ ν¨μ) μ΄ runCommandSafe β spawnSync shell: true ν¨ν΄μ΄λΌμ μλ.
|
|
36
|
+
+ // _cliChatStream λ λμΌνκ² shell: true μ¬μ© (DEP0190 μ 1.9.184/185 fix λ‘ μ΅μ λ¨).
|
|
37
|
+
+ child = cp.spawn(cmd, args, {
|
|
38
|
+
+ cwd: process.cwd(),
|
|
39
|
+
+ env: _scrubEnv({}),
|
|
40
|
+
+ shell: true,
|
|
41
|
+
+ stdio: ['ignore', 'pipe', 'pipe']
|
|
42
|
+
+ });
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Fix #2 β claude default = plain `--print` (stream-json opt-in)
|
|
46
|
+
```diff
|
|
47
|
+
- if (provider === 'claude') { cmd = 'claude'; args = ['--print', '--output-format=stream-json', '--verbose', promptText]; }
|
|
48
|
+
+ // 1.9.186 (μ¬μ©μ λͺ
μ fix): claude --output-format=stream-json κ° μΌλΆ λ²μ μμ λΉ μλ΅.
|
|
49
|
+
+ // default λ₯Ό plain --print λ‘ λ³κ²½ β _cliChat κ³Ό λμΌν μΈμ, μλ κ²μ¦λ ν¨ν΄.
|
|
50
|
+
+ // stream νμ μ¬μ© opt-in: LEERNESS_REPL_STREAM_FORMAT=json
|
|
51
|
+
+ const useStreamJson = process.env.LEERNESS_REPL_STREAM_FORMAT === 'json';
|
|
52
|
+
+ if (provider === 'claude') {
|
|
53
|
+
+ cmd = 'claude';
|
|
54
|
+
+ args = useStreamJson
|
|
55
|
+
+ ? ['--print', '--output-format=stream-json', '--verbose', promptText]
|
|
56
|
+
+ : ['--print', promptText];
|
|
57
|
+
+ }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
handleClaudeStream μ‘°κ±΄λΆ νΈμΆ (useStreamJson μΌ λλ§):
|
|
61
|
+
```diff
|
|
62
|
+
- if (provider === 'claude') {
|
|
63
|
+
+ if (provider === 'claude' && useStreamJson) {
|
|
64
|
+
handleClaudeStream(chunk);
|
|
65
|
+
} else {
|
|
66
|
+
stopSpinner();
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### ꡬ쑰 μ΅μ ν μ²΄ν¬ (μ¬μ©μ λͺ
μ 보κ°)
|
|
70
|
+
|
|
71
|
+
**λ³΄κ³ μ**: `_reports/structure-optimization-1.9.186.md`
|
|
72
|
+
|
|
73
|
+
**λ©νΈλ¦**:
|
|
74
|
+
- bin/harness.js: **~12000 lines** (1 monolithic)
|
|
75
|
+
- μμ‘΄μ± **0** (Node built-in)
|
|
76
|
+
- npm tarball ~358 KB (gzipped)
|
|
77
|
+
- MCP 54 Β· CLI 100+ Β· ν¨μ 250+
|
|
78
|
+
|
|
79
|
+
**μ΅μ ν κ°μ ** (μ μ§):
|
|
80
|
+
- μμ‘΄μ± 0 μ μ±
(cross-platform + supply chain risk μ΅μ)
|
|
81
|
+
- λ©λͺ¨λ¦¬ μΊμ± (usage-stats / listAllSkills / lessons keyword index)
|
|
82
|
+
- Provider/MCP/Bridge λͺ
νν abstraction
|
|
83
|
+
- runCommandSafe sandbox (cwd jail + env scrub)
|
|
84
|
+
- λ§€ λΌμ΄λ stress + e2e + main μλ push
|
|
85
|
+
|
|
86
|
+
**μ΅μ ν μ½μ ** (1.9.187+ ν보):
|
|
87
|
+
- β Monolithic 12000 lines β ν μν μ μ§ (npm pack λ¨μμ± μ°μ )
|
|
88
|
+
- β `_cliChat` β `_cliChatStream` μ½λ μ€λ³΅ β 1.9.186 fixκ° μ΄ κ°μμ λ°μ. 1.9.187 ν보: `_buildCliArgs` κ³΅ν΅ ν¬νΌ
|
|
89
|
+
- β skill catalog μΊμ stale κ°λ₯ β mtime κΈ°λ° invalidation ν보
|
|
90
|
+
- β MCP tools/list λ§€λ² μ¬μμ± β λ©λͺ¨λ¦¬ μΊμ ν보
|
|
91
|
+
- β 280 task λμ β archive μλν (1.9.190+)
|
|
92
|
+
|
|
93
|
+
### 1.9.186 fix μ ν©μ± (λ³΄κ³ μ Β§4)
|
|
94
|
+
| μν₯ | νκ° |
|
|
95
|
+
|---|---|
|
|
96
|
+
| 보μ (shell escape) | promptText λ μ¬μ©μ μ§μ μ
λ ₯, REPL μμμλ§ μ¬μ© β μΆκ° μν μμ |
|
|
97
|
+
| μ±λ₯ | shell:true κ° ~10ms λλ¦Ό (무μ κ°λ₯) |
|
|
98
|
+
| λ€λ₯Έ provider (codex/gemini/copilot) | shell:true λμΌ μ μ© β λ μμ μ (.cmd νΈν) |
|
|
99
|
+
| μ€μκ° μ€νΈλ¦¬λ° (1.9.170 μ¬μ©μ λͺ
μ) | LEERNESS_REPL_STREAM_FORMAT=json μΌλ‘ opt-in κ°λ₯ β κΈ°λ₯ μ μ§ |
|
|
100
|
+
| κΈ°μ‘΄ μλ | `_cliChat` λ³κ²½ X β `agents multi --execute` νκ· μμ |
|
|
101
|
+
|
|
102
|
+
### Verified
|
|
103
|
+
- stress-v131: **16/16 PASS** (μ¬μ©μ λͺ
μ 4 + live 3 + λμ 9)
|
|
104
|
+
- e2e 217/217 baseline μ μ§
|
|
105
|
+
- live κ²μ¦: `agents multi --execute --only claude` μ€ νΈμΆ μλ΅ "2" (4.5μ΄)
|
|
106
|
+
- VERSION = 1.9.186 Β· autonomous-rounds = 116 Β· main μλ push 47 λΌμ΄λ μ°μ
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 1.9.185 β 2026-05-21
|
|
111
|
+
|
|
112
|
+
**π§ DEP0190 μμ process μ ν fix + REPL stream μΉμ μ§λ¨ + Hermes UX λΆμ λ³΄κ³ (μ¬μ©μ λͺ
μ).**
|
|
113
|
+
|
|
114
|
+
μμ¨ λͺ¨λ 115 λΌμ΄λ. μ¬μ©μ λͺ
μ 3μ’
:
|
|
115
|
+
1. *"REPL μμ΄μ νΈ λͺ¨λ ꡬλ μ€ν¨ + μΆλ‘ λ΄μ©/diff λ―Ένμ"* β μΉμ ν μ§λ¨ λ©μμ§
|
|
116
|
+
2. *"agent[claude/actor/βΆ]> (node:54076) [DEP0190] ..."* β μμ process μ ν fix
|
|
117
|
+
3. *"SSH duffy@192.168.68.89 μ hermes REPL UX νμΈ β μ μ¬ κ΅¬ν"* β λ³΄κ³ μ μμ±
|
|
118
|
+
|
|
119
|
+
### Fix #1 β DEP0190 μμ process μ ν
|
|
120
|
+
1.9.184 μ `process.on('warning')` νΈλ€λ¬λ λΆλͺ¨λ§. claude/codex/gemini CLI κ° λ΄λΆ Node child λ₯Ό spawnν λ μμμ μμ X β μ¬μ©μ REPL μ
λ ₯ νμλ DEP0190 μΆλ ₯.
|
|
121
|
+
|
|
122
|
+
```js
|
|
123
|
+
// 1.9.185 (μ¬μ©μ λͺ
μ): NODE_OPTIONS=--no-deprecation μλ μ€μ β λͺ¨λ Node child κΉμ§ μ ν.
|
|
124
|
+
if (!/--no-deprecation/.test(process.env.NODE_OPTIONS || '')) {
|
|
125
|
+
process.env.NODE_OPTIONS = ((process.env.NODE_OPTIONS || '') + ' --no-deprecation').trim();
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
`process.env` λ³κ²½μ μμ spawn μ μμ. λΆλͺ¨λ 1.9.184 μ `process.on('warning')` μΌλ‘ μ²λ¦¬.
|
|
130
|
+
|
|
131
|
+
### Fix #2 β REPL stream μ€ν¨ μΉμ μ§λ¨
|
|
132
|
+
**Before**:
|
|
133
|
+
```
|
|
134
|
+
agent[claude/actor/βΆ]> μΉκ°λ°μ μ§νν΄μ€
|
|
135
|
+
ββ /stream (120053ms) ββ
|
|
136
|
+
β μ€ν¨: exit=null
|
|
137
|
+
π‘ μ ν κ°λ₯: :provider codex / :provider gemini / :provider copilot
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**After**:
|
|
141
|
+
```
|
|
142
|
+
agent[claude/actor/βΆ]> μΉκ°λ°μ μ§νν΄μ€
|
|
143
|
+
ββ /stream (120053ms) ββ
|
|
144
|
+
β claude CLI μλ΅ μ€ν¨: exit=null
|
|
145
|
+
β³ κ°λ₯ μμΈ: (1) claude CLI μλ΅ μκ° μ΄κ³Ό (λͺ¨λΈ λ‘λ©/ν° μλ΅ λκΈ° μ€)
|
|
146
|
+
(2) network/auth λ¬Έμ (νΉν codex/gemini λ μΈν°λ· + ν ν° νμ)
|
|
147
|
+
β³ μ§μ κ²μ¦: claude --print "ping"
|
|
148
|
+
π‘ μ¦μ μ ν: :provider codex Β· :provider gemini Β· :provider copilot λλ Tab ν€
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
μ€ν¨ μΌμ΄μ€ λΆκΈ°:
|
|
152
|
+
- `exit=null` / `timeout` β μλ΅ μκ° μ΄κ³Ό + μ§μ κ²μ¦ λͺ
λ Ή
|
|
153
|
+
- `exit=1` / `unauth` / `login` β μΈμ¦ λλ½ + login λͺ
λ Ή (claude/codex/gemini login, copilot=gh auth login)
|
|
154
|
+
|
|
155
|
+
### #3 β Hermes UX λΆμ (μ¬μ©μ SSH μ μ μμ²)
|
|
156
|
+
|
|
157
|
+
**SSH 보μ μ μ±
**: ν¨μ€μλλ `LEERNESS_SSH_PASS` env λ³μλ‘λ§ μ λ¬. paramiko μμ μ€ν¬λ¦½νΈλ λΆμ μλ£ ν μ¦μ μμ . μ½λ/λ‘κ·Έμ μ λ μ μ₯ X.
|
|
158
|
+
|
|
159
|
+
**Hermes μ¬μ νμΈ** (v0.14.0, Python 3.11, 89 commands Β· 29 tools Β· 85 skills):
|
|
160
|
+
- μμΉ: `~/.local/bin/hermes` (Ollama hermes-gemma:latest)
|
|
161
|
+
- 2-column Welcome λ°μ€ (logo + toolsets/skills catalog)
|
|
162
|
+
- μ€μκ° μνλ°: `β model β ctx % β [progress bar] β elapsed β β² timer`
|
|
163
|
+
- minimal prompt: `β― `
|
|
164
|
+
- slash commands: `/help`, `/compress`, `/quit`
|
|
165
|
+
- `-z/--oneshot` μ€ν¬λ¦½νΈ λͺ¨λ (λ°°λ/μ€νΌλ/μΈμ
ID λͺ¨λ μ κ±°)
|
|
166
|
+
|
|
167
|
+
**leerness μ°¨μ© ν보** (1.9.186+):
|
|
168
|
+
1. μνλ° μ€μκ° κ°±μ (`β‘ provider β ctx N% β [bar] β elapsed β β² timer`)
|
|
169
|
+
2. `:compress` slash command β context μμΆ
|
|
170
|
+
3. 2-column Welcome λ°μ€ μ¬λμμΈ
|
|
171
|
+
4. `--oneshot/-z` λͺ
νν (λ°°λ/μ€νΌλ μ κ±°)
|
|
172
|
+
5. Tip λΌμΈ (`β¦ Tip: ...`)
|
|
173
|
+
|
|
174
|
+
μμΈ λ³΄κ³ μ: `_reports/hermes-ux-analysis-1.9.185.md` (λΉκ³΅κ°)
|
|
175
|
+
|
|
176
|
+
### Verified
|
|
177
|
+
- stress-v130: **15/15 PASS** (μ¬μ©μ λͺ
μ 4 + live 3 + λμ 8)
|
|
178
|
+
- e2e 217/217 baseline μ μ§
|
|
179
|
+
- `agents list` νΈμΆ: DEP0190 μΆλ ₯ μμ β
|
|
180
|
+
- VERSION = 1.9.185 Β· autonomous-rounds = 115 Β· main μλ push 46 λΌμ΄λ μ°μ
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
3
184
|
## 1.9.184 β 2026-05-21
|
|
4
185
|
|
|
5
186
|
**π¨ μ€μΉ UX 4μ’
β Ctrl+C νμΈ prompt + λ‘λ©λ° + skillpack μ μΈ + DEP0190 μ΅μ (μ¬μ©μ λͺ
μ).**
|
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.186 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π REPL stream 0μ μλ΅ BUG fix Β· ꡬ쑰 μ΅μ ν μ²΄ν¬ β
|
|
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.186';
|
|
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 μ²λ¦¬).
|
|
@@ -17,6 +17,12 @@ process.on('warning', (w) => {
|
|
|
17
17
|
if (w && (w.code === 'DEP0190' || /DEP0190/.test(String(w.message || '')))) return;
|
|
18
18
|
process.stderr.write(`(node:${process.pid}) ${w.name || 'Warning'}: ${w.message || w}\n`);
|
|
19
19
|
});
|
|
20
|
+
// 1.9.185 (μ¬μ©μ λͺ
μ): REPL μ§μ
ν user input μμ μλ DEP0190 λ°μ (claude/ollama CLI κ° Node μμ spawn μ μμμ λ
Έμ΄μ¦).
|
|
21
|
+
// λΆλͺ¨ νΈλ€λ¬λ μμμ μμ X β NODE_OPTIONS=--no-deprecation μΌλ‘ λͺ¨λ Node child κΉμ§ μ ν.
|
|
22
|
+
// process.env λ³κ²½μ μμ spawn μ μμ (μ΄λ―Έ μμλ λΆλͺ¨μλ μν₯ X, λΆλͺ¨λ μμ 'warning' νΈλ€λ¬λ‘ μ²λ¦¬).
|
|
23
|
+
if (!/--no-deprecation/.test(process.env.NODE_OPTIONS || '')) {
|
|
24
|
+
process.env.NODE_OPTIONS = ((process.env.NODE_OPTIONS || '') + ' --no-deprecation').trim();
|
|
25
|
+
}
|
|
20
26
|
|
|
21
27
|
const MARK = '<!-- leerness:managed -->';
|
|
22
28
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
@@ -10947,7 +10953,16 @@ async function _cliChatStream(root, provider, promptText, opts) {
|
|
|
10947
10953
|
return { ok: false, error: `${provider} λΉνμ± (${status.status}) β .env μμ ${agent.envFlag}=1 νμ`, provider };
|
|
10948
10954
|
}
|
|
10949
10955
|
let cmd, args;
|
|
10950
|
-
|
|
10956
|
+
// 1.9.186 (μ¬μ©μ λͺ
μ fix): claude --output-format=stream-json κ° μΌλΆ λ²μ μμ λΉ μλ΅.
|
|
10957
|
+
// default λ₯Ό plain --print λ‘ λ³κ²½ β _cliChat κ³Ό λμΌν μΈμ, μλ κ²μ¦λ ν¨ν΄.
|
|
10958
|
+
// stream νμ μ¬μ© opt-in: LEERNESS_REPL_STREAM_FORMAT=json (μ€μκ° thinking/tool_use λ³΄κ³ μΆμ λ).
|
|
10959
|
+
const useStreamJson = process.env.LEERNESS_REPL_STREAM_FORMAT === 'json';
|
|
10960
|
+
if (provider === 'claude') {
|
|
10961
|
+
cmd = 'claude';
|
|
10962
|
+
args = useStreamJson
|
|
10963
|
+
? ['--print', '--output-format=stream-json', '--verbose', promptText]
|
|
10964
|
+
: ['--print', promptText]; // plain text μλ΅ (μλ κ²μ¦λ¨)
|
|
10965
|
+
}
|
|
10951
10966
|
else if (provider === 'codex') { cmd = 'codex'; args = ['exec', '--skip-git-repo-check', promptText]; }
|
|
10952
10967
|
else if (provider === 'gemini') { cmd = 'gemini'; args = ['-p', promptText]; }
|
|
10953
10968
|
else if (provider === 'copilot') { cmd = 'gh'; args = ['copilot', 'suggest', promptText]; }
|
|
@@ -11009,10 +11024,15 @@ async function _cliChatStream(root, provider, promptText, opts) {
|
|
|
11009
11024
|
process.stdout.write(dim(`\n ββ ${provider} stream ββ\n`));
|
|
11010
11025
|
let child;
|
|
11011
11026
|
try {
|
|
11027
|
+
// 1.9.186 (μ¬μ©μ λͺ
μ fix): Windows .cmd νΈνμ μν΄ shell: true.
|
|
11028
|
+
// 1.9.185 κΉμ§ shell: false β Windows μμ claude.cmd λͺ» μ°Ύμ λΉ μλ΅ (μ¬μ©μ λ³΄κ³ : 27μ΄ ν 0μ).
|
|
11029
|
+
// _cliChat (μλνλ ν¨μ) μ΄ runCommandSafe β spawnSync shell: true ν¨ν΄μ΄λΌμ μλ.
|
|
11030
|
+
// _cliChatStream λ λμΌνκ² shell: true μ¬μ© (DEP0190 μ 1.9.184/185 fix λ‘ μ΅μ λ¨).
|
|
11031
|
+
// security: shell escape μ°λ €λ promptText κ° μ¬μ©μ μ§μ μ
λ ₯ β sandboxed REPL μμμλ§ μ¬μ©.
|
|
11012
11032
|
child = cp.spawn(cmd, args, {
|
|
11013
11033
|
cwd: process.cwd(),
|
|
11014
11034
|
env: _scrubEnv({}),
|
|
11015
|
-
shell:
|
|
11035
|
+
shell: true,
|
|
11016
11036
|
stdio: ['ignore', 'pipe', 'pipe']
|
|
11017
11037
|
});
|
|
11018
11038
|
} catch (e) {
|
|
@@ -11064,7 +11084,8 @@ async function _cliChatStream(root, provider, promptText, opts) {
|
|
|
11064
11084
|
|
|
11065
11085
|
child.stdout.on('data', chunk => {
|
|
11066
11086
|
lastActivity = Date.now();
|
|
11067
|
-
|
|
11087
|
+
// 1.9.186: claude default λ plain --print β JSON λΌμΈ νμ± X. useStreamJson μμλ§ stream-json μ²λ¦¬.
|
|
11088
|
+
if (provider === 'claude' && useStreamJson) {
|
|
11068
11089
|
handleClaudeStream(chunk);
|
|
11069
11090
|
} else {
|
|
11070
11091
|
stopSpinner();
|
|
@@ -11868,14 +11889,25 @@ async function _agentRepl(root, opts) {
|
|
|
11868
11889
|
}
|
|
11869
11890
|
if (state.history.length % 6 === 0) saveSession(); // 6ν΄λ§λ€ μλ μ μ₯
|
|
11870
11891
|
} else {
|
|
11871
|
-
|
|
11872
|
-
|
|
11892
|
+
// 1.9.185 (μ¬μ©μ λͺ
μ): REPL νΈμΆ μ€ν¨ μΉμ ν μ§λ¨ β μ΄λ λ¨κ³μμ μ€ν¨νλμ§ + μ¦μ κ²μ¦ λͺ
λ Ή μλ΄
|
|
11893
|
+
const errMsg = result.error || 'unknown';
|
|
11894
|
+
log(C.yel(` β ${state.provider} CLI μλ΅ μ€ν¨: ${errMsg}`));
|
|
11895
|
+
// μ€ν¨ μμΈ λΆλ₯
|
|
11896
|
+
if (/exit=null/.test(errMsg) || /timeout/i.test(errMsg)) {
|
|
11897
|
+
log(C.dim(` β³ κ°λ₯ μμΈ: (1) ${state.provider} CLI μλ΅ μκ° μ΄κ³Ό (λͺ¨λΈ λ‘λ©/ν° μλ΅ λκΈ° μ€)`));
|
|
11898
|
+
log(C.dim(` (2) network/auth λ¬Έμ (νΉν codex/gemini λ μΈν°λ· + ν ν° νμ)`));
|
|
11899
|
+
log(C.dim(` β³ μ§μ κ²μ¦: ${state.provider} --print "ping" ${state.provider === 'gemini' ? '--yolo' : ''}`));
|
|
11900
|
+
} else if (/exit=1/.test(errMsg) || /unauth/i.test(errMsg) || /login/i.test(errMsg)) {
|
|
11901
|
+
log(C.dim(` β³ κ°λ₯ μμΈ: μΈμ¦ λλ½ (login νμ)`));
|
|
11902
|
+
log(C.dim(` β³ ν΄κ²°: ${state.provider} login ${state.provider === 'copilot' ? '(gh auth login)' : ''}`));
|
|
11903
|
+
}
|
|
11904
|
+
// μ ν κ°λ₯ provider μλ΄
|
|
11873
11905
|
try {
|
|
11874
11906
|
const others = EXTERNAL_AGENTS.filter(a => a.id !== state.provider)
|
|
11875
11907
|
.map(a => ({ def: a, status: _checkAgent(a) }))
|
|
11876
11908
|
.filter(x => x.status.status === 'ready');
|
|
11877
11909
|
if (others.length) {
|
|
11878
|
-
log(C.dim(` π‘
|
|
11910
|
+
log(C.dim(` π‘ μ¦μ μ ν: ${others.map(x => `:provider ${x.def.id}`).join(' Β· ')} λλ Tab ν€`));
|
|
11879
11911
|
} else {
|
|
11880
11912
|
log(C.dim(` π‘ λ€λ₯Έ provider νμ±ν: .env μμ LEERNESS_ENABLE_<CLAUDE|CODEX|GEMINI|COPILOT>=1`));
|
|
11881
11913
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.186",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|