Skip to content

Releases

0.7.0

Choose a tag to compare

@AmriaLin AmriaLin released this 07 Nov 12:41
7b4a6dd

What's Changed

  • Experimental read_image tool (#8): returns a remote PNG, JPEG, GIF or WebP as MCP image content. Off by default; enable with --enable-image-reading or MCP_SSH_ENABLE_IMAGE_READING=true.
  • Validation uses magic bytes and container structure only, never the file extension: PNG signature, IHDR checksum, IDAT and IEND; JPEG frame header and EOI; GIF block walk with image data; WebP RIFF and chunk lengths with VP8/VP8L/VP8X headers. Anything else is rejected with Unsupported image format.
  • File size is capped by MCP_SSH_MAX_IMAGE_BYTES (4 MB) and decoded dimensions by MCP_SSH_MAX_IMAGE_PIXELS (16 MP, 8192 per side).
  • Tool errors now keep the category set by the service layer instead of being re-categorized as unknown.
  • The tool is removed again when image reading is disabled at runtime.

Full Changelog: v0.6.0...v0.7.0

0.6.0

Choose a tag to compare

@AmriaLin AmriaLin released this 16 Oct 05:03
96b0520

What's Changed

  • feat: probe tool, single-session mode, and a working long-output path (0.6.0) by @AmriaLin in #7

Full Changelog: v0.5.0...v0.6.0

0.5.0

Choose a tag to compare

@AmriaLin AmriaLin released this 15 Oct 15:31
1cadb99

What's Changed

  • feat: detect command completion with OSC 633 markers by @AmriaLin in #6

Full Changelog: v0.4.2...v0.5.0

0.4.2

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 14 Oct 15:27
d023666

What's Changed

  • Fix: pager hardening, SFTP for multi-line scripts, and command-echo stripping by @AmriaLin in #4
  • Chore: add AGENTS.md, enforce English single-line comments, drop all type-ignores by @AmriaLin in #5

Full Changelog: 0.4.1...v0.4.2

0.4.1

Choose a tag to compare

@AmriaLin AmriaLin released this 10 Oct 11:01
ef23405

UTF-8-safe, resumable remote file reads, and quieter session diagnostics.

  • read_file no longer prints the [CONTENT TRUNCATED ...] notice twice: FileManager.read_file returns a structured FileContent and the notice is rendered exactly once, in server.py
  • reads are line-windowed, so the byte cap lands on a line boundary and a trailing partial character is trimmed by an incremental decoder — the result is always valid UTF-8
  • added start_line (1-based) and max_lines; a truncated read reports its line range and the next_start_line to resume from, plus total_lines when the whole file was read
  • the sudo cat fallback base64-wraps its payload so the byte cap cannot split a character on the wire, and uses sed for the line window
  • get_session_diagnostics collapses each recent command to a single short line, so a heredoc no longer floods the Recent field

Full Changelog: 0.4.0...0.4.1

0.4.0

Choose a tag to compare

@AmriaLin AmriaLin released this 03 Oct 07:05
dbe79e7

Interrupt recovery, bounded output and owned session state.

  • interrupt_command_by_id now cancels the read loop, so an interrupted command no longer leaves the session wedged; the 30-second auto-recovery path does the same
  • a second reader can no longer race the previous worker for the same channel; the cancelled worker settles on INTERRUPTED with exit code 130
  • OutputBuffer replaces OutputLimiter: head 8 KB + tail 32 KB stay in memory, anything past 64 KB spills to a file whose path is returned instead of borrowing exit code 124
  • truncation actually reaches the caller: truncated / spilled_path now travel from the worker through get_command_status() into ExecutionResult and CommandResult
  • SessionRegistry collects the twelve pieces of per-session state, removes cross-module private access and adds a per-session execution lock
  • output limits honour MCP_SSH_MAX_OUTPUT_BYTES, and the head/tail windows are clamped to it

Full Changelog: 0.3.0...0.4.0

0.3.0

Choose a tag to compare

@AmriaLin AmriaLin released this 03 Oct 03:18
a23a154

Consolidated types, a single execution stack and structured command results.

  • all data types now live in models.py; api_types.py and datastructures.py are backward-compatible re-export shims
  • CommandExecutor is the single execution stack; EnhancedCommandExecutor is demoted to an options layer (auto-extend / streaming / progress)
  • CommandExecutor.execute_result() returns a structured ExecutionResult; exit code 124 and the ASYNC: / AWAITING_INPUT: string protocols are now confined to a single adapter
  • integration tests run in CI against a throw-away sshd container (.github/workflows/integration.yml)
  • MCP tool names, parameters and rendered output are unchanged

Full Changelog: 0.2.1...0.3.0

0.2.1

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 13 Jul 04:50

Fix: async file bugs

Full Changelog: v0.2.0...0.2.1

0.2.0

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 13 Jul 03:50

Full Changelog: v0.1.0...v0.2.0

0.1.0

Choose a tag to compare

@JohnRichard4096 JohnRichard4096 released this 12 Jul 13:41