Commit Graph
89 Commits
Author SHA1 Message Date
xiyidaiwa ada3a6dab4 fix(install-manager): 按 dpkg 规则放宽 deb 文件名校验,修复含 epoch 冒号包被误拦
- 新增 FILENAME_PATTERN,按 Debian 规则允许包名/版本号合法字符:含 epoch 冒号
  (如 steam-launcher_1:1.0.0.87_amd64.deb)与排序标记 ~(如 1.0~beta),及字母数字 . _ + -
- filename 校验由严格 PKGNAME_PATTERN 改为 FILENAME_PATTERN,并保留路径遍历双保险
  (拒绝 '..' 段 + path.basename 拒绝含 '/' 的路径),安全性未削弱
- 修正字符组内 [:~] 正则区间陷阱:用 \- 转义隔离,避免误匹配 <,=,>,?,@,[,] 等符号
- 已用真实仓库 2085 个包验证:包名/文件名拒绝均为 0,全部可正常放行下载与安装
2026-08-17 09:12:08 +08:00
xiyidaiwa 7bad39a796 fix(security/robustness): 清理 update-center 调试日志 + cancel-install id 校验
- update-center/index.ts: 引入 pino logger,将约 30 处 console.log(含 [DEBUG] 前缀及敏感路径)
  替换为 logger.debug(生产默认 info 级不打印,消除敏感信息泄露)
- install-manager.ts: cancel-install 增加 id 整数类型校验(typeof number && isInteger),防御非法输入
- PR 审查其余 5 项经代码实证为误报:JSON.parse 已有 try-catch、activeDownloadCount 的 mkdir/axios
  均在 try 内且 finally 必执行、check/remove-installed 已用 parseAppPayload 做 PKGNAME_PATTERN 校验、
  origin 已枚举归一化、initializeUpdateCenter 已有单例守卫;async handler 顶层 try-catch 因 Electron
  主进程默认 unhandledRejection 不崩溃且改动面大(19 handler)风险高,未改
2026-08-13 23:37:03 +08:00
xiyidaiwa e67f4752a4 fix(stability): cancel-install 增加 SIGTERM→SIGKILL 超时降级防止僵尸进程
- install-manager.ts: cancel-install 仅 kill()(SIGTERM),子进程忽略时成僵尸;新增 forceKill 封装先 SIGTERM 后 5s 超时降级 SIGKILL
- PR 审查其余 6 项经代码实证均为误报/可维护性建议,未改动:JSON.parse 已有 try-catch、pkgname 已 PKGNAME_PATTERN 校验防穿越、shell-caller 已双引号+白名单、watch 不修改 apps.length 无循环、baseApps 量级无需 shallowRef、install-complete 已 off 清理
2026-08-13 22:49:36 +08:00
xiyidaiwa 0f62a7e36a feat(update-center): 支持被系统锁定(hold)包的强制安装与更新中心体验优化
- 标记 apt-mark hold 的 spark(aptss) 源包,默认禁用勾选并提示开启强制安装
- 更新中心发起更新时透传 forceHeld,后端 Spark 本地 deb 走 shell-caller
  force-ssinstall 分支(单次免密 pkexec:unhold→ssinstall→hold),避免二次提权
- 无可选项时禁用全选并提示"无可更新项";更新选中后从列表中移除已启动项
- DownloadDetail 紧凑布局避免整页滚动;Toolbar 全选与更新选中按钮同行
- 继承 PKGNAME_PATTERN 与 metalinkUrl 白名单(https+*.spark-app.store+拒..)纵深防御
- apm 源无 hold 概念,forceHeld 在 apm 分支忽略(正确行为)
2026-08-13 16:42:21 +08:00
xiyidaiwa b5c5ab04b5 fix(update-center): 修复更新中心点击更新后卡在"开始更新..."不动
- 根因:service.ts 用 webContents.send("queue-install") 向主下载队列发任务,
  但 webContents.send 的目标对象是渲染进程,主进程 ipcMain 监听不到自己发出的消息,
  导致任务从未进入 install-manager 的下载队列,UI 永远卡在 queued。
- 将 install-manager.ts 的 queue-install 处理逻辑抽为导出的 addInstallTask(payload, sender),
  新增 QueueInstallPayload 类型,避免 any。
- 更新中心 service.ts 的 start() 改为直接 await addInstallTask(...),任务真正入队。
- 文档 docs/app-list-cache-analysis.md 新增第 9 节记录本修复。
2026-08-13 09:37:17 +08:00
xiyidaiwa a7b8cd52af fix(安全/性能): AI审查实证修复 - metalinkUrl SSRF校验 + withTimeout定时器泄漏 + 批量更新/初始加载守卫
- install-manager.ts: queue-install 增加 metalinkUrl 校验(仅允许相对路径或官方域名,防 SSRF)
- App.vue: withTimeout 用 finally(clearTimeout) 修复定时器泄漏
- App.vue: apps 批量更新改数组赋值替代 push(...),避免逐元素响应式重渲染
- App.vue: apps.length watcher 增加 initialCatalogLoaded 守卫,初始目录加载期间跳过已安装列表刷新 IPC
- 审计实证:①filename校验已有(误报) ④pauseDownload为历史TODO且后端不支持(不在此PR) ⑦⑧为可维护性大项(记录待后续)

注:AI审查4阻断项实证——①误报 ②真实加固 ③真实修复 ④历史遗留;4改进项 ⑤⑥真实已修 ⑦⑧记录
2026-08-12 20:28:27 +08:00
xiyidaiwa 30e1bc4840 refactor(更新中心): E方案重设计更新条目 + 已忽略沉底 + 复用app.update显示更新时间 + 安全加固
- UpdateCenterItem.vue: 改为单行紧凑卡片,显示 包名·当前→新版本、来源标签、更新时间(品牌色)、大小;已忽略项淡化
- updateCenter.ts: filteredItems 将已忽略项沉底到列表末尾
- UpdateCenterList/Modal + App.vue: 透传全局 apps,用 app.json 的 Update 字段(Date.parse)推算 updateTime,零额外网络请求
- typedefinition.ts + update-center/types.ts: 新增可选 updateTime 字段
- install-manager.ts: launch-app 补 pkgname.length > 256 长度限制(防 DoS)
- index.ts: close 事件先 clearTimeout 防抖定时器再同步保存窗口状态(消除竞态)
- App.vue: fetchWithRetry 重试 3→2、延迟 1000→500ms(体验优化)
- 7维审计通过;AI审查2阻断项(getIconUrl防护/fetchWithRetry泛型)经核实为误报
2026-08-11 23:54:00 +08:00
xiyidaiwa 7cafcc51f6 fix(download): 下载失败时补全日志,避免卡在"正在获取 Metalink"突兀退出
- 主进程 Metalink 下载请求失败显式 sendLog 并回传渲染端(原仅静默 logger.error)
- aria2c 拉起失败补 sendLog 日志
- Metalink 写入完成补 sendLog 提示
- 渲染端 install-complete 失败分支将错误原因写入 logs,并补成功/失败终止日志
- 配套: 缓存修复(C1 主进程 no-cache + C2 axios ?_t 版本戳) 已在上一提交实现
- 文档 docs/app-list-cache-analysis.md 新增第8节下载日志断层修复方案
2026-08-11 18:50:31 +08:00
xiyidaiwa 102ac72d89 fix: 安全加固 + 首页推荐优先加载解耦
- install-manager: queue-install JSON.parse 加 try-catch 防异常 payload
- App.vue: openExternalUrl 协议白名单(http/https) 防恶意 scheme
- AppDetailModal: sanitizeMoreContent 改用 textContent 防 v-html XSS
- storeConfig: loadPriorityConfig 校验顶层结构,畸形数据回退 APM
- App.vue onMounted: 首页推荐(loadHome+preloadHomeListApps) 与全量
  应用加载(loadApps) 解耦,进入软件即优先显示首页推荐
2026-08-10 23:40:21 +08:00
xiyidaiwa 3f22207505 fix/refactor: 更新中心扫描与多项安全加固(经专业审计)
更新中心扫描修复:
- updateCenter.ts: 抽出 runSystemUpdateThenLoad, open/refresh 共用,
  打开时即刷新双源(aptss ssupdate + apm update), 失败仅告警不阻断扫描
- shell-caller.sh: ssupdate 分支 exit $? 恒 0 吞掉刷新失败, 改为 exit $exit_code
- update-center/query.ts: 移除 nextVersion===currentVersion 误删真实更新项逻辑,
  信任 aptss 上游 upgradable 判断

安全加固:
- AppDetailModal.vue: 新增 sanitizeMoreContent 剥除 HTML 标签后再 v-html, 防 XSS
- InstalledAppsModal.vue: ALLOWED_LOCAL_ICON_PREFIXES 收紧为具体子目录, 缩小
  本地文件读取面
- install-manager.ts: filename 用 path.basename 防路径遍历; 包名/文件名 PKGNAME_PATTERN 校验
- index.ts: 临时目录改用 spark-store-${pid} 隔离, will-quit 清理对应目录

经 7 维度专业审计(安全/功能/类型/可维护/资源/性能/兼容)通过。
2026-08-10 21:42:36 +08:00
xiyidaiwa ae584730c4 refactor: 多维度代码审查修复(安全/清理/类型)
- src/App.vue:
  - fetchAppFromStore 的 category/pkgname 路径参数 encodeURIComponent 编码(防路径穿越)
  - img_urls JSON.parse 增加 try/catch,解析失败回退空数组(两处)
  - onUnmounted 统一移除 hashchange/resize/keydown 及全部 IPC 监听,修复内存泄漏
  - 提取 createFallbackApp 消除 openDetail 重复回退构造
  - 收集并统一停止等待 loading 的一次性 watcher,闭环生命周期清理
- src/global/typedefinition.ts: 移除 CategoryInfo/HomeLink 宽泛索引签名,
  CategoryInfo 改用显式 extra 字段
- electron/main/backend/install-manager.ts: 清理冗余 eslint-disable 并修正缩进
  (remove-installed/check-installed 已通过 parseAppPayload 完成 pkgname 校验,无需改动)
2026-08-06 22:06:43 +08:00
xiyidaiwa 3816703303 fix: 安全加固——queue-install 路径遍历校验 + 首页远程数据显式字段
针对 PR 安全审查的修复:

1. queue-install 路径遍历(阻断项,真实风险):
   install-manager.ts 直接用渲染进程传入的 pkgname 拼装下载目录
   /tmp/spark-store/download/ 与 ssinstall 命令参数 /,
   此前未做任何校验。复用模块顶部 PKGNAME_PATTERN 对 pkgname 与 filename 做白名单校验,
   拦截含 ../、/ 或非法字符的输入,杜绝路径遍历。

2. 首页远程数据展开(阻断项,纵深防御):
   App.vue loadHome 此前用 { ...l } 直接展开远程 homelinks.json 到响应式数组,
   可能注入未知属性。改为显式提取 name/url/icon/more/imgUrl/type/origin 已知字段构造,
   仅保留可信字段(url 仍做必需校验以保首页正常渲染)。

注:check-installed 白名单(审查第1项)此前已在 4f772ba7 通过 parseAppPayload 修复,本次无改动。

vue-tsc --noEmit 通过。
2026-08-03 14:17:45 +08:00
xiyidaiwa 4f772ba7eb fix: 安全与健壮性排查修复(IPC 类型校验/AbortSignal/空名去重/窗口 await)
阻断项:
- install-manager: uninstall-installed / remove-installed / check-installed 由 any 改为 unknown + parseAppPayload 严格解析(PKGNAME_PATTERN 校验 pkgname,origin 仅限 spark|apm),消除命令注入风险;parseAppPayload/PKGNAME_PATTERN 提升至模块顶部复用并避免 TDZ
- App.vue openDetail: 参数由 Record<string,unknown> 收紧为 App | OpenDetailInput,新增 pkgname 运行时校验,避免访问 undefined 属性

改进项:
- App.vue homeLinks 去重:跳过空名称避免污染 seenNames,并对 links 数组与 HomeLink 必需字段做校验
- App.vue fetchWithRetry: 新增 AbortSignal 参数,递归链路传递,组件卸载时 rootAbortController.abort() 取消未完成任务
- index.ts showAndFocusMainWindow: 改为 async 并 await createWindow,调用点用 void 修饰避免 floating promise

vue-tsc --noEmit 通过。
2026-08-03 11:24:32 +08:00
xiyidaiwaandshenmo7192 77b4244f1d !408 refactor(已安装应用): 合并 APM/Spark 分页为列表标签并新增统计
Merge pull request !408 from xiyidaiwa/Erotica
2026-07-29 06:47:41 +00:00
shenmo7192 0a6fcd95c7 feat(install-manager): 安装成功时跳过APM快捷方式创建,仅针对升级任务 2026-07-19 23:27:19 +08:00
shenmo7192 5e120d03ae refactor(installer): 更新下载重试策略为指数退避
将原来固定间隔的重试超时列表替换为指数退避的重试间隔,从首次3秒递增到末次1分钟,共10次重试,优化下载失败后的重试体验
2026-07-16 00:44:42 +08:00
shenmo7192 b233fea4d5 refactor(install): 重构下载安装队列逻辑,拆分并发控制
1.  将下载与安装流程分离,实现并发下载限制与单安装实例控制
2.  新增任务阶段枚举,替换原有activeDownloads计数逻辑
3.  优化取消任务的处理流程,区分运行中和排队中的任务
4.  修复下载队列显示的统计错误,改为展示已完成任务数
5.  调整日志格式与代码注释,提升可读性
2026-07-13 23:06:05 +08:00
MarcusPy827 2efea67a60 chore: APM桌面快捷方式补丁修正权限0755 -> 0644 2026-06-30 03:44:57 +08:00
MarcusPy827 51d7e1870c chore: APM桌面快捷方式补丁改用异步读取+修复过早return 2026-06-30 03:43:21 +08:00
MarcusPy827 98d6ebd2b4 chore: APM桌面快捷方式补丁改用异步读取+从XDG拿路径 2026-06-30 03:27:36 +08:00
MarcusPy827 6921350878 fix: APM安装软件后无法自动创建快捷方式的问题 2026-06-30 03:13:28 +08:00
sunnypai 399b59dae8 fix pkexec lookup for privilege escalation 2026-06-17 13:30:38 +08:00
sunnypai 601d3f51f4 add nixos support 2026-06-17 12:51:44 +08:00
shenmo7192 24d55d0997 refactor: 优化代码结构并新增多标签分类应用加载逻辑
1. 重构下载重试超时列表为多行格式提升可读性
2. 合并环境变量配置行简化代码
3. 新增多标签分类页面的应用加载能力,包括:
   - 添加displayCategories和displayApps计算属性
   - 实现loadTabCategories和loadTabApps加载子分类数据
   - 抽离normalizeAppJson复用应用数据格式化逻辑
   - 优化侧边栏分类切换的应用过滤逻辑
2026-05-30 20:41:59 +08:00
shenmo7192 f62665cd73 release: bump version to 5.1.1 and fix dns download issue
add --async-dns=false aria2 parameter to all download jobs to fix potential dns resolution failures during package download
2026-05-16 02:35:29 +08:00
shenmo7192 e16acbd0a5 refactor(installer): 调整下载重试超时配置和次数
更新了下载重试的超时时间列表和总重试次数,从原3次调整为10次,优化下载成功率
2026-05-13 21:13:25 +08:00
shenmo7192 8a5f8d154f feat: 添加APM安装确认弹窗并重构APM检查流程
1. 新增全局状态控制APM安装弹窗显示
2. 新建ApmInstallConfirmModal弹窗组件
3. 将主进程的APM安装弹窗逻辑迁移到前端Vue组件
4. 更新package.json版本到5.1.0
5. 简化安装和升级流程中的APM检查逻辑
2026-05-12 21:54:47 +08:00
momen 0b784af3d7 fix(sources): hide unavailable update and management entries 2026-04-16 13:04:54 +08:00
shenmo7192 68dd6a0a26 perf(spark): 优化已安装应用检查逻辑
- 对于 Spark 应用,使用 dpkg-query 替代自定义脚本检查安装状态
- 在 list-installed 接口中支持传入包名列表进行批量检查,避免全量扫描
- 添加 aptss 可用性检查,避免在不可用时执行相关命令
- 移除冗余的 check-installed 二次验证步骤
2026-04-16 00:10:14 +08:00
shenmo7192 a280d44481 fix(下载队列): 为滚动容器添加overscroll-contain防止滚动溢出
refactor(安装管理器): 移除upgradeOnly逻辑并统一使用ssinstall命令

test(更新中心): 更新测试用例以匹配新的安装逻辑
2026-04-12 21:25:10 +08:00
shenmo7192 9244708b90 feat(安装管理器): 添加安装参数以禁用桌面快捷方式和使用原生安装
添加 --no-create-desktop-entry 和 --native 参数以避免创建桌面快捷方式并确保使用原生安装方式
2026-04-12 21:14:06 +08:00
momen 0b17ada45a feat(update-center): 实现集中式软件更新中心功能
新增更新中心模块,支持管理 APM 和传统 deb 软件更新任务
- 添加更新任务队列管理、状态跟踪和日志记录功能
- 实现更新项忽略配置持久化存储
- 新增更新确认对话框和迁移提示
- 优化主窗口关闭时的任务保护机制
- 添加单元测试覆盖核心逻辑
2026-04-09 08:19:51 +08:00
shenmo7192 1618b9a82f fix(install-manager): 修正APM安装成功后的提示信息
更新安装成功提示信息,移除关于启动器展示应用的说明,并明确重启电脑后才能使用全部功能
2026-04-05 11:58:22 +08:00
momen fdb5f4a51c update:apm管理改为应用管理 2026-03-31 20:25:44 +08:00
shenmo7192 57410370b7 feat(apm): 在安装和更新应用前检查并提示安装APM
添加APM可用性检查逻辑,在安装或更新APM应用时,若检测到APM未安装,则弹出对话框提示用户安装
安装流程完成后显示成功提示并告知需要重启电脑
2026-03-30 18:39:03 +08:00
shenmo7192 e7fb8e689a feat(应用详情): 增强应用详情页功能并优化代码格式
重构应用详情页逻辑,支持从首页和深度链接直接打开应用时自动获取完整信息
优化应用卡片来源标识显示,支持同时显示多个来源
统一代码格式,修复多行字符串和模板字符串的换行问题
2026-03-29 17:21:17 +08:00
shenmo7192 94f4307783 perf(安装日志): 优化安装日志处理性能
添加日志缓冲和批量发送机制以减少IPC通信次数
限制前端日志条目数量防止内存泄漏
2026-03-29 16:36:58 +08:00
shenmo7192 2d02e2afee fix(install-manager): 取消安装时删除下载目录
在取消安装任务时,增加删除下载目录的逻辑以避免残留文件
2026-03-29 15:23:24 +08:00
shenmo7192 33c48f4543 fix(安装管理): 将 ssaudit 命令替换为 ssinstall 并添加版本检查
弃用 ssaudit 命令,统一使用 ssinstall 进行安装
在 shell-caller.sh 中添加对 ssaudit 的禁用检查和 ssinstall 失败时的版本提示
2026-03-29 14:24:58 +08:00
shenmo7192 1e6e776afe fix(install-manager): 改进已安装应用列表的解析逻辑
增强对APM包名的解析,支持带或不带section的格式
添加更多调试日志以帮助排查问题
2026-03-29 12:48:09 +08:00
shenmo7192 596515e0a4 fix(install-manager): 优化已安装应用列表获取逻辑并改进安装成功提示
使用 `apm list --installed` 命令替代直接读取文件系统来获取已安装应用列表,提高可靠性
改进安装成功提示信息,更清晰地说明重启和立即使用的选项
2026-03-29 12:43:05 +08:00
shenmo7192 aec1faf964 fix(install): 允许添加不同来源的安装相同包名任务
改进任务重复检查逻辑,现在会同时检查软件包名称和来源
修复取消下载时未正确处理任务状态的问题
```

```msg
ci: 添加测试和构建的GitHub Actions配置文件

添加test.yml和build.yml的备份文件,包含单元测试、E2E测试和构建流程
2026-03-29 12:23:32 +08:00
shenmo7192 033735d476 fix(下载): 优化下载重试逻辑,使用递增超时时间
将固定30秒超时改为递增超时机制(3秒/5秒/15秒)
缩短进度检查间隔至1秒,提高响应速度
2026-03-29 12:06:10 +08:00
momen d638ef7122 fix:修复取消下载后无法重试下载的问题,修复重试下载后没有日志输出的问题 2026-03-27 11:39:36 +08:00
momen 835572dabd update:重复下载包时删除掉已有包 2026-03-27 11:33:57 +08:00
shenmo7192 7ff079276e feat: 添加 APM 应用管理功能并优化界面
- 新增 APM 应用管理功能,支持显示已安装应用及其依赖项
- 优化已安装应用列表界面,增加应用图标和名称显示
- 调整顶部操作栏布局,将设置和关于按钮移至搜索框旁
- 修复类型定义,增加 isDependency 字段和更多应用信息
- 改进暗色模式下的界面显示效果
2026-03-24 20:47:55 +08:00
shenmo7192 480a7f3b77 update 降低超时时长 2026-03-22 19:29:33 +08:00
shenmo7192 c7761e8468 fix(下载): 增强aria2c下载的稳定性和重试机制
添加连接超时、下载超时和重试参数配置
实现0%卡死检测和自动重试逻辑
移除冗余的dpkg-query检测代码
优化安装按钮状态判断逻辑
更新版本号至4.9.9alpha4
2026-03-22 18:35:41 +08:00
shenmo7192 6729e321a6 去除界面优化 2026-03-15 17:00:58 +08:00
shenmo7192 dbfe86aa64 feat: enhance UI and functionality across components
- Added Google Fonts preconnect and stylesheet link in `index.html` for improved typography.
- Updated version in `package.json` to `4.9.9alpha3`.
- Refined launch configuration by removing deprecated arguments.
- Improved app detail modal and card components for better accessibility and visual consistency.
- Enhanced download queue and sidebar components with updated styles and functionality.
- Implemented new utility classes for better styling control in CSS.
- Adjusted various components for improved responsiveness and user experience.
2026-03-15 15:21:29 +08:00