Skip to content

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 17 Sep 13:50
· 32 commits to main since this release

中文

新增

  • 后台保活(设置 → 行为 → 后台保活,默认开):切到后台时用前台服务拿住进程,
    连接不再被系统冻结掐断,状态栏会有一条常驻通知。可以随时关掉,关掉立即停服务、
    通知消失。走 SSH shell 页(自己那条连接)时同样生效。
  • 断线即自愈:连接一断就自己重拨(先三次,然后每 30 秒一轮、最多四轮),
    期间状态栏文案是「连接断了,正在重连…」;回到前台会先做一次往返校验
    (进程被冻结时 socket 看起来还是开着的)。终端页给了一条回得来的路:
    失败/结束的浮层上有「重试」或「重新打开」,连接恢复后自动重挂。

修复

  • 断线之后再也没接上,只能跑去机器上重连:死掉的 SSH 会话被永久当成活的
    (只检查了「有过一个 client」),拨号器也永远没人通知,于是状态停在「已连接」、看板还是旧数据。
    现在传输层自己报告死亡(ConnectionLiveness),死掉的连接不会被交出去,也不会懒重拨。
  • 断线被误报成「这台机器上没有找到 herdr」:判断用的是「消息里含哨兵字符串」,
    而哨兵字面量就写在我们自己生成的命令里、报错消息又把整条命令拼了进去 —— 必然命中。
    现在按整行相等判断,错误消息也不再带命令原文(会截断并带上真正的原因)。
  • 聊天窗在真机上弹安全输入法、打不了中文:字段设了 enableSuggestions: false,
    而 Android 引擎拿它来实现「不外传学习」的方式是给输入框加上
    TYPE_TEXT_VARIATION_VISIBLE_PASSWORD —— 输入法据此当成密码框。现在保留联想、
    仍然关掉自动更正与标点改写(那两个会悄悄改命令)。真机实测输入类型为
    0x20001(普通多行文本)。
  • / 菜单报错时把 8KB 的命令原文甩到屏幕上:现在只给一句人话和失败原因。
  • 重连期间看板不再清空:空白等于说「agent 都没了」,而真相是「连接没了」。

English

Added

  • Keep-alive in the background (Settings → Behaviour, on by default): a foreground service
    holds the process while the app is away, so the connection is not frozen to death, with a
    persistent notification. It can be turned off at any time — the service stops and the
    notification goes with it. The SSH shell page keeps its own connection alive the same way.
  • A dropped connection heals itself: the app re-dials on its own (three quick tries, then up
    to four rounds thirty seconds apart) and says so — "Connection lost — reconnecting…". Coming
    back to the foreground gets a round-trip check first, because a frozen process is not a closed
    socket. The terminal offers a way back from a dead session and re-attaches when the connection
    returns.

Fixed

  • After a drop it never reconnected; the only way back was walking to the machine. A dead SSH
    session was handed out forever (the only test was "a client exists"), nothing told the dialler,
    and the status stayed "connected" with a stale board underneath it. The transport now reports
    its own end and a dead one is never reused.
  • A dropped link was reported as "herdr is not installed on this machine": the check was a
    substring match on a sentinel that this app writes into its own commands, so any message
    quoting a command matched. It is a line-exact match now, and error messages carry the reason
    instead of the command.
  • The chat field brought up a secure keyboard on the phone, with no Chinese input:
    enableSuggestions: false makes Android's engine add
    TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, which keyboards read as a password box. Suggestions
    stay on; autocorrect and the punctuation rewrites stay off, because those corrupt a command.
    Measured on the device: the field's input type is 0x20001, plain multiline text.
  • 8 KB of shell command on the screen when a menu failed: one sentence and the reason now.
  • The board no longer blanks itself while reconnecting: blank says "the agents are gone"
    when what is gone is the connection.

Installing

Android — adb install -r HerdrPocket-<version>-arm64-v8a.apk
(use armeabi-v7a for a 32-bit device, or the universal APK if you
do not know which one you have).

macOS — open the .dmg and drag the app out. The build is
unsigned, so the first launch needs either a right-click → Open,
or:

xattr -d com.apple.quarantine "/Applications/herdr_pocket.app"

Full Changelog: v0.3.0...v0.3.1