@muvon/octofs 0.14.0 → 0.15.0

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.
Files changed (2) hide show
  1. package/README.md +17 -1
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  **Give your AI assistant filesystem superpowers**
6
6
 
7
7
  [![CI](https://github.com/muvon/octofs/actions/workflows/ci.yml/badge.svg)](https://github.com/muvon/octofs/actions/workflows/ci.yml)
8
+ [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fmuvon%2Foctofs%2Fbadges%2Fcoverage.json&style=flat-square)](https://github.com/muvon/octofs/actions/workflows/ci.yml)
8
9
  [![Rust](https://img.shields.io/badge/Rust-1.95+-orange.svg?logo=rust)](https://www.rust-lang.org)
9
10
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
10
11
  [![MCP](https://img.shields.io/badge/MCP-2026--07--28-green.svg)](https://modelcontextprotocol.io)
@@ -57,6 +58,7 @@ Your AI coding assistant (Cursor, Claude, Windsurf, etc.) is smart — but it's
57
58
  | **Transport** | STDIO + Streamable HTTP | STDIO only |
58
59
  | **Shell Integration** | Automatic foreground-to-background handoff | Limited or none |
59
60
  | **Remote Files** | Transparent SSH/SFTP on every file tool | None |
61
+ | **Re-reads** | Delta views — re-viewing a file returns only the hunks changed since | Full file every time |
60
62
  | **Safety** | Gitignore-aware, stale-write detection, path validation | Full filesystem access |
61
63
 
62
64
  ---
@@ -233,7 +235,10 @@ Edit tools take these ids back as targets and verify the hash against the file
233
235
  before applying anything. A stale id (the file changed since it was viewed) fails
234
236
  with the current content around the target and where the expected content moved —
235
237
  so the model retargets from the error instead of re-reading the file. Edit results
236
- are diffs with fresh ids, so edits chain without re-viewing.
238
+ are diffs with fresh ids, so edits chain without re-viewing. Removed lines collapse
239
+ to their old id range (`-12:a3..15:f1 (4 lines)`), and a trailing
240
+ `shift: lines after 40:b2 +3` line says how original line numbers below each edit
241
+ moved, so ids the model still holds can be adjusted without a failed call.
237
242
 
238
243
  This is the single line-id format — there is no mode switch. Plain line numbers
239
244
  are still accepted where a position alone is safe: `view` ranges (negative counts
@@ -300,6 +305,7 @@ octofs mcp --path ssh://deploy@example.com/var/www/app --ssh-key ~/.ssh/id_ed255
300
305
  view path="ssh://deploy@example.com/etc/nginx/nginx.conf"
301
306
  ```
302
307
 
308
+ - **Login home** — `ssh://host` (no path) and `ssh://host/~/dir` resolve against the login user's home, like `ssh host` / `scp host:dir`. `ssh://host/dir` stays absolute.
303
309
  - **OpenSSH config** — host aliases are resolved through the local OpenSSH config (including `Include` and `Match`) and honor `HostName`, `User`, `Port`, and a single `ProxyJump`. Explicit URL values win, so both `ssh://dev/path` and `ssh://user@example.com:2222/path` work as expected. Multi-hop `ProxyJump` and `ProxyCommand` routing are rejected with a clear error.
304
310
  - **Authentication** — uses the host's `IdentityAgent` (e.g. 1Password) or `$SSH_AUTH_SOCK`, then key files — `--ssh-key` if given, the host's `IdentityFile` entries, then the defaults in `~/.ssh` (`id_ed25519`, `id_ecdsa`). Passphrase-protected key files are not supported directly; use an agent instead.
305
311
  - **RSA keys are not supported** — the Rust `rsa` crate has an unfixed timing side-channel (Marvin attack, [RUSTSEC-2023-0071](https://rustsec.org/advisories/RUSTSEC-2023-0071)), so octofs is built without RSA entirely. Use an ed25519 key instead (`ssh-keygen -t ed25519`); ecdsa also works. RSA-only setups fail with a clear error naming the key.
@@ -328,6 +334,16 @@ that `batch_edit` and `extract_lines` take as targets.
328
334
 
329
335
  To read several files, make multiple `view` calls — they run in parallel.
330
336
 
337
+ **Delta views:** a whole-file view of a file the session already served returns
338
+ only the hunks changed since — the same `...`/`-`/`+` style as edit results, with
339
+ removed lines collapsed to their old id range — or
340
+ `[unchanged since you last viewed or edited it: N lines. Pass full: true to re-read.]`.
341
+ Octofs' own edits keep the cache current, so a re-view after your own `batch_edit`
342
+ costs one line. Ranged views and content search always render exactly what was asked.
343
+ ```json
344
+ {"path": "src/main.rs", "full": true} // force the complete file (e.g. after context compaction)
345
+ ```
346
+
331
347
  **Directory listing:**
332
348
  ```json
333
349
  {"path": "src/"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muvon/octofs",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Standalone MCP filesystem tools server \u2014 view, edit, shell, workdir.",
5
5
  "mcpName": "io.github.Muvon/octofs",
6
6
  "bin": {