|
|
voldev-ide.7z
(13.64 KB, 下载次数: 0)
pctest.7z
(5.43 KB, 下载次数: 0)
【火山ai智能体自动编译调试火山代码】 https://www.bilibili.com/video/B ... 9e58e0e9c3820bbe4bf
gitee开源项目地址 https://gitee.com/ym668/VoldpAiAgent
github开源项目地址 https://github.com/jcdz-bot/VoldpAiAgent
『来自123云盘用户的分享』
https://1815868431.share.123pan.cn/123pan/2JmLVv-JMlF
项目QQ交流群1061906333
20260715更新Ver1.3.5:
修复
### 修复 1:技能市场"加载中..."按钮卡住 — loadMarketSkills() 在 try 块中调用 renderMarketList(),此时 _marketLoading 仍为 true 导致按钮渲染为"加载中..."。已将 renderMarketList() 移到 finally 块中,并改为分页模式(游标栈支持上一页,next_cursor 支持下一页)。
### 修复 2:ClawHub 数据源切换页码显示错误 — 从 SkillHub 切换到 ClawHub 后页码仍显示 SkillHub 总页数。根因是 _marketTotal 在 loadMarketSkills('reset') 时未重置。已在 reset 操作中添加 _marketTotal = 0。
### 修复 3:安装技能返回 403 Forbidden — 前端 index.html 将 /api/market/install 列为 CSRF 豁免(不发 CSRF 令牌),但后端 main.wsv 的 csrfExemptPaths 缺少这两个路径。已在后端 CSRF 豁免列表添加 /api/market/install 和 /api/market/uninstall。
### 修复 4:安装按钮卡在"安装中..."不消失 — 两个原因:① 前端 api() 默认 60 秒超时 + 3 次重试(共 180 秒),歧义 slug 安装需 60-90 秒;② _closeMarketConfirmDialog() 有"安装中不可关闭"守卫,成功路径调用时 installing 仍为 true。已为安装请求设置 timeoutMs:300000、retry:0,并在调用 _closeMarketConfirmDialog() 前将 installing 置 false。
### 修复 5:local-skills.json 返回 HTML — 后端 NoRoute 处理器在 dir/local-skills.json 找不到文件(实际在 dir/static/local-skills.json),触发 SPA fallback 返回 index.html。已将前端 fetch('local-skills.json') 改为 fetch('static/local-skills.json')。
### 修复 6:本地技能目录中文乱码 — 火山语言编译/释放时中文文件名编码损坏(UTF-8 → GBK 转换错误)。已将 src/static/local-skills/ 下 62 个中文目录名统一重命名为英文序号(skill-1 ~ skill-62),同步更新 local-skills.json 中的 dirName 字段。
### 修复 7:AI 找不到火山编译器 — voldev-ide 插件 prompt.md 中编译器路径为硬编码示例,AI 无法获取用户在 UI 中配置的实际路径。已更新 prompt.md,明确编译前必须先调用 GET /api/voldev/root-path 获取 voldev_dir、platform 等配置字段,编译器完整路径 = voldev_dir + "\voldev_" + platform + ".exe",严禁自行猜测路径或尝试其他编译器。
### 修复 8:项目类型检测为空 — pctest.vprj 文件使用 vprj_win(非 vprj_windows)表示视窗项目,后端 Rg_SaoMiaoXiangMu 代码检查 vprj_windows 无法匹配。已将检查条件从 vprj_windows 改为 vprj_win(vprj_win 是 vprj_windows 的前缀,两者都能匹配),并将视窗检查移到安卓检查之后避免误匹配。
### 修复 9:t/s 显示不准确 — messages.js 中工具调用参数增量统计调用 _updateStreamingCharCount(delta) 时未传入 text 参数,导致工具调用中的中文字符不被统计为 CJK 字符,所有字符按英文标准(4 字符/token)计算,实际中文应按 1.5 token/字符。已提取增量文本 deltaText = argsPartial.slice(_lastToolProgressArgsLen),传入 _updateStreamingCharCount(delta, deltaText)。
### 修复 10:搜索框焦点跳走 — 代码编辑器中点击搜索框输入文字时焦点自动跳走(第一次点击跳走、第二次不跳)。根因是 _gotoFindMatch() 调用 _monacoEditor.focus() 抢走焦点。已添加三层防护:① keepFocus 参数防止 oninput 触发时抢焦点;② setTimeout 异步恢复焦点到搜索框;③ requestAnimationFrame 延迟 input.focus() 到 DOM 渲染完成后执行。
### 修复 11:Web fetch 网页乱码 — Rg_ZhuanHuanWangYeBianMa 函数在 charset 为 UTF-8 时,当 utf8.Valid(body) 失败(网页含少量无效字节)仍回退到 GBK 解码,导致中文乱码。已改为 charset 为 utf-8 时直接返回 string(body),无效字节用 0xFFFD 替换而非切换到 GBK。
### 修复 12:模块配置保存格式错误 — Rg_BaoCunXiangMuMoKuai 函数将 group_file_name 直接平铺在 root_filter 下,破坏了 .vprj 文件的正确嵌套格式,导致模块无法被火山IDE识别。已完全重写:通过大括号匹配精确定位 root_filter 块范围,提取原有 files 子块和属性,按正确嵌套格式重建(root_filter → child_filter → filter1 → child_filter → filter1, filter2...),每个 filter 包含 collapsed、files.num_files、group_file_name、name。
### 修复 13:.wsv 表格视图 HTML 结构断裂 — buildFieldRow、buildLocalVarRow、buildLocalConstRow、buildMemberConstRow 函数返回的 HTML 缺少外层 <tr></tr> 标签,浏览器自动修复时将每个 <td> 当作独立表格行,导致每个常量/变量单独成表、列宽无法对齐。已为四个函数首尾补全 <tr> / </tr>。
### 修复 14:终端 SSE 调试输出影响性能 — terminal.js 中 source.addEventListener('error',...) 监听器仅执行 console.error('[terminal-debug] ...') 调试输出,SSE 连接断开时频繁触发。已移除该调试监听器(实际错误处理由 source.onerror 回调完成,不受影响)。
### 修复 15:函数名冲突导致编译失败 — 插件.wsv 中新增的 Rg_ZhiXingMingLing2 与命令.wsv 中的同名函数冲突。已将 Rg_ZhiXingMingLing 重命名为 Rg_ChaJianZhiXingCmd,Rg_ZhiXingMingLing2 重命名为 Rg_ChaJianZhiXingCmd2。
### 修复 16:正则表达式导致火山IDE调试中断 — 插件.wsv 中 validTabPath 正则使用了 Go RE2 引擎不支持的负向先行断言 (?!/)。已移除该断言,改用 ^/[A-Za-z0-9._~/-]{0,255}$ 正则配合 strings.HasPrefix(tabPath, "//") 检查防止 // 路径。
### 修复 17:插件页面无法滚动 — #pluginPageContainer 缺少 overflow-y:auto 属性,插件使用说明页面内容超出容器高度时无法滚动查看。已添加 overflow-y:auto。
### 修复 18:插件页面字体太暗 — voldev-ide 插件 styles.css 中使用了主题未定义的 CSS 变量名(如 --text-primary、--bg-secondary 等),导致文字颜色回退为默认值,大部分文字太暗无法看清。已改用主题正确定义的变量(--text、--muted、--border、--bg 等)。
### 修复 19:插件页面无法关闭 — 点击插件页面内的链接进入插件详情页后没有关闭按钮,无法返回插件列表。已在插件页面头部添加 × 关闭按钮,点击调用 switchPanel('chat') 返回。
### 修复 20:文件浏览器无法切换盘符 — 后端 Rg_LiuLanMuLu 在浏览根目录时不返回盘符列表,导致 Windows 下无法从 C: 盘切换到其他盘。已在路径为根目录时返回所有可用盘符(A-Z)。
### 修复 21:编译路径重复拼接 exe — 前端传入的 cwd 已包含 voldev_awsp.exe 完整路径,后端又拼接了 voldev_awsp.exe,导致路径变为 E:\voldev25\bin\x64\voldev_awsp.exe\voldev_awsp.exe。已添加检查:如果路径已以 .exe 结尾则不再拼接。
### 修复 22:编译报错"The directory name is invalid" — cmd.Dir 被设置为 exe 文件路径而非目录路径,fork/exec 失败。已添加检查:如果 cwd 以 .exe 结尾,自动提取其所在目录作为工作目录。
### 修复 23:explorer.exe /select 响应慢 — "在文件管理器中显示"功能将 /select, 和文件路径作为两个独立参数传递,Explorer 解析中间空格导致延迟。已合并为单个参数 /select,<path>。
### 修复 24:插件面板说明文字过时 — 插件设置面板的说明文字仍为"查看已安装的 Hermes 插件及其注册的生命周期钩子。此面板为只读。",但面板已支持启用/禁用、安装、删除、编辑提示词等操作。已更新为"管理已安装的插件:启用/禁用、安装压缩包、删除插件、编辑插件提示词(启用后注入AI系统提示词,引导AI调用插件接口)。",同步更新所有 14 种语言翻译。
新增
### 新增 1:技能市场"本地"数据源 — 新增"本地"选项作为离线模式下的技能商城兜底。将 E:\写作与内容 中的 62 个写作类技能打包到 src/static/local-skills/ 目录(英文序号命名),元数据存储在 src/static/local-skills.json,随程序启动释放到 stateDir/static/。支持前端搜索、安全筛选、安装状态筛选、分页,点击安装时后端从 stateDir/static/local-skills/{dirName} 复制到 skills 目录。新增 Rg_JiNengShiChangAnZhuangBenDi 函数和 POST /api/market/install-local 路由。
### 新增 2:技能市场分页功能 — loadMarketSkills(action) 支持 'reset'/'next'/'prev' 三种操作,游标栈支持上一页,next_cursor 支持下一页。后端列表 API 新增 total 字段用于页码计算,前端新增 _marketPage、_marketCursorStack、_marketTotal、_marketPageSize(24)等变量和分页 UI。
### 新增 3:思考 token 纳入统计 — AI 大模型思考(reasoning/thinking)阶段消耗的 token 此前未被统计。后端两个流式处理路径在发送 reasoning 事件后,新增记录思考 token 到计量系统(Rg_JiLiangZhuangTai 的 reasoning_tokens 字段);Rg_JiLiangQuDangQianTPS 改为 totalTokens = outputTokens + reasoningTokens 计算实时 TPS;前端 reasoning 事件监听器新增调用 _updateStreamingCharCount 将思考文本纳入流式指示器的 token 估算和 t/s 显示。
### 新增 4:voldev-ide 插件内置打包 — 将 voldev-ide 插件复制到 src/static/plugins/voldev-ide/,随前端文件一起打包到可执行文件。新增 Rg_FuZhiNeiZhiChaJian 函数,启动时从 stateDir/static/plugins/ 复制到 ~/.hermes/plugins/(始终覆盖确保版本最新)。调整启动流程:解压前端 → 复制内置技能 → 复制内置插件 → 加载插件,确保内置插件在插件系统扫描前已释放。
### 新增 5:api() 函数 retry 选项 — workspace.js 中 api() 函数新增 retry 选项,POST 等可能产生副作用的请求可通过 opts.retry=0 禁用重试。默认重试 2 次(仅对网络错误 TypeError 和客户端超时生效,不对 HTTP 4xx/5xx 错误重试)。
### 新增 6:编译器配置 API 暴露 — GET/POST /api/voldev/root-path 新增 voldev_dir(编译器目录)、install_dir(火山安装目录)、platform(编译平台)三个字段。前端"保存配置"和"保存"按钮现在将这三个字段同步到后端,AI 通过 GET /api/voldev/root-path 即可获取用户在 UI 中配置的完整编译器信息。
### 新增 7:.wsv 表格视图常量表渲染 — 参考 volcano-wsv-preview-1.0.5 插件的 renderConstantGroup 实现,新增类成员常量和包级常量的表格渲染。新增 buildMemberConstRow 函数(含"公开"列),在 _parseWsvContent 中添加"常量 "行处理(非方法内),根据上下文分别渲染为类成员常量表或包级常量表,表头为:常量名 | 类型 | 初始值 | 公开 | 属性名 | 属性值 | 备注。
### 新增 8:.vsln 优先编译 — prompt.md 添加 .vsln 优先规则:.vsln 解决方案文件编译会返回编译报错信息,.vprj 单项目文件不会。编译流程优先推导并使用 .vsln 文件(从 vprj 路径推导 vsln 路径,用 plugin-browse API 扫描确认),仅在找不到 .vsln 时才用 .vprj。
### 新增 9:使用说明添加保存配置说明 — voldev-ide 插件"使用说明"标签页的注意事项中新增"保存配置说明(重要)"章节,明确列出三个保存按钮的作用:编译标签页"保存配置"按钮(保存 voldev 目录、编译平台)、项目标签页"保存"按钮(保存根目录及编译器配置)、模块标签页"保存配置"按钮(保存模块勾选到 .vprj)。
### 新增 10:插件提示词功能 — 每个插件可在插件目录下保存 prompt.md 提示词文件,前端插件卡片添加可折叠的提示词编辑区域(textarea + 保存按钮,最小高度 200px)。启用插件后,提示词内容自动注入 AI 系统提示词,引导 AI 何时以及如何使用该插件的接口(如 /api/plugin-exec)。后端新增 Rg_BaoCunChaJianTiShiCi(保存)、Rg_HuoQuChaJianTiShiCi(获取单个)、Rg_HuoQuYiQiYongChaJianTiShiCi(拼接所有已启用插件提示词)三个函数,路由新增 POST /api/plugins/prompt 和 GET /api/plugins/prompt/:name。提示词以文件形式存储在插件目录中(而非数据库),外部开发者可随插件分发自带提示词。
### 新增 11:插件安装功能 — 插件面板新增"安装插件"按钮,支持 ZIP/7z/RAR/tar 等压缩格式。后端新增 Rg_AnZhuangChaJian 函数,验证插件名称合法性后解压到 ~/.hermes/plugins/ 目录,自动重新加载插件列表。
### 新增 12:插件删除功能 — 每个插件卡片添加"删除"按钮,点击后弹出确认对话框(显示插件名和不可逆警告),确认后删除插件目录并刷新列表。后端新增 Rg_ShanChuChaJian 函数和 POST /api/plugins/delete 路由。
### 新增 13:插件目录路径显示 — 插件面板顶部显示当前插件目录的完整路径,方便开发者定位插件文件。后端新增 GET /api/plugins/path 路由。
### 新增 14:火山IDE编译插件(voldev-ide)— 完整的火山IDE交互编译插件,包含三个页面:① 编译配置页面(voldev_awsp.exe 路径设置、项目文件选择、编译选项单选默认 /d 调试版、跨盘符文件浏览器、配置保存到 localStorage);② 编译输出页面(显示编译状态、退出码、标准输出/错误);③ 使用说明页面(编译命令格式说明、voldev_awsp.exe 版本说明、注意事项)。
### 新增 15:.wsv 文件表格化显示优化 — 重写 _parseWsvContent 函数及所有辅助解析函数,全面支持火山源码的表格化渲染:① 类/方法/变量/参数的 <...> 属性解析到属性名/属性值列,多属性时类名等单元格 rowspan 跨行;② 多行注释(注释 = "...")拼接到备注列,支持返回值备注(绿色显示);③ 方法体内的局部变量渲染为 local-var-table 表格、局部常量渲染为 local-const-table 表格;④ 嵌入代码 @ 符号高亮(#D39B83 色)、@<变量> 转义、// 注释高亮;⑤ <火山程序> 标记分隔为不同 code-content 块;⑥ separator-row 分隔行和 with-indent-guide 缩进引导;⑦ toggle-icon 收缩图标。
### 新增 16:Provider 测试按钮自动填充模型 — 添加 Provider 和编辑 Provider 页面的 Test 按钮在测试成功后,自动将返回的模型列表填充到模型映射(_addProvModelMapping / _editProvModelMapping)和上下文窗口列表中,无需手动逐个添加。
优化
### 优化 1:清理后端调试输出 — 网关聊天.wsv 中 28 行 fmt.Fprintf(os.Stderr, "[聊天流]/[网关流]...") 调试日志在每次 SSE 事件处理时执行,影响流式处理性能。已删除所有纯调试信息(finish_reason、循环迭代次数、消息数、thinking 配置、溢出恢复等),保留 7 行关键错误日志(SSE scanner 错误、HTTP 请求失败、超时中断等)。
### 优化 2:内置插件默认关闭 — Rg_FuZhiNeiZhiChaJian 函数在复制内置插件后,对数据库中未设置过启用状态的内置插件明确标记为 false(默认禁用)。仅当用户在 UI 中手动启用后才保持启用状态,确保内置插件不会在用户不知情的情况下自动启用。
### 优化 3:.wsv 表格视图关键字高亮 — _highlightWsvCode 和 _highlightWsvEmbedded 函数新增火山关键字高亮(如果、否则、循环、返回、父对象、判断、分支、中断、继续、选择、情况、默认),使用正则匹配并避免覆盖已高亮的字符串内容。
### 优化 4:.wsv 表格视图方法体缩进 — 方法体内代码行原依赖 { } 计数(methodDepth)计算缩进,对火山语言实际行首空格缩进识别不准确。新增 getLineIndentChars 和 getMethodIndentStyle 函数,以方法体第一行代码为基线计算相对缩进级别,根据缩进级别自动生成左侧缩进箭头(indent-arrow)。
|
|