Repository navigation
feat(database): 数据库模块改造为组织仓库中的独立插件 - #1470
Merged
Merged
Conversation
记录数据库模块的双端评估(规则三份不一致、Windows 从未接上后端) 和插件化方案:组织仓库独立插件、网页界面、Rust 后端、官方签名, 主仓库只提供插件后端、宿主凭据、MCP 声明等通用能力。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows 的数据库后端从未接入(backend-capabilities 中 database 为 false, 前端调用的数据库命令没有原生实现),但 .db/.sqlite/.duckdb 文件仍被送进 数据库查看器,功能矩阵也标为 implemented。 - getDatabaseTypeFromPath 遵循同一能力开关,后端不可用时这类文件走普通 二进制/文本路由,打开与会话恢复共用此判断 - 功能矩阵中 Windows 的四项数据库能力改为 missing / not-applicable - README 注明数据库工作台目前仅支持 macOS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- sidecar 的危险 SQL 判定从字符串前缀/" WHERE " 匹配改为词法分析:去掉注释、 字符串、引号标识符和 $$ 块;按语句逐条检查;WHERE 必须直接限定该 UPDATE/DELETE(子查询里的 WHERE 不算);识别 WITH ... DELETE 与数据修改型 CTE;DROP/TRUNCATE(含 ALTER ... DROP)需要确认;排除 FOR UPDATE、 ON DELETE CASCADE、GRANT、MySQL TRUNCATE() 等非写入用法;MySQL/MariaDB 与 PostgreSQL E'' 字符串按反斜杠转义处理,SQL Server 识别 [标识符]。 - 修复根因:执行前格式化会把 WHERE 换到新行,旧判定只认 " WHERE ",导致 生产保护连接上所有带 WHERE 的 UPDATE/DELETE 都被拒绝。 - sidecar 新增不连库的 checkWriteProtection 方法;macOS 在生产保护连接执行写入 前先问后端,需要确认时弹出原有确认框,避免批量执行到一半被拒。 - 补充 Rust 金样例测试与 Swift 预检测试。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 24, 2026
- 新增 level 3 能力 `backend` 1:插件自有的长驻进程,复用 serverProcess
启动字段与安装审查(packagedBackend 等),需 `backend.launch` 权限和
web 工具窗,不绑定 workspace(拒绝 ${workspaceStateDir})
- 新增权限 `credentials.store`,无 backend 时声明即无效
- launch plan 支持 `backend: true` 选择器,返回 `backend.hostServices`;
`workspaceStateDirectory` 改为可选,仅在进程用到时必填
- 插件函数协议 v2:`lithe/host/credentials/{get,set,delete}`,Core 校验
版本、授权与参数(key 字母表/长度、secret ≤16 KiB、拒绝未知字段),
通过 `hostRequest` 事件交给宿主,宿主用新命令 `lsp.hostResponse` 应答;
每会话最多 16 个未应答请求
- `lsp.startServer.hostServices` 传入授予的服务
- 契约 README、rust-core-api、schema、fixture 与黄金用例同步更新
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 修正“Agent 到 app 里查找 lithe-db-mcp”的描述:它只被打包,从未被启动 - 记录后端每插件一个进程、宿主全局、授权由安装审查覆盖等取舍 - 凭据生命周期:停用/更新保留,卸载删除 - 按平台可执行文件不改契约;Agent 工具后续经现有 lithe MCP 暴露 - 待确认清空 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 新增 MacPluginBackendSessions:每个插件一个后端进程、应用全局共享,
由插件网页首次调用 functions.* 时按需启动,以 ${stateDir} 为根目录和
工作目录;插件停用时停止、重新启用后可再启动,包替换/卸载前停止且本次
运行不再启动;设置变化时重启
- 后端会话以 hostServices 启动;LanguageServerRuntimeSession 处理
hostRequest 事件并经新命令 lsp.hostResponse 应答(离开主线程发送)
- 新增 MacPluginCredentialStore:每个插件独立的 Keychain service,
读取不弹密码框;卸载时随插件状态目录一起删除,停用/更新保留
- 网页桥接:functions.list/invoke 省略 instance 时调用本插件后端,
不弹同意框(安装审查已覆盖);无后端的插件返回 plugin.web.forbidden
- 安装时校验后端打包可执行文件;hostCapabilities 声明 backend: [1]
- Swift 契约:launch request 的 workspaceStateDirectory 可为空、
backendLaunchPlan、descriptor.declaresBackend、事件携带 method
- Core 修正:lsp.hostResponse 的字段按契约拼写为 hostRequestID,
测试改为从线上 JSON 解码以覆盖字段名
- README 更新 macOS 宿主能力说明
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ead of polling The test-stability gate rejects real-time sleeps. The scripted Core now resumes waiters as answers arrive, with a five-second watchdog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sdk/rust in lithe-plugin-docs implements plugin-function protocols 1 and 2 with the credentials host service for packaged plugin backends, and its sample backend runs an end-to-end scenario against Core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The client encodes DatabaseConnection.proxyURL as `proxyURL`, but the sidecar's serde camelCase name was `proxyUrl`, so a connection's proxy command was silently dropped and connections went direct. The field now reads `proxyURL` and still accepts `proxyUrl`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SQL Server and MongoDB requests opened a tunnel and never stopped its ssh client, so each such request left an orphaned ssh process holding the local port after the sidecar exited. MySQL, PostgreSQL, SQLite, Redis, and Nacos stopped it only on their normal path. SshTunnel now kills and reaps the client when dropped, which covers early returns and every adapter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
插件后端是无界面的子进程,数据库插件导入导出、备份恢复和 DBX 导入都需要 用户选文件。桥接版本升为 2(lithe.version),新增 dialog.openFile 与 dialog.saveFile:对话框由宿主弹出并写明发起的插件,同一页面同时只开一个, 页面只拿到用户选中的绝对路径(取消为 null),读写交给插件后端;页面在对话框 打开期间关闭则拿不到结果。旧宿主返回 plugin.web.unknownMethod,页面据版本号 决定是否提供导入导出。 同步更新插件契约 README、网页内容 Agent Note 与跨平台功能矩阵。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s data into it
- OfficialPluginCatalog lists dev.lithe.plugin.database as a publisher
package downloaded from the marketplace; language-only fields move into
an optional Entry.language, so a non-language plugin needs none.
- MacDatabasePluginMigration moves the former module's connections,
folders, SQL history, and forever-kept passwords into the plugin's
${stateDir} and credentials once, before its backend first starts
(MacPluginBackendSessions gains a prepareState hook). The old data stays
for older Lithe versions; the plugin's own state always wins.
- Workbench notifications can carry one action and then stay until used.
People with saved connections and no database plugin get one prompt
with an "Open Marketplace" action.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in now Lithe no longer ships a database module. The official plugin dev.lithe.plugin.database (Lithe-IDEA/lithe-plugin-database) replaces it, and the earlier commit moves saved connections into it. - macOS: delete LitheDatabaseModule, the database views, adapters, recovery store, coordinator, sidecar locator, brand icons, dbx fixtures, and the database tool windows, editor tabs, theme tokens, console gutter and AppModel branches. Generic tests that used the database as a sample now use other modules. Dropdown/context-menu parameters only the database used are gone. Idle sleep keeps a visible module window open; only shutdown closes it. - Rust: delete lithe-db-sidecar and lithe-db-mcp. - Windows: delete features/database and its sidecar packaging, the databases extension contribution, and every database branch; openBuffer loses its two database-only parameters. No plugin adaptation yet. - CI and scripts: delete the database workflow, validation docker setup and sidecar/MCP build and smoke scripts; packaging, preview, verifiers, CI change classification and lane reuse drop the database. - i18n: drop strings only the removed UIs used and regenerate. - Feature matrix, Agent Notes, README, docs and Skill: the database is an official plugin; the plugin note is implemented, the multi-schema tree note is archived. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # macos/Resources/en.lproj/Localizable.strings # macos/Resources/zh-Hans.lproj/Localizable.strings # shared/i18n/locales/en-US.json # shared/i18n/locales/zh-CN.json # shared/i18n/messages.json # shared/platform-feature-matrix/features/plugin-web-tool-windows.json # windows/tauri/src/features/window/components/window-menu-bar.tsx
Lithe's official signing path has never released a plugin and its v2 private key is out of reach, so the Database plugin is a community plugin (io.github.lithe-idea.database, unsigned) listed in Lithe Store like the other seven. - OfficialPluginCatalog no longer lists the database plugin; the optional Entry.language refactor that only it needed is reverted. - An unsigned plugin ID proves nothing, so MacDatabasePluginMigration now moves the old connections and passwords only into a copy installed from Lithe Store whose index entry names Lithe-IDEA/lithe-plugin-database. A copy from disk or another source gets nothing and leaves no marker, so installing from Lithe Store later still migrates. The backend sessions' prepareState hook receives the installation record for this. - Feature matrix, README and the Agent Note describe the community plugin, why official signing is deferred, and the new trust boundary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6 of 10 tasks
The migration from the former built-in module was accepted on a macOS development-identity build: the one-time notice, installing Database 0.1.0 from Lithe Store, and the connections, folders, history, and passwords arriving in the plugin as the Agent Note describes. The matrix marks the migration row verified on macOS; the other database rows stay pending. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1lck
marked this pull request as ready for review
October 24, 2026 19:36
Lithe Review结论: ❓ 审查未完成 任务: 336 审查状态:已由服务器取消 可以重新评论 |
1lck
added a commit
to Lithe-IDEA/lithe-plugin-docs
that referenced
this pull request
Oct 24, 2026
…plugin) Lithe preview merged 1lck/Lithe-IDEA#1470. The mirror now matches that merge commit: web bridge 2 file dialogs (dialog.openFile, dialog.saveFile) and the current Windows WebView2 status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1lck
added a commit
to Lithe-IDEA/lithe-plugin-database
that referenced
this pull request
Oct 24, 2026
1lck/Lithe-IDEA#1470 is merged; the end-to-end test now runs against that merge commit instead of a commit of its branch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
目标
把数据库模块整体改造成组织仓库
Lithe-IDEA/lithe-plugin-database中的独立插件,先作为社区插件io.github.lithe-idea.database在 Lithe Store 上架(官方签名路线从未发布过插件、v2 私钥拿不到,见下文“第 5 期 c”):方案、取舍和已定决策见
.agents/notes/implemented/architecture/2026-10-24-database-provider-plugin.md(本 PR 中从proposed/转为已实现)。本 PR 合并了此前的 #1466(方案 Note)、#1467(Windows 如实标记)、#1469(生产保护 WHERE 误判),后续进度都以提交形式推到这里。
合并前提(均已满足)
合并后 Lithe 不再自带数据库,所以合并前必须:
Lithe-IDEA/lithe-plugin-database已发布第一个正式版本 v0.1.0(database-0.1.0-darwin.zip,SHA-256295fd702…03c6)。https://github.com/Lithe-IDEA/lithe-plugin-database。本 PR 合并后,
lithe-plugin-docs#2与插件仓库的e2e/lithe-core.json改锁到preview上的合并提交。进度
backend能力、credentials.store权限、函数协议 v2 宿主凭据服务lithe-plugin-docs新增 Rust SDKlithe-plugin-database(本地仓库已完成,待创建远程仓库后推送)已提交改动说明
第 1 期
方案 Note
Windows:数据库后端未接入时如实标记
file-utils.ts:getDatabaseTypeFromPath在database后端能力不可用时返回null,.db/.sqlite/.duckdb按普通文件打开(第 5 期中这条分支随 Windows 数据库前端一起删除,测试保留为“按二进制/文本打开”)。生产保护:WHERE 误判
WHERE换到新行,sidecar 用contains(" WHERE ")判断,生产保护连接上所有带 WHERE 的 UPDATE/DELETE 都被拒绝。$$块,逐条语句、同层括号判断 WHERE,识别数据修改型 CTE,排除FOR UPDATE、ON DELETE CASCADE等)。这套判定已带进插件引擎;sidecar 本身在第 5 期删除。第 2 期:插件契约(Rust Core)
backend1:插件自有、应用全局的长驻进程,以${stateDir}为根目录,复用serverProcess启动字段与安装审查,需backend.launch权限和网页工具窗,拒绝${workspaceStateDir}。credentials.store(没有 backend 时无效)。backend: true选择器并返回backend.hostServices;workspaceStateDirectory改为可选。lithe/host/credentials/{get,set,delete};Core 校验版本、授权、参数后发hostRequest,宿主用lsp.hostResponse(字段hostRequestID)应答;每会话最多 16 个未应答请求。rust-core-api.md、schema、样例与 fixtures 同步。第 3 期:macOS 宿主
MacPluginBackendSessions:每插件一个后端进程,网页首次调用时启动;停用停止、包替换/卸载前停止、设置变化重启。MacPluginCredentialStore:每插件独立 Keychain service,不弹密码框;卸载时删除,停用/更新保留。functions.*省略instance即调用本插件后端;无后端返回plugin.web.forbidden。lithe-plugin-docs#2)。第 4 期:网页桥接第 2 版与两个后端修复
lithe.version升为 2,新增dialog.openFile/dialog.saveFile。对话框由宿主弹出并写明发起插件,同一页面同时只开一个,页面只拿到绝对路径(取消为null),读写交给插件后端;旧宿主返回plugin.web.unknownMethod。契约 README、网页内容 Note、矩阵plugin-web-tool-windows同步。proxyURL,sidecar 读的是proxyUrl,连接的代理设置一直被忽略。改为读proxyURL。SshTunnel在 drop 时 kill 并回收子进程,覆盖提前返回与所有适配器。第 5 期 a:数据迁移、安装提示(
68f243389)OfficialPluginCatalog加的数据库条目和Entry.language重构,已在第 5 期 c 中撤回。)MacDatabasePluginMigration:插件后端首次启动前(MacPluginBackendSessions新增prepareState钩子),一次性把内置模块保存的连接、文件夹、SQL 历史(最近 100 条,时间换算为 1970 毫秒)写入插件${stateDir},把“永久保存”的密码从旧 Keychain service 写入插件凭据(键connection:<id>:password)。connections.json时以插件为准;写入失败不打标记,下次启动重试;无法迁移的密码只记日志(不含密码),该连接下次重新询问。native.databaseIsNowAPluginInstallItFromTheMarketplace、native.openMarketplace。第 5 期 b:从主仓库删除数据库代码(本次提交)
macOS 源码
LitheDatabaseModule模块(库、target、测试 target)、Views/Database/、MacDatabaseAdapters、MacDatabaseRecoveryStore、DatabaseModuleCoordinator、MacDatabaseSidecarLocator、DatabaseBrandIcon、Resources/DatabaseIcons、third_party/dbx。.database清单与贡献、ModuleID.database、ModuleCapabilityID.databaseWorkspace;shared/fixtures/modules/built-in-v1.json同步。ToolWindow.database/.databaseServices不再出现在allCases,右侧停靠只剩 Agent;旧布局恢复映射保留,避免旧存档解码失败。isDatabaseTab、database*Selected状态;EditorAreaView去掉数据库视图(ScrollViewReader不再需要,改为普通ScrollView);MonacoWorkbenchEditor、JavaProblemsView去掉isDatabaseWorkspaceSelected。editorTabItems直接取editorTabOrderFeature.items。ModuleSessionCoordinator:去掉clearBindings(for: .database);只有module.shutdown才关闭窗口,空闲休眠保留可见窗口(渲染层显示加载占位并重新激活模块)。databaseSecureStore、sidecar 路径、模块重新启用的特殊处理和 DatabaseModule 注册;保留迁移所需的旧 Keychain 读取。LitheTheme的DatabaseGrid/DatabaseConsole/DatabaseConnectionResult,代码编辑器 gutter 的控制台外观与标记,LitheTextViewportLayout的控制台行高/光标矩形。GitRepositoryColor.swift:收下原来定义在数据库侧栏里的Color(hex:)(private)。LitheDropdown、LitheContextMenu:删除只给数据库用的contentProvidesSurface、fadeInDuration、hasShadow参数。database(插件用"icon": {"host":"database"})、.database文件图标、开发版 profile 迁移里的数据库键。macOS 测试
LitheDatabaseModuleTests、DatabaseGrid{Appearance,Click}Tests、DatabaseToolbarAppearanceTests、DatabaseWorkspaceLifecycleTests,以及LitheCoreLogicTests中 50 个数据库测试及其辅助类型。ModuleRuntimeTests(search)、WorkbenchFeatureModelTests(agent,改名agentDocksBesideTheEditor)、ModuleSessionCoordinatorTests(search/git)、WorkbenchContributionHostTests(agent 与自定义org.example.*贡献)、TerminalPlacementFeatureModelTests(改名documentFocusRestoresSelectionAfterTerminal)、OutputTimestamperTests(改名outputTextAndCopyIgnoreLateEventsOverDivider)。databaseUsesTheRightDock…、databaseTabsKeep…、internalDatabaseModuleIsNotShownAsAPlugin、savedServicesWindow…、servicesCommandActivatesDatabase…。Rust
rust/lithe-db-sidecar、rust/lithe-db-mcp,workspace 成员与Cargo.lock同步(只有删除,共 132 个包)。Windows(不做适配,只删除)
features/database/(组件、providers、stores、lib 等 59 个文件)、package-database-sidecars.ts、命令面板database-actions.tsx。databases/databaseProviders贡献类型、Databases分类与校验;backend-capabilities去掉database;tauri-core去掉数据库命令。openBuffer去掉两个只给数据库用的位置参数,20 处调用同步。CI 与脚本
.github/workflows/ci-database.yml、infra/docker/database-validation(infra/已空)、scripts/{database-validation-smoke,database-sidecar-smoke,build-database-sidecar,build-database-mcp}.sh。package-app.sh、preview.sh、verify-macos-package.sh、measure-macos-performance-baseline.sh去掉数据库辅助程序和图标;ci-macos.yml的 dmg 检查改为校验lithe-mcp。prepare-macos-dependency-cache的缓存键改用scripts/build-ide-mcp.sh。classify-ci-changes.sh、plan-ci-lane-reuse.mjs去掉 database 通道,相应测试同步;verify-module-boundaries.sh、verify-shared-contracts.sh去掉 database。i18n
database.connect/host/port/username/password/optional保留。重新生成Localizable.strings与shared.generated.ts。功能矩阵
database-{connections,crud-export,multi-schema-tree,query-history,schema}:能力标注“由社区插件提供”(第 5 期 c 中由“官方插件”改过来),owner 改为插件仓库,macOS 证据指向插件宿主代码与 Note,Windows 为missing/not-applicable。database-plugin-migration。macos-shared-product-dropdowns、macos-shared-tree-list-control去掉已删除文件的证据。Agent Note 与文档
implemented/architecture,状态改为已实现,迁移一节按实际实现重写;6 处代码中的 Note 引用同步。2026-10-22-database-multi-schema-tree.md归档(代码已移到插件仓库)。infra/已删除)、public-extension-contract 适用范围、下拉框 Note(删除结果气泡一节)。docs/ci-builds.md同步;develop-litheSkill 去掉DatabaseGridtoken 与数据库辅助程序。docs/design/plugin-settings.html(设计稿)、历史发布说明、issue 模板里的“Database / 数据库”选项。第 5 期 c:改为 Lithe Store 社区插件(
14c909f6e)原因:官方签名路线(
lithe-official-plugins-v2公钥、release-official-plugins.yml、官方索引)从未发布过插件;v2 私钥在原组织主仓库的维护者手里,那个仓库已改名归档。所以插件先当作社区插件,ID 为io.github.lithe-idea.database,不带签名。OfficialPluginCatalog撤回数据库条目,并还原只为它做的Entry.language重构(LSPControlCenterView、ModuleRuntimeTests、PluginManagerTests同步还原)。迁移的信任边界:社区包的 ID 谁都能用,所以
MacDatabasePluginMigration不再认 ID,改为认来源。安装记录必须同时满足:.community;PluginMarketplaceSource.communityID);https://github.com/Lithe-IDEA/lithe-plugin-database。从磁盘、其他来源或其他仓库地址安装的同 ID 包得不到旧数据和密码,也不写迁移标记,之后从 Lithe Store 安装仍会迁移。安装文件每次加载都按内容摘要复核。
MacPluginBackendSessions的prepareState钩子改为传入安装记录(PluginInstallationRecord),不再只传插件 ID。插件 ID 与仓库地址常量放在 Application 层的
DatabasePluginTransition,Platform 层的迁移代码引用它。测试:新增
aCopyFromAnywhereElseReceivesNothing,覆盖磁盘安装、其他来源、其他仓库地址三种情况,并确认之后从 Lithe Store 安装仍会迁移。原有迁移测试改为传入 Lithe Store 的安装记录;后端会话测试的钩子改为接收安装记录。功能矩阵、README、Agent Note 改为社区插件的说法;Note 记录了暂不做官方签名的原因和新的信任边界,备选方案里补上“官方签名插件”。
插件仓库同步:ID、vendor、去掉签名、下载包改名为
database-<version>-darwin.zip、发布流程改为正式 GitHub Release;删除不再需要的releaseenvironment。验证
在本地 macOS 上,基于删除提交
922775305与合并 preview 后的533423eba:swift build --build-tests:合并前后都能编译通过。DeadlineExceeded、waitUntilOpen等);--no-parallel串行跑:105 个通过;gitLogQueryMatchesInclusiveAfterAndExclusiveBeforeDates:按本机时区解析日期,本机是 PDT,CI 是 UTC;PluginUIIconTests.renderedTemplateAndBrandIconsAdaptToThemesAndHostSize:颜色采样受本机显示色彩环境影响。test-stability-macos.sh:覆盖改过的 10 个套件(ModuleRuntime、WorkbenchFeatureModel、TerminalPlacement、ModuleSessionCoordinator、OutputTimestamper、WorkbenchContributionHost、PluginWebBridge、MacDatabasePluginMigration、EditorTabOrder、WorkbenchModuleUIRegistry),184 个全部通过。verify-test-stability.sh通过。cargo check --locked --workspace --all-targets通过。仅有的几条警告在 git 模块和 agent-host 里,不是本 PR 引入的。bunx tsc --noEmit通过;bun test src/i18n src/config src/platform src/features/window,212 个通过。generate-i18n.mjs --check通过,test-i18n.mjs35 个通过。verify-platform-feature-matrix.sh(204 条)、verify-platform-feature-matrix-change.sh origin/preview HEAD、verify-agent-notes.sh(152 条)、verify-module-boundaries.sh、verify-shared-contracts.sh、verify-runtime-bundle-immutability.sh(test-macos.sh会先跑它)全部通过。ci-workflow-gates.test.mjs、lane reuse 测试都通过。合并 preview 时的冲突处理
Localizable.strings与shared.generated.ts重新生成。plugin-web-tool-windows.json:Windows 部分采用 preview 新实现的 ui 2 宿主状态和证据,verification 前面保留文件对话框回归的说明。window-menu-bar.tsx:保留 preview 新增的插件菜单命令,去掉数据库菜单项;有插件菜单命令时才加分隔线。第 5 期 c 的验证
swift build --build-tests通过。MacDatabasePluginMigrationTests|MacPluginBackendSessionsTests|WorkbenchNotificationTests|PluginManagerTests|ModuleRuntimeTests|LSPControl共 76 个测试全部通过。verify-test-stability.sh、矩阵校验与变更门禁、verify-agent-notes.sh通过。node scripts/e2e.mjs用新 ID、不带签名的包跑通 Rust Core 端到端。手工验收(2026-10-24,
191c2729a记录)app.lithe.desktop.dev,偏好、Keychain 和插件目录都与正式版隔离;开发版之前从未用过。验收后测试数据全部清除。group字段、密码只保存到重启。另外写入 1 条历史和 2 条旧密码。community,来源 Lithe Store,仓库地址和 SHA-256 正确;connections.json和sql-history.json,旧group变成了顶层文件夹 Reports,历史时间换算正确,connections.json里没有密码;database-plugin-migration的 macOS 状态改为verified。其他数据库功能(表编辑、导出等)这次没有逐项验收,保持pending。14c909f6e)全部通过。插件功能逐项测试(2026-10-24,插件 0.1.0)
1 + 1、字面量)显示<unsupported>:后端按声明类型解码,这类列没有声明类型。改为按值的存储类型解码,并加了回归测试。lithe-db-sidecar。pending,没有改成verified。尚未做
🤖 Generated with Claude Code