吸收数字员工管理端记忆策略预览
This commit is contained in:
@@ -155,6 +155,16 @@ public class DigitalEmployeeAdminWorkbenchRowDto {
|
||||
private String lastGovernanceAction;
|
||||
@JsonProperty("last_reviewed_at")
|
||||
private String lastReviewedAt;
|
||||
@JsonProperty("memory_policy_id")
|
||||
private String memoryPolicyId;
|
||||
@JsonProperty("memory_policy_status")
|
||||
private String memoryPolicyStatus;
|
||||
@JsonProperty("merge_policy_id")
|
||||
private String mergePolicyId;
|
||||
@JsonProperty("merge_action_disabled")
|
||||
private Boolean mergeActionDisabled;
|
||||
@JsonProperty("remote_memory_policy_disabled")
|
||||
private Boolean remoteMemoryPolicyDisabled;
|
||||
@JsonProperty("skill_id")
|
||||
private String skillId;
|
||||
@JsonProperty("skill_version")
|
||||
|
||||
@@ -73,6 +73,7 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
"artifact:mark_keep", "artifact:mark_expire", "artifact:mark_reviewed", "artifact:record_cleanup_request",
|
||||
"daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval", "daily_report:record_approval_decision",
|
||||
"memory:archive_memory", "memory:restore_memory", "memory:mark_reviewed",
|
||||
"memory_policy:pull_policy", "memory_policy:mark_reviewed", "memory_policy:dismiss",
|
||||
"skill:mark_reviewed", "skill:dismiss",
|
||||
"policy_snapshot:pull_policy", "policy_snapshot:mark_reviewed", "policy_snapshot:dismiss",
|
||||
"scheduler:retry_scheduler_check", "scheduler:mark_reviewed", "scheduler:dismiss",
|
||||
@@ -1146,6 +1147,11 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
.latestMemoryId(firstString(businessView.get("latest_memory_id"), businessView.get("latestMemoryId"), payload.get("latest_memory_id"), payload.get("latestMemoryId")))
|
||||
.lastGovernanceAction(firstString(businessView.get("last_governance_action"), businessView.get("lastGovernanceAction"), payload.get("last_governance_action"), payload.get("lastGovernanceAction")))
|
||||
.lastReviewedAt(firstString(businessView.get("last_reviewed_at"), businessView.get("lastReviewedAt"), payload.get("last_reviewed_at"), payload.get("lastReviewedAt")))
|
||||
.memoryPolicyId(firstString(businessView.get("memory_policy_id"), businessView.get("memoryPolicyId"), payload.get("memory_policy_id"), payload.get("memoryPolicyId")))
|
||||
.memoryPolicyStatus(firstString(businessView.get("memory_policy_status"), businessView.get("memoryPolicyStatus"), payload.get("memory_policy_status"), payload.get("memoryPolicyStatus")))
|
||||
.mergePolicyId(firstString(businessView.get("merge_policy_id"), businessView.get("mergePolicyId"), payload.get("merge_policy_id"), payload.get("mergePolicyId")))
|
||||
.mergeActionDisabled(nullableBooleanValue(firstPresent(businessView.get("merge_action_disabled"), businessView.get("mergeActionDisabled"), payload.get("merge_action_disabled"), payload.get("mergeActionDisabled"))))
|
||||
.remoteMemoryPolicyDisabled(nullableBooleanValue(firstPresent(businessView.get("remote_memory_policy_disabled"), businessView.get("remoteMemoryPolicyDisabled"), payload.get("remote_memory_policy_disabled"), payload.get("remoteMemoryPolicyDisabled"))))
|
||||
.skillId(firstString(businessView.get("skill_id"), businessView.get("skillId"), payload.get("skill_id"), payload.get("skillId")))
|
||||
.skillVersion(firstString(businessView.get("skill_version"), businessView.get("skillVersion"), businessView.get("version"), payload.get("skill_version"), payload.get("skillVersion"), payload.get("version")))
|
||||
.installStatus(firstString(businessView.get("install_status"), businessView.get("installStatus"), payload.get("install_status"), payload.get("installStatus")))
|
||||
@@ -1206,6 +1212,7 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
case "governance_commands" -> isGovernanceCommandRow(row);
|
||||
case "route_governance" -> isRouteGovernanceRow(row);
|
||||
case "memory_governance" -> isMemoryGovernanceRow(row);
|
||||
case "memory_policies" -> isMemoryPolicyRow(row);
|
||||
case "skill_audits" -> isSkillAuditRow(row);
|
||||
case "policy_center" -> isPolicyCenterRow(row);
|
||||
case "scheduler_operations" -> isSchedulerOperationsRow(row);
|
||||
@@ -1364,6 +1371,20 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye
|
||||
|| row.getMergeCandidateCount() != null;
|
||||
}
|
||||
|
||||
private boolean isMemoryPolicyRow(DigitalEmployeeAdminWorkbenchRowDto row) {
|
||||
String category = firstString(row.getCategory());
|
||||
String kind = firstString(row.getKind());
|
||||
return Set.of("memory_policy", "memory_merge_policy", "memory_retention_policy").contains(category)
|
||||
|| contains(kind, "memory_policy")
|
||||
|| contains(kind, "memory_merge_policy")
|
||||
|| contains(kind, "memory_retention_policy")
|
||||
|| StringUtils.isNotBlank(row.getMemoryPolicyId())
|
||||
|| StringUtils.isNotBlank(row.getMemoryPolicyStatus())
|
||||
|| StringUtils.isNotBlank(row.getMergePolicyId())
|
||||
|| row.getMergeActionDisabled() != null
|
||||
|| row.getRemoteMemoryPolicyDisabled() != null;
|
||||
}
|
||||
|
||||
private boolean isSkillAuditRow(DigitalEmployeeAdminWorkbenchRowDto row) {
|
||||
String category = firstString(row.getCategory());
|
||||
String kind = firstString(row.getKind());
|
||||
|
||||
@@ -506,6 +506,60 @@ class DigitalEmployeeSyncApplicationServiceImplTest {
|
||||
assertThat(result.getRecords().get(1).getLastGovernanceAction()).isEqualTo("archive");
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchMemoryPoliciesReturnsPolicyRowsOnly() {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
.thenReturn(page(List.of(
|
||||
record("outbox-memory-policy", "event", "event-memory-policy-1", 101L, new Date(10_000),
|
||||
Map.ofEntries(
|
||||
Map.entry("entity_type", "event"),
|
||||
Map.entry("category", "memory_policy"),
|
||||
Map.entry("kind", "memory_policy_snapshot"),
|
||||
Map.entry("status", "synced"),
|
||||
Map.entry("title", "记忆策略快照"),
|
||||
Map.entry("memory_policy_id", "memory-policy-1"),
|
||||
Map.entry("memory_policy_status", "remote_disabled"),
|
||||
Map.entry("merge_policy_id", "merge-policy-1"),
|
||||
Map.entry("merge_action_disabled", true),
|
||||
Map.entry("remote_memory_policy_disabled", true),
|
||||
Map.entry("policy_source", "remote")
|
||||
),
|
||||
Map.of("id", "event-memory-policy-1", "kind", "memory_policy_snapshot")),
|
||||
record("outbox-memory-merge-policy", "event", "event-memory-policy-2", 101L, new Date(11_000),
|
||||
Map.of(
|
||||
"entity_type", "event",
|
||||
"category", "memory_merge_policy",
|
||||
"kind", "memory_merge_policy_pulled",
|
||||
"status", "synced",
|
||||
"title", "合并策略已拉取",
|
||||
"merge_policy_id", "merge-policy-2",
|
||||
"merge_action_disabled", true
|
||||
),
|
||||
Map.of("id", "event-memory-policy-2", "kind", "memory_merge_policy_pulled")),
|
||||
record("outbox-memory", "memory", "memory-1", 101L, new Date(12_000),
|
||||
Map.of("entity_type", "memory", "title", "普通记忆", "status", "active", "memory_id", "memory-1"),
|
||||
Map.of("id", "memory-1", "status", "active")),
|
||||
record("outbox-skill", "event", "event-skill-1", 101L, new Date(13_000),
|
||||
Map.of("entity_type", "event", "category", "skill", "title", "技能", "status", "allowed"),
|
||||
Map.of("id", "event-skill-1", "status", "allowed"))
|
||||
)));
|
||||
|
||||
DigitalEmployeeAdminWorkbenchPageDto result = service.queryAdminWorkbench(
|
||||
"memory_policies", null, null, null, null, null, null, null, null, null, null, null, 1L, 20L
|
||||
);
|
||||
|
||||
assertThat(result.getTotal()).isEqualTo(2);
|
||||
assertThat(result.getRecords()).extracting(DigitalEmployeeAdminWorkbenchRowDto::getEntityId)
|
||||
.containsExactly("event-memory-policy-1", "event-memory-policy-2");
|
||||
assertThat(result.getRecords().get(0).getView()).isEqualTo("memory_policies");
|
||||
assertThat(result.getRecords().get(0).getMemoryPolicyId()).isEqualTo("memory-policy-1");
|
||||
assertThat(result.getRecords().get(0).getMemoryPolicyStatus()).isEqualTo("remote_disabled");
|
||||
assertThat(result.getRecords().get(0).getMergePolicyId()).isEqualTo("merge-policy-1");
|
||||
assertThat(result.getRecords().get(0).getMergeActionDisabled()).isTrue();
|
||||
assertThat(result.getRecords().get(0).getRemoteMemoryPolicyDisabled()).isTrue();
|
||||
assertThat(result.getRecords().get(1).getMergePolicyId()).isEqualTo("merge-policy-2");
|
||||
}
|
||||
|
||||
@Test
|
||||
void queryAdminWorkbenchSkillAuditsReturnsSkillAndToolAuditRowsOnly() {
|
||||
when(repository.queryBusinessRecords(eq(101L), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(null), eq(1L), eq(20L)))
|
||||
|
||||
Reference in New Issue
Block a user