leerness 1.9.173 β 1.9.174
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 +59 -0
- package/README.md +3 -3
- package/bin/harness.js +46 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.174 β 2026-05-21
|
|
4
|
+
|
|
5
|
+
**π μ¬μ©μ λͺ
μ β install κΆν prompt μ κ±° + REPL `:permissions` μ¦μ λ³κ²½.**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 104 λΌμ΄λ. μ¬μ©μ λͺ
μ: *"κΆν μ€μ λ¬Ένμ μ κ±°νκ³ REPL λͺ¨λμμ κ°νΈνκ² κΆν λ³κ²½ν μ μλλ‘"*.
|
|
8
|
+
|
|
9
|
+
### 1. Install κΆν prompt μ κ±°
|
|
10
|
+
μ΄μ (1.9.146): install μ 3-tier κΆν λͺ¨λ μ ν prompt (basic/extended/full).
|
|
11
|
+
**λ¬Έμ **: μ¬μ©μ κ²½ν 볡μ‘λ μ¦κ° + μλͺ»λ μ ν (full) μ μν.
|
|
12
|
+
|
|
13
|
+
**1.9.174**:
|
|
14
|
+
- install μ κΆν **νμ `basic` μλ μ μ©** (μμ default).
|
|
15
|
+
- prompt μ½λ (resolveInstallOptions μ κΆν λͺ¨λ _selectOne λΈλ‘) μμ μ κ±°.
|
|
16
|
+
- μλ΄ λΌμΈ: `Agent κΆν λͺ¨λ: basic (1.9.174 β REPLμμ :permissions extended|full λ‘ μ¦μ λ³κ²½ κ°λ₯)`.
|
|
17
|
+
|
|
18
|
+
### 2. REPL `:permissions` μ¦μ λ³κ²½ κ°λ₯
|
|
19
|
+
μ΄μ (1.9.146~1.9.173): `:permissions` λ©ν λͺ
λ Ήμ list λ§ (μ‘°ν).
|
|
20
|
+
|
|
21
|
+
**1.9.174**:
|
|
22
|
+
```
|
|
23
|
+
agent[claude/actor/βΆ]> :permissions
|
|
24
|
+
π νμ¬ κΆν λͺ¨λ: basic
|
|
25
|
+
|
|
26
|
+
λ³κ²½:
|
|
27
|
+
:permissions basic β μμ (.harness λ§ μ°κΈ°, κΆμ₯)
|
|
28
|
+
:permissions extended β νλ‘μ νΈ ν΄λ + shell allowlist
|
|
29
|
+
:permissions full β β μ 체 (λ§μ°μ€/ν€λ³΄λ/μΉ, IDE ν΅ν© μλ§)
|
|
30
|
+
|
|
31
|
+
μΈλΆ κΆν (mouse/keyboard/browser/admin):
|
|
32
|
+
mouse: β κ±°λΆ
|
|
33
|
+
keyboard: β κ±°λΆ
|
|
34
|
+
browser: β κ±°λΆ
|
|
35
|
+
admin: β κ±°λΆ
|
|
36
|
+
|
|
37
|
+
agent[claude/actor/βΆ]> :permissions extended
|
|
38
|
+
β κΆν λͺ¨λ λ³κ²½: extended (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)
|
|
39
|
+
|
|
40
|
+
agent[claude/actor/βΆ]> :permissions full
|
|
41
|
+
β κΆν λͺ¨λ λ³κ²½: full (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)
|
|
42
|
+
β full λͺ¨λ β λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ μ 체 νμ©. IDE ν΅ν© μΈ νκ²½μμλ μν.
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- μΈμ μμ β νμ¬ λͺ¨λ + μΈλΆ κΆν (mouse/keyboard/browser/admin) νμ + λ³κ²½ μ΅μ
μλ΄
|
|
46
|
+
- `:permissions basic|extended|full` β μ¦μ λ³κ²½ (`permissionsSetCmd` νΈμΆ)
|
|
47
|
+
- `:perm` alias μΆκ° (λ¨μΆ)
|
|
48
|
+
- `full` λͺ¨λ λ³κ²½ μ β λͺ
μμ κ²½κ³
|
|
49
|
+
- μλͺ»λ λͺ¨λ β μΉμ ν μλ΄ (`μλͺ»λ λͺ¨λ: xyz (basic | extended | full)`)
|
|
50
|
+
|
|
51
|
+
### νΈνμ±
|
|
52
|
+
- CLI λͺ
λ Ή `leerness permissions list|set` κ·Έλλ‘ μ μ§ (1.9.146 νΈν).
|
|
53
|
+
- κΈ°μ‘΄ `.harness/agent-permissions.json` νμ κ·Έλλ‘ (mode + 4-tier μΈλΆ).
|
|
54
|
+
|
|
55
|
+
### Verified
|
|
56
|
+
- e2e 217/217 baseline μ μ§
|
|
57
|
+
- stress-v119: **20/20** (install μ κ±° 5 + REPL :permissions 7 + CLI νΈν 2 + λμ νκ· 6)
|
|
58
|
+
- VERSION = 1.9.174 / autonomous-rounds = 104 / main μλ push 35 λΌμ΄λ μ°μ
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
3
62
|
## 1.9.173 β 2026-05-21
|
|
4
63
|
|
|
5
64
|
**π LSP μ΄λν° λ€κ΅μ΄ νμ₯ β JavaScript + Python + Go + Rust + Java (5κ° μΈμ΄ regex fallback).**
|
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.174 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π install κΆν prompt μ κ±° Β· REPL :permissions μ¦μ λ³κ²½ β
|
|
18
18
|
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
19
19
|
```
|
|
20
20
|
|
package/bin/harness.js
CHANGED
|
@@ -6,7 +6,7 @@ const path = require('path');
|
|
|
6
6
|
const cp = require('child_process');
|
|
7
7
|
const readline = require('readline');
|
|
8
8
|
|
|
9
|
-
const VERSION = '1.9.
|
|
9
|
+
const VERSION = '1.9.174';
|
|
10
10
|
const MARK = '<!-- leerness:managed -->';
|
|
11
11
|
const README_START = '<!-- leerness:project-readme:start -->';
|
|
12
12
|
const README_END = '<!-- leerness:project-readme:end -->';
|
|
@@ -739,25 +739,11 @@ async function resolveInstallOptions(root, opts = {}) {
|
|
|
739
739
|
}
|
|
740
740
|
}
|
|
741
741
|
}
|
|
742
|
-
// 1.9.
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
{ label: 'basic (μμ ) β μ½κΈ°/μ°κΈ° .harness/ λ§', description: 'κΆμ₯ β νμΌμμ€ν
/λ€νΈμν¬ κ±°λΆ, .harness μλ§ μ°κΈ°', id: 'basic' },
|
|
748
|
-
{ label: 'extended β νλ‘μ νΈ ν΄λ + shell allowlist', description: 'νλ‘μ νΈ ν΄λ read/write, μ¬μ μ μλ λͺ
λ Ήλ§ exec', id: 'extended' },
|
|
749
|
-
{ label: 'full β μ 체 (λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ) β μν', description: 'β IDE ν΅ν© μμλ§ κΆμ₯ β λͺ¨λ PC μμ
κ°λ₯', id: 'full' }
|
|
750
|
-
], { defaultIndex: 0 });
|
|
751
|
-
permissionMode = pOpt ? pOpt.id : 'basic';
|
|
752
|
-
} else {
|
|
753
|
-
log('\nagent κΆν λͺ¨λ (leerness agent λͺ
λ Ή μ¬μ© μ):');
|
|
754
|
-
log('1) basic (μμ ) β .harness/ λ§');
|
|
755
|
-
log('2) extended β νλ‘μ νΈ ν΄λ + shell allowlist');
|
|
756
|
-
log('3) full β β λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ μ 체 (IDE ν΅ν© μμλ§)');
|
|
757
|
-
const a = await ask('μ ν [1]: ');
|
|
758
|
-
permissionMode = a === '2' ? 'extended' : a === '3' ? 'full' : 'basic';
|
|
759
|
-
}
|
|
760
|
-
}
|
|
742
|
+
// 1.9.174: κΆν prompt μ κ±° (μ¬μ©μ λͺ
μ) β install μ νμ basic μλ μ μ©.
|
|
743
|
+
// REPL μμμ `:permissions <basic|extended|full>` λ‘ μ¦μ λ³κ²½ κ°λ₯ (REPL UX κ°ν).
|
|
744
|
+
// μ΄μ 1.9.146 μ 3-tier μ ν prompt λ μ¬μ©μ κ²½ν 볡μ‘λ μ¦κ° + μλͺ»λ μ ν (full) μ μν β
|
|
745
|
+
// μμ ν κΈ°λ³Έ (basic) μλ μμ + REPL μ§μ
μμ μ νμ μ λ³κ²½νλ νλ¦μ΄ λ μμ νκ³ κ°νΈ.
|
|
746
|
+
const permissionMode = 'basic';
|
|
761
747
|
// 1.9.151: λͺ¨λ λ¬Έν μ’
λ£ ν β REPL λͺ¨λ μ¦μ νμ±ν μ¬λΆ (μ¬μ©μ λͺ
μ μμ²)
|
|
762
748
|
// μ νλ μμ΄μ νΈκ° μμ λλ§ νμ. μ€μΉ μλ£ ν install() κ° μ²λ¦¬.
|
|
763
749
|
let startRepl = false;
|
|
@@ -807,7 +793,7 @@ async function install(root, opts = {}) {
|
|
|
807
793
|
log(`Agents νμ±ν: ${list}`);
|
|
808
794
|
}
|
|
809
795
|
if (resolved.startRepl) log(`REPL μλ μμ: μ (μ€μΉ μλ£ ν \`leerness agent\` μ§μ
)`);
|
|
810
|
-
if (resolved.permissionMode) log(`Agent κΆν λͺ¨λ: ${resolved.permissionMode}`);
|
|
796
|
+
if (resolved.permissionMode) log(`Agent κΆν λͺ¨λ: ${resolved.permissionMode} (1.9.174 β REPLμμ \`:permissions extended|full\` λ‘ μ¦μ λ³κ²½ κ°λ₯)`);
|
|
811
797
|
// 1.9.10: μ€ν¬ μΉ΄νλ‘κ·Έ μΆμ² μλ΄
|
|
812
798
|
if (SKILLPACK_SOURCE === 'builtin') log(`Skill catalog source: builtin (leerness-skillpack λ―Έμ€μΉ β \`npm i leerness-skillpack\`λ‘ νμ₯ κ°λ₯)`);
|
|
813
799
|
else log(`Skill catalog source: ${SKILLPACK_SOURCE} (leerness-skillpack${SKILLPACK_META ? ` v${SKILLPACK_META.version}` : ''})`);
|
|
@@ -11019,6 +11005,7 @@ async function _agentRepl(root, opts) {
|
|
|
11019
11005
|
log(C.dim(' Slash λͺ
λ Ή (1.9.150): :verify | :audit | :handoff | :health'));
|
|
11020
11006
|
log(C.dim(' Memory Slash (1.9.161): :lessons | :brainstorm <topic> | :tasks | :plan'));
|
|
11021
11007
|
log(C.dim(' π 1.9.170 β Tab=provider cycle, Shift+Tab=model cycle, :stream on|off (μ€μκ° μΆλ ₯)'));
|
|
11008
|
+
log(C.dim(' π 1.9.174 β :permissions [basic|extended|full] λ‘ μ¦μ κΆν λ³κ²½ (default: basic μμ )'));
|
|
11022
11009
|
log(C.dim(` νμ¬ β provider=${state.provider} model=${state.model || '(κΈ°λ³Έ)'} role=${state.role} permissions=${_readPermissions(root).mode}`));
|
|
11023
11010
|
// 1.9.155: REPL μ§μ
μ handoff 컨ν
μ€νΈ μλ λ
ΈμΆ (UX κ°μ β μ¬μ©μκ° λ§€λ² :handoff μ ν΄λ 컨ν
μ€νΈ μΈμ§)
|
|
11024
11011
|
try {
|
|
@@ -11123,7 +11110,8 @@ async function _agentRepl(root, opts) {
|
|
|
11123
11110
|
log(' :reset β history μ΄κΈ°ν');
|
|
11124
11111
|
log(' :history β λν history νμ');
|
|
11125
11112
|
log(' :save β μΈμ
μ¦μ μ μ₯');
|
|
11126
|
-
log(' :permissions
|
|
11113
|
+
log(' :permissions [mode] β π 1.9.174 νμ¬ λͺ¨λ νμ / λλ μ¦μ λ³κ²½ (basic/extended/full)');
|
|
11114
|
+
log(' :perm [mode] β :permissions λ¨μΆ alias');
|
|
11127
11115
|
log(' :quit / :exit / :q β μ’
λ£ (μλ μ μ₯)');
|
|
11128
11116
|
log(C.bold('\n π 1.9.170 ν€λ³΄λ λ¨μΆν€:'));
|
|
11129
11117
|
log(' Tab β λ€μ provider λ‘ cycle (ollama β claude β codex β gemini β copilot)');
|
|
@@ -11231,7 +11219,42 @@ async function _agentRepl(root, opts) {
|
|
|
11231
11219
|
return false;
|
|
11232
11220
|
}
|
|
11233
11221
|
if (op === 'save') { saveSession(); log(C.dim(` β ${rel(root, sessionPath())}`)); return false; }
|
|
11234
|
-
if (op === 'permissions'
|
|
11222
|
+
if (op === 'permissions' || op === 'perm') {
|
|
11223
|
+
// 1.9.174: REPLμμ κΆν λ³κ²½ κ°λ₯ (μ¬μ©μ λͺ
μ μμ²).
|
|
11224
|
+
// :permissions β νμ¬ λͺ¨λ νμ + λ³κ²½ μ΅μ
μλ΄
|
|
11225
|
+
// :permissions basic β κΆν λͺ¨λ μ¦μ λ³κ²½
|
|
11226
|
+
const target = (rest[0] || '').toLowerCase();
|
|
11227
|
+
if (!target) {
|
|
11228
|
+
const p = _readPermissions(root);
|
|
11229
|
+
log('');
|
|
11230
|
+
log(C.bold(` π νμ¬ κΆν λͺ¨λ: ${C.cy(p.mode || 'basic')}`));
|
|
11231
|
+
log('');
|
|
11232
|
+
log(C.dim(' λ³κ²½:'));
|
|
11233
|
+
log(` ${C.green(':permissions basic')} β μμ (.harness λ§ μ°κΈ°, κΆμ₯)`);
|
|
11234
|
+
log(` ${C.yel(':permissions extended')} β νλ‘μ νΈ ν΄λ + shell allowlist`);
|
|
11235
|
+
log(` ${C.mag(':permissions full')} β β μ 체 (λ§μ°μ€/ν€λ³΄λ/μΉ, IDE ν΅ν© μλ§)`);
|
|
11236
|
+
log('');
|
|
11237
|
+
log(C.dim(' μΈλΆ κΆν (mouse/keyboard/browser/admin):'));
|
|
11238
|
+
Object.entries(p).filter(([k]) => k !== 'mode' && typeof p[k] === 'boolean').forEach(([k, v]) => {
|
|
11239
|
+
log(` ${k}: ${v ? C.green('β νμ©') : C.dim('β κ±°λΆ')}`);
|
|
11240
|
+
});
|
|
11241
|
+
return false;
|
|
11242
|
+
}
|
|
11243
|
+
if (!['basic', 'extended', 'full'].includes(target)) {
|
|
11244
|
+
log(C.yel(` β μλͺ»λ λͺ¨λ: ${target} (basic | extended | full)`));
|
|
11245
|
+
return false;
|
|
11246
|
+
}
|
|
11247
|
+
try {
|
|
11248
|
+
permissionsSetCmd(root, target);
|
|
11249
|
+
log(C.green(` β κΆν λͺ¨λ λ³κ²½: ${target} (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)`));
|
|
11250
|
+
if (target === 'full') {
|
|
11251
|
+
log(C.yel(' β full λͺ¨λ β λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ μ 체 νμ©. IDE ν΅ν© μΈ νκ²½μμλ μν.'));
|
|
11252
|
+
}
|
|
11253
|
+
} catch (e) {
|
|
11254
|
+
log(C.yel(` β κΆν λ³κ²½ μ€ν¨: ${e.message}`));
|
|
11255
|
+
}
|
|
11256
|
+
return false;
|
|
11257
|
+
}
|
|
11235
11258
|
if (op === 'status') {
|
|
11236
11259
|
// 1.9.155: REPL μμμ νμ¬ μΈμ
μν μμΈν (provider/model/role/permissions/history/runs)
|
|
11237
11260
|
log(C.bold('\n π REPL μΈμ
μν (1.9.155)'));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.174",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|