Releases: E3N-glotm/DevSpace-Deploy-Portable
Releases · E3N-glotm/DevSpace-Deploy-Portable
Release list
DevSpace Portable 1.1.17
DevSpace Portable 1.1.17
1.1.17 修复完整发行包中 codex-runtime-bridge 的预置路径:插件必须位于 PluginManager 实际使用的 data/plugins/installed/codex-runtime-bridge,而不是 Portable 根目录下的 plugins/installed。Portable Protocol 保持 1.5,MCP 顶层工具 Schema 不变。
Release 内直接包含 Codex Runtime Bridge
- 完整 ZIP 现在固定包含:
DevSpacePortable/data/plugins/installed/codex-runtime-bridge/<版本>/manifest.jsonDevSpacePortable/data/plugins/installed/codex-runtime-bridge/<版本>/runtime.mjsDevSpacePortable/data/plugins/installed/codex-runtime-bridge/<版本>/keep-awake.ps1DevSpacePortable/data/plugins/installed/codex-runtime-bridge/<版本>/skills/codex-runtime-bridge/SKILL.md
- 维护源仍只有
setup/bundled-plugins/一份;setup/build-release.py在构建时自动生成plugins/installed/发布镜像,避免两套源码发生漂移。 - 构建器通过虚拟归档映射把
setup/bundled-plugins中的受控插件文件写入data/plugins/installed/...,不会读取或复制维护机本地data/中的 OAuth、SQLite、配置和其他运行状态;如果data/plugins/installed/codex-runtime-bridge/<版本>/manifest.json不能进入 ZIP,则直接终止发布。 - 完整 ZIP 明确禁止生成错误的
DevSpacePortable/plugins/installed/...根目录镜像。
插件持久化边界
plugins/installed/是 Release 自带的 bundled seed tree,保证解压后、不启动程序也能直接看到内置 Codex Runtime Bridge。- 用户实际安装、启用、升级后的插件仍位于
data/plugins/installed/;该目录属于持久化data/,在线更新不会覆盖。 - Portable manager 在完整 Release 中优先使用
plugins/installed/作为 seed source;源码开发环境没有该镜像时继续回退到setup/bundled-plugins/。
GitHub 在线更新网络兼容性
- 修复 Windows PowerShell 5.1 经过本地 HTTP/HTTPS 代理访问 GitHub 时可能出现“基础连接已经关闭: 发送时发生错误”的问题。
- updater 进程显式允许 TLS 1.2,并关闭旧式
Expect100Continue;不会修改系统全局网络配置。 - Release API 与
update-manifest.json请求先走 PowerShell,失败时以 0.5 s / 1 s 退避最多尝试 3 次,再自动切换到curl.exe。 - 增量 ZIP 与完整 ZIP 下载使用相同的有界重试和 curl fallback;如果两条网络路径都失败才向 UI 返回错误。
- 原有 size、SHA-256、增量基础文件 hash 和路径安全校验保持不变,网络 fallback 不降低更新完整性检查。
验证
- 新增
setup/test-release-plugin-layout.py,验证发布镜像、版本目录及四个关键文件均存在,并被 release scanner 收录。 setup/build-release.py自身增加 release-time invariant,防止后续版本再次生成不含 Codex Runtime Bridge 的 ZIP。setup/test-online-updater-contract.mjs同时验证 TLS 1.2、有界 retry、GitHub JSON/download wrapper 与 curl fallback 合约。
DevSpace Portable 1.1.16
DevSpace Portable 1.1.16
1.1.16 将 GitHub 在线更新从“每次下载完整 Portable ZIP”升级为“增量优先、完整包自动兜底”,同时修复 1.1.15 会话详情中逐文件差异仍可能显示整轮 patch 的问题,并统一原生控制中心的现代字体体系。Portable Protocol 保持 1.5,MCP 顶层工具 Schema 不变。
增量优先、完整包兜底
- Release 继续发布
DevSpacePortable-Windows-x64-1.1.16.zip作为完整安装与最终兜底包。 - 构建流程同时比较上一稳定 Release 与 1.1.16 完整包,生成
DevSpacePortable-Update-1.1.15-to-1.1.16.zip文件级增量包。 - 增量格式为
file-delta-v1:ZIP 只保存新增或发生变化的文件;删除项写入delta-manifest.json,不需要重复携带未变化的 Node、Git、runtime 或 npm 文件。 update-manifest.json升级到 schema 2,保留完整asset,并增加按fromVersion精确匹配的incrementalAssets。- 更新器只有在已安装版本与增量包
fromVersion完全一致时才尝试增量;跨多个版本、找不到增量时直接使用完整 ZIP,不要求逐版升级。 - 已安装的 1.1.15 更新器本身尚不认识
incrementalAssets,所以普通用户从 1.1.15 升到 1.1.16 时仍会完整下载一次 1.1.16 ZIP。 1.1.16 安装完成以后,后续版本才正式进入“增量优先、完整包兜底”的选择流程;本次仍发布 1.1.15→1.1.16 delta,用于验证新协议、镜像场景和新更新器回归。 - 增量下载后校验 Release 资产大小、SHA-256、压缩路径、delta manifest、所有目标文件 SHA-256,并在真正关闭 UI 前校验将被替换或删除的本地基础文件 SHA-256。
- 增量包缺失、损坏、格式不合法、路径不安全、目标文件校验失败或本地基础文件发生漂移时,同一次更新流程自动切换到完整 ZIP。
- 增量安装只备份、替换和删除明确列出的路径;完整包安装继续采用顶层应用 payload 替换。两种模式都保留
data/、logs/、reports/,并共享同盘备份与失败回滚。
修复逐文件差异串页
- 1.1.15 的提取器优先查找
diff --git,但当前sparse-journal-v4使用diff包的createTwoFilesPatch,实际输出以===================================================================、--- a/<path>、+++ b/<path>分隔,不包含diff --git。 - 因此旧逻辑在找到
+++ b/<path>后会把 block 起点错误回退到整个 patch 的第 0 字符,造成截图所示“标题已经切换到 README/YAML,但下面仍显示 DEVELOPMENT_STATUS 及其他文件”的问题。 - 1.1.16 直接识别
createTwoFilesPatch的真实分隔格式,以连续--- a/path/+++ b/path精确定位文件,并在下一个分隔线或diff --gitblock 前截断。 - 二进制、大文件和 unsupported path 使用独立路径标记匹配;无法可靠找到当前文件时返回空状态,绝不回退展示整轮 patch。
- 新增真实原生 EXE 回归:构造三个连续 jsdiff 文件块,分别选择中间文件并验证输出不包含前后文件内容。
差异视图与字体
- 深色 diff 视图从“patch 内部顺序号”改为接近 PyCharm/Codex 的旧行号 + 新行号双 gutter;新增、删除、上下文和 hunk 会分别推进正确的行号计数。
- 代码和差异区域优先使用
Cascadia Code,回退到Cascadia Mono/Consolas。 - 原生 UI 正文、按钮、导航、表格、提示和对话框优先使用
Segoe UI Variable Text,大标题使用Segoe UI Variable Display;未安装时自动回退到 Windows 系统字体,不随程序分发字体文件。 - 保留原有浅色控制中心与深色 diff 的视觉层级,不改变现有 Computer Use、Memories、插件与部署布局。
发布与测试
- Release workflow 会保留上一稳定版完整 ZIP 作为 delta 构建基线,构建 1.1.16 完整 ZIP 后自动生成增量 ZIP,并将两者连同
update-manifest.json、SHA256SUMS-release.txt一起发布。 - 新增
setup/test-incremental-update.py:使用微型 1.1.15/1.1.16 ZIP 验证 changed-only、delete manifest、persistent root 排除和 base SHA-256。 - 新增
setup/test-selected-file-diff.mjs:执行原生DevSpace-Portable.exe --diff-extract-test,验证 jsdiff 分隔符、单文件隔离、双行号 gutter 和字体配置。 - 继续执行原生 UI、Memory CRUD、稀疏会话、插件、Computer Use、在线更新安全边界和生产依赖审计回归。
DevSpace Portable 1.1.15
DevSpace Portable 1.1.15
1.1.15 增加基于公开 GitHub Releases 的在线更新,并重做原生控制中心的会话分组、逐文件差异和关闭窗口行为。Portable Protocol 保持 1.5,现有 MCP 顶层工具定义不变。
GitHub Release 在线更新
- “状态与部署”新增“检查更新”,直接读取公开仓库的最新稳定 Release 和
update-manifest.json,不要求用户配置 GitHub Token。 - 下载前核对 Release 标签、仓库、文件名和清单;下载后同时校验字节数与 SHA-256,并拒绝逃逸
DevSpacePortable/根目录的压缩包条目。 - 更新包先解压到
.update-staging/;用户确认安装后,独立 PowerShell 更新器等待原生 UI 退出,再停止当前 Portable 服务并替换应用文件。 data/、logs/和reports/始终保留。替换过程使用同目录备份;任何验证、替换或启动错误都会恢复旧文件并重新启动旧版本。- Git 源码检出目录明确拒绝应用级覆盖,只允许正式 Release 解压目录执行在线更新。
会话历史按名称分组
- 同名会话合并到一个视觉分组,分组按最近一次修改时间从新到旧排列,置顶分组仍优先显示。
- 每个分组内部的具体会话轮次同样按最近更新时间从新到旧排列,并保留文件数、增删行数、状态和项目目录。
- 分组标题只负责汇总,回退、重命名、隐藏、归档和打开目录必须选择分组内的一轮具体会话,避免误操作。
现代逐文件差异
- 文件差异区改为接近 PyCharm/Codex 的深色统一差异视图,增加文件标题、行号栏、差异元信息和新增、删除、区块、文件头背景色。
- 未选择文件时只显示引导提示,不再退回展示整轮会话的全部 patch。
- 选择上方任意改动文件后,只提取并渲染该文件对应的 unified diff;无法可靠匹配文件区块时显示空状态,而不是泄露其他文件差异。
关闭窗口与系统托盘
- 点击窗口右上角关闭按钮时,弹出“最小化到系统托盘”“退出控制中心”“取消”三种选择。
- 最小化到托盘会隐藏窗口、保留 UI 进程、本地桌面租约、Computer Use 和后台服务;双击托盘图标或使用菜单可恢复窗口。
- 退出控制中心只关闭原生 UI 和本地 UI 租约,不停止 DevSpace、隧道或计划任务。
- 可勾选“记住我的选择”;托盘菜单提供“下次关闭时询问”以清除偏好。
验证
- 原生 WinForms x64 编译通过。
- Portable manager、在线更新器 PowerShell 语法和更新契约测试通过。
- 会话分组、仅选中文件差异、关闭选择、Memory CRUD、Computer Use、插件与稀疏审阅回归继续通过。
- 最终 ZIP、更新清单和 GitHub Release 附件按大小与 SHA-256 交叉验证。
DevSpace Portable 1.1.14
DevSpace Portable 1.1.14
1.1.14 重构原生控制中心的操作反馈、会话审阅和显式 Memories 管理,Portable Protocol 保持 1.5,现有 MCP 顶层工具定义不变。
操作期间不再整窗变白
- 原生 UI 不再通过禁用整个
MainForm表示操作进行中,避免 WinForms 把所有卡片、表格和控制框绘制成白色或失焦状态。 - 只有当前点击的按钮进入忙碌状态,并在按钮内部显示“执行中…”。
- 页面内容、日志和其他导航保持可见;重复点击同一忙碌按钮会被忽略,操作结束后恢复原文字和光标。
- 初始化阶段同样不再禁用整窗,而是在状态框中显示加载进度。
Codex 风格会话子页面
- “会话与回退”首先显示独立会话列表,而不是把列表、文件和差异压缩在同一个三栏页面中。
- 双击会话或点击“查看本轮修改”进入会话详情子页面,可通过“返回会话”回到列表。
- 详情页集中显示本轮项目路径、稀疏审阅后端、文件数、增删行数和完整回退状态。
- 改动文件以独立列表呈现;选择文件后只显示该文件对应的 patch,并使用不同文字颜色区分新增、删除、区块和文件头。
- 回退、恢复回退前快照和打开项目目录均保留在详情页,不改变
sparse-journal-v4的有界存储和安全回退规则。
显式 Memories 独立页面
- 左侧导航新增“显式 Memories”页面,可搜索和查看本地 SQLite 中的全局与工作区记录。
- 支持新建、编辑、保存和删除;工作区作用域只能选择当前配置中的
allowedRoots,不能通过 UI 写入任意外部路径。 - 支持标题、内容和逗号分隔标签;全局作用域不绑定项目,工作区作用域明确显示对应根目录。
- 删除前要求确认,疑似密码、Token、API Key 或 Client Secret 的内容继续由
MemoryStore拒绝。 - Memories 仍然只由用户或模型显式写入,不会从聊天、命令输出、文件内容或浏览历史自动推断。
自动回归
- 原生 WinForms 编译通过。
- 新增
setup/test-portable-ui-workflows.mjs,验证整窗不再被禁用、会话子页面存在,以及 Memory 的创建、读取、更新和删除均通过真实 SQLite 完成。 - 原生 UI 韧性测试与
sparse-journal-v4会话能力回归继续通过。