feat: 将插件 stdin 协议定为 v1,并按声明注入凭据

进程外插件改为只读环境变量和自身配置,避免读宿主 appsettings;宿主按 plugin.json 声明注入 LLM / OpenWeather 等凭据。
This commit is contained in:
2026-09-11 10:46:52 +08:00
parent d1b979f2db
commit b631acd42e
22 changed files with 377 additions and 95 deletions
+7 -4
View File
@@ -354,7 +354,7 @@ JSON 使用 camelCase。静态站点来自 `wwwroot`。
### 必备文件
- `plugin.json`:id、启动命令、凭据声明、inputs、outputs
- `plugin.json`id、protocolVersion、启动命令、凭据声明、inputs、outputs
- `README.md`:给人看的说明
- 可执行文件:由 `launch.command` + `launch.args` **原样**启动,宿主不替你拼路径
@@ -375,6 +375,7 @@ JSON 使用 camelCase。静态站点来自 `wwwroot`。
```json
{
"protocolVersion": 1,
"inputs": { "filePath": "Data/cities.txt" },
"credentials": {
"llm": {
@@ -395,12 +396,14 @@ JSON 使用 camelCase。静态站点来自 `wwwroot`。
### 凭据注入
与 n8n / Dify 类似:Key 只在宿主。运行插件时会:
与 n8n / Dify 类似:Key 只在宿主。只注入 `plugin.json` 声明过的凭据。运行插件时会:
1. 写入环境变量 `OPENAI_ENDPOINT` / `OPENAI_API_KEY` / `OPENAI_CHAT_MODEL`
1. 按 type 写入环境变量(LLM 为 `OPENAI_*`OpenWeather 为 `OPENWEATHER_API_KEY`
2. 在 stdin JSON 的 `credentials` 里再传一份
插件目录可选 `.env` 作为第三方自带模型的默认环境;节点选中的宿主凭据会覆盖同名变量。**不要把 `.env` 提交进仓库。**
JSON Schema[docs/plugin-protocol-v1.schema.json](docs/plugin-protocol-v1.schema.json)。`plugin.json``protocolVersion` 缺省视为 1;大于 1 的清单会被扫描拒绝。
插件目录可选 `.env` 作为第三方自带模型的默认环境;节点选中的宿主凭据会覆盖同名变量。**不要把 `.env` 提交进仓库。** 非秘密配置放在插件自己的 `appsettings.json`,不要读宿主 exe 目录。
更细的输入输出说明: