变更名:
forge-ai-hub-secure-actions状态:done 原则:发布快照 → 动态授权目录 → 字段交集 → elicitation → 幂等执行 → 双审计
文件:
forge-plugin-mcp/.../config/ForgeMcpServerAutoConfiguration.javaforge-plugin-mcp/.../spi/McpToolContributor.javaCreate/Modify MCP contributor 聚合测试
[x] Red:新增两个 contributor 时工具集合应稳定合并,重复 Tool 名启动失败;
[x] 实现 McpToolContributor,默认 ping 作为 contributor;
[x] 保持 SYNC/STREAMABLE/stdio=false Guard 不变;
[x] 运行 MCP 目标测试,16/16 通过。
文件:
BusinessObjectDesignVersionMapper.java/xmlBusinessObjectActionService.javaBusinessActionExecutionService.javaAiBusinessActionExecutionLog.java 与 Mapper XMLModify Generator 单元测试
[x] Red:草稿动作不能替代最近发布版本;相同幂等键不同参数必须失败;无租户上下文必须失败;
[x] 增加发布版本 XML 查询和 resolvePublishedAction;
[x] 增加 executePublished,只使用指定发布版本动作;
[x] canonical JSON 只落 SHA-256 指纹,不落参数值;
[x] 幂等命中前比较请求指纹;
[x] BusinessActionExecutionServiceTest 4/4、BusinessObjectActionServicePublishedTest 3/3 通过。
文件:
forge-plugin-capability-secure-actions/pom.xml.../publish/BusinessActionCapabilityPublisher.java.../publish/BusinessActionCapabilityController.javaCreate DTO、policy parser、schema builder、step validator
[x] Red:未发布动作、未知步骤、流程/消息/领域动作、空白名单和非模型字段发布失败;
[x] 只允许 BUSINESS_ACTION/ACTION/MEDIUM/MCP_ELICITATION;
[x] 生成 additionalProperties=false、Draft 2020-12 的输入/输出 Schema 和不可变 policy snapshot;
[x] 使用 @SaCheckPermission("ai:capability:business-action:publish")、@ApiDecrypt 和统一响应;
[x] 建立模块、BOM、plugin parent、Admin 聚合和可独立关闭的自动配置。
文件:
CapabilityGrantService.javaCreate SecureActionCatalogService.java
[x] Red:ACTION 无字段策略、HIGH、跨租户/组织、撤销 grant、无动作权限全部拒绝;
[x] ACTION grant 只允许 MEDIUM + BUSINESS_ACTION + 非空 allowedFields;
[x] search/describe 使用显式 XML keyset 分批查询,不加载全库或产生业务 N+1;
[x] resolvedVersion、发布对象版本和 sourceVersion 精确匹配;
[x] 字段策略按版本、grant、不可变发布模型字段取交集。
文件:
.../mcp/SecureActionMcpToolContributor.java.../mcp/SecureActionMcpHandler.javaCreate tool schema constants/tests
[x] Red:SERVICE invoke、scope 不足、无 elicitation、DECLINE/CANCEL、字段越权、幂等冲突均无副作用;
[x] search/describe 返回结构化授权目录;
[x] invoke 校验 target schema 后调用 exchange.createElicitation;
[x] 仅 Action.ACCEPT + confirm=true 继续执行;
[x] annotations 固定:invoke destructive=true、idempotent=true、openWorld=false;
[x] 三个 Tool 均提供 outputSchema、text JSON 与 structuredContent,错误码稳定且不泄露内部信息。
文件:
V1.0.23__add_secure_business_action_capabilities.sqlIntegrate secure action invocation audit/tests
[x] Red:USER A/client/serviceUser/tenant/org/requestId 任一缺失不执行;
[x] 业务动作日志关联 capability requestId 和双身份;
[x] Capability 调用日志不保存 arguments,审计异常只安全记录 requestId/能力码/异常类型;
[x] Flyway 使用 information_schema 防重复、tenant_id=1、显式列名;
[x] xmllint、placeholder、物理 DELETE 和敏感信息扫描通过。
mvn -pl forge-admin-server -am package -DskipTests 通过;version policy ∩ grant policy ∩ published model 重建/裁剪运行时 arguments Schema,并在 invoke 再做显式字段交集校验;ai_capability_version 的 source binding、Schema 和 policy,禁止混用能力主表当前 binding;*_UNAVAILABLE 错误且安全记录异常类型;/review forge-ai-hub-secure-actions;Spec Compliance 与 Code Quality 均 PASS。code-copilot/changes/archive/2026-07-12-forge-ai-hub-secure-actions/。