lookatstudy-mobile 0.16.0 → 0.18.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.
Files changed (90) hide show
  1. package/install-termux.sh +109 -26
  2. package/package.json +1 -1
  3. package/server.cjs +25306 -601
  4. package/web/assets/abnfDiagram-N423BO3Z-CU2Rg7X-.js +1 -0
  5. package/web/assets/api-web-DI50TDfG.js +1 -0
  6. package/web/assets/{arc-Bj7Boh6s.js → arc-CVHcrwtq.js} +1 -1
  7. package/web/assets/architectureDiagram-T3A2C74G-CbOpSoqA.js +36 -0
  8. package/web/assets/{blockDiagram-VBNYF7ZC-DAzIMkNI.js → blockDiagram-VBNYF7ZC-DkENfYJJ.js} +2 -2
  9. package/web/assets/{c4Diagram-5PPSVZJV-NlYvtXbZ.js → c4Diagram-5PPSVZJV-D2nKbUxh.js} +2 -2
  10. package/web/assets/channel-AThd-Hly.js +1 -0
  11. package/web/assets/{chunk-2GRJ4B5K-Cy2RZsUk.js → chunk-2GRJ4B5K-B2LBmawX.js} +1 -1
  12. package/web/assets/{chunk-2Q5K7J3B-DtK3xo3Z.js → chunk-2Q5K7J3B-ByZtx99c.js} +1 -1
  13. package/web/assets/{chunk-5RXB4S5H-CmVGejcd.js → chunk-5RXB4S5H-b6PGx0ql.js} +1 -1
  14. package/web/assets/{chunk-5VM5RSS4-EO_k0Crh.js → chunk-5VM5RSS4-wmKKoEHl.js} +1 -1
  15. package/web/assets/{chunk-6Q2QTUOP-TBVy-R-c.js → chunk-6Q2QTUOP-CZ89fwLd.js} +1 -1
  16. package/web/assets/{chunk-GF5L2VYU-_N0jD1tE.js → chunk-GF5L2VYU-3EIIkl6Y.js} +1 -1
  17. package/web/assets/{chunk-JWPE2WC7-BIAuolFx.js → chunk-JWPE2WC7-CdCWYrp8.js} +1 -1
  18. package/web/assets/{chunk-KBJHAD2P-DqcnXfI8.js → chunk-KBJHAD2P-CmZTgHqr.js} +1 -1
  19. package/web/assets/{chunk-RYQCIY6F-D5RQKqlg.js → chunk-RYQCIY6F-DfyARx_z.js} +1 -1
  20. package/web/assets/{chunk-XXDRQBXY-1Ksx_dPa.js → chunk-XXDRQBXY-DIoEGjYu.js} +1 -1
  21. package/web/assets/classDiagram-JCYQIIEL-Ccd6qf2i.js +1 -0
  22. package/web/assets/classDiagram-v2-OCEON4UE-Ccd6qf2i.js +1 -0
  23. package/web/assets/cose-bilkent-JH36ORCC-BktEcSRI.js +1 -0
  24. package/web/assets/{cynefin-VYW2F7L2-CAYbjl57.js → cynefin-VYW2F7L2-sXHUKhTr.js} +1 -1
  25. package/web/assets/cynefinDiagram-MW4NZA55-CQvZqGMF.js +62 -0
  26. package/web/assets/{dagre-VZM6K2ZE-CKP3kBHM.js → dagre-VZM6K2ZE-BgVOc66g.js} +2 -2
  27. package/web/assets/{diagram-7IWD3JNH-CLfr8NaW.js → diagram-7IWD3JNH-CqXnEFCF.js} +2 -2
  28. package/web/assets/{diagram-B4RE2ZJO-h051w7zn.js → diagram-B4RE2ZJO-CbG6ewsb.js} +2 -2
  29. package/web/assets/diagram-LBJQPF4R-qCVZtiwb.js +24 -0
  30. package/web/assets/diagram-Q27KOJAE-fRbvC_4J.js +24 -0
  31. package/web/assets/diagram-UB23O5K3-DYruB-zm.js +41 -0
  32. package/web/assets/ebnfDiagram-BXEA7PRR-BKbJqSDg.js +1 -0
  33. package/web/assets/{erDiagram-JOGREHBK-Bz30kI2B.js → erDiagram-JOGREHBK-anDPN9Fg.js} +2 -2
  34. package/web/assets/{flowDiagram-UKHOOZJN-CsFP_-KD.js → flowDiagram-UKHOOZJN-DlMRxaQ8.js} +1 -1
  35. package/web/assets/ganttDiagram-PKOTCBZU-BoCCJylo.js +292 -0
  36. package/web/assets/gitGraphDiagram-DS77QQ5N-D37HEJEv.js +106 -0
  37. package/web/assets/index-CeFnA9sR.js +53 -0
  38. package/web/assets/index-D8iAKGNi.css +1 -0
  39. package/web/assets/infoDiagram-6WML65LV-Cp2uwsRp.js +2 -0
  40. package/web/assets/{ishikawaDiagram-WSZJBQD7-Bt6EfUkc.js → ishikawaDiagram-WSZJBQD7-IDCvF8oq.js} +2 -2
  41. package/web/assets/{journeyDiagram-NVQOT4AX-DmVq_JOG.js → journeyDiagram-NVQOT4AX-CqJjuMRj.js} +2 -2
  42. package/web/assets/{kanban-definition-27J2QSJJ-tE00W58E.js → kanban-definition-27J2QSJJ-Bzy4l8Im.js} +2 -2
  43. package/web/assets/{linear-CAqnKu9J.js → linear-BYt2jke2.js} +1 -1
  44. package/web/assets/main-BaffLdJi.js +528 -0
  45. package/web/assets/{mermaid.core-uJSxER2x.js → mermaid.core-ChBcV6rX.js} +11 -11
  46. package/web/assets/{mindmap-definition-FAOFIHXS-D5S_P9_s.js → mindmap-definition-FAOFIHXS-BiQCF2qx.js} +2 -2
  47. package/web/assets/pegDiagram-VL7TDLO6-JrAhM2Rh.js +1 -0
  48. package/web/assets/pet-CTf4hJTR.css +1 -0
  49. package/web/assets/pet-f5Q8AEiU.js +1 -0
  50. package/web/assets/{pieDiagram-7S7Q4E2Y-DYpiHnao.js → pieDiagram-7S7Q4E2Y-DNB9KI82.js} +2 -2
  51. package/web/assets/{quadrantDiagram-CIZ2JOQS-BqycGz7D.js → quadrantDiagram-CIZ2JOQS-D9CQH6qH.js} +4 -4
  52. package/web/assets/railroadDiagram-AXF67PYL-GRAK-BbS.js +1 -0
  53. package/web/assets/{requirementDiagram-LRYGKXZP-CH-xotLo.js → requirementDiagram-LRYGKXZP-CTFmkmvv.js} +2 -2
  54. package/web/assets/{sankeyDiagram-W5VNT64P-BCLFObl1.js → sankeyDiagram-W5VNT64P-ocFhBtMa.js} +2 -2
  55. package/web/assets/{sequenceDiagram-SI44F4Z6-CE1T-Oar.js → sequenceDiagram-SI44F4Z6-itHtrU2O.js} +2 -2
  56. package/web/assets/sizeCapture-X5ZJPWSS-Bj_0p16L.js +1 -0
  57. package/web/assets/stateDiagram-OKZ733FA-BZ3FXzdZ.js +1 -0
  58. package/web/assets/stateDiagram-v2-UEYNNEHI-DacbF0mj.js +1 -0
  59. package/web/assets/swimlanes-SLNWSIFB-nlxlUqVN.js +2 -0
  60. package/web/assets/swimlanesDiagram-ULZ7WXOC-Bk858mY5.js +8 -0
  61. package/web/assets/{timeline-definition-Z64GVDOM-CPajwTED.js → timeline-definition-Z64GVDOM-B-IqLhkR.js} +2 -2
  62. package/web/assets/{vennDiagram-T6HMQDX7-DKkB137-.js → vennDiagram-T6HMQDX7-Dr1sgkuO.js} +2 -2
  63. package/web/assets/{wardleyDiagram-T6FBY63Y-CHD6tq1V.js → wardleyDiagram-T6FBY63Y-BOOJsnbk.js} +2 -2
  64. package/web/assets/{xychartDiagram-ELKLHX3M-DIO9Q6BD.js → xychartDiagram-ELKLHX3M-Bb3lgEh4.js} +2 -2
  65. package/web/index.html +3 -2
  66. package/web/pet.html +19 -0
  67. package/web/assets/abnfDiagram-N423BO3Z-uVyZuC2D.js +0 -1
  68. package/web/assets/api-web-BydHmVA4.js +0 -1
  69. package/web/assets/architectureDiagram-T3A2C74G-CrbkXNQp.js +0 -36
  70. package/web/assets/channel-JNlIjRLZ.js +0 -1
  71. package/web/assets/classDiagram-JCYQIIEL-C-12RKGI.js +0 -1
  72. package/web/assets/classDiagram-v2-OCEON4UE-C-12RKGI.js +0 -1
  73. package/web/assets/cose-bilkent-JH36ORCC-DAUofPwo.js +0 -1
  74. package/web/assets/cynefinDiagram-MW4NZA55-UaEI49aN.js +0 -62
  75. package/web/assets/diagram-LBJQPF4R-CUOsO4df.js +0 -24
  76. package/web/assets/diagram-Q27KOJAE-BXbJxAlu.js +0 -24
  77. package/web/assets/diagram-UB23O5K3-BHV6tpU9.js +0 -41
  78. package/web/assets/ebnfDiagram-BXEA7PRR-CAahAB9-.js +0 -1
  79. package/web/assets/ganttDiagram-PKOTCBZU-Cm5qe_5U.js +0 -292
  80. package/web/assets/gitGraphDiagram-DS77QQ5N-DNktj2Kq.js +0 -106
  81. package/web/assets/index-BC_sP79K.js +0 -563
  82. package/web/assets/index-BSTI-ywB.css +0 -1
  83. package/web/assets/infoDiagram-6WML65LV-vZK5e7Xx.js +0 -2
  84. package/web/assets/pegDiagram-VL7TDLO6-BZkaiQ_9.js +0 -1
  85. package/web/assets/railroadDiagram-AXF67PYL-DEoY1V9D.js +0 -1
  86. package/web/assets/sizeCapture-X5ZJPWSS-uf4-mQAU.js +0 -1
  87. package/web/assets/stateDiagram-OKZ733FA-Dt2wQF9A.js +0 -1
  88. package/web/assets/stateDiagram-v2-UEYNNEHI-BbJD6fMT.js +0 -1
  89. package/web/assets/swimlanes-SLNWSIFB-jLXDXtjZ.js +0 -2
  90. package/web/assets/swimlanesDiagram-ULZ7WXOC-BTdV0I38.js +0 -8
package/install-termux.sh CHANGED
@@ -5,7 +5,9 @@
5
5
  # bash ~/lookatstudy/stop.sh # 停止
6
6
  # bash ~/lookatstudy/status.sh # 状态 + 访问链接
7
7
  # bash ~/lookatstudy/update.sh # 更新便携包并重启
8
- # 不在本机跑 npm:便携包与语音引擎包的 tarball 主源 npmmirror(自动同步 npmjs),未同步/失败回退 GitHub Release 直连+代理链。
8
+ # 不在本机跑 npm。安装与升级(update.sh)走同一条下载链:
9
+ # npmmirror 主源(+滞后守卫) → npm 官方源 → GitHub Release 直连 → gh 代理链。
10
+ # update.sh 的函数体与本文件逐字同源(verify-termux-voice T7 守链序与两份同步)。
9
11
  set -euo pipefail
10
12
 
11
13
  PORT="${LOOKATSTUDY_PORT:-17890}"
@@ -18,24 +20,34 @@ DL_PREFIXES=("" "https://gh-proxy.com/" "https://ghproxy.net/" "https://ghfast.t
18
20
 
19
21
  # npmmirror(阿里,自动同步 npm)解析包的 latest tarball 地址;空输出=未同步/网络失败。
20
22
  # 同步滞后守卫:刚发版的头几分钟镜像 latest 可能还指向上一个版本,静默拿到旧包
21
- # —— 版本落后于 GitHub 最新 release 时按"未命中"处理,走 GitHub 回退链(GitHub
22
- # releases/latest/download 永远指向最新版)。GitHub 版本探测失败(网络)则信任镜像,
23
- # 不因 GitHub 不可达惩罚国内直连的镜像主源。
23
+ # —— 版本落后于 GitHub 最新 release 时按"未命中"处理,让位 npm 官方源/GitHub
24
+ # (GitHub 的 releases/latest/download 永远指向最新版)。GitHub 版本探测失败(网络)
25
+ # 则信任镜像,不因 GitHub 不可达惩罚国内直连的镜像主源。
26
+ # 契约:恒 exit 0,空输出=未命中 —— 调用方都是 tb=$(npm_tarball …) 裸赋值,老写法
27
+ # miss 返回 1 会把 set -e 的脚本整个静默杀掉(eeeada1 的滞后守卫实际从未走到回退链的根因)。
24
28
  npm_tarball() {
25
29
  local json ver gh
26
30
  json=$(curl -sfL --connect-timeout 8 --max-time 20 "https://registry.npmmirror.com/$1/latest" || true)
27
- [ -n "$json" ] || return 1
31
+ [ -n "$json" ] || return 0
28
32
  ver=$(printf '%s' "$json" | sed -n 's/.*"version":"\([^"]*\)".*/\1/p')
29
33
  if [ -n "$ver" ]; then
30
34
  gh=$(gh_latest_version)
31
35
  if [ -n "$gh" ] && ! ver_ge "$ver" "$gh"; then
32
- info "npm 镜像同步滞后(镜像 v${ver} < GitHub v${gh}),走 GitHub 链…"
33
- return 1
36
+ info "npm 镜像同步滞后(镜像 v${ver} < GitHub v${gh}),换 npm 官方源…"
37
+ return 0
34
38
  fi
35
39
  fi
36
40
  printf '%s' "$json" | sed -n 's/.*"tarball":"\([^"]*\)".*/\1/p'
37
41
  }
38
42
 
43
+ # npm 官方源(权威、零同步滞后):镜像未命中/滞后时的第一兜底,先于 GitHub 链。
44
+ # 同一契约:恒 exit 0,空输出=未命中。
45
+ npm_tarball_official() {
46
+ local json
47
+ json=$(curl -sfL --connect-timeout 8 --max-time 20 "https://registry.npmjs.org/$1/latest" || true)
48
+ printf '%s' "$json" | sed -n 's/.*"tarball":"\([^"]*\)".*/\1/p'
49
+ }
50
+
39
51
  # GitHub 最新 release 版本号(仅数字串;空=探测失败)。releases/latest/download 会 302 到
40
52
  # 带 tag 的最终资产 URL,HEAD 一次读 url_effective 即得,不用碰 api.github.com。
41
53
  gh_latest_version() {
@@ -115,7 +127,15 @@ download_bundle() {
115
127
  ok "便携包就位(npm 镜像): $APP_DIR"
116
128
  return 0
117
129
  fi
118
- info "npm 镜像未命中,回退 GitHub 直连+代理链..."
130
+ # 次选:npm 官方源(权威零滞后,接住镜像同步窗口)
131
+ tb=$(npm_tarball_official lookatstudy-mobile)
132
+ if [ -n "$tb" ] && curl -fL --connect-timeout 10 --retry 2 -o mobile.tgz "$tb"; then
133
+ tar -xzf mobile.tgz --strip-components=1
134
+ rm -f mobile.tgz
135
+ ok "便携包就位(npm 官方源): $APP_DIR"
136
+ return 0
137
+ fi
138
+ info "npm 源未命中,回退 GitHub 直连+代理链..."
119
139
  local dl_ok=0 p=""
120
140
  for p in "${DL_PREFIXES[@]}"; do
121
141
  if curl -fL --connect-timeout 10 --retry 2 -o ls.zip "${p}${GH_ASSET}"; then
@@ -147,7 +167,15 @@ install_voice() {
147
167
  info "装完模型重启服务生效: bash ~/lookatstudy/start.sh"
148
168
  return 0
149
169
  fi
150
- info "npm 镜像未命中,回退 GitHub 直连+代理链..."
170
+ # 次选:npm 官方源(权威零滞后,接住镜像同步窗口)
171
+ tb=$(npm_tarball_official lookatstudy-termux-voice)
172
+ if [ -n "$tb" ] && curl -fL --connect-timeout 10 --retry 2 -o voice.tgz "$tb"; then
173
+ tar -xzf voice.tgz --strip-components=1 -C "$APP_DIR/node_modules"
174
+ rm -f voice.tgz
175
+ ok "语音引擎就位(npm 官方源): $APP_DIR/node_modules/sherpa-onnx-node"
176
+ return 0
177
+ fi
178
+ info "npm 源未命中,回退 GitHub 直连+代理链..."
151
179
  local dl_ok=0 p=""
152
180
  for p in "${DL_PREFIXES[@]}"; do
153
181
  if curl -fL --connect-timeout 10 --retry 2 -o voice.tar.gz "${p}${GH_VOICE}"; then
@@ -253,27 +281,82 @@ fi
253
281
  exit 0
254
282
  EOS
255
283
 
256
- cat > "$APP_DIR/update.sh" <<EOS
257
- #!/data/data/com.termux/files/usr/bin/bash
258
- # 更新便携包并重启(下载源带回退链,与 install-termux.sh 同款)
259
- set -euo pipefail
260
- APP_DIR="${APP_DIR}"
261
- GH_ASSET="${GH_ASSET}"
262
- cd "\$APP_DIR"
284
+ # update.sh 与安装器同一条下载链(npmmirror+滞后守卫 → npm 官方 → GitHub 直连 → gh 代理):
285
+ # 头部三行配置用 printf %q 烤入;函数体放引号 heredoc —— 零转义、与上面定义逐字同源,
286
+ # 改链时两处一起改(verify-termux-voice T7 守链序与两份同步)
287
+ {
288
+ printf '#!/data/data/com.termux/files/usr/bin/bash\n'
289
+ printf 'set -euo pipefail\n'
290
+ printf 'APP_DIR=%q PORT=%q GH_ASSET=%q\n\n' "$APP_DIR" "$PORT" "$GH_ASSET"
291
+ cat <<'UPDATE_EOF'
292
+ # 更新便携包并重启(下载链与 install-termux.sh 同源:npmmirror+滞后守卫 → npm 官方 → GitHub 直连 → gh 代理)
293
+ info() { printf '\033[1m[*]\033[0m %s\n' "$*"; }
294
+
295
+ # ↓↓ 与 install-termux.sh 逐字同源的四个函数(契约:恒 exit 0,空输出=未命中)↓↓
296
+ npm_tarball() {
297
+ local json ver gh
298
+ json=$(curl -sfL --connect-timeout 8 --max-time 20 "https://registry.npmmirror.com/$1/latest" || true)
299
+ [ -n "$json" ] || return 0
300
+ ver=$(printf '%s' "$json" | sed -n 's/.*"version":"\([^"]*\)".*/\1/p')
301
+ if [ -n "$ver" ]; then
302
+ gh=$(gh_latest_version)
303
+ if [ -n "$gh" ] && ! ver_ge "$ver" "$gh"; then
304
+ info "npm 镜像同步滞后(镜像 v${ver} < GitHub v${gh}),换 npm 官方源…"
305
+ return 0
306
+ fi
307
+ fi
308
+ printf '%s' "$json" | sed -n 's/.*"tarball":"\([^"]*\)".*/\1/p'
309
+ }
310
+ npm_tarball_official() {
311
+ local json
312
+ json=$(curl -sfL --connect-timeout 8 --max-time 20 "https://registry.npmjs.org/$1/latest" || true)
313
+ printf '%s' "$json" | sed -n 's/.*"tarball":"\([^"]*\)".*/\1/p'
314
+ }
315
+ gh_latest_version() {
316
+ local final
317
+ final=$(curl -sIL --connect-timeout 8 --max-time 20 -o /dev/null -w '%{url_effective}' \
318
+ "https://github.com/Kaiji-Z/LookatStudy/releases/latest/download/probe" 2>/dev/null || true)
319
+ printf '%s' "$final" | sed -n 's#.*/download/v\([0-9][0-9.]*\)/.*#\1#p'
320
+ }
321
+ ver_ge() {
322
+ local a b
323
+ a=$(printf '%s' "$1" | tr -d 'v' | awk -F. '{printf "%02d%02d%02d", $1, $2, $3}')
324
+ b=$(printf '%s' "$2" | tr -d 'v' | awk -F. '{printf "%02d%02d%02d", $1, $2, $3}')
325
+ [ -n "$a" ] && [ -n "$b" ] && [ "$a" -ge "$b" ] 2>/dev/null
326
+ }
327
+ # ↑↑ 同源函数区结束 ↑↑
328
+
329
+ cd "$APP_DIR"
263
330
  echo "==> 停止旧服务..."
264
- pkill -f "server.cjs --port ${PORT}" 2>/dev/null || true
331
+ pkill -f "server.cjs --port $PORT" 2>/dev/null || true
265
332
  sleep 1
266
333
  echo "==> 下载最新便携包..."
267
- dl_ok=0
268
- for p in "" "https://gh-proxy.com/" "https://ghproxy.net/" "https://ghfast.top/"; do
269
- if curl -fL --connect-timeout 10 --retry 2 -o ls.zip "\${p}\${GH_ASSET}"; then dl_ok=1; break; fi
270
- echo " \${p:-直连}失败,换下一个源..."
271
- done
272
- [ "\$dl_ok" = 1 ] || { echo "下载失败,保持原版本。"; exit 1; }
273
- unzip -o ls.zip && rm -f ls.zip
334
+ src=""
335
+ tb=$(npm_tarball lookatstudy-mobile)
336
+ if [ -n "$tb" ] && curl -fL --connect-timeout 10 --retry 2 -o mobile.tgz "$tb"; then
337
+ src="npm 镜像"
338
+ else
339
+ tb=$(npm_tarball_official lookatstudy-mobile)
340
+ if [ -n "$tb" ] && curl -fL --connect-timeout 10 --retry 2 -o mobile.tgz "$tb"; then
341
+ src="npm 官方源"
342
+ fi
343
+ fi
344
+ if [ -n "$src" ]; then
345
+ tar -xzf mobile.tgz --strip-components=1 && rm -f mobile.tgz
346
+ echo "[✓] 已更新($src)"
347
+ else
348
+ dl_ok=0
349
+ for p in "" "https://gh-proxy.com/" "https://ghproxy.net/" "https://ghfast.top/"; do
350
+ if curl -fL --connect-timeout 10 --retry 2 -o ls.zip "${p}${GH_ASSET}"; then dl_ok=1; break; fi
351
+ echo " ${p:-GitHub 直连}失败,换下一个源..."
352
+ done
353
+ [ "$dl_ok" = 1 ] || { echo "下载失败,保持原版本。"; exit 1; }
354
+ unzip -o ls.zip && rm -f ls.zip
355
+ fi
274
356
  echo "==> 重启..."
275
- exec bash "\$APP_DIR/start.sh"
276
- EOS
357
+ exec bash "$APP_DIR/start.sh"
358
+ UPDATE_EOF
359
+ } > "$APP_DIR/update.sh"
277
360
 
278
361
  chmod 755 "$APP_DIR"/{start,stop,status,update}.sh
279
362
  ok "常用脚本就位: ~/lookatstudy/{start,stop,status,update}.sh"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lookatstudy-mobile",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "LookatStudy Termux portable bundle (server.cjs + web frontend)",
5
5
  "repository": {
6
6
  "type": "git",