@geoly-ai/skills-hub 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.
- package/bin/skills-hub.mjs +34 -12
- package/package.json +1 -1
- package/src/download.mjs +6 -1
package/bin/skills-hub.mjs
CHANGED
|
@@ -21,11 +21,22 @@ process.emit = function (name, data, ...rest) {
|
|
|
21
21
|
for (const k of Object.keys(process.env)) {
|
|
22
22
|
if (k.startsWith('GEOLY_FAULT')) delete process.env[k];
|
|
23
23
|
}
|
|
24
|
-
// 🔴 认 HTTP_PROXY / HTTPS_PROXY / NO_PROXY ——
|
|
24
|
+
// 🔴 认 HTTP_PROXY / HTTPS_PROXY / NO_PROXY —— **只认这个,不去猜别的**。
|
|
25
25
|
//
|
|
26
|
-
// Node 的内建 fetch(undici
|
|
27
|
-
//
|
|
26
|
+
// Node 的内建 fetch(undici)默认不认代理环境变量,而 npm / git / curl 都认。
|
|
27
|
+
// 后果不是「慢一点」:在代理后面 `install` 报 `UND_ERR_CONNECT_TIMEOUT`,
|
|
28
28
|
// 而同一台机器上 `curl` 同一个地址是通的 —— 看起来像我们的 registry 挂了。
|
|
29
|
+
// 我们做的只是**把用户已经表达过的意图变成生效的**。
|
|
30
|
+
//
|
|
31
|
+
// 🔴 **不读系统代理,不替用户决定他的网络怎么走。**(2026-09-04 用户拍板。)
|
|
32
|
+
// 我一度加了「没有环境变量就去读 macOS 的 scutil --proxy」——
|
|
33
|
+
// 它确实能让「什么都不设也能装」,但那是**替用户选了一条他没选的路**:
|
|
34
|
+
// 设了环境变量 = 他说「这次走这儿」;系统设置只是「这台机器平时怎样」,
|
|
35
|
+
// 不等于他要让这个工具走那儿。
|
|
36
|
+
// ⚠️ 更实际的一层:静默把请求送进一个代理,是**改变了流量的去向**,
|
|
37
|
+
// 而用户没有要求过。要用代理就设变量,不要就不设 —— 他说了算。
|
|
38
|
+
// 连不上的时候**明确告诉他怎么设**(见 `src/download.mjs` 的错误提示),
|
|
39
|
+
// 这是帮忙;替他设上,是越界。
|
|
29
40
|
//
|
|
30
41
|
// ⚠️ **`process.env.NODE_USE_ENV_PROXY = '1'` 在进程内设置是无效的**(实测)。
|
|
31
42
|
// Node 在**启动时**读它,之后再改不算数。
|
|
@@ -35,16 +46,27 @@ for (const k of Object.keys(process.env)) {
|
|
|
35
46
|
// ② 进程内设置 → UND_ERR_CONNECT_TIMEOUT ← 无效
|
|
36
47
|
// ③ 启动前外部设置 → 302
|
|
37
48
|
// **在一个本来就会过的窗口里验证一道闸,等于没验。**
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
// 🔴
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
49
|
+
// 所以只能**带着变量把自己重启一次**。
|
|
50
|
+
|
|
51
|
+
// 🔴 **只有会出网的命令才值得为代理重启一次进程。**
|
|
52
|
+
// `list` / `why` / `stats` 这些是纯本地的 —— 给它们重启等于每次多起一个进程。
|
|
53
|
+
// 出网的只有两处:`install`(preheat + 收尾的自动上报)与 `telemetry flush`。
|
|
54
|
+
// ⚠️ 判据取**第一个非 flag 参数**,不是 `argv[2]` —— 全局 flag 可以写在命令前面。
|
|
55
|
+
// ⚠️ 这里故意**不做真正的参数解析**:解析是 `cli.mjs` 的事,
|
|
56
|
+
// 在两个地方各写一套 argv 语义,迟早会分叉。这里只要一个保守的近似:
|
|
57
|
+
// 多重启一次不算错,漏了才算 —— 所以拿不准(比如 `--help`)就当作要出网。
|
|
58
|
+
const firstArg = process.argv.slice(2).find((a) => !a.startsWith('-'));
|
|
59
|
+
const mayGoOnline = firstArg === undefined || firstArg === 'install' || firstArg === 'telemetry';
|
|
60
|
+
|
|
61
|
+
// 三个前提缺一不可,否则不重启:
|
|
62
|
+
// · 用户没有显式表态(`NODE_USE_ENV_PROXY` 已设 —— 哪怕设成 '0' —— 一律尊重)
|
|
63
|
+
// · 环境里确实配了代理(没配就重启纯属白费一个进程)
|
|
64
|
+
// · 不是已经重启过的那一次(防无限自我重启)
|
|
44
65
|
if (
|
|
45
|
-
|
|
46
|
-
process.env.
|
|
47
|
-
|
|
66
|
+
mayGoOnline
|
|
67
|
+
&& process.env.NODE_USE_ENV_PROXY === undefined
|
|
68
|
+
&& process.env.GEOLY_PROXY_REEXEC === undefined
|
|
69
|
+
&& ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy'].some((k) => process.env[k])
|
|
48
70
|
) {
|
|
49
71
|
const { spawnSync } = await import('node:child_process');
|
|
50
72
|
const r = spawnSync(process.execPath, [...process.execArgv, ...process.argv.slice(1)], {
|
package/package.json
CHANGED
package/src/download.mjs
CHANGED
|
@@ -182,8 +182,13 @@ export async function download(url, {
|
|
|
182
182
|
// 我第一版无论如何都说「需要 Node ≥ 24」,而在 Node 25 上读者会
|
|
183
183
|
// 合理地认为「我满足了,那问题在别处」—— 一句正确但不适用的话,
|
|
184
184
|
// 比不说更能把人带偏。
|
|
185
|
+
// 🔴 **不按错误码枚举**。2026-09-04 实测:真实现场返回的是 `UND_ERR_SOCKET`,
|
|
186
|
+
// 而我当时枚举的是 TIMEOUT/ECONNREFUSED/ENOTFOUND/EAI_AGAIN —— 提示一个字没打。
|
|
187
|
+
// undici 的错误码谱系又长又会变(UND_ERR_SOCKET / UND_ERR_CONNECT_TIMEOUT /
|
|
188
|
+
// ECONNRESET / EPIPE / 证书类…),**枚举注定漏**。
|
|
189
|
+
// 判据换成:**走到这里就是取不到字节**,那时告诉用户「怎么走网络」总是有用的。
|
|
185
190
|
let hint = '';
|
|
186
|
-
|
|
191
|
+
{
|
|
187
192
|
const major = Number(process.versions.node.split('.')[0]);
|
|
188
193
|
const hasProxyEnv = ['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy']
|
|
189
194
|
.some((k) => process.env[k]);
|