Documentation
¶
Overview ¶
clicheck.go —— CLI 侧的限流版本检查与提示行。
边界:
- **CLI 永远不自动替换自己**(D13):CLI 是交互工具,在用户敲命令时不知情地 换掉自己不合适,脚本化场景下行为还会突变。这里只打一行提示
- 读缓存的失败一律静默:这条路径挂在**每一条** handoff 命令上, 一个坏掉的缓存文件让所有命令都吐错误,代价远大于少提示一次更新
Package selfupdate 提供「能不能安全换版 / 要不要提示更新」的判据。
职责:
- IsManaged:判断当前进程是不是被进程管理器(systemd / launchd)拉起的, 换版接口(POST /api/update)的闸二用它做硬拒绝判据
- CLI 侧版本检查提示(clicheck.go):每条命令跑完后提示有没有新版本
边界:
- 不做下载、不做 rename、不做换版编排:那是 internal/release 与 handoff upgrade 命令的职责
- 不 import internal/agentd(会成环)
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CLICheckStale ¶
CLICheckStale 判断是否该重新检查。nil(没查过)视为过期。
func IsManaged ¶
IsManaged 判断当前进程是不是被进程管理器(systemd / launchd)拉起的。
参数:
- getenv: 取环境变量的函数(测试注入用;生产传 os.Getenv)
返回:
- true 表示托管。**判不出来一律返回 false(fail-closed)**
注意:
- 这是「非托管则拒绝自动更新」这条防线的判据,也是整个自动更新里最 重要的一个判断。如果 agentd 不是被管理器拉起的,换完版 exit(0) 之后 没人拉起,机器上就此没有 handoff 在跑,而且没有任何信号告诉任何人
- **绝不能用 PPID**。手工 nohup / `zsh -c … &` 起的进程被 init 收养后 PPID 同样是 1,拿 PPID==1 当判据会把所有裸进程误判成托管, 正好把这条防线打穿
- XPC_SERVICE_NAME 的 `!= "0"` 是必要的额外防御:从 Finder / Terminal.app 启动的进程会继承 XPC_SERVICE_NAME=0(launchd 给非 XPC 服务的占位值), 只判「非空」会把桌面上手动跑的 agentd 误判成托管
- 判据取值来自 spec §7.1 的 P1 真机实测:launchd 托管时该变量等于 job Label,ssh / tmux / 裸进程三种形态全为空
func NotifyLine ¶
NotifyLine 生成提示行;不需要提示时返回空串。
参数:
- c: 缓存(可为 nil)
- current: 本进程版本;**空串表示非 release 构建**
注意:
- current 为空时一律不提示。开发时每条命令都被劝「有新版」是纯噪音, 而且本地构建本来就不该被劝去装 release
- **只有缓存里的版本严格新于当前版本才提示**。缓存最长会陈 24h, 刚升级完的机器读到的仍是升级前那次检查的结果;只判「不相等」就会 反过来劝人降级。这不是假设:v0.1.1 发布当天实测被劝 「有新版本 v0.1.0(当前 v0.1.1)」,且这条错误提示会挂满一整个刷新周期
Types ¶
Click to show internal directories.
Click to hide internal directories.