tmuxclihook 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/update.js +22 -17
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tmuxclihook",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "交互式 TUI 安装器:环境侦测、AI CLI 侦测、tmux-ai-status hooks 装/卸/修、TPM 软链校验",
5
5
  "type": "module",
6
6
  "bin": {
package/src/update.js CHANGED
@@ -12,8 +12,9 @@ export const CURRENT_VERSION = packageJson.version;
12
12
  // `npm install -g` 在版本管理器(volta 等)环境下不会更新其管理的 shim:
13
13
  // volta 的 `~/.volta/bin` shim 指向 packages/ 镜像,而 npm -g 只写 node
14
14
  // 工具链目录,两者互不感知(实测 0.3.0 → 0.3.2 升级时用户命令仍解析到
15
- // 旧版)。install 成功后按 PATH 解析「用户实际会运行的那份」,尽力读取
16
- // 真实版本并与 registry latest 比对,无法确认或版本不符时打警告。
15
+ // 旧版)。生效收敛由 repairWithVolta 无条件完成(见下);本节自检只是
16
+ // 事后确认:按 update 进程的 PATH 解析一份,尽力读取真实版本并与
17
+ // registry latest 比对,无法确认或版本不符时打警告。
17
18
  // 验证是尽力而为的提示,不改变 update 的返回值(install 本身已成功)。
18
19
 
19
20
  function findOnPath(name, env) {
@@ -95,9 +96,12 @@ function warnNotEffective(log, result) {
95
96
 
96
97
  // volta 生效修正:`npm install -g` 只写 node 工具链目录,不更新 volta 的
97
98
  // shim 镜像(实测 volta 2.0.2:shim npm 的全局 prefix 就是工具链目录),
98
- // 用户的命令经 ~/.volta/bin shim 解析时仍是旧版。检测到 volta 可用时自动
99
- // 补一次 volta install 使更新生效。npm install -g 始终是安装语义本身,
100
- // volta 只在自检发现未生效时被自动调用,用户无需改变安装习惯。
99
+ // 用户的命令经 ~/.volta/bin shim 解析时仍是旧版。因此只要检测到 volta
100
+ // 就无条件补一次 volta install 完成生效(幂等,已是最新时秒回)。不走
101
+ // 「自检失败才修」的条件路径:自检按 update 进程自己的 PATH 找第一份,
102
+ // 可能恰好命中 npm -g 刚写的那份而误判 ok(实测 0.3.3 → 0.3.4:verify
103
+ // 判 ok,修复从未触发,用户命令仍是旧版)。npm install -g 是安装语义,
104
+ // volta install 是生效语义,两者都执行;用户无需改变安装习惯。
101
105
  export async function repairWithVolta(run, log, env = process.env) {
102
106
  const voltaHome = env.VOLTA_HOME || join(env.HOME || '', '.volta');
103
107
  const voltaBin = findOnPath('volta', env) || join(voltaHome, 'bin', 'volta');
@@ -149,19 +153,20 @@ export async function updatePackage(options = {}) {
149
153
 
150
154
  log.log(`Done. Updated to v${latestVersion}`);
151
155
 
156
+ // 生效收敛:有 volta 就无条件跑(幂等;无 volta 时静默跳过,纯 npm 场景
157
+ // npm -g 本身已生效)。任何命令行执行 update 都能升级生效的关键。
158
+ if (repairVolta) {
159
+ await repairVolta(run, log);
160
+ }
161
+
152
162
  if (verify) {
153
- let result = await verify(latestVersion);
154
- if (result.status !== 'ok') {
155
- // PATH 命中的副本未反映新版本(典型:volta shim 镜像未更新)——
156
- // 自动走 volta 完成生效步骤,然后复检。
157
- if (repairVolta && await repairVolta(run, log)) {
158
- result = await verify(latestVersion);
159
- }
160
- if (result.status === 'ok') {
161
- log.log(`Verified: tmuxclihook on your PATH now resolves to v${latestVersion}.`);
162
- } else {
163
- warnNotEffective(log, result);
164
- }
163
+ // 事后确认(尽力而为):两处落点都应已是新版,命中哪份都该 ok;
164
+ // 不 ok(如 PATH 上另有第三份旧安装)只警告,不影响返回值。
165
+ const result = await verify(latestVersion);
166
+ if (result.status === 'ok') {
167
+ log.log(`Verified: tmuxclihook on your PATH now resolves to v${latestVersion}.`);
168
+ } else {
169
+ warnNotEffective(log, result);
165
170
  }
166
171
  }
167
172