@muvon/octofs 0.12.0 → 0.14.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 +42 -16
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -10,11 +10,11 @@
10
10
  [![MCP](https://img.shields.io/badge/MCP-2026--07--28-green.svg)](https://modelcontextprotocol.io)
11
11
  [![Version](https://img.shields.io/crates/v/octofs.svg)](https://crates.io/crates/octofs)
12
12
 
13
- *Standalone Rust binary that exposes filesystem tools over the Model Context Protocol. Built on `rmcp` 3.0, `tokio`, and `axum`.*
13
+ *Standalone Rust binary that exposes filesystem tools over the Model Context Protocol. Built on `rmcp` 3.x, `tokio`, and `axum`.*
14
14
 
15
- [Installation](#installation) · [Quick Start](#quick-start) · [Features](#features) · [Tools Reference](#mcp-tools-reference) · [Architecture](#architecture)
15
+ [Installation](#installation) · [Quick Start](#quick-start) · [Features](#features) · [Tools Reference](#mcp-tools-reference) · [Architecture](#architecture) · [Changelog](CHANGELOG.md)
16
16
 
17
- MCP Registry: [`io.github.Muvon/octofs`](https://github.com/muvon/octofs)
17
+ MCP Registry: [`io.github.Muvon/octofs`](https://registry.modelcontextprotocol.io)
18
18
 
19
19
  </div>
20
20
 
@@ -53,9 +53,9 @@ Your AI coding assistant (Cursor, Claude, Windsurf, etc.) is smart — but it's
53
53
  | **Implementation** | Compiled Rust binary, no runtime | Python/Node script |
54
54
  | **Content Search** | Built-in search with context lines | String matching only |
55
55
  | **Batch Operations** | Atomic multi-edit on single file | One-at-a-time |
56
- | **Line Modes** | Hash-based (stable across edits) or number-based | Number-only |
56
+ | **Line Addressing** | Composite `N:hh` ids — hash-verified at apply time; stale edits fail with relocation hints | Number-only |
57
57
  | **Transport** | STDIO + Streamable HTTP | STDIO only |
58
- | **Shell Integration** | Foreground + background process support | Limited or none |
58
+ | **Shell Integration** | Automatic foreground-to-background handoff | Limited or none |
59
59
  | **Remote Files** | Transparent SSH/SFTP on every file tool | None |
60
60
  | **Safety** | Gitignore-aware, stale-write detection, path validation | Full filesystem access |
61
61
 
@@ -75,6 +75,25 @@ cargo install octofs
75
75
  brew install muvon/tap/octofs
76
76
  ```
77
77
 
78
+ ### npm (no Rust toolchain needed)
79
+
80
+ ```bash
81
+ npx -y @muvon/octofs --version
82
+ ```
83
+
84
+ The wrapper downloads the matching pre-built binary on first run. MCP config:
85
+
86
+ ```json
87
+ {
88
+ "mcpServers": {
89
+ "octofs": {
90
+ "command": "npx",
91
+ "args": ["-y", "@muvon/octofs", "mcp"]
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
78
97
  ### Pre-built Binaries
79
98
 
80
99
  Download from [GitHub Releases](https://github.com/muvon/octofs/releases) for your platform:
@@ -88,9 +107,11 @@ Download from [GitHub Releases](https://github.com/muvon/octofs/releases) for yo
88
107
  | macOS (Intel) | `x86_64-apple-darwin` |
89
108
  | macOS (Apple Silicon) | `aarch64-apple-darwin` |
90
109
 
110
+ Each release also ships `.mcpb` bundles for one-click install in clients that support MCP bundles (e.g. Claude Desktop).
111
+
91
112
  ### MCP Registry
92
113
 
93
- One-click install via the [MCP Registry](https://github.com/muvon/octofs) entry `io.github.Muvon/octofs`.
114
+ Published to the [MCP Registry](https://registry.modelcontextprotocol.io) as `io.github.Muvon/octofs`.
94
115
 
95
116
  ### From Source
96
117
 
@@ -180,7 +201,7 @@ Ask your AI assistant to:
180
201
  - **Delete** — Remove a file (recoverable via undo)
181
202
  - **Undo** — Revert last edit (up to 10 undo levels per file, in-memory)
182
203
  - **Batch Edit** — Perform multiple insert/replace operations atomically on a single file
183
- - **Stale-Write Protection** — Edits fail fast if the file changed on disk since it was last viewed (external-edit detection, like an IDE's "file changed on disk" guard)
204
+ - **Stale-Write Protection** — Every edit target's `N:hh` id is verified against the file at apply time; a stale id fails with the current content and where it moved, instead of editing the wrong line
184
205
 
185
206
  ### 🔍 Code Intelligence
186
207
 
@@ -190,7 +211,7 @@ Ask your AI assistant to:
190
211
  ### 🖥️ Shell & System
191
212
 
192
213
  - **Command Execution** — Run shell commands with output capture
193
- - **Background Processes** — Run long commands in background, get PID for later management
214
+ - **Background Processes** — Long commands automatically continue in background with completion notifications
194
215
  - **Working Directory** — Set/get/reset working directory context for operations
195
216
 
196
217
  ---
@@ -279,7 +300,8 @@ octofs mcp --path ssh://deploy@example.com/var/www/app --ssh-key ~/.ssh/id_ed255
279
300
  view path="ssh://deploy@example.com/etc/nginx/nginx.conf"
280
301
  ```
281
302
 
282
- - **Authentication** — fully automatic, like OpenSSH, honoring `~/.ssh/config`: the agent your config names for the host (`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`). If plain `ssh host` works on your machine, octofs works too — nothing to configure. Passphrase-protected key files are not supported directly; use an agent instead.
303
+ - **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
+ - **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.
283
305
  - **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.
284
306
  - **Host keys** — verified against `~/.ssh/known_hosts` with the OpenSSH `accept-new` policy: unknown hosts are recorded on first use, a changed key fails closed.
285
307
  - **`--ssh-timeout SECS`** — connection timeout (default 30). Connections are pooled per host, kept alive with transport keepalives, and reconnected automatically if they drop.
@@ -450,17 +472,21 @@ the file). `append_line` positions the copy in the target: `0` = beginning,
450
472
 
451
473
  ### `shell` — Execute commands
452
474
 
453
- **Foreground:**
475
+ Commands start in the foreground and return their output normally when they
476
+ finish within about 10 seconds:
477
+
454
478
  ```json
455
479
  {"command": "cargo test"}
456
480
  {"command": "cd foo && cargo build"}
457
481
  ```
458
482
 
459
- **Background:**
460
- ```json
461
- {"command": "python -m http.server 8000", "background": true}
462
- // Returns PID; the response includes the platform-specific kill command
463
- ```
483
+ If a command is still running at that boundary, the same process continues in
484
+ the background. The response returns its PID and linked output resource, and a
485
+ completion notification arrives when it exits. There is no `background` flag
486
+ and the command is never killed or restarted during the handoff. Multiple
487
+ distinct commands may run concurrently, including from the same working
488
+ directory. An exact duplicate command in the same working directory is rejected
489
+ while the first copy is still running.
464
490
 
465
491
  > On Windows, shutdown cleanup terminates only direct child processes (no Unix
466
492
  > process-group semantics); use `taskkill /PID <pid> /T` for process trees.
@@ -516,7 +542,7 @@ octofs/
516
542
 
517
543
  **Key design decisions:**
518
544
 
519
- - **rmcp SDK** — Official Rust MCP SDK (`rmcp` 3.0) for protocol handling
545
+ - **rmcp SDK** — Official Rust MCP SDK (`rmcp` 3.x) for protocol handling
520
546
  - **Tokio** — Async runtime; all file I/O uses `tokio::fs`, never blocking `std::fs`
521
547
  - **File locking** — Per-file `tokio::sync::Mutex` prevents concurrent write conflicts
522
548
  - **Undo history** — Up to 10 snapshots per file, in-memory (lost on restart)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muvon/octofs",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "Standalone MCP filesystem tools server \u2014 view, edit, shell, workdir.",
5
5
  "mcpName": "io.github.Muvon/octofs",
6
6
  "bin": {