@pawlogic/dl 0.15.24 → 0.16.0
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/dl-npm-update.sh +52 -10
- package/dl.mjs +1 -1
- package/ilands.mjs +1 -1
- package/package.json +1 -1
package/dl-npm-update.sh
CHANGED
|
@@ -5,9 +5,18 @@
|
|
|
5
5
|
# 绝不阻塞业务 dl 调用。当次仍用旧 bundle,新 bundle 装完后**下次** dl 调用才生效
|
|
6
6
|
# (agent 失败重试天然吃到新版)。
|
|
7
7
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
8
|
+
# dist-tag 来源,优先级从高到低:
|
|
9
|
+
# 1. PI_DL_DIST_TAG —— hono-pi-e2b 每条命令注入 (e2b-operations.ts),反映
|
|
10
|
+
# **当前**这条 lane。
|
|
11
|
+
# 2. DL_NPM_DIST_TAG —— template build 时按 alias 烤进 wrapper 第二行
|
|
12
|
+
# (prod=latest,staging=staging;PR preview 留空 → 本脚本直接 exit,沙箱内
|
|
13
|
+
# dl 锁在 template 烤进去那版,便于 PR 间复现 / 互不污染)。
|
|
14
|
+
#
|
|
15
|
+
# 1 必须压过 2:project → sandbox_id 这条记录是 prod / staging 共享的 (staging
|
|
16
|
+
# 切片连的是同一个 pi-agent-prod-pg),切换环境时会 resume 到对方那台沙箱,而 2
|
|
17
|
+
# 跟着**建沙箱时**那个模板走 —— prod 建的沙箱被 staging resume 之后仍然会去装
|
|
18
|
+
# @latest。wrapper 是烤死在镜像里的改不动,但本脚本每次 npm install 后会从新包里
|
|
19
|
+
# 拷一份覆盖自己 (见下方"自我热更"),所以存量沙箱两代之内就能吃到这条优先级。
|
|
11
20
|
#
|
|
12
21
|
# 鉴权: 不需要。包发到 npmjs.com 的 @pawlogic scope (public),npm 默认 registry
|
|
13
22
|
# 就是 npmjs.com,匿名 download 直接通,沙箱没有 ~/.npmrc。
|
|
@@ -29,6 +38,25 @@ LOCK=/tmp/dl-npm-update.lock
|
|
|
29
38
|
TTL=300
|
|
30
39
|
PACKAGE="@pawlogic/dl"
|
|
31
40
|
|
|
41
|
+
# 注入值优先,回落到 wrapper 烤死的值(理由见文件头)。
|
|
42
|
+
#
|
|
43
|
+
# 逐个来源单独校验、非法就继续往下回落,而不是先选后校验 —— 后者会让一个
|
|
44
|
+
# 写坏的 PI_DL_DIST_TAG 把整台沙箱的自更新彻底关掉,而不是退回模板烤死的值。
|
|
45
|
+
# 规则跟 self-update.ts 的 resolveDistTag 保持一致(首字符必须是字母数字)。
|
|
46
|
+
# 这个值会流到 npm install 的参数和 stamp 文件里,不合法一律当没给。
|
|
47
|
+
_valid_tag() {
|
|
48
|
+
case "${1:-}" in
|
|
49
|
+
'' | [!A-Za-z0-9]* | *[!A-Za-z0-9._-]*) return 1 ;;
|
|
50
|
+
*) return 0 ;;
|
|
51
|
+
esac
|
|
52
|
+
}
|
|
53
|
+
TAG=""
|
|
54
|
+
if _valid_tag "${PI_DL_DIST_TAG:-}"; then
|
|
55
|
+
TAG="$PI_DL_DIST_TAG"
|
|
56
|
+
elif _valid_tag "${DL_NPM_DIST_TAG:-}"; then
|
|
57
|
+
TAG="$DL_NPM_DIST_TAG"
|
|
58
|
+
fi
|
|
59
|
+
|
|
32
60
|
# ── 观测上报: fire-and-forget JSON POST,失败 swallow ────────────────────────
|
|
33
61
|
# args: outcome duration_ms [error_tail_file]
|
|
34
62
|
# error_tail_file 仅 npm_fail 分支传入,读末尾 ~200 字节带上去 —— 之前 npm stderr
|
|
@@ -40,7 +68,7 @@ report_event() {
|
|
|
40
68
|
[ -z "${CALLBACK_SERVER_URL:-}" ] && return 0
|
|
41
69
|
[ -z "${DL_PROXY_TOKEN:-}" ] && return 0
|
|
42
70
|
command -v curl >/dev/null 2>&1 || return 0
|
|
43
|
-
_tag="${
|
|
71
|
+
_tag="${TAG:-unknown}"
|
|
44
72
|
case "$_tag" in
|
|
45
73
|
latest|staging) ;;
|
|
46
74
|
*) _tag="unknown" ;;
|
|
@@ -100,8 +128,8 @@ should_sample_ttl() {
|
|
|
100
128
|
awk 'BEGIN{srand(); exit !(int(rand()*10)==0)}' 2>/dev/null
|
|
101
129
|
}
|
|
102
130
|
|
|
103
|
-
# 环境不全 → no-op。staging / prod
|
|
104
|
-
if [ -z "$
|
|
131
|
+
# 环境不全 → no-op。staging / prod 两个来源至少有一个有值,PR preview / 本地裸跑空。
|
|
132
|
+
if [ -z "$TAG" ]; then
|
|
105
133
|
report_event no_tag null
|
|
106
134
|
exit 0
|
|
107
135
|
fi
|
|
@@ -110,13 +138,27 @@ if ! command -v npm >/dev/null 2>&1; then
|
|
|
110
138
|
exit 0
|
|
111
139
|
fi
|
|
112
140
|
|
|
113
|
-
# TTL 拦截。stamp 损坏当 0 处理。
|
|
141
|
+
# TTL 拦截。stamp 格式 `<epoch> <tag>`,stamp 损坏当 0 处理。
|
|
142
|
+
#
|
|
143
|
+
# tag 也要存:只比时间戳的话,切完 lane 的头 300s 会被 TTL short-circuit 掉,
|
|
144
|
+
# 整个 turn 都还在用另一条 lane 的 dl —— 自愈就不"立刻"了。tag 跟本次解析出
|
|
145
|
+
# 来的不一致直接跳过 TTL 重装。老格式(只有 epoch)解出来的 tag 是空串,同样
|
|
146
|
+
# 判成不一致,升级后第一次调用自然会重装一遍。
|
|
114
147
|
now=$(date +%s 2>/dev/null) || exit 0
|
|
148
|
+
last=0
|
|
149
|
+
last_tag=""
|
|
115
150
|
if [ -f "$STAMP" ]; then
|
|
116
|
-
|
|
151
|
+
_stamp_line=$(head -n1 "$STAMP" 2>/dev/null || echo "")
|
|
152
|
+
last="${_stamp_line%% *}"
|
|
153
|
+
case "$_stamp_line" in
|
|
154
|
+
*' '*) last_tag="${_stamp_line#* }" ;;
|
|
155
|
+
*) last_tag="" ;;
|
|
156
|
+
esac
|
|
117
157
|
case "$last" in
|
|
118
158
|
''|*[!0-9]*) last=0 ;;
|
|
119
159
|
esac
|
|
160
|
+
fi
|
|
161
|
+
if [ "$last_tag" = "$TAG" ]; then
|
|
120
162
|
delta=$((now - last))
|
|
121
163
|
if [ "$delta" -ge 0 ] && [ "$delta" -lt "$TTL" ]; then
|
|
122
164
|
if should_sample_ttl; then
|
|
@@ -147,7 +189,7 @@ run_install() {
|
|
|
147
189
|
# 加 --force 就清零。
|
|
148
190
|
if HOME=/home/user npm install -g --prefix=/home/user/.local \
|
|
149
191
|
--no-audit --no-fund --no-update-notifier --force \
|
|
150
|
-
"$PACKAGE@$
|
|
192
|
+
"$PACKAGE@$TAG" >/dev/null 2>"$_errlog"; then
|
|
151
193
|
_outcome=ok
|
|
152
194
|
else
|
|
153
195
|
_outcome=npm_fail
|
|
@@ -171,7 +213,7 @@ run_install() {
|
|
|
171
213
|
/home/user/.local/lib/dl-npm-update.sh 2>/dev/null || true
|
|
172
214
|
chmod +x /home/user/.local/lib/dl-npm-update.sh 2>/dev/null || true
|
|
173
215
|
fi
|
|
174
|
-
echo "$now" > "$STAMP"
|
|
216
|
+
echo "$now $TAG" > "$STAMP"
|
|
175
217
|
if [ "$_outcome" = "npm_fail" ]; then
|
|
176
218
|
report_event "$_outcome" "$_dur_ms" "$_errlog"
|
|
177
219
|
else
|