feat/plugin-command-settings
main
完成第二阶段 Stage D 的 Plugin Command 与 Settings Contribution,实现插件命令注册、执行、设置管理、敏感配置传递及 MCP 命令目标适配,并补充前后端契约、测试和开发文档。
when
_notesagent
command_id
arguments
context
settings
secrets
PLUGIN_SETTINGS_REQUIRED
将命令执行结果收紧为判别联合类型:
notification
navigate
refresh
job
none
同时限制:
前后端现已使用一致的严格 Effect 类型定义。
原因: MCP 工具发现阶段只识别了目标名称,没有保存对应的 inputSchema。
inputSchema
后果: 插件启用后无法验证实际命令信封是否满足 MCP 服务端契约。
修复:
PLUGIN_COMMAND_TARGET_SCHEMA_MISMATCH
原因: 启用阶段曾使用空测试数据推断 Schema 是否兼容,容易误拒绝带业务约束的合法 Schema。
properties._notesagent
object
$ref
allOf
oneOf
not
原因: 原实现只读取已有设置,没有检查无默认值的必填项。
后果: 插件可能在配置不完整时启用或执行,导致运行期错误。
原因: MCP 测试服务即使未收到密钥也可能返回成功,无法证明密钥传递链路有效。
secrets.api_key
原因: 空消息仍被构造为通知 Effect,与通知消息最小长度约束冲突。
后果: 合法空 Echo 调用会被转换成 502 响应。
uv lock --check
git diff --check
前端构建仍存在已有的大体积 chunk 提示,不影响本次合并。
生产环境 MCP 执行仍需等待 Tauri/Rust 安全沙箱阶段完成后开放。本阶段保留运行时边界、协议校验及测试能力,不将当前进程执行方式视为最终生产安全方案。
No dependencies set.
The note is not visible to the blocked user.
变更概述
完成第二阶段 Stage D 的 Plugin Command 与 Settings Contribution,实现插件命令注册、执行、设置管理、敏感配置传递及 MCP 命令目标适配,并补充前后端契约、测试和开发文档。
主要改动
Plugin Command
when条件控制命令可用性_notesagent调用信封:command_idargumentscontextsettingssecretsSettings Contribution
PLUGIN_SETTINGS_REQUIREDsecrets命名空间传递Command Effect 契约
将命令执行结果收紧为判别联合类型:
notificationnavigaterefreshjobnone同时限制:
前后端现已使用一致的严格 Effect 类型定义。
审阅修复
MCP 目标 Schema 未进入运行时
原因: MCP 工具发现阶段只识别了目标名称,没有保存对应的
inputSchema。后果: 插件启用后无法验证实际命令信封是否满足 MCP 服务端契约。
修复:
PLUGIN_COMMAND_TARGET_SCHEMA_MISMATCHMCP 协议兼容性判断不稳定
原因: 启用阶段曾使用空测试数据推断 Schema 是否兼容,容易误拒绝带业务约束的合法 Schema。
修复:
properties._notesagent_notesagent明确声明为object_notesagent内部允许$ref、allOf、oneOf、not等标准约束必填普通设置未阻止运行
原因: 原实现只读取已有设置,没有检查无默认值的必填项。
后果: 插件可能在配置不完整时启用或执行,导致运行期错误。
修复:
敏感配置测试覆盖不足
原因: MCP 测试服务即使未收到密钥也可能返回成功,无法证明密钥传递链路有效。
修复:
secrets.api_key时返回错误空 Echo 命令产生无效 Effect
原因: 空消息仍被构造为通知 Effect,与通知消息最小长度约束冲突。
后果: 合法空 Echo 调用会被转换成 502 响应。
修复:
noneEffect文档更新
验证结果
uv lock --check:通过git diff --check:通过前端构建仍存在已有的大体积 chunk 提示,不影响本次合并。
后续事项
生产环境 MCP 执行仍需等待 Tauri/Rust 安全沙箱阶段完成后开放。本阶段保留运行时边界、协议校验及测试能力,不将当前进程执行方式视为最终生产安全方案。