@poping/yome 0.0.8 → 0.0.9

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,248 @@
1
+ // Regression tests for fs path resolution on Linux mesh.
2
+ //
3
+ // Background: thread-1779085552209-3246 session 2 — every `fs ls /uno`,
4
+ // `fs read ~/.bashrc`, etc. silently fell back to the daemon's cwd
5
+ // because handleFs only inspected `args.path`, not the bare positional
6
+ // produced by Server/agent/commandParser. We rewrote handleFs to share
7
+ // a single resolveUserPath helper; this file pins down its contract.
8
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
9
+ import { mkdtempSync, mkdirSync, rmSync, writeFileSync, symlinkSync } from 'node:fs';
10
+ import { tmpdir, homedir } from 'node:os';
11
+ import { join, isAbsolute } from 'node:path';
12
+ import { RpcHandler } from './rpc-handler.js';
13
+ // Spin up a no-op fake client that captures the response so the test can
14
+ // assert on what the daemon would send back.
15
+ function fakeClient() {
16
+ const sent = [];
17
+ const noop = (_) => () => { };
18
+ const client = {
19
+ onMessage: noop,
20
+ send: async (frame) => {
21
+ sent.push(frame);
22
+ },
23
+ };
24
+ return { sent, client };
25
+ }
26
+ function makeReq(domain, action, args = {}) {
27
+ return {
28
+ type: 'rpc:cal-request',
29
+ requestId: `req-${Math.random()}`,
30
+ command: `${domain} ${action}`,
31
+ parsed: { domain, action, args },
32
+ };
33
+ }
34
+ // Drive a single request through the handler via its public WS hook.
35
+ // handleRequest is private, so we wire start() and feed a fake frame.
36
+ function dispatchOne(handler, req, sent) {
37
+ return new Promise((resolve) => {
38
+ // Poll the sent buffer.
39
+ const id = req.requestId;
40
+ const tick = () => {
41
+ const hit = sent.find((r) => r.requestId === id);
42
+ if (hit)
43
+ resolve(hit);
44
+ else
45
+ setTimeout(tick, 5);
46
+ };
47
+ // Inject by calling the internal dispatch (we have access via the
48
+ // private handleRequest indirectly through start(). Easier: call
49
+ // the private method through casting — tests are allowed to.
50
+ void handler
51
+ .handleRequest(req);
52
+ tick();
53
+ });
54
+ }
55
+ let tmpRoot;
56
+ let originalHome;
57
+ beforeEach(() => {
58
+ tmpRoot = mkdtempSync(join(tmpdir(), 'yome-rpc-test-'));
59
+ originalHome = process.env.HOME;
60
+ process.env.HOME = tmpRoot;
61
+ // os.homedir() reads HOME on POSIX (or USERPROFILE on win32). We force HOME so
62
+ // every "~" path in the test resolves into our sandbox tmp dir.
63
+ });
64
+ afterEach(() => {
65
+ if (originalHome === undefined)
66
+ delete process.env.HOME;
67
+ else
68
+ process.env.HOME = originalHome;
69
+ try {
70
+ rmSync(tmpRoot, { recursive: true, force: true });
71
+ }
72
+ catch { /* ignore */ }
73
+ });
74
+ describe('fs path resolution', () => {
75
+ it('ls with bare positional resolves to the absolute path, not cwd', async () => {
76
+ const target = join(tmpRoot, 'sub');
77
+ mkdirSync(target);
78
+ writeFileSync(join(target, 'a.txt'), 'a');
79
+ writeFileSync(join(target, 'b.txt'), 'b');
80
+ const { sent, client } = fakeClient();
81
+ const handler = new RpcHandler(client, { log: () => { } });
82
+ const req = makeReq('fs', 'ls', { positional: target });
83
+ const resp = await dispatchOne(handler, req, sent);
84
+ expect(resp.exitCode).toBe(0);
85
+ expect(resp.stdout).toContain('a.txt');
86
+ expect(resp.stdout).toContain('b.txt');
87
+ // Header for server-side compress() to see rows.
88
+ expect(resp.stdout).toContain('name\ttype\tsize');
89
+ });
90
+ it('ls with ~ expands to $HOME', async () => {
91
+ writeFileSync(join(tmpRoot, 'home-file.txt'), 'x');
92
+ const { sent, client } = fakeClient();
93
+ const handler = new RpcHandler(client, { log: () => { } });
94
+ const resp = await dispatchOne(handler, makeReq('fs', 'ls', { positional: '~' }), sent);
95
+ expect(resp.exitCode).toBe(0);
96
+ expect(resp.stdout).toContain('home-file.txt');
97
+ });
98
+ it('ls with ~/sub joins HOME', async () => {
99
+ const sub = join(tmpRoot, 'config');
100
+ mkdirSync(sub);
101
+ writeFileSync(join(sub, 'app.yaml'), 'k: v');
102
+ const { sent, client } = fakeClient();
103
+ const handler = new RpcHandler(client, { log: () => { } });
104
+ const resp = await dispatchOne(handler, makeReq('fs', 'ls', { positional: '~/config' }), sent);
105
+ expect(resp.exitCode).toBe(0);
106
+ expect(resp.stdout).toContain('app.yaml');
107
+ });
108
+ it('ls with no path falls back to $HOME (NOT process.cwd())', async () => {
109
+ writeFileSync(join(tmpRoot, 'fallback-marker.txt'), 'x');
110
+ const { sent, client } = fakeClient();
111
+ const handler = new RpcHandler(client, { log: () => { } });
112
+ const resp = await dispatchOne(handler, makeReq('fs', 'ls', {}), sent);
113
+ expect(resp.exitCode).toBe(0);
114
+ expect(resp.stdout).toContain('fallback-marker.txt');
115
+ });
116
+ it('read on a directory returns a non-EISDIR friendly hint', async () => {
117
+ const sub = join(tmpRoot, 'adir');
118
+ mkdirSync(sub);
119
+ const { sent, client } = fakeClient();
120
+ const handler = new RpcHandler(client, { log: () => { } });
121
+ const resp = await dispatchOne(handler, makeReq('fs', 'read', { positional: sub }), sent);
122
+ expect(resp.exitCode).toBe(1);
123
+ expect(resp.stderr).toMatch(/is a directory/);
124
+ expect(resp.stderr).toContain('fs ls');
125
+ });
126
+ it('stat returns JSON with name+type+size+modifiedAt', async () => {
127
+ const p = join(tmpRoot, 'a.txt');
128
+ writeFileSync(p, 'hello');
129
+ const { sent, client } = fakeClient();
130
+ const handler = new RpcHandler(client, { log: () => { } });
131
+ const resp = await dispatchOne(handler, makeReq('fs', 'stat', { positional: p }), sent);
132
+ expect(resp.exitCode).toBe(0);
133
+ const o = JSON.parse(resp.stdout);
134
+ expect(o.name).toBe('a.txt');
135
+ expect(o.type).toBe('file');
136
+ expect(o.size).toBe(5);
137
+ expect(typeof o.modifiedAt).toBe('string');
138
+ });
139
+ it('head reads the first N lines', async () => {
140
+ const p = join(tmpRoot, 'lines.txt');
141
+ writeFileSync(p, ['a', 'b', 'c', 'd'].join('\n'));
142
+ const { sent, client } = fakeClient();
143
+ const handler = new RpcHandler(client, { log: () => { } });
144
+ const resp = await dispatchOne(handler, makeReq('fs', 'head', { positional: p, lines: '2' }), sent);
145
+ expect(resp.exitCode).toBe(0);
146
+ expect(resp.stdout).toBe('a\nb');
147
+ });
148
+ it('tail reads the last N lines', async () => {
149
+ const p = join(tmpRoot, 'lines.txt');
150
+ writeFileSync(p, ['a', 'b', 'c', 'd'].join('\n'));
151
+ const { sent, client } = fakeClient();
152
+ const handler = new RpcHandler(client, { log: () => { } });
153
+ const resp = await dispatchOne(handler, makeReq('fs', 'tail', { positional: p, lines: '2' }), sent);
154
+ expect(resp.exitCode).toBe(0);
155
+ expect(resp.stdout).toBe('c\nd');
156
+ });
157
+ it('find --name matches a recursive glob', async () => {
158
+ mkdirSync(join(tmpRoot, 'src/deep'), { recursive: true });
159
+ writeFileSync(join(tmpRoot, 'src/deep/needle.txt'), 'x');
160
+ writeFileSync(join(tmpRoot, 'src/other.md'), 'x');
161
+ const { sent, client } = fakeClient();
162
+ const handler = new RpcHandler(client, { log: () => { } });
163
+ const resp = await dispatchOne(handler, makeReq('fs', 'find', { positional: tmpRoot, name: '*.txt' }), sent);
164
+ expect(resp.exitCode).toBe(0);
165
+ expect(resp.stdout).toContain('needle.txt');
166
+ expect(resp.stdout).not.toContain('other.md');
167
+ expect(resp.stdout.split('\n')[0]).toBe('path\tname');
168
+ });
169
+ it('tree shows nested entries with branch glyphs', async () => {
170
+ mkdirSync(join(tmpRoot, 'a/b'), { recursive: true });
171
+ writeFileSync(join(tmpRoot, 'a/b/c.txt'), '');
172
+ const { sent, client } = fakeClient();
173
+ const handler = new RpcHandler(client, { log: () => { } });
174
+ const resp = await dispatchOne(handler, makeReq('fs', 'tree', { positional: tmpRoot, depth: '3' }), sent);
175
+ expect(resp.exitCode).toBe(0);
176
+ expect(resp.stdout).toContain('a/');
177
+ expect(resp.stdout).toContain('b/');
178
+ expect(resp.stdout).toContain('c.txt');
179
+ });
180
+ it('unknown action returns a helpful message listing implemented actions', async () => {
181
+ const { sent, client } = fakeClient();
182
+ const handler = new RpcHandler(client, { log: () => { } });
183
+ const resp = await dispatchOne(handler, makeReq('fs', 'totally-fake'), sent);
184
+ expect(resp.exitCode).toBe(127);
185
+ expect(resp.stderr).toMatch(/unknown action: totally-fake/);
186
+ expect(resp.stderr).toMatch(/ls,/);
187
+ expect(resp.stderr).toMatch(/stat/);
188
+ });
189
+ it('mv moves a file', async () => {
190
+ const a = join(tmpRoot, 'a.txt');
191
+ const b = join(tmpRoot, 'b.txt');
192
+ writeFileSync(a, 'hi');
193
+ const { sent, client } = fakeClient();
194
+ const handler = new RpcHandler(client, { log: () => { } });
195
+ const resp = await dispatchOne(handler, makeReq('fs', 'mv', { positional: a, to: b }), sent);
196
+ expect(resp.exitCode).toBe(0);
197
+ expect(() => writeFileSync(a, 'oops')).not.toThrow(); // a is gone, recreating ok
198
+ });
199
+ it('symlink is reported as type=link in ls', async () => {
200
+ writeFileSync(join(tmpRoot, 'real.txt'), '');
201
+ try {
202
+ symlinkSync(join(tmpRoot, 'real.txt'), join(tmpRoot, 'link.txt'));
203
+ }
204
+ catch {
205
+ return; // some CI envs forbid symlinks
206
+ }
207
+ const { sent, client } = fakeClient();
208
+ const handler = new RpcHandler(client, { log: () => { } });
209
+ const resp = await dispatchOne(handler, makeReq('fs', 'ls', { positional: tmpRoot }), sent);
210
+ expect(resp.exitCode).toBe(0);
211
+ expect(resp.stdout).toMatch(/link\.txt\tlink/);
212
+ });
213
+ it('grep finds matches with positional pattern and ~ path', async () => {
214
+ writeFileSync(join(tmpRoot, 'a.txt'), 'apple\nbanana\nneedle here\n');
215
+ writeFileSync(join(tmpRoot, 'b.txt'), 'no match');
216
+ const { sent, client } = fakeClient();
217
+ const handler = new RpcHandler(client, { log: () => { } });
218
+ const resp = await dispatchOne(handler, makeReq('fs', 'grep', { positional: 'needle', positional2: '~' }), sent);
219
+ expect(resp.exitCode).toBe(0);
220
+ expect(resp.stdout).toContain('needle here');
221
+ });
222
+ });
223
+ describe('routing', () => {
224
+ it('unknown domain points the model at bash exec', async () => {
225
+ const { sent, client } = fakeClient();
226
+ const handler = new RpcHandler(client, { log: () => { } });
227
+ const resp = await dispatchOne(handler, makeReq('term', 'exec', { cmd: 'echo ok' }), sent);
228
+ expect(resp.exitCode).toBe(127);
229
+ expect(resp.stderr).toMatch(/unknown domain: term/);
230
+ expect(resp.stderr).toMatch(/bash exec/);
231
+ });
232
+ it('not-yet-implemented domain points the model at bash exec', async () => {
233
+ const { sent, client } = fakeClient();
234
+ const handler = new RpcHandler(client, { log: () => { } });
235
+ const resp = await dispatchOne(handler, makeReq('docker', 'ps'), sent);
236
+ expect(resp.exitCode).toBe(127);
237
+ expect(resp.stderr).toMatch(/not implemented/);
238
+ expect(resp.stderr).toMatch(/bash exec/);
239
+ });
240
+ });
241
+ // Sanity check: helpers we rely on across the suite behave as expected.
242
+ describe('test environment', () => {
243
+ it('HOME override resolves homedir() to the tmp dir', () => {
244
+ expect(homedir()).toBe(tmpRoot);
245
+ expect(isAbsolute(tmpRoot)).toBe(true);
246
+ });
247
+ });
248
+ //# sourceMappingURL=rpc-handler-path.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-handler-path.test.js","sourceRoot":"","sources":["../../src/mesh/rpc-handler-path.test.ts"],"names":[],"mappings":"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"}
@@ -19,24 +19,21 @@ export declare class RpcHandler {
19
19
  */
20
20
  private handleBash;
21
21
  /**
22
- * `fs <action> --path=... --content=...` minimal port of the same
23
- * actions the macOS FileBridge exposes (Server/agent/commands/fsCommands.ts
24
- * lists the canonical action set). Stage A: cat / ls / mkdir / write.
22
+ * `fs <action> [<path>] [--key=value ...]`
23
+ * Path resolution: see `resolveUserPath` empty → $HOME, ~ expanded,
24
+ * relative resolved against $HOME, full POSIX paths allowed.
25
25
  */
26
26
  private handleFs;
27
27
  /**
28
28
  * `fs grep <pattern> [path] [--type=ts] [--glob=*.md] [--context=2] [-i]
29
- * [--fixed=true] [--limit=200]` — shells out to ripgrep when present,
30
- * otherwise falls back to /usr/bin/grep so the action stays useful on
31
- * minimal Linux images. Returns line-anchored matches identical to
32
- * the local Grep tool's output shape so the Cloud LLM can reason
33
- * about the result without mode-switching.
29
+ * [--fixed=true] [--limit=200]` — ripgrep when present, fallback to grep.
30
+ * Both pattern and path support positional/--flag entry, with ~ expansion
31
+ * via resolveUserPath.
34
32
  */
35
33
  private handleFsGrep;
36
34
  /**
37
35
  * `fs glob <pattern...> [--folder=DIR] [--exclude=PAT...]`
38
- * Multi-pattern OR via fast-glob. Returns sorted relative file paths
39
- * under --folder (default cwd), capped at 100 entries.
36
+ * Multi-pattern OR via fast-glob.
40
37
  */
41
38
  private handleFsGlob;
42
39
  private log;
@@ -5,7 +5,7 @@
5
5
  // which routes by `parsed.domain` to a per-domain bridge. Here on Linux:
6
6
  //
7
7
  // domain=bash → spawn /bin/sh and stream output
8
- // domain=fs → file system operations (mkdir / ls / cat / write)
8
+ // domain=fs → file system operations (full POSIX paths, no sandbox)
9
9
  //
10
10
  // Stage A intentionally ships only 'bash' + 'fs' to prove the pipe.
11
11
  // Other domains (git / docker / k8s / systemd / pkg / log / svc / net)
@@ -13,16 +13,95 @@
13
13
  // "not implemented yet" so the Cloud agent can fall back gracefully.
14
14
  //
15
15
  // fs actions implemented here (mirrors yome-skill-fs/signature/fs.signature.json):
16
- // ls / cat (alias read) / mkdir / write / append
17
- // edit exact string replace, unique-match by default
18
- // grep — system rg (or fallback grep), line-numbered matches
19
- // glob — fast-glob multi-pattern + exclude
16
+ // ls / tree / stat / find / read (alias cat) / head / tail
17
+ // write / append / mkdir / edit / cp / mv / rm
18
+ // grep — system rg (or fallback grep), line-numbered matches
19
+ // glob — fast-glob multi-pattern + exclude
20
+ //
21
+ // IMPORTANT path conventions on Linux mesh (different from macOS sandbox!):
22
+ // - There is NO Desktop/Downloads/Documents sandbox; full POSIX paths allowed.
23
+ // - `~` and `~/foo` are expanded to the daemon user's $HOME.
24
+ // - A missing/empty path is treated as $HOME (NOT process.cwd(), because the
25
+ // daemon's cwd is wherever systemd/the background launcher started it,
26
+ // which is meaningless to the LLM).
27
+ // - A relative path is resolved against $HOME (matches `cd ~` then `ls foo`).
20
28
  import { spawn } from 'child_process';
21
29
  import { promises as fsp } from 'fs';
22
- import { join, resolve as resolvePath, isAbsolute } from 'path';
30
+ import { homedir } from 'os';
31
+ import { basename, join, resolve as resolvePath, isAbsolute } from 'path';
23
32
  import fg from 'fast-glob';
24
33
  const BASH_TIMEOUT_MS = 60_000;
25
34
  const MAX_STDOUT_CHARS = 64_000;
35
+ // ──────────────────────────────────────────────────────────────────────
36
+ // Path helpers — shared by every fs action so behaviour is identical
37
+ // across read/write/grep/glob.
38
+ // ──────────────────────────────────────────────────────────────────────
39
+ /** Expand a leading `~` to $HOME. `~user` is intentionally NOT supported. */
40
+ function expandTilde(p) {
41
+ if (!p)
42
+ return p;
43
+ if (p === '~')
44
+ return homedir();
45
+ if (p.startsWith('~/'))
46
+ return join(homedir(), p.slice(2));
47
+ return p;
48
+ }
49
+ /**
50
+ * Resolve a user-supplied path with consistent semantics on Linux mesh:
51
+ * - empty / undefined → $HOME (NOT cwd — the daemon's cwd is opaque)
52
+ * - leading `~` → $HOME-relative
53
+ * - absolute → kept as-is
54
+ * - relative → resolved against $HOME
55
+ */
56
+ function resolveUserPath(raw, fallbackToHome = true) {
57
+ const s = (raw ?? '').trim();
58
+ if (!s) {
59
+ if (fallbackToHome)
60
+ return homedir();
61
+ return '';
62
+ }
63
+ const expanded = expandTilde(s);
64
+ if (isAbsolute(expanded))
65
+ return expanded;
66
+ return resolvePath(homedir(), expanded);
67
+ }
68
+ /**
69
+ * Extract the path argument from a parsed fs command.
70
+ * Server-side commandParser stores the bare positional under `args.positional`
71
+ * (see Server/agent/commandParser.ts:558). Older code paths and the
72
+ * yome-skill-fs signature use `--path=`, so we accept both.
73
+ */
74
+ function pathArg(args, fallbackToHome = true) {
75
+ const fromPath = typeof args.path === 'string' ? args.path : '';
76
+ const fromPos = typeof args.positional === 'string' ? args.positional : '';
77
+ return resolveUserPath(fromPath || fromPos, fallbackToHome);
78
+ }
79
+ function intArg(args, key, dflt) {
80
+ const v = args[key];
81
+ if (typeof v !== 'string')
82
+ return dflt;
83
+ const n = Number.parseInt(v, 10);
84
+ return Number.isFinite(n) ? n : dflt;
85
+ }
86
+ function strArg(args, key, dflt = '') {
87
+ const v = args[key];
88
+ return typeof v === 'string' ? v : dflt;
89
+ }
90
+ function boolArg(args, key) {
91
+ return args[key] === 'true' || args[key] === true;
92
+ }
93
+ function humanSize(n) {
94
+ if (n < 1024)
95
+ return `${n}B`;
96
+ if (n < 1024 ** 2)
97
+ return `${(n / 1024).toFixed(1)}KB`;
98
+ if (n < 1024 ** 3)
99
+ return `${(n / 1024 ** 2).toFixed(1)}MB`;
100
+ return `${(n / 1024 ** 3).toFixed(2)}GB`;
101
+ }
102
+ // ──────────────────────────────────────────────────────────────────────
103
+ // Handler
104
+ // ──────────────────────────────────────────────────────────────────────
26
105
  export class RpcHandler {
27
106
  client;
28
107
  opts;
@@ -100,13 +179,13 @@ export class RpcHandler {
100
179
  case 'svc':
101
180
  return {
102
181
  stdout: '',
103
- stderr: `[mesh] domain '${domain}' not implemented on linux cli yet — falling back to bash via Cloud agent`,
182
+ stderr: `[mesh] domain '${domain}' not implemented on linux cli yet — use \`bash exec --cmd="..."\` instead`,
104
183
  exitCode: 127,
105
184
  };
106
185
  default:
107
186
  return {
108
187
  stdout: '',
109
- stderr: `[mesh] unknown domain: ${domain}`,
188
+ stderr: `[mesh] unknown domain: ${domain} (linux cli implements: bash, fs). For shell access use \`bash exec --cmd="..."\`.`,
110
189
  exitCode: 127,
111
190
  };
112
191
  }
@@ -123,7 +202,10 @@ export class RpcHandler {
123
202
  return Promise.resolve({ stdout: '', stderr: '[bash] empty command', exitCode: 2 });
124
203
  }
125
204
  return new Promise((resolveP) => {
126
- const proc = spawn('sh', ['-c', shellLine], { stdio: ['ignore', 'pipe', 'pipe'] });
205
+ const proc = spawn('sh', ['-c', shellLine], {
206
+ stdio: ['ignore', 'pipe', 'pipe'],
207
+ cwd: homedir(),
208
+ });
127
209
  let stdout = '';
128
210
  let stderr = '';
129
211
  let killed = false;
@@ -152,70 +234,186 @@ export class RpcHandler {
152
234
  });
153
235
  }
154
236
  /**
155
- * `fs <action> --path=... --content=...` minimal port of the same
156
- * actions the macOS FileBridge exposes (Server/agent/commands/fsCommands.ts
157
- * lists the canonical action set). Stage A: cat / ls / mkdir / write.
237
+ * `fs <action> [<path>] [--key=value ...]`
238
+ * Path resolution: see `resolveUserPath` empty → $HOME, ~ expanded,
239
+ * relative resolved against $HOME, full POSIX paths allowed.
158
240
  */
159
241
  async handleFs(req) {
160
242
  const action = req.parsed?.action ?? '';
161
- const args = req.parsed?.args ?? {};
162
- const path = typeof args.path === 'string' ? args.path : '';
163
- const safeJoinedPath = path && isAbsolute(path) ? path : resolvePath(process.cwd(), path);
243
+ const args = (req.parsed?.args ?? {});
164
244
  try {
165
245
  switch (action) {
246
+ case 'ls': {
247
+ const target = pathArg(args);
248
+ const entries = await fsp.readdir(target, { withFileTypes: true });
249
+ // Output TSV: `name\ttype\tsize` so the Server-side fsDomain.ls
250
+ // compress() (which filters on `\t`) actually sees rows. Header
251
+ // line lets compress() detect it. Sort: dirs first, then by name.
252
+ entries.sort((a, b) => {
253
+ if (a.isDirectory() !== b.isDirectory())
254
+ return a.isDirectory() ? -1 : 1;
255
+ return a.name.localeCompare(b.name);
256
+ });
257
+ const rows = ['name\ttype\tsize'];
258
+ for (const e of entries) {
259
+ const full = join(target, e.name);
260
+ let sizeStr = '-';
261
+ if (e.isFile()) {
262
+ try {
263
+ const st = await fsp.stat(full);
264
+ sizeStr = humanSize(st.size);
265
+ }
266
+ catch { /* keep '-' */ }
267
+ }
268
+ const kind = e.isDirectory() ? 'dir' : e.isSymbolicLink() ? 'link' : 'file';
269
+ rows.push(`${e.name}\t${kind}\t${sizeStr}`);
270
+ }
271
+ return { stdout: `${target}:\n${rows.join('\n')}`, stderr: '', exitCode: 0 };
272
+ }
273
+ case 'tree': {
274
+ const target = pathArg(args);
275
+ const depth = Math.max(1, intArg(args, 'depth', 2));
276
+ const out = [target];
277
+ await walkTree(target, depth, '', out);
278
+ return { stdout: out.join('\n'), stderr: '', exitCode: 0 };
279
+ }
280
+ case 'stat': {
281
+ const target = pathArg(args, false);
282
+ if (!target)
283
+ return { stdout: '', stderr: '[fs stat] path is required', exitCode: 2 };
284
+ const st = await fsp.stat(target);
285
+ const info = {
286
+ name: basename(target) || target,
287
+ path: target,
288
+ type: st.isDirectory() ? 'dir' : st.isSymbolicLink() ? 'link' : 'file',
289
+ size: st.size,
290
+ sizeFormatted: humanSize(st.size),
291
+ modifiedAt: st.mtime.toISOString(),
292
+ createdAt: st.birthtime.toISOString(),
293
+ mode: '0' + (st.mode & 0o777).toString(8),
294
+ };
295
+ return { stdout: JSON.stringify(info), stderr: '', exitCode: 0 };
296
+ }
297
+ case 'find': {
298
+ // fs find <path> --name=GLOB [--type=file|dir] [--limit=20]
299
+ const target = pathArg(args);
300
+ const namePat = strArg(args, 'name');
301
+ if (!namePat)
302
+ return { stdout: '', stderr: '[fs find] --name is required', exitCode: 2 };
303
+ const typeFilter = strArg(args, 'type');
304
+ const limit = Math.max(1, intArg(args, 'limit', 20));
305
+ const matches = await fg([`**/${namePat}`], {
306
+ cwd: target,
307
+ dot: true,
308
+ onlyFiles: typeFilter === 'file' ? true : typeFilter === 'dir' ? false : false,
309
+ onlyDirectories: typeFilter === 'dir',
310
+ absolute: true,
311
+ suppressErrors: true,
312
+ ignore: ['**/node_modules/**', '**/.git/**'],
313
+ });
314
+ if (matches.length === 0) {
315
+ return { stdout: 'path\tname\nNo matches found\t-', stderr: '', exitCode: 0 };
316
+ }
317
+ const shown = matches.slice(0, limit);
318
+ // TSV so Server-side compress() picks rows correctly.
319
+ const rows = ['path\tname', ...shown.map((p) => `${p}\t${basename(p)}`)];
320
+ const tail = matches.length > limit
321
+ ? `\n[showing ${limit} of ${matches.length}; raise --limit or narrow --name]`
322
+ : '';
323
+ return { stdout: rows.join('\n') + tail, stderr: '', exitCode: 0 };
324
+ }
166
325
  case 'cat':
167
326
  case 'read': {
168
- const content = await fsp.readFile(safeJoinedPath, 'utf-8');
169
- return { stdout: content, stderr: '', exitCode: 0 };
327
+ const target = pathArg(args, false);
328
+ if (!target)
329
+ return { stdout: '', stderr: '[fs read] path is required', exitCode: 2 };
330
+ const st = await fsp.stat(target);
331
+ if (st.isDirectory()) {
332
+ return {
333
+ stdout: '',
334
+ stderr: `[fs read] ${target} is a directory — use \`fs ls ${shellQuote(target)}\` instead`,
335
+ exitCode: 1,
336
+ };
337
+ }
338
+ const content = await fsp.readFile(target, 'utf-8');
339
+ const lines = intArg(args, 'lines', 50);
340
+ const offset = Math.max(0, intArg(args, 'offset', 0));
341
+ if (offset === 0 && lines >= content.split('\n').length) {
342
+ return { stdout: content, stderr: '', exitCode: 0 };
343
+ }
344
+ const all = content.split('\n');
345
+ const slice = all.slice(offset, offset + lines).join('\n');
346
+ return { stdout: slice, stderr: '', exitCode: 0 };
170
347
  }
171
- case 'ls': {
172
- const entries = await fsp.readdir(safeJoinedPath, { withFileTypes: true });
173
- const lines = entries.map((e) => `${e.isDirectory() ? 'd' : '-'} ${e.name}`);
174
- return { stdout: lines.join('\n'), stderr: '', exitCode: 0 };
348
+ case 'head': {
349
+ const target = pathArg(args, false);
350
+ if (!target)
351
+ return { stdout: '', stderr: '[fs head] path is required', exitCode: 2 };
352
+ const lines = Math.max(1, intArg(args, 'lines', 10));
353
+ const content = await fsp.readFile(target, 'utf-8');
354
+ return { stdout: content.split('\n').slice(0, lines).join('\n'), stderr: '', exitCode: 0 };
355
+ }
356
+ case 'tail': {
357
+ const target = pathArg(args, false);
358
+ if (!target)
359
+ return { stdout: '', stderr: '[fs tail] path is required', exitCode: 2 };
360
+ const lines = Math.max(1, intArg(args, 'lines', 10));
361
+ const content = await fsp.readFile(target, 'utf-8');
362
+ return { stdout: content.split('\n').slice(-lines).join('\n'), stderr: '', exitCode: 0 };
175
363
  }
176
364
  case 'mkdir': {
177
- await fsp.mkdir(safeJoinedPath, { recursive: true });
178
- return { stdout: `created ${safeJoinedPath}`, stderr: '', exitCode: 0 };
365
+ const target = pathArg(args, false);
366
+ if (!target)
367
+ return { stdout: '', stderr: '[fs mkdir] path is required', exitCode: 2 };
368
+ await fsp.mkdir(target, { recursive: true });
369
+ return { stdout: `created ${target}`, stderr: '', exitCode: 0 };
179
370
  }
180
371
  case 'write': {
181
- const content = typeof args.content === 'string' ? args.content : '';
182
- const force = args.force === 'true';
372
+ const target = pathArg(args, false);
373
+ if (!target)
374
+ return { stdout: '', stderr: '[fs write] path is required', exitCode: 2 };
375
+ const content = strArg(args, 'content');
376
+ const force = boolArg(args, 'force');
183
377
  if (!force) {
184
378
  try {
185
- await fsp.access(safeJoinedPath);
186
- return { stdout: '', stderr: `[fs] ${safeJoinedPath} already exists; pass --force=true to overwrite`, exitCode: 1 };
379
+ await fsp.access(target);
380
+ return { stdout: '', stderr: `[fs write] ${target} already exists; pass --force=true to overwrite`, exitCode: 1 };
187
381
  }
188
382
  catch { /* file doesn't exist — fine */ }
189
383
  }
190
- await fsp.mkdir(join(safeJoinedPath, '..'), { recursive: true });
191
- await fsp.writeFile(safeJoinedPath, content, 'utf-8');
192
- return { stdout: `wrote ${content.length} bytes to ${safeJoinedPath}`, stderr: '', exitCode: 0 };
384
+ await fsp.mkdir(join(target, '..'), { recursive: true });
385
+ await fsp.writeFile(target, content, 'utf-8');
386
+ return { stdout: `wrote ${content.length} bytes to ${target}`, stderr: '', exitCode: 0 };
193
387
  }
194
388
  case 'append': {
195
- const content = typeof args.content === 'string' ? args.content : '';
196
- await fsp.mkdir(join(safeJoinedPath, '..'), { recursive: true });
197
- await fsp.appendFile(safeJoinedPath, content, 'utf-8');
198
- return { stdout: `appended ${content.length} bytes to ${safeJoinedPath}`, stderr: '', exitCode: 0 };
389
+ const target = pathArg(args, false);
390
+ if (!target)
391
+ return { stdout: '', stderr: '[fs append] path is required', exitCode: 2 };
392
+ const content = strArg(args, 'content');
393
+ await fsp.mkdir(join(target, '..'), { recursive: true });
394
+ await fsp.appendFile(target, content, 'utf-8');
395
+ return { stdout: `appended ${content.length} bytes to ${target}`, stderr: '', exitCode: 0 };
199
396
  }
200
397
  case 'edit': {
201
- const oldStr = typeof args.old === 'string' ? args.old : '';
202
- const newStr = typeof args.new === 'string' ? args.new : '';
203
- const all = args.all === 'true';
204
- if (!oldStr) {
398
+ const target = pathArg(args, false);
399
+ if (!target)
400
+ return { stdout: '', stderr: '[fs edit] path is required', exitCode: 2 };
401
+ const oldStr = strArg(args, 'old');
402
+ const newStr = strArg(args, 'new');
403
+ const all = boolArg(args, 'all');
404
+ if (!oldStr)
205
405
  return { stdout: '', stderr: '[fs edit] --old is required', exitCode: 2 };
206
- }
207
406
  let original;
208
407
  try {
209
- original = await fsp.readFile(safeJoinedPath, 'utf-8');
408
+ original = await fsp.readFile(target, 'utf-8');
210
409
  }
211
410
  catch (err) {
212
- return { stdout: '', stderr: `[fs edit] cannot read ${safeJoinedPath}: ${err.message}`, exitCode: 1 };
411
+ return { stdout: '', stderr: `[fs edit] cannot read ${target}: ${err.message}`, exitCode: 1 };
213
412
  }
214
413
  if (!all) {
215
414
  const first = original.indexOf(oldStr);
216
- if (first === -1) {
415
+ if (first === -1)
217
416
  return { stdout: '', stderr: '[fs edit] --old not found in file', exitCode: 1 };
218
- }
219
417
  const second = original.indexOf(oldStr, first + oldStr.length);
220
418
  if (second !== -1) {
221
419
  return {
@@ -225,62 +423,91 @@ export class RpcHandler {
225
423
  };
226
424
  }
227
425
  const next = original.slice(0, first) + newStr + original.slice(first + oldStr.length);
228
- await fsp.writeFile(safeJoinedPath, next, 'utf-8');
229
- return { stdout: `replaced 1 occurrence in ${safeJoinedPath}`, stderr: '', exitCode: 0 };
426
+ await fsp.writeFile(target, next, 'utf-8');
427
+ return { stdout: `replaced 1 occurrence in ${target}`, stderr: '', exitCode: 0 };
230
428
  }
231
- // --all=true → split/join replaces every literal occurrence (no regex).
232
429
  const parts = original.split(oldStr);
233
430
  const count = parts.length - 1;
234
- if (count === 0) {
431
+ if (count === 0)
235
432
  return { stdout: '', stderr: '[fs edit] --old not found in file', exitCode: 1 };
433
+ await fsp.writeFile(target, parts.join(newStr), 'utf-8');
434
+ return { stdout: `replaced ${count} occurrence(s) in ${target}`, stderr: '', exitCode: 0 };
435
+ }
436
+ case 'cp':
437
+ case 'mv': {
438
+ const src = pathArg(args, false);
439
+ const dst = resolveUserPath(strArg(args, 'to'), false);
440
+ if (!src || !dst) {
441
+ return { stdout: '', stderr: `[fs ${action}] both <path> and --to=<dest> are required`, exitCode: 2 };
236
442
  }
237
- const next = parts.join(newStr);
238
- await fsp.writeFile(safeJoinedPath, next, 'utf-8');
239
- return { stdout: `replaced ${count} occurrence(s) in ${safeJoinedPath}`, stderr: '', exitCode: 0 };
443
+ const force = boolArg(args, 'force');
444
+ try {
445
+ await fsp.access(dst);
446
+ if (!force) {
447
+ return { stdout: '', stderr: `[fs ${action}] ${dst} already exists; pass --force=true to overwrite`, exitCode: 1 };
448
+ }
449
+ }
450
+ catch { /* target doesn't exist — fine */ }
451
+ await fsp.mkdir(join(dst, '..'), { recursive: true });
452
+ if (action === 'mv') {
453
+ await fsp.rename(src, dst);
454
+ }
455
+ else {
456
+ // Node 16.7+ has fsp.cp; use recursive for dirs.
457
+ await fsp.cp(src, dst, { recursive: true, force: true });
458
+ }
459
+ return { stdout: `${action} ${src} → ${dst}`, stderr: '', exitCode: 0 };
460
+ }
461
+ case 'rm': {
462
+ const target = pathArg(args, false);
463
+ if (!target)
464
+ return { stdout: '', stderr: '[fs rm] path is required', exitCode: 2 };
465
+ const recursive = boolArg(args, 'recursive');
466
+ await fsp.rm(target, { recursive, force: false });
467
+ return { stdout: `removed ${target}`, stderr: '', exitCode: 0 };
240
468
  }
241
469
  case 'grep':
242
470
  return this.handleFsGrep(req);
243
471
  case 'glob':
244
472
  return this.handleFsGlob(req);
245
473
  default:
246
- return { stdout: '', stderr: `[fs] unknown action: ${action}`, exitCode: 127 };
474
+ return {
475
+ stdout: '',
476
+ stderr: `[fs] unknown action: ${action} (linux supports: ls, tree, stat, find, read/cat, head, tail, write, append, mkdir, edit, cp, mv, rm, grep, glob)`,
477
+ exitCode: 127,
478
+ };
247
479
  }
248
480
  }
249
481
  catch (err) {
250
- return { stdout: '', stderr: `[fs] ${err.message}`, exitCode: 1 };
482
+ const msg = err.code === 'EISDIR'
483
+ ? `${err.message} — use \`fs ls\` for directories`
484
+ : err.message;
485
+ return { stdout: '', stderr: `[fs] ${msg}`, exitCode: 1 };
251
486
  }
252
487
  }
253
488
  /**
254
489
  * `fs grep <pattern> [path] [--type=ts] [--glob=*.md] [--context=2] [-i]
255
- * [--fixed=true] [--limit=200]` — shells out to ripgrep when present,
256
- * otherwise falls back to /usr/bin/grep so the action stays useful on
257
- * minimal Linux images. Returns line-anchored matches identical to
258
- * the local Grep tool's output shape so the Cloud LLM can reason
259
- * about the result without mode-switching.
490
+ * [--fixed=true] [--limit=200]` — ripgrep when present, fallback to grep.
491
+ * Both pattern and path support positional/--flag entry, with ~ expansion
492
+ * via resolveUserPath.
260
493
  */
261
494
  handleFsGrep(req) {
262
- const args = req.parsed?.args ?? {};
263
- // commandParser stores the bare positional under args.positional;
264
- // accept --pattern=... too for symmetry.
265
- const pattern = typeof args.pattern === 'string' && args.pattern
266
- ? args.pattern
267
- : (typeof args.positional === 'string' ? args.positional : '');
495
+ const args = (req.parsed?.args ?? {});
496
+ // pattern: bare positional, OR --pattern=. The path (if any) is parsed
497
+ // server-side as positional2.
498
+ const pattern = strArg(args, 'pattern') || strArg(args, 'positional');
268
499
  if (!pattern) {
269
500
  return Promise.resolve({ stdout: '', stderr: '[fs grep] pattern is required', exitCode: 2 });
270
501
  }
271
- const pathArg = typeof args.path === 'string' && args.path ? args.path : process.cwd();
272
- const searchPath = isAbsolute(pathArg) ? pathArg : resolvePath(process.cwd(), pathArg);
273
- const caseInsensitive = args.i === 'true';
274
- const fixed = args.fixed === 'true';
275
- const globFilter = typeof args.glob === 'string' ? args.glob : '';
276
- const typeFilter = typeof args.type === 'string' ? args.type : '';
277
- const contextRaw = typeof args.context === 'string' ? Number.parseInt(args.context, 10) : NaN;
278
- const ctx = Number.isFinite(contextRaw) && contextRaw >= 0 ? contextRaw : 0;
279
- const limitRaw = typeof args.limit === 'string' ? Number.parseInt(args.limit, 10) : NaN;
280
- const limit = Number.isFinite(limitRaw) && limitRaw > 0 ? limitRaw : 200;
502
+ const pathRaw = strArg(args, 'path') || strArg(args, 'positional2');
503
+ const searchPath = resolveUserPath(pathRaw, true);
504
+ const caseInsensitive = boolArg(args, 'i');
505
+ const fixed = boolArg(args, 'fixed');
506
+ const globFilter = strArg(args, 'glob');
507
+ const typeFilter = strArg(args, 'type');
508
+ const ctx = Math.max(0, intArg(args, 'context', 0));
509
+ const limit = Math.max(1, intArg(args, 'limit', 200));
281
510
  return new Promise((resolveP) => {
282
- // Probe rg synchronously via spawn callback chain so we don't fork
283
- // twice when rg isn't present.
284
511
  const probe = spawn('which', ['rg'], { stdio: ['ignore', 'pipe', 'ignore'] });
285
512
  let probeOut = '';
286
513
  probe.stdout.on('data', (b) => { probeOut += b.toString('utf-8'); });
@@ -310,105 +537,60 @@ export class RpcHandler {
310
537
  argv.push('-C', String(ctx));
311
538
  if (globFilter)
312
539
  argv.push(`--include=${globFilter}`);
540
+ argv.push('--exclude-dir=.git', '--exclude-dir=node_modules');
313
541
  }
314
542
  argv.push(pattern, searchPath);
315
- const proc = spawn(argv[0], argv.slice(1), { stdio: ['ignore', 'pipe', 'pipe'] });
316
- let stdout = '';
317
- let stderr = '';
318
- proc.stdout.on('data', (b) => { stdout += b.toString('utf-8'); });
319
- proc.stderr.on('data', (b) => { stderr += b.toString('utf-8'); });
320
- proc.on('close', (exitCode) => {
321
- // grep / rg both exit 1 when there are no matches — treat as success.
322
- const noMatches = (exitCode === 1) && !stdout.trim();
323
- if (noMatches) {
324
- resolveP({ stdout: 'No matches found', stderr: '', exitCode: 0 });
325
- return;
326
- }
327
- if (exitCode !== 0 && exitCode !== 1) {
328
- resolveP({ stdout: '', stderr: stderr || `[fs grep] exit ${exitCode}`, exitCode: exitCode ?? 1 });
329
- return;
330
- }
331
- const lines = stdout.split('\n');
332
- if (lines.length > limit) {
333
- const head = lines.slice(0, limit).join('\n');
334
- resolveP({
335
- stdout: `${head}\n\n[showing ${limit} of ${lines.length} lines; raise --limit or narrow the search]`,
336
- stderr: '',
337
- exitCode: 0,
338
- });
339
- return;
340
- }
341
- resolveP({ stdout: stdout.trim() || 'No matches found', stderr: '', exitCode: 0 });
342
- });
343
- proc.on('error', (err) => {
344
- resolveP({ stdout: '', stderr: `[fs grep] spawn ${argv[0]}: ${err.message}`, exitCode: 1 });
345
- });
543
+ runGrepLike(argv, limit, resolveP);
346
544
  });
347
545
  probe.on('error', () => {
348
- // `which` not available; just try grep.
349
546
  const argv = ['grep', '-rn'];
350
547
  if (caseInsensitive)
351
548
  argv.push('-i');
352
549
  if (fixed)
353
550
  argv.push('-F');
551
+ if (ctx > 0)
552
+ argv.push('-C', String(ctx));
553
+ if (globFilter)
554
+ argv.push(`--include=${globFilter}`);
555
+ argv.push('--exclude-dir=.git', '--exclude-dir=node_modules');
354
556
  argv.push(pattern, searchPath);
355
- const proc = spawn(argv[0], argv.slice(1), { stdio: ['ignore', 'pipe', 'pipe'] });
356
- let stdout = '';
357
- let stderr = '';
358
- proc.stdout.on('data', (b) => { stdout += b.toString('utf-8'); });
359
- proc.stderr.on('data', (b) => { stderr += b.toString('utf-8'); });
360
- proc.on('close', (exitCode) => {
361
- const noMatches = (exitCode === 1) && !stdout.trim();
362
- if (noMatches) {
363
- resolveP({ stdout: 'No matches found', stderr: '', exitCode: 0 });
364
- return;
365
- }
366
- resolveP({ stdout: stdout.trim() || 'No matches found', stderr, exitCode: exitCode ?? 0 });
367
- });
368
- proc.on('error', (err) => {
369
- resolveP({ stdout: '', stderr: `[fs grep] grep unavailable: ${err.message}`, exitCode: 1 });
370
- });
557
+ runGrepLike(argv, limit, resolveP);
371
558
  });
372
559
  });
373
560
  }
374
561
  /**
375
562
  * `fs glob <pattern...> [--folder=DIR] [--exclude=PAT...]`
376
- * Multi-pattern OR via fast-glob. Returns sorted relative file paths
377
- * under --folder (default cwd), capped at 100 entries.
563
+ * Multi-pattern OR via fast-glob.
378
564
  */
379
565
  async handleFsGlob(req) {
380
- const args = req.parsed?.args ?? {};
381
- // Wire-level args are Record<string,string>. Accept patterns as either
382
- // a comma-separated string under --patterns, a JSON array string under
383
- // --patterns, or the bare positional (`fs glob "**/*.ts"`).
566
+ const args = (req.parsed?.args ?? {});
384
567
  const rawPatterns = (() => {
385
568
  const p = args.patterns;
386
569
  if (typeof p === 'string' && p.trim()) {
387
570
  const s = p.trim();
388
571
  if (s.startsWith('[')) {
389
572
  try {
390
- const parsedArr = JSON.parse(s);
391
- if (Array.isArray(parsedArr))
392
- return parsedArr.map(String);
573
+ const arr = JSON.parse(s);
574
+ if (Array.isArray(arr))
575
+ return arr.map(String);
393
576
  }
394
- catch { /* fall through to comma split */ }
577
+ catch { /* fall through */ }
395
578
  }
396
579
  return s.split(',').map((q) => q.trim()).filter(Boolean);
397
580
  }
398
- if (typeof args.positional === 'string' && args.positional.trim()) {
399
- const list = [args.positional.trim()];
400
- if (typeof args.positional2 === 'string' && args.positional2.trim()) {
401
- list.push(args.positional2.trim());
402
- }
403
- return list;
404
- }
405
- return [];
581
+ const pos1 = strArg(args, 'positional');
582
+ const pos2 = strArg(args, 'positional2');
583
+ const list = [];
584
+ if (pos1)
585
+ list.push(pos1);
586
+ if (pos2)
587
+ list.push(pos2);
588
+ return list;
406
589
  })();
407
590
  if (rawPatterns.length === 0) {
408
591
  return { stdout: '', stderr: '[fs glob] at least one pattern is required', exitCode: 2 };
409
592
  }
410
- const folderArg = typeof args.folder === 'string' && args.folder ? args.folder : process.cwd();
411
- const folder = isAbsolute(folderArg) ? folderArg : resolvePath(process.cwd(), folderArg);
593
+ const folder = resolveUserPath(strArg(args, 'folder'), true);
412
594
  const ignore = (() => {
413
595
  const base = ['**/node_modules/**', '**/.git/**'];
414
596
  const ex = args.exclude;
@@ -416,9 +598,9 @@ export class RpcHandler {
416
598
  const s = ex.trim();
417
599
  if (s.startsWith('[')) {
418
600
  try {
419
- const parsedArr = JSON.parse(s);
420
- if (Array.isArray(parsedArr))
421
- return [...base, ...parsedArr.map(String)];
601
+ const arr = JSON.parse(s);
602
+ if (Array.isArray(arr))
603
+ return [...base, ...arr.map(String)];
422
604
  }
423
605
  catch { /* fall through */ }
424
606
  }
@@ -433,12 +615,12 @@ export class RpcHandler {
433
615
  dot: true,
434
616
  onlyFiles: true,
435
617
  absolute: false,
618
+ suppressErrors: true,
436
619
  });
437
620
  files.sort();
438
621
  const limit = 100;
439
- if (files.length === 0) {
622
+ if (files.length === 0)
440
623
  return { stdout: 'No files found', stderr: '', exitCode: 0 };
441
- }
442
624
  const truncated = files.length > limit;
443
625
  const shown = truncated ? files.slice(0, limit) : files;
444
626
  const header = `Found ${files.length} file(s) under ${folder}`;
@@ -463,4 +645,70 @@ export class RpcHandler {
463
645
  console.log(`[rpc] ${line}`);
464
646
  }
465
647
  }
648
+ // ──────────────────────────────────────────────────────────────────────
649
+ // Local helpers (module-private)
650
+ // ──────────────────────────────────────────────────────────────────────
651
+ function shellQuote(s) {
652
+ return /[\s'"`$\\]/.test(s) ? `'${s.replace(/'/g, "'\\''")}'` : s;
653
+ }
654
+ async function walkTree(dir, depth, prefix, out) {
655
+ if (depth <= 0)
656
+ return;
657
+ let entries;
658
+ try {
659
+ entries = await fsp.readdir(dir, { withFileTypes: true });
660
+ }
661
+ catch (err) {
662
+ out.push(`${prefix}[error: ${err.message}]`);
663
+ return;
664
+ }
665
+ entries.sort((a, b) => {
666
+ if (a.isDirectory() !== b.isDirectory())
667
+ return a.isDirectory() ? -1 : 1;
668
+ return a.name.localeCompare(b.name);
669
+ });
670
+ for (let i = 0; i < entries.length; i++) {
671
+ const e = entries[i];
672
+ const last = i === entries.length - 1;
673
+ const branch = last ? '└── ' : '├── ';
674
+ const next = last ? ' ' : '│ ';
675
+ out.push(`${prefix}${branch}${e.name}${e.isDirectory() ? '/' : ''}`);
676
+ if (e.isDirectory()) {
677
+ await walkTree(join(dir, e.name), depth - 1, prefix + next, out);
678
+ }
679
+ }
680
+ }
681
+ function runGrepLike(argv, limit, resolveP) {
682
+ const proc = spawn(argv[0], argv.slice(1), { stdio: ['ignore', 'pipe', 'pipe'] });
683
+ let stdout = '';
684
+ let stderr = '';
685
+ proc.stdout.on('data', (b) => { stdout += b.toString('utf-8'); });
686
+ proc.stderr.on('data', (b) => { stderr += b.toString('utf-8'); });
687
+ proc.on('close', (exitCode) => {
688
+ // grep / rg exit 1 when there are no matches — that's success for us.
689
+ const noMatches = exitCode === 1 && !stdout.trim();
690
+ if (noMatches) {
691
+ resolveP({ stdout: 'No matches found', stderr: '', exitCode: 0 });
692
+ return;
693
+ }
694
+ if (exitCode !== 0 && exitCode !== 1) {
695
+ resolveP({ stdout: '', stderr: stderr || `[fs grep] exit ${exitCode}`, exitCode: exitCode ?? 1 });
696
+ return;
697
+ }
698
+ const lines = stdout.split('\n');
699
+ if (lines.length > limit) {
700
+ const head = lines.slice(0, limit).join('\n');
701
+ resolveP({
702
+ stdout: `${head}\n\n[showing ${limit} of ${lines.length} lines; raise --limit or narrow the search]`,
703
+ stderr: '',
704
+ exitCode: 0,
705
+ });
706
+ return;
707
+ }
708
+ resolveP({ stdout: stdout.trim() || 'No matches found', stderr: '', exitCode: 0 });
709
+ });
710
+ proc.on('error', (err) => {
711
+ resolveP({ stdout: '', stderr: `[fs grep] spawn ${argv[0]}: ${err.message}`, exitCode: 1 });
712
+ });
713
+ }
466
714
  //# sourceMappingURL=rpc-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-handler.js","sourceRoot":"","sources":["../../src/mesh/rpc-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rpc-handler.js","sourceRoot":"","sources":["../../src/mesh/rpc-handler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poping/yome",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "description": "Yome Agent — the open-source Empower Kernel CLI",
5
5
  "type": "module",
6
6
  "bin": {