Skip to content

Releases: nocoo/snaky

v1.0.6

Choose a tag to compare

@nocoo nocoo released this 06 Jun 04:03

Fixes

  • CLI crashed with exit 127 even after discovery succeeds — the snaky CLI is a Node script (#!/usr/bin/env node). When the macOS app spawns it, the child inherits launchd's minimal PATH (/usr/bin:/bin:/usr/sbin:/sbin). env node then fails to resolve, returning 127 ("command not found"). For users with snaky installed via nvm/fnm/asdf/mise, the discovered path is real but the spawn never gets past the shebang. Build a CLI-tailored environment via cliEnvironment(executablePath:) that prepends the CLI's containing directory plus /opt/homebrew/bin, /usr/local/bin, and ~/.local/bin to PATH. Wire it into both run and stream paths in CLIBridge.

Install

  1. Download Snaky-1.0.6.dmg
  2. Right-click the dmg → Open (Gatekeeper warning) → drag Snaky.app into Applications
  3. Launch from Spotlight / Finder / Dock — never exec the binary directly

v1.0.5

Choose a tag to compare

@nocoo nocoo released this 06 Jun 03:33

Fixes

  • CLI not detected at startup — CLIDiscovery shells out to zsh -l -c "which snaky" as a last resort. On macOS, login shells only source .zprofile / .zshenv, but Node version managers (nvm, fnm, asdf, mise, rtx) install their PATH-modification snippet in .zshrc, which is only sourced by interactive shells. Switch the shell invocation from zsh -l -c to zsh -i -l -c so .zshrc is loaded and these tools' shims resolve correctly. Add NSLog instrumentation to CLIDiscovery.discover() so future regressions surface in Console.app.
  • Info.plist + build.sh — bundle id ai.hexly.snaky got polluted in macOS Tahoe ControlCenter's blocked-host list during v1.0.4 testing (one accidental direct-exec is enough to permanently brand a bundle id as ephemeral). Move to a fresh ai.hexly.snakybar so first launch is treated as a clean app-process registration.

Install

  1. Download Snaky-1.0.5.dmg
  2. Open the dmg (right-click → Open if Gatekeeper warns) and drag Snaky.app into Applications
  3. Important: launch from Spotlight / Finder / Dock — do not double-click inside the dmg, and do not exec the binary from terminal

v1.0.4

Choose a tag to compare

@nocoo nocoo released this 05 Jun 22:45

Fixes

  • macOS menu bar icon still invisible — true root cause found — the v1.0.1–v1.0.3 "SystemUI cooldown" hypothesis was wrong. The real issue: macOS 26 Tahoe ControlCenter blocks NSStatusItem registration whenever the host process is started as anon<> (anything launched by directly exec'ing the binary, including ./Snaky.app/Contents/MacOS/Snaky, swift run, or .build/release/Snaky). Within ~15ms ControlCenter walks Host properties initialized → Created ephemaral instance ... with positioning .ephemeral → Moving host to blocked list, and the bundle id is then permanently blocked on that machine — no reinstall / re-sign / restart helps. Working menubar apps (Gecko, Raycast, SwiftBar, Tailscale…) are launched via LaunchServices and appear as app<application.X> processes, which ControlCenter accepts normally.
  • Info.plist + build.sh — revert bundle id to plain ai.hexly.snaky (no .NN suffix). The numbered suffixes were a misdiagnosis-driven workaround that piled up stale blocked entries in ControlCenter.
  • build.sh — append lsregister -f $APP_BUNDLE so the freshly built .app is registered with LaunchServices before first launch. Print an explicit reminder: always launch via open (or Dock/Finder/Spotlight), never exec the binary directly — this is what makes the menubar icon actually appear.

Install

  1. Download Snaky-1.0.4.dmg
  2. Open the dmg and drag Snaky.app into Applications
  3. Important: launch from Spotlight / Finder / Dock — do not double-click inside the dmg directly, and do not exec the binary from terminal

v1.0.3

Choose a tag to compare

@nocoo nocoo released this 31 May 02:54

Fix

  • macOS menu bar icon still invisible after v1.0.2 — even with the new monochrome alpha icon and NSStatusItem.isVisible == 1, macOS SystemUI had silently put the bundle id ai.hexly.snaky.01 into a cooldown / hidden list after many dev relaunches: status item created, icon loaded, but ControlCenter refused to draw it (no icon, no title, nothing). Renamed bundle id to ai.hexly.snaky.02 (Info.plist + build.sh codesign identifier) so SystemUI treats it as a fresh app — the icon appears immediately.

v1.0.2

Choose a tag to compare

@nocoo nocoo released this 31 May 00:56

Fix

  • macOS menu bar icon invisible — the bundled menubar-icon.png was a full-color logo, but the controller set image.isTemplate = true. In template mode AppKit ignores RGB and renders only the alpha channel, so a colorful PNG with a near-opaque alpha produced a black square or nothing visible. Regenerated menubar-icon.png as a 44×44 monochrome (black) image with the snake silhouette baked into the alpha channel — template tinting now produces a clean, theme-adaptive icon on light / dark / saturated menu bars.

v1.0.1

Choose a tag to compare

@nocoo nocoo released this 30 May 09:30

Snaky macOS v1.0.1 — Menu bar network probe & latency tester

v1.0.0

Choose a tag to compare

@nocoo nocoo released this 30 May 05:14

Snaky macOS v1.0.0 — Menu bar network probe & latency tester

v0.6.1

Choose a tag to compare

@nocoo nocoo released this 25 May 23:28

Snaky v0.6.1

macOS App

  • Service favicons for all probe and ping targets (bundled locally)
  • Redesigned ping section: 2-column grid with favicon icons
  • Proper display names (Chinese where appropriate, correct English casing)
  • IP Summary section with deduplication, moved above probes
  • Skeleton loading placeholders with pulse animation
  • Parallel ping+probe refresh with progressive display
  • Borderless panel popover replaces popover-style window
  • Code-signed .app bundle in DMG

CLI

  • Fix TLS certificate verification for corporate proxies (NODE_TLS_REJECT_UNAUTHORIZED=0)
  • Split snaky probe --json / snaky ping --json modes for parallel fetching

v0.6.0

Choose a tag to compare

@nocoo nocoo released this 25 May 01:52

What's New

实时 TUI(Ink)

  • 逐条渲染 — 基于 Ink v5(React for CLI),每完成一个探测立刻显示结果,不再等待全部完成
  • 延迟着色 — ≤200ms 绿色、201-1000ms 黄色、>1000ms 红色
  • 状态图标 — ✓ 成功 / ✗ 失败
  • 非 TTY 降级 — 管道/脚本场景自动切换为静态表格输出

端点分层(Tier)

  • tier 1 — 核心端点(默认运行)
  • tier 2 — 扩展端点(22 个新增站点,--tier 2 加载)
  • 支持配置文件设置默认 tier 级别

输出优化

  • 表格列序调整 — IP 列移至最后,避免 IPv6 地址撑乱对齐
  • Ping 优先 — 连接延迟结果在探测结果上方显示
  • --no-color — 正确禁用 TUI 和 ANSI 转义

修复

  • Schema 验证现在正确校验 disabled tombstone 上的 tier 字段
  • --json 输出保证无 ANSI 转义,结构稳定

Install

npm install -g @nocoo/snaky

v0.5.0

Choose a tag to compare

@nocoo nocoo released this 24 May 22:17

v0.5.0 — First Feature-Complete Release

Features

  • Core probe engine — cftrace (Cloudflare trace), http-header, http-ping methods
  • Configuration system — JSON schema validation, built-in endpoint library (30+ sites), user customization
  • Concurrent execution — probe + ping run in parallel, configurable concurrency limit
  • Retry & fallback — exponential backoff retry, fallback domain support with metadata tracking
  • Multi-round ping — warmup round + N measurement rounds, median calculation
  • CLI interface — probe/ping/list/add/remove/disable/enable/config commands
  • Dual output — JSON (Swift Decodable compatible) and colored table formats
  • Exit codes — 0 (all pass), 1 (partial fail), 2 (all fail), 3 (user error)

Quality

  • 226 unit tests, 11 E2E tests (≥95% line, ≥90% branch coverage)
  • Biome linting + TypeScript strict mode
  • Husky pre-commit (G1+L1) and pre-push (L2+G2) hooks