315c343ed5
ci-pangolin / Lint — shellcheck (push) Successful in 7s
ci-pangolin / OpenAPI Sync Check (push) Successful in 17s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (push) Successful in 6s
ci-pangolin / Flutter — analyze + test (push) Failing after 14s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (push) Successful in 5s
ci-pangolin / Codegen Drift — token 生成物未漂移 (push) Successful in 6s
ci-pangolin / Go — build + test (push) Successful in 11s
ci-pangolin / E2E Smoke — L4 进程级端到端 (push) Successful in 14s
ci-pangolin / Go — integration (mysql/redis testcontainers) (push) Failing after 4m3s
ci-pangolin / Golden — 视觉回归 (components + auth) (push) Successful in 14s
① 默认名:DeviceIdentity 改「平台简写(Win/Mac/Linux/iOS/Andr)·主机名」,主机名截
到 8、总长≈12(替代裸主机名,更短)。
② 重命名:新端点 POST /v1/me/devices/{uuid}/rename(Service.RenameDevice 校验归属+
截 64);store.UpdateName;客户端 account_api.renameDevice + provider.rename +
「我的设备」⋯ 菜单加「重命名」+ 输入弹窗;l10n(zh/en)。
③ 版本 1.0.13。
测试:server RenameDevice(归属/空名/404)+ 客户端 rename widget;全量 go/flutter 绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
90 lines
3.3 KiB
YAML
90 lines
3.3 KiB
YAML
name: pangolin_vpn
|
||
description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。
|
||
publish_to: "none"
|
||
version: 1.0.13+14
|
||
|
||
environment:
|
||
sdk: ^3.5.0
|
||
flutter: ">=3.24.0"
|
||
|
||
dependencies:
|
||
flutter:
|
||
sdk: flutter
|
||
flutter_svg: ^2.0.10 # 加载 assets/ 下的矢量 logo
|
||
country_flags: ^3.1.0 # 节点国旗(SVG,全平台含 Windows;按 region 码渲染)
|
||
lucide_icons: ^0.257.0 # Lucide 细线条图标
|
||
google_fonts: ^6.2.1 # 运行时加载 Sora / Manrope / Noto Sans SC / JetBrains Mono
|
||
flutter_riverpod: ^2.5.1 # 状态层(连接状态机 / 免费额度 / 节点选择 / 语言 / 主题)
|
||
http: ^1.2.1 # 控制面 HTTP 客户端(connect API)
|
||
path_provider: ^2.1.3 # 获取应用支持目录(sing-box 配置路径)
|
||
flutter_secure_storage: ^9.2.2 # JWT token 安全存储 + 稳定 device_id 持久化
|
||
shared_preferences: ^2.5.5
|
||
package_info_plus: ^9.0.1
|
||
device_info_plus: ^11.2.0 # 设备名/平台(「我的设备」上报)
|
||
uuid: ^4.5.1 # 客户端生成稳定 device_id (UUID v4)
|
||
launch_at_startup: ^0.5.1
|
||
tray_manager: ^0.5.3
|
||
window_manager: ^0.5.1
|
||
|
||
dev_dependencies:
|
||
flutter_test:
|
||
sdk: flutter
|
||
flutter_lints: ^4.0.0
|
||
flutter_launcher_icons: ^0.14.1
|
||
|
||
# ── App 图标生成(flutter_launcher_icons)──
|
||
# 源图 assets/app-icon-ios-1024.png = design 单源 assets/app-icon.svg 去掉圆角(rx=0,全幅
|
||
# 方形,iOS 自行加圆角)、qlmanage 渲染 1024 而来。改图标:重渲源图后跑
|
||
# `dart run flutter_launcher_icons`(自动铺 iPhone+iPad 全尺寸、去 alpha、重写 Contents.json)。
|
||
flutter_launcher_icons:
|
||
ios: true
|
||
remove_alpha_ios: true
|
||
image_path: "assets/app-icon-ios-1024.png"
|
||
|
||
# lucide_icons-0.257.0 defines LucideIconData extends IconData, which breaks
|
||
# when Flutter SDK marks IconData as final. Override with a local patched copy
|
||
# that replaces the subclass with direct IconData(...) const constructors.
|
||
dependency_overrides:
|
||
lucide_icons:
|
||
path: packages/lucide_icons_patched
|
||
|
||
flutter:
|
||
uses-material-design: true
|
||
|
||
# ── 资产(SVG logo)──
|
||
assets:
|
||
- assets/logo-mark.svg
|
||
- assets/logo-mark-white.svg
|
||
- assets/logo-wordmark.svg
|
||
- assets/app-icon.svg
|
||
- assets/tray_icon.png
|
||
- assets/tray_icon.ico # Windows 托盘专用(Win32 只认 .ico)
|
||
|
||
# ── 字体(本地打包,全平台离线)──
|
||
# 拉丁全量(Sora/Manrope/JetBrains Mono)+ Noto Sans SC 子集(GB2312 6763 字,单 Regular
|
||
# 权重;CJK 粗体由引擎合成)。子集由 tools/fonts/make-cjk-subset.sh 可复现生成。
|
||
# 生产经 PangolinFonts.useBundled=true 走这些 family;中文经 fontFamilyFallback 兜底。
|
||
fonts:
|
||
- family: Sora
|
||
fonts:
|
||
- asset: fonts/Sora-Regular.ttf
|
||
- asset: fonts/Sora-SemiBold.ttf
|
||
weight: 600
|
||
- asset: fonts/Sora-Bold.ttf
|
||
weight: 700
|
||
- family: Manrope
|
||
fonts:
|
||
- asset: fonts/Manrope-Regular.ttf
|
||
- asset: fonts/Manrope-Medium.ttf
|
||
weight: 500
|
||
- asset: fonts/Manrope-SemiBold.ttf
|
||
weight: 600
|
||
- asset: fonts/Manrope-Bold.ttf
|
||
weight: 700
|
||
- family: JetBrains Mono
|
||
fonts:
|
||
- asset: fonts/JetBrainsMono-Regular.ttf
|
||
- family: Noto Sans SC
|
||
fonts:
|
||
- asset: fonts/NotoSansSC-Regular-subset.otf
|