Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
0f58f87
fix(windows): open focused files with configurable F4 command
puppyben1 Oct 23, 2026
1ec653c
ci(windows): include focused F4 navigation regression
puppyben1 Oct 23, 2026
3359bb7
test(windows): await process exit signals and own fixture cleanup
puppyben1 Oct 23, 2026
0ea8392
fix(search): open the focused excerpt line with F4
puppyben1 Oct 23, 2026
d37e4bf
refactor(plugins): 契约发布到 lithe-plugin-docs,fixture 按能力改名,SDK 移出主仓库 (#…
xiaoyumuxi Oct 23, 2026
c1a1f98
fix(macos): keep marketplace details inside split bounds (#1447)
Mucheen Oct 23, 2026
7661301
feat(agent): 完善技能、全局指令与 MCP 服务器设置 (#1381)
Mucheen Oct 23, 2026
f0072c9
fix(macos): 终端配色同步: 主题刷新、COLORFGBG 与订阅制背景通知 (#1448)
icefery Oct 23, 2026
18345cc
feat(vcs): Core 与 Node SDK 实现插件 VCS Provider 底层(#827 P1) (#1430)
xiaoyumuxi Oct 23, 2026
bb61147
feat(vcs): macOS 宿主接入插件 VCS Provider,SVN 改为独立社区插件(#827 P3) (#1441)
xiaoyumuxi Oct 23, 2026
f5ada5e
fix(macos): 修正 Agent 正文留白与 AI 设置排序 (#1450)
Mucheen Oct 23, 2026
ee5081e
fix(ci): 放宽 macOS Swift 编译预算并避免构建失败叠加报告失败 (#1449)
1lck Oct 23, 2026
c5d0907
feat(windows): 终端活动栏拖动停靠并修正搜索快捷键 (#1436) (#1446)
puppyben1 Oct 23, 2026
5ec99a2
fix(windows): Ctrl+Z 优先恢复键盘移动后的光标 (#1443)
puppyben1 Oct 23, 2026
45be960
docs(skill): gh 不支持 YAML 表单时允许按表单字段生成正文提交 Issue (#1458)
xiaoyumuxi Oct 24, 2026
71d09ed
feat(macos): 编辑区 Agent 大历史秒开与 Claude Desktop 式布局;Claude 支持官方订阅与 API K…
xiaoyumuxi Oct 24, 2026
19042e8
feat(macos): 新建项目向导,插件通过 projectGenerators 注入项目模板 (#1452)
xiaoyumuxi Oct 24, 2026
383d87e
feat(remote): 远程开发 Rust 核心——协议、轻量远端服务与传输链 (#1460)
xiaoyumuxi Oct 24, 2026
b9a83b0
feat(agent): 新增 Codex / Claude Code 原生 Hook 管理 (#1459)
Mucheen Oct 24, 2026
0dcbb19
fix(macos): shell 退出后自动关闭终端标签页 (#1456)
icefery Oct 24, 2026
854f814
feat(remote): 远端后端补全——文件监听、终端、登录环境、隧道与断线重连 (#1461)
xiaoyumuxi Oct 24, 2026
8e386de
feat(macos): 插件声明式原生界面与公共控件统一 (#1351) (#1423)
arkleselect Oct 24, 2026
d6a4ff9
feat(remote): 远程开发连接窗口——SSH 连接配置、测试、主机信息与打开远程文件夹 (#1463)
xiaoyumuxi Oct 24, 2026
3a8e94d
对齐 IDEA 的 macOS 数据库树与连接编辑器 (#1451)
arkleselect Oct 24, 2026
d3a3a42
fix(agent): 合并每轮思考与工具过程,默认折叠展示 (#1464)
Mucheen Oct 24, 2026
325504d
fix(lsp): Java 调用补全默认留空实参 (#1437) (#1440)
puppyben1 Oct 24, 2026
53f7052
feat(i18n): 统一双端完整语言资源与构建时生成 (#1449)
1lck Oct 24, 2026
13428e6
docs(notes): 提议把数据库拆成双端共用的独立插件
1lck Oct 24, 2026
829c729
fix(windows): 数据库后端未接入时如实标记并按普通文件打开
1lck Oct 24, 2026
4a339fa
fix(database): 生产保护按词法判定危险 SQL,执行前先由后端确认
1lck Oct 24, 2026
46fcda5
docs(notes): 记录数据库插件化的签名、远程开发与 Windows 决策
1lck Oct 24, 2026
8471b99
feat(plugins): 插件后端能力与函数协议 v2 宿主凭据服务
1lck Oct 24, 2026
749cf9d
docs(notes): 记录插件后端、协议 v2 凭据与 Agent 工具走 lithe MCP 的决策
1lck Oct 24, 2026
5af2608
feat(agent): Claude 与 Codex 官方订阅支持多账号与手动切换 (#1457) (#1471)
xiaoyumuxi Oct 24, 2026
42c5a30
docs: plan Windows plugin parity with macOS (#1468)
Mucheen Oct 24, 2026
c11d666
docs(notes): 规划 Java Support 独立分发与内置包迁移 (#1473)
Mucheen Oct 24, 2026
173c791
feat(macos): 宿主运行插件后端并通过 Keychain 提供凭据服务
1lck Oct 24, 2026
f8ae616
test(macos): wait for backend host responses with a continuation inst…
1lck Oct 24, 2026
ce175e0
docs(plugins): list the Rust SDK for plugin backends in the contract
1lck Oct 24, 2026
1017b6d
fix(database): read the proxy URL the macOS client sends
1lck Oct 24, 2026
d1d29d5
fix(database): end the SSH tunnel client with the request on every path
1lck Oct 24, 2026
de36083
feat(plugins): 插件网页桥接第 2 版加入文件对话框
1lck Oct 24, 2026
1e78b59
feat(windows): 声明式插件宿主(契约 v1)——包存储、安装链、设置、运行计划与 Web 工具窗口 (#1424)
Mucheen Oct 24, 2026
83017af
feat(macos): Agent 对话显示工具图片缩略图、点击放大,并将后台任务通知显示为状态行 (#1462) (#1472)
xiaoyumuxi Oct 24, 2026
68f2433
feat(plugins): list the database plugin and move the built-in module'…
1lck Oct 24, 2026
9227753
refactor: remove the built-in database module; the database is a plug…
1lck Oct 24, 2026
533423e
Merge remote-tracking branch 'origin/preview' into feat/database-plugin
1lck Oct 24, 2026
14c909f
feat(plugins): ship Database as a Lithe Store community plugin
1lck Oct 24, 2026
191c272
docs(database): record the macOS acceptance of the plugin migration
1lck Oct 24, 2026
d046fd1
Merge pull request #1470 from 1lck/feat/database-plugin
1lck Oct 24, 2026
3e3cd3f
fix(agent): 恢复压缩过的 Claude 会话时保留压缩前用户消息里的截图 (#1479)
xiaoyumuxi Oct 25, 2026
9224ead
feat(agent): 兼容 Claude Desktop 会话独有机制,Agent 面板以卡片呈现 (#1480)
xiaoyumuxi Oct 25, 2026
148fab0
fix(windows): integrate F4 navigation with preview and support shortc…
1lck Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,12 @@ JDT 通道曾触发其 15 秒测试期限,同一提交在 SharedRust 通道用
所有测试的时限来隐藏这类问题。计时工具用可控时钟验证普通、集成和总截止
时间,并验证 HTML 与 JUnit 不会把合法的集成耗时误判为失败。

checkout/clone 完整流程用例 `git_write_executes_checkout_preflight_clone_and_validation`
在 Windows CI 39935852248 中全部断言通过,Rust 内部计时 15.22 秒、测试进程计时
18.529 秒,超过默认十五秒后触发清缓存重编,继而耗尽原套件期限。该用例创建分叉
分支,覆盖干净、脏和未跟踪文件预检、智能/强制切换以及本地 clone,因此只为它在
SharedRust 和真实 JDT 两个入口设置三十秒预算;不延长请求或整套期限,不重试失败断言。

取消模块的确定性回归核对 mutation 后正常读取保留原截止时间和取消能力,
已取消或超时请求的独立读取仍受清理期限约束,错误和异常退出后恢复原状态。
真实仓库 rebase 回归核对 edit、conflict、continue、skip、abort 和过期 amendment;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,13 @@ MacServiceContainer
错误,不能把残留资源伪装成成功禁用。上述任务仍在主执行器上使用异步等待,
不阻塞线程、不新增插件代码加载能力。

使用真实 AppModel 的测试也必须遵守项目打开的清理顺序。`openProjectDirectly` 会启动
模块图关闭;项目文件快照已经发布不代表关闭完成。Safe Mode 测试要手动注入能力时,
先通过有截止的 `WorkbenchTestScope.run` 等待 `awaitModuleRuntimeShutdown()`,再放入
测试能力。否则迟到的 shutdown 事件可能移除刚注入的能力,让前几次搜索通过、随后
查询全部为空。不要用睡眠或反复重新注入能力掩盖这个顺序;搜索排除回归与插件页面
生命周期测试都使用同一个明确的完成边界。

### 数据库视图在模块释放后的刷新

退出应用或休眠数据库模块时,SwiftUI(macOS 的声明式界面框架)可能先刷新
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ Swift 源码,也不得依赖 macOS 类型。
| `Plugins/win/` | Windows 所有的插件包 |
| `frontend/editor/` | 两端共同依赖的 Monaco 表现层、分词与编辑器模型;不调用平台 API |
| `shared/` | 跨平台契约和夹具,不放编译实现 |
| `infra/` | 仓库级开发和验证基础设施 |
| `third_party/` | 固定版本的上游清单和必要的局部源码补丁 |

应用层依赖方向如下:
Expand Down Expand Up @@ -272,5 +271,4 @@ Core 操作会随协议演进持续增加,逐个新增 Tauri command 会在
- `shared/`
- `frontend/editor/`
- `scripts/`
- `infra/`
- `third_party/`

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ macOS 的工具窗口位置由工作台维护,功能模块继续维护自己
## 后果

收益是现有内容可以在不同区域显示,位置、顺序与尺寸可以重启恢复。
代价是新增内置工具窗口必须提供稳定标识和默认布局;Windows 尚未同步此次移动能力,功能矩阵明确记录差距。
代价是新增内置工具窗口必须提供稳定标识和默认布局;Windows 目前只支持终端底部与右侧互移,完整分组和排序的差距由功能矩阵记录。
移动可能重建原生呈现容器,但功能状态仍归原模块所有;终端与编辑器等原生资源必须继续遵守既有挂载生命周期。

## 验证
Expand All @@ -94,6 +94,41 @@ macOS 的工具窗口位置由工作台维护,功能模块继续维护自己
- `macos/Sources/Lithe/Services/Workbench/WorkbenchLayoutStore.swift`
- `macos/Sources/Lithe/Views/Workbench/`
- `macos/Tests/LitheTests/ToolWindowDockingTests.swift`
- `windows/tauri/src/features/layout/components/terminal-dock-layout.tsx`
- `windows/tauri/src/features/layout/components/bottom-pane/bottom-pane.tsx`

## Windows 终端入口拖动与左、右、底部停靠

Windows 可直接拖动活动栏的终端图标,停靠到左侧、右侧或底部;入口随位置移动到对应侧栏,
底部使用左侧入口。终端隐藏或其他工具活动时也能开始拖动,只有有效释放才打开终端,
普通点击或键盘激活仍切换显隐。两侧活动栏与内容布局处于同一拖动上下文,侧栏本身也是落点,
因此在右下角释放会选择右侧,而不会误判为底部。终端工具栏的移动按钮保留为补充入口。
活动栏有效释放后先提交面板显隐和活动工具,React 完成 DOM 更新后才请求创建或聚焦终端;
不能在同一个 pointerup 处理器里对仍隐藏的 xterm 同步 focus。待激活请求绑定当前工作区,
提交期间切换项目或工具会丢弃请求,不使用固定延时,也不重新挂载终端。
Esc、窗口失焦、窗口大小变化、无效区域释放、
切换项目及卸载都会取消拖动,不保存位置。落点按拖动开始时的工作区和面板实际边界计算,
底部角落优先保留来源边,避免底部水平拖动突然跳到右侧。

布局使用 CSS Grid(网格布局)的区域名移动同一份 BottomPane,不能把它分别放到两个条件分支。
例如正确做法是只把 panel 区域从底行改到左列或右列;不要销毁 TerminalContainer 再在侧边重建它,
否则会重复注册创建终端的监听器并丢失局部分屏状态。改变底部全宽/编辑区宽度、停靠、
隐藏和再次展开都保留容器;PTY(终端进程连接)和 xterm 输出仍由原来的 TerminalHost 管理。
原有终端标签页的拖动继续用于排序或送入编辑器,与整个面板的移动按钮分开。

位置、侧边宽度和底部高度使用现有 Windows 设置存储保存,作用于当前应用设置,
并非 macOS 的按工作区六组布局。旧设置默认底部、400px 宽、320px 高,未知位置安全回到底部;
尺寸在加载和使用时分别校验,并按剩余工作区限制。持续调整复用 document-resize-session,
每帧只改局部 DOM,结束才保存;切换位置/项目及卸载清理监听器。左侧分隔条放在面板右边缘,
向右拖动增加宽度;保持同一 DOM 子节点顺序,通过 CSS 排序移动分隔条,防止终端因换位而重建。
其他底部工具仍使用原来的单活动工具语义,不支持和终端同时展开,也不随终端移到侧边。
本次没有新增运行时资源目录或原生协议。

验证:Windows Frontend 计时 harness 运行
`windows/tauri/src/features/layout/components/bottom-pane/bottom-pane-terminal-lifecycle.test.tsx`,
覆盖真实左右活动栏入口与 BottomPane 的三边停靠、预览先于保存、取消/迟到释放、宽度边界、
全宽切换、隐藏再打开、输入 DOM 和请求监听器保留;设置归一化测试覆盖旧数据和损坏数据恢复。
这些组件测试不等同于 Windows WebView2 实机验收,矩阵保持 pending。

拖动回归补充:`ToolWindowDockingTests.horizontalDragUsesTheBottomPanelHeightAndActualSplitBounds`
覆盖底部平移、编辑区排除、遮罩保持实际高度及不等宽双组;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Run、Debug 和 Stop 的主工具栏入口也使用宿主贡献 ID,与插件

多个窗口属于同一模块时,运行时合并在途构造。取消一个 UI 请求只撤回这个窗口的显示意图,另一个窗口仍可等待同一次模块激活。禁用和关闭先阻止新激活,再取消并等待已有激活清理,完成后才释放资源;晚到的激活不能重新发布能力和贡献。宿主发出 `module.activation-joined` 事件使这种等待可观察,正常取消不显示错误通知。这是宿主生命周期行为,不允许插件在清单里运行状态脚本。

声明式 UI 目前只支持宿主渲染的静态文本窗口和打开本插件窗口的命令。窗口和命令可以声明宿主图标的稳定语义 ID,或包内 SVG/PNG 及可选亮暗变体。宿主统一图标槽位、着色和交互状态;命令面板选中行的模板图标使用宿主选中文字颜色,键盘移动选择时品牌图标仍保持对应亮暗资产的原色;品牌模式只保留资产原色,不改变外层按钮规范;宿主图标声明 original 模式时同样使用原生资源原色,缺少打包资源的调试运行仍使用宿主占位图标。工作台中的窗口与工具栏管理子菜单也复用已注册图标,通过共享下拉组件呈现,不单独定义菜单样式。内部旧 `icon` 字符串仍属于原生模块元数据,声明式字段通过有类型的 `uiIcon` 接入,不能把它解释成 SF Symbol 或任意资源路径。这个阶段范围保证第一条接入路径可以完整验证。API v2 的窗口必填文本、命令必关联窗口,以及无语言/无 UI 的拒绝规则继续保持兼容;这些规则不应复制到下一版公共接口。后续版本化原生组件、独立动作和领域 Provider 的设计见[公共扩展契约与原生 Provider 接入方向](../../proposed/architecture/2026-10-13-public-extension-contract-and-provider-api.md),当前尚未实现。
API level 2 的声明式 UI 保持宿主渲染的静态文本窗口和打开本插件窗口的命令。ui 3 已新增树/列表、面板工具栏和右键菜单,范围与限制见[声明式原生插件树与动作](../feature/2026-10-21-declarative-native-plugin-ui.md)。窗口和命令可以声明宿主图标的稳定语义 ID,或包内 SVG/PNG 及可选亮暗变体。宿主统一图标槽位、着色和交互状态;命令面板选中行的模板图标使用宿主选中文字颜色,键盘移动选择时品牌图标仍保持对应亮暗资产的原色;品牌模式只保留资产原色,不改变外层按钮规范;宿主图标声明 original 模式时同样使用原生资源原色,缺少打包资源的调试运行仍使用宿主占位图标。工作台中的窗口与工具栏管理子菜单也复用已注册图标,通过共享下拉组件呈现,不单独定义菜单样式。内部旧 `icon` 字符串仍属于原生模块元数据,声明式字段通过有类型的 `uiIcon` 接入,不能把它解释成 SF Symbol 或任意资源路径。这个阶段范围保证第一条接入路径可以完整验证。API v2 的窗口必填文本、命令必关联窗口,以及无语言/无 UI 的拒绝规则继续保持兼容;这些规则不应复制到下一版公共接口。后续版本化原生组件、独立动作和领域 Provider 的设计见[公共扩展契约与原生 Provider 接入方向](../../proposed/architecture/2026-10-13-public-extension-contract-and-provider-api.md),当前尚未实现。

Agent 的配置入口由同一个目录补齐,移动到任何已有停靠区域后仍可找到;禁用 Agent 只停止模块资源,保留宿主配置说明。Services 的显示动作复用数据库按需激活入口,激活成功后只展开 Services,不额外打开数据库侧栏。动作可用性与内容可渲染性分别判断:未激活的 Services 仍能请求 Show,实际停靠内容必须同时满足 renderer 的可见/选中条件和动作可用性;旧布局中的 Maven 在非 Maven 项目不占据停靠区域。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,15 @@ dev.lithe.plugin.java-support/
- 不要为了恢复某个语言的调试或测试,把能力目录的合并规则改成“插件没声明就保留宿主原有能力”,也不要在目录或注册表里按 `java` 放行。前者让 PHP、Go 的插件停用后宿主重新运行内置工具,后者是按名字的特判。
- 不要往插件包里写任何东西。可写状态用 `${stateDir}`、`${workspaceStateDir}`,或像 JDT 那样由集成放进宿主缓存。

### Java 调用补全留空实参

构造器和方法补全由共享 JDT 适配器设置 `java.completion.guessMethodArguments: "off"`,Windows 和 macOS 一致。输入 `new No` 后接受 Node 候选得到 `Node()`,括号内保留光标,由用户填写实参;方法候选仍可展示签名,自动导入和其他语言的 snippet 不受影响。初始化、配置通知及按 section 拉取配置必须返回相同值,防止 JDT LS 后续恢复参数占位。

来源是当前固定的 [JDT LS v1.61.0](https://github.com/eclipse-jdtls/eclipse.jdt.ls/tree/v1.61.0):`Preferences.java` 默认选择 `INSERT_PARAMETER_NAMES`,`CompletionProposalReplacementProvider.appendGuessingCompletion` 在 `OFF` 时只插入光标。正确做法是使用该上游设置,同时保留插件声明的其他 completion 项;不要在 Monaco 中用正则删除参数或禁用通用 snippet。后两种方案会误伤方法体模板、其他语言和补全解析后的自动导入。代价是 Java 默认不再提供可逐个替换的参数名占位,JDT LS 也会将构造器重载候选合并为类型候选;这次不增加新的设置界面。

`java_completion_leaves_arguments_empty_across_configuration_channels` 和 `shared/fixtures/lsp/java-completion-v1.json` 验证三个配置入口及插件其他 completion 项的保留;实机验收仍需分别确认两端 Tab 接受候选后的位置和自动导入。
运行会话保留初始化时插件声明的 completion 对象,配置通知和 `java`、`java.completion` 及其叶节点请求均从同一份对象应用 `guessMethodArguments=off`。例如插件声明的 `favoriteStaticMembers`、`filteredTypes` 不得在初始化后被通知或拉取结果清空;引擎测试同时检查真实会话接线,不能只用默认设置证明三个入口一致。

## 考虑过的备选方案

### 只把文件搬进插件包,宿主继续扫描目录
Expand Down
Loading
Loading