Commit Graph
392 Commits
Author SHA1 Message Date
胡飞 ce374ccc62 fix(main): Windows 单实例失败提示改用 &str 入参
report_single_instance_failure 收 &str,app_kit 的 user_message() 返回
String,Windows CI 报 E0308 expected &str, found String。
2026-10-30 18:12:34 +08:00
胡飞 af3d3dc51f fix(shell_domain): 补 Windows 凭据管理器依赖
remote_desktop_window/mstsc_credentials_windows.rs 用 windows crate 的
Win32_Security_Credentials,迁移时漏了 Cargo 依赖,Windows CI 报
cannot find module or crate `windows`。按 main 原配置补到 shell_domain
的 windows target 依赖。
2026-10-30 17:47:17 +08:00
胡飞 b0dc6b3792 refactor(product-split): 裁剪 main 的领域依赖并加依赖隔离契约测试
- main/Cargo.toml 删除 6 个已无引用的 optional 领域依赖:
  db、ssh、sftp_view、known_hosts_view、port_forwarding、port_forwarding_view
  (builtin-duckdb 改由 db_view 转发)
- 修 shell-only 构建下的 Redis 资源池 helper cfg、外观页误加的 cfg
- 新增 script/check-product-deps.sh(本地依赖树守卫)
- 新增两个 manifest 契约测试:独立产品只开自己领域 feature、
  database/shell feature 互不包含对方领域依赖
- 文档补 §27(main 已无领域 use、cfg 161→57、验证与剩余项)
2026-10-30 16:21:39 +08:00
胡飞 3086cd6aa9 refactor(product-split): 远程桌面窗口下沉 shell 领域,补齐领域钩子与三态编译 2026-10-30 13:44:08 +08:00
navop 2c474a42f7 docs(product-split): 增加三产品内部依赖图与生成脚本 2026-10-29 22:58:08 +08:00
navop 128741fb16 refactor(product-split): main 引入 database/shell 领域 feature,独立产品按领域裁剪依赖 2026-10-29 22:23:18 +08:00
胡飞 4cd3aa8488 docs(design): 记录 main 拆分第三轮进展与剩余路线 2026-10-29 20:26:58 +08:00
胡飞 283466a2e3 refactor(product-split): 主页按数据库/终端领域收敛入口
- product.rs 增加 supports_database_domain / supports_shell_domain,作为领域隔离的唯一判定
- 独立产品裁掉对方领域的设置页、远程文件编辑器分组、已知主机/会话日志入口、本地终端按钮与快捷键
- 新建连接不再展示对方领域的扩展贡献与空类目安装入口;Extension 类型连接跟随终端领域
- 设置页跳转按实际页数动态计算同步页序号
2026-10-29 19:33:07 +08:00
胡飞 66bab9beba feat(product-split): 独立产品按领域包写入默认 MCP 工具集
复用全量主页后,独立产品的 MCP 工具集不再由薄壳 init 逐个启用;改为
app_kit::bootstrap 在首次启动时按已注册领域写入默认值:
Shell = Terminal/Sftp/Connections,Data = Database/Redis/Mongo/Connections。
写盘一次后由用户在设置里接管,不再覆盖。

验证:cargo test -p app_kit 141 passed;三产品构建通过;
navop-shell 工具集 25 个、navop-data 39 个,发现文件落在各自数据目录。
2026-10-29 18:58:28 +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
胡飞 bb6aac7e98 docs(design): 修正 MCP 工具集提交号 2026-10-29 13:49:31 +08:00
胡飞 0c56a0b982 feat(mcp): 工具集开关接入设置并增加逐项 UI 2026-10-29 13:49:26 +08:00
胡飞 5badd38d2e docs(design): 记录 connection 工具集与 MCP 剩余项 2026-10-29 13:39:17 +08:00
胡飞 037f1e652d docs(design): 记录 MCP 审批复用与 Mongo/Redis 工具下沉 2026-10-29 13:33:54 +08:00
胡飞 969ad79d84 docs(design): 记录 Public MCP 三产品隔离 2026-10-29 13:20:54 +08:00
胡飞 2c0ebe02d5 docs(design): 补充三产品拆分交付状态与已知限制 2026-10-29 03:14:09 +08:00
胡飞 ff27a8934f docs(design): 记录 Windows 安装器参数化 2026-10-29 03:08:47 +08:00
胡飞 63e7ae03d2 docs(design): 记录独立产品 CI 矩阵 2026-10-29 03:07:39 +08:00
胡飞 450a693db8 docs(design): 记录 macOS/Linux 三产品打包进度 2026-10-29 03:07:01 +08:00
胡飞 b11e432817 docs(design): 记录 DriverGate 与数据产品驱动安装 2026-10-29 03:04:40 +08:00
胡飞 406aebe374 docs(design): 记录三产品启动冒烟结果 2026-10-29 02:57:35 +08:00
胡飞 abe0dddd3c docs(design): 记录独立产品路径初始化 2026-10-29 02:55:03 +08:00
胡飞 d598077df3 docs(design): 记录 navop-data 主页 2026-10-29 02:53:17 +08:00
胡飞 f1b5dc4d1d docs(design): 记录 navop-shell 真实主页 2026-10-29 02:42:14 +08:00
胡飞 ac6f696beb docs(design): 记录 main lib 化与 apps/navop 全量包 2026-10-29 02:35:03 +08:00
胡飞 0e6ecd79e0 docs(design): 记录 runtime_redis/runtime_sftp 拆分 2026-10-29 02:29:26 +08:00
胡飞 ca1ce5d90c docs(design): 记录 runtime_core/runtime_database 拆分 2026-10-29 02:26:38 +08:00
胡飞 b7fa5ff7e3 docs(design): 记录会话日志领域迁移 2026-10-29 02:20:26 +08:00
胡飞 d40a5130ca docs(design): 记录 RDP/VNC 领域迁移 2026-10-29 02:14:31 +08:00
胡飞 658dd71540 docs(design): 记录惰性打开修复 2026-10-29 02:07:46 +08:00
胡飞 f0bfaf0e5a docs(design): 记录端口转发领域迁移 2026-10-29 01:50:50 +08:00
胡飞 d127c4cef2 docs(design): 记录 SFTP 领域迁移 2026-10-29 01:47:37 +08:00
胡飞 082eb5f8ec docs(design): 记录 SSH 领域迁移与事件桥 2026-10-29 01:43:10 +08:00
胡飞 78cd7f038a docs(design): 记录本地终端迁移 2026-10-29 01:31:31 +08:00
胡飞 f548b9618f docs(design): 修正 MongoDB 提交号 2026-10-29 01:14:30 +08:00
胡飞 de6ca16d66 docs(design): 记录 MongoDB 迁移 2026-10-29 01:14:28 +08:00
胡飞 fd1d63166b docs(design): 记录 Database 打开路径迁移 2026-10-29 01:12:07 +08:00
胡飞 e19f7005c1 docs(design): 记录 Redis 工作区迁移 2026-10-29 01:07:47 +08:00
胡飞 b099e1936f docs(design): 记录 data_domain Redis 迁移 2026-10-29 01:05:05 +08:00
胡飞 b2b3531d95 docs(design): 记录 Product 化 bins 与 TabOpener 模式参数 2026-10-29 01:00:22 +08:00
胡飞 1ba6df6874 docs(design): 记录 KnownHosts 域迁移进度 2026-10-29 00:57:38 +08:00
胡飞 dbdeb6693e docs(design): 记录 Product 启动契约进度 2026-10-29 00:50:20 +08:00
胡飞 b0a84f775a docs(design): 记录 shell/data 骨架包进度 2026-10-29 00:47:25 +08:00
胡飞 cf60c58b74 docs(design): 更新 app_kit 与身份路径切换进度 2026-10-29 00:45:38 +08:00
胡飞 7f2f5e2e31 docs(design): 记录三产品拆分的实施进度 2026-10-29 00:36:33 +08:00
胡飞 8093ed9d93 docs(design): 增加 navop 三产品彻底拆分设计稿 2026-10-29 00:09:02 +08:00
胡飞 4ec3421523 feat(ai): 终端选中内容随消息送进侧边栏 AI
根因:资源作用域只告诉模型「选中了 N 行」的摘要,正文还得模型自己再调一次
`terminal.read`,用户常常直接在提问里重贴一遍。

修法:
- `ai_chat_view` 新增 `ContextAttachment` 与 provider,发送前把宿主给的正文拼在
  用户输入前面;拼好的文本同时进转录,用户回看就知道自己送出了什么。
- 终端侧边栏接上 provider,把选区包成
  `<terminal_selection source lines truncated>`,超 8000 字截断并标注,
  剩下的仍交给 `terminal.read`。
- `selection` 作用域补一句「正文已随消息附上」,模型不必再猜要不要读。

验证:
- `RUSTFLAGS="-D warnings" cargo test -p terminal_view -p ai_chat_view`:943/12/617/
  5/11 全通过(含 4 条新投影测试、2 条附件拼接测试)。
- `cargo clippy -p terminal_view -p ai_chat_view --all-targets`:仅既有告警。
2026-10-27 10:42:31 +08:00
胡飞 306eb8ce40 feat(ai): 读终端可省略 target,并返回全屏/选中现场
侧边栏 AI 要判断「用户是不是在 vim 里」,原先只能先 connections.list_sessions
筛出终端 id,再 terminal.read 显式传 target;读回来的结果也分不清全屏程序界面和
shell 输出。

- public_mcp 的 agent 适配器把 terminal.read 的 target 从 required 摘掉,模型不传时
  用会话里唯一的终端资源补上;同类资源不止一个就报错让它显式传 id,不猜。MCP 直连
  表面的 schema 不变,仍强制 target。
- agent_runtime 新增 ResourceContext::default_target_of_kind:当前资源类型匹配时优先,
  否则只在同类唯一时返回。
- terminal.read 结果增补 alt_screen / display_offset / cursor_row / cursor_column /
  selection,都在终端锁内一次取全。

验证:
- cargo test -p terminal -p public_mcp -p agent_runtime -p terminal_view -p ai_chat_view
  (RUSTFLAGS=-D warnings)全绿,含新增 2 条 recent_text 现场测试与 4 条 target 可省略测试。
- cargo clippy:改动文件无新增告警。
2026-10-27 09:49:43 +08:00
胡飞 d0e8fe6bee fix(ai): SSH 终端的实时状态也交给侧边栏 AI
上一版刷新器把手上的终端设为默认目标,对 SSH 侧边栏并不成立:那里的默认
目标是连接,sftp.*、ssh.exec 等连接级工具都依赖它,改成终端会让这些工具
全部需要显式 target,属于回归。

改为按侧边栏类型区分默认目标:

- 本地终端:终端仍是默认目标,连接只作为候选。
- SSH 终端:连接保持默认目标,活动终端带实时作用域(cwd / screen /
  selection / size / process)紧跟其后;连接上写 `terminal=<终端 id>`,
  终端上写 `connection=<连接 id>`,两边互相指得到,模型不必先
  `connections.list_sessions` 再筛 session。
- 连接被「禁止 AI 操作」时返回 None,沿用宿主静态资源池,避免绕过连接级策略。

接线:TerminalSidebar 在连接模式下把默认目标的资源 id 记在
`ai_connection_resource`,initialization 建完侧边栏后交给刷新器;刷新器每轮
重读连接列表,连接的改名/删除/策略变更下一轮即生效。

验证:
- cargo test -p terminal_view -p ai_chat_view(RUSTFLAGS=-D warnings):
  941 + 12 + 613 等全部通过,新增 SSH 语义用例 3 条。
- cargo clippy -p terminal_view --all-targets:新增代码无告警。
- 设计文档补 2.3 默认目标对比与 2.4 SSH 接线。
2026-10-27 09:24:33 +08:00