117 Commits

Author SHA1 Message Date
xiangning
51eea796e2 refactor(rag): 重构AI模型相关代码结构和数据库迁移逻辑
- 将AI模型相关端点、命令、处理器移动到模块内部统一管理
- 优化数据库迁移脚本,添加对不同环境表状态的兼容处理逻辑
- 为异常处理添加错误码枚举参数,统一错误处理方式
- 重构多处业务逻辑中的异常抛出方式,增强代码一致性
- 移除独立的组件清单分组和项目定义,简化前端物料面板数据结构
- 修复测试代码中实体引用路径错误问题
- 添加新的监控模块测试项目到解决方案文件中
2026-07-20 08:25:18 +08:00
xiangning
6c110b579a refactor(dependencies): 移除未使用的域实体引用
- 从文件模块的多部分上传处理器中移除未使用的实体引用
- 从即时通讯模块的群组成员处理器中移除未使用的实体引用
- 从RAG模块的AI模型配置中移除未使用的实体引用
- 从监控模块的告警规则配置中移除未使用的实体引用
- 从平台模块的角色权限处理器中移除未使用的实体引用
- 从脚本模块的执行日志实体引用中进行清理
- 从多个基础设施配置类中移除未使用的依赖项
- 优化测试文件中的导入声明,移除不必要的引用
2026-07-19 14:09:47 +08:00
xiangning
3b13099378 refactor(domain): 重构领域实体结构并更新枚举命名
- 将通用 Entities 命名空间拆分为具体业务实体子目录
- 更新所有实体类型引用为具体的 Entity 后缀类型
- 将 ModelType、ModelProvider、GroupMemberRole 等枚举重命名为 Enum 后缀
- 重构 AiModel 相关配置和映射逻辑适配新的实体结构
- 更新测试代码中的实体类型引用和枚举使用
- 调整应用层处理器中的实体创建和查询逻辑
- 修改 appsettings.json 中的基础设施主机配置为动态占位符模式
2026-07-19 14:02:32 +08:00
xiangning
d63f48ce57 fix(config): Program.cs 用 Sources.Add 注册 Consul provider(修正编译错误) 2026-07-19 13:29:04 +08:00
xiangning
705c6c1b1f refactor(config): 自实现 ConsulConfigurationProvider 替换 Winton 包
Winton.Extensions.Configuration.Consul 在容器环境下读不到 KV(黑盒,
无异常无日志无连接),反复调试无效。改自实现 provider:
- ConsulConfigurationProvider.cs:~180 行,HTTP API 拉 /v1/kv/?recurse=true
- 支持 Optional(失败回退本地)、ReloadOnChange(Timer 轮询 watch)
- 完全可控:ILogger 打印加载结果/异常/热重载事件
- KV key 映射:去 buildflow/ 前缀,剩余直接作 IConfiguration key
- Value base64 解码(Consul API 默认编码)
- 去掉 Winton 包依赖(csproj)

Program.cs 改用 ConsulConfigurationSource 注册
2026-07-19 13:20:59 +08:00
xiangning
78d9bcb5b2 Revert "diag: AddConsul前后读配置值,定位 Winton 是否注入 IConfiguration"
This reverts commit 4883b44d33075cb12b46f97335e085f9ace0d25d.
2026-07-19 13:18:33 +08:00
xiangning
4883b44d33 diag: AddConsul前后读配置值,定位 Winton 是否注入 IConfiguration 2026-07-19 13:17:28 +08:00
xiangning
6b7116fafd refactor(monitoring): 重构领域实体命名和枚举类型
- 将 AlertRule 重命名为 AlertRuleEntity
- 将 ExternalSystem 重命名为 ExternalSystemEntity
- 将 SyncJob 重命名为 SyncJobEntity
- 将 SyncedRecord 重命名为 SyncedRecordEntity
- 将 AlertSeverity 重命名为 AlertSeverityEnum
- 将 ExternalSystemType 重命名为 ExternalSystemTypeEnum
- 将 SyncJobStatus 重命名为 SyncJobStatusEnum
- 将相关实体的命名空间从 Entities 移至 Values
- 更新所有引用这些类型的代码以使用新名称
- 修改数据访问层配置以使用新的实体类型名称
2026-07-19 13:13:24 +08:00
xiangning
a11330936a refactor(monitoring): 重构监控模块领域实体结构
- 将 AlertRule 实体移至 AlertRule 子命名空间并重命名为 AlertRuleEntity
- 将 ExternalSystem 实体移至 ExternalSystem 子命名空间并重命名为 ExternalSystemEntity
- 将 SyncedRecord 实体移至 SyncedRecord 子命名空间并重命名为 SyncedRecordEntity
- 将 SyncJob 实体移至 SyncJob 子命名空间并重命名为 SyncJobEntity
- 新增 CredentialEntry 值对象用于凭证管理
- 新增 JobData 值对象用于同步任务数据投影
- 新增 RecordData 值对象用于同步记录数据投影
- 新增 RuleData 值对象用于告警规则数据投影
- 新增 SystemData 值对象用于外部系统配置数据投影
- 统一值对象存放至 Domain/Values 目录
- 更新实体命名空间引用路径
- 修改 SyncJobStatus 枚举名为 SyncJobStatusEnum
2026-07-19 13:09:58 +08:00
xiangning
5332ff3867 refactor(monitoring): 重构监控模块数据库表名和查询处理
- 将监控模块表前缀从 mon_ 改为 b_
- 为工作流审批任务处理器添加流程引擎图加载逻辑
- 移除外部系统相关DTO和查询类的直接引用改为查询对象模式
- 为脚本执行服务添加模块程序集诊断日志
- 为分享表单提交功能增加密码验证支持
- 集成脚本模块数据库迁移支持
- 更新通知服务测试以兼容IOptionsMonitor接口变化
2026-07-19 13:09:43 +08:00
xiangning
ec06a95bc5 diag: Optional=false 强制暴露 Consul 错误 2026-07-19 13:04:24 +08:00
xiangning
23a2aa95fc diag(config): 临时打印 Consul 加载异常(诊断 Winton 不连接问题) 2026-07-19 12:52:40 +08:00
xiangning
e31d2d004c fix(config): Consul 用 SimpleConfigurationParser 解析扁平 KV
Winton 默认 JsonConfigurationParser 期望单个 key 的 value 是 JSON,
但 buildflow/ 下是 44 个扁平 key=value(每个 value 是普通字符串),
JSON 解析会失败。改用 SimpleConfigurationParser 把 value 直接作为字符串值。

配合默认 ConvertConsulKVPairToConfig:Consul key 路径去 buildflow/ 前缀后
作为 IConfiguration key(如 buildflow/Jwt:SigningKey → Jwt:SigningKey)。
2026-07-19 12:31:51 +08:00
xiangning
2f32b74687 feat(config): Consul ACL token 支持 + 8520 端口
- Program.cs 加 Consul:Token 配置(ACL 开启后 api 必须带 token)
- 默认端口改 8520(非标准,配合安全组+ACL 三重防护)
- token 通过环境变量注入(compose Consul__Token),不进代码
2026-07-17 17:34:13 +08:00
xiangning
f43e35a4b1 feat(config): 接入 Consul KV 配置中心 + IOptionsMonitor 热重载
配置中心:
- BuildFlow.Host.csproj 加 Winton.Extensions.Configuration.Consul 3.0.1
- Program.cs 注册 AddConsul(Optional=true 容错,ReloadOnChange=true 热重载)
- 配置优先级:appsettings.json → Secrets → Consul KV(最高,生产真相源)

热重载(IOptions<T> → IOptionsMonitor<T>):
- KkFileView/AiOptions/NotificationService:.Value → .CurrentValue,完全热重载
- 4 个 HostedService:业务参数热重载,timer 间隔启动时定一次(方案 A)
- S3StorageService:IOptionsMonitor + OnChange 回调重建 AmazonS3Client(volatile + lock)
- 测试全过(Rag 40 + Workflow Notification 21)

compose 加 Consul__Host 环境变量(api 容器注入 Consul 地址)

后续:Consul 部署在 middleware,KV 全量灌入 buildflow/* 前缀
2026-07-17 17:17:24 +08:00
xiangning
74e99850e5 feat(workflow): 添加钉钉式节点级字段权限和依次审批功能
- 实现钉钉式节点级字段权限:从审批节点config解析fieldPermissions进行表单校验
- 添加依次审批模式支持:按顺序逐个创建审批任务并推进流程
- 扩展工作流定义实体:新增DefinitionTree字段存储钉式审批流树JSON
- 更新表单验证器:支持节点级字段权限配置影响必填校验逻辑
- 重构后台服务:修复OperationCanceledException处理防止进程崩溃
- 扩展脚本执行服务:支持加载各模块Application/Domain程序集
- 更新菜单配置:调整组件管理和脚本函数菜单顺序
- 完善工作流引擎:修复实例图加载和任务完成逻辑
2026-07-17 17:05:35 +08:00
xiangning
4f23e76231 fix(api): GlobalExceptionMiddleware 补异常日志,便于排查静默 500
原实现 catch 异常后只返回通用错误信封,不记任何日志,
导致请求 500 时无法定位根因。补 LogError 记录异常详情+请求路径。
2026-07-17 16:24:18 +08:00
xiangning
caf3c17fce fix(cicd): push_retry 加 timeout 60s 包裹,自动处理跨地域 push 死锁
问题:跨地域推 Harbor 时 docker push 推大 layer TCP 死锁,
命令 hang 住不退出,push_retry 永远等不到重试触发。

修复:
- 每次 docker push 用 timeout 60 包裹,超 60s 强制杀掉 CLI(断点续传)
- 重试次数 10→15,给更多断点续传机会
- 被 timeout 杀掉后返回非零,自动进入下一次重试循环
2026-07-17 15:42:36 +08:00
xiangning
2c11b45e31 docs(monitoring): define uhaozu captcha login flow 2026-07-17 15:18:45 +08:00
xiangning
ff5a95b3c9 fix(docker): 显式 COPY appsettings.json 进镜像 + 设 Production 环境
问题:dotnet publish 默认行为不稳定,运行时镜像内缺失 appsettings.json,
导致 api 容器启动时连 MongoDB 127.0.0.1:17017 失败(应用了默认配置)。

修复:
- Dockerfile runtime 阶段显式 COPY src/BuildFlow.Host/appsettings.json
- 设 ASPNETCORE_ENVIRONMENT=Production(配合 Secrets 覆盖)
- appsettings.Secrets.json 仍靠 compose volume 挂载注入,不进镜像
2026-07-17 15:06:40 +08:00
xiangning
26a7443cd7 fix(cicd): GenericTrigger 参数名 genericToken→token(修复编译错误) 2026-07-17 14:48:44 +08:00
xiangning
61e106415b feat(cicd): 接入自动触发 + docker compose 部署
- Jenkinsfile: 加 GenericTrigger(token=buildflow-api),Gitea push 自动触发构建
- Jenkinsfile: 部署 stage 改 docker compose(原 docker run),去 try/catch 吞异常
- Jenkinsfile: HealthCheck 改轮询(最多60s),失败标 unstable 不再静默
- .dockerignore: 排除 appsettings.Secrets.json + bin/obj,防止密钥进镜像

链路:Gitea push → generic-webhook-trigger → Jenkins build → Harbor → cd-target compose up
2026-07-17 14:45:46 +08:00
xiangning
2489b33270 fix(cicd): push 重试每次重新 login,修复 Harbor auth session 过期
重试多次后报 'no basic auth credentials'(docker login session 过期)。
改成 push_retry 函数:每次 push 前重新 docker login,组合成原子重试单元。
重试次数提到 10 次。
2026-07-17 14:30:57 +08:00
xiangning
efa9f1d489 fix(cicd): docker push 加重试循环(8次),应对跨地域网络断流
devops→middleware push 大 blob 反复 use of closed network connection。
docker push 支持断点续传,重试时已传层跳过,多次后最终传完。
2026-07-17 14:07:07 +08:00
xiangning
7b0f74ebb8 revert(docker): 恢复 api Dockerfile 为 dotnet 版本
上一个提交 fa03ae2 误将 web 的 Dockerfile(node/nginx)推到 api 仓库,
覆盖了 api 的 dotnet 构建配置。本提交恢复 api 正确的多阶段 dotnet 构建。
2026-07-17 13:43:53 +08:00
xiangning
fa03ae26d1 fix(docker): builder 阶段装 git,解决 lefthook prepare 钩子失败
node:22-alpine 无 git,pnpm install 触发 prepare(is-ci || lefthook install)
时报 'git not found in PATH'。
2026-07-17 13:43:07 +08:00
xiangning
d41c45c74d fix(cicd): 删除 Endpoints/ 小写重复目录,统一 PascalCase
小写目录是大写目录内容完全一致的冗余副本,Linux 构建 duplicate items
2026-07-17 13:33:17 +08:00
xiangning
1ab9621803 fix(docker): dotnet base 镜像用本地预拉缓存
devops 已 docker pull 完整缓存 sdk/aspnet:10.0,buildkit 用原始 mcr
地址 CACHED 命中,绕过 proxy 首次回源大镜像断流问题。
2026-07-17 13:24:56 +08:00
xiangning
6b106062b6 refactor(rag): 更新AI模型和RAG端点的权限控制
- 移除FastEndpoints命名空间引用
- 移除Microsoft.Extensions.AI命名空间引用
- 将AI模型端点的AllowAnonymous替换为ai-model:read权限
- 将AI模型创建、更新、删除端点的AllowAnonymous替换为ai-model:write权限
- 将RAG流查询端点的AllowAnonymous替换为rag:query权限
- 统一端点安全性配置以符合权限管理要求
2026-07-17 12:19:34 +08:00
xiangning
fb40c47d5b refactor(monitoring): 重构监控模块数据模型为文档模式
- 将 AlertRule 和 ExternalSystem 实体改为使用 JsonData 存储业务字段
- 移除独立的 ExternalSystemCredential 表,凭证信息合并到 ExternalSystem.JsonData
- 添加强类型视图 Data 属性用于访问 JsonData 中的业务数据
- 更新数据库配置将字段存储改为 jsonb 类型并调整索引策略
- 重构告警评估器使用 JsonData 强类型视图读取规则数据
- 更新连接器凭证解析器从 JsonData 中获取凭证信息
- 在 appsettings.json 中添加 monitoring 模块配置
- 将 monitoring 模块集成到主应用程序中并注册服务
- 更新相关处理器使用新的数据模型结构
2026-07-17 12:19:24 +08:00
xiangning
c813230b8d perf(docker): base 镜像走 Harbor Proxy Cache
dotnet sdk/aspnet FROM 改走 mcr-proxy(43.134.235.58:58080/mcr-proxy/dotnet/...),
经 Harbor 回源 mcr.microsoft.com 并本地缓存,避免公网拉取 connection reset。
devops 宿主 daemon 已配该 Harbor 为 insecure-registries。
2026-07-17 12:13:01 +08:00
xiangning
598e2a3b25 fix(cicd): 部署 stage 加远程 docker login Harbor
与 portal 同款修复:Harbor 私有仓库 cd-target pull 需先登录。
withCredentials 拿 harbor-credentials,ssh 传到远程执行
docker login(stdin 传密码,不进 history)。
2026-07-17 11:46:33 +08:00
xiangning
8345c478c8 fix(cicd): 部署 SSH 用 IP 直连 + sudo docker
实测 Jenkins 容器内无 cd-target ssh 别名(/root/.ssh/config 不存在),
且 cd-target 的 ubuntu 用户 docker 需 sudo(NOPASSWD 已配)。
- DEPLOY_HOST: cd-target → ubuntu@110.42.240.10
- 远程命令: docker → sudo docker
2026-07-17 11:36:06 +08:00
xiangning
aab0db2b68 fix(cicd): api 流水线 - 移除飞书通知(凭证缺失) + 部署改 SSH 直连 cd-target
- 移除 feishuNotify 闭包与 environment 中的 feishu-* credentials 绑定
  (凭证未在 Jenkins 配置,导致构建启动即 FAIL)
- 部署 stage: node(deploy-agent) → ssh cd-target 执行 docker pull/run
  (无 deploy-agent agent 节点)
- 新增 HealthCheck stage(try/catch 不阻塞)
- 清除硬编码 webhook URL 明文
2026-07-17 11:22:09 +08:00
xiangning
5239e59b4e fix(security): 修复端点权限缺失问题并加强系统安全防护
- 移除所有 RAG 相关端点的 AllowAnonymous,添加细粒度权限控制
- 配置全局默认授权策略,防止新端点意外公开
- 为 AI 模型、文档、对话、知识库等资源分配读写权限
- 强化 JWT 令牌验证,开启 Issuer/Audience 校验
- 修复脚本执行服务沙箱配置,增强 API 黑名单过滤
- 添加飞书通知凭证环境变量配置,移除硬编码敏感信息
- 完善验证行为逻辑,优化性能和异常处理
- 新增监控模块告警规则实体及相关配置
- 实现外部系统连接器契约和凭证解析服务
2026-07-17 10:06:22 +08:00
xiangning
896c6c14cb fix: 补齐 buildflow:form 权限种子 + 修复路径大小写冲突
- SeedData 补 6 个表单分享/导入导出权限码,修复架构测试
- 清理 git 索引中 workflow/Workflow 大小写重复路径
- ImServerFixture 恢复 filter-repo 误替换的测试库连接常量
2026-07-09 12:52:14 +08:00
xiangning
3d45aed822 fix(workflow): 修复 WorkflowInstance.InitiatorId 系统性空值
全系统 InitiatorId 始终为 Guid.Empty,导致撤回鉴权与发起人通知失效。
自下而上修复:
- StartWorkflowInstanceCommand 加 InitiatorId 参数,Handler 写入实例
- StartWorkflowByNameCommandHandler 透传发起人(原为死参数)
- StartWorkflowInstanceEndpoint 取当前认证用户作为发起人
- IAiBotHandler.AnswerAsync 加 initiatorId 参数,AI 触发流程用真实发起人
- SendMessageCommandHandler 传 request.SenderId 给 AI 问答
- 补充测试断言验证 InitiatorId 正确赋值
2026-07-09 12:52:13 +08:00
xiangning
368dc0abf0 security: 敏感配置迁移至 appsettings.Secrets.json
- appsettings.json 敏感项(连接串/密钥/API Key)改为占位符
- 新增 appsettings.Secrets.json(本地,gitignore)+ .example.json(模板)
- Program.cs 与 3 个 design-time factory 加载 Secrets.json 覆盖
- 历史中的明文凭据已用 git filter-repo 清理(REDACTED)
2026-07-09 12:52:01 +08:00
xiangning
7ecd78550f test: 补充 platform/rag/file 模块单元测试
- platform: 通知与权限模块 handler 测试
- rag: Chat 端到端、知识库 CRUD、嵌入与查询测试
- file: 文件分享下载与文件夹/桶设置测试
2026-07-09 12:52:00 +08:00
xiangning
f550074fcc test(platform): 添加平台模块测试基础设施和RAG端到端测试
- 为平台测试添加EntityFrameworkCore和Xunit引用
- 实现PlatformTestDb创建带审计字段自动填充的测试数据库
- 添加DictionaryConfiguration支持配置值获取测试
- 实现完整的密码强度验证规则
- 添加RAG问答全链路端到端测试
- 创建多个Stub服务用于解耦外部依赖测试
- 实现测试专用的当前用户上下文
2026-07-07 17:31:50 +08:00
xiangning
16ba77f69f feat(platform): 实现权限版本控制即时失效旧token机制
- 在JWT中添加permver权限版本号claim,用于实时权限变更检测
- 实现PermissionVersionMiddleware中间件,在认证后授权前校验权限版本
- 修改AssignPermissionsCommandHandler,角色权限变更时自增相关用户权限版本号
- 修改AssignRolesCommandHandler,用户角色变更时自增权限版本号强制重登录
- 集成Redis存储权限版本镜像,支持分布式环境下的版本同步
- 添加PermissionVersion字段到User实体,用于存储权限版本号
- 实现分布式登录失败计数与账号锁定功能,增强安全防护
- 配置文件中新增AccessTokenMinutes和RefreshTokenDays可配置项
- 更新CORS策略配置,添加127.0.0.1本地访问支持
- 完善异常处理,统一使用ErrorCode枚举进行错误码管理
- 添加SOP测试单元设计文档,规范端到端测试流程
2026-07-07 17:18:05 +08:00
xiangning
e9cc9247f2 test(scripting): 集成测试 + 按钮链回归测试
ScriptExecutionServiceTests:
- 脚本执行返回结果(简单+变量读取)
- 沙箱拦截(File/Reflection 禁用 API 抛异常)
- 草稿可测(ExecuteTestAsync 跳过 Published)
- 状态守卫(Draft/Disabled 拒绝正式执行)
- 执行日志写入(success/timeout/failed)
- 业务异常冒泡不包裹
- 编译缓存(同代码两次执行)
- Logger 输出收集
- ExecuteByNameAsync 按名执行

ScriptCommandHandlerTests:
- Create 唯一名校验 + 默认超时
- Update Disabled 拒绝 + Published 自增版本
- Delete Published 拒绝 + Draft 软删除
- Publish 状态+版本

BuildFlowButtonActionTests(回归):
- ExecuteAsync_RunFunctionAction 通过 IScriptExecutionService 执行脚本
- ExecuteAsync_DraftButton 状态守卫

Task T9 of scripting module refactor (final)
2026-07-07 11:12:28 +08:00
xiangning
2d70d92522 refactor(scripting): 删除旧 CustomFunction 代码 + 权限/菜单迁移
删除(workflow 模块):
- Application/BuildFlow/CustomFunctions/ 全目录(Commands/Handlers/Queries/DTOs/Services)
- Domain/Entities/CustomFunction.cs + CustomFunctionExecutionLog.cs
- Domain/Enums/CustomFunctionType.cs + CustomFunctionExecutionStatus.cs
- Infrastructure/Configurations/CustomFunction*Configuration.cs
- Host/Endpoints/Workflow/BuildFlow/CustomFunctions/ 全目录(5 端点+5 请求)
- Host/Services/Integration/HttpFunctionExecutor.cs + IHttpFunctionExecutor.cs(HTTP 函数不做,spec §11)
- WorkflowDbContext 移除 CustomFunctions/CustomFunctionExecutionLogs DbSet
- WorkflowApplicationModule 移除 ICustomFunctionExecutionService 注册

迁移:
- SeedData 权限码 buildflow:function:* → scripts.* (8 个)
- SeedData 菜单 buildflow.functions → scripts(顶级模块)
- 新增空迁移 RemoveCustomFunctionFromWorkflowModel(仅更新 ModelSnapshot)

测试清理:
- 删除 CustomFunctionTests.cs + BuildFlowApplicationTests.cs CustomFunction 用例
- BuildFlowButtonActionTests.cs 删除 7 个已 skip 的执行器测试(T9 重写)
- BuildFlowEntrySeedTests / PermissionRegistration 断言对齐新种子

Task T7 of scripting module refactor
2026-07-07 10:00:24 +08:00
xiangning
51fe387913 refactor(scripting): 按钮动作链改造指向 IScriptExecutionService
- WorkflowApplicationModule 依赖 ScriptingApplicationModule
- BuildFlowButtonActionExecutor 改用 IScriptExecutionService.ExecuteByIdAsync
- EnsureFunctionScopeAsync 改查 ScriptingDbContext.Scripts
- 结果列表类型 CustomFunctionExecutionResult → ScriptExecutionResult
  (连带更新 BuildFlowButtonActionResult DTO 的 Results 元素类型)
- BuildFlowButtonActionTests 旧 CustomFunction 链路用例暂跳过,留待 T9 重写
- 旧 CustomFunction 代码保留,T7 统一删除

Task T6 of scripting module refactor
2026-07-07 09:42:20 +08:00
xiangning
3d5604d80c feat(scripting): 完整 CQRS 层 + 10 个管理端点
Commands: Create/Update/Delete/Publish/Disable/Test/Invoke
Queries:  List/Detail/ExecutionLogs
DTOs:     ScriptDto/ScriptExecutionLogDto + PagedResult
Endpoints (GET/POST/PUT/DELETE /scripts/*):
  - GET    /scripts              scripts.read
  - GET    /scripts/{id}         scripts.read
  - POST   /scripts              scripts.create
  - PUT    /scripts/{id}         scripts.update
  - DELETE /scripts/{id}         scripts.delete
  - POST   /scripts/{id}/publish scripts.publish
  - POST   /scripts/{id}/disable scripts.disable
  - POST   /scripts/{id}/test    scripts.test
  - GET    /scripts/{id}/logs    scripts.read
  - POST   /scripts/{name}/invoke scripts.run

Task T5 of scripting module refactor
2026-07-07 09:26:54 +08:00
xiangning
bfb83957b6 fix(scripting): ScriptTypeRegistry 程序集过滤按真实模块前缀匹配
原实现按 'BuildFlow.' 前缀过滤,但本仓库业务程序集命名为
Platform.* / Workflow.* / Scripting.* / File.* / IM.* / Rag.* /
BuildFlow.*,仅 rag 与共享层用 BuildFlow 前缀。
导致 Scan() 结果恒为空、方法面板无任何类型可展示。

改为按业务模块前缀白名单匹配,并排除 .Host 程序集。

Task T4 of scripting module refactor
2026-07-07 09:11:02 +08:00
xiangning
989c28da4d refactor(tests): 更新脚本类型注册表测试中的空值检查语法
- 将 m.ResponseType is not null 替换为 m.ResponseType != null
- 保持测试逻辑功能不变
- 提高代码可读性与一致性
2026-07-07 09:07:13 +08:00
xiangning
505c46ec05 feat(scripting): 添加脚本类型元数据服务与按钮动作链功能
- 扩展 CreateBuildFlowButtonDefinitionRequest 添加 BeforeActionsJson 和 AfterActionsJson 字段
- 为自定义函数请求添加 Type、HttpMethod、HttpUrl、HttpHeaders、HttpBodyTemplate 字段
- 添加 ScriptTypeRegistry 服务用于反射扫描 BuildFlow.* 程序集中的 MediatR 类型
- 实现 GetScriptAssemblyListEndpoint 和 GetScriptTypeMetaEndpoint 两个新端点
- 添加 ScriptTypeMeta 相关 DTO 和 GetScriptTypeMetaQuery 查询处理器
- 为年份和年月字符串添加单元测试避免误判为 DateTime 类型
- 在应用启动时自动扫描并缓存脚本可用类型元数据
2026-07-07 09:07:05 +08:00
xiangning
bec5bfd0dd fix(scripting): T3 code quality 修复
- C1: 脚本运行时异常未捕获导致 500(新增 catch-all Failed 日志+包装)
- I1: DateTime.TryParse 误判日期样字符串(改为严格 ISO-8601 正则前置)
- M1: IScriptExecutionService XML 注释补 Logger
- M2: TestExecuteAsync → ExecuteTestAsync 命名一致性
- M7: 递归深度 ++ 移入 try 块保证 finally 配对

T3 code quality review fixes
2026-07-07 08:55:16 +08:00
xiangning
624579cf78 feat(scripting): ScriptGlobals + ScriptExecutionService + 沙箱 + 编译缓存
- ScriptGlobals 注入 ISender/ICurrentUserContext/CancellationToken/ScriptLogger
- ScriptLogger 收集日志写入 ScriptExecutionLog.LogLines
- 变量类型升级:JsonElement→原生类型(long/double/decimal/bool/string/DateTime/Guid)
- 程序集白名单(含 BuildFlow.* Application/Domain,排除 Infrastructure)
- 代码黑名单扫描(防 System.Reflection/IO.File/Net.Http 等)
- 编译缓存(按 code SHA256 缓存委托,上限 500)
- 调用深度计数器(AsyncLocal,超 5 抛异常,防递归)
- 草稿可测(TestExecuteAsync 跳过 Published 校验)

Task T3 of scripting module refactor
2026-07-07 08:42:49 +08:00