yu
902ee0cec4
File_File_Move 目标为已存在目录时自动移入该目录
...
此前 pathDest 被固定当作完整目标文件路径, 目标填分类目录时
rename(文件->目录)失败, fallback cp 报 ENOTDIR(cannot overwrite
directory with non-directory), 文件整理类流程无法用目录作目标。
现在目标存在且为目录时自动拼接源文件名(移入语义), 目标不存在
仍按完整文件路径处理。
附: 晨间助手全家桶测试流程生成脚本(30节点, 文件整理+记事本
键鼠+Excel加工+OCR/AI)
2026-11-05 16:05:07 +08:00
yu
b59d906161
Merge branch 'main' of http://43.140.215.244:7040/wangyukun/PRA-only-demo
2026-11-05 14:59:32 +08:00
yu
e25121660d
修复点击验证误报与相似元素列表全重复等运行时问题
...
- 点击可信验证增加两类生效旁证: 页面跳转/新开标签页(淘宝搜索按钮),
点击后元素整体消失(关闭登录弹窗); 此前均被误报为"目标未收到可信点击"
并在节点超时内反复重试, 造成"点击生效却等很久还报错"
- 相似元素列表引用增加 index 序号: 动态id泛化后各卡片选择器相同,
46 条引用全部命中第一张卡导致抓取结果全重复;
修复 NodeList 无 indexOf 的 TypeError 被静默吞掉导致序号从未写入
- 元素定位改为两段式: 先在当前附着页查找, 找不到才跟随前台标签页,
避免多标签环境下被无条件切到 pages[0] 导致找错页面
- 新开标签页优先复用启动残留的 about:blank 空白页, 不再堆积空标签
- AI 能力输入识别增加 hint_word 字段(此前提示词读到的是空)
- try_catch 捕获子步骤失败时记录 warn 日志, 不再静默
- Excel 落盘遇 EBUSY(文件被打开占用)时自动另存为带时间戳的文件
- 新增 similar-list.test.ts 端到端回归(46 卡片动态 id 真实浏览器验证)
- 新增 export-last-run.js: 从运行记录导出比价 Excel
2026-11-05 14:57:33 +08:00
yu
9e12431db8
fix: notice dialog topmost - owner form pattern instead of invalid enum value
...
262144 (Win32 MB_TOPMOST) has no mapping in the .NET MessageBoxOptions enum, whose
only members are RightAlign/RtlReading/ServiceNotification etc., so PowerShell
rejected it: "cannot convert 262144 to MessageBoxOptions" (second failure of the
topmost attempt). Correct documented way is passing a TopMost invisible owner
form as the first argument of MessageBox.Show. Wrapped in try/catch that falls
back to a plain Show, so the dialog can no longer fail the node even if the
owner pattern misbehaves on some machine.
2026-11-05 13:48:49 +08:00
yu
124f11bd6b
fix: Dialog_Notice/MsgBox MessageBox options arg - invalid HelpButton value
...
Previous topmost attempt passed 'HelpButton' in the MessageBoxOptions position of
MessageBox::Show, so PowerShell failed at runtime with "cannot convert value
HelpButton to type System.Windows.Forms.MessageBoxOptions" (reproduced in flow run:
notice node failed at char 196). Now passes the documented MB_TOPMOST flag
(MessageBoxOptions)262144 as the 6th argument, keeping the six-argument overload
(OK / Information / Button1 / topmost).
2026-11-05 13:43:44 +08:00
yu
0db3e59f75
fix: File_DecompressFile misleading "ADM-ZIP: Invalid filename" for missing archive
...
adm-zip throws "ADM-ZIP: Invalid filename" both for corrupt entries AND when the
archive file simply does not exist, which sent us chasing phantom filename issues.
Now the handler checks file existence first and reports "压缩包不存在:<path>" with a
recommendation pointing out that File_CompressFile appends .zip to the full source
name (a.txt -> a.txt.zip) and that the compress node's output variable should be
used to chain the real artifact path.
2026-11-05 13:40:29 +08:00
yu
624d13f2ef
fix: StrUtil_Replace enum mapping - search select value was treated as literal text
...
Catalog contract: search is a select ("0"=content / "1"=digits / "2"=phone / "3"=email
/ "4"=ID card / "5"=custom regex) with the target in Config. Old implementation used
first(args, ["search","Config"]) so the enum value "0" was split on as literal text,
making content-replace never work (same family as W26-W33 enum mapping bugs).
Now implements all six modes with preset patterns, regex mode guarded by try/catch,
and falls back to legacy literal behavior when Config is empty.
2026-11-05 13:22:43 +08:00
yu
47b7a43be2
Merge branch 'main' of http://43.140.215.244:7040/wangyukun/PRA-only-demo
2026-11-05 13:04:49 +08:00
yu
36b268f74c
运行时元素操作跟随前台标签页\n\n- 点搜索/按钮常开新标签页, 此前运行时元素操作仍附着旧标签页,\n 导致新页上的拾取选择器找不到元素、相似元素列表抓到空\n- evaluate 入口增加前台标签页检查(400ms 节流), 变化时 activateTab 切换附着
2026-11-05 13:01:27 +08:00
yu
21a400e172
运行前校验识别循环容器注入的迭代变量\n\n- 数组/字典循环运行时注入 item/index/value, 计数循环注入自定义索引变量\n- 校验器原先只认 flow.variables 与节点输出变量, 对循环体内引用误报未定义变量警告
2026-11-05 12:47:01 +08:00
yu
4af6bd0693
修复模板字面量吃掉正则反斜杠: \\d{6,} 改为 [0-9]{6,}
...
- 引导脚本为 TS 模板字面量, 编译时 \\d 被当作无效转义吞掉反斜杠,
运行时正则退化为字面量 d{6,} 永不匹配, 动态id泛化从未真正生效
- 此前端到端验证直接注入源码原文绕过了模板编译, 故未暴露
- 改用 [0-9] 从根源规避转义问题; 已用 bundle 提取的真实运行时脚本验证通过
2026-11-05 12:24:56 +08:00
yu
3e4ded9f5f
动态id泛化阈值放宽为命中1个即泛化, 修复渐进渲染期拾取仍生成唯一id
...
- 浏览器刚拉起页面渐进渲染时仅 1 张卡, 原 >1 阈值不满足而回退唯一 id
- 动态数字 id 模式下命中 1 个即泛化(与原 id 等价, 零风险), 后续渲染出的同类卡也能命中
2026-11-05 11:53:26 +08:00
yu
6a27ede6d9
元素拾取强制接管残留拾取器, 修复强杀应用后拾取永远走旧逻辑
...
- 根因: 应用被强杀时页面上残留 active 拾取器(__rpaPickerActive.active=true 永久为真),
引导脚本防重入守卫直接 return, 之后每次拾取都由旧代码残留监听器响应, 选择器无法更新
- 引导脚本改为强制接管: 发现 active 残留先 cancelHard/cancel 并清状态再启动
- pickElement 注入前同步清理残留拾取器/宿主元素/结果变量
2026-11-05 11:41:41 +08:00
yu
20d224a46b
fix: input dialog invisible - replace VB InputBox with topmost WinForms form
...
Root cause of second failure (120s timeout): VB InputBox has no topmost
flag and no taskbar presence, so it renders BEHIND the main window.
User never sees it, flow waits until node timeout (120000ms).
Fix:
- Dialog_InputBox now builds a WinForms form with TopMost=true,
ShowInTaskbar=true, CenterScreen, OK/Cancel buttons
- MessageBox notice adds MB_TOPMOST via options param
- Flow updated: 3 sequential InputBox nodes replaced by ONE
Dialog_GetConfigV7 form (topmost BrowserWindow via host bridge),
3 fields filled in a single window, wait_time=10min
- Flow node timeout raised to 660s to exceed the 600s PS-level wait
- Fixed latent bug: Time_WeekDay node had empty outputVar, so
the "星期几" variable never existed
2026-11-05 11:27:01 +08:00
yu
cf1e560802
元素拾取泛化动态记录id: 长数字结尾唯一id自动转为前缀匹配
...
- 淘宝等站点卡片根节点 id 为动态记录 id(如 item_id_1087512368188), 原样生成导致选择器只命中一张卡
- stable() 检测 id 以长数字(6位以上)结尾时, 若 [id^=前缀] 命中多个元素则优先采用, 使选择器覆盖所有同类卡片
- 拾取器与元素引用两处 cssPath 同步修改
2026-11-05 11:15:36 +08:00
yu
309898045c
元素拾取悬停0.3秒自动钻入子元素, 无需先锁定再调层级
...
- 进入新交互区域先吸附交互元素, 悬停300ms后自动钻入光标最深处
- 钻入后跟随光标在卡片内部移动; PageUp/PageDown 保留为手动上下调层(未锁定时直接锁定)
2026-11-05 11:11:03 +08:00
yu
15fcf66972
fix: dialog components killed at 30s, pass proper timeout to powershell
...
Root cause: Dialog_InputBox and other blocking dialogs wait for user
input, but powershell() default timeout 30000ms kills the still-waiting
dialog process, reporting generic "Command failed" (reproduced: run
failed at 30.08s).
Fix:
- InputBox/Notice default wait 600s, adjustable via wait_time arg
- File dialogs (OpenFile/OpenFiles/SaveFile) wait up to 30min
- InputBox timeout reports dialog_timeout with clear guidance instead
of misleading command failure
2026-11-05 11:08:41 +08:00
yu
150d7ce9c9
元素拾取支持钻入子元素: PageDown 沿锁定元素向下进入卡片内部子节点
...
- 悬停时记录光标下最深元素, 锁定时把锁定元素到最深元素的子级路径并入调整链
- 场景: 淘宝搜索结果整卡为链接, 标题/价格是链接子元素, 此前只能沿祖先向上调层级选不到
2026-11-05 10:57:24 +08:00
yu
91d998b2ea
元素拾取跟随前台标签页: 点搜索等开新标签页后附着目标自动切换
...
- pickElement 轮询前经 /json/list 检查前台标签页, 变化时 activateTab 切换附着并重新注册/注入拾取脚本
- 结束时对所有已附着标签页清理拾取残留, 并移除全部 addScriptToEvaluateOnNewDocument 注入
2026-11-05 10:12:59 +08:00
yu
5250bf1e35
元素拾取支持页面跳转后继续拾取; 恢复 ws 根依赖声明修复启动崩溃
...
- pickElement 重构: 拾取脚本经 Page.addScriptToEvaluateOnNewDocument 随新文档自动重注入,
主进程轮询 __rpaPickResult, 用户拾取期间可翻页/搜索/过滑块, 页面跳转不再使拾取失效
- 恢复 package.json ws 根依赖与 electron.vite.config include:[ws]
(合并时被覆盖导致 dev 启动报 bufferutil 解析错误)
2026-11-05 10:07:48 +08:00
yu
2ae1010f67
Merge branch 'main' of http://43.140.215.244:7040/wangyukun/PRA-only-demo
2026-11-04 18:26:06 +08:00
yu
8e711d502e
docs: 补记工作日志(元素拾取残留浏览器修复)
2026-11-04 17:45:42 +08:00
yu
ea3ff0b891
修复元素拾取 Chrome 启动失败(exit 0): 残留实例占用专用 profile
...
根因: 上次运行遗留的 Chrome 仍占用 rpa-studio-external-* profile 时,
再次启动的 Chrome 会把请求转交旧实例并立即退出(代码 0), 报
「Chrome 启动失败(进程已退出,代码 0)」。
- external: 子进程立即退出时清理占用该 profile 的残留进程并重试一次
(win32 按命令行中的 user-data-dir 过滤杀进程, 其他平台 pkill -f)
- 启动参数加 --hide-crash-restore-bubble, 避免固定 profile 被强杀后
「恢复页面?」气泡遮挡页面拾取
- 验证: 故意拉起无调试端口的同 profile Chrome 后跑浏览器 e2e, 自动
清理重试生效, 演示流程 succeeded
2026-11-04 17:45:29 +08:00
yu
02af3478a7
打包脚本支持 RPA_SKIP_TESTS=1 跳过单测(本地应急打包用)
2026-11-04 17:42:14 +08:00
yu
b929f86525
键盘冒烟目标窗口断言改为窗口存在性: Win11 记事本会话恢复致标题漂移
2026-11-04 17:42:14 +08:00
yu
d638d44c79
桌面元素组件目标框占位提示改用 name=/type= 语法, 不再误导为浏览器选择器
2026-11-04 17:42:14 +08:00
yu
abb3d26acd
元素点击未生效(clicked=false)改为抛错, 按错误契约给出拾取建议
2026-11-04 17:42:14 +08:00
yu
61a7f60a0e
docs: 补记工作日志(分享/导入功能与EPERM修复)
2026-11-04 17:34:23 +08:00
yu
f95a24458e
新增任务分享/导入功能并修复只读文件保存 EPERM
...
- flows: writeFlowFile 覆盖写加固(清只读属性->删除后 rename->覆盖写),
外部复制导入的只读任务文件此前导致 flows:save EPERM 崩溃
- flows: exportFlowToPath/importFlowFromPath, 分享文件为单个 FlowDefinition
JSON(.rpaflow.json); 导入校验 schemaVersion/nodes/edges, id 冲突时生成
imported_ 前缀新 id 绝不覆盖既有任务
- IPC: flows:export 弹保存对话框 / flows:import 弹多选打开对话框,
失败文件逐个汇报不阻塞其余
- preload: flows.export/flows.import; shared: FlowsImportResult 类型
- TasksPage: 头部「导入任务」按钮 + 每行「分享」按钮; App 接线与 toast
- 测试: 导出/导入往返、id 冲突、非法文件原因、只读覆盖共 4 例(7/7 绿)
2026-11-04 17:31:44 +08:00
yu
22a7ee1595
修复外部浏览器 CDP 无响应: ws 从主进程 bundle 外部化
...
根因: ws 被打进主进程 bundle 时, 其可选依赖 bufferutil 的打包解析产物
破坏了客户端发帧的 mask fallback; permessage-deflate 协商开启时错误被
压缩路径静默吞掉 —— 表现为 ws 握手成功但所有 CDP 命令零字节发出、
无响应(输入文本节点 10s 超时), dev 与打包版皆受影响。
- electron.vite.config: externalizeDepsPlugin include ws, 运行时 require
- package.json: ws 提升到根依赖, electron-builder 随包收集
- electron-builder.config: 确认 node_modules/ws 进入 asar
- transport: 显式 perMessageDeflate:false(双保险, 附注释)
- package.mjs: verifyLaunch 剥离 ELECTRON_RUN_AS_NODE/NODE_OPTIONS,
防止外部工具链环境把打包应用带进纯 Node 模式(bad option 退出码 9)
- flows: 演示流程支持 RPA_DEMO_BROWSER 强制指定浏览器(Chrome 缺装回退 Edge)
验证: 全量测试 349 绿 + 浏览器 e2e 绿 + portable/NSIS 双冒烟通过,
安装包/zip/SHA256 已产出。
2026-11-04 17:19:32 +08:00
yu
3a9a8b63c2
合并 origin/main: psText 非 ASCII 修复移植到 rpa-core 新结构
...
- driver/windows 下助手模块新增导出 psText(远端 1c5d981 修复实现)
- WindowsDriver: 旧 psCharLiteral([char] 相加 bug)改为委托 psText;
窗口查找/激活的错误消息与剪贴板粘贴/SendKeys 内嵌文本统一 psText
- system-extended: 保留 driver 抽象, Clipboard_SetTextV1 走 psText
- window-extended: 取本地 driver 版(远端 findWindow 由 driver 承担)
- src/main/capabilities/desktop.ts 保持删除(已迁移 rpa-core)
- compat-audit.test.ts 迁至 packages/rpa-core/src/capabilities/
2026-11-04 14:51:33 +08:00
yu
a8084dca26
阶段5-独立验证: 新增rpa-cli.ts CLI host(createEngine+registerAll零Electron跑通5个代表能力: 桌面/Excel/HTTP/文件/屏幕), 新增rpa-cli脚本与tsx依赖; 5.2 Bun冒烟按决策10延期到迁入Agent-Employee时执行; 5.3回归三项全绿
2026-11-04 13:49:27 +08:00
yu
b54311d467
阶段4-tool契约: register支持CapabilityMeta(决策8 meta可选+新能力强制), 新增registerAll显式注册入口双入口过渡(决策9), RUNTIME_ERROR_CODES错误码固化+audit校验, 规范v1同步收紧
2026-11-04 13:41:24 +08:00
yu
e691b9fa78
阶段3-driver抽象: powershell助手拆至driver/windows, 五域AutomationDriver接口+WindowsDriver(PowerShell实现行为不变), desktop/window-extended/system-extended/common-final改走driver, catalog构建填充platformTag=win32
2026-11-04 13:28:32 +08:00
yu
3decced268
阶段2-断Electron依赖: human-dialog/window-extended/ai-service经HostBridge迁入包, external+transport迁包(session留宿主), 新增check:deps依赖护栏与包README留守清单
2026-11-04 12:57:41 +08:00
yu
caa8e19332
阶段1-rpa-core建包: engine+31个纯Node能力迁入packages/rpa-core, 领域类型单一源化, createEngine工厂收拢模块级状态
...
- engine/(registry/types/runtime/expression)物理迁入包, 解耦shared/types(域类型归包, 宿主type-only re-export)
- 31个纯Node能力+27个测试迁入包; 宿主留守Electron/浏览器/AI依赖能力, index.ts经@rpa/core/capabilities拉起
- 新增createEngine()/defaultEngine: excel缓存/Excel句柄/db连接/FTP客户端/OCR实例/拟真设置挂引擎实例
- remaining-core子流程依赖改为host-bridge注入, 包内不再import宿主flows
- 宿主main/index.ts启动时注入子流程源; electron-vite/vitest/tsconfig配@rpa/core源码别名
- 验证: typecheck绿, 快照909个id diff为零, 332测试过(2个桌面冒烟因会话无交互SetForegroundWindow被拒, 环境阻塞)
2026-11-04 12:36:03 +08:00
yu
4139400dbd
阶段0-基线与护栏: 修复不可移植/抖动测试全绿(341过), vitest串行执行防桌面竞争, 新增运行时能力注册快照(909个id)
2026-11-04 11:53:41 +08:00
yu
f35f0ac979
files 能力增强与 vision 校验修复;落盘 rpa-core 抽离改造任务清单与开发规范
2026-11-04 10:14:55 +08:00
yu
1c5d981e38
系统级组件兼容性审查: psText 统一非 ASCII 安全字面量
2026-11-04 10:11:31 +08:00
yu
b242b9c4fe
键盘输入兼容性: DriveSend 家族纳入文本语义并补四类回归
2026-11-04 09:47:19 +08:00
yu
1ff6f59990
非 ASCII 字符走 char code 构造绕开智能引号解析陷阱
2026-11-04 09:36:45 +08:00
yu
143fcae34a
修复撇号字符数组转义顺序导致字符串未闭合
2026-11-04 09:28:46 +08:00
yu
bb03699cce
键盘输入转义逻辑移到 JS 侧根治脚本语法错误
2026-11-04 09:14:09 +08:00
yu
f390db9c94
错误输出通道改造: GBK 回退解码与 RPA_ERROR 标记防截断
2026-11-03 17:43:46 +08:00
yu
e1f162aa82
错误信息解码与窗口列表提示
2026-11-03 17:19:22 +08:00
yu
3a9b4fa3c7
窗口激活多招式兜底修复 Studio 前台下切窗失败
2026-11-03 17:09:45 +08:00
yu
8d6f0ff755
键盘输入支持选择输入目标窗口
2026-11-03 16:56:10 +08:00
yu
46348413c1
键盘输入组件修复: 接入 words 字段与三种输入方式
2026-11-03 16:38:03 +08:00
yu
6b05a65664
鼠标组件坐标修正: DIP 转物理像素修复缩放屏偏移
2026-11-03 16:28:52 +08:00
yu
158104661c
fix: 移动鼠标支持对象坐标x/y(屏幕框选生成格式,此前报坐标无效), 实现三种移动方式(模拟人工缓动抖动/匀速直线/瞬间)与移动速度, 相对激活窗口模式叠加前台窗口偏移, 补DPI感知, 冒烟4项真实落位通过
2026-11-03 16:15:03 +08:00