30 Commits
Author SHA1 Message Date
胡飞 efe6688082 chore(release): 发布 v0.23.0-beta.6 测试版 2026-11-05 21:56:56 +08:00
胡飞 7c0d104d34 chore(release): 发布 v0.23.0-beta.5 测试版 2026-11-05 11:17:33 +08:00
胡飞 da8e238376 Revert "chore(release): 发布 v0.23.0-beta.5 测试版"
This reverts commit a65fd44be8.
2026-11-03 20:27:46 +08:00
胡飞 a65fd44be8 chore(release): 发布 v0.23.0-beta.5 测试版
插件引擎换代(gpui-shell → nsh)之后的第一版 beta:26 个插件页面重写、
原生组件内嵌、剪贴板写权限;另外带 Shell/Data 独立图标、设置页顺序、
迁移包层级修复。扩展包这版不发,市场里仍是旧包,说明里已注明。
2026-11-03 20:13:10 +08:00
xiaofei c88409e311 Merge pull request #507 from feigeCode/refactor/nsh-host
refactor(extension)!: 扩展 UI 平面迁移到 nsh,插件机制收敛为「一个 tab + 最小 API」
2026-11-03 19:01:25 +08:00
胡飞 a701121637 feat(branding): Shell 与 Data 换成各自的图标,三个产品不再共用一套
之前三个产品共用 resources/windows/navop.ico、macOS 的 Navop.icns 与 Linux 的
三张 navop png(Shell/Data 的 png 只是复制品),装在一起几乎分不出来。

- 新增 script/generate-product-icons.py:同一套视觉语言(深蓝圆角底 + 青蓝渐变
  前景),Shell 用终端提示符、Data 用数据库柱体,输出 Linux PNG(128/256/512)、
  macOS ICNS、Windows ICO(16~256)。
- macOS:bundle-macos.sh 按产品选 Navop / NavopShell / NavopData 的 icns,
  Info.plist 的 CFBundleIconFile 仍是 Navop,拷贝时统一重命名。
- Windows:apps/navop-shell|navop-data/build.rs 嵌入各自的 ico;独立产品的
  MSI/卸载项通过 build-product-installer.ps1 的 -IconPath 传入产品图标。
- Linux:package-linux-product.sh 本来就读 <product>-<size>.png,把复制的
  png 换成新绘制的一套。
- 打包测试补「每个产品都有自己的图标」:build.rs 的 ico 路径、macOS icns 映射、
  Linux 三尺寸 png、独立产品安装包 -IconPath。
2026-11-03 13:50:22 +08:00
胡飞 8a8cfc65df refactor(extension)!: 删除 gpui-shell UI 平面(迁移 M7)
扩展页面的 UI 平面只剩 nsh。`gpui-shell` 从依赖图里彻底消失
(`cargo tree -i gpui-shell` 报 "did not match any packages",
`Cargo.lock` 里已无该包),`shell_plugin_host` / `shell_plugin_tab` /
`shell_page_host` 三个模块文件一并删除,`shell-plugins` feature 换成
`nsh-host`。

删除前补齐了三处 gpui-shell 在做、nsh 侧还没有的事,否则删掉是减功能
而不是换实现:

- **连接型页面**:`NshHost::open_connection` 按保存的连接配置打开
  provider 资源,句柄归页面所有(`owned: true`),tab id 固定为
  `extension-connection:{id}` —— 同一条连接只开一份资源。
- **扩展退役**:`close_extension` 恢复 gpui-shell 的完整流程
  (`begin_extension_retire` → 关掉脚本页与 headless 连接 tab →
  `deactivate_extension` → `finish_extension_retire`),装不干净时也会
  把扩展从"退役中"状态放出来,免得它永远打不开。
- **provider 重启**:移植监视桥。事件带完整语义(generation、session
  是否关闭),页面按 `decide_runtime_change` 分三种处理:瞬时抖动忽略、
  换进程就重装页面、被移除就停在错误页并提示重开。连接型页面无法重放
  启动参数(连接配置已交给 provider),所以换进程时提示重新打开连接。

另外:界面语言变化改走 `set_locale`(页面重渲染取词条),不再重跑脚本;
`navop_proof` 之外没有任何调用方还知道 gpui-shell 的存在。

验证:`cargo test -p universal-plugins --features nsh-host` 38 passed;
`cargo check -p navop_app`(默认已含 nsh-host)通过;`cargo check -p navop`
通过;clippy 对本仓 crate 零告警;nightly fmt。
2026-11-02 23:41:55 +08:00
胡飞 512957924d fix(release): 修掉 macOS 独立产品打包名与 Windows 资源段两处发版失败
beta.4 的构建全部通过,但打包阶段失败,两处都不是编译问题:

1) macOS 独立产品:`Resolve platform matrix` 用 `tr ' ' ','` 把两个矩阵拼在
   一起,`bundle_name` 里的空格被当成逗号,产物目录变成 `Navop,Shell.app`,
   随后的 `tar` 找不到包。改用参数展开各去一层方括号,字节原样保留。

2) Windows 全部四个 job:`navop.exe` 没有 `.rsrc`,校验步骤报
   「不可能携带内嵌清单」。产品拆分后资源嵌入留在 `crates/navop_app/build.rs`,
   而它现在是库:`cargo:rustc-link-arg` 只作用于本包 targets,嵌出来的资源
   到不了 `apps/navop*` 的 exe。改为三个二进制 crate 各自的 build.rs 调用
   共享的 `resources/windows/embed_app_resources.rs`。

顺带把这两类回归纳入 `script/test-release-packaging.mjs`:拼接矩阵的脚本会被
真实执行并断言 14 条条目与带空格的 bundle_name;同时断言资源嵌入留在二进制
crate(`crates/navop_app/build.rs` 不得存在)。44 个打包测试全绿。
2026-11-02 22:03:26 +08:00
胡飞 8f8ffc3784 chore(release): 发布 v0.23.0-beta.4 测试版 2026-11-02 20:27:08 +08:00
胡飞 5f9caf0eb1 chore(release): 发布 v0.23.0-beta.3 测试版 2026-11-02 19:58:21 +08:00
胡飞 36612d2191 chore(release): 发布 v0.23.0-beta.2 测试版 2026-11-02 19:02:11 +08:00
胡飞 f8702d3304 fix(release): Windows 打包按产品传特性,全量产品补齐特性转发
v0.23.0-beta.1 的 Windows 构建在 `cargo build -p navop` 上直接失败:
`the package 'navop' does not contain these features: wasm-components,
windows-native-rdp`。产品拆分后这些特性留在 `navop_app` 上,`apps/navop`
既没有转发它们,发布流水线又对三个产品无差别地传同一组 feature。

- `apps/navop/Cargo.toml`:把 wasm-components / windows-native-rdp /
  shell-plugins 三个特性转发给 `navop_app`,改成显式特性集
  (`default-features = false` + database/shell 常开),32 位 Windows 用
  `--no-default-features` 表达「默认集减去 shell-plugins」的语义才成立。
- `.github/workflows/release.yml`:feature 分支只对全量产品生效;独立产品的
  特性集写在自己的 Cargo.toml 里,给它们传同样的名字只会报特性不存在。

本地已验证三种组合都能编译:默认、`--features windows-native-rdp`、
`--no-default-features --features wasm-components,windows-native-rdp`。
2026-11-02 19:01:46 +08:00
胡飞 9bc5688e97 chore(release): 发布 v0.23.0-beta.1 测试版 2026-11-02 18:52:52 +08:00
胡飞 46a5978443 refactor(product-split): main 目录归位 crates/navop_app,包名统一 navop_app
产品装配移出后 main 已只剩库,却仍占着仓库根目录、与 apps/* 并列,看起来像一个
产品。本次把它落回 crate 层:

- git mv main crates/navop_app;package name 由 main 改为 navop_app(与 lib 名
  一致),删掉冗余的 [lib] 块;根 members 同步。
- 三个 app 改为直接相对路径依赖 navop_app = { path = "../../crates/navop_app" },
  不进 workspace.dependencies(Cargo 不允许再关继承来的 default-features)。
- 26 处逃出 crate 根的 include_str! 各加一层 ../(resources/*、core/build.rs、
  apps/* 与 crates/*_view 的 Cargo.toml、app_kit 源码);build.rs 的 icon/manifest
  路径同步。
- env_file.rs 与 i18n_locale_keys_contract 的「工作区根」改为上两级;
  cross-crate 源码断言(core/window_close、db_view、one_ui、windows_rdp_host)指向
  新路径。
- locales/main.yml 保持原名:i18n 命名空间与全仓 t!() key 绑定,改名是另一件事。
- 发布链路同步:release_pr.py(MANIFEST_PATH、lock_app_version、报错文案)、
  beta-release.sh 版本包名集合、release-tag.sh / ci.yml / release.yml /
  .github/RELEASE.md / AGENTS.md / CLAUDE.md 等文档的路径与 -p navop_app。
- 顺带修两处未推送提交遗留的 CI 红线:app_kit::install 的
  expected_binary_name cfg 过宽(macOS dead_code)、测试里多余的
  is_supported_app_bundle import;release PR 测试夹具补齐四个 manifest;
  windows_rdp_host 的 ALLOWED_FILES 断言对齐 release_pr.py 现状。

验证:cargo test -p navop_app(595 lib + 4 集成契约)、-p app_kit(149)、
one-ui/windows_rdp_host 契约、三个 app cargo build、cargo check --all-targets
全通过;script/tests 32 项、release-packaging 与 scripts/ai 的 node 测试全绿。
2026-11-01 00:52:04 +08:00
胡飞 b696f4ddb5 feat(release): 统一 tag 三产品发布,独立产品接入自更新链路
一个 tag 同时发布全量 navop、navop-shell、navop-data 三个产品:

- release.yml 矩阵加 product 维度(products 输入 all/full/standalone 可裁剪),
  独立产品覆盖四个主力平台,复用全量的构建/打包/上传步骤;独立产物公开命名
  统一 {product}-{version}-{label},Windows 补裸 exe zip 供自更新器直连。
- 版本校验(prepare job / release-tag.sh / beta-release.sh / release_pr.py)
  全部扩成四个 manifest(main + 三个 app crate)统一比对,app 版本对齐 0.22.0。
- upload-r2.yml 为三个产品各生成一份更新清单:全量 updates/latest.json,
  独立产品 updates/navop-shell/shell/latest.json 与 updates/navop-data/data/
  latest.json(beta 通道各插 beta/ 段),键位与 config.rs feed_url() 一致。
- install.rs 自更新安装器按运行时 identity 参数化 bundle/exe/binary 候选名,
  独立产品可自更新,全量保留 OnetCli.app / onetcli.exe legacy 兼容。
- 删除 standalone-products.yml(能力并入 release.yml);package-linux-product.sh
  支持显式产物命名并入统一发布;RELEASE.md 补统一发布与 products 输入文档。

验证:cargo test -p app_kit --lib 149 passed;clippy 无新告警;
node --test script/test-release-packaging.mjs 40/40;工作流 YAML 解析通过。
2026-10-31 23:24:48 +08:00
胡飞 2260fcc533 refactor(product-split): 数据领域工具集改由领域契约提供,main 不再依赖 data_domain/mongodb_view 2026-10-31 08:36:07 +08:00
navop 128741fb16 refactor(product-split): main 引入 database/shell 领域 feature,独立产品按领域裁剪依赖 2026-10-29 22:23:18 +08:00
胡飞 6e074aa3f2 refactor(product-split): 应用各自组装 Product,删除 main 的新建连接向导
- main: run_with<P: Product> 参数化入口 + AppAssets/init_app 导出,run_product 保留为便捷包装
- apps/navop(-shell/-data): 各自定义 FullProduct/ShellProduct/DataProduct 并调用 run_with
- 删除 main/src/new_connection(连接类型与表单由领域注册表提供),show_new_connection_dialog 委托 app_kit
- 同步移除测试源码契约与废弃的主密钥前置函数
2026-10-29 20:06:50 +08:00
胡飞 aea8063501 refactor(product-split): 三产品统一复用全量主页并按领域能力门控
原先 navop-shell / navop-data 各有一套薄壳主页,功能永远追不上全量产品。
改为三产品共用同一套 navop_app 主页、设置与标签体系,差异收敛为产品身份
与领域能力;隔离保持彻底:每个产品有自己的 one-hub.db、数据目录、
keychain、MCP 发现文件与更新 feed,连接通过迁移入口导入。

主要改动:
- main: 新增 ProductKind / run_product_with_version,身份与包版本按产品注入;
  单实例、文件关联、托盘、MCP 运行时按产品门控;新增 product 能力判定
  (以内置类型是否有领域 opener 为准),接入连接列表、最近、侧栏树、
  类型筛选条、新建连接清单与快速打开。
- 三个 bin: navop-shell / navop-data 只调 run_product_with_version,
  依赖收敛到 main,删除旧薄壳 home/sort 模块。
- app_kit: 下沉系统集成能力——连接导入/导出与全量产品迁移、托盘、
  macOS/Linux/Windows 单实例、快捷键注册与设置页、窗口状态持久化、
  Tab 会话恢复、独立更新 feed 与文件关联、主密钥与凭据库、完整设置页。
- 独立产品新增「从全量 Navop 导入连接」入口(新建连接下拉菜单与设置页)。

验证:cargo test -p main --lib 657 passed;i18n 契约 1 passed;
cargo build -p navop -p navop-shell -p navop-data 通过;
navop-shell / navop-data 以独立数据目录启动存活、无 panic。
2026-10-29 18:55:17 +08:00
胡飞 7f4c661ce2 feat(product-split): 独立产品补齐新建连接、基础设置与 Shell 连接类型覆盖
Shell/Data 之前只能打开已有连接,首次启动连接表为空且没有新建入口,
实际上不可独立交付。本次在保持三产品代码隔离(领域只依赖 domain_api)
的前提下补齐基础能力。

domain_api:
- 新增 ConnectionKindDescriptor/ConnectionKindGroup:连接种类与分组由领域声明,
  侧栏筛选与新建向导共用。
- 新增 ConnectionFormProvider:领域声明 kinds、kind_for(已有连接→种类) 与表单构造。
- 新增 SettingsSectionProvider:返回 (order, SettingPage),直接由 gpui-kit 的
  Settings 容器渲染(SettingPage::render 是 pub(super),无法独立渲染)。
- DomainRegistry 增加 form/settings provider 注册与聚合查询。

app_kit:
- new_connection:按分组列出可用种类的新建/编辑/复制向导,表单承载在可复用
  弹窗中(表单保存后会 close_window_after_save,嵌在标签页里会误关主窗口)。
- connection_actions:新建/编辑/复制/删除统一入口,删除带确认并广播
  ConnectionDataEvent::ConnectionDeleted。
- settings:外观(主题/语言)、Public MCP(开关/权限模式)、关于 + 领域设置页。

shell_domain:
- 七种连接种类(SSH/SFTP、FTP、Serial、Telnet、端口转发、RDP、VNC)表单。
- 补 FtpConnectionOpener、SerialConnectionOpener、TelnetConnectionOpener:
  之前列表里有 Serial/Telnet/FTP,但点「打开」没有 opener 会失败。
- 终端设置分区(字体、字号、回滚行数、自动复制、自动补全)。

data_domain:
- 内置数据库(DatabaseType::builtin_all)+ Redis + MongoDB 的连接表单;
  kind_for 用 to_db_connection().db_type 反查。
- 数据库设置分区(打开方式、大文本编辑器、自动保存、查询上限、表格展示)。

apps:
- 两个独立产品主页加「新建连接」「设置」、搜索框、行内编辑/复制/删除(右键菜单)、
  空列表引导,并订阅连接变更事件刷新列表;Shell 补「会话日志」入口。

验证:
- cargo test -p domain_api -p app_kit -p shell_domain -p data_domain:10/3/20/13 passed
- cargo build -p navop:通过;cargo build -p navop-shell -p navop-data:通过,无 rustc 警告
- cargo test -p main --test i18n_locale_keys_contract:通过
- 两个独立产品临时 HOME 启动 12s:进程存活、无 panic
2026-10-29 16:48:42 +08:00
胡飞 0c56a0b982 feat(mcp): 工具集开关接入设置并增加逐项 UI 2026-10-29 13:49:26 +08:00
胡飞 cbb72d9541 refactor(mcp): 下沉 Mongo/Redis live provider 并复用通用审批 UI 2026-10-29 13:33:45 +08:00
胡飞 6b1efc09d9 feat(data_domain): 接管数据库驱动检查与安装提示 2026-10-29 03:04:36 +08:00
胡飞 731d972095 feat(navop-data): 装配 Database/Redis/MongoDB 主页 2026-10-29 02:53:13 +08:00
胡飞 d572a14ed3 refactor(domain_api): 端口转发运行时改为可选,供 Data 产品实现 2026-10-29 02:51:40 +08:00
胡飞 05195c80aa feat(navop-shell): 装配可用的 Shell 主页 2026-10-29 02:42:11 +08:00
胡飞 4a9c41b57e refactor(main): 抽出 navop_app 库并新增 apps/navop 全量包 2026-10-29 02:34:56 +08:00
胡飞 7295e415a4 feat(data_domain): 迁入 Redis 单连接打开路径并接入 ConnectionRegistry 2026-10-29 01:05:02 +08:00
胡飞 296b0f76cf feat(apps): 两个独立应用改为 Product 启动,TabOpener 支持打开模式 2026-10-29 01:00:20 +08:00
胡飞 fa0a70f9d6 feat(apps): 新增 navop-shell 与 navop-data 可构建的骨架可执行包 2026-10-29 00:47:20 +08:00