胡飞
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