Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7563ec7
feat(workspace): enforce directory indexing exclusions (#958)
lin-coco Oct 30, 2026
4d4233a
Merge commit '7563ec71bbce32f6710a182f2d39efc84e4acb65' into codex/15…
lin-coco Oct 30, 2026
ba421e2
fix(workspace): honor indexing ownership across Windows roots
lin-coco Oct 30, 2026
4e95fe0
fix(workspace): 修复索引租约生命周期与跨窗口同步
lin-coco Oct 31, 2026
9068703
Merge preview into PR 1597 and harden indexing policy transactions
lin-coco Oct 31, 2026
7c5173b
docs(workspace): 记录复审修复与 macOS 原生验收证据
lin-coco Oct 31, 2026
2caac89
fix(lsp): 保留 Windows 冷启动索引策略的原生路径身份
lin-coco Oct 31, 2026
ea6fe92
fix(macos): 保持打开身份并修复索引回归验证
lin-coco Oct 31, 2026
4e7b844
Merge preview into PR 1597 and preserve history policy boundaries
lin-coco Oct 31, 2026
e2e7f5c
feat(plugins): 独立编辑器高亮与动作 API,复用普通函数调用 (#1617)
xiaoyumuxi Oct 31, 2026
921c888
fix(indexing): preserve scan ownership and snapshot publication
lin-coco Oct 31, 2026
3245876
docs(indexing): record final macOS native acceptance evidence
lin-coco Oct 31, 2026
bc57f7c
fix(search): localize indexing failures and synchronize deferred Run …
lin-coco Oct 31, 2026
d678b2d
test(macos): synchronize every initial Run inventory release
lin-coco Oct 31, 2026
c892981
fix: preserve excluded history and validate indexing marks
lin-coco Oct 31, 2026
d5e47e1
fix(macos): 修复分支列表悬停长分支名时触控板无法滚动 (#1621) (#1625)
ZJUSCODE Oct 31, 2026
4e47d78
Merge commit 'c892981e5b588878c1b31bc82879d9292342991b' into codex/15…
lin-coco Oct 31, 2026
18841d1
fix(workspace): preserve directory roles and indexing watcher ownership
lin-coco Oct 31, 2026
9821347
test(windows): use canonical roots in indexing lifecycle fixtures
lin-coco Nov 1, 2026
7eeb4b3
test(windows): identify the owned Run fixture descendant explicitly
lin-coco Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ Project 文件树则需要主目录所属仓库的原始相对路径。互相覆
单仓库时两个投影可直接使用同一个对象;多仓库 Commit 聚合文件并保留
`repositoryPath` 和仓库相对路径,Project 投影保留主目录原始路径。
- `GitStatusRefreshHost` 随主布局运行,监听全部已发现仓库的变更并合并读取。
元数据监听覆盖全部已知仓库;重新安装或卸载时释放每个监听标识。
元数据监听由应用级控制器按存活工作区运行实例维护,覆盖主根、附加根及已知仓库;
切换活动项目不释放。移除根、关闭实例或窗口才撤销对应注册。窗口身份由原生注入,
每个仓库拥有独立注册 ID,规范路径共享底层监听,防止同窗多仓库相互覆盖。
重新安装使用新 ID,迟到完成仍须回收;安装失败等待后续成员变化或焦点恢复重试。
打开仓库子目录时同时监听其祖先规则目录;仓库链接变化重建观察并刷新策略。
顶部与文件树的全局状态刷新延续原先始终更新的行为,Commit 自动刷新设置仍控制
面板额外的分支、stash 等读取,不再使顶部保留旧状态。
- 原始记录及相同投影复用对象,重复的相同快照不会反复重建文件列表。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Issue #1351 要把 Maven、Gradle 这类插件从“只给声明”推进到“
| 插件提供插件函数 | 插件 | 插件后端 | `lithe/function/invoke` |
| 插件调用宿主能力 | 宿主 | 宿主 | `lithe/host/*`,按协议版本逐个开放 |

开发者判断时只问一句:**结果要不要被 Lithe 理解?** 要被 IDE 工作流、展示层或另一个平台使用的,就是领域能力,必须有类型化契约;只给插件自己界面用的,才是插件函数。
开发者判断时先问:**宿主需要理解哪个能力的数据?** 参与构建等原生领域工作流的结果走对应领域契约;高亮、文档和编辑器动作走独立扩展点的类型化契约,不因宿主需要展示就强塞进 Build/LSP/Debug。插件私有业务继续用插件函数,独立扩展点可以在用户操作时绑定同一插件的函数;边界见[独立插件能力与领域契约](2026-10-31-plugin-capability-and-domain-boundaries.md)。

### 2. 禁止回调自己

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

## 先说结论

安装、更新、回退、卸载、启用、停用一个插件时,只有“它的每一项贡献在宿主里都有运行期实现”的插件才免重启生效。判断由宿主后端决定,写在 `PluginDescriptor.canActivateWithoutRestart`,不是 `plugin.json` 里的字段,所以插件契约没有变化,也不需要同步 lithe-plugin-docs。这条规则目前只落地了第一阶段:只有“纯调试适配器插件”(只贡献 `debugAdapters`,以及它声明的语言和设置,没有后端、没有其他模块)满足条件。
安装、更新、回退、卸载、启用、停用一个插件时,只有“它的每一项贡献在宿主里都有运行期实现”的插件才免重启生效。判断由宿主后端决定,写在 `PluginDescriptor.canActivateWithoutRestart`,不是 `plugin.json` 里的字段,所以插件契约没有变化,也不需要同步 lithe-plugin-docs。这条规则目前落地了两类:第一阶段的“纯调试适配器插件”(只贡献 `debugAdapters`,以及它声明的语言和设置,没有后端、没有其他模块),和第二阶段的“纯语法高亮插件”(只贡献带 `grammar` 或编辑配置的语言,见 [独立插件编辑器 API](2026-10-31-plugin-editor-extension-apis.md))。两者也可以出现在同一个插件里。

满足条件的插件不进模块图,而是登记在一个**内存实时注册表**(`MacLivePluginRegistry`)里。注册表用后台线程扫描已安装目录,主线程只读取扫描结果快照。其他插件的路径完全不变:仍然写成 `.updateStaged`,等重启才生效。

Expand All @@ -23,7 +23,7 @@

### 1. 由后端能力决定,不是清单字段

`canActivateWithoutRestart` 现在的定义是:有调试适配器、没有 `backend` 声明、模块列表恰好是 `[debugAdaptersExtension(<插件 id>)]`,且该模块没有其他贡献。
`canActivateWithoutRestart` 现在的定义是:没有 `backend` 声明、模块列表非空,且每个模块都是 `debugAdaptersExtension(<插件 id>)` 或 `grammarsExtension(<插件 id>)`,并且没有其他贡献。语法模块只承载启用状态,它的运行期登记、撤回和查找由 `MacPluginEditorLanguages` 完成(编辑器每次变化都收到完整的语言列表,撤回就是从列表里拿掉)。

- 正确做法:新增一种贡献(例如语言服务器)的热激活时,先实现它的运行期登记和撤回,再在这个谓词里放行。
- 错误做法:在 `plugin.json` 里加 `restartRequired: false` 让插件作者声明。作者不了解宿主哪些贡献有运行期实现;声明错了,用户看到的是“装上了但没生效”。
Expand Down Expand Up @@ -97,12 +97,13 @@
5. 传给 Core 的 `registrationGeneration` 是准备调试适配器时注册表的 `generation`,Core 只比较是否相等,不解释数值。
6. `stopSessions(ofPlugin:)` 只停该插件拥有的会话。会话记录的所有者是创建时选中的插件;同一个语言下另一个插件的会话继续运行。
7. debug-only 声明里的文件扩展名会并入语言;扩展名集合变化会让该语言的服务器按原有规则重启。
8. 目前仍然需要重启的贡献:语言服务器、运行/测试、构建系统、VCS、项目生成器、界面贡献、`backend`、网页窗口。后续阶段按“先有运行期登记和撤回,再放进谓词”的顺序逐类加入,每类单独验证。
8. 目前仍然需要重启的贡献:语言服务器、运行/测试、编辑器动作后端(因为它依赖 `backend`)、构建系统、VCS、项目生成器、界面贡献、`backend`、网页窗口。后续阶段按“先有运行期登记和撤回,再放进谓词”的顺序逐类加入,每类单独验证。

## 验证

- `macos/Tests/LitheTests/PluginLiveActivationTests.swift`:谓词的正反例(含契约 fixture)、debug-only 语言与插件 id 排序无关、注册表的收录/代数/启用/撤回/按 id 取第一个、后台扫描不在主线程、扫描失败保留旧登记、另一窗口的通知触发重扫、管理器的安装/更新/回退/启用/卸载流程。等待事件使用带本地期限的 `ChangeLatch`,不用真实 sleep。
- `LanguageProviderCatalogSourceTests`(debug-only 声明不抢语言、顺序无关、不触发扩展提示、每次 load 读取实时声明)、`DebugModuleTests`(`providersSource` 每次调用都查)、`LanguageIntelligenceModuleTests`(出现调试器不会停正在运行的语言服务器)。
- `macos/Tests/LitheTests/PluginEditorLanguagesTests.swift`:纯语法插件满足谓词、带后端的工具插件不满足;实时语法随插件出现和消失。
- `scripts/macos/verify/verify-runtime-bundle-immutability.sh` 和 `./scripts/agent-notes/verify-agent-notes.sh`。

## 适用范围
Expand Down
Loading
Loading