leerness 1.9.173 β 1.9.175
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 +120 -0
- package/README.md +3 -3
- package/bin/harness.js +91 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,125 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.9.175 β 2026-05-21
|
|
4
|
+
|
|
5
|
+
**π REPL Bridge Slash 3μ’
β `:web` / `:pc` / `:lsp` μ¦μ νΈμΆ.**
|
|
6
|
+
|
|
7
|
+
μμ¨ λͺ¨λ 105 λΌμ΄λ. 1.9.165~167 Bridge 3μ’
μ΄ 1.9.168 MCPλ‘ μΈλΆ AI μ§μ νΈμΆ κ°λ₯. **1.9.175: REPL μμμλ μ§μ νΈμΆ κ°λ₯** β μ¬μ©μ + AI κ° κ°μ REPL μΈμ
μμ μ½λ λΆμ/μΉ/PC μλν μ¦μ μ¬μ©.
|
|
8
|
+
|
|
9
|
+
### μ¬μ© μμ
|
|
10
|
+
```
|
|
11
|
+
agent[claude/actor/βΆ]> :lsp symbols src/api.ts
|
|
12
|
+
β leerness lsp symbols src/api.ts
|
|
13
|
+
# leerness lsp symbols (1.9.173 λ€κ΅μ΄)
|
|
14
|
+
file: src/api.ts Β· lang: javascript
|
|
15
|
+
mode: typescript-compiler Β· 24 symbols Β· 12ms
|
|
16
|
+
3:function parseRequest
|
|
17
|
+
8:class User
|
|
18
|
+
...
|
|
19
|
+
β :lsp symbols μλ£ (132ms)
|
|
20
|
+
|
|
21
|
+
agent[claude/actor/βΆ]> :web screenshot https://example.com --out shot.png
|
|
22
|
+
β leerness web screenshot https://example.com --out shot.png
|
|
23
|
+
β screenshot saved: shot.png Β· 1842ms
|
|
24
|
+
β :web screenshot μλ£ (2014ms)
|
|
25
|
+
|
|
26
|
+
agent[claude/actor/βΆ]> :pc click 800 400
|
|
27
|
+
β :pc click μ permissions=full νμ (νμ¬: basic)
|
|
28
|
+
:permissions full λ‘ μ¦μ λ³κ²½ κ°λ₯ (1.9.174)
|
|
29
|
+
|
|
30
|
+
agent[claude/actor/βΆ]> :permissions full
|
|
31
|
+
β κΆν λͺ¨λ λ³κ²½: full
|
|
32
|
+
agent[claude/actor/βΆ]> :pc click 800 400
|
|
33
|
+
β click (800, 400) β 23ms
|
|
34
|
+
β :pc click μλ£ (35ms)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### ν΅ν© νλ¦ β μ¬μ©μ λͺ
μ 4 λΌμ΄λ λμ
|
|
38
|
+
| λΌμ΄λ | κ°ν |
|
|
39
|
+
|---|---|
|
|
40
|
+
| 1.9.170 | Tab/Shift+Tab cycle + μ€μκ° μ€νΈλ¦¬λ° |
|
|
41
|
+
| 1.9.172 | μ€νΈλ¦¬λ° spinner + tool_use + diff μκΉ |
|
|
42
|
+
| 1.9.174 | install κΆν prompt μ κ±° + REPL `:permissions` λ³κ²½ |
|
|
43
|
+
| **1.9.175** | **REPL `:web` / `:pc` / `:lsp` slash 3μ’
μ¦μ νΈμΆ** |
|
|
44
|
+
|
|
45
|
+
β **REPL μμμ leerness μ λͺ¨λ capability μ¬μ© κ°λ₯** (AI λν + μ½λ λΆμ + μΉ + PC + κΆν λ³κ²½, ν μΈμ
).
|
|
46
|
+
|
|
47
|
+
### μν sub μ¬μ κΆν κ²μ¬
|
|
48
|
+
`:pc click/type/screenshot` μ `permissions !== 'full'` μ΄λ©΄ μ¦μ κ²½κ³ + λ³κ²½ μλ΄ (1.9.174 `:permissions full` μ°λ).
|
|
49
|
+
|
|
50
|
+
### ꡬν
|
|
51
|
+
- `op === 'web' || op === 'pc' || op === 'lsp'` νΈλ€λ¬ μΆκ° (Memory slash λΆκΈ° μ§μ )
|
|
52
|
+
- `subParts = rest.length ? rest : ['check']` (μΈμ μμΌλ©΄ check κΈ°λ³Έ)
|
|
53
|
+
- `runCommandSafe(process.execPath, [__filename, ...cliArgs, '--path', root], ...)` ν΅ν© νΈμΆ
|
|
54
|
+
- observability: `kind: 'agent_repl_slash'`, `label: 'repl-<op>'`
|
|
55
|
+
- stdout 50μ€ κΉμ§ νμ (Memory slash 30μ€λ³΄λ€ νμ₯ β symbol/diff μΆλ ₯ μ©λ)
|
|
56
|
+
|
|
57
|
+
### Verified
|
|
58
|
+
- e2e 217/217 baseline μ μ§
|
|
59
|
+
- stress-v120: **17/17** (slash νΈλ€λ¬ 4 + :pc κΆν μ¬μ κ²μ¬ 2 + :help/νμ 5 + λμ νκ· 6)
|
|
60
|
+
- VERSION = 1.9.175 / autonomous-rounds = 105 / main μλ push 36 λΌμ΄λ μ°μ
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 1.9.174 β 2026-05-21
|
|
65
|
+
|
|
66
|
+
**π μ¬μ©μ λͺ
μ β install κΆν prompt μ κ±° + REPL `:permissions` μ¦μ λ³κ²½.**
|
|
67
|
+
|
|
68
|
+
μμ¨ λͺ¨λ 104 λΌμ΄λ. μ¬μ©μ λͺ
μ: *"κΆν μ€μ λ¬Ένμ μ κ±°νκ³ REPL λͺ¨λμμ κ°νΈνκ² κΆν λ³κ²½ν μ μλλ‘"*.
|
|
69
|
+
|
|
70
|
+
### 1. Install κΆν prompt μ κ±°
|
|
71
|
+
μ΄μ (1.9.146): install μ 3-tier κΆν λͺ¨λ μ ν prompt (basic/extended/full).
|
|
72
|
+
**λ¬Έμ **: μ¬μ©μ κ²½ν 볡μ‘λ μ¦κ° + μλͺ»λ μ ν (full) μ μν.
|
|
73
|
+
|
|
74
|
+
**1.9.174**:
|
|
75
|
+
- install μ κΆν **νμ `basic` μλ μ μ©** (μμ default).
|
|
76
|
+
- prompt μ½λ (resolveInstallOptions μ κΆν λͺ¨λ _selectOne λΈλ‘) μμ μ κ±°.
|
|
77
|
+
- μλ΄ λΌμΈ: `Agent κΆν λͺ¨λ: basic (1.9.174 β REPLμμ :permissions extended|full λ‘ μ¦μ λ³κ²½ κ°λ₯)`.
|
|
78
|
+
|
|
79
|
+
### 2. REPL `:permissions` μ¦μ λ³κ²½ κ°λ₯
|
|
80
|
+
μ΄μ (1.9.146~1.9.173): `:permissions` λ©ν λͺ
λ Ήμ list λ§ (μ‘°ν).
|
|
81
|
+
|
|
82
|
+
**1.9.174**:
|
|
83
|
+
```
|
|
84
|
+
agent[claude/actor/βΆ]> :permissions
|
|
85
|
+
π νμ¬ κΆν λͺ¨λ: basic
|
|
86
|
+
|
|
87
|
+
λ³κ²½:
|
|
88
|
+
:permissions basic β μμ (.harness λ§ μ°κΈ°, κΆμ₯)
|
|
89
|
+
:permissions extended β νλ‘μ νΈ ν΄λ + shell allowlist
|
|
90
|
+
:permissions full β β μ 체 (λ§μ°μ€/ν€λ³΄λ/μΉ, IDE ν΅ν© μλ§)
|
|
91
|
+
|
|
92
|
+
μΈλΆ κΆν (mouse/keyboard/browser/admin):
|
|
93
|
+
mouse: β κ±°λΆ
|
|
94
|
+
keyboard: β κ±°λΆ
|
|
95
|
+
browser: β κ±°λΆ
|
|
96
|
+
admin: β κ±°λΆ
|
|
97
|
+
|
|
98
|
+
agent[claude/actor/βΆ]> :permissions extended
|
|
99
|
+
β κΆν λͺ¨λ λ³κ²½: extended (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)
|
|
100
|
+
|
|
101
|
+
agent[claude/actor/βΆ]> :permissions full
|
|
102
|
+
β κΆν λͺ¨λ λ³κ²½: full (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)
|
|
103
|
+
β full λͺ¨λ β λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ μ 체 νμ©. IDE ν΅ν© μΈ νκ²½μμλ μν.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- μΈμ μμ β νμ¬ λͺ¨λ + μΈλΆ κΆν (mouse/keyboard/browser/admin) νμ + λ³κ²½ μ΅μ
μλ΄
|
|
107
|
+
- `:permissions basic|extended|full` β μ¦μ λ³κ²½ (`permissionsSetCmd` νΈμΆ)
|
|
108
|
+
- `:perm` alias μΆκ° (λ¨μΆ)
|
|
109
|
+
- `full` λͺ¨λ λ³κ²½ μ β λͺ
μμ κ²½κ³
|
|
110
|
+
- μλͺ»λ λͺ¨λ β μΉμ ν μλ΄ (`μλͺ»λ λͺ¨λ: xyz (basic | extended | full)`)
|
|
111
|
+
|
|
112
|
+
### νΈνμ±
|
|
113
|
+
- CLI λͺ
λ Ή `leerness permissions list|set` κ·Έλλ‘ μ μ§ (1.9.146 νΈν).
|
|
114
|
+
- κΈ°μ‘΄ `.harness/agent-permissions.json` νμ κ·Έλλ‘ (mode + 4-tier μΈλΆ).
|
|
115
|
+
|
|
116
|
+
### Verified
|
|
117
|
+
- e2e 217/217 baseline μ μ§
|
|
118
|
+
- stress-v119: **20/20** (install μ κ±° 5 + REPL :permissions 7 + CLI νΈν 2 + λμ νκ· 6)
|
|
119
|
+
- VERSION = 1.9.174 / autonomous-rounds = 104 / main μλ push 35 λΌμ΄λ μ°μ
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
3
123
|
## 1.9.173 β 2026-05-21
|
|
4
124
|
|
|
5
125
|
**π 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.175 AI Agent Reliability Harness + Sandbox β
|
|
16
16
|
β verify Β· remember Β· orchestrate Β· audit Β· sandbox Β· drift β
|
|
17
|
-
β
|
|
17
|
+
β π REPL :web/:pc/:lsp slash β Bridge 3μ’
μ¦μ νΈμΆ β
|
|
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.175';
|
|
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,8 @@ 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 μμ )'));
|
|
11009
|
+
log(C.dim(' π 1.9.175 β :web / :pc / :lsp μΌλ‘ Bridge 3μ’
REPL μμμ μ¦μ νΈμΆ (μ½λ λΆμ/μΉ/PC)'));
|
|
11022
11010
|
log(C.dim(` νμ¬ β provider=${state.provider} model=${state.model || '(κΈ°λ³Έ)'} role=${state.role} permissions=${_readPermissions(root).mode}`));
|
|
11023
11011
|
// 1.9.155: REPL μ§μ
μ handoff 컨ν
μ€νΈ μλ λ
ΈμΆ (UX κ°μ β μ¬μ©μκ° λ§€λ² :handoff μ ν΄λ 컨ν
μ€νΈ μΈμ§)
|
|
11024
11012
|
try {
|
|
@@ -11123,7 +11111,8 @@ async function _agentRepl(root, opts) {
|
|
|
11123
11111
|
log(' :reset β history μ΄κΈ°ν');
|
|
11124
11112
|
log(' :history β λν history νμ');
|
|
11125
11113
|
log(' :save β μΈμ
μ¦μ μ μ₯');
|
|
11126
|
-
log(' :permissions
|
|
11114
|
+
log(' :permissions [mode] β π 1.9.174 νμ¬ λͺ¨λ νμ / λλ μ¦μ λ³κ²½ (basic/extended/full)');
|
|
11115
|
+
log(' :perm [mode] β :permissions λ¨μΆ alias');
|
|
11127
11116
|
log(' :quit / :exit / :q β μ’
λ£ (μλ μ μ₯)');
|
|
11128
11117
|
log(C.bold('\n π 1.9.170 ν€λ³΄λ λ¨μΆν€:'));
|
|
11129
11118
|
log(' Tab β λ€μ provider λ‘ cycle (ollama β claude β codex β gemini β copilot)');
|
|
@@ -11138,6 +11127,17 @@ async function _agentRepl(root, opts) {
|
|
|
11138
11127
|
log(' :brainstorm <topic> β leerness brainstorm "topic" (κ΄λ ¨ 컨ν
μ€νΈ νμ)');
|
|
11139
11128
|
log(' :tasks β leerness task list (νμ¬ task μν)');
|
|
11140
11129
|
log(' :plan β leerness plan show (νμ¬ milestone)');
|
|
11130
|
+
log(C.bold('\n π Bridge Slash (1.9.175) β REPL μμμ μ¦μ Bridge νΈμΆ:'));
|
|
11131
|
+
log(' :web check β playwright μ€μΉ νμΈ (opt-in)');
|
|
11132
|
+
log(' :web screenshot <url> [--out f.png] β URL β PNG');
|
|
11133
|
+
log(' :web extract <url> --selector "css" β DOM ν
μ€νΈ μΆμΆ');
|
|
11134
|
+
log(' :pc check β robotjs/nut-tree μ€μΉ νμΈ (β full κΆν)');
|
|
11135
|
+
log(' :pc click <x> <y> β μ’ν ν΄λ¦');
|
|
11136
|
+
log(' :pc type "<text>" β ν€λ³΄λ μ
λ ₯');
|
|
11137
|
+
log(' :pc screenshot --out shot.png β PC νλ©΄ μΊ‘μ²');
|
|
11138
|
+
log(' :lsp check β typescript μ€μΉ + λ€κ΅μ΄ fallback');
|
|
11139
|
+
log(' :lsp symbols <file> β μ¬λ³Ό μΆμΆ (JS/TS/Py/Go/Rust/Java)');
|
|
11140
|
+
log(' :lsp references <name> [--in <dir>] β μ¬λ³Ό μ°Έμ‘° κ²μ');
|
|
11141
11141
|
return false;
|
|
11142
11142
|
}
|
|
11143
11143
|
if (op === 'model') {
|
|
@@ -11231,7 +11231,42 @@ async function _agentRepl(root, opts) {
|
|
|
11231
11231
|
return false;
|
|
11232
11232
|
}
|
|
11233
11233
|
if (op === 'save') { saveSession(); log(C.dim(` β ${rel(root, sessionPath())}`)); return false; }
|
|
11234
|
-
if (op === 'permissions'
|
|
11234
|
+
if (op === 'permissions' || op === 'perm') {
|
|
11235
|
+
// 1.9.174: REPLμμ κΆν λ³κ²½ κ°λ₯ (μ¬μ©μ λͺ
μ μμ²).
|
|
11236
|
+
// :permissions β νμ¬ λͺ¨λ νμ + λ³κ²½ μ΅μ
μλ΄
|
|
11237
|
+
// :permissions basic β κΆν λͺ¨λ μ¦μ λ³κ²½
|
|
11238
|
+
const target = (rest[0] || '').toLowerCase();
|
|
11239
|
+
if (!target) {
|
|
11240
|
+
const p = _readPermissions(root);
|
|
11241
|
+
log('');
|
|
11242
|
+
log(C.bold(` π νμ¬ κΆν λͺ¨λ: ${C.cy(p.mode || 'basic')}`));
|
|
11243
|
+
log('');
|
|
11244
|
+
log(C.dim(' λ³κ²½:'));
|
|
11245
|
+
log(` ${C.green(':permissions basic')} β μμ (.harness λ§ μ°κΈ°, κΆμ₯)`);
|
|
11246
|
+
log(` ${C.yel(':permissions extended')} β νλ‘μ νΈ ν΄λ + shell allowlist`);
|
|
11247
|
+
log(` ${C.mag(':permissions full')} β β μ 체 (λ§μ°μ€/ν€λ³΄λ/μΉ, IDE ν΅ν© μλ§)`);
|
|
11248
|
+
log('');
|
|
11249
|
+
log(C.dim(' μΈλΆ κΆν (mouse/keyboard/browser/admin):'));
|
|
11250
|
+
Object.entries(p).filter(([k]) => k !== 'mode' && typeof p[k] === 'boolean').forEach(([k, v]) => {
|
|
11251
|
+
log(` ${k}: ${v ? C.green('β νμ©') : C.dim('β κ±°λΆ')}`);
|
|
11252
|
+
});
|
|
11253
|
+
return false;
|
|
11254
|
+
}
|
|
11255
|
+
if (!['basic', 'extended', 'full'].includes(target)) {
|
|
11256
|
+
log(C.yel(` β μλͺ»λ λͺ¨λ: ${target} (basic | extended | full)`));
|
|
11257
|
+
return false;
|
|
11258
|
+
}
|
|
11259
|
+
try {
|
|
11260
|
+
permissionsSetCmd(root, target);
|
|
11261
|
+
log(C.green(` β κΆν λͺ¨λ λ³κ²½: ${target} (μ¦μ μ μ© β λ€μ λͺ
λ ΉλΆν°)`));
|
|
11262
|
+
if (target === 'full') {
|
|
11263
|
+
log(C.yel(' β full λͺ¨λ β λ§μ°μ€/ν€λ³΄λ/μΉ/κ΄λ¦¬μ μ 체 νμ©. IDE ν΅ν© μΈ νκ²½μμλ μν.'));
|
|
11264
|
+
}
|
|
11265
|
+
} catch (e) {
|
|
11266
|
+
log(C.yel(` β κΆν λ³κ²½ μ€ν¨: ${e.message}`));
|
|
11267
|
+
}
|
|
11268
|
+
return false;
|
|
11269
|
+
}
|
|
11235
11270
|
if (op === 'status') {
|
|
11236
11271
|
// 1.9.155: REPL μμμ νμ¬ μΈμ
μν μμΈν (provider/model/role/permissions/history/runs)
|
|
11237
11272
|
log(C.bold('\n π REPL μΈμ
μν (1.9.155)'));
|
|
@@ -11249,6 +11284,39 @@ async function _agentRepl(root, opts) {
|
|
|
11249
11284
|
log('');
|
|
11250
11285
|
return false;
|
|
11251
11286
|
}
|
|
11287
|
+
// 1.9.175: Bridge 3μ’
slash β :web / :pc / :lsp (REPL μμμ μ¦μ Bridge νΈμΆ)
|
|
11288
|
+
// μ¬μ© μ:
|
|
11289
|
+
// :web check β playwright μ€μΉ νμΈ
|
|
11290
|
+
// :web screenshot https://example.com β URL β PNG
|
|
11291
|
+
// :pc check β robotjs μ€μΉ νμΈ
|
|
11292
|
+
// :pc click 800 400 β μ’ν ν΄λ¦ (full κΆν νμ)
|
|
11293
|
+
// :lsp symbols src/api.ts β νμΌ μ¬λ³Ό μΆμΆ
|
|
11294
|
+
// :lsp references myFunc --in src β μ¬λ³Ό μ°Έμ‘° κ²μ
|
|
11295
|
+
if (op === 'web' || op === 'pc' || op === 'lsp') {
|
|
11296
|
+
const subParts = rest.length ? rest : ['check']; // μΈμ μμΌλ©΄ check κΈ°λ³Έ
|
|
11297
|
+
const cliArgs = [op, ...subParts];
|
|
11298
|
+
// permissions μ¬μ μλ΄ (full λͺ¨λ νμν sub λ§)
|
|
11299
|
+
if (op === 'pc' && ['click', 'type', 'screenshot'].includes(subParts[0])) {
|
|
11300
|
+
const p = _readPermissions(root);
|
|
11301
|
+
if (p.mode !== 'full') {
|
|
11302
|
+
log(C.yel(` β :pc ${subParts[0]} μ permissions=full νμ (νμ¬: ${p.mode})`));
|
|
11303
|
+
log(C.dim(` :permissions full λ‘ μ¦μ λ³κ²½ κ°λ₯ (1.9.174)`));
|
|
11304
|
+
return false;
|
|
11305
|
+
}
|
|
11306
|
+
}
|
|
11307
|
+
log(C.dim(` β leerness ${cliArgs.join(' ')}`));
|
|
11308
|
+
const t0 = Date.now();
|
|
11309
|
+
const r = runCommandSafe(process.execPath, [__filename, ...cliArgs, '--path', root], {
|
|
11310
|
+
cwd: root, root, timeout: 60000, kind: 'agent_repl_slash', label: `repl-${op}`,
|
|
11311
|
+
env: { LEERNESS_NO_BANNER: '1', LEERNESS_NO_PROMPT: '1', LEERNESS_NO_DRIFT_CHECK: '1' }
|
|
11312
|
+
});
|
|
11313
|
+
const dt = Date.now() - t0;
|
|
11314
|
+
if (r.stdout) log(r.stdout.trim().split('\n').slice(0, 50).join('\n'));
|
|
11315
|
+
if (r.status === 0) log(C.green(` β :${op} ${subParts[0] || ''} μλ£ (${dt}ms)`));
|
|
11316
|
+
else log(C.yel(` β :${op} μ€ν¨ (exit ${r.status}, ${dt}ms)`));
|
|
11317
|
+
return false;
|
|
11318
|
+
}
|
|
11319
|
+
|
|
11252
11320
|
// 1.9.150: leerness λ΄λΆ λͺ
λ Ή slash-commands β :verify / :audit / :handoff / :health
|
|
11253
11321
|
// 1.9.161: Memory Surface μ‘°ν slash μΆκ° β :lessons / :brainstorm / :tasks / :plan
|
|
11254
11322
|
if (op === 'verify' || op === 'audit' || op === 'handoff' || op === 'health'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leerness",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.175",
|
|
4
4
|
"description": "Leerness: λΉνκ΄΄ λ§μ΄κ·Έλ μ΄μ
, μλ λ²μ κ°μ§Β·μ
λ°μ΄νΈ, κ³ν/μ§ν/νΈλμ€ν μλν, κ²μΌλ¦Β·μν¬λ¦ΏΒ·μΈμ½λ© μλ κ°λ, Claude Code μ¬λμ ν΅ν©μ κ°μΆ νκ΅μ΄ μ°μ AI κ°λ° νλ€μ€.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"leerness",
|