Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
75c2dfd
docs(plugins): 提出 Windows 声明式插件宿主提案 Note
Mucheen Oct 22, 2026
fea041f
feat(windows): 声明式插件宿主 v0 —— 包存储、启动校验与语言服务器启动接线
Mucheen Oct 22, 2026
c9ada0d
feat(windows): 声明式插件宿主 M2 —— 磁盘导入链、管理界面与版本探测
Mucheen Oct 22, 2026
3217d7c
feat(windows): 声明式插件宿主 M3 —— 声明式设置、运行计划与契约 PHP 包
Mucheen Oct 22, 2026
e47ebc6
feat(windows): 声明式插件宿主 M4 —— Web 工具窗口(ui 2)
Mucheen Oct 22, 2026
2d9860a
chore(windows): 清理 plugin_host/web.rs 未使用的 PageRequest 结构与 Deserializ…
Mucheen Oct 22, 2026
e7130f9
fix(windows): 修复插件宿主审查意见 —— 权限隔离、启动信封解包与端到端接线
Mucheen Oct 22, 2026
df2b8b6
merge: 同步 preview(#1331 提交目标、#1411 Agent parity、#1427 自然排序)
Mucheen Oct 22, 2026
e697cb2
merge: 同步最新 preview(#1431 运行服务进程树、#1410/#1416/#1422/#1429 macOS 修复)
Mucheen Oct 23, 2026
a3c4dca
fix(windows): 修复第二轮 review 意见 —— IPC 命令隔离与端到端接线收口
Mucheen Oct 23, 2026
114bc8a
Merge branch 'preview' into feat/windows-declarative-plugin-host
Mucheen Oct 23, 2026
f31b286
fix(windows): close declarative plugin review gaps
Mucheen Oct 23, 2026
f1cf8c4
Merge remote-tracking branch 'origin/preview' into feat/windows-decla…
Mucheen Oct 23, 2026
896407e
fix(windows): address plugin host review gaps
Mucheen Oct 23, 2026
83766df
Merge remote-tracking branch 'origin/preview' into feat/windows-decla…
Mucheen Oct 23, 2026
c198b54
fix(windows): harden declarative plugin page and probe boundaries
Mucheen Oct 24, 2026
a8fa614
Merge origin/preview into feat/windows-declarative-plugin-host
Mucheen Oct 24, 2026
ce0ef4d
Merge preview and migrate declarative plugin translations
Mucheen Oct 24, 2026
d34b794
fix(windows): drain declarative plugin owners before package changes
Mucheen Oct 24, 2026
2b56c34
merge: resolve PR #1424 conflicts with preview
Mucheen Oct 24, 2026
87ae26f
test(windows): isolate plugin host in terminal lifecycle fixture
Mucheen Oct 24, 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

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,20 @@ jobs:
node .agents/skills/write-stable-tests/scripts/run-bun-tests-with-timing.mjs --suite-timeout-ms 60000 --report .artifacts/test-stability/windows-notifications.json -- src/features/notifications
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
- name: Test declarative plugin lifecycle and UI
shell: pwsh
timeout-minutes: 9
run: |
$runner = ".agents/skills/write-stable-tests/scripts/run-bun-tests-with-timing.mjs"
# Native/event and presentation mocks must not leak between suites.
$pluginSuites = @('declarative-plugin-lifecycle', 'declarative-plugin-run', 'declarative-plugin-ui', 'plugin-lifecycle-listener', 'plugin-web-open-file', 'plugin-web-appearance')
foreach ($suite in $pluginSuites) {
node $runner --suite-timeout-ms 60000 --report ".artifacts/test-stability/windows-$suite.json" -- "src/features/plugins/$suite.test.ts"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
}
node $runner --suite-timeout-ms 60000 --report .artifacts/test-stability/windows-plugin-lsp-launch.json -- src/features/editor/lsp/resolve-editor-lsp-launch.test.ts
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
- name: Test Agent panel and capability gate
shell: pwsh
run: node .agents/skills/write-stable-tests/scripts/run-bun-tests-with-timing.mjs --suite-timeout-ms 60000 --report .artifacts/test-stability/windows-agent.json -- src/features/agent src/features/editor/stores/buffer-agent-conversation.test.ts src/utils/markdown-links.test.ts src/config/backend-capabilities.test.ts src/i18n src/features/file-system/utils/file-system-drop-controller.test.ts src/ui/icons.test.tsx
Expand Down
11 changes: 11 additions & 0 deletions Plugins/win/Official/PhpSupportContract/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# PhpSupportContract

契约 v1 形态的 PHP 支持包(bundled 技术验收样本)。它验证 Windows 声明式插件宿主的
validate → launch plan → run plan 全链路在真实包上可用。

与 Worker 版 PhpSupport(`Plugins/win/Official/PhpSupport`)的关系:两包并存,
Worker 版优先(语言注册与 composer scripts 动态运行动作仍由它提供)。契约 v1 尚无
动态运行动作的等价能力,删除 Worker 版会造成功能退化,完整迁移推迟到契约补齐该能力,
原因记录在 Windows 声明式插件宿主 Note。

`language-server/bin/intelephense.js` 是占位入口;真实分发打包 Intelephense 时替换。
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// Bundled Intelephense entry point; see Plugins/win/README.md.
94 changes: 94 additions & 0 deletions Plugins/win/Official/PhpSupportContract/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
{
"schemaVersion": 2,
"id": "dev.lithe.plugin.php-support",
"displayName": "PHP Support (contract)",
"version": "1.0.0",
"pluginAPIVersion": 2,
"vendor": {
"id": "dev.lithe",
"displayName": "Lithe",
"signatureRequirement": "sameTeamAsHost"
},
"permissions": [
"languageServer.launch",
"process.run",
"process.test"
],
"activationEvents": [
"onLanguage:php",
"onRun:php",
"onTest:php"
],
"languages": [
{
"id": "php",
"displayName": "PHP",
"fileExtensions": [
"php",
"phtml"
],
"projectFileNames": [
"composer.json"
]
}
],
"languageServers": [
{
"languageID": "php",
"languageIdentifier": "php",
"launch": {
"kind": "runtime",
"tool": "node",
"entry": "language-server/bin/intelephense.js"
},
"arguments": [
"--stdio"
]
}
],
"executionProviders": [
{
"languageID": "php",
"run": {
"executable": {
"command": "php"
},
"arguments": [
"${file}",
"${userArguments}"
]
},
"test": {
"frameworkID": "phpunit",
"workspaceLabel": "All PHP Tests",
"projectMarkers": [
"composer.json",
"phpunit.xml",
"phpunit.xml.dist"
],
"testFilePatterns": [
"*test.php"
],
"executable": {
"command": "php"
},
"workspaceArguments": [
"vendor/bin/phpunit"
],
"fileArguments": [
"vendor/bin/phpunit",
"${file}"
],
"testCaseArguments": [
"vendor/bin/phpunit",
"--filter",
"\b${testName:regex}\b",
{
"value": "${file}",
"when": "fileSelected"
}
]
}
}
]
}
7 changes: 5 additions & 2 deletions shared/contracts/plugins/v1/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1529,8 +1529,11 @@ host's provider requests: once given for a plugin and workspace, it holds
until the project is closed.
macOS implements web content with WKWebView and advertises `ui: [1, 2, 3]`
(including the native controls described below).
Windows has no WebView2 host yet and still advertises `ui: [1]`, so Core refuses
`ui` 2 plugins there with `plugin.api.unsupported`.
Windows implements web content with WebView2 under a plugin-private
`lithe-plugin://` origin and also advertises `ui: [1, 2]`; its bridge v0
answers `ui.getState`, `ui.setState`, and `workspace.openFile`, and returns
`plugin.web.unknownMethod` for `build.*` and `functions.*` until the Windows
build-system capability lands. Windows does not advertise `ui` 3.

### Future public extension direction (not implemented in API level 2)

Expand Down
35 changes: 34 additions & 1 deletion shared/i18n/locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -9095,7 +9095,40 @@
"windows.whenASessionStarts": "When a session starts",
"windows.whenATurnEnds": "When a turn ends",
"windows.whenSubmittingAPrompt": "When submitting a prompt",
"windows.whenToRun": "When to run"
"windows.whenToRun": "When to run",
"run.declarativePlugins": "Declarative plugins",
"settings.declarativePlugins.title": "Declarative plugins (contract v1)",
"settings.declarativePlugins.description": "Packages that declare processes; the host launches them after an install review. Themes and Worker extensions live in the Extensions browser.",
"settings.declarativePlugins.import": "Import package…",
"settings.declarativePlugins.reviewTitle": "Install {name} {version}?",
"settings.declarativePlugins.unverified": "Unverified publisher: this package has no signature. Its permissions and programs are shown below.",
"settings.declarativePlugins.confirmInstall": "Install",
"settings.declarativePlugins.programDeclaration": "Program declaration ({count})",
"settings.declarativePlugins.empty": "No declarative plugins installed.",
"settings.declarativePlugins.toggle": "Enable or disable {name}",
"settings.declarativePlugins.rollback": "Roll back",
"settings.declarativePlugins.uninstall": "Uninstall",
"settings.declarativePlugins.source.bundled": "bundled",
"settings.declarativePlugins.source.installed": "installed",
"settings.declarativePlugins.settings": "Settings",
"settings.declarativePlugins.webWindows": "Web tool windows",
"settings.declarativePlugins.openWindow": "Open",
"settings.declarativePlugins.closeWindow": "Close",
"settings.declarativePlugins.placement.left": "left",
"settings.declarativePlugins.placement.right": "right",
"settings.declarativePlugins.placement.bottom": "bottom",
"settings.declarativePlugins.showSettings": "Settings…",
"settings.declarativePlugins.hideSettings": "Hide settings",
"settings.declarativePlugins.settingsUnavailable": "This plugin's settings could not be resolved.",
"settings.declarativePlugins.settingSource.default": "default",
"settings.declarativePlugins.settingSource.global": "user value",
"settings.declarativePlugins.settingSource.project": "project override",
"settings.declarativePlugins.settingScope.global": "all workspaces",
"settings.declarativePlugins.settingScope.project": "this workspace",
"settings.declarativePlugins.settingEffect.restart": "takes effect after the language server restarts",
"settings.declarativePlugins.settingEffect.immediate": "applied to the running language server",
"settings.declarativePlugins.settingEffect.reload": "takes effect when the plugin model reloads",
"settings.declarativePlugins.settingEffect.nextRun": "takes effect on the next run"
},
"overrides": {
"windows": {
Expand Down
35 changes: 34 additions & 1 deletion shared/i18n/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -9095,7 +9095,40 @@
"windows.whenASessionStarts": "会话开始时",
"windows.whenATurnEnds": "一轮结束时",
"windows.whenSubmittingAPrompt": "提交提示词时",
"windows.whenToRun": "何时运行"
"windows.whenToRun": "何时运行",
"run.declarativePlugins": "声明式插件",
"settings.declarativePlugins.title": "声明式插件(契约 v1)",
"settings.declarativePlugins.description": "以声明方式提供进程的插件包,宿主在安装审查后代为拉起。主题与 Worker 扩展请在扩展浏览器中管理。",
"settings.declarativePlugins.import": "导入包…",
"settings.declarativePlugins.reviewTitle": "安装 {name} {version}?",
"settings.declarativePlugins.unverified": "未认证发布者:该包没有签名。其权限与程序声明如下。",
"settings.declarativePlugins.confirmInstall": "安装",
"settings.declarativePlugins.programDeclaration": "程序声明({count} 项)",
"settings.declarativePlugins.empty": "尚未安装声明式插件。",
"settings.declarativePlugins.toggle": "启用或停用 {name}",
"settings.declarativePlugins.rollback": "回滚",
"settings.declarativePlugins.uninstall": "卸载",
"settings.declarativePlugins.source.bundled": "内置",
"settings.declarativePlugins.source.installed": "已安装",
"settings.declarativePlugins.settings": "设置",
"settings.declarativePlugins.webWindows": "Web 工具窗口",
"settings.declarativePlugins.openWindow": "打开",
"settings.declarativePlugins.closeWindow": "关闭",
"settings.declarativePlugins.placement.left": "左侧",
"settings.declarativePlugins.placement.right": "右侧",
"settings.declarativePlugins.placement.bottom": "底部",
"settings.declarativePlugins.showSettings": "设置…",
"settings.declarativePlugins.hideSettings": "收起设置",
"settings.declarativePlugins.settingsUnavailable": "无法解析该插件的设置。",
"settings.declarativePlugins.settingSource.default": "默认",
"settings.declarativePlugins.settingSource.global": "用户值",
"settings.declarativePlugins.settingSource.project": "项目覆盖",
"settings.declarativePlugins.settingScope.global": "所有工作区",
"settings.declarativePlugins.settingScope.project": "当前工作区",
"settings.declarativePlugins.settingEffect.restart": "语言服务器重启后生效",
"settings.declarativePlugins.settingEffect.immediate": "立即应用到运行中的语言服务器",
"settings.declarativePlugins.settingEffect.reload": "插件模型重新加载后生效",
"settings.declarativePlugins.settingEffect.nextRun": "下次运行生效"
},
"overrides": {
"macos": {
Expand Down
Loading
Loading