leerness 1.9.174 β 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 +61 -0
- package/README.md +3 -3
- package/bin/harness.js +46 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
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
|
+
|
|
3
64
|
## 1.9.174 β 2026-05-21
|
|
4
65
|
|
|
5
66
|
**π μ¬μ©μ λͺ
μ β install κΆν prompt μ κ±° + REPL `:permissions` μ¦μ λ³κ²½.**
|
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 -->';
|
|
@@ -11006,6 +11006,7 @@ async function _agentRepl(root, opts) {
|
|
|
11006
11006
|
log(C.dim(' Memory Slash (1.9.161): :lessons | :brainstorm <topic> | :tasks | :plan'));
|
|
11007
11007
|
log(C.dim(' π 1.9.170 β Tab=provider cycle, Shift+Tab=model cycle, :stream on|off (μ€μκ° μΆλ ₯)'));
|
|
11008
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)'));
|
|
11009
11010
|
log(C.dim(` νμ¬ β provider=${state.provider} model=${state.model || '(κΈ°λ³Έ)'} role=${state.role} permissions=${_readPermissions(root).mode}`));
|
|
11010
11011
|
// 1.9.155: REPL μ§μ
μ handoff 컨ν
μ€νΈ μλ λ
ΈμΆ (UX κ°μ β μ¬μ©μκ° λ§€λ² :handoff μ ν΄λ 컨ν
μ€νΈ μΈμ§)
|
|
11011
11012
|
try {
|
|
@@ -11126,6 +11127,17 @@ async function _agentRepl(root, opts) {
|
|
|
11126
11127
|
log(' :brainstorm <topic> β leerness brainstorm "topic" (κ΄λ ¨ 컨ν
μ€νΈ νμ)');
|
|
11127
11128
|
log(' :tasks β leerness task list (νμ¬ task μν)');
|
|
11128
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>] β μ¬λ³Ό μ°Έμ‘° κ²μ');
|
|
11129
11141
|
return false;
|
|
11130
11142
|
}
|
|
11131
11143
|
if (op === 'model') {
|
|
@@ -11272,6 +11284,39 @@ async function _agentRepl(root, opts) {
|
|
|
11272
11284
|
log('');
|
|
11273
11285
|
return false;
|
|
11274
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
|
+
|
|
11275
11320
|
// 1.9.150: leerness λ΄λΆ λͺ
λ Ή slash-commands β :verify / :audit / :handoff / :health
|
|
11276
11321
|
// 1.9.161: Memory Surface μ‘°ν slash μΆκ° β :lessons / :brainstorm / :tasks / :plan
|
|
11277
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",
|