xiaoshuai
|
090bc3593f
|
docs: AGENTS.md 加上 selftest:package 命令
|
2026-10-20 17:06:32 +08:00 |
|
xiaoshuai
|
c3eb079fdb
|
test(package): 加打包产物冒烟检查 (原生模块解包 + 从 app.asar 真实 spawn)
自测 (scripts/selftest/main.ts) 是从**源码**跑的, 用 pty 桩, 根本不碰 app.asar。
而 asarUnpack 配错这类问题只在**打包产物**上才暴露, 且 Linux 上看不出来
(只需要一个 .node, Electron 能 dlopen 归档里的; 但 unpacked 里没有就彻底找不到),
到 Windows 才炸 (conpty.dll / OpenConsole.exe / worker 脚本都必须是真实文件)。
新增 scripts/selftest/packaging-check.cjs (npm run selftest:package):
- node-pty 平台包的 prebuilds 下必须有 .node/.dll/.exe (即规则递归生效)
- 其它原生模块 (node-hid / serialport / node-usb) 也要解包
- 从 app.asar 里 require node-pty 并真实 spawn, 验证拿到输出
已用人为破坏的解包布局验证过这个检查确实会失败:
"平台包的 prebuilds 下没有任何原生文件 —— 规则可能没递归"
"Failed to load native module: pty.node"
|
2026-10-20 17:06:24 +08:00 |
|
xiaoshuai
|
f158377742
|
fix(compat): Windows 兼容性修复 + 跨平台兼容分析
终端在 Windows 上起不来 (打包规则漏解包)
- 根因: build.asarUnpack 写的是 "**/node_modules/@lydell/node-pty-*/*", 只匹配一层,
于是 prebuilds/<plat>/ 下的文件没被解包, 留在 app.asar 里
- Windows 上这些必须是磁盘上的真实文件: conpty.dll (OS loader 加载)、
OpenConsole.exe (CreateProcess)、以及 node-pty 用 worker_threads.Worker 起的
conoutSocketWorker.js —— node-pty 本身就写了
__dirname.replace('node_modules.asar', 'node_modules.asar.unpacked') 来适配
- Linux 上看不出来: 只需要一个 pty.node, Electron 的 asar 层能 dlopen 归档里的 .node
- 修复: 规则递归化为 "**/node_modules/@lydell/node-pty-*/**/*"
- 验证: 重新打包后 pty.node 已落到 app.asar.unpacked, 安装版真实 spawn 成功
Windows 保留设备名 / 尾部点空格导致落盘写错
- 新增 src/main/safe-name.ts 的 safeFileName()
- Win32 把 CON/PRN/AUX/NUL/COM1-9/LPT1-9 (带扩展名也算) 当设备, open() 打开的不是文件;
还会悄悄吃掉文件名结尾的点和空格, 导致 existsSync 判断和实际落盘对不上
- 两处落盘都接上: file-server.ts 的 targetPath()、drive.ts 的 downloadDriveFile()
(后者名字来自对端共享目录, 属不可信输入)
- 策略是"最小必要": 非法字符全平台都清, 保留名和尾点空格只在 win32 上改写,
避免动到 Linux 上合法的文件名
其他
- 终端 cwd: Windows 优先用 USERPROFILE (装了 Git Bash 时 HOME 可能是 POSIX 路径, Win32 下不存在)
- USB 面板空列表提示按平台给, 不再一律说"Linux 用户需要在 dialout 组"
分析文档与自测
- 新增 docs/windows-compat.md: 各原生模块的 N-API 情况、已有 win32 分支的位置、
已知限制 (ConPTY 需 Win10 1809+、防火墙首次弹窗、USB 需 WinUSB 驱动等)、
以及一份 Windows 真机验证清单
- 自测新增 S1-S8 组: 保留名改写、尾部点空格、非法字符、跨平台不过度清洗、
超长截断、默认 shell/cwd、asarUnpack 规则回归护栏、上传落盘 + 路径穿越
- 全部 38 条用例通过
|
2026-10-20 16:59:26 +08:00 |
|
xiaoshuai
|
a79086e4e8
|
feat: 网盘浏览下载 + 远程功能修复 + 连接状态同步 + Linux 图标打包
新增网盘功能
- FileServer 增加 GET /drive/meta|list|download, 每机长期 token 校验 + 目录穿越防护
- 新增 drive.ts 客户端: listDrive / getDriveRoot / downloadDriveFile / collectDriveFiles
- ipc 暴露 drive:list|root|download|openFolder|pickDir, DB 增 drive_token 列 + ALTER 迁移
- 新增 DrivePanel.vue, 聊天框加"网盘" tab, 设置页加网盘分区
- 支持整目录递归下载并保持层级
修复远程功能
- 终端: 控制端收到的 output 帧被直接丢弃 (case 'output': return), 导致 xterm 全空白
- ChatServer: ws 构造即 listen, 'listening' 可能早于 start() 挂监听, 导致永久挂起
- USB: serverAttach 自行生成 sessionId 与控制端不一致 (数据帧查表落空);
libusb 枚举误用 getDevices() (WebUSB 语义, 只返回已授权设备) 改 loadDevices();
control transfer 传数字 bmRequestType (node-usb v3 要字符串枚举);
detachKernelDriver 挪到 selectConfiguration 之前 (否则 EBUSY)
- 转发 UI: store 的 onOpened 是 no-op 致对方发起的转发不显示、无轮询致流量/TTL 不刷新、
对方发起的会话关不掉 (新增 closeSession, server 侧关闭需通知对端否则端口泄漏)、
入口/目标补归属标注、方向标签语义统一、监听端口输入框加宽
修复"在线却显示等待重连"
- 根因: 启动时主进程先连上对端 (connectTo 早于 createMainWindow), device:wsState
在渲染层订阅前发出去被丢弃; 之后连接一直保持, 再无 open 事件 -> UI 永久停在等待重连
- 改为推全量快照 + 渲染层 mount 时主动拉取 (app:state); 渲染层先注册监听再 await
- 通道语义改为 outgoing 或 inbound 任一 WS 活着即可用 (原来只看 outgoing)
修复 Linux 安装后没图标
- linux.icon 指向单张 PNG 时 app-builder 解析不出尺寸 (size=0), 图标被装进
hicolor/0x0/ 非法目录, 桌面环境找不到; 改为指向 resources/icons 目录 (8 个标准尺寸)
- StartupWMClass 填的是 productName, 与窗口真实 WM_CLASS (可执行文件名) 对不上,
任务栏找不到启动器; 改为 local-net-msg
其他
- 新增 scripts/selftest 自测框架 (两个虚拟节点 + 真实 ChatServer/ChatClient), 30 条用例全过
- 重写 scripts/make-icon.js 生成多尺寸图标集 (原脚本引用的源图已不存在, sharp 依赖也缺)
- 新增 docs/drive.md, docs/connection-status.md
|
2026-10-20 16:43:56 +08:00 |
|
xiaoshuai
|
ec9f854136
|
chore: remote forwarding integration
|
2026-07-17 18:16:11 +08:00 |
|
xiaoshuai
|
d12c74649a
|
feat(remote): serial/USB/USBIP remote forwarding with virtual serial port
|
2026-07-17 18:13:55 +08:00 |
|
xiaoshuai
|
565d044f18
|
feat: add message management and delivery states
|
2026-07-16 17:23:24 +08:00 |
|
xiaoshuai
|
07c7260a3c
|
initial: LAN IM desktop app (Electron 32 + Vue 3 + TS + SQLite)
|
2026-07-15 18:31:13 +08:00 |
|