xiangning
|
943ae02859
|
perf: reuse prepared form schemas
|
2026-07-24 08:57:03 +08:00 |
|
xiangning
|
178b441b8a
|
perf: batch workflow aggregate refresh
|
2026-07-24 08:49:29 +08:00 |
|
xiangning
|
350fdd56e1
|
docs: plan database and batch performance
|
2026-07-24 08:38:39 +08:00 |
|
xiangning
|
4ba4769cc1
|
feat: migrate workflow job reliability state
|
2026-07-24 03:03:57 +08:00 |
|
xiangning
|
42b9316f60
|
refactor: dispatch import jobs through MediatR
|
2026-07-23 19:01:28 +08:00 |
|
xiangning
|
fdad2b2439
|
fix: make import jobs recoverable
|
2026-07-23 18:59:15 +08:00 |
|
xiangning
|
e515136c11
|
feat: atomically claim import jobs
|
2026-07-23 18:52:02 +08:00 |
|
xiangning
|
2684c2d5c4
|
feat: schedule persistent workflow timers
|
2026-07-23 18:48:06 +08:00 |
|
xiangning
|
4aed8d9fa2
|
feat: process workflow timers with leases
|
2026-07-23 18:45:55 +08:00 |
|
xiangning
|
2eb6371c94
|
fix: persist workflow timer jobs
|
2026-07-23 18:41:52 +08:00 |
|
xiangning
|
e48f93aa04
|
feat: add workflow job lease model
|
2026-07-23 18:39:47 +08:00 |
|
xiangning
|
e453ba1969
|
docs: plan workflow job reliability
|
2026-07-23 18:35:44 +08:00 |
|
xiangning
|
d7697a412a
|
fix: stop logging Consul configuration values
|
2026-07-23 18:15:40 +08:00 |
|
xiangning
|
8988c880bc
|
refactor: move RAG chat streams behind MediatR
|
2026-07-23 18:14:18 +08:00 |
|
xiangning
|
0d1fd55ef0
|
fix: enforce RAG conversation ownership
|
2026-07-23 18:06:44 +08:00 |
|
xiangning
|
6980b2ebba
|
fix: enforce Obsidian ownership and permission
|
2026-07-23 18:02:45 +08:00 |
|
xiangning
|
1e51e6a965
|
feat: bound Obsidian filesystem access
|
2026-07-23 17:59:37 +08:00 |
|
xiangning
|
3f6082a9b1
|
fix: secure bootstrap administrator creation
|
2026-07-23 17:55:24 +08:00 |
|
xiangning
|
09ced1cd32
|
test: restore green solution baseline
|
2026-07-23 17:49:48 +08:00 |
|
xiangning
|
6c9cde1e23
|
docs: plan API security and ownership hardening
|
2026-07-23 17:49:27 +08:00 |
|
xiangning
|
f8e406c1b6
|
chore: ignore local worktrees
|
2026-07-23 17:16:27 +08:00 |
|
xiangning
|
6c8246e1f1
|
docs: plan react pro integration foundation
|
2026-07-20 14:29:12 +08:00 |
|
xiangning
|
df0bc8ceed
|
docs: define react pro integration foundation
|
2026-07-20 08:34:52 +08:00 |
|
xiangning
|
e549d3e3fb
|
docs: add BuildFlow API optimization design
|
2026-07-20 08:29:10 +08:00 |
|
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 |
|