feat: 将插件 stdin 协议定为 v1,并按声明注入凭据
进程外插件改为只读环境变量和自身配置,避免读宿主 appsettings;宿主按 plugin.json 声明注入 LLM / OpenWeather 等凭据。
This commit is contained in:
@@ -27,10 +27,11 @@ dotnet run --project MAF1.Web # 浏览器 http://127.0.0.1:528
|
||||
## 关键陷阱(改代码前必读)
|
||||
|
||||
1. **插件运行时读的是 bin 输出,不是源码树**:`PluginScanner` 扫描 `MAF1.Web.exe` 旁的 `plugins/`。改完 `Plugins/` 源码必须重新 `dotnet build`(靠 `MAF1.Web.csproj` 的 `PublishPluginFolders` 目标复制)或点前端「刷新节点」。
|
||||
2. **不要提交 API Key**:Key 走环境变量或 `appsettings.json` 的 `Llm` 段(环境变量优先)。注意 `**/Properties/launchSettings.json` 里目前硬编码了一个真实 Key,新增/修改配置时切勿再写入真实密钥,也勿把含 Key 的版本提交。
|
||||
2. **不要提交 API Key**:Key 走环境变量或 `appsettings.json` 的 `Llm` / `Credentials` 段(环境变量优先)。注意 `**/Properties/launchSettings.json` 里目前硬编码了一个真实 Key,新增/修改配置时切勿再写入真实密钥,也勿把含 Key 的版本提交。
|
||||
3. **插件 stdout 只能输出一行 JSON**:日志和提示走 stderr,否则宿主 `ParseOutputs` 会解析失败。
|
||||
4. **天气查询必须用 `WeatherTools.CreateHttpClient()`**:带 20s 超时和正确 User-Agent,直接 `new HttpClient()` 可能被 wttr.in 拒绝。
|
||||
5. **LLM 输出解析前先过 `JsonText.UnwrapObject`**:剥离模型回复的 ```json ``` 围栏后再反序列化。
|
||||
6. **进程外插件不要读宿主 appsettings**:LLM 用 `AgentFactory.LoadFromEnvironment()`;其它配置用插件目录自己的 json。stdin 协议见 `docs/plugin-protocol-v1.schema.json`(`protocolVersion` 1)。
|
||||
|
||||
## 约定
|
||||
|
||||
|
||||
Reference in New Issue
Block a user