plugins 0.1.31

生产级插件系统 - 插件的生命周期
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
# Changelog

所有重要的项目变更都会记录在此文件中。

格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
并且本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。

## [0.1.31] - 2025-12-29

### 新增
- 新增 `Disabled` 插件状态,支持禁用插件而不卸载
- 新增 `disable_plugin` 方法,提供插件禁用功能
- 新增 `set_plugin_status` 内部方法,支持直接设置插件状态
- 禁用后的插件不会处理请求,但保持已加载状态
- 支持从 `Loaded``Initialized``Running``Stopped` 状态转换到 `Disabled` 状态
- 支持从 `Disabled` 状态恢复到 `Running``Stopped` 状态

### 改进
- `secra-logger` 从开发依赖移回运行时依赖,支持在运行时使用日志功能
- 完善状态转换验证逻辑,支持 `Disabled` 状态的所有有效转换
- 改进状态显示和字符串转换,支持 `Disabled` 状态的显示

## [0.1.30] - 2025-12-29

### 改进
- `tracing-subscriber``secra-logger` 从运行时依赖移动到开发依赖
- 优化依赖管理,这些依赖仅在示例程序中使用,不应作为库的运行时依赖

## [0.1.29] - 2025-12-29

### 变更
- 更新 `secra-logger` 依赖版本从 `1.0.1``1.0`

## [0.1.28] - 2025-12-29

### 改进
- 升级 `secra-logger` 依赖从 `0.1.0``1.0.1`
- 更新示例程序以适配 `secra-logger` 1.0.1 版本的新 API
-`init_logging``LogConfig` 替换为 `init_logger``LoggerConfig`
- 使用 `tracing::Level` 替代 `secra_logger::LogLevel`,统一日志级别类型
- 简化日志配置代码,使用新的链式配置 API

## [0.1.27] - 2025-12-29

### 新增
- 新增 `get_target_triple()` 函数,自动检测当前编译目标的三元组(target triple)
- 插件加载器支持自动使用目标三元组作为动态库子目录路径
- 构建脚本支持 Linux glibc 目标平台(`x86_64-unknown-linux-gnu``aarch64-unknown-linux-gnu`- `collect-builds.sh` 脚本添加 glibc 目标平台支持
- `scripts/build/Makefile` 新增 `build-glibc``install-glibc-targets` 目标
- `scripts/build/build.sh` 添加 `--glibc` 参数,支持启用 glibc 目标构建

### 改进
- 改进 `get_library_file_path()` 函数,当 `library_path``None` 时自动使用目标三元组作为子目录
- 优化插件加载逻辑,自动适配不同平台的动态库路径结构
- 构建脚本改进 glibc 目标构建流程,优先使用 `cross` 工具进行交叉编译
- `scripts/build/build.ps1` 自动检测并使用 `cross` 工具构建 glibc 目标
- `scripts/build/build.sh` 支持通过环境变量 `ENABLE_GLIBC``--glibc` 参数启用 glibc 目标
- 改进构建脚本的错误处理和日志输出,提供更清晰的构建状态信息

## [0.1.26] - 2025-12-29

### 新增
- 集成 `secra-logger` 日志系统,提供统一的日志管理功能
- 添加 `tracing-shared` 依赖,支持共享日志记录器
- 示例程序使用 `secra-logger` 替代 `tracing-subscriber`,支持文件日志输出
- 示例程序配置日志输出到文件(`./logs/app.log`),支持日志轮转和按日期分割

### 改进
- 改进日志初始化配置,支持从环境变量 `RUST_LOG` 读取日志级别
- 配置日志文件最大大小为 100MB,保留最近 7 天的日志文件
-`loader.rs` 中添加 `SharedLogger``FnSetupLogger` 类型定义
-`watch_ops.rs` 中集成 `tracing_shared::SharedLogger`
- 优化代码格式,统一代码风格
- 改进错误日志格式,增强可读性
- 改进 `load_all_plugins` 函数,在未发现插件时提前返回,避免不必要的后续处理
- 示例程序移除插件文件预检查逻辑,直接调用 `load_all_plugins` 方法,简化代码流程

## [0.1.25] - 2025-12-29

### 改进
- 增强所有插件操作模块的日志记录,添加 trace、debug、warn 级别的详细日志
- 改进插件初始化操作的日志输出,添加成功/失败统计信息
- 改进插件加载操作的日志记录,提供更详细的加载过程信息
- 改进插件启动、停止、卸载操作的日志记录,增强可观测性
- 改进插件执行、路由注册、查询操作的日志记录
- 改进插件重载和文件监听操作的日志记录
- 优化错误日志信息,包含更多上下文信息(如超时时间、插件状态等)
- 改进代码可维护性,统一日志记录风格

## [0.1.24] - 2025-12-29

### 改进
- 重构代码结构,移除重复的类型定义
-`PluginFactory` trait 定义统一到 `factory.rs` 模块,使用重新导出避免重复
- 优化 `types.rs` 模块,移除重复的 `PluginFactory``CreatePluginFn` 定义
- 简化代码结构,减少代码行数(净减少 56 行)
- 改进代码组织,统一类型定义位置,提高代码可维护性

## [0.1.23] - 2025-12-29

### 改进
- 示例程序添加 Ctrl+C 信号处理,支持优雅地停止 HTTP 服务器
- 当收到 Ctrl+C 信号时,服务器会先停止插件管理器,然后等待服务器完全停止后再退出
- 改进服务器关闭流程,确保资源正确释放

## [0.1.22] - 2025-12-28

### 新增
- 新增 `reload_plugin_directory` 方法,支持重新加载整个插件目录
- 方法会自动卸载所有当前已加载的插件,然后重新扫描并加载插件目录中的所有插件

### 改进
- 示例程序改进文件监听任务,当检测到插件文件变化时自动执行完整的插件重载流程
- 文件监听任务现在会自动调用 `reload_plugin_directory``initialize_all_plugins``start_all_plugins` 方法
- 在阻塞上下文中使用 `tokio::runtime::Handle::current()` 执行异步方法,确保插件重载流程正确执行
- 改进错误处理,提供更详细的错误日志信息

## [0.1.21] - 2025-12-28

### 新增
- `PluginManager` 集成文件系统监听功能,支持在初始化时自动创建监听器
- 新增 `watch_rx` 字段,提供文件系统事件接收器,允许外部代码接收监听事件
- 新增 `enable_plugin_dir_watch` 配置选项,支持通过配置控制是否启用插件目录监听
- `PluginManagerConfigBuilder` 新增 `enable_plugin_dir_watch` 方法,支持链式配置
- `PluginManagerConfig` 新增 `with_enable_plugin_dir_watch` 方法,支持直接设置配置

### 改进
- 示例程序改为使用 `PluginManager` 集成的文件系统监听功能,移除直接使用 `notify` crate 的代码
- 示例程序添加服务重启逻辑,当检测到插件文件变化时自动重启 HTTP 服务器
- 优化代码组织结构,统一管理文件系统监听相关功能
- 改进代码格式化,统一导入顺序和代码风格

## [0.1.20] - 2025-12-28

### 改进
- 示例程序添加文件系统监听功能,使用 `notify` crate 监听插件目录变化
- 示例程序演示如何使用 `RecommendedWatcher` 监听插件目录的文件系统事件
- 支持实时检测插件目录中的文件变化(创建、删除、修改)

## [0.1.19] - 2025-12-28

### 新增
- 新增 `watch_plugin_directory` 方法,支持监听插件目录的文件系统变化
- 新增 `stop_watching` 方法,支持停止插件目录监听
- 新增 `watch_ops.rs` 模块,实现插件目录监听的核心逻辑
- 支持自动检测插件目录中的 `.spk` 文件变化(创建、删除、修改)
- 当检测到新插件文件时,自动加载插件
- 当检测到插件文件删除时,自动卸载对应插件
- 当检测到插件文件修改时,自动重新加载插件
- 使用防抖机制(默认 500ms),避免频繁触发文件系统事件
- 监听器在后台异步运行,不阻塞主线程

### 改进
- 优化文件系统事件处理,只处理 `.spk` 文件相关的事件
- 增强错误处理和日志记录,提供详细的监听状态信息
- 支持通过停止信号优雅地停止监听器

## [0.1.18] - 2025-12-28

### 改进
- 为所有公共 API 添加详细的文档注释(doc comments)
- 完善 `PluginManager` 方法的文档,包括参数说明、返回值、行为描述和使用示例
- 完善 `PluginManagerError` 错误类型的文档,说明各错误变体的使用场景
- 完善 `PluginConfiguration` trait 的文档,说明配置管理接口的使用方法
- 完善 `PluginFactory``PluginLifecycle``PluginStatus` 等核心 trait 的文档
- 完善 `PluginConfig``PluginMetadata` 等数据结构的文档
- 改进代码可读性和可维护性,便于开发者理解和使用 API

## [0.1.17] - 2025-12-28

### 新增
- 新增 `register_all_plugin_routes_sync` 方法,提供同步版本的路由注册功能
- 支持在非异步上下文中注册插件路由(如 actix-web 的 `configure` 回调)
- 自动检测并使用当前的 Tokio 运行时句柄,如果不存在则创建新的运行时

### 改进
- 示例程序集成插件路由注册功能,在 HTTP 服务器启动时自动注册所有插件路由
- 优化示例程序代码,移除未使用的导入

## [0.1.16] - 2025-12-28

### 新增
- 示例程序添加 `detect_target_triple()` 函数,自动检测当前系统的目标三元组
- 示例程序添加 actix-web HTTP 服务器示例,包含 echo 端点
- `collect-builds.sh` 脚本支持从 `plugin.toml` 读取 `metadata.name` 作为文件名
- `collect-builds.sh` 脚本添加自动打包 child-plugin 的步骤

### 改进
- 插件加载器改进插件名称清理逻辑,允许点号(支持如 `com.example.child-plugin` 的插件名称)
- 动态库文件路径构建使用原始插件名称(包含点号),确保与打包时的命名一致
- 增强动态库文件加载错误日志,提供更详细的调试信息(包括文件路径、插件名称、库路径等)
- `validate_path_within_base` 函数支持路径不存在时验证父目录,提高路径验证的健壮性
- 示例程序支持根据系统架构自动设置 `library_path` 配置

### 修复
- 修复插件名称包含点号时无法正确加载动态库的问题

## [0.1.15] - 2025-12-28

### 新增
- 新增 `collect-builds.sh` 脚本,用于收集构建产物并按照插件类型和平台组织
- 脚本支持自动执行构建、收集各平台插件文件到 `output` 目录
- 脚本自动检查并安装 `pluginctl` 工具
- 脚本自动检查并生成密钥文件(如果不存在)

### 改进
- 更新 `.gitignore`,添加 `output``keys` 目录的忽略规则

## [0.1.14] - 2025-12-28

### 改进
- 构建脚本支持构建整个 workspace,使用 `--workspace` 标志
- 构建脚本自动复制插件库文件(parent-plugin 和 child-plugin)到输出目录
- 改进构建输出信息,分别显示主程序和插件库的构建状态
- 构建统计信息中显示所有构建的二进制文件,包括插件库文件
- 支持跨平台插件库文件命名(Windows: `.dll`,Linux: `.so`,macOS: `.dylib`
### 变更
- 删除临时文档文件

## [0.1.13] - 2025-12-28

### 新增
- 新增 `README.md` 文档,详细说明支持的目标平台架构信息
- 包含各平台架构、供应商、操作系统和 ABI 的详细说明

### 改进
- 优化构建脚本输出信息,构建完成后显示详细的二进制文件列表
- 改进构建统计信息显示格式,增加分隔线和更好的可读性
- 为每个构建目标显示友好的平台名称(如 "Linux (x86_64)"、"macOS (Apple Silicon)" 等)
- 统一所有构建目标(`build-all``build-cross``build-linux``build-windows``build-macos`)的输出格式

## [0.1.12] - 2025-12-28

### 新增
- 新增跨平台构建脚本系统:
  - `scripts/build/Makefile` - Make 构建脚本,支持多平台交叉编译
  - `scripts/build/build.sh` - Bash 构建脚本(macOS/Linux)
  - `scripts/build/build.ps1` - PowerShell 构建脚本(Windows)
  - `scripts/README.md` - 脚本使用文档
- 新增根目录 `Makefile` 包装器,方便从项目根目录调用构建脚本
- 支持构建目标平台:
  - Linux: `x86_64-unknown-linux-musl`, `aarch64-unknown-linux-musl`
  - Windows: `x86_64-pc-windows-gnu`
  - macOS: `x86_64-apple-darwin`, `aarch64-apple-darwin`
- 支持使用 `cross` 工具进行交叉编译(可选)

### 改进
- 构建脚本自动安装所需的目标平台工具链
- 构建脚本支持停止正在运行的构建进程
- 构建完成后自动复制二进制文件到 `target/release/` 目录
- 提供详细的构建统计信息和错误提示

## [0.1.11] - 2025-12-27

### 新增
- 添加 Cargo workspace 配置,支持多包项目管理
- 新增示例插件项目:
  - `example/parent-plugin` - 父插件示例
  - `example/child-plugin` - 子插件示例
- 恢复 `example/main.rs` 作为可执行文件入口
- 新增依赖:`anyhow``notify``tracing-subscriber``futures`
- 配置构建器 `build()` 方法现在返回 `Result`,支持路径解析错误处理

### 改进
- 使用 workspace dependencies 统一管理依赖版本
- `PluginManagerConfigBuilder::build()` 方法现在会自动将相对路径转换为绝对路径
- 添加路径解析功能,基于程序运行时工作目录解析相对路径
- `PluginManager::plugin_dir` 字段改为 `pub`,允许外部访问
- 完善配置构建器的文档和示例,说明相对路径解析行为
- 更新 `.gitignore`,添加 `/plugins``/temp` 目录忽略规则

### 变更
- 删除 `src/manager_old.rs` 临时文件

## [0.1.10] - 2025-12-27

### 改进
- 进一步重构 `manager/` 模块,将操作逻辑拆分为独立的操作模块
- 新增操作模块,将功能操作与底层实现分离:
  - `load_ops.rs` - 插件加载操作
  - `init_ops.rs` - 插件初始化操作
  - `start_ops.rs` - 插件启动操作
  - `stop_ops.rs` - 插件停止操作
  - `unload_ops.rs` - 插件卸载操作
  - `execute_ops.rs` - 插件执行操作
  - `route_ops.rs` - 路由注册操作
  - `query_ops.rs` - 查询操作
  - `reload_ops.rs` - 重载操作
- 优化代码组织结构,提高模块化程度和可维护性
- 保持公共 API 不变,重构对用户透明

### 变更
- 删除 `example/main.rs` 示例文件

## [0.1.9] - 2025-12-26

### 改进
- 重构 `manager.rs` 模块,将大型单文件拆分为多个子模块
- 新增 `manager/` 子模块目录,包含以下模块:
  - `constants.rs` - 常量定义
  - `types.rs` - 类型定义(PluginFactory, PluginInstance, PluginInfo 等)
  - `manager_config.rs` - 配置管理
  - `validation.rs` - 验证功能
  - `loader.rs` - 插件加载功能
  - `lifecycle_ops.rs` - 生命周期操作
  - `unloader.rs` - 插件卸载功能
  - `executor.rs` - 插件执行功能
  - `routes.rs` - 路由注册功能
  - `query.rs` - 查询功能
  - `reloader.rs` - 重载功能
- 代码行数从 2387 行减少到 196 行,大幅提升代码可维护性
- 改善代码组织结构,提高模块化程度
- 保持公共 API 不变,重构对用户透明

## [0.1.8] - 2025-12-26

### 新增
- 新增 `initialize_plugin` 方法,提供单个插件的初始化功能
- 新增 `start_plugin` 方法,提供单个插件的启动功能
- 支持单个插件的生命周期管理,与批量操作方法相对应

### 改进
- `initialize_plugin` 方法包含完整的输入验证和超时保护机制
- `start_plugin` 方法包含状态检查和超时保护机制
- 两个方法都包含详细的错误处理和状态转换验证
- 完善方法文档,包含使用示例和错误处理说明

### 安全
- 插件ID验证,防止路径遍历攻击
- 执行操作带有超时保护,防止长时间阻塞
- 状态转换验证,确保插件状态转换的合法性

## [0.1.7] - 2025-12-26

### 新增
- 新增 `PluginInfo` 结构体,用于查询返回插件信息,不包含内部实现细节
- 新增 `get_all_plugins` 方法,提供查询所有插件信息的统一接口
- 支持序列化/反序列化插件信息,便于 API 返回和日志记录

### 改进
- `get_all_plugins` 方法使用读锁,支持并发查询
- 优化锁持有时间,快速收集数据后立即释放锁
- 返回克隆的数据而非引用,避免锁持有时间过长
- 完善方法文档,包含使用示例和性能优化说明

### 安全
- 只返回公开信息,不暴露内部实现细节(如动态库句柄、临时路径等)
- 使用读锁保证线程安全

## [0.1.6] - 2025-12-26

### 新增
- 新增 `execute_plugin` 方法,提供统一的插件执行接口
- 新增 `register_all_plugin_routes` 方法,支持将插件路由注册到 actix-web 框架
- 集成 actix-web 支持,插件可以注册 HTTP 路由

### 改进
- `execute_plugin` 方法包含完整的输入验证和超时保护机制
- `register_all_plugin_routes` 方法支持按父插件、子插件顺序注册路由
- 优化锁持有时间,减少并发冲突
- 增强错误处理和日志记录

### 安全
- `execute_plugin` 方法包含输入验证,防止路径遍历攻击
- 执行操作带有超时保护,防止长时间阻塞
- 动作名称长度限制,防止过长的输入

## [0.1.5] - 2025-12-26

### 改进
- 添加常量定义,统一管理默认配置值(插件目录、临时目录、超时时间等)
- 新增插件操作超时时间配置功能,支持自定义超时时间(默认 30 秒)
-`PluginManagerConfig``PluginManagerConfigBuilder` 中添加 `timeout_secs` 配置项
- 优化配置管理,使用常量替代硬编码的默认值
- 改进代码可维护性,统一管理配置常量

## [0.1.3] - 2024-12-XX

### 新增
- 插件管理器核心功能
- 插件生命周期管理(加载、启动、停止、卸载)
- 插件元数据管理
- 插件配置管理
- 插件状态跟踪
- 插件工厂模式支持
- 动态库加载和卸载
- 插件指纹验证
- 数字签名验证支持
- 子插件管理功能

### 功能
- 支持插件的动态加载和卸载
- 支持插件状态查询和管理
- 支持插件配置的读取和更新
- 支持插件元数据的查询
- 支持插件工厂模式创建插件实例

### 技术栈
- Rust 2024 edition
- 使用 `libloading` 进行动态库加载
- 使用 `tokio` 提供异步运行时
- 使用 `tracing` 进行日志记录
- 使用 `serde` 进行序列化/反序列化
- 集成 `secra-pluginctl` 进行插件包管理

## [0.1.4] - 2025-12-26

### 安全
- 新增 `sanitize_plugin_name` 方法,清理插件名称防止路径遍历攻击
- 新增 `validate_path_within_base` 方法,验证路径是否在指定基础目录内
- 在动态库路径构建时应用路径清理和验证,增强安全性

### 改进
- 完善插件卸载功能,支持依赖关系检查和子插件处理
- 新增 `stop_plugin` 公开方法,提供插件停止的公开 API
- 新增 `check_plugin_dependencies` 方法,检查插件依赖关系
- 新增 `remove_child_from_parent` 方法,从父插件中移除子插件信息
- 优化 `unload_plugin` 方法,增加状态检查和错误处理
- 优化插件包加载逻辑,避免重复加载 artifact
- 改进代码注释,说明串行加载的原因和优化点

### 修复
- 更新 `.gitignore` 文件,完善忽略规则