Repository navigation
Releases: nocoo/snaky
Releases · nocoo/snaky
Release list
v1.0.6
Fixes
- CLI crashed with exit 127 even after discovery succeeds — the
snakyCLI 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 nodethen fails to resolve, returning 127 ("command not found"). For users withsnakyinstalled via nvm/fnm/asdf/mise, the discovered path is real but the spawn never gets past the shebang. Build a CLI-tailored environment viacliEnvironment(executablePath:)that prepends the CLI's containing directory plus/opt/homebrew/bin,/usr/local/bin, and~/.local/binto PATH. Wire it into bothrunandstreampaths inCLIBridge.
Install
- Download
Snaky-1.0.6.dmg - Right-click the dmg → Open (Gatekeeper warning) → drag
Snaky.appintoApplications - Launch from Spotlight / Finder / Dock — never exec the binary directly
v1.0.5
Fixes
- CLI not detected at startup —
CLIDiscoveryshells out tozsh -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 fromzsh -l -ctozsh -i -l -cso.zshrcis loaded and these tools' shims resolve correctly. Add NSLog instrumentation toCLIDiscovery.discover()so future regressions surface inConsole.app. Info.plist+build.sh— bundle idai.hexly.snakygot 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 freshai.hexly.snakybarso first launch is treated as a clean app-process registration.
Install
- Download
Snaky-1.0.5.dmg - Open the dmg (right-click → Open if Gatekeeper warns) and drag
Snaky.appintoApplications - Important: launch from Spotlight / Finder / Dock — do not double-click inside the dmg, and do not exec the binary from terminal
v1.0.4
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
NSStatusItemregistration whenever the host process is started asanon<>(anything launched by directly exec'ing the binary, including./Snaky.app/Contents/MacOS/Snaky,swift run, or.build/release/Snaky). Within ~15ms ControlCenter walksHost 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 asapp<application.X>processes, which ControlCenter accepts normally. Info.plist+build.sh— revert bundle id to plainai.hexly.snaky(no.NNsuffix). The numbered suffixes were a misdiagnosis-driven workaround that piled up stale blocked entries in ControlCenter.build.sh— appendlsregister -f $APP_BUNDLEso the freshly built.appis registered with LaunchServices before first launch. Print an explicit reminder: always launch viaopen(or Dock/Finder/Spotlight), never exec the binary directly — this is what makes the menubar icon actually appear.
Install
- Download
Snaky-1.0.4.dmg - Open the dmg and drag
Snaky.appintoApplications - 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
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 idai.hexly.snaky.01into 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 toai.hexly.snaky.02(Info.plist +build.shcodesign identifier) so SystemUI treats it as a fresh app — the icon appears immediately.
v1.0.2
Fix
- macOS menu bar icon invisible — the bundled
menubar-icon.pngwas a full-color logo, but the controller setimage.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. Regeneratedmenubar-icon.pngas 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
v1.0.0
v0.6.1
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 --jsonmodes for parallel fetching
v0.6.0
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/snakyv0.5.0
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