diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/application/DigitalEmployeeSyncApplicationService.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/application/DigitalEmployeeSyncApplicationService.java index f936994a..5b45b83d 100644 --- a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/application/DigitalEmployeeSyncApplicationService.java +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/application/DigitalEmployeeSyncApplicationService.java @@ -1,6 +1,9 @@ package com.xspaceagi.agent.core.adapter.application; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminWorkbenchPageDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionPageDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionRequestDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionResultDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeBusinessViewPageDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeePlanBusinessViewDetailDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRecordPageDto; @@ -8,6 +11,7 @@ import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRequestDt import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncResponseDto; import java.util.Date; +import java.util.List; public interface DigitalEmployeeSyncApplicationService { DigitalEmployeeSyncResponseDto syncOutbox(DigitalEmployeeSyncRequestDto request); @@ -57,4 +61,19 @@ public interface DigitalEmployeeSyncApplicationService { Long pageNo, Long pageSize ); + + DigitalEmployeeAdminActionResultDto createAdminAction(DigitalEmployeeAdminActionRequestDto request); + + DigitalEmployeeAdminActionPageDto queryPendingAdminActions( + String clientKey, + String deviceId, + Long pageNo, + Long pageSize + ); + + DigitalEmployeeAdminActionResultDto markAdminActionResult( + Long actionId, + String status, + List reasonCodes + ); } diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionDto.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionDto.java new file mode 100644 index 00000000..632507b9 --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionDto.java @@ -0,0 +1,33 @@ +package com.xspaceagi.agent.core.adapter.dto.digital; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +@Builder +public class DigitalEmployeeAdminActionDto { + private Long id; + @JsonProperty("client_key_masked") + private String clientKeyMasked; + @JsonProperty("device_id") + private String deviceId; + @JsonProperty("entity_type") + private String entityType; + @JsonProperty("entity_id") + private String entityId; + private String action; + private String status; + @JsonProperty("reason_codes") + private List reasonCodes; + @JsonProperty("request_payload") + private Map requestPayload; + @JsonProperty("created_at") + private Date createdAt; + @JsonProperty("processed_at") + private Date processedAt; +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionPageDto.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionPageDto.java new file mode 100644 index 00000000..c663455b --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionPageDto.java @@ -0,0 +1,18 @@ +package com.xspaceagi.agent.core.adapter.dto.digital; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class DigitalEmployeeAdminActionPageDto { + private Long total; + @JsonProperty("page_no") + private Long pageNo; + @JsonProperty("page_size") + private Long pageSize; + private List records; +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionRequestDto.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionRequestDto.java new file mode 100644 index 00000000..1fb22899 --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionRequestDto.java @@ -0,0 +1,23 @@ +package com.xspaceagi.agent.core.adapter.dto.digital; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.Map; + +@Data +public class DigitalEmployeeAdminActionRequestDto { + @JsonProperty("sync_record_id") + private Long syncRecordId; + @JsonProperty("client_key") + private String clientKey; + @JsonProperty("device_id") + private String deviceId; + @JsonProperty("entity_type") + private String entityType; + @JsonProperty("entity_id") + private String entityId; + private String action; + @JsonProperty("request_payload") + private Map requestPayload; +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionResultDto.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionResultDto.java new file mode 100644 index 00000000..37315a8f --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/dto/digital/DigitalEmployeeAdminActionResultDto.java @@ -0,0 +1,17 @@ +package com.xspaceagi.agent.core.adapter.dto.digital; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +@Data +@Builder +public class DigitalEmployeeAdminActionResultDto { + private Boolean ok; + private String status; + @JsonProperty("reason_codes") + private List reasonCodes; + private DigitalEmployeeAdminActionDto action; +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/DigitalEmployeeAdminActionRepository.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/DigitalEmployeeAdminActionRepository.java new file mode 100644 index 00000000..8a37fa52 --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/DigitalEmployeeAdminActionRepository.java @@ -0,0 +1,16 @@ +package com.xspaceagi.agent.core.adapter.repository; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeAdminAction; + +public interface DigitalEmployeeAdminActionRepository extends IService { + IPage queryActions( + Long tenantId, + String clientKey, + String deviceId, + String status, + long pageNo, + long pageSize + ); +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/entity/DigitalEmployeeAdminAction.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/entity/DigitalEmployeeAdminAction.java new file mode 100644 index 00000000..9ddcfeef --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-adapter/src/main/java/com/xspaceagi/agent/core/adapter/repository/entity/DigitalEmployeeAdminAction.java @@ -0,0 +1,36 @@ +package com.xspaceagi.agent.core.adapter.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@TableName("digital_employee_admin_action") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DigitalEmployeeAdminAction { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @TableField(value = "_tenant_id") + private Long tenantId; + private Long userId; + private String clientKey; + private String deviceId; + private String entityType; + private String entityId; + private String action; + private String status; + private String reasonCodes; + private String requestPayload; + private Date processedAt; + private Date modified; + private Date created; +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/main/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImpl.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/main/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImpl.java index 9ad3eb4b..029d7c87 100644 --- a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/main/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImpl.java +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/main/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImpl.java @@ -7,6 +7,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.xspaceagi.agent.core.adapter.application.DigitalEmployeeSyncApplicationService; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionPageDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionRequestDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionResultDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminWorkbenchPageDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminWorkbenchRowDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeBusinessViewPageDto; @@ -18,7 +22,9 @@ import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRecordDto import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRecordPageDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRequestDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncResponseDto; +import com.xspaceagi.agent.core.adapter.repository.DigitalEmployeeAdminActionRepository; import com.xspaceagi.agent.core.adapter.repository.DigitalEmployeeSyncRecordRepository; +import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeAdminAction; import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeSyncRecord; import com.xspaceagi.system.spec.common.RequestContext; import jakarta.annotation.Resource; @@ -42,10 +48,26 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye private static final long DEFAULT_PAGE_NO = 1L; private static final long DEFAULT_PAGE_SIZE = 20L; private static final long MAX_PAGE_SIZE = 100L; + private static final Set HIGH_RISK_ADMIN_ACTIONS = Set.of( + "accept_remote_approval", "cleanup_file_batch", "start_service", "stop_service", "hard_interrupt" + ); + private static final Set LOW_RISK_ADMIN_ACTIONS = Set.of( + "approval:keep_local", "approval:mark_reviewed", + "route_decision:mark_reviewed", "route_decision:dismiss", "route_decision:retry_policy_check", + "route:mark_reviewed", "route:dismiss", "route:retry_policy_check", + "notification:mark_read", "notification:dismiss", + "artifact:mark_keep", "artifact:mark_expire", "artifact:mark_reviewed", + "daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval", + "audit:mark_reviewed", "audit:dismiss", + "event:mark_reviewed", "event:dismiss" + ); @Resource private DigitalEmployeeSyncRecordRepository digitalEmployeeSyncRecordRepository; + @Resource + private DigitalEmployeeAdminActionRepository digitalEmployeeAdminActionRepository; + @Resource private ObjectMapper objectMapper; @@ -321,6 +343,151 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye return adminWorkbenchPage(rows, currentPage, currentPageSize); } + @Override + @DSTransactional + public DigitalEmployeeAdminActionResultDto createAdminAction(DigitalEmployeeAdminActionRequestDto request) { + Date now = new Date(); + request = enrichAdminActionRequestFromSyncRecord(request); + List reasonCodes = validateAdminAction(request); + boolean allowed = reasonCodes.isEmpty(); + if (allowed) { + reasonCodes = List.of("action_recorded"); + } + DigitalEmployeeAdminAction action = new DigitalEmployeeAdminAction(); + action.setTenantId(currentTenantId()); + action.setUserId(currentUserId()); + action.setClientKey(StringUtils.trimToNull(request == null ? null : request.getClientKey())); + action.setDeviceId(StringUtils.trimToNull(request == null ? null : request.getDeviceId())); + action.setEntityType(normalizedText(request == null ? null : request.getEntityType())); + action.setEntityId(StringUtils.trimToNull(request == null ? null : request.getEntityId())); + action.setAction(normalizedText(request == null ? null : request.getAction())); + action.setStatus(allowed ? "pending" : "rejected"); + action.setReasonCodes(toJson(reasonCodes)); + action.setRequestPayload(toJson(request == null ? null : request.getRequestPayload())); + action.setProcessedAt(allowed ? null : now); + action.setModified(now); + action.setCreated(now); + digitalEmployeeAdminActionRepository.save(action); + return DigitalEmployeeAdminActionResultDto.builder() + .ok(allowed) + .status(action.getStatus()) + .reasonCodes(reasonCodes) + .action(toAdminActionDto(action)) + .build(); + } + + private DigitalEmployeeAdminActionRequestDto enrichAdminActionRequestFromSyncRecord(DigitalEmployeeAdminActionRequestDto request) { + if (request == null || request.getSyncRecordId() == null || StringUtils.isNotBlank(request.getClientKey())) { + return request; + } + DigitalEmployeeSyncRecord record = digitalEmployeeSyncRecordRepository.getById(request.getSyncRecordId()); + if (record == null || currentTenantId() == null || !Objects.equals(record.getTenantId(), currentTenantId())) { + return request; + } + request.setClientKey(record.getClientKey()); + if (StringUtils.isBlank(request.getDeviceId())) request.setDeviceId(record.getDeviceId()); + if (StringUtils.isBlank(request.getEntityType())) request.setEntityType(record.getEntityType()); + if (StringUtils.isBlank(request.getEntityId())) request.setEntityId(record.getEntityId()); + return request; + } + + @Override + public DigitalEmployeeAdminActionPageDto queryPendingAdminActions(String clientKey, String deviceId, Long pageNo, Long pageSize) { + long currentPage = pageNo == null || pageNo < 1 ? DEFAULT_PAGE_NO : pageNo; + long currentPageSize = pageSize == null || pageSize < 1 + ? DEFAULT_PAGE_SIZE + : Math.min(pageSize, MAX_PAGE_SIZE); + Long tenantId = currentTenantId(); + if (tenantId == null || StringUtils.isBlank(clientKey)) { + return DigitalEmployeeAdminActionPageDto.builder() + .total(0L) + .pageNo(currentPage) + .pageSize(currentPageSize) + .records(List.of()) + .build(); + } + IPage page = digitalEmployeeAdminActionRepository.queryActions( + tenantId, + StringUtils.trimToNull(clientKey), + StringUtils.trimToNull(deviceId), + "pending", + currentPage, + currentPageSize + ); + return DigitalEmployeeAdminActionPageDto.builder() + .total(page.getTotal()) + .pageNo(page.getCurrent()) + .pageSize(page.getSize()) + .records(page.getRecords().stream().map(this::toAdminActionDto).toList()) + .build(); + } + + @Override + @DSTransactional + public DigitalEmployeeAdminActionResultDto markAdminActionResult(Long actionId, String status, List reasonCodes) { + Long tenantId = currentTenantId(); + DigitalEmployeeAdminAction action = actionId == null ? null : digitalEmployeeAdminActionRepository.getById(actionId); + if (action == null || tenantId == null || !Objects.equals(action.getTenantId(), tenantId)) { + return DigitalEmployeeAdminActionResultDto.builder() + .ok(false) + .status("not_found") + .reasonCodes(List.of("admin_action_not_found")) + .build(); + } + String normalizedStatus = normalizedText(status); + if (!Set.of("applied", "rejected", "failed").contains(normalizedStatus)) { + normalizedStatus = "failed"; + } + Date now = new Date(); + List normalizedReasons = CollectionUtils.isEmpty(reasonCodes) ? List.of("admin_action_" + normalizedStatus) : reasonCodes; + action.setStatus(normalizedStatus); + action.setReasonCodes(toJson(normalizedReasons)); + action.setProcessedAt(now); + action.setModified(now); + digitalEmployeeAdminActionRepository.updateById(action); + return DigitalEmployeeAdminActionResultDto.builder() + .ok(true) + .status(action.getStatus()) + .reasonCodes(normalizedReasons) + .action(toAdminActionDto(action)) + .build(); + } + + private List validateAdminAction(DigitalEmployeeAdminActionRequestDto request) { + if (request == null) return List.of("request_required"); + String clientKey = StringUtils.trimToNull(request.getClientKey()); + String entityType = normalizedText(request.getEntityType()); + String entityId = StringUtils.trimToNull(request.getEntityId()); + String action = normalizedText(request.getAction()); + if (StringUtils.isBlank(clientKey) || StringUtils.isBlank(entityType) || StringUtils.isBlank(entityId) || StringUtils.isBlank(action)) { + return List.of("required_field_missing"); + } + if (HIGH_RISK_ADMIN_ACTIONS.contains(action)) { + return List.of("high_risk_action_disabled"); + } + if (!LOW_RISK_ADMIN_ACTIONS.contains(entityType + ":" + action)) { + return List.of("unsupported_admin_action"); + } + return List.of(); + } + + private DigitalEmployeeAdminActionDto toAdminActionDto(DigitalEmployeeAdminAction action) { + if (action == null) return null; + return DigitalEmployeeAdminActionDto.builder() + .id(action.getId()) + .clientKeyMasked(maskClientKey(action.getClientKey())) + .deviceId(action.getDeviceId()) + .entityType(action.getEntityType()) + .entityId(action.getEntityId()) + .action(action.getAction()) + .status(action.getStatus()) + .reasonCodes(readStringList(action.getReasonCodes())) + .requestPayload(readJsonObject(action.getRequestPayload())) + .createdAt(action.getCreated()) + .processedAt(action.getProcessedAt()) + .build(); + } + private DigitalEmployeeAdminWorkbenchPageDto adminWorkbenchPage(List rows, long pageNo, long pageSize) { int fromIndex = (int) Math.min(Math.max(pageNo - 1, 0) * pageSize, rows.size()); int toIndex = (int) Math.min(fromIndex + pageSize, rows.size()); @@ -572,6 +739,18 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye return normalized; } + private String normalizedText(String value) { + return StringUtils.trimToEmpty(value).toLowerCase().replace('-', '_'); + } + + private Long currentTenantId() { + return RequestContext.get() == null ? null : RequestContext.get().getTenantId(); + } + + private Long currentUserId() { + return RequestContext.get() == null ? null : RequestContext.get().getUserId(); + } + private String syncRecordUrl(String outboxId) { return "/system/content/content-digital-employee-sync?outbox_id=" + StringUtils.defaultString(outboxId); } @@ -593,6 +772,16 @@ public class DigitalEmployeeSyncApplicationServiceImpl implements DigitalEmploye } } + private List readStringList(String value) { + if (StringUtils.isBlank(value)) return List.of(); + try { + List parsed = objectMapper.readValue(value, new TypeReference<>() {}); + return parsed == null ? List.of() : parsed; + } catch (Exception e) { + return List.of(value); + } + } + private String firstString(Object... values) { for (Object value : values) { String candidate = stringValue(value, null); diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/test/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImplTest.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/test/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImplTest.java index 0e9e6c28..5c7cdf39 100644 --- a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/test/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImplTest.java +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-application/src/test/java/com/xspaceagi/agent/core/application/service/DigitalEmployeeSyncApplicationServiceImplTest.java @@ -7,11 +7,17 @@ import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeBusinessViewP import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeBusinessViewRowDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminWorkbenchPageDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminWorkbenchRowDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionPageDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionRequestDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionResultDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeePlanBusinessViewDetailDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncItemDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRecordPageDto; import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeSyncRequestDto; +import com.xspaceagi.agent.core.adapter.repository.DigitalEmployeeAdminActionRepository; import com.xspaceagi.agent.core.adapter.repository.DigitalEmployeeSyncRecordRepository; +import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeAdminAction; import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeSyncRecord; import com.xspaceagi.system.spec.common.RequestContext; import org.junit.jupiter.api.AfterEach; @@ -35,6 +41,7 @@ import static org.mockito.Mockito.when; class DigitalEmployeeSyncApplicationServiceImplTest { private DigitalEmployeeSyncRecordRepository repository; + private DigitalEmployeeAdminActionRepository adminActionRepository; private DigitalEmployeeSyncApplicationServiceImpl service; @BeforeEach @@ -45,8 +52,10 @@ class DigitalEmployeeSyncApplicationServiceImplTest { RequestContext.set(context); repository = mock(DigitalEmployeeSyncRecordRepository.class); + adminActionRepository = mock(DigitalEmployeeAdminActionRepository.class); service = new DigitalEmployeeSyncApplicationServiceImpl(); ReflectionTestUtils.setField(service, "digitalEmployeeSyncRecordRepository", repository); + ReflectionTestUtils.setField(service, "digitalEmployeeAdminActionRepository", adminActionRepository); ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper()); } @@ -260,12 +269,111 @@ class DigitalEmployeeSyncApplicationServiceImplTest { assertThat(row.getPayload()).containsEntry("tool_name", "shell"); } + @Test + void createAdminActionRecordsLowRiskActionAsPending() { + DigitalEmployeeAdminActionRequestDto request = adminActionRequest("approval", "approval-1", "keep_local"); + request.setRequestPayload(Map.of("reason", "protect_local_fact")); + + DigitalEmployeeAdminActionResultDto result = service.createAdminAction(request); + + ArgumentCaptor captor = ArgumentCaptor.forClass(DigitalEmployeeAdminAction.class); + verify(adminActionRepository).save(captor.capture()); + DigitalEmployeeAdminAction action = captor.getValue(); + assertThat(result.getOk()).isTrue(); + assertThat(result.getStatus()).isEqualTo("pending"); + assertThat(action.getTenantId()).isEqualTo(101L); + assertThat(action.getUserId()).isEqualTo(202L); + assertThat(action.getClientKey()).isEqualTo("client-key-001"); + assertThat(action.getDeviceId()).isEqualTo("device-001"); + assertThat(action.getStatus()).isEqualTo("pending"); + assertThat(action.getReasonCodes()).contains("action_recorded"); + assertThat(action.getRequestPayload()).contains("protect_local_fact"); + } + + @Test + void createAdminActionRejectsHighRiskActionWithoutPendingExecution() { + DigitalEmployeeAdminActionRequestDto request = adminActionRequest("artifact", "artifact-1", "cleanup_file_batch"); + + DigitalEmployeeAdminActionResultDto result = service.createAdminAction(request); + + assertThat(result.getOk()).isFalse(); + assertThat(result.getStatus()).isEqualTo("rejected"); + assertThat(result.getReasonCodes()).contains("high_risk_action_disabled"); + ArgumentCaptor captor = ArgumentCaptor.forClass(DigitalEmployeeAdminAction.class); + verify(adminActionRepository).save(captor.capture()); + assertThat(captor.getValue().getStatus()).isEqualTo("rejected"); + } + + @Test + void queryPendingAdminActionsFiltersTenantClientDeviceAndMasksKey() { + when(adminActionRepository.queryActions(eq(101L), eq("client-key-001"), eq("device-001"), eq("pending"), eq(1L), eq(20L))) + .thenReturn(adminActionPage(List.of(adminAction(10L, "approval", "approval-1", "keep_local", "pending")))); + + DigitalEmployeeAdminActionPageDto result = service.queryPendingAdminActions("client-key-001", "device-001", 1L, 20L); + + assertThat(result.getTotal()).isEqualTo(1L); + DigitalEmployeeAdminActionDto action = result.getRecords().get(0); + assertThat(action.getId()).isEqualTo(10L); + assertThat(action.getClientKeyMasked()).isEqualTo("clie*********001"); + assertThat(action.getStatus()).isEqualTo("pending"); + assertThat(action.getReasonCodes()).contains("action_recorded"); + } + + @Test + void markAdminActionResultUpdatesStatusAndProcessedAt() { + DigitalEmployeeAdminAction action = adminAction(10L, "notification", "notification-1", "dismiss", "pending"); + when(adminActionRepository.getById(10L)).thenReturn(action); + + DigitalEmployeeAdminActionResultDto result = service.markAdminActionResult(10L, "applied", List.of("admin_action_applied")); + + assertThat(result.getOk()).isTrue(); + assertThat(result.getStatus()).isEqualTo("applied"); + verify(adminActionRepository).updateById(action); + assertThat(action.getStatus()).isEqualTo("applied"); + assertThat(action.getProcessedAt()).isNotNull(); + assertThat(action.getReasonCodes()).contains("admin_action_applied"); + } + private IPage page(List records) { Page page = new Page<>(1, 20, records.size()); page.setRecords(records); return page; } + private IPage adminActionPage(List records) { + Page page = new Page<>(1, 20, records.size()); + page.setRecords(records); + return page; + } + + private DigitalEmployeeAdminActionRequestDto adminActionRequest(String entityType, String entityId, String action) { + DigitalEmployeeAdminActionRequestDto request = new DigitalEmployeeAdminActionRequestDto(); + request.setClientKey("client-key-001"); + request.setDeviceId("device-001"); + request.setEntityType(entityType); + request.setEntityId(entityId); + request.setAction(action); + return request; + } + + private DigitalEmployeeAdminAction adminAction(Long id, String entityType, String entityId, String action, String status) { + DigitalEmployeeAdminAction record = new DigitalEmployeeAdminAction(); + record.setId(id); + record.setTenantId(101L); + record.setUserId(202L); + record.setClientKey("client-key-001"); + record.setDeviceId("device-001"); + record.setEntityType(entityType); + record.setEntityId(entityId); + record.setAction(action); + record.setStatus(status); + record.setReasonCodes("[\"action_recorded\"]"); + record.setRequestPayload("{\"reason\":\"protect_local_fact\"}"); + record.setCreated(new Date(1_000)); + record.setModified(new Date(1_000)); + return record; + } + private DigitalEmployeeSyncRecord planRecord(String planId, String title, String status, Long tenantId, Date syncedAt) { return record("outbox-" + planId, "plan", planId, tenantId, syncedAt, Map.of("entity_type", "plan", "local_id", planId, "title", title, "status", status, "summary", "计划摘要"), diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/dao/mapper/DigitalEmployeeAdminActionMapper.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/dao/mapper/DigitalEmployeeAdminActionMapper.java new file mode 100644 index 00000000..d891fa6c --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/dao/mapper/DigitalEmployeeAdminActionMapper.java @@ -0,0 +1,9 @@ +package com.xspaceagi.agent.core.infra.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeAdminAction; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DigitalEmployeeAdminActionMapper extends BaseMapper { +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/repository/DigitalEmployeeAdminActionRepositoryImpl.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/repository/DigitalEmployeeAdminActionRepositoryImpl.java new file mode 100644 index 00000000..e65cc615 --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-infra/src/main/java/com/xspaceagi/agent/core/infra/repository/DigitalEmployeeAdminActionRepositoryImpl.java @@ -0,0 +1,36 @@ +package com.xspaceagi.agent.core.infra.repository; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xspaceagi.agent.core.adapter.repository.DigitalEmployeeAdminActionRepository; +import com.xspaceagi.agent.core.adapter.repository.entity.DigitalEmployeeAdminAction; +import com.xspaceagi.agent.core.infra.dao.mapper.DigitalEmployeeAdminActionMapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +@Service +public class DigitalEmployeeAdminActionRepositoryImpl + extends ServiceImpl + implements DigitalEmployeeAdminActionRepository { + + @Override + public IPage queryActions( + Long tenantId, + String clientKey, + String deviceId, + String status, + long pageNo, + long pageSize + ) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(tenantId != null, DigitalEmployeeAdminAction::getTenantId, tenantId) + .eq(StringUtils.isNotBlank(clientKey), DigitalEmployeeAdminAction::getClientKey, clientKey) + .eq(StringUtils.isNotBlank(deviceId), DigitalEmployeeAdminAction::getDeviceId, deviceId) + .eq(StringUtils.isNotBlank(status), DigitalEmployeeAdminAction::getStatus, status) + .orderByAsc(DigitalEmployeeAdminAction::getCreated) + .orderByAsc(DigitalEmployeeAdminAction::getId); + return page(new Page<>(pageNo, pageSize), queryWrapper); + } +} diff --git a/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-ui/src/main/java/com/xspaceagi/agent/web/ui/controller/DigitalEmployeeAdminActionController.java b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-ui/src/main/java/com/xspaceagi/agent/web/ui/controller/DigitalEmployeeAdminActionController.java new file mode 100644 index 00000000..e0cdc26e --- /dev/null +++ b/qiming-backend/app-platform-modules/app-platform-agent/app-platform-agent-core-ui/src/main/java/com/xspaceagi/agent/web/ui/controller/DigitalEmployeeAdminActionController.java @@ -0,0 +1,77 @@ +package com.xspaceagi.agent.web.ui.controller; + +import com.xspaceagi.agent.core.adapter.application.DigitalEmployeeSyncApplicationService; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionPageDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionRequestDto; +import com.xspaceagi.agent.core.adapter.dto.digital.DigitalEmployeeAdminActionResultDto; +import com.xspaceagi.system.spec.annotation.RequireResource; +import com.xspaceagi.system.spec.dto.ReqResult; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +import static com.xspaceagi.system.spec.enums.ResourceEnum.CONTENT_DIGITAL_EMPLOYEE_OPS_QUERY_LIST; + +@RestController +@RequestMapping("/api/digital-employee/admin/actions") +public class DigitalEmployeeAdminActionController { + + private static final String CLIENT_KEY_HEADER = "X-Qiming-Client-Key"; + + @Resource + private DigitalEmployeeSyncApplicationService digitalEmployeeSyncApplicationService; + + @RequireResource(CONTENT_DIGITAL_EMPLOYEE_OPS_QUERY_LIST) + @RequestMapping(method = RequestMethod.POST) + public ReqResult createAction( + @RequestBody(required = false) DigitalEmployeeAdminActionRequestDto request + ) { + return ReqResult.success(digitalEmployeeSyncApplicationService.createAdminAction(request)); + } + + @RequestMapping(path = "/pending", method = RequestMethod.GET) + public ReqResult pendingActions( + @RequestHeader(name = CLIENT_KEY_HEADER, required = false) String headerClientKey, + @RequestParam(name = "client_key", required = false) String clientKey, + @RequestParam(name = "device_id", required = false) String deviceId, + @RequestParam(name = "page_no", required = false) Long pageNo, + @RequestParam(name = "page_size", required = false) Long pageSize + ) { + String normalizedClientKey = StringUtils.defaultIfBlank(clientKey, headerClientKey); + if (StringUtils.isBlank(normalizedClientKey)) { + return ReqResult.create("0001", "客户端 Key 缺失", null); + } + return ReqResult.success(digitalEmployeeSyncApplicationService.queryPendingAdminActions( + normalizedClientKey.trim(), + deviceId, + pageNo, + pageSize + )); + } + + @RequestMapping(path = "/{actionId}/result", method = RequestMethod.POST) + public ReqResult markResult( + @PathVariable("actionId") Long actionId, + @RequestBody(required = false) Map body + ) { + String status = body == null ? null : String.valueOf(body.get("status")); + List reasonCodes = reasonCodes(body == null ? null : body.get("reason_codes")); + return ReqResult.success(digitalEmployeeSyncApplicationService.markAdminActionResult(actionId, status, reasonCodes)); + } + + private List reasonCodes(Object value) { + if (value instanceof List list) { + return list.stream().map(String::valueOf).toList(); + } + return List.of(); + } +} diff --git a/qiming-backend/sql/update-20260612.sql b/qiming-backend/sql/update-20260612.sql index 749b5252..84b3b311 100644 --- a/qiming-backend/sql/update-20260612.sql +++ b/qiming-backend/sql/update-20260612.sql @@ -3,6 +3,26 @@ ALTER TABLE `digital_employee_sync_record` ADD COLUMN `entity_summary` JSON DEFAULT NULL COMMENT '客户端实体摘要' AFTER `contract_version`, ADD COLUMN `business_view` JSON DEFAULT NULL COMMENT '客户端业务视图投影' AFTER `entity_summary`; +CREATE TABLE IF NOT EXISTS `digital_employee_admin_action` ( + `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', + `_tenant_id` BIGINT DEFAULT NULL COMMENT '租户 ID', + `user_id` BIGINT DEFAULT NULL COMMENT '创建用户 ID', + `client_key` VARCHAR(128) DEFAULT NULL COMMENT '客户端 Key', + `device_id` VARCHAR(128) DEFAULT NULL COMMENT '设备 ID', + `entity_type` VARCHAR(64) DEFAULT NULL COMMENT '实体类型', + `entity_id` VARCHAR(128) DEFAULT NULL COMMENT '实体 ID', + `action` VARCHAR(64) DEFAULT NULL COMMENT '管理端动作', + `status` VARCHAR(32) DEFAULT NULL COMMENT '状态 pending/applied/rejected/failed', + `reason_codes` JSON DEFAULT NULL COMMENT '原因码', + `request_payload` JSON DEFAULT NULL COMMENT '请求附加参数', + `processed_at` DATETIME DEFAULT NULL COMMENT '客户端处理时间', + `modified` DATETIME DEFAULT NULL COMMENT '更新时间', + `created` DATETIME DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`), + KEY `idx_de_admin_action_pending` (`_tenant_id`, `client_key`, `device_id`, `status`, `created`), + KEY `idx_de_admin_action_entity` (`_tenant_id`, `entity_type`, `entity_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数字员工管理端远程动作意图'; + -- Add digital employee admin operations workbench menu and resource. -- Idempotent for existing tenants: creates menu/resource rows, binds menu to resource, -- and grants super_admin default access. Other roles can be granted this menu diff --git a/qiming/src/pages/SystemManagement/Content/DigitalEmployeeOps/index.tsx b/qiming/src/pages/SystemManagement/Content/DigitalEmployeeOps/index.tsx index 02a98e22..ce03ca01 100644 --- a/qiming/src/pages/SystemManagement/Content/DigitalEmployeeOps/index.tsx +++ b/qiming/src/pages/SystemManagement/Content/DigitalEmployeeOps/index.tsx @@ -1,7 +1,10 @@ import { XProTable } from '@/components/ProComponents'; import WorkspaceLayout from '@/components/WorkspaceLayout'; import { SUCCESS_CODE } from '@/constants/codes.constants'; -import { apiDigitalEmployeeAdminWorkbenchList } from '@/services/systemManage'; +import { + apiDigitalEmployeeAdminActionSubmit, + apiDigitalEmployeeAdminWorkbenchList, +} from '@/services/systemManage'; import type { DigitalEmployeeAdminWorkbenchRow, DigitalEmployeeAdminWorkbenchView, @@ -107,6 +110,71 @@ function renderSummary(record: DigitalEmployeeAdminWorkbenchRow) { ); } +function actionTarget(record: DigitalEmployeeAdminWorkbenchRow, view: DigitalEmployeeAdminWorkbenchView) { + if (view === 'interventions' && record.approval_id) { + return { entityType: 'approval', entityId: record.approval_id }; + } + if ((view === 'interventions' || view === 'route_governance') && record.route_decision_id) { + return { entityType: 'route_decision', entityId: record.route_decision_id }; + } + if (view === 'notifications' && record.notification_id) { + return { entityType: 'notification', entityId: record.notification_id }; + } + if (view === 'artifact_lifecycle' && record.artifact_id) { + return { entityType: 'artifact', entityId: record.artifact_id }; + } + if (view === 'daily_reports' && record.report_id) { + return { entityType: 'daily_report', entityId: record.report_id }; + } + if (view === 'audits') { + return { entityType: 'audit', entityId: record.entity_id }; + } + return { entityType: record.entity_type, entityId: record.entity_id }; +} + +function allowedActions(record: DigitalEmployeeAdminWorkbenchRow, view: DigitalEmployeeAdminWorkbenchView) { + if (view === 'interventions' && record.approval_id) { + return [ + { action: 'keep_local', label: '保留本地' }, + { action: 'mark_reviewed', label: '标记复核' }, + ]; + } + if ((view === 'interventions' || view === 'route_governance') && record.route_decision_id) { + return [ + { action: 'mark_reviewed', label: '标记已看' }, + { action: 'dismiss', label: '忽略' }, + { action: 'retry_policy_check', label: '重试策略检查' }, + ]; + } + if (view === 'notifications' && record.notification_id) { + return [ + { action: 'mark_read', label: '标记已读' }, + { action: 'dismiss', label: '忽略' }, + ]; + } + if (view === 'artifact_lifecycle' && record.artifact_id) { + return [ + { action: 'mark_keep', label: '标记保留' }, + { action: 'mark_expire', label: '标记到期' }, + { action: 'mark_reviewed', label: '标记复核' }, + ]; + } + if (view === 'daily_reports' && record.report_id) { + return [ + { action: 'mark_delivered', label: '记录已送达' }, + { action: 'mark_confirmed', label: '确认回执' }, + { action: 'request_approval', label: '请求审批' }, + ]; + } + if (view === 'audits') { + return [ + { action: 'mark_reviewed', label: '标记复核' }, + { action: 'dismiss', label: '忽略' }, + ]; + } + return []; +} + const DigitalEmployeeOps: React.FC = () => { const { hasPermission } = useModel('menuModel'); const actionRef = useRef(); @@ -123,6 +191,40 @@ const DigitalEmployeeOps: React.FC = () => { () => jsonText(detailRecord?.payload), [detailRecord], ); + const [submittingAction, setSubmittingAction] = useState(null); + + const submitAdminAction = async ( + record: DigitalEmployeeAdminWorkbenchRow, + action: string, + ) => { + const target = actionTarget(record, activeView); + if (!target.entityType || !target.entityId) { + message.warning('当前记录缺少可操作实体'); + return; + } + const submitKey = `${record.sync_record_id}:${action}`; + setSubmittingAction(submitKey); + try { + const response = await apiDigitalEmployeeAdminActionSubmit({ + syncRecordId: record.sync_record_id, + deviceId: record.device_id, + entityType: target.entityType, + entityId: target.entityId, + action, + requestPayload: { + source_view: activeView, + sync_record_id: record.sync_record_id, + }, + }); + if (response.code === SUCCESS_CODE && response.data?.ok !== false) { + message.success('已记录,等待客户端拉取'); + } else { + message.error(response.message || response.data?.reason_codes?.join(', ') || '动作记录失败'); + } + } finally { + setSubmittingAction(null); + } + }; const columns: ProColumns[] = useMemo( () => [ @@ -340,6 +442,28 @@ const DigitalEmployeeOps: React.FC = () => { .filter(Boolean) .join(' / ') || '--'} + {allowedActions(detailRecord, activeView).length > 0 && ( +
+ 低风险动作 + + {allowedActions(detailRecord, activeView).map((item) => { + const submitKey = `${detailRecord.sync_record_id}:${item.action}`; + return ( + + ); + })} + + + 动作只会记录意图并等待客户端拉取执行。 + +
+ )} Business View
> {
+  return request('/api/digital-employee/admin/actions', {
+    method: 'POST',
+    data: {
+      sync_record_id: data.syncRecordId,
+      client_key: data.clientKey,
+      device_id: data.deviceId,
+      entity_type: data.entityType,
+      entity_id: data.entityId,
+      action: data.action,
+      request_payload: data.requestPayload,
+    },
+  });
+}
+
 // 查询网页应用列表
 export async function apiSystemResourceWebappList(
   data: SystemWebappListParams,
diff --git a/qiming/src/types/interfaces/systemManage.ts b/qiming/src/types/interfaces/systemManage.ts
index 39d3248b..ab33058e 100644
--- a/qiming/src/types/interfaces/systemManage.ts
+++ b/qiming/src/types/interfaces/systemManage.ts
@@ -618,6 +618,29 @@ export interface DigitalEmployeeAdminWorkbenchPage {
   records: DigitalEmployeeAdminWorkbenchRow[];
 }
 
+export interface DigitalEmployeeAdminActionSubmitParams {
+  syncRecordId?: number;
+  clientKey?: string;
+  deviceId?: string;
+  entityType?: string;
+  entityId?: string;
+  action: string;
+  requestPayload?: Record;
+}
+
+export interface DigitalEmployeeAdminActionResult {
+  ok: boolean;
+  status?: string;
+  reason_codes?: string[];
+  action?: {
+    id: number;
+    status: string;
+    action: string;
+    entity_type?: string;
+    entity_id?: string;
+  };
+}
+
 // 网页应用信息
 export type SystemWebappInfo = SystemResourceInfo;
 
diff --git a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/api.ts b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/api.ts
index 1feb3820..99410770 100644
--- a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/api.ts
+++ b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/api.ts
@@ -1249,6 +1249,13 @@ export function pullApprovalUpdates(): Promise<{ ok: boolean; applied?: number;
   });
 }
 
+export function pullAdminActions(): Promise<{ ok: boolean; applied?: number; rejected?: number; failed?: number; ignored?: number; skipped?: boolean; error?: string | null }> {
+  return apiFetch<{ ok: boolean; applied?: number; rejected?: number; failed?: number; ignored?: number; skipped?: boolean; error?: string | null }>('/api/digital-employee/admin/actions/pull', {
+    method: 'POST',
+    body: JSON.stringify({}),
+  });
+}
+
 export function getDebugConversations(): Promise {
   return apiFetch<{ conversations: any[] }>('/api/debug/conversations')
     .then((data) => data.conversations ?? []);
diff --git a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts
index 58d2b920..4558bbc0 100644
--- a/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts
+++ b/qimingclaw/crates/agent-electron-client/embedded/sgrobot-digital/src/lib/qimingclawAdapter.ts
@@ -64,6 +64,7 @@ declare global {
         pullSkillPolicies?: () => Promise<{ ok?: boolean; skipped?: boolean; error?: string | null }>;
         pullRiskApprovalPolicy?: () => Promise<{ ok?: boolean; skipped?: boolean; error?: string | null }>;
         pullApprovalUpdates?: () => Promise<{ ok?: boolean; applied?: number; ignored?: number; conflicted?: number; skipped?: boolean; error?: string | null }>;
+        pullAdminActions?: () => Promise<{ ok?: boolean; applied?: number; rejected?: number; failed?: number; ignored?: number; skipped?: boolean; error?: string | null }>;
         submitApprovalDecision?: (input: Record) => Promise<{ ok?: boolean; error?: string | null }>;
         resolveApprovalConflict?: (input: QimingclawApprovalConflictResolutionInput) => Promise;
         pullNotificationUpdates?: () => Promise<{ ok?: boolean; applied?: number; ignored?: number; skipped?: boolean; error?: string | null }>;
@@ -1183,6 +1184,9 @@ export async function handleQimingclawDigitalApi(
   if (method === 'POST' && pathname === '/api/notifications/updates/pull') {
     return await pullBridgeNotificationUpdates() as T;
   }
+  if (method === 'POST' && pathname === '/api/digital-employee/admin/actions/pull') {
+    return await pullBridgeAdminActions() as T;
+  }
   if (method === 'POST' && pathname === '/api/notifications/desktop') {
     return await showBridgeDesktopNotification(parseOptionalJsonBody(options.body)) as T;
   }
@@ -1501,6 +1505,27 @@ async function pullBridgeNotificationUpdates(): Promise<{ ok: boolean; applied?:
   }
 }
 
+async function pullBridgeAdminActions(): Promise<{ ok: boolean; applied?: number; rejected?: number; failed?: number; ignored?: number; skipped?: boolean; error?: string | null }> {
+  const bridge = window.QimingClawBridge?.digital;
+  if (!bridge?.pullAdminActions) {
+    return { ok: false, error: 'qimingclaw_bridge_unavailable' };
+  }
+  try {
+    const result = await bridge.pullAdminActions();
+    return {
+      ok: result?.ok !== false,
+      applied: Number(result?.applied ?? 0),
+      rejected: Number(result?.rejected ?? 0),
+      failed: Number(result?.failed ?? 0),
+      ignored: Number(result?.ignored ?? 0),
+      ...(result?.skipped ? { skipped: true } : {}),
+      ...(result?.error ? { error: result.error } : {}),
+    };
+  } catch (error) {
+    return { ok: false, error: error instanceof Error ? error.message : String(error) };
+  }
+}
+
 async function showBridgeDesktopNotification(input: Record): Promise<{ ok: boolean; shown?: boolean; reason?: string | null; error?: string | null }> {
   const bridge = window.QimingClawBridge?.digital;
   if (!bridge?.showDesktopNotification) {
diff --git a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-DUKd5ydN.js b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-KaWiGpaZ.js
similarity index 76%
rename from qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-DUKd5ydN.js
rename to qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-KaWiGpaZ.js
index e86da9d6..25f998d3 100644
--- a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-DUKd5ydN.js
+++ b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/assets/index-KaWiGpaZ.js
@@ -242,13 +242,13 @@ Please change the parent  to null))??null,p={...lj(),...d??{},...e};return await l.saveUiState({state:p,...a})}catch{return null}}const Wr={finance:{id:"finance",labelKey:"console.role.finance",density:"compact",tone:"strict",contentPriority:["audit","sources","exactNumbers"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:3e4,cssVars:{"--role-accent":"#2563eb","--role-accent-soft":"rgba(37,99,235,0.12)","--role-surface-tint":"rgba(248,250,252,0.78)","--role-border":"rgba(37,99,235,0.22)","--role-focus-ring":"#1d4ed8"}},engineering:{id:"engineering",labelKey:"console.role.engineering",density:"compact",tone:"technical",contentPriority:["alarms","timestamps","reliability"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:15e3,cssVars:{"--role-accent":"#0f766e","--role-accent-soft":"rgba(15,118,110,0.12)","--role-surface-tint":"rgba(240,253,250,0.72)","--role-border":"rgba(15,118,110,0.24)","--role-focus-ring":"#0f766e"}},executive:{id:"executive",labelKey:"console.role.executive",density:"presentation",tone:"executive",contentPriority:["kpi","approvals","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!0},staleDataThresholdMs:6e4,cssVars:{"--role-accent":"#334155","--role-accent-soft":"rgba(51,65,85,0.10)","--role-surface-tint":"rgba(248,250,252,0.82)","--role-border":"rgba(51,65,85,0.20)","--role-focus-ring":"#475569"}},hr:{id:"hr",labelKey:"console.role.hr",density:"balanced",tone:"warm-professional",contentPriority:["queues","timestamps","approvals"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#7c3aed","--role-accent-soft":"rgba(124,58,237,0.10)","--role-surface-tint":"rgba(250,245,255,0.72)","--role-border":"rgba(124,58,237,0.20)","--role-focus-ring":"#6d28d9"}},sales:{id:"sales",labelKey:"console.role.sales",density:"balanced",tone:"warm-professional",contentPriority:["pipeline","sources","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#b45309","--role-accent-soft":"rgba(180,83,9,0.10)","--role-surface-tint":"rgba(255,251,235,0.70)","--role-border":"rgba(180,83,9,0.20)","--role-focus-ring":"#92400e"}}},Eb=v.createContext(null),cm="qimingclaw:digital-console-role",om="sgrobot-console-role";function ij(){try{const e=localStorage.getItem(cm)??localStorage.getItem(om);if(e&&e in Wr)return e}catch{}return"sales"}function sj({children:e}){const[a,l]=v.useState(ij);v.useEffect(()=>{let d=!1;return Cb().then(p=>{if(d)return;const h=p==null?void 0:p.consoleRole;if(h&&h in Wr){l(h);try{localStorage.setItem(cm,h),localStorage.removeItem(om)}catch{}}}),()=>{d=!0}},[]);const r=v.useCallback(d=>{l(d);try{localStorage.setItem(cm,d),localStorage.removeItem(om)}catch{}Nb({consoleRole:d},{action:"update_console_role",metadata:{role:d}})},[]),o=Wr[a];return s.jsx(Eb.Provider,{value:{role:a,profile:o,setRole:r},children:s.jsx("div",{style:o.cssVars,"data-role":a,children:e})})}function rj(){const e=v.useContext(Eb);if(!e)throw new Error("useRole must be used within RoleProvider");return e}const Ab="qimingclaw_digital_token",Tb="zeroclaw_token";function cj(){try{return localStorage.getItem(Ab)??localStorage.getItem(Tb)}catch{return null}}function oj(){try{localStorage.removeItem(Ab),localStorage.removeItem(Tb)}catch{}}const dj=".",uj=(()=>{var a;return((a=window.__QIMINGCLAW_DIGITAL_API_BASE__)==null?void 0:a.replace(/\/+$/,""))??""})(),fj=()=>"",Rb="qimingclaw:digital-employee-adapter-state",mj="18:00",pj=["info","warn","error","action"],_j=["user_message","need_input","need_approval","task_progress","task_failed","task_finished","confirmation_pending","confirmation_resolved"],$b=["comment","delegate","mark_timeout","mark_risk","clear_risk","decision"],hj=["normal","medium","high","critical"],gj=[{skill_id:"qimingclaw-acp-session",name:"ACP 会话执行",version:"1.0.0",enabled:!0,description:"通过 qimingclaw 的 ACP 引擎创建会话、执行任务并跟踪结果。",category:"执行",capability_level:"core"},{skill_id:"qimingclaw-mcp-tools",name:"MCP 工具编排",version:"1.0.0",enabled:!0,description:"读取已配置 MCP 服务与工具,作为数字员工的工具能力池。",category:"工具",capability_level:"core"},{skill_id:"qimingclaw-computer-control",name:"客户端电脑控制",version:"1.0.0",enabled:!0,description:"承接 /computer/chat 执行入口,面向远程任务和本地自动化操作。",category:"桌面",capability_level:"specialized"},{skill_id:"qimingclaw-artifact-report",name:"产物与日报整理",version:"1.0.0",enabled:!0,description:"把执行记录、关键产物和异常汇总成数字员工日报。",category:"汇报",capability_level:"standard"}],yj=[{plan_id:"qimingclaw-client-readiness",title:"客户端运行状态巡检",objective:"确认 qimingclaw 客户端、Agent、MCP 和远程接入能力是否处于可执行状态。",status:"running",created_at:Pa(9,0),steps:[{step_id:"agent-status",title:"检查 Agent 引擎状态",depends_on:[],preferred_skills:["qimingclaw-acp-session"],tasks:[{task_id:"task-agent-status",title:"读取 Agent 服务状态",status:"running"}]},{step_id:"mcp-status",title:"检查 MCP 工具能力",depends_on:["agent-status"],preferred_skills:["qimingclaw-mcp-tools"],tasks:[{task_id:"task-mcp-status",title:"同步 MCP 工具列表",status:"pending"}]}]},{plan_id:"qimingclaw-remote-task-ingress",title:"远程任务接入准备",objective:"检查 lanproxy、computer server 和文件服务,为后端下发数字员工任务做准备。",status:"pending",created_at:Pa(9,30),steps:[{step_id:"computer-server",title:"确认 /computer/chat 执行入口",depends_on:[],preferred_skills:["qimingclaw-computer-control"],tasks:[{task_id:"task-computer-server",title:"检查电脑控制服务",status:"pending"}]},{step_id:"file-artifact",title:"准备产物回传目录",depends_on:["computer-server"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-file-artifact",title:"整理执行产物通道",status:"pending"}]}]},{plan_id:"qimingclaw-daily-report",title:"数字员工日报生成",objective:"汇总今日执行记录、服务状态和待介入事项,生成面向业务的日报。",status:"pending",created_at:Pa(17,30),steps:[{step_id:"collect-events",title:"汇总运行事件",depends_on:[],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-collect-events",title:"整理今日运行明细",status:"pending"}]},{step_id:"write-report",title:"生成日报摘要",depends_on:["collect-events"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-write-report",title:"生成数字员工日报",status:"pending"}]}]}],td={"qimingclaw-client-readiness":{expression:"0 9 * * *",nextRun:Pa(9,0),scheduleText:"已定时 09:00 执行"},"qimingclaw-remote-task-ingress":{expression:"30 9 * * *",nextRun:Pa(9,30),scheduleText:"已定时 09:30 执行"},"qimingclaw-daily-report":{expression:"0 18 * * *",nextRun:Pa(18,0),scheduleText:"已定时 18:00 执行"}},We="qimingclaw-runtime-projection";function bj(){return window.__QIMINGCLAW_EMBEDDED_DIGITAL__===!0}async function vj(e,a={}){var P,q,ce;if(!bj())return;const l=new URL(e,window.location.origin),r=(a.method||"GET").toUpperCase(),o=l.pathname;if(r==="GET"&&o==="/api/digital-employee/workday")return Rv(l.searchParams.get("date")||ac(),await fe());if(r==="POST"&&o==="/api/digital-employee/workday/actions")return await Zw(an(a.body),await fe());const d=o.match(/^\/api\/(?:digital-employee\/)?managed-services\/([^/]+)\/restart$/);if(r==="POST"&&d)return await Yb(decodeURIComponent(d[1]||""),Qt(a.body));const p=o.match(/^\/api\/digital-employee\/daily-reports\/([^/]+)$/);if(r==="GET"&&p){const R=decodeURIComponent(p[1]||"");return{item:mm(await fe()).find(ne=>u(ne.report_id)===R||u(ne.artifact_id)===R)??null,source:We}}if(r==="GET"&&o==="/api/digital-employee/daily-reports"){const R=tw(mm(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/daily-reports/delivery")return await Fw(an(a.body));if(r==="GET"&&o==="/api/digital-employee/skill-call-audits"){const R=X1(ov(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/memory-governance"){const R=Lj(qj(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/memory-governance/status/batch")return await Bj(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/skill-audit-workbench"){const R=q1(O1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/ops-workbench"){const R=I1(dv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/ops-workbench/actions/batch")return await Y1(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/notifications/workbench"){const R=H1(B1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/notifications/actions/batch")return await K1(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/daily-reports/workbench"){const R=G1(U1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/artifact-access-events"){const R=Z1(fv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const h=o.match(/^\/api\/(?:digital-employee\/artifacts|artifact)\/([^/]+)\/access$/);if(r==="POST"&&h){const R=decodeURIComponent(h[1]||"");return await Qj(R,Qt(a.body))}if(r==="POST"&&o==="/api/digital-employee/artifacts/retention/batch")return await Xj(Qt(a.body),await fe());const _=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/retention$/);if(r==="POST"&&_){const R=decodeURIComponent(_[1]||"");return await Kb(R,Qt(a.body),await fe())}const g=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/cleanup$/);if(r==="POST"&&g){const R=decodeURIComponent(g[1]||"");return await Zj(R,Qt(a.body),await fe())}const x=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/versions$/);if(r==="GET"&&x){const R=decodeURIComponent(x[1]||""),M=await fe();return{items:iv(M,R),source:We}}const S=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)$/);if(r==="GET"&&S){const R=decodeURIComponent(S[1]||""),M=await fe();return{item:Qm(M,R),source:We}}const C=o.match(/^\/api\/digital-employee\/plans\/([^/]+)$/);if(r==="GET"&&C){const R=decodeURIComponent(C[1]||"");return{item:av(await fe()).find(ne=>u(ne.plan_id)===R||u(ne.remote_id)===R)??null,source:We}}const z=o.match(/^\/api\/digital-employee\/approvals\/([^/]+)\/actions$/);if(r==="POST"&&z){const R=decodeURIComponent(z[1]||"");return await Jj(R,Qt(a.body),await fe())}const w=o.match(/^\/api\/approval\/([^/]+)\/conflict\/resolve$/);if(r==="POST"&&w){const R=decodeURIComponent(w[1]||"");return await Qb(R,Qt(a.body),await fe())}if(r==="POST"&&o==="/api/approval/conflicts/resolve/batch")return await Fj(Qt(a.body),await fe());if(r==="GET"&&o==="/api/approval/subscriptions")return cd(xa(await fe()));if(r==="PATCH"&&o==="/api/approval/subscriptions")return await mw(an(a.body),await fe());if(r==="GET"&&o==="/api/plan-step/dispatch-policy")return Bl(xa(await fe()));if(r==="GET"&&o==="/api/risk-approval/policy")return Cs(xa(await fe()));if(r==="PATCH"&&o==="/api/risk-approval/policy")return await _w(an(a.body),await fe());if(r==="POST"&&o==="/api/plan-step/dispatch-policy/pull")return await wv(await fe());if(r==="PATCH"&&o==="/api/plan-step/dispatch-policy")return await pw(an(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/plan-steps"){const R=um(kd(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/plan-step-graph"){const R=um(Pb(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/approval-history"){const R=cv(rv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/artifact-groups"){const R=sa(lv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const D=o.match(/^\/api\/digital-employee\/(plans|plan-steps|plan-step-graph|tasks|runs|events|artifacts|artifact-groups|approvals|approval-history|route-decisions|notifications|audits)$/);if(r==="GET"&&D)return g1(D[1],await fe(),l.searchParams);if(r==="GET"&&o==="/api/route-decisions")return await sC(Number(l.searchParams.get("limit"))||80);if(r==="GET"&&o==="/api/route-decisions/interventions")return await wd(Number(l.searchParams.get("limit"))||80);if(r==="POST"&&o==="/api/route-decisions/interventions/batch")return await rC(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/interventions/workbench"){const R=j1(S1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const N=o.match(/^\/api\/route-decisions\/([^/]+)\/intervention$/);if(r==="POST"&&N)return await Dv(decodeURIComponent(N[1]||""),an(a.body),await fe());if(r==="POST"&&o==="/api/ingress/route")return await uC(an(a.body),await fe());if(r==="POST"&&o==="/api/governance/command")return await Kl(an(a.body),await fe());if(r==="GET"&&o==="/api/scheduler/jobs")return{jobs:ld(await fe())};if(r==="GET"&&o==="/api/cron")return{jobs:ld(await fe())};if(r==="POST"&&o==="/api/cron")return await Ij(an(a.body),await fe());if(r==="GET"&&o==="/api/cron/settings")return await $j();if(r==="PATCH"&&o==="/api/cron/settings"){const R=an(a.body);return await Dj(R)}if(r==="POST"&&o==="/api/cron/check"){const R=await((ce=(q=(P=window.QimingClawBridge)==null?void 0:P.digital)==null?void 0:q.runSchedulerCheck)==null?void 0:ce.call(q));return{ok:!0,activated:(R==null?void 0:R.activated)??0,...R}}const k=o.match(/^\/api\/cron\/([^/]+)\/runs$/);if(r==="GET"&&k)return{runs:await Gj(decodeURIComponent(k[1]||""),Number(l.searchParams.get("limit"))||20)};const A=o.match(/^\/api\/cron\/([^/]+)$/);if((r==="PATCH"||r==="DELETE")&&A){const R=decodeURIComponent(A[1]||"");if(r==="DELETE"){await Ub("delete_schedule",R,{},await fe());return}return await Hj(R,an(a.body),await fe())}if(r==="GET"&&o==="/api/debug/plans")return{plans:Pm(l.searchParams.get("q"),await fe())};if(r==="GET"&&o==="/api/debug/tasks"){const R=l.searchParams.get("plan_id");return Rs(R,await fe())}if(r==="GET"&&o==="/api/debug/store")return d1(await fe());if(r==="GET"&&o==="/api/dashboard")return u1(await fe());if((r==="GET"||r==="POST")&&o==="/api/doctor")return vd(await fe());if(r==="GET"&&o==="/api/cost")return{cost:Fb(await fe())};if(r==="GET"&&o==="/api/audit")return{events:Gm(await fe(),l.searchParams)};if(r==="GET"&&o==="/api/artifact")return{artifacts:wi(await fe())};const O=o.match(/^\/api\/approval\/([^/]+)\/timeline$/);if(r==="GET"&&O)return gv(decodeURIComponent(O[1]||""),await fe());if(r==="GET"&&o==="/api/notifications")return uw(l.searchParams.get("status"),await fe());if(r==="GET"&&o==="/api/notifications/preferences")return Es(xa(await fe()));if(r==="PATCH"&&o==="/api/notifications/preferences")return await fw(an(a.body),await fe());if(r==="POST"&&o==="/api/notifications/updates/pull")return await Ob();if(r==="POST"&&o==="/api/notifications/desktop")return await Nj(Qt(a.body));if(r==="GET"&&o==="/api/notifications/desktop/status")return await Ej();if(r==="POST"&&o==="/api/notifications/desktop/settings/open")return await qb();if(r==="GET"&&o==="/api/notifications/unread-count"){const R=await fe();return{count:jd(R,xa(R)).filter(M=>M.status==="unread").length}}const te=o.match(/^\/api\/notifications\/([^/]+)\/(read|dismiss|reply)$/);if(r==="POST"&&te)return await Cv(decodeURIComponent(te[1]||""),te[2],Qt(a.body),await fe());if(r==="GET"&&o==="/api/memory")return{entries:await zj(l.searchParams.get("query"),l.searchParams.get("category"))};if(r==="POST"&&o==="/api/memory")return await Mj(an(a.body));const I=o.match(/^\/api\/memory\/([^/]+)$/);if(r==="DELETE"&&I){await Oj(decodeURIComponent(I[1]||""));return}if(r==="GET"&&o.startsWith("/api/debug/plan/")&&o.endsWith("/flow"))return Ov(decodeURIComponent(o.split("/")[4]||""),await fe());if(r==="GET"&&o.startsWith("/api/debug/task/")&&o.endsWith("/flow"))return wC(decodeURIComponent(o.split("/")[4]||""),await fe());const ie=o.match(/^\/api\/digital-employee\/plans\/([^/]+)\/dispatch-ready-steps$/);if(r==="POST"&&ie)return await CC(decodeURIComponent(ie[1]||""),await fe());if(r==="POST"&&o.startsWith("/api/debug/plan/")&&o.endsWith("/dispatch"))return await qv(decodeURIComponent(o.split("/")[4]||""),await fe());const Z=o.match(/^\/api\/debug\/plan\/([^/]+)\/([^/]+)$/);if(r==="POST"&&Z)return await cy(decodeURIComponent(Z[1]||""),decodeURIComponent(Z[2]||""),await fe(),Qt(a.body));const K=o.match(/^\/api\/plan\/([^/]+)\/submit$/);if(r==="POST"&&K)return await cy(decodeURIComponent(K[1]||""),"submit",await fe(),Qt(a.body));if(r==="GET"&&o.startsWith("/api/plan/")&&o.endsWith("/revisions"))return iC(decodeURIComponent(o.split("/")[3]||""),await fe());const pe=o.match(/^\/api\/task\/([^/]+)\/([^/]+)$/);if(r==="POST"&&pe)return await nC(decodeURIComponent(pe[1]||""),decodeURIComponent(pe[2]||""),await fe(),Qt(a.body));if(r==="GET"&&o.startsWith("/api/plan/")&&o.endsWith("/messages"))return{messages:NC(decodeURIComponent(o.split("/")[3]||""),await fe())};if(r==="GET"&&o==="/api/skill")return{skills:await Sj()};if(r==="POST"&&o==="/api/skill/policies/pull")return await wj();if(r==="POST"&&o==="/api/risk-approval/policy/pull")return await zb();if(r==="POST"&&o==="/api/route-decision/policy/pull")return await Mb();if(r==="POST"&&o==="/api/approval/updates/pull")return await Cj();if(r==="POST"&&o.startsWith("/api/skill/")&&o.endsWith("/enabled")){const R=decodeURIComponent(o.split("/")[3]||""),M=an(a.body);return await jj(R,M.enabled??!0)}}function Db(){return{selectedDutyIdsByDate:{},confirmedDates:{},reportScheduleTime:mj,reportGeneratedAtByDate:{},decisionResultsByDate:{},notificationStateById:{},notificationPreferences:vv(),approvalSubscriptionPreferences:xv(),planStepDispatchPolicy:kv(),riskApprovalPolicy:Sv(),routeDecisionPolicy:rd(),opsWorkbenchStateById:{},dailyReportWorkbenchStateById:{},consoleRole:"sales",rolePreferences:{},profile:{name:"飞天数字员工",company:"qimingclaw 客户端",position:"客户端任务执行员",currentStatus:"working"}}}function Nt(){try{const e=window.localStorage.getItem(Rb);return Ul(e?JSON.parse(e):{})}catch{return Db()}}function Ul(e){return{...Db(),...e,notificationPreferences:Es(e),approvalSubscriptionPreferences:cd(e),planStepDispatchPolicy:Bl(e),riskApprovalPolicy:Cs(e),routeDecisionPolicy:Ns(e),memoryGovernanceById:e.memoryGovernanceById??{},opsWorkbenchStateById:e.opsWorkbenchStateById??{},dailyReportWorkbenchStateById:e.dailyReportWorkbenchStateById??{}}}function xj(e){window.localStorage.setItem(Rb,JSON.stringify(e))}async function fe(){var e,a,l,r,o,d,p,h,_,g,x,S;try{const C=await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getSnapshot)==null?void 0:l.call(a))??null;if(!C)return null;const[z,w,D,N]=await Promise.all([((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.getSyncStatus)==null?void 0:d.call(o).catch(()=>null))??null,((_=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.getRuntimeRecords)==null?void 0:_.call(h).catch(()=>null))??null,yn(),((S=(x=(g=window.QimingClawBridge)==null?void 0:g.digital)==null?void 0:x.getPlanTemplates)==null?void 0:S.call(x).catch(()=>null))??null]);return{...C,sync:z,runtime:w,uiState:D,planTemplates:(N==null?void 0:N.templates)??[]}}catch{return null}}async function yn(){var e,a,l;try{return await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getUiState)==null?void 0:l.call(a))??null}catch{return null}}async function kj(){var e,a,l;try{const r=await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getSkillCapabilities)==null?void 0:l.call(a))??null;return Array.isArray(r==null?void 0:r.skills)?r.skills:[]}catch{return[]}}async function Sj(){const e=await kj();return Rj([...e,...gj])}async function jj(e,a){var r;const l=(r=window.QimingClawBridge)==null?void 0:r.digital;if(!(l!=null&&l.setSkillEnabled))return{ok:!1,skill_id:e,enabled:a,error:"qimingclaw_bridge_unavailable"};try{const o=await l.setSkillEnabled(e,a);return{ok:(o==null?void 0:o.ok)!==!1,skill_id:(o==null?void 0:o.skill_id)??e,enabled:(o==null?void 0:o.enabled)??a,...o!=null&&o.error?{error:o.error}:{}}}catch(o){return{ok:!1,skill_id:e,enabled:a,error:o instanceof Error?o.message:String(o)}}}async function wj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullSkillPolicies))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullSkillPolicies();return{ok:(l==null?void 0:l.ok)!==!1,...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function zb(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullRiskApprovalPolicy))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullRiskApprovalPolicy();return{ok:(l==null?void 0:l.ok)!==!1,...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Mb(){var l;const e=Ns(await yn()??Nt()),a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.pullRouteDecisionPolicy))return{ok:!1,policy:e,error:"qimingclaw_bridge_unavailable"};try{const r=await a.pullRouteDecisionPolicy();return{ok:(r==null?void 0:r.ok)!==!1,skipped:r==null?void 0:r.skipped,endpoint:(r==null?void 0:r.endpoint)??null,pulled_at:(r==null?void 0:r.pulled_at)??null,policy:Ns({routeDecisionPolicy:(r==null?void 0:r.policy)??e}),error:(r==null?void 0:r.error)??null}}catch(r){return{ok:!1,policy:e,error:r instanceof Error?r.message:String(r)}}}async function Cj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullApprovalUpdates))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullApprovalUpdates();return(l==null?void 0:l.ok)!==!1&&await Aj(await fe()),{ok:(l==null?void 0:l.ok)!==!1,applied:Number((l==null?void 0:l.applied)??0),ignored:Number((l==null?void 0:l.ignored)??0),conflicted:Number((l==null?void 0:l.conflicted)??0),...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Ob(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullNotificationUpdates))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullNotificationUpdates();return{ok:(l==null?void 0:l.ok)!==!1,applied:Number((l==null?void 0:l.applied)??0),ignored:Number((l==null?void 0:l.ignored)??0),...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Nj(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.showDesktopNotification))return{ok:!1,shown:!1,reason:"qimingclaw_bridge_unavailable"};try{const r=await a.showDesktopNotification(e);return{ok:(r==null?void 0:r.ok)!==!1,shown:(r==null?void 0:r.shown)===!0,...r!=null&&r.reason?{reason:r.reason}:{},...r!=null&&r.error?{error:r.error}:{}}}catch(r){return{ok:!1,shown:!1,error:r instanceof Error?r.message:String(r)}}}async function Ej(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.getDesktopNotificationStatus))return{supported:!1,platform:"unknown",can_open_settings:!1,reason:"qimingclaw_bridge_unavailable"};try{const l=await e.getDesktopNotificationStatus();return{supported:(l==null?void 0:l.supported)===!0,platform:u(l==null?void 0:l.platform)||"unknown",can_open_settings:(l==null?void 0:l.can_open_settings)===!0,reason:u(l==null?void 0:l.reason)||null}}catch(l){return{supported:!1,platform:"unknown",can_open_settings:!1,reason:l instanceof Error?l.message:String(l)}}}async function qb(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.openDesktopNotificationSettings))return{success:!1,reason:"qimingclaw_bridge_unavailable"};try{const l=await e.openDesktopNotificationSettings();return{success:(l==null?void 0:l.success)===!0,platform:u(l==null?void 0:l.platform)||null,reason:u(l==null?void 0:l.reason)||null,error:u(l==null?void 0:l.error)||null}}catch(l){return{success:!1,error:l instanceof Error?l.message:String(l)}}}async function Aj(e){const l=(await wd(120)).interventions.filter(r=>r.intervention_status==="approved"&&r.approval_id&&!r.resolved_at).slice(0,5);for(const r of l)await Dv(r.route_decision_id,{approval_id:r.approval_id,decision:"approved",actor:"management-api"},e).catch(o=>{console.warn("[qimingclawAdapter] auto route intervention resolution failed:",o)})}async function Il(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.evaluateRiskPolicy))return{ok:!0,decision:"allowed",action_kind:e.actionKind||"unknown_action",risk_level:e.riskLevel||"normal",reason_codes:["qimingclaw_bridge_unavailable"],status:"allowed"};try{return await a.evaluateRiskPolicy(e)}catch(r){return{ok:!0,decision:"allowed",action_kind:e.actionKind||"unknown_action",risk_level:e.riskLevel||"normal",reason_codes:["risk_policy_evaluation_failed"],status:"allowed",error:r instanceof Error?r.message:String(r)}}}async function Tj(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.evaluateRouteDecisionPolicy))return{ok:!0,decision:"allowed",status:"allowed",policy_result:"accepted",route_kind:e.routeKind||"ChatOnly",intent_kind:od(e.intentKind),reason_codes:["qimingclaw_bridge_unavailable"],policy_source:"local",policy:rd()};try{return await a.evaluateRouteDecisionPolicy(e)}catch(r){return{ok:!0,decision:"allowed",status:"allowed",policy_result:"accepted",route_kind:e.routeKind||"ChatOnly",intent_kind:od(e.intentKind),reason_codes:["route_policy_evaluation_failed"],policy_source:"local",policy:rd(),error:r instanceof Error?r.message:String(r)}}}function Hl(e){return e.decision==="allowed"?null:{ok:!1,status:e.decision,decision:e.decision,action_kind:e.action_kind,risk_level:e.risk_level,reason_codes:e.reason_codes??[],approval_id:e.approval_id??null,event_id:e.event_id??null,error:e.decision==="approval_required"?"risk_approval_required":"risk_policy_rejected"}}function Rj(e){const a=new Set,l=[];for(const r of e){const o=typeof r.skill_id=="string"?r.skill_id.trim():"";!o||a.has(o)||(a.add(o),l.push({...r,skill_id:o}))}return l}async function Gn(e,a,l,r){var o,d,p;xj(e);try{return await((p=(d=(o=window.QimingClawBridge)==null?void 0:o.digital)==null?void 0:d.saveUiState)==null?void 0:p.call(d,{state:e,action:a,date:l,metadata:r}))??e}catch{return e}}async function va(e,a){var l,r,o,d,p,h,_,g,x,S,C,z,w,D,N,k,A,O,te,I;try{await((I=(r=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:r.recordGovernanceCommand)==null?void 0:I.call(r,{commandKind:e.command_kind,commandId:a.command_id,correlationId:a.correlation_id,planId:je((o=a.result)==null?void 0:o.plan_id)||je((d=e.context_refs)==null?void 0:d.plan_id)||je((p=e.payload)==null?void 0:p.plan_id)||null,taskId:je((h=a.result)==null?void 0:h.task_id)||je((_=e.context_refs)==null?void 0:_.task_id)||je((g=e.payload)==null?void 0:g.task_id)||null,runId:je((x=a.result)==null?void 0:x.run_id)||je((S=e.context_refs)==null?void 0:S.run_id)||je((C=e.payload)==null?void 0:C.run_id)||je((z=e.payload)==null?void 0:z.latest_run_id)||null,stepId:je((w=a.result)==null?void 0:w.step_id)||je((D=e.context_refs)==null?void 0:D.step_id)||je((N=e.payload)==null?void 0:N.step_id)||je((k=e.payload)==null?void 0:k.stepId)||null,scheduleId:je((A=a.result)==null?void 0:A.schedule_id)||je((O=e.context_refs)==null?void 0:O.schedule_id)||je((te=e.payload)==null?void 0:te.schedule_id)||null,accepted:a.accepted,message:a.message,error:a.error??null,payload:e.payload??null,result:a.result??null}))}catch{}}async function $j(){var e,a,l;try{return await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getCronSettings)==null?void 0:l.call(a))??nd()}catch{return nd()}}async function Dj(e){var a,l,r;try{return await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.saveCronSettings)==null?void 0:r.call(l,e))??{...nd(),...e}}catch{return{...nd(),...e}}}async function zj(e,a){var l,r,o;try{return(await((o=(r=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:r.listMemories)==null?void 0:o.call(r,{query:e||void 0,category:a||void 0,limit:300}))??[]).map(Lb)}catch{return[]}}async function Mj(e){var d,p,h;const a=je(e.key),l=je(e.content??e.text),r=je(e.category)||"fact";if(!l)return{ok:!0,entry:null};const o=await((h=(p=(d=window.QimingClawBridge)==null?void 0:d.digital)==null?void 0:p.addMemory)==null?void 0:h.call(p,{key:a||void 0,content:l,category:r,source:"qimingclaw-digital-page",payload:{source:"embedded-memory-api",key:a||null}}))??null;return{ok:!0,entry:o?Lb(o):null}}async function Oj(e){var a,l,r;try{await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.deleteMemory)==null?void 0:r.call(l,e))}catch{}}function Lb(e){return{id:e.id,key:e.key||e.id,content:e.content,category:e.category||"fact",timestamp:e.updatedAt||e.createdAt||new Date().toISOString(),session_id:e.sessionId??null,score:typeof e.score=="number"?e.score:null}}function qj(e){var d;const l=((e==null?void 0:e.uiState)??Nt()).memoryGovernanceById??{},r=((d=e==null?void 0:e.runtime)==null?void 0:d.memories)??[],o=new Map;return r.forEach(p=>{const h=Gf(p);o.set(h,[...o.get(h)??[],p])}),r.map(p=>{const h=l[p.id]??{},_=(o.get(Gf(p))??[]).map(x=>x.id).filter(x=>x!==p.id),g=u(h.governance_status)||(p.deletedAt?"archived":p.status||"active");return{memory_id:p.id,remote_id:p.remoteId??null,key:p.key||p.id,category:p.category||"fact",source:p.source||null,source_path:p.sourcePath??null,status:g,governance_status:g,last_governance_action:u(h.last_governance_action)||null,last_reviewed_at:u(h.last_reviewed_at)||null,actor:u(h.actor)||null,reason:u(h.reason)||null,content_preview:Bb(p.content),score:typeof p.score=="number"?p.score:null,session_id:p.sessionId??null,sync_status:p.syncStatus??null,sync_error:p.syncError??null,merge_candidate_count:_.length,duplicate_memory_ids:_,latest_memory_id:Uj(o.get(Gf(p))??[]),entity_type:"memory",entity_id:p.id,created_at:p.createdAt,updated_at:u(h.updated_at)||p.updatedAt||p.createdAt,payload:sd("memory_governance",oe(p.payload)??{content_length:p.content.length}),source_label:"qimingclaw-memory"}}).sort((p,h)=>Lt(h).localeCompare(Lt(p))||u(p.memory_id).localeCompare(u(h.memory_id)))}function Lj(e,a){const l=u(a.get("q")??a.get("query")),r=u(a.get("category")),o=u(a.get("status")),d=u(a.get("entity_id"));return e.filter(p=>!l||[p.key,p.content_preview,p.source].some(h=>u(h).toLowerCase().includes(l.toLowerCase()))).filter(p=>!r||u(p.category)===r).filter(p=>!o||u(p.governance_status)===o||u(p.status)===o).filter(p=>!d||Jm(p).includes(d)||u(p.memory_id)===d)}async function Bj(e,a){var g;const l=u(e.action)||"mark_reviewed";if(!["archive","restore","mark_reviewed"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_memory_governance_action"]};const r=Le([...we(e.memory_ids),...we(e.memoryIds)]).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["memory_ids_required"]};const o=new Set((((g=a==null?void 0:a.runtime)==null?void 0:g.memories)??[]).map(x=>x.id)),d=(a==null?void 0:a.uiState)??await yn()??Nt();d.memoryGovernanceById=d.memoryGovernanceById??{};const p=new Date().toISOString(),h=r.map(x=>{var S,C,z,w;return o.has(x)?(d.memoryGovernanceById[x]={governance_status:l==="archive"?"archived":l==="restore"?"active":((C=(S=d.memoryGovernanceById)==null?void 0:S[x])==null?void 0:C.governance_status)??"reviewed",last_governance_action:l,last_reviewed_at:l==="mark_reviewed"?p:((w=(z=d.memoryGovernanceById)==null?void 0:z[x])==null?void 0:w.last_reviewed_at)??null,actor:u(e.actor)||"digital_employee_operator",reason:u(e.reason)||null,updated_at:p},{memory_id:x,ok:!0,status:"recorded",action:l}):{memory_id:x,ok:!1,status:"rejected",reason_codes:["memory_not_found"]}});await Gn(d,"memory_governance_status_batch",ac(),{action:l,memory_ids:r,reason:u(e.reason)||null});const _=h.filter(x=>x.ok===!0).length;return{ok:_>0,action:l,total:r.length,recorded:_,rejected:r.length-_,items:h,reason_codes:Le(h.flatMap(x=>we(x.reason_codes)))}}function Gf(e){return`${e.category||"fact"}:${e.key||"memory"}:${Bb(e.content).toLowerCase()}`}function Bb(e){return String(e||"").replace(/\s+/g," ").trim().slice(0,120)}function Uj(e){var a;return((a=e.slice().sort((l,r)=>u(r.updatedAt).localeCompare(u(l.updatedAt)))[0])==null?void 0:a.id)??null}function nd(){return{enabled:!0,catch_up_on_startup:!0,max_run_history:100,max_catch_up_runs:5,max_concurrent_schedule_runs:1}}async function Ij(e,a){const l=Date.now(),r=je(e.id)||je(e.schedule_id)||`cron-${mt(je(e.name)||"job")}-${l}`;await Kl({command_kind:"create_schedule",context_refs:{schedule_id:r,plan_id:je(e.plan_id)||je(e.template_id)||void 0},payload:{...e,schedule_id:r,cron_expr:je(e.schedule)||je(e.cron_expr)},correlation_id:`qimingclaw-cron-create-${l}`,idempotency_key:`qimingclaw-cron-create-${r}-${l}`},a);const o=await fe();return{status:"created",job:ld(o).find(d=>d.id===r)??Ib(r,e)}}async function Hj(e,a,l){await Ub("update_schedule",e,a,l);const r=await fe();return{status:"updated",job:ld(r).find(o=>o.id===e)??Ib(e,a)}}async function Ub(e,a,l,r){const o=Date.now();return Kl({command_kind:e,context_refs:{schedule_id:a,plan_id:je(l.plan_id)||je(l.template_id)||void 0},payload:{...l,schedule_id:a,cron_expr:je(l.schedule)||je(l.cron_expr)},correlation_id:`qimingclaw-cron-${e}-${o}`,idempotency_key:`qimingclaw-cron-${e}-${a}-${o}`},r)}function Ib(e,a){const l=new Date().toISOString(),r=je(a.schedule)||je(a.cron_expr)||"0 9 * * *";return{id:e,name:je(a.name)||e,expression:r,command:je(a.command)||`digital-employee:${e}`,prompt:je(a.prompt)||null,job_type:je(a.job_type)||"qimingclaw_schedule",schedule:{expression:r,schedule_id:e},enabled:a.enabled!==!1,delivery:{mode:"qimingclaw_schedule",schedule_id:e},template_id:je(a.template_id)||je(a.plan_id)||e,trigger_kind:"scheduled",delete_after_run:a.delete_after_run===!0,created_at:l,next_run:l,last_run:null,last_status:null,last_output:null}}async function Gj(e,a){var r,o,d;return(await((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.getScheduleRuns)==null?void 0:d.call(o,e,a).catch(()=>[]))??[]).map((p,h)=>({id:Number.isFinite(Date.parse(p.createdAt))?Date.parse(p.createdAt)+h:h+1,job_id:p.scheduleId,started_at:p.startedAt||p.createdAt,finished_at:p.finishedAt||"",status:p.status,output:p.error||null,duration_ms:p.startedAt&&p.finishedAt?Math.max(0,Date.parse(p.finishedAt)-Date.parse(p.startedAt)):null}))}function an(e){return typeof e!="string"||!e.trim()?{}:JSON.parse(e)}function Qt(e){return an(e)}function ac(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function Pa(e,a){const l=new Date;return l.setHours(e,a,0,0),l.toISOString()}function Vo(e){return e.split("-").join("/")}function ad(e){if(!e)return"未知";const a=new Date(e);return Number.isNaN(a.getTime())?e:new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit"}).format(a)}function Hb(e,a){return new Set(e.selectedDutyIdsByDate[a]??[])}function Gb(e){return["completed","succeeded","success"].includes(e)?"success":["running","active"].includes(e)?"running":["failed","error"].includes(e)?"danger":"waiting"}function Br(e,a){var l;return((l=e==null?void 0:e.services[a])==null?void 0:l.running)===!0}function Ur(e,a){var l;return(l=e==null?void 0:e.services[a])==null?void 0:l.error}function Yj(e,a){return a?e.plan_id==="qimingclaw-client-readiness"?Br(a,"agent")&&Br(a,"mcp")?"running":Ur(a,"agent")||Ur(a,"mcp")?"failed":"pending":e.plan_id==="qimingclaw-remote-task-ingress"?Br(a,"computerServer")||Br(a,"lanproxy")||Br(a,"fileServer")?"running":Ur(a,"computerServer")||Ur(a,"lanproxy")||Ur(a,"fileServer")?"failed":"pending":e.status:e.status}function Ol(e,a,l){const r=e==null?void 0:e.services[a];if(!r)return`${l}:未连接`;if(r.running){const o=r.port?`(端口 ${r.port})`:"";return`${l}:运行中${o}`}return`${l}:未运行${r.error?`,${r.error}`:""}`}function Ll(e){const a=(e==null?void 0:e.managedServices)??[];return a.length>0?a.map(l=>({service_id:l.serviceId,name:l.name,kind:l.kind,status:l.status,status_label:l.statusLabel,running:l.running,error:l.error??null,requires_human_action:l.requiresHumanAction,dependent_tasks:l.dependentTasks??[],restart_count:l.restartCount??0,last_seen_at:l.lastSeenAt,instance:l.instance,lease:l.lease})):[ys(e,"agent","Agent","agent",["ACP 会话执行","Plan Agent"]),ys(e,"mcp","MCP Proxy","mcp",["Skill Catalog","MCP 工具调用"]),ys(e,"computerServer","Computer Server","desktop",["/computer/chat","远程任务接入"]),ys(e,"fileServer","File Server","file",["Artifact 上传","文件交付"]),ys(e,"lanproxy","Lanproxy","network",["远程访问","管理端回连"]),ys(e,"guiServer","GUI Agent Server","gui",["GUI 自动化"])]}function ys(e,a,l,r,o){const d=e==null?void 0:e.services[a],p=(d==null?void 0:d.running)===!0,h=d!=null&&d.error?"degraded":p?"running":"stopped";return{service_id:a,name:l,kind:r,status:h,status_label:h==="running"?"运行中":h==="degraded"?"异常":"未运行",running:p,error:(d==null?void 0:d.error)??null,requires_human_action:!!(d!=null&&d.error),dependent_tasks:o,restart_count:0,last_seen_at:(e==null?void 0:e.generatedAt)??new Date().toISOString(),instance:d?{port:d.port,engineType:d.engineType,serverCount:d.serverCount,serverNames:d.serverNames}:void 0,lease:{state:h==="running"?"active":h,updatedAt:(e==null?void 0:e.generatedAt)??new Date().toISOString()}}}function Kj(e){const a=e.dependent_tasks.length>0?`;依赖任务:${e.dependent_tasks.slice(0,2).join("、")}`:"";return`${e.name}:${e.status_label}${e.error?`,${e.error}`:""}${a}`}function ey(e){const a=e.filter(r=>r.running).length,l=e.filter(r=>r.requires_human_action||r.status==="degraded").length;return`ManagedService:${a}/${e.length} 运行,${l} 项需处理`}async function Yb(e,a){var d;const l=await Il({actionKind:`managed_service.restart.${e}`,actionLabel:`重启服务:${e}`,riskLevel:"high",reasonCodes:["managed_service_restart"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",correlationId:`managed-service:${e}:restart`,payload:{service_id:e,reason:u(a.reason)||null}}),r=Hl(l);if(r){const p=await fe();return{ok:!1,service_id:e,action:"restart",status:r.status==="approval_required"?"rejected":"failed",error:String(r.error||r.status||"risk_policy_blocked"),managed_service:Ll(p).find(h=>h.service_id===e)??null,event_id:u(r.event_id)||null}}const o=(d=window.QimingClawBridge)==null?void 0:d.digital;if(!(o!=null&&o.restartManagedService)){const p=await fe();return{ok:!1,service_id:e,action:"restart",status:"failed",error:"bridge_unavailable",managed_service:Ll(p).find(h=>h.service_id===e)??null}}try{const p=await o.restartManagedService(e,{reason:u(a.reason)||"digital_employee_managed_service_restart",actor:u(a.actor)||"digital_employee_ui"}),h=await fe();return{...p,managed_service:p.managed_service??Ll(h).find(_=>_.service_id===e)??null}}catch(p){const h=await fe();return{ok:!1,service_id:e,action:"restart",status:"failed",error:p instanceof Error?p.message:String(p),managed_service:Ll(h).find(_=>_.service_id===e)??null}}}async function Qj(e,a){var p;const l=(p=window.QimingClawBridge)==null?void 0:p.digital,r=Vj(u(a.action)),o=await Il({actionKind:`artifact.access.${r}`,actionLabel:`访问产物:${r}`,riskLevel:r==="download"||r==="open_location"?"high":"medium",reasonCodes:["artifact_access"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",correlationId:`artifact:${e}:${r}`,payload:{artifact_id:e,action:r}}),d=Hl(o);if(d)return{ok:!1,artifact_id:e,action:r,status:"rejected",error:String(d.error||d.status||"risk_policy_blocked"),reason_codes:Array.isArray(d.reason_codes)?d.reason_codes.map(String):["risk_policy_blocked"],event_id:u(d.event_id)||null};if(!(l!=null&&l.accessArtifact))return{ok:!1,artifact_id:e,action:r,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"]};try{return await l.accessArtifact(e,r,{actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter"})}catch(h){return{ok:!1,artifact_id:e,action:r,status:"rejected",error:h instanceof Error?h.message:String(h),reason_codes:["artifact_access_failed"]}}}function Vj(e){return e==="download"||e==="open_location"?e:"preview"}async function Kb(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.action)||"mark_review",d=Qm(l,e),p=await Il({actionKind:`artifact.retention.${o}`,actionLabel:`调整产物保留策略:${o}`,riskLevel:o==="mark_expire"||o==="clear_retention"?"high":"medium",reasonCodes:["artifact_retention"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`artifact:${e}:retention:${o}`,payload:{artifact_id:e,action:o}}),h=Hl(p);if(h)return{...h,artifact_id:e,action:o,item:d};if(!(r!=null&&r.recordArtifactLifecycle))return{ok:!1,artifact_id:e,action:o,status:"rejected",error:"bridge_unavailable"};const _=await r.recordArtifactLifecycle({artifactId:e,action:o,reason:u(a.reason)||null,retentionUntil:u(a.retention_until??a.retentionUntil)||null,versionSummary:d?P1(d):null,retentionSummary:d?J1(d,o,a):null,deliverySummary:d?Sd(d):null,actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null});return{ok:!!(_&&_.kind!=="artifact_retention_rejected"),artifact_id:e,action:o,status:(_==null?void 0:_.kind)==="artifact_retention_rejected"?"rejected":"recorded",event_id:(_==null?void 0:_.eventId)??null,item:d}}async function Xj(e,a){const l=u(e.action)||"mark_review";if(!["mark_keep","mark_expire","mark_review","clear_retention"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_retention_action"]};const r=Le([...we(e.artifact_ids),...we(e.artifactIds)]).slice(0,50);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["artifact_ids_required"]};const o={action:l,reason:u(e.reason)||"digital_employee_artifact_batch_governance",retention_until:u(e.retention_until??e.retentionUntil)||null,actor:u(e.actor)||"digital_employee_ui",source:u(e.source)||"sgrobot-digital-adapter"},d=[];for(const _ of r){const g=await Kb(_,o,a);d.push({artifact_id:_,ok:g.ok===!0,status:u(g.status)||(g.ok===!0?"recorded":"rejected"),event_id:u(g.event_id)||null,error:u(g.error)||null,reason_codes:we(g.reason_codes).map(u).filter(Boolean)})}const p=d.filter(_=>_.ok===!0).length,h=Le(d.flatMap(_=>we(_.reason_codes)));return{ok:p>0,action:l,total:r.length,recorded:p,rejected:r.length-p,items:d,reason_codes:h}}async function Zj(e,a,l){var h;const r=(h=window.QimingClawBridge)==null?void 0:h.digital,o=Qm(l,e),d=await Il({actionKind:"artifact.cleanup.delete_local_file",actionLabel:"清理产物本地文件",riskLevel:"high",reasonCodes:["artifact_cleanup"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:o&&u(o.plan_id)||null,taskId:o&&u(o.task_id)||null,runId:o&&u(o.run_id)||null,correlationId:`artifact:${e}:cleanup`,payload:{artifact_id:e,retention_status:u(o==null?void 0:o.retention_status)||null}}),p=Hl(d);if(p)return{...p,artifact_id:e,status:"rejected",item:o};if(!(r!=null&&r.cleanupArtifact))return{ok:!1,artifact_id:e,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"],item:o};try{return{...await r.cleanupArtifact(e,{actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",reason:u(a.reason)||"digital_employee_artifact_cleanup",retentionStatus:u(a.retention_status??a.retentionStatus)||u(o==null?void 0:o.retention_status)||null,lastRetentionAction:u(a.last_retention_action??a.lastRetentionAction)||u(o==null?void 0:o.last_retention_action)||null}),item:o}}catch(_){return{ok:!1,artifact_id:e,status:"failed",error:_ instanceof Error?_.message:String(_),reason_codes:["artifact_cleanup_failed"],item:o}}}async function Jj(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.action)||"comment",d=sv(l,e),p=await Il({actionKind:`approval.action.${o}`,actionLabel:`审批治理动作:${o}`,riskLevel:o==="mark_risk"||o==="delegate"||o==="mark_timeout"?"medium":"normal",reasonCodes:["approval_action"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`approval:${e}:action:${o}`,payload:{approval_id:e,action:o}}),h=Hl(p);if(h)return{...h,approval_id:e,action:o,item:d};if(!(r!=null&&r.recordApprovalAction))return{ok:!1,approval_id:e,action:o,status:"rejected",error:"bridge_unavailable"};const _=await r.recordApprovalAction({approvalId:e,action:o,comment:u(a.comment)||null,delegateTo:u(a.delegate_to??a.delegateTo)||null,delegateLabel:u(a.delegate_label??a.delegateLabel)||null,dueAt:u(a.due_at??a.dueAt)||null,riskLevel:u(a.risk_level??a.riskLevel)||null,reason:u(a.reason)||null,actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null});return{ok:!!(_&&_.kind!=="approval_action_rejected"),approval_id:e,action:o,status:(_==null?void 0:_.kind)==="approval_action_rejected"?"rejected":"recorded",event_id:(_==null?void 0:_.eventId)??null,item:d}}async function Qb(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.resolution)||"mark_reviewed",d=sv(l,e),p=await Il({actionKind:`approval.conflict.resolve.${o}`,actionLabel:`审批冲突裁决:${o}`,riskLevel:o==="accept_remote"?"medium":"normal",reasonCodes:["approval_conflict_resolution"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`approval:${e}:conflict:${o}`,payload:{approval_id:e,resolution:o}}),h=Hl(p);if(h)return{...h,approval_id:e,resolution:o,item:d};if(!(r!=null&&r.resolveApprovalConflict))return{ok:!1,approval_id:e,resolution:o,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"],item:d};const _=await r.resolveApprovalConflict({approvalId:e,resolution:o,actor:u(a.actor)||"digital_employee_ui",comment:u(a.comment)||null});return{..._,ok:(_==null?void 0:_.ok)===!0,approval_id:(_==null?void 0:_.approval_id)||e,resolution:(_==null?void 0:_.resolution)??o,item:d}}async function Fj(e,a){const l=u(e.resolution)||"mark_reviewed";if(l==="accept_remote")return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["batch_accept_remote_disabled"]};if(!["keep_local","mark_reviewed"].includes(l))return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_resolution"]};const r=Le([...we(e.approval_ids),...we(e.approvalIds)]).slice(0,50);if(r.length===0)return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["approval_ids_required"]};const o=[];for(const p of r){const h=await Qb(p,{resolution:l,actor:u(e.actor)||"digital_employee_operator",comment:u(e.comment)||null},a);o.push({approval_id:p,ok:h.ok===!0,status:u(h.status)||(h.ok===!0?"recorded":"rejected"),event_id:u(h.event_id)||null,error:u(h.error)||null,reason_codes:we(h.reason_codes).map(u).filter(Boolean)})}const d=o.filter(p=>p.ok===!0).length;return{ok:d>0,resolution:l,total:r.length,recorded:d,rejected:r.length-d,items:o,reason_codes:Le(o.flatMap(p=>we(p.reason_codes)))}}function hd(e){const a=e==null?void 0:e.sync;return a?a.enabled?a.endpoint?a.syncing?`管理端同步:同步中,待同步 ${a.pending} 条`:a.failed>0?`管理端同步:${a.failed} 条失败,待同步 ${a.pending} 条`:a.pending>0?`管理端同步:待同步 ${a.pending} 条`:a.lastSyncAt?`管理端同步:已同步,最近 ${a.lastSyncAt}`:"管理端同步:等待本地数据":"管理端同步:未配置地址":"管理端同步:已停用":"管理端同步:未连接"}function Pj(e){return String(e||"").replace(/\s+/g," ").trim()}function In(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.plans)??[]}function ji(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.planSteps)??[]}function Ct(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.tasks)??[]}function Hn(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.runs)??[]}function rt(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.events)??[]}function gd(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.artifacts)??[]}function lc(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.approvals)??[]}function Gl(e){return In(e).length>0||ji(e).length>0||Ct(e).length>0||gd(e).length>0||lc(e).length>0}function Um(e,a){const l=[e.updatedAt,...a.map(r=>r.updatedAt)].filter(Boolean).sort();return l[l.length-1]??e.updatedAt??e.createdAt}function ot(e){const a=e.toLowerCase();return["completed","succeeded","success","done"].includes(a)?"success":["failed","error","rejected","cancelled"].includes(a)?"danger":["running","active","leased","syncing"].includes(a)?"running":"waiting"}function la(e){const a=e.toLowerCase();if(a==="ready")return"待启动";if(a==="blocked")return"依赖阻塞";if(a==="skipped")return"已跳过";if(a==="cancelled")return"已取消";if(a==="paused")return"已暂停";const l=ot(e);return l==="success"?"已完成":l==="danger"?"异常":l==="running"?"执行中":"待执行"}function ic(e,a){return Ct(e).filter(l=>l.planId===a)}function Vb(e,a){return ji(e).filter(l=>l.planId===a).sort((l,r)=>l.seq-r.seq||l.createdAt.localeCompare(r.createdAt))}function al(e){const a=oe(e.payload);return u((a==null?void 0:a.stepId)??(a==null?void 0:a.step_id))||(e.planId?`${e.planId}:runtime`:"qimingclaw-runtime")}function yd(e,a){return a.some(l=>ot(l.status)==="danger")?"failed":a.some(l=>ot(l.status)==="running")?"running":a.length>0&&a.every(l=>ot(l.status)==="success")?"completed":e.status||"pending"}function Wj(e){return In(e).map(a=>{const l=ic(e,a.id),r=yd(a,l),o=Gb(r),d=l.filter(h=>ot(h.status)==="danger").length,p=l.filter(h=>ot(h.status)==="running").length;return{agent_id:`plan-agent-${mt(a.id)}`,plan_id:a.id,title:a.title,lifecycle:r,status_label:Zb(r),status_tone:o,managed_task_count:l.length,running_task_count:p,failed_task_count:d,next_action:d>0?"review_failures":p>0?"monitor_runs":o==="success"?"archive_results":"activate_plan",can_replan:d>0,can_pause:p>0,can_resume:r==="paused",updated_at:Um(a,l)}})}function e1(e){const a=Hn(e);return Ct(e).map(l=>{const r=bd(a,l.id),o=ot(l.status),d=l.status.toLowerCase(),p=al(l);return{agent_id:`task-agent-${mt(l.id)}`,task_id:l.id,plan_id:l.planId??null,step_id:p,title:l.title,execution_state:l.status,status_label:la(l.status),status_tone:o,assigned_skill_id:l.assignedSkillId??null,latest_run_id:(r==null?void 0:r.id)??null,can_retry:["failed","cancelled","skipped"].includes(d),can_skip:["pending","running"].includes(d),can_cancel:["pending","running","paused"].includes(d),next_action:t1(d,o),updated_at:(r==null?void 0:r.updatedAt)??l.updatedAt}})}function t1(e,a){return["failed","cancelled","skipped"].includes(e)?"retry_or_review":e==="paused"?"resume_or_cancel":a==="running"?"watch_progress":a==="success"?"collect_artifacts":"start_run"}function bd(e,a){return e.filter(r=>r.taskId===a).sort((r,o)=>(o.updatedAt||o.createdAt).localeCompare(r.updatedAt||r.createdAt))[0]??null}function n1(e,a){const l=ic(a,e.id),r=Vb(a,e.id),o=yd(e,l),d=new Set(r.map(_=>_.id)),p=l.filter(_=>!d.has(al(_))),h=r.length>0?[...r.map(_=>Xb(_,l)),...p.length>0?[ty(e.id,p)]:[]]:[ty(e.id,l)];return{plan_id:e.id,title:e.title,objective:e.objective??void 0,status:o,created_at:e.createdAt,updated_at:Um(e,l),source:e.source,sync_status:e.syncStatus,steps:h}}function Xb(e,a){return{step_id:e.id,title:e.title,depends_on:e.dependsOn,preferred_skills:e.preferredSkillIds,tasks:a.filter(l=>al(l)===e.id).map(l=>({task_id:l.id,title:l.title,status:l.status}))}}function ty(e,a){return{step_id:`${e}:runtime`,title:"qimingclaw 执行记录",depends_on:[],preferred_skills:[...new Set(a.map(l=>l.assignedSkillId).filter(l=>!!l))],tasks:a.map(l=>({task_id:l.id,title:l.title,status:l.status}))}}function a1(e){return{task_id:e.id,title:e.title,status:e.status,plan_id:e.planId??null,step_id:al(e),assigned_skill_id:e.assignedSkillId??"",description:e.syncError??"",created_at:e.createdAt,updated_at:e.updatedAt,started_at:e.createdAt,finished_at:ot(e.status)==="success"||ot(e.status)==="danger"?e.updatedAt:null,error_message:e.syncError??null,sync_status:e.syncStatus}}function l1(e,a){return{run_id:e.id,task_id:e.taskId??"",plan_id:e.planId??null,skill_id:void 0,attempt_no:1,lifecycle:ot(e.status)==="success"?"Succeeded":ot(e.status)==="danger"?"Failed":ot(e.status)==="running"?"Running":e.status,created_at:e.startedAt??e.createdAt,completed_at:e.finishedAt??null,events:a.filter(l=>l.runId===e.id).map(l=>({event_id:l.id,kind:l.kind,occurred_at:l.occurredAt,message:l.message})),artifacts:Ev(e,a),sync_status:e.syncStatus}}function sc(e){const a=Pj(e.error),l=a.length>120?`${a.slice(0,120)}...`:a,r=e.dueForRetry?"等待补偿":e.nextRetryAt?`下次重试 ${e.nextRetryAt}`:"等待重试";return`${e.entityType}/${e.operation} ${e.id} 重试 ${e.attempts} 次,${r}${l?`,${l}`:""}`}function rc(e,a){return{...e,status:Yj(e,a)}}function Zb(e){return e==="running"?"执行中":e==="completed"||e==="succeeded"?"已完成":e==="failed"?"异常":"待执行"}function Im(e){const a=In(e);if(a.length>0)return a.map(r=>n1(r,e));const l=Ct(e);return l.length===0?[]:l.map(r=>({plan_id:r.id,title:r.title,objective:"未绑定 Plan 的 qimingclaw 本地任务记录。",status:r.status,created_at:r.createdAt,updated_at:r.updatedAt,source:"qimingclaw",sync_status:r.syncStatus,steps:[{step_id:`${r.id}:runtime`,title:"qimingclaw 执行记录",depends_on:[],preferred_skills:r.assignedSkillId?[r.assignedSkillId]:[],tasks:[{task_id:r.id,title:r.title,status:r.status}]}]}))}function nl(e){const a=(e==null?void 0:e.planTemplates)??[],l=new Map;for(const r of[...a,...yj])l.has(r.plan_id)||l.set(r.plan_id,r);return Array.from(l.values())}function Hm(e){const a=new Map;for(const l of[...Im(e),...nl(e).map(r=>rc(r,e))])a.has(l.plan_id)||a.set(l.plan_id,l);return Array.from(a.values())}function i1(e,a){var o;const l=rc(e,a),r=td[e.plan_id]??td["qimingclaw-client-readiness"];return{id:`schedule-${e.plan_id}`,name:e.title,expression:r.expression,command:`digital-employee:${e.plan_id}`,prompt:e.objective??null,job_type:"plan_template",schedule:{expression:r.expression,template_id:e.plan_id},enabled:!0,delivery:{mode:"plan_template",template_id:e.plan_id},template_id:e.plan_id,trigger_kind:"scheduled",step_count:((o=e.steps)==null?void 0:o.length)??0,skill_ids:[...new Set((e.steps??[]).flatMap(d=>d.preferred_skills??[]))],delete_after_run:!1,created_at:e.created_at,next_run:r.nextRun,last_run:l.status==="running"?Pa(9,5):null,last_status:l.status==="running"?"running":null,last_output:null}}function s1(e,a){var d,p;const l=e.planId?Hm(a).find(h=>h.plan_id===e.planId):null,o=(((d=a==null?void 0:a.runtime)==null?void 0:d.scheduleRuns)??[]).find(h=>h.scheduleId===e.id);return{id:e.id,name:e.name,expression:e.cronExpr,command:e.command||`digital-employee:${e.planId||e.id}`,prompt:e.prompt??e.description??null,job_type:"qimingclaw_schedule",schedule:{mode:"qimingclaw_schedule",schedule_id:e.id,plan_id:e.planId,expression:e.cronExpr,timezone:e.timezone,status:e.status,failure_count:e.failureCount,last_error:e.lastError},enabled:e.enabled&&e.status==="enabled"&&!e.deletedAt,delivery:{mode:"qimingclaw_schedule",schedule_id:e.id,plan_id:e.planId},template_id:e.planId??e.id,trigger_kind:"scheduled",step_count:((p=l==null?void 0:l.steps)==null?void 0:p.length)??0,skill_ids:[...new Set(((l==null?void 0:l.steps)??[]).flatMap(h=>h.preferred_skills??[]))],delete_after_run:!1,created_at:e.createdAt,next_run:e.nextRunAt||e.updatedAt,last_run:e.lastRunAt??(o==null?void 0:o.finishedAt)??(o==null?void 0:o.startedAt)??null,last_status:(o==null?void 0:o.status)??(e.lastError?"failed":null),last_output:(o==null?void 0:o.error)??e.lastError??null}}function ld(e=null){var r;const a=(((r=e==null?void 0:e.runtime)==null?void 0:r.schedules)??[]).filter(o=>o.status!=="deleted").map(o=>s1(o,e)),l=nl(e).map(o=>i1(o,e));if(a.length>0){const o=new Set(a.map(d=>d.template_id));return[...a,...l.filter(d=>!o.has(d.template_id))]}if(Gl(e)){const o=Im(e).map(p=>{var h;return{id:`runtime-${p.plan_id}`,name:p.title,expression:"",command:`qimingclaw-runtime:${p.plan_id}`,prompt:p.objective??null,job_type:"qimingclaw_runtime",schedule:{mode:"runtime_record",plan_id:p.plan_id},enabled:!0,delivery:{mode:"qimingclaw_runtime",plan_id:p.plan_id},template_id:p.plan_id,trigger_kind:"runtime_record",step_count:((h=p.steps)==null?void 0:h.length)??0,skill_ids:[...new Set((p.steps??[]).flatMap(_=>_.preferred_skills??[]))],delete_after_run:!1,created_at:p.created_at,next_run:p.updated_at??p.created_at,last_run:p.updated_at??p.created_at,last_status:p.status,last_output:null}}),d=new Set(o.map(p=>p.template_id));return[...o,...l.filter(p=>!d.has(p.template_id))]}return l}function r1(e,a,l){const r=Hb(e,a);if(Gl(l)){const o=In(l),d=Ct(l).filter(g=>!g.planId),p=o.map((g,x)=>{const S=ic(l,g.id),C=yd(g,S),z=S.filter(N=>ot(N.status)==="success").length,w=S.filter(N=>ot(N.status)==="danger").length,D=r.size===0?x<3:r.has(g.id);return{id:g.id,title:g.title,summary:g.objective||"qimingclaw 本地执行记录已同步到数字员工。",implemented:!0,selectable:!0,selected:D,status:C,status_label:la(C),status_tone:ot(C),schedule_text:S.length>0?`最近更新 ${ad(Um(g,S))}`:"等待任务记录",result_text:S.length>0?`${S.length} 项任务,${z} 项完成,${w} 项异常`:`同步状态:${g.syncStatus}`,conversation_id:g.id}}),h=d.map((g,x)=>({id:g.id,title:g.title,summary:"未绑定 Plan 的 qimingclaw 本地任务记录。",implemented:!0,selectable:!0,selected:r.size===0?p.length+x<3:r.has(g.id),status:g.status,status_label:la(g.status),status_tone:ot(g.status),schedule_text:`最近更新 ${ad(g.updatedAt)}`,result_text:g.syncError||`同步状态:${g.syncStatus}`,conversation_id:g.id})),_=new Set([...p,...h].map(g=>g.id));return[...p,...h,...ny(e,a,l).filter(g=>!_.has(g.id))]}return ny(e,a,l)}function ny(e,a,l){const r=Hb(e,a);return nl(l).map(o=>{const d=rc(o,l),p=td[d.plan_id]??td["qimingclaw-client-readiness"];return{id:d.plan_id,title:d.title,summary:d.objective??"等待 qimingclaw 执行链路补充任务说明。",implemented:!0,selectable:!0,selected:r.has(d.plan_id),status:d.status,status_label:Zb(d.status),status_tone:Gb(d.status),schedule_text:p.scheduleText,result_text:Jb(d,l),conversation_id:d.plan_id}})}function Jb(e,a){return e.plan_id==="qimingclaw-client-readiness"?[Ol(a,"agent","Agent"),Ol(a,"mcp","MCP"),`活跃会话:${(a==null?void 0:a.sessions.active)??0}`].join(";"):e.plan_id==="qimingclaw-remote-task-ingress"?[Ol(a,"computerServer","Computer Server"),Ol(a,"lanproxy","Lanproxy"),Ol(a,"fileServer","File Server")].join(";"):e.status==="running"?"正在同步客户端运行状态":"等待任务执行"}function ll(e,a=null){const l=nl(a).filter(r=>!e||r.plan_id===e).map(r=>rc(r,a)).flatMap(c1);if(Gl(a)){const r=Ct(a).filter(d=>!e||d.planId===e||d.id===e).map(a1),o=new Set(r.map(d=>d.task_id));return[...r,...l.filter(d=>!o.has(d.task_id))]}return l}function c1(e){return(e.steps??[]).flatMap(a=>(a.tasks??[]).map(l=>{var r;return{task_id:l.task_id,title:l.title,status:e.status==="running"&&l.status==="pending"?"running":l.status,plan_id:e.plan_id,step_id:a.step_id,assigned_skill_id:((r=a.preferred_skills)==null?void 0:r[0])??"",description:`${e.title} · ${a.title}`,created_at:e.created_at,updated_at:e.status==="running"?new Date().toISOString():e.created_at,started_at:l.status==="running"?Pa(9,5):null,finished_at:l.status==="completed"?Pa(9,10):null}}))}function o1(e){return e.filter(a=>a.status==="running"||a.status==="completed").map((a,l)=>({run_id:`qimingclaw-run-${l+1}`,task_id:a.task_id,plan_id:a.plan_id,skill_id:a.assigned_skill_id,attempt_no:1,lifecycle:a.status==="running"?"Running":"Succeeded",created_at:a.started_at??a.created_at,completed_at:a.finished_at,events:[{event_id:`${a.task_id}-event-start`,kind:"RunStarted",occurred_at:a.started_at??a.created_at,message:`${a.title} 已进入 qimingclaw 执行链路`}]}))}function Rs(e,a=null){const l=ll(e,a);if(Gl(a)){const r=new Set(l.map(d=>d.task_id)),o=Hn(a).filter(d=>!d.taskId||r.has(d.taskId)).map(d=>l1(d,rt(a)));return{tasks:l,runs:o,total:l.length,truncated:!1}}return{tasks:l,runs:o1(l),total:l.length,truncated:!1}}function d1(e){const a=Pm(null,e),l=ll(null,e),r=Rs(null,e).runs,o=ji(e);return{tables:{canonical_events:Fm(e,l,r),tasks:l,runs:r,plans:a,plan_steps:o.length>0?o.map(d=>Xb(d,Ct(e))):a.flatMap(d=>d.steps??[]),approvals:Yl(e),artifacts:wi(e)}}}function u1(e){const a=ll(null,e),l=a.filter(h=>ot(h.status)==="waiting").length,r=a.filter(h=>ot(h.status)==="running").length,o=a.filter(h=>ot(h.status)==="success").length,d=a.filter(h=>ot(h.status)==="danger").length,p=Yl(e);return{runtime:{active_tasks:r,failed_tasks:d,pending_confirmations:p.filter(h=>h.status==="pending").length},tasks:{total:a.length,queued:l,running:r,succeeded:o,failed:d},approvals:{total:p.length,pending:p.filter(h=>h.status==="pending").length}}}function vd(e){var g;const a=new Date().toISOString(),l=Ll(e),r=ll(null,e),o=Yl(e),d=rt(e).filter(x=>/fail|error|reject|cancel/i.test(`${x.kind} ${x.message}`)),p=l.map(x=>({id:`service:${x.service_id}`,severity:x.requires_human_action||x.status==="stopped"?"error":x.status==="degraded"?"warn":"ok",category:"service",message:`${x.name}:${x.status_label||x.status}`,details:_n({error:x.error,kind:x.kind,running:x.running,dependent_tasks:x.dependent_tasks}),source:"qimingclaw-managed-service",created_at:x.last_seen_at||a})),h=e==null?void 0:e.sync;p.push({id:"sync:management",severity:f1(h??null),category:"sync",message:hd(e),details:h?_n({pending:h.pending,failed:h.failed,endpoint:h.endpoint,missing_credentials:h.missingCredentials,last_error:h.lastSyncError}):null,source:"qimingclaw-sync-status",created_at:(h==null?void 0:h.lastSyncAt)??a});for(const x of(h==null?void 0:h.recentFailures)??[])p.push({id:`sync_failure:${x.id}`,severity:x.dueForRetry===!1?"error":"warn",category:"sync",message:sc(x),details:_n({entity_type:x.entityType,entity_id:x.entityId,operation:x.operation,attempts:x.attempts,next_retry_at:x.nextRetryAt}),source:"qimingclaw-sync-failure",created_at:x.lastAttemptAt??x.updatedAt??x.createdAt});const _=r.filter(x=>ot(x.status)==="danger");return p.push({id:"runtime:tasks",severity:_.length>0?"error":r.length===0?"warn":"ok",category:"runtime",message:r.length===0?"尚未读取到 qimingclaw runtime task。":`任务 ${r.length} 个,异常 ${_.length} 个。`,details:_n({task_count:r.length,failed_task_count:_.length}),source:"qimingclaw-runtime-records",created_at:a}),p.push({id:"runtime:approvals",severity:o.some(x=>x.status==="pending")?"warn":"ok",category:"approval",message:`审批 ${o.length} 个,待处理 ${o.filter(x=>x.status==="pending").length} 个。`,details:_n({approval_count:o.length,pending_count:o.filter(x=>x.status==="pending").length}),source:"qimingclaw-approval-records",created_at:a}),d.length>0&&p.push({id:"runtime:events:error",severity:"error",category:"runtime",message:`最近运行事件中发现 ${d.length} 条异常事实。`,details:{event_ids:d.slice(0,8).map(x=>x.id)},source:"qimingclaw-runtime-events",created_at:((g=d[0])==null?void 0:g.occurredAt)??a}),Gl(e)||p.push({id:"runtime:data:empty",severity:"warn",category:"data",message:"本地数字员工 runtime 记录为空,页面将只显示兼容投影。",source:"qimingclaw-runtime-records",created_at:a}),{results:p,summary:{ok:p.filter(x=>x.severity==="ok").length,warn:p.filter(x=>x.severity==="warn").length,error:p.filter(x=>x.severity==="error").length,generated_at:a,source:"qimingclaw-runtime-projection"}}}function f1(e){var a;return e?e.failed>0||e.lastSyncError||(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"error":!e.enabled||!e.endpoint||e.pending>0?"warn":"ok":"warn"}function Fb(e){const a=[...rt(e).map(r=>dm(oe(r.payload),r.occurredAt)),...Hn(e).map(r=>dm(oe(r.payload),r.finishedAt??r.updatedAt??r.createdAt))].filter(r=>!!r),l=a.length||rt(e).length+Hn(e).length+Ct(e).length;if(a.length>0){const r={};let o=0,d=0,p=!1,h=(e==null?void 0:e.generatedAt)??new Date().toISOString();for(const _ of a){const g=_.model||"unknown",x=r[g]??{model:g,cost_usd:0,total_tokens:0,request_count:0};x.cost_usd+=_.estimated_cost_usd??0,x.total_tokens+=_.total_tokens??0,x.request_count+=1,r[g]=x,o+=_.total_tokens??0,d+=_.estimated_cost_usd??0,p=p||_.estimated,_.updated_at&&_.updated_at>h&&(h=_.updated_at)}return{session_cost_usd:d,daily_cost_usd:d,monthly_cost_usd:d,total_tokens:o,request_count:a.length,by_model:r,estimated:p,source:"qimingclaw-runtime-projection",updated_at:h}}return{session_cost_usd:0,daily_cost_usd:0,monthly_cost_usd:0,total_tokens:0,request_count:l,by_model:{"qimingclaw-local":{model:"qimingclaw-local",cost_usd:0,total_tokens:0,request_count:l}},estimated:!0,source:"qimingclaw-runtime-projection",updated_at:(e==null?void 0:e.generatedAt)??new Date().toISOString()}}function dm(e,a){if(!e)return null;const l=oe(e.usage)??oe(e.token_usage)??oe(e.tokenUsage)??e,r=oe(e.cost)??e,o=vt(l.input_tokens??l.inputTokens??l.prompt_tokens??l.promptTokens),d=vt(l.output_tokens??l.outputTokens??l.completion_tokens??l.completionTokens),p=vt(l.total_tokens??l.totalTokens)??((o??0)+(d??0)||null),h=vt(r.estimated_cost_usd??r.estimatedCostUsd??r.cost_usd??r.costUsd??r.usd),_=u(e.model??e.model_name??e.modelName??l.model)||"unknown";return o===null&&d===null&&p===null&&h===null?null:{model:_,input_tokens:o,output_tokens:d,total_tokens:p,estimated_cost_usd:h,estimated:typeof e.estimated=="boolean"?e.estimated:h===null,updated_at:u(e.updated_at??e.updatedAt)||a||null}}function Gm(e,a){var h;const l=Math.max(1,Math.min(Math.floor(vt(a.get("limit"))??100),300)),r=u(a.get("category"))||u(a.get("kind")),o=u(a.get("level")),d=u(a.get("id"));return[...rt(e).map(aw),...(((h=e==null?void 0:e.sync)==null?void 0:h.recentFailures)??[]).map(_=>({audit_id:`sync_failure:${_.id}`,category:"sync",action:"sync_failed",level:_.dueForRetry===!1?"error":"warn",message:sc(_),actor:"qimingclaw-sync",entity_type:_.entityType,entity_id:_.entityId,occurred_at:_.lastAttemptAt??_.updatedAt??_.createdAt,payload:_})),...wi(e).flatMap(_=>sw(_))].filter(_=>!r||u(_.category)===r||u(_.entity_type)===r).filter(_=>!o||u(_.level)===o).filter(_=>!d||u(_.entity_id)===d||u(_.audit_id).includes(d)).sort((_,g)=>u(g.occurred_at).localeCompare(u(_.occurred_at))).slice(0,l)}function m1(e){const a=vd(e).results,l=Gm(e,new URLSearchParams({limit:"300"})),r=Fb(e),o=p1(a,l);return{doctor:{ok:a.filter(d=>d.severity==="ok").length,warn:a.filter(d=>d.severity==="warn").length,error:a.filter(d=>d.severity==="error").length},audit:{info:l.filter(d=>u(d.level)==="info").length,warn:l.filter(d=>u(d.level)==="warn").length,error:l.filter(d=>u(d.level)==="error").length},cost:{request_count:r.request_count,total_tokens:r.total_tokens,estimated_cost_usd:r.session_cost_usd,by_model_count:Object.keys(r.by_model??{}).length,estimated:!!r.estimated,updated_at:r.updated_at??null},latest_issue:o}}function p1(e,a){const l=ay(e,"error");if(l)return l;const r=ly(a,"error");if(r)return r;const o=ay(e,"warn");return o||ly(a,"warn")}function ay(e,a){const l=e.filter(r=>r.severity===a).sort((r,o)=>u(o.created_at).localeCompare(u(r.created_at)))[0];return l?{id:u(l.id)||`${l.category}:${a}`,source:"doctor",level:a,category:u(l.category)||"diagnostic",message:l.message,occurred_at:l.created_at??null}:null}function ly(e,a){const l=e.find(r=>u(r.level)===a);return l?{id:u(l.audit_id)||`${u(l.category)||"audit"}:${a}`,source:"audit",level:a,category:u(l.category)||u(l.entity_type)||"audit",message:u(l.message)||u(l.action)||"审计事件需要关注",occurred_at:u(l.occurred_at)||null}:null}function xd(e){return Gm(e,new URLSearchParams({limit:"300"})).map(a=>({...a,audit_id:u(a.audit_id),status:u(a.level)||"info",status_label:h1(u(a.level)),entity_id:u(a.entity_id)||u(a.audit_id),updated_at:u(a.occurred_at),source:We}))}function _1(e,a){const l=u(a.get("category"))||u(a.get("kind")),r=u(a.get("level")),o=u(a.get("id"));return sa(e,a).filter(d=>!l||u(d.category)===l||u(d.entity_type)===l).filter(d=>!r||u(d.level)===r).filter(d=>!o||u(d.entity_id)===o||u(d.audit_id).includes(o))}function h1(e){return e==="error"?"异常":e==="warn"?"警告":"信息"}function g1(e,a,l){const r={plans:av(a),"plan-steps":kd(a),"plan-step-graph":Pb(a),tasks:N1(a),runs:E1(a),events:A1(a),artifacts:Km(a),"artifact-groups":lv(a),approvals:$s(a),"approval-history":rv(a),"route-decisions":cc(a),notifications:ev(a,xa(a)),audits:xd(a)},o=e==="route-decisions"?k1(r[e],l):e==="plan-steps"||e==="plan-step-graph"?um(r[e],l):e==="approval-history"?cv(r[e],l):e==="notifications"?w1(r[e],l):e==="audits"?_1(r[e],l):sa(r[e],l);return{...pn(o,l),source:We}}function kd(e){return ji(e).map(a=>{const l=oe(a.payload)??{},r=oe(l.dependencyGraph??l.dependency_graph)??{},o=oe(l.lastDispatch??l.last_dispatch)??{},d=Ym(l),p=Wb(a,e,l),h=Le(we(r.blockedDependencies??r.blocked_dependencies)),_=Le(we(r.waitingDependencies??r.waiting_dependencies)),g=Le(we(r.satisfiedDependencies??r.satisfied_dependencies));return{step_id:a.id,node_id:a.id,remote_id:a.remoteId??null,plan_id:a.planId,title:a.title,status:a.status,seq:a.seq,depends_on:a.dependsOn,dependency_count:a.dependsOn.length,dependency_status:u(r.status)||y1(a,h,_),blocked_dependencies:h,blocked_dependency_count:h.length,blocked_dependency_details:b1(h,e),waiting_dependencies:_,waiting_dependency_count:_.length,satisfied_dependencies:g,preferred_skill_ids:a.preferredSkillIds,task_id:p.taskId,latest_run_id:p.latestRunId,dispatchable:p.dispatchable,skip_reason:p.skipReason,last_dispatch_status:u(o.status)||null,last_dispatch_at:u(o.occurredAt??o.occurred_at)||null,lease:d,lease_id:u((d==null?void 0:d.lease_id)??(d==null?void 0:d.leaseId))||null,lease_state:u(d==null?void 0:d.state)||null,lease_owner_device_id:u((d==null?void 0:d.owner_device_id)??(d==null?void 0:d.ownerDeviceId))||null,lease_acquired_at:u((d==null?void 0:d.acquired_at)??(d==null?void 0:d.acquiredAt))||null,lease_expires_at:u((d==null?void 0:d.expires_at)??(d==null?void 0:d.expiresAt))||null,lease_released_at:u((d==null?void 0:d.released_at)??(d==null?void 0:d.releasedAt))||null,lease_release_reason:u((d==null?void 0:d.release_reason)??(d==null?void 0:d.releaseReason))||null,lease_source:u(d==null?void 0:d.source)||null,remote_lease_id:u((d==null?void 0:d.remote_lease_id)??(d==null?void 0:d.remoteLeaseId))||null,remote_lease_error:u((d==null?void 0:d.remote_error)??(d==null?void 0:d.remoteError))||null,remote_release_error:u((d==null?void 0:d.remote_release_error)??(d==null?void 0:d.remoteReleaseError))||null,remote_lease_rejected:u((d==null?void 0:d.release_reason)??(d==null?void 0:d.releaseReason))==="remote_lease_rejected",lease_active:!!d,sync_status:a.syncStatus,last_synced_at:a.lastSyncedAt??null,sync_error:a.syncError??null,created_at:a.createdAt,updated_at:a.updatedAt,entity_type:"plan_step",entity_id:a.id,source:We}}).sort((a,l)=>u(a.plan_id).localeCompare(u(l.plan_id))||Number(a.seq??0)-Number(l.seq??0)||u(a.step_id).localeCompare(u(l.step_id)))}function Pb(e){return kd(e).map(a=>({node_id:u(a.node_id)||u(a.step_id),step_id:u(a.step_id),plan_id:u(a.plan_id)||null,title:u(a.title),status:u(a.status),seq:a.seq,depends_on:we(a.depends_on),dependency_status:u(a.dependency_status)||null,blocked_dependencies:we(a.blocked_dependencies),blocked_dependency_details:we(a.blocked_dependency_details),waiting_dependencies:we(a.waiting_dependencies),satisfied_dependencies:we(a.satisfied_dependencies),task_id:u(a.task_id)||null,latest_run_id:u(a.latest_run_id)||null,dispatchable:a.dispatchable===!0,skip_reason:u(a.skip_reason)||null,lease:oe(a.lease)??null,lease_id:u(a.lease_id)||null,lease_state:u(a.lease_state)||null,lease_owner_device_id:u(a.lease_owner_device_id)||null,lease_acquired_at:u(a.lease_acquired_at)||null,lease_expires_at:u(a.lease_expires_at)||null,lease_released_at:u(a.lease_released_at)||null,lease_release_reason:u(a.lease_release_reason)||null,lease_source:u(a.lease_source)||null,remote_lease_id:u(a.remote_lease_id)||null,remote_lease_error:u(a.remote_lease_error)||null,remote_release_error:u(a.remote_release_error)||null,remote_lease_rejected:a.remote_lease_rejected===!0,lease_active:a.lease_active===!0,sync_status:u(a.sync_status)||null,updated_at:u(a.updated_at)||null,entity_type:"plan_step_graph_node",entity_id:u(a.step_id),source:We}))}function um(e,a){const l=u(a.get("plan_id")),r=u(a.get("step_id"))||u(a.get("id")),o=u(a.get("status")),d=u(a.get("sync_status"));return sa(e,a).filter(p=>!l||u(p.plan_id)===l).filter(p=>!r||u(p.step_id)===r||u(p.node_id)===r||u(p.entity_id)===r).filter(p=>!o||u(p.status)===o).filter(p=>!d||u(p.sync_status)===d)}function y1(e,a,l){return a.length>0?"blocked":l.length>0?"waiting":e.dependsOn.length>0?"ready":"independent"}function Wb(e,a,l){var g;const r=ic(a,e.planId),o=r.find(x=>al(x)===e.id)??r.find(x=>!iy(x.status))??null,d=(o==null?void 0:o.id)??null,p=o?((g=bd(Hn(a),o.id))==null?void 0:g.id)??null:null,h=Ym(l);let _=null;return h?_="lease_active":e.status.toLowerCase()!=="ready"?_="not_ready":o?iy(o.status)?_="task_terminal":Hn(a).some(x=>x.taskId===o.id&&v1(x.status))?_="task_already_running":lc(a).some(x=>{var S,C;return x1(x.status)&&(x.planId===e.planId||x.taskId===o.id||u(((S=oe(x.payload))==null?void 0:S.stepId)??((C=oe(x.payload))==null?void 0:C.step_id))===e.id)})?_="approval_pending":(l.auto_dispatch===!1||l.autoDispatch===!1)&&(_="auto_dispatch_disabled"):_="missing_task",{taskId:d,latestRunId:p,dispatchable:!_,skipReason:_}}function b1(e,a){const l=new Map(ji(a).map(r=>[r.id,r]));return e.map(r=>{const o=l.get(r);if(!o)return{step_id:r,task_id:null,latest_run_id:null,title:r,status:"missing",dependency_status:"missing",dispatchable:!1,skip_reason:"missing_step"};const d=oe(o.payload)??{},p=oe(d.dependencyGraph??d.dependency_graph)??{},h=Ym(d),_=Wb(o,a,d);return{step_id:o.id,task_id:_.taskId,latest_run_id:_.latestRunId,title:o.title,status:o.status,dependency_status:u(p.status)||o.status,dispatchable:_.dispatchable,skip_reason:_.skipReason,lease_state:u(h==null?void 0:h.state)||null,lease_active:!!h}})}function Ym(e){const a=oe(e.dispatchLease??e.dispatch_lease);if(!a)return null;const l=u(a.state)||"active",r=u(a.expires_at??a.expiresAt),o=u(a.lease_id??a.leaseId),d=u(a.owner_device_id??a.ownerDeviceId);return l!=="active"||!r||r<=new Date().toISOString()||!o||!d?null:a}function iy(e){return["completed","succeeded","success","done","skipped","cancelled","canceled"].includes(e.toLowerCase())}function v1(e){return["running","pending","queued","started"].includes(e.toLowerCase())}function x1(e){return["pending","reviewing","open","waiting"].includes(e.toLowerCase()||"pending")}function cc(e){return rt(e).filter(a=>a.kind==="route_decision").map(a=>{const l=oe(a.payload)??{},r=fm(l,a),o=tv(r);return{...r,route_decision_id:r.id,event_id:a.id,status:r.policy_result||"accepted",status_label:nv(r),attention_level:o,entity_type:"route_decision",entity_id:r.id,occurred_at:a.occurredAt,created_at:a.createdAt,updated_at:r.recorded_at||a.occurredAt,payload:l}}).sort((a,l)=>u(l.recorded_at).localeCompare(u(a.recorded_at))||u(l.event_id).localeCompare(u(a.event_id)))}function k1(e,a){const l=u(a.get("route_kind")),r=u(a.get("intent_kind")),o=u(a.get("policy_result"));return sa(e,a).filter(d=>!l||u(d.route_kind)===l).filter(d=>!r||u(d.intent_kind)===r).filter(d=>!o||u(d.policy_result)===o)}function ev(e,a){const l=Es(a);return bv(e,a).map(r=>({notification_id:r.notification_id,kind:r.kind,level:r.level,status:r.status,title:r.title,body:r.body,plan_id:r.plan_id,task_id:r.task_id,correlation_id:r.correlation_id,created_at:r.created_at,updated_at:r.replied_at||r.dismissed_at||r.read_at||r.created_at,read_at:r.read_at??null,dismissed_at:r.dismissed_at??null,replied_at:r.replied_at??null,muted_by_preferences:!jv(r,l),entity_type:"notification",entity_id:r.notification_id,source:We})).sort((r,o)=>u(o.created_at).localeCompare(u(r.created_at))||u(o.notification_id).localeCompare(u(r.notification_id)))}function S1(e){const a=$s(e).filter(d=>d.approval_conflict_active===!0).map(d=>({intervention_id:`approval-conflict:${u(d.approval_id)}`,kind:"approval_conflict",title:u(d.title)||u(d.summary)||"审批跨端冲突",status:"open",priority:"high",entity_type:"approval",entity_id:u(d.approval_id),approval_id:u(d.approval_id),plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:u(d.run_id)||null,reason:u(d.approval_conflict_reason)||"approval_conflict",summary:`本地 ${u(d.approval_conflict_local_status)||u(d.status)} / 管理端 ${u(d.approval_conflict_remote_status)||"unknown"}`,occurred_at:u(d.approval_conflict_detected_at)||u(d.updated_at)||u(d.created_at),updated_at:u(d.approval_conflict_detected_at)||u(d.updated_at)||u(d.created_at),source:We,payload:d})),l=cc(e).filter(d=>["warn","error","action"].includes(u(d.attention_level))).map(d=>{var p,h,_;return{intervention_id:`route-intervention:${u(d.route_decision_id)}`,kind:"route_intervention",title:nv(d),status:u(d.policy_result)||u(d.status)||"attention",priority:u(d.attention_level)==="error"?"high":u(d.attention_level)==="warn"?"medium":"normal",entity_type:"route_decision",entity_id:u(d.route_decision_id),route_decision_id:u(d.route_decision_id),plan_id:u((p=oe(d.context_refs))==null?void 0:p.plan_id)||null,task_id:u((h=oe(d.context_refs))==null?void 0:h.task_id)||null,run_id:u((_=oe(d.context_refs))==null?void 0:_.run_id)||null,reason:Le(we(d.reason_codes)).join(" / ")||u(d.blocked_reason)||u(d.policy_result),summary:`${u(d.route_kind)} / ${u(d.intent_kind)}`,occurred_at:u(d.recorded_at)||u(d.created_at),updated_at:u(d.recorded_at)||u(d.created_at),source:We,payload:d}}),r=rt(e).filter(d=>["risk_approval_required","risk_policy_rejected"].includes(d.kind)).map(d=>{const p=oe(d.payload)??{};return{intervention_id:`risk-approval:${d.id}`,kind:"risk_approval",title:d.kind==="risk_policy_rejected"?"风险策略已拒绝":"风险审批待处理",status:u(p.status)||d.kind,priority:["high","critical"].includes(u(p.risk_level??p.riskLevel))?"high":"medium",entity_type:"risk_approval",entity_id:d.id,event_id:d.id,approval_id:u(p.approval_id??p.approvalId)||null,plan_id:(d.planId??u(p.plan_id))||null,task_id:(d.taskId??u(p.task_id))||null,run_id:(d.runId??u(p.run_id))||null,reason:u(p.action_kind??p.actionKind??p.reason)||d.kind,summary:d.message,occurred_at:d.occurredAt,updated_at:d.occurredAt,source:We,payload:p}}),o=ev(e,xa(e)).filter(d=>u(d.level)==="action"&&!["resolved","dismissed"].includes(u(d.status))).map(d=>({intervention_id:`notification:${u(d.notification_id)}`,kind:"action_notification",title:u(d.title)||"待处理通知",status:u(d.status)||"unread",priority:"normal",entity_type:"notification",entity_id:u(d.notification_id),notification_id:u(d.notification_id),plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:null,reason:u(d.kind),summary:u(d.body),occurred_at:u(d.created_at),updated_at:u(d.updated_at)||u(d.created_at),source:We,payload:d}));return[...a,...l,...r,...o].sort((d,p)=>Lt(p).localeCompare(Lt(d))||u(d.intervention_id).localeCompare(u(p.intervention_id)))}function j1(e,a){const l=u(a.get("kind")),r=u(a.get("status")),o=u(a.get("priority")),d=u(a.get("entity_id"));return e.filter(p=>!l||l==="all"||u(p.kind)===l).filter(p=>!r||u(p.status)===r).filter(p=>!o||u(p.priority)===o).filter(p=>!d||Jm(p).includes(d)||u(p.intervention_id)===d||u(p.route_decision_id)===d)}function w1(e,a){const l=u(a.get("id")),r=u(a.get("kind")),o=u(a.get("level")),d=u(a.get("muted")).toLowerCase();return sa(e,a).filter(p=>!l||u(p.notification_id)===l||u(p.correlation_id)===l||u(p.entity_id)===l).filter(p=>!r||u(p.kind)===r).filter(p=>!o||u(p.level)===o).filter(p=>{if(!d)return!0;const h=p.muted_by_preferences===!0;return["1","true","yes"].includes(d)?h:["0","false","no"].includes(d)?!h:!0})}function fm(e,a){const l=oe(e.routeDecision??e.route_decision??e)??{};return{id:u(l.id)||a.id,route_kind:u(l.route_kind??l.routeKind)||"ChatOnly",intent_kind:u(l.intent_kind??l.intentKind)||"chat",reason_codes:Le(we(l.reason_codes??l.reasonCodes)),candidate_skills:Le(we(l.candidate_skills??l.candidateSkills)),context_refs:oe(l.context_refs??l.contextRefs)??{},created_command_id:u(l.created_command_id??l.createdCommandId)||null,correlation_id:u(l.correlation_id??l.correlationId)||a.id,creates_plan:!!(l.creates_plan??l.createsPlan),creates_task_run:!!(l.creates_task_run??l.createsTaskRun),approval_mode:u(l.approval_mode??l.approvalMode)||null,policy_result:u(l.policy_result??l.policyResult)||"accepted",policy_source:u(l.policy_source??l.policySource)||null,blocked_reason:u(l.blocked_reason??l.blockedReason)||null,approval_id:u(l.approval_id??l.approvalId)||null,matched_intent:u(l.matched_intent??l.matchedIntent)||null,recorded_at:u(l.recorded_at??l.recordedAt)||a.occurredAt,entrypoint:u(l.entrypoint)||null,actor:u(l.actor)||null}}function tv(e){return e.policy_result==="approval_required"?"action":e.policy_result&&e.policy_result!=="accepted"?"error":e.reason_codes.includes("candidate_skills_disabled")||e.reason_codes.includes("route_action_missing_context")||e.reason_codes.includes("route_action_policy_blocked")||e.reason_codes.includes("route_action_not_mapped")?"warn":e.created_command_id?"action":"info"}function nv(e){const a=tv(e);return a==="error"?"策略拒绝":e.policy_result==="approval_required"?"待审批":a==="warn"?"需要关注":e.created_command_id?"已映射命令":"已记录"}function C1(e){const a=cc(e),l=a[0]??null,r=Ns((e==null?void 0:e.uiState)??Nt()),o=rt(e).filter(_=>_.kind==="route_decision_intervention_resolved"),d=new Set(o.map(_=>{var g;return u((g=oe(_.payload))==null?void 0:g.route_decision_id)}).filter(Boolean)),p=o.sort((_,g)=>g.occurredAt.localeCompare(_.occurredAt))[0]??null,h=oe(p==null?void 0:p.payload)??null;return{total:a.length,mapped_count:a.filter(_=>u(_.created_command_id)).length,governance_mapped_count:a.filter(_=>u(_.created_command_id)).length,governance_blocked_count:a.filter(_=>{const g=we(_.reason_codes).map(u);return g.includes("route_action_policy_blocked")||g.includes("route_action_missing_context")||g.includes("route_action_not_mapped")}).length,attention_count:a.filter(_=>["warn","error"].includes(u(_.attention_level))).length,blocked_count:a.filter(_=>u(_.policy_result)==="blocked").length,approval_required_count:a.filter(_=>u(_.policy_result)==="approval_required").length,pending_intervention_count:a.filter(_=>u(_.policy_result)!=="accepted"&&!d.has(u(_.route_decision_id))).length,restored_count:o.filter(_=>{var g;return((g=oe(_.payload))==null?void 0:g.command_accepted)===!0}).length,latest_intervention_status:u((h==null?void 0:h.status)??(h==null?void 0:h.decision))||null,policy_source:r.source??null,policy_last_pulled_at:r.last_pulled_at??null,policy_last_pull_error:r.last_pull_error??null,latest:l?{id:u(l.route_decision_id),route_kind:u(l.route_kind),intent_kind:u(l.intent_kind),status_label:u(l.status_label),attention_level:u(l.attention_level),created_command_id:u(l.created_command_id)||null,policy_source:u(l.policy_source)||null,blocked_reason:u(l.blocked_reason)||null,approval_id:u(l.approval_id)||null,recorded_at:u(l.recorded_at)}:null}}function av(e){const a=new Map(In(e).map(d=>[d.id,d])),l=ll(null,e),r=Rs(null,e).runs,o=Fm(e,l,r);return Pm(null,e).map(d=>{const p=a.get(d.plan_id),h=l.filter(x=>x.plan_id===d.plan_id),_=r.filter(x=>x.plan_id===d.plan_id),g=o.filter(x=>x.plan_id===d.plan_id).map(x=>u(x.occurred_at??x.timestamp)).filter(Boolean).sort().pop()||null;return{plan_id:d.plan_id,remote_id:(p==null?void 0:p.remoteId)??null,title:d.title,objective:d.objective??null,status:d.status,task_count:h.length,run_count:_.length,latest_event_at:g,sync_status:((p==null?void 0:p.syncStatus)??u(d.sync_status))||null,created_at:d.created_at,updated_at:u(d.updated_at)||(p==null?void 0:p.updatedAt)||d.created_at,payload:(p==null?void 0:p.payload)??_n({source:d.source,steps:d.steps})}})}function N1(e){const a=new Map(Ct(e).map(l=>[l.id,l]));return ll(null,e).map(l=>{const r=a.get(l.task_id);return{task_id:l.task_id,remote_id:(r==null?void 0:r.remoteId)??null,plan_id:l.plan_id??null,title:l.title,status:l.status,assigned_skill_id:l.assigned_skill_id||(r==null?void 0:r.assignedSkillId)||null,sync_status:((r==null?void 0:r.syncStatus)??u(l.sync_status))||null,created_at:l.created_at,updated_at:l.updated_at,payload:(r==null?void 0:r.payload)??_n({step_id:l.step_id,description:l.description})}})}function E1(e){const a=new Map(Hn(e).map(l=>[l.id,l]));return Rs(null,e).runs.map(l=>{const r=a.get(l.run_id),o=(r==null?void 0:r.startedAt)??l.created_at,d=(r==null?void 0:r.finishedAt)??l.completed_at??null,p=(l.events??[]).slice().sort((h,_)=>u(_.occurred_at).localeCompare(u(h.occurred_at)))[0];return{run_id:l.run_id,remote_id:(r==null?void 0:r.remoteId)??null,plan_id:l.plan_id??null,task_id:l.task_id||null,status:(r==null?void 0:r.status)??l.lifecycle,started_at:o??null,finished_at:d,duration_ms:nw(o,d),last_event_message:(p==null?void 0:p.message)??null,sync_status:((r==null?void 0:r.syncStatus)??u(l.sync_status))||null,created_at:(r==null?void 0:r.createdAt)??l.created_at,payload:(r==null?void 0:r.payload)??_n({lifecycle:l.lifecycle,attempt_no:l.attempt_no})}})}function A1(e){const a=ll(null,e),l=Rs(null,e).runs,r=new Map(rt(e).map(o=>[o.id,o]));return Fm(e,a,l).map(o=>{const d=r.get(o.event_id),p=u(o.plan_id)||(d==null?void 0:d.planId)||null,h=u(o.task_id)||(d==null?void 0:d.taskId)||null;return{event_id:o.event_id,remote_id:(d==null?void 0:d.remoteId)??null,plan_id:p,task_id:h,run_id:(d==null?void 0:d.runId)??null,kind:o.kind??o.event_type??(d==null?void 0:d.kind)??null,message:o.message??(d==null?void 0:d.message)??null,occurred_at:u(o.occurred_at??o.timestamp)||(d==null?void 0:d.occurredAt),sync_status:(d==null?void 0:d.syncStatus)??null,payload:(d==null?void 0:d.payload)??_n({aggregate_type:o.aggregate_type,aggregate_id:o.aggregate_id})}})}function Km(e){const a=new Map(gd(e).map(r=>[r.id,r])),l=wi(e);return l.map(r=>{var S;const o=u(r.artifact_id)||u(r.subject_id),d=a.get(o),p=hv({plan_id:r.plan_id,task_id:r.task_id,run_id:r.run_id,fallback_type:"artifact",fallback_id:r.subject_id??o}),h=Xm(e,o),_=_v(e,o,r),g=Zm(l,r),x=Sd(r);return{...r,artifact_id:o,remote_id:((d==null?void 0:d.remoteId)??u(r.remote_id))||null,entity_type:p.entity_type,entity_id:p.entity_id,sync_status:((d==null?void 0:d.syncStatus)??u(r.sync_status))||null,version:g.version,version_key:g.version_key,version_rank:g.version_rank,retention_status:h.retention_status,retention_until:h.retention_until,last_retention_action:h.last_retention_action,cleanup_status:_.cleanup_status,deleted_at:_.deleted_at,cleanup_reason:_.cleanup_reason,cleanup_event_id:_.cleanup_event_id,last_access_status:u((S=oe(r.access))==null?void 0:S.last_access_status)||null,delivery_summary:x}})}function lv(e){const a=new Map;return Km(e).forEach(l=>{const r=T1(l);a.set(r,[...a.get(r)??[],l])}),[...a.entries()].map(([l,r])=>{const o=r.slice().sort((g,x)=>Lt(x).localeCompare(Lt(g))),d=o[0]??{},p=Le(r.map(g=>g.artifact_id)),h=Le(r.map(g=>R1(g))),_=Le(r.map(g=>g.version_key||g.version||g.artifact_id));return{entity_type:"artifact_group",entity_id:l,group_key:l,version_key:u(d.version_key)||l,title:u(d.name)||u(d.title)||l,summary:`产物 ${p.length} / 设备 ${h.length} / 版本 ${_.length}`,status:sy(Mo(r,"retention_status"))||"unmanaged",sync_status:sy(Mo(r,"sync_status"))||null,plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:u(d.run_id)||null,artifact_ids:p,artifact_count:p.length,device_count:h.length,version_count:_.length,latest_artifact_id:u(d.artifact_id)||null,retention_status_counts:Mo(r,"retention_status"),cleanup_status_counts:Mo(r,"cleanup_status"),updated_at:Lt(d),created_at:u(d.created_at)||null,business_view:_n({artifact_ids:p,device_ids:h,version_keys:_}),payload:{artifacts:o},source:We}}).sort((l,r)=>Lt(r).localeCompare(Lt(l))||u(l.entity_id).localeCompare(u(r.entity_id)))}function T1(e){const a=u(e.version_key).replace(/:v[^:]+$/,"");if(a)return a;const l=u(e.name)||u(e.title);return`artifact-group:${u(e.kind)||"artifact"}:${u(e.source_label)||u(e.source_type)}:${l||u(e.uri)||u(e.artifact_id)}`}function R1(e){const a=oe(e.payload)??{};return u(e.device_id)||u(e.source_device_id)||u(e.remote_device_id)||u(a.device_id??a.deviceId)||u(a.source_device_id??a.sourceDeviceId)||"local"}function Mo(e,a){return e.reduce((l,r)=>{const o=u(r[a])||"none";return l[o]=(l[o]??0)+1,l},{})}function sy(e){var a;return((a=Object.entries(e).sort((l,r)=>r[1]-l[1]||l[0].localeCompare(r[0]))[0])==null?void 0:a[0])??null}function Qm(e,a){const l=Km(e).find(r=>u(r.artifact_id)===a||u(r.remote_id)===a)??null;return l?{...l,versions:iv(e,u(l.artifact_id)),lifecycle_events:mv(e).filter(r=>u(r.artifact_id)===u(l.artifact_id)).slice(0,20),cleanup_events:pv(e).filter(r=>u(r.artifact_id)===u(l.artifact_id)).slice(0,20)}:null}function iv(e,a){const l=wi(e),r=l.find(d=>u(d.artifact_id)===a||u(d.subject_id)===a);if(!r)return[];const o=id(r);return l.filter(d=>id(d)===o).sort((d,p)=>u(d.created_at).localeCompare(u(p.created_at))).map((d,p)=>{const h=Zm(l,d);return{artifact_id:u(d.artifact_id)||u(d.subject_id),name:u(d.name)||null,version:h.version||`local-v${p+1}`,version_key:h.version_key,version_rank:p+1,delivery_summary:Sd(d),retention_status:Xm(e,u(d.artifact_id)).retention_status,created_at:u(d.created_at)||null,source_label:u(d.source_label)||null}})}function $s(e){const a=new Map(lc(e).map(l=>[l.id,l]));return Yl(e).map(l=>{const r=u(l.approval_id),o=a.get(r),d=z1(e,r,l),p=$1(l),h=D1(l),_=hv({plan_id:l.plan_id,task_id:l.task_id,run_id:l.run_id,fallback_type:u(l.source)==="qimingclaw-sync"?"sync_outbox":"approval",fallback_id:l.task_id||r});return{...l,approval_id:r,remote_id:((o==null?void 0:o.remoteId)??u(l.remote_id))||null,entity_type:_.entity_type,entity_id:_.entity_id,sync_status:((o==null?void 0:o.syncStatus)??u(l.sync_status))||null,risk_level:d.risk_level,sla_status:d.sla_status,due_at:d.due_at,last_action:d.last_action,last_actor:d.last_actor,comment_count:d.comment_count,delegate_to:d.delegate_to,workflow_id:p.workflow_id,current_step_id:p.current_step_id,current_step_label:p.current_step_label,current_participant:p.current_participant,approval_step_index:p.step_index,approval_step_count:p.step_count,next_step_label:p.next_step_label,approval_conflict_active:h.active,approval_conflict_reason:h.reason,approval_conflict_remote_status:h.remote_status,approval_conflict_detected_at:h.detected_at,approval_conflict_local_status:h.local_status,approval_conflict_remote_current_step_id:h.remote_current_step_id,approval_conflict_resolved_at:h.resolved_at,approval_conflict_resolution:h.resolution,approval_conflict_resolution_actor:h.resolution_actor,approval_conflict_resolution_event_id:h.resolution_event_id}})}function sv(e,a){const l=$s(e).find(r=>u(r.approval_id)===a||u(r.remote_id)===a)??null;return l?{...l,timeline:gv(u(l.approval_id),e).events}:null}function Vm(e){return rt(e).filter(a=>["approval_action_recorded","approval_action_rejected"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{},r=oe(l.delegate_summary),o=oe(l.comment_summary),d=oe(l.sla_summary),p=oe(l.risk_summary);return{action_id:a.id,event_id:a.id,kind:a.kind,approval_id:u(l.approval_id)||null,action:u(l.action)||null,status:u(l.status)||null,comment_preview:u(o==null?void 0:o.preview)||null,comment_length:vt(o==null?void 0:o.length),delegate_to:u((r==null?void 0:r.label)??(r==null?void 0:r.target))||null,sla_status:u(d==null?void 0:d.sla_status)||null,due_at:u(d==null?void 0:d.due_at)||null,risk_level:u(p==null?void 0:p.risk_level)||null,actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function rv(e){const a=new Map($s(e).map(o=>[u(o.approval_id),o])),l=Vm(e).map(o=>{const d=u(o.approval_id),p=a.get(d);return{history_id:u(o.action_id),event_id:u(o.event_id),approval_id:d||null,action:u(o.action)||null,status:u(o.status)||null,actor:u(o.actor)||null,risk_level:u(o.risk_level)||null,due_at:u(o.due_at)||null,delegate_to:u(o.delegate_to)||null,comment_length:vt(o.comment_length),message:u(o.message)||null,plan_id:u(o.plan_id)||u(p==null?void 0:p.plan_id)||null,task_id:u(o.task_id)||u(p==null?void 0:p.task_id)||null,run_id:u(o.run_id)||u(p==null?void 0:p.run_id)||null,occurred_at:u(o.occurred_at)||null,updated_at:u(o.occurred_at)||null,sync_status:u(o.sync_status)||null,entity_type:"approval_history",entity_id:u(o.action_id),source:We}}),r=rt(e).filter(o=>o.kind==="approval_decision").map(o=>{const d=oe(o.payload)??{},p=u(d.approvalId??d.approval_id)||o.id.split(":decision:")[0]||"",h=a.get(p);return{history_id:o.id,event_id:o.id,approval_id:p||null,action:"decision",status:u(d.nextStatus??d.next_status??d.decision)||null,actor:u(d.actor)||u(d.source)||"qimingclaw-approval-decision",risk_level:u(h==null?void 0:h.risk_level)||null,due_at:u(h==null?void 0:h.due_at)||null,delegate_to:u(h==null?void 0:h.delegate_to)||null,comment_length:null,message:o.message||null,plan_id:o.planId||u(d.planId??d.plan_id)||u(h==null?void 0:h.plan_id)||null,task_id:o.taskId||u(d.taskId??d.task_id)||u(h==null?void 0:h.task_id)||null,run_id:o.runId||u(d.runId??d.run_id)||u(h==null?void 0:h.run_id)||null,occurred_at:o.occurredAt,updated_at:o.occurredAt,sync_status:o.syncStatus??null,entity_type:"approval_history",entity_id:o.id,source:We}});return[...l,...r].sort((o,d)=>u(d.occurred_at).localeCompare(u(o.occurred_at))||u(d.history_id).localeCompare(u(o.history_id)))}function cv(e,a){const l=u(a.get("approval_id"))||u(a.get("id")),r=u(a.get("action")),o=u(a.get("risk_level"));return sa(e,a).filter(d=>!l||u(d.approval_id)===l||u(d.history_id)===l||u(d.event_id)===l).filter(d=>!r||u(d.action)===r).filter(d=>!o||u(d.risk_level)===o)}function $1(e){const a=oe(e.payload)??{},l=oe(a.workflow)??{},r=Array.isArray(l.steps)?l.steps.map(_=>oe(_)??{}):[],o=u(l.current_step_id??l.currentStepId??a.current_step_id??a.currentStepId),d=Math.max(0,r.findIndex(_=>u(_.step_id??_.stepId??_.id)===o)),p=r[d]??null,h=r.slice(d+1).find(_=>["pending","delegated","timeout"].includes(u(_.status)||"pending"))??null;return{workflow_id:u(l.workflow_id??l.workflowId)||null,current_step_id:o||null,current_step_label:u((p==null?void 0:p.label)??(p==null?void 0:p.title)??(p==null?void 0:p.name))||null,current_participant:u((p==null?void 0:p.participant_label)??(p==null?void 0:p.participantLabel)??(p==null?void 0:p.participant_id)??(p==null?void 0:p.participantId))||null,step_index:r.length>0?d+1:null,step_count:r.length||null,next_step_label:u((h==null?void 0:h.label)??(h==null?void 0:h.title)??(h==null?void 0:h.name))||null}}function D1(e){const a=oe(e.payload)??{},l=oe(a.conflict)??{},r=oe(l.resolution)??{};return{active:l.active===!0,reason:u(l.reason)||null,remote_status:u(l.remote_status??l.remoteStatus)||null,detected_at:u(l.detected_at??l.detectedAt)||null,local_status:u(l.local_status??l.localStatus)||null,remote_current_step_id:u(l.remote_current_step_id??l.remoteCurrentStepId)||null,resolved_at:u(r.resolved_at??r.resolvedAt)||null,resolution:u(r.resolution)||null,resolution_actor:u(r.actor)||null,resolution_event_id:u(r.event_id??r.eventId)||null}}function z1(e,a,l){const r=Vm(e).filter(S=>u(S.approval_id)===a),o=r[0],d=r.find(S=>u(S.risk_level)),p=r.find(S=>{const C=u(S.sla_status);return!!(C&&C!=="untracked")}),h=r.find(S=>u(S.delegate_to)),_=oe(l.payload),g=u(p==null?void 0:p.due_at)||u((_==null?void 0:_.due_at)??(_==null?void 0:_.dueAt)??(_==null?void 0:_.timeout_at)??(_==null?void 0:_.timeoutAt)),x=u(p==null?void 0:p.sla_status)||M1(g);return{risk_level:u(d==null?void 0:d.risk_level)||"normal",sla_status:x,due_at:g||null,last_action:u(o==null?void 0:o.action)||null,last_actor:u(o==null?void 0:o.actor)||null,comment_count:r.filter(S=>u(S.action)==="comment").length,delegate_to:u(h==null?void 0:h.delegate_to)||null}}function M1(e){if(!e)return"untracked";const a=Date.parse(e);return Number.isFinite(a)?a["skill_call_allowed","skill_call_rejected","skill_call_observed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{audit_id:a.id,event_id:a.id,remote_id:a.remoteId??null,decision:u(l.decision)||a.kind.replace("skill_call_",""),source:u(l.source)||null,server_id:u(l.server_id)||null,tool_name:u(l.tool_name)||null,skill_id:u(l.skill_id)||null,call_id:u(l.call_id)||null,session_id:u(l.session_id)||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,reason_codes:Array.isArray(l.reason_codes)?l.reason_codes:[],message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function O1(e){const a=ov(e).map(r=>({audit_id:u(r.audit_id),category:"skill_call_audit",decision:u(r.decision),status:u(r.decision)||"observed",skill_id:u(r.skill_id)||null,tool_name:u(r.tool_name)||null,server_id:u(r.server_id)||null,source:u(r.source)||We,risk_level:u(r.risk_level)||null,session_id:u(r.session_id)||null,task_id:u(r.task_id)||null,run_id:u(r.run_id)||null,message:u(r.message)||`${u(r.tool_name)||u(r.skill_id)||"skill"} ${u(r.decision)}`,occurred_at:u(r.occurred_at),updated_at:u(r.occurred_at),payload_preview:sd("skill_call_audit",oe(r.payload)??{}),payload:r.payload,entity_type:"skill_audit",entity_id:u(r.audit_id)})),l=xd(e).filter(r=>["tool_call_audit","sandbox_audit","token_cost"].includes(u(r.category))).map(r=>({audit_id:u(r.audit_id),category:u(r.category),decision:u(r.decision)||u(r.status)||u(r.level),status:u(r.status)||u(r.level)||"info",skill_id:u(r.skill_id)||null,tool_name:u(r.tool_name)||null,server_id:u(r.server_id)||null,source:u(r.source)||We,risk_level:u(r.risk_level)||null,model:u(r.model)||null,total_tokens:vt(r.total_tokens),estimated_cost_usd:vt(r.estimated_cost_usd),session_id:u(r.session_id)||null,task_id:u(r.task_id)||null,run_id:u(r.run_id)||null,message:u(r.message)||u(r.action)||u(r.category),occurred_at:u(r.occurred_at),updated_at:u(r.updated_at)||u(r.occurred_at),payload_preview:sd(u(r.category),oe(r.payload)??{}),payload:r.payload,entity_type:"skill_audit",entity_id:u(r.audit_id)}));return[...a,...l].sort((r,o)=>Lt(o).localeCompare(Lt(r))||u(r.audit_id).localeCompare(u(o.audit_id)))}function q1(e,a){const l=u(a.get("skill_id")),r=u(a.get("server_id")),o=u(a.get("tool_name")),d=u(a.get("decision")),p=u(a.get("category")),h=u(a.get("status"));return e.filter(_=>!l||u(_.skill_id)===l).filter(_=>!r||u(_.server_id)===r).filter(_=>!o||u(_.tool_name)===o).filter(_=>!d||u(_.decision)===d).filter(_=>!p||u(_.category)===p).filter(_=>!h||u(_.status)===h)}function dv(e){const l=((e==null?void 0:e.uiState)??Nt()).opsWorkbenchStateById??{},r=vd(e).results.filter(h=>h.severity==="warn"||h.severity==="error").map(h=>{const _=`diagnostic:${u(h.id)||u(h.category)||h.message}`;return Vr({ops_id:_,kind:"diagnostic",title:h.message||"诊断项需要处理",status:h.severity,priority:h.severity,entity_type:"diagnostic",entity_id:u(h.id)||u(h.category)||_,category:h.category,recommended_action:"mark_reviewed",reason_codes:[u(h.category)||"doctor_issue"],occurred_at:h.created_at??(e==null?void 0:e.generatedAt)??new Date().toISOString(),updated_at:h.created_at??(e==null?void 0:e.generatedAt)??new Date().toISOString(),payload:h},l[_])}),o=Ll(e).filter(h=>h.requires_human_action||h.status==="degraded"||h.status==="stopped").map(h=>{const _=`service:${h.service_id}`,g=uv(h.service_id);return Vr({ops_id:_,kind:"service",title:h.name,status:h.status,priority:h.status==="stopped"?"error":"warn",entity_type:"managed_service",entity_id:h.service_id,service_id:h.service_id,recommended_action:g?"safe_restart_service":"mark_reviewed",reason_codes:[h.status,g?"safe_restart_service":"manual_review_required"],summary:h.error||h.status_label,occurred_at:h.last_seen_at,updated_at:h.last_seen_at,payload:h},l[_])}),d=xd(e).filter(h=>["warn","error"].includes(u(h.level))).map(h=>{const _=`audit:${u(h.audit_id)}`;return Vr({ops_id:_,kind:"audit",title:u(h.message)||u(h.action)||"审计风险",status:u(h.level),priority:u(h.level),entity_type:u(h.entity_type)||"audit",entity_id:u(h.entity_id)||u(h.audit_id),audit_id:u(h.audit_id),recommended_action:"mark_reviewed",reason_codes:[u(h.category)||"audit_risk"],occurred_at:u(h.occurred_at),updated_at:u(h.updated_at)||u(h.occurred_at),payload:h},l[_])}),p=L1(e,l);return[...r,...o,...d,...p].filter(h=>u(h.status)!=="dismissed").sort((h,_)=>Lt(_).localeCompare(Lt(h))||u(h.ops_id).localeCompare(u(_.ops_id)))}function L1(e,a){const l=(e==null?void 0:e.uiState)??Nt();return[{id:"plan_step_dispatch",title:"PlanStep 派发策略",error:Bl(l).last_pull_error,pulledAt:Bl(l).last_pulled_at,recommended:"retry_policy_pull"},{id:"risk_approval",title:"风险审批策略",error:Cs(l).last_pull_error,pulledAt:Cs(l).last_pulled_at,recommended:"retry_policy_pull"},{id:"route_decision",title:"入口路由策略",error:Ns(l).last_pull_error,pulledAt:Ns(l).last_pulled_at,recommended:"retry_policy_pull"}].filter(o=>!!o.error).map(o=>{const d=`policy:${o.id}`;return Vr({ops_id:d,kind:"policy",title:o.title,status:"error",priority:"warn",entity_type:"policy",entity_id:o.id,policy_id:o.id,recommended_action:o.recommended,reason_codes:["policy_pull_error"],summary:o.error,occurred_at:o.pulledAt??(e==null?void 0:e.generatedAt)??new Date().toISOString(),updated_at:o.pulledAt??(e==null?void 0:e.generatedAt)??new Date().toISOString(),payload:o},a[d])})}function B1(e){const a=xa(e);return jd(e,a).map(l=>({notification_id:l.notification_id,kind:l.kind,title:l.title,status:l.status,priority:l.level,level:l.level,entity_type:"notification",entity_id:l.notification_id,plan_id:l.plan_id||null,task_id:l.task_id||null,run_id:null,recommended_action:l.status==="unread"?"mark_read":l.status==="dismissed"?null:"dismiss",body:l.body,reason_codes:[l.kind,l.level],occurred_at:l.created_at,updated_at:l.read_at||l.dismissed_at||l.replied_at||l.created_at,payload:l})).sort((l,r)=>Lt(r).localeCompare(Lt(l)))}function U1(e){const l=((e==null?void 0:e.uiState)??Nt()).dailyReportWorkbenchStateById??{};return mm(e).map(r=>{const o=u(r.report_id),d=Q1(e,o),p=we(r.artifact_sources),h=u(r.status)||"ready",_=d.approval_status!=="requested";return Vr({report_id:o,date:u(r.date),title:u(r.title)||"数字员工日报",status:h,priority:h==="ready"?"info":"warn",entity_type:"daily_report",entity_id:o,artifact_id:u(r.artifact_id),artifact_count:p.length,delivery_status:d.delivery_status,confirmation_status:d.confirmation_status,approval_status:d.approval_status,recommended_action:d.confirmation_status!=="confirmed"?"confirm_report":_?"request_approval":"open_report",reason_codes:["daily_report_workbench"],occurred_at:u(r.generated_at),updated_at:u(r.updated_at)||u(r.generated_at),payload:{...r,delivery:d}},l[o])}).sort((r,o)=>Lt(o).localeCompare(Lt(r)))}function Vr(e,a){return a?{...e,status:a.status||e.status,last_action:a.last_action??null,reviewed_at:a.last_action==="mark_reviewed"?a.updated_at??null:e.reviewed_at,dismissed_at:a.last_action==="dismiss"?a.updated_at??null:e.dismissed_at,updated_at:a.updated_at||e.updated_at,actor:a.actor??e.actor,reason:a.reason??e.reason}:e}function I1(e,a){const l=u(a.get("kind")),r=u(a.get("priority"));return sa(e,a).filter(o=>!l||l==="all"||u(o.kind)===l).filter(o=>!r||u(o.priority)===r||u(o.status)===r)}function H1(e,a){const l=u(a.get("kind")),r=u(a.get("level"));return sa(e,a).filter(o=>!l||l==="all"||u(o.kind)===l).filter(o=>!r||u(o.level)===r||u(o.priority)===r)}function G1(e,a){const l=u(a.get("date"));return sa(e,a).filter(r=>!l||u(r.date)===l)}async function Y1(e,a){const l=u(e.action)||"mark_reviewed";if(!["mark_reviewed","dismiss","open_related_view","retry_policy_pull","safe_restart_service"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_ops_workbench_action"]};const r=Le([...we(e.ops_ids),...we(e.opsIds)].map(u)).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["ops_ids_required"]};const o=dv(a),d=new Map(o.map(x=>[u(x.ops_id),x])),p=(a==null?void 0:a.uiState)??await yn()??Nt(),h={...p.opsWorkbenchStateById??{}},_=[];for(const x of r){const S=d.get(x);if(!S){_.push({ops_id:x,ok:!1,status:"rejected",reason_codes:["ops_item_not_found"]});continue}if(l==="safe_restart_service"){const z=u(S.service_id);if(!uv(z)){_.push({ops_id:x,service_id:z,ok:!1,status:"rejected",reason_codes:["safe_restart_service_not_allowed"]});continue}const w=await Yb(z,{reason:u(e.reason)||"ops_workbench_safe_restart",actor:u(e.actor)||"digital_employee_operator"});_.push({ops_id:x,service_id:z,ok:w.ok,status:w.status,reason_codes:w.ok?["safe_restart_service"]:[w.error||"safe_restart_service_failed"],result:w});continue}if(l==="retry_policy_pull"){const z=u(S.policy_id||S.entity_id),w=await V1(z,a);_.push({ops_id:x,policy_id:z,ok:w.ok!==!1,status:w.ok===!1?"failed":"recorded",reason_codes:[w.error?"policy_pull_failed":"policy_pull_requested"],result:w});continue}const C=new Date().toISOString();h[x]={status:l==="dismiss"?"dismissed":l==="mark_reviewed"?"reviewed":u(S.status),last_action:l,actor:u(e.actor)||"digital_employee_operator",reason:u(e.reason)||null,updated_at:C},_.push({ops_id:x,ok:!0,status:h[x].status,reason_codes:["ops_workbench_action_recorded"]})}await Gn({...Ul(p),opsWorkbenchStateById:h},"ops_workbench_action_recorded",void 0,{action:l,ops_ids:r,reason:u(e.reason)||null});const g=_.filter(x=>x.ok!==!1).length;return{ok:g>0,action:l,total:r.length,recorded:g,rejected:r.length-g,items:_,reason_codes:["ops_workbench_action_recorded"]}}async function K1(e,a){const l=u(e.action)||"mark_read";if(!["mark_read","dismiss","pull_updates","open_desktop_settings"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_notification_workbench_action"]};if(l==="pull_updates"){const h=await Ob();return{ok:h.ok!==!1,action:l,total:1,recorded:h.ok===!1?0:1,rejected:h.ok===!1?1:0,items:[{ok:h.ok!==!1,result:h}],reason_codes:["notification_workbench_action_recorded"]}}if(l==="open_desktop_settings"){const h=await qb();return{ok:h.success!==!1,action:l,total:1,recorded:h.success===!1?0:1,rejected:h.success===!1?1:0,items:[{ok:h.success!==!1,result:h}],reason_codes:["notification_workbench_action_recorded"]}}const r=Le([...we(e.notification_ids),...we(e.notificationIds)].map(u)).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["notification_ids_required"]};const o=[];for(const h of r){const _=await Cv(h,l==="mark_read"?"read":"dismiss",{},a);o.push({notification_id:h,ok:_.ok,status:_.status,reason_codes:_.ok?["notification_workbench_action_recorded"]:["notification_action_failed"],result:_})}const d=(a==null?void 0:a.uiState)??await yn()??Nt();await Gn(d,"notification_workbench_action_recorded",void 0,{action:l,notification_ids:r});const p=o.filter(h=>h.ok!==!1).length;return{ok:p>0,action:l,total:r.length,recorded:p,rejected:r.length-p,items:o,reason_codes:["notification_workbench_action_recorded"]}}function Q1(e,a){var r,o;const l=rt(e).filter(d=>["daily_report_send_recorded","daily_report_confirmed","daily_report_approval_requested"].includes(d.kind)).filter(d=>{var p,h;return u(((p=oe(d.payload))==null?void 0:p.report_id)??((h=oe(d.payload))==null?void 0:h.reportId))===a}).sort((d,p)=>p.occurredAt.localeCompare(d.occurredAt));return{delivery_status:l.some(d=>d.kind==="daily_report_send_recorded")?"sent":"pending",confirmation_status:l.some(d=>d.kind==="daily_report_confirmed")?"confirmed":"pending",approval_status:l.some(d=>d.kind==="daily_report_approval_requested")?"requested":"not_requested",latest_event_id:((r=l[0])==null?void 0:r.id)??null,latest_event_at:((o=l[0])==null?void 0:o.occurredAt)??null}}function uv(e){return e==="fileServer"||e==="guiServer"}async function V1(e,a){return e==="plan_step_dispatch"?await wv(a):e==="risk_approval"?await zb():e==="route_decision"?await Mb():{ok:!1,error:"unknown_policy_id"}}function X1(e,a){const l=u(a.get("skill_id")),r=u(a.get("server_id")),o=u(a.get("tool_name")),d=u(a.get("decision"));return e.filter(p=>!l||u(p.skill_id)===l).filter(p=>!r||u(p.server_id)===r).filter(p=>!o||u(p.tool_name)===o).filter(p=>!d||u(p.decision)===d)}function fv(e){return rt(e).filter(a=>["artifact_access_allowed","artifact_access_rejected"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{access_id:a.id,event_id:a.id,remote_id:a.remoteId??null,artifact_id:u(l.artifact_id)||null,action:u(l.action)||null,status:u(l.status)||a.kind.replace("artifact_access_",""),reason_codes:Array.isArray(l.reason_codes)?l.reason_codes:[],actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function Z1(e,a){const l=u(a.get("artifact_id")),r=u(a.get("action")),o=u(a.get("status"));return e.filter(d=>!l||u(d.artifact_id)===l).filter(d=>!r||u(d.action)===r).filter(d=>!o||u(d.status)===o)}function mv(e){return rt(e).filter(a=>["artifact_retention_marked","artifact_retention_rejected","artifact_version_observed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{lifecycle_id:a.id,event_id:a.id,kind:a.kind,artifact_id:u(l.artifact_id)||null,action:u(l.action)||null,status:u(l.status)||null,retention_status:u(l.retention_status)||null,retention_until:u(l.retention_until)||null,reason:u(l.reason)||null,actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function pv(e){return rt(e).filter(a=>["artifact_cleanup_executed","artifact_cleanup_rejected","artifact_cleanup_failed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{cleanup_event_id:a.id,event_id:a.id,kind:a.kind,artifact_id:u(l.artifact_id)||null,status:u(l.status)||null,cleanup_status:u(l.status)||null,cleanup_reason:u(l.reason)||null,reason_codes:Le(we(l.reason_codes??l.reasonCodes).map(u)),actor:u(l.actor)||null,source:u(l.source)||null,deleted_at:u(l.deleted_at)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function _v(e,a,l){var d;const r=oe((d=oe(l==null?void 0:l.payload))==null?void 0:d.cleanup)??{},o=pv(e).find(p=>u(p.artifact_id)===a)??null;return{cleanup_status:u(o==null?void 0:o.cleanup_status)||u(r.status)||null,deleted_at:u(o==null?void 0:o.deleted_at)||u(r.deleted_at)||null,cleanup_reason:u(o==null?void 0:o.cleanup_reason)||u(r.cleanup_reason)||null,cleanup_event_id:u(o==null?void 0:o.cleanup_event_id)||u(r.event_id)||null}}function Xm(e,a){const l=mv(e).find(r=>u(r.artifact_id)===a&&u(r.kind)==="artifact_retention_marked");return{retention_status:u(l==null?void 0:l.retention_status)||"unmanaged",retention_until:u(l==null?void 0:l.retention_until)||null,last_retention_action:u(l==null?void 0:l.action)||null,last_retention_at:u(l==null?void 0:l.occurred_at)||null}}function J1(e,a,l){return{previous_status:u(e.retention_status)||"unmanaged",retention_status:F1(a),retention_until:u(l.retention_until??l.retentionUntil)||null,reason:u(l.reason)||null}}function F1(e){return e==="mark_keep"?"keep":e==="mark_expire"?"expire_candidate":e==="mark_review"?"review_required":e==="clear_retention"?"unmanaged":null}function P1(e){return{version:u(e.version)||null,version_key:u(e.version_key)||null,version_rank:vt(e.version_rank),file_id:u(e.file_id)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,created_at:u(e.created_at)||null,name:u(e.name)||null}}function Sd(e){return{delivery_status:u(e.delivery_status)||null,delivery_stage:u(e.delivery_stage)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,file_id:u(e.file_id)||null,version:u(e.version)||null,file_size:vt(e.file_size),source_tool:u(e.source_tool)||null}}function Zm(e,a){const l=id(a),r=e.filter(p=>id(p)===l).sort((p,h)=>u(p.created_at).localeCompare(u(h.created_at))),o=u(a.artifact_id)||u(a.subject_id),d=Math.max(0,r.findIndex(p=>u(p.artifact_id)===o||u(p.subject_id)===o));return{version:u(a.version)||`local-v${d+1}`,version_key:`${l}:v${u(a.version)||d+1}`,version_rank:d+1}}function id(e){const a=u(e.file_id),l=u(e.workspace_id),r=u(e.name);if(a)return`file:${l}:${a}:${r}`;const o=u(e.artifact_id)||u(e.subject_id);return o?`artifact:${o}`:`fallback:${l}:${u(e.project_id)}:${r||u(e.uri)}`}function mm(e){return wi(e).filter(W1).map(a=>{const l=oe(a.payload)??{},r=u(a.artifact_id)||u(l.artifact_id)||u(a.subject_id),o=u(l.report_id)||u(a.report_id)||r.replace(/:artifact:text$/,""),d=u(l.generated_at)||u(a.created_at)||new Date().toISOString(),p=u(l.date)||d.slice(0,10);return{report_id:o,artifact_id:r,event_id:u(l.event_id)||`${o}:event:generated`,date:p,title:u(l.title)||u(a.name)||`${p} 数字员工日报`,status:u(l.status)||"ready",summary:u(l.summary)||u(a.value)||"",totals:oe(l.totals)??{},detail_lines:we(l.detail_lines),artifact_sources:we(l.artifact_sources),filename:u(l.filename)||u(a.name)||Wm(p),html_artifact_id:u(l.html_artifact_id)||`${o}:artifact:html`,pdf_artifact_id:u(l.pdf_artifact_id)||`${o}:artifact:pdf`,html_filename:u(l.html_filename)||ep(p),pdf_filename:u(l.pdf_filename)||tp(p),format:u(l.format)||"text",text_content:u(l.text_content)||u(a.value),html_content:u(l.html_content)||"",generated_at:d,sync_status:u(a.sync_status)||null,entity_type:"artifact",entity_id:r,plan_id:u(a.plan_id)||null,task_id:u(a.task_id)||null,run_id:u(a.run_id)||null,created_at:u(a.created_at)||d,updated_at:d,payload:l}}).sort((a,l)=>u(l.generated_at).localeCompare(u(a.generated_at)))}function W1(e){const a=oe(e.payload)??{},l=u(a.format)||"text";return u(e.kind)==="daily_report"&&l!=="html"&&l!=="pdf"}function ew(e){const a=oe(e.payload)??{};return u(e.kind)==="daily_report"||u(a.kind)==="daily_report"||!!(u(a.report_id)&&u(a.text_content))}function tw(e,a){const l=u(a.get("date"));return sa(e,a).filter(r=>!l||u(r.date)===l)}function sa(e,a){const l=u(a.get("entity_id")),r=u(a.get("remote_id")),o=u(a.get("status")),d=u(a.get("sync_status")),p=u(a.get("updated_from")),h=u(a.get("updated_to"));return e.filter(_=>!l||Jm(_).includes(l)).filter(_=>!r||u(_.remote_id)===r).filter(_=>!o||u(_.status)===o).filter(_=>!d||u(_.sync_status)===d).filter(_=>{const g=Lt(_);return!(p&&(!g||gh))})}function pn(e,a){const l=Math.max(1,Math.floor(vt(a.get("page_no"))??1)),r=Math.max(1,Math.min(Math.floor(vt(a.get("page_size"))??20),100)),o=(l-1)*r;return{items:e.slice(o,o+r),page_no:l,page_size:r,total:e.length}}function hv(e){const a=u(e.run_id);if(a)return{entity_type:"run",entity_id:a};const l=u(e.task_id);if(l)return{entity_type:"task",entity_id:l};const r=u(e.plan_id);return r?{entity_type:"plan",entity_id:r}:{entity_type:u(e.fallback_type)||"record",entity_id:u(e.fallback_id)||null}}function Jm(e){return Le([e.entity_id,e.intervention_id,e.route_decision_id,e.plan_id,e.task_id,e.run_id,e.event_id,e.audit_id,e.memory_id,e.history_id,e.step_id,e.node_id,e.artifact_id,e.approval_id,e.notification_id,e.report_id])}function Lt(e){return u(e.updated_at)||u(e.finished_at)||u(e.started_at)||u(e.occurred_at)||u(e.latest_event_at)||u(e.created_at)}function nw(e,a){if(!e||!a)return null;const l=Date.parse(e),r=Date.parse(a);return!Number.isFinite(l)||!Number.isFinite(r)||r({event_id:_.id,aggregate_type:_.runId?"run":_.taskId?"task":"plan",aggregate_id:_.runId??_.taskId??_.planId??_.id,event_type:_.kind,kind:_.kind,message:_.message,occurred_at:_.occurredAt,timestamp:_.occurredAt,plan_id:_.planId??null,task_id:_.taskId??null})),o=l.flatMap(_=>(_.events??[]).map(g=>({event_id:g.event_id??`${_.run_id}:${g.kind??"event"}:${g.occurred_at??_.created_at}`,aggregate_type:"run",aggregate_id:_.run_id,event_type:g.kind??_.lifecycle,kind:g.kind??_.lifecycle,message:g.message??_.lifecycle,occurred_at:g.occurred_at??_.completed_at??_.created_at,timestamp:g.occurred_at??_.completed_at??_.created_at,plan_id:_.plan_id??null,task_id:_.task_id||null}))),d=a.map(_=>({event_id:`task-status-${_.task_id}`,aggregate_type:"task",aggregate_id:_.task_id,event_type:"task_status",kind:_.status,message:`${_.title}:${la(_.status)}`,occurred_at:_.updated_at??_.created_at,timestamp:_.updated_at??_.created_at,plan_id:_.plan_id??null,task_id:_.task_id})),p=(((h=e==null?void 0:e.sync)==null?void 0:h.recentFailures)??[]).map(_=>({event_id:`digital-sync-failure-${_.id}`,aggregate_type:"sync_outbox",aggregate_id:_.id,event_type:"digital_sync_failed",kind:"digital_sync_failed",message:sc(_),occurred_at:_.lastAttemptAt??_.updatedAt??_.createdAt,timestamp:_.lastAttemptAt??_.updatedAt??_.createdAt,plan_id:null,task_id:null}));return rw([...r,...o,...d,...p]).sort((_,g)=>(g.occurred_at??"").localeCompare(_.occurred_at??""))}function rw(e){const a=new Set;return e.filter(l=>!l.event_id||a.has(l.event_id)?!1:(a.add(l.event_id),!0))}function Yl(e){var o;const a=lc(e).map(d=>({approval_id:d.id,task_id:d.taskId??"",status:d.status,created_at:d.createdAt,plan_id:d.planId??null,run_id:d.runId??null,title:d.title,reversible:d.status==="pending",source:"qimingclaw-runtime",sync_status:d.syncStatus,sync_error:d.syncError,payload:d.payload})),r=(((o=e==null?void 0:e.sync)==null?void 0:o.recentFailures)??[]).filter(d=>d.dueForRetry===!1||/credential|auth|token|unauthor/i.test(d.error??"")).slice(0,20).map(d=>({approval_id:`sync-review-${d.id}`,task_id:d.entityId,status:"pending",created_at:d.createdAt,title:`同步异常待处理:${d.entityType}/${d.entityId}`,reversible:!1,source:"qimingclaw-sync",error:d.error}));return[...a,...r]}function gv(e,a){const l=Yl(a).find(g=>u(g.approval_id)===e)??null,r=lc(a).find(g=>g.id===e)??null,o=oe((l==null?void 0:l.payload)??(r==null?void 0:r.payload)),d=yv(o),p={approvalId:e,planId:u(l==null?void 0:l.plan_id)||(r==null?void 0:r.planId)||"",taskId:u(l==null?void 0:l.task_id)||(r==null?void 0:r.taskId)||"",runId:u(l==null?void 0:l.run_id)||(r==null?void 0:r.runId)||"",permissionId:d.permissionId,sessionId:d.sessionId},h=u(l==null?void 0:l.created_at)||(r==null?void 0:r.createdAt)||(r==null?void 0:r.updatedAt)||"",_=[];if(l||r){const g=u(l==null?void 0:l.title)||(r==null?void 0:r.title)||"待确认事项",x=u(l==null?void 0:l.status)||(r==null?void 0:r.status)||"pending";_.push({event_id:`${e}:approval_record`,kind:"approval_record",status:x,message:`审批记录:${g} -> ${x}`,occurred_at:h||new Date().toISOString(),payload:o,source_type:"approval"})}for(const g of rt(a)){if(!cw(g,p))continue;const x=oe(g.payload);_.push({event_id:g.id,kind:g.kind,status:ow(g,x),message:g.message||g.kind,occurred_at:g.occurredAt,payload:x,source_type:u(x==null?void 0:x.source)||"runtime_event"})}return{approval_id:e,approval:l,events:dw(_).sort((g,x)=>g.occurred_at.localeCompare(x.occurred_at)||g.event_id.localeCompare(x.event_id))}}function yv(e){const a=oe(e==null?void 0:e.acpPermission)??oe(e==null?void 0:e.acp_permission)??oe(e==null?void 0:e.permission);return{permissionId:u(a==null?void 0:a.permission_id)||u(a==null?void 0:a.permissionId)||u(e==null?void 0:e.permission_id)||u(e==null?void 0:e.permissionId),sessionId:u(a==null?void 0:a.session_id)||u(a==null?void 0:a.sessionId)||u(e==null?void 0:e.session_id)||u(e==null?void 0:e.sessionId)}}function cw(e,a){const l=oe(e.payload);if((u(l==null?void 0:l.approvalId)||u(l==null?void 0:l.approval_id)||u(l==null?void 0:l.decision_id)||u(l==null?void 0:l.decisionId))===a.approvalId||e.id.startsWith(`${a.approvalId}:`))return!0;const o=yv(l);return a.permissionId&&o.permissionId===a.permissionId||a.sessionId&&o.sessionId===a.sessionId?!0:e.kind.includes("approval")||e.kind.includes("permission")?!!(a.runId&&e.runId===a.runId||a.taskId&&e.taskId===a.taskId||a.planId&&e.planId===a.planId):!1}function ow(e,a){return u(a==null?void 0:a.nextStatus)||u(a==null?void 0:a.next_status)||u(a==null?void 0:a.status)||u(a==null?void 0:a.decision)||(e.kind==="approval_decision"?"completed":null)}function dw(e){const a=new Set;return e.filter(l=>a.has(l.event_id)?!1:(a.add(l.event_id),!0))}function xa(e){return e!=null&&e.uiState?Ul(e.uiState):Nt()}function uw(e,a){const l=jd(a,xa(a)),r=(e||"all").toLowerCase();return r==="all"?{notifications:l.filter(o=>o.status!=="dismissed")}:{notifications:l.filter(o=>o.status===r)}}function jd(e,a){return bv(e,a).filter(l=>jv(l,a.notificationPreferences))}function bv(e,a){const l=Cw([...hw(e),...gw(e),...yw(e),...bw(e),...xw(e),...kw(e),...Sw(e),...jw(e),...vw(e)]),r=a.notificationStateById??{};return l.map(o=>ww(o,r[o.notification_id])).sort((o,d)=>d.created_at.localeCompare(o.created_at)||d.notification_id.localeCompare(o.notification_id))}function vv(){return{enabled:!0,desktop_enabled:!0,muted_kinds:[],muted_levels:[],updated_at:null}}function xv(){return{enabled:!0,subscribed_actions:[...$b],subscribed_risk_levels:["high","critical"],notify_on_timeout:!0,updated_at:null}}function kv(){return{enabled:!0,max_per_sweep:3,auto_dispatch_ready_steps:!0,updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function Sv(){return{enabled:!0,approval_required_risk_levels:["high","critical"],approval_required_actions:[],auto_reject_actions:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function rd(){return{enabled:!0,auto_create_governance_commands:!0,approval_required_intents:[],blocked_intents:[],preferred_route_kinds:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function cd(e){const a=e==null?void 0:e.approvalSubscriptionPreferences,l=xv();if(!a||typeof a!="object")return l;const r=Array.isArray(a.subscribed_actions)?a.subscribed_actions.filter(d=>$b.includes(d)):l.subscribed_actions,o=Array.isArray(a.subscribed_risk_levels)?a.subscribed_risk_levels.filter(d=>hj.includes(d)):l.subscribed_risk_levels;return{enabled:a.enabled!==!1,subscribed_actions:[...new Set(r)],subscribed_risk_levels:[...new Set(o)],notify_on_timeout:a.notify_on_timeout!==!1,updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at}}function Bl(e){const a=e==null?void 0:e.planStepDispatchPolicy,l=kv();if(!a||typeof a!="object")return l;const r=Number(a.max_per_sweep);return{enabled:a.enabled!==!1,max_per_sweep:Number.isFinite(r)?Math.max(1,Math.min(Math.floor(r),10)):l.max_per_sweep,auto_dispatch_ready_steps:a.auto_dispatch_ready_steps!==!1,updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function Cs(e){const a=e==null?void 0:e.riskApprovalPolicy,l=Sv();if(!a||typeof a!="object")return l;const r=Le(we(a.approval_required_risk_levels).map(o=>u(o).toLowerCase())).filter(o=>["normal","medium","high","critical"].includes(o));return{enabled:a.enabled!==!1,approval_required_risk_levels:r.length>0?r:l.approval_required_risk_levels,approval_required_actions:Le(we(a.approval_required_actions)),auto_reject_actions:Le(we(a.auto_reject_actions)),updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function Ns(e){const a=e==null?void 0:e.routeDecisionPolicy,l=rd();return!a||typeof a!="object"?l:{enabled:a.enabled!==!1,auto_create_governance_commands:a.auto_create_governance_commands!==!1,approval_required_intents:Le(we(a.approval_required_intents).map(od)),blocked_intents:Le(we(a.blocked_intents).map(od)),preferred_route_kinds:Le(we(a.preferred_route_kinds)),updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function od(e){return u(e).trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"_")||"chat"}function Es(e){const a=e==null?void 0:e.notificationPreferences,l=vv();if(!a||typeof a!="object")return l;const r=Array.isArray(a.muted_kinds)?a.muted_kinds.filter(d=>_j.includes(d)):[],o=Array.isArray(a.muted_levels)?a.muted_levels.filter(d=>pj.includes(d)):[];return{enabled:a.enabled!==!1,desktop_enabled:a.desktop_enabled!==!1,muted_kinds:[...new Set(r)],muted_levels:[...new Set(o)],updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at}}function jv(e,a){const l=Es({notificationPreferences:a});return!l.enabled||l.muted_levels.includes(e.level)?!1:!l.muted_kinds.includes(e.kind)}async function fw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Es(l),o=Es({notificationPreferences:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),notificationPreferences:o},"update_notification_preferences",void 0,{notification_preferences:o}),o}async function mw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=cd(l),o=cd({approvalSubscriptionPreferences:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),approvalSubscriptionPreferences:o},"update_approval_subscriptions",void 0,{approval_subscriptions:o}),o}async function pw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Bl(l),o=Bl({planStepDispatchPolicy:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),planStepDispatchPolicy:o},"update_plan_step_dispatch_policy",void 0,{plan_step_dispatch_policy:o}),o}async function _w(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Cs(l),o=Cs({riskApprovalPolicy:{...r,...e,source:"local",updated_at:new Date().toISOString(),last_pull_error:null}});return await Gn({...Ul(l),riskApprovalPolicy:o},"update_risk_approval_policy",void 0,{risk_approval_policy:o}),o}async function wv(e){var r,o,d;const a=Bl((e==null?void 0:e.uiState)??Nt()),l=await((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.pullPlanStepDispatchPolicy)==null?void 0:d.call(o).catch(p=>({ok:!1,endpoint:null,pulled_at:new Date().toISOString(),policy:a,error:p instanceof Error?p.message:"plan step dispatch policy pull failed"})));return l||{ok:!1,endpoint:null,pulled_at:new Date().toISOString(),policy:a,error:"qimingclaw_bridge_unavailable"}}function hw(e){const a=new Map($s(e).map(l=>[u(l.approval_id),l]));return Yl(e).filter(l=>u(l.source)==="qimingclaw-runtime").map(l=>{const r=u(l.status)||"pending",o=Nv(r),d=a.get(u(l.approval_id)),p=u(d==null?void 0:d.sla_status),h=u(d==null?void 0:d.risk_level),_=o&&(p==="timeout"||h==="high");return{notification_id:`approval:${u(l.approval_id)}`,plan_id:u(l.plan_id),task_id:u(l.task_id),kind:o?"need_approval":"confirmation_resolved",title:_?"审批需要关注":o?"审批待处理":"审批已处理",body:u(l.title)||"待确认事项",level:_?"warn":o?"action":"info",status:o?"unread":"resolved",correlation_id:u(l.approval_id),created_at:u(l.created_at)||new Date().toISOString()}})}function gw(e){return Vm(e).filter(a=>u(a.kind)==="approval_action_recorded").filter(a=>["delegate","mark_timeout","mark_risk"].includes(u(a.action))).map(a=>{const l=u(a.action),r=u(a.approval_id),o=l==="mark_timeout",d=l==="mark_risk";return{notification_id:`approval-action:${r}:${l}:${mt(u(a.occurred_at))}`,plan_id:u(a.plan_id),task_id:u(a.task_id),kind:"need_approval",title:o?"审批已超时":d?"审批已标记风险":"审批已转交",body:u(a.message)||r,level:o||d?"warn":"action",status:"unread",correlation_id:r,created_at:u(a.occurred_at)||new Date().toISOString()}})}function yw(e){var a;return(((a=e==null?void 0:e.sync)==null?void 0:a.recentFailures)??[]).map(l=>({notification_id:`sync_failure:${l.id}`,plan_id:"",task_id:l.entityId,kind:"task_failed",title:`同步失败:${l.entityType}`,body:sc(l),level:l.dueForRetry===!1?"error":"warn",status:"unread",correlation_id:l.id,created_at:l.lastAttemptAt??l.updatedAt??l.createdAt}))}function bw(e){return Ll(e).filter(a=>a.requires_human_action||a.status==="degraded"||a.status==="stopped").map(a=>{var l;return{notification_id:`service:${a.service_id}`,plan_id:"",task_id:((l=a.dependent_tasks)==null?void 0:l[0])??"",kind:"need_input",title:`服务需要处理:${a.name}`,body:a.error||`${a.name} 当前状态:${a.status_label||a.status}`,level:a.status==="stopped"?"error":"warn",status:"unread",correlation_id:a.service_id,created_at:a.last_seen_at||new Date().toISOString()}})}function vw(e){return Ct(e).flatMap(a=>{const l=a.status.toLowerCase(),r=["completed","succeeded","success","done"].includes(l),o=["failed","error","rejected","cancelled","skipped"].includes(l);if(!r&&!o)return[];const d=a.updatedAt||a.createdAt||new Date().toISOString();return[{notification_id:`task:${a.id}:${mt(d)}`,plan_id:a.planId??"",task_id:a.id,kind:r?"task_finished":"task_failed",title:r?"任务已完成":"任务需要关注",body:`${a.title}:${la(a.status)}`,level:r?"info":"error",status:"unread",correlation_id:a.id,created_at:d}]})}function xw(e){return rt(e).filter(a=>a.kind==="plan_step_dispatch_failed").map(a=>{const l=oe(a.payload)??{},r=u(l.step_id)||a.id,o=u(l.reason);return{notification_id:`plan-step-dispatch:${r}:${mt(a.occurredAt)}`,plan_id:a.planId??u(l.plan_id),task_id:a.taskId??u(l.task_id),kind:"task_failed",title:"Ready 步骤派发失败",body:o?`${r}:${o}`:a.message||r,level:"error",status:"unread",correlation_id:r,created_at:a.occurredAt}})}function kw(e){return cc(e).filter(a=>["warn","error","action"].includes(u(a.attention_level))).map(a=>{var p,h;const l=u(a.attention_level),r=u(a.route_decision_id)||u(a.event_id),o=u(a.created_command_id),d=we(a.reason_codes).map(u).filter(Boolean).join(" / ");return{notification_id:`route-decision:${r}:${mt(u(a.recorded_at))}`,plan_id:u((p=oe(a.context_refs))==null?void 0:p.plan_id),task_id:u((h=oe(a.context_refs))==null?void 0:h.task_id),kind:l==="action"?"task_progress":"task_failed",title:l==="action"?"入口路由已映射":"入口路由需要关注",body:o?`${a.route_kind} / ${a.intent_kind} -> ${o}`:`${a.route_kind} / ${a.intent_kind}${d?`:${d}`:""}`,level:l==="error"?"error":l==="warn"?"warn":"action",status:"unread",correlation_id:r,created_at:u(a.recorded_at)||new Date().toISOString()}})}function Sw(e){return vd(e).results.filter(a=>a.severity==="error"||a.severity==="warn").map(a=>{const l=a.severity==="error"?"error":"warn",r=u(a.id)||`${u(a.category)||"diagnostic"}:${l}`;return{notification_id:`diagnostic:${r}`,plan_id:"",task_id:"",kind:l==="error"?"task_failed":"need_input",title:l==="error"?"诊断发现异常":"诊断需要关注",body:a.message,level:l,status:"unread",correlation_id:r,created_at:a.created_at??new Date().toISOString()}})}function jw(e){return xd(e).filter(a=>["error","warn"].includes(u(a.level))).map(a=>{const l=u(a.level)==="error"?"error":"warn",r=u(a.audit_id)||u(a.entity_id)||"audit";return{notification_id:`audit:${r}`,plan_id:u(a.plan_id),task_id:u(a.task_id)||(u(a.entity_type)==="task"?u(a.entity_id):""),kind:l==="error"?"task_failed":"need_input",title:l==="error"?"审计发现异常":"审计需要关注",body:u(a.message)||u(a.action)||r,level:l,status:"unread",correlation_id:r,created_at:u(a.occurred_at)||new Date().toISOString()}})}function ww(e,a){return a?{...e,status:a.status??e.status,read_at:a.read_at??e.read_at??null,dismissed_at:a.dismissed_at??e.dismissed_at??null,reply:a.reply??e.reply??null,replied_at:a.replied_at??e.replied_at??null}:e}function Cw(e){const a=new Set;return e.filter(l=>!l.notification_id||a.has(l.notification_id)?!1:(a.add(l.notification_id),!0))}async function Cv(e,a,l,r){var w;const o=(r==null?void 0:r.uiState)??await yn()??Nt(),d=jd(r,o).find(D=>D.notification_id===e),p=new Date().toISOString(),h=(w=o.notificationStateById)==null?void 0:w[e],_=!!(h!=null&&h.replied_at),g={...h??{}};let x="";a==="read"?(g.status=(d==null?void 0:d.status)==="resolved"?"resolved":"read",g.read_at=g.read_at??p):a==="dismiss"?(g.status="dismissed",g.dismissed_at=p):(g.status=(d==null?void 0:d.status)==="resolved"?"resolved":"read",g.read_at=g.read_at??p,x=u(l.content??l.reply??l.message),g.reply=x,g.replied_at=p);const S={...o,notificationStateById:{...o.notificationStateById??{},[e]:g}};await Gn(S,`notification_${a}`,void 0,{notification_id:e,action:a});const C=await Nw({notification_id:e,action:a,status:g.status??(d==null?void 0:d.status)??null,read_at:g.read_at??null,dismissed_at:g.dismissed_at??null,reply:a==="reply"?x:g.reply??null,replied_at:g.replied_at??null,acted_at:a==="dismiss"?g.dismissed_at??p:a==="reply"?g.replied_at??p:g.read_at??p,actor:"digital_employee_ui",source:"sgrobot-digital-adapter"}),z=a==="reply"&&(d==null?void 0:d.kind)==="need_input"&&d.task_id&&x&&!_?await Ew(d,x,r):null;return{ok:!0,task_id:d==null?void 0:d.task_id,status:g.status,...C.ok?{}:{notification_sync_error:C.error},task_input_recorded:!!(z!=null&&z.accepted),governance_command_id:z==null?void 0:z.command_id,governance_event_id:Aw(z)}}async function Nw(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.submitNotificationAction))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const r=await a.submitNotificationAction(e);return{ok:(r==null?void 0:r.ok)!==!1,...r!=null&&r.error?{error:r.error}:{}}}catch(r){return{ok:!1,error:r instanceof Error?r.message:String(r)}}}async function Ew(e,a,l){const r=Date.now();return Kl({command_kind:"provide_task_input",context_refs:{plan_id:e.plan_id||void 0,task_id:e.task_id},payload:{input:a,source:"notification_reply",notification_id:e.notification_id,plan_id:e.plan_id||void 0,task_id:e.task_id},correlation_id:`qimingclaw-notification-reply-${mt(e.notification_id)}-${r}`,idempotency_key:`qimingclaw-notification-reply-${e.notification_id}`},l)}function Aw(e){var l;const a=je((l=e==null?void 0:e.result)==null?void 0:l.run_id);if(!(!(e!=null&&e.accepted)||!a||!e.command_id))return`${a}:provide_task_input:${Tw(e.command_id)}`}function Tw(e){return e.replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Rw(e,a,l){var h;const r=new Map(In(l).map(_=>[_.id,_])),o=new Map(Ct(l).map(_=>[_.id,_])),d=new Map($s(l).map(_=>[u(_.approval_id),_])),p=((h=e.decisionResultsByDate)==null?void 0:h[a])??{};return Yl(l).filter(_=>u(_.source)==="qimingclaw-runtime").map(_=>{const g=oe(_.payload),x=u(_.approval_id)||`approval-${mt(u(_.task_id)||u(_.title)||"item")}`,S=p[x],C=Dw(S,u(_.status)||"pending"),z=u(_.plan_id),w=u(_.task_id),D=z?r.get(z):null,N=w?o.get(w):null,k=d.get(x),A=(k==null?void 0:k.approval_conflict_active)===!0;return{id:x,title:u(_.title)||u(g==null?void 0:g.title)||"待确认事项",scenario:$w(_,g),status:C,status_label:zw(C,S),plan_title:(D==null?void 0:D.title)||u(g==null?void 0:g.plan_title)||u(_.plan_id)||"qimingclaw 本地记录",task_title:(N==null?void 0:N.title)||u(g==null?void 0:g.task_title)||u(_.task_id)||"待确认任务",risk_level:u(k==null?void 0:k.risk_level)||"normal",sla_status:u(k==null?void 0:k.sla_status)||"untracked",due_at:u(k==null?void 0:k.due_at)||null,last_action:u(k==null?void 0:k.last_action)||null,last_actor:u(k==null?void 0:k.last_actor)||null,comment_count:vt(k==null?void 0:k.comment_count)??0,delegate_to:u(k==null?void 0:k.delegate_to)||null,workflow_id:u(k==null?void 0:k.workflow_id)||null,current_step_id:u(k==null?void 0:k.current_step_id)||null,current_step_label:u(k==null?void 0:k.current_step_label)||null,current_participant:u(k==null?void 0:k.current_participant)||null,approval_step_index:vt(k==null?void 0:k.approval_step_index),approval_step_count:vt(k==null?void 0:k.approval_step_count),next_step_label:u(k==null?void 0:k.next_step_label)||null,conflict:A?{active:!0,reason:u(k==null?void 0:k.approval_conflict_reason)||null,remote_status:u(k==null?void 0:k.approval_conflict_remote_status)||null,detected_at:u(k==null?void 0:k.approval_conflict_detected_at)||null,local_status:u(k==null?void 0:k.approval_conflict_local_status)||null,remote_current_step_id:u(k==null?void 0:k.approval_conflict_remote_current_step_id)||null}:null,actions:Nv(C)&&!A?[{id:"approved",label:"同意",tone:"primary"},{id:"rejected",label:"驳回",tone:"secondary"}]:[]}})}function $w(e,a){return u(a==null?void 0:a.scenario)||u(a==null?void 0:a.summary)||u(a==null?void 0:a.reason)||u(a==null?void 0:a.message)||u(e.error)||"来自 qimingclaw 本地运行记录的人工确认项。"}function Dw(e,a){const l=String(e||"").toLowerCase();return["approve","approved","accept","accepted"].includes(l)?"approved":["reject","rejected","deny","denied"].includes(l)?"rejected":["dismiss","dismissed","skip","skipped"].includes(l)?"dismissed":a||"pending"}function zw(e,a){return a?e==="approved"?"已同意":e==="rejected"?"已驳回":e==="dismissed"?"已忽略":"已处理":e==="approved"?"已同意":e==="rejected"?"已驳回":e==="completed"?"已完成":e==="failed"?"异常":"待确认"}function Nv(e){return["pending","requested"].includes(String(e||"").toLowerCase())}function wi(e){const a=[...gd(e).map(Ow),...Hn(e).flatMap(r=>Ev(r,rt(e))),...rt(e).flatMap(r=>pm(r.id,r.payload,r.occurredAt,{sourceType:"event",sourceEventId:r.id,sourceLabel:`Event ${r.kind}`,planId:r.planId,taskId:r.taskId,runId:r.runId}))],l=Tv(a);return l.map(r=>Mw(r,e,l))}function Mw(e,a,l){var z;const r=u(e.artifact_id)||u(e.subject_id),o=fv(a).find(w=>u(w.artifact_id)===r)??null,d=Lw(u(e.uri)),p=ew(e)&&!!u((z=oe(e.payload))==null?void 0:z.text_content),h=gd(a).some(w=>w.id===r||w.remoteId===r),_=h&&(p||d),g=Xm(a,r),x=_v(a,r,e),S=u(x.cleanup_status)==="deleted",C=Zm(l,e);return{...e,version:C.version,version_key:C.version_key,version_rank:C.version_rank,retention_status:g.retention_status,retention_until:g.retention_until,last_retention_action:g.last_retention_action,cleanup_status:u(x.cleanup_status)||null,deleted_at:u(x.deleted_at)||null,cleanup_reason:u(x.cleanup_reason)||null,cleanup_event_id:u(x.cleanup_event_id)||null,delivery_summary:Sd(e),access:{previewable:!S&&_,downloadable:!S&&h&&d,openable:!S&&h&&d,access_policy:h?"qimingclaw-local-artifact-policy":"runtime-projection-readonly",last_access_status:u(o==null?void 0:o.status)||null}}}function Ow(e){const a=oe(e.payload),l=oe(a==null?void 0:a.delivery),r=u(l==null?void 0:l.source_tool),o=u(l==null?void 0:l.uri),d=u(l==null?void 0:l.filename);return{artifact_id:e.id,subject_id:e.runId??e.taskId??e.planId??e.id,kind:e.kind,name:e.name||d||u((a==null?void 0:a.name)??(a==null?void 0:a.title))||_m(e.uri??o)||e.kind,uri:e.uri||o||u((a==null?void 0:a.uri)??(a==null?void 0:a.url)??(a==null?void 0:a.path))||void 0,value:u((a==null?void 0:a.value)??(a==null?void 0:a.summary)??(a==null?void 0:a.text))||e.uri||o||e.name||d||e.kind,plan_id:e.planId??null,task_id:e.taskId??null,run_id:e.runId??null,created_at:e.createdAt,source:"qimingclaw-runtime",source_type:"artifact",source_label:r?`File Server: ${r}`:dd("artifact",e.id),sync_status:e.syncStatus,sync_error:e.syncError,payload:e.payload,...Av(l)}}function Ev(e,a){return Tv([...pm(e.id,e.payload,e.finishedAt??e.startedAt??e.createdAt,{sourceType:"run",sourceLabel:dd("run",e.id),planId:e.planId,taskId:e.taskId,runId:e.id}),...a.filter(l=>l.runId===e.id).flatMap(l=>pm(e.id,l.payload,l.occurredAt,{sourceType:"event",sourceEventId:l.id,sourceLabel:`Event ${l.kind}`,planId:l.planId,taskId:l.taskId,runId:l.runId}))])}function pm(e,a,l,r){const o=oe(a);if(!o)return typeof a=="string"?[Yf(e,a,0,l,r)]:[];const p=[...we(o.artifacts),...we(o.outputs),...we(o.files),...we(o.attachments)].map((h,_)=>Yf(e,h,_,l,r));for(const h of["artifact","outputPath","output_path","filePath","file_path","path","uri","url"])o[h]&&p.push(Yf(e,o[h],p.length,l,r));return p.filter(h=>h.name||h.uri||h.value)}function Yf(e,a,l,r,o){const d=oe(a);if(d){const h=oe(d.delivery),_=u(h==null?void 0:h.source_tool),g=u(h==null?void 0:h.uri),x=u(d.uri??d.url??d.path??d.filePath??d.file_path??d.outputPath??d.output_path),S=u(d.name??d.title??d.filename)||u(h==null?void 0:h.filename)||_m(x||g)||`产物 ${l+1}`;return{artifact_id:u(d.artifact_id??d.id)||`artifact-${mt(e)}-${l+1}`,subject_id:u(d.subject_id)||e,kind:u(d.kind??d.type)||"artifact",name:S,uri:x||g,value:u(d.value??d.summary??d.text)||x||g,created_at:(u(d.created_at??d.createdAt)||r)??void 0,source:"qimingclaw-runtime",source_type:u(d.source_type)||(o==null?void 0:o.sourceType)||"payload",source_event_id:u(d.source_event_id)||(o==null?void 0:o.sourceEventId)||null,source_label:_?`File Server: ${_}`:u(d.source_label)||(o==null?void 0:o.sourceLabel)||dd("payload",e),plan_id:u(d.plan_id)||(o==null?void 0:o.planId)||null,task_id:u(d.task_id)||(o==null?void 0:o.taskId)||null,run_id:u(d.run_id)||(o==null?void 0:o.runId)||null,...Av(h)}}const p=String(a??"").trim();return{artifact_id:`artifact-${mt(e)}-${l+1}`,subject_id:e,kind:"artifact",name:_m(p)||`产物 ${l+1}`,uri:qw(p)?p:void 0,value:p,created_at:r??void 0,source:"qimingclaw-runtime",source_type:(o==null?void 0:o.sourceType)||"payload",source_event_id:(o==null?void 0:o.sourceEventId)||null,source_label:(o==null?void 0:o.sourceLabel)||dd("payload",e),plan_id:(o==null?void 0:o.planId)||null,task_id:(o==null?void 0:o.taskId)||null,run_id:(o==null?void 0:o.runId)||null}}function Av(e){return e?{delivery_status:u(e.status)||null,delivery_stage:u(e.stage)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,file_id:u(e.file_id)||null,version:u(e.version)||null,file_size:vt(e.size),source_tool:u(e.source_tool)||null}:{}}function dd(e,a){const l=a?` ${a}`:"";switch(e){case"artifact":return`Artifact${l}`;case"event":return`Event${l}`;case"run":return`Run${l}`;case"task":return`Task${l}`;case"plan":return`Plan${l}`;default:return`Payload${l}`}}function Tv(e){const a=new Set;return e.filter(l=>{const r=l.artifact_id||`${l.subject_id}:${l.uri||l.value||l.name}`;return!r||a.has(r)?!1:(a.add(r),!!(l.name||l.uri||l.value))})}function oe(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function we(e){return Array.isArray(e)?e:[]}function u(e){return typeof e=="string"?e.trim():""}function vt(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const a=Number(e);return Number.isFinite(a)?a:null}return null}function qw(e){return/^(file|https?):\/\//i.test(e)||e.includes("/")||e.includes("\\")}function Lw(e){return e?/^file:\/\//i.test(e)?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)?!1:e.startsWith("/")||/^[a-z]:[\\/]/i.test(e):!1}function _m(e){return e?(e.split(/[?#]/)[0]||e).split(/[\\/]/).filter(Boolean).pop()??"":""}function mt(e){const a=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(a)return a;let l=0;for(let r=0;r>>0;return`item-${l.toString(36)}`}function Pm(e,a=null){const l=(e??"").trim().toLowerCase(),r=Hm(a);return l?r.filter(o=>o.title.toLowerCase().includes(l)||o.plan_id.toLowerCase().includes(l)||(o.objective??"").toLowerCase().includes(l)):r}function Bw(e){const a=new Map(In(e).map(o=>[o.id,o])),l=new Map(Ct(e).map(o=>[o.id,o])),r=rt(e).map(o=>{const d=o.taskId?l.get(o.taskId):void 0,p=o.planId??(d==null?void 0:d.planId)??null,h=p?a.get(p):void 0,_=(d==null?void 0:d.status)??(h==null?void 0:h.status)??(o.kind.includes("failed")||o.kind.includes("error")?"failed":"running"),g=ot(_);return{id:o.id,time:ad(o.occurredAt),plan_title:(h==null?void 0:h.title)??"qimingclaw 本地执行",task_title:(d==null?void 0:d.title)??o.message,step_title:o.kind,detail:o.message||o.kind,status:_,status_label:la(_),status_tone:g,updated_at:o.occurredAt,conversation_id:p??(d==null?void 0:d.id)??o.id}});return r.length>0?r:Ct(e).map(o=>{const d=o.planId?a.get(o.planId):void 0;return{id:`task-event-${o.id}`,time:ad(o.updatedAt),plan_title:(d==null?void 0:d.title)??"qimingclaw 本地任务",task_title:o.title,step_title:o.assignedSkillId||"qimingclaw-runtime",detail:o.syncError||`${o.title}:${la(o.status)},同步状态 ${o.syncStatus}`,status:o.status,status_label:la(o.status),status_tone:ot(o.status),updated_at:o.updatedAt,conversation_id:o.planId??o.id}})}function Uw(e,a,l){if(Gl(l)){const d=Bw(l);return ry(d,l)}if(!a)return[{id:"event-await-confirmation",time:"待确认",plan_title:"任务设置",task_title:"等待确认今日任务",step_title:"选择职责",detail:"请先确认今天要执行的任务,确认后数字员工会开始执行。",status:"pending",status_label:"待确认",status_tone:"waiting",updated_at:new Date().toISOString(),conversation_id:null}];const o=e.filter(d=>d.selected).map(d=>({id:`event-${d.id}`,time:d.status==="running"?"实时":"待执行",plan_title:d.title,task_title:d.title,step_title:d.status==="running"?"同步 qimingclaw 服务状态":"等待调度",detail:d.status==="running"?`${d.result_text}。快照时间:${(l==null?void 0:l.generatedAt)??"未连接 bridge"}`:"任务已确认,将在后续阶段接入 ACP/MCP 真实执行事件。",status:d.status==="running"?"running":"pending",status_label:d.status==="running"?"执行中":"待执行",status_tone:d.status==="running"?"running":"waiting",updated_at:new Date().toISOString(),conversation_id:d.conversation_id}));return ry(o,l)}function ry(e,a){const l=a==null?void 0:a.sync;if(l&&(l.pending>0||l.failed>0||l.lastSyncAt)){const r=(l.recentFailures||[]).slice(0,3).map(sc).join(";");return[...e,{id:"event-management-sync",time:l.syncing?"实时":"同步",plan_title:"管理端联动",task_title:"同步数字员工本地状态",step_title:l.failed>0?"同步补偿":"outbox 推送",detail:[hd(a),l.lastSyncError?`错误:${l.lastSyncError}`:"",r?`最近失败:${r}`:""].filter(Boolean).join("。"),status:l.failed>0?"failed":l.syncing||l.pending>0?"running":"completed",status_label:l.failed>0?"异常":l.syncing||l.pending>0?"同步中":"已同步",status_tone:l.failed>0?"danger":l.syncing||l.pending>0?"running":"success",updated_at:l.lastSyncAt??new Date().toISOString(),conversation_id:"qimingclaw-management-sync"}]}return e}function Iw(e,a){return(e.some(r=>r.selected)?e.filter(r=>r.selected):e).map(r=>{const o=a.filter(g=>g.conversation_id===r.conversation_id),d=o.filter(g=>g.status==="running").length,p=o.filter(g=>g.status==="completed").length,h=o.filter(g=>ot(g.status)==="danger").length,_=Math.max(0,o.length-d-p-h);return{id:r.id,plan_id:r.id,title:r.title,description:r.summary,selected:r.selected,total_count:Math.max(o.length,1),success_count:p,failure_count:h,running_count:d,waiting_count:o.length===0?1:_,latest_status_label:h>0?"异常":d>0?"执行中":p>0?"已完成":"待执行",latest_status_tone:h>0?"danger":d>0?"running":p>0?"success":"waiting",business_summary:r.result_text,ai_summary:"当前由 qimingclaw 本地运行记录生成。"}})}function Hw(e){return e.map(a=>({id:`run-detail-${a.id}`,time:a.time,task_name:a.task_title,step_name:a.step_title,operation_name:a.plan_title,status_label:a.status_label,status_tone:a.status_tone,business_detail:a.detail,raw_detail:a.detail,updated_at:a.updated_at,conversation_id:a.conversation_id}))}function Rv(e,a){const l=(a==null?void 0:a.uiState)??Nt(),r=l.confirmedDates[e]??null,o=!!r,d=r1(l,e,a),p=Uw(d,o,a),h=Iw(d,p),_=l.reportGeneratedAtByDate[e]??null,g=d.filter(K=>K.selected).length,x=p.filter(K=>K.status==="running").length,S=p.filter(K=>ot(K.status)==="success").length,C=p.filter(K=>ot(K.status)==="danger").length,z=In(a).length+Ct(a).length,w=Gl(a),D=a==null?void 0:a.sync,N=Xw(wi(a)),k=Hw(p),A=Ll(a),O=A.filter(K=>K.requires_human_action||K.status==="degraded"),te=A.filter(K=>K.running).length,I=Wj(a),ie=e1(a),Z=ie.filter(K=>K.can_retry||K.can_skip||K.can_cancel);return{source:"live",date:e,employee:{name:l.profile.name,title:"数字员工",major:"qimingclaw 客户端任务执行",company:l.profile.company,position:l.profile.position,current_status:l.profile.currentStatus,current_status_label:l.profile.currentStatus==="resting"?"休息中":"工作中",motto:"承接客户端任务,调度 ACP 与 MCP 能力完成执行。"},workday:{confirmed:o,confirmed_at:r,current_status:l.profile.currentStatus,current_status_label:l.profile.currentStatus==="resting"?"休息中":"工作中",status_label:w?C>0||O.length>0?"有异常":x>0?"执行中":"已同步":o?"运行中":"待确认",status_tone:w?C>0||O.length>0?"danger":x>0?"running":"success":o?"running":"waiting",summary:w?`当前日期 ${Vo(e)} 已读取 ${z} 条 qimingclaw 本地运行记录,${ey(A)}。`:o?`当前日期 ${Vo(e)} 已确认 ${g} 项任务。`:`当前日期 ${Vo(e)} 待确认今日任务。`,bubble_text:w?O.length>0?`我发现 ${O.length} 项常驻服务需要处理,会把影响到的任务标出来。`:"我已接入 qimingclaw 本地运行记录,会持续展示真实任务、事件和同步状态。":o?"我已接入 qimingclaw 客户端执行链路,正在等待真实 Run/Event 数据接入。":"请先确认今天要执行的任务,我会把它们映射到 qimingclaw 执行链路。"},overview:{title:"今日执行",status_label:w?"本地真实记录":o?"真实数据":"待确认",status_tone:C>0?"danger":w||o?"success":"waiting",metrics:[{label:"已选任务",value:String(g)},{label:"运行记录",value:String(p.length)},{label:"执行中",value:String(x)},{label:"已完成",value:String(S)},{label:"异常",value:String(C)},{label:"待同步",value:String((D==null?void 0:D.pending)??0)},{label:"同步异常",value:String((D==null?void 0:D.failed)??0)},{label:"服务运行",value:`${te}/${A.length}`},{label:"需处理服务",value:String(O.length)},{label:"Plan Agent",value:String(I.length)},{label:"Task Agent",value:String(ie.length)},{label:"可治理任务",value:String(Z.length)}]},managed_services:A,plan_agents:I,task_agents:ie,duties:d,events:p,execution_summaries:h,run_details:k,decisions:Rw(l,e,a),delivery:{headline:w?"qimingclaw 本地记录已接入":o?"qimingclaw 执行链路已接入":"等待确认任务设置",summary:w?"数字员工页面正在读取本地 Plan / Task / Run / Event,并同步展示管理端 outbox 状态。":"当前阶段已将数字员工页面切换到 qimingclaw adapter,并开始读取客户端服务状态。",lines:["已吸收 sgRobot 数字员工 UI 和核心展示模型。",w?`已读取本地记录:Plan ${In(a).length} / Task ${Ct(a).length} / Run ${Hn(a).length} / Event ${rt(a).length}。`:"已建立 qimingclaw workday/plans/tasks/skills API adapter。",Ol(a,"agent","Agent"),Ol(a,"mcp","MCP"),Ol(a,"computerServer","Computer Server"),ey(A),...O.slice(0,3).map(Kj),`Plan Agent:${I.length} 个计划代理,Task Agent:${ie.length} 个任务代理。`,Z[0]?`待治理任务:${Z[0].title},下一步 ${Z[0].next_action}。`:"Task Agent:暂无需要重试、跳过或取消的任务。",hd(a),`活跃会话:${(a==null?void 0:a.sessions.active)??0} / ${(a==null?void 0:a.sessions.total)??0}`],artifacts:[{name:"数字员工运行摘要",status:_?"ready":"pending"},...N.slice(0,4).map(K=>({name:K.name,status:_?"ready":"available",uri:K.uri??null,source_label:K.source_label??null,source_type:K.source_type??null}))]},route_summary:C1(a),diagnostic_summary:m1(a),daily_report:Gw({date:e,state:l,generatedAt:_,selectedCount:g,events:p,executionSummaries:h,runDetails:k,artifactSources:N,successCount:S,failureCount:C,runningCount:x,snapshot:a})}}function Gw(e){const a=`${Vo(e.date)} 飞天数字员工日报`,l=e.generatedAt?`今日已完成数字员工页面到 qimingclaw adapter 的接入,并读取了 qimingclaw 服务状态。${hd(e.snapshot)}。`:"日报将在生成后汇总任务选择、运行明细和后续接入建议。",r={task_count:e.selectedCount,execution_count:e.events.length,success_count:e.successCount,failure_count:e.failureCount,running_count:e.runningCount},o=e.events.map(S=>`${S.time} ${S.task_title}:${S.detail}`),d=e.generatedAt?Vw(e.date,e.generatedAt):null,p=Wm(e.date),h=ep(e.date),_=tp(e.date),g={report_id:d,artifact_id:d?`${d}:artifact:text`:null,html_artifact_id:d?`${d}:artifact:html`:null,pdf_artifact_id:d?`${d}:artifact:pdf`:null,event_id:d?`${d}:event:generated`:null,date:e.date,title:a,report_schedule_time:e.state.reportScheduleTime,status:e.generatedAt?"ready":"not_generated",generated_at:e.generatedAt,generated_by:e.generatedAt?"ai":"fallback",model:"qimingclaw-adapter",source:"qimingclaw",summary:l,totals:r,task_sections:e.executionSummaries,detail_lines:o,artifact_sources:e.artifactSources,download_filename:p,html_filename:h,pdf_filename:_,text_content:null,html_content:null,pdf_available:!!e.generatedAt,pdf_url:null},x=e.generatedAt?Yw(g,e.runDetails,e.artifactSources):null;return{...g,text_content:x,html_content:x?$v(g,x):null}}function Yw(e,a,l){return[e.title||`${e.date} 数字员工日报`,`日期:${e.date}`,`生成时间:${e.generated_at||"暂未生成"}`,`生成来源:${e.generated_by==="ai"?"AI":"qimingclaw adapter"}`,"","## 摘要",e.summary||"暂无摘要。","","## 指标",`任务总数:${e.totals.task_count}`,`执行次数:${e.totals.execution_count}`,`成功次数:${e.totals.success_count}`,`失败次数:${e.totals.failure_count}`,`运行中:${e.totals.running_count??0}`,"","## 任务汇总",...e.task_sections.length>0?e.task_sections.map(r=>`- ${r.title}:${r.latest_status_label},执行 ${r.total_count} 次,成功 ${r.success_count},失败 ${r.failure_count}。${r.ai_summary||r.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...a.length>0?a.map(r=>`- ${r.time||"--:--"} ${r.task_name} / ${r.step_name||r.operation_name||"任务执行"}:${r.status_label},${r.business_detail}`):["暂无运行明细。"],"","## 产物来源",...l.length>0?l.map(r=>`- ${r.name}:${r.source_label||r.source_type||"未知来源"}${r.uri?`,${r.uri}`:""}`):["暂无产物来源。"],"","## 详情",...(e.detail_lines??[]).length>0?e.detail_lines:["暂无详情。"]].join(`
+ */const ka=Ve("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);function lj(){return{selectedDutyIdsByDate:{},confirmedDates:{},reportScheduleTime:"18:00",reportGeneratedAtByDate:{},decisionResultsByDate:{},profile:{name:"飞天数字员工",company:"qimingclaw 客户端",position:"客户端任务执行员",currentStatus:"working"}}}async function Cb(){var e,a,l;try{return await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getUiState)==null?void 0:l.call(a))??null}catch{return null}}async function Nb(e,a={}){var r,o;const l=(r=window.QimingClawBridge)==null?void 0:r.digital;if(!(l!=null&&l.saveUiState))return null;try{const d=await((o=l.getUiState)==null?void 0:o.call(l).catch(()=>null))??null,p={...lj(),...d??{},...e};return await l.saveUiState({state:p,...a})}catch{return null}}const Wr={finance:{id:"finance",labelKey:"console.role.finance",density:"compact",tone:"strict",contentPriority:["audit","sources","exactNumbers"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:3e4,cssVars:{"--role-accent":"#2563eb","--role-accent-soft":"rgba(37,99,235,0.12)","--role-surface-tint":"rgba(248,250,252,0.78)","--role-border":"rgba(37,99,235,0.22)","--role-focus-ring":"#1d4ed8"}},engineering:{id:"engineering",labelKey:"console.role.engineering",density:"compact",tone:"technical",contentPriority:["alarms","timestamps","reliability"],motion:{defaultLevel:"none",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:15e3,cssVars:{"--role-accent":"#0f766e","--role-accent-soft":"rgba(15,118,110,0.12)","--role-surface-tint":"rgba(240,253,250,0.72)","--role-border":"rgba(15,118,110,0.24)","--role-focus-ring":"#0f766e"}},executive:{id:"executive",labelKey:"console.role.executive",density:"presentation",tone:"executive",contentPriority:["kpi","approvals","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!0},staleDataThresholdMs:6e4,cssVars:{"--role-accent":"#334155","--role-accent-soft":"rgba(51,65,85,0.10)","--role-surface-tint":"rgba(248,250,252,0.82)","--role-border":"rgba(51,65,85,0.20)","--role-focus-ring":"#475569"}},hr:{id:"hr",labelKey:"console.role.hr",density:"balanced",tone:"warm-professional",contentPriority:["queues","timestamps","approvals"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#7c3aed","--role-accent-soft":"rgba(124,58,237,0.10)","--role-surface-tint":"rgba(250,245,255,0.72)","--role-border":"rgba(124,58,237,0.20)","--role-focus-ring":"#6d28d9"}},sales:{id:"sales",labelKey:"console.role.sales",density:"balanced",tone:"warm-professional",contentPriority:["pipeline","sources","exactNumbers"],motion:{defaultLevel:"minimal",allowParticles:!1,allowCelebrations:!1,allowDecorativeBadges:!1},actionPolicy:{requireConfirmationForDestructive:!0,showReversalHint:!0,preferOneClickApproval:!1},staleDataThresholdMs:45e3,cssVars:{"--role-accent":"#b45309","--role-accent-soft":"rgba(180,83,9,0.10)","--role-surface-tint":"rgba(255,251,235,0.70)","--role-border":"rgba(180,83,9,0.20)","--role-focus-ring":"#92400e"}}},Eb=v.createContext(null),cm="qimingclaw:digital-console-role",om="sgrobot-console-role";function ij(){try{const e=localStorage.getItem(cm)??localStorage.getItem(om);if(e&&e in Wr)return e}catch{}return"sales"}function sj({children:e}){const[a,l]=v.useState(ij);v.useEffect(()=>{let d=!1;return Cb().then(p=>{if(d)return;const h=p==null?void 0:p.consoleRole;if(h&&h in Wr){l(h);try{localStorage.setItem(cm,h),localStorage.removeItem(om)}catch{}}}),()=>{d=!0}},[]);const r=v.useCallback(d=>{l(d);try{localStorage.setItem(cm,d),localStorage.removeItem(om)}catch{}Nb({consoleRole:d},{action:"update_console_role",metadata:{role:d}})},[]),o=Wr[a];return s.jsx(Eb.Provider,{value:{role:a,profile:o,setRole:r},children:s.jsx("div",{style:o.cssVars,"data-role":a,children:e})})}function rj(){const e=v.useContext(Eb);if(!e)throw new Error("useRole must be used within RoleProvider");return e}const Ab="qimingclaw_digital_token",Tb="zeroclaw_token";function cj(){try{return localStorage.getItem(Ab)??localStorage.getItem(Tb)}catch{return null}}function oj(){try{localStorage.removeItem(Ab),localStorage.removeItem(Tb)}catch{}}const dj=".",uj=(()=>{var a;return((a=window.__QIMINGCLAW_DIGITAL_API_BASE__)==null?void 0:a.replace(/\/+$/,""))??""})(),fj=()=>"",Rb="qimingclaw:digital-employee-adapter-state",mj="18:00",pj=["info","warn","error","action"],_j=["user_message","need_input","need_approval","task_progress","task_failed","task_finished","confirmation_pending","confirmation_resolved"],$b=["comment","delegate","mark_timeout","mark_risk","clear_risk","decision"],hj=["normal","medium","high","critical"],gj=[{skill_id:"qimingclaw-acp-session",name:"ACP 会话执行",version:"1.0.0",enabled:!0,description:"通过 qimingclaw 的 ACP 引擎创建会话、执行任务并跟踪结果。",category:"执行",capability_level:"core"},{skill_id:"qimingclaw-mcp-tools",name:"MCP 工具编排",version:"1.0.0",enabled:!0,description:"读取已配置 MCP 服务与工具,作为数字员工的工具能力池。",category:"工具",capability_level:"core"},{skill_id:"qimingclaw-computer-control",name:"客户端电脑控制",version:"1.0.0",enabled:!0,description:"承接 /computer/chat 执行入口,面向远程任务和本地自动化操作。",category:"桌面",capability_level:"specialized"},{skill_id:"qimingclaw-artifact-report",name:"产物与日报整理",version:"1.0.0",enabled:!0,description:"把执行记录、关键产物和异常汇总成数字员工日报。",category:"汇报",capability_level:"standard"}],yj=[{plan_id:"qimingclaw-client-readiness",title:"客户端运行状态巡检",objective:"确认 qimingclaw 客户端、Agent、MCP 和远程接入能力是否处于可执行状态。",status:"running",created_at:Pa(9,0),steps:[{step_id:"agent-status",title:"检查 Agent 引擎状态",depends_on:[],preferred_skills:["qimingclaw-acp-session"],tasks:[{task_id:"task-agent-status",title:"读取 Agent 服务状态",status:"running"}]},{step_id:"mcp-status",title:"检查 MCP 工具能力",depends_on:["agent-status"],preferred_skills:["qimingclaw-mcp-tools"],tasks:[{task_id:"task-mcp-status",title:"同步 MCP 工具列表",status:"pending"}]}]},{plan_id:"qimingclaw-remote-task-ingress",title:"远程任务接入准备",objective:"检查 lanproxy、computer server 和文件服务,为后端下发数字员工任务做准备。",status:"pending",created_at:Pa(9,30),steps:[{step_id:"computer-server",title:"确认 /computer/chat 执行入口",depends_on:[],preferred_skills:["qimingclaw-computer-control"],tasks:[{task_id:"task-computer-server",title:"检查电脑控制服务",status:"pending"}]},{step_id:"file-artifact",title:"准备产物回传目录",depends_on:["computer-server"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-file-artifact",title:"整理执行产物通道",status:"pending"}]}]},{plan_id:"qimingclaw-daily-report",title:"数字员工日报生成",objective:"汇总今日执行记录、服务状态和待介入事项,生成面向业务的日报。",status:"pending",created_at:Pa(17,30),steps:[{step_id:"collect-events",title:"汇总运行事件",depends_on:[],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-collect-events",title:"整理今日运行明细",status:"pending"}]},{step_id:"write-report",title:"生成日报摘要",depends_on:["collect-events"],preferred_skills:["qimingclaw-artifact-report"],tasks:[{task_id:"task-write-report",title:"生成数字员工日报",status:"pending"}]}]}],td={"qimingclaw-client-readiness":{expression:"0 9 * * *",nextRun:Pa(9,0),scheduleText:"已定时 09:00 执行"},"qimingclaw-remote-task-ingress":{expression:"30 9 * * *",nextRun:Pa(9,30),scheduleText:"已定时 09:30 执行"},"qimingclaw-daily-report":{expression:"0 18 * * *",nextRun:Pa(18,0),scheduleText:"已定时 18:00 执行"}},We="qimingclaw-runtime-projection";function bj(){return window.__QIMINGCLAW_EMBEDDED_DIGITAL__===!0}async function vj(e,a={}){var P,q,ce;if(!bj())return;const l=new URL(e,window.location.origin),r=(a.method||"GET").toUpperCase(),o=l.pathname;if(r==="GET"&&o==="/api/digital-employee/workday")return Rv(l.searchParams.get("date")||ac(),await fe());if(r==="POST"&&o==="/api/digital-employee/workday/actions")return await Jw(an(a.body),await fe());const d=o.match(/^\/api\/(?:digital-employee\/)?managed-services\/([^/]+)\/restart$/);if(r==="POST"&&d)return await Yb(decodeURIComponent(d[1]||""),Qt(a.body));const p=o.match(/^\/api\/digital-employee\/daily-reports\/([^/]+)$/);if(r==="GET"&&p){const R=decodeURIComponent(p[1]||"");return{item:mm(await fe()).find(ne=>u(ne.report_id)===R||u(ne.artifact_id)===R)??null,source:We}}if(r==="GET"&&o==="/api/digital-employee/daily-reports"){const R=nw(mm(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/daily-reports/delivery")return await Pw(an(a.body));if(r==="GET"&&o==="/api/digital-employee/skill-call-audits"){const R=Z1(ov(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/memory-governance"){const R=Bj(Lj(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/memory-governance/status/batch")return await Uj(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/skill-audit-workbench"){const R=L1(q1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/ops-workbench"){const R=H1(dv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/ops-workbench/actions/batch")return await K1(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/notifications/workbench"){const R=G1(U1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="POST"&&o==="/api/digital-employee/notifications/actions/batch")return await Q1(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/daily-reports/workbench"){const R=Y1(I1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/artifact-access-events"){const R=J1(fv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const h=o.match(/^\/api\/(?:digital-employee\/artifacts|artifact)\/([^/]+)\/access$/);if(r==="POST"&&h){const R=decodeURIComponent(h[1]||"");return await Vj(R,Qt(a.body))}if(r==="POST"&&o==="/api/digital-employee/artifacts/retention/batch")return await Zj(Qt(a.body),await fe());const _=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/retention$/);if(r==="POST"&&_){const R=decodeURIComponent(_[1]||"");return await Kb(R,Qt(a.body),await fe())}const g=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/cleanup$/);if(r==="POST"&&g){const R=decodeURIComponent(g[1]||"");return await Jj(R,Qt(a.body),await fe())}const x=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)\/versions$/);if(r==="GET"&&x){const R=decodeURIComponent(x[1]||""),M=await fe();return{items:iv(M,R),source:We}}const S=o.match(/^\/api\/digital-employee\/artifacts\/([^/]+)$/);if(r==="GET"&&S){const R=decodeURIComponent(S[1]||""),M=await fe();return{item:Qm(M,R),source:We}}const C=o.match(/^\/api\/digital-employee\/plans\/([^/]+)$/);if(r==="GET"&&C){const R=decodeURIComponent(C[1]||"");return{item:av(await fe()).find(ne=>u(ne.plan_id)===R||u(ne.remote_id)===R)??null,source:We}}const z=o.match(/^\/api\/digital-employee\/approvals\/([^/]+)\/actions$/);if(r==="POST"&&z){const R=decodeURIComponent(z[1]||"");return await Fj(R,Qt(a.body),await fe())}const w=o.match(/^\/api\/approval\/([^/]+)\/conflict\/resolve$/);if(r==="POST"&&w){const R=decodeURIComponent(w[1]||"");return await Qb(R,Qt(a.body),await fe())}if(r==="POST"&&o==="/api/approval/conflicts/resolve/batch")return await Pj(Qt(a.body),await fe());if(r==="GET"&&o==="/api/approval/subscriptions")return cd(xa(await fe()));if(r==="PATCH"&&o==="/api/approval/subscriptions")return await pw(an(a.body),await fe());if(r==="GET"&&o==="/api/plan-step/dispatch-policy")return Bl(xa(await fe()));if(r==="GET"&&o==="/api/risk-approval/policy")return Cs(xa(await fe()));if(r==="PATCH"&&o==="/api/risk-approval/policy")return await hw(an(a.body),await fe());if(r==="POST"&&o==="/api/plan-step/dispatch-policy/pull")return await wv(await fe());if(r==="PATCH"&&o==="/api/plan-step/dispatch-policy")return await _w(an(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/plan-steps"){const R=um(kd(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/plan-step-graph"){const R=um(Pb(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/approval-history"){const R=cv(rv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}if(r==="GET"&&o==="/api/digital-employee/artifact-groups"){const R=sa(lv(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const D=o.match(/^\/api\/digital-employee\/(plans|plan-steps|plan-step-graph|tasks|runs|events|artifacts|artifact-groups|approvals|approval-history|route-decisions|notifications|audits)$/);if(r==="GET"&&D)return y1(D[1],await fe(),l.searchParams);if(r==="GET"&&o==="/api/route-decisions")return await rC(Number(l.searchParams.get("limit"))||80);if(r==="GET"&&o==="/api/route-decisions/interventions")return await wd(Number(l.searchParams.get("limit"))||80);if(r==="POST"&&o==="/api/route-decisions/interventions/batch")return await cC(Qt(a.body),await fe());if(r==="GET"&&o==="/api/digital-employee/interventions/workbench"){const R=w1(j1(await fe()),l.searchParams);return{...pn(R,l.searchParams),source:We}}const N=o.match(/^\/api\/route-decisions\/([^/]+)\/intervention$/);if(r==="POST"&&N)return await Dv(decodeURIComponent(N[1]||""),an(a.body),await fe());if(r==="POST"&&o==="/api/ingress/route")return await fC(an(a.body),await fe());if(r==="POST"&&o==="/api/governance/command")return await Kl(an(a.body),await fe());if(r==="GET"&&o==="/api/scheduler/jobs")return{jobs:ld(await fe())};if(r==="GET"&&o==="/api/cron")return{jobs:ld(await fe())};if(r==="POST"&&o==="/api/cron")return await Hj(an(a.body),await fe());if(r==="GET"&&o==="/api/cron/settings")return await Dj();if(r==="PATCH"&&o==="/api/cron/settings"){const R=an(a.body);return await zj(R)}if(r==="POST"&&o==="/api/cron/check"){const R=await((ce=(q=(P=window.QimingClawBridge)==null?void 0:P.digital)==null?void 0:q.runSchedulerCheck)==null?void 0:ce.call(q));return{ok:!0,activated:(R==null?void 0:R.activated)??0,...R}}const k=o.match(/^\/api\/cron\/([^/]+)\/runs$/);if(r==="GET"&&k)return{runs:await Yj(decodeURIComponent(k[1]||""),Number(l.searchParams.get("limit"))||20)};const A=o.match(/^\/api\/cron\/([^/]+)$/);if((r==="PATCH"||r==="DELETE")&&A){const R=decodeURIComponent(A[1]||"");if(r==="DELETE"){await Ub("delete_schedule",R,{},await fe());return}return await Gj(R,an(a.body),await fe())}if(r==="GET"&&o==="/api/debug/plans")return{plans:Pm(l.searchParams.get("q"),await fe())};if(r==="GET"&&o==="/api/debug/tasks"){const R=l.searchParams.get("plan_id");return Rs(R,await fe())}if(r==="GET"&&o==="/api/debug/store")return u1(await fe());if(r==="GET"&&o==="/api/dashboard")return f1(await fe());if((r==="GET"||r==="POST")&&o==="/api/doctor")return vd(await fe());if(r==="GET"&&o==="/api/cost")return{cost:Fb(await fe())};if(r==="GET"&&o==="/api/audit")return{events:Gm(await fe(),l.searchParams)};if(r==="GET"&&o==="/api/artifact")return{artifacts:wi(await fe())};const O=o.match(/^\/api\/approval\/([^/]+)\/timeline$/);if(r==="GET"&&O)return gv(decodeURIComponent(O[1]||""),await fe());if(r==="GET"&&o==="/api/notifications")return fw(l.searchParams.get("status"),await fe());if(r==="GET"&&o==="/api/notifications/preferences")return Es(xa(await fe()));if(r==="PATCH"&&o==="/api/notifications/preferences")return await mw(an(a.body),await fe());if(r==="POST"&&o==="/api/notifications/updates/pull")return await Ob();if(r==="POST"&&o==="/api/digital-employee/admin/actions/pull")return await Nj();if(r==="POST"&&o==="/api/notifications/desktop")return await Ej(Qt(a.body));if(r==="GET"&&o==="/api/notifications/desktop/status")return await Aj();if(r==="POST"&&o==="/api/notifications/desktop/settings/open")return await qb();if(r==="GET"&&o==="/api/notifications/unread-count"){const R=await fe();return{count:jd(R,xa(R)).filter(M=>M.status==="unread").length}}const te=o.match(/^\/api\/notifications\/([^/]+)\/(read|dismiss|reply)$/);if(r==="POST"&&te)return await Cv(decodeURIComponent(te[1]||""),te[2],Qt(a.body),await fe());if(r==="GET"&&o==="/api/memory")return{entries:await Mj(l.searchParams.get("query"),l.searchParams.get("category"))};if(r==="POST"&&o==="/api/memory")return await Oj(an(a.body));const I=o.match(/^\/api\/memory\/([^/]+)$/);if(r==="DELETE"&&I){await qj(decodeURIComponent(I[1]||""));return}if(r==="GET"&&o.startsWith("/api/debug/plan/")&&o.endsWith("/flow"))return Ov(decodeURIComponent(o.split("/")[4]||""),await fe());if(r==="GET"&&o.startsWith("/api/debug/task/")&&o.endsWith("/flow"))return CC(decodeURIComponent(o.split("/")[4]||""),await fe());const ie=o.match(/^\/api\/digital-employee\/plans\/([^/]+)\/dispatch-ready-steps$/);if(r==="POST"&&ie)return await NC(decodeURIComponent(ie[1]||""),await fe());if(r==="POST"&&o.startsWith("/api/debug/plan/")&&o.endsWith("/dispatch"))return await qv(decodeURIComponent(o.split("/")[4]||""),await fe());const Z=o.match(/^\/api\/debug\/plan\/([^/]+)\/([^/]+)$/);if(r==="POST"&&Z)return await cy(decodeURIComponent(Z[1]||""),decodeURIComponent(Z[2]||""),await fe(),Qt(a.body));const K=o.match(/^\/api\/plan\/([^/]+)\/submit$/);if(r==="POST"&&K)return await cy(decodeURIComponent(K[1]||""),"submit",await fe(),Qt(a.body));if(r==="GET"&&o.startsWith("/api/plan/")&&o.endsWith("/revisions"))return sC(decodeURIComponent(o.split("/")[3]||""),await fe());const pe=o.match(/^\/api\/task\/([^/]+)\/([^/]+)$/);if(r==="POST"&&pe)return await aC(decodeURIComponent(pe[1]||""),decodeURIComponent(pe[2]||""),await fe(),Qt(a.body));if(r==="GET"&&o.startsWith("/api/plan/")&&o.endsWith("/messages"))return{messages:EC(decodeURIComponent(o.split("/")[3]||""),await fe())};if(r==="GET"&&o==="/api/skill")return{skills:await Sj()};if(r==="POST"&&o==="/api/skill/policies/pull")return await wj();if(r==="POST"&&o==="/api/risk-approval/policy/pull")return await zb();if(r==="POST"&&o==="/api/route-decision/policy/pull")return await Mb();if(r==="POST"&&o==="/api/approval/updates/pull")return await Cj();if(r==="POST"&&o.startsWith("/api/skill/")&&o.endsWith("/enabled")){const R=decodeURIComponent(o.split("/")[3]||""),M=an(a.body);return await jj(R,M.enabled??!0)}}function Db(){return{selectedDutyIdsByDate:{},confirmedDates:{},reportScheduleTime:mj,reportGeneratedAtByDate:{},decisionResultsByDate:{},notificationStateById:{},notificationPreferences:vv(),approvalSubscriptionPreferences:xv(),planStepDispatchPolicy:kv(),riskApprovalPolicy:Sv(),routeDecisionPolicy:rd(),opsWorkbenchStateById:{},dailyReportWorkbenchStateById:{},consoleRole:"sales",rolePreferences:{},profile:{name:"飞天数字员工",company:"qimingclaw 客户端",position:"客户端任务执行员",currentStatus:"working"}}}function Nt(){try{const e=window.localStorage.getItem(Rb);return Ul(e?JSON.parse(e):{})}catch{return Db()}}function Ul(e){return{...Db(),...e,notificationPreferences:Es(e),approvalSubscriptionPreferences:cd(e),planStepDispatchPolicy:Bl(e),riskApprovalPolicy:Cs(e),routeDecisionPolicy:Ns(e),memoryGovernanceById:e.memoryGovernanceById??{},opsWorkbenchStateById:e.opsWorkbenchStateById??{},dailyReportWorkbenchStateById:e.dailyReportWorkbenchStateById??{}}}function xj(e){window.localStorage.setItem(Rb,JSON.stringify(e))}async function fe(){var e,a,l,r,o,d,p,h,_,g,x,S;try{const C=await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getSnapshot)==null?void 0:l.call(a))??null;if(!C)return null;const[z,w,D,N]=await Promise.all([((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.getSyncStatus)==null?void 0:d.call(o).catch(()=>null))??null,((_=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.getRuntimeRecords)==null?void 0:_.call(h).catch(()=>null))??null,yn(),((S=(x=(g=window.QimingClawBridge)==null?void 0:g.digital)==null?void 0:x.getPlanTemplates)==null?void 0:S.call(x).catch(()=>null))??null]);return{...C,sync:z,runtime:w,uiState:D,planTemplates:(N==null?void 0:N.templates)??[]}}catch{return null}}async function yn(){var e,a,l;try{return await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getUiState)==null?void 0:l.call(a))??null}catch{return null}}async function kj(){var e,a,l;try{const r=await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getSkillCapabilities)==null?void 0:l.call(a))??null;return Array.isArray(r==null?void 0:r.skills)?r.skills:[]}catch{return[]}}async function Sj(){const e=await kj();return $j([...e,...gj])}async function jj(e,a){var r;const l=(r=window.QimingClawBridge)==null?void 0:r.digital;if(!(l!=null&&l.setSkillEnabled))return{ok:!1,skill_id:e,enabled:a,error:"qimingclaw_bridge_unavailable"};try{const o=await l.setSkillEnabled(e,a);return{ok:(o==null?void 0:o.ok)!==!1,skill_id:(o==null?void 0:o.skill_id)??e,enabled:(o==null?void 0:o.enabled)??a,...o!=null&&o.error?{error:o.error}:{}}}catch(o){return{ok:!1,skill_id:e,enabled:a,error:o instanceof Error?o.message:String(o)}}}async function wj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullSkillPolicies))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullSkillPolicies();return{ok:(l==null?void 0:l.ok)!==!1,...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function zb(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullRiskApprovalPolicy))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullRiskApprovalPolicy();return{ok:(l==null?void 0:l.ok)!==!1,...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Mb(){var l;const e=Ns(await yn()??Nt()),a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.pullRouteDecisionPolicy))return{ok:!1,policy:e,error:"qimingclaw_bridge_unavailable"};try{const r=await a.pullRouteDecisionPolicy();return{ok:(r==null?void 0:r.ok)!==!1,skipped:r==null?void 0:r.skipped,endpoint:(r==null?void 0:r.endpoint)??null,pulled_at:(r==null?void 0:r.pulled_at)??null,policy:Ns({routeDecisionPolicy:(r==null?void 0:r.policy)??e}),error:(r==null?void 0:r.error)??null}}catch(r){return{ok:!1,policy:e,error:r instanceof Error?r.message:String(r)}}}async function Cj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullApprovalUpdates))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullApprovalUpdates();return(l==null?void 0:l.ok)!==!1&&await Tj(await fe()),{ok:(l==null?void 0:l.ok)!==!1,applied:Number((l==null?void 0:l.applied)??0),ignored:Number((l==null?void 0:l.ignored)??0),conflicted:Number((l==null?void 0:l.conflicted)??0),...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Ob(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullNotificationUpdates))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullNotificationUpdates();return{ok:(l==null?void 0:l.ok)!==!1,applied:Number((l==null?void 0:l.applied)??0),ignored:Number((l==null?void 0:l.ignored)??0),...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Nj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.pullAdminActions))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const l=await e.pullAdminActions();return{ok:(l==null?void 0:l.ok)!==!1,applied:Number((l==null?void 0:l.applied)??0),rejected:Number((l==null?void 0:l.rejected)??0),failed:Number((l==null?void 0:l.failed)??0),ignored:Number((l==null?void 0:l.ignored)??0),...l!=null&&l.skipped?{skipped:!0}:{},...l!=null&&l.error?{error:l.error}:{}}}catch(l){return{ok:!1,error:l instanceof Error?l.message:String(l)}}}async function Ej(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.showDesktopNotification))return{ok:!1,shown:!1,reason:"qimingclaw_bridge_unavailable"};try{const r=await a.showDesktopNotification(e);return{ok:(r==null?void 0:r.ok)!==!1,shown:(r==null?void 0:r.shown)===!0,...r!=null&&r.reason?{reason:r.reason}:{},...r!=null&&r.error?{error:r.error}:{}}}catch(r){return{ok:!1,shown:!1,error:r instanceof Error?r.message:String(r)}}}async function Aj(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.getDesktopNotificationStatus))return{supported:!1,platform:"unknown",can_open_settings:!1,reason:"qimingclaw_bridge_unavailable"};try{const l=await e.getDesktopNotificationStatus();return{supported:(l==null?void 0:l.supported)===!0,platform:u(l==null?void 0:l.platform)||"unknown",can_open_settings:(l==null?void 0:l.can_open_settings)===!0,reason:u(l==null?void 0:l.reason)||null}}catch(l){return{supported:!1,platform:"unknown",can_open_settings:!1,reason:l instanceof Error?l.message:String(l)}}}async function qb(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.openDesktopNotificationSettings))return{success:!1,reason:"qimingclaw_bridge_unavailable"};try{const l=await e.openDesktopNotificationSettings();return{success:(l==null?void 0:l.success)===!0,platform:u(l==null?void 0:l.platform)||null,reason:u(l==null?void 0:l.reason)||null,error:u(l==null?void 0:l.error)||null}}catch(l){return{success:!1,error:l instanceof Error?l.message:String(l)}}}async function Tj(e){const l=(await wd(120)).interventions.filter(r=>r.intervention_status==="approved"&&r.approval_id&&!r.resolved_at).slice(0,5);for(const r of l)await Dv(r.route_decision_id,{approval_id:r.approval_id,decision:"approved",actor:"management-api"},e).catch(o=>{console.warn("[qimingclawAdapter] auto route intervention resolution failed:",o)})}async function Il(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.evaluateRiskPolicy))return{ok:!0,decision:"allowed",action_kind:e.actionKind||"unknown_action",risk_level:e.riskLevel||"normal",reason_codes:["qimingclaw_bridge_unavailable"],status:"allowed"};try{return await a.evaluateRiskPolicy(e)}catch(r){return{ok:!0,decision:"allowed",action_kind:e.actionKind||"unknown_action",risk_level:e.riskLevel||"normal",reason_codes:["risk_policy_evaluation_failed"],status:"allowed",error:r instanceof Error?r.message:String(r)}}}async function Rj(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.evaluateRouteDecisionPolicy))return{ok:!0,decision:"allowed",status:"allowed",policy_result:"accepted",route_kind:e.routeKind||"ChatOnly",intent_kind:od(e.intentKind),reason_codes:["qimingclaw_bridge_unavailable"],policy_source:"local",policy:rd()};try{return await a.evaluateRouteDecisionPolicy(e)}catch(r){return{ok:!0,decision:"allowed",status:"allowed",policy_result:"accepted",route_kind:e.routeKind||"ChatOnly",intent_kind:od(e.intentKind),reason_codes:["route_policy_evaluation_failed"],policy_source:"local",policy:rd(),error:r instanceof Error?r.message:String(r)}}}function Hl(e){return e.decision==="allowed"?null:{ok:!1,status:e.decision,decision:e.decision,action_kind:e.action_kind,risk_level:e.risk_level,reason_codes:e.reason_codes??[],approval_id:e.approval_id??null,event_id:e.event_id??null,error:e.decision==="approval_required"?"risk_approval_required":"risk_policy_rejected"}}function $j(e){const a=new Set,l=[];for(const r of e){const o=typeof r.skill_id=="string"?r.skill_id.trim():"";!o||a.has(o)||(a.add(o),l.push({...r,skill_id:o}))}return l}async function Gn(e,a,l,r){var o,d,p;xj(e);try{return await((p=(d=(o=window.QimingClawBridge)==null?void 0:o.digital)==null?void 0:d.saveUiState)==null?void 0:p.call(d,{state:e,action:a,date:l,metadata:r}))??e}catch{return e}}async function va(e,a){var l,r,o,d,p,h,_,g,x,S,C,z,w,D,N,k,A,O,te,I;try{await((I=(r=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:r.recordGovernanceCommand)==null?void 0:I.call(r,{commandKind:e.command_kind,commandId:a.command_id,correlationId:a.correlation_id,planId:je((o=a.result)==null?void 0:o.plan_id)||je((d=e.context_refs)==null?void 0:d.plan_id)||je((p=e.payload)==null?void 0:p.plan_id)||null,taskId:je((h=a.result)==null?void 0:h.task_id)||je((_=e.context_refs)==null?void 0:_.task_id)||je((g=e.payload)==null?void 0:g.task_id)||null,runId:je((x=a.result)==null?void 0:x.run_id)||je((S=e.context_refs)==null?void 0:S.run_id)||je((C=e.payload)==null?void 0:C.run_id)||je((z=e.payload)==null?void 0:z.latest_run_id)||null,stepId:je((w=a.result)==null?void 0:w.step_id)||je((D=e.context_refs)==null?void 0:D.step_id)||je((N=e.payload)==null?void 0:N.step_id)||je((k=e.payload)==null?void 0:k.stepId)||null,scheduleId:je((A=a.result)==null?void 0:A.schedule_id)||je((O=e.context_refs)==null?void 0:O.schedule_id)||je((te=e.payload)==null?void 0:te.schedule_id)||null,accepted:a.accepted,message:a.message,error:a.error??null,payload:e.payload??null,result:a.result??null}))}catch{}}async function Dj(){var e,a,l;try{return await((l=(a=(e=window.QimingClawBridge)==null?void 0:e.digital)==null?void 0:a.getCronSettings)==null?void 0:l.call(a))??nd()}catch{return nd()}}async function zj(e){var a,l,r;try{return await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.saveCronSettings)==null?void 0:r.call(l,e))??{...nd(),...e}}catch{return{...nd(),...e}}}async function Mj(e,a){var l,r,o;try{return(await((o=(r=(l=window.QimingClawBridge)==null?void 0:l.digital)==null?void 0:r.listMemories)==null?void 0:o.call(r,{query:e||void 0,category:a||void 0,limit:300}))??[]).map(Lb)}catch{return[]}}async function Oj(e){var d,p,h;const a=je(e.key),l=je(e.content??e.text),r=je(e.category)||"fact";if(!l)return{ok:!0,entry:null};const o=await((h=(p=(d=window.QimingClawBridge)==null?void 0:d.digital)==null?void 0:p.addMemory)==null?void 0:h.call(p,{key:a||void 0,content:l,category:r,source:"qimingclaw-digital-page",payload:{source:"embedded-memory-api",key:a||null}}))??null;return{ok:!0,entry:o?Lb(o):null}}async function qj(e){var a,l,r;try{await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.deleteMemory)==null?void 0:r.call(l,e))}catch{}}function Lb(e){return{id:e.id,key:e.key||e.id,content:e.content,category:e.category||"fact",timestamp:e.updatedAt||e.createdAt||new Date().toISOString(),session_id:e.sessionId??null,score:typeof e.score=="number"?e.score:null}}function Lj(e){var d;const l=((e==null?void 0:e.uiState)??Nt()).memoryGovernanceById??{},r=((d=e==null?void 0:e.runtime)==null?void 0:d.memories)??[],o=new Map;return r.forEach(p=>{const h=Gf(p);o.set(h,[...o.get(h)??[],p])}),r.map(p=>{const h=l[p.id]??{},_=(o.get(Gf(p))??[]).map(x=>x.id).filter(x=>x!==p.id),g=u(h.governance_status)||(p.deletedAt?"archived":p.status||"active");return{memory_id:p.id,remote_id:p.remoteId??null,key:p.key||p.id,category:p.category||"fact",source:p.source||null,source_path:p.sourcePath??null,status:g,governance_status:g,last_governance_action:u(h.last_governance_action)||null,last_reviewed_at:u(h.last_reviewed_at)||null,actor:u(h.actor)||null,reason:u(h.reason)||null,content_preview:Bb(p.content),score:typeof p.score=="number"?p.score:null,session_id:p.sessionId??null,sync_status:p.syncStatus??null,sync_error:p.syncError??null,merge_candidate_count:_.length,duplicate_memory_ids:_,latest_memory_id:Ij(o.get(Gf(p))??[]),entity_type:"memory",entity_id:p.id,created_at:p.createdAt,updated_at:u(h.updated_at)||p.updatedAt||p.createdAt,payload:sd("memory_governance",oe(p.payload)??{content_length:p.content.length}),source_label:"qimingclaw-memory"}}).sort((p,h)=>Lt(h).localeCompare(Lt(p))||u(p.memory_id).localeCompare(u(h.memory_id)))}function Bj(e,a){const l=u(a.get("q")??a.get("query")),r=u(a.get("category")),o=u(a.get("status")),d=u(a.get("entity_id"));return e.filter(p=>!l||[p.key,p.content_preview,p.source].some(h=>u(h).toLowerCase().includes(l.toLowerCase()))).filter(p=>!r||u(p.category)===r).filter(p=>!o||u(p.governance_status)===o||u(p.status)===o).filter(p=>!d||Jm(p).includes(d)||u(p.memory_id)===d)}async function Uj(e,a){var g;const l=u(e.action)||"mark_reviewed";if(!["archive","restore","mark_reviewed"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_memory_governance_action"]};const r=Le([...we(e.memory_ids),...we(e.memoryIds)]).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["memory_ids_required"]};const o=new Set((((g=a==null?void 0:a.runtime)==null?void 0:g.memories)??[]).map(x=>x.id)),d=(a==null?void 0:a.uiState)??await yn()??Nt();d.memoryGovernanceById=d.memoryGovernanceById??{};const p=new Date().toISOString(),h=r.map(x=>{var S,C,z,w;return o.has(x)?(d.memoryGovernanceById[x]={governance_status:l==="archive"?"archived":l==="restore"?"active":((C=(S=d.memoryGovernanceById)==null?void 0:S[x])==null?void 0:C.governance_status)??"reviewed",last_governance_action:l,last_reviewed_at:l==="mark_reviewed"?p:((w=(z=d.memoryGovernanceById)==null?void 0:z[x])==null?void 0:w.last_reviewed_at)??null,actor:u(e.actor)||"digital_employee_operator",reason:u(e.reason)||null,updated_at:p},{memory_id:x,ok:!0,status:"recorded",action:l}):{memory_id:x,ok:!1,status:"rejected",reason_codes:["memory_not_found"]}});await Gn(d,"memory_governance_status_batch",ac(),{action:l,memory_ids:r,reason:u(e.reason)||null});const _=h.filter(x=>x.ok===!0).length;return{ok:_>0,action:l,total:r.length,recorded:_,rejected:r.length-_,items:h,reason_codes:Le(h.flatMap(x=>we(x.reason_codes)))}}function Gf(e){return`${e.category||"fact"}:${e.key||"memory"}:${Bb(e.content).toLowerCase()}`}function Bb(e){return String(e||"").replace(/\s+/g," ").trim().slice(0,120)}function Ij(e){var a;return((a=e.slice().sort((l,r)=>u(r.updatedAt).localeCompare(u(l.updatedAt)))[0])==null?void 0:a.id)??null}function nd(){return{enabled:!0,catch_up_on_startup:!0,max_run_history:100,max_catch_up_runs:5,max_concurrent_schedule_runs:1}}async function Hj(e,a){const l=Date.now(),r=je(e.id)||je(e.schedule_id)||`cron-${mt(je(e.name)||"job")}-${l}`;await Kl({command_kind:"create_schedule",context_refs:{schedule_id:r,plan_id:je(e.plan_id)||je(e.template_id)||void 0},payload:{...e,schedule_id:r,cron_expr:je(e.schedule)||je(e.cron_expr)},correlation_id:`qimingclaw-cron-create-${l}`,idempotency_key:`qimingclaw-cron-create-${r}-${l}`},a);const o=await fe();return{status:"created",job:ld(o).find(d=>d.id===r)??Ib(r,e)}}async function Gj(e,a,l){await Ub("update_schedule",e,a,l);const r=await fe();return{status:"updated",job:ld(r).find(o=>o.id===e)??Ib(e,a)}}async function Ub(e,a,l,r){const o=Date.now();return Kl({command_kind:e,context_refs:{schedule_id:a,plan_id:je(l.plan_id)||je(l.template_id)||void 0},payload:{...l,schedule_id:a,cron_expr:je(l.schedule)||je(l.cron_expr)},correlation_id:`qimingclaw-cron-${e}-${o}`,idempotency_key:`qimingclaw-cron-${e}-${a}-${o}`},r)}function Ib(e,a){const l=new Date().toISOString(),r=je(a.schedule)||je(a.cron_expr)||"0 9 * * *";return{id:e,name:je(a.name)||e,expression:r,command:je(a.command)||`digital-employee:${e}`,prompt:je(a.prompt)||null,job_type:je(a.job_type)||"qimingclaw_schedule",schedule:{expression:r,schedule_id:e},enabled:a.enabled!==!1,delivery:{mode:"qimingclaw_schedule",schedule_id:e},template_id:je(a.template_id)||je(a.plan_id)||e,trigger_kind:"scheduled",delete_after_run:a.delete_after_run===!0,created_at:l,next_run:l,last_run:null,last_status:null,last_output:null}}async function Yj(e,a){var r,o,d;return(await((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.getScheduleRuns)==null?void 0:d.call(o,e,a).catch(()=>[]))??[]).map((p,h)=>({id:Number.isFinite(Date.parse(p.createdAt))?Date.parse(p.createdAt)+h:h+1,job_id:p.scheduleId,started_at:p.startedAt||p.createdAt,finished_at:p.finishedAt||"",status:p.status,output:p.error||null,duration_ms:p.startedAt&&p.finishedAt?Math.max(0,Date.parse(p.finishedAt)-Date.parse(p.startedAt)):null}))}function an(e){return typeof e!="string"||!e.trim()?{}:JSON.parse(e)}function Qt(e){return an(e)}function ac(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function Pa(e,a){const l=new Date;return l.setHours(e,a,0,0),l.toISOString()}function Vo(e){return e.split("-").join("/")}function ad(e){if(!e)return"未知";const a=new Date(e);return Number.isNaN(a.getTime())?e:new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit"}).format(a)}function Hb(e,a){return new Set(e.selectedDutyIdsByDate[a]??[])}function Gb(e){return["completed","succeeded","success"].includes(e)?"success":["running","active"].includes(e)?"running":["failed","error"].includes(e)?"danger":"waiting"}function Br(e,a){var l;return((l=e==null?void 0:e.services[a])==null?void 0:l.running)===!0}function Ur(e,a){var l;return(l=e==null?void 0:e.services[a])==null?void 0:l.error}function Kj(e,a){return a?e.plan_id==="qimingclaw-client-readiness"?Br(a,"agent")&&Br(a,"mcp")?"running":Ur(a,"agent")||Ur(a,"mcp")?"failed":"pending":e.plan_id==="qimingclaw-remote-task-ingress"?Br(a,"computerServer")||Br(a,"lanproxy")||Br(a,"fileServer")?"running":Ur(a,"computerServer")||Ur(a,"lanproxy")||Ur(a,"fileServer")?"failed":"pending":e.status:e.status}function Ol(e,a,l){const r=e==null?void 0:e.services[a];if(!r)return`${l}:未连接`;if(r.running){const o=r.port?`(端口 ${r.port})`:"";return`${l}:运行中${o}`}return`${l}:未运行${r.error?`,${r.error}`:""}`}function Ll(e){const a=(e==null?void 0:e.managedServices)??[];return a.length>0?a.map(l=>({service_id:l.serviceId,name:l.name,kind:l.kind,status:l.status,status_label:l.statusLabel,running:l.running,error:l.error??null,requires_human_action:l.requiresHumanAction,dependent_tasks:l.dependentTasks??[],restart_count:l.restartCount??0,last_seen_at:l.lastSeenAt,instance:l.instance,lease:l.lease})):[ys(e,"agent","Agent","agent",["ACP 会话执行","Plan Agent"]),ys(e,"mcp","MCP Proxy","mcp",["Skill Catalog","MCP 工具调用"]),ys(e,"computerServer","Computer Server","desktop",["/computer/chat","远程任务接入"]),ys(e,"fileServer","File Server","file",["Artifact 上传","文件交付"]),ys(e,"lanproxy","Lanproxy","network",["远程访问","管理端回连"]),ys(e,"guiServer","GUI Agent Server","gui",["GUI 自动化"])]}function ys(e,a,l,r,o){const d=e==null?void 0:e.services[a],p=(d==null?void 0:d.running)===!0,h=d!=null&&d.error?"degraded":p?"running":"stopped";return{service_id:a,name:l,kind:r,status:h,status_label:h==="running"?"运行中":h==="degraded"?"异常":"未运行",running:p,error:(d==null?void 0:d.error)??null,requires_human_action:!!(d!=null&&d.error),dependent_tasks:o,restart_count:0,last_seen_at:(e==null?void 0:e.generatedAt)??new Date().toISOString(),instance:d?{port:d.port,engineType:d.engineType,serverCount:d.serverCount,serverNames:d.serverNames}:void 0,lease:{state:h==="running"?"active":h,updatedAt:(e==null?void 0:e.generatedAt)??new Date().toISOString()}}}function Qj(e){const a=e.dependent_tasks.length>0?`;依赖任务:${e.dependent_tasks.slice(0,2).join("、")}`:"";return`${e.name}:${e.status_label}${e.error?`,${e.error}`:""}${a}`}function ey(e){const a=e.filter(r=>r.running).length,l=e.filter(r=>r.requires_human_action||r.status==="degraded").length;return`ManagedService:${a}/${e.length} 运行,${l} 项需处理`}async function Yb(e,a){var d;const l=await Il({actionKind:`managed_service.restart.${e}`,actionLabel:`重启服务:${e}`,riskLevel:"high",reasonCodes:["managed_service_restart"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",correlationId:`managed-service:${e}:restart`,payload:{service_id:e,reason:u(a.reason)||null}}),r=Hl(l);if(r){const p=await fe();return{ok:!1,service_id:e,action:"restart",status:r.status==="approval_required"?"rejected":"failed",error:String(r.error||r.status||"risk_policy_blocked"),managed_service:Ll(p).find(h=>h.service_id===e)??null,event_id:u(r.event_id)||null}}const o=(d=window.QimingClawBridge)==null?void 0:d.digital;if(!(o!=null&&o.restartManagedService)){const p=await fe();return{ok:!1,service_id:e,action:"restart",status:"failed",error:"bridge_unavailable",managed_service:Ll(p).find(h=>h.service_id===e)??null}}try{const p=await o.restartManagedService(e,{reason:u(a.reason)||"digital_employee_managed_service_restart",actor:u(a.actor)||"digital_employee_ui"}),h=await fe();return{...p,managed_service:p.managed_service??Ll(h).find(_=>_.service_id===e)??null}}catch(p){const h=await fe();return{ok:!1,service_id:e,action:"restart",status:"failed",error:p instanceof Error?p.message:String(p),managed_service:Ll(h).find(_=>_.service_id===e)??null}}}async function Vj(e,a){var p;const l=(p=window.QimingClawBridge)==null?void 0:p.digital,r=Xj(u(a.action)),o=await Il({actionKind:`artifact.access.${r}`,actionLabel:`访问产物:${r}`,riskLevel:r==="download"||r==="open_location"?"high":"medium",reasonCodes:["artifact_access"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",correlationId:`artifact:${e}:${r}`,payload:{artifact_id:e,action:r}}),d=Hl(o);if(d)return{ok:!1,artifact_id:e,action:r,status:"rejected",error:String(d.error||d.status||"risk_policy_blocked"),reason_codes:Array.isArray(d.reason_codes)?d.reason_codes.map(String):["risk_policy_blocked"],event_id:u(d.event_id)||null};if(!(l!=null&&l.accessArtifact))return{ok:!1,artifact_id:e,action:r,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"]};try{return await l.accessArtifact(e,r,{actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter"})}catch(h){return{ok:!1,artifact_id:e,action:r,status:"rejected",error:h instanceof Error?h.message:String(h),reason_codes:["artifact_access_failed"]}}}function Xj(e){return e==="download"||e==="open_location"?e:"preview"}async function Kb(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.action)||"mark_review",d=Qm(l,e),p=await Il({actionKind:`artifact.retention.${o}`,actionLabel:`调整产物保留策略:${o}`,riskLevel:o==="mark_expire"||o==="clear_retention"?"high":"medium",reasonCodes:["artifact_retention"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`artifact:${e}:retention:${o}`,payload:{artifact_id:e,action:o}}),h=Hl(p);if(h)return{...h,artifact_id:e,action:o,item:d};if(!(r!=null&&r.recordArtifactLifecycle))return{ok:!1,artifact_id:e,action:o,status:"rejected",error:"bridge_unavailable"};const _=await r.recordArtifactLifecycle({artifactId:e,action:o,reason:u(a.reason)||null,retentionUntil:u(a.retention_until??a.retentionUntil)||null,versionSummary:d?W1(d):null,retentionSummary:d?F1(d,o,a):null,deliverySummary:d?Sd(d):null,actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null});return{ok:!!(_&&_.kind!=="artifact_retention_rejected"),artifact_id:e,action:o,status:(_==null?void 0:_.kind)==="artifact_retention_rejected"?"rejected":"recorded",event_id:(_==null?void 0:_.eventId)??null,item:d}}async function Zj(e,a){const l=u(e.action)||"mark_review";if(!["mark_keep","mark_expire","mark_review","clear_retention"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_retention_action"]};const r=Le([...we(e.artifact_ids),...we(e.artifactIds)]).slice(0,50);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["artifact_ids_required"]};const o={action:l,reason:u(e.reason)||"digital_employee_artifact_batch_governance",retention_until:u(e.retention_until??e.retentionUntil)||null,actor:u(e.actor)||"digital_employee_ui",source:u(e.source)||"sgrobot-digital-adapter"},d=[];for(const _ of r){const g=await Kb(_,o,a);d.push({artifact_id:_,ok:g.ok===!0,status:u(g.status)||(g.ok===!0?"recorded":"rejected"),event_id:u(g.event_id)||null,error:u(g.error)||null,reason_codes:we(g.reason_codes).map(u).filter(Boolean)})}const p=d.filter(_=>_.ok===!0).length,h=Le(d.flatMap(_=>we(_.reason_codes)));return{ok:p>0,action:l,total:r.length,recorded:p,rejected:r.length-p,items:d,reason_codes:h}}async function Jj(e,a,l){var h;const r=(h=window.QimingClawBridge)==null?void 0:h.digital,o=Qm(l,e),d=await Il({actionKind:"artifact.cleanup.delete_local_file",actionLabel:"清理产物本地文件",riskLevel:"high",reasonCodes:["artifact_cleanup"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:o&&u(o.plan_id)||null,taskId:o&&u(o.task_id)||null,runId:o&&u(o.run_id)||null,correlationId:`artifact:${e}:cleanup`,payload:{artifact_id:e,retention_status:u(o==null?void 0:o.retention_status)||null}}),p=Hl(d);if(p)return{...p,artifact_id:e,status:"rejected",item:o};if(!(r!=null&&r.cleanupArtifact))return{ok:!1,artifact_id:e,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"],item:o};try{return{...await r.cleanupArtifact(e,{actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",reason:u(a.reason)||"digital_employee_artifact_cleanup",retentionStatus:u(a.retention_status??a.retentionStatus)||u(o==null?void 0:o.retention_status)||null,lastRetentionAction:u(a.last_retention_action??a.lastRetentionAction)||u(o==null?void 0:o.last_retention_action)||null}),item:o}}catch(_){return{ok:!1,artifact_id:e,status:"failed",error:_ instanceof Error?_.message:String(_),reason_codes:["artifact_cleanup_failed"],item:o}}}async function Fj(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.action)||"comment",d=sv(l,e),p=await Il({actionKind:`approval.action.${o}`,actionLabel:`审批治理动作:${o}`,riskLevel:o==="mark_risk"||o==="delegate"||o==="mark_timeout"?"medium":"normal",reasonCodes:["approval_action"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`approval:${e}:action:${o}`,payload:{approval_id:e,action:o}}),h=Hl(p);if(h)return{...h,approval_id:e,action:o,item:d};if(!(r!=null&&r.recordApprovalAction))return{ok:!1,approval_id:e,action:o,status:"rejected",error:"bridge_unavailable"};const _=await r.recordApprovalAction({approvalId:e,action:o,comment:u(a.comment)||null,delegateTo:u(a.delegate_to??a.delegateTo)||null,delegateLabel:u(a.delegate_label??a.delegateLabel)||null,dueAt:u(a.due_at??a.dueAt)||null,riskLevel:u(a.risk_level??a.riskLevel)||null,reason:u(a.reason)||null,actor:u(a.actor)||"digital_employee_ui",source:u(a.source)||"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null});return{ok:!!(_&&_.kind!=="approval_action_rejected"),approval_id:e,action:o,status:(_==null?void 0:_.kind)==="approval_action_rejected"?"rejected":"recorded",event_id:(_==null?void 0:_.eventId)??null,item:d}}async function Qb(e,a,l){var g;const r=(g=window.QimingClawBridge)==null?void 0:g.digital,o=u(a.resolution)||"mark_reviewed",d=sv(l,e),p=await Il({actionKind:`approval.conflict.resolve.${o}`,actionLabel:`审批冲突裁决:${o}`,riskLevel:o==="accept_remote"?"medium":"normal",reasonCodes:["approval_conflict_resolution"],actor:u(a.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:d&&u(d.plan_id)||null,taskId:d&&u(d.task_id)||null,runId:d&&u(d.run_id)||null,correlationId:`approval:${e}:conflict:${o}`,payload:{approval_id:e,resolution:o}}),h=Hl(p);if(h)return{...h,approval_id:e,resolution:o,item:d};if(!(r!=null&&r.resolveApprovalConflict))return{ok:!1,approval_id:e,resolution:o,status:"rejected",error:"bridge_unavailable",reason_codes:["bridge_unavailable"],item:d};const _=await r.resolveApprovalConflict({approvalId:e,resolution:o,actor:u(a.actor)||"digital_employee_ui",comment:u(a.comment)||null});return{..._,ok:(_==null?void 0:_.ok)===!0,approval_id:(_==null?void 0:_.approval_id)||e,resolution:(_==null?void 0:_.resolution)??o,item:d}}async function Pj(e,a){const l=u(e.resolution)||"mark_reviewed";if(l==="accept_remote")return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["batch_accept_remote_disabled"]};if(!["keep_local","mark_reviewed"].includes(l))return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_resolution"]};const r=Le([...we(e.approval_ids),...we(e.approvalIds)]).slice(0,50);if(r.length===0)return{ok:!1,resolution:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["approval_ids_required"]};const o=[];for(const p of r){const h=await Qb(p,{resolution:l,actor:u(e.actor)||"digital_employee_operator",comment:u(e.comment)||null},a);o.push({approval_id:p,ok:h.ok===!0,status:u(h.status)||(h.ok===!0?"recorded":"rejected"),event_id:u(h.event_id)||null,error:u(h.error)||null,reason_codes:we(h.reason_codes).map(u).filter(Boolean)})}const d=o.filter(p=>p.ok===!0).length;return{ok:d>0,resolution:l,total:r.length,recorded:d,rejected:r.length-d,items:o,reason_codes:Le(o.flatMap(p=>we(p.reason_codes)))}}function hd(e){const a=e==null?void 0:e.sync;return a?a.enabled?a.endpoint?a.syncing?`管理端同步:同步中,待同步 ${a.pending} 条`:a.failed>0?`管理端同步:${a.failed} 条失败,待同步 ${a.pending} 条`:a.pending>0?`管理端同步:待同步 ${a.pending} 条`:a.lastSyncAt?`管理端同步:已同步,最近 ${a.lastSyncAt}`:"管理端同步:等待本地数据":"管理端同步:未配置地址":"管理端同步:已停用":"管理端同步:未连接"}function Wj(e){return String(e||"").replace(/\s+/g," ").trim()}function In(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.plans)??[]}function ji(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.planSteps)??[]}function Ct(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.tasks)??[]}function Hn(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.runs)??[]}function rt(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.events)??[]}function gd(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.artifacts)??[]}function lc(e){var a;return((a=e==null?void 0:e.runtime)==null?void 0:a.approvals)??[]}function Gl(e){return In(e).length>0||ji(e).length>0||Ct(e).length>0||gd(e).length>0||lc(e).length>0}function Um(e,a){const l=[e.updatedAt,...a.map(r=>r.updatedAt)].filter(Boolean).sort();return l[l.length-1]??e.updatedAt??e.createdAt}function ot(e){const a=e.toLowerCase();return["completed","succeeded","success","done"].includes(a)?"success":["failed","error","rejected","cancelled"].includes(a)?"danger":["running","active","leased","syncing"].includes(a)?"running":"waiting"}function la(e){const a=e.toLowerCase();if(a==="ready")return"待启动";if(a==="blocked")return"依赖阻塞";if(a==="skipped")return"已跳过";if(a==="cancelled")return"已取消";if(a==="paused")return"已暂停";const l=ot(e);return l==="success"?"已完成":l==="danger"?"异常":l==="running"?"执行中":"待执行"}function ic(e,a){return Ct(e).filter(l=>l.planId===a)}function Vb(e,a){return ji(e).filter(l=>l.planId===a).sort((l,r)=>l.seq-r.seq||l.createdAt.localeCompare(r.createdAt))}function al(e){const a=oe(e.payload);return u((a==null?void 0:a.stepId)??(a==null?void 0:a.step_id))||(e.planId?`${e.planId}:runtime`:"qimingclaw-runtime")}function yd(e,a){return a.some(l=>ot(l.status)==="danger")?"failed":a.some(l=>ot(l.status)==="running")?"running":a.length>0&&a.every(l=>ot(l.status)==="success")?"completed":e.status||"pending"}function e1(e){return In(e).map(a=>{const l=ic(e,a.id),r=yd(a,l),o=Gb(r),d=l.filter(h=>ot(h.status)==="danger").length,p=l.filter(h=>ot(h.status)==="running").length;return{agent_id:`plan-agent-${mt(a.id)}`,plan_id:a.id,title:a.title,lifecycle:r,status_label:Zb(r),status_tone:o,managed_task_count:l.length,running_task_count:p,failed_task_count:d,next_action:d>0?"review_failures":p>0?"monitor_runs":o==="success"?"archive_results":"activate_plan",can_replan:d>0,can_pause:p>0,can_resume:r==="paused",updated_at:Um(a,l)}})}function t1(e){const a=Hn(e);return Ct(e).map(l=>{const r=bd(a,l.id),o=ot(l.status),d=l.status.toLowerCase(),p=al(l);return{agent_id:`task-agent-${mt(l.id)}`,task_id:l.id,plan_id:l.planId??null,step_id:p,title:l.title,execution_state:l.status,status_label:la(l.status),status_tone:o,assigned_skill_id:l.assignedSkillId??null,latest_run_id:(r==null?void 0:r.id)??null,can_retry:["failed","cancelled","skipped"].includes(d),can_skip:["pending","running"].includes(d),can_cancel:["pending","running","paused"].includes(d),next_action:n1(d,o),updated_at:(r==null?void 0:r.updatedAt)??l.updatedAt}})}function n1(e,a){return["failed","cancelled","skipped"].includes(e)?"retry_or_review":e==="paused"?"resume_or_cancel":a==="running"?"watch_progress":a==="success"?"collect_artifacts":"start_run"}function bd(e,a){return e.filter(r=>r.taskId===a).sort((r,o)=>(o.updatedAt||o.createdAt).localeCompare(r.updatedAt||r.createdAt))[0]??null}function a1(e,a){const l=ic(a,e.id),r=Vb(a,e.id),o=yd(e,l),d=new Set(r.map(_=>_.id)),p=l.filter(_=>!d.has(al(_))),h=r.length>0?[...r.map(_=>Xb(_,l)),...p.length>0?[ty(e.id,p)]:[]]:[ty(e.id,l)];return{plan_id:e.id,title:e.title,objective:e.objective??void 0,status:o,created_at:e.createdAt,updated_at:Um(e,l),source:e.source,sync_status:e.syncStatus,steps:h}}function Xb(e,a){return{step_id:e.id,title:e.title,depends_on:e.dependsOn,preferred_skills:e.preferredSkillIds,tasks:a.filter(l=>al(l)===e.id).map(l=>({task_id:l.id,title:l.title,status:l.status}))}}function ty(e,a){return{step_id:`${e}:runtime`,title:"qimingclaw 执行记录",depends_on:[],preferred_skills:[...new Set(a.map(l=>l.assignedSkillId).filter(l=>!!l))],tasks:a.map(l=>({task_id:l.id,title:l.title,status:l.status}))}}function l1(e){return{task_id:e.id,title:e.title,status:e.status,plan_id:e.planId??null,step_id:al(e),assigned_skill_id:e.assignedSkillId??"",description:e.syncError??"",created_at:e.createdAt,updated_at:e.updatedAt,started_at:e.createdAt,finished_at:ot(e.status)==="success"||ot(e.status)==="danger"?e.updatedAt:null,error_message:e.syncError??null,sync_status:e.syncStatus}}function i1(e,a){return{run_id:e.id,task_id:e.taskId??"",plan_id:e.planId??null,skill_id:void 0,attempt_no:1,lifecycle:ot(e.status)==="success"?"Succeeded":ot(e.status)==="danger"?"Failed":ot(e.status)==="running"?"Running":e.status,created_at:e.startedAt??e.createdAt,completed_at:e.finishedAt??null,events:a.filter(l=>l.runId===e.id).map(l=>({event_id:l.id,kind:l.kind,occurred_at:l.occurredAt,message:l.message})),artifacts:Ev(e,a),sync_status:e.syncStatus}}function sc(e){const a=Wj(e.error),l=a.length>120?`${a.slice(0,120)}...`:a,r=e.dueForRetry?"等待补偿":e.nextRetryAt?`下次重试 ${e.nextRetryAt}`:"等待重试";return`${e.entityType}/${e.operation} ${e.id} 重试 ${e.attempts} 次,${r}${l?`,${l}`:""}`}function rc(e,a){return{...e,status:Kj(e,a)}}function Zb(e){return e==="running"?"执行中":e==="completed"||e==="succeeded"?"已完成":e==="failed"?"异常":"待执行"}function Im(e){const a=In(e);if(a.length>0)return a.map(r=>a1(r,e));const l=Ct(e);return l.length===0?[]:l.map(r=>({plan_id:r.id,title:r.title,objective:"未绑定 Plan 的 qimingclaw 本地任务记录。",status:r.status,created_at:r.createdAt,updated_at:r.updatedAt,source:"qimingclaw",sync_status:r.syncStatus,steps:[{step_id:`${r.id}:runtime`,title:"qimingclaw 执行记录",depends_on:[],preferred_skills:r.assignedSkillId?[r.assignedSkillId]:[],tasks:[{task_id:r.id,title:r.title,status:r.status}]}]}))}function nl(e){const a=(e==null?void 0:e.planTemplates)??[],l=new Map;for(const r of[...a,...yj])l.has(r.plan_id)||l.set(r.plan_id,r);return Array.from(l.values())}function Hm(e){const a=new Map;for(const l of[...Im(e),...nl(e).map(r=>rc(r,e))])a.has(l.plan_id)||a.set(l.plan_id,l);return Array.from(a.values())}function s1(e,a){var o;const l=rc(e,a),r=td[e.plan_id]??td["qimingclaw-client-readiness"];return{id:`schedule-${e.plan_id}`,name:e.title,expression:r.expression,command:`digital-employee:${e.plan_id}`,prompt:e.objective??null,job_type:"plan_template",schedule:{expression:r.expression,template_id:e.plan_id},enabled:!0,delivery:{mode:"plan_template",template_id:e.plan_id},template_id:e.plan_id,trigger_kind:"scheduled",step_count:((o=e.steps)==null?void 0:o.length)??0,skill_ids:[...new Set((e.steps??[]).flatMap(d=>d.preferred_skills??[]))],delete_after_run:!1,created_at:e.created_at,next_run:r.nextRun,last_run:l.status==="running"?Pa(9,5):null,last_status:l.status==="running"?"running":null,last_output:null}}function r1(e,a){var d,p;const l=e.planId?Hm(a).find(h=>h.plan_id===e.planId):null,o=(((d=a==null?void 0:a.runtime)==null?void 0:d.scheduleRuns)??[]).find(h=>h.scheduleId===e.id);return{id:e.id,name:e.name,expression:e.cronExpr,command:e.command||`digital-employee:${e.planId||e.id}`,prompt:e.prompt??e.description??null,job_type:"qimingclaw_schedule",schedule:{mode:"qimingclaw_schedule",schedule_id:e.id,plan_id:e.planId,expression:e.cronExpr,timezone:e.timezone,status:e.status,failure_count:e.failureCount,last_error:e.lastError},enabled:e.enabled&&e.status==="enabled"&&!e.deletedAt,delivery:{mode:"qimingclaw_schedule",schedule_id:e.id,plan_id:e.planId},template_id:e.planId??e.id,trigger_kind:"scheduled",step_count:((p=l==null?void 0:l.steps)==null?void 0:p.length)??0,skill_ids:[...new Set(((l==null?void 0:l.steps)??[]).flatMap(h=>h.preferred_skills??[]))],delete_after_run:!1,created_at:e.createdAt,next_run:e.nextRunAt||e.updatedAt,last_run:e.lastRunAt??(o==null?void 0:o.finishedAt)??(o==null?void 0:o.startedAt)??null,last_status:(o==null?void 0:o.status)??(e.lastError?"failed":null),last_output:(o==null?void 0:o.error)??e.lastError??null}}function ld(e=null){var r;const a=(((r=e==null?void 0:e.runtime)==null?void 0:r.schedules)??[]).filter(o=>o.status!=="deleted").map(o=>r1(o,e)),l=nl(e).map(o=>s1(o,e));if(a.length>0){const o=new Set(a.map(d=>d.template_id));return[...a,...l.filter(d=>!o.has(d.template_id))]}if(Gl(e)){const o=Im(e).map(p=>{var h;return{id:`runtime-${p.plan_id}`,name:p.title,expression:"",command:`qimingclaw-runtime:${p.plan_id}`,prompt:p.objective??null,job_type:"qimingclaw_runtime",schedule:{mode:"runtime_record",plan_id:p.plan_id},enabled:!0,delivery:{mode:"qimingclaw_runtime",plan_id:p.plan_id},template_id:p.plan_id,trigger_kind:"runtime_record",step_count:((h=p.steps)==null?void 0:h.length)??0,skill_ids:[...new Set((p.steps??[]).flatMap(_=>_.preferred_skills??[]))],delete_after_run:!1,created_at:p.created_at,next_run:p.updated_at??p.created_at,last_run:p.updated_at??p.created_at,last_status:p.status,last_output:null}}),d=new Set(o.map(p=>p.template_id));return[...o,...l.filter(p=>!d.has(p.template_id))]}return l}function c1(e,a,l){const r=Hb(e,a);if(Gl(l)){const o=In(l),d=Ct(l).filter(g=>!g.planId),p=o.map((g,x)=>{const S=ic(l,g.id),C=yd(g,S),z=S.filter(N=>ot(N.status)==="success").length,w=S.filter(N=>ot(N.status)==="danger").length,D=r.size===0?x<3:r.has(g.id);return{id:g.id,title:g.title,summary:g.objective||"qimingclaw 本地执行记录已同步到数字员工。",implemented:!0,selectable:!0,selected:D,status:C,status_label:la(C),status_tone:ot(C),schedule_text:S.length>0?`最近更新 ${ad(Um(g,S))}`:"等待任务记录",result_text:S.length>0?`${S.length} 项任务,${z} 项完成,${w} 项异常`:`同步状态:${g.syncStatus}`,conversation_id:g.id}}),h=d.map((g,x)=>({id:g.id,title:g.title,summary:"未绑定 Plan 的 qimingclaw 本地任务记录。",implemented:!0,selectable:!0,selected:r.size===0?p.length+x<3:r.has(g.id),status:g.status,status_label:la(g.status),status_tone:ot(g.status),schedule_text:`最近更新 ${ad(g.updatedAt)}`,result_text:g.syncError||`同步状态:${g.syncStatus}`,conversation_id:g.id})),_=new Set([...p,...h].map(g=>g.id));return[...p,...h,...ny(e,a,l).filter(g=>!_.has(g.id))]}return ny(e,a,l)}function ny(e,a,l){const r=Hb(e,a);return nl(l).map(o=>{const d=rc(o,l),p=td[d.plan_id]??td["qimingclaw-client-readiness"];return{id:d.plan_id,title:d.title,summary:d.objective??"等待 qimingclaw 执行链路补充任务说明。",implemented:!0,selectable:!0,selected:r.has(d.plan_id),status:d.status,status_label:Zb(d.status),status_tone:Gb(d.status),schedule_text:p.scheduleText,result_text:Jb(d,l),conversation_id:d.plan_id}})}function Jb(e,a){return e.plan_id==="qimingclaw-client-readiness"?[Ol(a,"agent","Agent"),Ol(a,"mcp","MCP"),`活跃会话:${(a==null?void 0:a.sessions.active)??0}`].join(";"):e.plan_id==="qimingclaw-remote-task-ingress"?[Ol(a,"computerServer","Computer Server"),Ol(a,"lanproxy","Lanproxy"),Ol(a,"fileServer","File Server")].join(";"):e.status==="running"?"正在同步客户端运行状态":"等待任务执行"}function ll(e,a=null){const l=nl(a).filter(r=>!e||r.plan_id===e).map(r=>rc(r,a)).flatMap(o1);if(Gl(a)){const r=Ct(a).filter(d=>!e||d.planId===e||d.id===e).map(l1),o=new Set(r.map(d=>d.task_id));return[...r,...l.filter(d=>!o.has(d.task_id))]}return l}function o1(e){return(e.steps??[]).flatMap(a=>(a.tasks??[]).map(l=>{var r;return{task_id:l.task_id,title:l.title,status:e.status==="running"&&l.status==="pending"?"running":l.status,plan_id:e.plan_id,step_id:a.step_id,assigned_skill_id:((r=a.preferred_skills)==null?void 0:r[0])??"",description:`${e.title} · ${a.title}`,created_at:e.created_at,updated_at:e.status==="running"?new Date().toISOString():e.created_at,started_at:l.status==="running"?Pa(9,5):null,finished_at:l.status==="completed"?Pa(9,10):null}}))}function d1(e){return e.filter(a=>a.status==="running"||a.status==="completed").map((a,l)=>({run_id:`qimingclaw-run-${l+1}`,task_id:a.task_id,plan_id:a.plan_id,skill_id:a.assigned_skill_id,attempt_no:1,lifecycle:a.status==="running"?"Running":"Succeeded",created_at:a.started_at??a.created_at,completed_at:a.finished_at,events:[{event_id:`${a.task_id}-event-start`,kind:"RunStarted",occurred_at:a.started_at??a.created_at,message:`${a.title} 已进入 qimingclaw 执行链路`}]}))}function Rs(e,a=null){const l=ll(e,a);if(Gl(a)){const r=new Set(l.map(d=>d.task_id)),o=Hn(a).filter(d=>!d.taskId||r.has(d.taskId)).map(d=>i1(d,rt(a)));return{tasks:l,runs:o,total:l.length,truncated:!1}}return{tasks:l,runs:d1(l),total:l.length,truncated:!1}}function u1(e){const a=Pm(null,e),l=ll(null,e),r=Rs(null,e).runs,o=ji(e);return{tables:{canonical_events:Fm(e,l,r),tasks:l,runs:r,plans:a,plan_steps:o.length>0?o.map(d=>Xb(d,Ct(e))):a.flatMap(d=>d.steps??[]),approvals:Yl(e),artifacts:wi(e)}}}function f1(e){const a=ll(null,e),l=a.filter(h=>ot(h.status)==="waiting").length,r=a.filter(h=>ot(h.status)==="running").length,o=a.filter(h=>ot(h.status)==="success").length,d=a.filter(h=>ot(h.status)==="danger").length,p=Yl(e);return{runtime:{active_tasks:r,failed_tasks:d,pending_confirmations:p.filter(h=>h.status==="pending").length},tasks:{total:a.length,queued:l,running:r,succeeded:o,failed:d},approvals:{total:p.length,pending:p.filter(h=>h.status==="pending").length}}}function vd(e){var g;const a=new Date().toISOString(),l=Ll(e),r=ll(null,e),o=Yl(e),d=rt(e).filter(x=>/fail|error|reject|cancel/i.test(`${x.kind} ${x.message}`)),p=l.map(x=>({id:`service:${x.service_id}`,severity:x.requires_human_action||x.status==="stopped"?"error":x.status==="degraded"?"warn":"ok",category:"service",message:`${x.name}:${x.status_label||x.status}`,details:_n({error:x.error,kind:x.kind,running:x.running,dependent_tasks:x.dependent_tasks}),source:"qimingclaw-managed-service",created_at:x.last_seen_at||a})),h=e==null?void 0:e.sync;p.push({id:"sync:management",severity:m1(h??null),category:"sync",message:hd(e),details:h?_n({pending:h.pending,failed:h.failed,endpoint:h.endpoint,missing_credentials:h.missingCredentials,last_error:h.lastSyncError}):null,source:"qimingclaw-sync-status",created_at:(h==null?void 0:h.lastSyncAt)??a});for(const x of(h==null?void 0:h.recentFailures)??[])p.push({id:`sync_failure:${x.id}`,severity:x.dueForRetry===!1?"error":"warn",category:"sync",message:sc(x),details:_n({entity_type:x.entityType,entity_id:x.entityId,operation:x.operation,attempts:x.attempts,next_retry_at:x.nextRetryAt}),source:"qimingclaw-sync-failure",created_at:x.lastAttemptAt??x.updatedAt??x.createdAt});const _=r.filter(x=>ot(x.status)==="danger");return p.push({id:"runtime:tasks",severity:_.length>0?"error":r.length===0?"warn":"ok",category:"runtime",message:r.length===0?"尚未读取到 qimingclaw runtime task。":`任务 ${r.length} 个,异常 ${_.length} 个。`,details:_n({task_count:r.length,failed_task_count:_.length}),source:"qimingclaw-runtime-records",created_at:a}),p.push({id:"runtime:approvals",severity:o.some(x=>x.status==="pending")?"warn":"ok",category:"approval",message:`审批 ${o.length} 个,待处理 ${o.filter(x=>x.status==="pending").length} 个。`,details:_n({approval_count:o.length,pending_count:o.filter(x=>x.status==="pending").length}),source:"qimingclaw-approval-records",created_at:a}),d.length>0&&p.push({id:"runtime:events:error",severity:"error",category:"runtime",message:`最近运行事件中发现 ${d.length} 条异常事实。`,details:{event_ids:d.slice(0,8).map(x=>x.id)},source:"qimingclaw-runtime-events",created_at:((g=d[0])==null?void 0:g.occurredAt)??a}),Gl(e)||p.push({id:"runtime:data:empty",severity:"warn",category:"data",message:"本地数字员工 runtime 记录为空,页面将只显示兼容投影。",source:"qimingclaw-runtime-records",created_at:a}),{results:p,summary:{ok:p.filter(x=>x.severity==="ok").length,warn:p.filter(x=>x.severity==="warn").length,error:p.filter(x=>x.severity==="error").length,generated_at:a,source:"qimingclaw-runtime-projection"}}}function m1(e){var a;return e?e.failed>0||e.lastSyncError||(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"error":!e.enabled||!e.endpoint||e.pending>0?"warn":"ok":"warn"}function Fb(e){const a=[...rt(e).map(r=>dm(oe(r.payload),r.occurredAt)),...Hn(e).map(r=>dm(oe(r.payload),r.finishedAt??r.updatedAt??r.createdAt))].filter(r=>!!r),l=a.length||rt(e).length+Hn(e).length+Ct(e).length;if(a.length>0){const r={};let o=0,d=0,p=!1,h=(e==null?void 0:e.generatedAt)??new Date().toISOString();for(const _ of a){const g=_.model||"unknown",x=r[g]??{model:g,cost_usd:0,total_tokens:0,request_count:0};x.cost_usd+=_.estimated_cost_usd??0,x.total_tokens+=_.total_tokens??0,x.request_count+=1,r[g]=x,o+=_.total_tokens??0,d+=_.estimated_cost_usd??0,p=p||_.estimated,_.updated_at&&_.updated_at>h&&(h=_.updated_at)}return{session_cost_usd:d,daily_cost_usd:d,monthly_cost_usd:d,total_tokens:o,request_count:a.length,by_model:r,estimated:p,source:"qimingclaw-runtime-projection",updated_at:h}}return{session_cost_usd:0,daily_cost_usd:0,monthly_cost_usd:0,total_tokens:0,request_count:l,by_model:{"qimingclaw-local":{model:"qimingclaw-local",cost_usd:0,total_tokens:0,request_count:l}},estimated:!0,source:"qimingclaw-runtime-projection",updated_at:(e==null?void 0:e.generatedAt)??new Date().toISOString()}}function dm(e,a){if(!e)return null;const l=oe(e.usage)??oe(e.token_usage)??oe(e.tokenUsage)??e,r=oe(e.cost)??e,o=vt(l.input_tokens??l.inputTokens??l.prompt_tokens??l.promptTokens),d=vt(l.output_tokens??l.outputTokens??l.completion_tokens??l.completionTokens),p=vt(l.total_tokens??l.totalTokens)??((o??0)+(d??0)||null),h=vt(r.estimated_cost_usd??r.estimatedCostUsd??r.cost_usd??r.costUsd??r.usd),_=u(e.model??e.model_name??e.modelName??l.model)||"unknown";return o===null&&d===null&&p===null&&h===null?null:{model:_,input_tokens:o,output_tokens:d,total_tokens:p,estimated_cost_usd:h,estimated:typeof e.estimated=="boolean"?e.estimated:h===null,updated_at:u(e.updated_at??e.updatedAt)||a||null}}function Gm(e,a){var h;const l=Math.max(1,Math.min(Math.floor(vt(a.get("limit"))??100),300)),r=u(a.get("category"))||u(a.get("kind")),o=u(a.get("level")),d=u(a.get("id"));return[...rt(e).map(lw),...(((h=e==null?void 0:e.sync)==null?void 0:h.recentFailures)??[]).map(_=>({audit_id:`sync_failure:${_.id}`,category:"sync",action:"sync_failed",level:_.dueForRetry===!1?"error":"warn",message:sc(_),actor:"qimingclaw-sync",entity_type:_.entityType,entity_id:_.entityId,occurred_at:_.lastAttemptAt??_.updatedAt??_.createdAt,payload:_})),...wi(e).flatMap(_=>rw(_))].filter(_=>!r||u(_.category)===r||u(_.entity_type)===r).filter(_=>!o||u(_.level)===o).filter(_=>!d||u(_.entity_id)===d||u(_.audit_id).includes(d)).sort((_,g)=>u(g.occurred_at).localeCompare(u(_.occurred_at))).slice(0,l)}function p1(e){const a=vd(e).results,l=Gm(e,new URLSearchParams({limit:"300"})),r=Fb(e),o=_1(a,l);return{doctor:{ok:a.filter(d=>d.severity==="ok").length,warn:a.filter(d=>d.severity==="warn").length,error:a.filter(d=>d.severity==="error").length},audit:{info:l.filter(d=>u(d.level)==="info").length,warn:l.filter(d=>u(d.level)==="warn").length,error:l.filter(d=>u(d.level)==="error").length},cost:{request_count:r.request_count,total_tokens:r.total_tokens,estimated_cost_usd:r.session_cost_usd,by_model_count:Object.keys(r.by_model??{}).length,estimated:!!r.estimated,updated_at:r.updated_at??null},latest_issue:o}}function _1(e,a){const l=ay(e,"error");if(l)return l;const r=ly(a,"error");if(r)return r;const o=ay(e,"warn");return o||ly(a,"warn")}function ay(e,a){const l=e.filter(r=>r.severity===a).sort((r,o)=>u(o.created_at).localeCompare(u(r.created_at)))[0];return l?{id:u(l.id)||`${l.category}:${a}`,source:"doctor",level:a,category:u(l.category)||"diagnostic",message:l.message,occurred_at:l.created_at??null}:null}function ly(e,a){const l=e.find(r=>u(r.level)===a);return l?{id:u(l.audit_id)||`${u(l.category)||"audit"}:${a}`,source:"audit",level:a,category:u(l.category)||u(l.entity_type)||"audit",message:u(l.message)||u(l.action)||"审计事件需要关注",occurred_at:u(l.occurred_at)||null}:null}function xd(e){return Gm(e,new URLSearchParams({limit:"300"})).map(a=>({...a,audit_id:u(a.audit_id),status:u(a.level)||"info",status_label:g1(u(a.level)),entity_id:u(a.entity_id)||u(a.audit_id),updated_at:u(a.occurred_at),source:We}))}function h1(e,a){const l=u(a.get("category"))||u(a.get("kind")),r=u(a.get("level")),o=u(a.get("id"));return sa(e,a).filter(d=>!l||u(d.category)===l||u(d.entity_type)===l).filter(d=>!r||u(d.level)===r).filter(d=>!o||u(d.entity_id)===o||u(d.audit_id).includes(o))}function g1(e){return e==="error"?"异常":e==="warn"?"警告":"信息"}function y1(e,a,l){const r={plans:av(a),"plan-steps":kd(a),"plan-step-graph":Pb(a),tasks:E1(a),runs:A1(a),events:T1(a),artifacts:Km(a),"artifact-groups":lv(a),approvals:$s(a),"approval-history":rv(a),"route-decisions":cc(a),notifications:ev(a,xa(a)),audits:xd(a)},o=e==="route-decisions"?S1(r[e],l):e==="plan-steps"||e==="plan-step-graph"?um(r[e],l):e==="approval-history"?cv(r[e],l):e==="notifications"?C1(r[e],l):e==="audits"?h1(r[e],l):sa(r[e],l);return{...pn(o,l),source:We}}function kd(e){return ji(e).map(a=>{const l=oe(a.payload)??{},r=oe(l.dependencyGraph??l.dependency_graph)??{},o=oe(l.lastDispatch??l.last_dispatch)??{},d=Ym(l),p=Wb(a,e,l),h=Le(we(r.blockedDependencies??r.blocked_dependencies)),_=Le(we(r.waitingDependencies??r.waiting_dependencies)),g=Le(we(r.satisfiedDependencies??r.satisfied_dependencies));return{step_id:a.id,node_id:a.id,remote_id:a.remoteId??null,plan_id:a.planId,title:a.title,status:a.status,seq:a.seq,depends_on:a.dependsOn,dependency_count:a.dependsOn.length,dependency_status:u(r.status)||b1(a,h,_),blocked_dependencies:h,blocked_dependency_count:h.length,blocked_dependency_details:v1(h,e),waiting_dependencies:_,waiting_dependency_count:_.length,satisfied_dependencies:g,preferred_skill_ids:a.preferredSkillIds,task_id:p.taskId,latest_run_id:p.latestRunId,dispatchable:p.dispatchable,skip_reason:p.skipReason,last_dispatch_status:u(o.status)||null,last_dispatch_at:u(o.occurredAt??o.occurred_at)||null,lease:d,lease_id:u((d==null?void 0:d.lease_id)??(d==null?void 0:d.leaseId))||null,lease_state:u(d==null?void 0:d.state)||null,lease_owner_device_id:u((d==null?void 0:d.owner_device_id)??(d==null?void 0:d.ownerDeviceId))||null,lease_acquired_at:u((d==null?void 0:d.acquired_at)??(d==null?void 0:d.acquiredAt))||null,lease_expires_at:u((d==null?void 0:d.expires_at)??(d==null?void 0:d.expiresAt))||null,lease_released_at:u((d==null?void 0:d.released_at)??(d==null?void 0:d.releasedAt))||null,lease_release_reason:u((d==null?void 0:d.release_reason)??(d==null?void 0:d.releaseReason))||null,lease_source:u(d==null?void 0:d.source)||null,remote_lease_id:u((d==null?void 0:d.remote_lease_id)??(d==null?void 0:d.remoteLeaseId))||null,remote_lease_error:u((d==null?void 0:d.remote_error)??(d==null?void 0:d.remoteError))||null,remote_release_error:u((d==null?void 0:d.remote_release_error)??(d==null?void 0:d.remoteReleaseError))||null,remote_lease_rejected:u((d==null?void 0:d.release_reason)??(d==null?void 0:d.releaseReason))==="remote_lease_rejected",lease_active:!!d,sync_status:a.syncStatus,last_synced_at:a.lastSyncedAt??null,sync_error:a.syncError??null,created_at:a.createdAt,updated_at:a.updatedAt,entity_type:"plan_step",entity_id:a.id,source:We}}).sort((a,l)=>u(a.plan_id).localeCompare(u(l.plan_id))||Number(a.seq??0)-Number(l.seq??0)||u(a.step_id).localeCompare(u(l.step_id)))}function Pb(e){return kd(e).map(a=>({node_id:u(a.node_id)||u(a.step_id),step_id:u(a.step_id),plan_id:u(a.plan_id)||null,title:u(a.title),status:u(a.status),seq:a.seq,depends_on:we(a.depends_on),dependency_status:u(a.dependency_status)||null,blocked_dependencies:we(a.blocked_dependencies),blocked_dependency_details:we(a.blocked_dependency_details),waiting_dependencies:we(a.waiting_dependencies),satisfied_dependencies:we(a.satisfied_dependencies),task_id:u(a.task_id)||null,latest_run_id:u(a.latest_run_id)||null,dispatchable:a.dispatchable===!0,skip_reason:u(a.skip_reason)||null,lease:oe(a.lease)??null,lease_id:u(a.lease_id)||null,lease_state:u(a.lease_state)||null,lease_owner_device_id:u(a.lease_owner_device_id)||null,lease_acquired_at:u(a.lease_acquired_at)||null,lease_expires_at:u(a.lease_expires_at)||null,lease_released_at:u(a.lease_released_at)||null,lease_release_reason:u(a.lease_release_reason)||null,lease_source:u(a.lease_source)||null,remote_lease_id:u(a.remote_lease_id)||null,remote_lease_error:u(a.remote_lease_error)||null,remote_release_error:u(a.remote_release_error)||null,remote_lease_rejected:a.remote_lease_rejected===!0,lease_active:a.lease_active===!0,sync_status:u(a.sync_status)||null,updated_at:u(a.updated_at)||null,entity_type:"plan_step_graph_node",entity_id:u(a.step_id),source:We}))}function um(e,a){const l=u(a.get("plan_id")),r=u(a.get("step_id"))||u(a.get("id")),o=u(a.get("status")),d=u(a.get("sync_status"));return sa(e,a).filter(p=>!l||u(p.plan_id)===l).filter(p=>!r||u(p.step_id)===r||u(p.node_id)===r||u(p.entity_id)===r).filter(p=>!o||u(p.status)===o).filter(p=>!d||u(p.sync_status)===d)}function b1(e,a,l){return a.length>0?"blocked":l.length>0?"waiting":e.dependsOn.length>0?"ready":"independent"}function Wb(e,a,l){var g;const r=ic(a,e.planId),o=r.find(x=>al(x)===e.id)??r.find(x=>!iy(x.status))??null,d=(o==null?void 0:o.id)??null,p=o?((g=bd(Hn(a),o.id))==null?void 0:g.id)??null:null,h=Ym(l);let _=null;return h?_="lease_active":e.status.toLowerCase()!=="ready"?_="not_ready":o?iy(o.status)?_="task_terminal":Hn(a).some(x=>x.taskId===o.id&&x1(x.status))?_="task_already_running":lc(a).some(x=>{var S,C;return k1(x.status)&&(x.planId===e.planId||x.taskId===o.id||u(((S=oe(x.payload))==null?void 0:S.stepId)??((C=oe(x.payload))==null?void 0:C.step_id))===e.id)})?_="approval_pending":(l.auto_dispatch===!1||l.autoDispatch===!1)&&(_="auto_dispatch_disabled"):_="missing_task",{taskId:d,latestRunId:p,dispatchable:!_,skipReason:_}}function v1(e,a){const l=new Map(ji(a).map(r=>[r.id,r]));return e.map(r=>{const o=l.get(r);if(!o)return{step_id:r,task_id:null,latest_run_id:null,title:r,status:"missing",dependency_status:"missing",dispatchable:!1,skip_reason:"missing_step"};const d=oe(o.payload)??{},p=oe(d.dependencyGraph??d.dependency_graph)??{},h=Ym(d),_=Wb(o,a,d);return{step_id:o.id,task_id:_.taskId,latest_run_id:_.latestRunId,title:o.title,status:o.status,dependency_status:u(p.status)||o.status,dispatchable:_.dispatchable,skip_reason:_.skipReason,lease_state:u(h==null?void 0:h.state)||null,lease_active:!!h}})}function Ym(e){const a=oe(e.dispatchLease??e.dispatch_lease);if(!a)return null;const l=u(a.state)||"active",r=u(a.expires_at??a.expiresAt),o=u(a.lease_id??a.leaseId),d=u(a.owner_device_id??a.ownerDeviceId);return l!=="active"||!r||r<=new Date().toISOString()||!o||!d?null:a}function iy(e){return["completed","succeeded","success","done","skipped","cancelled","canceled"].includes(e.toLowerCase())}function x1(e){return["running","pending","queued","started"].includes(e.toLowerCase())}function k1(e){return["pending","reviewing","open","waiting"].includes(e.toLowerCase()||"pending")}function cc(e){return rt(e).filter(a=>a.kind==="route_decision").map(a=>{const l=oe(a.payload)??{},r=fm(l,a),o=tv(r);return{...r,route_decision_id:r.id,event_id:a.id,status:r.policy_result||"accepted",status_label:nv(r),attention_level:o,entity_type:"route_decision",entity_id:r.id,occurred_at:a.occurredAt,created_at:a.createdAt,updated_at:r.recorded_at||a.occurredAt,payload:l}}).sort((a,l)=>u(l.recorded_at).localeCompare(u(a.recorded_at))||u(l.event_id).localeCompare(u(a.event_id)))}function S1(e,a){const l=u(a.get("route_kind")),r=u(a.get("intent_kind")),o=u(a.get("policy_result"));return sa(e,a).filter(d=>!l||u(d.route_kind)===l).filter(d=>!r||u(d.intent_kind)===r).filter(d=>!o||u(d.policy_result)===o)}function ev(e,a){const l=Es(a);return bv(e,a).map(r=>({notification_id:r.notification_id,kind:r.kind,level:r.level,status:r.status,title:r.title,body:r.body,plan_id:r.plan_id,task_id:r.task_id,correlation_id:r.correlation_id,created_at:r.created_at,updated_at:r.replied_at||r.dismissed_at||r.read_at||r.created_at,read_at:r.read_at??null,dismissed_at:r.dismissed_at??null,replied_at:r.replied_at??null,muted_by_preferences:!jv(r,l),entity_type:"notification",entity_id:r.notification_id,source:We})).sort((r,o)=>u(o.created_at).localeCompare(u(r.created_at))||u(o.notification_id).localeCompare(u(r.notification_id)))}function j1(e){const a=$s(e).filter(d=>d.approval_conflict_active===!0).map(d=>({intervention_id:`approval-conflict:${u(d.approval_id)}`,kind:"approval_conflict",title:u(d.title)||u(d.summary)||"审批跨端冲突",status:"open",priority:"high",entity_type:"approval",entity_id:u(d.approval_id),approval_id:u(d.approval_id),plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:u(d.run_id)||null,reason:u(d.approval_conflict_reason)||"approval_conflict",summary:`本地 ${u(d.approval_conflict_local_status)||u(d.status)} / 管理端 ${u(d.approval_conflict_remote_status)||"unknown"}`,occurred_at:u(d.approval_conflict_detected_at)||u(d.updated_at)||u(d.created_at),updated_at:u(d.approval_conflict_detected_at)||u(d.updated_at)||u(d.created_at),source:We,payload:d})),l=cc(e).filter(d=>["warn","error","action"].includes(u(d.attention_level))).map(d=>{var p,h,_;return{intervention_id:`route-intervention:${u(d.route_decision_id)}`,kind:"route_intervention",title:nv(d),status:u(d.policy_result)||u(d.status)||"attention",priority:u(d.attention_level)==="error"?"high":u(d.attention_level)==="warn"?"medium":"normal",entity_type:"route_decision",entity_id:u(d.route_decision_id),route_decision_id:u(d.route_decision_id),plan_id:u((p=oe(d.context_refs))==null?void 0:p.plan_id)||null,task_id:u((h=oe(d.context_refs))==null?void 0:h.task_id)||null,run_id:u((_=oe(d.context_refs))==null?void 0:_.run_id)||null,reason:Le(we(d.reason_codes)).join(" / ")||u(d.blocked_reason)||u(d.policy_result),summary:`${u(d.route_kind)} / ${u(d.intent_kind)}`,occurred_at:u(d.recorded_at)||u(d.created_at),updated_at:u(d.recorded_at)||u(d.created_at),source:We,payload:d}}),r=rt(e).filter(d=>["risk_approval_required","risk_policy_rejected"].includes(d.kind)).map(d=>{const p=oe(d.payload)??{};return{intervention_id:`risk-approval:${d.id}`,kind:"risk_approval",title:d.kind==="risk_policy_rejected"?"风险策略已拒绝":"风险审批待处理",status:u(p.status)||d.kind,priority:["high","critical"].includes(u(p.risk_level??p.riskLevel))?"high":"medium",entity_type:"risk_approval",entity_id:d.id,event_id:d.id,approval_id:u(p.approval_id??p.approvalId)||null,plan_id:(d.planId??u(p.plan_id))||null,task_id:(d.taskId??u(p.task_id))||null,run_id:(d.runId??u(p.run_id))||null,reason:u(p.action_kind??p.actionKind??p.reason)||d.kind,summary:d.message,occurred_at:d.occurredAt,updated_at:d.occurredAt,source:We,payload:p}}),o=ev(e,xa(e)).filter(d=>u(d.level)==="action"&&!["resolved","dismissed"].includes(u(d.status))).map(d=>({intervention_id:`notification:${u(d.notification_id)}`,kind:"action_notification",title:u(d.title)||"待处理通知",status:u(d.status)||"unread",priority:"normal",entity_type:"notification",entity_id:u(d.notification_id),notification_id:u(d.notification_id),plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:null,reason:u(d.kind),summary:u(d.body),occurred_at:u(d.created_at),updated_at:u(d.updated_at)||u(d.created_at),source:We,payload:d}));return[...a,...l,...r,...o].sort((d,p)=>Lt(p).localeCompare(Lt(d))||u(d.intervention_id).localeCompare(u(p.intervention_id)))}function w1(e,a){const l=u(a.get("kind")),r=u(a.get("status")),o=u(a.get("priority")),d=u(a.get("entity_id"));return e.filter(p=>!l||l==="all"||u(p.kind)===l).filter(p=>!r||u(p.status)===r).filter(p=>!o||u(p.priority)===o).filter(p=>!d||Jm(p).includes(d)||u(p.intervention_id)===d||u(p.route_decision_id)===d)}function C1(e,a){const l=u(a.get("id")),r=u(a.get("kind")),o=u(a.get("level")),d=u(a.get("muted")).toLowerCase();return sa(e,a).filter(p=>!l||u(p.notification_id)===l||u(p.correlation_id)===l||u(p.entity_id)===l).filter(p=>!r||u(p.kind)===r).filter(p=>!o||u(p.level)===o).filter(p=>{if(!d)return!0;const h=p.muted_by_preferences===!0;return["1","true","yes"].includes(d)?h:["0","false","no"].includes(d)?!h:!0})}function fm(e,a){const l=oe(e.routeDecision??e.route_decision??e)??{};return{id:u(l.id)||a.id,route_kind:u(l.route_kind??l.routeKind)||"ChatOnly",intent_kind:u(l.intent_kind??l.intentKind)||"chat",reason_codes:Le(we(l.reason_codes??l.reasonCodes)),candidate_skills:Le(we(l.candidate_skills??l.candidateSkills)),context_refs:oe(l.context_refs??l.contextRefs)??{},created_command_id:u(l.created_command_id??l.createdCommandId)||null,correlation_id:u(l.correlation_id??l.correlationId)||a.id,creates_plan:!!(l.creates_plan??l.createsPlan),creates_task_run:!!(l.creates_task_run??l.createsTaskRun),approval_mode:u(l.approval_mode??l.approvalMode)||null,policy_result:u(l.policy_result??l.policyResult)||"accepted",policy_source:u(l.policy_source??l.policySource)||null,blocked_reason:u(l.blocked_reason??l.blockedReason)||null,approval_id:u(l.approval_id??l.approvalId)||null,matched_intent:u(l.matched_intent??l.matchedIntent)||null,recorded_at:u(l.recorded_at??l.recordedAt)||a.occurredAt,entrypoint:u(l.entrypoint)||null,actor:u(l.actor)||null}}function tv(e){return e.policy_result==="approval_required"?"action":e.policy_result&&e.policy_result!=="accepted"?"error":e.reason_codes.includes("candidate_skills_disabled")||e.reason_codes.includes("route_action_missing_context")||e.reason_codes.includes("route_action_policy_blocked")||e.reason_codes.includes("route_action_not_mapped")?"warn":e.created_command_id?"action":"info"}function nv(e){const a=tv(e);return a==="error"?"策略拒绝":e.policy_result==="approval_required"?"待审批":a==="warn"?"需要关注":e.created_command_id?"已映射命令":"已记录"}function N1(e){const a=cc(e),l=a[0]??null,r=Ns((e==null?void 0:e.uiState)??Nt()),o=rt(e).filter(_=>_.kind==="route_decision_intervention_resolved"),d=new Set(o.map(_=>{var g;return u((g=oe(_.payload))==null?void 0:g.route_decision_id)}).filter(Boolean)),p=o.sort((_,g)=>g.occurredAt.localeCompare(_.occurredAt))[0]??null,h=oe(p==null?void 0:p.payload)??null;return{total:a.length,mapped_count:a.filter(_=>u(_.created_command_id)).length,governance_mapped_count:a.filter(_=>u(_.created_command_id)).length,governance_blocked_count:a.filter(_=>{const g=we(_.reason_codes).map(u);return g.includes("route_action_policy_blocked")||g.includes("route_action_missing_context")||g.includes("route_action_not_mapped")}).length,attention_count:a.filter(_=>["warn","error"].includes(u(_.attention_level))).length,blocked_count:a.filter(_=>u(_.policy_result)==="blocked").length,approval_required_count:a.filter(_=>u(_.policy_result)==="approval_required").length,pending_intervention_count:a.filter(_=>u(_.policy_result)!=="accepted"&&!d.has(u(_.route_decision_id))).length,restored_count:o.filter(_=>{var g;return((g=oe(_.payload))==null?void 0:g.command_accepted)===!0}).length,latest_intervention_status:u((h==null?void 0:h.status)??(h==null?void 0:h.decision))||null,policy_source:r.source??null,policy_last_pulled_at:r.last_pulled_at??null,policy_last_pull_error:r.last_pull_error??null,latest:l?{id:u(l.route_decision_id),route_kind:u(l.route_kind),intent_kind:u(l.intent_kind),status_label:u(l.status_label),attention_level:u(l.attention_level),created_command_id:u(l.created_command_id)||null,policy_source:u(l.policy_source)||null,blocked_reason:u(l.blocked_reason)||null,approval_id:u(l.approval_id)||null,recorded_at:u(l.recorded_at)}:null}}function av(e){const a=new Map(In(e).map(d=>[d.id,d])),l=ll(null,e),r=Rs(null,e).runs,o=Fm(e,l,r);return Pm(null,e).map(d=>{const p=a.get(d.plan_id),h=l.filter(x=>x.plan_id===d.plan_id),_=r.filter(x=>x.plan_id===d.plan_id),g=o.filter(x=>x.plan_id===d.plan_id).map(x=>u(x.occurred_at??x.timestamp)).filter(Boolean).sort().pop()||null;return{plan_id:d.plan_id,remote_id:(p==null?void 0:p.remoteId)??null,title:d.title,objective:d.objective??null,status:d.status,task_count:h.length,run_count:_.length,latest_event_at:g,sync_status:((p==null?void 0:p.syncStatus)??u(d.sync_status))||null,created_at:d.created_at,updated_at:u(d.updated_at)||(p==null?void 0:p.updatedAt)||d.created_at,payload:(p==null?void 0:p.payload)??_n({source:d.source,steps:d.steps})}})}function E1(e){const a=new Map(Ct(e).map(l=>[l.id,l]));return ll(null,e).map(l=>{const r=a.get(l.task_id);return{task_id:l.task_id,remote_id:(r==null?void 0:r.remoteId)??null,plan_id:l.plan_id??null,title:l.title,status:l.status,assigned_skill_id:l.assigned_skill_id||(r==null?void 0:r.assignedSkillId)||null,sync_status:((r==null?void 0:r.syncStatus)??u(l.sync_status))||null,created_at:l.created_at,updated_at:l.updated_at,payload:(r==null?void 0:r.payload)??_n({step_id:l.step_id,description:l.description})}})}function A1(e){const a=new Map(Hn(e).map(l=>[l.id,l]));return Rs(null,e).runs.map(l=>{const r=a.get(l.run_id),o=(r==null?void 0:r.startedAt)??l.created_at,d=(r==null?void 0:r.finishedAt)??l.completed_at??null,p=(l.events??[]).slice().sort((h,_)=>u(_.occurred_at).localeCompare(u(h.occurred_at)))[0];return{run_id:l.run_id,remote_id:(r==null?void 0:r.remoteId)??null,plan_id:l.plan_id??null,task_id:l.task_id||null,status:(r==null?void 0:r.status)??l.lifecycle,started_at:o??null,finished_at:d,duration_ms:aw(o,d),last_event_message:(p==null?void 0:p.message)??null,sync_status:((r==null?void 0:r.syncStatus)??u(l.sync_status))||null,created_at:(r==null?void 0:r.createdAt)??l.created_at,payload:(r==null?void 0:r.payload)??_n({lifecycle:l.lifecycle,attempt_no:l.attempt_no})}})}function T1(e){const a=ll(null,e),l=Rs(null,e).runs,r=new Map(rt(e).map(o=>[o.id,o]));return Fm(e,a,l).map(o=>{const d=r.get(o.event_id),p=u(o.plan_id)||(d==null?void 0:d.planId)||null,h=u(o.task_id)||(d==null?void 0:d.taskId)||null;return{event_id:o.event_id,remote_id:(d==null?void 0:d.remoteId)??null,plan_id:p,task_id:h,run_id:(d==null?void 0:d.runId)??null,kind:o.kind??o.event_type??(d==null?void 0:d.kind)??null,message:o.message??(d==null?void 0:d.message)??null,occurred_at:u(o.occurred_at??o.timestamp)||(d==null?void 0:d.occurredAt),sync_status:(d==null?void 0:d.syncStatus)??null,payload:(d==null?void 0:d.payload)??_n({aggregate_type:o.aggregate_type,aggregate_id:o.aggregate_id})}})}function Km(e){const a=new Map(gd(e).map(r=>[r.id,r])),l=wi(e);return l.map(r=>{var S;const o=u(r.artifact_id)||u(r.subject_id),d=a.get(o),p=hv({plan_id:r.plan_id,task_id:r.task_id,run_id:r.run_id,fallback_type:"artifact",fallback_id:r.subject_id??o}),h=Xm(e,o),_=_v(e,o,r),g=Zm(l,r),x=Sd(r);return{...r,artifact_id:o,remote_id:((d==null?void 0:d.remoteId)??u(r.remote_id))||null,entity_type:p.entity_type,entity_id:p.entity_id,sync_status:((d==null?void 0:d.syncStatus)??u(r.sync_status))||null,version:g.version,version_key:g.version_key,version_rank:g.version_rank,retention_status:h.retention_status,retention_until:h.retention_until,last_retention_action:h.last_retention_action,cleanup_status:_.cleanup_status,deleted_at:_.deleted_at,cleanup_reason:_.cleanup_reason,cleanup_event_id:_.cleanup_event_id,last_access_status:u((S=oe(r.access))==null?void 0:S.last_access_status)||null,delivery_summary:x}})}function lv(e){const a=new Map;return Km(e).forEach(l=>{const r=R1(l);a.set(r,[...a.get(r)??[],l])}),[...a.entries()].map(([l,r])=>{const o=r.slice().sort((g,x)=>Lt(x).localeCompare(Lt(g))),d=o[0]??{},p=Le(r.map(g=>g.artifact_id)),h=Le(r.map(g=>$1(g))),_=Le(r.map(g=>g.version_key||g.version||g.artifact_id));return{entity_type:"artifact_group",entity_id:l,group_key:l,version_key:u(d.version_key)||l,title:u(d.name)||u(d.title)||l,summary:`产物 ${p.length} / 设备 ${h.length} / 版本 ${_.length}`,status:sy(Mo(r,"retention_status"))||"unmanaged",sync_status:sy(Mo(r,"sync_status"))||null,plan_id:u(d.plan_id)||null,task_id:u(d.task_id)||null,run_id:u(d.run_id)||null,artifact_ids:p,artifact_count:p.length,device_count:h.length,version_count:_.length,latest_artifact_id:u(d.artifact_id)||null,retention_status_counts:Mo(r,"retention_status"),cleanup_status_counts:Mo(r,"cleanup_status"),updated_at:Lt(d),created_at:u(d.created_at)||null,business_view:_n({artifact_ids:p,device_ids:h,version_keys:_}),payload:{artifacts:o},source:We}}).sort((l,r)=>Lt(r).localeCompare(Lt(l))||u(l.entity_id).localeCompare(u(r.entity_id)))}function R1(e){const a=u(e.version_key).replace(/:v[^:]+$/,"");if(a)return a;const l=u(e.name)||u(e.title);return`artifact-group:${u(e.kind)||"artifact"}:${u(e.source_label)||u(e.source_type)}:${l||u(e.uri)||u(e.artifact_id)}`}function $1(e){const a=oe(e.payload)??{};return u(e.device_id)||u(e.source_device_id)||u(e.remote_device_id)||u(a.device_id??a.deviceId)||u(a.source_device_id??a.sourceDeviceId)||"local"}function Mo(e,a){return e.reduce((l,r)=>{const o=u(r[a])||"none";return l[o]=(l[o]??0)+1,l},{})}function sy(e){var a;return((a=Object.entries(e).sort((l,r)=>r[1]-l[1]||l[0].localeCompare(r[0]))[0])==null?void 0:a[0])??null}function Qm(e,a){const l=Km(e).find(r=>u(r.artifact_id)===a||u(r.remote_id)===a)??null;return l?{...l,versions:iv(e,u(l.artifact_id)),lifecycle_events:mv(e).filter(r=>u(r.artifact_id)===u(l.artifact_id)).slice(0,20),cleanup_events:pv(e).filter(r=>u(r.artifact_id)===u(l.artifact_id)).slice(0,20)}:null}function iv(e,a){const l=wi(e),r=l.find(d=>u(d.artifact_id)===a||u(d.subject_id)===a);if(!r)return[];const o=id(r);return l.filter(d=>id(d)===o).sort((d,p)=>u(d.created_at).localeCompare(u(p.created_at))).map((d,p)=>{const h=Zm(l,d);return{artifact_id:u(d.artifact_id)||u(d.subject_id),name:u(d.name)||null,version:h.version||`local-v${p+1}`,version_key:h.version_key,version_rank:p+1,delivery_summary:Sd(d),retention_status:Xm(e,u(d.artifact_id)).retention_status,created_at:u(d.created_at)||null,source_label:u(d.source_label)||null}})}function $s(e){const a=new Map(lc(e).map(l=>[l.id,l]));return Yl(e).map(l=>{const r=u(l.approval_id),o=a.get(r),d=M1(e,r,l),p=D1(l),h=z1(l),_=hv({plan_id:l.plan_id,task_id:l.task_id,run_id:l.run_id,fallback_type:u(l.source)==="qimingclaw-sync"?"sync_outbox":"approval",fallback_id:l.task_id||r});return{...l,approval_id:r,remote_id:((o==null?void 0:o.remoteId)??u(l.remote_id))||null,entity_type:_.entity_type,entity_id:_.entity_id,sync_status:((o==null?void 0:o.syncStatus)??u(l.sync_status))||null,risk_level:d.risk_level,sla_status:d.sla_status,due_at:d.due_at,last_action:d.last_action,last_actor:d.last_actor,comment_count:d.comment_count,delegate_to:d.delegate_to,workflow_id:p.workflow_id,current_step_id:p.current_step_id,current_step_label:p.current_step_label,current_participant:p.current_participant,approval_step_index:p.step_index,approval_step_count:p.step_count,next_step_label:p.next_step_label,approval_conflict_active:h.active,approval_conflict_reason:h.reason,approval_conflict_remote_status:h.remote_status,approval_conflict_detected_at:h.detected_at,approval_conflict_local_status:h.local_status,approval_conflict_remote_current_step_id:h.remote_current_step_id,approval_conflict_resolved_at:h.resolved_at,approval_conflict_resolution:h.resolution,approval_conflict_resolution_actor:h.resolution_actor,approval_conflict_resolution_event_id:h.resolution_event_id}})}function sv(e,a){const l=$s(e).find(r=>u(r.approval_id)===a||u(r.remote_id)===a)??null;return l?{...l,timeline:gv(u(l.approval_id),e).events}:null}function Vm(e){return rt(e).filter(a=>["approval_action_recorded","approval_action_rejected"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{},r=oe(l.delegate_summary),o=oe(l.comment_summary),d=oe(l.sla_summary),p=oe(l.risk_summary);return{action_id:a.id,event_id:a.id,kind:a.kind,approval_id:u(l.approval_id)||null,action:u(l.action)||null,status:u(l.status)||null,comment_preview:u(o==null?void 0:o.preview)||null,comment_length:vt(o==null?void 0:o.length),delegate_to:u((r==null?void 0:r.label)??(r==null?void 0:r.target))||null,sla_status:u(d==null?void 0:d.sla_status)||null,due_at:u(d==null?void 0:d.due_at)||null,risk_level:u(p==null?void 0:p.risk_level)||null,actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function rv(e){const a=new Map($s(e).map(o=>[u(o.approval_id),o])),l=Vm(e).map(o=>{const d=u(o.approval_id),p=a.get(d);return{history_id:u(o.action_id),event_id:u(o.event_id),approval_id:d||null,action:u(o.action)||null,status:u(o.status)||null,actor:u(o.actor)||null,risk_level:u(o.risk_level)||null,due_at:u(o.due_at)||null,delegate_to:u(o.delegate_to)||null,comment_length:vt(o.comment_length),message:u(o.message)||null,plan_id:u(o.plan_id)||u(p==null?void 0:p.plan_id)||null,task_id:u(o.task_id)||u(p==null?void 0:p.task_id)||null,run_id:u(o.run_id)||u(p==null?void 0:p.run_id)||null,occurred_at:u(o.occurred_at)||null,updated_at:u(o.occurred_at)||null,sync_status:u(o.sync_status)||null,entity_type:"approval_history",entity_id:u(o.action_id),source:We}}),r=rt(e).filter(o=>o.kind==="approval_decision").map(o=>{const d=oe(o.payload)??{},p=u(d.approvalId??d.approval_id)||o.id.split(":decision:")[0]||"",h=a.get(p);return{history_id:o.id,event_id:o.id,approval_id:p||null,action:"decision",status:u(d.nextStatus??d.next_status??d.decision)||null,actor:u(d.actor)||u(d.source)||"qimingclaw-approval-decision",risk_level:u(h==null?void 0:h.risk_level)||null,due_at:u(h==null?void 0:h.due_at)||null,delegate_to:u(h==null?void 0:h.delegate_to)||null,comment_length:null,message:o.message||null,plan_id:o.planId||u(d.planId??d.plan_id)||u(h==null?void 0:h.plan_id)||null,task_id:o.taskId||u(d.taskId??d.task_id)||u(h==null?void 0:h.task_id)||null,run_id:o.runId||u(d.runId??d.run_id)||u(h==null?void 0:h.run_id)||null,occurred_at:o.occurredAt,updated_at:o.occurredAt,sync_status:o.syncStatus??null,entity_type:"approval_history",entity_id:o.id,source:We}});return[...l,...r].sort((o,d)=>u(d.occurred_at).localeCompare(u(o.occurred_at))||u(d.history_id).localeCompare(u(o.history_id)))}function cv(e,a){const l=u(a.get("approval_id"))||u(a.get("id")),r=u(a.get("action")),o=u(a.get("risk_level"));return sa(e,a).filter(d=>!l||u(d.approval_id)===l||u(d.history_id)===l||u(d.event_id)===l).filter(d=>!r||u(d.action)===r).filter(d=>!o||u(d.risk_level)===o)}function D1(e){const a=oe(e.payload)??{},l=oe(a.workflow)??{},r=Array.isArray(l.steps)?l.steps.map(_=>oe(_)??{}):[],o=u(l.current_step_id??l.currentStepId??a.current_step_id??a.currentStepId),d=Math.max(0,r.findIndex(_=>u(_.step_id??_.stepId??_.id)===o)),p=r[d]??null,h=r.slice(d+1).find(_=>["pending","delegated","timeout"].includes(u(_.status)||"pending"))??null;return{workflow_id:u(l.workflow_id??l.workflowId)||null,current_step_id:o||null,current_step_label:u((p==null?void 0:p.label)??(p==null?void 0:p.title)??(p==null?void 0:p.name))||null,current_participant:u((p==null?void 0:p.participant_label)??(p==null?void 0:p.participantLabel)??(p==null?void 0:p.participant_id)??(p==null?void 0:p.participantId))||null,step_index:r.length>0?d+1:null,step_count:r.length||null,next_step_label:u((h==null?void 0:h.label)??(h==null?void 0:h.title)??(h==null?void 0:h.name))||null}}function z1(e){const a=oe(e.payload)??{},l=oe(a.conflict)??{},r=oe(l.resolution)??{};return{active:l.active===!0,reason:u(l.reason)||null,remote_status:u(l.remote_status??l.remoteStatus)||null,detected_at:u(l.detected_at??l.detectedAt)||null,local_status:u(l.local_status??l.localStatus)||null,remote_current_step_id:u(l.remote_current_step_id??l.remoteCurrentStepId)||null,resolved_at:u(r.resolved_at??r.resolvedAt)||null,resolution:u(r.resolution)||null,resolution_actor:u(r.actor)||null,resolution_event_id:u(r.event_id??r.eventId)||null}}function M1(e,a,l){const r=Vm(e).filter(S=>u(S.approval_id)===a),o=r[0],d=r.find(S=>u(S.risk_level)),p=r.find(S=>{const C=u(S.sla_status);return!!(C&&C!=="untracked")}),h=r.find(S=>u(S.delegate_to)),_=oe(l.payload),g=u(p==null?void 0:p.due_at)||u((_==null?void 0:_.due_at)??(_==null?void 0:_.dueAt)??(_==null?void 0:_.timeout_at)??(_==null?void 0:_.timeoutAt)),x=u(p==null?void 0:p.sla_status)||O1(g);return{risk_level:u(d==null?void 0:d.risk_level)||"normal",sla_status:x,due_at:g||null,last_action:u(o==null?void 0:o.action)||null,last_actor:u(o==null?void 0:o.actor)||null,comment_count:r.filter(S=>u(S.action)==="comment").length,delegate_to:u(h==null?void 0:h.delegate_to)||null}}function O1(e){if(!e)return"untracked";const a=Date.parse(e);return Number.isFinite(a)?a["skill_call_allowed","skill_call_rejected","skill_call_observed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{audit_id:a.id,event_id:a.id,remote_id:a.remoteId??null,decision:u(l.decision)||a.kind.replace("skill_call_",""),source:u(l.source)||null,server_id:u(l.server_id)||null,tool_name:u(l.tool_name)||null,skill_id:u(l.skill_id)||null,call_id:u(l.call_id)||null,session_id:u(l.session_id)||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,reason_codes:Array.isArray(l.reason_codes)?l.reason_codes:[],message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function q1(e){const a=ov(e).map(r=>({audit_id:u(r.audit_id),category:"skill_call_audit",decision:u(r.decision),status:u(r.decision)||"observed",skill_id:u(r.skill_id)||null,tool_name:u(r.tool_name)||null,server_id:u(r.server_id)||null,source:u(r.source)||We,risk_level:u(r.risk_level)||null,session_id:u(r.session_id)||null,task_id:u(r.task_id)||null,run_id:u(r.run_id)||null,message:u(r.message)||`${u(r.tool_name)||u(r.skill_id)||"skill"} ${u(r.decision)}`,occurred_at:u(r.occurred_at),updated_at:u(r.occurred_at),payload_preview:sd("skill_call_audit",oe(r.payload)??{}),payload:r.payload,entity_type:"skill_audit",entity_id:u(r.audit_id)})),l=xd(e).filter(r=>["tool_call_audit","sandbox_audit","token_cost"].includes(u(r.category))).map(r=>({audit_id:u(r.audit_id),category:u(r.category),decision:u(r.decision)||u(r.status)||u(r.level),status:u(r.status)||u(r.level)||"info",skill_id:u(r.skill_id)||null,tool_name:u(r.tool_name)||null,server_id:u(r.server_id)||null,source:u(r.source)||We,risk_level:u(r.risk_level)||null,model:u(r.model)||null,total_tokens:vt(r.total_tokens),estimated_cost_usd:vt(r.estimated_cost_usd),session_id:u(r.session_id)||null,task_id:u(r.task_id)||null,run_id:u(r.run_id)||null,message:u(r.message)||u(r.action)||u(r.category),occurred_at:u(r.occurred_at),updated_at:u(r.updated_at)||u(r.occurred_at),payload_preview:sd(u(r.category),oe(r.payload)??{}),payload:r.payload,entity_type:"skill_audit",entity_id:u(r.audit_id)}));return[...a,...l].sort((r,o)=>Lt(o).localeCompare(Lt(r))||u(r.audit_id).localeCompare(u(o.audit_id)))}function L1(e,a){const l=u(a.get("skill_id")),r=u(a.get("server_id")),o=u(a.get("tool_name")),d=u(a.get("decision")),p=u(a.get("category")),h=u(a.get("status"));return e.filter(_=>!l||u(_.skill_id)===l).filter(_=>!r||u(_.server_id)===r).filter(_=>!o||u(_.tool_name)===o).filter(_=>!d||u(_.decision)===d).filter(_=>!p||u(_.category)===p).filter(_=>!h||u(_.status)===h)}function dv(e){const l=((e==null?void 0:e.uiState)??Nt()).opsWorkbenchStateById??{},r=vd(e).results.filter(h=>h.severity==="warn"||h.severity==="error").map(h=>{const _=`diagnostic:${u(h.id)||u(h.category)||h.message}`;return Vr({ops_id:_,kind:"diagnostic",title:h.message||"诊断项需要处理",status:h.severity,priority:h.severity,entity_type:"diagnostic",entity_id:u(h.id)||u(h.category)||_,category:h.category,recommended_action:"mark_reviewed",reason_codes:[u(h.category)||"doctor_issue"],occurred_at:h.created_at??(e==null?void 0:e.generatedAt)??new Date().toISOString(),updated_at:h.created_at??(e==null?void 0:e.generatedAt)??new Date().toISOString(),payload:h},l[_])}),o=Ll(e).filter(h=>h.requires_human_action||h.status==="degraded"||h.status==="stopped").map(h=>{const _=`service:${h.service_id}`,g=uv(h.service_id);return Vr({ops_id:_,kind:"service",title:h.name,status:h.status,priority:h.status==="stopped"?"error":"warn",entity_type:"managed_service",entity_id:h.service_id,service_id:h.service_id,recommended_action:g?"safe_restart_service":"mark_reviewed",reason_codes:[h.status,g?"safe_restart_service":"manual_review_required"],summary:h.error||h.status_label,occurred_at:h.last_seen_at,updated_at:h.last_seen_at,payload:h},l[_])}),d=xd(e).filter(h=>["warn","error"].includes(u(h.level))).map(h=>{const _=`audit:${u(h.audit_id)}`;return Vr({ops_id:_,kind:"audit",title:u(h.message)||u(h.action)||"审计风险",status:u(h.level),priority:u(h.level),entity_type:u(h.entity_type)||"audit",entity_id:u(h.entity_id)||u(h.audit_id),audit_id:u(h.audit_id),recommended_action:"mark_reviewed",reason_codes:[u(h.category)||"audit_risk"],occurred_at:u(h.occurred_at),updated_at:u(h.updated_at)||u(h.occurred_at),payload:h},l[_])}),p=B1(e,l);return[...r,...o,...d,...p].filter(h=>u(h.status)!=="dismissed").sort((h,_)=>Lt(_).localeCompare(Lt(h))||u(h.ops_id).localeCompare(u(_.ops_id)))}function B1(e,a){const l=(e==null?void 0:e.uiState)??Nt();return[{id:"plan_step_dispatch",title:"PlanStep 派发策略",error:Bl(l).last_pull_error,pulledAt:Bl(l).last_pulled_at,recommended:"retry_policy_pull"},{id:"risk_approval",title:"风险审批策略",error:Cs(l).last_pull_error,pulledAt:Cs(l).last_pulled_at,recommended:"retry_policy_pull"},{id:"route_decision",title:"入口路由策略",error:Ns(l).last_pull_error,pulledAt:Ns(l).last_pulled_at,recommended:"retry_policy_pull"}].filter(o=>!!o.error).map(o=>{const d=`policy:${o.id}`;return Vr({ops_id:d,kind:"policy",title:o.title,status:"error",priority:"warn",entity_type:"policy",entity_id:o.id,policy_id:o.id,recommended_action:o.recommended,reason_codes:["policy_pull_error"],summary:o.error,occurred_at:o.pulledAt??(e==null?void 0:e.generatedAt)??new Date().toISOString(),updated_at:o.pulledAt??(e==null?void 0:e.generatedAt)??new Date().toISOString(),payload:o},a[d])})}function U1(e){const a=xa(e);return jd(e,a).map(l=>({notification_id:l.notification_id,kind:l.kind,title:l.title,status:l.status,priority:l.level,level:l.level,entity_type:"notification",entity_id:l.notification_id,plan_id:l.plan_id||null,task_id:l.task_id||null,run_id:null,recommended_action:l.status==="unread"?"mark_read":l.status==="dismissed"?null:"dismiss",body:l.body,reason_codes:[l.kind,l.level],occurred_at:l.created_at,updated_at:l.read_at||l.dismissed_at||l.replied_at||l.created_at,payload:l})).sort((l,r)=>Lt(r).localeCompare(Lt(l)))}function I1(e){const l=((e==null?void 0:e.uiState)??Nt()).dailyReportWorkbenchStateById??{};return mm(e).map(r=>{const o=u(r.report_id),d=V1(e,o),p=we(r.artifact_sources),h=u(r.status)||"ready",_=d.approval_status!=="requested";return Vr({report_id:o,date:u(r.date),title:u(r.title)||"数字员工日报",status:h,priority:h==="ready"?"info":"warn",entity_type:"daily_report",entity_id:o,artifact_id:u(r.artifact_id),artifact_count:p.length,delivery_status:d.delivery_status,confirmation_status:d.confirmation_status,approval_status:d.approval_status,recommended_action:d.confirmation_status!=="confirmed"?"confirm_report":_?"request_approval":"open_report",reason_codes:["daily_report_workbench"],occurred_at:u(r.generated_at),updated_at:u(r.updated_at)||u(r.generated_at),payload:{...r,delivery:d}},l[o])}).sort((r,o)=>Lt(o).localeCompare(Lt(r)))}function Vr(e,a){return a?{...e,status:a.status||e.status,last_action:a.last_action??null,reviewed_at:a.last_action==="mark_reviewed"?a.updated_at??null:e.reviewed_at,dismissed_at:a.last_action==="dismiss"?a.updated_at??null:e.dismissed_at,updated_at:a.updated_at||e.updated_at,actor:a.actor??e.actor,reason:a.reason??e.reason}:e}function H1(e,a){const l=u(a.get("kind")),r=u(a.get("priority"));return sa(e,a).filter(o=>!l||l==="all"||u(o.kind)===l).filter(o=>!r||u(o.priority)===r||u(o.status)===r)}function G1(e,a){const l=u(a.get("kind")),r=u(a.get("level"));return sa(e,a).filter(o=>!l||l==="all"||u(o.kind)===l).filter(o=>!r||u(o.level)===r||u(o.priority)===r)}function Y1(e,a){const l=u(a.get("date"));return sa(e,a).filter(r=>!l||u(r.date)===l)}async function K1(e,a){const l=u(e.action)||"mark_reviewed";if(!["mark_reviewed","dismiss","open_related_view","retry_policy_pull","safe_restart_service"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_ops_workbench_action"]};const r=Le([...we(e.ops_ids),...we(e.opsIds)].map(u)).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["ops_ids_required"]};const o=dv(a),d=new Map(o.map(x=>[u(x.ops_id),x])),p=(a==null?void 0:a.uiState)??await yn()??Nt(),h={...p.opsWorkbenchStateById??{}},_=[];for(const x of r){const S=d.get(x);if(!S){_.push({ops_id:x,ok:!1,status:"rejected",reason_codes:["ops_item_not_found"]});continue}if(l==="safe_restart_service"){const z=u(S.service_id);if(!uv(z)){_.push({ops_id:x,service_id:z,ok:!1,status:"rejected",reason_codes:["safe_restart_service_not_allowed"]});continue}const w=await Yb(z,{reason:u(e.reason)||"ops_workbench_safe_restart",actor:u(e.actor)||"digital_employee_operator"});_.push({ops_id:x,service_id:z,ok:w.ok,status:w.status,reason_codes:w.ok?["safe_restart_service"]:[w.error||"safe_restart_service_failed"],result:w});continue}if(l==="retry_policy_pull"){const z=u(S.policy_id||S.entity_id),w=await X1(z,a);_.push({ops_id:x,policy_id:z,ok:w.ok!==!1,status:w.ok===!1?"failed":"recorded",reason_codes:[w.error?"policy_pull_failed":"policy_pull_requested"],result:w});continue}const C=new Date().toISOString();h[x]={status:l==="dismiss"?"dismissed":l==="mark_reviewed"?"reviewed":u(S.status),last_action:l,actor:u(e.actor)||"digital_employee_operator",reason:u(e.reason)||null,updated_at:C},_.push({ops_id:x,ok:!0,status:h[x].status,reason_codes:["ops_workbench_action_recorded"]})}await Gn({...Ul(p),opsWorkbenchStateById:h},"ops_workbench_action_recorded",void 0,{action:l,ops_ids:r,reason:u(e.reason)||null});const g=_.filter(x=>x.ok!==!1).length;return{ok:g>0,action:l,total:r.length,recorded:g,rejected:r.length-g,items:_,reason_codes:["ops_workbench_action_recorded"]}}async function Q1(e,a){const l=u(e.action)||"mark_read";if(!["mark_read","dismiss","pull_updates","open_desktop_settings"].includes(l))return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_notification_workbench_action"]};if(l==="pull_updates"){const h=await Ob();return{ok:h.ok!==!1,action:l,total:1,recorded:h.ok===!1?0:1,rejected:h.ok===!1?1:0,items:[{ok:h.ok!==!1,result:h}],reason_codes:["notification_workbench_action_recorded"]}}if(l==="open_desktop_settings"){const h=await qb();return{ok:h.success!==!1,action:l,total:1,recorded:h.success===!1?0:1,rejected:h.success===!1?1:0,items:[{ok:h.success!==!1,result:h}],reason_codes:["notification_workbench_action_recorded"]}}const r=Le([...we(e.notification_ids),...we(e.notificationIds)].map(u)).slice(0,100);if(r.length===0)return{ok:!1,action:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["notification_ids_required"]};const o=[];for(const h of r){const _=await Cv(h,l==="mark_read"?"read":"dismiss",{},a);o.push({notification_id:h,ok:_.ok,status:_.status,reason_codes:_.ok?["notification_workbench_action_recorded"]:["notification_action_failed"],result:_})}const d=(a==null?void 0:a.uiState)??await yn()??Nt();await Gn(d,"notification_workbench_action_recorded",void 0,{action:l,notification_ids:r});const p=o.filter(h=>h.ok!==!1).length;return{ok:p>0,action:l,total:r.length,recorded:p,rejected:r.length-p,items:o,reason_codes:["notification_workbench_action_recorded"]}}function V1(e,a){var r,o;const l=rt(e).filter(d=>["daily_report_send_recorded","daily_report_confirmed","daily_report_approval_requested"].includes(d.kind)).filter(d=>{var p,h;return u(((p=oe(d.payload))==null?void 0:p.report_id)??((h=oe(d.payload))==null?void 0:h.reportId))===a}).sort((d,p)=>p.occurredAt.localeCompare(d.occurredAt));return{delivery_status:l.some(d=>d.kind==="daily_report_send_recorded")?"sent":"pending",confirmation_status:l.some(d=>d.kind==="daily_report_confirmed")?"confirmed":"pending",approval_status:l.some(d=>d.kind==="daily_report_approval_requested")?"requested":"not_requested",latest_event_id:((r=l[0])==null?void 0:r.id)??null,latest_event_at:((o=l[0])==null?void 0:o.occurredAt)??null}}function uv(e){return e==="fileServer"||e==="guiServer"}async function X1(e,a){return e==="plan_step_dispatch"?await wv(a):e==="risk_approval"?await zb():e==="route_decision"?await Mb():{ok:!1,error:"unknown_policy_id"}}function Z1(e,a){const l=u(a.get("skill_id")),r=u(a.get("server_id")),o=u(a.get("tool_name")),d=u(a.get("decision"));return e.filter(p=>!l||u(p.skill_id)===l).filter(p=>!r||u(p.server_id)===r).filter(p=>!o||u(p.tool_name)===o).filter(p=>!d||u(p.decision)===d)}function fv(e){return rt(e).filter(a=>["artifact_access_allowed","artifact_access_rejected"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{access_id:a.id,event_id:a.id,remote_id:a.remoteId??null,artifact_id:u(l.artifact_id)||null,action:u(l.action)||null,status:u(l.status)||a.kind.replace("artifact_access_",""),reason_codes:Array.isArray(l.reason_codes)?l.reason_codes:[],actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function J1(e,a){const l=u(a.get("artifact_id")),r=u(a.get("action")),o=u(a.get("status"));return e.filter(d=>!l||u(d.artifact_id)===l).filter(d=>!r||u(d.action)===r).filter(d=>!o||u(d.status)===o)}function mv(e){return rt(e).filter(a=>["artifact_retention_marked","artifact_retention_rejected","artifact_version_observed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{lifecycle_id:a.id,event_id:a.id,kind:a.kind,artifact_id:u(l.artifact_id)||null,action:u(l.action)||null,status:u(l.status)||null,retention_status:u(l.retention_status)||null,retention_until:u(l.retention_until)||null,reason:u(l.reason)||null,actor:u(l.actor)||null,source:u(l.source)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function pv(e){return rt(e).filter(a=>["artifact_cleanup_executed","artifact_cleanup_rejected","artifact_cleanup_failed"].includes(a.kind)).map(a=>{const l=oe(a.payload)??{};return{cleanup_event_id:a.id,event_id:a.id,kind:a.kind,artifact_id:u(l.artifact_id)||null,status:u(l.status)||null,cleanup_status:u(l.status)||null,cleanup_reason:u(l.reason)||null,reason_codes:Le(we(l.reason_codes??l.reasonCodes).map(u)),actor:u(l.actor)||null,source:u(l.source)||null,deleted_at:u(l.deleted_at)||null,plan_id:(a.planId??u(l.plan_id))||null,task_id:(a.taskId??u(l.task_id))||null,run_id:(a.runId??u(l.run_id))||null,message:a.message,occurred_at:a.occurredAt,sync_status:a.syncStatus??null,payload:l}}).sort((a,l)=>u(l.occurred_at).localeCompare(u(a.occurred_at)))}function _v(e,a,l){var d;const r=oe((d=oe(l==null?void 0:l.payload))==null?void 0:d.cleanup)??{},o=pv(e).find(p=>u(p.artifact_id)===a)??null;return{cleanup_status:u(o==null?void 0:o.cleanup_status)||u(r.status)||null,deleted_at:u(o==null?void 0:o.deleted_at)||u(r.deleted_at)||null,cleanup_reason:u(o==null?void 0:o.cleanup_reason)||u(r.cleanup_reason)||null,cleanup_event_id:u(o==null?void 0:o.cleanup_event_id)||u(r.event_id)||null}}function Xm(e,a){const l=mv(e).find(r=>u(r.artifact_id)===a&&u(r.kind)==="artifact_retention_marked");return{retention_status:u(l==null?void 0:l.retention_status)||"unmanaged",retention_until:u(l==null?void 0:l.retention_until)||null,last_retention_action:u(l==null?void 0:l.action)||null,last_retention_at:u(l==null?void 0:l.occurred_at)||null}}function F1(e,a,l){return{previous_status:u(e.retention_status)||"unmanaged",retention_status:P1(a),retention_until:u(l.retention_until??l.retentionUntil)||null,reason:u(l.reason)||null}}function P1(e){return e==="mark_keep"?"keep":e==="mark_expire"?"expire_candidate":e==="mark_review"?"review_required":e==="clear_retention"?"unmanaged":null}function W1(e){return{version:u(e.version)||null,version_key:u(e.version_key)||null,version_rank:vt(e.version_rank),file_id:u(e.file_id)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,created_at:u(e.created_at)||null,name:u(e.name)||null}}function Sd(e){return{delivery_status:u(e.delivery_status)||null,delivery_stage:u(e.delivery_stage)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,file_id:u(e.file_id)||null,version:u(e.version)||null,file_size:vt(e.file_size),source_tool:u(e.source_tool)||null}}function Zm(e,a){const l=id(a),r=e.filter(p=>id(p)===l).sort((p,h)=>u(p.created_at).localeCompare(u(h.created_at))),o=u(a.artifact_id)||u(a.subject_id),d=Math.max(0,r.findIndex(p=>u(p.artifact_id)===o||u(p.subject_id)===o));return{version:u(a.version)||`local-v${d+1}`,version_key:`${l}:v${u(a.version)||d+1}`,version_rank:d+1}}function id(e){const a=u(e.file_id),l=u(e.workspace_id),r=u(e.name);if(a)return`file:${l}:${a}:${r}`;const o=u(e.artifact_id)||u(e.subject_id);return o?`artifact:${o}`:`fallback:${l}:${u(e.project_id)}:${r||u(e.uri)}`}function mm(e){return wi(e).filter(ew).map(a=>{const l=oe(a.payload)??{},r=u(a.artifact_id)||u(l.artifact_id)||u(a.subject_id),o=u(l.report_id)||u(a.report_id)||r.replace(/:artifact:text$/,""),d=u(l.generated_at)||u(a.created_at)||new Date().toISOString(),p=u(l.date)||d.slice(0,10);return{report_id:o,artifact_id:r,event_id:u(l.event_id)||`${o}:event:generated`,date:p,title:u(l.title)||u(a.name)||`${p} 数字员工日报`,status:u(l.status)||"ready",summary:u(l.summary)||u(a.value)||"",totals:oe(l.totals)??{},detail_lines:we(l.detail_lines),artifact_sources:we(l.artifact_sources),filename:u(l.filename)||u(a.name)||Wm(p),html_artifact_id:u(l.html_artifact_id)||`${o}:artifact:html`,pdf_artifact_id:u(l.pdf_artifact_id)||`${o}:artifact:pdf`,html_filename:u(l.html_filename)||ep(p),pdf_filename:u(l.pdf_filename)||tp(p),format:u(l.format)||"text",text_content:u(l.text_content)||u(a.value),html_content:u(l.html_content)||"",generated_at:d,sync_status:u(a.sync_status)||null,entity_type:"artifact",entity_id:r,plan_id:u(a.plan_id)||null,task_id:u(a.task_id)||null,run_id:u(a.run_id)||null,created_at:u(a.created_at)||d,updated_at:d,payload:l}}).sort((a,l)=>u(l.generated_at).localeCompare(u(a.generated_at)))}function ew(e){const a=oe(e.payload)??{},l=u(a.format)||"text";return u(e.kind)==="daily_report"&&l!=="html"&&l!=="pdf"}function tw(e){const a=oe(e.payload)??{};return u(e.kind)==="daily_report"||u(a.kind)==="daily_report"||!!(u(a.report_id)&&u(a.text_content))}function nw(e,a){const l=u(a.get("date"));return sa(e,a).filter(r=>!l||u(r.date)===l)}function sa(e,a){const l=u(a.get("entity_id")),r=u(a.get("remote_id")),o=u(a.get("status")),d=u(a.get("sync_status")),p=u(a.get("updated_from")),h=u(a.get("updated_to"));return e.filter(_=>!l||Jm(_).includes(l)).filter(_=>!r||u(_.remote_id)===r).filter(_=>!o||u(_.status)===o).filter(_=>!d||u(_.sync_status)===d).filter(_=>{const g=Lt(_);return!(p&&(!g||gh))})}function pn(e,a){const l=Math.max(1,Math.floor(vt(a.get("page_no"))??1)),r=Math.max(1,Math.min(Math.floor(vt(a.get("page_size"))??20),100)),o=(l-1)*r;return{items:e.slice(o,o+r),page_no:l,page_size:r,total:e.length}}function hv(e){const a=u(e.run_id);if(a)return{entity_type:"run",entity_id:a};const l=u(e.task_id);if(l)return{entity_type:"task",entity_id:l};const r=u(e.plan_id);return r?{entity_type:"plan",entity_id:r}:{entity_type:u(e.fallback_type)||"record",entity_id:u(e.fallback_id)||null}}function Jm(e){return Le([e.entity_id,e.intervention_id,e.route_decision_id,e.plan_id,e.task_id,e.run_id,e.event_id,e.audit_id,e.memory_id,e.history_id,e.step_id,e.node_id,e.artifact_id,e.approval_id,e.notification_id,e.report_id])}function Lt(e){return u(e.updated_at)||u(e.finished_at)||u(e.started_at)||u(e.occurred_at)||u(e.latest_event_at)||u(e.created_at)}function aw(e,a){if(!e||!a)return null;const l=Date.parse(e),r=Date.parse(a);return!Number.isFinite(l)||!Number.isFinite(r)||r({event_id:_.id,aggregate_type:_.runId?"run":_.taskId?"task":"plan",aggregate_id:_.runId??_.taskId??_.planId??_.id,event_type:_.kind,kind:_.kind,message:_.message,occurred_at:_.occurredAt,timestamp:_.occurredAt,plan_id:_.planId??null,task_id:_.taskId??null})),o=l.flatMap(_=>(_.events??[]).map(g=>({event_id:g.event_id??`${_.run_id}:${g.kind??"event"}:${g.occurred_at??_.created_at}`,aggregate_type:"run",aggregate_id:_.run_id,event_type:g.kind??_.lifecycle,kind:g.kind??_.lifecycle,message:g.message??_.lifecycle,occurred_at:g.occurred_at??_.completed_at??_.created_at,timestamp:g.occurred_at??_.completed_at??_.created_at,plan_id:_.plan_id??null,task_id:_.task_id||null}))),d=a.map(_=>({event_id:`task-status-${_.task_id}`,aggregate_type:"task",aggregate_id:_.task_id,event_type:"task_status",kind:_.status,message:`${_.title}:${la(_.status)}`,occurred_at:_.updated_at??_.created_at,timestamp:_.updated_at??_.created_at,plan_id:_.plan_id??null,task_id:_.task_id})),p=(((h=e==null?void 0:e.sync)==null?void 0:h.recentFailures)??[]).map(_=>({event_id:`digital-sync-failure-${_.id}`,aggregate_type:"sync_outbox",aggregate_id:_.id,event_type:"digital_sync_failed",kind:"digital_sync_failed",message:sc(_),occurred_at:_.lastAttemptAt??_.updatedAt??_.createdAt,timestamp:_.lastAttemptAt??_.updatedAt??_.createdAt,plan_id:null,task_id:null}));return cw([...r,...o,...d,...p]).sort((_,g)=>(g.occurred_at??"").localeCompare(_.occurred_at??""))}function cw(e){const a=new Set;return e.filter(l=>!l.event_id||a.has(l.event_id)?!1:(a.add(l.event_id),!0))}function Yl(e){var o;const a=lc(e).map(d=>({approval_id:d.id,task_id:d.taskId??"",status:d.status,created_at:d.createdAt,plan_id:d.planId??null,run_id:d.runId??null,title:d.title,reversible:d.status==="pending",source:"qimingclaw-runtime",sync_status:d.syncStatus,sync_error:d.syncError,payload:d.payload})),r=(((o=e==null?void 0:e.sync)==null?void 0:o.recentFailures)??[]).filter(d=>d.dueForRetry===!1||/credential|auth|token|unauthor/i.test(d.error??"")).slice(0,20).map(d=>({approval_id:`sync-review-${d.id}`,task_id:d.entityId,status:"pending",created_at:d.createdAt,title:`同步异常待处理:${d.entityType}/${d.entityId}`,reversible:!1,source:"qimingclaw-sync",error:d.error}));return[...a,...r]}function gv(e,a){const l=Yl(a).find(g=>u(g.approval_id)===e)??null,r=lc(a).find(g=>g.id===e)??null,o=oe((l==null?void 0:l.payload)??(r==null?void 0:r.payload)),d=yv(o),p={approvalId:e,planId:u(l==null?void 0:l.plan_id)||(r==null?void 0:r.planId)||"",taskId:u(l==null?void 0:l.task_id)||(r==null?void 0:r.taskId)||"",runId:u(l==null?void 0:l.run_id)||(r==null?void 0:r.runId)||"",permissionId:d.permissionId,sessionId:d.sessionId},h=u(l==null?void 0:l.created_at)||(r==null?void 0:r.createdAt)||(r==null?void 0:r.updatedAt)||"",_=[];if(l||r){const g=u(l==null?void 0:l.title)||(r==null?void 0:r.title)||"待确认事项",x=u(l==null?void 0:l.status)||(r==null?void 0:r.status)||"pending";_.push({event_id:`${e}:approval_record`,kind:"approval_record",status:x,message:`审批记录:${g} -> ${x}`,occurred_at:h||new Date().toISOString(),payload:o,source_type:"approval"})}for(const g of rt(a)){if(!ow(g,p))continue;const x=oe(g.payload);_.push({event_id:g.id,kind:g.kind,status:dw(g,x),message:g.message||g.kind,occurred_at:g.occurredAt,payload:x,source_type:u(x==null?void 0:x.source)||"runtime_event"})}return{approval_id:e,approval:l,events:uw(_).sort((g,x)=>g.occurred_at.localeCompare(x.occurred_at)||g.event_id.localeCompare(x.event_id))}}function yv(e){const a=oe(e==null?void 0:e.acpPermission)??oe(e==null?void 0:e.acp_permission)??oe(e==null?void 0:e.permission);return{permissionId:u(a==null?void 0:a.permission_id)||u(a==null?void 0:a.permissionId)||u(e==null?void 0:e.permission_id)||u(e==null?void 0:e.permissionId),sessionId:u(a==null?void 0:a.session_id)||u(a==null?void 0:a.sessionId)||u(e==null?void 0:e.session_id)||u(e==null?void 0:e.sessionId)}}function ow(e,a){const l=oe(e.payload);if((u(l==null?void 0:l.approvalId)||u(l==null?void 0:l.approval_id)||u(l==null?void 0:l.decision_id)||u(l==null?void 0:l.decisionId))===a.approvalId||e.id.startsWith(`${a.approvalId}:`))return!0;const o=yv(l);return a.permissionId&&o.permissionId===a.permissionId||a.sessionId&&o.sessionId===a.sessionId?!0:e.kind.includes("approval")||e.kind.includes("permission")?!!(a.runId&&e.runId===a.runId||a.taskId&&e.taskId===a.taskId||a.planId&&e.planId===a.planId):!1}function dw(e,a){return u(a==null?void 0:a.nextStatus)||u(a==null?void 0:a.next_status)||u(a==null?void 0:a.status)||u(a==null?void 0:a.decision)||(e.kind==="approval_decision"?"completed":null)}function uw(e){const a=new Set;return e.filter(l=>a.has(l.event_id)?!1:(a.add(l.event_id),!0))}function xa(e){return e!=null&&e.uiState?Ul(e.uiState):Nt()}function fw(e,a){const l=jd(a,xa(a)),r=(e||"all").toLowerCase();return r==="all"?{notifications:l.filter(o=>o.status!=="dismissed")}:{notifications:l.filter(o=>o.status===r)}}function jd(e,a){return bv(e,a).filter(l=>jv(l,a.notificationPreferences))}function bv(e,a){const l=Nw([...gw(e),...yw(e),...bw(e),...vw(e),...kw(e),...Sw(e),...jw(e),...ww(e),...xw(e)]),r=a.notificationStateById??{};return l.map(o=>Cw(o,r[o.notification_id])).sort((o,d)=>d.created_at.localeCompare(o.created_at)||d.notification_id.localeCompare(o.notification_id))}function vv(){return{enabled:!0,desktop_enabled:!0,muted_kinds:[],muted_levels:[],updated_at:null}}function xv(){return{enabled:!0,subscribed_actions:[...$b],subscribed_risk_levels:["high","critical"],notify_on_timeout:!0,updated_at:null}}function kv(){return{enabled:!0,max_per_sweep:3,auto_dispatch_ready_steps:!0,updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function Sv(){return{enabled:!0,approval_required_risk_levels:["high","critical"],approval_required_actions:[],auto_reject_actions:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function rd(){return{enabled:!0,auto_create_governance_commands:!0,approval_required_intents:[],blocked_intents:[],preferred_route_kinds:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null}}function cd(e){const a=e==null?void 0:e.approvalSubscriptionPreferences,l=xv();if(!a||typeof a!="object")return l;const r=Array.isArray(a.subscribed_actions)?a.subscribed_actions.filter(d=>$b.includes(d)):l.subscribed_actions,o=Array.isArray(a.subscribed_risk_levels)?a.subscribed_risk_levels.filter(d=>hj.includes(d)):l.subscribed_risk_levels;return{enabled:a.enabled!==!1,subscribed_actions:[...new Set(r)],subscribed_risk_levels:[...new Set(o)],notify_on_timeout:a.notify_on_timeout!==!1,updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at}}function Bl(e){const a=e==null?void 0:e.planStepDispatchPolicy,l=kv();if(!a||typeof a!="object")return l;const r=Number(a.max_per_sweep);return{enabled:a.enabled!==!1,max_per_sweep:Number.isFinite(r)?Math.max(1,Math.min(Math.floor(r),10)):l.max_per_sweep,auto_dispatch_ready_steps:a.auto_dispatch_ready_steps!==!1,updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function Cs(e){const a=e==null?void 0:e.riskApprovalPolicy,l=Sv();if(!a||typeof a!="object")return l;const r=Le(we(a.approval_required_risk_levels).map(o=>u(o).toLowerCase())).filter(o=>["normal","medium","high","critical"].includes(o));return{enabled:a.enabled!==!1,approval_required_risk_levels:r.length>0?r:l.approval_required_risk_levels,approval_required_actions:Le(we(a.approval_required_actions)),auto_reject_actions:Le(we(a.auto_reject_actions)),updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function Ns(e){const a=e==null?void 0:e.routeDecisionPolicy,l=rd();return!a||typeof a!="object"?l:{enabled:a.enabled!==!1,auto_create_governance_commands:a.auto_create_governance_commands!==!1,approval_required_intents:Le(we(a.approval_required_intents).map(od)),blocked_intents:Le(we(a.blocked_intents).map(od)),preferred_route_kinds:Le(we(a.preferred_route_kinds)),updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at,source:a.source==="remote"?"remote":"local",remote_updated_at:typeof a.remote_updated_at=="string"?a.remote_updated_at:null,last_pulled_at:typeof a.last_pulled_at=="string"?a.last_pulled_at:null,last_pull_error:typeof a.last_pull_error=="string"?a.last_pull_error:null}}function od(e){return u(e).trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"_")||"chat"}function Es(e){const a=e==null?void 0:e.notificationPreferences,l=vv();if(!a||typeof a!="object")return l;const r=Array.isArray(a.muted_kinds)?a.muted_kinds.filter(d=>_j.includes(d)):[],o=Array.isArray(a.muted_levels)?a.muted_levels.filter(d=>pj.includes(d)):[];return{enabled:a.enabled!==!1,desktop_enabled:a.desktop_enabled!==!1,muted_kinds:[...new Set(r)],muted_levels:[...new Set(o)],updated_at:typeof a.updated_at=="string"?a.updated_at:l.updated_at}}function jv(e,a){const l=Es({notificationPreferences:a});return!l.enabled||l.muted_levels.includes(e.level)?!1:!l.muted_kinds.includes(e.kind)}async function mw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Es(l),o=Es({notificationPreferences:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),notificationPreferences:o},"update_notification_preferences",void 0,{notification_preferences:o}),o}async function pw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=cd(l),o=cd({approvalSubscriptionPreferences:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),approvalSubscriptionPreferences:o},"update_approval_subscriptions",void 0,{approval_subscriptions:o}),o}async function _w(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Bl(l),o=Bl({planStepDispatchPolicy:{...r,...e,updated_at:new Date().toISOString()}});return await Gn({...Ul(l),planStepDispatchPolicy:o},"update_plan_step_dispatch_policy",void 0,{plan_step_dispatch_policy:o}),o}async function hw(e,a){const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=Cs(l),o=Cs({riskApprovalPolicy:{...r,...e,source:"local",updated_at:new Date().toISOString(),last_pull_error:null}});return await Gn({...Ul(l),riskApprovalPolicy:o},"update_risk_approval_policy",void 0,{risk_approval_policy:o}),o}async function wv(e){var r,o,d;const a=Bl((e==null?void 0:e.uiState)??Nt()),l=await((d=(o=(r=window.QimingClawBridge)==null?void 0:r.digital)==null?void 0:o.pullPlanStepDispatchPolicy)==null?void 0:d.call(o).catch(p=>({ok:!1,endpoint:null,pulled_at:new Date().toISOString(),policy:a,error:p instanceof Error?p.message:"plan step dispatch policy pull failed"})));return l||{ok:!1,endpoint:null,pulled_at:new Date().toISOString(),policy:a,error:"qimingclaw_bridge_unavailable"}}function gw(e){const a=new Map($s(e).map(l=>[u(l.approval_id),l]));return Yl(e).filter(l=>u(l.source)==="qimingclaw-runtime").map(l=>{const r=u(l.status)||"pending",o=Nv(r),d=a.get(u(l.approval_id)),p=u(d==null?void 0:d.sla_status),h=u(d==null?void 0:d.risk_level),_=o&&(p==="timeout"||h==="high");return{notification_id:`approval:${u(l.approval_id)}`,plan_id:u(l.plan_id),task_id:u(l.task_id),kind:o?"need_approval":"confirmation_resolved",title:_?"审批需要关注":o?"审批待处理":"审批已处理",body:u(l.title)||"待确认事项",level:_?"warn":o?"action":"info",status:o?"unread":"resolved",correlation_id:u(l.approval_id),created_at:u(l.created_at)||new Date().toISOString()}})}function yw(e){return Vm(e).filter(a=>u(a.kind)==="approval_action_recorded").filter(a=>["delegate","mark_timeout","mark_risk"].includes(u(a.action))).map(a=>{const l=u(a.action),r=u(a.approval_id),o=l==="mark_timeout",d=l==="mark_risk";return{notification_id:`approval-action:${r}:${l}:${mt(u(a.occurred_at))}`,plan_id:u(a.plan_id),task_id:u(a.task_id),kind:"need_approval",title:o?"审批已超时":d?"审批已标记风险":"审批已转交",body:u(a.message)||r,level:o||d?"warn":"action",status:"unread",correlation_id:r,created_at:u(a.occurred_at)||new Date().toISOString()}})}function bw(e){var a;return(((a=e==null?void 0:e.sync)==null?void 0:a.recentFailures)??[]).map(l=>({notification_id:`sync_failure:${l.id}`,plan_id:"",task_id:l.entityId,kind:"task_failed",title:`同步失败:${l.entityType}`,body:sc(l),level:l.dueForRetry===!1?"error":"warn",status:"unread",correlation_id:l.id,created_at:l.lastAttemptAt??l.updatedAt??l.createdAt}))}function vw(e){return Ll(e).filter(a=>a.requires_human_action||a.status==="degraded"||a.status==="stopped").map(a=>{var l;return{notification_id:`service:${a.service_id}`,plan_id:"",task_id:((l=a.dependent_tasks)==null?void 0:l[0])??"",kind:"need_input",title:`服务需要处理:${a.name}`,body:a.error||`${a.name} 当前状态:${a.status_label||a.status}`,level:a.status==="stopped"?"error":"warn",status:"unread",correlation_id:a.service_id,created_at:a.last_seen_at||new Date().toISOString()}})}function xw(e){return Ct(e).flatMap(a=>{const l=a.status.toLowerCase(),r=["completed","succeeded","success","done"].includes(l),o=["failed","error","rejected","cancelled","skipped"].includes(l);if(!r&&!o)return[];const d=a.updatedAt||a.createdAt||new Date().toISOString();return[{notification_id:`task:${a.id}:${mt(d)}`,plan_id:a.planId??"",task_id:a.id,kind:r?"task_finished":"task_failed",title:r?"任务已完成":"任务需要关注",body:`${a.title}:${la(a.status)}`,level:r?"info":"error",status:"unread",correlation_id:a.id,created_at:d}]})}function kw(e){return rt(e).filter(a=>a.kind==="plan_step_dispatch_failed").map(a=>{const l=oe(a.payload)??{},r=u(l.step_id)||a.id,o=u(l.reason);return{notification_id:`plan-step-dispatch:${r}:${mt(a.occurredAt)}`,plan_id:a.planId??u(l.plan_id),task_id:a.taskId??u(l.task_id),kind:"task_failed",title:"Ready 步骤派发失败",body:o?`${r}:${o}`:a.message||r,level:"error",status:"unread",correlation_id:r,created_at:a.occurredAt}})}function Sw(e){return cc(e).filter(a=>["warn","error","action"].includes(u(a.attention_level))).map(a=>{var p,h;const l=u(a.attention_level),r=u(a.route_decision_id)||u(a.event_id),o=u(a.created_command_id),d=we(a.reason_codes).map(u).filter(Boolean).join(" / ");return{notification_id:`route-decision:${r}:${mt(u(a.recorded_at))}`,plan_id:u((p=oe(a.context_refs))==null?void 0:p.plan_id),task_id:u((h=oe(a.context_refs))==null?void 0:h.task_id),kind:l==="action"?"task_progress":"task_failed",title:l==="action"?"入口路由已映射":"入口路由需要关注",body:o?`${a.route_kind} / ${a.intent_kind} -> ${o}`:`${a.route_kind} / ${a.intent_kind}${d?`:${d}`:""}`,level:l==="error"?"error":l==="warn"?"warn":"action",status:"unread",correlation_id:r,created_at:u(a.recorded_at)||new Date().toISOString()}})}function jw(e){return vd(e).results.filter(a=>a.severity==="error"||a.severity==="warn").map(a=>{const l=a.severity==="error"?"error":"warn",r=u(a.id)||`${u(a.category)||"diagnostic"}:${l}`;return{notification_id:`diagnostic:${r}`,plan_id:"",task_id:"",kind:l==="error"?"task_failed":"need_input",title:l==="error"?"诊断发现异常":"诊断需要关注",body:a.message,level:l,status:"unread",correlation_id:r,created_at:a.created_at??new Date().toISOString()}})}function ww(e){return xd(e).filter(a=>["error","warn"].includes(u(a.level))).map(a=>{const l=u(a.level)==="error"?"error":"warn",r=u(a.audit_id)||u(a.entity_id)||"audit";return{notification_id:`audit:${r}`,plan_id:u(a.plan_id),task_id:u(a.task_id)||(u(a.entity_type)==="task"?u(a.entity_id):""),kind:l==="error"?"task_failed":"need_input",title:l==="error"?"审计发现异常":"审计需要关注",body:u(a.message)||u(a.action)||r,level:l,status:"unread",correlation_id:r,created_at:u(a.occurred_at)||new Date().toISOString()}})}function Cw(e,a){return a?{...e,status:a.status??e.status,read_at:a.read_at??e.read_at??null,dismissed_at:a.dismissed_at??e.dismissed_at??null,reply:a.reply??e.reply??null,replied_at:a.replied_at??e.replied_at??null}:e}function Nw(e){const a=new Set;return e.filter(l=>!l.notification_id||a.has(l.notification_id)?!1:(a.add(l.notification_id),!0))}async function Cv(e,a,l,r){var w;const o=(r==null?void 0:r.uiState)??await yn()??Nt(),d=jd(r,o).find(D=>D.notification_id===e),p=new Date().toISOString(),h=(w=o.notificationStateById)==null?void 0:w[e],_=!!(h!=null&&h.replied_at),g={...h??{}};let x="";a==="read"?(g.status=(d==null?void 0:d.status)==="resolved"?"resolved":"read",g.read_at=g.read_at??p):a==="dismiss"?(g.status="dismissed",g.dismissed_at=p):(g.status=(d==null?void 0:d.status)==="resolved"?"resolved":"read",g.read_at=g.read_at??p,x=u(l.content??l.reply??l.message),g.reply=x,g.replied_at=p);const S={...o,notificationStateById:{...o.notificationStateById??{},[e]:g}};await Gn(S,`notification_${a}`,void 0,{notification_id:e,action:a});const C=await Ew({notification_id:e,action:a,status:g.status??(d==null?void 0:d.status)??null,read_at:g.read_at??null,dismissed_at:g.dismissed_at??null,reply:a==="reply"?x:g.reply??null,replied_at:g.replied_at??null,acted_at:a==="dismiss"?g.dismissed_at??p:a==="reply"?g.replied_at??p:g.read_at??p,actor:"digital_employee_ui",source:"sgrobot-digital-adapter"}),z=a==="reply"&&(d==null?void 0:d.kind)==="need_input"&&d.task_id&&x&&!_?await Aw(d,x,r):null;return{ok:!0,task_id:d==null?void 0:d.task_id,status:g.status,...C.ok?{}:{notification_sync_error:C.error},task_input_recorded:!!(z!=null&&z.accepted),governance_command_id:z==null?void 0:z.command_id,governance_event_id:Tw(z)}}async function Ew(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.submitNotificationAction))return{ok:!1,error:"qimingclaw_bridge_unavailable"};try{const r=await a.submitNotificationAction(e);return{ok:(r==null?void 0:r.ok)!==!1,...r!=null&&r.error?{error:r.error}:{}}}catch(r){return{ok:!1,error:r instanceof Error?r.message:String(r)}}}async function Aw(e,a,l){const r=Date.now();return Kl({command_kind:"provide_task_input",context_refs:{plan_id:e.plan_id||void 0,task_id:e.task_id},payload:{input:a,source:"notification_reply",notification_id:e.notification_id,plan_id:e.plan_id||void 0,task_id:e.task_id},correlation_id:`qimingclaw-notification-reply-${mt(e.notification_id)}-${r}`,idempotency_key:`qimingclaw-notification-reply-${e.notification_id}`},l)}function Tw(e){var l;const a=je((l=e==null?void 0:e.result)==null?void 0:l.run_id);if(!(!(e!=null&&e.accepted)||!a||!e.command_id))return`${a}:provide_task_input:${Rw(e.command_id)}`}function Rw(e){return e.replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function $w(e,a,l){var h;const r=new Map(In(l).map(_=>[_.id,_])),o=new Map(Ct(l).map(_=>[_.id,_])),d=new Map($s(l).map(_=>[u(_.approval_id),_])),p=((h=e.decisionResultsByDate)==null?void 0:h[a])??{};return Yl(l).filter(_=>u(_.source)==="qimingclaw-runtime").map(_=>{const g=oe(_.payload),x=u(_.approval_id)||`approval-${mt(u(_.task_id)||u(_.title)||"item")}`,S=p[x],C=zw(S,u(_.status)||"pending"),z=u(_.plan_id),w=u(_.task_id),D=z?r.get(z):null,N=w?o.get(w):null,k=d.get(x),A=(k==null?void 0:k.approval_conflict_active)===!0;return{id:x,title:u(_.title)||u(g==null?void 0:g.title)||"待确认事项",scenario:Dw(_,g),status:C,status_label:Mw(C,S),plan_title:(D==null?void 0:D.title)||u(g==null?void 0:g.plan_title)||u(_.plan_id)||"qimingclaw 本地记录",task_title:(N==null?void 0:N.title)||u(g==null?void 0:g.task_title)||u(_.task_id)||"待确认任务",risk_level:u(k==null?void 0:k.risk_level)||"normal",sla_status:u(k==null?void 0:k.sla_status)||"untracked",due_at:u(k==null?void 0:k.due_at)||null,last_action:u(k==null?void 0:k.last_action)||null,last_actor:u(k==null?void 0:k.last_actor)||null,comment_count:vt(k==null?void 0:k.comment_count)??0,delegate_to:u(k==null?void 0:k.delegate_to)||null,workflow_id:u(k==null?void 0:k.workflow_id)||null,current_step_id:u(k==null?void 0:k.current_step_id)||null,current_step_label:u(k==null?void 0:k.current_step_label)||null,current_participant:u(k==null?void 0:k.current_participant)||null,approval_step_index:vt(k==null?void 0:k.approval_step_index),approval_step_count:vt(k==null?void 0:k.approval_step_count),next_step_label:u(k==null?void 0:k.next_step_label)||null,conflict:A?{active:!0,reason:u(k==null?void 0:k.approval_conflict_reason)||null,remote_status:u(k==null?void 0:k.approval_conflict_remote_status)||null,detected_at:u(k==null?void 0:k.approval_conflict_detected_at)||null,local_status:u(k==null?void 0:k.approval_conflict_local_status)||null,remote_current_step_id:u(k==null?void 0:k.approval_conflict_remote_current_step_id)||null}:null,actions:Nv(C)&&!A?[{id:"approved",label:"同意",tone:"primary"},{id:"rejected",label:"驳回",tone:"secondary"}]:[]}})}function Dw(e,a){return u(a==null?void 0:a.scenario)||u(a==null?void 0:a.summary)||u(a==null?void 0:a.reason)||u(a==null?void 0:a.message)||u(e.error)||"来自 qimingclaw 本地运行记录的人工确认项。"}function zw(e,a){const l=String(e||"").toLowerCase();return["approve","approved","accept","accepted"].includes(l)?"approved":["reject","rejected","deny","denied"].includes(l)?"rejected":["dismiss","dismissed","skip","skipped"].includes(l)?"dismissed":a||"pending"}function Mw(e,a){return a?e==="approved"?"已同意":e==="rejected"?"已驳回":e==="dismissed"?"已忽略":"已处理":e==="approved"?"已同意":e==="rejected"?"已驳回":e==="completed"?"已完成":e==="failed"?"异常":"待确认"}function Nv(e){return["pending","requested"].includes(String(e||"").toLowerCase())}function wi(e){const a=[...gd(e).map(qw),...Hn(e).flatMap(r=>Ev(r,rt(e))),...rt(e).flatMap(r=>pm(r.id,r.payload,r.occurredAt,{sourceType:"event",sourceEventId:r.id,sourceLabel:`Event ${r.kind}`,planId:r.planId,taskId:r.taskId,runId:r.runId}))],l=Tv(a);return l.map(r=>Ow(r,e,l))}function Ow(e,a,l){var z;const r=u(e.artifact_id)||u(e.subject_id),o=fv(a).find(w=>u(w.artifact_id)===r)??null,d=Bw(u(e.uri)),p=tw(e)&&!!u((z=oe(e.payload))==null?void 0:z.text_content),h=gd(a).some(w=>w.id===r||w.remoteId===r),_=h&&(p||d),g=Xm(a,r),x=_v(a,r,e),S=u(x.cleanup_status)==="deleted",C=Zm(l,e);return{...e,version:C.version,version_key:C.version_key,version_rank:C.version_rank,retention_status:g.retention_status,retention_until:g.retention_until,last_retention_action:g.last_retention_action,cleanup_status:u(x.cleanup_status)||null,deleted_at:u(x.deleted_at)||null,cleanup_reason:u(x.cleanup_reason)||null,cleanup_event_id:u(x.cleanup_event_id)||null,delivery_summary:Sd(e),access:{previewable:!S&&_,downloadable:!S&&h&&d,openable:!S&&h&&d,access_policy:h?"qimingclaw-local-artifact-policy":"runtime-projection-readonly",last_access_status:u(o==null?void 0:o.status)||null}}}function qw(e){const a=oe(e.payload),l=oe(a==null?void 0:a.delivery),r=u(l==null?void 0:l.source_tool),o=u(l==null?void 0:l.uri),d=u(l==null?void 0:l.filename);return{artifact_id:e.id,subject_id:e.runId??e.taskId??e.planId??e.id,kind:e.kind,name:e.name||d||u((a==null?void 0:a.name)??(a==null?void 0:a.title))||_m(e.uri??o)||e.kind,uri:e.uri||o||u((a==null?void 0:a.uri)??(a==null?void 0:a.url)??(a==null?void 0:a.path))||void 0,value:u((a==null?void 0:a.value)??(a==null?void 0:a.summary)??(a==null?void 0:a.text))||e.uri||o||e.name||d||e.kind,plan_id:e.planId??null,task_id:e.taskId??null,run_id:e.runId??null,created_at:e.createdAt,source:"qimingclaw-runtime",source_type:"artifact",source_label:r?`File Server: ${r}`:dd("artifact",e.id),sync_status:e.syncStatus,sync_error:e.syncError,payload:e.payload,...Av(l)}}function Ev(e,a){return Tv([...pm(e.id,e.payload,e.finishedAt??e.startedAt??e.createdAt,{sourceType:"run",sourceLabel:dd("run",e.id),planId:e.planId,taskId:e.taskId,runId:e.id}),...a.filter(l=>l.runId===e.id).flatMap(l=>pm(e.id,l.payload,l.occurredAt,{sourceType:"event",sourceEventId:l.id,sourceLabel:`Event ${l.kind}`,planId:l.planId,taskId:l.taskId,runId:l.runId}))])}function pm(e,a,l,r){const o=oe(a);if(!o)return typeof a=="string"?[Yf(e,a,0,l,r)]:[];const p=[...we(o.artifacts),...we(o.outputs),...we(o.files),...we(o.attachments)].map((h,_)=>Yf(e,h,_,l,r));for(const h of["artifact","outputPath","output_path","filePath","file_path","path","uri","url"])o[h]&&p.push(Yf(e,o[h],p.length,l,r));return p.filter(h=>h.name||h.uri||h.value)}function Yf(e,a,l,r,o){const d=oe(a);if(d){const h=oe(d.delivery),_=u(h==null?void 0:h.source_tool),g=u(h==null?void 0:h.uri),x=u(d.uri??d.url??d.path??d.filePath??d.file_path??d.outputPath??d.output_path),S=u(d.name??d.title??d.filename)||u(h==null?void 0:h.filename)||_m(x||g)||`产物 ${l+1}`;return{artifact_id:u(d.artifact_id??d.id)||`artifact-${mt(e)}-${l+1}`,subject_id:u(d.subject_id)||e,kind:u(d.kind??d.type)||"artifact",name:S,uri:x||g,value:u(d.value??d.summary??d.text)||x||g,created_at:(u(d.created_at??d.createdAt)||r)??void 0,source:"qimingclaw-runtime",source_type:u(d.source_type)||(o==null?void 0:o.sourceType)||"payload",source_event_id:u(d.source_event_id)||(o==null?void 0:o.sourceEventId)||null,source_label:_?`File Server: ${_}`:u(d.source_label)||(o==null?void 0:o.sourceLabel)||dd("payload",e),plan_id:u(d.plan_id)||(o==null?void 0:o.planId)||null,task_id:u(d.task_id)||(o==null?void 0:o.taskId)||null,run_id:u(d.run_id)||(o==null?void 0:o.runId)||null,...Av(h)}}const p=String(a??"").trim();return{artifact_id:`artifact-${mt(e)}-${l+1}`,subject_id:e,kind:"artifact",name:_m(p)||`产物 ${l+1}`,uri:Lw(p)?p:void 0,value:p,created_at:r??void 0,source:"qimingclaw-runtime",source_type:(o==null?void 0:o.sourceType)||"payload",source_event_id:(o==null?void 0:o.sourceEventId)||null,source_label:(o==null?void 0:o.sourceLabel)||dd("payload",e),plan_id:(o==null?void 0:o.planId)||null,task_id:(o==null?void 0:o.taskId)||null,run_id:(o==null?void 0:o.runId)||null}}function Av(e){return e?{delivery_status:u(e.status)||null,delivery_stage:u(e.stage)||null,workspace_id:u(e.workspace_id)||null,project_id:u(e.project_id)||null,file_id:u(e.file_id)||null,version:u(e.version)||null,file_size:vt(e.size),source_tool:u(e.source_tool)||null}:{}}function dd(e,a){const l=a?` ${a}`:"";switch(e){case"artifact":return`Artifact${l}`;case"event":return`Event${l}`;case"run":return`Run${l}`;case"task":return`Task${l}`;case"plan":return`Plan${l}`;default:return`Payload${l}`}}function Tv(e){const a=new Set;return e.filter(l=>{const r=l.artifact_id||`${l.subject_id}:${l.uri||l.value||l.name}`;return!r||a.has(r)?!1:(a.add(r),!!(l.name||l.uri||l.value))})}function oe(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function we(e){return Array.isArray(e)?e:[]}function u(e){return typeof e=="string"?e.trim():""}function vt(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const a=Number(e);return Number.isFinite(a)?a:null}return null}function Lw(e){return/^(file|https?):\/\//i.test(e)||e.includes("/")||e.includes("\\")}function Bw(e){return e?/^file:\/\//i.test(e)?!0:/^[a-z][a-z0-9+.-]*:/i.test(e)?!1:e.startsWith("/")||/^[a-z]:[\\/]/i.test(e):!1}function _m(e){return e?(e.split(/[?#]/)[0]||e).split(/[\\/]/).filter(Boolean).pop()??"":""}function mt(e){const a=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(a)return a;let l=0;for(let r=0;r>>0;return`item-${l.toString(36)}`}function Pm(e,a=null){const l=(e??"").trim().toLowerCase(),r=Hm(a);return l?r.filter(o=>o.title.toLowerCase().includes(l)||o.plan_id.toLowerCase().includes(l)||(o.objective??"").toLowerCase().includes(l)):r}function Uw(e){const a=new Map(In(e).map(o=>[o.id,o])),l=new Map(Ct(e).map(o=>[o.id,o])),r=rt(e).map(o=>{const d=o.taskId?l.get(o.taskId):void 0,p=o.planId??(d==null?void 0:d.planId)??null,h=p?a.get(p):void 0,_=(d==null?void 0:d.status)??(h==null?void 0:h.status)??(o.kind.includes("failed")||o.kind.includes("error")?"failed":"running"),g=ot(_);return{id:o.id,time:ad(o.occurredAt),plan_title:(h==null?void 0:h.title)??"qimingclaw 本地执行",task_title:(d==null?void 0:d.title)??o.message,step_title:o.kind,detail:o.message||o.kind,status:_,status_label:la(_),status_tone:g,updated_at:o.occurredAt,conversation_id:p??(d==null?void 0:d.id)??o.id}});return r.length>0?r:Ct(e).map(o=>{const d=o.planId?a.get(o.planId):void 0;return{id:`task-event-${o.id}`,time:ad(o.updatedAt),plan_title:(d==null?void 0:d.title)??"qimingclaw 本地任务",task_title:o.title,step_title:o.assignedSkillId||"qimingclaw-runtime",detail:o.syncError||`${o.title}:${la(o.status)},同步状态 ${o.syncStatus}`,status:o.status,status_label:la(o.status),status_tone:ot(o.status),updated_at:o.updatedAt,conversation_id:o.planId??o.id}})}function Iw(e,a,l){if(Gl(l)){const d=Uw(l);return ry(d,l)}if(!a)return[{id:"event-await-confirmation",time:"待确认",plan_title:"任务设置",task_title:"等待确认今日任务",step_title:"选择职责",detail:"请先确认今天要执行的任务,确认后数字员工会开始执行。",status:"pending",status_label:"待确认",status_tone:"waiting",updated_at:new Date().toISOString(),conversation_id:null}];const o=e.filter(d=>d.selected).map(d=>({id:`event-${d.id}`,time:d.status==="running"?"实时":"待执行",plan_title:d.title,task_title:d.title,step_title:d.status==="running"?"同步 qimingclaw 服务状态":"等待调度",detail:d.status==="running"?`${d.result_text}。快照时间:${(l==null?void 0:l.generatedAt)??"未连接 bridge"}`:"任务已确认,将在后续阶段接入 ACP/MCP 真实执行事件。",status:d.status==="running"?"running":"pending",status_label:d.status==="running"?"执行中":"待执行",status_tone:d.status==="running"?"running":"waiting",updated_at:new Date().toISOString(),conversation_id:d.conversation_id}));return ry(o,l)}function ry(e,a){const l=a==null?void 0:a.sync;if(l&&(l.pending>0||l.failed>0||l.lastSyncAt)){const r=(l.recentFailures||[]).slice(0,3).map(sc).join(";");return[...e,{id:"event-management-sync",time:l.syncing?"实时":"同步",plan_title:"管理端联动",task_title:"同步数字员工本地状态",step_title:l.failed>0?"同步补偿":"outbox 推送",detail:[hd(a),l.lastSyncError?`错误:${l.lastSyncError}`:"",r?`最近失败:${r}`:""].filter(Boolean).join("。"),status:l.failed>0?"failed":l.syncing||l.pending>0?"running":"completed",status_label:l.failed>0?"异常":l.syncing||l.pending>0?"同步中":"已同步",status_tone:l.failed>0?"danger":l.syncing||l.pending>0?"running":"success",updated_at:l.lastSyncAt??new Date().toISOString(),conversation_id:"qimingclaw-management-sync"}]}return e}function Hw(e,a){return(e.some(r=>r.selected)?e.filter(r=>r.selected):e).map(r=>{const o=a.filter(g=>g.conversation_id===r.conversation_id),d=o.filter(g=>g.status==="running").length,p=o.filter(g=>g.status==="completed").length,h=o.filter(g=>ot(g.status)==="danger").length,_=Math.max(0,o.length-d-p-h);return{id:r.id,plan_id:r.id,title:r.title,description:r.summary,selected:r.selected,total_count:Math.max(o.length,1),success_count:p,failure_count:h,running_count:d,waiting_count:o.length===0?1:_,latest_status_label:h>0?"异常":d>0?"执行中":p>0?"已完成":"待执行",latest_status_tone:h>0?"danger":d>0?"running":p>0?"success":"waiting",business_summary:r.result_text,ai_summary:"当前由 qimingclaw 本地运行记录生成。"}})}function Gw(e){return e.map(a=>({id:`run-detail-${a.id}`,time:a.time,task_name:a.task_title,step_name:a.step_title,operation_name:a.plan_title,status_label:a.status_label,status_tone:a.status_tone,business_detail:a.detail,raw_detail:a.detail,updated_at:a.updated_at,conversation_id:a.conversation_id}))}function Rv(e,a){const l=(a==null?void 0:a.uiState)??Nt(),r=l.confirmedDates[e]??null,o=!!r,d=c1(l,e,a),p=Iw(d,o,a),h=Hw(d,p),_=l.reportGeneratedAtByDate[e]??null,g=d.filter(K=>K.selected).length,x=p.filter(K=>K.status==="running").length,S=p.filter(K=>ot(K.status)==="success").length,C=p.filter(K=>ot(K.status)==="danger").length,z=In(a).length+Ct(a).length,w=Gl(a),D=a==null?void 0:a.sync,N=Zw(wi(a)),k=Gw(p),A=Ll(a),O=A.filter(K=>K.requires_human_action||K.status==="degraded"),te=A.filter(K=>K.running).length,I=e1(a),ie=t1(a),Z=ie.filter(K=>K.can_retry||K.can_skip||K.can_cancel);return{source:"live",date:e,employee:{name:l.profile.name,title:"数字员工",major:"qimingclaw 客户端任务执行",company:l.profile.company,position:l.profile.position,current_status:l.profile.currentStatus,current_status_label:l.profile.currentStatus==="resting"?"休息中":"工作中",motto:"承接客户端任务,调度 ACP 与 MCP 能力完成执行。"},workday:{confirmed:o,confirmed_at:r,current_status:l.profile.currentStatus,current_status_label:l.profile.currentStatus==="resting"?"休息中":"工作中",status_label:w?C>0||O.length>0?"有异常":x>0?"执行中":"已同步":o?"运行中":"待确认",status_tone:w?C>0||O.length>0?"danger":x>0?"running":"success":o?"running":"waiting",summary:w?`当前日期 ${Vo(e)} 已读取 ${z} 条 qimingclaw 本地运行记录,${ey(A)}。`:o?`当前日期 ${Vo(e)} 已确认 ${g} 项任务。`:`当前日期 ${Vo(e)} 待确认今日任务。`,bubble_text:w?O.length>0?`我发现 ${O.length} 项常驻服务需要处理,会把影响到的任务标出来。`:"我已接入 qimingclaw 本地运行记录,会持续展示真实任务、事件和同步状态。":o?"我已接入 qimingclaw 客户端执行链路,正在等待真实 Run/Event 数据接入。":"请先确认今天要执行的任务,我会把它们映射到 qimingclaw 执行链路。"},overview:{title:"今日执行",status_label:w?"本地真实记录":o?"真实数据":"待确认",status_tone:C>0?"danger":w||o?"success":"waiting",metrics:[{label:"已选任务",value:String(g)},{label:"运行记录",value:String(p.length)},{label:"执行中",value:String(x)},{label:"已完成",value:String(S)},{label:"异常",value:String(C)},{label:"待同步",value:String((D==null?void 0:D.pending)??0)},{label:"同步异常",value:String((D==null?void 0:D.failed)??0)},{label:"服务运行",value:`${te}/${A.length}`},{label:"需处理服务",value:String(O.length)},{label:"Plan Agent",value:String(I.length)},{label:"Task Agent",value:String(ie.length)},{label:"可治理任务",value:String(Z.length)}]},managed_services:A,plan_agents:I,task_agents:ie,duties:d,events:p,execution_summaries:h,run_details:k,decisions:$w(l,e,a),delivery:{headline:w?"qimingclaw 本地记录已接入":o?"qimingclaw 执行链路已接入":"等待确认任务设置",summary:w?"数字员工页面正在读取本地 Plan / Task / Run / Event,并同步展示管理端 outbox 状态。":"当前阶段已将数字员工页面切换到 qimingclaw adapter,并开始读取客户端服务状态。",lines:["已吸收 sgRobot 数字员工 UI 和核心展示模型。",w?`已读取本地记录:Plan ${In(a).length} / Task ${Ct(a).length} / Run ${Hn(a).length} / Event ${rt(a).length}。`:"已建立 qimingclaw workday/plans/tasks/skills API adapter。",Ol(a,"agent","Agent"),Ol(a,"mcp","MCP"),Ol(a,"computerServer","Computer Server"),ey(A),...O.slice(0,3).map(Qj),`Plan Agent:${I.length} 个计划代理,Task Agent:${ie.length} 个任务代理。`,Z[0]?`待治理任务:${Z[0].title},下一步 ${Z[0].next_action}。`:"Task Agent:暂无需要重试、跳过或取消的任务。",hd(a),`活跃会话:${(a==null?void 0:a.sessions.active)??0} / ${(a==null?void 0:a.sessions.total)??0}`],artifacts:[{name:"数字员工运行摘要",status:_?"ready":"pending"},...N.slice(0,4).map(K=>({name:K.name,status:_?"ready":"available",uri:K.uri??null,source_label:K.source_label??null,source_type:K.source_type??null}))]},route_summary:N1(a),diagnostic_summary:p1(a),daily_report:Yw({date:e,state:l,generatedAt:_,selectedCount:g,events:p,executionSummaries:h,runDetails:k,artifactSources:N,successCount:S,failureCount:C,runningCount:x,snapshot:a})}}function Yw(e){const a=`${Vo(e.date)} 飞天数字员工日报`,l=e.generatedAt?`今日已完成数字员工页面到 qimingclaw adapter 的接入,并读取了 qimingclaw 服务状态。${hd(e.snapshot)}。`:"日报将在生成后汇总任务选择、运行明细和后续接入建议。",r={task_count:e.selectedCount,execution_count:e.events.length,success_count:e.successCount,failure_count:e.failureCount,running_count:e.runningCount},o=e.events.map(S=>`${S.time} ${S.task_title}:${S.detail}`),d=e.generatedAt?Xw(e.date,e.generatedAt):null,p=Wm(e.date),h=ep(e.date),_=tp(e.date),g={report_id:d,artifact_id:d?`${d}:artifact:text`:null,html_artifact_id:d?`${d}:artifact:html`:null,pdf_artifact_id:d?`${d}:artifact:pdf`:null,event_id:d?`${d}:event:generated`:null,date:e.date,title:a,report_schedule_time:e.state.reportScheduleTime,status:e.generatedAt?"ready":"not_generated",generated_at:e.generatedAt,generated_by:e.generatedAt?"ai":"fallback",model:"qimingclaw-adapter",source:"qimingclaw",summary:l,totals:r,task_sections:e.executionSummaries,detail_lines:o,artifact_sources:e.artifactSources,download_filename:p,html_filename:h,pdf_filename:_,text_content:null,html_content:null,pdf_available:!!e.generatedAt,pdf_url:null},x=e.generatedAt?Kw(g,e.runDetails,e.artifactSources):null;return{...g,text_content:x,html_content:x?$v(g,x):null}}function Kw(e,a,l){return[e.title||`${e.date} 数字员工日报`,`日期:${e.date}`,`生成时间:${e.generated_at||"暂未生成"}`,`生成来源:${e.generated_by==="ai"?"AI":"qimingclaw adapter"}`,"","## 摘要",e.summary||"暂无摘要。","","## 指标",`任务总数:${e.totals.task_count}`,`执行次数:${e.totals.execution_count}`,`成功次数:${e.totals.success_count}`,`失败次数:${e.totals.failure_count}`,`运行中:${e.totals.running_count??0}`,"","## 任务汇总",...e.task_sections.length>0?e.task_sections.map(r=>`- ${r.title}:${r.latest_status_label},执行 ${r.total_count} 次,成功 ${r.success_count},失败 ${r.failure_count}。${r.ai_summary||r.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...a.length>0?a.map(r=>`- ${r.time||"--:--"} ${r.task_name} / ${r.step_name||r.operation_name||"任务执行"}:${r.status_label},${r.business_detail}`):["暂无运行明细。"],"","## 产物来源",...l.length>0?l.map(r=>`- ${r.name}:${r.source_label||r.source_type||"未知来源"}${r.uri?`,${r.uri}`:""}`):["暂无产物来源。"],"","## 详情",...(e.detail_lines??[]).length>0?e.detail_lines:["暂无详情。"]].join(`
 `)}function Wm(e){return`qimingclaw-digital-report-${e}.txt`}function ep(e){return`qimingclaw-digital-report-${e}.html`}function tp(e){return`qimingclaw-digital-report-${e}.pdf`}function $v(e,a){const l=a.split(`
 `).map(r=>r.startsWith("## ")?`

${Ir(r.slice(3))}

`:r.startsWith("- ")?`
  • ${Ir(r.slice(2))}
  • `:r.trim()?`

    ${Ir(r)}

    `:"").join(` -`);return`${Ir(e.title)}

    ${Ir(e.title)}

    ${l}
    `}function Kw(e,a){const d=`${e.title} +`);return`${Ir(e.title)}

    ${Ir(e.title)}

    ${l}
    `}function Qw(e,a){const d=`${e.title} ${a}`.replace(/[^\x20-\x7E\n]/g,"?").slice(0,3600).split(` -`).slice(0,48).map((x,S)=>`BT /F1 11 Tf 48 ${760-S*14} Td (${Qw(x)}) Tj ET`).join(` +`).slice(0,48).map((x,S)=>`BT /F1 11 Tf 48 ${760-S*14} Td (${Vw(x)}) Tj ET`).join(` `)||"BT /F1 11 Tf 48 760 Td (Daily Report) Tj ET",p=["1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj","2 0 obj << /Type /Pages /Kids [3 0 R] /Count 1 >> endobj","3 0 obj << /Type /Page /Parent 2 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 4 0 R >> >> /Contents 5 0 R >> endobj","4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica >> endobj",`5 0 obj << /Length ${d.length} >> stream ${d} endstream endobj`];let h=9;const _=["0000000000 65535 f "];for(const x of p)_.push(`${String(h).padStart(10,"0")} 00000 n `),h+=x.length+1;const g=`%PDF-1.4 @@ -261,8 +261,8 @@ ${_.join(` trailer << /Size ${p.length+1} /Root 1 0 R >> startxref ${h} -%%EOF`;return window.btoa(g)}function Qw(e){return e.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")}function Ir(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Vw(e,a){return`daily-report:${e}:${mt(a)}`}function Xw(e){return e.slice(0,20).map(a=>({id:u(a.artifact_id)||`${u(a.subject_id)}:${u(a.uri??a.name)}`,name:u(a.name)||u(a.uri)||u(a.value)||"未命名产物",kind:u(a.kind)||null,uri:u(a.uri)||null,delivery_status:u(a.delivery_status)||null,delivery_stage:u(a.delivery_stage)||null,workspace_id:u(a.workspace_id)||null,project_id:u(a.project_id)||null,file_id:u(a.file_id)||null,version:u(a.version)||null,version_key:u(a.version_key)||null,version_rank:vt(a.version_rank),retention_status:u(a.retention_status)||null,retention_until:u(a.retention_until)||null,last_retention_action:u(a.last_retention_action)||null,cleanup_status:u(a.cleanup_status)||null,deleted_at:u(a.deleted_at)||null,cleanup_reason:u(a.cleanup_reason)||null,cleanup_event_id:u(a.cleanup_event_id)||null,file_size:typeof a.file_size=="number"?a.file_size:null,source_tool:u(a.source_tool)||null,source_label:u(a.source_label)||null,source_type:u(a.source_type)||null,source_event_id:u(a.source_event_id)||null,plan_id:u(a.plan_id)||null,task_id:u(a.task_id)||null,run_id:u(a.run_id)||null,created_at:u(a.created_at)||null,access:a.access,delivery_summary:a.delivery_summary??null}))}async function Zw(e,a){var _,g,x;const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=e.date||ac();e.action==="confirm_workday"&&(l.selectedDutyIdsByDate[r]=e.duty_ids??[],l.confirmedDates[r]=new Date().toISOString()),e.action==="update_profile"&&(l.profile={name:e.name||l.profile.name,company:e.company||l.profile.company,position:e.position||l.profile.position,currentStatus:e.current_status||l.profile.currentStatus}),e.action==="update_report_schedule"&&(l.reportScheduleTime=e.report_schedule_time||l.reportScheduleTime),e.action==="generate_daily_report"&&(e.duty_ids&&(l.selectedDutyIdsByDate[r]=e.duty_ids),e.report_schedule_time&&(l.reportScheduleTime=e.report_schedule_time),l.reportGeneratedAtByDate[r]=new Date().toISOString()),e.action==="decide_approval"&&e.decision_id&&(l.decisionResultsByDate=l.decisionResultsByDate??{},l.decisionResultsByDate[r]={...l.decisionResultsByDate[r]??{},[e.decision_id]:e.decision||"resolved"});const o=e.action==="decide_approval"?await Pw(e,a):null,d=await Gn(l,e.action,r,e.action==="decide_approval"?{decision_id:e.decision_id,decision:e.decision,acp_permission:o}:void 0),p={...a??{generatedAt:new Date().toISOString(),services:{},sessions:{total:0,active:0,items:[]}},uiState:d};e.action==="decide_approval"&&await((x=(g=(_=window.QimingClawBridge)==null?void 0:_.digital)==null?void 0:g.submitApprovalDecision)==null?void 0:x.call(g,{approval_id:e.decision_id,decision:e.decision,date:r,actor:"digital_employee_operator",source:"sgrobot-digital-adapter",acp_permission:o}).catch(()=>null));const h=Rv(r,p);return e.action==="generate_daily_report"&&h.daily_report&&await Jw(h.daily_report),h}async function Jw(e){var a,l,r;if(!(!e.report_id||!e.generated_at||!e.text_content))try{await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.recordDailyReport)==null?void 0:r.call(l,{reportId:e.report_id,date:e.date,title:e.title,summary:e.summary,totals:e.totals,detailLines:e.detail_lines,artifactSources:e.artifact_sources??[],filename:e.download_filename||Wm(e.date),textContent:e.text_content,htmlFilename:e.html_filename||ep(e.date),htmlContent:e.html_content||$v(e,e.text_content),pdfFilename:e.pdf_filename||tp(e.date),pdfContentBase64:Kw(e,e.text_content),generatedAt:e.generated_at,reportScheduleTime:e.report_schedule_time,source:e.source??"qimingclaw",model:e.model??"qimingclaw-adapter"}))}catch(o){console.warn("[qimingclawAdapter] record daily report failed:",o)}}async function Fw(e){var h,_;const a=u(e.reportId);if(!a)return{eventId:""};const l=(_=(h=window.QimingClawBridge)==null?void 0:h.digital)==null?void 0:_.recordDailyReportDelivery,r={reportId:a,action:e.action,status:e.status,actor:e.actor??"digital_employee_operator",endpoint:e.endpoint??"management-console",remoteId:e.remoteId??null,message:e.message??null},o=l?await l(r)??{eventId:""}:{eventId:""},d=await yn()??Nt(),p=new Date().toISOString();return await Gn({...Ul(d),dailyReportWorkbenchStateById:{...d.dailyReportWorkbenchStateById??{},[a]:{status:e.action==="confirm"?"confirmed":e.action==="request_approval"?"approval_requested":"sent",last_action:e.action,actor:r.actor,reason:e.message??null,updated_at:p}}},"daily_report_workbench_action_recorded",void 0,{report_id:a,action:e.action,status:e.status,event_id:o.eventId||null}),o}async function Pw(e,a){var p,h;if(!e.decision_id||!e.decision)return null;const l=Ww(e.decision_id,a);if(!l)return null;const r=eC(l);if(!r)return null;const o=tC(e.decision),d=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.respondPermission;if(!d)return null;try{const _=await d(r.sessionId,r.permissionId,o);return{permission_id:r.permissionId,session_id:r.sessionId,response:o,success:(_==null?void 0:_.success)!==!1,error:_==null?void 0:_.error}}catch(_){return{permission_id:r.permissionId,session_id:r.sessionId,response:o,success:!1,error:_ instanceof Error?_.message:String(_)}}}function Ww(e,a){return Yl(a).find(l=>u(l.approval_id)===e)??null}function eC(e){const a=oe(e.payload),l=oe(a==null?void 0:a.payload),r=u(a==null?void 0:a.permissionId)||u(a==null?void 0:a.permission_id)||u(a==null?void 0:a.id)||u(l==null?void 0:l.permissionId)||u(l==null?void 0:l.permission_id)||u(l==null?void 0:l.id),o=u(a==null?void 0:a.sessionId)||u(a==null?void 0:a.session_id)||u(l==null?void 0:l.sessionId)||u(l==null?void 0:l.session_id),d=u(a==null?void 0:a.source);return!r||!o||d&&d!=="acp-permission"?null:{permissionId:r,sessionId:o}}function tC(e){const a=e.toLowerCase();return a.includes("always")?"always":a.includes("reject")||a.includes("deny")?"reject":"once"}async function cy(e,a,l,r={}){const o=aC(a),d=`plan-action-${mt(e)}-${mt(a)}-${Date.now()}`;return o?Kl({command_kind:o,context_refs:{plan_id:e},payload:{...r,plan_id:e,requested_action:`plan_${a}`,action_endpoint:`/api/debug/plan/${e}/${a}`},correlation_id:d},l):{command_id:`qimingclaw-digital-plan-action-${Date.now()}`,accepted:!1,correlation_id:d,message:`暂不支持计划动作:${a}`,error:"unsupported_command"}}async function nC(e,a,l,r={}){const o=lC(a),d=Ct(l).find(S=>S.id===e),p=bd(Hn(l),e),h=(d==null?void 0:d.planId)??(u(r.plan_id)||void 0),_=(p==null?void 0:p.id)??(u(r.run_id)||void 0),g=d?al(d):u(r.step_id)||void 0,x=`task-action-${mt(e)}-${mt(a)}-${Date.now()}`;return o?Kl({command_kind:o,context_refs:{plan_id:h,task_id:e,run_id:_,step_id:g},payload:{...r,task_id:e,plan_id:h??r.plan_id,run_id:_??r.run_id,step_id:g??r.step_id,requested_action:`task_${a}`,action_endpoint:`/api/task/${e}/${a}`},correlation_id:x},l):{command_id:`qimingclaw-digital-task-action-${Date.now()}`,accepted:!1,correlation_id:x,message:`暂不支持任务动作:${a}`,error:"unsupported_command"}}function aC(e){switch(e.toLowerCase()){case"submit":return"submit_plan";case"approve":return"approve_plan";case"activate":return"activate_plan";case"pause":return"pause_plan";case"resume":return"resume_plan";case"cancel":return"cancel_plan";case"amend":return"amend_plan";default:return null}}function lC(e){switch(e.toLowerCase()){case"retry":return"retry_task";case"skip":return"skip_task";case"pause":return"pause_task";case"resume":return"resume_task";case"cancel":return"cancel_task";case"start":return"start_run";default:return null}}function iC(e,a){const l=rt(a).filter(r=>r.planId===e&&r.kind.startsWith("governance_")).sort((r,o)=>o.occurredAt.localeCompare(r.occurredAt)||o.createdAt.localeCompare(r.createdAt)).map(r=>{const o=oe(r.payload)??{},d=oe(o.result)??{},p=u(o.commandKind)||r.kind.replace(/^governance_/,"");return{revision_id:r.id,plan_id:e,event_id:r.id,command_kind:p,action:p.replace(/_plan$/,""),status:u(d.status)||u(o.status)||"recorded",message:r.message,created_at:r.occurredAt,payload:o}});return{plan_id:e,revisions:l}}async function sC(e=80){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.listRouteDecisions))return{has_route_decision_state:!1,decisions:[]};try{return{has_route_decision_state:!0,decisions:await a.listRouteDecisions({limit:e})??[]}}catch(r){return console.warn("[qimingclawAdapter] list route decisions failed:",r),{has_route_decision_state:!1,decisions:[]}}}async function wd(e=80){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.listRouteInterventions))return{has_route_intervention_state:!1,interventions:[]};try{return{has_route_intervention_state:!0,interventions:await a.listRouteInterventions({limit:e})??[]}}catch(r){return console.warn("[qimingclawAdapter] list route interventions failed:",r),{has_route_intervention_state:!1,interventions:[]}}}async function Dv(e,a,l){const r=u(a.decision)||"reject",o=u(a.approval_id)||oC(e,l),p=(await wd(160)).interventions.find(C=>C.route_decision_id===e)??null,h=np(e,l),_=(h==null?void 0:h.decision)??zv(p,e);if(!_){const C=await hm({routeDecisionId:e,approvalId:o,decision:r,commandAccepted:!1,commandError:"route_intervention_missing_context",actor:a.actor??"digital_employee_operator",occurredAt:new Date().toISOString()});return{accepted:!1,route_decision_id:e,intervention:C,error:"invalid_context",message:"入口路由上下文缺失,无法恢复执行。"}}await dC(o,r,a.actor??"digital_employee_operator",l);let g=null,x=null;if(gm(r)){const C=Mv(_,(h==null?void 0:h.body)??cC(_),l);C.command?(g=await Kl(C.command,l),g.accepted||(x=g.error||"route_intervention_command_rejected")):x=C.reasonCode||"route_intervention_missing_context"}const S=await hm({routeDecisionId:e,approvalId:o,decision:r,createdCommandId:(g==null?void 0:g.command_id)??null,commandAccepted:(g==null?void 0:g.accepted)===!0,commandError:x,blockedReason:_.blocked_reason??null,policyResult:_.policy_result??null,policySource:_.policy_source??null,matchedIntent:_.matched_intent??null,routeKind:_.route_kind,intentKind:_.intent_kind,reasonCodes:_.reason_codes,candidateSkills:_.candidate_skills,contextRefs:_.context_refs,entrypoint:_.entrypoint??null,actor:a.actor??"digital_employee_operator",correlationId:_.correlation_id,payload:{comment:a.comment??null},occurredAt:new Date().toISOString()});return{accepted:S.intervention_status!=="failed",route_decision_id:e,intervention:S,command:g,error:x||void 0,message:S.resolution_duplicate?"入口路由干预已处理。":gm(r)?g!=null&&g.command_id?"入口路由干预已通过并恢复执行。":"入口路由干预已通过。":"入口路由干预已拒绝。"}}async function rC(e,a){const l=u(e.decision)||"mark_reviewed";if(!["mark_reviewed","dismiss","retry_policy_check"].includes(l))return{ok:!1,decision:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_route_intervention_batch_decision"]};const r=Le([...we(e.route_decision_ids),...we(e.routeDecisionIds)]).slice(0,50);if(r.length===0)return{ok:!1,decision:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["route_decision_ids_required"]};const o=await wd(200),d=[];for(const h of r){const _=np(h,a),g=o.interventions.find(C=>C.route_decision_id===h)??null,x=(_==null?void 0:_.decision)??zv(g,h);if(!x){d.push({route_decision_id:h,ok:!1,status:"rejected",error:"route_intervention_missing_context",reason_codes:["route_intervention_missing_context"]});continue}const S=await hm({routeDecisionId:h,approvalId:x.approval_id??(g==null?void 0:g.approval_id)??null,decision:l,commandAccepted:!1,commandError:null,blockedReason:x.blocked_reason??null,policyResult:x.policy_result??null,policySource:x.policy_source??null,matchedIntent:x.matched_intent??null,routeKind:x.route_kind,intentKind:x.intent_kind,reasonCodes:x.reason_codes,candidateSkills:x.candidate_skills,contextRefs:x.context_refs,entrypoint:x.entrypoint??null,actor:u(e.actor)||"digital_employee_operator",correlationId:x.correlation_id,payload:{comment:u(e.comment)||null,batch_decision:l},occurredAt:new Date().toISOString()});d.push({route_decision_id:h,ok:S.intervention_status!=="failed",status:S.intervention_status,intervention:S,reason_codes:S.reason_codes??[]})}const p=d.filter(h=>h.ok===!0).length;return{ok:p>0,decision:l,total:r.length,recorded:p,rejected:r.length-p,items:d,reason_codes:Le(d.flatMap(h=>we(h.reason_codes)))}}async function hm(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;return a!=null&&a.recordRouteInterventionResolution?a.recordRouteInterventionResolution(e):{route_decision_id:e.routeDecisionId,approval_id:e.approvalId??null,route_kind:e.routeKind??"ChatOnly",intent_kind:e.intentKind??"chat",policy_result:e.policyResult??null,intervention_status:e.commandError?"failed":gm(e.decision)?"approved":"rejected",decision:e.decision,created_command_id:e.createdCommandId??null,blocked_reason:e.blockedReason??null,matched_intent:e.matchedIntent??null,policy_source:e.policySource??null,reason_codes:e.reasonCodes??[],candidate_skills:e.candidateSkills??[],context_refs:e.contextRefs??{},entrypoint:e.entrypoint??null,actor:e.actor??null,correlation_id:e.correlationId??null,approval_status:null,recorded_at:e.occurredAt??new Date().toISOString(),resolved_at:e.occurredAt??new Date().toISOString(),resolution_duplicate:!1}}function np(e,a){const l=rt(a).find(p=>{if(p.kind!=="route_decision")return!1;const h=oe(p.payload)??{};return fm(h,p).id===e});if(!l)return null;const r=oe(l.payload)??{},o=fm(r,l),d=oe(r.envelope)??{};return{decision:o,body:{entrypoint:o.entrypoint??"chat",actor:o.actor??void 0,text:u(d.text)||void 0,payload:oe(d.payload)??{},attachments:we(d.attachments).filter(p=>typeof p=="string"),timestamp:o.recorded_at,correlation_id:o.correlation_id,idempotency_key:`route-intervention:${o.id}`,context_refs:o.context_refs}}}function zv(e,a){return e?{id:a,route_kind:e.route_kind,intent_kind:e.intent_kind,reason_codes:e.reason_codes??[],candidate_skills:e.candidate_skills??[],context_refs:e.context_refs??{},created_command_id:e.created_command_id,correlation_id:e.correlation_id||a,creates_plan:e.route_kind==="PlanControl"||e.route_kind==="PlanExecution",creates_task_run:e.route_kind==="DirectRun"||e.route_kind==="PlanExecution",approval_mode:e.approval_id?"manual":null,policy_result:e.policy_result,policy_source:e.policy_source,blocked_reason:e.blocked_reason,approval_id:e.approval_id,matched_intent:e.matched_intent,recorded_at:e.recorded_at,entrypoint:e.entrypoint,actor:e.actor}:null}function cC(e){return{entrypoint:e.entrypoint??"chat",actor:e.actor??void 0,payload:{},attachments:[],timestamp:e.recorded_at,correlation_id:e.correlation_id,idempotency_key:`route-intervention:${e.id}`,context_refs:e.context_refs}}function oC(e,a){const l=np(e,a);if(l!=null&&l.decision.approval_id)return l.decision.approval_id;const r=cc(a).find(o=>u(o.route_decision_id)===e);return u(r==null?void 0:r.approval_id)||null}async function dC(e,a,l,r){var p,h,_;if(!e)return;const o=ac(),d=(r==null?void 0:r.uiState)??await yn()??Nt();d.decisionResultsByDate=d.decisionResultsByDate??{},d.decisionResultsByDate[o]={...d.decisionResultsByDate[o]??{},[e]:a},await Gn(d,"decide_approval",o,{decision_id:e,decision:a,actor:l}),await((_=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.submitApprovalDecision)==null?void 0:_.call(h,{approval_id:e,decision:a,date:o,actor:l,source:"sgrobot-route-intervention"}).catch(()=>null))}function gm(e){return["approve","approved","accept","accepted"].includes(e.toLowerCase())}async function uC(e,a){var te,I,ie,Z,K;const l=e.timestamp||new Date().toISOString(),r=e.correlation_id||`route-${Date.now()}`,o=e.idempotency_key||r,d=hC(e),p=gC(e,d,a),h=await bC(p.candidateSkills),_=h.allCandidatesDisabled?[...p.reasonCodes,"candidate_skills_disabled"]:p.reasonCodes,g={id:`route-decision-${mt(o)}`,route_kind:p.routeKind,intent_kind:p.intentKind,reason_codes:_,candidate_skills:h.candidateSkills,context_refs:d,created_command_id:null,correlation_id:r,creates_plan:p.createsPlan,creates_task_run:p.createsTaskRun,approval_mode:null,policy_result:"accepted",policy_source:null,blocked_reason:null,approval_id:null,matched_intent:null,recorded_at:l,entrypoint:e.entrypoint??null,actor:e.actor??null},x=await Tj({routeDecisionId:g.id,routeKind:g.route_kind,intentKind:g.intent_kind,reasonCodes:g.reason_codes,candidateSkills:g.candidate_skills,contextRefs:g.context_refs,correlationId:r,idempotencyKey:e.idempotency_key,entrypoint:e.entrypoint??null,actor:e.actor??null,source:"qimingclaw-ingress-route",payload:{text:e.text??null,payload:e.payload??null,attachments:e.attachments??[]},occurredAt:l}),S=u(x.decision)||"allowed";g.policy_result=x.policy_result||(S==="allowed"?"accepted":S),g.policy_source=x.policy_source??((te=x.policy)==null?void 0:te.source)??null,g.blocked_reason=x.blocked_reason??null,g.approval_id=x.approval_id??null,g.matched_intent=x.matched_intent??null,g.reason_codes=Le([...g.reason_codes,...x.reason_codes??[]]);const C=((I=x.policy)==null?void 0:I.preferred_route_kinds)??[];C.length>0&&!C.includes(g.route_kind)&&(g.reason_codes=Le([...g.reason_codes,"route_kind_not_preferred"]));const z=S==="allowed"&&((ie=x.policy)==null?void 0:ie.auto_create_governance_commands)!==!1;S==="allowed"&&((Z=x.policy)==null?void 0:Z.auto_create_governance_commands)===!1&&(g.reason_codes=Le([...g.reason_codes,"route_command_auto_create_disabled"]));const w=z?Mv(g,e,a):{command:null,reasonCode:S==="allowed"?"route_command_auto_create_disabled":`route_policy_${g.policy_result}`},D=w.command?await Kl(w.command,a):null;D!=null&&D.accepted&&D.command_id?(g.created_command_id=D.command_id,g.reason_codes=Le([...g.reason_codes,"route_action_mapped"])):w.reasonCode&&(g.reason_codes=Le([...g.reason_codes,w.reasonCode]));const N=(K=window.QimingClawBridge)==null?void 0:K.digital,A=(N!=null&&N.recordRouteDecision?await N.recordRouteDecision({id:g.id,idempotencyKey:e.idempotency_key,correlationId:r,routeKind:g.route_kind,intentKind:g.intent_kind,reasonCodes:g.reason_codes,candidateSkills:g.candidate_skills,contextRefs:g.context_refs,createdCommandId:g.created_command_id,createsPlan:g.creates_plan,createsTaskRun:g.creates_task_run,approvalMode:g.approval_mode,policyResult:g.policy_result,policySource:g.policy_source,blockedReason:g.blocked_reason,approvalId:g.approval_id,matchedIntent:g.matched_intent,entrypoint:g.entrypoint,actor:g.actor,message:`入口路由决策:${g.route_kind} / ${g.intent_kind}`,envelope:{text:e.text??null,payload:e.payload??null,attachments:e.attachments??[]},recordedAt:l}):null)??g,O=_C(D);return S!=="allowed"?{accepted:!1,envelope:{entrypoint:e.entrypoint??"chat",text:e.text??null,payload:e.payload??null,attachments:e.attachments??[],context_refs:d},response_kind:"route_decision",route_decision:A,command:null,created_plan_id:null,created_schedule_id:null,created_task_ids:[],created_run_ids:[],projection_name:null,projection_payload:null,error:"policy_blocked",message:S==="approval_required"?`入口路由需要审批:${A.route_kind} / ${A.intent_kind}`:`入口路由已被策略阻断:${A.route_kind} / ${A.intent_kind}`}:{accepted:!0,envelope:{entrypoint:e.entrypoint??"chat",text:e.text??null,payload:e.payload??null,attachments:e.attachments??[],context_refs:d},response_kind:"route_decision",route_decision:A,command:D,created_plan_id:O.createdPlanId,created_schedule_id:O.createdScheduleId,created_task_ids:O.createdTaskIds,created_run_ids:O.createdRunIds,projection_name:null,projection_payload:null,message:D!=null&&D.command_id?`已记录入口路由并映射治理动作:${A.route_kind} / ${A.intent_kind}`:`已记录入口路由:${A.route_kind} / ${A.intent_kind}`}}function Mv(e,a,l){if(e.reason_codes.includes("candidate_skills_disabled"))return{command:null,reasonCode:"route_action_not_mapped"};const r=e.context_refs??{},o=oe(a.payload)??{},d=_n({...o,source:"qimingclaw-ingress-route",route_decision_id:e.id,route_kind:e.route_kind,intent_kind:e.intent_kind,reason_codes:e.reason_codes,ingress_text:a.text??null}),p=(h,_)=>({command_kind:h,context_refs:_n({...r,..._}),payload:_n({...d,..._}),correlation_id:e.correlation_id,idempotency_key:`route-command:${e.id}`});if(e.route_kind==="PlanExecution"&&e.intent_kind==="schedule"){const h=u(r.schedule_id)||u(o.schedule_id)||u(o.scheduleId);if(!h)return{command:null,reasonCode:"route_action_missing_context"};const _="run_schedule_now",g=Kf(_);return g?{command:null,reasonCode:g}:{command:p(_,{schedule_id:h}),reasonCode:"route_action_mapped"}}if(e.route_kind==="PlanExecution"&&e.intent_kind==="execute"){const h=u(r.step_id)||u(o.step_id)||u(o.stepId),_=u(r.task_id)||u(o.task_id)||u(o.taskId)||fC(l,h);if(!_)return{command:null,reasonCode:"route_action_missing_context"};const g=Ct(l).find(C=>C.id===_)??null,x="start_run",S=Kf(x);return S?{command:null,reasonCode:S}:{command:p(x,{plan_id:u(r.plan_id)||(g==null?void 0:g.planId)||u(o.plan_id)||u(o.planId),task_id:_,step_id:h||(g?al(g):""),run_id:u(r.run_id)||u(o.run_id)||u(o.runId)}),reasonCode:"route_action_mapped"}}if(e.route_kind==="PlanControl"&&e.intent_kind==="control"){const h=mC(a),_=u(r.task_id)||u(o.task_id)||u(o.taskId),g=u(r.plan_id)||u(o.plan_id)||u(o.planId),x=pC(h,!!_);if(!x||!_&&!g)return{command:null,reasonCode:"route_action_missing_context"};const S=Kf(x);return S?{command:null,reasonCode:S}:{command:p(x,{plan_id:g,task_id:_,step_id:u(r.step_id)||u(o.step_id)||u(o.stepId),run_id:u(r.run_id)||u(o.run_id)||u(o.runId)}),reasonCode:"route_action_mapped"}}return{command:null,reasonCode:"route_action_not_mapped"}}function fC(e,a){var r;return!a||!ji(e).some(o=>o.id===a&&o.status.toLowerCase()==="ready")?"":((r=Ct(e).find(o=>al(o)===a))==null?void 0:r.id)??""}function mC(e){const a=oe(e.payload)??{};return[e.text,a.action,a.command,a.intent,a.requested_action].map(u).filter(Boolean).join(" ").toLowerCase()}function pC(e,a){return a?Vt(e,["retry","重试"])?"retry_task":Vt(e,["skip","跳过"])?"skip_task":Vt(e,["pause","暂停"])?"pause_task":Vt(e,["resume","恢复"])?"resume_task":Vt(e,["cancel","取消"])?"cancel_task":Vt(e,["start","run","execute","begin","启动","开始","执行"])?"start_run":null:Vt(e,["submit","提交"])?"submit_plan":Vt(e,["approve","批准","同意"])?"approve_plan":Vt(e,["pause","暂停"])?"pause_plan":Vt(e,["resume","恢复"])?"resume_plan":Vt(e,["cancel","取消"])?"cancel_plan":Vt(e,["amend","edit","revise","修改","调整"])?"amend_plan":Vt(e,["activate","start","run","execute","启动","开始","执行"])?"activate_plan":null}function _C(e){const a=oe(e==null?void 0:e.result)??{},l=Le([a.task_id,a.taskId,...we(a.dispatched_tasks).map(r=>{var o,d;return((o=oe(r))==null?void 0:o.task_id)??((d=oe(r))==null?void 0:d.taskId)})]);return{createdPlanId:u(a.plan_id)||u(a.planId)||null,createdScheduleId:u(a.schedule_id)||u(a.scheduleId)||null,createdTaskIds:l,createdRunIds:Le([a.run_id,a.runId])}}function hC(e){const a=oe(e.payload)??{},l=oe(e.context_refs)??{};return _n({...l,entrypoint:e.entrypoint??l.entrypoint,plan_id:u(l.plan_id)||u(a.plan_id)||u(a.planId),task_id:u(l.task_id)||u(a.task_id)||u(a.taskId),run_id:u(l.run_id)||u(a.run_id)||u(a.runId),step_id:u(l.step_id)||u(a.step_id)||u(a.stepId),schedule_id:u(l.schedule_id)||u(a.schedule_id)||u(a.scheduleId)})}function gC(e,a,l){const r=oe(e.payload)??{},o=`${e.text??""} ${u(r.action)} ${u(r.command)} ${u(r.intent)}`.toLowerCase(),d=Object.keys(r).length>0,p=["plan_id","task_id","step_id","schedule_id"].some(g=>!!u(a[g])),h=u(a.step_id),_=h&&ji(l).some(g=>g.id===h&&g.status.toLowerCase()==="ready");return p&&Vt(o,["start","run","retry","skip","cancel","pause","resume","approve","启动","开始","执行","重试","跳过","取消","暂停","恢复","批准"])?bs("PlanControl","control",["context_control_action"],a,r,!1,!1):e.entrypoint==="cron"||Vt(o,["cron","schedule","scheduled","定时","调度","周期"])?bs("PlanExecution","schedule",["scheduled_entrypoint"],a,r,!1,!0):Vt(o,["status","progress","result","report","artifact","memory","状态","进度","结果","日报","产物","记忆"])?bs("ProjectionQuery","query",["projection_query_text"],a,r,!1,!1):_||Vt(o,["execute","dispatch","delegate","run task","执行","开始","委托","派发"])?bs("PlanExecution","execute",_?["ready_step_context"]:["execution_text"],a,r,!1,!0):!e.text&&!d&&!p?bs("AskClarification","chat",["empty_ingress"],a,r,!1,!1):bs("ChatOnly","chat",["default_chat"],a,r,!1,!1)}function bs(e,a,l,r,o,d,p){return{routeKind:e,intentKind:a,reasonCodes:l,candidateSkills:yC(e,r,o),createsPlan:d,createsTaskRun:p}}function yC(e,a,l){const r=Le([...we(a.skill_ids),...we(a.skills),...we(a.candidate_skills),...we(l.skill_ids),...we(l.skills),...we(l.candidate_skills),u(a.skill_id),u(l.skill_id)]);return r.length>0?r:e==="PlanControl"?["qimingclaw-acp-session"]:e==="ProjectionQuery"?["qimingclaw-artifact-reporting"]:e==="PlanExecution"?["qimingclaw-computer-control"]:[]}async function bC(e){var l;if(e.length===0)return{candidateSkills:e,allCandidatesDisabled:!1};const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.getSkillCapabilities))return{candidateSkills:e,allCandidatesDisabled:!1};try{const r=await a.getSkillCapabilities();if(!Array.isArray(r==null?void 0:r.skills))return{candidateSkills:e,allCandidatesDisabled:!1};const o=new Map;for(const p of r.skills){const h=u(p.skill_id);h&&o.set(h,p.enabled!==!1)}const d=e.filter(p=>o.get(p)!==!1);return{candidateSkills:d,allCandidatesDisabled:e.length>0&&d.length===0}}catch(r){return console.warn("[qimingclawAdapter] filter route candidate skills failed:",r),{candidateSkills:e,allCandidatesDisabled:!1}}}function Le(e){return[...new Set(e.map(u).filter(Boolean))]}function Vt(e,a){return a.some(l=>e.includes(l.toLowerCase()))}function _n(e){return Object.fromEntries(Object.entries(e).filter(([,a])=>a!=null&&a!==""))}const vC=new Set(["submit_plan","approve_plan","amend_plan","resume_plan","pause_plan","retry_task","skip_task","resume_task","provide_task_input"]),xC=new Set(["activate_plan","run_schedule_now","start_run","cancel_run","cancel_task","delete_schedule"]);function Kf(e){return vC.has(e)||xC.has(e)?null:"route_action_policy_blocked"}function kC(e){return["activate_plan","run_schedule_now","start_run","cancel_run","cancel_task"].includes(e)?"high":["delete_schedule","pause_schedule","skip_task","retry_task","provide_task_input"].includes(e)?"medium":"normal"}async function Kl(e,a){var C,z,w,D,N,k,A,O,te,I,ie,Z,K,pe,P,q,ce,R,M,ne,B,U;const l=`qimingclaw-digital-${e.command_kind}-${Date.now()}`,r=e.correlation_id||l,o=je((C=e.context_refs)==null?void 0:C.plan_id)||je((z=e.payload)==null?void 0:z.plan_id)||je((w=e.payload)==null?void 0:w.original_plan_id),d=je((D=e.context_refs)==null?void 0:D.task_id)||je((N=e.payload)==null?void 0:N.task_id)||je((k=e.payload)==null?void 0:k.original_task_id),p=je((A=e.context_refs)==null?void 0:A.run_id)||je((O=e.payload)==null?void 0:O.run_id)||je((te=e.payload)==null?void 0:te.latest_run_id),h=je((I=e.context_refs)==null?void 0:I.step_id)||je((ie=e.payload)==null?void 0:ie.step_id)||je((Z=e.payload)==null?void 0:Z.stepId),_=je((K=e.context_refs)==null?void 0:K.schedule_id)||je((pe=e.payload)==null?void 0:pe.schedule_id),g=await Il({actionKind:`governance.${e.command_kind}`,actionLabel:`治理命令:${e.command_kind}`,riskLevel:kC(e.command_kind),reasonCodes:["governance_command"],actor:u((P=e.payload)==null?void 0:P.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:o||null,taskId:d||null,runId:p||null,correlationId:r,payload:{command_kind:e.command_kind,schedule_id:_||null,step_id:h||null}}),x=Hl(g);if(x){const le={command_id:l,accepted:!1,correlation_id:r,error:"policy_blocked",message:x.status==="approval_required"?"高风险治理命令需要审批后执行。":"高风险治理命令已被风险策略拒绝。",result:x};return await va(e,le),le}if(e.command_kind==="create_plan"){const le=`qimingclaw-local-${mt(je((q=e.payload)==null?void 0:q.title)||o||"plan")}-${Date.now()}`,de=Ml(l,r,"已在 qimingclaw 兼容层创建本地计划草稿。",{plan_id:le,status:"draft",source:"qimingclaw-adapter",requested_action:(ce=e.payload)==null?void 0:ce.requested_action,original_plan_id:((R=e.payload)==null?void 0:R.original_plan_id)??o});return await va(e,de),de}if(e.command_kind==="activate_plan"||e.command_kind==="run_schedule_now"){const le=o||((M=Im(a)[0])==null?void 0:M.plan_id)||((ne=nl(a)[0])==null?void 0:ne.plan_id)||"qimingclaw-client-readiness",de=await qv(le,a,{recordCommand:!1}),Te=Ml(l,r,"已映射为 qimingclaw 本地任务激活。",{plan_id:le,schedule_id:e.command_kind==="run_schedule_now"?_:null,status:"active",dispatched_tasks:de.dispatched_tasks,source:"qimingclaw-adapter"});return await va(e,Te),Te}if(e.command_kind==="create_schedule"){const le=Ml(l,r,"已记录 qimingclaw 兼容定时任务请求。",{schedule_id:_||`qimingclaw-schedule-${Date.now()}`,plan_id:o,status:"enabled",source:"qimingclaw-adapter"});return await va(e,le),le}if(["update_schedule","pause_schedule","resume_schedule","delete_schedule"].includes(e.command_kind)){const le=e.command_kind==="pause_schedule"?"paused":e.command_kind==="delete_schedule"?"deleted":"enabled",de=Ml(l,r,`已接受 ${e.command_kind},并更新 qimingclaw 本地定时任务状态。`,{schedule_id:_||`qimingclaw-schedule-${Date.now()}`,plan_id:o,status:le,source:"qimingclaw-adapter"});return await va(e,de),de}if(["submit_plan","approve_plan","amend_plan","resume_plan","pause_plan","cancel_plan"].includes(e.command_kind)){const le=Ml(l,r,`已接受 ${e.command_kind},当前由 qimingclaw 本地 adapter 记录兼容状态。`,{plan_id:o,status:e.command_kind==="approve_plan"?"approved":e.command_kind==="submit_plan"?"reviewing":"accepted",source:"qimingclaw-adapter"});return await va(e,le),le}if(["retry_task","skip_task","pause_task","resume_task","provide_task_input","cancel_task","start_run","cancel_run"].includes(e.command_kind)){const le=d||((B=Ct(a)[0])==null?void 0:B.id)||"qimingclaw-task-agent",de=Ct(a).find(se=>se.id===le),Te=p||((U=bd(Hn(a),le))==null?void 0:U.id)||null,E=h||(de?al(de):null),J=Ml(l,r,`已接受 ${e.command_kind},并记录到 qimingclaw Task Agent 控制平面。`,{plan_id:o||(de==null?void 0:de.planId)||"qimingclaw-task-agent-plan",task_id:le,run_id:Te,step_id:E,task_agent_id:`task-agent-${mt(le)}`,status:SC(e.command_kind),next_action:jC(e.command_kind),source:"qimingclaw-task-agent"});return await va(e,J),J}const S={command_id:l,accepted:!1,correlation_id:r,error:"missing_capability",message:`qimingclaw 数字员工兼容层尚未支持 ${e.command_kind}。`};return await va(e,S),S}function Ml(e,a,l,r){return{command_id:e,accepted:!0,correlation_id:a,message:l,result:r}}function SC(e){switch(e){case"retry_task":case"start_run":case"resume_task":return"running";case"skip_task":return"skipped";case"cancel_task":case"cancel_run":return"cancelled";case"pause_task":return"paused";default:return"accepted"}}function jC(e){switch(e){case"retry_task":return"start_retry_run";case"skip_task":return"continue_next_task";case"pause_task":return"await_resume";case"resume_task":return"watch_progress";case"provide_task_input":return"resume_with_input";case"cancel_task":case"cancel_run":return"close_execution";case"start_run":return"watch_progress";default:return"record_control_event"}}function je(e){return typeof e=="string"&&e.trim()?e.trim():""}function Ov(e,a=null){var o,d,p,h;if(Gl(a)){const _=In(a).find(k=>k.id===e),g=ll(e,a),x=Vb(a,e),S=Rs(e,a).runs,C=rt(a).filter(k=>k.planId===e||g.some(A=>A.task_id===k.taskId)),z=(_==null?void 0:_.title)??((o=g[0])==null?void 0:o.title)??e,w=(_==null?void 0:_.objective)??"qimingclaw 本地运行记录",D=[];let N=2;if(x.length>0){const k=new Set(x.map(O=>O.id));for(const O of x){D.push({seq:N++,lane:"qimingclaw",label:O.title,sub_label:`${la(O.status)} · 依赖 ${O.dependsOn.length} · 技能 ${O.preferredSkillIds.length}`,timestamp:O.updatedAt,color:"#22c55e",source_type:"plan_step"});for(const te of g.filter(I=>I.step_id===O.id))D.push(Qf(te,N++))}const A=g.filter(O=>!k.has(O.step_id||""));if(A.length>0){D.push({seq:N++,lane:"qimingclaw",label:"未归属步骤",sub_label:`包含 ${A.length} 个任务`,timestamp:((d=A[0])==null?void 0:d.updated_at)??new Date().toISOString(),color:"#22c55e",source_type:"plan_step"});for(const O of A)D.push(Qf(O,N++))}}else for(const k of g)D.push(Qf(k,N++));return{plan_id:e,plan_title:z,plan_status:_?yd(_,ic(a,_.id)):(p=g[0])==null?void 0:p.status,plan_objective:w,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:z,sub_label:w,timestamp:(_==null?void 0:_.createdAt)??((h=g[0])==null?void 0:h.created_at)??new Date().toISOString(),color:"#38bdf8",source_type:"plan"},...D,...S.map((k,A)=>({seq:N+A,lane:"execution",label:k.lifecycle||"Run",sub_label:k.run_id,timestamp:k.completed_at??k.created_at,color:"#f59e0b",source_type:"run"}))],events:C.map(k=>({event_id:k.id,kind:k.kind,occurred_at:k.occurredAt,message:k.message}))}}const l=rc(nl(a).find(_=>_.plan_id===e)??nl(a)[0],a),r=new Date().toISOString();return{plan_id:l.plan_id,plan_title:l.title,plan_status:l.status,plan_objective:l.objective,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:l.title,sub_label:l.objective,timestamp:l.created_at,color:"#38bdf8",source_type:"plan"},{seq:2,lane:"qimingclaw",label:"接入客户端能力",sub_label:"ACP / MCP / computer server adapter",timestamp:r,color:"#22c55e",source_type:"adapter"},{seq:3,lane:"execution",label:l.status==="running"?"已读取 qimingclaw 服务状态":"等待调度",sub_label:Jb(l,a),timestamp:r,color:"#f59e0b",source_type:"run"}],events:[{event_id:`${l.plan_id}-adapter-event`,kind:"qimingclaw_adapter",occurred_at:r,message:"数字员工页面已通过 qimingclaw adapter 获取数据。"}]}}function Qf(e,a){return{seq:a,lane:"qimingclaw",label:e.title,sub_label:`${la(e.status)} · ${e.assigned_skill_id||"qimingclaw-runtime"}`,timestamp:e.updated_at,color:"#22c55e",source_type:"task"}}function wC(e,a=null){const l=Ct(a).find(p=>p.id===e);if(!l)return Ov(e,a);const r=l.planId?In(a).find(p=>p.id===l.planId):null,o=Hn(a).filter(p=>p.taskId===l.id),d=rt(a).filter(p=>p.taskId===l.id||o.some(h=>h.id===p.runId));return{plan_id:l.planId??l.id,plan_title:(r==null?void 0:r.title)??l.title,plan_status:l.status,plan_objective:(r==null?void 0:r.objective)??"qimingclaw 本地任务记录",lanes:[{key:"task",label:"任务",color:"#38bdf8"},{key:"execution",label:"执行",color:"#22c55e"},{key:"event",label:"事件",color:"#f59e0b"}],steps:[{seq:1,lane:"task",label:l.title,sub_label:`${la(l.status)} · ${l.assignedSkillId||"qimingclaw-runtime"}`,timestamp:l.updatedAt,color:"#38bdf8",source_type:"task"},...o.map((p,h)=>({seq:h+2,lane:"execution",label:p.status||"Run",sub_label:p.id,timestamp:p.finishedAt??p.startedAt??p.createdAt,color:"#22c55e",source_type:"run"})),...d.map((p,h)=>({seq:o.length+h+2,lane:"event",label:p.kind,sub_label:p.message,timestamp:p.occurredAt,color:"#f59e0b",source_type:"event"}))],events:d.map(p=>({event_id:p.id,kind:p.kind,occurred_at:p.occurredAt,message:p.message}))}}async function qv(e,a=null,l={}){const r=(a==null?void 0:a.uiState)??await yn()??Nt(),o=ac(),d=Hm(a).find(x=>x.plan_id===e),p=Date.now(),h=`dispatch-${e}-${p}`,_=new Set(r.selectedDutyIdsByDate[o]??[]);_.add(e),r.selectedDutyIdsByDate[o]=[..._],r.confirmedDates[o]=r.confirmedDates[o]??new Date().toISOString(),await Gn(r,"confirm_workday",o);const g=ll(e,a).map(x=>({task_id:x.task_id,title:x.title,status:x.status==="pending"?"running":x.status}));return l.recordCommand!==!1&&await va({command_kind:"activate_plan",context_refs:{plan_id:e},payload:{plan_id:e,title:d==null?void 0:d.title,objective:d==null?void 0:d.objective,requested_action:"dispatch_plan"},correlation_id:h},Ml(`qimingclaw-digital-dispatch-${mt(e)}-${p}`,h,"已将数字员工模板执行写入 qimingclaw 本地运行记录。",{plan_id:e,status:"active",dispatched_tasks:g,source:"qimingclaw-adapter"})),{ok:!0,plan_id:e,source_plan_id:e,dispatched_tasks:g}}async function CC(e,a=null){var w,D,N,k,A,O,te;const l=u(e),r=await Il({actionKind:"plan_step.dispatch_ready_steps",actionLabel:"派发 Ready PlanStep",riskLevel:"high",reasonCodes:["plan_step_dispatch"],actor:"digital_employee_ui",source:"sgrobot-digital-adapter",planId:l||null,correlationId:`plan-step-dispatch:${l||"unknown"}`,payload:{plan_id:l||null,trigger_source:"manual"}}),o=Hl(r);if(o)return{ok:!1,plan_id:l||null,trigger_source:"manual",orchestration_id:u(o.event_id)||`risk-blocked-${mt(l||"unknown")}`,candidates:0,dispatched:0,skipped:0,failed:1,dispatched_step_ids:[],skipped_step_ids:[],failed_step_ids:[],errors:[{stepId:l||"unknown",error:String(o.error||o.status||"risk_policy_blocked")}]};const d=l?await((N=(D=(w=window.QimingClawBridge)==null?void 0:w.digital)==null?void 0:D.dispatchPlanReadySteps)==null?void 0:N.call(D,l).catch(()=>null)):null;if(d)return d;const p=new Date().toISOString(),h=`manual-ready-steps-${mt(l||"unknown")}-${mt(p)}`,_=kd(a).filter(I=>u(I.plan_id)===l&&u(I.status).toLowerCase()==="ready"),g=xa(a),x=Bl(g),S={ok:!0,plan_id:l||null,trigger_source:"manual",orchestration_id:h,candidates:_.length,dispatched:0,skipped:0,failed:0,dispatched_step_ids:[],skipped_step_ids:[],failed_step_ids:[],errors:[]};if(!l||!x.enabled)return S.skipped=_.length,S.skipped_step_ids=_.map(I=>u(I.step_id)).filter(Boolean),S;const C=Math.max(1,Math.min(Math.floor(x.max_per_sweep),10));let z=0;for(const I of _){const ie=u(I.step_id),Z=u(I.task_id);if(z>=C||I.dispatchable!==!0||!Z){S.skipped+=1,ie&&((k=S.skipped_step_ids)==null||k.push(ie));continue}z+=1;try{const K=u(I.latest_run_id)||`${Z}:run:start_run:${mt(h)}`,pe=`manual-ready-step-${mt(ie)}-${Date.now()}`;await va({command_kind:"start_run",context_refs:{plan_id:l,task_id:Z,run_id:K,step_id:ie},payload:{source:"digital-home-plan-orchestration",plan_id:l,task_id:Z,run_id:K,step_id:ie,trigger_source:"manual",orchestration_id:h,candidate_count:_.length},correlation_id:pe},Ml(pe,pe,"已手动推进 Ready PlanStep。",{plan_id:l,task_id:Z,run_id:K,step_id:ie,status:"running",trigger_source:"manual",orchestration_id:h,source:"qimingclaw-plan-orchestration"})),S.dispatched+=1,ie&&((A=S.dispatched_step_ids)==null||A.push(ie))}catch(K){S.failed+=1,ie&&((O=S.failed_step_ids)==null||O.push(ie)),(te=S.errors)==null||te.push({stepId:ie,error:K instanceof Error?K.message:"dispatch failed"})}}return S}function NC(e,a=null){const l=In(a).find(o=>o.id===e);if(l){const o=rt(a).filter(d=>d.planId===e).slice(0,12);return[{role:"user",content:`查看 qimingclaw 本地任务:${l.title}`,created_at:l.createdAt},...o.map(d=>({role:"assistant",content:`${d.kind}:${d.message}`,created_at:d.occurredAt}))]}const r=nl(a).find(o=>o.plan_id===e)??nl(a)[0];return[{role:"user",content:`执行数字员工任务:${r.title}`,created_at:r.created_at},{role:"assistant",content:`已接入 qimingclaw adapter。目标:${r.objective??r.title}`,created_at:new Date().toISOString()}]}const EC=9e3,Ds=2e4;class AC extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function be(e,a={}){const l=await vj(e,a);if(l!==void 0)return l;const{timeoutMs:r=EC,...o}=a,d=cj(),p=new Headers(o.headers),h=new AbortController;let _=!1;const g=window.setTimeout(()=>{_=!0,h.abort()},r),x=o.signal,S=()=>h.abort();x&&(x.aborted?h.abort():x.addEventListener("abort",S,{once:!0})),d&&p.set("Authorization",`Bearer ${d}`),o.body&&typeof o.body=="string"&&!p.has("Content-Type")&&p.set("Content-Type","application/json");let C;try{C=await fetch(`${fj()}${uj}${e}`,{...o,headers:p,signal:h.signal})}catch(z){throw z instanceof DOMException&&z.name==="AbortError"&&_?new Error(`API request timed out after ${r/1e3}s: ${e}`):z}finally{window.clearTimeout(g),x==null||x.removeEventListener("abort",S)}if(C.status===401)throw oj(),window.dispatchEvent(new Event("qimingclaw-digital-unauthorized")),new AC;if(!C.ok){const z=await C.text().catch(()=>"");let w=z||C.statusText;if(z)try{const D=JSON.parse(z);typeof D.message=="string"&&D.message.trim()?w=D.message.trim():typeof D.error=="string"&&D.error.trim()&&(w=D.error.trim())}catch{w=z}throw new Error(`API ${C.status}: ${w}`)}if(C.status!==204)return C.json()}function Lv(e,a){if(e!==null&&typeof e=="object"&&!Array.isArray(e)&&a in e){const l=e[a];if(l!==void 0)return l}return e}function Bv(){return be("/api/scheduler/jobs").then(e=>Lv(e,"jobs"))}function TC(e){return be(`/api/cron/${encodeURIComponent(e)}`,{method:"DELETE"})}function RC(e,a){return be(`/api/cron/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(a)}).then(l=>typeof l.job=="object"?l.job:l)}function $C(e,a=20){const l=new URLSearchParams({limit:String(a)});return be(`/api/cron/${encodeURIComponent(e)}/runs?${l}`).then(r=>Lv(r,"runs"))}function DC(){return be("/api/cron/settings")}function zC(e){return be("/api/cron/settings",{method:"PATCH",body:JSON.stringify(e)})}async function MC(){const[e,a]=await Promise.all([Bv(),DC().catch(()=>({enabled:!1,catch_up_on_startup:!1,max_run_history:20}))]),l=await Promise.all(e.slice(0,30).map(async o=>{const d=await $C(o.id,5).catch(()=>[]);return[o.id,d]})),r=new Map(l);return{items:e.map(o=>{const d=r.get(o.id)??[],p=d[0],h=o.schedule&&typeof o.schedule=="object"?o.schedule:{};return{schedule_id:o.id,name:o.name||o.id,enabled:o.enabled!==!1,status:o.enabled===!1?"paused":String(o.last_status||h.status||"enabled"),cron_expr:o.expression||String(h.expression||""),next_run:o.next_run||null,last_run:o.last_run||(p==null?void 0:p.finished_at)||(p==null?void 0:p.started_at)||null,last_status:o.last_status||(p==null?void 0:p.status)||null,latest_run_error:o.last_output||(p==null?void 0:p.output)||null,run_count:d.length,payload:{job:o,runs:d}}}),settings:a,source:"qimingclaw-adapter"}}function oy(e){return be(`/api/plan/${encodeURIComponent(e)}/messages`).then(a=>({messages:a.messages||[]}))}function OC(){return be("/api/route-decisions/interventions")}function qC(e,a){return be(`/api/route-decisions/${encodeURIComponent(e)}/intervention`,{method:"POST",body:JSON.stringify(a)})}function LC(e,a){return be("/api/route-decisions/interventions/batch",{method:"POST",body:JSON.stringify({route_decision_ids:e,...a})})}function BC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/interventions/workbench${l?`?${l}`:""}`)}function UC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/memory-governance${l?`?${l}`:""}`)}function IC(e,a,l={}){return be("/api/digital-employee/memory-governance/status/batch",{method:"POST",body:JSON.stringify({memory_ids:e,action:a,...l})})}function HC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/skill-audit-workbench${l?`?${l}`:""}`)}function GC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/ops-workbench${l?`?${l}`:""}`)}function YC(e,a,l={}){return be("/api/digital-employee/ops-workbench/actions/batch",{method:"POST",body:JSON.stringify({ops_ids:e,action:a,...l}),timeoutMs:Ds})}function KC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/notifications/workbench${l?`?${l}`:""}`)}function QC(e,a,l={}){return be("/api/digital-employee/notifications/actions/batch",{method:"POST",body:JSON.stringify({notification_ids:e,action:a,...l}),timeoutMs:Ds})}function VC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/daily-reports/workbench${l?`?${l}`:""}`)}function Xo(e){return be("/api/governance/command",{method:"POST",body:JSON.stringify(e)})}function XC(e="unread"){return be(`/api/notifications?status=${encodeURIComponent(e)}`).then(a=>a.notifications??[])}function ZC(){return be("/api/notifications/unread-count").then(e=>e.count??0)}function JC(){return be("/api/notifications/preferences")}function FC(e){return be("/api/notifications/preferences",{method:"PATCH",body:JSON.stringify(e)})}function PC(){return be("/api/notifications/updates/pull",{method:"POST"})}function Uv(e){return be("/api/notifications/desktop",{method:"POST",body:JSON.stringify(e)})}function WC(){return be("/api/notifications/desktop/status")}function eN(){return be("/api/notifications/desktop/settings/open",{method:"POST",body:JSON.stringify({})})}function tN(){return be("/api/plan-step/dispatch-policy")}function nN(e){return be("/api/plan-step/dispatch-policy",{method:"PATCH",body:JSON.stringify(e)})}function Iv(){return be("/api/plan-step/dispatch-policy/pull",{method:"POST"})}function Hv(){return be("/api/skill/policies/pull",{method:"POST"})}function Gv(){return be("/api/risk-approval/policy/pull",{method:"POST"})}function Yv(){return be("/api/risk-approval/policy")}function Kv(e){return be("/api/risk-approval/policy",{method:"PATCH",body:JSON.stringify(e)})}function Qv(){return be("/api/route-decision/policy/pull",{method:"POST"})}async function aN(){const[e,a]=await Promise.all([tN(),Yv()]);return{plan_step_dispatch_policy:e,risk_approval_policy:a,source:"qimingclaw-adapter",items:[{policy_id:"plan_step_dispatch",title:"PlanStep 派发策略",status:e.enabled?"enabled":"disabled",source:e.source,updated_at:e.updated_at,last_pulled_at:e.last_pulled_at,last_pull_error:e.last_pull_error,summary:`max_per_sweep=${e.max_per_sweep}; auto_dispatch_ready_steps=${e.auto_dispatch_ready_steps}`,payload:e},{policy_id:"risk_approval",title:"风险审批策略",status:a.enabled?"enabled":"disabled",source:a.source,updated_at:a.updated_at,last_pulled_at:a.last_pulled_at,last_pull_error:a.last_pull_error,summary:`approval_required=${a.approval_required_risk_levels.join(",")}; auto_reject_actions=${a.auto_reject_actions.length}`,payload:a},{policy_id:"route_decision",title:"入口路由策略",status:"pull_available",source:"remote_pull",summary:"通过 /api/route-decision/policy/pull 获取管理端路由策略快照。"},{policy_id:"skill",title:"技能策略",status:"pull_available",source:"remote_pull",summary:"通过 /api/skill/policies/pull 同步远端技能启停策略。"}]}}async function lN(){const e=[{policy_id:"plan_step_dispatch",run:Iv},{policy_id:"risk_approval",run:Gv},{policy_id:"route_decision",run:Qv},{policy_id:"skill",run:Hv}],a=[];for(const r of e)try{const o=await r.run(),d=o;a.push({policy_id:r.policy_id,ok:d.ok!==!1,error:d.error??null,result:o})}catch(o){a.push({policy_id:r.policy_id,ok:!1,error:o instanceof Error?o.message:String(o)})}const l=a.filter(r=>r.ok).length;return{ok:l>0,total:a.length,pulled:l,failed:a.length-l,items:a}}function iN(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/plan-step-graph${l?`?${l}`:""}`)}function sN(e,a={}){const l={plans:"/api/digital-employee/plans",tasks:"/api/digital-employee/tasks",runs:"/api/digital-employee/runs",events:"/api/digital-employee/events",artifacts:"/api/digital-employee/artifacts","artifact-groups":"/api/digital-employee/artifact-groups",approvals:"/api/digital-employee/approvals"},r=new URLSearchParams;Object.entries(a).forEach(([d,p])=>{p!=null&&`${p}`.trim()!==""&&r.set(d,`${p}`)});const o=r.toString();return be(`${l[e]}${o?`?${o}`:""}`)}function rN(e){return be(`/api/notifications/${encodeURIComponent(e)}/read`,{method:"POST"}).then(a=>a.ok??!1)}function cN(e){return be(`/api/notifications/${encodeURIComponent(e)}/dismiss`,{method:"POST"}).then(a=>a.ok??!1)}function Vv(e,a){return be(`/api/notifications/${encodeURIComponent(e)}/reply`,{method:"POST",body:JSON.stringify({content:a})})}function Ss(e){const a=e?`?date=${encodeURIComponent(e)}`:"";return be(`/api/digital-employee/workday${a}`,{timeoutMs:Ds})}function ql(e){return be("/api/digital-employee/workday/actions",{method:"POST",body:JSON.stringify(e)})}function oN(e,a={}){return be(`/api/digital-employee/managed-services/${encodeURIComponent(e)}/restart`,{method:"POST",body:JSON.stringify(a),timeoutMs:Ds})}function dN(e){return be(`/api/debug/plan/${encodeURIComponent(e)}/dispatch`,{method:"POST",timeoutMs:Ds})}function dy(e){return be(`/api/digital-employee/plans/${encodeURIComponent(e)}/dispatch-ready-steps`,{method:"POST",timeoutMs:Ds})}function uN(){return be("/api/debug/plans?limit=80").then(e=>e.plans??[])}function uy(e,a=50){const l=new URLSearchParams({limit:String(a),q:e});return be(`/api/debug/plans?${l}`).then(r=>r.plans??[])}function fN(e){const a=new URLSearchParams({limit:"50",plan_id:e});return be(`/api/debug/tasks?${a}`).then(l=>({tasks:l.tasks??[],runs:l.runs??[],total:l.total,truncated:l.truncated}))}function mN(e){return be(`/api/debug/plan/${encodeURIComponent(e)}/flow`)}function pN(){return be("/api/skill").then(e=>e.skills??[])}function _N(e,a){return be(`/api/skill/${encodeURIComponent(e)}/enabled`,{method:"POST",body:JSON.stringify({enabled:a})})}function hN(){return be("/api/cron/check",{method:"POST"})}function Xv(e,a){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/access`,{method:"POST",body:JSON.stringify({action:a})})}function Zv(e){return be("/api/digital-employee/daily-reports/delivery",{method:"POST",body:JSON.stringify(e)})}function Oo(e){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}`).then(a=>a.item??null)}function qo(e){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/versions`).then(a=>a.items??[])}function gN(e,a,l={}){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/retention`,{method:"POST",body:JSON.stringify({action:a,...l})})}function Jv(e,a,l={}){return be("/api/digital-employee/artifacts/retention/batch",{method:"POST",body:JSON.stringify({artifact_ids:e,action:a,...l})})}function yN(e,a={}){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/cleanup`,{method:"POST",body:JSON.stringify(a)})}function bN(e,a,l={}){return be(`/api/digital-employee/approvals/${encodeURIComponent(e)}/actions`,{method:"POST",body:JSON.stringify({action:a,...l})})}function vN(e,a){return be(`/api/approval/${encodeURIComponent(e)}/conflict/resolve`,{method:"POST",body:JSON.stringify(a)})}function xN(e,a,l={}){return be("/api/approval/conflicts/resolve/batch",{method:"POST",body:JSON.stringify({approval_ids:e,resolution:a,...l})})}function kN(){return be("/api/approval/updates/pull",{method:"POST",body:JSON.stringify({})})}function Vf({className:e=""}){return s.jsx("div",{className:`de-gem ${e}`,"aria-hidden":"true"})}function SN(){return s.jsxs("div",{className:"de-stage","aria-hidden":"true",children:[s.jsx("div",{className:"de-stage-glow"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-1"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-2"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-3"})]})}function jN({avatarSrc:e,altText:a="数字员工",statusLabel:l}){return s.jsxs("div",{className:"de-avatar-container","aria-hidden":"true",children:[s.jsxs("div",{className:"de-avatar-glass-space",children:[s.jsxs("div",{className:"de-avatar-roof",children:[s.jsx("div",{className:"de-avatar-roof-face"}),s.jsx("div",{className:"de-avatar-roof-glow"})]}),s.jsx("div",{className:"de-avatar-glass-left"}),s.jsx("div",{className:"de-avatar-glass-right"}),s.jsx(Vf,{className:"de-gem-1"}),s.jsx(Vf,{className:"de-gem-2"}),s.jsx(Vf,{className:"de-gem-3"})]}),l&&s.jsx("div",{className:"de-avatar-state-label",children:l}),s.jsx("img",{src:e,alt:a,className:"de-avatar-img"}),s.jsx(SN,{})]})}const wN=dj,CN=`${wN}/digital-assets`,gi=`${CN}/avatars`,NN="Asia/Shanghai",vs={comment:"",delegateTo:"",dueAt:""},EN=["skill","browser","call","redial","evidence","decision","reporting"],AN=[{id:"all",label:"全部"},{id:"running",label:"执行中"},{id:"success",label:"已完成"},{id:"danger",label:"异常"}],Fv="qimingclaw:digital-workday-guide-dismissed-date",Pv="sgrobot:digital-workday-guide-dismissed-date",TN=80,fy=300,RN=[{title:"确认日期",body:"先确认今天的值班日期,避免把昨天或明天的任务混在一起。"},{title:"选择任务",body:"从岗位职责里勾选今天要执行的任务,未接入能力保持待扩展。"},{title:"任务执行",body:"点击任务执行后,数字员工开始按已选任务推进工作。"},{title:"查看过程",body:"右侧滚动显示运行明细,任务中心可继续查看明细。"}],$N={skill:{id:"skill",label:"查看Skill",shortLabel:"技能",phase:"查看Skill与计划",src:`${gi}/states/employee-idle.png`,bubble:"我正在查看可用Skill、任务计划和今天要勾选的执行内容。"},browser:{id:"browser",label:"操作浏览器",shortLabel:"浏览器",phase:"操作浏览器执行",src:`${gi}/states/employee-browser.png`,bubble:"我正在打开页面、读取信息、填写表单,并把执行过程同步到右侧。"},call:{id:"call",label:"电话外呼",shortLabel:"外呼",phase:"电话外呼与重拨",src:`${gi}/states/employee-running.png`,bubble:"我正在按工单名单外呼现场人员,记录接通、未接通和后续重拨。"},redial:{id:"redial",label:"重拨跟进",shortLabel:"重拨",phase:"未接通人员重拨",src:`${gi}/states/employee-redial.png`,bubble:"我正在跟进未接通人员,按间隔重拨并更新每个人的通知状态。"},evidence:{id:"evidence",label:"数据核验",shortLabel:"核验",phase:"核验执行证据",src:`${gi}/states/employee-evidence.png`,bubble:"我正在核验页面数据、执行证据和任务结果,确认交付内容可信。"},decision:{id:"decision",label:"等待决策",shortLabel:"决策",phase:"等待人工确认",src:`${gi}/states/employee-decision.png`,bubble:"我已完成前置处理,现在需要人工确认后再继续推进。"},reporting:{id:"reporting",label:"汇报成果",shortLabel:"汇报",phase:"汇报今日成果",src:`${gi}/states/employee-reporting.png`,bubble:"我正在整理运行明细和日报,方便你直接查看成果和异常。"}};function ym(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function DN(e){return(e||ym()).split("-").join("/")}function xs(e){return e==="success"?"de-badge-success":e==="danger"?"de-badge-danger":e==="warning"||e==="running"?"de-badge-warning":"de-badge-info"}function zN(e){const a=typeof e=="number"&&Number.isFinite(e)?e:0;return new Intl.NumberFormat("zh-CN",{notation:"compact",maximumFractionDigits:1}).format(a)}function MN(e){const a=typeof e=="number"&&Number.isFinite(e)?e:0;return a>0&&a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`}function ON(e){const a=Bt(e).toLowerCase();return["high","critical","risk","marked"].includes(a)?"danger":["medium","warning"].includes(a)?"warning":["normal","low","clear"].includes(a)?"success":"info"}function qN(e){const a=Bt(e).toLowerCase();return["high","critical","risk","marked"].includes(a)?"高风险":["medium","warning"].includes(a)?"中风险":["normal","low","clear"].includes(a)?"风险正常":"未标记风险"}function LN(e){const a=Bt(e).toLowerCase();return["timeout","overdue","expired"].includes(a)?"danger":["tracked","due_soon","warning"].includes(a)?"warning":["met","normal"].includes(a)?"success":"info"}function BN(e){const a=Bt(e).toLowerCase();return["timeout","overdue","expired"].includes(a)?"已超时":["tracked","due_soon","warning"].includes(a)?"SLA跟踪":["met","normal"].includes(a)?"SLA正常":"未设置SLA"}function Xf(e){const a=Bt(e).toLowerCase();return a==="comment"?"评论":a==="delegate"?"转交":a==="mark_timeout"?"标记超时":a==="mark_risk"?"标记风险":a==="clear_risk"?"清除风险":a||"暂无动作"}function UN(e){const a=Bt(e).toLowerCase();return a==="terminal_status_mismatch"?"终态不一致":a==="local_newer_status_mismatch"?"本地状态较新":a==="workflow_step_mismatch"?"审批步骤不一致":a||"跨端状态不一致"}function my(e){const a=Bt(e).toLowerCase();return a==="approved"?"已同意":a==="rejected"?"已驳回":a==="cancelled"?"已取消":a==="pending"?"待确认":a==="dismissed"?"已忽略":a||"未知"}function IN(e,a){const l=["de-template-card-row","de-duty-card","de-duty-card--compact"];return e.implemented||l.push("de-duty-card--disabled"),a&&l.push("de-duty-card--selected"),e.statusTone==="running"&&l.push("de-duty-card--running"),l.join(" ")}function Sa(e){return String(e||"").replace(/\s+/g," ").trim()}function HN(e){if(!e)return"";if(e.expression)return e.expression;if(typeof e.schedule=="string")return e.schedule;if(e.schedule&&typeof e.schedule=="object"){const a=e.schedule,l=a.expr??a.expression??a.cron;if(typeof l=="string")return l}return""}function GN(e){const a=HN(e);if(!a)return"未定时";const l=a.trim().split(/\s+/),r=l[0]??"",o=l[1]??"";return l.length>=2&&/^\d+$/.test(r)&&/^\d+$/.test(o)?`已定时 ${o.padStart(2,"0")}:${r.padStart(2,"0")} 执行`:`调度注册 ${a}`}function ud(e,a){if(!e||typeof e!="object")return"";const l=e;for(const r of a){const o=l[r];if(typeof o=="string"&&o.trim())return o.trim()}return""}function js(e){const a=Sa(e.template_id);if(a)return a;const l=ud(e.delivery,["template_id","plan_template_id","templateId"]);if(l)return l;const r=ud(e.schedule,["template_id","plan_template_id","templateId"]);return r||e.id.replace(/^schedule-/,"")}function YN(e,a,l){return e.has(a)||l?!0:Array.from(e).some(r=>ec(r,a))}function ec(e,a){return e.startsWith(`${a}-`)?/^-\d{8,}$/.test(e.slice(a.length)):!1}function KN(e,a,l){if(e.id===a||e.conversation_id===a||ec(e.id,a)||e.conversation_id&&ec(e.conversation_id,a))return!0;const r=Sa(l).toLowerCase();return!!(r&&Sa(e.title).toLowerCase()===r)}function Wv(e,a,l){const r=l.filter(o=>KN(o,e,a));return r.find(o=>o.selected)??r.find(o=>o.id===e||o.conversation_id===e)??r[0]??null}function QN(e,a){var l;return((l=Wv(e.id,e.title,a))==null?void 0:l.id)??e.id}function VN(e){return typeof e.step_count=="number"&&Number.isFinite(e.step_count)?e.step_count:Array.isArray(e.skill_ids)?e.skill_ids.length:0}function XN(e){const a=Sa(e.trigger_kind||ud(e.schedule,["kind"])).toLowerCase();return a==="cron"?"定时任务":a==="webhook"?"触发任务":"手动任务"}function ZN(e,a,l){const r=js(e),o=Wv(r,e.name,a),d=VN(e),p=Array.isArray(e.skill_ids)?e.skill_ids.length:d,h=(o==null?void 0:o.status)??e.last_status??(e.enabled?"plan_template":"disabled"),_=(o==null?void 0:o.status_label)??(e.enabled?XN(e):"已停用"),g=(o==null?void 0:o.status_tone)??(e.enabled?"info":"waiting");return{id:r,planId:r,title:Sa(e.name)||r,summary:Sa(e.prompt)||`任务:${r}`,implemented:e.enabled,selectable:!0,selected:l,status:h,statusLabel:_,statusTone:g,scheduleText:(o==null?void 0:o.schedule_text)??GN(e),resultText:(o==null?void 0:o.result_text)??`${d} 个步骤,${p} 个Skill`,conversationId:(o==null?void 0:o.conversation_id)??r,stepCount:d,taskCount:p,readyStepCount:0,runningStepCount:0,blockedStepCount:0,leasedStepCount:0,schedulerJob:e,source:"plan_template"}}function Hr(e){return e.implemented}function Gr(e){return e.implemented?"":"当前任务未接入执行能力。"}function JN(e){return e.readyStepCount>0?`推进 ${e.readyStepCount}`:"推进"}function FN(e){const a=new Map;return e.forEach(l=>{const r=l.plan_id||"";if(!r)return;const o=a.get(r)??{ready:0,running:0,blocked:0,leased:0},d=l.status.toLowerCase();l.lease_active||l.skip_reason==="lease_active"?(o.leased+=1,o.running+=1):d==="ready"&&l.dispatchable?o.ready+=1:["running","active","leased","queued"].includes(d)?o.running+=1:d==="blocked"&&(o.blocked+=1),a.set(r,o)}),a}function PN(e,a){const l=`${e.conversation_id??""} ${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`;return l.includes(a.id)||l.includes(a.title)}function WN(e,a){const l=a.filter(_=>PN(_,e)),r=l.filter(Nd).length,o=l.filter(Ed).length,d=l.filter(Cd).length,p=Math.max(l.length-r-o-d,0),h=l.length>0?l[l.length-1]:void 0;return{id:e.id,plan_id:e.planId,title:e.title,description:e.summary,selected:!0,total_count:l.length,success_count:r,failure_count:o,running_count:d,waiting_count:p,latest_status_label:(h==null?void 0:h.status_label)??e.statusLabel,latest_status_tone:(h==null?void 0:h.status_tone)??e.statusTone,business_summary:l.length>0?`${e.title} 今日执行 ${l.length} 次,成功 ${r} 次,失败 ${o} 次。`:`${e.title} 尚未产生执行记录。`,ai_summary:l.length>0?`${e.title} 今日执行 ${l.length} 次,成功 ${r} 次,失败 ${o} 次。`:`${e.title} 尚未产生执行记录。`}}function e2(e,a){const l=e.plan_id??"";return e.id===a.id||l===a.planId||ec(e.id,a.id)||ec(l,a.planId)?!0:Sa(e.title).toLowerCase()===Sa(a.title).toLowerCase()}function t2(e){return{id:e.id,time:e.time,task_name:e.plan_title,step_name:e.step_title,operation_name:e.task_title,status_label:e.status_label,status_tone:e.status_tone,business_detail:Zo(e),raw_detail:e.detail,updated_at:e.updated_at,conversation_id:e.conversation_id}}function py(e){const[a="9",l="0"]=e.split(":"),r=Math.min(Math.max(Number(a)||9,0),23);return`${Math.min(Math.max(Number(l)||0,0),59)} ${r} * * *`}function _y(e){return e.status_label||e.status||"已同步"}function Bt(e){return String(e||"").replace(/\s+/g," ").trim()}function ex(e){const l=`${e.plan_title} ${e.step_title??""}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);return l!=null&&l[1]&&l[2]?`${l[1].padStart(2,"0")}:${l[2]}`:Bt(e.time)||"即时触发"}function Wa(e){const a=Bt(e);if(!a)return"";const l=new Date(a);if(Number.isNaN(l.getTime()))return"";const r=new Intl.DateTimeFormat("zh-CN",{timeZone:NN,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(l),o=d=>{var p;return((p=r.find(h=>h.type===d))==null?void 0:p.value)??""};return`${o("month")}/${o("day")} ${o("hour")}:${o("minute")}`}function ap(e){const a=Bt(e);return a?a.length>140?`${a.slice(0,140)}...`:a:""}function n2(e){var a;return e?!e.enabled||!e.endpoint||(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"warning":e.failed>0||e.lastSyncError?"danger":e.syncing||e.pending>0?"warning":e.lastSyncAt?"success":"info":"info"}function a2(e){var a;return e?e.enabled?e.endpoint?(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"缺少凭据":e.syncing?"同步中":e.failed>0||e.lastSyncError?"同步异常":e.pending>0?"待同步":e.lastSyncAt?"已同步":"等待数据":"未配置":"已停用":"未连接"}function l2(e){var l,r;if(!e)return"当前环境未连接 qimingclaw 同步桥。";if(!e.enabled)return"管理端同步已停用。";if(!e.endpoint)return"管理端同步地址未配置。";if((((l=e.missingCredentials)==null?void 0:l.length)??0)>0)return`管理端同步凭据未完整:${(r=e.missingCredentials)==null?void 0:r.join("、")}`;const a=ap(e.lastSyncError);if(e.failed>0||a){const o=e.failureSummary?[e.failureSummary.dueForRetry>0?`${e.failureSummary.dueForRetry} 条可重试`:"",e.failureSummary.backoff>0?`${e.failureSummary.backoff} 条退避中`:"",i2(e.failureSummary)].filter(Boolean).join(","):"";return[e.failed>0?`${e.failed} 条失败`:"",e.pending>0?`${e.pending} 条待同步`:"",o,a?`失败原因:${a}`:""].filter(Boolean).join(",")}return e.syncing?`正在同步,待同步 ${e.pending} 条。`:e.pending>0?`仍有 ${e.pending} 条待同步记录。`:e.lastSyncAt?`最近同步:${Wa(e.lastSyncAt)||e.lastSyncAt}`:"等待本地 outbox 数据。"}function Xr(e){return{plan:"Plan",task:"Task",run:"Run",event:"Event",artifact:"Artifact",approval:"Approval"}[e]||e||"Entity"}function i2(e){const a=e.byEntityType.slice(0,3).map(l=>`${Xr(l.entityType)} ${l.count}`).join(" / ");return a?`类型:${a}`:""}function s2(e){var r;const a=ap(e.error);return[Bt((r=e.entitySummary)==null?void 0:r.title),`${Xr(e.entityType)} / ${e.operation}`,`重试 ${e.attempts} 次`,e.dueForRetry?"等待补偿":`下次 ${tx(e)}`,a].filter(Boolean).join(" · ")}function hy(e){return Wa(e.lastAttemptAt||e.updatedAt||e.createdAt)||"未尝试"}function tx(e){return e.dueForRetry?"可重试":Wa(e.nextRetryAt)||"待计算"}function r2(e){return e==="synced"?"已同步":e==="failed"?"失败":e||"未知"}function c2(e){return e==="synced"?"success":e==="failed"?"danger":"info"}function gy(e,a){return JSON.stringify({generatedAt:new Date().toISOString(),source:"qimingclaw-digital-employee",failure:e,sync:a?{running:a.running,syncing:a.syncing,enabled:a.enabled,endpoint:a.endpoint,missingCredentials:a.missingCredentials??[],pending:a.pending,failed:a.failed,lastSyncAt:a.lastSyncAt,lastSyncError:a.lastSyncError,failureSummary:a.failureSummary??null}:null},null,2)}function o2(e){return`qimingclaw-sync-failure-${[e.entityType,e.entityId].filter(Boolean).join("-").replace(/[^a-z0-9._-]+/gi,"-").replace(/^-+|-+$/g,"").slice(0,80)||e.id||"diagnostic"}.json`}function yy(e,a,l="application/json;charset=utf-8"){const r=new Blob([a],{type:l}),o=URL.createObjectURL(r),d=document.createElement("a");d.href=o,d.download=e,document.body.appendChild(d),d.click(),d.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}function d2(e){return`qimingclaw-digital-report-${e}.txt`}function u2(e,a,l,r){return[a.title||`${e} 数字员工日报`,`日期:${e}`,`生成时间:${a.generated_at?Wa(a.generated_at):"暂未生成"}`,`生成来源:${a.generated_by==="ai"?"AI":"qimingclaw adapter"}`,"","## 摘要",a.summary||"暂无摘要。","","## 指标",`任务总数:${a.totals.task_count}`,`执行次数:${a.totals.execution_count}`,`成功次数:${a.totals.success_count}`,`失败次数:${a.totals.failure_count}`,`运行中:${a.totals.running_count??0}`,"","## 任务汇总",...l.length>0?l.map(o=>`- ${o.title}:${o.latest_status_label},执行 ${o.total_count} 次,成功 ${o.success_count},失败 ${o.failure_count}。${o.ai_summary||o.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...r.length>0?r.map(o=>`- ${o.time||"--:--"} ${o.task_name} / ${o.step_name||o.operation_name||"任务执行"}:${o.status_label},${o.business_detail}`):["暂无运行明细。"],"","## 详情",...(a.detail_lines??[]).length>0?a.detail_lines:["暂无详情。"]].join(` -`)}async function f2(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.getSyncStatus))return null;try{return await e.getSyncStatus()}catch{return null}}function nx(e){const a=Wa(e.updated_at);return a||Bt(e.time)||"待同步"}function m2(e){return Wa(e.updated_at)||Bt(e.time)||"--:--"}function Zo(e){const a=Bt(e.detail).replace(/^触发来源[::]\s*$/u,"").replace(/触发来源[::]\s*(?=。|,|,|;|;|$)/u,"").trim();return a?/^runner unavailable/i.test(a)?"执行链路异常,点击查看详情。":a.length>72?`${a.slice(0,72)}...`:a:Nd(e)?"真实事件已完成,结果详情未回传。":Cd(e)?"真实事件执行中,等待结果回传。":Ed(e)?"执行异常,点击查看详情。":"结果详情待同步。"}function by(e){return`计划时间 ${ex(e)} · 执行时间 ${nx(e)}`}function p2(e,a){return a==="all"?!0:a==="running"?Cd(e):a==="success"?Nd(e):Ed(e)}function _2(e){return new Set(e.duties.filter(a=>a.selected).map(a=>a.id))}function Lo(e){const a=e.dependent_tasks.length>0?`,影响 ${e.dependent_tasks.slice(0,2).join("、")}`:"";return`${e.name} ${e.status_label}${e.error?`:${e.error}`:a}`}function h2(e){return e.service_id==="fileServer"||e.service_id==="guiServer"}function vy(e){const a=e.next_action==="retry_or_skip"?"重试或跳过":e.next_action==="watch_progress"?"观察进度":e.next_action;return`${e.title} ${e.status_label},下一步 ${a}`}function g2(e){switch(e){case"retry_task":return"重试";case"skip_task":return"跳过";case"cancel_task":return"取消";default:return e}}function y2(e){switch(e){case"retry_task":return"重试前置";case"skip_task":return"跳过前置";case"cancel_task":return"取消此步骤";case"provide_task_input":return"补充输入";default:return e}}function bm(e){return(e.blocked_dependency_details??[]).find(a=>!!a.task_id)??null}function b2(e){var r;const a=bm(e)??((r=e.blocked_dependency_details)==null?void 0:r[0])??null,l=a?`${a.title} ${a.status}`:`阻塞依赖 ${e.blocked_dependencies.length} 个`;return`${e.title} ${e.dependency_status||e.status},${l}`}function Zf(e){return["pending","requested"].includes(String(e||"").toLowerCase())}function xy(e){if(!(e instanceof Element))return!1;if(e.closest('button, a, input, select, textarea, [role="tab"]'))return!0;const a=e.closest('[role="button"]');return!!(a&&!a.classList.contains("de-workday-execution--clickable"))}function v2(e,a){return e.length<=4?e:e.slice(a).concat(e.slice(0,a)).slice(0,4)}function Cd(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("running")||a.includes("execut")||a.includes("progress")}function Nd(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("success")||a.includes("complete")||a.includes("done")}function Ed(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("danger")||a.includes("fail")||a.includes("error")||a.includes("异常")}function x2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["外呼","电话","拨打","接通","未接通","重拨","人员"].some(l=>a.includes(l))}function k2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["重拨","未接通","再拨","回拨","retry","callback"].some(l=>a.includes(l))}function S2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["核验","校验","证据","汇总","报告","结果","交付","看板","同步"].some(l=>a.includes(l))}function j2(){if(typeof window>"u")return null;const e=new URLSearchParams(window.location.search).get("visual");return EN.includes(e)?e:null}function w2(e){return k2(e)?"redial":x2(e)?"call":S2(e)?"evidence":"browser"}function C2(e){return e.currentEvent?w2(e.currentEvent):!e.confirmed&&e.eventsCount===0?"skill":e.pendingDecisionCount>0?"decision":e.eventsCount>0?"browser":"skill"}function N2(){if(typeof window>"u")return null;try{return window.sessionStorage.getItem(Fv)??window.sessionStorage.getItem(Pv)}catch{return null}}function E2(e){if(!(typeof window>"u"))try{window.sessionStorage.setItem(Fv,e),window.sessionStorage.removeItem(Pv)}catch{}}function A2({onNavigate:e}){var wc,Cc,Nc,Hi,Ec,Ac;const[a,l]=v.useState(ym()),[r,o]=v.useState(null),[d,p]=v.useState([]),[h,_]=v.useState(new Set),[g,x]=v.useState(!0),[S,C]=v.useState(null),[z,w]=v.useState(null),[D,N]=v.useState(null),[k,A]=v.useState({}),[O,te]=v.useState(null),[I,ie]=v.useState(!1),[Z,K]=v.useState("selected"),[pe,P]=v.useState(0),[q,ce]=v.useState(!1),[R,M]=v.useState(!1),[ne,B]=v.useState(!1),[U,le]=v.useState(null),[de,Te]=v.useState("all"),[E,J]=v.useState(!1),[se,ue]=v.useState(null),[ve,Ee]=v.useState(null),[ae,he]=v.useState("09:00"),[Ie,V]=v.useState(!1),[Ce,yt]=v.useState(!1),[He,Ke]=v.useState(null),[Dt,wa]=v.useState([]),[Ci,Ms]=v.useState([]),[Ql,Ni]=v.useState(null),[Ei,oc]=v.useState([]),[Os,Xt]=v.useState(null),[Ai,il]=v.useState(null),[Vl,sl]=v.useState(""),[En,Ca]=v.useState({name:"",company:"",position:"",currentStatus:"working"}),[rl,dc]=v.useState("18:00"),[Xl,Ut]=v.useState(!1),[ra,Wt]=v.useState(()=>N2()),[en,uc]=v.useState(null),me=v.useRef(!1),ca=v.useRef(!1);v.useEffect(()=>(me.current=!0,()=>{me.current=!1}),[]);const Fe=v.useCallback(async()=>{let b=null,Q=null;const re=()=>{if(ca.current||!Q)return;const ke=(b==null?void 0:b.source)==="live"?_2(b):new Set,dt=Q.map(cn=>js(cn)).filter(cn=>YN(ke,cn)),et=dt.length>0?dt:Q.slice(0,3).map(cn=>js(cn));_(new Set(et))},ye=Ss(a).then(ke=>{me.current&&(b=ke,o(ke),N(null),re())}).catch(ke=>{me.current&&N(ke instanceof Error?ke.message:"数字员工首页数据同步失败")}),_e=Bv().then(ke=>{me.current&&(Q=ke.filter(dt=>dt.job_type==="plan_template"||ud(dt.delivery,["mode"])==="plan_template"),p(Q),te(null),re())}).catch(ke=>{me.current&&te(ke instanceof Error?ke.message:"任务加载失败")}),Qe=f2().then(ke=>{me.current&&uc(ke)}),_t=iN({page_size:80}).then(ke=>{me.current&&(Ms(ke.items),wa(ke.items.filter(dt=>dt.status==="blocked").slice(0,6)),Ni(null))}).catch(ke=>{me.current&&(Ms([]),wa([]),Ni(ke instanceof Error?ke.message:"阻塞步骤加载失败"))}),at=OC().then(ke=>{me.current&&(oc(ke.interventions.slice(0,6)),Xt(null))}).catch(ke=>{me.current&&(oc([]),Xt(ke instanceof Error?ke.message:"路由干预加载失败"))});await Promise.allSettled([ye,_e,Qe,_t,at]),me.current&&x(!1)},[a]);v.useEffect(()=>{x(!0),Fe()},[Fe]),v.useEffect(()=>{const b=r!=null&&r.workday.confirmed?8e3:3e4,Q=window.setInterval(()=>{Fe()},b);return()=>window.clearInterval(Q)},[Fe,r==null?void 0:r.workday.confirmed]),v.useEffect(()=>{if(q||R||ne||U!==null)return;const Q=window.setInterval(()=>{P(re=>{const ye=(r==null?void 0:r.source)==="live"?r.events.length:0;return ye>0?(re+1)%ye:0})},3200);return()=>window.clearInterval(Q)},[ne,R,q,U,r==null?void 0:r.events.length,r==null?void 0:r.source]);const Zt=(r==null?void 0:r.source)==="live",An=v.useMemo(()=>Zt?(r==null?void 0:r.duties)??[]:[],[Zt,r==null?void 0:r.duties]),sn=v.useMemo(()=>{const b=FN(Ci);return d.slice().sort((Q,re)=>{const ye=js(Q),_e=js(re),Qe=h.has(ye)?1:0,_t=h.has(_e)?1:0;if(Qe!==_t)return _t-Qe;const at=new Date(Q.next_run||"").getTime(),ke=new Date(re.next_run||"").getTime(),dt=Number.isFinite(at),et=Number.isFinite(ke);return dt!==et?dt?-1:1:dt&&et&&at!==ke?at-ke:Sa(Q.name).localeCompare(Sa(re.name),"zh-CN")}).map(Q=>{const re=js(Q),ye=ZN(Q,An,h.has(re)),_e=b.get(ye.planId)??b.get(re);return _e?{...ye,readyStepCount:_e.ready,runningStepCount:_e.running,blockedStepCount:_e.blocked,leasedStepCount:_e.leased,resultText:_e.ready>0||_e.running>0||_e.blocked>0||_e.leased>0?`Ready ${_e.ready} · 运行 ${_e.running} · 阻塞 ${_e.blocked}${_e.leased>0?` · 租约 ${_e.leased}`:""}`:ye.resultText}:ye})},[An,Ci,d,h]),zt=v.useMemo(()=>sn.filter(b=>h.has(b.id)),[sn,h]),Ti=v.useMemo(()=>zt.map(b=>QN(b,An)),[An,zt]),oa=sn,Na=sn.filter(b=>!h.has(b.id)),Ea=Z==="selected"?zt:Z==="pending"?Na:oa,tn=Zt?(r==null?void 0:r.events)??[]:[],fc=v2(tn,pe),qs=tn,Aa=(Zt?(r==null?void 0:r.decisions)??[]:[]).filter(b=>Zf(b.status)),Ls=q||R||ne||U!==null,Zl=v.useMemo(()=>tn.filter(b=>p2(b,de)),[tn,de]),mc=Zl.slice(0,fy),pc=tn.filter(Cd),da=tn.filter(Nd),Mt=tn.filter(Ed),pt=fc[0]??pc[0]??null,Xe=r==null?void 0:r.employee,Me=r==null?void 0:r.workday,Bs=r==null?void 0:r.delivery,Yn=(Zt?(r==null?void 0:r.managed_services)??[]:[]).filter(b=>b.requires_human_action||b.status==="degraded"),Tn=(Zt?(r==null?void 0:r.task_agents)??[]:[]).filter(b=>b.can_retry||b.can_skip||b.can_cancel),ze=Zt?r==null?void 0:r.route_summary:null,Kn=(ze==null?void 0:ze.latest)??null,Et=Zt?r==null?void 0:r.diagnostic_summary:null,Ta=Et?Et.doctor.error+Et.doctor.warn:0,St=Et?Et.audit.error+Et.audit.warn:0,Ra=(Et==null?void 0:Et.latest_issue)??null,Ae=Zt?r==null?void 0:r.daily_report:void 0,ua=Zt?(wc=r==null?void 0:r.run_details)!=null&&wc.length?r.run_details:tn.map(t2):[],Rn=ua.slice(0,TN),Td=Zt?(r==null?void 0:r.execution_summaries)??[]:[],Qn=zt.map(b=>Td.find(Q=>e2(Q,b))??WN(b,tn)),fa=DN(a),Rd=Z==="all"?"全部任务":Z==="pending"?"待选择任务":"今日已选任务",$i=Z==="all"?`总任务 ${oa.length} 项,不代表当天都会执行。`:Z==="pending"?`当前日期 ${fa} 还有 ${Na.length} 项未选择。`:`当前日期 ${fa} 已选择 ${zt.length} 项任务。`,It=(Ae==null?void 0:Ae.status)==="ready"?Ae.totals:null,Vn=(It==null?void 0:It.task_count)??Qn.length,rn=(It==null?void 0:It.execution_count)??Qn.reduce((b,Q)=>b+Q.total_count,0),_c=(It==null?void 0:It.success_count)??Qn.reduce((b,Q)=>b+Q.success_count,0),$d=(It==null?void 0:It.failure_count)??Qn.reduce((b,Q)=>b+Q.failure_count,0),Jl=Ae?[Ae.summary,...Ae.detail_lines??[]].filter(b=>!!(b&&b.trim())):[],Us=(Ae==null?void 0:Ae.status)==="ready"&&Jl.length>0,Fl=(Me==null?void 0:Me.current_status)??(Xe==null?void 0:Xe.current_status)??"working",Dd=(Me==null?void 0:Me.current_status_label)??(Xe==null?void 0:Xe.current_status_label)??(Fl==="resting"?"休息中":"工作中"),Jt=Fl==="resting",Di=(r==null?void 0:r.source)==="demo",zi=Di?"演示兜底":"真实数据",Mi=Di?"de-badge-warning":"de-badge-success",$a=n2(en),hc=a2(en),Is=l2(en),cl=ap(en==null?void 0:en.lastSyncError),gc=(en==null?void 0:en.recentFailures)??[],yc=C2({confirmed:!!(Me!=null&&Me.confirmed),currentEvent:pt,pendingDecisionCount:Aa.length,eventsCount:tn.length}),Hs=j2(),Pl=$N[Hs??yc],zd=Hs||pt||Aa.length>0?Pl.bubble:(Me==null?void 0:Me.bubble_text)??Pl.bubble,Oi=oa.length>0?`已加载 ${oa.length} 项任务,当前选择 ${zt.length} 项;右侧展示真实执行状态、运行明细和日报。`:(Me==null?void 0:Me.summary)??"等待同步当天任务计划。",Xn=(pt==null?void 0:pt.task_title)??(Tn[0]?Tn[0].title:Yn[0]?Yn[0].name:Me!=null&&Me.confirmed?"等待下一条执行事件":"等待确认任务设置"),Gs=pt?`${pt.plan_title}:${Zo(pt)}(${by(pt)})`:Tn[0]?vy(Tn[0]):Yn[0]?Lo(Yn[0]):"任务执行后会显示正在处理的任务、步骤或汇总动作。",Ys=Aa[0]?`等待人工确认:${Aa[0].title}`:Tn[0]?`Task Agent:${vy(Tn[0])}`:Yn[0]?`处理服务状态:${Lo(Yn[0])}`:Me!=null&&Me.confirmed?(Bs==null?void 0:Bs.lines[0])??"继续按计划轮询新工单,并把结果同步到运行明细。":"请先确认今天要执行的任务,确认后数字员工会开始执行。",ol=!!(r&&!(Me!=null&&Me.confirmed));v.useEffect(()=>{if(!(g||!r)&&r.workday.confirmed){Ut(!1);return}},[ra,g,a,r]),v.useEffect(()=>{Xe&&Ca({name:Xe.name||"",company:Xe.company||"",position:Xe.position||Xe.major||"",currentStatus:Xe.current_status||(Me==null?void 0:Me.current_status)||"working"})},[Xe,Me==null?void 0:Me.current_status]),v.useEffect(()=>{dc((Ae==null?void 0:Ae.report_schedule_time)||"18:00")},[Ae==null?void 0:Ae.report_schedule_time]),v.useEffect(()=>{yt(!1)},[a]);const Da=v.useCallback(b=>{!b.selectable||!b.implemented||(_(Q=>{const re=new Set(Q);return re.has(b.id)?re.delete(b.id):re.add(b.id),re}),ca.current=!0,ie(!0),w(null))},[]),Ks=v.useCallback(async()=>{if(h.size===0){N("请至少选择一项今天要执行的任务。");return}if(Jt){N("当前状态为休息中,请切换为工作中后再执行任务。");return}C("confirm_workday"),N(null),w(null);try{const b=await ql({action:"confirm_workday",date:a,duty_ids:Ti});if(!me.current)return;o(b),_(new Set(h)),ca.current=!0,ie(!1),Ut(!1),w("任务设置已确认,数字员工开始按任务执行。")}catch(b){me.current&&N(b instanceof Error?b.message:"确认任务设置失败")}finally{me.current&&C(null)}},[Jt,a,h,Ti]),qi=v.useCallback(async()=>{var b;C("flush_management_sync"),N(null),w(null);try{const Q=(b=window.QimingClawBridge)==null?void 0:b.digital;if(!(Q!=null&&Q.flushSync)){w("当前环境未连接 qimingclaw 同步桥。");return}const re=await Q.flushSync();if(!me.current)return;uc(re);const ye=await Ss(a);if(!me.current)return;o(ye);const _e=re.failed>0?`同步完成,仍有 ${re.failed} 条失败记录。`:re.pending>0?`同步完成,仍有 ${re.pending} 条待同步记录。`:"管理端同步完成。";w(_e)}catch(Q){me.current&&N(Q instanceof Error?Q.message:"同步管理端失败")}finally{me.current&&C(null)}},[a]),vc=v.useCallback(async()=>{C("pull_plan_step_dispatch_policy"),N(null),w(null);try{const b=await Iv();if(!me.current||(await Fe(),!me.current))return;const Q=b.policy;w(b.ok?`PlanStep 派发策略已拉取:${Q.enabled?"启用":"停用"},每轮最多 ${Q.max_per_sweep} 个。`:`PlanStep 派发策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取PlanStep派发策略失败")}finally{me.current&&C(null)}},[Fe]),Wl=v.useCallback(async()=>{C("pull_risk_approval_policy"),N(null),w(null);try{const b=await Gv();if(!me.current||(await Fe(),!me.current))return;w(b.ok?"风险审批策略已拉取。":`风险审批策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取风险审批策略失败")}finally{me.current&&C(null)}},[Fe]),Zn=v.useCallback(async()=>{C("pull_route_decision_policy"),N(null),w(null);try{const b=await Qv();if(!me.current||(await Fe(),!me.current))return;const Q=b.policy;w(b.ok?`入口路由策略已拉取:阻断 ${Q.blocked_intents.length} 类,审批 ${Q.approval_required_intents.length} 类。`:`入口路由策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取入口路由策略失败")}finally{me.current&&C(null)}},[Fe]),Qs=v.useCallback(async()=>{C("pull_approval_updates"),N(null),w(null);try{const b=await kN();if(!me.current||(await Fe(),!me.current))return;w(b.ok?`审批更新已拉取:应用 ${b.applied??0} 条,忽略 ${b.ignored??0} 条,冲突 ${b.conflicted??0} 项。`:`审批更新拉取失败:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取审批更新失败")}finally{me.current&&C(null)}},[Fe]),dl=v.useCallback(async(b,Q)=>{const re=`route-intervention:${b.route_decision_id}:${Q}`;C(re),N(null),w(null);try{const ye=await qC(b.route_decision_id,{approval_id:b.approval_id,decision:Q,actor:"digital_employee_operator"});if(!me.current||(await Fe(),!me.current))return;w(ye.message||(Q==="approved"?"入口路由干预已通过。":"入口路由干预已拒绝。"))}catch(ye){me.current&&N(ye instanceof Error?ye.message:"处理入口路由干预失败")}finally{me.current&&C(null)}},[Fe]),ma=v.useCallback(async b=>{const Q=gy(b,en);try{await navigator.clipboard.writeText(Q),N(null),w("同步失败诊断已复制。")}catch(re){w(null),N(re instanceof Error?re.message:"复制同步失败诊断失败")}},[en]),Vs=v.useCallback(b=>{yy(o2(b),gy(b,en)),N(null),w("同步失败诊断已导出。")},[en]),Li=v.useCallback(()=>{_(new Set),ca.current=!0,ie(!0),w("已一键取消当前选择,重新选择后点击任务执行生效。"),N(null)},[]),xc=v.useCallback(async()=>{C("update_profile"),N(null),w(null);try{const b=await ql({action:"update_profile",date:a,name:En.name,company:En.company,position:En.position,current_status:En.currentStatus});if(!me.current)return;o(b),V(!1),w("数字员工特性设置已保存。")}catch(b){me.current&&N(b instanceof Error?b.message:"保存特性设置失败")}finally{me.current&&C(null)}},[En,a]),Bi=v.useCallback(async()=>{C("update_report_schedule"),N(null),w(null);try{const b=await ql({action:"update_report_schedule",date:a,report_schedule_time:rl});if(!me.current)return;o(b),w(`日报生成时间已设置为 ${rl}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"设置日报时间失败")}finally{me.current&&C(null)}},[rl,a]),Ui=v.useCallback(async()=>{var b,Q;C("generate_daily_report"),N(null),w(null);try{const re=await ql({action:"generate_daily_report",date:a,duty_ids:Ti,report_schedule_time:rl});if(!me.current)return;const ye=((b=re.daily_report)==null?void 0:b.status)==="ready"?re:await Ss(a);if(!me.current)return;o(ye),w("日报已生成,可下载本地文本。"),((Q=ye.daily_report)==null?void 0:Q.status)==="ready"&&yt(!0)}catch(re){me.current&&N(re instanceof Error?re.message:"生成日报失败")}finally{me.current&&C(null)}},[rl,a,h,Ti]),Xs=v.useCallback(()=>{!Ae||Ae.status!=="ready"||(yy(d2(a),u2(fa,Ae,Qn,Rn),"text/plain;charset=utf-8"),w("日报文本已下载。"))},[Ae,a,fa,Qn,Rn]),Ft=v.useCallback(async(b,Q)=>{var re;C(`${b.id}:${Q}`),N(null),w(null);try{const ye=await ql({action:"decide_approval",date:a,decision_id:b.id,decision:Q});if(!me.current)return;const _e=((re=b.actions.find(Qe=>Qe.id===Q))==null?void 0:re.label)??Q;o(ye),w(`已记录“${_e}”处理结果,并写入 qimingclaw 本地运行状态。`)}catch(ye){me.current&&N(ye instanceof Error?ye.message:"处理决策失败")}finally{me.current&&C(null)}},[a]),Jn=v.useCallback((b,Q)=>{A(re=>({...re,[b]:{...re[b]??vs,...Q}}))},[]),pa=v.useCallback(async(b,Q)=>{const re=k[b.id]??vs,ye=Bt(re.comment),_e=Bt(re.delegateTo),Qe=Bt(re.dueAt);if(Q==="comment"&&!ye){N("请先填写审批评论。");return}if(Q==="delegate"&&!_e){N("请先填写转交对象。");return}const _t=`approval-action:${b.id}:${Q}`;C(_t),N(null),w(null);try{const at={actor:"digital_employee_operator",source:"digital-command-deck",comment:Q==="comment"?ye:void 0,delegate_to:Q==="delegate"?_e:void 0,delegate_label:Q==="delegate"?_e:void 0,due_at:Q==="mark_timeout"?Qe||new Date().toISOString():void 0,reason:Q==="mark_risk"||Q==="clear_risk"||Q==="mark_timeout"?ye||Xf(Q):void 0},ke=await bN(b.id,Q,at);if(!me.current)return;if(!(ke!=null&&ke.ok))throw new Error((ke==null?void 0:ke.error)||"记录审批动作失败");const dt=await Ss(a);if(!me.current)return;o(dt),A(et=>{var cn,Fn;return{...et,[b.id]:{...et[b.id]??vs,comment:Q==="comment"?"":((cn=et[b.id])==null?void 0:cn.comment)??"",delegateTo:Q==="delegate"?"":((Fn=et[b.id])==null?void 0:Fn.delegateTo)??""}}}),w(`已记录审批动作:${Xf(Q)}。`)}catch(at){me.current&&N(at instanceof Error?at.message:"记录审批动作失败")}finally{me.current&&C(null)}},[k,a]),ei=v.useCallback(async(b,Q)=>{var _e;const re=`approval-conflict:${b.id}:${Q}`,ye=k[b.id]??vs;C(re),N(null),w(null);try{const Qe=await vN(b.id,{resolution:Q,actor:"digital_employee_operator",comment:Bt(ye.comment)||null});if(!me.current)return;if(!(Qe!=null&&Qe.ok))throw new Error((Qe==null?void 0:Qe.error)||((_e=Qe==null?void 0:Qe.reason_codes)==null?void 0:_e.join(", "))||"冲突裁决失败");const _t=await Ss(a);if(!me.current)return;o(_t),A(at=>({...at,[b.id]:{...at[b.id]??vs,comment:""}})),w("冲突裁决已记录。")}catch(Qe){me.current&&N(Qe instanceof Error?Qe.message:"冲突裁决失败")}finally{me.current&&C(null)}},[k,a]),Zs=v.useCallback(async(b,Q)=>{const re=`task-agent:${b.task_id}:${Q}`;C(re),N(null),w(null);try{const ye=await Xo({command_kind:Q,context_refs:{plan_id:b.plan_id,task_id:b.task_id,run_id:b.latest_run_id,step_id:b.step_id,task_agent_id:b.agent_id},payload:{source:"digital-home-task-agent",task_agent_id:b.agent_id,task_id:b.task_id,plan_id:b.plan_id,step_id:b.step_id,latest_run_id:b.latest_run_id,title:b.title,requested_action:Q,previous_state:b.execution_state,next_action:b.next_action},correlation_id:`digital-home-task-agent-${b.task_id}-${Q}-${Date.now()}`});if(!ye.accepted)throw new Error(ye.message||`Task Agent 命令未被接受:${ye.command_id||Q}`);w(`Task Agent 已${g2(Q)}:${b.title}。`),await Fe()}catch(ye){me.current&&N(ye instanceof Error?ye.message:"Task Agent 控制失败")}finally{me.current&&C(null)}},[Fe]),za=v.useCallback(async(b,Q,re={})=>{const ye=bm(b),_e=Q==="retry_task"||Q==="skip_task"?ye:null,Qe=(_e==null?void 0:_e.step_id)??b.step_id,_t=(_e==null?void 0:_e.task_id)??b.task_id??null,at=(_e==null?void 0:_e.latest_run_id)??b.latest_run_id??null;if(!_t){N("当前阻塞步骤缺少可治理任务,无法发送处理命令");return}const ke=`blocked-plan-step:${b.step_id}:${Q}`;C(ke),N(null),w(null);try{const dt=await Xo({command_kind:Q,context_refs:{plan_id:b.plan_id,task_id:_t,run_id:at,step_id:Qe,blocked_step_id:b.step_id},payload:{source:"digital-home-blocked-plan-step",plan_id:b.plan_id,task_id:_t,run_id:at,step_id:Qe,blocked_step_id:b.step_id,blocked_step_title:b.title,blocked_dependency_step_id:(_e==null?void 0:_e.step_id)??null,requested_action:Q,input:re.input},correlation_id:`digital-home-blocked-step-${b.step_id}-${Q}-${Date.now()}`});if(!dt.accepted)throw new Error(dt.message||`阻塞步骤处理未被接受:${dt.command_id||Q}`);w(`阻塞步骤已${y2(Q)}:${b.title}。`),il(null),sl(""),await Fe()}catch(dt){me.current&&N(dt instanceof Error?dt.message:"阻塞步骤处理失败")}finally{me.current&&C(null)}},[Fe]),Js=v.useCallback(async()=>{const b=Ai,Q=Vl.trim();!b||!Q||await za(b.step,"provide_task_input",{input:Q})},[Vl,Ai,za]),ti=v.useCallback(async b=>{const Q=`managed-service:${b.service_id}:restart`;C(Q),N(null),w(null);try{const re=await oN(b.service_id,{reason:"digital_home_managed_service_issue",actor:"digital_employee_ui"});if(!re.ok)throw new Error(re.error||re.message||`${b.name} 重启失败`);w(`${b.name} 已提交安全重启。`),await Fe()}catch(re){me.current&&N(re instanceof Error?re.message:`${b.name} 重启失败`)}finally{me.current&&C(null)}},[Fe]),Ma=v.useCallback(b=>{e({tab:"missions",date:a,missionId:b.conversationId||b.id})},[e,a]),kc=v.useCallback(async b=>{const Q=py(ae),re=Date.now(),ye=`digital-home-${b.planId}-${ae.replace(":","")}`;C(`schedule:${b.id}`),N(null),w(null);try{const _e=await Xo({command_kind:"create_schedule",context_refs:{plan_id:b.planId,schedule_id:ye},payload:{source:"digital-home",plan_id:b.planId,name:`定时执行:${b.title}`,description:`按首页任务管理定时任务:${b.title}`,prompt:`请按计划执行:${b.title}。${b.summary}`,cron_expr:Q,schedule:Q},correlation_id:`digital-home-create-schedule-${b.planId}-${re}`,idempotency_key:`digital-home-create-schedule-${b.planId}-${ae}-${re}`});if(!_e.accepted)throw new Error(_e.message||`调度命令未被接受:${_e.command_id||"create_schedule"}`);ue(null),w(`已提交定时:${b.title},${ae} 按 cron 计划执行。`),await Fe()}catch(_e){me.current&&N(_e instanceof Error?_e.message:"定时执行失败")}finally{me.current&&C(null)}},[Fe,ae]),Md=v.useCallback(async b=>{var Q;if(!Hr(b)){N(Gr(b)),w(null);return}C(`execute:${b.id}`),N(null),w(null);try{const re=await dN(b.planId);if(re.ok!==!0)throw new Error(re.error||"执行接口未接受请求");const ye=((Q=re.dispatched_tasks)==null?void 0:Q.length)??0,_e=await dy(b.planId),Qe=_e.dispatched??0,_t=_e.skipped??0,at=_e.failed??0;Ee(null),w(Qe>0||_t>0||at>0?`已触发执行:${b.title},新建 ${ye} 个步骤,推进 ${Qe} 个${_t>0?`,跳过 ${_t} 个`:""}${at>0?`,失败 ${at} 个`:""}。`:`已触发执行:${b.title},已派发 ${ye} 个步骤。`),await Fe()}catch(re){me.current&&N(re instanceof Error?re.message:"执行失败")}finally{me.current&&C(null)}},[Fe]),Fs=v.useCallback(async b=>{var re,ye;if(!Hr(b)){N(Gr(b)),w(null);return}const Q=`orchestrate:${b.id}`;C(Q),N(null),w(null);try{const _e=await dy(b.planId);if(_e.ok===!1)throw new Error(((ye=(re=_e.errors)==null?void 0:re[0])==null?void 0:ye.error)||"计划推进未被接受");w(`已推进:${b.title},派发 ${_e.dispatched??0} 个,跳过 ${_e.skipped??0} 个${(_e.failed??0)>0?`,失败 ${_e.failed}`:""}。`),await Fe()}catch(_e){me.current&&N(_e instanceof Error?_e.message:"计划推进失败")}finally{me.current&&C(null)}},[Fe]),Ps=v.useCallback(()=>{Ut(!1),Wt(a),E2(a)},[a]),Ii=v.useCallback((b,Q)=>{const re=h.has(b.id),ye=Gr(b);return s.jsxs("div",{className:`${IN(b,re)} ${Q==="guide"?"de-duty-card--guide":""}`,title:b.summary,children:[s.jsxs("label",{className:"de-task-manager-duty-check",children:[s.jsx("input",{type:"checkbox",checked:re,disabled:!b.selectable||!b.implemented,onChange:()=>Da(b)}),s.jsx("span",{children:re?"已选":b.implemented?"未选":"待扩展"})]}),s.jsxs("div",{className:"de-template-card-main",children:[s.jsxs("div",{className:"de-template-card-head",children:[s.jsx("span",{className:"de-template-card-name",children:b.title}),s.jsx("span",{className:`de-badge ${xs(b.statusTone)}`,children:b.implemented?b.statusLabel:"待扩展"})]}),s.jsx("p",{className:"de-template-card-desc",children:b.summary}),s.jsxs("div",{className:"de-template-card-meta",children:[s.jsx("span",{children:b.scheduleText}),s.jsx("span",{children:b.resultText})]}),s.jsxs("div",{className:"de-duty-card-foot",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented,onClick:()=>Ma(b),children:"进入处理"}),s.jsxs("div",{className:"de-duty-card-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||b.readyStepCount===0||!!S,title:b.readyStepCount>0?"推进此计划的 Ready 步骤":"暂无可推进 Ready 步骤",onClick:()=>{Fs(b)},children:[s.jsx(Hf,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===`orchestrate:${b.id}`?"推进中":JN(b)})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||S===`schedule:${b.id}`,onClick:()=>ue(b),children:[s.jsx(Jg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"定时"})]}),s.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||S===`execute:${b.id}`,title:ye||"立即执行此任务",onClick:()=>Ee(b),children:[s.jsx(Zg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"执行"})]})]}),!b.implemented&&s.jsx("span",{className:"de-duty-selected-mark",children:"待扩展"})]})]})]},`${Q}-${b.id}`)},[S,Fs,Ma,h,Da]),Od=v.useCallback(b=>{le(b),M(!0)},[]),Ws=v.useCallback(()=>{le(null),M(!1)},[]),Sc=v.useCallback(()=>{B(!1),M(!1)},[]),ul=v.useCallback(()=>{B(!0),M(!0)},[]),qd=v.useCallback(b=>{xy(b.target)||ul()},[ul]),jc=v.useCallback(b=>{b.key!=="Enter"&&b.key!==" "||xy(b.target)||(b.preventDefault(),ul())},[ul]),Ld=v.useCallback(b=>{le(null),B(!1),M(!1),e({tab:"missions",date:a,missionId:b.conversation_id||b.id})},[e,a]);return s.jsxs("div",{className:"de-dashboard de-dashboard--compact",style:{position:"relative",height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[s.jsx("div",{className:"de-connection-layer","aria-hidden":"true",children:s.jsxs("svg",{className:"de-connection-svg",viewBox:"0 0 1200 800",preserveAspectRatio:"none",children:[s.jsxs("defs",{children:[s.jsxs("linearGradient",{id:"connGrad1",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[s.jsx("stop",{offset:"0%",stopColor:"rgba(79,172,254,0.25)"}),s.jsx("stop",{offset:"100%",stopColor:"rgba(0,242,254,0.1)"})]}),s.jsx("filter",{id:"connGlow",children:s.jsx("feGaussianBlur",{stdDeviation:"3"})})]}),s.jsx("path",{d:"M 80 180 Q 420 400, 580 350",stroke:"url(#connGrad1)",strokeWidth:"1.5",fill:"none",filter:"url(#connGlow)"}),s.jsx("path",{d:"M 120 620 Q 380 400, 560 380",stroke:"url(#connGrad1)",strokeWidth:"1.2",fill:"none",filter:"url(#connGlow)"}),s.jsx("path",{d:"M 640 360 Q 780 200, 1100 160",stroke:"url(#connGrad1)",strokeWidth:"1.3",fill:"none",filter:"url(#connGlow)"})]})}),s.jsxs("div",{className:"de-dashboard-content",children:[s.jsxs("div",{className:"de-dashboard-left",children:[s.jsxs("div",{className:"de-card de-person-card de-person-card--compact",children:[s.jsxs("div",{className:"de-card-title-bar",children:[s.jsx("span",{className:"de-card-title-bar-text",children:"数字员工"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>V(!0),children:"特性设置"})]}),s.jsx("div",{className:"de-card-body",children:s.jsxs("div",{className:"de-info-grid",children:[s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"姓名"}),s.jsx("span",{children:(Xe==null?void 0:Xe.name)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"单位"}),s.jsx("span",{children:(Xe==null?void 0:Xe.company)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"岗位"}),s.jsx("span",{children:(Xe==null?void 0:Xe.position)??(Xe==null?void 0:Xe.major)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"当前状态"}),s.jsx("span",{className:Jt?"de-status-resting":"de-status-working",children:Dd})]})]})})]}),s.jsxs("div",{className:"de-card de-template-manager-card",children:[s.jsx("div",{className:"de-card-title-bar",children:s.jsx("span",{className:"de-card-title-bar-text",children:"任务设置"})}),s.jsxs("div",{className:"de-card-body de-template-manager-body",children:[s.jsxs("div",{className:"de-workday-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"日期"}),s.jsx("input",{type:"date",value:a,onChange:b=>{ca.current=!1,ie(!1),w(null),l(b.target.value||ym())}})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g,onClick:()=>J(!0),children:"任务设置"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="flush_management_sync",onClick:qi,title:"立即同步数字员工本地状态到管理端",children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="flush_management_sync"?"同步中...":"同步管理端"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_plan_step_dispatch_policy",onClick:vc,title:"从管理端拉取 PlanStep 派发策略",children:[s.jsx(Pr,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_plan_step_dispatch_policy"?"拉取中...":"拉取策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_risk_approval_policy",onClick:Wl,title:"从管理端拉取风险审批策略",children:[s.jsx(Fg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_risk_approval_policy"?"拉取中...":"风险策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_route_decision_policy",onClick:Zn,title:"从管理端拉取入口路由策略",children:[s.jsx(Qo,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_route_decision_policy"?"拉取中...":"路由策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_approval_updates",onClick:Qs,title:"从管理端拉取审批更新",children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_approval_updates"?"拉取中...":"审批更新"})]})]}),s.jsxs("div",{className:`de-management-sync-strip de-management-sync-strip--${$a}`,title:cl||Is,children:[s.jsx("span",{className:`de-badge ${xs($a)}`,children:hc}),s.jsx("span",{children:Is})]}),gc.length>0&&s.jsx("div",{className:"de-management-sync-failures","aria-label":"同步失败明细",children:gc.map(b=>s.jsxs("button",{type:"button",className:"de-management-sync-failure",title:b.error||b.id,onClick:()=>Ke(b),children:[s.jsx("span",{children:hy(b)}),s.jsx("strong",{children:Xr(b.entityType)}),s.jsx("em",{children:b.id}),s.jsx("small",{children:s2(b)})]},b.id))}),(z||D||O||(r==null?void 0:r.demo_reason))&&s.jsx("div",{className:`de-schedule-result ${D?"de-schedule-result--error":"de-schedule-result--success"}`,style:{marginBottom:10},children:D||z||O||(r==null?void 0:r.demo_reason)}),(Ei.length>0||Os)&&s.jsxs("div",{className:"de-management-sync-failures","aria-label":"入口路由干预",style:{marginBottom:10},children:[Os&&s.jsx("p",{className:"de-empty-text",children:Os}),Ei.slice(0,4).map(b=>{const Q=b.intervention_status,re=!b.resolved_at&&["pending","blocked","approved"].includes(Q),ye=`route-intervention:${b.route_decision_id}:approved`,_e=`route-intervention:${b.route_decision_id}:rejected`;return s.jsxs("div",{className:"de-management-sync-failure",title:b.blocked_reason||b.route_decision_id,children:[s.jsx("span",{children:b.entrypoint||"route"}),s.jsxs("strong",{children:[b.route_kind," / ",b.intent_kind]}),s.jsx("em",{children:Q}),s.jsx("small",{children:b.blocked_reason||b.matched_intent||b.approval_id||b.route_decision_id}),re&&s.jsxs("div",{className:"de-task-agent-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===ye,onClick:()=>{dl(b,"approved")},children:Q==="approved"?"恢复":"通过"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===_e,onClick:()=>{dl(b,"rejected")},children:"拒绝"})]})]},b.route_decision_id)})]}),Yn.length>0&&s.jsx("div",{className:"de-management-sync-failures","aria-label":"服务状态处理",style:{marginBottom:10},children:Yn.map(b=>{const Q=`managed-service:${b.service_id}:restart`,re=h2(b);return s.jsxs("div",{className:"de-management-sync-failure",title:b.error||Lo(b),children:[s.jsx("span",{children:b.kind}),s.jsx("strong",{children:b.name}),s.jsx("em",{children:b.status_label}),s.jsx("small",{children:Lo(b)}),re&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===Q,onClick:ye=>{ye.stopPropagation(),ti(b)},title:`安全重启 ${b.name}`,children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===Q?"重启中...":"重启"})]})]},b.service_id)})}),I&&!z&&!D&&s.jsx("div",{className:"de-schedule-result de-schedule-result--success",style:{marginBottom:10},children:"当前选择尚未确认,自动刷新不会覆盖你的勾选。"}),s.jsxs("div",{className:"de-template-overview",children:[s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--total ${Z==="all"?"active":""}`,onClick:()=>K("all"),children:[s.jsx("span",{className:"de-template-overview-label",children:"总任务"}),s.jsx("span",{className:"de-template-overview-value",children:oa.length})]}),s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--scheduled ${Z==="selected"?"active":""}`,onClick:()=>K("selected"),children:[s.jsx("span",{className:"de-template-overview-label",children:"已选择"}),s.jsx("span",{className:"de-template-overview-value",children:zt.length})]}),s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--runnable ${Z==="pending"?"active":""}`,onClick:()=>K("pending"),children:[s.jsx("span",{className:"de-template-overview-label",children:"待选择"}),s.jsx("span",{className:"de-template-overview-value",children:Na.length})]})]}),s.jsxs("div",{className:"de-task-date-context",children:[s.jsxs("span",{children:["当前日期 ",fa]}),s.jsx("em",{children:$i}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Li,disabled:zt.length===0,children:"一键取消"})]}),s.jsxs("div",{className:"de-task-manager-preview de-task-manager-preview-scroll de-template-task-list",children:[s.jsxs("div",{className:"de-task-manager-preview-head",children:[s.jsx("span",{children:fa}),s.jsxs("strong",{children:[Rd," ",Ea.length]})]}),g?s.jsx("div",{className:"de-loading-skeleton",style:{height:96}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会再展示硬编码任务。"}):Ea.length===0?s.jsx("p",{className:"de-empty-text",children:"当前筛选下暂无任务,点击总任务查看全部内容。"}):Ea.map(b=>s.jsxs("div",{className:`de-task-manager-preview-row ${h.has(b.id)?"is-selected":""}`,title:b.summary,children:[s.jsxs("button",{type:"button",className:"de-template-task-main",onClick:()=>Ma(b),children:[s.jsx("strong",{children:b.title}),s.jsx("span",{children:b.resultText})]}),s.jsxs("div",{className:"de-template-item-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||b.readyStepCount===0||!!S,title:b.readyStepCount>0?"推进此计划的 Ready 步骤":"暂无可推进 Ready 步骤",onClick:()=>{Fs(b)},children:[s.jsx(Hf,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===`orchestrate:${b.id}`?"推进中":"推进"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||S===`schedule:${b.id}`,onClick:()=>ue(b),children:[s.jsx(Jg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"定时"})]}),s.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||S===`execute:${b.id}`,title:Gr(b)||"立即执行此任务",onClick:()=>Ee(b),children:[s.jsx(Zg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"执行"})]})]})]},b.id))]})]})]})]}),s.jsxs("div",{className:"de-dashboard-center",style:{justifyContent:"center",padding:"0 0 16px",overflow:"visible"},children:[s.jsx("div",{className:"de-avatar-wrapper",style:{minHeight:470,maxWidth:560,transform:"translateY(-6px)",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:s.jsx(jN,{avatarSrc:Pl.src,altText:`数字员工-${Pl.label}`,statusLabel:Pl.label})}),s.jsxs("div",{className:"de-speech-bubble de-speech-bubble--employee",style:{top:"38%",left:"29%",right:"auto",transform:"translateX(-50%)",width:268,padding:"10px 12px",zIndex:16},children:[s.jsx("span",{className:"de-speech-label",children:"数字员工播报"}),s.jsx("p",{className:"de-speech-text",children:zd}),s.jsxs("button",{type:"button",className:"de-speech-workflow de-execution-detail-trigger",onClick:ul,title:"打开运行明细",children:[s.jsx("span",{children:"当前动作"}),s.jsx("strong",{children:Xn}),s.jsx("small",{children:Gs}),s.jsx("span",{children:"下一步"}),s.jsx("small",{children:Ys})]})]})]}),s.jsx("div",{className:"de-dashboard-right",children:s.jsxs("div",{className:"de-right-panels",children:[s.jsxs("div",{className:"de-workbench de-workday-execution de-workday-execution--clickable",role:"button",tabIndex:0,"aria-label":"打开运行明细",title:"打开运行明细",onClick:qd,onKeyDown:jc,children:[s.jsxs("div",{className:"de-card-title-bar de-workbench-head de-workbench-head--bar",children:[s.jsx("div",{className:"de-workbench-title-row",children:s.jsx("h3",{children:"今日执行"})}),s.jsx("span",{className:`de-badge ${Mi}`,children:zi})]}),s.jsxs("div",{className:"de-workday-execution-body","aria-live":"polite",children:[s.jsxs("div",{className:"de-execution-status-strip",children:[s.jsxs("span",{children:[s.jsx("em",{children:"已选任务"}),s.jsx("strong",{children:zt.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"运行记录"}),s.jsx("strong",{children:qs.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"已完成"}),s.jsx("strong",{children:da.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"异常"}),s.jsx("strong",{children:Mt.length})]})]}),(Et||ze&&ze.total>0)&&s.jsxs("div",{className:"de-observation-strip-stack",children:[ze&&ze.total>0&&s.jsxs("div",{className:"de-route-summary-strip",children:[s.jsxs("span",{children:[s.jsx("em",{children:"入口路由"}),s.jsx("strong",{children:ze.total})]}),s.jsxs("span",{children:[s.jsx("em",{children:"已映射"}),s.jsx("strong",{children:ze.mapped_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"治理审计"}),s.jsx("strong",{children:ze.governance_mapped_count??ze.mapped_count})]}),(ze.governance_blocked_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"治理拦截"}),s.jsx("strong",{children:ze.governance_blocked_count})]}),s.jsxs("span",{className:ze.attention_count>0?"is-warning":"",children:[s.jsx("em",{children:"需关注"}),s.jsx("strong",{children:ze.attention_count})]}),(ze.blocked_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"阻断"}),s.jsx("strong",{children:ze.blocked_count})]}),(ze.approval_required_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"待审"}),s.jsx("strong",{children:ze.approval_required_count})]}),(ze.pending_intervention_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"待干预"}),s.jsx("strong",{children:ze.pending_intervention_count})]}),(ze.restored_count??0)>0&&s.jsxs("span",{children:[s.jsx("em",{children:"已恢复"}),s.jsx("strong",{children:ze.restored_count})]}),s.jsxs("small",{children:[Kn?`${Kn.route_kind} / ${Kn.intent_kind} · ${Kn.status_label}`:"暂无路由决策",ze.policy_source?` · 策略${ze.policy_source==="remote"?"远端":"本地"}`:"",` · 治理审计已映射 ${ze.governance_mapped_count??ze.mapped_count} 项`,(ze.governance_blocked_count??0)>0?` · 拦截/失败 ${ze.governance_blocked_count} 项`:"",ze.latest_intervention_status?` · 干预${ze.latest_intervention_status}`:"",ze.policy_last_pull_error?" · 拉取失败":""]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"interventions",interventionKind:"route_intervention"}),children:"打开介入台"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"policy-center"}),children:"打开策略中心"})]}),Et&&s.jsxs("div",{className:"de-diagnostic-summary-strip",children:[s.jsxs("span",{className:Ta>0?"is-warning":"",children:[s.jsx("em",{children:"诊断异常"}),s.jsx("strong",{children:Ta})]}),s.jsxs("span",{className:St>0?"is-warning":"",children:[s.jsx("em",{children:"审计风险"}),s.jsx("strong",{children:St})]}),s.jsxs("span",{children:[s.jsx("em",{children:"估算请求"}),s.jsx("strong",{children:Et.cost.request_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"Token"}),s.jsx("strong",{children:zN(Et.cost.total_tokens)})]}),s.jsxs("span",{children:[s.jsx("em",{children:"估算成本"}),s.jsx("strong",{children:MN(Et.cost.estimated_cost_usd)})]}),s.jsx("small",{children:Ra?`${Ra.category} · ${Ra.message}`:"诊断、审计和成本投影正常"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"ops-workbench",opsKind:(Ra==null?void 0:Ra.source)==="audit"?"audit":"diagnostic"}),children:"打开处置台"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"scheduler-workbench"}),children:"打开调度运营"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"notification-workbench",notificationKind:"all"}),children:"打开通知运营"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"skill-audit"}),children:"打开技能审计"})]})]}),s.jsx("div",{className:"de-task-summary-scroll",children:s.jsx("div",{className:"de-task-summary-grid","aria-label":"任务执行汇总",children:Qn.length===0?s.jsx("p",{className:"de-empty-text",children:"左侧选择任务后,这里会按任务生成执行次数和成功情况。"}):Qn.map(b=>s.jsxs("button",{type:"button",className:`de-task-summary-card de-live-feed-row--${b.latest_status_tone||"info"}`,onClick:()=>Ma(zt.find(Q=>Q.id===b.id)??zt[0]),title:[b.description,b.ai_summary||b.business_summary].filter(Boolean).join(` -`),children:[s.jsx("span",{className:"de-task-summary-title",children:b.title}),s.jsx("span",{className:`de-badge ${xs(b.latest_status_tone)}`,children:b.latest_status_label}),s.jsxs("div",{className:"de-task-summary-counts",children:[s.jsxs("span",{children:[s.jsx("em",{children:"执行"}),s.jsx("strong",{children:b.total_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"成功"}),s.jsx("strong",{children:b.success_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"失败"}),s.jsx("strong",{children:b.failure_count})]})]})]},b.id))})}),Tn.length>0&&s.jsx("div",{className:"de-task-agent-control-strip","aria-label":"Task Agent 控制台",children:Tn.slice(0,2).map(b=>{const Q=S===`task-agent:${b.task_id}:retry_task`,re=S===`task-agent:${b.task_id}:skip_task`,ye=S===`task-agent:${b.task_id}:cancel_task`;return s.jsxs("div",{className:`de-task-agent-control de-live-feed-row--${b.status_tone||"info"}`,children:[s.jsxs("div",{className:"de-task-agent-control-main",children:[s.jsx("span",{children:"Task Agent"}),s.jsx("strong",{children:b.title}),s.jsxs("small",{children:[b.status_label," · ",b.next_action]})]}),s.jsxs("div",{className:"de-task-agent-control-actions",children:[b.can_retry&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!!S,title:"记录重试任务命令",onClick:()=>{Zs(b,"retry_task")},children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:Q?"重试中":"重试"})]}),b.can_skip&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!!S,title:"记录跳过任务命令",onClick:()=>{Zs(b,"skip_task")},children:[s.jsx(Pg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:re?"跳过中":"跳过"})]}),b.can_cancel&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-task-agent-cancel-btn",disabled:!!S,title:"记录取消任务命令",onClick:()=>{Zs(b,"cancel_task")},children:[s.jsx(Wg,{size:12,"aria-hidden":"true"}),s.jsx("span",{children:ye?"取消中":"取消"})]})]})]},b.agent_id)})}),(Dt.length>0||Ql)&&s.jsxs("div",{className:"de-task-agent-control-strip de-blocked-step-control-strip","aria-label":"PlanStep 阻塞处理",children:[Ql&&s.jsx("p",{className:"de-empty-text",children:Ql}),Dt.slice(0,3).map(b=>{const Q=bm(b),re=S===`blocked-plan-step:${b.step_id}:retry_task`,ye=S===`blocked-plan-step:${b.step_id}:skip_task`,_e=S===`blocked-plan-step:${b.step_id}:cancel_task`,Qe=S===`blocked-plan-step:${b.step_id}:provide_task_input`,_t=!!S||!(Q!=null&&Q.task_id),at=!!S||!b.task_id;return s.jsxs("div",{className:"de-task-agent-control de-blocked-step-control de-live-feed-row--danger",children:[s.jsxs("div",{className:"de-task-agent-control-main",children:[s.jsx("span",{children:"Blocked PlanStep"}),s.jsx("strong",{children:b.title}),s.jsx("small",{children:b2(b)})]}),s.jsxs("div",{className:"de-task-agent-control-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_t,title:Q!=null&&Q.task_id?"重试首个阻塞前置任务":"缺少可重试的前置任务",onClick:()=>{za(b,"retry_task")},children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:re?"重试中":"重试前置"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_t,title:Q!=null&&Q.task_id?"跳过首个阻塞前置任务":"缺少可跳过的前置任务",onClick:()=>{za(b,"skip_task")},children:[s.jsx(Pg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:ye?"跳过中":"跳过前置"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:at,title:b.task_id?"补充当前阻塞步骤所需输入":"当前步骤缺少可补充输入的任务",onClick:()=>{il({step:b,dependency:null}),sl("")},children:[s.jsx(Qo,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:Qe?"提交中":"补充输入"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-task-agent-cancel-btn",disabled:at,title:b.task_id?"取消当前阻塞步骤":"当前步骤缺少可取消的任务",onClick:()=>{za(b,"cancel_task")},children:[s.jsx(Wg,{size:12,"aria-hidden":"true"}),s.jsx("span",{children:_e?"取消中":"取消此步骤"})]})]})]},b.step_id)})]}),s.jsxs("div",{className:"de-stage-feed-tools",children:[s.jsxs("span",{children:["展示 ",qs.length," / 共 ",tn.length," 条",Ls?" · 已暂停":" · 自动滚动"]}),s.jsxs("div",{children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>ce(b=>!b),children:q?"继续滚动":"暂停滚动"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:ul,children:"查看全部记录"})]})]}),s.jsxs("div",{className:"de-run-detail-panel",children:[s.jsxs("div",{className:"de-run-detail-head",children:[s.jsx("span",{children:"运行明细"}),s.jsxs("small",{children:["展示 ",Rn.length," / 共 ",ua.length," 条"]})]}),s.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"运行明细",children:[s.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[s.jsx("span",{children:"时间"}),s.jsx("span",{children:"任务名称"}),s.jsx("span",{children:"步骤名称"}),s.jsx("span",{children:"执行状态"}),s.jsx("span",{children:"结果"})]}),Rn.length===0?s.jsx("p",{className:"de-empty-text",children:"任务执行后,这里会滚动显示每个步骤的时间、任务、步骤和结果。"}):Rn.map(b=>s.jsxs("button",{type:"button",className:`de-run-detail-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{const Q=tn.find(re=>re.id===b.id);Q&&Od(Q)},title:b.business_detail,children:[s.jsx("span",{children:m2(b)}),s.jsx("strong",{children:b.task_name}),s.jsx("span",{children:b.step_name||b.operation_name||"执行步骤"}),s.jsx("span",{children:s.jsx("i",{className:`de-badge ${xs(b.status_tone)}`,children:b.status_label})}),s.jsx("em",{children:b.business_detail})]},b.id))]})]})]})]}),s.jsxs("div",{className:"de-report-summary",children:[s.jsxs("div",{className:"de-card-title-bar de-report-summary-head de-report-summary-head--bar",children:[s.jsx("div",{className:"de-report-summary-title-row",children:s.jsx("h3",{children:"日报生成"})}),s.jsx("span",{className:`de-report-badge ${(Ae==null?void 0:Ae.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}`,children:(Ae==null?void 0:Ae.status)==="ready"?"已生成":"待生成"})]}),s.jsxs("div",{className:"de-report-summary-body",children:[s.jsxs("div",{className:"de-report-schedule-row",children:[s.jsxs("label",{children:[s.jsx("span",{children:"生成时间"}),s.jsx("input",{type:"time",value:rl,onChange:b=>dc(b.target.value||"18:00")})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S==="update_report_schedule",onClick:()=>{Bi()},children:"设置时间"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="generate_daily_report",onClick:()=>{Ui()},children:S==="generate_daily_report"?"生成中...":"生成日报"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-preview-btn",disabled:!Us,onClick:()=>yt(!0),title:Us?"预览日报文字内容":"生成日报后可预览文字内容",children:[s.jsx(ed,{size:14,"aria-hidden":"true"}),"预览日报"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(Ae!=null&&Ae.pdf_available),onClick:Xs,title:Ae!=null&&Ae.pdf_available?"下载本地日报文本":"生成日报后可下载本地日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"daily-report-workbench",entityId:Ae==null?void 0:Ae.report_id}),children:"打开日报运营"})]}),s.jsxs("div",{className:"de-report-meta",children:[s.jsx("p",{children:(Ae==null?void 0:Ae.summary)??"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),((Ae==null?void 0:Ae.detail_lines)??[]).slice(0,3).map(b=>s.jsx("p",{children:b},b))]})]})]})]})})]}),Ce&&Ae&&s.jsx("div",{className:"de-task-manager-modal-overlay de-report-preview-overlay",role:"presentation",onClick:()=>yt(!1),children:s.jsxs("div",{className:"de-report-preview-modal",role:"dialog","aria-modal":"true","aria-label":"日报预览",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"DAILY REPORT"}),s.jsx("h3",{children:Ae.title||"数字员工日报"}),s.jsxs("p",{children:[fa," 生成时间 ",Ae.report_schedule_time,",来源:",Ae.generated_by==="ai"?"AI 生成":"规则兜底"]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>yt(!1),children:"×"})]}),s.jsxs("div",{className:"de-report-preview-summary",children:[s.jsxs("div",{children:[s.jsx("span",{children:"任务总数"}),s.jsx("strong",{children:Vn})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行次数"}),s.jsx("strong",{children:rn})]}),s.jsxs("div",{children:[s.jsx("span",{children:"成功次数"}),s.jsx("strong",{children:_c})]}),s.jsxs("div",{children:[s.jsx("span",{children:"失败次数"}),s.jsx("strong",{children:$d})]})]}),s.jsx("div",{className:"de-report-preview-content",children:Jl.length===0?s.jsx("p",{className:"de-empty-text",children:"当前日报暂无可预览文字。"}):Jl.map((b,Q)=>s.jsx("p",{children:b},`${Q}-${b}`))}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>yt(!1),children:"关闭"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!Ae.pdf_available,onClick:Xs,children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]})]})]})}),Ai&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>il(null),children:s.jsxs("div",{className:"de-profile-settings-modal de-blocked-input-modal",role:"dialog","aria-modal":"true","aria-label":"补充阻塞步骤输入",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"BLOCKED PLANSTEP"}),s.jsx("h3",{children:"补充输入"}),s.jsx("p",{children:Ai.step.title})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>il(null),children:"×"})]}),s.jsxs("label",{className:"de-blocked-input-field",children:[s.jsx("span",{children:"补充内容"}),s.jsx("textarea",{value:Vl,onChange:b=>sl(b.target.value),placeholder:"输入用于解除当前阻塞的信息"})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>il(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!Vl.trim()||!!S,onClick:()=>{Js()},children:"提交输入"})]})]})}),Ie&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>V(!1),children:s.jsxs("div",{className:"de-profile-settings-modal",role:"dialog","aria-modal":"true","aria-label":"数字员工特性设置",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PROFILE"}),s.jsx("h3",{children:"特性设置"}),s.jsx("p",{children:"维护数字员工在首页展示的姓名、单位、岗位和当前状态。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>V(!1),children:"×"})]}),s.jsxs("div",{className:"de-profile-settings-grid",children:[s.jsxs("label",{children:[s.jsx("span",{children:"姓名"}),s.jsx("input",{value:En.name,onChange:b=>Ca(Q=>({...Q,name:b.target.value}))})]}),s.jsxs("label",{children:[s.jsx("span",{children:"单位"}),s.jsx("input",{value:En.company,onChange:b=>Ca(Q=>({...Q,company:b.target.value}))})]}),s.jsxs("label",{children:[s.jsx("span",{children:"岗位"}),s.jsx("input",{value:En.position,onChange:b=>Ca(Q=>({...Q,position:b.target.value}))})]}),s.jsxs("div",{className:"de-profile-status-toggle",children:[s.jsx("span",{children:"当前状态"}),s.jsxs("div",{children:[s.jsx("button",{type:"button",className:En.currentStatus==="working"?"active":"",onClick:()=>Ca(b=>({...b,currentStatus:"working"})),children:"工作中"}),s.jsx("button",{type:"button",className:En.currentStatus==="resting"?"active":"",onClick:()=>Ca(b=>({...b,currentStatus:"resting"})),children:"休息中"})]})]})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>V(!1),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="update_profile",onClick:()=>{xc()},children:S==="update_profile"?"保存中...":"保存设置"})]})]})}),He&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>Ke(null),children:s.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"同步失败详情",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"SYNC FAILURE"}),s.jsx("h3",{children:"同步失败详情"}),s.jsxs("p",{children:[Xr(He.entityType)," / ",He.operation]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Ke(null),children:"×"})]}),s.jsxs("div",{className:"de-event-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Outbox"}),s.jsx("strong",{children:He.id})]}),s.jsxs("div",{children:[s.jsx("span",{children:"实体"}),s.jsx("strong",{children:He.entityId})]}),((Cc=He.entitySummary)==null?void 0:Cc.title)&&s.jsxs("div",{children:[s.jsx("span",{children:"业务"}),s.jsx("strong",{children:He.entitySummary.title})]}),((Nc=He.entitySummary)==null?void 0:Nc.status)&&s.jsxs("div",{children:[s.jsx("span",{children:"业务状态"}),s.jsx("strong",{children:He.entitySummary.status})]}),s.jsxs("div",{children:[s.jsx("span",{children:"类型"}),s.jsx("strong",{children:Xr(He.entityType)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"操作"}),s.jsx("strong",{children:He.operation})]}),s.jsxs("div",{children:[s.jsx("span",{children:"重试"}),s.jsxs("strong",{children:[He.attempts," 次"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"上次尝试"}),s.jsx("strong",{children:hy(He)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"下次重试"}),s.jsx("strong",{children:tx(He)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"状态"}),s.jsx("strong",{children:He.dueForRetry?"等待补偿":"退避中"})]})]}),s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"失败原因"}),s.jsx("p",{children:He.error||"暂无错误详情。"})]}),((Hi=He.entitySummary)==null?void 0:Hi.summary)&&s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"业务摘要"}),s.jsx("p",{children:He.entitySummary.summary})]}),(((Ec=He.attemptHistory)==null?void 0:Ec.length)??0)>0&&s.jsxs("div",{className:"de-sync-attempt-history",children:[s.jsx("span",{children:"重试历史"}),s.jsx("div",{className:"de-sync-attempt-list",children:(Ac=He.attemptHistory)==null?void 0:Ac.map(b=>s.jsxs("div",{className:`de-sync-attempt-row de-sync-attempt-row--${c2(b.status)}`,children:[s.jsxs("div",{children:[s.jsxs("strong",{children:["第 ",b.attemptNo," 次"]}),s.jsx("em",{children:r2(b.status)}),s.jsx("span",{children:Wa(b.finishedAt)||b.finishedAt})]}),b.error&&s.jsx("small",{children:b.error})]},`${b.attemptNo}-${b.finishedAt}`))})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Ke(null),children:"关闭"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{ma(He)},children:[s.jsx(QS,{size:14}),"复制诊断"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Vs(He),children:[s.jsx(ws,{size:14}),"导出诊断"]}),He.managementRecordUrl&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>window.open(He.managementRecordUrl||"","_blank","noopener,noreferrer"),children:[s.jsx(ed,{size:14}),"查看管理端记录"]}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="flush_management_sync",onClick:()=>{qi().then(()=>Ke(null))},children:S==="flush_management_sync"?"同步中...":"立即重试"})]})]})}),U&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:Ws,children:s.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"执行记录详情",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION DETAIL"}),s.jsx("h3",{children:"执行记录详情"}),s.jsx("p",{children:"这条记录已被锁定,滚动不会把它刷掉。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Ws,children:"×"})]}),s.jsxs("div",{className:"de-event-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"业务"}),s.jsx("strong",{children:U.plan_title})]}),s.jsxs("div",{children:[s.jsx("span",{children:"操作"}),s.jsx("strong",{children:U.task_title})]}),s.jsxs("div",{children:[s.jsx("span",{children:"状态"}),s.jsx("strong",{children:_y(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"计划时间"}),s.jsx("strong",{children:ex(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行时间"}),s.jsx("strong",{children:nx(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"数据来源"}),s.jsx("strong",{children:zi})]})]}),s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"操作结果"}),s.jsx("p",{children:Zo(U)})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Ws,children:"关闭"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>Ld(U),children:"打开任务中心详情"})]})]})}),ne&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:Sc,children:s.jsxs("div",{className:"de-event-history-modal",role:"dialog","aria-modal":"true","aria-label":"全部执行记录",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION HISTORY"}),s.jsx("h3",{children:"运行明细"}),s.jsxs("p",{children:["当前日期共 ",tn.length," 条记录,本窗口展示最新 ",Math.min(Zl.length,fy)," 条。"]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Sc,children:"×"})]}),s.jsx("div",{className:"de-event-history-toolbar",children:AN.map(b=>s.jsx("button",{type:"button",className:`de-filter-chip ${de===b.id?"active":""}`,onClick:()=>Te(b.id),children:b.label},b.id))}),s.jsx("div",{className:"de-event-history-list",children:Zl.length===0?s.jsx("p",{className:"de-empty-text",children:"当前筛选下没有执行记录。"}):mc.map(b=>s.jsxs("button",{type:"button",className:`de-event-history-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{le(b),B(!1),M(!0)},children:[s.jsxs("span",{children:[s.jsx("em",{children:"业务"}),s.jsx("strong",{children:b.plan_title})]}),s.jsxs("span",{children:[s.jsx("em",{children:"操作"}),s.jsx("strong",{children:b.task_title})]}),s.jsxs("span",{children:[s.jsx("em",{children:"状态"}),s.jsx("strong",{children:_y(b)})]}),s.jsxs("span",{children:[s.jsx("em",{children:"操作结果"}),s.jsx("strong",{children:Zo(b)}),s.jsx("small",{children:by(b)})]})]},b.id))})]})}),se&&s.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>ue(null),children:s.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"定时任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN SCHEDULE"}),s.jsx("h3",{children:"定时任务"}),s.jsx("p",{children:"定时会把任务注册到后端调度链路,每天按设置时间自动派发。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>ue(null),children:"×"})]}),s.jsxs("div",{className:"de-plan-action-body",children:[s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"任务"}),s.jsx("p",{children:se.title})]}),s.jsxs("label",{className:"de-plan-action-field",children:[s.jsx("span",{children:"每日定时时间"}),s.jsx("input",{type:"time",value:ae,onChange:b=>he(b.target.value||"09:00")})]}),s.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"调度注册"}),s.jsx("strong",{children:py(ae)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"任务步骤"}),s.jsxs("strong",{children:[se.stepCount," 步"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行步骤"}),s.jsxs("strong",{children:[se.taskCount," 项"]})]})]}),s.jsx("div",{className:"de-schedule-result de-schedule-result--success",children:"这里不是本地假定时;提交后如果后端调度链路不可用,会直接显示真实失败原因。"})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>ue(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S===`schedule:${se.id}`,onClick:()=>{kc(se)},children:S===`schedule:${se.id}`?"注册中...":"确认定时"})]})]})}),ve&&s.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>Ee(null),children:s.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"执行任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN EXECUTION"}),s.jsx("h3",{children:"执行任务"}),s.jsx("p",{children:"确认后立即创建并派发任务步骤,不需要先进入任务中心设置。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Ee(null),children:"×"})]}),s.jsxs("div",{className:"de-plan-action-body",children:[s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"任务"}),s.jsx("p",{children:ve.title})]}),s.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"当前状态"}),s.jsx("strong",{children:ve.statusLabel})]}),s.jsxs("div",{children:[s.jsx("span",{children:"任务步骤"}),s.jsxs("strong",{children:[ve.stepCount," 步"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行步骤"}),s.jsxs("strong",{children:[ve.taskCount," 项"]})]})]}),s.jsx("div",{className:`de-schedule-result ${Hr(ve)?"de-schedule-result--success":"de-schedule-result--pending"}`,children:Hr(ve)?"确认后立即调用后端派发接口,按任务步骤进入真实执行链路。":Gr(ve)})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Ee(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S===`execute:${ve.id}`||!Hr(ve),onClick:()=>{Md(ve)},children:S===`execute:${ve.id}`?"触发中...":"确认执行"})]})]})}),Xl&&ol&&s.jsx("div",{className:"de-task-manager-modal-overlay de-workday-guide-overlay",role:"presentation",onClick:Ps,children:s.jsxs("div",{className:"de-task-manager-modal de-workday-guide-modal",role:"dialog","aria-modal":"true","aria-label":"开始今天的任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head de-workday-guide-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"WORKDAY START"}),s.jsx("h3",{children:"开始今天的任务"}),s.jsx("p",{children:"像值班员早上交接一样,先确认日期和执行内容,再让数字员工开始接单、外呼、汇总和汇报。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Ps,children:"×"})]}),s.jsx("div",{className:"de-workday-guide-steps","aria-label":"开工引导步骤",children:RN.map((b,Q)=>s.jsxs("div",{className:"de-workday-guide-step",children:[s.jsx("span",{children:Q+1}),s.jsx("strong",{children:b.title}),s.jsx("p",{children:b.body})]},b.title))}),s.jsxs("div",{className:"de-workday-guide-body",children:[s.jsxs("section",{className:"de-task-manager-column de-workday-guide-column",children:[s.jsxs("div",{className:"de-task-manager-section-head",children:[s.jsxs("div",{children:[s.jsx("strong",{children:"选择今天要执行的任务"}),s.jsxs("span",{children:[zt.length," 项已选,",oa.length," 项总任务,",Na.length," 项待选择"]})]}),s.jsx("span",{className:`de-badge ${Mi}`,children:zi})]}),s.jsx("div",{className:"de-workday-guide-duty-list",children:g?s.jsx("div",{className:"de-loading-skeleton",style:{height:220}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不再展示硬编码任务。请先在任务中心创建或同步。"}):sn.map(b=>Ii(b,"guide"))})]}),s.jsxs("aside",{className:"de-workday-guide-side",children:[s.jsxs("div",{className:"de-workday-guide-summary",children:[s.jsx("span",{children:"日期"}),s.jsx("strong",{children:a}),s.jsx("p",{children:Oi})]}),s.jsxs("div",{className:"de-workday-guide-summary",children:[s.jsx("span",{children:"确认后会发生什么"}),s.jsx("strong",{children:"右侧进入执行滚动"}),s.jsx("p",{children:"首页会展示当前动作、下一步、操作状态和操作结果;需要人工决策时会在右侧停下来提示。"})]}),(D||I||(r==null?void 0:r.demo_reason))&&s.jsx("div",{className:`de-schedule-result ${D?"de-schedule-result--error":"de-schedule-result--success"}`,children:D||(I?"已调整任务勾选,点击确认后生效。":r==null?void 0:r.demo_reason)}),s.jsxs("div",{className:"de-workday-guide-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Ps,children:"稍后设置"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="confirm_workday"||g,onClick:()=>{Ks()},children:S==="confirm_workday"?"确认中...":"确认并开始任务"})]})]})]})]})}),E&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>J(!1),children:s.jsxs("div",{className:"de-task-manager-modal",role:"dialog","aria-modal":"true","aria-label":"任务设置",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"TASK MANAGER"}),s.jsx("h3",{children:"任务设置"}),s.jsx("p",{children:"像员工早上确认工作一样,勾选今天要执行的内容,必要时进入详情或处理待决策事项。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>J(!1),children:"×"})]}),s.jsxs("div",{className:"de-task-manager-modal-body",children:[s.jsxs("section",{className:"de-task-manager-column de-task-manager-column--duties",children:[s.jsxs("div",{className:"de-task-manager-section-head",children:[s.jsxs("div",{children:[s.jsx("strong",{children:"任务设置清单"}),s.jsxs("span",{children:[zt.length," 项已选,",oa.length," 项总任务,",Na.length," 项待选择"]})]}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="confirm_workday"||g,onClick:()=>{Ks()},children:S==="confirm_workday"?"确认中...":Me!=null&&Me.confirmed?"重新任务执行":"确认并开始任务"})]}),s.jsx("div",{className:"de-task-manager-duty-list",children:g?s.jsx("div",{className:"de-loading-skeleton",style:{height:180}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会显示硬编码任务。可进入任务中心创建。"}):sn.map(b=>Ii(b,"manager"))})]}),s.jsxs("aside",{className:"de-task-manager-column de-task-manager-column--actions",children:[s.jsx("div",{className:"de-task-manager-section-head",children:s.jsxs("div",{children:[s.jsx("strong",{children:"待解决事项"}),s.jsx("span",{children:Aa.length>0?`${Aa.length} 项需要人处理`:"暂无阻塞事项"})]})}),s.jsx("div",{className:"de-task-manager-decision-list",children:((r==null?void 0:r.decisions)??[]).length===0?s.jsx("p",{className:"de-empty-text",children:"没有需要你确认的事项。"}):((r==null?void 0:r.decisions)??[]).map(b=>{var dt;const Q=k[b.id]??vs,re=`approval-action:${b.id}:`,ye=S===`${re}comment`,_e=S===`${re}delegate`,Qe=S===`${re}mark_timeout`,_t=S===`${re}mark_risk`,at=S===`${re}clear_risk`,ke=(dt=b.conflict)!=null&&dt.active?b.conflict:null;return s.jsxs("div",{className:"de-task-manager-decision-card",children:[s.jsxs("div",{className:"de-log-entry-meta",children:[s.jsx("strong",{children:b.title}),s.jsx("span",{children:b.status_label})]}),s.jsx("p",{children:b.scenario}),s.jsxs("div",{className:"de-approval-summary-grid",children:[ke&&s.jsx("span",{className:"de-badge de-badge-danger",children:"跨端冲突"}),s.jsx("span",{className:`de-badge ${xs(ON(b.risk_level))}`,children:qN(b.risk_level)}),s.jsx("span",{className:`de-badge ${xs(LN(b.sla_status))}`,children:BN(b.sla_status)}),s.jsx("span",{children:b.due_at?`截止 ${Wa(b.due_at)||b.due_at}`:"未设置截止"}),s.jsx("span",{children:b.comment_count?`评论 ${b.comment_count} 条`:"暂无评论"}),s.jsx("span",{children:b.delegate_to?`转交 ${b.delegate_to}`:"未转交"}),s.jsx("span",{children:b.last_action?`最近 ${Xf(b.last_action)} · ${b.last_actor||"未知"}`:"暂无审批动作"}),s.jsx("span",{children:b.approval_step_count?`步骤 ${b.approval_step_index||1}/${b.approval_step_count}`:"单步审批"}),s.jsx("span",{children:b.current_step_label?`当前 ${b.current_step_label}`:"当前步骤待确认"}),s.jsx("span",{children:b.current_participant?`处理人 ${b.current_participant}`:"未指定处理人"}),s.jsx("span",{children:b.next_step_label?`下一步 ${b.next_step_label}`:"无后续步骤"})]}),ke&&s.jsxs("div",{className:"de-decision-chain-note de-decision-chain-note--conflict",children:[s.jsx("span",{className:"de-badge de-badge-danger",children:"人工排查"}),s.jsxs("span",{children:[UN(ke.reason),":本地 ",my(ke.local_status??b.status),",管理端 ",my(ke.remote_status),"。",ke.detected_at?` 检测 ${Wa(ke.detected_at)||ke.detected_at}`:""]})]}),ke&&s.jsx("div",{className:"de-workbench-actions de-approval-governance-actions",children:[["keep_local","保留本地"],["accept_remote","采纳管理端"],["mark_reviewed","标记已复核"]].map(([et,cn])=>{const Fn=`approval-conflict:${b.id}:${et}`;return s.jsx("button",{type:"button",className:et==="accept_remote"?"de-workbench-action-accent":"",disabled:S===Fn,onClick:()=>{ei(b,et)},children:s.jsx("span",{children:S===Fn?"记录中...":cn})},et)})}),s.jsxs("div",{className:"de-approval-action-fields",children:[s.jsx("input",{value:Q.comment,placeholder:"评论 / 风险原因",onChange:et=>Jn(b.id,{comment:et.target.value})}),s.jsx("input",{value:Q.delegateTo,placeholder:"转交对象",onChange:et=>Jn(b.id,{delegateTo:et.target.value})}),s.jsx("input",{type:"datetime-local",value:Q.dueAt,onChange:et=>Jn(b.id,{dueAt:et.target.value})})]}),s.jsxs("div",{className:"de-workbench-actions de-approval-governance-actions",children:[s.jsxs("button",{type:"button",title:"记录审批评论",disabled:ye,onClick:()=>{pa(b,"comment")},children:[s.jsx(Qo,{size:13}),s.jsx("span",{children:ye?"记录中...":"评论"})]}),s.jsxs("button",{type:"button",title:"转交审批",disabled:_e,onClick:()=>{pa(b,"delegate")},children:[s.jsx(aj,{size:13}),s.jsx("span",{children:_e?"转交中...":"转交"})]}),s.jsxs("button",{type:"button",title:"标记 SLA 超时",disabled:Qe,onClick:()=>{pa(b,"mark_timeout")},children:[s.jsx(Hf,{size:13}),s.jsx("span",{children:Qe?"标记中...":"超时"})]}),s.jsxs("button",{type:"button",title:"标记审批风险",disabled:_t,onClick:()=>{pa(b,"mark_risk")},children:[s.jsx(Fg,{size:13}),s.jsx("span",{children:_t?"标记中...":"风险"})]}),s.jsxs("button",{type:"button",title:"清除审批风险",disabled:at,onClick:()=>{pa(b,"clear_risk")},children:[s.jsx(Pr,{size:13}),s.jsx("span",{children:at?"清除中...":"清除"})]})]}),s.jsxs("div",{className:"de-decision-chain-note",children:[s.jsx("span",{className:`de-badge ${ke?"de-badge-danger":"de-badge-success"}`,children:ke?"冲突保护":"本地记录"}),s.jsx("span",{children:ke?"直接同意/驳回已暂停,请先同步或在管理端工作台排查。":Zf(b.status)?"处理结果会写入 qimingclaw runtime event。":"该事项已在本地状态中处理。"}),ke?s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"interventions",interventionKind:"approval_conflict",entityId:b.id}),children:"打开介入台"}):null]}),s.jsxs("div",{className:"de-workbench-actions",children:[b.actions.map(et=>s.jsx("button",{type:"button",className:et.tone==="primary"?"de-workbench-action-accent":"",disabled:S===`${b.id}:${et.id}`||!Zf(b.status)||!!ke,onClick:()=>{Ft(b,et.id)},children:S===`${b.id}:${et.id}`?"处理中...":et.label},et.id)),s.jsx("button",{type:"button",onClick:()=>e({tab:"missions",date:a,missionId:b.id}),children:"查看上下文"})]})]},b.id)})})]})]})]})})]})}function gn({children:e,className:a="",style:l}){return s.jsx("div",{className:`de-card ${a}`,style:l,children:e})}function Nn({title:e,children:a}){return s.jsxs("div",{className:"de-card-title-bar",children:[s.jsx("span",{className:"de-card-title-bar-text",children:e}),a]})}const T2={info:"de-badge-info",success:"de-badge-success",warning:"de-badge-warning",danger:"de-badge-danger"};function vm({variant:e,label:a}){return s.jsx("span",{className:`de-badge ${T2[e]}`,children:a})}function xm(e){return Array.isArray(e)?e:[]}function Bo(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ye(e,a=""){return typeof e=="string"?e:typeof e=="number"?String(e):a}function zs(e){return/[\u4e00-\u9fff]/.test(e)}const ky={queued:"排队中",ready:"就绪",idle:"待执行",pending:"待处理",pending_authorization:"待授权",waiting_input:"待输入",draft:"草稿",reviewing:"审核中",approved:"已批准",preparing:"准备中",running:"执行中",active:"运行中",blocked:"已阻塞",succeeded:"已完成",success:"成功",finished:"已完成",complete:"已完成",completed:"已完成",failed:"失败",error:"错误",cancelled:"已取消",canceled:"已取消",aborted:"已终止",rejected:"已拒绝",deferred:"已暂缓",dispatched:"已下发",scheduled:"已设置定时",enabled:"已启用",disabled:"已停用",paused:"已暂停",unknown:"未知"},Sy={plan:"计划",task:"任务",task_running:"处理中",task_done:"任务完成",run:"执行开始",run_done:"执行完成",skill_tool:"技能调用",artifact:"产物",task_summary:"结果",entered_session:"会话",start:"目标",RunStarted:"开始调用",RequestDispatched:"请求已发出",ResponseReceived:"收到返回",RunSkipped:"本次跳过",RunCompleted:"执行完成",waiting_for_authorization:"等待授权",pending_authorization:"等待授权",authorization_approved:"授权通过",authorization_rejected:"授权拒绝",authorization_deferred:"稍后处理",failed:"执行失败",completed:"执行完成"};function hn(e,a="未知"){const l=Ye(e).trim();if(!l)return a;const r=ky[l]??ky[l.toLowerCase()];return r||(zs(l)?l:a)}function R2(e){const a=Ye(e).trim();return a?Sy[a]??Sy[a.toLowerCase()]??(zs(a)?a:"事件"):"事件"}function ax(e,a="暂无事件内容"){const l=Ye(e).trim();if(!l)return a;if(zs(l))return l;const r=hn(l,"");if(r)return r;const o=l.match(/^(Succeeded|Failed|Running|Completed)\s*\(attempt\s*#(\d+)\)$/i);return o?`${hn(o[1])}(第 ${o[2]} 次)`:/request failed/i.test(l)?"请求失败":/backend unavailable/i.test(l)?"后端服务不可达":/not found/i.test(l)?"未找到对应资源":a}function Qr(e,a="未命名内容"){const l=Ye(e).trim();if(!l||/unnamed/i.test(l))return a;if(zs(l))return l;const r=hn(l,"");if(r)return r;const o=lx(l);return o||l}function km(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function Sm(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function $2(e,a){const l=Ye(e).trim().toLowerCase();return a.length===0?l||"pending":a.some(r=>Sm(r.status))?"failed":a.some(r=>["running","active","leased"].includes(r.status.toLowerCase()))?"running":a.some(r=>["queued","ready","pending"].includes(r.status.toLowerCase()))?"queued":a.every(r=>km(r.status))?"succeeded":l||"pending"}function D2(e,a){const l=Ye(e,"unknown").trim().toLowerCase();return km(l)||Sm(l)?l:a.some(r=>Sm(r.status))?"failed":a.some(r=>["running","active","queued","leased"].includes(r.status.toLowerCase()))?"running":a.length>0&&a.every(r=>km(r.status))?"succeeded":l||"unknown"}function jy(e){return e?e.map(a=>{const l=Ye(a.plan_id),o=xm(a.steps).map(p=>{const _=xm(p.tasks).map(g=>({id:Ye(g.task_id),title:Qr(g.title,"子任务"),description:Ye(g.description),status:Ye(g.status,"pending"),assignedSkillId:g.assigned_skill_id?Ye(g.assigned_skill_id):null,startedAt:g.started_at?Ye(g.started_at):null,finishedAt:g.finished_at?Ye(g.finished_at):null}));return{id:Ye(p.step_id),title:Qr(p.title,"任务步骤"),description:Ye(p.description),status:$2(p.status,_),preferredSkills:Array.isArray(p.preferred_skills)?p.preferred_skills:[],tasks:_}}),d=[];for(const p of o)for(const h of p.tasks)d.push(h.id);return{id:l,title:Qr(a.title,"未命名任务"),objective:Qr(a.objective||a.description,"暂无任务说明"),status:D2(a.status,o),createdAt:a.created_at?Ye(a.created_at):null,updatedAt:a.updated_at?Ye(a.updated_at):null,steps:o,sourceIds:{planId:l||void 0,taskIds:d}}}):[]}const Jf={"decision-analyzer":"决策分析","git-log-collector":"Git 日志采集","number-generator":"数据生成","office-export-xlsx":"Excel 导出","task-tracker":"任务跟踪","weekly-report-writer":"周报撰写","zhihu-hotlist-detail":"知乎热榜明细","zhihu-hotlist":"知乎热榜","tq-lineloss-report":"台区线损报表","archive-workorder-grid-push-monitor":"归档工单推送监控","available-balance-below-zero-monitor":"可用余额监控","command-center-fee-control-monitor":"费用管控监控","sgcc-todo-crawler":"SGCC 待办爬取","appointment-workorder-monitor":"约时工单监控","fault-location-monitor":"故障定位监控","fudian-failure-monitor":"复电失败监控","important-service-expiry-monitor":"服务到期预警","by-95598-customer-satisfaction-report":"95598 满意率日报","by-daily-report-statistics":"日报统计","by-fire-fault-monthly-report":"火警故障月报","by-risk-control-next-day-plan-report":"风控次日计划","by-risk-control-week-plan-report":"风控周计划","by-supervision-workorder-detail-report":"督办工单明细","age-file-encryption":"文件加解密","anonymous-file-upload":"匿名文件上传","browser-automation-agent":"浏览器自动化","bulk-github-star":"批量仓库标星","changelog-generator":"更新日志生成","code-reviewer":"代码审查","commit-automation":"自动提交","crypto-trading-signal":"交易信号分析","csv-to-json":"CSV 转 JSON","data-analysis":"数据分析","deep-research":"深度调研","dependency-updater":"依赖更新","deploy-automation":"自动部署","dns-lookup":"DNS 查询","document-generator":"文档生成","email-automation":"邮件自动化","file-converter":"文件格式转换","git-history-analyzer":"Git 历史分析","github-issue-manager":"Issue 管理","image-optimizer":"图片优化","json-schema-validator":"JSON Schema 校验","log-analyzer":"日志分析","markdown-to-pdf":"Markdown 转 PDF","meeting-summarizer":"会议纪要","news-aggregator":"新闻聚合","pdf-extractor":"PDF 提取","performance-profiler":"性能分析","pr-review-bot":"PR 审查","release-notes-generator":"发布说明生成","screenshot-automation":"截图自动化","search-engine-scraper":"搜索引擎抓取","sentiment-analysis":"情感分析","shell-command-runner":"命令执行","slack-notification":"Slack 通知","spreadsheet-generator":"电子表格生成","text-summarizer":"文本摘要","torrent-search":"资源搜索","translate-text":"文本翻译","web-scraper":"网页抓取","website-monitor":"网站监控","whitepaper-analyzer":"白皮书分析","xml-to-json":"XML 转 JSON"};function lx(e){if(Jf[e])return Jf[e];for(const[a,l]of Object.entries(Jf))if(e.includes(a)||a.includes(e))return l;return null}function wy(e,a){const l=lx(e);return l||(zs(a)?a:"自动化技能")}const Cy={"decision-analyzer":"数字化","git-log-collector":"数字化","number-generator":"数字化","office-export-xlsx":"办公","task-tracker":"办公","weekly-report-writer":"报表","zhihu-hotlist-detail":"数字化","zhihu-hotlist":"数字化","tq-lineloss-report":"报表","archive-workorder-grid-push-monitor":"监控巡检","available-balance-below-zero-monitor":"监控巡检","command-center-fee-control-monitor":"监控巡检","sgcc-todo-crawler":"监控巡检","appointment-workorder-monitor":"监控巡检","fault-location-monitor":"监控巡检","fudian-failure-monitor":"监控巡检","important-service-expiry-monitor":"监控巡检","by-95598-customer-satisfaction-report":"报表","by-daily-report-statistics":"报表","by-fire-fault-monthly-report":"报表","by-risk-control-next-day-plan-report":"报表","by-risk-control-week-plan-report":"报表","by-supervision-workorder-detail-report":"报表","age-file-encryption":"数字化","anonymous-file-upload":"通信","browser-automation-agent":"数字化","bulk-github-star":"发展","changelog-generator":"发展","chat-logger":"通信","check-crypto-address-balance":"财务","city-distance":"发展","city-tourism-website-builder":"营销","crawl-websites-at-scale":"数字化","csv-data-summarizer":"财务","d3js-data-visualization":"数字化","database-query-and-export":"数字化","file-tracker":"综合","free-geocoding-and-maps":"发展","free-translation-api":"综合","free-weather-data":"综合","generate-asset-price-chart":"财务","generate-qr-code-natively":"数字化","get-crypto-price":"财务","git-worktree-cli":"发展","github-stats":"发展","html-to-markdown":"数字化","image-compressor":"综合","json-to-csv":"数字化","llm-council":"数字化","markdown-table-generator":"综合","multi-format-converter":"综合","npm-package-info":"发展","pdf-generator":"综合","random-number-generator":"综合","readability-score":"综合","rss-feed-reader":"通信","sql-formatter":"数字化","text-diff":"综合","torrent-search":"通信","unit-converter":"综合","url-shortener":"通信","youtube-transcript":"通信","zip-extractor":"综合"};function Ny(e){return Cy[e]?Cy[e]:"综合"}function z2(e){return e==="core"||e==="standard"||e==="specialized"||e==="experimental"?e:"standard"}function M2(e,a,l){const r=Ye(a).trim();return r&&zs(r)?r:e.includes("monitor")?`${l}能力,用于按排班自动巡检并提示异常。`:e.includes("report")?`${l}能力,用于自动生成和整理业务报表。`:`${l}能力,可由数字员工按需执行或定时处理。`}function O2(e){return e?e.map(a=>{const l=Ye(a.skill_id,Ye(a.id)),r=Bo(a.governance);return{id:l,name:wy(l,Ye(a.name,l)),version:a.version?Ye(a.version):null,enabled:!!a.enabled,description:M2(l,a.description,wy(l,Ye(a.name,l))),category:a.category?Ye(a.category,Ny(l)):Ny(l),capabilityLevel:z2(a.capability_level??a.capabilityLevel),source:"skill-api",serverId:a.server_id?Ye(a.server_id):null,transport:a.transport?Ye(a.transport):null,running:typeof a.running=="boolean"?a.running:null,toolCount:Ey(a.tool_count),tools:Ff(a.tools),allowTools:Ff(a.allow_tools??(r==null?void 0:r.server_allow_tools)??(r==null?void 0:r.global_allow_tools)),denyTools:Ff(a.deny_tools??(r==null?void 0:r.server_deny_tools)??(r==null?void 0:r.global_deny_tools)),governancePolicy:q2(a.governance_policy??(r==null?void 0:r.effective_policy)),policySource:L2(a.policy_source),remotePolicy:Bo(a.remote_policy),localPolicy:Bo(a.local_policy),recentCalls:xm(a.recent_calls).map(o=>{const d=Bo(o)??{};return{eventId:Ye(d.event_id,Ye(d.id)),message:Ye(d.message),status:d.status?Ye(d.status):null,occurredAt:Ye(d.occurred_at,Ye(d.occurredAt)),toolName:d.tool_name?Ye(d.tool_name):null,projectId:d.project_id?Ye(d.project_id):null}}).filter(o=>o.eventId||o.message),callCount:Ey(a.call_count)??0,lastCalledAt:a.last_called_at?Ye(a.last_called_at):null}}):[]}function Ff(e){return Array.isArray(e)?e.filter(a=>typeof a=="string"&&a.trim().length>0).map(a=>a.trim()):[]}function Ey(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const a=Number(e);return Number.isFinite(a)?a:null}return null}function q2(e){return e==="allow"||e==="deny"||e==="open"||e==="disabled"?e:null}function L2(e){return e==="remote"||e==="local"||e==="open"?e:null}function Ad(e){return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function B2(e){switch(e){case"succeeded":case"completed":return"success";case"failed":case"error":return"danger";case"running":case"active":return"info";default:return"warning"}}function U2(e){return["draft","reviewing","approved"].includes(e.toLowerCase())}function I2(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"月度任务":a.includes("week")||a.includes("weekly")||a.includes("周")?"周任务":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"临时任务":"日常任务"}function xi(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function ix(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function H2(e){const a=e.steps.length;if(a===0)return hn(e.status);const l=e.steps.filter(p=>xi(p.status)).length,r=e.steps.filter(p=>ix(p.status)).length,o=e.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,d=[`已完成 ${l}/${a}`];return r>0&&d.push(`失败 ${r}`),o>0&&r===0&&d.push(`处理中 ${o}`),d.join(",")}function G2(e){const a=e.steps.find(o=>ix(o.status));if(a)return`执行失败:${a.title}`;const l=e.steps.find(o=>["running","active"].includes(o.status.toLowerCase()));if(l)return`正在处理:${l.title}`;const r=e.steps.find(o=>!xi(o.status));return r?`准备处理:${r.title}`:xi(e.status)?"本轮任务已完成,等待你查看结果":e.status.toLowerCase()==="failed"?"执行遇到异常,等待你检查后重新执行":"等待你委托数字员工开始处理"}function Y2(e,a){const l=e.status.toLowerCase();return l==="failed"||l==="error"?"查看详情后重新执行本任务":["running","active"].includes(l)?"等待完成或查看过程":xi(l)?"查看产物,必要时重新执行":a?"确认目标后点击委托执行":"查看详情确认当前状态"}function K2(e){const a=`${e.title} ${e.objective}`.toLowerCase();return a.includes("excel")||a.includes("xlsx")||a.includes("导出")||a.includes("报表")?"导出报表":a.includes("brief")||a.includes("简报")||a.includes("日程")?"工作简报":a.includes("snapshot")||a.includes("快照")||a.includes("热榜")?"结果快照":xi(e.status)?"查看完成结果":"完成后生成"}function sx(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":[a.getFullYear(),String(a.getMonth()+1).padStart(2,"0"),String(a.getDate()).padStart(2,"0")].join("-")}function rx(){return sx(new Date().toISOString())}function Q2(e){if(!e)return"时间未记录";const a=new Date(e);return Number.isNaN(a.getTime())?"时间未记录":a.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",hour12:!1})}function V2(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":a.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1})}function X2(e){const a=`${e.title} ${e.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!a)return null;const l=Number(a[1]),r=Number(a[2]);return!Number.isInteger(l)||!Number.isInteger(r)||l>23||r>59?null:`${String(l).padStart(2,"0")}:${String(r).padStart(2,"0")}`}function Z2(e){return e.steps.flatMap(a=>a.tasks.flatMap(l=>[l.startedAt,l.finishedAt])).filter(a=>!!a)}function J2(e,a){return Z2(e).filter(r=>sx(r)===a).sort((r,o)=>o.localeCompare(r))[0]??null}function F2(e,a){const l=J2(e,a);if(l)return`实际执行 ${Q2(l)}`;const r=a===rx()?"今日未执行":"当日未执行";return`计划执行 ${X2(e)||"待确认"};${r}`}function P2({mission:e,onSelect:a,onRun:l,onRestart:r,dateFilter:o,selected:d,focusLabel:p,running:h}){const _=U2(e.status),g=xi(e.status)||e.steps.some(C=>xi(C.status)),x=o||rx(),S=V2(e.updatedAt||e.createdAt);return s.jsxs("div",{id:`mission-card-${Ad(e.id)}`,className:`de-mission-card ${d?"de-mission-card--selected":""}`,onClick:()=>a(e),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),a(e))},role:"button",tabIndex:0,children:[s.jsxs("div",{className:"de-mission-card-header",children:[s.jsx("span",{className:"de-mission-card-title",children:e.title}),s.jsxs("div",{className:"de-mission-card-badges",children:[p&&s.jsx("span",{className:"de-mission-card-focus-chip",children:p}),s.jsx(vm,{variant:B2(e.status),label:hn(e.status)})]})]}),e.objective&&s.jsxs("p",{className:"de-mission-card-desc",children:["业务目标:",e.objective]}),s.jsxs("div",{className:"de-mission-card-meta",children:[s.jsxs("span",{children:["周期:",I2(e)]}),s.jsxs("span",{children:["当前进度:",H2(e)]}),S&&s.jsxs("span",{children:["同步于 ",S]})]}),s.jsx("div",{className:"de-mission-card-meta",children:s.jsx("span",{children:G2(e)})}),s.jsxs("div",{className:"de-mission-card-meta",children:[s.jsxs("span",{children:["下一步:",Y2(e,_)]}),s.jsxs("span",{children:["产物入口:",K2(e)]})]}),s.jsxs("div",{className:"de-mission-card-actions",children:[s.jsxs("span",{className:"de-mission-card-time",children:[F2(e,x),g?";重新执行可能覆盖本任务结果":""]}),s.jsx("button",{type:"button",className:"de-btn-restart",disabled:h,onClick:C=>{C.stopPropagation(),h||r==null||r(e)},title:g?"重新执行本任务,可能覆盖已有结果":"重新执行本任务",children:"重新执行本任务"}),s.jsx("button",{type:"button",className:"de-btn-run",disabled:!_||h,onClick:C=>{C.stopPropagation(),_&&!h&&(l==null||l(e))},children:h?"执行中...":_?"委托执行":hn(e.status)})]})]})}function Ay(e){switch(e){case"succeeded":case"completed":case"Succeeded":return"success";case"failed":return"danger";case"Failed":return"danger";case"running":case"active":case"Running":return"info";default:return"warning"}}function zl(e){return e?new Date(e).toLocaleString("zh-CN",{hour12:!1}):"未记录"}function Ty(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"月度任务":a.includes("week")||a.includes("weekly")||a.includes("周")?"周任务":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"临时任务":"日常任务"}function W2(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function Zr(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function Ry(e){const a=e.steps.length;if(a===0)return hn(e.status);const l=e.steps.filter(p=>W2(p.status)).length,r=e.steps.filter(p=>Zr(p.status)).length,o=e.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,d=[`已完成 ${l}/${a}`];return r>0&&d.push(`失败 ${r}`),o>0&&r===0&&d.push(`处理中 ${o}`),d.join(",")}function $y(e){return e.replace(/^启动计划:/,"接收委托:").replace(/^准备步骤:/,"准备工作:").replace(/^创建任务:/,"安排工作:").replace(/^任务失败:/,"工作失败:").replace(/^开始处理:/,"开始处理:").replace(/^完成任务:/,"完成工作:").replace(/^调用技能:/,"数字员工处理:").replace(/^执行开始:/,"开始执行:").replace(/^执行完成:/,"执行完成:").replace(/^执行失败:/,"执行失败:").replace(/,将使用[^,。]+/,"").replace(/,分配给[^,。]+/,"")}function Jo(e){return/失败|failed|error|timeout|unavailable/i.test(e)}function Dy(e,a=""){return Jo(a)?"失败":e==="artifact"?"产物":e==="task_summary"?"结果":e==="task_running"||e==="run"?"处理中":e==="task_done"||e==="run_done"?"完成":"过程"}function eE(e){return e==="user"?"用户":e==="assistant"?"数字员工":e==="system"?"系统":"消息"}function Pf(e){return Qr(e||"",e||"自动化技能")}function tE(e,a,l){const r=a==="true"?"成功":"失败";return e.includes("zhihu-hotlist")&&e.includes("extract_hotlist")?`调用技能:知乎热榜采集,结果:${r},耗时 ${l}ms`:e.includes("office-export-xlsx")&&e.includes("export_xlsx")?`调用技能:Excel 导出,结果:${r},耗时 ${l}ms`:`调用技能:${e},结果:${r},耗时 ${l}ms`}function Wf(e){return typeof e=="string"?e:""}function fd(e){return e.occurred_at||""}function zy(e){return e.filter(a=>!!a).sort((a,l)=>a.localeCompare(l))[0]||null}function nE(e){var l;const a=new Map;for(const r of e){const o=((l=r.message.split(",结果:")[0])==null?void 0:l.split(",状态:")[0])||r.message,d=a.get(o);(!d||fd(r).localeCompare(fd(d))>0)&&a.set(o,r)}return Array.from(a.values())}function aE(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function My(e){return e.replace(/\\\\/g,"\\")}function lE(e,a,l,r,o){const d=[],p=(_,g,x,S)=>{x.trim()&&d.push({event_id:S,kind:_,occurred_at:g??null,message:x})},h=(_,g,x,S)=>{let C=!1;try{const N=aE(JSON.parse(_));if(N){const k=typeof N.label=="string"?N.label.trim():"",A=N.value;k&&A!==void 0&&A!==null&&p("task_summary",g,`${k}:${String(A)}`,`metric-${x}-${S}`);const O=typeof N.output_path=="string"?N.output_path.trim():"";O&&(C=!0,p("artifact",g,`产物生成:${My(O)}`,`artifact-${x}-${S}`))}}catch{}const z=_.match(/"row_count"\s*:\s*(\d+)/);z!=null&&z[1]&&p("task_summary",g,`数据处理完成:共 ${z[1]} 条记录`,`rows-${x}-${S}`);const w=_.match(/"output_path"\s*:\s*"([^"]+\.(?:xlsx|xls|csv|json|html|pdf|png|jpg|jpeg|txt))"/i),D=w==null?void 0:w[1];D&&!C&&p("artifact",g,`产物生成:${My(D)}`,`artifact-regex-${x}-${S}`)};if(p("plan",e.createdAt||e.updatedAt,`启动计划:${e.title},目标:${e.objective}`,`plan-${e.id}`),a.length===0)for(const _ of e.steps){const g=_.preferredSkills.map(Pf).join("、")||"自动化技能";p("task",e.updatedAt||e.createdAt,`准备步骤:${_.title},将使用 ${g}`,`step-${_.id}`)}for(const _ of a){const g=Pf(_.assigned_skill_id),x=l.filter(z=>z.task_id===_.task_id),S=zy(x.map(z=>z.created_at)),C=zy([_.created_at,_.started_at,S]);if(p("task",C,`创建任务:${_.title||"子任务"},分配给 ${g}`,`task-create-${_.task_id}`),_.started_at&&p("task_running",_.started_at,`开始处理:${_.title||"子任务"}`,`task-start-${_.task_id}`),_.finished_at){const z=Zr(_.status)?"任务失败":"完成任务",w=Zr(_.status)&&_.error_message?`,原因:${_.error_message}`:"";p("task_done",_.finished_at,`${z}:${_.title||"子任务"},状态:${hn(_.status)}${w}`,`task-finish-${_.task_id}`)}}for(const _ of l){const g=a.find(z=>z.task_id===_.task_id),x=(g==null?void 0:g.title)||"任务执行",S=Pf(_.skill_id||(g==null?void 0:g.assigned_skill_id));if(r.some(z=>(z.content||"").includes(`[Task ${_.task_id}] tool_call`))||p("skill_tool",_.created_at,`调用技能:${S},处理:${x}`,`run-skill-${_.run_id}`),p("run",_.created_at,`执行开始:${x},第 ${_.attempt_no||1} 次`,`run-start-${_.run_id}`),_.completed_at){const z=Zr(_.lifecycle)?"执行失败":"执行完成";p("run_done",_.completed_at,`${z}:${x},结果:${hn(_.lifecycle)}`,`run-done-${_.run_id}`)}for(const[z,w]of(_.events||[]).entries())h(Wf(w.message),w.occurred_at||_.completed_at||_.created_at,`run-${_.run_id}-${w.event_id||z}`,_.skill_id||(g==null?void 0:g.assigned_skill_id)||"run");for(const[z,w]of(_.artifacts||[]).entries()){const D=Wf(w.uri),N=Wf(w.name)||D;(D||N)&&p("artifact",_.completed_at||_.created_at,`产物生成:${N}${D&&D!==N?`(${D})`:""}`,`run-artifact-${_.run_id}-${z}`)}}for(const _ of r){const g=_.content||"",x=g.match(/\[Task ([^\]]+)\] tool_call name=([^\s]+) success=(true|false) elapsed_ms=(\d+) args=(.*?) output=(.*)$/s);if(x){const C=x[1]||"",z=x[2]||"",w=x[3]||"false",D=x[4]||"0",N=x[6]||"";p("skill_tool",_.created_at,tE(z,w,D),`tool-${C}-${_.created_at}-${z}`),h(N,_.created_at,`message-${_.created_at}`,z);continue}const S=g.match(/共采集到\s*\**\s*(\d+)\s*条/);if(S!=null&&S[1]){p("task_summary",_.created_at,`采集完成:获得 ${S[1]} 条知乎热榜数据`,`summary-hotlist-${_.created_at}`);continue}g.includes("[Task ")&&g.includes("Excel")&&p("task_summary",_.created_at,"导出完成:Excel 文件已生成",`summary-excel-${_.created_at}`)}if(d.length<=1)for(const _ of o||[])p(_.kind,_.occurred_at,ax(_.message,_.message),_.event_id);return d.sort((_,g)=>(_.occurred_at||"").localeCompare(g.occurred_at||"")).slice(-40)}function iE({mission:e,onClose:a}){const[l,r]=v.useState([]),[o,d]=v.useState([]),[p,h]=v.useState(null),[_,g]=v.useState(!0),[x,S]=v.useState([]),[C,z]=v.useState(!1),[w,D]=v.useState(!1),[N,k]=v.useState(!1),[A,O]=v.useState(null),te=e.sourceIds.planId||e.id;v.useEffect(()=>{let R=!1;const M=()=>{g(!0),Promise.allSettled([fN(te),mN(te),oy(te)]).then(([B,U,le])=>{var de;R||(B.status==="fulfilled"?(r(B.value.tasks??[]),d(B.value.runs??[])):(r([]),d([])),U.status==="fulfilled"&&((de=U.value)!=null&&de.events)&&U.value.events.length>0?h(U.value):h(null),le.status==="fulfilled"&&le.value.messages.length>0?S(le.value.messages):S([]))}).finally(()=>{R||g(!1)})};M();const ne=window.setInterval(M,3e3);return()=>{R=!0,window.clearInterval(ne)}},[te]),v.useEffect(()=>{S([]),z(!1),D(!1),O(null)},[te]);const I=async()=>{if(!N){z(!0),k(!0),O(null);try{const R=await oy(te);R.messages&&R.messages.length>0?S(R.messages):S([])}catch(R){S([]),O(R instanceof Error?R.message:"读取会话失败")}finally{k(!1)}}},ie=v.useMemo(()=>{const R=new Map;for(const M of o){const ne=R.get(M.task_id)||[];ne.push(M),R.set(M.task_id,ne)}for(const M of R.values())M.sort((ne,B)=>(B.created_at||"").localeCompare(ne.created_at||""));return R},[o]),Z=v.useMemo(()=>lE(e,l,o,x,p==null?void 0:p.events),[p==null?void 0:p.events,e,o,x,l]),K=v.useMemo(()=>Z.filter(R=>R.kind!=="skill_tool").slice(-12),[Z]),pe=v.useMemo(()=>{const R=Z.filter(U=>["artifact","task_summary"].includes(U.kind)),M=Z.filter(U=>U.kind==="task_done"),ne=nE(Z.filter(U=>U.kind==="run_done")),B=M.length>0?M:ne;return[...R,...B].sort((U,le)=>fd(U).localeCompare(fd(le))).slice(-6)},[Z]),P=v.useMemo(()=>Z.reduce((R,M)=>M.occurred_at&&(!R||M.occurred_at.localeCompare(R)>0)?M.occurred_at:R,null),[Z]),q=e.updatedAt||P,ce=()=>{const R=!w;D(R),R&&!C&&I()};return s.jsxs("div",{className:"de-drawer",role:"dialog","aria-label":e.title,children:[s.jsxs("div",{className:"de-drawer-head",children:[s.jsxs("div",{className:"de-drawer-title-group",children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"委托详情"}),s.jsx("h3",{children:e.title})]}),s.jsx("button",{className:"de-btn-secondary",onClick:a,"aria-label":"关闭",children:"✕"})]}),s.jsxs("div",{className:"de-drawer-status-line",children:[s.jsx(vm,{variant:Ay(e.status),label:hn(e.status)}),s.jsx("span",{className:"de-drawer-meta",children:Ty(e)}),s.jsx("span",{className:"de-drawer-meta",children:Ry(e)})]}),s.jsxs("div",{className:"de-drawer-timeline",children:[s.jsxs("section",{className:"de-detail-section",children:[s.jsx("div",{className:"de-detail-section-head",children:s.jsx("h4",{children:"委托概览"})}),s.jsxs("div",{className:"de-detail-kv",children:[s.jsx("span",{children:"业务目标"}),s.jsx("strong",{children:e.objective||"未填写"}),s.jsx("span",{children:"周期"}),s.jsx("strong",{children:Ty(e)}),s.jsx("span",{children:"当前进度"}),s.jsx("strong",{children:Ry(e)}),s.jsx("span",{children:"启动时间"}),s.jsx("strong",{children:zl(e.createdAt)}),s.jsx("span",{children:"状态"}),s.jsx("strong",{children:hn(e.status)}),s.jsx("span",{children:"更新时间"}),s.jsx("strong",{children:zl(q)})]})]}),s.jsxs("section",{className:"de-detail-section de-execution-chain",children:[s.jsxs("div",{className:"de-detail-section-head",children:[s.jsx("h4",{children:"业务过程"}),s.jsxs("span",{className:"de-chain-plan-id",children:["最近更新:",zl(q||e.createdAt)]})]}),_&&K.length===0?s.jsx("p",{className:"de-empty-text",children:"正在读取业务过程..."}):K.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无业务过程。重新执行本任务后会显示处理进展。"}):s.jsx("div",{className:"de-chain-list",children:K.map(R=>s.jsxs("div",{className:`de-chain-row de-chain-row--${R.kind} ${Jo(R.message)?"de-chain-row--danger":""}`,children:[s.jsx("strong",{children:Dy(R.kind,R.message)}),s.jsx("span",{children:$y(R.message)}),s.jsx("time",{children:zl(R.occurred_at)})]},`chain-${R.event_id}`))})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"结果与产物"}),pe.length>0?s.jsx("div",{className:"de-event-list",children:[...pe].reverse().map(R=>s.jsxs("div",{className:`de-event-row ${Jo(R.message)?"de-event-row--danger":""}`,children:[s.jsx("strong",{children:Dy(R.kind,R.message)}),s.jsx("span",{children:$y(R.message)}),s.jsx("time",{children:zl(R.occurred_at)})]},`result-${R.event_id}`))}):s.jsx("p",{className:"de-empty-text",children:"任务完成后,这里会显示结果摘要和产物入口。"})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"步骤进展"}),_?s.jsx("p",{className:"de-empty-text",children:"正在读取执行情况..."}):null,e.steps.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无步骤进展"}):e.steps.map((R,M)=>s.jsxs("div",{className:"de-step-node",children:[s.jsx("div",{className:`de-step-dot de-step-dot--${R.status}`}),M0?s.jsx("div",{className:"de-event-list",children:Z.slice(-20).reverse().map(R=>s.jsxs("div",{className:`de-event-row ${Jo(R.message)?"de-event-row--danger":""}`,children:[s.jsx("strong",{children:R2(R.kind)}),s.jsx("span",{children:R.message}),s.jsx("time",{children:zl(R.occurred_at)})]},R.event_id))}):s.jsx("p",{className:"de-empty-text",children:"暂无事件日志"})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsxs("div",{className:"de-detail-section-head",children:[s.jsx("h4",{children:"会话记录"}),s.jsx("button",{className:"de-btn-secondary de-btn-sm",onClick:I,disabled:N,children:"刷新"})]}),A?s.jsxs("p",{className:"de-empty-text",children:["会话读取失败:",A]}):N?s.jsx("p",{className:"de-empty-text",children:"正在读取会话..."}):x.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无会话消息。"}):s.jsx("div",{className:"de-session-message-list",children:x.map((R,M)=>s.jsxs("div",{className:`de-session-message de-session-message--${R.role==="user"?"user":"agent"}`,children:[s.jsx("div",{className:"de-session-message-role",children:eE(R.role)}),s.jsx("p",{children:ax(R.content,R.content)})]},`${R.role}-${M}`))})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"任务与执行记录"}),l.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无原始任务记录"}):l.map(R=>{const M=ie.get(R.task_id)||[],ne=M[0];return s.jsxs("div",{className:"de-task-run-card",children:[s.jsxs("div",{className:"de-task-run-head",children:[s.jsx("span",{children:R.title||"子任务"}),s.jsx(vm,{variant:Ay(R.status),label:hn(R.status)})]}),s.jsxs("div",{className:"de-task-run-meta",children:[s.jsxs("span",{children:["skill_id:",R.assigned_skill_id||"未分配"]}),s.jsxs("span",{children:["开始:",zl(R.started_at)]}),s.jsxs("span",{children:["结束:",zl(R.finished_at)]})]}),s.jsxs("div",{className:"de-task-run-meta",children:[s.jsxs("span",{children:["task_id:",R.task_id]}),s.jsxs("span",{children:["执行记录:",M.length," 次"]}),ne?s.jsxs("span",{children:["最近结果:",hn(ne.lifecycle)]}):null]}),Zr(R.status)&&R.error_message?s.jsxs("div",{className:"de-task-run-error",children:[s.jsx("strong",{children:"失败原因:"}),R.error_message]}):null]},R.task_id)})]})]}):s.jsx("p",{className:"de-empty-text",children:"默认隐藏排障信息;需要排障时可展开。"})]})]})]})}const Oy={zh:{"nav.dashboard":"仪表盘","nav.plans":"计划","nav.execution":"执行","nav.governance":"治理","nav.scheduler":"调度器","nav.skills":"技能","nav.agent":"智能体","nav.tools":"工具","nav.cron":"Cron 任务","nav.integrations":"集成","nav.memory":"记忆","nav.config":"配置","nav.cost":"成本追踪","nav.logs":"日志","nav.devtools":"工具","nav.swimlane":"泳道","nav.doctor":"诊断","nav.canvas":"画布","planb.nav.chat":"对话","planb.nav.browser":"AI浏览器","planb.nav.monitor":"运行监测","planb.nav.dashboard":"仪表盘","planb.nav.settings":"设置","planb.nav.more":"更多工具","planb.layout.switch_to_wide":"切换到宽屏模式","planb.layout.switch_to_compact":"切换到紧凑模式","planb.layout.pop_out":"弹出独立窗口","planb.browser.title":"AI浏览器","planb.browser.subtitle":"启动 SuperRPA 浏览器自动化","planb.browser.launch":"启动浏览器","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"活跃会话","planb.browser.no_sessions":"没有活跃的浏览器会话,在上方输入 URL 启动。","planb.browser.status_launching":"启动中","planb.browser.status_running":"运行中","planb.browser.status_idle":"空闲","planb.browser.status_error":"错误","planb.browser.status_stopped":"已停止","planb.browser.launch_error":"启动浏览器失败","planb.browser.close_error":"关闭会话失败","planb.browser.backend_not_configured":"SuperRPA 未配置,请设置 SGCLAW_SUPERRPA_PATH 环境变量。","planb.chat.welcome":"今天我能帮你什么?","planb.chat.placeholder":"问点什么...","planb.chat.sessions":"对话历史","planb.chat.new_chat":"新对话","planb.chat.no_sessions":"暂无对话历史","planb.chat.untitled":"未命名对话","planb.chat.thought":"思考","planb.chat.chip_browse":"浏览网页","planb.chat.chip_code":"写代码","planb.chat.chip_analyze":"分析数据","planb.chat.chip_plan":"帮我规划","planb.chat.regenerate":"重新生成","planb.settings.quick":"快速设置","planb.settings.advanced":"高级配置","planb.settings.quick_hint":"快速设置功能即将推出。现在请使用高级配置编辑器修改 TOML 配置。","planb.settings.open_advanced":"打开高级配置","dashboard.title":"仪表盘","dashboard.provider":"提供商","dashboard.model":"模型","dashboard.uptime":"运行时间","dashboard.temperature":"温度","dashboard.gateway_port":"网关端口","dashboard.memory_backend":"记忆后端","dashboard.paired":"已配对","dashboard.channels":"频道","dashboard.health":"健康状态","dashboard.status":"状态","dashboard.overview":"概览","dashboard.system_info":"系统信息","dashboard.quick_actions":"快速操作","agent.title":"智能体对话","agent.send":"发送","agent.placeholder":"输入消息...","agent.start_conversation":"发送消息开始对话","agent.type_message":"输入消息...","agent.connecting":"连接中...","agent.connected":"已连接","agent.disconnected":"已断开","agent.reconnecting":"重新连接中...","agent.thinking":"思考中...","agent.tool_call":"工具调用","agent.tool_result":"工具结果","agent.connection_error":"连接错误,正在尝试重连...","agent.tool_call_prefix":"[工具调用]","agent.tool_result_prefix":"[工具结果]","agent.error_prefix":"[错误]","agent.unknown_error":"未知错误","agent.send_error":"发送消息失败,请重试。","agent.copy_message":"复制消息","agent.connected_status":"已连接","agent.disconnected_status":"已断开","tools.title":"可用工具","tools.name":"名称","tools.description":"描述","tools.parameters":"参数","tools.search":"搜索工具...","tools.empty":"暂无可用工具。","tools.count":"工具总数","tools.agent_tools":"智能体工具箱","tools.cli_tools":"CLI 工具箱","tools.parameter_schema":"参数结构","tools.path":"路径","tools.version":"版本","tools.category":"类别","tools.load_error":"加载工具失败","cron.title":"定时任务","cron.scheduled_tasks":"定时任务","cron.add":"添加任务","cron.add_job":"添加任务","cron.add_modal_title":"添加 Cron 任务","cron.delete":"删除","cron.enable":"启用","cron.disable":"禁用","cron.name":"名称","cron.name_optional":"名称(可选)","cron.command":"命令","cron.command_required":"命令","cron.schedule":"计划","cron.schedule_required":"计划","cron.next_run":"下次执行","cron.last_run":"上次执行","cron.last_status":"上次状态","cron.enabled":"已启用","cron.enabled_status":"启用","cron.disabled_status":"禁用","cron.empty":"暂无定时任务。","cron.confirm_delete":"确定要删除此任务吗?","cron.load_error":"加载定时任务失败","cron.validation_error":"计划和命令是必需的。","cron.add_error":"添加任务失败","cron.delete_error":"删除任务失败","cron.cancel":"取消","cron.adding":"添加中...","cron.id":"ID","cron.actions":"操作","cron.loading_run_history":"加载运行历史...","cron.load_run_history_error":"加载运行历史失败","cron.no_runs":"暂无运行记录。","cron.recent_runs":"最近运行","cron.yes":"是","cron.no":"否","cron.edit":"编辑","cron.edit_modal_title":"编辑 Cron 任务","cron.edit_error":"更新任务失败","cron.saving":"保存中...","cron.save":"保存","integrations.title":"集成","integrations.available":"可用","integrations.active":"活跃","integrations.coming_soon":"即将推出","integrations.category":"类别","integrations.status":"状态","integrations.search":"搜索集成...","integrations.empty":"未找到集成。","integrations.activate":"激活","integrations.deactivate":"停用","integrations.load_error":"加载集成失败","integrations.status_active":"活跃","integrations.status_available":"可用","integrations.status_coming_soon":"即将推出","memory.title":"记忆存储","memory.memory_title":"记忆","memory.search":"搜索记忆...","memory.search_placeholder":"搜索记忆条目...","memory.add":"存储记忆","memory.add_memory":"添加记忆","memory.add_modal_title":"添加记忆","memory.delete":"删除","memory.key":"键","memory.key_required":"键","memory.content":"内容","memory.content_required":"内容","memory.category":"类别","memory.category_optional":"类别(可选)","memory.timestamp":"时间戳","memory.session":"会话","memory.score":"分数","memory.empty":"未找到记忆条目。","memory.confirm_delete":"确定要删除此记忆条目吗?","memory.all_categories":"所有类别","memory.search_button":"搜索","memory.load_error":"加载记忆失败","memory.saving":"保存中...","memory.validation_error":"键和内容是必需的。","memory.store_error":"保存记忆失败","memory.delete_error":"删除记忆失败","memory.delete_confirm":"删除?","memory.yes":"是","memory.no":"否","memory.cancel":"取消","config.title":"配置","config.save":"保存","config.saving":"保存中...","config.reset":"重置","config.saved":"配置保存成功。","config.error":"配置保存失败。","config.loading":"加载配置中...","config.editor_placeholder":"TOML 配置...","config.configuration_title":"配置","config.sensitive_title":"敏感字段已隐藏","config.sensitive_hint":"API 密钥、令牌和密码已隐藏以保护安全。要更新已隐藏的字段,请将整个隐藏值替换为您的新值。","config.save_success":"配置保存成功。","config.save_error":"保存配置失败","config.toml_label":"TOML 配置","config.lines":"行","cost.title":"成本追踪","cost.session":"会话成本","cost.daily":"每日成本","cost.monthly":"每月成本","cost.total_tokens":"总 Tokens","cost.request_count":"请求数","cost.by_model":"按模型统计","cost.model":"模型","cost.tokens":"Token","cost.requests":"请求","cost.usd":"成本(美元)","cost.load_error":"加载成本数据失败","cost.session_cost":"会话成本","cost.daily_cost":"每日成本","cost.monthly_cost":"每月成本","cost.total_requests":"总请求数","cost.token_statistics":"Token 统计","cost.avg_tokens_per_request":"平均 Token / 请求","cost.cost_per_1k_tokens":"每 1K Token 成本","cost.model_breakdown":"模型细分","cost.no_model_data":"没有模型数据可用。","cost.cost":"成本","cost.share":"占比","logs.title":"实时日志","logs.live_logs":"实时日志","logs.clear":"清除","logs.pause":"暂停","logs.resume":"继续","logs.filter":"筛选日志...","logs.filter_label":"筛选","logs.empty":"暂无日志条目。","logs.connected":"已连接","logs.disconnected":"已断开","logs.events":"事件","logs.jump_to_bottom":"跳转到底部","logs.paused_hint":"日志流已暂停。","logs.waiting_hint":"等待事件...","doctor.title":"系统诊断","doctor.diagnostics_title":"系统诊断","doctor.run":"运行诊断","doctor.run_diagnostics":"运行诊断","doctor.running":"正在运行诊断...","doctor.running_btn":"运行中...","doctor.running_desc":"正在运行诊断...","doctor.running_hint":"这可能需要几秒钟。","doctor.ok":"正常","doctor.warn":"警告","doctor.error":"错误","doctor.severity":"严重程度","doctor.category":"类别","doctor.message":"消息","doctor.empty":"尚未运行诊断。","doctor.summary":"诊断摘要","doctor.issues_found":"发现问题","doctor.warnings_summary":"警告","doctor.all_clear":"一切正常","doctor.system_diagnostics":"系统诊断","doctor.empty_hint":'点击"运行诊断"检查您的 ZeroClaw 安装。',"auth.pair":"配对设备","auth.pairing_code":"配对码","auth.pair_button":"配对","auth.logout":"退出","auth.pairing_success":"配对成功!","auth.pairing_failed":"配对失败,请重试。","auth.enter_code":"请输入配对码以连接到智能体。","common.loading":"加载中...","common.error":"发生错误。","common.retry":"重试","common.cancel":"取消","common.confirm":"确认","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.close":"关闭","common.yes":"是","common.no":"否","common.search":"搜索...","common.no_data":"暂无数据。","common.refresh":"刷新","common.back":"返回","common.actions":"操作","common.name":"名称","common.description":"描述","common.status":"状态","common.created":"创建时间","common.updated":"更新时间","health.title":"系统健康","health.component":"组件","health.status":"状态","health.last_ok":"上次正常","health.last_error":"上次错误","health.restart_count":"重启次数","health.pid":"进程 ID","health.uptime":"运行时间","health.updated_at":"最后更新","dashboard.provider_model":"提供商 / 模型","dashboard.since_last_restart":"自上次重启","dashboard.paired_yes":"是","dashboard.paired_no":"否","dashboard.cost_overview":"成本概览","dashboard.active_channels":"活跃频道","dashboard.filter_active":"活跃","dashboard.filter_all":"全部","dashboard.no_active_channels":"没有活跃频道","dashboard.component_health":"组件健康","dashboard.load_error":"加载仪表盘失败","dashboard.session_label":"会话","dashboard.daily_label":"每日","dashboard.monthly_label":"每月","dashboard.total_tokens_label":"总 Tokens","dashboard.requests_label":"请求","dashboard.no_channels":"未配置频道","dashboard.active":"活跃","dashboard.inactive":"非活跃","dashboard.no_components":"没有组件报告","dashboard.restarts":"重启次数","dashboard.tab_overview":"概览","dashboard.tab_sessions":"会话","dashboard.tab_channels":"频道","dashboard.sessions_title":"活跃会话","dashboard.no_sessions":"没有活跃会话","dashboard.session_id":"会话 ID","dashboard.session_channel":"频道","dashboard.session_started":"开始时间","dashboard.session_last_activity":"最近活动","dashboard.session_status":"状态","dashboard.session_messages":"消息数","dashboard.session_details":"会话详情","dashboard.session_history":"查看历史","dashboard.channels_title":"频道状态","dashboard.no_channels_detail":"没有频道详情","dashboard.channel_type":"类型","dashboard.channel_messages":"消息数","dashboard.channel_last_message":"最近消息","dashboard.channel_config":"配置摘要","dashboard.channel_enabled":"已启用","dashboard.channel_disabled":"已禁用","dashboard.loading_sessions":"加载会话中...","dashboard.loading_channels":"加载频道中...","dashboard.load_sessions_error":"加载会话失败","dashboard.load_channels_error":"加载频道失败","dashboard.never":"从未","settings.title":"设置","settings.tab.appearance":"外观","settings.tab.typography":"排版","settings.appearance":"外观设置","settings.typography":"字体设置","settings.fontUi":"界面字体","settings.fontMono":"代码字体","settings.fontSize":"界面字号","settings.fontMonoSize":"代码字号","settings.preview":"预览","settings.previewText":"界面字体预览文本","settings.fontNote":"字体设置需要刷新页面后生效","settings.language":"界面语言","theme.mode":"主题模式","theme.accent":"强调色","theme.system":"跟随系统","theme.dark":"深色","theme.light":"浅色","theme.oled":"纯黑","console.nav.commandDeck":"指挥舱","console.nav.missionCenter":"任务中心","console.nav.skillLibrary":"技能库","console.nav.dailyReport":"日报","console.nav.settings":"设置","console.role.finance":"财务","console.role.engineering":"工程","console.role.executive":"管理","console.role.hr":"人事","console.role.sales":"销售","console.state.loading":"加载中...","console.state.empty":"暂无数据","console.state.backendDown":"后端服务不可达","console.state.partialData":"部分数据源加载失败","console.state.stale":"数据已过期","console.state.unauthorized":"未授权","console.action.refresh":"刷新","console.action.approve":"批准","console.action.reject":"驳回","console.action.retry":"重试","console.action.create":"新建任务","console.skill.capabilityLevel":"能力等级","console.skill.enable":"启用","console.skill.disable":"停用","console.skill.core":"核心","console.skill.standard":"标准","console.skill.specialized":"专业","console.skill.experimental":"实验","console.report.dailyTitle":"日报","console.report.sourceLinks":"数据来源","console.report.noEvents":"当日无执行记录"},en:{"nav.dashboard":"Dashboard","nav.plans":"Plans","nav.execution":"Execution","nav.governance":"Governance","nav.scheduler":"Scheduler","nav.skills":"Skills","nav.agent":"Agent","nav.tools":"Tools","nav.cron":"Cron Jobs","nav.integrations":"Integrations","nav.memory":"Memory","nav.config":"Configuration","nav.cost":"Cost Tracker","nav.logs":"Logs","nav.devtools":"Tools","nav.swimlane":"Swimlane","nav.doctor":"Doctor","nav.canvas":"Canvas","planb.nav.chat":"Chat","planb.nav.browser":"AI Browser","planb.nav.dashboard":"Dashboard","planb.nav.settings":"Settings","planb.nav.more":"More Tools","planb.layout.switch_to_wide":"Switch to Desktop","planb.layout.switch_to_compact":"Switch to Compact","planb.layout.pop_out":"Pop Out Window","planb.browser.title":"AI Browser","planb.browser.subtitle":"Launch SuperRPA browser automation","planb.browser.launch":"Launch Browser","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Active Sessions","planb.browser.no_sessions":"No active browser sessions. Launch one above.","planb.browser.status_launching":"Launching","planb.browser.status_running":"Running","planb.browser.status_idle":"Idle","planb.browser.status_error":"Error","planb.browser.status_stopped":"Stopped","planb.browser.launch_error":"Failed to launch browser","planb.browser.close_error":"Failed to close session","planb.browser.backend_not_configured":"SuperRPA is not configured. Set SGCLAW_SUPERRPA_PATH environment variable.","planb.chat.welcome":"How can I help you today?","planb.chat.placeholder":"Ask anything...","planb.chat.sessions":"Chat History","planb.chat.new_chat":"New Chat","planb.chat.no_sessions":"No chat history","planb.chat.untitled":"Untitled","planb.chat.thought":"Thought","planb.chat.chip_browse":"Browse Web","planb.chat.chip_code":"Write Code","planb.chat.chip_analyze":"Analyze Data","planb.chat.chip_plan":"Plan Project","planb.chat.regenerate":"Regenerate","planb.settings.quick":"Quick Settings","planb.settings.advanced":"Advanced","planb.settings.quick_hint":"Quick settings are coming soon. Use the advanced editor to modify TOML configuration for now.","planb.settings.open_advanced":"Open Advanced Editor","dashboard.title":"Dashboard","dashboard.provider":"Provider","dashboard.model":"Model","dashboard.uptime":"Uptime","dashboard.temperature":"Temperature","dashboard.gateway_port":"Gateway Port","dashboard.memory_backend":"Memory Backend","dashboard.paired":"Paired","dashboard.channels":"Channels","dashboard.health":"Health","dashboard.status":"Status","dashboard.overview":"Overview","dashboard.system_info":"System Information","dashboard.quick_actions":"Quick Actions","agent.title":"Agent Chat","agent.send":"Send","agent.placeholder":"Type a message...","agent.start_conversation":"Send a message to start the conversation","agent.type_message":"Type a message...","agent.connecting":"Connecting...","agent.connected":"Connected","agent.disconnected":"Disconnected","agent.reconnecting":"Reconnecting...","agent.thinking":"Thinking...","agent.tool_call":"Tool Call","agent.tool_result":"Tool Result","agent.connection_error":"Connection error. Attempting to reconnect...","agent.tool_call_prefix":"[Tool Call]","agent.tool_result_prefix":"[Tool Result]","agent.error_prefix":"[Error]","agent.unknown_error":"Unknown error","agent.send_error":"Failed to send message. Please try again.","agent.copy_message":"Copy message","agent.connected_status":"Connected","agent.disconnected_status":"Disconnected","tools.title":"Available Tools","tools.name":"Name","tools.description":"Description","tools.parameters":"Parameters","tools.search":"Search tools...","tools.empty":"No tools available.","tools.count":"Total tools","tools.agent_tools":"Agent Tools","tools.cli_tools":"CLI Tools","tools.parameter_schema":"Parameter Schema","tools.path":"Path","tools.version":"Version","tools.category":"Category","tools.load_error":"Failed to load tools","cron.title":"Scheduled Jobs","cron.scheduled_tasks":"Scheduled Tasks","cron.add":"Add Job","cron.add_job":"Add Job","cron.add_modal_title":"Add Cron Job","cron.delete":"Delete","cron.enable":"Enable","cron.disable":"Disable","cron.name":"Name","cron.name_optional":"Name (optional)","cron.command":"Command","cron.command_required":"Command","cron.schedule":"Schedule","cron.schedule_required":"Schedule","cron.next_run":"Next Run","cron.last_run":"Last Run","cron.last_status":"Last Status","cron.enabled":"Enabled","cron.enabled_status":"Enabled","cron.disabled_status":"Disabled","cron.empty":"No scheduled jobs.","cron.confirm_delete":"Are you sure you want to delete this job?","cron.load_error":"Failed to load cron jobs","cron.validation_error":"Schedule and command are required.","cron.add_error":"Failed to add job","cron.delete_error":"Failed to delete job","cron.cancel":"Cancel","cron.adding":"Adding...","cron.id":"ID","cron.actions":"Actions","cron.loading_run_history":"Loading run history...","cron.load_run_history_error":"Failed to load run history","cron.no_runs":"No runs recorded yet.","cron.recent_runs":"Recent Runs","cron.yes":"Yes","cron.no":"No","cron.edit":"Edit","cron.edit_modal_title":"Edit Cron Job","cron.edit_error":"Failed to update job","cron.saving":"Saving...","cron.save":"Save","integrations.title":"Integrations","integrations.available":"Available","integrations.active":"Active","integrations.coming_soon":"Coming Soon","integrations.category":"Category","integrations.status":"Status","integrations.search":"Search integrations...","integrations.empty":"No integrations found.","integrations.activate":"Activate","integrations.deactivate":"Deactivate","integrations.load_error":"Failed to load integrations","integrations.status_active":"Active","integrations.status_available":"Available","integrations.status_coming_soon":"Coming Soon","memory.title":"Memory Store","memory.memory_title":"Memory","memory.search":"Search memory...","memory.search_placeholder":"Search memory entries...","memory.add":"Store Memory","memory.add_memory":"Add Memory","memory.add_modal_title":"Add Memory","memory.delete":"Delete","memory.key":"Key","memory.key_required":"Key","memory.content":"Content","memory.content_required":"Content","memory.category":"Category","memory.category_optional":"Category (optional)","memory.timestamp":"Timestamp","memory.session":"Session","memory.score":"Score","memory.empty":"No memory entries found.","memory.confirm_delete":"Are you sure you want to delete this memory entry?","memory.all_categories":"All Categories","memory.search_button":"Search","memory.load_error":"Failed to load memory","memory.saving":"Saving...","memory.validation_error":"Key and content are required.","memory.store_error":"Failed to store memory","memory.delete_error":"Failed to delete memory","memory.delete_confirm":"Delete?","memory.yes":"Yes","memory.no":"No","memory.cancel":"Cancel","config.title":"Configuration","config.save":"Save","config.saving":"Saving...","config.reset":"Reset","config.saved":"Configuration saved successfully.","config.error":"Failed to save configuration.","config.loading":"Loading configuration...","config.editor_placeholder":"TOML configuration...","config.configuration_title":"Configuration","config.sensitive_title":"Sensitive fields are masked","config.sensitive_hint":"API keys, tokens, and passwords are hidden for security. To update a masked field, replace the entire masked value with your new value.","config.save_success":"Configuration saved successfully.","config.save_error":"Failed to save configuration","config.toml_label":"TOML Configuration","config.lines":"lines","cost.title":"Cost Tracker","cost.session":"Session Cost","cost.daily":"Daily Cost","cost.monthly":"Monthly Cost","cost.total_tokens":"Total Tokens","cost.request_count":"Requests","cost.by_model":"Cost by Model","cost.model":"Model","cost.tokens":"Tokens","cost.requests":"Requests","cost.usd":"Cost (USD)","cost.load_error":"Failed to load cost data","cost.session_cost":"Session Cost","cost.daily_cost":"Daily Cost","cost.monthly_cost":"Monthly Cost","cost.total_requests":"Total Requests","cost.token_statistics":"Token Statistics","cost.avg_tokens_per_request":"Avg Tokens / Request","cost.cost_per_1k_tokens":"Cost per 1K Tokens","cost.model_breakdown":"Model Breakdown","cost.no_model_data":"No model data available.","cost.cost":"Cost","cost.share":"Share","logs.title":"Live Logs","logs.live_logs":"Live Logs","logs.clear":"Clear","logs.pause":"Pause","logs.resume":"Resume","logs.filter":"Filter logs...","logs.filter_label":"Filter","logs.empty":"No log entries.","logs.connected":"Connected","logs.disconnected":"Disconnected","logs.events":"events","logs.jump_to_bottom":"Jump to bottom","logs.paused_hint":"Log streaming is paused.","logs.waiting_hint":"Waiting for events...","doctor.title":"System Diagnostics","doctor.diagnostics_title":"Diagnostics","doctor.run":"Run Diagnostics","doctor.run_diagnostics":"Run Diagnostics","doctor.running":"Running diagnostics...","doctor.running_btn":"Running...","doctor.running_desc":"Running diagnostics...","doctor.running_hint":"This may take a few seconds.","doctor.ok":"OK","doctor.warn":"Warning","doctor.error":"Error","doctor.severity":"Severity","doctor.category":"Category","doctor.message":"Message","doctor.empty":"No diagnostics have been run yet.","doctor.summary":"Diagnostic Summary","doctor.issues_found":"Issues Found","doctor.warnings_summary":"Warnings","doctor.all_clear":"All Clear","doctor.system_diagnostics":"System Diagnostics","doctor.empty_hint":'Click "Run Diagnostics" to check your ZeroClaw installation.',"auth.pair":"Pair Device","auth.pairing_code":"Pairing Code","auth.pair_button":"Pair","auth.logout":"Logout","auth.pairing_success":"Pairing successful!","auth.pairing_failed":"Pairing failed. Please try again.","auth.enter_code":"Enter your pairing code to connect to the agent.","common.loading":"Loading...","common.error":"An error occurred.","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.close":"Close","common.yes":"Yes","common.no":"No","common.search":"Search...","common.no_data":"No data available.","common.refresh":"Refresh","common.back":"Back","common.actions":"Actions","common.name":"Name","common.description":"Description","common.status":"Status","common.created":"Created","common.updated":"Updated","health.title":"System Health","health.component":"Component","health.status":"Status","health.last_ok":"Last OK","health.last_error":"Last Error","health.restart_count":"Restarts","health.pid":"Process ID","health.uptime":"Uptime","health.updated_at":"Last Updated","dashboard.provider_model":"Provider / Model","dashboard.since_last_restart":"Since last restart","dashboard.paired_yes":"Yes","dashboard.paired_no":"No","dashboard.cost_overview":"Cost Overview","dashboard.active_channels":"Active Channels","dashboard.filter_active":"Active","dashboard.filter_all":"All","dashboard.no_active_channels":"No active channels","dashboard.component_health":"Component Health","dashboard.load_error":"Failed to load dashboard","dashboard.session_label":"Session","dashboard.daily_label":"Daily","dashboard.monthly_label":"Monthly","dashboard.total_tokens_label":"Total Tokens","dashboard.requests_label":"Requests","dashboard.no_channels":"No channels configured","dashboard.active":"Active","dashboard.inactive":"Inactive","dashboard.no_components":"No components reporting","dashboard.restarts":"Restarts","dashboard.tab_overview":"Overview","dashboard.tab_sessions":"Sessions","dashboard.tab_channels":"Channels","dashboard.sessions_title":"Active Sessions","dashboard.no_sessions":"No active sessions","dashboard.session_id":"Session ID","dashboard.session_channel":"Channel","dashboard.session_started":"Started","dashboard.session_last_activity":"Last Activity","dashboard.session_status":"Status","dashboard.session_messages":"Messages","dashboard.session_details":"Session Details","dashboard.session_history":"View History","dashboard.channels_title":"Channel Status","dashboard.no_channels_detail":"No channel details available","dashboard.channel_type":"Type","dashboard.channel_messages":"Messages","dashboard.channel_last_message":"Last Message","dashboard.channel_config":"Configuration","dashboard.channel_enabled":"Enabled","dashboard.channel_disabled":"Disabled","dashboard.loading_sessions":"Loading sessions...","dashboard.loading_channels":"Loading channels...","dashboard.load_sessions_error":"Failed to load sessions","dashboard.load_channels_error":"Failed to load channels","dashboard.never":"Never","settings.title":"Settings","settings.tab.appearance":"Appearance","settings.tab.typography":"Typography","settings.appearance":"Appearance","settings.typography":"Typography","settings.fontUi":"UI Font","settings.fontMono":"Code Font","settings.fontSize":"UI Font Size","settings.fontMonoSize":"Code Font Size","settings.preview":"Preview","settings.previewText":"The quick brown fox jumps over the lazy dog.","settings.fontNote":"Font changes apply on page reload.","settings.language":"Language","theme.mode":"Theme Mode","theme.accent":"Accent Color","theme.system":"System","theme.dark":"Dark","theme.light":"Light","theme.oled":"OLED Black","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"},tr:{"nav.dashboard":"Kontrol Paneli","nav.plans":"Planlar","nav.execution":"Yürütme","nav.governance":"Yönetişim","nav.scheduler":"Zamanlayıcı","nav.skills":"Beceriler","nav.agent":"Ajan","nav.tools":"Araçlar","nav.cron":"Cron Görevleri","nav.integrations":"Entegrasyonlar","nav.memory":"Hafıza","nav.config":"Yapılandırma","nav.cost":"Maliyet Takibi","nav.logs":"Kayıtlar","nav.devtools":"Araçlar","nav.swimlane":"Yüzme Şeridi","nav.doctor":"Doktor","nav.canvas":"Tuval","planb.nav.chat":"Sohbet","planb.nav.browser":"AI Tarayıcı","planb.nav.dashboard":"Kontrol Paneli","planb.nav.settings":"Ayarlar","planb.nav.more":"Daha Fazla","planb.layout.switch_to_wide":"Masaüstüne Geç","planb.layout.switch_to_compact":"Kompakta Geç","planb.layout.pop_out":"Pencereyi Ayır","planb.browser.title":"AI Tarayıcı","planb.browser.subtitle":"SuperRPA tarayıcı otomasyonunu başlat","planb.browser.launch":"Tarayıcıyı Başlat","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Aktif Oturumlar","planb.browser.no_sessions":"Aktif tarayıcı oturumu yok.","planb.browser.status_launching":"Başlatılıyor","planb.browser.status_running":"Çalışıyor","planb.browser.status_idle":"Boşta","planb.browser.status_error":"Hata","planb.browser.status_stopped":"Durduruldu","planb.browser.launch_error":"Tarayıcı başlatılamadı","planb.browser.close_error":"Oturum kapatılamadı","planb.browser.backend_not_configured":"SuperRPA yapılandırılmamış.","planb.chat.welcome":"Bugün size nasıl yardımcı olabilirim?","planb.chat.placeholder":"Bir şey sor...","planb.chat.sessions":"Sohbet Geçmişi","planb.chat.new_chat":"Yeni Sohbet","planb.chat.no_sessions":"Sohbet geçmişi yok","planb.chat.untitled":"Başlıksız","planb.chat.thought":"Düşünce","planb.chat.chip_browse":"Webde Gezin","planb.chat.chip_code":"Kod Yaz","planb.chat.chip_analyze":"Veri Analizi","planb.chat.chip_plan":"Proje Planla","planb.chat.regenerate":"Yeniden Oluştur","planb.settings.quick":"Hızlı Ayarlar","planb.settings.advanced":"Gelişmiş","planb.settings.quick_hint":"Hızlı ayarlar yakında gelecek. Şimdilik gelişmiş düzenleyiciyi kullanın.","planb.settings.open_advanced":"Gelişmiş Düzenleyiciyi Aç","dashboard.title":"Kontrol Paneli","dashboard.provider":"Sağlayıcı","dashboard.model":"Model","dashboard.uptime":"Çalışma Süresi","dashboard.temperature":"Sıcaklık","dashboard.gateway_port":"Ağ Geçidi Portu","dashboard.locale":"Dil","dashboard.memory_backend":"Hafıza Motoru","dashboard.paired":"Eşleştirilmiş","dashboard.channels":"Kanallar","dashboard.health":"Sağlık","dashboard.status":"Durum","dashboard.overview":"Genel Bakış","dashboard.system_info":"Sistem Bilgisi","dashboard.quick_actions":"Hızlı İşlemler","dashboard.provider_model":"Sağlayıcı / Model","dashboard.since_last_restart":"Son Yeniden Başlatmadan Beri","dashboard.paired_yes":"Evet","dashboard.paired_no":"Hayır","dashboard.cost_overview":"Maliyet Genel Bakışı","dashboard.active_channels":"Aktif Kanallar","dashboard.filter_active":"Aktif","dashboard.filter_all":"Tümü","dashboard.no_active_channels":"Aktif kanal yok","dashboard.component_health":"Bileşen Sağlığı","dashboard.load_error":"Kontrol paneli yüklenemedi","dashboard.session_label":"Oturum","dashboard.daily_label":"Günlük","dashboard.monthly_label":"Aylık","dashboard.total_tokens_label":"Toplam Token","dashboard.requests_label":"İstekler","dashboard.no_channels":"Kanal yapılandırılmamış","dashboard.active":"Aktif","dashboard.inactive":"Aktif Değil","dashboard.no_components":"Bileşen raporlamıyor","dashboard.restarts":"Yeniden Başlatmalar","dashboard.tab_overview":"Genel Bakış","dashboard.tab_sessions":"Oturumlar","dashboard.tab_channels":"Kanallar","dashboard.sessions_title":"Aktif Oturumlar","dashboard.no_sessions":"Aktif oturum yok","dashboard.session_id":"Oturum Kimliği","dashboard.session_channel":"Kanal","dashboard.session_started":"Başlangıç","dashboard.session_last_activity":"Son Etkinlik","dashboard.session_status":"Durum","dashboard.session_messages":"Mesajlar","dashboard.session_details":"Oturum Ayrıntıları","dashboard.session_history":"Geçmişi Görüntüle","dashboard.channels_title":"Kanal Durumu","dashboard.no_channels_detail":"Kanal ayrıntısı yok","dashboard.channel_type":"Tür","dashboard.channel_messages":"Mesajlar","dashboard.channel_last_message":"Son Mesaj","dashboard.channel_config":"Yapılandırma","dashboard.channel_enabled":"Etkin","dashboard.channel_disabled":"Devre Dışı","dashboard.loading_sessions":"Oturumlar yükleniyor...","dashboard.loading_channels":"Kanallar yükleniyor...","dashboard.load_sessions_error":"Oturumlar yüklenemedi","dashboard.load_channels_error":"Kanallar yüklenemedi","dashboard.never":"Hiç","agent.title":"Ajan Sohbeti","agent.send":"Gönder","agent.placeholder":"Bir mesaj yazın...","agent.start_conversation":"Sohbeti başlatmak için mesaj gönderin","agent.type_message":"Bir mesaj yazın...","agent.connecting":"Bağlanıyor...","agent.connected":"Bağlandı","agent.disconnected":"Bağlantı kesildi","agent.reconnecting":"Yeniden bağlanıyor...","agent.thinking":"Düşünüyor...","agent.tool_call":"Araç Çağrısı","agent.tool_result":"Araç Sonucu","agent.connection_error":"Bağlantı hatası. Yeniden bağlanmaya çalışılıyor...","agent.tool_call_prefix":"[Araç Çağrısı]","agent.tool_result_prefix":"[Araç Sonucu]","agent.error_prefix":"[Hata]","agent.unknown_error":"Bilinmeyen hata","agent.send_error":"Mesaj gönderilemedi. Lütfen tekrar deneyin.","agent.copy_message":"Mesajı kopyala","agent.connected_status":"Bağlandı","agent.disconnected_status":"Bağlantı kesildi","tools.title":"Mevcut Araçlar","tools.name":"Ad","tools.description":"Açıklama","tools.parameters":"Parametreler","tools.search":"Araç ara...","tools.empty":"Araç bulunamadı.","tools.count":"Toplam araç","tools.agent_tools":"Ajan Araçları","tools.cli_tools":"CLI Araçları","tools.parameter_schema":"Parametre Şeması","tools.path":"Yol","tools.version":"Sürüm","tools.category":"Kategori","tools.load_error":"Araçlar yüklenemedi","cron.title":"Zamanlanmış Görevler","cron.scheduled_tasks":"Zamanlanmış Görevler","cron.add":"Görev Ekle","cron.add_job":"Görev Ekle","cron.add_modal_title":"Cron Görevi Ekle","cron.delete":"Sil","cron.enable":"Etkinleştir","cron.disable":"Devre Dışı Bırak","cron.name":"Ad","cron.name_optional":"Ad (isteğe bağlı)","cron.command":"Komut","cron.command_required":"Komut","cron.schedule":"Zamanlama","cron.schedule_required":"Zamanlama","cron.next_run":"Sonraki Çalıştırma","cron.last_run":"Son Çalıştırma","cron.last_status":"Son Durum","cron.enabled":"Etkin","cron.enabled_status":"Etkin","cron.disabled_status":"Devre Dışı","cron.empty":"Zamanlanmış görev bulunamadı.","cron.confirm_delete":"Bu görevi silmek istediğinizden emin misiniz?","cron.load_error":"Cron görevleri yüklenemedi","cron.validation_error":"Zamanlama ve komut gereklidir.","cron.add_error":"Görev eklenemedi","cron.delete_error":"Görev silinemedi","cron.cancel":"İptal","cron.adding":"Ekleniyor...","cron.id":"ID","cron.actions":"İşlemler","cron.loading_run_history":"Çalıştırma geçmişi yükleniyor...","cron.load_run_history_error":"Çalıştırma geçmişi yüklenemedi","cron.no_runs":"Henüz çalıştırma kaydı yok.","cron.recent_runs":"Son Çalıştırmalar","cron.yes":"Evet","cron.no":"Hayır","cron.edit":"Düzenle","cron.edit_modal_title":"Cron Görevini Düzenle","cron.edit_error":"Görev güncellenemedi","cron.saving":"Kaydediliyor...","cron.save":"Kaydet","integrations.title":"Entegrasyonlar","integrations.available":"Mevcut","integrations.active":"Aktif","integrations.coming_soon":"Yakında","integrations.category":"Kategori","integrations.status":"Durum","integrations.search":"Entegrasyon ara...","integrations.empty":"Entegrasyon bulunamadı.","integrations.activate":"Etkinleştir","integrations.deactivate":"Devre Dışı Bırak","integrations.load_error":"Entegrasyonlar yüklenemedi","integrations.all":"Tümü","integrations.status_active":"Aktif","integrations.status_available":"Mevcut","integrations.status_coming_soon":"Yakında","memory.title":"Hafıza Deposu","memory.memory_title":"Hafıza","memory.search":"Hafıza ara...","memory.search_placeholder":"Hafıza girişleri ara...","memory.add":"Hafıza Ekle","memory.add_memory":"Hafıza Ekle","memory.add_modal_title":"Hafıza Ekle","memory.delete":"Sil","memory.key":"Anahtar","memory.key_required":"Anahtar","memory.content":"İçerik","memory.content_required":"İçerik","memory.category":"Kategori","memory.category_optional":"Kategori (isteğe bağlı)","memory.timestamp":"Zaman Damgası","memory.session":"Oturum","memory.score":"Puan","memory.empty":"Hafıza girişi bulunamadı.","memory.confirm_delete":"Bu hafıza girişini silmek istediğinizden emin misiniz?","memory.all_categories":"Tüm Kategoriler","memory.search_button":"Ara","memory.load_error":"Hafıza yüklenemedi","memory.saving":"Kaydediliyor...","memory.validation_error":"Anahtar ve içerik gereklidir.","memory.store_error":"Hafıza kaydedilemedi","memory.delete_error":"Hafıza silinemedi","memory.delete_confirm":"Sil?","memory.yes":"Evet","memory.no":"Hayır","memory.cancel":"İptal","config.title":"Yapılandırma","config.save":"Kaydet","config.saving":"Kaydediliyor...","config.reset":"Sıfırla","config.saved":"Yapılandırma başarıyla kaydedildi.","config.error":"Yapılandırma kaydedilemedi.","config.loading":"Yapılandırma yükleniyor...","config.editor_placeholder":"TOML yapılandırması...","config.configuration_title":"Yapılandırma","config.sensitive_title":"Hassas alanlar gizlendi","config.sensitive_hint":"API anahtarları, belirteçler ve parolalar güvenlik için gizlendi. Maskeli bir alanı güncellemek için, tüm maskeli değeri yeni değerinizle değiştirin.","config.save_success":"Yapılandırma başarıyla kaydedildi.","config.save_error":"Yapılandırma kaydedilemedi","config.toml_label":"TOML Yapılandırması","config.lines":"satır","cost.title":"Maliyet Takibi","cost.session":"Oturum Maliyeti","cost.daily":"Günlük Maliyet","cost.monthly":"Aylık Maliyet","cost.total_tokens":"Toplam Token","cost.request_count":"İstek Sayısı","cost.by_model":"Modele Göre Maliyet","cost.model":"Model","cost.tokens":"Token","cost.requests":"İstekler","cost.usd":"Maliyet (USD)","cost.load_error":"Maliyet verileri yüklenemedi","cost.session_cost":"Oturum Maliyeti","cost.daily_cost":"Günlük Maliyet","cost.monthly_cost":"Aylık Maliyet","cost.total_requests":"Toplam İstek","cost.token_statistics":"Token İstatistikleri","cost.avg_tokens_per_request":"Ortalama Token / İstek","cost.cost_per_1k_tokens":"1K Token Başına Maliyet","cost.model_breakdown":"Model Detayı","cost.no_model_data":"Model verisi mevcut değil.","cost.cost":"Maliyet","cost.share":"Pay","logs.title":"Canlı Kayıtlar","logs.live_logs":"Canlı Kayıtlar","logs.clear":"Temizle","logs.pause":"Duraklat","logs.resume":"Devam Et","logs.filter":"Kayıtları filtrele...","logs.filter_label":"Filtre","logs.empty":"Kayıt girişi bulunamadı.","logs.connected":"Bağlandı","logs.disconnected":"Bağlantı kesildi","logs.events":"olay","logs.jump_to_bottom":"En alta atla","logs.paused_hint":"Kayıt akışı duraklatıldı.","logs.waiting_hint":"Olay bekleniyor...","doctor.title":"Sistem Tanıları","doctor.diagnostics_title":"Tanılar","doctor.run":"Tanı Çalıştır","doctor.run_diagnostics":"Tanı Çalıştır","doctor.running":"Tanı çalıştırılıyor...","doctor.running_btn":"Çalıştırılıyor...","doctor.running_desc":"Tanı çalıştırılıyor...","doctor.running_hint":"Bu birkaç saniye sürebilir.","doctor.ok":"Tamam","doctor.warn":"Uyarı","doctor.error":"Hata","doctor.severity":"Şiddet","doctor.category":"Kategori","doctor.message":"Mesaj","doctor.empty":"Henüz tanı çalıştırılmadı.","doctor.summary":"Tanı Özeti","doctor.issues_found":"Sorunlar Bulundu","doctor.warnings_summary":"Uyarılar","doctor.all_clear":"Her Şey Yolunda","doctor.system_diagnostics":"Sistem Tanıları","doctor.empty_hint":'ZeroClaw kurulumunuzu kontrol etmek için "Tanı Çalıştır" düğmesine tıklayın.',"auth.pair":"Cihaz Eşleştir","auth.pairing_code":"Eşleştirme Kodu","auth.pair_button":"Eşleştir","auth.logout":"Çıkış Yap","auth.pairing_success":"Eşleştirme başarılı!","auth.pairing_failed":"Eşleştirme başarısız. Lütfen tekrar deneyin.","auth.enter_code":"Akıllı birine bağlanmak için eşleştirme kodunuzu girin.","common.loading":"Yükleniyor...","common.error":"Bir hata oluştu.","common.retry":"Tekrar Dene","common.cancel":"İptal","common.confirm":"Onayla","common.save":"Kaydet","common.delete":"Sil","common.edit":"Düzenle","common.close":"Kapat","common.yes":"Evet","common.no":"Hayır","common.search":"Ara...","common.no_data":"Veri mevcut değil.","common.refresh":"Yenile","common.back":"Geri","common.actions":"İşlemler","common.name":"Ad","common.description":"Açıklama","common.status":"Durum","common.created":"Oluşturulma","common.updated":"Güncellenme","health.title":"Sistem Sağlığı","health.component":"Bileşen","health.status":"Durum","health.last_ok":"Son Başarılı","health.last_error":"Son Hata","health.restart_count":"Yeniden Başlatmalar","health.pid":"İşlem Kimliği","health.uptime":"Çalışma Süresi","health.updated_at":"Son Güncelleme","settings.title":"Ayarlar","settings.tab.appearance":"Görünüm","settings.tab.typography":"Tipografi","settings.appearance":"Görünüm","settings.typography":"Tipografi","settings.fontUi":"Arayüz Yazı Tipi","settings.fontMono":"Kod Yazı Tipi","settings.fontSize":"Arayüz Boyutu","settings.fontMonoSize":"Kod Boyutu","settings.preview":"Önizleme","settings.previewText":"Tembel köpek üzerinde hızlı kahverengi tilki zıplar.","settings.fontNote":"Yazı tipi değişiklikleri sayfa yeniden yüklendikten sonra geçerli olur.","settings.language":"Dil","theme.mode":"Tema Modu","theme.accent":"Vurgu Rengi","theme.system":"Sistem","theme.dark":"Koyu","theme.light":"Açık","theme.oled":"OLED Siyah","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"}};let sE="zh";function jm(e){var a;return((a=Oy[sE])==null?void 0:a[e])??Oy.en[e]??e}const Fo=["qimingclaw-client-readiness","qimingclaw-remote-task-ingress","qimingclaw-daily-report"],rE=[{key:"all",label:"全部委托"},{key:"daily",label:"日常任务"},{key:"weekly",label:"周任务"},{key:"monthly",label:"月度任务"},{key:"adhoc",label:"临时任务"}];function wm(e){const a=typeof e.updated_at=="string"?e.updated_at:typeof e.created_at=="string"?e.created_at:"",l=a?new Date(a).getTime():0;return Number.isFinite(l)?l:0}function ki(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":[a.getFullYear(),String(a.getMonth()+1).padStart(2,"0"),String(a.getDate()).padStart(2,"0")].join("-")}function bi(){return ki(new Date().toISOString())}function qy(e,a){const l=e?new Date(`${e}T12:00:00`):new Date;return Number.isNaN(l.getTime())?bi():(l.setDate(l.getDate()+a),ki(l.toISOString()))}function lp(e){const a=`${e.title} ${e.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!a)return null;const l=Number(a[1]),r=Number(a[2]);return!Number.isInteger(l)||!Number.isInteger(r)||l>23||r>59?null:{text:`${String(l).padStart(2,"0")}:${String(r).padStart(2,"0")}`,minutes:l*60+r}}function ip(e){return e.steps.flatMap(a=>a.tasks.flatMap(l=>[l.startedAt,l.finishedAt])).filter(a=>!!a)}function cE(e,a){return ip(e).map(ki).filter(Boolean).includes(a)||lp(e)?!0:[e.updatedAt,e.createdAt].map(ki).includes(a)}function oE(e){return lp(e)&&`${e.title}`.trim().toLowerCase()||e.id}function dE(e,a){return ip(e).some(l=>ki(l)===a)}function Ly(e,a){const l=dE(e,a)?1e4:0,r=Fo.includes(e.id)?1e3:0,o=[e.updatedAt,e.createdAt].map(ki).includes(a)?100:0;return l+r+o+wm({updated_at:e.updatedAt||"",created_at:e.createdAt||""})/1e13}function uE(e,a){const l=new Map;for(const r of e){const o=oE(r),d=l.get(o);(!d||Ly(r,a)>Ly(d,a))&&l.set(o,r)}return Array.from(l.values())}function By(e,a){const l=lp(e);if(l)return l.minutes;const r=ip(e).filter(o=>ki(o)===a).sort();if(r[0]){const o=new Date(r[0]);return o.getHours()*60+o.getMinutes()}return 1440}function fE(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"monthly":a.includes("week")||a.includes("weekly")||a.includes("周")?"weekly":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"adhoc":"daily"}async function cx(e,a,l={}){const r=Date.now(),o=await Xo({command_kind:e,context_refs:a,payload:{source:"digital-mission-center",...l},correlation_id:`mission-${e}-${r}`,idempotency_key:`mission-${e}-${Object.values(a).join("-")||"new"}-${r}`});if(!o.accepted)throw new Error(o.message||`command 未被接受:${o.command_id||e}`);return o}async function ta(e,a,l={}){return cx(a,{plan_id:e},l)}async function Uy(e){const a=e.sourceIds.planId;if(!a)return null;const l=e.status.toLowerCase();if(l==="draft")await ta(a,"submit_plan",{requested_action:"mission_dispatch"}),await ta(a,"approve_plan",{requested_action:"mission_dispatch"});else if(l==="reviewing")await ta(a,"approve_plan",{requested_action:"mission_dispatch"});else if(!["approved","active","running"].includes(l))return await ta(a,"amend_plan",{requested_action:"reopen_for_execution",summary:"数字员工任务中心请求重新执行任务"}),null;return await ta(a,"activate_plan",{requested_action:"mission_dispatch"}),a}function mE(e){const a=e.steps.map((l,r)=>{const o=new Set;l.preferredSkills.forEach(p=>{p.trim()&&o.add(p)}),l.tasks.forEach(p=>{var h;(h=p.assignedSkillId)!=null&&h.trim()&&o.add(p.assignedSkillId)});const d=[l.description,...l.tasks.map(p=>p.description),l.title,e.objective,e.title].find(p=>typeof p=="string"&&p.trim());return{title:l.title||`${e.title} 第 ${r+1} 步`,description:d||l.title||e.objective||e.title,skills:Array.from(o),depends_on:r===0?[]:[`step-${r}`]}}).filter(l=>l.skills.length>0);if(a.length===0)throw new Error("当前任务没有可复用的 skill,不能创建真实重新执行计划。");return a}function ox(e){return`${e.replace(/(\s*重新执行)+$/u,"").trim()||e} 重新执行`}async function pE(e){var o,d;const a=await cx("create_plan",{session_id:"digital-mission-center",plan_id:e.sourceIds.planId||e.id},{requested_action:"mission_restart",title:ox(e.title),description:e.objective||e.title,steps:mE(e),original_plan_id:e.sourceIds.planId||e.id}),l=typeof((o=a.result)==null?void 0:o.plan_id)=="string"?a.result.plan_id:"";if(!l)throw new Error("重新执行计划已提交,但后端没有返回 plan_id。");const r=typeof((d=a.result)==null?void 0:d.status)=="string"?a.result.status.toLowerCase():"";return r==="draft"?(await ta(l,"submit_plan",{requested_action:"mission_restart"}),await ta(l,"approve_plan",{requested_action:"mission_restart"}),await ta(l,"activate_plan",{requested_action:"mission_restart"})):r==="reviewing"?(await ta(l,"approve_plan",{requested_action:"mission_restart"}),await ta(l,"activate_plan",{requested_action:"mission_restart"})):r==="approved"&&await ta(l,"activate_plan",{requested_action:"mission_restart"}),l}function _E({focusMissionId:e,focusTaskId:a,focusDate:l}){const r=l||bi(),[o,d]=v.useState([]),[p,h]=v.useState(null),[_,g]=v.useState(!0),[x,S]=v.useState(!1),[C,z]=v.useState("all"),[w,D]=v.useState(()=>r),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(!1),[ie,Z]=v.useState(null),[K,pe]=v.useState(null),[P,q]=v.useState(null),ce=v.useRef(null),R=v.useRef(!1);v.useEffect(()=>(R.current=!0,()=>{R.current=!1}),[]);const M=v.useCallback(async()=>{g(!0),S(!1);try{const ae=await uN();if(!R.current)return[];const he=new Map,Ie=Ke=>{const Dt=typeof Ke.plan_id=="string"?Ke.plan_id:"";Dt&&!he.has(Dt)&&he.set(Dt,Ke)};(Array.isArray(ae)?ae:[]).forEach(Ie);const V=Fo.filter(Ke=>!he.has(Ke));if(V.length>0){const Ke=await Promise.allSettled(V.map(async Dt=>({id:Dt,plans:await uy(Dt,20)})));for(const Dt of Ke)if(Dt.status==="fulfilled"){const wa=Dt.value.plans.find(Ci=>Ci.plan_id===Dt.value.id);wa&&Ie(wa)}}const Ce=Fo.map(Ke=>he.get(Ke)).filter(Ke=>!!Ke),He=[...[...he.entries()].filter(([Ke])=>!Fo.includes(Ke)).map(([,Ke])=>Ke).sort((Ke,Dt)=>wm(Dt)-wm(Ke)),...Ce];if(He.length>0){const Ke=jy(He);return d(Ke),Ke}return d([]),[]}catch(ae){return R.current?(console.error("[MissionCenter] fetch failed:",ae),d([]),S(!0),[]):[]}finally{R.current&&g(!1)}},[]);v.useEffect(()=>{M()},[M]),v.useEffect(()=>{D(l||bi()),k(!1)},[l]);const ne=v.useCallback(ae=>{h(ae),pe(ae.id),window.setTimeout(()=>{var he;(he=ce.current)==null||he.scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})},40)},[]),B=v.useCallback(ae=>{ne(ae),q({kind:"selected",missionId:ae.id,title:ae.title,planId:ae.sourceIds.planId})},[ne]);v.useEffect(()=>{if(!e&&!a)return;const ae=o.find(he=>he.id===e||he.sourceIds.planId===e||(a?he.sourceIds.taskIds.includes(a):!1));ae&&(z("all"),B(ae),window.setTimeout(()=>{var he;(he=document.getElementById(`mission-card-${Ad(ae.id)}`))==null||he.scrollIntoView({block:"center",behavior:"smooth"})},80))},[e,a,o,B]);const U=v.useCallback(async ae=>{if(O(ae.id),S(!1),Z(null),!ae.sourceIds.planId){Z("当前任务没有 qimingclaw Plan 记录,无法委托执行。"),O(null);return}try{const he=await Uy(ae),Ie=await M();if(z("all"),he){const V=Ie.find(Ce=>Ce.id===he||Ce.sourceIds.planId===he);if(V)ne(V),q({kind:"dispatched",missionId:V.id,title:V.title,planId:he});else{const Ce=await uy(he,5),yt=jy(Ce).find(He=>He.id===he);yt?(ne(yt),q({kind:"dispatched",missionId:yt.id,title:yt.title,planId:he})):h(null)}}else h(V=>(V==null?void 0:V.id)===ae.id?null:V)}catch(he){console.error("[MissionCenter] dispatch failed:",he),S(!1),Z(he instanceof Error?he.message:"任务委托失败")}finally{O(null)}},[M,ne]),le=v.useCallback(async ae=>{if(O(ae.id),S(!1),Z(null),!ae.sourceIds.planId){Z("当前任务没有 qimingclaw Plan 记录,无法重新执行。"),O(null);return}try{const he=await pE(ae),Ie=await M();z("all");const V=Ie.find(Ce=>Ce.id===he||Ce.sourceIds.planId===he);V?(ne(V),q({kind:"created",missionId:V.id,title:V.title,planId:he})):(pe(he),q({kind:"created",missionId:he,title:ox(ae.title),planId:he}))}catch(he){console.error("[MissionCenter] restart failed:",he),S(!1),Z(he instanceof Error?he.message:"重新执行失败")}finally{O(null)}},[M,ne]),de=w||bi(),Te=uE(N?o:o.filter(ae=>cE(ae,de)),de),E=Te.filter(ae=>ae.sourceIds.planId&&["draft","reviewing","approved"].includes(ae.status.toLowerCase())),J=v.useCallback(async()=>{if(E.length!==0){I(!0),S(!1);try{for(const ae of E)O(ae.id),await Uy(ae);await M(),h(null)}catch(ae){console.error("[MissionCenter] batch dispatch failed:",ae),S(!1),Z(ae instanceof Error?ae.message:"批量委托失败")}finally{O(null),I(!1)}}},[M,E]),ue=(C==="all"?Te:Te.filter(ae=>fE(ae)===C)).map((ae,he)=>({mission:ae,index:he})).sort((ae,he)=>{const Ie=V=>(V.id===K?2:0)+(V.id===(p==null?void 0:p.id)?1:0);return Ie(he.mission)-Ie(ae.mission)||By(ae.mission,de)-By(he.mission,de)||ae.index-he.index}).map(({mission:ae})=>ae),ve=(P==null?void 0:P.kind)==="created"?"刚创建重新执行任务":(P==null?void 0:P.kind)==="dispatched"?"刚委托执行任务":"当前查看任务",Ee=ae=>ae.id!==K?null:(P==null?void 0:P.missionId)===ae.id&&P.kind==="created"?"刚创建":(P==null?void 0:P.missionId)===ae.id&&P.kind==="dispatched"?"刚委托":"当前查看";return s.jsx("div",{className:"de-mission-center-page",children:s.jsxs("div",{className:"de-mission-center-layout",children:[s.jsx("div",{className:"de-mc-list",children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"任务委托",children:[s.jsx("button",{onClick:J,className:"de-btn-primary de-btn-sm",disabled:te||E.length===0,children:te?"委托中...":`委托可执行任务(${E.length})`}),s.jsx("button",{onClick:M,className:"de-btn-secondary de-btn-sm",children:jm("console.action.refresh")})]}),s.jsxs("div",{className:"de-card-body",children:[ie&&s.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:ie}),P&&s.jsxs("div",{className:"de-mission-focus-notice",children:[s.jsx("strong",{children:ve}),s.jsx("span",{children:P.title}),P.planId&&s.jsx("code",{children:P.planId})]}),s.jsxs("div",{className:"de-date-filter-row",children:[s.jsxs("label",{className:"de-date-filter-field",children:[s.jsx("span",{children:"选择日期"}),s.jsx("input",{type:"date",value:de,onChange:ae=>{k(!1),D(ae.target.value||bi())}})]}),s.jsxs("div",{className:"de-date-filter-actions","aria-label":"日期切换",children:[s.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{k(!1),D(qy(de,-1))},children:"前一天"}),s.jsx("button",{type:"button",className:"de-filter-chip active",onClick:()=>{k(!1),D(bi())},children:"今天"}),s.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{k(!1),D(qy(de,1))},children:"后一天"})]}),s.jsx("span",{className:"de-date-filter-summary",children:N?`全部 ${Te.length} 项任务`:`${Te.length} 项任务`})]}),s.jsx("div",{className:"de-filter-row",children:rE.map(ae=>s.jsx("button",{className:`de-filter-chip ${C===ae.key?"active":""}`,onClick:()=>z(ae.key),children:ae.label},ae.key))}),_?s.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):x?s.jsx("p",{className:"de-empty-text",children:jm("console.state.backendDown")}):ue.length===0?s.jsxs("div",{className:"de-mission-empty-panel",children:[s.jsx("strong",{children:"当前日期暂无任务"}),s.jsx("p",{children:"这个日期没有匹配到 qimingclaw 任务记录,可以临时查看全部任务。"}),s.jsxs("div",{className:"de-mission-empty-actions",children:[s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>{k(!0),z("all")},children:"查看全部任务"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{k(!1),D(l||bi())},children:"返回当前日期"})]})]}):s.jsx("div",{className:"de-mc-card-list",children:ue.map(ae=>s.jsx(P2,{mission:ae,selected:(p==null?void 0:p.id)===ae.id,focusLabel:Ee(ae),dateFilter:de,running:A===ae.id,onSelect:B,onRun:U,onRestart:le},ae.id))})]})]})}),s.jsx("div",{className:"de-mc-detail",ref:ce,children:p?s.jsx(iE,{mission:p,onClose:()=>h(null)}):s.jsx(gn,{children:s.jsx("div",{className:"de-card-body",children:s.jsxs("div",{className:"de-mission-empty-panel de-mission-empty-panel--detail",children:[s.jsx("strong",{children:"选择一个任务后,右侧会显示执行步骤、运行记录和交付结果。"}),s.jsx("p",{children:"任务详情会优先展示 qimingclaw 本地 Plan / Task / Run / Event 记录,以及从执行 payload 中整理出的产物线索。"})]})})})})]})})}const hE=[{value:"all",label:"全部任务"},{value:"daily",label:"日常任务"},{value:"weekly",label:"周任务"},{value:"monthly",label:"月度任务"},{value:"adhoc",label:"临时任务"}],gE={daily:"日常",weekly:"周",monthly:"月度",adhoc:"临时"},yE={allow:"白名单",deny:"黑名单",open:"开放",disabled:"停用"};function dx(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/weekly|week|周/.test(a)?"weekly":/monthly|month|月报|月度/.test(a)?"monthly":/monitor|crawler|巡检|监控|待办|日程|日报|日终|收件箱|工作台|客户跟进/.test(a)?"daily":"adhoc"}function em(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return e.capabilityLevel==="specialized"||e.capabilityLevel==="experimental"||/加密|深度|分析|自动化|部署|代码|审查|调研|批量|converter|crypto|github|deploy|review|research/.test(a)}function bE(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/日报|周报|报表|待办|日程|巡检|客户|知识库|经营|费用|收件箱|工作台/.test(a)}function vE(e){const a=e.name,l=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/report|报表|日报|周报|月报|汇报/.test(l)?`自动整理${a}材料,减少手工汇总和重复填报。`:/monitor|巡检|监控|预警/.test(l)?`按约定频率完成${a},及时提示异常和遗漏。`:/todo|待办|task|看板|日程/.test(l)?`帮你梳理${a},把后续处理事项集中呈现。`:/客户|crm|回访|满意/.test(l)?"汇总客户相关信息,形成可直接跟进的处理建议。":/知识|文档|制度|模板/.test(l)?"查找和核对资料内容,减少人工翻找和版本确认。":e.description}function xE(e,a,l){return e.enabled?"已学习":e.enabled?l?"需确认后学习":a?"建议学习":"可学习":"暂不使用"}function kE(e){var l,r;const a=[];return e.serverId&&a.push(e.serverId),e.running!==null&&e.running!==void 0&&a.push(e.running?"运行中":"未运行"),e.policySource==="remote"&&a.push("远端策略"),e.remotePolicy&&e.remotePolicy.enabled===!1&&a.push("管理端禁用"),e.governancePolicy&&a.push(yE[e.governancePolicy]),typeof e.toolCount=="number"&&a.push(`${e.toolCount} 工具`),(l=e.allowTools)!=null&&l.length&&a.push(`allow ${e.allowTools.length}`),(r=e.denyTools)!=null&&r.length&&a.push(`deny ${e.denyTools.length}`),a.slice(0,5)}function SE(e){var r;const a=(r=e.recentCalls)==null?void 0:r[0];return a?`${a.toolName?`${a.toolName} · `:""}${a.message||a.status||"最近调用"}`:typeof e.callCount=="number"&&e.callCount>0?`${e.callCount} 次调用`:null}function jE({skill:e,recommended:a=!1,advanced:l=!1,selected:r=!1,updating:o=!1,onSelect:d,onToggle:p,onAudit:h}){const _=dx(e),g=xE(e,a,l),x=kE(e),S=SE(e);return s.jsxs("div",{id:`skill-card-${Ad(e.id)}`,className:`de-skill-card ${r?"de-skill-card--selected":""}`,role:"button",tabIndex:0,onClick:()=>d==null?void 0:d(e),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),d==null||d(e))},children:[s.jsxs("div",{className:"de-skill-card-head",children:[s.jsx("span",{className:"de-skill-name",children:e.name}),s.jsx("span",{className:`de-skill-status ${e.enabled?"enabled":"disabled"}`,children:g})]}),s.jsx("p",{className:"de-skill-desc",children:vE(e)}),x.length>0&&s.jsx("div",{className:"de-skill-meta-row",children:x.map(C=>s.jsx("span",{className:"de-skill-meta-chip",children:C},C))}),S&&s.jsxs("p",{className:"de-skill-recent",children:["最近:",S]}),s.jsxs("div",{className:"de-skill-card-foot",children:[s.jsxs("span",{className:"de-skill-version",children:["适用任务:",gE[_]]}),s.jsx("button",{className:`de-skill-btn ${e.enabled?"de-skill-btn--danger":""}`,disabled:o,title:e.enabled?"暂时停用此技能,后续路由不会选择它。":"恢复使用此技能。",onClick:C=>{C.stopPropagation(),o||p==null||p(e)},children:o?"处理中...":e.enabled?"暂不使用":"恢复使用"}),s.jsx("button",{className:"de-skill-btn",title:"查看该技能的调用审计。",onClick:C=>{C.stopPropagation(),h==null||h(e)},children:"技能审计"})]})]})}function wE({focusSkillId:e,onNavigate:a}){const[l,r]=v.useState([]),[o,d]=v.useState(!0),[p,h]=v.useState(!1),[_,g]=v.useState(""),[x,S]=v.useState("all"),[C,z]=v.useState(e??null),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null),ie=v.useRef(!1);v.useEffect(()=>(ie.current=!0,()=>{ie.current=!1}),[]);const Z=v.useCallback(async()=>{d(!0),h(!1);try{const E=await pN();if(!ie.current)return;r(Array.isArray(E)?O2(E):[])}catch(E){if(!ie.current)return;console.error("[SkillLibrary] fetch failed:",E),r([]),h(!0)}finally{ie.current&&d(!1)}},[]);v.useEffect(()=>{Z()},[Z]),v.useEffect(()=>{e&&(z(e),S("all"),g(""),window.setTimeout(()=>{var E;(E=document.getElementById(`skill-card-${Ad(e)}`))==null||E.scrollIntoView({block:"center",behavior:"smooth"})},80))},[e,l.length]);const K=v.useCallback(async E=>{const J=!E.enabled;D(E.id),O(null),I(null);try{const se=await _N(E.id,J);if(!se.ok)throw new Error(se.error||"技能状态变更失败");r(ue=>ue.map(ve=>ve.id===E.id?{...ve,enabled:J}:ve)),z(E.id)}catch(se){O(se instanceof Error?se.message:"技能状态变更失败")}finally{D(null)}},[]),pe=v.useCallback(async()=>{k(!0),O(null),I(null);try{const E=await Hv();if(!E.ok)throw new Error(E.error||"技能策略拉取失败");await Z(),I(E.skipped?"技能策略无需重复拉取。":"技能策略已更新。")}catch(E){O(E instanceof Error?E.message:"技能策略拉取失败")}finally{k(!1)}},[Z]),P=l.filter(E=>x==="all"||dx(E)===x).filter(E=>_?[E.name,E.description,E.category,E.serverId,...E.tools??[],...E.allowTools??[],...E.denyTools??[]].filter(Boolean).join(" ").includes(_):!0),q=P.filter(em),ce=new Set(q.map(E=>E.id)),R=P.filter(E=>E.enabled&&!ce.has(E.id)),M=P.filter(E=>!E.enabled&&bE(E)&&!em(E)),ne=P.filter(E=>!E.enabled&&!em(E)),B=(M.length>0?M:ne).slice(0,4),U=new Set(B.map(E=>E.id)),le=ne.filter(E=>!U.has(E.id)),de=[{key:"recommended",title:"推荐学习",hint:"优先补齐高频工作能力,适合让数字员工尽快接手重复事务。",skills:B,emptyText:"暂无推荐学习项。"},{key:"learnable",title:"可学习技能",hint:"可纳入数字员工日常工作的业务能力,学习入口待接入后启用。",skills:le,emptyText:"当前没有可学习技能。"},{key:"learned",title:"已学技能",hint:"数字员工已经掌握并可被业务场景调用的能力。",skills:R,emptyText:"当前还没有已学习技能。"},{key:"advanced",title:"高级技能",hint:"适合有明确边界或需要确认后再交给数字员工处理的能力。",skills:q,emptyText:"暂无高级技能。"}],Te=E=>s.jsxs("section",{style:{display:"grid",gap:10},children:[s.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12},children:[s.jsxs("div",{children:[s.jsx("h3",{style:{margin:0,fontSize:16,color:"var(--de-text-primary)"},children:E.title}),s.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"var(--de-text-muted)"},children:E.hint})]}),s.jsxs("span",{className:"de-capability-badge de-capability-standard",children:[E.skills.length," 项"]})]}),E.skills.length===0?s.jsx("p",{className:"de-empty-text",style:{margin:0},children:E.emptyText}):s.jsx("div",{className:"de-skill-grid",children:E.skills.map(J=>s.jsx(jE,{skill:J,recommended:E.key==="recommended",advanced:E.key==="advanced",selected:C===J.id,updating:w===J.id,onSelect:se=>z(se.id),onToggle:K,onAudit:se=>a==null?void 0:a({tab:"skill-audit",auditSkillId:se.id})},`${E.key}-${J.id}`))})]},E.key);return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"学习技能",children:[s.jsx("button",{onClick:pe,disabled:N,className:"de-btn-secondary de-btn-sm",children:N?"拉取中...":"拉取策略"}),s.jsx("button",{onClick:Z,className:"de-btn-secondary de-btn-sm",children:"刷新"})]}),s.jsxs("div",{className:"de-card-body",children:[A&&s.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:A}),te&&s.jsx("div",{className:"de-schedule-result",style:{marginBottom:12},children:te}),s.jsxs("div",{className:"de-skill-toolbar",children:[s.jsx("input",{type:"text",className:"de-input",placeholder:"搜索业务能力...",value:_,onChange:E=>g(E.target.value)}),s.jsx("div",{className:"de-filter-row",children:hE.map(E=>s.jsx("button",{className:`de-filter-chip ${x===E.value?"active":""}`,onClick:()=>S(E.value),children:E.label},E.value))})]}),o?s.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):p?s.jsx("p",{className:"de-empty-text",children:"技能目录暂不可用,请检查 qimingclaw bridge 或稍后刷新。"}):P.length===0&&l.length>0?s.jsx("p",{className:"de-empty-text",children:"无匹配技能,请调整搜索或筛选条件"}):P.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无可展示的学习技能。"}):s.jsx("div",{style:{display:"grid",gap:18},children:de.map(Te)})]})]})})}const CE={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:12},Uo={border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"};function NE(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function EE(e){return(e==null?void 0:e.status)==="ready"?"已生成":(e==null?void 0:e.status)==="generating"?"生成中":(e==null?void 0:e.status)==="failed"?"生成失败":"待生成"}function AE(e){return(e==null?void 0:e.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}function TE(e){return e?e.generated_by==="ai"?`AI 已生成日报${e.model?`:${e.model}`:""}`:"AI 不可用时已使用规则兜底生成日报":"AI 将基于当天任务和运行明细生成日报"}function RE(e){if(!e)return[];const a=e.duties.filter(l=>l.selected).map(l=>l.id);return a.length>0?a:e.duties.filter(l=>l.implemented).map(l=>l.id)}function ux(e){if(!e)return"暂未生成";const a=new Date(e);return Number.isNaN(a.getTime())?e:a.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function $E(e,a){const l=new Blob([a],{type:"text/plain;charset=utf-8"}),r=URL.createObjectURL(l),o=document.createElement("a");o.href=r,o.download=e,document.body.appendChild(o),o.click(),o.remove(),window.setTimeout(()=>URL.revokeObjectURL(r),1e3)}function Iy(e,a,l){const r=new Blob([a],{type:l}),o=URL.createObjectURL(r),d=document.createElement("a");d.href=o,d.download=e,document.body.appendChild(d),d.click(),d.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}function DE(e){const a=window.atob(e),l=new Uint8Array(a.length);for(let r=0;r0?l.map(d=>`- ${d.title}:${d.latest_status_label},执行 ${d.total_count} 次,成功 ${d.success_count},失败 ${d.failure_count}。${d.ai_summary||d.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...r.length>0?r.map(d=>`- ${d.time||"--:--"} ${d.task_name} / ${d.step_name||d.operation_name||"任务执行"}:${d.status_label},${d.business_detail}`):["暂无运行明细。"],"","## 产物来源",...o.length>0?o.map(d=>`- ${d.name}:${d.source_label||d.source_type||"未知来源"}${d.uri?`,${d.uri}`:""}`):["暂无产物来源。"],"","## 详情",...(a.detail_lines??[]).length>0?a.detail_lines:["暂无详情。"]].join(` -`)}function ME({sections:e}){return e.length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"今天还没有可汇总的任务。"}):s.jsx("div",{className:"de-task-summary-grid","aria-label":"日报任务汇总",children:e.map(a=>s.jsxs("div",{className:`de-task-summary-card de-live-feed-row--${a.latest_status_tone||"info"}`,children:[s.jsx("span",{className:"de-task-summary-title",children:a.title}),s.jsx("span",{className:"de-badge de-badge-info",children:a.latest_status_label}),s.jsxs("strong",{children:["执行次数 ",a.total_count]}),s.jsxs("small",{children:["成功次数 ",a.success_count," · 失败次数 ",a.failure_count]}),s.jsx("em",{children:a.ai_summary||a.business_summary})]},a.id))})}function OE({details:e}){return e.length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"任务执行后,这里会展示时间、任务、步骤和执行情况。"}):s.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"日报运行明细",children:[s.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[s.jsx("span",{children:"时间"}),s.jsx("span",{children:"任务名称"}),s.jsx("span",{children:"步骤名称"}),s.jsx("span",{children:"执行状态"}),s.jsx("span",{children:"执行情况"})]}),e.map(a=>s.jsxs("div",{className:`de-run-detail-row de-live-feed-row--${a.status_tone||"info"}`,children:[s.jsx("span",{children:a.time||"--:--"}),s.jsx("strong",{children:a.task_name}),s.jsx("em",{children:a.step_name||a.operation_name||"任务执行"}),s.jsx("i",{className:"de-badge de-badge-info",children:a.status_label}),s.jsx("span",{children:a.business_detail})]},a.id))]})}function qE({artifacts:e}){var D,N;const[a,l]=v.useState(null),[r,o]=v.useState(null),[d,p]=v.useState(null),[h,_]=v.useState(null);if(e.length===0)return s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"运行产物出现后,这里会展示文件、输出和来源记录。"});const g=(k,A)=>({...k,retention_status:String((A==null?void 0:A.retention_status)||k.retention_status||"unmanaged"),retention_until:String((A==null?void 0:A.retention_until)||k.retention_until||"")||null,last_retention_action:String((A==null?void 0:A.last_retention_action)||k.last_retention_action||"")||null,cleanup_status:String((A==null?void 0:A.cleanup_status)||k.cleanup_status||"")||null,deleted_at:String((A==null?void 0:A.deleted_at)||k.deleted_at||"")||null,cleanup_reason:String((A==null?void 0:A.cleanup_reason)||k.cleanup_reason||"")||null,cleanup_event_id:String((A==null?void 0:A.cleanup_event_id)||k.cleanup_event_id||"")||null,access:(A==null?void 0:A.access)||k.access}),x=async(k,A)=>{if(!k.id||a)return;const O=`${k.id}:${A}`;l(O),o(null);try{const te=await Xv(k.id,A);if(!(te!=null&&te.ok)){o((te==null?void 0:te.error)||"产物访问被拒绝");return}if(A==="preview"){const I=te.preview||{};p({title:String(I.name||k.name||"产物预览"),text:String(I.text||`${I.mime||k.kind||"artifact"} · ${I.size??"unknown"}`)})}else o(A==="download"?"已打开产物":"已打开位置")}catch(te){o(te instanceof Error?te.message:"产物访问失败")}finally{l(null)}},S=async k=>{if(!(!k.id||a)){l(`${k.id}:detail`),o(null);try{const[A,O]=await Promise.all([Oo(k.id),qo(k.id)]);_({artifact:g(k,A),item:A,versions:O})}catch(A){o(A instanceof Error?A.message:"读取产物详情失败")}finally{l(null)}}},C=async k=>{const A=h==null?void 0:h.artifact;if(!(!(A!=null&&A.id)||a)){l(`${A.id}:${k}`),o(null);try{const O=await gN(A.id,k,{reason:"digital_employee_artifact_governance"});if(!(O!=null&&O.ok)){o((O==null?void 0:O.error)||"保留策略写入失败");return}const[te,I]=await Promise.all([Oo(A.id),qo(A.id)]);_({artifact:g(A,te),item:te,versions:I}),o("保留策略已记录")}catch(O){o(O instanceof Error?O.message:"保留策略写入失败")}finally{l(null)}}},z=async()=>{const k=h==null?void 0:h.artifact;if(!(!(k!=null&&k.id)||a)){l(`${k.id}:cleanup`),o(null);try{const A=await yN(k.id,{reason:"digital_employee_artifact_cleanup",retention_status:k.retention_status||null,last_retention_action:k.last_retention_action||null});if(!(A!=null&&A.ok)){o((A==null?void 0:A.error)||"清理文件失败");return}const[O,te]=await Promise.all([Oo(k.id),qo(k.id)]);_({artifact:g(k,O),item:O,versions:te}),o("清理已记录")}catch(A){o(A instanceof Error?A.message:"清理文件失败")}finally{l(null)}}},w=async()=>{if(a)return;const k=e.map(A=>A.id).filter(Boolean);if(k.length!==0){l("artifact-batch:mark_expire"),o(null);try{const A=await Jv(k,"mark_expire",{reason:"digital_employee_daily_report_batch_retention"});if(!(A!=null&&A.ok)){o((A==null?void 0:A.error)||"批量标记到期失败");return}if(h!=null&&h.artifact.id){const[O,te]=await Promise.all([Oo(h.artifact.id),qo(h.artifact.id)]);_({artifact:g(h.artifact,O),item:O,versions:te})}o(`批量标记到期已记录:${A.recorded??0}/${A.total??k.length}`)}catch(A){o(A instanceof Error?A.message:"批量标记到期失败")}finally{l(null)}}};return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"de-artifact-retention-actions",children:s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>{w()},children:"批量标记到期"})}),s.jsx("div",{className:"de-artifact-source-list","aria-label":"日报产物来源",children:e.map(k=>{var I,ie,Z,K;const A=!!((I=k.access)!=null&&I.previewable),O=!!((ie=k.access)!=null&&ie.downloadable),te=!!((Z=k.access)!=null&&Z.openable);return s.jsxs("div",{className:"de-artifact-source-row",children:[s.jsx("strong",{children:k.name}),s.jsx("span",{children:k.source_label||k.source_type||"未知来源"}),s.jsxs("div",{className:"de-artifact-source-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!A||a!==null,onClick:()=>x(k,"preview"),title:"预览","aria-label":"预览",children:s.jsx(ed,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!O||a!==null,onClick:()=>x(k,"download"),title:"下载","aria-label":"下载",children:s.jsx(ws,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!te||a!==null,onClick:()=>x(k,"open_location"),title:"位置","aria-label":"位置",children:s.jsx(JS,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:a!==null,onClick:()=>S(k),title:"版本","aria-label":"版本",children:s.jsx(FS,{size:15})})]}),s.jsxs("div",{className:"de-artifact-source-meta",children:[s.jsx("span",{children:k.version||"local-v1"}),s.jsx("span",{children:k.retention_status||"unmanaged"}),k.cleanup_status?s.jsx("span",{children:k.cleanup_status}):null,k.delivery_status?s.jsx("span",{children:k.delivery_status}):null,(K=k.access)!=null&&K.last_access_status?s.jsx("span",{children:k.access.last_access_status}):null]}),k.uri?s.jsx("code",{children:k.uri}):s.jsx("em",{children:k.kind||"artifact"})]},k.id)})}),r?s.jsx("p",{className:"de-inline-notice",children:r}):null,d?s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:d.title}),s.jsx("button",{type:"button",className:"de-btn-secondary",onClick:()=>p(null),children:"关闭"})]}),s.jsx("pre",{children:d.text})]}):null,h?s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:h.artifact.name}),s.jsx("button",{type:"button",className:"de-btn-secondary",onClick:()=>_(null),children:"关闭"})]}),s.jsxs("div",{className:"de-artifact-source-meta",children:[s.jsx("span",{children:h.artifact.retention_status||"unmanaged"}),h.artifact.cleanup_status?s.jsx("span",{children:h.artifact.cleanup_status}):null,h.artifact.deleted_at?s.jsx("span",{children:h.artifact.deleted_at}):null]}),s.jsxs("div",{className:"de-artifact-retention-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_keep"),children:"保留"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_expire"),children:"到期"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_review"),children:"复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("clear_retention"),children:"清除"}),s.jsxs("button",{type:"button",className:"de-btn-secondary",disabled:a!==null||h.artifact.cleanup_status==="deleted"||!(h.artifact.retention_status==="expired"||h.artifact.last_retention_action==="mark_expire")||!((D=h.artifact.access)!=null&&D.downloadable||(N=h.artifact.access)!=null&&N.openable),onClick:()=>{z()},children:[s.jsx(wb,{size:14})," 清理文件"]})]}),s.jsx("div",{className:"de-artifact-version-list",children:(h.versions.length>0?h.versions:[h.item]).filter(Boolean).map(k=>{var A;return s.jsxs("div",{children:[s.jsx("strong",{children:String(k.version||"local-v1")}),s.jsx("span",{children:String(((A=k.delivery_summary)==null?void 0:A.delivery_status)||k.source_label||"未记录")}),s.jsx("em",{children:String(k.created_at||"")})]},String(k.artifact_id||k.version_key||k.created_at))})})]}):null]})}function LE({focusSection:e}){const a=v.useMemo(()=>NE(),[]),[l,r]=v.useState(null),[o,d]=v.useState("18:00"),[p,h]=v.useState(!0),[_,g]=v.useState(null),[x,S]=v.useState(null),C=v.useRef(!1),z=(l==null?void 0:l.source)==="live",w=z?(l==null?void 0:l.daily_report)??null:null,D=z?(w==null?void 0:w.task_sections)??(l==null?void 0:l.execution_summaries)??[]:[],N=z?(l==null?void 0:l.run_details)??[]:[],k=z?(w==null?void 0:w.artifact_sources)??[]:[],A=z?null:(l==null?void 0:l.demo_reason)??"当前没有真实运行投影,日报区域暂不展示兜底数据。",O=(w==null?void 0:w.totals)??{task_count:D.length,execution_count:D.reduce((P,q)=>P+q.total_count,0),success_count:D.reduce((P,q)=>P+q.success_count,0),failure_count:D.reduce((P,q)=>P+q.failure_count,0),running_count:D.reduce((P,q)=>P+q.running_count,0)},te=v.useCallback(async()=>{var P;h(!0),S(null);try{const q=await Ss(a);if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||"18:00")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报数据加载失败")}finally{C.current&&h(!1)}},[a]);v.useEffect(()=>(C.current=!0,te(),()=>{C.current=!1}),[te]),v.useEffect(()=>{!e||p||window.setTimeout(()=>{var P;(P=document.getElementById(`report-section-${e}`))==null||P.scrollIntoView({block:"center",behavior:"smooth"})},80)},[e,p]);const I=v.useCallback(async()=>{var P;g("update_report_schedule"),S(null);try{const q=await ql({action:"update_report_schedule",date:a,report_schedule_time:o});if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||o),S("日报生成时间已更新。")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报生成时间设置失败")}finally{C.current&&g(null)}},[o,a]),ie=v.useCallback(async()=>{var P;g("generate_daily_report"),S(null);try{const q=await ql({action:"generate_daily_report",date:a,duty_ids:z?RE(l):[],report_schedule_time:o});if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||o),S("日报已生成,可下载本地文本。")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报生成失败")}finally{C.current&&g(null)}},[z,l,o,a]),Z=v.useCallback(()=>{!w||w.status!=="ready"||$E(w.download_filename||tm(a),w.text_content||zE(a,w,D,N,k))},[k,w,N,D,a]),K=v.useCallback(async P=>{if(!w||w.status!=="ready")return;const q=P==="html"?w.html_artifact_id:w.pdf_artifact_id;if(q){g(P==="html"?"download_html":"download_pdf"),S(null);try{const ce=await Xv(q,"download");if(!(ce!=null&&ce.ok)){S((ce==null?void 0:ce.error)||"日报导出失败");return}const R=ce.preview||{};if(P==="html")Iy(w.html_filename||tm(a).replace(/\.txt$/,".html"),String(R.text||w.html_content||""),"text/html;charset=utf-8"),S("HTML 日报已导出。");else{const M=String(R.base64||"");if(!M){S("PDF 日报内容不可用");return}Iy(w.pdf_filename||tm(a).replace(/\.txt$/,".pdf"),DE(M),"application/pdf"),S("PDF 日报已导出。")}}catch(ce){if(!C.current)return;S(ce instanceof Error?ce.message:"日报导出失败")}finally{C.current&&g(null)}}},[w,a]),pe=v.useCallback(async P=>{if(!(w!=null&&w.report_id))return;g({send:"send_report",confirm:"confirm_report",request_approval:"request_approval"}[P]),S(null);try{const ce=await Zv({reportId:w.report_id,action:P,status:P==="send"?"sent":P==="confirm"?"confirmed":"pending",actor:P==="confirm"?"management":"digital_employee_operator",endpoint:"management-console"});if(!(ce!=null&&ce.eventId)&&!(ce!=null&&ce.event_id)){S("日报交付记录未写入");return}S(P==="send"?"日报发送记录已写入。":P==="confirm"?"管理端确认回执已写入。":"日报发送审批已创建。"),await te()}catch(ce){if(!C.current)return;S(ce instanceof Error?ce.message:"日报交付记录失败")}finally{C.current&&g(null)}},[te,w==null?void 0:w.report_id]);return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"日报生成",children:s.jsx("span",{className:"de-card-meta-text",children:a})}),s.jsx("div",{className:"de-card-body",children:p?s.jsx("div",{className:"de-loading-skeleton",style:{height:420}}):s.jsxs(s.Fragment,{children:[s.jsxs("section",{id:"report-section-today",className:"de-report-summary",style:{marginBottom:12},children:[s.jsxs("div",{className:"de-report-summary-head",children:[s.jsxs("div",{className:"de-report-summary-title-row",children:[s.jsx("h3",{children:(w==null?void 0:w.title)||"数字员工日报"}),s.jsx("p",{children:TE(w)})]}),s.jsx("span",{className:`de-report-badge ${AE(w)}`,children:EE(w)})]}),s.jsxs("div",{className:"de-report-summary-body",children:[s.jsxs("div",{className:"de-report-schedule-row",children:[s.jsxs("label",{children:[s.jsx("span",{children:"生成时间"}),s.jsx("input",{type:"time",value:o,onChange:P=>d(P.target.value||"18:00")})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_==="update_report_schedule",onClick:()=>{I()},children:"设置时间"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="generate_daily_report",onClick:()=>{ie()},children:_==="generate_daily_report"?"生成中...":"生成日报"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(w!=null&&w.pdf_available),onClick:Z,title:w!=null&&w.pdf_available?"下载本地日报文本":"生成日报后可下载本地日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.html_artifact_id)||_==="download_html",onClick:()=>{K("html")},title:"导出 HTML 日报",children:[s.jsx(XS,{size:14,"aria-hidden":"true"}),"导出 HTML"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.pdf_artifact_id)||_==="download_pdf",onClick:()=>{K("pdf")},title:"导出 PDF 日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"导出 PDF"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="send_report",onClick:()=>{pe("send")},title:"记录日报发送",children:[s.jsx(Sb,{size:14,"aria-hidden":"true"}),"记录发送"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="confirm_report",onClick:()=>{pe("confirm")},title:"写入管理端确认",children:[s.jsx(kb,{size:14,"aria-hidden":"true"}),"确认回执"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="request_approval",onClick:()=>{pe("request_approval")},title:"发起日报审批",children:[s.jsx(Pr,{size:14,"aria-hidden":"true"}),"发起审批"]})]}),s.jsxs("div",{className:"de-report-metrics",children:[s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"任务总数"}),s.jsx("strong",{children:O.task_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"执行次数"}),s.jsx("strong",{children:O.execution_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"成功次数"}),s.jsx("strong",{children:O.success_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"失败次数"}),s.jsx("strong",{children:O.failure_count})]})]}),s.jsxs("div",{className:"de-report-meta",children:[s.jsx("p",{children:(w==null?void 0:w.summary)||"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),A?s.jsx("p",{children:A}):null,s.jsxs("p",{children:["计划生成时间:",o,";最近生成:",ux(w==null?void 0:w.generated_at)]}),x?s.jsx("p",{children:x}):null]})]})]}),s.jsxs("div",{style:CE,children:[s.jsxs("section",{id:"report-section-tasks",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"任务汇总"}),s.jsx(ME,{sections:D})]}),s.jsxs("section",{id:"report-section-details",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"运行明细"}),s.jsx(OE,{details:N})]}),s.jsxs("section",{id:"report-section-artifacts",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"产物来源"}),s.jsx(qE,{artifacts:k})]}),s.jsxs("section",{id:"report-section-summary",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"日报内容"}),((w==null?void 0:w.detail_lines)??[]).length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"生成日报后会展示 AI 整理后的分项说明。"}):s.jsx("div",{className:"de-report-meta",children:((w==null?void 0:w.detail_lines)??[]).map(P=>s.jsx("p",{children:P},P))})]})]})]})})]})})}const fx=[{id:"plans",label:"计划"},{id:"tasks",label:"任务"},{id:"runs",label:"运行"},{id:"events",label:"事件"},{id:"artifacts",label:"产物"},{id:"artifact-groups",label:"产物聚合"},{id:"approvals",label:"审批"}],BE={padding:"14px 18px"},UE={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(4, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},IE={display:"grid",gridTemplateColumns:"minmax(0, 1fr) minmax(280px, 360px)",gap:12,alignItems:"start"},HE={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},GE={width:"100%",minWidth:840,borderCollapse:"collapse"},Hy={border:"1px solid var(--de-glass-border-lighter)",borderRadius:8,background:"rgba(255,255,255,0.72)",overflow:"hidden"},YE={padding:18,color:"var(--de-text-muted)",fontSize:13},Gy={entity:"",status:"",syncStatus:"",updatedFrom:"",updatedTo:"",pageSize:20};function Yy(e){return fx.some(a=>a.id===e)?e:"plans"}function bt(e,a="-"){return e==null||e===""?a:String(e)}function na(e){return bt(e.entity_id||e.plan_id||e.task_id||e.run_id||e.event_id||e.artifact_id||e.approval_id,"unknown")}function mx(e){return bt(e.title||e.summary||e.kind||na(e),"未命名业务对象")}function Cm(e){return bt(e.updated_at||e.occurred_at||e.finished_at||e.started_at||e.created_at)}function KE(e,a){return a==="plans"?`任务 ${bt(e.task_count,"0")} / 运行 ${bt(e.run_count,"0")}`:a==="runs"?bt(e.last_event_message||e.duration_ms,"无最近事件"):a==="events"?bt(e.kind,"event"):a==="artifacts"?bt(e.cleanup_status||e.deleted_at||e.uri||e.kind,"artifact"):a==="artifact-groups"?`产物 ${bt(e.artifact_count,"0")} / 设备 ${bt(e.device_count,"0")} / 版本 ${bt(e.version_count,"0")}`:a==="approvals"?bt(e.approval_conflict_resolution||e.approval_conflict_resolved_at||e.decision||e.approval_conflict_reason||e.kind,"approval"):bt(e.assigned_skill_id||e.operation||e.kind)}function Io(e){return Array.isArray(e.artifact_ids)?e.artifact_ids.map(String).filter(Boolean):e.artifact_id?[String(e.artifact_id)]:[]}function QE(e,a){return{entity_id:e.entity.trim()||null,status:e.status.trim()||null,sync_status:e.syncStatus.trim()||null,updated_from:e.updatedFrom||null,updated_to:e.updatedTo||null,page_no:a,page_size:e.pageSize}}function VE(e){const a=String(e||"").toLowerCase();return["failed","error","rejected","conflict"].some(l=>a.includes(l))?"de-badge de-badge-danger":["pending","running","syncing","ready"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function XE(e){return e.notification_id||e.entity_type==="notification"?{label:"打开通知运营",search:`?tab=notification-workbench&entity=${encodeURIComponent(na(e))}`}:e.report_id||e.entity_type==="daily_report"?{label:"打开日报运营",search:`?tab=daily-report-workbench&entity=${encodeURIComponent(na(e))}`}:e.service_id||e.audit_id||e.entity_type==="managed_service"||e.entity_type==="audit"?{label:"打开处置台",search:`?tab=ops-workbench&entity=${encodeURIComponent(na(e))}`}:null}function ZE({row:e,onClose:a}){if(!e)return s.jsx("aside",{style:Hy,children:s.jsx("div",{style:YE,children:"选择一行业务对象查看详情。"})});const l=e.business_view||e.payload?{business_view:e.business_view??null,payload:e.payload??null}:null,r=XE(e);return s.jsxs("aside",{style:Hy,"aria-label":"业务视图详情",children:[s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:mx(e)}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:a,title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:[`实体:${na(e)}`,`状态:${bt(e.status)}`,`同步:${bt(e.sync_status)}`,`Plan:${bt(e.plan_id)}`,`Task:${bt(e.task_id)}`,`Run:${bt(e.run_id)}`,`时间:${Cm(e)}`,e.sync_record_url?`Sync Record:${e.sync_record_url}`:"",e.summary?`摘要:${e.summary}`:""].filter(Boolean).join(` -`)}),r?s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{window.location.search=r.search},children:r.label}):null]}),l?s.jsxs("details",{className:"de-business-json",open:!0,children:[s.jsx("summary",{children:"JSON 详情"}),s.jsx("pre",{children:JSON.stringify(l,null,2)})]}):null]})}function JE({initialKind:e,focusEntityId:a}){const[l,r]=v.useState(()=>Yy(e)),[o,d]=v.useState({...Gy,entity:a||""}),[p,h]=v.useState(1),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState([]),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null);v.useEffect(()=>{r(Yy(e))},[e]),v.useEffect(()=>{a&&d(M=>({...M,entity:a}))},[a]);const K=v.useCallback(async()=>{O(!0),I(null);try{const M=await sN(l,QE(o,p));g(M.items??[]),S(M.total??0),z(M.source??null),k(ne=>ne.filter(B=>(M.items??[]).some(U=>Io(U).includes(B)))),D(ne=>ne?(M.items??[]).find(B=>na(B)===na(ne))??null:null)}catch(M){g([]),S(0),I(M instanceof Error?M.message:"业务视图加载失败")}finally{O(!1)}},[o,l,p]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>Math.max(1,Math.ceil(x/o.pageSize)),[o.pageSize,x]),P=l==="artifacts"||l==="artifact-groups",q=(M,ne)=>{d(B=>({...B,[M]:ne})),h(1)},ce=M=>{const ne=Io(M);k(B=>ne.length>0&&ne.every(le=>B.includes(le))?B.filter(le=>!ne.includes(le)):Array.from(new Set([...B,...ne])))},R=async M=>{if(!(N.length===0||A)){O(!0),Z(null),I(null);try{const ne=await Jv(N,M,{reason:"digital_employee_artifact_batch_governance"});if(!(ne!=null&&ne.ok)){Z((ne==null?void 0:ne.error)||"批量保留策略写入失败");return}Z(`批量保留策略已记录:${ne.recorded??0}/${ne.total??N.length}`),k([]),await K()}catch(ne){I(ne instanceof Error?ne.message:"批量保留策略写入失败")}finally{O(!1)}}};return s.jsx("div",{style:BE,children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"业务视图",children:s.jsx("span",{className:"de-card-meta-text",children:C||"qimingclaw 本地业务查询"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsx("div",{className:"de-segmented-tabs",role:"tablist","aria-label":"业务视图类型",children:fx.map(M=>s.jsx("button",{type:"button",className:M.id===l?"active":"",onClick:()=>{r(M.id),h(1),D(null)},children:M.label},M.id))}),s.jsxs("div",{style:UE,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"关键词 / 实体 ID"}),s.jsx("input",{value:o.entity,onChange:M=>q("entity",M.target.value),placeholder:"plan / task / artifact"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:o.status,onChange:M=>q("status",M.target.value),placeholder:"pending"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"同步状态"}),s.jsx("input",{value:o.syncStatus,onChange:M=>q("syncStatus",M.target.value),placeholder:"synced"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"起始时间"}),s.jsx("input",{type:"date",value:o.updatedFrom,onChange:M=>q("updatedFrom",M.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"结束时间"}),s.jsx("input",{type:"date",value:o.updatedTo,onChange:M=>q("updatedTo",M.target.value)})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{d(Gy),h(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),P?s.jsxs("div",{className:"de-business-actions","aria-label":"批量保留治理",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",N.length," 个产物"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_keep")},children:[s.jsx(jb,{size:14})," 批量保留"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_expire")},children:"批量标记到期"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_review")},children:"批量复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>k([]),children:"清空选择"})]}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsxs("div",{style:IE,className:"de-business-layout",children:[s.jsx("section",{style:HE,"aria-label":"业务视图列表",children:s.jsxs("table",{style:GE,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[P?s.jsx("th",{children:"选择"}):null,s.jsx("th",{children:"标题 / 实体"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"关联"}),s.jsx("th",{children:"扩展字段"}),s.jsx("th",{children:"同步"}),s.jsx("th",{children:"更新时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:_.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:P?8:7,children:A?"加载中...":"暂无业务对象"})}):_.map(M=>s.jsxs("tr",{className:w&&na(w)===na(M)?"active":"",children:[P?s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:Io(M).length>0&&Io(M).every(ne=>N.includes(ne)),onChange:()=>ce(M),"aria-label":"选择产物"})}):null,s.jsxs("td",{children:[s.jsx("strong",{children:mx(M)}),s.jsx("code",{children:na(M)})]}),s.jsx("td",{children:s.jsx("span",{className:VE(M.status),children:bt(M.status)})}),s.jsxs("td",{children:[s.jsx("span",{children:bt(M.plan_id)}),s.jsx("span",{children:bt(M.task_id)}),s.jsx("span",{children:bt(M.run_id)})]}),s.jsx("td",{children:KE(M,l)}),s.jsx("td",{children:bt(M.sync_status)}),s.jsx("td",{children:Cm(M)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(M),title:"详情","aria-label":"详情",children:s.jsx(ed,{size:15})})})]},`${l}:${na(M)}:${Cm(M)}`))})]})}),s.jsx(ZE,{row:w,onClose:()=>D(null)})]}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:o.pageSize,onChange:M=>q("pageSize",Number(M.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p<=1,onClick:()=>h(M=>Math.max(1,M-1)),children:"上一页"}),s.jsxs("span",{children:[p," / ",pe]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p>=pe,onClick:()=>h(M=>Math.min(pe,M+1)),children:"下一页"})]})]})]})})}const px=[{id:"all",label:"全部"},{id:"approval_conflict",label:"审批冲突"},{id:"route_intervention",label:"路由干预"},{id:"risk_approval",label:"风险审批"},{id:"action_notification",label:"待处理通知"}],FE={padding:"14px 18px"},PE={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(3, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},WE={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},eA={width:"100%",minWidth:980,borderCollapse:"collapse"},Ky={entity:"",status:"",priority:"",pageSize:20};function Qy(e){return px.some(a=>a.id===e)&&e||"all"}function vi(e,a="-"){return e==null||e===""?a:String(e)}function tA(e){return vi(e.updated_at||e.occurred_at)}function nA(e){const a=String(e||"").toLowerCase();return["failed","rejected","blocked","error"].some(l=>a.includes(l))?"de-badge de-badge-danger":["pending","open","required","warn"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function aA(e){return e.kind==="approval_conflict"&&e.approval_id?String(e.approval_id):null}function lA(e){return e.kind==="route_intervention"&&e.route_decision_id?String(e.route_decision_id):null}function iA({initialKind:e,focusEntityId:a}){const[l,r]=v.useState(()=>Qy(e)),[o,d]=v.useState({...Ky,entity:a||""}),[p,h]=v.useState(1),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState([]),[N,k]=v.useState(null),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null);v.useEffect(()=>r(Qy(e)),[e]),v.useEffect(()=>{a&&d(U=>({...U,entity:a}))},[a]);const K=v.useCallback(async()=>{O(!0),Z(null);try{const U=await BC({kind:l,entity_id:o.entity.trim()||null,status:o.status.trim()||null,priority:o.priority.trim()||null,page_no:p,page_size:o.pageSize});g(U.items??[]),S(U.total??0),z(U.source??null),D(le=>le.filter(de=>(U.items??[]).some(Te=>Te.intervention_id===de)))}catch(U){g([]),S(0),Z(U instanceof Error?U.message:"介入台加载失败")}finally{O(!1)}},[o,l,p]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>_.filter(U=>w.includes(U.intervention_id)),[_,w]),P=v.useMemo(()=>pe.map(aA).filter(U=>!!U),[pe]),q=v.useMemo(()=>pe.map(lA).filter(U=>!!U),[pe]),ce=v.useMemo(()=>Math.max(1,Math.ceil(x/o.pageSize)),[o.pageSize,x]),R=(U,le)=>{d(de=>({...de,[U]:le})),h(1)},M=U=>{D(le=>le.includes(U.intervention_id)?le.filter(de=>de!==U.intervention_id):[...le,U.intervention_id])},ne=async U=>{var le;if(!(P.length===0||A)){O(!0),I(null),Z(null);try{const de=await xN(P,U,{actor:"digital_employee_operator"});if(!de.ok)throw new Error(de.error||((le=de.reason_codes)==null?void 0:le.join(", "))||"批量审批冲突处理失败");I(`批量审批冲突已记录:${de.recorded}/${de.total}`),D([]),await K()}catch(de){Z(de instanceof Error?de.message:"批量审批冲突处理失败")}finally{O(!1)}}},B=async U=>{var le;if(!(q.length===0||A)){O(!0),I(null),Z(null);try{const de=await LC(q,{decision:U,actor:"digital_employee_operator"});if(!de.ok)throw new Error(de.error||((le=de.reason_codes)==null?void 0:le.join(", "))||"批量路由干预处理失败");I(`批量路由干预已记录:${de.recorded}/${de.total}`),D([]),await K()}catch(de){Z(de instanceof Error?de.message:"批量路由干预处理失败")}finally{O(!1)}}};return s.jsxs("div",{style:FE,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"介入台",children:s.jsx("span",{className:"de-card-meta-text",children:C||"qimingclaw 人工介入运营台"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsx("div",{className:"de-segmented-tabs",role:"tablist","aria-label":"介入类型",children:px.map(U=>s.jsx("button",{type:"button",className:U.id===l?"active":"",onClick:()=>{r(U.id),h(1),D([])},children:U.label},U.id))}),s.jsxs("div",{style:PE,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"实体 ID"}),s.jsx("input",{value:o.entity,onChange:U=>R("entity",U.target.value),placeholder:"approval / route / task"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:o.status,onChange:U=>R("status",U.target.value),placeholder:"open"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"优先级"}),s.jsx("input",{value:o.priority,onChange:U=>R("priority",U.target.value),placeholder:"high"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:o.pageSize,onChange:U=>R("pageSize",Number(U.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{d(Ky),h(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"批量介入动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",w.length," 项"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:P.length===0||A,onClick:()=>{ne("keep_local")},children:[s.jsx(jb,{size:14})," 批量保留本地"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:P.length===0||A,onClick:()=>{ne("mark_reviewed")},children:"批量标记复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:q.length===0||A,onClick:()=>{B("mark_reviewed")},children:"批量标记已看"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:q.length===0||A,onClick:()=>{B("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:w.length===0||A,onClick:()=>D([]),children:"清空选择"})]}),te?s.jsx("p",{className:"de-inline-notice",children:te}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,s.jsx("section",{style:WE,"aria-label":"介入台列表",children:s.jsxs("table",{style:eA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"类型 / 标题"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"优先级"}),s.jsx("th",{children:"关联"}),s.jsx("th",{children:"原因"}),s.jsx("th",{children:"最近时间"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:_.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:A?"加载中...":"暂无介入事项"})}):_.map(U=>s.jsxs("tr",{className:w.includes(U.intervention_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:w.includes(U.intervention_id),onChange:()=>M(U),"aria-label":"选择介入事项"})}),s.jsxs("td",{children:[s.jsx("strong",{children:U.title}),s.jsx("code",{children:U.intervention_id})]}),s.jsx("td",{children:s.jsx("span",{className:nA(U.status),children:vi(U.status)})}),s.jsx("td",{children:vi(U.priority)}),s.jsxs("td",{children:[s.jsx("span",{children:vi(U.plan_id)}),s.jsx("span",{children:vi(U.task_id)}),s.jsx("span",{children:vi(U.run_id)})]}),s.jsx("td",{children:vi(U.reason||U.summary)}),s.jsx("td",{children:tA(U)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>k(U),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},U.intervention_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p<=1,onClick:()=>h(U=>Math.max(1,U-1)),children:"上一页"}),s.jsxs("span",{children:[p," / ",ce]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p>=ce,onClick:()=>h(U=>Math.min(ce,U+1)),children:"下一页"})]})]})]}),N?s.jsxs("div",{className:"de-artifact-preview","aria-label":"介入详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:N.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>k(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(N,null,2)})]}):null]})}const sA={padding:"14px 18px"},rA={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(3, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},cA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},oA={width:"100%",minWidth:980,borderCollapse:"collapse"},Vy={query:"",category:"",status:"",pageSize:20};function ks(e,a="-"){return e==null||e===""?a:String(e)}function dA(e){const a=String(e||"").toLowerCase();return["archived","deleted","failed"].some(l=>a.includes(l))?"de-badge de-badge-danger":["review","pending"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function uA({initialQuery:e,focusEntityId:a}){const[l,r]=v.useState({...Vy,query:e||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState(0),[x,S]=v.useState(null),[C,z]=v.useState([]),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null);v.useEffect(()=>{e&&r(q=>({...q,query:e}))},[e]);const ie=v.useCallback(async()=>{k(!0),I(null);try{const q=await UC({q:l.query.trim()||null,category:l.category.trim()||null,status:l.status.trim()||null,entity_id:a||null,page_no:o,page_size:l.pageSize});h(q.items??[]),g(q.total??0),S(q.source??null),z(ce=>ce.filter(R=>(q.items??[]).some(M=>M.memory_id===R)))}catch(q){h([]),g(0),I(q instanceof Error?q.message:"记忆治理加载失败")}finally{k(!1)}},[l,a,o]);v.useEffect(()=>{ie()},[ie]);const Z=v.useMemo(()=>Math.max(1,Math.ceil(_/l.pageSize)),[l.pageSize,_]),K=(q,ce)=>{r(R=>({...R,[q]:ce})),d(1)},pe=q=>{z(ce=>ce.includes(q.memory_id)?ce.filter(R=>R!==q.memory_id):[...ce,q.memory_id])},P=async q=>{var ce;if(!(C.length===0||N)){k(!0),O(null),I(null);try{const R=await IC(C,q,{actor:"digital_employee_operator"});if(!R.ok)throw new Error(R.error||((ce=R.reason_codes)==null?void 0:ce.join(", "))||"记忆治理操作失败");O(`记忆治理已记录:${R.recorded}/${R.total}`),z([]),await ie()}catch(R){I(R instanceof Error?R.message:"记忆治理操作失败")}finally{k(!1)}}};return s.jsxs("div",{style:sA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"记忆治理",children:s.jsx("span",{className:"de-card-meta-text",children:x||"qimingclaw 长期记忆治理"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:rA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"关键词"}),s.jsx("input",{value:l.query,onChange:q=>K("query",q.target.value),placeholder:"key / content"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"分类"}),s.jsx("input",{value:l.category,onChange:q=>K("category",q.target.value),placeholder:"fact"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:q=>K("status",q.target.value),placeholder:"active"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:l.pageSize,onChange:q=>K("pageSize",Number(q.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{ie()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{r(Vy),d(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"记忆批量治理",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",C.length," 条"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("archive")},children:[s.jsx(HS,{size:14})," 批量归档"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("restore")},children:[s.jsx(ej,{size:14})," 批量恢复"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("mark_reviewed")},children:"批量复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>z([]),children:"清空选择"})]}),A?s.jsx("p",{className:"de-inline-notice",children:A}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsx("section",{style:cA,"aria-label":"记忆治理列表",children:s.jsxs("table",{style:oA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"Key / 内容"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"分类"}),s.jsx("th",{children:"重复候选"}),s.jsx("th",{children:"同步"}),s.jsx("th",{children:"更新时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:N?"加载中...":"暂无记忆"})}):p.map(q=>s.jsxs("tr",{className:C.includes(q.memory_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:C.includes(q.memory_id),onChange:()=>pe(q),"aria-label":"选择记忆"})}),s.jsxs("td",{children:[s.jsx("strong",{children:ks(q.key)}),s.jsx("code",{children:ks(q.content_preview)})]}),s.jsx("td",{children:s.jsx("span",{className:dA(q.governance_status),children:ks(q.governance_status)})}),s.jsx("td",{children:ks(q.category)}),s.jsx("td",{children:q.merge_candidate_count>0?`重复候选 ${q.merge_candidate_count}`:"-"}),s.jsx("td",{children:ks(q.sync_status)}),s.jsx("td",{children:ks(q.updated_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(q),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},q.memory_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",_," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(q=>Math.max(1,q-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",Z]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=Z,onClick:()=>d(q=>Math.min(Z,q+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"记忆详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.key}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)})]}):null]})}const fA={padding:"14px 18px"},mA={display:"grid",gridTemplateColumns:"repeat(6, minmax(120px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},pA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},_A={width:"100%",minWidth:1040,borderCollapse:"collapse"},Xy={skillId:"",toolName:"",serverId:"",decision:"",category:"",status:"",pageSize:20};function Fa(e,a="-"){return e==null||e===""?a:String(e)}function hA(e){const a=String(e||"").toLowerCase();return a.includes("allow")||a.includes("accepted")?"允许":a.includes("reject")||a.includes("deny")||a.includes("blocked")?"拒绝":a.includes("observe")?"观察":Fa(e,"观察")}function Zy(e){const a=String(e||"").toLowerCase();return/reject|deny|blocked|failed|error/.test(a)?"de-badge de-badge-danger":/warn|review|pending|timeout/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function gA(e){const a=typeof e=="number"?e:Number(e);return!Number.isFinite(a)||a<=0?"-":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`}function yA({focusSkillId:e}){const[a,l]=v.useState({...Xy,skillId:e||""}),[r,o]=v.useState(1),[d,p]=v.useState([]),[h,_]=v.useState(0),[g,x]=v.useState(null),[S,C]=v.useState(null),[z,w]=v.useState(!1),[D,N]=v.useState(null);v.useEffect(()=>{e&&l(I=>({...I,skillId:e}))},[e]);const k=v.useCallback(async()=>{w(!0),N(null);try{const I=await HC({skill_id:a.skillId.trim()||null,tool_name:a.toolName.trim()||null,server_id:a.serverId.trim()||null,decision:a.decision.trim()||null,category:a.category.trim()||null,status:a.status.trim()||null,page_no:r,page_size:a.pageSize});p(I.items??[]),_(I.total??0),x(I.source??null)}catch(I){p([]),_(0),N(I instanceof Error?I.message:"技能审计加载失败")}finally{w(!1)}},[a,r]);v.useEffect(()=>{k()},[k]);const A=v.useMemo(()=>Math.max(1,Math.ceil(h/a.pageSize)),[a.pageSize,h]),O=(I,ie)=>{l(Z=>({...Z,[I]:ie})),o(1)},te=()=>{l({...Xy,skillId:e||""}),o(1)};return s.jsxs("div",{style:fA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"技能审计",children:s.jsx("span",{className:"de-card-meta-text",children:g||"技能调用、工具、sandbox 与 token/cost 审计"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:mA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"Skill"}),s.jsx("input",{value:a.skillId,onChange:I=>O("skillId",I.target.value),placeholder:"skill id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Tool"}),s.jsx("input",{value:a.toolName,onChange:I=>O("toolName",I.target.value),placeholder:"tool name"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Server"}),s.jsx("input",{value:a.serverId,onChange:I=>O("serverId",I.target.value),placeholder:"server id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"决策"}),s.jsx("input",{value:a.decision,onChange:I=>O("decision",I.target.value),placeholder:"允许 / 拒绝 / 观察"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"分类"}),s.jsx("input",{value:a.category,onChange:I=>O("category",I.target.value),placeholder:"tool_call_audit"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:a.status,onChange:I=>O("status",I.target.value),placeholder:"status"})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{k()},title:"筛选","aria-label":"筛选",children:s.jsx(ZS,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:te,title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"技能审计筛选",children:[s.jsxs("span",{className:"de-card-meta-text",children:["共 ",h," 条"]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:a.pageSize,onChange:I=>O("pageSize",Number(I.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]})]}),D?s.jsx("p",{className:"de-inline-notice",children:D}):null,s.jsx("section",{style:pA,"aria-label":"技能审计列表",children:s.jsxs("table",{style:_A,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"审计"}),s.jsx("th",{children:"决策"}),s.jsx("th",{children:"Skill / Tool"}),s.jsx("th",{children:"Server"}),s.jsx("th",{children:"风险"}),s.jsx("th",{children:"Token / 成本"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:d.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:z?"加载中...":"暂无技能审计记录"})}):d.map(I=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:Fa(I.category)}),s.jsx("code",{children:Fa(I.audit_id)})]}),s.jsx("td",{children:s.jsx("span",{className:Zy(I.decision||I.status),children:hA(I.decision||I.status)})}),s.jsxs("td",{children:[s.jsx("strong",{children:Fa(I.skill_id)}),s.jsx("code",{children:Fa(I.tool_name)})]}),s.jsx("td",{children:Fa(I.server_id)}),s.jsx("td",{children:s.jsx("span",{className:Zy(I.risk_level||I.status),children:Fa(I.risk_level||I.status)})}),s.jsxs("td",{children:[Fa(I.total_tokens,"0")," / ",gA(I.estimated_cost_usd)]}),s.jsx("td",{children:Fa(I.occurred_at||I.updated_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(I),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},I.audit_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:[r," / ",A]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r<=1,onClick:()=>o(I=>Math.max(1,I-1)),children:"上一页"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r>=A,onClick:()=>o(I=>Math.min(A,I+1)),children:"下一页"})]})]})]}),S?s.jsxs("div",{className:"de-artifact-preview","aria-label":"技能审计详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:S.category}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(S,null,2)})]}):null]})}const bA={padding:"14px 18px"},vA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},xA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},kA={width:"100%",minWidth:980,borderCollapse:"collapse"},SA={kind:"all",status:"",priority:"",entityId:"",pageSize:20};function Ho(e,a="-"){return e==null||e===""?a:String(e)}function jA(e){const a=String(e||"").toLowerCase();return/error|failed|stopped|degraded/.test(a)?"de-badge de-badge-danger":/warn|pending|review/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function wA({initialKind:e,focusEntityId:a}){const[l,r]=v.useState({...SA,kind:e||"all",entityId:a||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null),ie=v.useCallback(async()=>{k(!0),I(null);try{const q=await GC({kind:l.kind==="all"?null:l.kind,status:l.status||null,priority:l.priority||null,entity_id:l.entityId||null,page_no:o,page_size:l.pageSize});h(q.items??[]),S(q.total??0),z(q.source??null),g(ce=>ce.filter(R=>(q.items??[]).some(M=>M.ops_id===R)))}catch(q){h([]),S(0),I(q instanceof Error?q.message:"处置台加载失败")}finally{k(!1)}},[l,o]);v.useEffect(()=>{ie()},[ie]);const Z=v.useMemo(()=>Math.max(1,Math.ceil(x/l.pageSize)),[l.pageSize,x]),K=(q,ce)=>{r(R=>({...R,[q]:ce})),d(1)},pe=q=>{g(ce=>ce.includes(q.ops_id)?ce.filter(R=>R!==q.ops_id):[...ce,q.ops_id])},P=async q=>{var ce;if(!(_.length===0||N)){k(!0),O(null),I(null);try{const R=await YC(_,q,{actor:"digital_employee_operator"});if(!R.ok)throw new Error(R.error||((ce=R.reason_codes)==null?void 0:ce.join(", "))||"处置动作失败");O(`处置台已记录:${R.recorded}/${R.total}`),g([]),await ie()}catch(R){I(R instanceof Error?R.message:"处置动作失败")}finally{k(!1)}}};return s.jsxs("div",{style:bA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"处置台",children:s.jsx("span",{className:"de-card-meta-text",children:C||"诊断、服务、同步和策略处置"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:vA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"类型"}),s.jsxs("select",{value:l.kind,onChange:q=>K("kind",q.target.value),children:[s.jsx("option",{value:"all",children:"全部"}),s.jsx("option",{value:"diagnostic",children:"诊断"}),s.jsx("option",{value:"service",children:"服务"}),s.jsx("option",{value:"sync",children:"同步"}),s.jsx("option",{value:"policy",children:"策略"}),s.jsx("option",{value:"audit",children:"审计"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:q=>K("status",q.target.value),placeholder:"error"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"优先级"}),s.jsx("input",{value:l.priority,onChange:q=>K("priority",q.target.value),placeholder:"warn"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:l.entityId,onChange:q=>K("entityId",q.target.value),placeholder:"service / policy"})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{ie()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"处置台批量动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",_.length," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("mark_reviewed")},children:"批量标记已看"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("retry_policy_pull")},children:"策略重拉"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("safe_restart_service")},children:[s.jsx(Pr,{size:14})," 安全重启"]})]}),A?s.jsx("p",{className:"de-inline-notice",children:A}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsx("section",{style:xA,"aria-label":"处置事项列表",children:s.jsxs("table",{style:kA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"事项"}),s.jsx("th",{children:"类型"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"建议"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:N?"加载中...":"暂无处置事项"})}):p.map(q=>s.jsxs("tr",{className:_.includes(q.ops_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:_.includes(q.ops_id),onChange:()=>pe(q),"aria-label":"选择处置事项"})}),s.jsxs("td",{children:[s.jsx("strong",{children:q.title}),s.jsx("code",{children:q.ops_id})]}),s.jsx("td",{children:Ho(q.kind)}),s.jsx("td",{children:s.jsx("span",{className:jA(q.status||q.priority),children:Ho(q.status)})}),s.jsx("td",{children:Ho(q.recommended_action)}),s.jsx("td",{children:Ho(q.updated_at||q.occurred_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(q),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},q.ops_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(q=>Math.max(1,q-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",Z]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=Z,onClick:()=>d(q=>Math.min(Z,q+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"处置详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)})]}):null]})}const CA={padding:"14px 18px"},NA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},EA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},AA={width:"100%",minWidth:980,borderCollapse:"collapse"},TA={kind:"all",status:"",level:"",entityId:"",pageSize:20};function Go(e,a="-"){return e==null||e===""?a:String(e)}function Jy(e){const a=String(e||"").toLowerCase();return/error|failed/.test(a)?"de-badge de-badge-danger":/warn|action|unread/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function RA({initialKind:e,focusEntityId:a}){const[l,r]=v.useState({...TA,kind:e||"all",entityId:a||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState(""),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null),K=v.useCallback(async()=>{O(!0),Z(null);try{const M=await KC({kind:l.kind==="all"?null:l.kind,status:l.status||null,level:l.level||null,entity_id:l.entityId||null,page_no:o,page_size:l.pageSize});h(M.items??[]),S(M.total??0),z(M.source??null),g(ne=>ne.filter(B=>(M.items??[]).some(U=>U.notification_id===B)))}catch(M){h([]),S(0),Z(M instanceof Error?M.message:"通知运营加载失败")}finally{O(!1)}},[l,o]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>Math.max(1,Math.ceil(x/l.pageSize)),[l.pageSize,x]),P=(M,ne)=>{r(B=>({...B,[M]:ne})),d(1)},q=M=>{g(ne=>ne.includes(M.notification_id)?ne.filter(B=>B!==M.notification_id):[...ne,M.notification_id])},ce=async M=>{var ne;if(!((M==="mark_read"||M==="dismiss")&&_.length===0)){O(!0),I(null),Z(null);try{const B=await QC(_,M,{actor:"digital_employee_operator"});if(!B.ok)throw new Error(B.error||((ne=B.reason_codes)==null?void 0:ne.join(", "))||"通知运营操作失败");I(M==="open_desktop_settings"?"已请求打开系统设置。":`通知运营已记录:${B.recorded}/${B.total}`),M!=="open_desktop_settings"&&g([]),await K()}catch(B){Z(B instanceof Error?B.message:"通知运营操作失败")}finally{O(!1)}}},R=async()=>{if(!(!(w!=null&&w.notification_id)||!N.trim())){O(!0);try{await Vv(w.notification_id,N.trim()),I("回复已记录。"),k(""),await K()}catch(M){Z(M instanceof Error?M.message:"回复失败")}finally{O(!1)}}};return s.jsxs("div",{style:CA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"通知运营",children:s.jsx("span",{className:"de-card-meta-text",children:C||"Inbox 运营视图"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:NA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"类型"}),s.jsx("input",{value:l.kind,onChange:M=>P("kind",M.target.value||"all"),placeholder:"all / need_input"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:M=>P("status",M.target.value),placeholder:"unread"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"等级"}),s.jsx("input",{value:l.level,onChange:M=>P("level",M.target.value),placeholder:"action"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:l.entityId,onChange:M=>P("entityId",M.target.value),placeholder:"notification id"})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"通知批量动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",_.length," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||A,onClick:()=>{ce("mark_read")},children:"批量已读"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||A,onClick:()=>{ce("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:A,onClick:()=>{ce("pull_updates")},children:"拉取通知"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:A,onClick:()=>{ce("open_desktop_settings")},children:[s.jsx(nj,{size:14})," 打开系统设置"]})]}),te?s.jsx("p",{className:"de-inline-notice",children:te}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,s.jsx("section",{style:EA,"aria-label":"通知运营列表",children:s.jsxs("table",{style:AA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"通知"}),s.jsx("th",{children:"类型"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"等级"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:A?"加载中...":"暂无通知"})}):p.map(M=>s.jsxs("tr",{className:_.includes(M.notification_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:_.includes(M.notification_id),onChange:()=>q(M),"aria-label":"选择通知"})}),s.jsxs("td",{children:[s.jsx("strong",{children:M.title}),s.jsx("code",{children:M.notification_id})]}),s.jsx("td",{children:Go(M.kind)}),s.jsx("td",{children:s.jsx("span",{className:Jy(M.status),children:Go(M.status)})}),s.jsx("td",{children:s.jsx("span",{className:Jy(M.priority),children:Go(M.priority)})}),s.jsx("td",{children:Go(M.updated_at||M.occurred_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{D(M),k("")},title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},M.notification_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(M=>Math.max(1,M-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",pe]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=pe,onClick:()=>d(M=>Math.min(pe,M+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"通知详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)}),s.jsx("textarea",{value:N,onChange:M=>k(M.target.value),placeholder:"回复单条通知"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!N.trim()||A,onClick:()=>{R()},children:"回复"})]}):null]})}const $A={padding:"14px 18px"},DA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},zA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},MA={width:"100%",minWidth:1020,borderCollapse:"collapse"},OA={date:"",status:"",entityId:"",pageSize:20};function Yr(e,a="-"){return e==null||e===""?a:String(e)}function qA(e){const a=String(e||"").toLowerCase();return/failed|error|pending/.test(a)?"de-badge de-badge-warning":(/confirmed|sent|requested|ready/.test(a),"de-badge de-badge-info")}function LA({focusEntityId:e}){const[a,l]=v.useState({...OA,entityId:e||""}),[r,o]=v.useState(1),[d,p]=v.useState([]),[h,_]=v.useState(0),[g,x]=v.useState(null),[S,C]=v.useState(null),[z,w]=v.useState(!1),[D,N]=v.useState(null),[k,A]=v.useState(null),O=v.useCallback(async()=>{w(!0),A(null);try{const K=await VC({date:a.date||null,status:a.status||null,entity_id:a.entityId||null,page_no:r,page_size:a.pageSize});p(K.items??[]),_(K.total??0),x(K.source??null)}catch(K){p([]),_(0),A(K instanceof Error?K.message:"日报运营加载失败")}finally{w(!1)}},[a,r]);v.useEffect(()=>{O()},[O]);const te=v.useMemo(()=>Math.max(1,Math.ceil(h/a.pageSize)),[a.pageSize,h]),I=(K,pe)=>{l(P=>({...P,[K]:pe})),o(1)},ie=async K=>{w(!0),N(null),A(null);try{await ql({action:"generate_daily_report",date:(K==null?void 0:K.date)||a.date||void 0,duty_ids:[]}),N("日报已生成。"),await O()}catch(pe){A(pe instanceof Error?pe.message:"生成日报失败")}finally{w(!1)}},Z=async(K,pe)=>{w(!0),N(null),A(null);try{await Zv({reportId:K.report_id,action:pe,status:pe==="send"?"sent":pe==="confirm"?"confirmed":"approval_requested",actor:"digital_employee_operator",message:"daily_report_workbench_action_recorded"}),N(pe==="send"?"发送记录已写入。":pe==="confirm"?"确认回执已记录。":"请求审批已记录。"),await O()}catch(P){A(P instanceof Error?P.message:"日报动作失败")}finally{w(!1)}};return s.jsxs("div",{style:$A,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"日报运营",children:s.jsx("span",{className:"de-card-meta-text",children:g||"日报交付运营视图"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:DA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"日期"}),s.jsx("input",{type:"date",value:a.date,onChange:K=>I("date",K.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:a.status,onChange:K=>I("status",K.target.value),placeholder:"ready"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:a.entityId,onChange:K=>I("entityId",K.target.value),placeholder:"report id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:a.pageSize,onChange:K=>I("pageSize",Number(K.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{O()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsx("div",{className:"de-business-actions","aria-label":"日报运营动作",children:s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:z,onClick:()=>{ie()},children:"生成日报"})}),D?s.jsx("p",{className:"de-inline-notice",children:D}):null,k?s.jsx("p",{className:"de-inline-notice",children:k}):null,s.jsx("section",{style:zA,"aria-label":"日报运营列表",children:s.jsxs("table",{style:MA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"日报"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"发送"}),s.jsx("th",{children:"确认"}),s.jsx("th",{children:"审批"}),s.jsx("th",{children:"产物"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:d.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:z?"加载中...":"暂无日报记录"})}):d.map(K=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:K.title}),s.jsxs("code",{children:[K.date," · ",K.report_id]})]}),s.jsx("td",{children:s.jsx("span",{className:qA(K.status),children:Yr(K.status)})}),s.jsx("td",{children:Yr(K.delivery_status)}),s.jsx("td",{children:Yr(K.confirmation_status)}),s.jsx("td",{children:Yr(K.approval_status)}),s.jsx("td",{children:Yr(K.artifact_count,"0")}),s.jsxs("td",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(K),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"send")},title:"记录发送","aria-label":"记录发送",children:s.jsx(Sb,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"confirm")},title:"确认回执","aria-label":"确认回执",children:s.jsx(kb,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"request_approval")},title:"请求审批","aria-label":"请求审批",children:s.jsx(Pr,{size:15})})]})]},K.report_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",h," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r<=1,onClick:()=>o(K=>Math.max(1,K-1)),children:"上一页"}),s.jsxs("span",{children:[r," / ",te]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r>=te,onClick:()=>o(K=>Math.min(te,K+1)),children:"下一页"})]})]})]}),S?s.jsxs("div",{className:"de-artifact-preview","aria-label":"日报运营详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:S.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(S,null,2)})]}):null]})}const BA={padding:"14px 18px"},UA={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:12},nm={border:"1px solid var(--de-glass-border-lighter)",borderRadius:8,padding:12,display:"grid",gap:10};function am(e,a="-"){return e==null||e===""?a:String(e)}function IA(e){const a=String(e||"").toLowerCase();return/error|failed|disabled/.test(a)?"de-badge de-badge-danger":/pull|pending|remote/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function HA(){const[e,a]=v.useState([]),[l,r]=v.useState(null),[o,d]=v.useState(null),[p,h]=v.useState(!1),[_,g]=v.useState(null),[x,S]=v.useState(null),C=v.useCallback(async()=>{h(!0),S(null);try{const k=await aN();a(k.items??[]),r(k.plan_step_dispatch_policy),d(k.risk_approval_policy)}catch(k){a([]),S(k instanceof Error?k.message:"策略中心加载失败")}finally{h(!1)}},[]);v.useEffect(()=>{C()},[C]);const z=async()=>{h(!0),g(null),S(null);try{const k=await lN();if(!k.ok)throw new Error(k.items.map(A=>A.error).filter(Boolean).join(", ")||"批量拉取策略失败");g(`批量拉取策略完成:${k.pulled}/${k.total}`),await C()}catch(k){S(k instanceof Error?k.message:"批量拉取策略失败")}finally{h(!1)}},w=async k=>{if(!l)return;const A=await nN(k);r(A),g("派发策略已保存。"),await C()},D=async k=>{if(!o)return;const A=await Kv(k);d(A),g("风险审批策略已保存。"),await C()},N=(k,A)=>{D({[k]:A.split(",").map(O=>O.trim()).filter(Boolean)})};return s.jsx("div",{style:BA,children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"策略中心",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p,onClick:()=>{z()},children:"批量拉取策略"}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:p,onClick:()=>{C()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-card-body",children:[_?s.jsx("p",{className:"de-inline-notice",children:_}):null,x?s.jsx("p",{className:"de-inline-notice",children:x}):null,s.jsx("div",{style:UA,children:e.map(k=>s.jsxs("section",{style:nm,children:[s.jsx("strong",{children:k.title}),s.jsx("span",{className:IA(k.status),children:k.status}),s.jsx("small",{children:am(k.summary)}),s.jsxs("small",{children:["source: ",am(k.source)," · pulled: ",am(k.last_pulled_at)]}),k.last_pull_error?s.jsx("small",{children:k.last_pull_error}):null]},k.policy_id))}),l?s.jsxs("section",{style:nm,children:[s.jsx("h3",{className:"de-settings-heading",children:"派发策略"}),s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:l.enabled?"true":"false",onChange:k=>{w({enabled:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"max_per_sweep"}),s.jsx("input",{type:"number",min:1,max:10,value:l.max_per_sweep,onChange:k=>{w({max_per_sweep:Number(k.target.value)||1})}})]}),s.jsxs("label",{children:[s.jsx("span",{children:"auto_dispatch_ready_steps"}),s.jsxs("select",{value:l.auto_dispatch_ready_steps?"true":"false",onChange:k=>{w({auto_dispatch_ready_steps:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]})]}):null,o?s.jsxs("section",{style:nm,children:[s.jsx("h3",{className:"de-settings-heading",children:"风险审批策略"}),s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:o.enabled?"true":"false",onChange:k=>{D({enabled:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"approval_required_risk_levels"}),s.jsx("input",{value:o.approval_required_risk_levels.join(","),onChange:k=>N("approval_required_risk_levels",k.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"approval_required_actions"}),s.jsx("input",{value:o.approval_required_actions.join(","),onChange:k=>N("approval_required_actions",k.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"auto_reject_actions"}),s.jsx("input",{value:o.auto_reject_actions.join(","),onChange:k=>N("auto_reject_actions",k.target.value)})]})]}):null]})]})})}const GA={padding:"14px 18px"},YA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},KA={width:"100%",minWidth:980,borderCollapse:"collapse"},QA={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:10,marginBottom:12};function Kr(e,a="-"){return e==null||e===""?a:String(e)}function VA(e){const a=String(e||"").toLowerCase();return/failed|error|deleted/.test(a)?"de-badge de-badge-danger":/paused|pending|skipped/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function XA(){const[e,a]=v.useState([]),[l,r]=v.useState({enabled:!1,catch_up_on_startup:!1,max_run_history:20}),[o,d]=v.useState(!1),[p,h]=v.useState(null),[_,g]=v.useState(null),x=v.useCallback(async()=>{d(!0),g(null);try{const N=await MC();a(N.items??[]),r(N.settings)}catch(N){a([]),g(N instanceof Error?N.message:"调度运营加载失败")}finally{d(!1)}},[]);v.useEffect(()=>{x()},[x]);const S=v.useMemo(()=>e.filter(N=>N.enabled).length,[e]),C=async N=>{d(!0);try{const k=await zC(N);r(k),h("调度设置已保存。"),await x()}catch(k){g(k instanceof Error?k.message:"调度设置保存失败")}finally{d(!1)}},z=async()=>{d(!0),h(null),g(null);try{const N=await hN();h(`立即检查调度完成:activated ${N.activated??0},skipped ${N.skipped??0}`),await x()}catch(N){g(N instanceof Error?N.message:"立即检查调度失败")}finally{d(!1)}},w=async N=>{d(!0);try{await RC(N.schedule_id,{enabled:!N.enabled}),h(N.enabled?"调度已暂停。":"调度已启用。"),await x()}catch(k){g(k instanceof Error?k.message:"调度启停失败")}finally{d(!1)}},D=async N=>{d(!0);try{await TC(N.schedule_id),h("调度已删除。"),await x()}catch(k){g(k instanceof Error?k.message:"删除调度失败")}finally{d(!1)}};return s.jsx("div",{style:GA,children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"调度运营",children:[s.jsxs("span",{className:"de-card-meta-text",children:["启用 ",S,"/",e.length]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o,onClick:()=>{z()},children:[s.jsx(WS,{size:14})," 立即检查调度"]}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:o,onClick:()=>{x()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:QA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:l.enabled?"true":"false",onChange:N=>{C({enabled:N.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"catch_up_on_startup"}),s.jsxs("select",{value:l.catch_up_on_startup?"true":"false",onChange:N=>{C({catch_up_on_startup:N.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"max_run_history"}),s.jsx("input",{type:"number",min:1,max:500,value:l.max_run_history,onChange:N=>{C({max_run_history:Number(N.target.value)||20})}})]})]}),p?s.jsx("p",{className:"de-inline-notice",children:p}):null,_?s.jsx("p",{className:"de-inline-notice",children:_}):null,s.jsx("section",{style:YA,"aria-label":"调度运营列表",children:s.jsxs("table",{style:KA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"任务"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"Cron"}),s.jsx("th",{children:"下次"}),s.jsx("th",{children:"最近运行"}),s.jsx("th",{children:"最近结果"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:e.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:o?"加载中...":"暂无调度任务"})}):e.map(N=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:N.name}),s.jsx("code",{children:N.schedule_id})]}),s.jsx("td",{children:s.jsx("span",{className:VA(N.status),children:Kr(N.status)})}),s.jsx("td",{children:Kr(N.cron_expr)}),s.jsx("td",{children:Kr(N.next_run)}),s.jsx("td",{children:Kr(N.last_run)}),s.jsx("td",{children:Kr(N.last_status||N.latest_run_error)}),s.jsxs("td",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o,onClick:()=>{w(N)},children:N.enabled?"暂停":"启用"}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:o,onClick:()=>{D(N)},title:"删除","aria-label":"删除",children:s.jsx(wb,{size:15})})]})]},N.schedule_id))})]})})]})]})})}const ZA=["sales","engineering","hr","finance","executive"],Nm="qimingclaw:digital-role-preferences",Em="sgrobot-role-preferences",Jr={workStart:"09:00",workEnd:"18:00",notification:"system",reportTime:"17:30",avatarStyle:"professional",reminderLevel:"important"},JA={compact:"紧凑",balanced:"均衡",presentation:"汇报"},FA=[{id:"medium",label:"中风险"},{id:"high",label:"高风险"},{id:"critical",label:"严重风险"}],Fy=[{id:"governance.run_schedule_now",label:"立即运行调度"},{id:"plan_step.dispatch_ready_steps",label:"派发 Ready 步骤"},{id:"managed_service.restart.fileServer",label:"重启文件服务"},{id:"artifact.access.open_location",label:"打开产物位置"}],Py={enabled:!0,approval_required_risk_levels:["high","critical"],approval_required_actions:[],auto_reject_actions:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null},Wy={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:12},ba={display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"},yi={minHeight:34,borderRadius:8,border:"1px solid var(--de-glass-border-light)",background:"rgba(255,255,255,0.72)",color:"var(--de-text-primary)",padding:"0 10px"};function PA(){try{const e=localStorage.getItem(Nm)??localStorage.getItem(Em);return e?{...Jr,...JSON.parse(e)}:Jr}catch{return Jr}}function WA(e){return!e||typeof e!="object"||Array.isArray(e)?Jr:{...Jr,...e}}function eT(){const{role:e,profile:a,setRole:l}=rj(),[r,o]=v.useState(PA),[d,p]=v.useState(Py),[h,_]=v.useState(!1),g=v.useRef(null);v.useEffect(()=>()=>{g.current&&clearTimeout(g.current)},[]),v.useEffect(()=>{let k=!1;return Cb().then(A=>{if(k||!(A!=null&&A.rolePreferences))return;const O=WA(A.rolePreferences);o(O);try{localStorage.setItem(Nm,JSON.stringify(O)),localStorage.removeItem(Em)}catch{}}),()=>{k=!0}},[]),v.useEffect(()=>{let k=!1;return Yv().then(A=>{k||p(A)}).catch(()=>{k||p(Py)}),()=>{k=!0}},[]);const x=()=>{_(!0),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>_(!1),2e3)},S=k=>{o(k);try{localStorage.setItem(Nm,JSON.stringify(k)),localStorage.removeItem(Em)}catch{}Nb({rolePreferences:k},{action:"update_role_preferences",metadata:{preferences:k}}),x()},C=(k,A)=>{S({...r,[k]:A})},z=k=>{l(k),x()},w=k=>{const A={...d,...k};p(A),Kv(k).then(O=>p(O)).catch(()=>p(d)),x()},D=k=>{const A=new Set(d.approval_required_risk_levels);A.has(k)?A.delete(k):A.add(k),w({approval_required_risk_levels:Array.from(A)})},N=(k,A)=>{const O=new Set(d[k]);O.has(A)?O.delete(A):O.add(A),w({[k]:Array.from(O)})};return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"角色偏好",children:h&&s.jsx("span",{className:"de-card-meta-text",children:"已保存"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"数字员工角色"}),s.jsx("p",{className:"de-settings-desc",children:"选择日常协作身份,数字员工会按你的岗位重点调整提醒和汇总口径。"}),s.jsx("div",{className:"de-role-grid",children:ZA.map(k=>s.jsxs("button",{className:`de-role-card ${e===k?"active":""}`,onClick:()=>z(k),children:[s.jsx("span",{className:"de-role-label",children:jm(Wr[k].labelKey)}),s.jsxs("span",{className:"de-role-density",children:[JA[Wr[k].density]??"均衡","视图"]})]},k))})]}),s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"工作偏好"}),s.jsxs("div",{style:Wy,children:[s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"工作开始时间"}),s.jsx("input",{style:yi,type:"time",value:r.workStart,onChange:k=>C("workStart",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"工作结束时间"}),s.jsx("input",{style:yi,type:"time",value:r.workEnd,onChange:k=>C("workEnd",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"默认日报时间"}),s.jsx("input",{style:yi,type:"time",value:r.reportTime,onChange:k=>C("reportTime",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"通知方式"}),s.jsxs("select",{style:yi,value:r.notification,onChange:k=>C("notification",k.target.value),children:[s.jsx("option",{value:"system",children:"系统通知"}),s.jsx("option",{value:"email",children:"邮件提醒"}),s.jsx("option",{value:"silent",children:"只在页面显示"})]})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"数字员工形象偏好"}),s.jsxs("select",{style:yi,value:r.avatarStyle,onChange:k=>C("avatarStyle",k.target.value),children:[s.jsx("option",{value:"professional",children:"专业稳重"}),s.jsx("option",{value:"friendly",children:"亲和协作"}),s.jsx("option",{value:"concise",children:"简洁高效"})]})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"任务提醒偏好"}),s.jsxs("select",{style:yi,value:r.reminderLevel,onChange:k=>C("reminderLevel",k.target.value),children:[s.jsx("option",{value:"important",children:"只提醒重要事项"}),s.jsx("option",{value:"all",children:"所有进展都提醒"}),s.jsx("option",{value:"quiet",children:"尽量少打扰"})]})]})]})]}),s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"风险审批策略"}),s.jsx("p",{className:"de-settings-desc",children:"调整客户端高风险动作在执行前是否需要人工审批,或直接拒绝;更完整的派发、路由和技能策略可在策略中心统一查看。"}),s.jsxs("div",{style:Wy,children:[s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"启用策略"}),s.jsxs("select",{style:yi,value:d.enabled?"enabled":"disabled",onChange:k=>w({enabled:k.target.value==="enabled"}),children:[s.jsx("option",{value:"enabled",children:"启用"}),s.jsx("option",{value:"disabled",children:"关闭"})]})]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"按风险等级审批"}),FA.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.approval_required_risk_levels.includes(k.id),onChange:()=>D(k.id)}),s.jsx("span",{children:k.label})]},k.id))]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"指定动作需审批"}),Fy.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.approval_required_actions.includes(k.id),onChange:()=>N("approval_required_actions",k.id)}),s.jsx("span",{children:k.label})]},k.id))]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"指定动作直接拒绝"}),Fy.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.auto_reject_actions.includes(k.id),onChange:()=>N("auto_reject_actions",k.id)}),s.jsx("span",{children:k.label})]},k.id))]})]})]}),s.jsxs("details",{className:"de-settings-section",style:{marginBottom:0},children:[s.jsx("summary",{className:"de-settings-heading",style:{cursor:"pointer"},children:"高级技术设置"}),s.jsxs("p",{className:"de-settings-desc",children:["默认隐藏,仅供技术人员排查使用。当前角色刷新阈值:",Math.round(a.staleDataThresholdMs/1e3)," 秒。"]})]})]})]})})}const _x=[{id:"home",label:"首页"},{id:"missions",label:"任务中心"},{id:"skills",label:"技能库"},{id:"reports",label:"日报"},{id:"business",label:"业务视图"},{id:"interventions",label:"介入台"},{id:"memory-governance",label:"记忆治理"},{id:"skill-audit",label:"技能审计"},{id:"ops-workbench",label:"处置台"},{id:"notification-workbench",label:"通知运营"},{id:"daily-report-workbench",label:"日报运营"},{id:"policy-center",label:"策略中心"},{id:"scheduler-workbench",label:"调度运营"},{id:"settings",label:"设置"}],tT="qimingclaw:digital-close",nT=[{id:"info",label:"消息"},{id:"warn",label:"提醒"},{id:"error",label:"异常"},{id:"action",label:"待处理"}],aT=[{id:"task_finished",label:"任务完成"},{id:"task_failed",label:"任务异常"},{id:"need_approval",label:"审批"},{id:"need_input",label:"输入"},{id:"task_progress",label:"进度"}],lm={enabled:!0,desktop_enabled:!0,muted_kinds:[],muted_levels:[],updated_at:null},hx="qimingclaw:digital-desktop-notified:v1",lT=new Set(["action","warn","error"]);function gx(e){return!!(e&&_x.some(a=>a.id===e))}function iT(e){const a=e.split("/").filter(Boolean),l=a.length>0?a[a.length-1]:null;return gx(l)?l:null}function eb(e,a){const l=new URLSearchParams(a),r=l.get("tab");return{tab:gx(r)?r:iT(e)??"home",date:l.get("date"),missionId:l.get("mission"),taskId:l.get("task"),skillId:l.get("skill"),reportSection:l.get("section"),businessKind:l.get("kind"),interventionKind:l.get("kind"),memoryQuery:l.get("q"),auditSkillId:l.get("skill_id"),opsKind:l.get("kind"),notificationKind:l.get("kind"),entityId:l.get("entity")}}function sT({target:e,onNavigate:a}){switch(e.tab){case"home":return s.jsx(A2,{onNavigate:a});case"missions":return s.jsx(_E,{focusMissionId:e.missionId,focusTaskId:e.taskId,focusDate:e.date});case"skills":return s.jsx(wE,{focusSkillId:e.skillId,onNavigate:a});case"reports":return s.jsx(LE,{focusSection:e.reportSection});case"business":return s.jsx(JE,{initialKind:e.businessKind,focusEntityId:e.entityId});case"interventions":return s.jsx(iA,{initialKind:e.interventionKind,focusEntityId:e.entityId});case"memory-governance":return s.jsx(uA,{initialQuery:e.memoryQuery,focusEntityId:e.entityId});case"skill-audit":return s.jsx(yA,{focusSkillId:e.auditSkillId||e.skillId});case"ops-workbench":return s.jsx(wA,{initialKind:e.opsKind,focusEntityId:e.entityId});case"notification-workbench":return s.jsx(RA,{initialKind:e.notificationKind,focusEntityId:e.entityId});case"daily-report-workbench":return s.jsx(LA,{focusEntityId:e.entityId});case"policy-center":return s.jsx(HA,{});case"scheduler-workbench":return s.jsx(XA,{});case"settings":return s.jsx(eT,{})}}function rT(){if(window.parent&&window.parent!==window){const e=window.location.origin==="null"?"*":window.location.origin;window.parent.postMessage({type:tT},e);return}window.close()}function cT(e){return e==="action"?"待处理":e==="error"?"异常":e==="warn"?"提醒":"消息"}function oT(e){return e==="resolved"?"已解决":e==="dismissed"?"已忽略":e==="read"?"已读":"未读"}function dT(e){const a=new Date(e);return Number.isNaN(a.getTime())?e:new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit"}).format(a)}function Am(e){return e?e==="notification_unavailable"?"系统桌面通知不可用或未授权":e==="notification_settings_unavailable"?"当前平台无法自动打开系统通知设置":e==="qimingclaw_bridge_unavailable"?"客户端通知桥接尚不可用":e:null}function tb(e){return Am(e.reason)??e.error??"通知未能发送"}function uT(){try{const e=window.localStorage.getItem(hx),a=e?JSON.parse(e):[];return new Set(Array.isArray(a)?a.filter(l=>typeof l=="string"):[])}catch{return new Set}}function fT(e){try{window.localStorage.setItem(hx,JSON.stringify(Array.from(e).slice(-300)))}catch{}}function mT(e,a){return!a.enabled||!a.desktop_enabled||e.status!=="unread"||!lT.has(e.level)||a.muted_levels.includes(e.level)?!1:!a.muted_kinds.includes(e.kind)}async function pT(e,a){const l=uT(),r=e.filter(d=>mT(d,a)&&!l.has(d.notification_id));return r.length===0?null:(r.forEach(d=>l.add(d.notification_id)),fT(l),(await Promise.all(r.slice(0,3).map(d=>Uv({notification_id:d.notification_id,title:d.title,body:d.body,level:d.level,kind:d.kind,status:d.status}).catch(p=>({ok:!1,shown:!1,error:p instanceof Error?p.message:String(p)}))))).find(d=>d.ok===!1||d.shown!==!0)??null)}function _T(){const e=ia(),a=Dm(),[l,r]=v.useState(()=>eb(e.pathname,e.search)),[o,d]=v.useState(!1),[p,h]=v.useState([]),[_,g]=v.useState(0),[x,S]=v.useState(!1),[C,z]=v.useState(!1),[w,D]=v.useState(!1),[N,k]=v.useState(lm),[A,O]=v.useState(null),[te,I]=v.useState(!1),[ie,Z]=v.useState(!1),[K,pe]=v.useState(!1),[P,q]=v.useState(null),[ce,R]=v.useState({}),M=v.useCallback(async()=>{I(!0);try{O(await WC())}catch(V){O({supported:!1,platform:"unknown",can_open_settings:!1,reason:V instanceof Error?V.message:String(V)})}finally{I(!1)}},[]),ne=v.useCallback(async()=>{S(!0);try{const[V,Ce,yt]=await Promise.all([XC("all"),ZC(),JC().catch(()=>lm)]);h(V),g(Ce),k(yt),pT(V,yt).then(He=>{He&&q({tone:"warning",message:"自动桌面通知发送失败",detail:tb(He)})})}catch{h([]),g(0),k(lm)}finally{S(!1)}},[]);v.useEffect(()=>{r(eb(e.pathname,e.search))},[e.pathname,e.search]),v.useEffect(()=>{ne()},[ne]),v.useEffect(()=>{w&&M()},[w,M]);const B=v.useCallback(V=>{r(V);const Ce=new URLSearchParams;V.tab!=="home"&&Ce.set("tab",V.tab),V.date&&Ce.set("date",V.date),V.missionId&&Ce.set("mission",V.missionId),V.taskId&&Ce.set("task",V.taskId),V.skillId&&Ce.set("skill",V.skillId),V.reportSection&&Ce.set("section",V.reportSection),V.businessKind&&Ce.set("kind",V.businessKind),V.interventionKind&&Ce.set("kind",V.interventionKind),V.memoryQuery&&Ce.set("q",V.memoryQuery),V.auditSkillId&&Ce.set("skill_id",V.auditSkillId),V.opsKind&&Ce.set("kind",V.opsKind),V.notificationKind&&Ce.set("kind",V.notificationKind),V.entityId&&Ce.set("entity",V.entityId),a({pathname:e.pathname,search:Ce.toString()?`?${Ce.toString()}`:""},{replace:!1})},[e.pathname,a]),U=v.useCallback(async V=>{await rN(V),await ne()},[ne]),le=v.useCallback(async V=>{await cN(V),await ne()},[ne]),de=v.useCallback(async V=>{const Ce=(ce[V]??"").trim();Ce&&(await Vv(V,Ce),R(yt=>({...yt,[V]:""})),await ne())},[ne,ce]),Te=v.useCallback(async()=>{z(!0);try{await PC()}finally{z(!1),await ne()}},[ne]),E=v.useCallback(async V=>{const Ce=await FC(V);k(Ce),await ne()},[ne]),J=v.useCallback(V=>{const Ce=new Set(N.muted_levels);Ce.has(V)?Ce.delete(V):Ce.add(V),E({muted_levels:Array.from(Ce)})},[N.muted_levels,E]),se=v.useCallback(V=>{const Ce=new Set(N.muted_kinds);Ce.has(V)?Ce.delete(V):Ce.add(V),E({muted_kinds:Array.from(Ce)})},[N.muted_kinds,E]),ue=v.useCallback(async()=>{Z(!0);try{const V=await Uv({notification_id:`desktop-notification-test-${Date.now()}`,title:"数字员工桌面通知测试",body:"如果看到这条通知,系统桌面通知入口已可用。",level:"info",kind:"task_progress",status:"unread"});q(V.ok!==!1&&V.shown===!0?{tone:"success",message:"测试桌面通知已发送",detail:null}:{tone:"warning",message:"测试桌面通知发送失败",detail:tb(V)}),await M()}catch(V){q({tone:"warning",message:"测试桌面通知发送失败",detail:V instanceof Error?V.message:String(V)})}finally{Z(!1)}},[M]),ve=v.useCallback(async()=>{pe(!0);try{const V=await eN();q(V.success?{tone:"success",message:"已打开系统设置",detail:null}:{tone:"warning",message:"无法打开系统设置",detail:Am(V.reason)??V.error??"当前平台不支持自动打开"}),await M()}catch(V){q({tone:"warning",message:"无法打开系统设置",detail:V instanceof Error?V.message:String(V)})}finally{pe(!1)}},[M]),Ee=(P==null?void 0:P.tone)==="warning"||(A==null?void 0:A.supported)===!1?"warning":"success",ae=(P==null?void 0:P.message)??(te?"正在检查桌面通知":(A==null?void 0:A.supported)===!1?"系统桌面通知不可用":"系统桌面通知可用"),he=(P==null?void 0:P.detail)??Am(A==null?void 0:A.reason)??(A!=null&&A.platform?`平台:${A.platform}`:null),Ie=(A==null?void 0:A.can_open_settings)===!0||Ee==="warning";return s.jsx(sj,{children:s.jsxs("div",{className:"de-shell",children:[s.jsx("header",{className:"de-header",children:s.jsxs("div",{className:"de-header-content",children:[s.jsxs("div",{className:"de-header-left",children:[s.jsx("div",{className:"de-header-accent-bar"}),s.jsx("h1",{className:"de-header-title",children:"智能数字人系统"})]}),s.jsx("div",{className:"de-header-center",children:_x.map(V=>s.jsx("button",{className:`de-nav-btn ${l.tab===V.id?"active":""}`,onClick:()=>B({tab:V.id}),children:s.jsx("span",{children:V.label})},V.id))}),s.jsxs("div",{className:"de-header-right",children:[s.jsx("span",{className:"de-header-welcome",children:"欢迎您,"}),s.jsx("span",{className:"de-header-username",children:"王琦"}),s.jsx("button",{type:"button",className:"de-header-icon",title:"消息",children:s.jsx(PS,{size:16})}),s.jsxs("div",{className:"de-notification-anchor",children:[s.jsxs("button",{type:"button",className:`de-header-icon ${o?"active":""}`,title:"通知",onClick:()=>{d(V=>!V),ne()},children:[s.jsx(YS,{size:16}),_>0&&s.jsx("span",{className:"de-notification-count",children:_>99?"99+":_})]}),o&&s.jsxs("div",{className:"de-notification-popover",children:[s.jsxs("div",{className:"de-notification-head",children:[s.jsxs("div",{className:"de-notification-head-title",children:[s.jsx("strong",{children:"通知"}),s.jsx("span",{children:_>0?`${_} 条未读`:"暂无未读"})]}),s.jsxs("div",{className:"de-notification-head-actions",children:[s.jsx("button",{type:"button",className:`de-header-icon de-notification-close ${C?"active":""}`,title:"同步通知",onClick:()=>{Te()},disabled:C,children:s.jsx(ln,{size:14})}),s.jsx("button",{type:"button",className:`de-header-icon de-notification-close ${w?"active":""}`,title:"通知设置",onClick:()=>D(V=>!V),children:s.jsx(tj,{size:14})}),s.jsx("button",{type:"button",className:"de-header-icon de-notification-close",title:"关闭",onClick:()=>d(!1),children:s.jsx(ka,{size:14})})]})]}),w&&s.jsxs("div",{className:"de-notification-preferences",children:[s.jsxs("label",{className:"de-notification-switch",children:[s.jsx("input",{type:"checkbox",checked:N.enabled,onChange:V=>{E({enabled:V.target.checked})}}),s.jsx("span",{children:"接收通知"})]}),s.jsxs("label",{className:"de-notification-switch",children:[s.jsx("input",{type:"checkbox",checked:N.desktop_enabled,onChange:V=>{E({desktop_enabled:V.target.checked})}}),s.jsx("span",{children:"桌面通知"})]}),s.jsxs("div",{className:`de-notification-desktop-status de-notification-desktop-status--${Ee}`,children:[s.jsxs("div",{className:"de-notification-desktop-copy",children:[s.jsx("span",{children:"桌面通知状态"}),s.jsx("strong",{children:ae}),he&&s.jsx("small",{children:he})]}),s.jsxs("div",{className:"de-notification-desktop-actions",children:[s.jsxs("button",{type:"button",className:"de-notification-desktop-btn",title:"测试桌面通知",onClick:()=>{ue()},disabled:ie,children:[s.jsx(GS,{size:13}),s.jsx("span",{children:"测试桌面通知"})]}),Ie&&s.jsxs("button",{type:"button",className:"de-notification-desktop-btn",title:"打开系统设置",onClick:()=>{ve()},disabled:K,children:[s.jsx(VS,{size:13}),s.jsx("span",{children:"打开系统设置"})]})]})]}),s.jsxs("div",{className:"de-notification-preference-group",children:[s.jsx("span",{children:"静音等级"}),s.jsx("div",{className:"de-notification-segment-row",children:nT.map(V=>s.jsx("button",{type:"button",className:N.muted_levels.includes(V.id)?"active":"",title:`${V.label}静音`,onClick:()=>J(V.id),children:V.label},V.id))})]}),s.jsxs("div",{className:"de-notification-preference-group",children:[s.jsx("span",{children:"静音类型"}),s.jsx("div",{className:"de-notification-toggle-grid",children:aT.map(V=>s.jsxs("label",{children:[s.jsx("input",{type:"checkbox",checked:N.muted_kinds.includes(V.id),onChange:()=>se(V.id)}),s.jsx("span",{children:V.label})]},V.id))})]})]}),s.jsxs("div",{className:"de-notification-list",children:[x&&s.jsx("div",{className:"de-notification-empty",children:"加载中"}),!x&&p.length===0&&s.jsx("div",{className:"de-notification-empty",children:"暂无通知"}),!x&&p.map(V=>s.jsxs("article",{className:`de-notification-item de-notification-item--${V.level}`,children:[s.jsxs("div",{className:"de-notification-item-head",children:[s.jsx("span",{className:"de-notification-level",children:cT(V.level)}),s.jsx("span",{className:"de-notification-time",children:dT(V.created_at)})]}),s.jsxs("div",{className:"de-notification-title-row",children:[s.jsx("h3",{children:V.title}),s.jsx("span",{children:oT(V.status)})]}),s.jsx("p",{children:V.body}),V.reply&&s.jsx("div",{className:"de-notification-reply",children:V.reply}),V.status!=="resolved"&&V.status!=="dismissed"&&s.jsxs("div",{className:"de-notification-actions",children:[V.status==="unread"&&s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"标记已读",onClick:()=>void U(V.notification_id),children:s.jsx(KS,{size:14})}),s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"忽略",onClick:()=>void le(V.notification_id),children:s.jsx(ka,{size:14})})]}),V.kind==="need_input"&&V.status!=="dismissed"&&s.jsxs("div",{className:"de-notification-reply-row",children:[s.jsx("input",{value:ce[V.notification_id]??"",onChange:Ce=>R(yt=>({...yt,[V.notification_id]:Ce.target.value}))}),s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"回复",onClick:()=>void de(V.notification_id),children:s.jsx(Qo,{size:14})})]})]},V.notification_id))]})]})]}),s.jsx("button",{type:"button",className:"de-header-icon de-header-close",title:"关闭",onClick:rT,children:s.jsx(ka,{size:17})})]})]})}),s.jsx("div",{className:"de-shell-body",children:s.jsx(sT,{target:l,onNavigate:B})})]})})}function hT(){return s.jsx(AS,{children:s.jsxs(iS,{children:[s.jsx(sm,{path:"/digital/*",element:s.jsx(_T,{})}),s.jsx(sm,{path:"*",element:s.jsx(aS,{to:"/digital",replace:!0})})]})})}s0.createRoot(document.getElementById("root")).render(s.jsx(Wk.StrictMode,{children:s.jsx(hT,{})})); +%%EOF`;return window.btoa(g)}function Vw(e){return e.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")}function Ir(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Xw(e,a){return`daily-report:${e}:${mt(a)}`}function Zw(e){return e.slice(0,20).map(a=>({id:u(a.artifact_id)||`${u(a.subject_id)}:${u(a.uri??a.name)}`,name:u(a.name)||u(a.uri)||u(a.value)||"未命名产物",kind:u(a.kind)||null,uri:u(a.uri)||null,delivery_status:u(a.delivery_status)||null,delivery_stage:u(a.delivery_stage)||null,workspace_id:u(a.workspace_id)||null,project_id:u(a.project_id)||null,file_id:u(a.file_id)||null,version:u(a.version)||null,version_key:u(a.version_key)||null,version_rank:vt(a.version_rank),retention_status:u(a.retention_status)||null,retention_until:u(a.retention_until)||null,last_retention_action:u(a.last_retention_action)||null,cleanup_status:u(a.cleanup_status)||null,deleted_at:u(a.deleted_at)||null,cleanup_reason:u(a.cleanup_reason)||null,cleanup_event_id:u(a.cleanup_event_id)||null,file_size:typeof a.file_size=="number"?a.file_size:null,source_tool:u(a.source_tool)||null,source_label:u(a.source_label)||null,source_type:u(a.source_type)||null,source_event_id:u(a.source_event_id)||null,plan_id:u(a.plan_id)||null,task_id:u(a.task_id)||null,run_id:u(a.run_id)||null,created_at:u(a.created_at)||null,access:a.access,delivery_summary:a.delivery_summary??null}))}async function Jw(e,a){var _,g,x;const l=(a==null?void 0:a.uiState)??await yn()??Nt(),r=e.date||ac();e.action==="confirm_workday"&&(l.selectedDutyIdsByDate[r]=e.duty_ids??[],l.confirmedDates[r]=new Date().toISOString()),e.action==="update_profile"&&(l.profile={name:e.name||l.profile.name,company:e.company||l.profile.company,position:e.position||l.profile.position,currentStatus:e.current_status||l.profile.currentStatus}),e.action==="update_report_schedule"&&(l.reportScheduleTime=e.report_schedule_time||l.reportScheduleTime),e.action==="generate_daily_report"&&(e.duty_ids&&(l.selectedDutyIdsByDate[r]=e.duty_ids),e.report_schedule_time&&(l.reportScheduleTime=e.report_schedule_time),l.reportGeneratedAtByDate[r]=new Date().toISOString()),e.action==="decide_approval"&&e.decision_id&&(l.decisionResultsByDate=l.decisionResultsByDate??{},l.decisionResultsByDate[r]={...l.decisionResultsByDate[r]??{},[e.decision_id]:e.decision||"resolved"});const o=e.action==="decide_approval"?await Ww(e,a):null,d=await Gn(l,e.action,r,e.action==="decide_approval"?{decision_id:e.decision_id,decision:e.decision,acp_permission:o}:void 0),p={...a??{generatedAt:new Date().toISOString(),services:{},sessions:{total:0,active:0,items:[]}},uiState:d};e.action==="decide_approval"&&await((x=(g=(_=window.QimingClawBridge)==null?void 0:_.digital)==null?void 0:g.submitApprovalDecision)==null?void 0:x.call(g,{approval_id:e.decision_id,decision:e.decision,date:r,actor:"digital_employee_operator",source:"sgrobot-digital-adapter",acp_permission:o}).catch(()=>null));const h=Rv(r,p);return e.action==="generate_daily_report"&&h.daily_report&&await Fw(h.daily_report),h}async function Fw(e){var a,l,r;if(!(!e.report_id||!e.generated_at||!e.text_content))try{await((r=(l=(a=window.QimingClawBridge)==null?void 0:a.digital)==null?void 0:l.recordDailyReport)==null?void 0:r.call(l,{reportId:e.report_id,date:e.date,title:e.title,summary:e.summary,totals:e.totals,detailLines:e.detail_lines,artifactSources:e.artifact_sources??[],filename:e.download_filename||Wm(e.date),textContent:e.text_content,htmlFilename:e.html_filename||ep(e.date),htmlContent:e.html_content||$v(e,e.text_content),pdfFilename:e.pdf_filename||tp(e.date),pdfContentBase64:Qw(e,e.text_content),generatedAt:e.generated_at,reportScheduleTime:e.report_schedule_time,source:e.source??"qimingclaw",model:e.model??"qimingclaw-adapter"}))}catch(o){console.warn("[qimingclawAdapter] record daily report failed:",o)}}async function Pw(e){var h,_;const a=u(e.reportId);if(!a)return{eventId:""};const l=(_=(h=window.QimingClawBridge)==null?void 0:h.digital)==null?void 0:_.recordDailyReportDelivery,r={reportId:a,action:e.action,status:e.status,actor:e.actor??"digital_employee_operator",endpoint:e.endpoint??"management-console",remoteId:e.remoteId??null,message:e.message??null},o=l?await l(r)??{eventId:""}:{eventId:""},d=await yn()??Nt(),p=new Date().toISOString();return await Gn({...Ul(d),dailyReportWorkbenchStateById:{...d.dailyReportWorkbenchStateById??{},[a]:{status:e.action==="confirm"?"confirmed":e.action==="request_approval"?"approval_requested":"sent",last_action:e.action,actor:r.actor,reason:e.message??null,updated_at:p}}},"daily_report_workbench_action_recorded",void 0,{report_id:a,action:e.action,status:e.status,event_id:o.eventId||null}),o}async function Ww(e,a){var p,h;if(!e.decision_id||!e.decision)return null;const l=eC(e.decision_id,a);if(!l)return null;const r=tC(l);if(!r)return null;const o=nC(e.decision),d=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.respondPermission;if(!d)return null;try{const _=await d(r.sessionId,r.permissionId,o);return{permission_id:r.permissionId,session_id:r.sessionId,response:o,success:(_==null?void 0:_.success)!==!1,error:_==null?void 0:_.error}}catch(_){return{permission_id:r.permissionId,session_id:r.sessionId,response:o,success:!1,error:_ instanceof Error?_.message:String(_)}}}function eC(e,a){return Yl(a).find(l=>u(l.approval_id)===e)??null}function tC(e){const a=oe(e.payload),l=oe(a==null?void 0:a.payload),r=u(a==null?void 0:a.permissionId)||u(a==null?void 0:a.permission_id)||u(a==null?void 0:a.id)||u(l==null?void 0:l.permissionId)||u(l==null?void 0:l.permission_id)||u(l==null?void 0:l.id),o=u(a==null?void 0:a.sessionId)||u(a==null?void 0:a.session_id)||u(l==null?void 0:l.sessionId)||u(l==null?void 0:l.session_id),d=u(a==null?void 0:a.source);return!r||!o||d&&d!=="acp-permission"?null:{permissionId:r,sessionId:o}}function nC(e){const a=e.toLowerCase();return a.includes("always")?"always":a.includes("reject")||a.includes("deny")?"reject":"once"}async function cy(e,a,l,r={}){const o=lC(a),d=`plan-action-${mt(e)}-${mt(a)}-${Date.now()}`;return o?Kl({command_kind:o,context_refs:{plan_id:e},payload:{...r,plan_id:e,requested_action:`plan_${a}`,action_endpoint:`/api/debug/plan/${e}/${a}`},correlation_id:d},l):{command_id:`qimingclaw-digital-plan-action-${Date.now()}`,accepted:!1,correlation_id:d,message:`暂不支持计划动作:${a}`,error:"unsupported_command"}}async function aC(e,a,l,r={}){const o=iC(a),d=Ct(l).find(S=>S.id===e),p=bd(Hn(l),e),h=(d==null?void 0:d.planId)??(u(r.plan_id)||void 0),_=(p==null?void 0:p.id)??(u(r.run_id)||void 0),g=d?al(d):u(r.step_id)||void 0,x=`task-action-${mt(e)}-${mt(a)}-${Date.now()}`;return o?Kl({command_kind:o,context_refs:{plan_id:h,task_id:e,run_id:_,step_id:g},payload:{...r,task_id:e,plan_id:h??r.plan_id,run_id:_??r.run_id,step_id:g??r.step_id,requested_action:`task_${a}`,action_endpoint:`/api/task/${e}/${a}`},correlation_id:x},l):{command_id:`qimingclaw-digital-task-action-${Date.now()}`,accepted:!1,correlation_id:x,message:`暂不支持任务动作:${a}`,error:"unsupported_command"}}function lC(e){switch(e.toLowerCase()){case"submit":return"submit_plan";case"approve":return"approve_plan";case"activate":return"activate_plan";case"pause":return"pause_plan";case"resume":return"resume_plan";case"cancel":return"cancel_plan";case"amend":return"amend_plan";default:return null}}function iC(e){switch(e.toLowerCase()){case"retry":return"retry_task";case"skip":return"skip_task";case"pause":return"pause_task";case"resume":return"resume_task";case"cancel":return"cancel_task";case"start":return"start_run";default:return null}}function sC(e,a){const l=rt(a).filter(r=>r.planId===e&&r.kind.startsWith("governance_")).sort((r,o)=>o.occurredAt.localeCompare(r.occurredAt)||o.createdAt.localeCompare(r.createdAt)).map(r=>{const o=oe(r.payload)??{},d=oe(o.result)??{},p=u(o.commandKind)||r.kind.replace(/^governance_/,"");return{revision_id:r.id,plan_id:e,event_id:r.id,command_kind:p,action:p.replace(/_plan$/,""),status:u(d.status)||u(o.status)||"recorded",message:r.message,created_at:r.occurredAt,payload:o}});return{plan_id:e,revisions:l}}async function rC(e=80){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.listRouteDecisions))return{has_route_decision_state:!1,decisions:[]};try{return{has_route_decision_state:!0,decisions:await a.listRouteDecisions({limit:e})??[]}}catch(r){return console.warn("[qimingclawAdapter] list route decisions failed:",r),{has_route_decision_state:!1,decisions:[]}}}async function wd(e=80){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.listRouteInterventions))return{has_route_intervention_state:!1,interventions:[]};try{return{has_route_intervention_state:!0,interventions:await a.listRouteInterventions({limit:e})??[]}}catch(r){return console.warn("[qimingclawAdapter] list route interventions failed:",r),{has_route_intervention_state:!1,interventions:[]}}}async function Dv(e,a,l){const r=u(a.decision)||"reject",o=u(a.approval_id)||dC(e,l),p=(await wd(160)).interventions.find(C=>C.route_decision_id===e)??null,h=np(e,l),_=(h==null?void 0:h.decision)??zv(p,e);if(!_){const C=await hm({routeDecisionId:e,approvalId:o,decision:r,commandAccepted:!1,commandError:"route_intervention_missing_context",actor:a.actor??"digital_employee_operator",occurredAt:new Date().toISOString()});return{accepted:!1,route_decision_id:e,intervention:C,error:"invalid_context",message:"入口路由上下文缺失,无法恢复执行。"}}await uC(o,r,a.actor??"digital_employee_operator",l);let g=null,x=null;if(gm(r)){const C=Mv(_,(h==null?void 0:h.body)??oC(_),l);C.command?(g=await Kl(C.command,l),g.accepted||(x=g.error||"route_intervention_command_rejected")):x=C.reasonCode||"route_intervention_missing_context"}const S=await hm({routeDecisionId:e,approvalId:o,decision:r,createdCommandId:(g==null?void 0:g.command_id)??null,commandAccepted:(g==null?void 0:g.accepted)===!0,commandError:x,blockedReason:_.blocked_reason??null,policyResult:_.policy_result??null,policySource:_.policy_source??null,matchedIntent:_.matched_intent??null,routeKind:_.route_kind,intentKind:_.intent_kind,reasonCodes:_.reason_codes,candidateSkills:_.candidate_skills,contextRefs:_.context_refs,entrypoint:_.entrypoint??null,actor:a.actor??"digital_employee_operator",correlationId:_.correlation_id,payload:{comment:a.comment??null},occurredAt:new Date().toISOString()});return{accepted:S.intervention_status!=="failed",route_decision_id:e,intervention:S,command:g,error:x||void 0,message:S.resolution_duplicate?"入口路由干预已处理。":gm(r)?g!=null&&g.command_id?"入口路由干预已通过并恢复执行。":"入口路由干预已通过。":"入口路由干预已拒绝。"}}async function cC(e,a){const l=u(e.decision)||"mark_reviewed";if(!["mark_reviewed","dismiss","retry_policy_check"].includes(l))return{ok:!1,decision:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["invalid_route_intervention_batch_decision"]};const r=Le([...we(e.route_decision_ids),...we(e.routeDecisionIds)]).slice(0,50);if(r.length===0)return{ok:!1,decision:l,total:0,recorded:0,rejected:0,items:[],reason_codes:["route_decision_ids_required"]};const o=await wd(200),d=[];for(const h of r){const _=np(h,a),g=o.interventions.find(C=>C.route_decision_id===h)??null,x=(_==null?void 0:_.decision)??zv(g,h);if(!x){d.push({route_decision_id:h,ok:!1,status:"rejected",error:"route_intervention_missing_context",reason_codes:["route_intervention_missing_context"]});continue}const S=await hm({routeDecisionId:h,approvalId:x.approval_id??(g==null?void 0:g.approval_id)??null,decision:l,commandAccepted:!1,commandError:null,blockedReason:x.blocked_reason??null,policyResult:x.policy_result??null,policySource:x.policy_source??null,matchedIntent:x.matched_intent??null,routeKind:x.route_kind,intentKind:x.intent_kind,reasonCodes:x.reason_codes,candidateSkills:x.candidate_skills,contextRefs:x.context_refs,entrypoint:x.entrypoint??null,actor:u(e.actor)||"digital_employee_operator",correlationId:x.correlation_id,payload:{comment:u(e.comment)||null,batch_decision:l},occurredAt:new Date().toISOString()});d.push({route_decision_id:h,ok:S.intervention_status!=="failed",status:S.intervention_status,intervention:S,reason_codes:S.reason_codes??[]})}const p=d.filter(h=>h.ok===!0).length;return{ok:p>0,decision:l,total:r.length,recorded:p,rejected:r.length-p,items:d,reason_codes:Le(d.flatMap(h=>we(h.reason_codes)))}}async function hm(e){var l;const a=(l=window.QimingClawBridge)==null?void 0:l.digital;return a!=null&&a.recordRouteInterventionResolution?a.recordRouteInterventionResolution(e):{route_decision_id:e.routeDecisionId,approval_id:e.approvalId??null,route_kind:e.routeKind??"ChatOnly",intent_kind:e.intentKind??"chat",policy_result:e.policyResult??null,intervention_status:e.commandError?"failed":gm(e.decision)?"approved":"rejected",decision:e.decision,created_command_id:e.createdCommandId??null,blocked_reason:e.blockedReason??null,matched_intent:e.matchedIntent??null,policy_source:e.policySource??null,reason_codes:e.reasonCodes??[],candidate_skills:e.candidateSkills??[],context_refs:e.contextRefs??{},entrypoint:e.entrypoint??null,actor:e.actor??null,correlation_id:e.correlationId??null,approval_status:null,recorded_at:e.occurredAt??new Date().toISOString(),resolved_at:e.occurredAt??new Date().toISOString(),resolution_duplicate:!1}}function np(e,a){const l=rt(a).find(p=>{if(p.kind!=="route_decision")return!1;const h=oe(p.payload)??{};return fm(h,p).id===e});if(!l)return null;const r=oe(l.payload)??{},o=fm(r,l),d=oe(r.envelope)??{};return{decision:o,body:{entrypoint:o.entrypoint??"chat",actor:o.actor??void 0,text:u(d.text)||void 0,payload:oe(d.payload)??{},attachments:we(d.attachments).filter(p=>typeof p=="string"),timestamp:o.recorded_at,correlation_id:o.correlation_id,idempotency_key:`route-intervention:${o.id}`,context_refs:o.context_refs}}}function zv(e,a){return e?{id:a,route_kind:e.route_kind,intent_kind:e.intent_kind,reason_codes:e.reason_codes??[],candidate_skills:e.candidate_skills??[],context_refs:e.context_refs??{},created_command_id:e.created_command_id,correlation_id:e.correlation_id||a,creates_plan:e.route_kind==="PlanControl"||e.route_kind==="PlanExecution",creates_task_run:e.route_kind==="DirectRun"||e.route_kind==="PlanExecution",approval_mode:e.approval_id?"manual":null,policy_result:e.policy_result,policy_source:e.policy_source,blocked_reason:e.blocked_reason,approval_id:e.approval_id,matched_intent:e.matched_intent,recorded_at:e.recorded_at,entrypoint:e.entrypoint,actor:e.actor}:null}function oC(e){return{entrypoint:e.entrypoint??"chat",actor:e.actor??void 0,payload:{},attachments:[],timestamp:e.recorded_at,correlation_id:e.correlation_id,idempotency_key:`route-intervention:${e.id}`,context_refs:e.context_refs}}function dC(e,a){const l=np(e,a);if(l!=null&&l.decision.approval_id)return l.decision.approval_id;const r=cc(a).find(o=>u(o.route_decision_id)===e);return u(r==null?void 0:r.approval_id)||null}async function uC(e,a,l,r){var p,h,_;if(!e)return;const o=ac(),d=(r==null?void 0:r.uiState)??await yn()??Nt();d.decisionResultsByDate=d.decisionResultsByDate??{},d.decisionResultsByDate[o]={...d.decisionResultsByDate[o]??{},[e]:a},await Gn(d,"decide_approval",o,{decision_id:e,decision:a,actor:l}),await((_=(h=(p=window.QimingClawBridge)==null?void 0:p.digital)==null?void 0:h.submitApprovalDecision)==null?void 0:_.call(h,{approval_id:e,decision:a,date:o,actor:l,source:"sgrobot-route-intervention"}).catch(()=>null))}function gm(e){return["approve","approved","accept","accepted"].includes(e.toLowerCase())}async function fC(e,a){var te,I,ie,Z,K;const l=e.timestamp||new Date().toISOString(),r=e.correlation_id||`route-${Date.now()}`,o=e.idempotency_key||r,d=gC(e),p=yC(e,d,a),h=await vC(p.candidateSkills),_=h.allCandidatesDisabled?[...p.reasonCodes,"candidate_skills_disabled"]:p.reasonCodes,g={id:`route-decision-${mt(o)}`,route_kind:p.routeKind,intent_kind:p.intentKind,reason_codes:_,candidate_skills:h.candidateSkills,context_refs:d,created_command_id:null,correlation_id:r,creates_plan:p.createsPlan,creates_task_run:p.createsTaskRun,approval_mode:null,policy_result:"accepted",policy_source:null,blocked_reason:null,approval_id:null,matched_intent:null,recorded_at:l,entrypoint:e.entrypoint??null,actor:e.actor??null},x=await Rj({routeDecisionId:g.id,routeKind:g.route_kind,intentKind:g.intent_kind,reasonCodes:g.reason_codes,candidateSkills:g.candidate_skills,contextRefs:g.context_refs,correlationId:r,idempotencyKey:e.idempotency_key,entrypoint:e.entrypoint??null,actor:e.actor??null,source:"qimingclaw-ingress-route",payload:{text:e.text??null,payload:e.payload??null,attachments:e.attachments??[]},occurredAt:l}),S=u(x.decision)||"allowed";g.policy_result=x.policy_result||(S==="allowed"?"accepted":S),g.policy_source=x.policy_source??((te=x.policy)==null?void 0:te.source)??null,g.blocked_reason=x.blocked_reason??null,g.approval_id=x.approval_id??null,g.matched_intent=x.matched_intent??null,g.reason_codes=Le([...g.reason_codes,...x.reason_codes??[]]);const C=((I=x.policy)==null?void 0:I.preferred_route_kinds)??[];C.length>0&&!C.includes(g.route_kind)&&(g.reason_codes=Le([...g.reason_codes,"route_kind_not_preferred"]));const z=S==="allowed"&&((ie=x.policy)==null?void 0:ie.auto_create_governance_commands)!==!1;S==="allowed"&&((Z=x.policy)==null?void 0:Z.auto_create_governance_commands)===!1&&(g.reason_codes=Le([...g.reason_codes,"route_command_auto_create_disabled"]));const w=z?Mv(g,e,a):{command:null,reasonCode:S==="allowed"?"route_command_auto_create_disabled":`route_policy_${g.policy_result}`},D=w.command?await Kl(w.command,a):null;D!=null&&D.accepted&&D.command_id?(g.created_command_id=D.command_id,g.reason_codes=Le([...g.reason_codes,"route_action_mapped"])):w.reasonCode&&(g.reason_codes=Le([...g.reason_codes,w.reasonCode]));const N=(K=window.QimingClawBridge)==null?void 0:K.digital,A=(N!=null&&N.recordRouteDecision?await N.recordRouteDecision({id:g.id,idempotencyKey:e.idempotency_key,correlationId:r,routeKind:g.route_kind,intentKind:g.intent_kind,reasonCodes:g.reason_codes,candidateSkills:g.candidate_skills,contextRefs:g.context_refs,createdCommandId:g.created_command_id,createsPlan:g.creates_plan,createsTaskRun:g.creates_task_run,approvalMode:g.approval_mode,policyResult:g.policy_result,policySource:g.policy_source,blockedReason:g.blocked_reason,approvalId:g.approval_id,matchedIntent:g.matched_intent,entrypoint:g.entrypoint,actor:g.actor,message:`入口路由决策:${g.route_kind} / ${g.intent_kind}`,envelope:{text:e.text??null,payload:e.payload??null,attachments:e.attachments??[]},recordedAt:l}):null)??g,O=hC(D);return S!=="allowed"?{accepted:!1,envelope:{entrypoint:e.entrypoint??"chat",text:e.text??null,payload:e.payload??null,attachments:e.attachments??[],context_refs:d},response_kind:"route_decision",route_decision:A,command:null,created_plan_id:null,created_schedule_id:null,created_task_ids:[],created_run_ids:[],projection_name:null,projection_payload:null,error:"policy_blocked",message:S==="approval_required"?`入口路由需要审批:${A.route_kind} / ${A.intent_kind}`:`入口路由已被策略阻断:${A.route_kind} / ${A.intent_kind}`}:{accepted:!0,envelope:{entrypoint:e.entrypoint??"chat",text:e.text??null,payload:e.payload??null,attachments:e.attachments??[],context_refs:d},response_kind:"route_decision",route_decision:A,command:D,created_plan_id:O.createdPlanId,created_schedule_id:O.createdScheduleId,created_task_ids:O.createdTaskIds,created_run_ids:O.createdRunIds,projection_name:null,projection_payload:null,message:D!=null&&D.command_id?`已记录入口路由并映射治理动作:${A.route_kind} / ${A.intent_kind}`:`已记录入口路由:${A.route_kind} / ${A.intent_kind}`}}function Mv(e,a,l){if(e.reason_codes.includes("candidate_skills_disabled"))return{command:null,reasonCode:"route_action_not_mapped"};const r=e.context_refs??{},o=oe(a.payload)??{},d=_n({...o,source:"qimingclaw-ingress-route",route_decision_id:e.id,route_kind:e.route_kind,intent_kind:e.intent_kind,reason_codes:e.reason_codes,ingress_text:a.text??null}),p=(h,_)=>({command_kind:h,context_refs:_n({...r,..._}),payload:_n({...d,..._}),correlation_id:e.correlation_id,idempotency_key:`route-command:${e.id}`});if(e.route_kind==="PlanExecution"&&e.intent_kind==="schedule"){const h=u(r.schedule_id)||u(o.schedule_id)||u(o.scheduleId);if(!h)return{command:null,reasonCode:"route_action_missing_context"};const _="run_schedule_now",g=Kf(_);return g?{command:null,reasonCode:g}:{command:p(_,{schedule_id:h}),reasonCode:"route_action_mapped"}}if(e.route_kind==="PlanExecution"&&e.intent_kind==="execute"){const h=u(r.step_id)||u(o.step_id)||u(o.stepId),_=u(r.task_id)||u(o.task_id)||u(o.taskId)||mC(l,h);if(!_)return{command:null,reasonCode:"route_action_missing_context"};const g=Ct(l).find(C=>C.id===_)??null,x="start_run",S=Kf(x);return S?{command:null,reasonCode:S}:{command:p(x,{plan_id:u(r.plan_id)||(g==null?void 0:g.planId)||u(o.plan_id)||u(o.planId),task_id:_,step_id:h||(g?al(g):""),run_id:u(r.run_id)||u(o.run_id)||u(o.runId)}),reasonCode:"route_action_mapped"}}if(e.route_kind==="PlanControl"&&e.intent_kind==="control"){const h=pC(a),_=u(r.task_id)||u(o.task_id)||u(o.taskId),g=u(r.plan_id)||u(o.plan_id)||u(o.planId),x=_C(h,!!_);if(!x||!_&&!g)return{command:null,reasonCode:"route_action_missing_context"};const S=Kf(x);return S?{command:null,reasonCode:S}:{command:p(x,{plan_id:g,task_id:_,step_id:u(r.step_id)||u(o.step_id)||u(o.stepId),run_id:u(r.run_id)||u(o.run_id)||u(o.runId)}),reasonCode:"route_action_mapped"}}return{command:null,reasonCode:"route_action_not_mapped"}}function mC(e,a){var r;return!a||!ji(e).some(o=>o.id===a&&o.status.toLowerCase()==="ready")?"":((r=Ct(e).find(o=>al(o)===a))==null?void 0:r.id)??""}function pC(e){const a=oe(e.payload)??{};return[e.text,a.action,a.command,a.intent,a.requested_action].map(u).filter(Boolean).join(" ").toLowerCase()}function _C(e,a){return a?Vt(e,["retry","重试"])?"retry_task":Vt(e,["skip","跳过"])?"skip_task":Vt(e,["pause","暂停"])?"pause_task":Vt(e,["resume","恢复"])?"resume_task":Vt(e,["cancel","取消"])?"cancel_task":Vt(e,["start","run","execute","begin","启动","开始","执行"])?"start_run":null:Vt(e,["submit","提交"])?"submit_plan":Vt(e,["approve","批准","同意"])?"approve_plan":Vt(e,["pause","暂停"])?"pause_plan":Vt(e,["resume","恢复"])?"resume_plan":Vt(e,["cancel","取消"])?"cancel_plan":Vt(e,["amend","edit","revise","修改","调整"])?"amend_plan":Vt(e,["activate","start","run","execute","启动","开始","执行"])?"activate_plan":null}function hC(e){const a=oe(e==null?void 0:e.result)??{},l=Le([a.task_id,a.taskId,...we(a.dispatched_tasks).map(r=>{var o,d;return((o=oe(r))==null?void 0:o.task_id)??((d=oe(r))==null?void 0:d.taskId)})]);return{createdPlanId:u(a.plan_id)||u(a.planId)||null,createdScheduleId:u(a.schedule_id)||u(a.scheduleId)||null,createdTaskIds:l,createdRunIds:Le([a.run_id,a.runId])}}function gC(e){const a=oe(e.payload)??{},l=oe(e.context_refs)??{};return _n({...l,entrypoint:e.entrypoint??l.entrypoint,plan_id:u(l.plan_id)||u(a.plan_id)||u(a.planId),task_id:u(l.task_id)||u(a.task_id)||u(a.taskId),run_id:u(l.run_id)||u(a.run_id)||u(a.runId),step_id:u(l.step_id)||u(a.step_id)||u(a.stepId),schedule_id:u(l.schedule_id)||u(a.schedule_id)||u(a.scheduleId)})}function yC(e,a,l){const r=oe(e.payload)??{},o=`${e.text??""} ${u(r.action)} ${u(r.command)} ${u(r.intent)}`.toLowerCase(),d=Object.keys(r).length>0,p=["plan_id","task_id","step_id","schedule_id"].some(g=>!!u(a[g])),h=u(a.step_id),_=h&&ji(l).some(g=>g.id===h&&g.status.toLowerCase()==="ready");return p&&Vt(o,["start","run","retry","skip","cancel","pause","resume","approve","启动","开始","执行","重试","跳过","取消","暂停","恢复","批准"])?bs("PlanControl","control",["context_control_action"],a,r,!1,!1):e.entrypoint==="cron"||Vt(o,["cron","schedule","scheduled","定时","调度","周期"])?bs("PlanExecution","schedule",["scheduled_entrypoint"],a,r,!1,!0):Vt(o,["status","progress","result","report","artifact","memory","状态","进度","结果","日报","产物","记忆"])?bs("ProjectionQuery","query",["projection_query_text"],a,r,!1,!1):_||Vt(o,["execute","dispatch","delegate","run task","执行","开始","委托","派发"])?bs("PlanExecution","execute",_?["ready_step_context"]:["execution_text"],a,r,!1,!0):!e.text&&!d&&!p?bs("AskClarification","chat",["empty_ingress"],a,r,!1,!1):bs("ChatOnly","chat",["default_chat"],a,r,!1,!1)}function bs(e,a,l,r,o,d,p){return{routeKind:e,intentKind:a,reasonCodes:l,candidateSkills:bC(e,r,o),createsPlan:d,createsTaskRun:p}}function bC(e,a,l){const r=Le([...we(a.skill_ids),...we(a.skills),...we(a.candidate_skills),...we(l.skill_ids),...we(l.skills),...we(l.candidate_skills),u(a.skill_id),u(l.skill_id)]);return r.length>0?r:e==="PlanControl"?["qimingclaw-acp-session"]:e==="ProjectionQuery"?["qimingclaw-artifact-reporting"]:e==="PlanExecution"?["qimingclaw-computer-control"]:[]}async function vC(e){var l;if(e.length===0)return{candidateSkills:e,allCandidatesDisabled:!1};const a=(l=window.QimingClawBridge)==null?void 0:l.digital;if(!(a!=null&&a.getSkillCapabilities))return{candidateSkills:e,allCandidatesDisabled:!1};try{const r=await a.getSkillCapabilities();if(!Array.isArray(r==null?void 0:r.skills))return{candidateSkills:e,allCandidatesDisabled:!1};const o=new Map;for(const p of r.skills){const h=u(p.skill_id);h&&o.set(h,p.enabled!==!1)}const d=e.filter(p=>o.get(p)!==!1);return{candidateSkills:d,allCandidatesDisabled:e.length>0&&d.length===0}}catch(r){return console.warn("[qimingclawAdapter] filter route candidate skills failed:",r),{candidateSkills:e,allCandidatesDisabled:!1}}}function Le(e){return[...new Set(e.map(u).filter(Boolean))]}function Vt(e,a){return a.some(l=>e.includes(l.toLowerCase()))}function _n(e){return Object.fromEntries(Object.entries(e).filter(([,a])=>a!=null&&a!==""))}const xC=new Set(["submit_plan","approve_plan","amend_plan","resume_plan","pause_plan","retry_task","skip_task","resume_task","provide_task_input"]),kC=new Set(["activate_plan","run_schedule_now","start_run","cancel_run","cancel_task","delete_schedule"]);function Kf(e){return xC.has(e)||kC.has(e)?null:"route_action_policy_blocked"}function SC(e){return["activate_plan","run_schedule_now","start_run","cancel_run","cancel_task"].includes(e)?"high":["delete_schedule","pause_schedule","skip_task","retry_task","provide_task_input"].includes(e)?"medium":"normal"}async function Kl(e,a){var C,z,w,D,N,k,A,O,te,I,ie,Z,K,pe,P,q,ce,R,M,ne,B,U;const l=`qimingclaw-digital-${e.command_kind}-${Date.now()}`,r=e.correlation_id||l,o=je((C=e.context_refs)==null?void 0:C.plan_id)||je((z=e.payload)==null?void 0:z.plan_id)||je((w=e.payload)==null?void 0:w.original_plan_id),d=je((D=e.context_refs)==null?void 0:D.task_id)||je((N=e.payload)==null?void 0:N.task_id)||je((k=e.payload)==null?void 0:k.original_task_id),p=je((A=e.context_refs)==null?void 0:A.run_id)||je((O=e.payload)==null?void 0:O.run_id)||je((te=e.payload)==null?void 0:te.latest_run_id),h=je((I=e.context_refs)==null?void 0:I.step_id)||je((ie=e.payload)==null?void 0:ie.step_id)||je((Z=e.payload)==null?void 0:Z.stepId),_=je((K=e.context_refs)==null?void 0:K.schedule_id)||je((pe=e.payload)==null?void 0:pe.schedule_id),g=await Il({actionKind:`governance.${e.command_kind}`,actionLabel:`治理命令:${e.command_kind}`,riskLevel:SC(e.command_kind),reasonCodes:["governance_command"],actor:u((P=e.payload)==null?void 0:P.actor)||"digital_employee_ui",source:"sgrobot-digital-adapter",planId:o||null,taskId:d||null,runId:p||null,correlationId:r,payload:{command_kind:e.command_kind,schedule_id:_||null,step_id:h||null}}),x=Hl(g);if(x){const le={command_id:l,accepted:!1,correlation_id:r,error:"policy_blocked",message:x.status==="approval_required"?"高风险治理命令需要审批后执行。":"高风险治理命令已被风险策略拒绝。",result:x};return await va(e,le),le}if(e.command_kind==="create_plan"){const le=`qimingclaw-local-${mt(je((q=e.payload)==null?void 0:q.title)||o||"plan")}-${Date.now()}`,de=Ml(l,r,"已在 qimingclaw 兼容层创建本地计划草稿。",{plan_id:le,status:"draft",source:"qimingclaw-adapter",requested_action:(ce=e.payload)==null?void 0:ce.requested_action,original_plan_id:((R=e.payload)==null?void 0:R.original_plan_id)??o});return await va(e,de),de}if(e.command_kind==="activate_plan"||e.command_kind==="run_schedule_now"){const le=o||((M=Im(a)[0])==null?void 0:M.plan_id)||((ne=nl(a)[0])==null?void 0:ne.plan_id)||"qimingclaw-client-readiness",de=await qv(le,a,{recordCommand:!1}),Te=Ml(l,r,"已映射为 qimingclaw 本地任务激活。",{plan_id:le,schedule_id:e.command_kind==="run_schedule_now"?_:null,status:"active",dispatched_tasks:de.dispatched_tasks,source:"qimingclaw-adapter"});return await va(e,Te),Te}if(e.command_kind==="create_schedule"){const le=Ml(l,r,"已记录 qimingclaw 兼容定时任务请求。",{schedule_id:_||`qimingclaw-schedule-${Date.now()}`,plan_id:o,status:"enabled",source:"qimingclaw-adapter"});return await va(e,le),le}if(["update_schedule","pause_schedule","resume_schedule","delete_schedule"].includes(e.command_kind)){const le=e.command_kind==="pause_schedule"?"paused":e.command_kind==="delete_schedule"?"deleted":"enabled",de=Ml(l,r,`已接受 ${e.command_kind},并更新 qimingclaw 本地定时任务状态。`,{schedule_id:_||`qimingclaw-schedule-${Date.now()}`,plan_id:o,status:le,source:"qimingclaw-adapter"});return await va(e,de),de}if(["submit_plan","approve_plan","amend_plan","resume_plan","pause_plan","cancel_plan"].includes(e.command_kind)){const le=Ml(l,r,`已接受 ${e.command_kind},当前由 qimingclaw 本地 adapter 记录兼容状态。`,{plan_id:o,status:e.command_kind==="approve_plan"?"approved":e.command_kind==="submit_plan"?"reviewing":"accepted",source:"qimingclaw-adapter"});return await va(e,le),le}if(["retry_task","skip_task","pause_task","resume_task","provide_task_input","cancel_task","start_run","cancel_run"].includes(e.command_kind)){const le=d||((B=Ct(a)[0])==null?void 0:B.id)||"qimingclaw-task-agent",de=Ct(a).find(se=>se.id===le),Te=p||((U=bd(Hn(a),le))==null?void 0:U.id)||null,E=h||(de?al(de):null),J=Ml(l,r,`已接受 ${e.command_kind},并记录到 qimingclaw Task Agent 控制平面。`,{plan_id:o||(de==null?void 0:de.planId)||"qimingclaw-task-agent-plan",task_id:le,run_id:Te,step_id:E,task_agent_id:`task-agent-${mt(le)}`,status:jC(e.command_kind),next_action:wC(e.command_kind),source:"qimingclaw-task-agent"});return await va(e,J),J}const S={command_id:l,accepted:!1,correlation_id:r,error:"missing_capability",message:`qimingclaw 数字员工兼容层尚未支持 ${e.command_kind}。`};return await va(e,S),S}function Ml(e,a,l,r){return{command_id:e,accepted:!0,correlation_id:a,message:l,result:r}}function jC(e){switch(e){case"retry_task":case"start_run":case"resume_task":return"running";case"skip_task":return"skipped";case"cancel_task":case"cancel_run":return"cancelled";case"pause_task":return"paused";default:return"accepted"}}function wC(e){switch(e){case"retry_task":return"start_retry_run";case"skip_task":return"continue_next_task";case"pause_task":return"await_resume";case"resume_task":return"watch_progress";case"provide_task_input":return"resume_with_input";case"cancel_task":case"cancel_run":return"close_execution";case"start_run":return"watch_progress";default:return"record_control_event"}}function je(e){return typeof e=="string"&&e.trim()?e.trim():""}function Ov(e,a=null){var o,d,p,h;if(Gl(a)){const _=In(a).find(k=>k.id===e),g=ll(e,a),x=Vb(a,e),S=Rs(e,a).runs,C=rt(a).filter(k=>k.planId===e||g.some(A=>A.task_id===k.taskId)),z=(_==null?void 0:_.title)??((o=g[0])==null?void 0:o.title)??e,w=(_==null?void 0:_.objective)??"qimingclaw 本地运行记录",D=[];let N=2;if(x.length>0){const k=new Set(x.map(O=>O.id));for(const O of x){D.push({seq:N++,lane:"qimingclaw",label:O.title,sub_label:`${la(O.status)} · 依赖 ${O.dependsOn.length} · 技能 ${O.preferredSkillIds.length}`,timestamp:O.updatedAt,color:"#22c55e",source_type:"plan_step"});for(const te of g.filter(I=>I.step_id===O.id))D.push(Qf(te,N++))}const A=g.filter(O=>!k.has(O.step_id||""));if(A.length>0){D.push({seq:N++,lane:"qimingclaw",label:"未归属步骤",sub_label:`包含 ${A.length} 个任务`,timestamp:((d=A[0])==null?void 0:d.updated_at)??new Date().toISOString(),color:"#22c55e",source_type:"plan_step"});for(const O of A)D.push(Qf(O,N++))}}else for(const k of g)D.push(Qf(k,N++));return{plan_id:e,plan_title:z,plan_status:_?yd(_,ic(a,_.id)):(p=g[0])==null?void 0:p.status,plan_objective:w,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:z,sub_label:w,timestamp:(_==null?void 0:_.createdAt)??((h=g[0])==null?void 0:h.created_at)??new Date().toISOString(),color:"#38bdf8",source_type:"plan"},...D,...S.map((k,A)=>({seq:N+A,lane:"execution",label:k.lifecycle||"Run",sub_label:k.run_id,timestamp:k.completed_at??k.created_at,color:"#f59e0b",source_type:"run"}))],events:C.map(k=>({event_id:k.id,kind:k.kind,occurred_at:k.occurredAt,message:k.message}))}}const l=rc(nl(a).find(_=>_.plan_id===e)??nl(a)[0],a),r=new Date().toISOString();return{plan_id:l.plan_id,plan_title:l.title,plan_status:l.status,plan_objective:l.objective,lanes:[{key:"intent",label:"目标",color:"#38bdf8"},{key:"qimingclaw",label:"qimingclaw",color:"#22c55e"},{key:"execution",label:"执行",color:"#f59e0b"}],steps:[{seq:1,lane:"intent",label:l.title,sub_label:l.objective,timestamp:l.created_at,color:"#38bdf8",source_type:"plan"},{seq:2,lane:"qimingclaw",label:"接入客户端能力",sub_label:"ACP / MCP / computer server adapter",timestamp:r,color:"#22c55e",source_type:"adapter"},{seq:3,lane:"execution",label:l.status==="running"?"已读取 qimingclaw 服务状态":"等待调度",sub_label:Jb(l,a),timestamp:r,color:"#f59e0b",source_type:"run"}],events:[{event_id:`${l.plan_id}-adapter-event`,kind:"qimingclaw_adapter",occurred_at:r,message:"数字员工页面已通过 qimingclaw adapter 获取数据。"}]}}function Qf(e,a){return{seq:a,lane:"qimingclaw",label:e.title,sub_label:`${la(e.status)} · ${e.assigned_skill_id||"qimingclaw-runtime"}`,timestamp:e.updated_at,color:"#22c55e",source_type:"task"}}function CC(e,a=null){const l=Ct(a).find(p=>p.id===e);if(!l)return Ov(e,a);const r=l.planId?In(a).find(p=>p.id===l.planId):null,o=Hn(a).filter(p=>p.taskId===l.id),d=rt(a).filter(p=>p.taskId===l.id||o.some(h=>h.id===p.runId));return{plan_id:l.planId??l.id,plan_title:(r==null?void 0:r.title)??l.title,plan_status:l.status,plan_objective:(r==null?void 0:r.objective)??"qimingclaw 本地任务记录",lanes:[{key:"task",label:"任务",color:"#38bdf8"},{key:"execution",label:"执行",color:"#22c55e"},{key:"event",label:"事件",color:"#f59e0b"}],steps:[{seq:1,lane:"task",label:l.title,sub_label:`${la(l.status)} · ${l.assignedSkillId||"qimingclaw-runtime"}`,timestamp:l.updatedAt,color:"#38bdf8",source_type:"task"},...o.map((p,h)=>({seq:h+2,lane:"execution",label:p.status||"Run",sub_label:p.id,timestamp:p.finishedAt??p.startedAt??p.createdAt,color:"#22c55e",source_type:"run"})),...d.map((p,h)=>({seq:o.length+h+2,lane:"event",label:p.kind,sub_label:p.message,timestamp:p.occurredAt,color:"#f59e0b",source_type:"event"}))],events:d.map(p=>({event_id:p.id,kind:p.kind,occurred_at:p.occurredAt,message:p.message}))}}async function qv(e,a=null,l={}){const r=(a==null?void 0:a.uiState)??await yn()??Nt(),o=ac(),d=Hm(a).find(x=>x.plan_id===e),p=Date.now(),h=`dispatch-${e}-${p}`,_=new Set(r.selectedDutyIdsByDate[o]??[]);_.add(e),r.selectedDutyIdsByDate[o]=[..._],r.confirmedDates[o]=r.confirmedDates[o]??new Date().toISOString(),await Gn(r,"confirm_workday",o);const g=ll(e,a).map(x=>({task_id:x.task_id,title:x.title,status:x.status==="pending"?"running":x.status}));return l.recordCommand!==!1&&await va({command_kind:"activate_plan",context_refs:{plan_id:e},payload:{plan_id:e,title:d==null?void 0:d.title,objective:d==null?void 0:d.objective,requested_action:"dispatch_plan"},correlation_id:h},Ml(`qimingclaw-digital-dispatch-${mt(e)}-${p}`,h,"已将数字员工模板执行写入 qimingclaw 本地运行记录。",{plan_id:e,status:"active",dispatched_tasks:g,source:"qimingclaw-adapter"})),{ok:!0,plan_id:e,source_plan_id:e,dispatched_tasks:g}}async function NC(e,a=null){var w,D,N,k,A,O,te;const l=u(e),r=await Il({actionKind:"plan_step.dispatch_ready_steps",actionLabel:"派发 Ready PlanStep",riskLevel:"high",reasonCodes:["plan_step_dispatch"],actor:"digital_employee_ui",source:"sgrobot-digital-adapter",planId:l||null,correlationId:`plan-step-dispatch:${l||"unknown"}`,payload:{plan_id:l||null,trigger_source:"manual"}}),o=Hl(r);if(o)return{ok:!1,plan_id:l||null,trigger_source:"manual",orchestration_id:u(o.event_id)||`risk-blocked-${mt(l||"unknown")}`,candidates:0,dispatched:0,skipped:0,failed:1,dispatched_step_ids:[],skipped_step_ids:[],failed_step_ids:[],errors:[{stepId:l||"unknown",error:String(o.error||o.status||"risk_policy_blocked")}]};const d=l?await((N=(D=(w=window.QimingClawBridge)==null?void 0:w.digital)==null?void 0:D.dispatchPlanReadySteps)==null?void 0:N.call(D,l).catch(()=>null)):null;if(d)return d;const p=new Date().toISOString(),h=`manual-ready-steps-${mt(l||"unknown")}-${mt(p)}`,_=kd(a).filter(I=>u(I.plan_id)===l&&u(I.status).toLowerCase()==="ready"),g=xa(a),x=Bl(g),S={ok:!0,plan_id:l||null,trigger_source:"manual",orchestration_id:h,candidates:_.length,dispatched:0,skipped:0,failed:0,dispatched_step_ids:[],skipped_step_ids:[],failed_step_ids:[],errors:[]};if(!l||!x.enabled)return S.skipped=_.length,S.skipped_step_ids=_.map(I=>u(I.step_id)).filter(Boolean),S;const C=Math.max(1,Math.min(Math.floor(x.max_per_sweep),10));let z=0;for(const I of _){const ie=u(I.step_id),Z=u(I.task_id);if(z>=C||I.dispatchable!==!0||!Z){S.skipped+=1,ie&&((k=S.skipped_step_ids)==null||k.push(ie));continue}z+=1;try{const K=u(I.latest_run_id)||`${Z}:run:start_run:${mt(h)}`,pe=`manual-ready-step-${mt(ie)}-${Date.now()}`;await va({command_kind:"start_run",context_refs:{plan_id:l,task_id:Z,run_id:K,step_id:ie},payload:{source:"digital-home-plan-orchestration",plan_id:l,task_id:Z,run_id:K,step_id:ie,trigger_source:"manual",orchestration_id:h,candidate_count:_.length},correlation_id:pe},Ml(pe,pe,"已手动推进 Ready PlanStep。",{plan_id:l,task_id:Z,run_id:K,step_id:ie,status:"running",trigger_source:"manual",orchestration_id:h,source:"qimingclaw-plan-orchestration"})),S.dispatched+=1,ie&&((A=S.dispatched_step_ids)==null||A.push(ie))}catch(K){S.failed+=1,ie&&((O=S.failed_step_ids)==null||O.push(ie)),(te=S.errors)==null||te.push({stepId:ie,error:K instanceof Error?K.message:"dispatch failed"})}}return S}function EC(e,a=null){const l=In(a).find(o=>o.id===e);if(l){const o=rt(a).filter(d=>d.planId===e).slice(0,12);return[{role:"user",content:`查看 qimingclaw 本地任务:${l.title}`,created_at:l.createdAt},...o.map(d=>({role:"assistant",content:`${d.kind}:${d.message}`,created_at:d.occurredAt}))]}const r=nl(a).find(o=>o.plan_id===e)??nl(a)[0];return[{role:"user",content:`执行数字员工任务:${r.title}`,created_at:r.created_at},{role:"assistant",content:`已接入 qimingclaw adapter。目标:${r.objective??r.title}`,created_at:new Date().toISOString()}]}const AC=9e3,Ds=2e4;class TC extends Error{constructor(){super("Unauthorized"),this.name="UnauthorizedError"}}async function be(e,a={}){const l=await vj(e,a);if(l!==void 0)return l;const{timeoutMs:r=AC,...o}=a,d=cj(),p=new Headers(o.headers),h=new AbortController;let _=!1;const g=window.setTimeout(()=>{_=!0,h.abort()},r),x=o.signal,S=()=>h.abort();x&&(x.aborted?h.abort():x.addEventListener("abort",S,{once:!0})),d&&p.set("Authorization",`Bearer ${d}`),o.body&&typeof o.body=="string"&&!p.has("Content-Type")&&p.set("Content-Type","application/json");let C;try{C=await fetch(`${fj()}${uj}${e}`,{...o,headers:p,signal:h.signal})}catch(z){throw z instanceof DOMException&&z.name==="AbortError"&&_?new Error(`API request timed out after ${r/1e3}s: ${e}`):z}finally{window.clearTimeout(g),x==null||x.removeEventListener("abort",S)}if(C.status===401)throw oj(),window.dispatchEvent(new Event("qimingclaw-digital-unauthorized")),new TC;if(!C.ok){const z=await C.text().catch(()=>"");let w=z||C.statusText;if(z)try{const D=JSON.parse(z);typeof D.message=="string"&&D.message.trim()?w=D.message.trim():typeof D.error=="string"&&D.error.trim()&&(w=D.error.trim())}catch{w=z}throw new Error(`API ${C.status}: ${w}`)}if(C.status!==204)return C.json()}function Lv(e,a){if(e!==null&&typeof e=="object"&&!Array.isArray(e)&&a in e){const l=e[a];if(l!==void 0)return l}return e}function Bv(){return be("/api/scheduler/jobs").then(e=>Lv(e,"jobs"))}function RC(e){return be(`/api/cron/${encodeURIComponent(e)}`,{method:"DELETE"})}function $C(e,a){return be(`/api/cron/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(a)}).then(l=>typeof l.job=="object"?l.job:l)}function DC(e,a=20){const l=new URLSearchParams({limit:String(a)});return be(`/api/cron/${encodeURIComponent(e)}/runs?${l}`).then(r=>Lv(r,"runs"))}function zC(){return be("/api/cron/settings")}function MC(e){return be("/api/cron/settings",{method:"PATCH",body:JSON.stringify(e)})}async function OC(){const[e,a]=await Promise.all([Bv(),zC().catch(()=>({enabled:!1,catch_up_on_startup:!1,max_run_history:20}))]),l=await Promise.all(e.slice(0,30).map(async o=>{const d=await DC(o.id,5).catch(()=>[]);return[o.id,d]})),r=new Map(l);return{items:e.map(o=>{const d=r.get(o.id)??[],p=d[0],h=o.schedule&&typeof o.schedule=="object"?o.schedule:{};return{schedule_id:o.id,name:o.name||o.id,enabled:o.enabled!==!1,status:o.enabled===!1?"paused":String(o.last_status||h.status||"enabled"),cron_expr:o.expression||String(h.expression||""),next_run:o.next_run||null,last_run:o.last_run||(p==null?void 0:p.finished_at)||(p==null?void 0:p.started_at)||null,last_status:o.last_status||(p==null?void 0:p.status)||null,latest_run_error:o.last_output||(p==null?void 0:p.output)||null,run_count:d.length,payload:{job:o,runs:d}}}),settings:a,source:"qimingclaw-adapter"}}function oy(e){return be(`/api/plan/${encodeURIComponent(e)}/messages`).then(a=>({messages:a.messages||[]}))}function qC(){return be("/api/route-decisions/interventions")}function LC(e,a){return be(`/api/route-decisions/${encodeURIComponent(e)}/intervention`,{method:"POST",body:JSON.stringify(a)})}function BC(e,a){return be("/api/route-decisions/interventions/batch",{method:"POST",body:JSON.stringify({route_decision_ids:e,...a})})}function UC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/interventions/workbench${l?`?${l}`:""}`)}function IC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/memory-governance${l?`?${l}`:""}`)}function HC(e,a,l={}){return be("/api/digital-employee/memory-governance/status/batch",{method:"POST",body:JSON.stringify({memory_ids:e,action:a,...l})})}function GC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/skill-audit-workbench${l?`?${l}`:""}`)}function YC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/ops-workbench${l?`?${l}`:""}`)}function KC(e,a,l={}){return be("/api/digital-employee/ops-workbench/actions/batch",{method:"POST",body:JSON.stringify({ops_ids:e,action:a,...l}),timeoutMs:Ds})}function QC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/notifications/workbench${l?`?${l}`:""}`)}function VC(e,a,l={}){return be("/api/digital-employee/notifications/actions/batch",{method:"POST",body:JSON.stringify({notification_ids:e,action:a,...l}),timeoutMs:Ds})}function XC(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/daily-reports/workbench${l?`?${l}`:""}`)}function Xo(e){return be("/api/governance/command",{method:"POST",body:JSON.stringify(e)})}function ZC(e="unread"){return be(`/api/notifications?status=${encodeURIComponent(e)}`).then(a=>a.notifications??[])}function JC(){return be("/api/notifications/unread-count").then(e=>e.count??0)}function FC(){return be("/api/notifications/preferences")}function PC(e){return be("/api/notifications/preferences",{method:"PATCH",body:JSON.stringify(e)})}function WC(){return be("/api/notifications/updates/pull",{method:"POST"})}function Uv(e){return be("/api/notifications/desktop",{method:"POST",body:JSON.stringify(e)})}function eN(){return be("/api/notifications/desktop/status")}function tN(){return be("/api/notifications/desktop/settings/open",{method:"POST",body:JSON.stringify({})})}function nN(){return be("/api/plan-step/dispatch-policy")}function aN(e){return be("/api/plan-step/dispatch-policy",{method:"PATCH",body:JSON.stringify(e)})}function Iv(){return be("/api/plan-step/dispatch-policy/pull",{method:"POST"})}function Hv(){return be("/api/skill/policies/pull",{method:"POST"})}function Gv(){return be("/api/risk-approval/policy/pull",{method:"POST"})}function Yv(){return be("/api/risk-approval/policy")}function Kv(e){return be("/api/risk-approval/policy",{method:"PATCH",body:JSON.stringify(e)})}function Qv(){return be("/api/route-decision/policy/pull",{method:"POST"})}async function lN(){const[e,a]=await Promise.all([nN(),Yv()]);return{plan_step_dispatch_policy:e,risk_approval_policy:a,source:"qimingclaw-adapter",items:[{policy_id:"plan_step_dispatch",title:"PlanStep 派发策略",status:e.enabled?"enabled":"disabled",source:e.source,updated_at:e.updated_at,last_pulled_at:e.last_pulled_at,last_pull_error:e.last_pull_error,summary:`max_per_sweep=${e.max_per_sweep}; auto_dispatch_ready_steps=${e.auto_dispatch_ready_steps}`,payload:e},{policy_id:"risk_approval",title:"风险审批策略",status:a.enabled?"enabled":"disabled",source:a.source,updated_at:a.updated_at,last_pulled_at:a.last_pulled_at,last_pull_error:a.last_pull_error,summary:`approval_required=${a.approval_required_risk_levels.join(",")}; auto_reject_actions=${a.auto_reject_actions.length}`,payload:a},{policy_id:"route_decision",title:"入口路由策略",status:"pull_available",source:"remote_pull",summary:"通过 /api/route-decision/policy/pull 获取管理端路由策略快照。"},{policy_id:"skill",title:"技能策略",status:"pull_available",source:"remote_pull",summary:"通过 /api/skill/policies/pull 同步远端技能启停策略。"}]}}async function iN(){const e=[{policy_id:"plan_step_dispatch",run:Iv},{policy_id:"risk_approval",run:Gv},{policy_id:"route_decision",run:Qv},{policy_id:"skill",run:Hv}],a=[];for(const r of e)try{const o=await r.run(),d=o;a.push({policy_id:r.policy_id,ok:d.ok!==!1,error:d.error??null,result:o})}catch(o){a.push({policy_id:r.policy_id,ok:!1,error:o instanceof Error?o.message:String(o)})}const l=a.filter(r=>r.ok).length;return{ok:l>0,total:a.length,pulled:l,failed:a.length-l,items:a}}function sN(e={}){const a=new URLSearchParams;Object.entries(e).forEach(([r,o])=>{o!=null&&`${o}`.trim()!==""&&a.set(r,`${o}`)});const l=a.toString();return be(`/api/digital-employee/plan-step-graph${l?`?${l}`:""}`)}function rN(e,a={}){const l={plans:"/api/digital-employee/plans",tasks:"/api/digital-employee/tasks",runs:"/api/digital-employee/runs",events:"/api/digital-employee/events",artifacts:"/api/digital-employee/artifacts","artifact-groups":"/api/digital-employee/artifact-groups",approvals:"/api/digital-employee/approvals"},r=new URLSearchParams;Object.entries(a).forEach(([d,p])=>{p!=null&&`${p}`.trim()!==""&&r.set(d,`${p}`)});const o=r.toString();return be(`${l[e]}${o?`?${o}`:""}`)}function cN(e){return be(`/api/notifications/${encodeURIComponent(e)}/read`,{method:"POST"}).then(a=>a.ok??!1)}function oN(e){return be(`/api/notifications/${encodeURIComponent(e)}/dismiss`,{method:"POST"}).then(a=>a.ok??!1)}function Vv(e,a){return be(`/api/notifications/${encodeURIComponent(e)}/reply`,{method:"POST",body:JSON.stringify({content:a})})}function Ss(e){const a=e?`?date=${encodeURIComponent(e)}`:"";return be(`/api/digital-employee/workday${a}`,{timeoutMs:Ds})}function ql(e){return be("/api/digital-employee/workday/actions",{method:"POST",body:JSON.stringify(e)})}function dN(e,a={}){return be(`/api/digital-employee/managed-services/${encodeURIComponent(e)}/restart`,{method:"POST",body:JSON.stringify(a),timeoutMs:Ds})}function uN(e){return be(`/api/debug/plan/${encodeURIComponent(e)}/dispatch`,{method:"POST",timeoutMs:Ds})}function dy(e){return be(`/api/digital-employee/plans/${encodeURIComponent(e)}/dispatch-ready-steps`,{method:"POST",timeoutMs:Ds})}function fN(){return be("/api/debug/plans?limit=80").then(e=>e.plans??[])}function uy(e,a=50){const l=new URLSearchParams({limit:String(a),q:e});return be(`/api/debug/plans?${l}`).then(r=>r.plans??[])}function mN(e){const a=new URLSearchParams({limit:"50",plan_id:e});return be(`/api/debug/tasks?${a}`).then(l=>({tasks:l.tasks??[],runs:l.runs??[],total:l.total,truncated:l.truncated}))}function pN(e){return be(`/api/debug/plan/${encodeURIComponent(e)}/flow`)}function _N(){return be("/api/skill").then(e=>e.skills??[])}function hN(e,a){return be(`/api/skill/${encodeURIComponent(e)}/enabled`,{method:"POST",body:JSON.stringify({enabled:a})})}function gN(){return be("/api/cron/check",{method:"POST"})}function Xv(e,a){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/access`,{method:"POST",body:JSON.stringify({action:a})})}function Zv(e){return be("/api/digital-employee/daily-reports/delivery",{method:"POST",body:JSON.stringify(e)})}function Oo(e){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}`).then(a=>a.item??null)}function qo(e){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/versions`).then(a=>a.items??[])}function yN(e,a,l={}){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/retention`,{method:"POST",body:JSON.stringify({action:a,...l})})}function Jv(e,a,l={}){return be("/api/digital-employee/artifacts/retention/batch",{method:"POST",body:JSON.stringify({artifact_ids:e,action:a,...l})})}function bN(e,a={}){return be(`/api/digital-employee/artifacts/${encodeURIComponent(e)}/cleanup`,{method:"POST",body:JSON.stringify(a)})}function vN(e,a,l={}){return be(`/api/digital-employee/approvals/${encodeURIComponent(e)}/actions`,{method:"POST",body:JSON.stringify({action:a,...l})})}function xN(e,a){return be(`/api/approval/${encodeURIComponent(e)}/conflict/resolve`,{method:"POST",body:JSON.stringify(a)})}function kN(e,a,l={}){return be("/api/approval/conflicts/resolve/batch",{method:"POST",body:JSON.stringify({approval_ids:e,resolution:a,...l})})}function SN(){return be("/api/approval/updates/pull",{method:"POST",body:JSON.stringify({})})}function Vf({className:e=""}){return s.jsx("div",{className:`de-gem ${e}`,"aria-hidden":"true"})}function jN(){return s.jsxs("div",{className:"de-stage","aria-hidden":"true",children:[s.jsx("div",{className:"de-stage-glow"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-1"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-2"}),s.jsx("div",{className:"de-stage-layer de-stage-layer-3"})]})}function wN({avatarSrc:e,altText:a="数字员工",statusLabel:l}){return s.jsxs("div",{className:"de-avatar-container","aria-hidden":"true",children:[s.jsxs("div",{className:"de-avatar-glass-space",children:[s.jsxs("div",{className:"de-avatar-roof",children:[s.jsx("div",{className:"de-avatar-roof-face"}),s.jsx("div",{className:"de-avatar-roof-glow"})]}),s.jsx("div",{className:"de-avatar-glass-left"}),s.jsx("div",{className:"de-avatar-glass-right"}),s.jsx(Vf,{className:"de-gem-1"}),s.jsx(Vf,{className:"de-gem-2"}),s.jsx(Vf,{className:"de-gem-3"})]}),l&&s.jsx("div",{className:"de-avatar-state-label",children:l}),s.jsx("img",{src:e,alt:a,className:"de-avatar-img"}),s.jsx(jN,{})]})}const CN=dj,NN=`${CN}/digital-assets`,gi=`${NN}/avatars`,EN="Asia/Shanghai",vs={comment:"",delegateTo:"",dueAt:""},AN=["skill","browser","call","redial","evidence","decision","reporting"],TN=[{id:"all",label:"全部"},{id:"running",label:"执行中"},{id:"success",label:"已完成"},{id:"danger",label:"异常"}],Fv="qimingclaw:digital-workday-guide-dismissed-date",Pv="sgrobot:digital-workday-guide-dismissed-date",RN=80,fy=300,$N=[{title:"确认日期",body:"先确认今天的值班日期,避免把昨天或明天的任务混在一起。"},{title:"选择任务",body:"从岗位职责里勾选今天要执行的任务,未接入能力保持待扩展。"},{title:"任务执行",body:"点击任务执行后,数字员工开始按已选任务推进工作。"},{title:"查看过程",body:"右侧滚动显示运行明细,任务中心可继续查看明细。"}],DN={skill:{id:"skill",label:"查看Skill",shortLabel:"技能",phase:"查看Skill与计划",src:`${gi}/states/employee-idle.png`,bubble:"我正在查看可用Skill、任务计划和今天要勾选的执行内容。"},browser:{id:"browser",label:"操作浏览器",shortLabel:"浏览器",phase:"操作浏览器执行",src:`${gi}/states/employee-browser.png`,bubble:"我正在打开页面、读取信息、填写表单,并把执行过程同步到右侧。"},call:{id:"call",label:"电话外呼",shortLabel:"外呼",phase:"电话外呼与重拨",src:`${gi}/states/employee-running.png`,bubble:"我正在按工单名单外呼现场人员,记录接通、未接通和后续重拨。"},redial:{id:"redial",label:"重拨跟进",shortLabel:"重拨",phase:"未接通人员重拨",src:`${gi}/states/employee-redial.png`,bubble:"我正在跟进未接通人员,按间隔重拨并更新每个人的通知状态。"},evidence:{id:"evidence",label:"数据核验",shortLabel:"核验",phase:"核验执行证据",src:`${gi}/states/employee-evidence.png`,bubble:"我正在核验页面数据、执行证据和任务结果,确认交付内容可信。"},decision:{id:"decision",label:"等待决策",shortLabel:"决策",phase:"等待人工确认",src:`${gi}/states/employee-decision.png`,bubble:"我已完成前置处理,现在需要人工确认后再继续推进。"},reporting:{id:"reporting",label:"汇报成果",shortLabel:"汇报",phase:"汇报今日成果",src:`${gi}/states/employee-reporting.png`,bubble:"我正在整理运行明细和日报,方便你直接查看成果和异常。"}};function ym(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function zN(e){return(e||ym()).split("-").join("/")}function xs(e){return e==="success"?"de-badge-success":e==="danger"?"de-badge-danger":e==="warning"||e==="running"?"de-badge-warning":"de-badge-info"}function MN(e){const a=typeof e=="number"&&Number.isFinite(e)?e:0;return new Intl.NumberFormat("zh-CN",{notation:"compact",maximumFractionDigits:1}).format(a)}function ON(e){const a=typeof e=="number"&&Number.isFinite(e)?e:0;return a>0&&a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`}function qN(e){const a=Bt(e).toLowerCase();return["high","critical","risk","marked"].includes(a)?"danger":["medium","warning"].includes(a)?"warning":["normal","low","clear"].includes(a)?"success":"info"}function LN(e){const a=Bt(e).toLowerCase();return["high","critical","risk","marked"].includes(a)?"高风险":["medium","warning"].includes(a)?"中风险":["normal","low","clear"].includes(a)?"风险正常":"未标记风险"}function BN(e){const a=Bt(e).toLowerCase();return["timeout","overdue","expired"].includes(a)?"danger":["tracked","due_soon","warning"].includes(a)?"warning":["met","normal"].includes(a)?"success":"info"}function UN(e){const a=Bt(e).toLowerCase();return["timeout","overdue","expired"].includes(a)?"已超时":["tracked","due_soon","warning"].includes(a)?"SLA跟踪":["met","normal"].includes(a)?"SLA正常":"未设置SLA"}function Xf(e){const a=Bt(e).toLowerCase();return a==="comment"?"评论":a==="delegate"?"转交":a==="mark_timeout"?"标记超时":a==="mark_risk"?"标记风险":a==="clear_risk"?"清除风险":a||"暂无动作"}function IN(e){const a=Bt(e).toLowerCase();return a==="terminal_status_mismatch"?"终态不一致":a==="local_newer_status_mismatch"?"本地状态较新":a==="workflow_step_mismatch"?"审批步骤不一致":a||"跨端状态不一致"}function my(e){const a=Bt(e).toLowerCase();return a==="approved"?"已同意":a==="rejected"?"已驳回":a==="cancelled"?"已取消":a==="pending"?"待确认":a==="dismissed"?"已忽略":a||"未知"}function HN(e,a){const l=["de-template-card-row","de-duty-card","de-duty-card--compact"];return e.implemented||l.push("de-duty-card--disabled"),a&&l.push("de-duty-card--selected"),e.statusTone==="running"&&l.push("de-duty-card--running"),l.join(" ")}function Sa(e){return String(e||"").replace(/\s+/g," ").trim()}function GN(e){if(!e)return"";if(e.expression)return e.expression;if(typeof e.schedule=="string")return e.schedule;if(e.schedule&&typeof e.schedule=="object"){const a=e.schedule,l=a.expr??a.expression??a.cron;if(typeof l=="string")return l}return""}function YN(e){const a=GN(e);if(!a)return"未定时";const l=a.trim().split(/\s+/),r=l[0]??"",o=l[1]??"";return l.length>=2&&/^\d+$/.test(r)&&/^\d+$/.test(o)?`已定时 ${o.padStart(2,"0")}:${r.padStart(2,"0")} 执行`:`调度注册 ${a}`}function ud(e,a){if(!e||typeof e!="object")return"";const l=e;for(const r of a){const o=l[r];if(typeof o=="string"&&o.trim())return o.trim()}return""}function js(e){const a=Sa(e.template_id);if(a)return a;const l=ud(e.delivery,["template_id","plan_template_id","templateId"]);if(l)return l;const r=ud(e.schedule,["template_id","plan_template_id","templateId"]);return r||e.id.replace(/^schedule-/,"")}function KN(e,a,l){return e.has(a)||l?!0:Array.from(e).some(r=>ec(r,a))}function ec(e,a){return e.startsWith(`${a}-`)?/^-\d{8,}$/.test(e.slice(a.length)):!1}function QN(e,a,l){if(e.id===a||e.conversation_id===a||ec(e.id,a)||e.conversation_id&&ec(e.conversation_id,a))return!0;const r=Sa(l).toLowerCase();return!!(r&&Sa(e.title).toLowerCase()===r)}function Wv(e,a,l){const r=l.filter(o=>QN(o,e,a));return r.find(o=>o.selected)??r.find(o=>o.id===e||o.conversation_id===e)??r[0]??null}function VN(e,a){var l;return((l=Wv(e.id,e.title,a))==null?void 0:l.id)??e.id}function XN(e){return typeof e.step_count=="number"&&Number.isFinite(e.step_count)?e.step_count:Array.isArray(e.skill_ids)?e.skill_ids.length:0}function ZN(e){const a=Sa(e.trigger_kind||ud(e.schedule,["kind"])).toLowerCase();return a==="cron"?"定时任务":a==="webhook"?"触发任务":"手动任务"}function JN(e,a,l){const r=js(e),o=Wv(r,e.name,a),d=XN(e),p=Array.isArray(e.skill_ids)?e.skill_ids.length:d,h=(o==null?void 0:o.status)??e.last_status??(e.enabled?"plan_template":"disabled"),_=(o==null?void 0:o.status_label)??(e.enabled?ZN(e):"已停用"),g=(o==null?void 0:o.status_tone)??(e.enabled?"info":"waiting");return{id:r,planId:r,title:Sa(e.name)||r,summary:Sa(e.prompt)||`任务:${r}`,implemented:e.enabled,selectable:!0,selected:l,status:h,statusLabel:_,statusTone:g,scheduleText:(o==null?void 0:o.schedule_text)??YN(e),resultText:(o==null?void 0:o.result_text)??`${d} 个步骤,${p} 个Skill`,conversationId:(o==null?void 0:o.conversation_id)??r,stepCount:d,taskCount:p,readyStepCount:0,runningStepCount:0,blockedStepCount:0,leasedStepCount:0,schedulerJob:e,source:"plan_template"}}function Hr(e){return e.implemented}function Gr(e){return e.implemented?"":"当前任务未接入执行能力。"}function FN(e){return e.readyStepCount>0?`推进 ${e.readyStepCount}`:"推进"}function PN(e){const a=new Map;return e.forEach(l=>{const r=l.plan_id||"";if(!r)return;const o=a.get(r)??{ready:0,running:0,blocked:0,leased:0},d=l.status.toLowerCase();l.lease_active||l.skip_reason==="lease_active"?(o.leased+=1,o.running+=1):d==="ready"&&l.dispatchable?o.ready+=1:["running","active","leased","queued"].includes(d)?o.running+=1:d==="blocked"&&(o.blocked+=1),a.set(r,o)}),a}function WN(e,a){const l=`${e.conversation_id??""} ${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`;return l.includes(a.id)||l.includes(a.title)}function e2(e,a){const l=a.filter(_=>WN(_,e)),r=l.filter(Nd).length,o=l.filter(Ed).length,d=l.filter(Cd).length,p=Math.max(l.length-r-o-d,0),h=l.length>0?l[l.length-1]:void 0;return{id:e.id,plan_id:e.planId,title:e.title,description:e.summary,selected:!0,total_count:l.length,success_count:r,failure_count:o,running_count:d,waiting_count:p,latest_status_label:(h==null?void 0:h.status_label)??e.statusLabel,latest_status_tone:(h==null?void 0:h.status_tone)??e.statusTone,business_summary:l.length>0?`${e.title} 今日执行 ${l.length} 次,成功 ${r} 次,失败 ${o} 次。`:`${e.title} 尚未产生执行记录。`,ai_summary:l.length>0?`${e.title} 今日执行 ${l.length} 次,成功 ${r} 次,失败 ${o} 次。`:`${e.title} 尚未产生执行记录。`}}function t2(e,a){const l=e.plan_id??"";return e.id===a.id||l===a.planId||ec(e.id,a.id)||ec(l,a.planId)?!0:Sa(e.title).toLowerCase()===Sa(a.title).toLowerCase()}function n2(e){return{id:e.id,time:e.time,task_name:e.plan_title,step_name:e.step_title,operation_name:e.task_title,status_label:e.status_label,status_tone:e.status_tone,business_detail:Zo(e),raw_detail:e.detail,updated_at:e.updated_at,conversation_id:e.conversation_id}}function py(e){const[a="9",l="0"]=e.split(":"),r=Math.min(Math.max(Number(a)||9,0),23);return`${Math.min(Math.max(Number(l)||0,0),59)} ${r} * * *`}function _y(e){return e.status_label||e.status||"已同步"}function Bt(e){return String(e||"").replace(/\s+/g," ").trim()}function ex(e){const l=`${e.plan_title} ${e.step_title??""}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);return l!=null&&l[1]&&l[2]?`${l[1].padStart(2,"0")}:${l[2]}`:Bt(e.time)||"即时触发"}function Wa(e){const a=Bt(e);if(!a)return"";const l=new Date(a);if(Number.isNaN(l.getTime()))return"";const r=new Intl.DateTimeFormat("zh-CN",{timeZone:EN,month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1}).formatToParts(l),o=d=>{var p;return((p=r.find(h=>h.type===d))==null?void 0:p.value)??""};return`${o("month")}/${o("day")} ${o("hour")}:${o("minute")}`}function ap(e){const a=Bt(e);return a?a.length>140?`${a.slice(0,140)}...`:a:""}function a2(e){var a;return e?!e.enabled||!e.endpoint||(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"warning":e.failed>0||e.lastSyncError?"danger":e.syncing||e.pending>0?"warning":e.lastSyncAt?"success":"info":"info"}function l2(e){var a;return e?e.enabled?e.endpoint?(((a=e.missingCredentials)==null?void 0:a.length)??0)>0?"缺少凭据":e.syncing?"同步中":e.failed>0||e.lastSyncError?"同步异常":e.pending>0?"待同步":e.lastSyncAt?"已同步":"等待数据":"未配置":"已停用":"未连接"}function i2(e){var l,r;if(!e)return"当前环境未连接 qimingclaw 同步桥。";if(!e.enabled)return"管理端同步已停用。";if(!e.endpoint)return"管理端同步地址未配置。";if((((l=e.missingCredentials)==null?void 0:l.length)??0)>0)return`管理端同步凭据未完整:${(r=e.missingCredentials)==null?void 0:r.join("、")}`;const a=ap(e.lastSyncError);if(e.failed>0||a){const o=e.failureSummary?[e.failureSummary.dueForRetry>0?`${e.failureSummary.dueForRetry} 条可重试`:"",e.failureSummary.backoff>0?`${e.failureSummary.backoff} 条退避中`:"",s2(e.failureSummary)].filter(Boolean).join(","):"";return[e.failed>0?`${e.failed} 条失败`:"",e.pending>0?`${e.pending} 条待同步`:"",o,a?`失败原因:${a}`:""].filter(Boolean).join(",")}return e.syncing?`正在同步,待同步 ${e.pending} 条。`:e.pending>0?`仍有 ${e.pending} 条待同步记录。`:e.lastSyncAt?`最近同步:${Wa(e.lastSyncAt)||e.lastSyncAt}`:"等待本地 outbox 数据。"}function Xr(e){return{plan:"Plan",task:"Task",run:"Run",event:"Event",artifact:"Artifact",approval:"Approval"}[e]||e||"Entity"}function s2(e){const a=e.byEntityType.slice(0,3).map(l=>`${Xr(l.entityType)} ${l.count}`).join(" / ");return a?`类型:${a}`:""}function r2(e){var r;const a=ap(e.error);return[Bt((r=e.entitySummary)==null?void 0:r.title),`${Xr(e.entityType)} / ${e.operation}`,`重试 ${e.attempts} 次`,e.dueForRetry?"等待补偿":`下次 ${tx(e)}`,a].filter(Boolean).join(" · ")}function hy(e){return Wa(e.lastAttemptAt||e.updatedAt||e.createdAt)||"未尝试"}function tx(e){return e.dueForRetry?"可重试":Wa(e.nextRetryAt)||"待计算"}function c2(e){return e==="synced"?"已同步":e==="failed"?"失败":e||"未知"}function o2(e){return e==="synced"?"success":e==="failed"?"danger":"info"}function gy(e,a){return JSON.stringify({generatedAt:new Date().toISOString(),source:"qimingclaw-digital-employee",failure:e,sync:a?{running:a.running,syncing:a.syncing,enabled:a.enabled,endpoint:a.endpoint,missingCredentials:a.missingCredentials??[],pending:a.pending,failed:a.failed,lastSyncAt:a.lastSyncAt,lastSyncError:a.lastSyncError,failureSummary:a.failureSummary??null}:null},null,2)}function d2(e){return`qimingclaw-sync-failure-${[e.entityType,e.entityId].filter(Boolean).join("-").replace(/[^a-z0-9._-]+/gi,"-").replace(/^-+|-+$/g,"").slice(0,80)||e.id||"diagnostic"}.json`}function yy(e,a,l="application/json;charset=utf-8"){const r=new Blob([a],{type:l}),o=URL.createObjectURL(r),d=document.createElement("a");d.href=o,d.download=e,document.body.appendChild(d),d.click(),d.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}function u2(e){return`qimingclaw-digital-report-${e}.txt`}function f2(e,a,l,r){return[a.title||`${e} 数字员工日报`,`日期:${e}`,`生成时间:${a.generated_at?Wa(a.generated_at):"暂未生成"}`,`生成来源:${a.generated_by==="ai"?"AI":"qimingclaw adapter"}`,"","## 摘要",a.summary||"暂无摘要。","","## 指标",`任务总数:${a.totals.task_count}`,`执行次数:${a.totals.execution_count}`,`成功次数:${a.totals.success_count}`,`失败次数:${a.totals.failure_count}`,`运行中:${a.totals.running_count??0}`,"","## 任务汇总",...l.length>0?l.map(o=>`- ${o.title}:${o.latest_status_label},执行 ${o.total_count} 次,成功 ${o.success_count},失败 ${o.failure_count}。${o.ai_summary||o.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...r.length>0?r.map(o=>`- ${o.time||"--:--"} ${o.task_name} / ${o.step_name||o.operation_name||"任务执行"}:${o.status_label},${o.business_detail}`):["暂无运行明细。"],"","## 详情",...(a.detail_lines??[]).length>0?a.detail_lines:["暂无详情。"]].join(` +`)}async function m2(){var a;const e=(a=window.QimingClawBridge)==null?void 0:a.digital;if(!(e!=null&&e.getSyncStatus))return null;try{return await e.getSyncStatus()}catch{return null}}function nx(e){const a=Wa(e.updated_at);return a||Bt(e.time)||"待同步"}function p2(e){return Wa(e.updated_at)||Bt(e.time)||"--:--"}function Zo(e){const a=Bt(e.detail).replace(/^触发来源[::]\s*$/u,"").replace(/触发来源[::]\s*(?=。|,|,|;|;|$)/u,"").trim();return a?/^runner unavailable/i.test(a)?"执行链路异常,点击查看详情。":a.length>72?`${a.slice(0,72)}...`:a:Nd(e)?"真实事件已完成,结果详情未回传。":Cd(e)?"真实事件执行中,等待结果回传。":Ed(e)?"执行异常,点击查看详情。":"结果详情待同步。"}function by(e){return`计划时间 ${ex(e)} · 执行时间 ${nx(e)}`}function _2(e,a){return a==="all"?!0:a==="running"?Cd(e):a==="success"?Nd(e):Ed(e)}function h2(e){return new Set(e.duties.filter(a=>a.selected).map(a=>a.id))}function Lo(e){const a=e.dependent_tasks.length>0?`,影响 ${e.dependent_tasks.slice(0,2).join("、")}`:"";return`${e.name} ${e.status_label}${e.error?`:${e.error}`:a}`}function g2(e){return e.service_id==="fileServer"||e.service_id==="guiServer"}function vy(e){const a=e.next_action==="retry_or_skip"?"重试或跳过":e.next_action==="watch_progress"?"观察进度":e.next_action;return`${e.title} ${e.status_label},下一步 ${a}`}function y2(e){switch(e){case"retry_task":return"重试";case"skip_task":return"跳过";case"cancel_task":return"取消";default:return e}}function b2(e){switch(e){case"retry_task":return"重试前置";case"skip_task":return"跳过前置";case"cancel_task":return"取消此步骤";case"provide_task_input":return"补充输入";default:return e}}function bm(e){return(e.blocked_dependency_details??[]).find(a=>!!a.task_id)??null}function v2(e){var r;const a=bm(e)??((r=e.blocked_dependency_details)==null?void 0:r[0])??null,l=a?`${a.title} ${a.status}`:`阻塞依赖 ${e.blocked_dependencies.length} 个`;return`${e.title} ${e.dependency_status||e.status},${l}`}function Zf(e){return["pending","requested"].includes(String(e||"").toLowerCase())}function xy(e){if(!(e instanceof Element))return!1;if(e.closest('button, a, input, select, textarea, [role="tab"]'))return!0;const a=e.closest('[role="button"]');return!!(a&&!a.classList.contains("de-workday-execution--clickable"))}function x2(e,a){return e.length<=4?e:e.slice(a).concat(e.slice(0,a)).slice(0,4)}function Cd(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("running")||a.includes("execut")||a.includes("progress")}function Nd(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("success")||a.includes("complete")||a.includes("done")}function Ed(e){const a=`${e.status} ${e.status_tone}`.toLowerCase();return a.includes("danger")||a.includes("fail")||a.includes("error")||a.includes("异常")}function k2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["外呼","电话","拨打","接通","未接通","重拨","人员"].some(l=>a.includes(l))}function S2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["重拨","未接通","再拨","回拨","retry","callback"].some(l=>a.includes(l))}function j2(e){const a=`${e.plan_title} ${e.task_title} ${e.step_title??""} ${e.detail}`.toLowerCase();return["核验","校验","证据","汇总","报告","结果","交付","看板","同步"].some(l=>a.includes(l))}function w2(){if(typeof window>"u")return null;const e=new URLSearchParams(window.location.search).get("visual");return AN.includes(e)?e:null}function C2(e){return S2(e)?"redial":k2(e)?"call":j2(e)?"evidence":"browser"}function N2(e){return e.currentEvent?C2(e.currentEvent):!e.confirmed&&e.eventsCount===0?"skill":e.pendingDecisionCount>0?"decision":e.eventsCount>0?"browser":"skill"}function E2(){if(typeof window>"u")return null;try{return window.sessionStorage.getItem(Fv)??window.sessionStorage.getItem(Pv)}catch{return null}}function A2(e){if(!(typeof window>"u"))try{window.sessionStorage.setItem(Fv,e),window.sessionStorage.removeItem(Pv)}catch{}}function T2({onNavigate:e}){var wc,Cc,Nc,Hi,Ec,Ac;const[a,l]=v.useState(ym()),[r,o]=v.useState(null),[d,p]=v.useState([]),[h,_]=v.useState(new Set),[g,x]=v.useState(!0),[S,C]=v.useState(null),[z,w]=v.useState(null),[D,N]=v.useState(null),[k,A]=v.useState({}),[O,te]=v.useState(null),[I,ie]=v.useState(!1),[Z,K]=v.useState("selected"),[pe,P]=v.useState(0),[q,ce]=v.useState(!1),[R,M]=v.useState(!1),[ne,B]=v.useState(!1),[U,le]=v.useState(null),[de,Te]=v.useState("all"),[E,J]=v.useState(!1),[se,ue]=v.useState(null),[ve,Ee]=v.useState(null),[ae,he]=v.useState("09:00"),[Ie,V]=v.useState(!1),[Ce,yt]=v.useState(!1),[He,Ke]=v.useState(null),[Dt,wa]=v.useState([]),[Ci,Ms]=v.useState([]),[Ql,Ni]=v.useState(null),[Ei,oc]=v.useState([]),[Os,Xt]=v.useState(null),[Ai,il]=v.useState(null),[Vl,sl]=v.useState(""),[En,Ca]=v.useState({name:"",company:"",position:"",currentStatus:"working"}),[rl,dc]=v.useState("18:00"),[Xl,Ut]=v.useState(!1),[ra,Wt]=v.useState(()=>E2()),[en,uc]=v.useState(null),me=v.useRef(!1),ca=v.useRef(!1);v.useEffect(()=>(me.current=!0,()=>{me.current=!1}),[]);const Fe=v.useCallback(async()=>{let b=null,Q=null;const re=()=>{if(ca.current||!Q)return;const ke=(b==null?void 0:b.source)==="live"?h2(b):new Set,dt=Q.map(cn=>js(cn)).filter(cn=>KN(ke,cn)),et=dt.length>0?dt:Q.slice(0,3).map(cn=>js(cn));_(new Set(et))},ye=Ss(a).then(ke=>{me.current&&(b=ke,o(ke),N(null),re())}).catch(ke=>{me.current&&N(ke instanceof Error?ke.message:"数字员工首页数据同步失败")}),_e=Bv().then(ke=>{me.current&&(Q=ke.filter(dt=>dt.job_type==="plan_template"||ud(dt.delivery,["mode"])==="plan_template"),p(Q),te(null),re())}).catch(ke=>{me.current&&te(ke instanceof Error?ke.message:"任务加载失败")}),Qe=m2().then(ke=>{me.current&&uc(ke)}),_t=sN({page_size:80}).then(ke=>{me.current&&(Ms(ke.items),wa(ke.items.filter(dt=>dt.status==="blocked").slice(0,6)),Ni(null))}).catch(ke=>{me.current&&(Ms([]),wa([]),Ni(ke instanceof Error?ke.message:"阻塞步骤加载失败"))}),at=qC().then(ke=>{me.current&&(oc(ke.interventions.slice(0,6)),Xt(null))}).catch(ke=>{me.current&&(oc([]),Xt(ke instanceof Error?ke.message:"路由干预加载失败"))});await Promise.allSettled([ye,_e,Qe,_t,at]),me.current&&x(!1)},[a]);v.useEffect(()=>{x(!0),Fe()},[Fe]),v.useEffect(()=>{const b=r!=null&&r.workday.confirmed?8e3:3e4,Q=window.setInterval(()=>{Fe()},b);return()=>window.clearInterval(Q)},[Fe,r==null?void 0:r.workday.confirmed]),v.useEffect(()=>{if(q||R||ne||U!==null)return;const Q=window.setInterval(()=>{P(re=>{const ye=(r==null?void 0:r.source)==="live"?r.events.length:0;return ye>0?(re+1)%ye:0})},3200);return()=>window.clearInterval(Q)},[ne,R,q,U,r==null?void 0:r.events.length,r==null?void 0:r.source]);const Zt=(r==null?void 0:r.source)==="live",An=v.useMemo(()=>Zt?(r==null?void 0:r.duties)??[]:[],[Zt,r==null?void 0:r.duties]),sn=v.useMemo(()=>{const b=PN(Ci);return d.slice().sort((Q,re)=>{const ye=js(Q),_e=js(re),Qe=h.has(ye)?1:0,_t=h.has(_e)?1:0;if(Qe!==_t)return _t-Qe;const at=new Date(Q.next_run||"").getTime(),ke=new Date(re.next_run||"").getTime(),dt=Number.isFinite(at),et=Number.isFinite(ke);return dt!==et?dt?-1:1:dt&&et&&at!==ke?at-ke:Sa(Q.name).localeCompare(Sa(re.name),"zh-CN")}).map(Q=>{const re=js(Q),ye=JN(Q,An,h.has(re)),_e=b.get(ye.planId)??b.get(re);return _e?{...ye,readyStepCount:_e.ready,runningStepCount:_e.running,blockedStepCount:_e.blocked,leasedStepCount:_e.leased,resultText:_e.ready>0||_e.running>0||_e.blocked>0||_e.leased>0?`Ready ${_e.ready} · 运行 ${_e.running} · 阻塞 ${_e.blocked}${_e.leased>0?` · 租约 ${_e.leased}`:""}`:ye.resultText}:ye})},[An,Ci,d,h]),zt=v.useMemo(()=>sn.filter(b=>h.has(b.id)),[sn,h]),Ti=v.useMemo(()=>zt.map(b=>VN(b,An)),[An,zt]),oa=sn,Na=sn.filter(b=>!h.has(b.id)),Ea=Z==="selected"?zt:Z==="pending"?Na:oa,tn=Zt?(r==null?void 0:r.events)??[]:[],fc=x2(tn,pe),qs=tn,Aa=(Zt?(r==null?void 0:r.decisions)??[]:[]).filter(b=>Zf(b.status)),Ls=q||R||ne||U!==null,Zl=v.useMemo(()=>tn.filter(b=>_2(b,de)),[tn,de]),mc=Zl.slice(0,fy),pc=tn.filter(Cd),da=tn.filter(Nd),Mt=tn.filter(Ed),pt=fc[0]??pc[0]??null,Xe=r==null?void 0:r.employee,Me=r==null?void 0:r.workday,Bs=r==null?void 0:r.delivery,Yn=(Zt?(r==null?void 0:r.managed_services)??[]:[]).filter(b=>b.requires_human_action||b.status==="degraded"),Tn=(Zt?(r==null?void 0:r.task_agents)??[]:[]).filter(b=>b.can_retry||b.can_skip||b.can_cancel),ze=Zt?r==null?void 0:r.route_summary:null,Kn=(ze==null?void 0:ze.latest)??null,Et=Zt?r==null?void 0:r.diagnostic_summary:null,Ta=Et?Et.doctor.error+Et.doctor.warn:0,St=Et?Et.audit.error+Et.audit.warn:0,Ra=(Et==null?void 0:Et.latest_issue)??null,Ae=Zt?r==null?void 0:r.daily_report:void 0,ua=Zt?(wc=r==null?void 0:r.run_details)!=null&&wc.length?r.run_details:tn.map(n2):[],Rn=ua.slice(0,RN),Td=Zt?(r==null?void 0:r.execution_summaries)??[]:[],Qn=zt.map(b=>Td.find(Q=>t2(Q,b))??e2(b,tn)),fa=zN(a),Rd=Z==="all"?"全部任务":Z==="pending"?"待选择任务":"今日已选任务",$i=Z==="all"?`总任务 ${oa.length} 项,不代表当天都会执行。`:Z==="pending"?`当前日期 ${fa} 还有 ${Na.length} 项未选择。`:`当前日期 ${fa} 已选择 ${zt.length} 项任务。`,It=(Ae==null?void 0:Ae.status)==="ready"?Ae.totals:null,Vn=(It==null?void 0:It.task_count)??Qn.length,rn=(It==null?void 0:It.execution_count)??Qn.reduce((b,Q)=>b+Q.total_count,0),_c=(It==null?void 0:It.success_count)??Qn.reduce((b,Q)=>b+Q.success_count,0),$d=(It==null?void 0:It.failure_count)??Qn.reduce((b,Q)=>b+Q.failure_count,0),Jl=Ae?[Ae.summary,...Ae.detail_lines??[]].filter(b=>!!(b&&b.trim())):[],Us=(Ae==null?void 0:Ae.status)==="ready"&&Jl.length>0,Fl=(Me==null?void 0:Me.current_status)??(Xe==null?void 0:Xe.current_status)??"working",Dd=(Me==null?void 0:Me.current_status_label)??(Xe==null?void 0:Xe.current_status_label)??(Fl==="resting"?"休息中":"工作中"),Jt=Fl==="resting",Di=(r==null?void 0:r.source)==="demo",zi=Di?"演示兜底":"真实数据",Mi=Di?"de-badge-warning":"de-badge-success",$a=a2(en),hc=l2(en),Is=i2(en),cl=ap(en==null?void 0:en.lastSyncError),gc=(en==null?void 0:en.recentFailures)??[],yc=N2({confirmed:!!(Me!=null&&Me.confirmed),currentEvent:pt,pendingDecisionCount:Aa.length,eventsCount:tn.length}),Hs=w2(),Pl=DN[Hs??yc],zd=Hs||pt||Aa.length>0?Pl.bubble:(Me==null?void 0:Me.bubble_text)??Pl.bubble,Oi=oa.length>0?`已加载 ${oa.length} 项任务,当前选择 ${zt.length} 项;右侧展示真实执行状态、运行明细和日报。`:(Me==null?void 0:Me.summary)??"等待同步当天任务计划。",Xn=(pt==null?void 0:pt.task_title)??(Tn[0]?Tn[0].title:Yn[0]?Yn[0].name:Me!=null&&Me.confirmed?"等待下一条执行事件":"等待确认任务设置"),Gs=pt?`${pt.plan_title}:${Zo(pt)}(${by(pt)})`:Tn[0]?vy(Tn[0]):Yn[0]?Lo(Yn[0]):"任务执行后会显示正在处理的任务、步骤或汇总动作。",Ys=Aa[0]?`等待人工确认:${Aa[0].title}`:Tn[0]?`Task Agent:${vy(Tn[0])}`:Yn[0]?`处理服务状态:${Lo(Yn[0])}`:Me!=null&&Me.confirmed?(Bs==null?void 0:Bs.lines[0])??"继续按计划轮询新工单,并把结果同步到运行明细。":"请先确认今天要执行的任务,确认后数字员工会开始执行。",ol=!!(r&&!(Me!=null&&Me.confirmed));v.useEffect(()=>{if(!(g||!r)&&r.workday.confirmed){Ut(!1);return}},[ra,g,a,r]),v.useEffect(()=>{Xe&&Ca({name:Xe.name||"",company:Xe.company||"",position:Xe.position||Xe.major||"",currentStatus:Xe.current_status||(Me==null?void 0:Me.current_status)||"working"})},[Xe,Me==null?void 0:Me.current_status]),v.useEffect(()=>{dc((Ae==null?void 0:Ae.report_schedule_time)||"18:00")},[Ae==null?void 0:Ae.report_schedule_time]),v.useEffect(()=>{yt(!1)},[a]);const Da=v.useCallback(b=>{!b.selectable||!b.implemented||(_(Q=>{const re=new Set(Q);return re.has(b.id)?re.delete(b.id):re.add(b.id),re}),ca.current=!0,ie(!0),w(null))},[]),Ks=v.useCallback(async()=>{if(h.size===0){N("请至少选择一项今天要执行的任务。");return}if(Jt){N("当前状态为休息中,请切换为工作中后再执行任务。");return}C("confirm_workday"),N(null),w(null);try{const b=await ql({action:"confirm_workday",date:a,duty_ids:Ti});if(!me.current)return;o(b),_(new Set(h)),ca.current=!0,ie(!1),Ut(!1),w("任务设置已确认,数字员工开始按任务执行。")}catch(b){me.current&&N(b instanceof Error?b.message:"确认任务设置失败")}finally{me.current&&C(null)}},[Jt,a,h,Ti]),qi=v.useCallback(async()=>{var b;C("flush_management_sync"),N(null),w(null);try{const Q=(b=window.QimingClawBridge)==null?void 0:b.digital;if(!(Q!=null&&Q.flushSync)){w("当前环境未连接 qimingclaw 同步桥。");return}const re=await Q.flushSync();if(!me.current)return;uc(re);const ye=await Ss(a);if(!me.current)return;o(ye);const _e=re.failed>0?`同步完成,仍有 ${re.failed} 条失败记录。`:re.pending>0?`同步完成,仍有 ${re.pending} 条待同步记录。`:"管理端同步完成。";w(_e)}catch(Q){me.current&&N(Q instanceof Error?Q.message:"同步管理端失败")}finally{me.current&&C(null)}},[a]),vc=v.useCallback(async()=>{C("pull_plan_step_dispatch_policy"),N(null),w(null);try{const b=await Iv();if(!me.current||(await Fe(),!me.current))return;const Q=b.policy;w(b.ok?`PlanStep 派发策略已拉取:${Q.enabled?"启用":"停用"},每轮最多 ${Q.max_per_sweep} 个。`:`PlanStep 派发策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取PlanStep派发策略失败")}finally{me.current&&C(null)}},[Fe]),Wl=v.useCallback(async()=>{C("pull_risk_approval_policy"),N(null),w(null);try{const b=await Gv();if(!me.current||(await Fe(),!me.current))return;w(b.ok?"风险审批策略已拉取。":`风险审批策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取风险审批策略失败")}finally{me.current&&C(null)}},[Fe]),Zn=v.useCallback(async()=>{C("pull_route_decision_policy"),N(null),w(null);try{const b=await Qv();if(!me.current||(await Fe(),!me.current))return;const Q=b.policy;w(b.ok?`入口路由策略已拉取:阻断 ${Q.blocked_intents.length} 类,审批 ${Q.approval_required_intents.length} 类。`:`入口路由策略拉取失败,已沿用本地策略:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取入口路由策略失败")}finally{me.current&&C(null)}},[Fe]),Qs=v.useCallback(async()=>{C("pull_approval_updates"),N(null),w(null);try{const b=await SN();if(!me.current||(await Fe(),!me.current))return;w(b.ok?`审批更新已拉取:应用 ${b.applied??0} 条,忽略 ${b.ignored??0} 条,冲突 ${b.conflicted??0} 项。`:`审批更新拉取失败:${b.error||"未知错误"}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"拉取审批更新失败")}finally{me.current&&C(null)}},[Fe]),dl=v.useCallback(async(b,Q)=>{const re=`route-intervention:${b.route_decision_id}:${Q}`;C(re),N(null),w(null);try{const ye=await LC(b.route_decision_id,{approval_id:b.approval_id,decision:Q,actor:"digital_employee_operator"});if(!me.current||(await Fe(),!me.current))return;w(ye.message||(Q==="approved"?"入口路由干预已通过。":"入口路由干预已拒绝。"))}catch(ye){me.current&&N(ye instanceof Error?ye.message:"处理入口路由干预失败")}finally{me.current&&C(null)}},[Fe]),ma=v.useCallback(async b=>{const Q=gy(b,en);try{await navigator.clipboard.writeText(Q),N(null),w("同步失败诊断已复制。")}catch(re){w(null),N(re instanceof Error?re.message:"复制同步失败诊断失败")}},[en]),Vs=v.useCallback(b=>{yy(d2(b),gy(b,en)),N(null),w("同步失败诊断已导出。")},[en]),Li=v.useCallback(()=>{_(new Set),ca.current=!0,ie(!0),w("已一键取消当前选择,重新选择后点击任务执行生效。"),N(null)},[]),xc=v.useCallback(async()=>{C("update_profile"),N(null),w(null);try{const b=await ql({action:"update_profile",date:a,name:En.name,company:En.company,position:En.position,current_status:En.currentStatus});if(!me.current)return;o(b),V(!1),w("数字员工特性设置已保存。")}catch(b){me.current&&N(b instanceof Error?b.message:"保存特性设置失败")}finally{me.current&&C(null)}},[En,a]),Bi=v.useCallback(async()=>{C("update_report_schedule"),N(null),w(null);try{const b=await ql({action:"update_report_schedule",date:a,report_schedule_time:rl});if(!me.current)return;o(b),w(`日报生成时间已设置为 ${rl}。`)}catch(b){me.current&&N(b instanceof Error?b.message:"设置日报时间失败")}finally{me.current&&C(null)}},[rl,a]),Ui=v.useCallback(async()=>{var b,Q;C("generate_daily_report"),N(null),w(null);try{const re=await ql({action:"generate_daily_report",date:a,duty_ids:Ti,report_schedule_time:rl});if(!me.current)return;const ye=((b=re.daily_report)==null?void 0:b.status)==="ready"?re:await Ss(a);if(!me.current)return;o(ye),w("日报已生成,可下载本地文本。"),((Q=ye.daily_report)==null?void 0:Q.status)==="ready"&&yt(!0)}catch(re){me.current&&N(re instanceof Error?re.message:"生成日报失败")}finally{me.current&&C(null)}},[rl,a,h,Ti]),Xs=v.useCallback(()=>{!Ae||Ae.status!=="ready"||(yy(u2(a),f2(fa,Ae,Qn,Rn),"text/plain;charset=utf-8"),w("日报文本已下载。"))},[Ae,a,fa,Qn,Rn]),Ft=v.useCallback(async(b,Q)=>{var re;C(`${b.id}:${Q}`),N(null),w(null);try{const ye=await ql({action:"decide_approval",date:a,decision_id:b.id,decision:Q});if(!me.current)return;const _e=((re=b.actions.find(Qe=>Qe.id===Q))==null?void 0:re.label)??Q;o(ye),w(`已记录“${_e}”处理结果,并写入 qimingclaw 本地运行状态。`)}catch(ye){me.current&&N(ye instanceof Error?ye.message:"处理决策失败")}finally{me.current&&C(null)}},[a]),Jn=v.useCallback((b,Q)=>{A(re=>({...re,[b]:{...re[b]??vs,...Q}}))},[]),pa=v.useCallback(async(b,Q)=>{const re=k[b.id]??vs,ye=Bt(re.comment),_e=Bt(re.delegateTo),Qe=Bt(re.dueAt);if(Q==="comment"&&!ye){N("请先填写审批评论。");return}if(Q==="delegate"&&!_e){N("请先填写转交对象。");return}const _t=`approval-action:${b.id}:${Q}`;C(_t),N(null),w(null);try{const at={actor:"digital_employee_operator",source:"digital-command-deck",comment:Q==="comment"?ye:void 0,delegate_to:Q==="delegate"?_e:void 0,delegate_label:Q==="delegate"?_e:void 0,due_at:Q==="mark_timeout"?Qe||new Date().toISOString():void 0,reason:Q==="mark_risk"||Q==="clear_risk"||Q==="mark_timeout"?ye||Xf(Q):void 0},ke=await vN(b.id,Q,at);if(!me.current)return;if(!(ke!=null&&ke.ok))throw new Error((ke==null?void 0:ke.error)||"记录审批动作失败");const dt=await Ss(a);if(!me.current)return;o(dt),A(et=>{var cn,Fn;return{...et,[b.id]:{...et[b.id]??vs,comment:Q==="comment"?"":((cn=et[b.id])==null?void 0:cn.comment)??"",delegateTo:Q==="delegate"?"":((Fn=et[b.id])==null?void 0:Fn.delegateTo)??""}}}),w(`已记录审批动作:${Xf(Q)}。`)}catch(at){me.current&&N(at instanceof Error?at.message:"记录审批动作失败")}finally{me.current&&C(null)}},[k,a]),ei=v.useCallback(async(b,Q)=>{var _e;const re=`approval-conflict:${b.id}:${Q}`,ye=k[b.id]??vs;C(re),N(null),w(null);try{const Qe=await xN(b.id,{resolution:Q,actor:"digital_employee_operator",comment:Bt(ye.comment)||null});if(!me.current)return;if(!(Qe!=null&&Qe.ok))throw new Error((Qe==null?void 0:Qe.error)||((_e=Qe==null?void 0:Qe.reason_codes)==null?void 0:_e.join(", "))||"冲突裁决失败");const _t=await Ss(a);if(!me.current)return;o(_t),A(at=>({...at,[b.id]:{...at[b.id]??vs,comment:""}})),w("冲突裁决已记录。")}catch(Qe){me.current&&N(Qe instanceof Error?Qe.message:"冲突裁决失败")}finally{me.current&&C(null)}},[k,a]),Zs=v.useCallback(async(b,Q)=>{const re=`task-agent:${b.task_id}:${Q}`;C(re),N(null),w(null);try{const ye=await Xo({command_kind:Q,context_refs:{plan_id:b.plan_id,task_id:b.task_id,run_id:b.latest_run_id,step_id:b.step_id,task_agent_id:b.agent_id},payload:{source:"digital-home-task-agent",task_agent_id:b.agent_id,task_id:b.task_id,plan_id:b.plan_id,step_id:b.step_id,latest_run_id:b.latest_run_id,title:b.title,requested_action:Q,previous_state:b.execution_state,next_action:b.next_action},correlation_id:`digital-home-task-agent-${b.task_id}-${Q}-${Date.now()}`});if(!ye.accepted)throw new Error(ye.message||`Task Agent 命令未被接受:${ye.command_id||Q}`);w(`Task Agent 已${y2(Q)}:${b.title}。`),await Fe()}catch(ye){me.current&&N(ye instanceof Error?ye.message:"Task Agent 控制失败")}finally{me.current&&C(null)}},[Fe]),za=v.useCallback(async(b,Q,re={})=>{const ye=bm(b),_e=Q==="retry_task"||Q==="skip_task"?ye:null,Qe=(_e==null?void 0:_e.step_id)??b.step_id,_t=(_e==null?void 0:_e.task_id)??b.task_id??null,at=(_e==null?void 0:_e.latest_run_id)??b.latest_run_id??null;if(!_t){N("当前阻塞步骤缺少可治理任务,无法发送处理命令");return}const ke=`blocked-plan-step:${b.step_id}:${Q}`;C(ke),N(null),w(null);try{const dt=await Xo({command_kind:Q,context_refs:{plan_id:b.plan_id,task_id:_t,run_id:at,step_id:Qe,blocked_step_id:b.step_id},payload:{source:"digital-home-blocked-plan-step",plan_id:b.plan_id,task_id:_t,run_id:at,step_id:Qe,blocked_step_id:b.step_id,blocked_step_title:b.title,blocked_dependency_step_id:(_e==null?void 0:_e.step_id)??null,requested_action:Q,input:re.input},correlation_id:`digital-home-blocked-step-${b.step_id}-${Q}-${Date.now()}`});if(!dt.accepted)throw new Error(dt.message||`阻塞步骤处理未被接受:${dt.command_id||Q}`);w(`阻塞步骤已${b2(Q)}:${b.title}。`),il(null),sl(""),await Fe()}catch(dt){me.current&&N(dt instanceof Error?dt.message:"阻塞步骤处理失败")}finally{me.current&&C(null)}},[Fe]),Js=v.useCallback(async()=>{const b=Ai,Q=Vl.trim();!b||!Q||await za(b.step,"provide_task_input",{input:Q})},[Vl,Ai,za]),ti=v.useCallback(async b=>{const Q=`managed-service:${b.service_id}:restart`;C(Q),N(null),w(null);try{const re=await dN(b.service_id,{reason:"digital_home_managed_service_issue",actor:"digital_employee_ui"});if(!re.ok)throw new Error(re.error||re.message||`${b.name} 重启失败`);w(`${b.name} 已提交安全重启。`),await Fe()}catch(re){me.current&&N(re instanceof Error?re.message:`${b.name} 重启失败`)}finally{me.current&&C(null)}},[Fe]),Ma=v.useCallback(b=>{e({tab:"missions",date:a,missionId:b.conversationId||b.id})},[e,a]),kc=v.useCallback(async b=>{const Q=py(ae),re=Date.now(),ye=`digital-home-${b.planId}-${ae.replace(":","")}`;C(`schedule:${b.id}`),N(null),w(null);try{const _e=await Xo({command_kind:"create_schedule",context_refs:{plan_id:b.planId,schedule_id:ye},payload:{source:"digital-home",plan_id:b.planId,name:`定时执行:${b.title}`,description:`按首页任务管理定时任务:${b.title}`,prompt:`请按计划执行:${b.title}。${b.summary}`,cron_expr:Q,schedule:Q},correlation_id:`digital-home-create-schedule-${b.planId}-${re}`,idempotency_key:`digital-home-create-schedule-${b.planId}-${ae}-${re}`});if(!_e.accepted)throw new Error(_e.message||`调度命令未被接受:${_e.command_id||"create_schedule"}`);ue(null),w(`已提交定时:${b.title},${ae} 按 cron 计划执行。`),await Fe()}catch(_e){me.current&&N(_e instanceof Error?_e.message:"定时执行失败")}finally{me.current&&C(null)}},[Fe,ae]),Md=v.useCallback(async b=>{var Q;if(!Hr(b)){N(Gr(b)),w(null);return}C(`execute:${b.id}`),N(null),w(null);try{const re=await uN(b.planId);if(re.ok!==!0)throw new Error(re.error||"执行接口未接受请求");const ye=((Q=re.dispatched_tasks)==null?void 0:Q.length)??0,_e=await dy(b.planId),Qe=_e.dispatched??0,_t=_e.skipped??0,at=_e.failed??0;Ee(null),w(Qe>0||_t>0||at>0?`已触发执行:${b.title},新建 ${ye} 个步骤,推进 ${Qe} 个${_t>0?`,跳过 ${_t} 个`:""}${at>0?`,失败 ${at} 个`:""}。`:`已触发执行:${b.title},已派发 ${ye} 个步骤。`),await Fe()}catch(re){me.current&&N(re instanceof Error?re.message:"执行失败")}finally{me.current&&C(null)}},[Fe]),Fs=v.useCallback(async b=>{var re,ye;if(!Hr(b)){N(Gr(b)),w(null);return}const Q=`orchestrate:${b.id}`;C(Q),N(null),w(null);try{const _e=await dy(b.planId);if(_e.ok===!1)throw new Error(((ye=(re=_e.errors)==null?void 0:re[0])==null?void 0:ye.error)||"计划推进未被接受");w(`已推进:${b.title},派发 ${_e.dispatched??0} 个,跳过 ${_e.skipped??0} 个${(_e.failed??0)>0?`,失败 ${_e.failed}`:""}。`),await Fe()}catch(_e){me.current&&N(_e instanceof Error?_e.message:"计划推进失败")}finally{me.current&&C(null)}},[Fe]),Ps=v.useCallback(()=>{Ut(!1),Wt(a),A2(a)},[a]),Ii=v.useCallback((b,Q)=>{const re=h.has(b.id),ye=Gr(b);return s.jsxs("div",{className:`${HN(b,re)} ${Q==="guide"?"de-duty-card--guide":""}`,title:b.summary,children:[s.jsxs("label",{className:"de-task-manager-duty-check",children:[s.jsx("input",{type:"checkbox",checked:re,disabled:!b.selectable||!b.implemented,onChange:()=>Da(b)}),s.jsx("span",{children:re?"已选":b.implemented?"未选":"待扩展"})]}),s.jsxs("div",{className:"de-template-card-main",children:[s.jsxs("div",{className:"de-template-card-head",children:[s.jsx("span",{className:"de-template-card-name",children:b.title}),s.jsx("span",{className:`de-badge ${xs(b.statusTone)}`,children:b.implemented?b.statusLabel:"待扩展"})]}),s.jsx("p",{className:"de-template-card-desc",children:b.summary}),s.jsxs("div",{className:"de-template-card-meta",children:[s.jsx("span",{children:b.scheduleText}),s.jsx("span",{children:b.resultText})]}),s.jsxs("div",{className:"de-duty-card-foot",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented,onClick:()=>Ma(b),children:"进入处理"}),s.jsxs("div",{className:"de-duty-card-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||b.readyStepCount===0||!!S,title:b.readyStepCount>0?"推进此计划的 Ready 步骤":"暂无可推进 Ready 步骤",onClick:()=>{Fs(b)},children:[s.jsx(Hf,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===`orchestrate:${b.id}`?"推进中":FN(b)})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||S===`schedule:${b.id}`,onClick:()=>ue(b),children:[s.jsx(Jg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"定时"})]}),s.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||S===`execute:${b.id}`,title:ye||"立即执行此任务",onClick:()=>Ee(b),children:[s.jsx(Zg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"执行"})]})]}),!b.implemented&&s.jsx("span",{className:"de-duty-selected-mark",children:"待扩展"})]})]})]},`${Q}-${b.id}`)},[S,Fs,Ma,h,Da]),Od=v.useCallback(b=>{le(b),M(!0)},[]),Ws=v.useCallback(()=>{le(null),M(!1)},[]),Sc=v.useCallback(()=>{B(!1),M(!1)},[]),ul=v.useCallback(()=>{B(!0),M(!0)},[]),qd=v.useCallback(b=>{xy(b.target)||ul()},[ul]),jc=v.useCallback(b=>{b.key!=="Enter"&&b.key!==" "||xy(b.target)||(b.preventDefault(),ul())},[ul]),Ld=v.useCallback(b=>{le(null),B(!1),M(!1),e({tab:"missions",date:a,missionId:b.conversation_id||b.id})},[e,a]);return s.jsxs("div",{className:"de-dashboard de-dashboard--compact",style:{position:"relative",height:"100%",minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[s.jsx("div",{className:"de-connection-layer","aria-hidden":"true",children:s.jsxs("svg",{className:"de-connection-svg",viewBox:"0 0 1200 800",preserveAspectRatio:"none",children:[s.jsxs("defs",{children:[s.jsxs("linearGradient",{id:"connGrad1",x1:"0%",y1:"0%",x2:"100%",y2:"100%",children:[s.jsx("stop",{offset:"0%",stopColor:"rgba(79,172,254,0.25)"}),s.jsx("stop",{offset:"100%",stopColor:"rgba(0,242,254,0.1)"})]}),s.jsx("filter",{id:"connGlow",children:s.jsx("feGaussianBlur",{stdDeviation:"3"})})]}),s.jsx("path",{d:"M 80 180 Q 420 400, 580 350",stroke:"url(#connGrad1)",strokeWidth:"1.5",fill:"none",filter:"url(#connGlow)"}),s.jsx("path",{d:"M 120 620 Q 380 400, 560 380",stroke:"url(#connGrad1)",strokeWidth:"1.2",fill:"none",filter:"url(#connGlow)"}),s.jsx("path",{d:"M 640 360 Q 780 200, 1100 160",stroke:"url(#connGrad1)",strokeWidth:"1.3",fill:"none",filter:"url(#connGlow)"})]})}),s.jsxs("div",{className:"de-dashboard-content",children:[s.jsxs("div",{className:"de-dashboard-left",children:[s.jsxs("div",{className:"de-card de-person-card de-person-card--compact",children:[s.jsxs("div",{className:"de-card-title-bar",children:[s.jsx("span",{className:"de-card-title-bar-text",children:"数字员工"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>V(!0),children:"特性设置"})]}),s.jsx("div",{className:"de-card-body",children:s.jsxs("div",{className:"de-info-grid",children:[s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"姓名"}),s.jsx("span",{children:(Xe==null?void 0:Xe.name)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"单位"}),s.jsx("span",{children:(Xe==null?void 0:Xe.company)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"岗位"}),s.jsx("span",{children:(Xe==null?void 0:Xe.position)??(Xe==null?void 0:Xe.major)??"同步中"})]}),s.jsxs("div",{className:"de-info-item",children:[s.jsx("label",{children:"当前状态"}),s.jsx("span",{className:Jt?"de-status-resting":"de-status-working",children:Dd})]})]})})]}),s.jsxs("div",{className:"de-card de-template-manager-card",children:[s.jsx("div",{className:"de-card-title-bar",children:s.jsx("span",{className:"de-card-title-bar-text",children:"任务设置"})}),s.jsxs("div",{className:"de-card-body de-template-manager-body",children:[s.jsxs("div",{className:"de-workday-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"日期"}),s.jsx("input",{type:"date",value:a,onChange:b=>{ca.current=!1,ie(!1),w(null),l(b.target.value||ym())}})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g,onClick:()=>J(!0),children:"任务设置"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="flush_management_sync",onClick:qi,title:"立即同步数字员工本地状态到管理端",children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="flush_management_sync"?"同步中...":"同步管理端"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_plan_step_dispatch_policy",onClick:vc,title:"从管理端拉取 PlanStep 派发策略",children:[s.jsx(Pr,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_plan_step_dispatch_policy"?"拉取中...":"拉取策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_risk_approval_policy",onClick:Wl,title:"从管理端拉取风险审批策略",children:[s.jsx(Fg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_risk_approval_policy"?"拉取中...":"风险策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_route_decision_policy",onClick:Zn,title:"从管理端拉取入口路由策略",children:[s.jsx(Qo,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_route_decision_policy"?"拉取中...":"路由策略"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:g||S==="pull_approval_updates",onClick:Qs,title:"从管理端拉取审批更新",children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S==="pull_approval_updates"?"拉取中...":"审批更新"})]})]}),s.jsxs("div",{className:`de-management-sync-strip de-management-sync-strip--${$a}`,title:cl||Is,children:[s.jsx("span",{className:`de-badge ${xs($a)}`,children:hc}),s.jsx("span",{children:Is})]}),gc.length>0&&s.jsx("div",{className:"de-management-sync-failures","aria-label":"同步失败明细",children:gc.map(b=>s.jsxs("button",{type:"button",className:"de-management-sync-failure",title:b.error||b.id,onClick:()=>Ke(b),children:[s.jsx("span",{children:hy(b)}),s.jsx("strong",{children:Xr(b.entityType)}),s.jsx("em",{children:b.id}),s.jsx("small",{children:r2(b)})]},b.id))}),(z||D||O||(r==null?void 0:r.demo_reason))&&s.jsx("div",{className:`de-schedule-result ${D?"de-schedule-result--error":"de-schedule-result--success"}`,style:{marginBottom:10},children:D||z||O||(r==null?void 0:r.demo_reason)}),(Ei.length>0||Os)&&s.jsxs("div",{className:"de-management-sync-failures","aria-label":"入口路由干预",style:{marginBottom:10},children:[Os&&s.jsx("p",{className:"de-empty-text",children:Os}),Ei.slice(0,4).map(b=>{const Q=b.intervention_status,re=!b.resolved_at&&["pending","blocked","approved"].includes(Q),ye=`route-intervention:${b.route_decision_id}:approved`,_e=`route-intervention:${b.route_decision_id}:rejected`;return s.jsxs("div",{className:"de-management-sync-failure",title:b.blocked_reason||b.route_decision_id,children:[s.jsx("span",{children:b.entrypoint||"route"}),s.jsxs("strong",{children:[b.route_kind," / ",b.intent_kind]}),s.jsx("em",{children:Q}),s.jsx("small",{children:b.blocked_reason||b.matched_intent||b.approval_id||b.route_decision_id}),re&&s.jsxs("div",{className:"de-task-agent-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===ye,onClick:()=>{dl(b,"approved")},children:Q==="approved"?"恢复":"通过"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===_e,onClick:()=>{dl(b,"rejected")},children:"拒绝"})]})]},b.route_decision_id)})]}),Yn.length>0&&s.jsx("div",{className:"de-management-sync-failures","aria-label":"服务状态处理",style:{marginBottom:10},children:Yn.map(b=>{const Q=`managed-service:${b.service_id}:restart`,re=g2(b);return s.jsxs("div",{className:"de-management-sync-failure",title:b.error||Lo(b),children:[s.jsx("span",{children:b.kind}),s.jsx("strong",{children:b.name}),s.jsx("em",{children:b.status_label}),s.jsx("small",{children:Lo(b)}),re&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S===Q,onClick:ye=>{ye.stopPropagation(),ti(b)},title:`安全重启 ${b.name}`,children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===Q?"重启中...":"重启"})]})]},b.service_id)})}),I&&!z&&!D&&s.jsx("div",{className:"de-schedule-result de-schedule-result--success",style:{marginBottom:10},children:"当前选择尚未确认,自动刷新不会覆盖你的勾选。"}),s.jsxs("div",{className:"de-template-overview",children:[s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--total ${Z==="all"?"active":""}`,onClick:()=>K("all"),children:[s.jsx("span",{className:"de-template-overview-label",children:"总任务"}),s.jsx("span",{className:"de-template-overview-value",children:oa.length})]}),s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--scheduled ${Z==="selected"?"active":""}`,onClick:()=>K("selected"),children:[s.jsx("span",{className:"de-template-overview-label",children:"已选择"}),s.jsx("span",{className:"de-template-overview-value",children:zt.length})]}),s.jsxs("button",{type:"button",className:`de-template-overview-item de-template-overview-item--runnable ${Z==="pending"?"active":""}`,onClick:()=>K("pending"),children:[s.jsx("span",{className:"de-template-overview-label",children:"待选择"}),s.jsx("span",{className:"de-template-overview-value",children:Na.length})]})]}),s.jsxs("div",{className:"de-task-date-context",children:[s.jsxs("span",{children:["当前日期 ",fa]}),s.jsx("em",{children:$i}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Li,disabled:zt.length===0,children:"一键取消"})]}),s.jsxs("div",{className:"de-task-manager-preview de-task-manager-preview-scroll de-template-task-list",children:[s.jsxs("div",{className:"de-task-manager-preview-head",children:[s.jsx("span",{children:fa}),s.jsxs("strong",{children:[Rd," ",Ea.length]})]}),g?s.jsx("div",{className:"de-loading-skeleton",style:{height:96}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会再展示硬编码任务。"}):Ea.length===0?s.jsx("p",{className:"de-empty-text",children:"当前筛选下暂无任务,点击总任务查看全部内容。"}):Ea.map(b=>s.jsxs("div",{className:`de-task-manager-preview-row ${h.has(b.id)?"is-selected":""}`,title:b.summary,children:[s.jsxs("button",{type:"button",className:"de-template-task-main",onClick:()=>Ma(b),children:[s.jsx("strong",{children:b.title}),s.jsx("span",{children:b.resultText})]}),s.jsxs("div",{className:"de-template-item-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||b.readyStepCount===0||!!S,title:b.readyStepCount>0?"推进此计划的 Ready 步骤":"暂无可推进 Ready 步骤",onClick:()=>{Fs(b)},children:[s.jsx(Hf,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:S===`orchestrate:${b.id}`?"推进中":"推进"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!b.implemented||S===`schedule:${b.id}`,onClick:()=>ue(b),children:[s.jsx(Jg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"定时"})]}),s.jsxs("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!b.implemented||S===`execute:${b.id}`,title:Gr(b)||"立即执行此任务",onClick:()=>Ee(b),children:[s.jsx(Zg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:"执行"})]})]})]},b.id))]})]})]})]}),s.jsxs("div",{className:"de-dashboard-center",style:{justifyContent:"center",padding:"0 0 16px",overflow:"visible"},children:[s.jsx("div",{className:"de-avatar-wrapper",style:{minHeight:470,maxWidth:560,transform:"translateY(-6px)",display:"flex",alignItems:"flex-end",justifyContent:"center"},children:s.jsx(wN,{avatarSrc:Pl.src,altText:`数字员工-${Pl.label}`,statusLabel:Pl.label})}),s.jsxs("div",{className:"de-speech-bubble de-speech-bubble--employee",style:{top:"38%",left:"29%",right:"auto",transform:"translateX(-50%)",width:268,padding:"10px 12px",zIndex:16},children:[s.jsx("span",{className:"de-speech-label",children:"数字员工播报"}),s.jsx("p",{className:"de-speech-text",children:zd}),s.jsxs("button",{type:"button",className:"de-speech-workflow de-execution-detail-trigger",onClick:ul,title:"打开运行明细",children:[s.jsx("span",{children:"当前动作"}),s.jsx("strong",{children:Xn}),s.jsx("small",{children:Gs}),s.jsx("span",{children:"下一步"}),s.jsx("small",{children:Ys})]})]})]}),s.jsx("div",{className:"de-dashboard-right",children:s.jsxs("div",{className:"de-right-panels",children:[s.jsxs("div",{className:"de-workbench de-workday-execution de-workday-execution--clickable",role:"button",tabIndex:0,"aria-label":"打开运行明细",title:"打开运行明细",onClick:qd,onKeyDown:jc,children:[s.jsxs("div",{className:"de-card-title-bar de-workbench-head de-workbench-head--bar",children:[s.jsx("div",{className:"de-workbench-title-row",children:s.jsx("h3",{children:"今日执行"})}),s.jsx("span",{className:`de-badge ${Mi}`,children:zi})]}),s.jsxs("div",{className:"de-workday-execution-body","aria-live":"polite",children:[s.jsxs("div",{className:"de-execution-status-strip",children:[s.jsxs("span",{children:[s.jsx("em",{children:"已选任务"}),s.jsx("strong",{children:zt.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"运行记录"}),s.jsx("strong",{children:qs.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"已完成"}),s.jsx("strong",{children:da.length})]}),s.jsxs("span",{children:[s.jsx("em",{children:"异常"}),s.jsx("strong",{children:Mt.length})]})]}),(Et||ze&&ze.total>0)&&s.jsxs("div",{className:"de-observation-strip-stack",children:[ze&&ze.total>0&&s.jsxs("div",{className:"de-route-summary-strip",children:[s.jsxs("span",{children:[s.jsx("em",{children:"入口路由"}),s.jsx("strong",{children:ze.total})]}),s.jsxs("span",{children:[s.jsx("em",{children:"已映射"}),s.jsx("strong",{children:ze.mapped_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"治理审计"}),s.jsx("strong",{children:ze.governance_mapped_count??ze.mapped_count})]}),(ze.governance_blocked_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"治理拦截"}),s.jsx("strong",{children:ze.governance_blocked_count})]}),s.jsxs("span",{className:ze.attention_count>0?"is-warning":"",children:[s.jsx("em",{children:"需关注"}),s.jsx("strong",{children:ze.attention_count})]}),(ze.blocked_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"阻断"}),s.jsx("strong",{children:ze.blocked_count})]}),(ze.approval_required_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"待审"}),s.jsx("strong",{children:ze.approval_required_count})]}),(ze.pending_intervention_count??0)>0&&s.jsxs("span",{className:"is-warning",children:[s.jsx("em",{children:"待干预"}),s.jsx("strong",{children:ze.pending_intervention_count})]}),(ze.restored_count??0)>0&&s.jsxs("span",{children:[s.jsx("em",{children:"已恢复"}),s.jsx("strong",{children:ze.restored_count})]}),s.jsxs("small",{children:[Kn?`${Kn.route_kind} / ${Kn.intent_kind} · ${Kn.status_label}`:"暂无路由决策",ze.policy_source?` · 策略${ze.policy_source==="remote"?"远端":"本地"}`:"",` · 治理审计已映射 ${ze.governance_mapped_count??ze.mapped_count} 项`,(ze.governance_blocked_count??0)>0?` · 拦截/失败 ${ze.governance_blocked_count} 项`:"",ze.latest_intervention_status?` · 干预${ze.latest_intervention_status}`:"",ze.policy_last_pull_error?" · 拉取失败":""]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"interventions",interventionKind:"route_intervention"}),children:"打开介入台"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"policy-center"}),children:"打开策略中心"})]}),Et&&s.jsxs("div",{className:"de-diagnostic-summary-strip",children:[s.jsxs("span",{className:Ta>0?"is-warning":"",children:[s.jsx("em",{children:"诊断异常"}),s.jsx("strong",{children:Ta})]}),s.jsxs("span",{className:St>0?"is-warning":"",children:[s.jsx("em",{children:"审计风险"}),s.jsx("strong",{children:St})]}),s.jsxs("span",{children:[s.jsx("em",{children:"估算请求"}),s.jsx("strong",{children:Et.cost.request_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"Token"}),s.jsx("strong",{children:MN(Et.cost.total_tokens)})]}),s.jsxs("span",{children:[s.jsx("em",{children:"估算成本"}),s.jsx("strong",{children:ON(Et.cost.estimated_cost_usd)})]}),s.jsx("small",{children:Ra?`${Ra.category} · ${Ra.message}`:"诊断、审计和成本投影正常"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"ops-workbench",opsKind:(Ra==null?void 0:Ra.source)==="audit"?"audit":"diagnostic"}),children:"打开处置台"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"scheduler-workbench"}),children:"打开调度运营"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"notification-workbench",notificationKind:"all"}),children:"打开通知运营"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"skill-audit"}),children:"打开技能审计"})]})]}),s.jsx("div",{className:"de-task-summary-scroll",children:s.jsx("div",{className:"de-task-summary-grid","aria-label":"任务执行汇总",children:Qn.length===0?s.jsx("p",{className:"de-empty-text",children:"左侧选择任务后,这里会按任务生成执行次数和成功情况。"}):Qn.map(b=>s.jsxs("button",{type:"button",className:`de-task-summary-card de-live-feed-row--${b.latest_status_tone||"info"}`,onClick:()=>Ma(zt.find(Q=>Q.id===b.id)??zt[0]),title:[b.description,b.ai_summary||b.business_summary].filter(Boolean).join(` +`),children:[s.jsx("span",{className:"de-task-summary-title",children:b.title}),s.jsx("span",{className:`de-badge ${xs(b.latest_status_tone)}`,children:b.latest_status_label}),s.jsxs("div",{className:"de-task-summary-counts",children:[s.jsxs("span",{children:[s.jsx("em",{children:"执行"}),s.jsx("strong",{children:b.total_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"成功"}),s.jsx("strong",{children:b.success_count})]}),s.jsxs("span",{children:[s.jsx("em",{children:"失败"}),s.jsx("strong",{children:b.failure_count})]})]})]},b.id))})}),Tn.length>0&&s.jsx("div",{className:"de-task-agent-control-strip","aria-label":"Task Agent 控制台",children:Tn.slice(0,2).map(b=>{const Q=S===`task-agent:${b.task_id}:retry_task`,re=S===`task-agent:${b.task_id}:skip_task`,ye=S===`task-agent:${b.task_id}:cancel_task`;return s.jsxs("div",{className:`de-task-agent-control de-live-feed-row--${b.status_tone||"info"}`,children:[s.jsxs("div",{className:"de-task-agent-control-main",children:[s.jsx("span",{children:"Task Agent"}),s.jsx("strong",{children:b.title}),s.jsxs("small",{children:[b.status_label," · ",b.next_action]})]}),s.jsxs("div",{className:"de-task-agent-control-actions",children:[b.can_retry&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!!S,title:"记录重试任务命令",onClick:()=>{Zs(b,"retry_task")},children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:Q?"重试中":"重试"})]}),b.can_skip&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!!S,title:"记录跳过任务命令",onClick:()=>{Zs(b,"skip_task")},children:[s.jsx(Pg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:re?"跳过中":"跳过"})]}),b.can_cancel&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-task-agent-cancel-btn",disabled:!!S,title:"记录取消任务命令",onClick:()=>{Zs(b,"cancel_task")},children:[s.jsx(Wg,{size:12,"aria-hidden":"true"}),s.jsx("span",{children:ye?"取消中":"取消"})]})]})]},b.agent_id)})}),(Dt.length>0||Ql)&&s.jsxs("div",{className:"de-task-agent-control-strip de-blocked-step-control-strip","aria-label":"PlanStep 阻塞处理",children:[Ql&&s.jsx("p",{className:"de-empty-text",children:Ql}),Dt.slice(0,3).map(b=>{const Q=bm(b),re=S===`blocked-plan-step:${b.step_id}:retry_task`,ye=S===`blocked-plan-step:${b.step_id}:skip_task`,_e=S===`blocked-plan-step:${b.step_id}:cancel_task`,Qe=S===`blocked-plan-step:${b.step_id}:provide_task_input`,_t=!!S||!(Q!=null&&Q.task_id),at=!!S||!b.task_id;return s.jsxs("div",{className:"de-task-agent-control de-blocked-step-control de-live-feed-row--danger",children:[s.jsxs("div",{className:"de-task-agent-control-main",children:[s.jsx("span",{children:"Blocked PlanStep"}),s.jsx("strong",{children:b.title}),s.jsx("small",{children:v2(b)})]}),s.jsxs("div",{className:"de-task-agent-control-actions",children:[s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_t,title:Q!=null&&Q.task_id?"重试首个阻塞前置任务":"缺少可重试的前置任务",onClick:()=>{za(b,"retry_task")},children:[s.jsx(ln,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:re?"重试中":"重试前置"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_t,title:Q!=null&&Q.task_id?"跳过首个阻塞前置任务":"缺少可跳过的前置任务",onClick:()=>{za(b,"skip_task")},children:[s.jsx(Pg,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:ye?"跳过中":"跳过前置"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:at,title:b.task_id?"补充当前阻塞步骤所需输入":"当前步骤缺少可补充输入的任务",onClick:()=>{il({step:b,dependency:null}),sl("")},children:[s.jsx(Qo,{size:13,"aria-hidden":"true"}),s.jsx("span",{children:Qe?"提交中":"补充输入"})]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-task-agent-cancel-btn",disabled:at,title:b.task_id?"取消当前阻塞步骤":"当前步骤缺少可取消的任务",onClick:()=>{za(b,"cancel_task")},children:[s.jsx(Wg,{size:12,"aria-hidden":"true"}),s.jsx("span",{children:_e?"取消中":"取消此步骤"})]})]})]},b.step_id)})]}),s.jsxs("div",{className:"de-stage-feed-tools",children:[s.jsxs("span",{children:["展示 ",qs.length," / 共 ",tn.length," 条",Ls?" · 已暂停":" · 自动滚动"]}),s.jsxs("div",{children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>ce(b=>!b),children:q?"继续滚动":"暂停滚动"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:ul,children:"查看全部记录"})]})]}),s.jsxs("div",{className:"de-run-detail-panel",children:[s.jsxs("div",{className:"de-run-detail-head",children:[s.jsx("span",{children:"运行明细"}),s.jsxs("small",{children:["展示 ",Rn.length," / 共 ",ua.length," 条"]})]}),s.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"运行明细",children:[s.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[s.jsx("span",{children:"时间"}),s.jsx("span",{children:"任务名称"}),s.jsx("span",{children:"步骤名称"}),s.jsx("span",{children:"执行状态"}),s.jsx("span",{children:"结果"})]}),Rn.length===0?s.jsx("p",{className:"de-empty-text",children:"任务执行后,这里会滚动显示每个步骤的时间、任务、步骤和结果。"}):Rn.map(b=>s.jsxs("button",{type:"button",className:`de-run-detail-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{const Q=tn.find(re=>re.id===b.id);Q&&Od(Q)},title:b.business_detail,children:[s.jsx("span",{children:p2(b)}),s.jsx("strong",{children:b.task_name}),s.jsx("span",{children:b.step_name||b.operation_name||"执行步骤"}),s.jsx("span",{children:s.jsx("i",{className:`de-badge ${xs(b.status_tone)}`,children:b.status_label})}),s.jsx("em",{children:b.business_detail})]},b.id))]})]})]})]}),s.jsxs("div",{className:"de-report-summary",children:[s.jsxs("div",{className:"de-card-title-bar de-report-summary-head de-report-summary-head--bar",children:[s.jsx("div",{className:"de-report-summary-title-row",children:s.jsx("h3",{children:"日报生成"})}),s.jsx("span",{className:`de-report-badge ${(Ae==null?void 0:Ae.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}`,children:(Ae==null?void 0:Ae.status)==="ready"?"已生成":"待生成"})]}),s.jsxs("div",{className:"de-report-summary-body",children:[s.jsxs("div",{className:"de-report-schedule-row",children:[s.jsxs("label",{children:[s.jsx("span",{children:"生成时间"}),s.jsx("input",{type:"time",value:rl,onChange:b=>dc(b.target.value||"18:00")})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:S==="update_report_schedule",onClick:()=>{Bi()},children:"设置时间"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="generate_daily_report",onClick:()=>{Ui()},children:S==="generate_daily_report"?"生成中...":"生成日报"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-preview-btn",disabled:!Us,onClick:()=>yt(!0),title:Us?"预览日报文字内容":"生成日报后可预览文字内容",children:[s.jsx(ed,{size:14,"aria-hidden":"true"}),"预览日报"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(Ae!=null&&Ae.pdf_available),onClick:Xs,title:Ae!=null&&Ae.pdf_available?"下载本地日报文本":"生成日报后可下载本地日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"daily-report-workbench",entityId:Ae==null?void 0:Ae.report_id}),children:"打开日报运营"})]}),s.jsxs("div",{className:"de-report-meta",children:[s.jsx("p",{children:(Ae==null?void 0:Ae.summary)??"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),((Ae==null?void 0:Ae.detail_lines)??[]).slice(0,3).map(b=>s.jsx("p",{children:b},b))]})]})]})]})})]}),Ce&&Ae&&s.jsx("div",{className:"de-task-manager-modal-overlay de-report-preview-overlay",role:"presentation",onClick:()=>yt(!1),children:s.jsxs("div",{className:"de-report-preview-modal",role:"dialog","aria-modal":"true","aria-label":"日报预览",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"DAILY REPORT"}),s.jsx("h3",{children:Ae.title||"数字员工日报"}),s.jsxs("p",{children:[fa," 生成时间 ",Ae.report_schedule_time,",来源:",Ae.generated_by==="ai"?"AI 生成":"规则兜底"]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>yt(!1),children:"×"})]}),s.jsxs("div",{className:"de-report-preview-summary",children:[s.jsxs("div",{children:[s.jsx("span",{children:"任务总数"}),s.jsx("strong",{children:Vn})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行次数"}),s.jsx("strong",{children:rn})]}),s.jsxs("div",{children:[s.jsx("span",{children:"成功次数"}),s.jsx("strong",{children:_c})]}),s.jsxs("div",{children:[s.jsx("span",{children:"失败次数"}),s.jsx("strong",{children:$d})]})]}),s.jsx("div",{className:"de-report-preview-content",children:Jl.length===0?s.jsx("p",{className:"de-empty-text",children:"当前日报暂无可预览文字。"}):Jl.map((b,Q)=>s.jsx("p",{children:b},`${Q}-${b}`))}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>yt(!1),children:"关闭"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!Ae.pdf_available,onClick:Xs,children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]})]})]})}),Ai&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>il(null),children:s.jsxs("div",{className:"de-profile-settings-modal de-blocked-input-modal",role:"dialog","aria-modal":"true","aria-label":"补充阻塞步骤输入",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"BLOCKED PLANSTEP"}),s.jsx("h3",{children:"补充输入"}),s.jsx("p",{children:Ai.step.title})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>il(null),children:"×"})]}),s.jsxs("label",{className:"de-blocked-input-field",children:[s.jsx("span",{children:"补充内容"}),s.jsx("textarea",{value:Vl,onChange:b=>sl(b.target.value),placeholder:"输入用于解除当前阻塞的信息"})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>il(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:!Vl.trim()||!!S,onClick:()=>{Js()},children:"提交输入"})]})]})}),Ie&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>V(!1),children:s.jsxs("div",{className:"de-profile-settings-modal",role:"dialog","aria-modal":"true","aria-label":"数字员工特性设置",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PROFILE"}),s.jsx("h3",{children:"特性设置"}),s.jsx("p",{children:"维护数字员工在首页展示的姓名、单位、岗位和当前状态。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>V(!1),children:"×"})]}),s.jsxs("div",{className:"de-profile-settings-grid",children:[s.jsxs("label",{children:[s.jsx("span",{children:"姓名"}),s.jsx("input",{value:En.name,onChange:b=>Ca(Q=>({...Q,name:b.target.value}))})]}),s.jsxs("label",{children:[s.jsx("span",{children:"单位"}),s.jsx("input",{value:En.company,onChange:b=>Ca(Q=>({...Q,company:b.target.value}))})]}),s.jsxs("label",{children:[s.jsx("span",{children:"岗位"}),s.jsx("input",{value:En.position,onChange:b=>Ca(Q=>({...Q,position:b.target.value}))})]}),s.jsxs("div",{className:"de-profile-status-toggle",children:[s.jsx("span",{children:"当前状态"}),s.jsxs("div",{children:[s.jsx("button",{type:"button",className:En.currentStatus==="working"?"active":"",onClick:()=>Ca(b=>({...b,currentStatus:"working"})),children:"工作中"}),s.jsx("button",{type:"button",className:En.currentStatus==="resting"?"active":"",onClick:()=>Ca(b=>({...b,currentStatus:"resting"})),children:"休息中"})]})]})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>V(!1),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="update_profile",onClick:()=>{xc()},children:S==="update_profile"?"保存中...":"保存设置"})]})]})}),He&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>Ke(null),children:s.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"同步失败详情",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"SYNC FAILURE"}),s.jsx("h3",{children:"同步失败详情"}),s.jsxs("p",{children:[Xr(He.entityType)," / ",He.operation]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Ke(null),children:"×"})]}),s.jsxs("div",{className:"de-event-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"Outbox"}),s.jsx("strong",{children:He.id})]}),s.jsxs("div",{children:[s.jsx("span",{children:"实体"}),s.jsx("strong",{children:He.entityId})]}),((Cc=He.entitySummary)==null?void 0:Cc.title)&&s.jsxs("div",{children:[s.jsx("span",{children:"业务"}),s.jsx("strong",{children:He.entitySummary.title})]}),((Nc=He.entitySummary)==null?void 0:Nc.status)&&s.jsxs("div",{children:[s.jsx("span",{children:"业务状态"}),s.jsx("strong",{children:He.entitySummary.status})]}),s.jsxs("div",{children:[s.jsx("span",{children:"类型"}),s.jsx("strong",{children:Xr(He.entityType)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"操作"}),s.jsx("strong",{children:He.operation})]}),s.jsxs("div",{children:[s.jsx("span",{children:"重试"}),s.jsxs("strong",{children:[He.attempts," 次"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"上次尝试"}),s.jsx("strong",{children:hy(He)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"下次重试"}),s.jsx("strong",{children:tx(He)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"状态"}),s.jsx("strong",{children:He.dueForRetry?"等待补偿":"退避中"})]})]}),s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"失败原因"}),s.jsx("p",{children:He.error||"暂无错误详情。"})]}),((Hi=He.entitySummary)==null?void 0:Hi.summary)&&s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"业务摘要"}),s.jsx("p",{children:He.entitySummary.summary})]}),(((Ec=He.attemptHistory)==null?void 0:Ec.length)??0)>0&&s.jsxs("div",{className:"de-sync-attempt-history",children:[s.jsx("span",{children:"重试历史"}),s.jsx("div",{className:"de-sync-attempt-list",children:(Ac=He.attemptHistory)==null?void 0:Ac.map(b=>s.jsxs("div",{className:`de-sync-attempt-row de-sync-attempt-row--${o2(b.status)}`,children:[s.jsxs("div",{children:[s.jsxs("strong",{children:["第 ",b.attemptNo," 次"]}),s.jsx("em",{children:c2(b.status)}),s.jsx("span",{children:Wa(b.finishedAt)||b.finishedAt})]}),b.error&&s.jsx("small",{children:b.error})]},`${b.attemptNo}-${b.finishedAt}`))})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Ke(null),children:"关闭"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{ma(He)},children:[s.jsx(QS,{size:14}),"复制诊断"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Vs(He),children:[s.jsx(ws,{size:14}),"导出诊断"]}),He.managementRecordUrl&&s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>window.open(He.managementRecordUrl||"","_blank","noopener,noreferrer"),children:[s.jsx(ed,{size:14}),"查看管理端记录"]}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="flush_management_sync",onClick:()=>{qi().then(()=>Ke(null))},children:S==="flush_management_sync"?"同步中...":"立即重试"})]})]})}),U&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:Ws,children:s.jsxs("div",{className:"de-event-detail-modal",role:"dialog","aria-modal":"true","aria-label":"执行记录详情",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION DETAIL"}),s.jsx("h3",{children:"执行记录详情"}),s.jsx("p",{children:"这条记录已被锁定,滚动不会把它刷掉。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Ws,children:"×"})]}),s.jsxs("div",{className:"de-event-detail-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"业务"}),s.jsx("strong",{children:U.plan_title})]}),s.jsxs("div",{children:[s.jsx("span",{children:"操作"}),s.jsx("strong",{children:U.task_title})]}),s.jsxs("div",{children:[s.jsx("span",{children:"状态"}),s.jsx("strong",{children:_y(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"计划时间"}),s.jsx("strong",{children:ex(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行时间"}),s.jsx("strong",{children:nx(U)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"数据来源"}),s.jsx("strong",{children:zi})]})]}),s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"操作结果"}),s.jsx("p",{children:Zo(U)})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Ws,children:"关闭"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>Ld(U),children:"打开任务中心详情"})]})]})}),ne&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:Sc,children:s.jsxs("div",{className:"de-event-history-modal",role:"dialog","aria-modal":"true","aria-label":"全部执行记录",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"EXECUTION HISTORY"}),s.jsx("h3",{children:"运行明细"}),s.jsxs("p",{children:["当前日期共 ",tn.length," 条记录,本窗口展示最新 ",Math.min(Zl.length,fy)," 条。"]})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Sc,children:"×"})]}),s.jsx("div",{className:"de-event-history-toolbar",children:TN.map(b=>s.jsx("button",{type:"button",className:`de-filter-chip ${de===b.id?"active":""}`,onClick:()=>Te(b.id),children:b.label},b.id))}),s.jsx("div",{className:"de-event-history-list",children:Zl.length===0?s.jsx("p",{className:"de-empty-text",children:"当前筛选下没有执行记录。"}):mc.map(b=>s.jsxs("button",{type:"button",className:`de-event-history-row de-live-feed-row--${b.status_tone||"info"}`,onClick:()=>{le(b),B(!1),M(!0)},children:[s.jsxs("span",{children:[s.jsx("em",{children:"业务"}),s.jsx("strong",{children:b.plan_title})]}),s.jsxs("span",{children:[s.jsx("em",{children:"操作"}),s.jsx("strong",{children:b.task_title})]}),s.jsxs("span",{children:[s.jsx("em",{children:"状态"}),s.jsx("strong",{children:_y(b)})]}),s.jsxs("span",{children:[s.jsx("em",{children:"操作结果"}),s.jsx("strong",{children:Zo(b)}),s.jsx("small",{children:by(b)})]})]},b.id))})]})}),se&&s.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>ue(null),children:s.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"定时任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN SCHEDULE"}),s.jsx("h3",{children:"定时任务"}),s.jsx("p",{children:"定时会把任务注册到后端调度链路,每天按设置时间自动派发。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>ue(null),children:"×"})]}),s.jsxs("div",{className:"de-plan-action-body",children:[s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"任务"}),s.jsx("p",{children:se.title})]}),s.jsxs("label",{className:"de-plan-action-field",children:[s.jsx("span",{children:"每日定时时间"}),s.jsx("input",{type:"time",value:ae,onChange:b=>he(b.target.value||"09:00")})]}),s.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"调度注册"}),s.jsx("strong",{children:py(ae)})]}),s.jsxs("div",{children:[s.jsx("span",{children:"任务步骤"}),s.jsxs("strong",{children:[se.stepCount," 步"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行步骤"}),s.jsxs("strong",{children:[se.taskCount," 项"]})]})]}),s.jsx("div",{className:"de-schedule-result de-schedule-result--success",children:"这里不是本地假定时;提交后如果后端调度链路不可用,会直接显示真实失败原因。"})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>ue(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S===`schedule:${se.id}`,onClick:()=>{kc(se)},children:S===`schedule:${se.id}`?"注册中...":"确认定时"})]})]})}),ve&&s.jsx("div",{className:"de-task-manager-modal-overlay de-plan-action-overlay",role:"presentation",onClick:()=>Ee(null),children:s.jsxs("div",{className:"de-plan-action-modal",role:"dialog","aria-modal":"true","aria-label":"执行任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"PLAN EXECUTION"}),s.jsx("h3",{children:"执行任务"}),s.jsx("p",{children:"确认后立即创建并派发任务步骤,不需要先进入任务中心设置。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>Ee(null),children:"×"})]}),s.jsxs("div",{className:"de-plan-action-body",children:[s.jsxs("div",{className:"de-event-detail-result",children:[s.jsx("span",{children:"任务"}),s.jsx("p",{children:ve.title})]}),s.jsxs("div",{className:"de-event-detail-grid de-plan-action-grid",children:[s.jsxs("div",{children:[s.jsx("span",{children:"当前状态"}),s.jsx("strong",{children:ve.statusLabel})]}),s.jsxs("div",{children:[s.jsx("span",{children:"任务步骤"}),s.jsxs("strong",{children:[ve.stepCount," 步"]})]}),s.jsxs("div",{children:[s.jsx("span",{children:"执行步骤"}),s.jsxs("strong",{children:[ve.taskCount," 项"]})]})]}),s.jsx("div",{className:`de-schedule-result ${Hr(ve)?"de-schedule-result--success":"de-schedule-result--pending"}`,children:Hr(ve)?"确认后立即调用后端派发接口,按任务步骤进入真实执行链路。":Gr(ve)})]}),s.jsxs("div",{className:"de-event-modal-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>Ee(null),children:"取消"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S===`execute:${ve.id}`||!Hr(ve),onClick:()=>{Md(ve)},children:S===`execute:${ve.id}`?"触发中...":"确认执行"})]})]})}),Xl&&ol&&s.jsx("div",{className:"de-task-manager-modal-overlay de-workday-guide-overlay",role:"presentation",onClick:Ps,children:s.jsxs("div",{className:"de-task-manager-modal de-workday-guide-modal",role:"dialog","aria-modal":"true","aria-label":"开始今天的任务",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head de-workday-guide-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"WORKDAY START"}),s.jsx("h3",{children:"开始今天的任务"}),s.jsx("p",{children:"像值班员早上交接一样,先确认日期和执行内容,再让数字员工开始接单、外呼、汇总和汇报。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:Ps,children:"×"})]}),s.jsx("div",{className:"de-workday-guide-steps","aria-label":"开工引导步骤",children:$N.map((b,Q)=>s.jsxs("div",{className:"de-workday-guide-step",children:[s.jsx("span",{children:Q+1}),s.jsx("strong",{children:b.title}),s.jsx("p",{children:b.body})]},b.title))}),s.jsxs("div",{className:"de-workday-guide-body",children:[s.jsxs("section",{className:"de-task-manager-column de-workday-guide-column",children:[s.jsxs("div",{className:"de-task-manager-section-head",children:[s.jsxs("div",{children:[s.jsx("strong",{children:"选择今天要执行的任务"}),s.jsxs("span",{children:[zt.length," 项已选,",oa.length," 项总任务,",Na.length," 项待选择"]})]}),s.jsx("span",{className:`de-badge ${Mi}`,children:zi})]}),s.jsx("div",{className:"de-workday-guide-duty-list",children:g?s.jsx("div",{className:"de-loading-skeleton",style:{height:220}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不再展示硬编码任务。请先在任务中心创建或同步。"}):sn.map(b=>Ii(b,"guide"))})]}),s.jsxs("aside",{className:"de-workday-guide-side",children:[s.jsxs("div",{className:"de-workday-guide-summary",children:[s.jsx("span",{children:"日期"}),s.jsx("strong",{children:a}),s.jsx("p",{children:Oi})]}),s.jsxs("div",{className:"de-workday-guide-summary",children:[s.jsx("span",{children:"确认后会发生什么"}),s.jsx("strong",{children:"右侧进入执行滚动"}),s.jsx("p",{children:"首页会展示当前动作、下一步、操作状态和操作结果;需要人工决策时会在右侧停下来提示。"})]}),(D||I||(r==null?void 0:r.demo_reason))&&s.jsx("div",{className:`de-schedule-result ${D?"de-schedule-result--error":"de-schedule-result--success"}`,children:D||(I?"已调整任务勾选,点击确认后生效。":r==null?void 0:r.demo_reason)}),s.jsxs("div",{className:"de-workday-guide-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:Ps,children:"稍后设置"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="confirm_workday"||g,onClick:()=>{Ks()},children:S==="confirm_workday"?"确认中...":"确认并开始任务"})]})]})]})]})}),E&&s.jsx("div",{className:"de-task-manager-modal-overlay",role:"presentation",onClick:()=>J(!1),children:s.jsxs("div",{className:"de-task-manager-modal",role:"dialog","aria-modal":"true","aria-label":"任务设置",onClick:b=>b.stopPropagation(),children:[s.jsxs("div",{className:"de-task-manager-modal-head",children:[s.jsxs("div",{children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"TASK MANAGER"}),s.jsx("h3",{children:"任务设置"}),s.jsx("p",{children:"像员工早上确认工作一样,勾选今天要执行的内容,必要时进入详情或处理待决策事项。"})]}),s.jsx("button",{type:"button",className:"de-schedule-close",onClick:()=>J(!1),children:"×"})]}),s.jsxs("div",{className:"de-task-manager-modal-body",children:[s.jsxs("section",{className:"de-task-manager-column de-task-manager-column--duties",children:[s.jsxs("div",{className:"de-task-manager-section-head",children:[s.jsxs("div",{children:[s.jsx("strong",{children:"任务设置清单"}),s.jsxs("span",{children:[zt.length," 项已选,",oa.length," 项总任务,",Na.length," 项待选择"]})]}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:S==="confirm_workday"||g,onClick:()=>{Ks()},children:S==="confirm_workday"?"确认中...":Me!=null&&Me.confirmed?"重新任务执行":"确认并开始任务"})]}),s.jsx("div",{className:"de-task-manager-duty-list",children:g?s.jsx("div",{className:"de-loading-skeleton",style:{height:180}}):sn.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无任务,首页不会显示硬编码任务。可进入任务中心创建。"}):sn.map(b=>Ii(b,"manager"))})]}),s.jsxs("aside",{className:"de-task-manager-column de-task-manager-column--actions",children:[s.jsx("div",{className:"de-task-manager-section-head",children:s.jsxs("div",{children:[s.jsx("strong",{children:"待解决事项"}),s.jsx("span",{children:Aa.length>0?`${Aa.length} 项需要人处理`:"暂无阻塞事项"})]})}),s.jsx("div",{className:"de-task-manager-decision-list",children:((r==null?void 0:r.decisions)??[]).length===0?s.jsx("p",{className:"de-empty-text",children:"没有需要你确认的事项。"}):((r==null?void 0:r.decisions)??[]).map(b=>{var dt;const Q=k[b.id]??vs,re=`approval-action:${b.id}:`,ye=S===`${re}comment`,_e=S===`${re}delegate`,Qe=S===`${re}mark_timeout`,_t=S===`${re}mark_risk`,at=S===`${re}clear_risk`,ke=(dt=b.conflict)!=null&&dt.active?b.conflict:null;return s.jsxs("div",{className:"de-task-manager-decision-card",children:[s.jsxs("div",{className:"de-log-entry-meta",children:[s.jsx("strong",{children:b.title}),s.jsx("span",{children:b.status_label})]}),s.jsx("p",{children:b.scenario}),s.jsxs("div",{className:"de-approval-summary-grid",children:[ke&&s.jsx("span",{className:"de-badge de-badge-danger",children:"跨端冲突"}),s.jsx("span",{className:`de-badge ${xs(qN(b.risk_level))}`,children:LN(b.risk_level)}),s.jsx("span",{className:`de-badge ${xs(BN(b.sla_status))}`,children:UN(b.sla_status)}),s.jsx("span",{children:b.due_at?`截止 ${Wa(b.due_at)||b.due_at}`:"未设置截止"}),s.jsx("span",{children:b.comment_count?`评论 ${b.comment_count} 条`:"暂无评论"}),s.jsx("span",{children:b.delegate_to?`转交 ${b.delegate_to}`:"未转交"}),s.jsx("span",{children:b.last_action?`最近 ${Xf(b.last_action)} · ${b.last_actor||"未知"}`:"暂无审批动作"}),s.jsx("span",{children:b.approval_step_count?`步骤 ${b.approval_step_index||1}/${b.approval_step_count}`:"单步审批"}),s.jsx("span",{children:b.current_step_label?`当前 ${b.current_step_label}`:"当前步骤待确认"}),s.jsx("span",{children:b.current_participant?`处理人 ${b.current_participant}`:"未指定处理人"}),s.jsx("span",{children:b.next_step_label?`下一步 ${b.next_step_label}`:"无后续步骤"})]}),ke&&s.jsxs("div",{className:"de-decision-chain-note de-decision-chain-note--conflict",children:[s.jsx("span",{className:"de-badge de-badge-danger",children:"人工排查"}),s.jsxs("span",{children:[IN(ke.reason),":本地 ",my(ke.local_status??b.status),",管理端 ",my(ke.remote_status),"。",ke.detected_at?` 检测 ${Wa(ke.detected_at)||ke.detected_at}`:""]})]}),ke&&s.jsx("div",{className:"de-workbench-actions de-approval-governance-actions",children:[["keep_local","保留本地"],["accept_remote","采纳管理端"],["mark_reviewed","标记已复核"]].map(([et,cn])=>{const Fn=`approval-conflict:${b.id}:${et}`;return s.jsx("button",{type:"button",className:et==="accept_remote"?"de-workbench-action-accent":"",disabled:S===Fn,onClick:()=>{ei(b,et)},children:s.jsx("span",{children:S===Fn?"记录中...":cn})},et)})}),s.jsxs("div",{className:"de-approval-action-fields",children:[s.jsx("input",{value:Q.comment,placeholder:"评论 / 风险原因",onChange:et=>Jn(b.id,{comment:et.target.value})}),s.jsx("input",{value:Q.delegateTo,placeholder:"转交对象",onChange:et=>Jn(b.id,{delegateTo:et.target.value})}),s.jsx("input",{type:"datetime-local",value:Q.dueAt,onChange:et=>Jn(b.id,{dueAt:et.target.value})})]}),s.jsxs("div",{className:"de-workbench-actions de-approval-governance-actions",children:[s.jsxs("button",{type:"button",title:"记录审批评论",disabled:ye,onClick:()=>{pa(b,"comment")},children:[s.jsx(Qo,{size:13}),s.jsx("span",{children:ye?"记录中...":"评论"})]}),s.jsxs("button",{type:"button",title:"转交审批",disabled:_e,onClick:()=>{pa(b,"delegate")},children:[s.jsx(aj,{size:13}),s.jsx("span",{children:_e?"转交中...":"转交"})]}),s.jsxs("button",{type:"button",title:"标记 SLA 超时",disabled:Qe,onClick:()=>{pa(b,"mark_timeout")},children:[s.jsx(Hf,{size:13}),s.jsx("span",{children:Qe?"标记中...":"超时"})]}),s.jsxs("button",{type:"button",title:"标记审批风险",disabled:_t,onClick:()=>{pa(b,"mark_risk")},children:[s.jsx(Fg,{size:13}),s.jsx("span",{children:_t?"标记中...":"风险"})]}),s.jsxs("button",{type:"button",title:"清除审批风险",disabled:at,onClick:()=>{pa(b,"clear_risk")},children:[s.jsx(Pr,{size:13}),s.jsx("span",{children:at?"清除中...":"清除"})]})]}),s.jsxs("div",{className:"de-decision-chain-note",children:[s.jsx("span",{className:`de-badge ${ke?"de-badge-danger":"de-badge-success"}`,children:ke?"冲突保护":"本地记录"}),s.jsx("span",{children:ke?"直接同意/驳回已暂停,请先同步或在管理端工作台排查。":Zf(b.status)?"处理结果会写入 qimingclaw runtime event。":"该事项已在本地状态中处理。"}),ke?s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>e({tab:"interventions",interventionKind:"approval_conflict",entityId:b.id}),children:"打开介入台"}):null]}),s.jsxs("div",{className:"de-workbench-actions",children:[b.actions.map(et=>s.jsx("button",{type:"button",className:et.tone==="primary"?"de-workbench-action-accent":"",disabled:S===`${b.id}:${et.id}`||!Zf(b.status)||!!ke,onClick:()=>{Ft(b,et.id)},children:S===`${b.id}:${et.id}`?"处理中...":et.label},et.id)),s.jsx("button",{type:"button",onClick:()=>e({tab:"missions",date:a,missionId:b.id}),children:"查看上下文"})]})]},b.id)})})]})]})]})})]})}function gn({children:e,className:a="",style:l}){return s.jsx("div",{className:`de-card ${a}`,style:l,children:e})}function Nn({title:e,children:a}){return s.jsxs("div",{className:"de-card-title-bar",children:[s.jsx("span",{className:"de-card-title-bar-text",children:e}),a]})}const R2={info:"de-badge-info",success:"de-badge-success",warning:"de-badge-warning",danger:"de-badge-danger"};function vm({variant:e,label:a}){return s.jsx("span",{className:`de-badge ${R2[e]}`,children:a})}function xm(e){return Array.isArray(e)?e:[]}function Bo(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ye(e,a=""){return typeof e=="string"?e:typeof e=="number"?String(e):a}function zs(e){return/[\u4e00-\u9fff]/.test(e)}const ky={queued:"排队中",ready:"就绪",idle:"待执行",pending:"待处理",pending_authorization:"待授权",waiting_input:"待输入",draft:"草稿",reviewing:"审核中",approved:"已批准",preparing:"准备中",running:"执行中",active:"运行中",blocked:"已阻塞",succeeded:"已完成",success:"成功",finished:"已完成",complete:"已完成",completed:"已完成",failed:"失败",error:"错误",cancelled:"已取消",canceled:"已取消",aborted:"已终止",rejected:"已拒绝",deferred:"已暂缓",dispatched:"已下发",scheduled:"已设置定时",enabled:"已启用",disabled:"已停用",paused:"已暂停",unknown:"未知"},Sy={plan:"计划",task:"任务",task_running:"处理中",task_done:"任务完成",run:"执行开始",run_done:"执行完成",skill_tool:"技能调用",artifact:"产物",task_summary:"结果",entered_session:"会话",start:"目标",RunStarted:"开始调用",RequestDispatched:"请求已发出",ResponseReceived:"收到返回",RunSkipped:"本次跳过",RunCompleted:"执行完成",waiting_for_authorization:"等待授权",pending_authorization:"等待授权",authorization_approved:"授权通过",authorization_rejected:"授权拒绝",authorization_deferred:"稍后处理",failed:"执行失败",completed:"执行完成"};function hn(e,a="未知"){const l=Ye(e).trim();if(!l)return a;const r=ky[l]??ky[l.toLowerCase()];return r||(zs(l)?l:a)}function $2(e){const a=Ye(e).trim();return a?Sy[a]??Sy[a.toLowerCase()]??(zs(a)?a:"事件"):"事件"}function ax(e,a="暂无事件内容"){const l=Ye(e).trim();if(!l)return a;if(zs(l))return l;const r=hn(l,"");if(r)return r;const o=l.match(/^(Succeeded|Failed|Running|Completed)\s*\(attempt\s*#(\d+)\)$/i);return o?`${hn(o[1])}(第 ${o[2]} 次)`:/request failed/i.test(l)?"请求失败":/backend unavailable/i.test(l)?"后端服务不可达":/not found/i.test(l)?"未找到对应资源":a}function Qr(e,a="未命名内容"){const l=Ye(e).trim();if(!l||/unnamed/i.test(l))return a;if(zs(l))return l;const r=hn(l,"");if(r)return r;const o=lx(l);return o||l}function km(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function Sm(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function D2(e,a){const l=Ye(e).trim().toLowerCase();return a.length===0?l||"pending":a.some(r=>Sm(r.status))?"failed":a.some(r=>["running","active","leased"].includes(r.status.toLowerCase()))?"running":a.some(r=>["queued","ready","pending"].includes(r.status.toLowerCase()))?"queued":a.every(r=>km(r.status))?"succeeded":l||"pending"}function z2(e,a){const l=Ye(e,"unknown").trim().toLowerCase();return km(l)||Sm(l)?l:a.some(r=>Sm(r.status))?"failed":a.some(r=>["running","active","queued","leased"].includes(r.status.toLowerCase()))?"running":a.length>0&&a.every(r=>km(r.status))?"succeeded":l||"unknown"}function jy(e){return e?e.map(a=>{const l=Ye(a.plan_id),o=xm(a.steps).map(p=>{const _=xm(p.tasks).map(g=>({id:Ye(g.task_id),title:Qr(g.title,"子任务"),description:Ye(g.description),status:Ye(g.status,"pending"),assignedSkillId:g.assigned_skill_id?Ye(g.assigned_skill_id):null,startedAt:g.started_at?Ye(g.started_at):null,finishedAt:g.finished_at?Ye(g.finished_at):null}));return{id:Ye(p.step_id),title:Qr(p.title,"任务步骤"),description:Ye(p.description),status:D2(p.status,_),preferredSkills:Array.isArray(p.preferred_skills)?p.preferred_skills:[],tasks:_}}),d=[];for(const p of o)for(const h of p.tasks)d.push(h.id);return{id:l,title:Qr(a.title,"未命名任务"),objective:Qr(a.objective||a.description,"暂无任务说明"),status:z2(a.status,o),createdAt:a.created_at?Ye(a.created_at):null,updatedAt:a.updated_at?Ye(a.updated_at):null,steps:o,sourceIds:{planId:l||void 0,taskIds:d}}}):[]}const Jf={"decision-analyzer":"决策分析","git-log-collector":"Git 日志采集","number-generator":"数据生成","office-export-xlsx":"Excel 导出","task-tracker":"任务跟踪","weekly-report-writer":"周报撰写","zhihu-hotlist-detail":"知乎热榜明细","zhihu-hotlist":"知乎热榜","tq-lineloss-report":"台区线损报表","archive-workorder-grid-push-monitor":"归档工单推送监控","available-balance-below-zero-monitor":"可用余额监控","command-center-fee-control-monitor":"费用管控监控","sgcc-todo-crawler":"SGCC 待办爬取","appointment-workorder-monitor":"约时工单监控","fault-location-monitor":"故障定位监控","fudian-failure-monitor":"复电失败监控","important-service-expiry-monitor":"服务到期预警","by-95598-customer-satisfaction-report":"95598 满意率日报","by-daily-report-statistics":"日报统计","by-fire-fault-monthly-report":"火警故障月报","by-risk-control-next-day-plan-report":"风控次日计划","by-risk-control-week-plan-report":"风控周计划","by-supervision-workorder-detail-report":"督办工单明细","age-file-encryption":"文件加解密","anonymous-file-upload":"匿名文件上传","browser-automation-agent":"浏览器自动化","bulk-github-star":"批量仓库标星","changelog-generator":"更新日志生成","code-reviewer":"代码审查","commit-automation":"自动提交","crypto-trading-signal":"交易信号分析","csv-to-json":"CSV 转 JSON","data-analysis":"数据分析","deep-research":"深度调研","dependency-updater":"依赖更新","deploy-automation":"自动部署","dns-lookup":"DNS 查询","document-generator":"文档生成","email-automation":"邮件自动化","file-converter":"文件格式转换","git-history-analyzer":"Git 历史分析","github-issue-manager":"Issue 管理","image-optimizer":"图片优化","json-schema-validator":"JSON Schema 校验","log-analyzer":"日志分析","markdown-to-pdf":"Markdown 转 PDF","meeting-summarizer":"会议纪要","news-aggregator":"新闻聚合","pdf-extractor":"PDF 提取","performance-profiler":"性能分析","pr-review-bot":"PR 审查","release-notes-generator":"发布说明生成","screenshot-automation":"截图自动化","search-engine-scraper":"搜索引擎抓取","sentiment-analysis":"情感分析","shell-command-runner":"命令执行","slack-notification":"Slack 通知","spreadsheet-generator":"电子表格生成","text-summarizer":"文本摘要","torrent-search":"资源搜索","translate-text":"文本翻译","web-scraper":"网页抓取","website-monitor":"网站监控","whitepaper-analyzer":"白皮书分析","xml-to-json":"XML 转 JSON"};function lx(e){if(Jf[e])return Jf[e];for(const[a,l]of Object.entries(Jf))if(e.includes(a)||a.includes(e))return l;return null}function wy(e,a){const l=lx(e);return l||(zs(a)?a:"自动化技能")}const Cy={"decision-analyzer":"数字化","git-log-collector":"数字化","number-generator":"数字化","office-export-xlsx":"办公","task-tracker":"办公","weekly-report-writer":"报表","zhihu-hotlist-detail":"数字化","zhihu-hotlist":"数字化","tq-lineloss-report":"报表","archive-workorder-grid-push-monitor":"监控巡检","available-balance-below-zero-monitor":"监控巡检","command-center-fee-control-monitor":"监控巡检","sgcc-todo-crawler":"监控巡检","appointment-workorder-monitor":"监控巡检","fault-location-monitor":"监控巡检","fudian-failure-monitor":"监控巡检","important-service-expiry-monitor":"监控巡检","by-95598-customer-satisfaction-report":"报表","by-daily-report-statistics":"报表","by-fire-fault-monthly-report":"报表","by-risk-control-next-day-plan-report":"报表","by-risk-control-week-plan-report":"报表","by-supervision-workorder-detail-report":"报表","age-file-encryption":"数字化","anonymous-file-upload":"通信","browser-automation-agent":"数字化","bulk-github-star":"发展","changelog-generator":"发展","chat-logger":"通信","check-crypto-address-balance":"财务","city-distance":"发展","city-tourism-website-builder":"营销","crawl-websites-at-scale":"数字化","csv-data-summarizer":"财务","d3js-data-visualization":"数字化","database-query-and-export":"数字化","file-tracker":"综合","free-geocoding-and-maps":"发展","free-translation-api":"综合","free-weather-data":"综合","generate-asset-price-chart":"财务","generate-qr-code-natively":"数字化","get-crypto-price":"财务","git-worktree-cli":"发展","github-stats":"发展","html-to-markdown":"数字化","image-compressor":"综合","json-to-csv":"数字化","llm-council":"数字化","markdown-table-generator":"综合","multi-format-converter":"综合","npm-package-info":"发展","pdf-generator":"综合","random-number-generator":"综合","readability-score":"综合","rss-feed-reader":"通信","sql-formatter":"数字化","text-diff":"综合","torrent-search":"通信","unit-converter":"综合","url-shortener":"通信","youtube-transcript":"通信","zip-extractor":"综合"};function Ny(e){return Cy[e]?Cy[e]:"综合"}function M2(e){return e==="core"||e==="standard"||e==="specialized"||e==="experimental"?e:"standard"}function O2(e,a,l){const r=Ye(a).trim();return r&&zs(r)?r:e.includes("monitor")?`${l}能力,用于按排班自动巡检并提示异常。`:e.includes("report")?`${l}能力,用于自动生成和整理业务报表。`:`${l}能力,可由数字员工按需执行或定时处理。`}function q2(e){return e?e.map(a=>{const l=Ye(a.skill_id,Ye(a.id)),r=Bo(a.governance);return{id:l,name:wy(l,Ye(a.name,l)),version:a.version?Ye(a.version):null,enabled:!!a.enabled,description:O2(l,a.description,wy(l,Ye(a.name,l))),category:a.category?Ye(a.category,Ny(l)):Ny(l),capabilityLevel:M2(a.capability_level??a.capabilityLevel),source:"skill-api",serverId:a.server_id?Ye(a.server_id):null,transport:a.transport?Ye(a.transport):null,running:typeof a.running=="boolean"?a.running:null,toolCount:Ey(a.tool_count),tools:Ff(a.tools),allowTools:Ff(a.allow_tools??(r==null?void 0:r.server_allow_tools)??(r==null?void 0:r.global_allow_tools)),denyTools:Ff(a.deny_tools??(r==null?void 0:r.server_deny_tools)??(r==null?void 0:r.global_deny_tools)),governancePolicy:L2(a.governance_policy??(r==null?void 0:r.effective_policy)),policySource:B2(a.policy_source),remotePolicy:Bo(a.remote_policy),localPolicy:Bo(a.local_policy),recentCalls:xm(a.recent_calls).map(o=>{const d=Bo(o)??{};return{eventId:Ye(d.event_id,Ye(d.id)),message:Ye(d.message),status:d.status?Ye(d.status):null,occurredAt:Ye(d.occurred_at,Ye(d.occurredAt)),toolName:d.tool_name?Ye(d.tool_name):null,projectId:d.project_id?Ye(d.project_id):null}}).filter(o=>o.eventId||o.message),callCount:Ey(a.call_count)??0,lastCalledAt:a.last_called_at?Ye(a.last_called_at):null}}):[]}function Ff(e){return Array.isArray(e)?e.filter(a=>typeof a=="string"&&a.trim().length>0).map(a=>a.trim()):[]}function Ey(e){if(typeof e=="number"&&Number.isFinite(e))return e;if(typeof e=="string"&&e.trim()){const a=Number(e);return Number.isFinite(a)?a:null}return null}function L2(e){return e==="allow"||e==="deny"||e==="open"||e==="disabled"?e:null}function B2(e){return e==="remote"||e==="local"||e==="open"?e:null}function Ad(e){return e.replace(/[^a-zA-Z0-9_-]/g,"_")}function U2(e){switch(e){case"succeeded":case"completed":return"success";case"failed":case"error":return"danger";case"running":case"active":return"info";default:return"warning"}}function I2(e){return["draft","reviewing","approved"].includes(e.toLowerCase())}function H2(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"月度任务":a.includes("week")||a.includes("weekly")||a.includes("周")?"周任务":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"临时任务":"日常任务"}function xi(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function ix(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function G2(e){const a=e.steps.length;if(a===0)return hn(e.status);const l=e.steps.filter(p=>xi(p.status)).length,r=e.steps.filter(p=>ix(p.status)).length,o=e.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,d=[`已完成 ${l}/${a}`];return r>0&&d.push(`失败 ${r}`),o>0&&r===0&&d.push(`处理中 ${o}`),d.join(",")}function Y2(e){const a=e.steps.find(o=>ix(o.status));if(a)return`执行失败:${a.title}`;const l=e.steps.find(o=>["running","active"].includes(o.status.toLowerCase()));if(l)return`正在处理:${l.title}`;const r=e.steps.find(o=>!xi(o.status));return r?`准备处理:${r.title}`:xi(e.status)?"本轮任务已完成,等待你查看结果":e.status.toLowerCase()==="failed"?"执行遇到异常,等待你检查后重新执行":"等待你委托数字员工开始处理"}function K2(e,a){const l=e.status.toLowerCase();return l==="failed"||l==="error"?"查看详情后重新执行本任务":["running","active"].includes(l)?"等待完成或查看过程":xi(l)?"查看产物,必要时重新执行":a?"确认目标后点击委托执行":"查看详情确认当前状态"}function Q2(e){const a=`${e.title} ${e.objective}`.toLowerCase();return a.includes("excel")||a.includes("xlsx")||a.includes("导出")||a.includes("报表")?"导出报表":a.includes("brief")||a.includes("简报")||a.includes("日程")?"工作简报":a.includes("snapshot")||a.includes("快照")||a.includes("热榜")?"结果快照":xi(e.status)?"查看完成结果":"完成后生成"}function sx(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":[a.getFullYear(),String(a.getMonth()+1).padStart(2,"0"),String(a.getDate()).padStart(2,"0")].join("-")}function rx(){return sx(new Date().toISOString())}function V2(e){if(!e)return"时间未记录";const a=new Date(e);return Number.isNaN(a.getTime())?"时间未记录":a.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit",hour12:!1})}function X2(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":a.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hour12:!1})}function Z2(e){const a=`${e.title} ${e.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!a)return null;const l=Number(a[1]),r=Number(a[2]);return!Number.isInteger(l)||!Number.isInteger(r)||l>23||r>59?null:`${String(l).padStart(2,"0")}:${String(r).padStart(2,"0")}`}function J2(e){return e.steps.flatMap(a=>a.tasks.flatMap(l=>[l.startedAt,l.finishedAt])).filter(a=>!!a)}function F2(e,a){return J2(e).filter(r=>sx(r)===a).sort((r,o)=>o.localeCompare(r))[0]??null}function P2(e,a){const l=F2(e,a);if(l)return`实际执行 ${V2(l)}`;const r=a===rx()?"今日未执行":"当日未执行";return`计划执行 ${Z2(e)||"待确认"};${r}`}function W2({mission:e,onSelect:a,onRun:l,onRestart:r,dateFilter:o,selected:d,focusLabel:p,running:h}){const _=I2(e.status),g=xi(e.status)||e.steps.some(C=>xi(C.status)),x=o||rx(),S=X2(e.updatedAt||e.createdAt);return s.jsxs("div",{id:`mission-card-${Ad(e.id)}`,className:`de-mission-card ${d?"de-mission-card--selected":""}`,onClick:()=>a(e),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),a(e))},role:"button",tabIndex:0,children:[s.jsxs("div",{className:"de-mission-card-header",children:[s.jsx("span",{className:"de-mission-card-title",children:e.title}),s.jsxs("div",{className:"de-mission-card-badges",children:[p&&s.jsx("span",{className:"de-mission-card-focus-chip",children:p}),s.jsx(vm,{variant:U2(e.status),label:hn(e.status)})]})]}),e.objective&&s.jsxs("p",{className:"de-mission-card-desc",children:["业务目标:",e.objective]}),s.jsxs("div",{className:"de-mission-card-meta",children:[s.jsxs("span",{children:["周期:",H2(e)]}),s.jsxs("span",{children:["当前进度:",G2(e)]}),S&&s.jsxs("span",{children:["同步于 ",S]})]}),s.jsx("div",{className:"de-mission-card-meta",children:s.jsx("span",{children:Y2(e)})}),s.jsxs("div",{className:"de-mission-card-meta",children:[s.jsxs("span",{children:["下一步:",K2(e,_)]}),s.jsxs("span",{children:["产物入口:",Q2(e)]})]}),s.jsxs("div",{className:"de-mission-card-actions",children:[s.jsxs("span",{className:"de-mission-card-time",children:[P2(e,x),g?";重新执行可能覆盖本任务结果":""]}),s.jsx("button",{type:"button",className:"de-btn-restart",disabled:h,onClick:C=>{C.stopPropagation(),h||r==null||r(e)},title:g?"重新执行本任务,可能覆盖已有结果":"重新执行本任务",children:"重新执行本任务"}),s.jsx("button",{type:"button",className:"de-btn-run",disabled:!_||h,onClick:C=>{C.stopPropagation(),_&&!h&&(l==null||l(e))},children:h?"执行中...":_?"委托执行":hn(e.status)})]})]})}function Ay(e){switch(e){case"succeeded":case"completed":case"Succeeded":return"success";case"failed":return"danger";case"Failed":return"danger";case"running":case"active":case"Running":return"info";default:return"warning"}}function zl(e){return e?new Date(e).toLocaleString("zh-CN",{hour12:!1}):"未记录"}function Ty(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"月度任务":a.includes("week")||a.includes("weekly")||a.includes("周")?"周任务":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"临时任务":"日常任务"}function eE(e){return["succeeded","success","finished","complete","completed"].includes(e.toLowerCase())}function Zr(e){return["failed","error","cancelled","canceled","aborted","rejected","deadletter"].includes(e.toLowerCase())}function Ry(e){const a=e.steps.length;if(a===0)return hn(e.status);const l=e.steps.filter(p=>eE(p.status)).length,r=e.steps.filter(p=>Zr(p.status)).length,o=e.steps.filter(p=>["running","active","queued","leased"].includes(p.status.toLowerCase())).length,d=[`已完成 ${l}/${a}`];return r>0&&d.push(`失败 ${r}`),o>0&&r===0&&d.push(`处理中 ${o}`),d.join(",")}function $y(e){return e.replace(/^启动计划:/,"接收委托:").replace(/^准备步骤:/,"准备工作:").replace(/^创建任务:/,"安排工作:").replace(/^任务失败:/,"工作失败:").replace(/^开始处理:/,"开始处理:").replace(/^完成任务:/,"完成工作:").replace(/^调用技能:/,"数字员工处理:").replace(/^执行开始:/,"开始执行:").replace(/^执行完成:/,"执行完成:").replace(/^执行失败:/,"执行失败:").replace(/,将使用[^,。]+/,"").replace(/,分配给[^,。]+/,"")}function Jo(e){return/失败|failed|error|timeout|unavailable/i.test(e)}function Dy(e,a=""){return Jo(a)?"失败":e==="artifact"?"产物":e==="task_summary"?"结果":e==="task_running"||e==="run"?"处理中":e==="task_done"||e==="run_done"?"完成":"过程"}function tE(e){return e==="user"?"用户":e==="assistant"?"数字员工":e==="system"?"系统":"消息"}function Pf(e){return Qr(e||"",e||"自动化技能")}function nE(e,a,l){const r=a==="true"?"成功":"失败";return e.includes("zhihu-hotlist")&&e.includes("extract_hotlist")?`调用技能:知乎热榜采集,结果:${r},耗时 ${l}ms`:e.includes("office-export-xlsx")&&e.includes("export_xlsx")?`调用技能:Excel 导出,结果:${r},耗时 ${l}ms`:`调用技能:${e},结果:${r},耗时 ${l}ms`}function Wf(e){return typeof e=="string"?e:""}function fd(e){return e.occurred_at||""}function zy(e){return e.filter(a=>!!a).sort((a,l)=>a.localeCompare(l))[0]||null}function aE(e){var l;const a=new Map;for(const r of e){const o=((l=r.message.split(",结果:")[0])==null?void 0:l.split(",状态:")[0])||r.message,d=a.get(o);(!d||fd(r).localeCompare(fd(d))>0)&&a.set(o,r)}return Array.from(a.values())}function lE(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function My(e){return e.replace(/\\\\/g,"\\")}function iE(e,a,l,r,o){const d=[],p=(_,g,x,S)=>{x.trim()&&d.push({event_id:S,kind:_,occurred_at:g??null,message:x})},h=(_,g,x,S)=>{let C=!1;try{const N=lE(JSON.parse(_));if(N){const k=typeof N.label=="string"?N.label.trim():"",A=N.value;k&&A!==void 0&&A!==null&&p("task_summary",g,`${k}:${String(A)}`,`metric-${x}-${S}`);const O=typeof N.output_path=="string"?N.output_path.trim():"";O&&(C=!0,p("artifact",g,`产物生成:${My(O)}`,`artifact-${x}-${S}`))}}catch{}const z=_.match(/"row_count"\s*:\s*(\d+)/);z!=null&&z[1]&&p("task_summary",g,`数据处理完成:共 ${z[1]} 条记录`,`rows-${x}-${S}`);const w=_.match(/"output_path"\s*:\s*"([^"]+\.(?:xlsx|xls|csv|json|html|pdf|png|jpg|jpeg|txt))"/i),D=w==null?void 0:w[1];D&&!C&&p("artifact",g,`产物生成:${My(D)}`,`artifact-regex-${x}-${S}`)};if(p("plan",e.createdAt||e.updatedAt,`启动计划:${e.title},目标:${e.objective}`,`plan-${e.id}`),a.length===0)for(const _ of e.steps){const g=_.preferredSkills.map(Pf).join("、")||"自动化技能";p("task",e.updatedAt||e.createdAt,`准备步骤:${_.title},将使用 ${g}`,`step-${_.id}`)}for(const _ of a){const g=Pf(_.assigned_skill_id),x=l.filter(z=>z.task_id===_.task_id),S=zy(x.map(z=>z.created_at)),C=zy([_.created_at,_.started_at,S]);if(p("task",C,`创建任务:${_.title||"子任务"},分配给 ${g}`,`task-create-${_.task_id}`),_.started_at&&p("task_running",_.started_at,`开始处理:${_.title||"子任务"}`,`task-start-${_.task_id}`),_.finished_at){const z=Zr(_.status)?"任务失败":"完成任务",w=Zr(_.status)&&_.error_message?`,原因:${_.error_message}`:"";p("task_done",_.finished_at,`${z}:${_.title||"子任务"},状态:${hn(_.status)}${w}`,`task-finish-${_.task_id}`)}}for(const _ of l){const g=a.find(z=>z.task_id===_.task_id),x=(g==null?void 0:g.title)||"任务执行",S=Pf(_.skill_id||(g==null?void 0:g.assigned_skill_id));if(r.some(z=>(z.content||"").includes(`[Task ${_.task_id}] tool_call`))||p("skill_tool",_.created_at,`调用技能:${S},处理:${x}`,`run-skill-${_.run_id}`),p("run",_.created_at,`执行开始:${x},第 ${_.attempt_no||1} 次`,`run-start-${_.run_id}`),_.completed_at){const z=Zr(_.lifecycle)?"执行失败":"执行完成";p("run_done",_.completed_at,`${z}:${x},结果:${hn(_.lifecycle)}`,`run-done-${_.run_id}`)}for(const[z,w]of(_.events||[]).entries())h(Wf(w.message),w.occurred_at||_.completed_at||_.created_at,`run-${_.run_id}-${w.event_id||z}`,_.skill_id||(g==null?void 0:g.assigned_skill_id)||"run");for(const[z,w]of(_.artifacts||[]).entries()){const D=Wf(w.uri),N=Wf(w.name)||D;(D||N)&&p("artifact",_.completed_at||_.created_at,`产物生成:${N}${D&&D!==N?`(${D})`:""}`,`run-artifact-${_.run_id}-${z}`)}}for(const _ of r){const g=_.content||"",x=g.match(/\[Task ([^\]]+)\] tool_call name=([^\s]+) success=(true|false) elapsed_ms=(\d+) args=(.*?) output=(.*)$/s);if(x){const C=x[1]||"",z=x[2]||"",w=x[3]||"false",D=x[4]||"0",N=x[6]||"";p("skill_tool",_.created_at,nE(z,w,D),`tool-${C}-${_.created_at}-${z}`),h(N,_.created_at,`message-${_.created_at}`,z);continue}const S=g.match(/共采集到\s*\**\s*(\d+)\s*条/);if(S!=null&&S[1]){p("task_summary",_.created_at,`采集完成:获得 ${S[1]} 条知乎热榜数据`,`summary-hotlist-${_.created_at}`);continue}g.includes("[Task ")&&g.includes("Excel")&&p("task_summary",_.created_at,"导出完成:Excel 文件已生成",`summary-excel-${_.created_at}`)}if(d.length<=1)for(const _ of o||[])p(_.kind,_.occurred_at,ax(_.message,_.message),_.event_id);return d.sort((_,g)=>(_.occurred_at||"").localeCompare(g.occurred_at||"")).slice(-40)}function sE({mission:e,onClose:a}){const[l,r]=v.useState([]),[o,d]=v.useState([]),[p,h]=v.useState(null),[_,g]=v.useState(!0),[x,S]=v.useState([]),[C,z]=v.useState(!1),[w,D]=v.useState(!1),[N,k]=v.useState(!1),[A,O]=v.useState(null),te=e.sourceIds.planId||e.id;v.useEffect(()=>{let R=!1;const M=()=>{g(!0),Promise.allSettled([mN(te),pN(te),oy(te)]).then(([B,U,le])=>{var de;R||(B.status==="fulfilled"?(r(B.value.tasks??[]),d(B.value.runs??[])):(r([]),d([])),U.status==="fulfilled"&&((de=U.value)!=null&&de.events)&&U.value.events.length>0?h(U.value):h(null),le.status==="fulfilled"&&le.value.messages.length>0?S(le.value.messages):S([]))}).finally(()=>{R||g(!1)})};M();const ne=window.setInterval(M,3e3);return()=>{R=!0,window.clearInterval(ne)}},[te]),v.useEffect(()=>{S([]),z(!1),D(!1),O(null)},[te]);const I=async()=>{if(!N){z(!0),k(!0),O(null);try{const R=await oy(te);R.messages&&R.messages.length>0?S(R.messages):S([])}catch(R){S([]),O(R instanceof Error?R.message:"读取会话失败")}finally{k(!1)}}},ie=v.useMemo(()=>{const R=new Map;for(const M of o){const ne=R.get(M.task_id)||[];ne.push(M),R.set(M.task_id,ne)}for(const M of R.values())M.sort((ne,B)=>(B.created_at||"").localeCompare(ne.created_at||""));return R},[o]),Z=v.useMemo(()=>iE(e,l,o,x,p==null?void 0:p.events),[p==null?void 0:p.events,e,o,x,l]),K=v.useMemo(()=>Z.filter(R=>R.kind!=="skill_tool").slice(-12),[Z]),pe=v.useMemo(()=>{const R=Z.filter(U=>["artifact","task_summary"].includes(U.kind)),M=Z.filter(U=>U.kind==="task_done"),ne=aE(Z.filter(U=>U.kind==="run_done")),B=M.length>0?M:ne;return[...R,...B].sort((U,le)=>fd(U).localeCompare(fd(le))).slice(-6)},[Z]),P=v.useMemo(()=>Z.reduce((R,M)=>M.occurred_at&&(!R||M.occurred_at.localeCompare(R)>0)?M.occurred_at:R,null),[Z]),q=e.updatedAt||P,ce=()=>{const R=!w;D(R),R&&!C&&I()};return s.jsxs("div",{className:"de-drawer",role:"dialog","aria-label":e.title,children:[s.jsxs("div",{className:"de-drawer-head",children:[s.jsxs("div",{className:"de-drawer-title-group",children:[s.jsx("span",{className:"de-drawer-eyebrow",children:"委托详情"}),s.jsx("h3",{children:e.title})]}),s.jsx("button",{className:"de-btn-secondary",onClick:a,"aria-label":"关闭",children:"✕"})]}),s.jsxs("div",{className:"de-drawer-status-line",children:[s.jsx(vm,{variant:Ay(e.status),label:hn(e.status)}),s.jsx("span",{className:"de-drawer-meta",children:Ty(e)}),s.jsx("span",{className:"de-drawer-meta",children:Ry(e)})]}),s.jsxs("div",{className:"de-drawer-timeline",children:[s.jsxs("section",{className:"de-detail-section",children:[s.jsx("div",{className:"de-detail-section-head",children:s.jsx("h4",{children:"委托概览"})}),s.jsxs("div",{className:"de-detail-kv",children:[s.jsx("span",{children:"业务目标"}),s.jsx("strong",{children:e.objective||"未填写"}),s.jsx("span",{children:"周期"}),s.jsx("strong",{children:Ty(e)}),s.jsx("span",{children:"当前进度"}),s.jsx("strong",{children:Ry(e)}),s.jsx("span",{children:"启动时间"}),s.jsx("strong",{children:zl(e.createdAt)}),s.jsx("span",{children:"状态"}),s.jsx("strong",{children:hn(e.status)}),s.jsx("span",{children:"更新时间"}),s.jsx("strong",{children:zl(q)})]})]}),s.jsxs("section",{className:"de-detail-section de-execution-chain",children:[s.jsxs("div",{className:"de-detail-section-head",children:[s.jsx("h4",{children:"业务过程"}),s.jsxs("span",{className:"de-chain-plan-id",children:["最近更新:",zl(q||e.createdAt)]})]}),_&&K.length===0?s.jsx("p",{className:"de-empty-text",children:"正在读取业务过程..."}):K.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无业务过程。重新执行本任务后会显示处理进展。"}):s.jsx("div",{className:"de-chain-list",children:K.map(R=>s.jsxs("div",{className:`de-chain-row de-chain-row--${R.kind} ${Jo(R.message)?"de-chain-row--danger":""}`,children:[s.jsx("strong",{children:Dy(R.kind,R.message)}),s.jsx("span",{children:$y(R.message)}),s.jsx("time",{children:zl(R.occurred_at)})]},`chain-${R.event_id}`))})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"结果与产物"}),pe.length>0?s.jsx("div",{className:"de-event-list",children:[...pe].reverse().map(R=>s.jsxs("div",{className:`de-event-row ${Jo(R.message)?"de-event-row--danger":""}`,children:[s.jsx("strong",{children:Dy(R.kind,R.message)}),s.jsx("span",{children:$y(R.message)}),s.jsx("time",{children:zl(R.occurred_at)})]},`result-${R.event_id}`))}):s.jsx("p",{className:"de-empty-text",children:"任务完成后,这里会显示结果摘要和产物入口。"})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"步骤进展"}),_?s.jsx("p",{className:"de-empty-text",children:"正在读取执行情况..."}):null,e.steps.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无步骤进展"}):e.steps.map((R,M)=>s.jsxs("div",{className:"de-step-node",children:[s.jsx("div",{className:`de-step-dot de-step-dot--${R.status}`}),M0?s.jsx("div",{className:"de-event-list",children:Z.slice(-20).reverse().map(R=>s.jsxs("div",{className:`de-event-row ${Jo(R.message)?"de-event-row--danger":""}`,children:[s.jsx("strong",{children:$2(R.kind)}),s.jsx("span",{children:R.message}),s.jsx("time",{children:zl(R.occurred_at)})]},R.event_id))}):s.jsx("p",{className:"de-empty-text",children:"暂无事件日志"})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsxs("div",{className:"de-detail-section-head",children:[s.jsx("h4",{children:"会话记录"}),s.jsx("button",{className:"de-btn-secondary de-btn-sm",onClick:I,disabled:N,children:"刷新"})]}),A?s.jsxs("p",{className:"de-empty-text",children:["会话读取失败:",A]}):N?s.jsx("p",{className:"de-empty-text",children:"正在读取会话..."}):x.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无会话消息。"}):s.jsx("div",{className:"de-session-message-list",children:x.map((R,M)=>s.jsxs("div",{className:`de-session-message de-session-message--${R.role==="user"?"user":"agent"}`,children:[s.jsx("div",{className:"de-session-message-role",children:tE(R.role)}),s.jsx("p",{children:ax(R.content,R.content)})]},`${R.role}-${M}`))})]}),s.jsxs("section",{className:"de-detail-section",children:[s.jsx("h4",{children:"任务与执行记录"}),l.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无原始任务记录"}):l.map(R=>{const M=ie.get(R.task_id)||[],ne=M[0];return s.jsxs("div",{className:"de-task-run-card",children:[s.jsxs("div",{className:"de-task-run-head",children:[s.jsx("span",{children:R.title||"子任务"}),s.jsx(vm,{variant:Ay(R.status),label:hn(R.status)})]}),s.jsxs("div",{className:"de-task-run-meta",children:[s.jsxs("span",{children:["skill_id:",R.assigned_skill_id||"未分配"]}),s.jsxs("span",{children:["开始:",zl(R.started_at)]}),s.jsxs("span",{children:["结束:",zl(R.finished_at)]})]}),s.jsxs("div",{className:"de-task-run-meta",children:[s.jsxs("span",{children:["task_id:",R.task_id]}),s.jsxs("span",{children:["执行记录:",M.length," 次"]}),ne?s.jsxs("span",{children:["最近结果:",hn(ne.lifecycle)]}):null]}),Zr(R.status)&&R.error_message?s.jsxs("div",{className:"de-task-run-error",children:[s.jsx("strong",{children:"失败原因:"}),R.error_message]}):null]},R.task_id)})]})]}):s.jsx("p",{className:"de-empty-text",children:"默认隐藏排障信息;需要排障时可展开。"})]})]})]})}const Oy={zh:{"nav.dashboard":"仪表盘","nav.plans":"计划","nav.execution":"执行","nav.governance":"治理","nav.scheduler":"调度器","nav.skills":"技能","nav.agent":"智能体","nav.tools":"工具","nav.cron":"Cron 任务","nav.integrations":"集成","nav.memory":"记忆","nav.config":"配置","nav.cost":"成本追踪","nav.logs":"日志","nav.devtools":"工具","nav.swimlane":"泳道","nav.doctor":"诊断","nav.canvas":"画布","planb.nav.chat":"对话","planb.nav.browser":"AI浏览器","planb.nav.monitor":"运行监测","planb.nav.dashboard":"仪表盘","planb.nav.settings":"设置","planb.nav.more":"更多工具","planb.layout.switch_to_wide":"切换到宽屏模式","planb.layout.switch_to_compact":"切换到紧凑模式","planb.layout.pop_out":"弹出独立窗口","planb.browser.title":"AI浏览器","planb.browser.subtitle":"启动 SuperRPA 浏览器自动化","planb.browser.launch":"启动浏览器","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"活跃会话","planb.browser.no_sessions":"没有活跃的浏览器会话,在上方输入 URL 启动。","planb.browser.status_launching":"启动中","planb.browser.status_running":"运行中","planb.browser.status_idle":"空闲","planb.browser.status_error":"错误","planb.browser.status_stopped":"已停止","planb.browser.launch_error":"启动浏览器失败","planb.browser.close_error":"关闭会话失败","planb.browser.backend_not_configured":"SuperRPA 未配置,请设置 SGCLAW_SUPERRPA_PATH 环境变量。","planb.chat.welcome":"今天我能帮你什么?","planb.chat.placeholder":"问点什么...","planb.chat.sessions":"对话历史","planb.chat.new_chat":"新对话","planb.chat.no_sessions":"暂无对话历史","planb.chat.untitled":"未命名对话","planb.chat.thought":"思考","planb.chat.chip_browse":"浏览网页","planb.chat.chip_code":"写代码","planb.chat.chip_analyze":"分析数据","planb.chat.chip_plan":"帮我规划","planb.chat.regenerate":"重新生成","planb.settings.quick":"快速设置","planb.settings.advanced":"高级配置","planb.settings.quick_hint":"快速设置功能即将推出。现在请使用高级配置编辑器修改 TOML 配置。","planb.settings.open_advanced":"打开高级配置","dashboard.title":"仪表盘","dashboard.provider":"提供商","dashboard.model":"模型","dashboard.uptime":"运行时间","dashboard.temperature":"温度","dashboard.gateway_port":"网关端口","dashboard.memory_backend":"记忆后端","dashboard.paired":"已配对","dashboard.channels":"频道","dashboard.health":"健康状态","dashboard.status":"状态","dashboard.overview":"概览","dashboard.system_info":"系统信息","dashboard.quick_actions":"快速操作","agent.title":"智能体对话","agent.send":"发送","agent.placeholder":"输入消息...","agent.start_conversation":"发送消息开始对话","agent.type_message":"输入消息...","agent.connecting":"连接中...","agent.connected":"已连接","agent.disconnected":"已断开","agent.reconnecting":"重新连接中...","agent.thinking":"思考中...","agent.tool_call":"工具调用","agent.tool_result":"工具结果","agent.connection_error":"连接错误,正在尝试重连...","agent.tool_call_prefix":"[工具调用]","agent.tool_result_prefix":"[工具结果]","agent.error_prefix":"[错误]","agent.unknown_error":"未知错误","agent.send_error":"发送消息失败,请重试。","agent.copy_message":"复制消息","agent.connected_status":"已连接","agent.disconnected_status":"已断开","tools.title":"可用工具","tools.name":"名称","tools.description":"描述","tools.parameters":"参数","tools.search":"搜索工具...","tools.empty":"暂无可用工具。","tools.count":"工具总数","tools.agent_tools":"智能体工具箱","tools.cli_tools":"CLI 工具箱","tools.parameter_schema":"参数结构","tools.path":"路径","tools.version":"版本","tools.category":"类别","tools.load_error":"加载工具失败","cron.title":"定时任务","cron.scheduled_tasks":"定时任务","cron.add":"添加任务","cron.add_job":"添加任务","cron.add_modal_title":"添加 Cron 任务","cron.delete":"删除","cron.enable":"启用","cron.disable":"禁用","cron.name":"名称","cron.name_optional":"名称(可选)","cron.command":"命令","cron.command_required":"命令","cron.schedule":"计划","cron.schedule_required":"计划","cron.next_run":"下次执行","cron.last_run":"上次执行","cron.last_status":"上次状态","cron.enabled":"已启用","cron.enabled_status":"启用","cron.disabled_status":"禁用","cron.empty":"暂无定时任务。","cron.confirm_delete":"确定要删除此任务吗?","cron.load_error":"加载定时任务失败","cron.validation_error":"计划和命令是必需的。","cron.add_error":"添加任务失败","cron.delete_error":"删除任务失败","cron.cancel":"取消","cron.adding":"添加中...","cron.id":"ID","cron.actions":"操作","cron.loading_run_history":"加载运行历史...","cron.load_run_history_error":"加载运行历史失败","cron.no_runs":"暂无运行记录。","cron.recent_runs":"最近运行","cron.yes":"是","cron.no":"否","cron.edit":"编辑","cron.edit_modal_title":"编辑 Cron 任务","cron.edit_error":"更新任务失败","cron.saving":"保存中...","cron.save":"保存","integrations.title":"集成","integrations.available":"可用","integrations.active":"活跃","integrations.coming_soon":"即将推出","integrations.category":"类别","integrations.status":"状态","integrations.search":"搜索集成...","integrations.empty":"未找到集成。","integrations.activate":"激活","integrations.deactivate":"停用","integrations.load_error":"加载集成失败","integrations.status_active":"活跃","integrations.status_available":"可用","integrations.status_coming_soon":"即将推出","memory.title":"记忆存储","memory.memory_title":"记忆","memory.search":"搜索记忆...","memory.search_placeholder":"搜索记忆条目...","memory.add":"存储记忆","memory.add_memory":"添加记忆","memory.add_modal_title":"添加记忆","memory.delete":"删除","memory.key":"键","memory.key_required":"键","memory.content":"内容","memory.content_required":"内容","memory.category":"类别","memory.category_optional":"类别(可选)","memory.timestamp":"时间戳","memory.session":"会话","memory.score":"分数","memory.empty":"未找到记忆条目。","memory.confirm_delete":"确定要删除此记忆条目吗?","memory.all_categories":"所有类别","memory.search_button":"搜索","memory.load_error":"加载记忆失败","memory.saving":"保存中...","memory.validation_error":"键和内容是必需的。","memory.store_error":"保存记忆失败","memory.delete_error":"删除记忆失败","memory.delete_confirm":"删除?","memory.yes":"是","memory.no":"否","memory.cancel":"取消","config.title":"配置","config.save":"保存","config.saving":"保存中...","config.reset":"重置","config.saved":"配置保存成功。","config.error":"配置保存失败。","config.loading":"加载配置中...","config.editor_placeholder":"TOML 配置...","config.configuration_title":"配置","config.sensitive_title":"敏感字段已隐藏","config.sensitive_hint":"API 密钥、令牌和密码已隐藏以保护安全。要更新已隐藏的字段,请将整个隐藏值替换为您的新值。","config.save_success":"配置保存成功。","config.save_error":"保存配置失败","config.toml_label":"TOML 配置","config.lines":"行","cost.title":"成本追踪","cost.session":"会话成本","cost.daily":"每日成本","cost.monthly":"每月成本","cost.total_tokens":"总 Tokens","cost.request_count":"请求数","cost.by_model":"按模型统计","cost.model":"模型","cost.tokens":"Token","cost.requests":"请求","cost.usd":"成本(美元)","cost.load_error":"加载成本数据失败","cost.session_cost":"会话成本","cost.daily_cost":"每日成本","cost.monthly_cost":"每月成本","cost.total_requests":"总请求数","cost.token_statistics":"Token 统计","cost.avg_tokens_per_request":"平均 Token / 请求","cost.cost_per_1k_tokens":"每 1K Token 成本","cost.model_breakdown":"模型细分","cost.no_model_data":"没有模型数据可用。","cost.cost":"成本","cost.share":"占比","logs.title":"实时日志","logs.live_logs":"实时日志","logs.clear":"清除","logs.pause":"暂停","logs.resume":"继续","logs.filter":"筛选日志...","logs.filter_label":"筛选","logs.empty":"暂无日志条目。","logs.connected":"已连接","logs.disconnected":"已断开","logs.events":"事件","logs.jump_to_bottom":"跳转到底部","logs.paused_hint":"日志流已暂停。","logs.waiting_hint":"等待事件...","doctor.title":"系统诊断","doctor.diagnostics_title":"系统诊断","doctor.run":"运行诊断","doctor.run_diagnostics":"运行诊断","doctor.running":"正在运行诊断...","doctor.running_btn":"运行中...","doctor.running_desc":"正在运行诊断...","doctor.running_hint":"这可能需要几秒钟。","doctor.ok":"正常","doctor.warn":"警告","doctor.error":"错误","doctor.severity":"严重程度","doctor.category":"类别","doctor.message":"消息","doctor.empty":"尚未运行诊断。","doctor.summary":"诊断摘要","doctor.issues_found":"发现问题","doctor.warnings_summary":"警告","doctor.all_clear":"一切正常","doctor.system_diagnostics":"系统诊断","doctor.empty_hint":'点击"运行诊断"检查您的 ZeroClaw 安装。',"auth.pair":"配对设备","auth.pairing_code":"配对码","auth.pair_button":"配对","auth.logout":"退出","auth.pairing_success":"配对成功!","auth.pairing_failed":"配对失败,请重试。","auth.enter_code":"请输入配对码以连接到智能体。","common.loading":"加载中...","common.error":"发生错误。","common.retry":"重试","common.cancel":"取消","common.confirm":"确认","common.save":"保存","common.delete":"删除","common.edit":"编辑","common.close":"关闭","common.yes":"是","common.no":"否","common.search":"搜索...","common.no_data":"暂无数据。","common.refresh":"刷新","common.back":"返回","common.actions":"操作","common.name":"名称","common.description":"描述","common.status":"状态","common.created":"创建时间","common.updated":"更新时间","health.title":"系统健康","health.component":"组件","health.status":"状态","health.last_ok":"上次正常","health.last_error":"上次错误","health.restart_count":"重启次数","health.pid":"进程 ID","health.uptime":"运行时间","health.updated_at":"最后更新","dashboard.provider_model":"提供商 / 模型","dashboard.since_last_restart":"自上次重启","dashboard.paired_yes":"是","dashboard.paired_no":"否","dashboard.cost_overview":"成本概览","dashboard.active_channels":"活跃频道","dashboard.filter_active":"活跃","dashboard.filter_all":"全部","dashboard.no_active_channels":"没有活跃频道","dashboard.component_health":"组件健康","dashboard.load_error":"加载仪表盘失败","dashboard.session_label":"会话","dashboard.daily_label":"每日","dashboard.monthly_label":"每月","dashboard.total_tokens_label":"总 Tokens","dashboard.requests_label":"请求","dashboard.no_channels":"未配置频道","dashboard.active":"活跃","dashboard.inactive":"非活跃","dashboard.no_components":"没有组件报告","dashboard.restarts":"重启次数","dashboard.tab_overview":"概览","dashboard.tab_sessions":"会话","dashboard.tab_channels":"频道","dashboard.sessions_title":"活跃会话","dashboard.no_sessions":"没有活跃会话","dashboard.session_id":"会话 ID","dashboard.session_channel":"频道","dashboard.session_started":"开始时间","dashboard.session_last_activity":"最近活动","dashboard.session_status":"状态","dashboard.session_messages":"消息数","dashboard.session_details":"会话详情","dashboard.session_history":"查看历史","dashboard.channels_title":"频道状态","dashboard.no_channels_detail":"没有频道详情","dashboard.channel_type":"类型","dashboard.channel_messages":"消息数","dashboard.channel_last_message":"最近消息","dashboard.channel_config":"配置摘要","dashboard.channel_enabled":"已启用","dashboard.channel_disabled":"已禁用","dashboard.loading_sessions":"加载会话中...","dashboard.loading_channels":"加载频道中...","dashboard.load_sessions_error":"加载会话失败","dashboard.load_channels_error":"加载频道失败","dashboard.never":"从未","settings.title":"设置","settings.tab.appearance":"外观","settings.tab.typography":"排版","settings.appearance":"外观设置","settings.typography":"字体设置","settings.fontUi":"界面字体","settings.fontMono":"代码字体","settings.fontSize":"界面字号","settings.fontMonoSize":"代码字号","settings.preview":"预览","settings.previewText":"界面字体预览文本","settings.fontNote":"字体设置需要刷新页面后生效","settings.language":"界面语言","theme.mode":"主题模式","theme.accent":"强调色","theme.system":"跟随系统","theme.dark":"深色","theme.light":"浅色","theme.oled":"纯黑","console.nav.commandDeck":"指挥舱","console.nav.missionCenter":"任务中心","console.nav.skillLibrary":"技能库","console.nav.dailyReport":"日报","console.nav.settings":"设置","console.role.finance":"财务","console.role.engineering":"工程","console.role.executive":"管理","console.role.hr":"人事","console.role.sales":"销售","console.state.loading":"加载中...","console.state.empty":"暂无数据","console.state.backendDown":"后端服务不可达","console.state.partialData":"部分数据源加载失败","console.state.stale":"数据已过期","console.state.unauthorized":"未授权","console.action.refresh":"刷新","console.action.approve":"批准","console.action.reject":"驳回","console.action.retry":"重试","console.action.create":"新建任务","console.skill.capabilityLevel":"能力等级","console.skill.enable":"启用","console.skill.disable":"停用","console.skill.core":"核心","console.skill.standard":"标准","console.skill.specialized":"专业","console.skill.experimental":"实验","console.report.dailyTitle":"日报","console.report.sourceLinks":"数据来源","console.report.noEvents":"当日无执行记录"},en:{"nav.dashboard":"Dashboard","nav.plans":"Plans","nav.execution":"Execution","nav.governance":"Governance","nav.scheduler":"Scheduler","nav.skills":"Skills","nav.agent":"Agent","nav.tools":"Tools","nav.cron":"Cron Jobs","nav.integrations":"Integrations","nav.memory":"Memory","nav.config":"Configuration","nav.cost":"Cost Tracker","nav.logs":"Logs","nav.devtools":"Tools","nav.swimlane":"Swimlane","nav.doctor":"Doctor","nav.canvas":"Canvas","planb.nav.chat":"Chat","planb.nav.browser":"AI Browser","planb.nav.dashboard":"Dashboard","planb.nav.settings":"Settings","planb.nav.more":"More Tools","planb.layout.switch_to_wide":"Switch to Desktop","planb.layout.switch_to_compact":"Switch to Compact","planb.layout.pop_out":"Pop Out Window","planb.browser.title":"AI Browser","planb.browser.subtitle":"Launch SuperRPA browser automation","planb.browser.launch":"Launch Browser","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Active Sessions","planb.browser.no_sessions":"No active browser sessions. Launch one above.","planb.browser.status_launching":"Launching","planb.browser.status_running":"Running","planb.browser.status_idle":"Idle","planb.browser.status_error":"Error","planb.browser.status_stopped":"Stopped","planb.browser.launch_error":"Failed to launch browser","planb.browser.close_error":"Failed to close session","planb.browser.backend_not_configured":"SuperRPA is not configured. Set SGCLAW_SUPERRPA_PATH environment variable.","planb.chat.welcome":"How can I help you today?","planb.chat.placeholder":"Ask anything...","planb.chat.sessions":"Chat History","planb.chat.new_chat":"New Chat","planb.chat.no_sessions":"No chat history","planb.chat.untitled":"Untitled","planb.chat.thought":"Thought","planb.chat.chip_browse":"Browse Web","planb.chat.chip_code":"Write Code","planb.chat.chip_analyze":"Analyze Data","planb.chat.chip_plan":"Plan Project","planb.chat.regenerate":"Regenerate","planb.settings.quick":"Quick Settings","planb.settings.advanced":"Advanced","planb.settings.quick_hint":"Quick settings are coming soon. Use the advanced editor to modify TOML configuration for now.","planb.settings.open_advanced":"Open Advanced Editor","dashboard.title":"Dashboard","dashboard.provider":"Provider","dashboard.model":"Model","dashboard.uptime":"Uptime","dashboard.temperature":"Temperature","dashboard.gateway_port":"Gateway Port","dashboard.memory_backend":"Memory Backend","dashboard.paired":"Paired","dashboard.channels":"Channels","dashboard.health":"Health","dashboard.status":"Status","dashboard.overview":"Overview","dashboard.system_info":"System Information","dashboard.quick_actions":"Quick Actions","agent.title":"Agent Chat","agent.send":"Send","agent.placeholder":"Type a message...","agent.start_conversation":"Send a message to start the conversation","agent.type_message":"Type a message...","agent.connecting":"Connecting...","agent.connected":"Connected","agent.disconnected":"Disconnected","agent.reconnecting":"Reconnecting...","agent.thinking":"Thinking...","agent.tool_call":"Tool Call","agent.tool_result":"Tool Result","agent.connection_error":"Connection error. Attempting to reconnect...","agent.tool_call_prefix":"[Tool Call]","agent.tool_result_prefix":"[Tool Result]","agent.error_prefix":"[Error]","agent.unknown_error":"Unknown error","agent.send_error":"Failed to send message. Please try again.","agent.copy_message":"Copy message","agent.connected_status":"Connected","agent.disconnected_status":"Disconnected","tools.title":"Available Tools","tools.name":"Name","tools.description":"Description","tools.parameters":"Parameters","tools.search":"Search tools...","tools.empty":"No tools available.","tools.count":"Total tools","tools.agent_tools":"Agent Tools","tools.cli_tools":"CLI Tools","tools.parameter_schema":"Parameter Schema","tools.path":"Path","tools.version":"Version","tools.category":"Category","tools.load_error":"Failed to load tools","cron.title":"Scheduled Jobs","cron.scheduled_tasks":"Scheduled Tasks","cron.add":"Add Job","cron.add_job":"Add Job","cron.add_modal_title":"Add Cron Job","cron.delete":"Delete","cron.enable":"Enable","cron.disable":"Disable","cron.name":"Name","cron.name_optional":"Name (optional)","cron.command":"Command","cron.command_required":"Command","cron.schedule":"Schedule","cron.schedule_required":"Schedule","cron.next_run":"Next Run","cron.last_run":"Last Run","cron.last_status":"Last Status","cron.enabled":"Enabled","cron.enabled_status":"Enabled","cron.disabled_status":"Disabled","cron.empty":"No scheduled jobs.","cron.confirm_delete":"Are you sure you want to delete this job?","cron.load_error":"Failed to load cron jobs","cron.validation_error":"Schedule and command are required.","cron.add_error":"Failed to add job","cron.delete_error":"Failed to delete job","cron.cancel":"Cancel","cron.adding":"Adding...","cron.id":"ID","cron.actions":"Actions","cron.loading_run_history":"Loading run history...","cron.load_run_history_error":"Failed to load run history","cron.no_runs":"No runs recorded yet.","cron.recent_runs":"Recent Runs","cron.yes":"Yes","cron.no":"No","cron.edit":"Edit","cron.edit_modal_title":"Edit Cron Job","cron.edit_error":"Failed to update job","cron.saving":"Saving...","cron.save":"Save","integrations.title":"Integrations","integrations.available":"Available","integrations.active":"Active","integrations.coming_soon":"Coming Soon","integrations.category":"Category","integrations.status":"Status","integrations.search":"Search integrations...","integrations.empty":"No integrations found.","integrations.activate":"Activate","integrations.deactivate":"Deactivate","integrations.load_error":"Failed to load integrations","integrations.status_active":"Active","integrations.status_available":"Available","integrations.status_coming_soon":"Coming Soon","memory.title":"Memory Store","memory.memory_title":"Memory","memory.search":"Search memory...","memory.search_placeholder":"Search memory entries...","memory.add":"Store Memory","memory.add_memory":"Add Memory","memory.add_modal_title":"Add Memory","memory.delete":"Delete","memory.key":"Key","memory.key_required":"Key","memory.content":"Content","memory.content_required":"Content","memory.category":"Category","memory.category_optional":"Category (optional)","memory.timestamp":"Timestamp","memory.session":"Session","memory.score":"Score","memory.empty":"No memory entries found.","memory.confirm_delete":"Are you sure you want to delete this memory entry?","memory.all_categories":"All Categories","memory.search_button":"Search","memory.load_error":"Failed to load memory","memory.saving":"Saving...","memory.validation_error":"Key and content are required.","memory.store_error":"Failed to store memory","memory.delete_error":"Failed to delete memory","memory.delete_confirm":"Delete?","memory.yes":"Yes","memory.no":"No","memory.cancel":"Cancel","config.title":"Configuration","config.save":"Save","config.saving":"Saving...","config.reset":"Reset","config.saved":"Configuration saved successfully.","config.error":"Failed to save configuration.","config.loading":"Loading configuration...","config.editor_placeholder":"TOML configuration...","config.configuration_title":"Configuration","config.sensitive_title":"Sensitive fields are masked","config.sensitive_hint":"API keys, tokens, and passwords are hidden for security. To update a masked field, replace the entire masked value with your new value.","config.save_success":"Configuration saved successfully.","config.save_error":"Failed to save configuration","config.toml_label":"TOML Configuration","config.lines":"lines","cost.title":"Cost Tracker","cost.session":"Session Cost","cost.daily":"Daily Cost","cost.monthly":"Monthly Cost","cost.total_tokens":"Total Tokens","cost.request_count":"Requests","cost.by_model":"Cost by Model","cost.model":"Model","cost.tokens":"Tokens","cost.requests":"Requests","cost.usd":"Cost (USD)","cost.load_error":"Failed to load cost data","cost.session_cost":"Session Cost","cost.daily_cost":"Daily Cost","cost.monthly_cost":"Monthly Cost","cost.total_requests":"Total Requests","cost.token_statistics":"Token Statistics","cost.avg_tokens_per_request":"Avg Tokens / Request","cost.cost_per_1k_tokens":"Cost per 1K Tokens","cost.model_breakdown":"Model Breakdown","cost.no_model_data":"No model data available.","cost.cost":"Cost","cost.share":"Share","logs.title":"Live Logs","logs.live_logs":"Live Logs","logs.clear":"Clear","logs.pause":"Pause","logs.resume":"Resume","logs.filter":"Filter logs...","logs.filter_label":"Filter","logs.empty":"No log entries.","logs.connected":"Connected","logs.disconnected":"Disconnected","logs.events":"events","logs.jump_to_bottom":"Jump to bottom","logs.paused_hint":"Log streaming is paused.","logs.waiting_hint":"Waiting for events...","doctor.title":"System Diagnostics","doctor.diagnostics_title":"Diagnostics","doctor.run":"Run Diagnostics","doctor.run_diagnostics":"Run Diagnostics","doctor.running":"Running diagnostics...","doctor.running_btn":"Running...","doctor.running_desc":"Running diagnostics...","doctor.running_hint":"This may take a few seconds.","doctor.ok":"OK","doctor.warn":"Warning","doctor.error":"Error","doctor.severity":"Severity","doctor.category":"Category","doctor.message":"Message","doctor.empty":"No diagnostics have been run yet.","doctor.summary":"Diagnostic Summary","doctor.issues_found":"Issues Found","doctor.warnings_summary":"Warnings","doctor.all_clear":"All Clear","doctor.system_diagnostics":"System Diagnostics","doctor.empty_hint":'Click "Run Diagnostics" to check your ZeroClaw installation.',"auth.pair":"Pair Device","auth.pairing_code":"Pairing Code","auth.pair_button":"Pair","auth.logout":"Logout","auth.pairing_success":"Pairing successful!","auth.pairing_failed":"Pairing failed. Please try again.","auth.enter_code":"Enter your pairing code to connect to the agent.","common.loading":"Loading...","common.error":"An error occurred.","common.retry":"Retry","common.cancel":"Cancel","common.confirm":"Confirm","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.close":"Close","common.yes":"Yes","common.no":"No","common.search":"Search...","common.no_data":"No data available.","common.refresh":"Refresh","common.back":"Back","common.actions":"Actions","common.name":"Name","common.description":"Description","common.status":"Status","common.created":"Created","common.updated":"Updated","health.title":"System Health","health.component":"Component","health.status":"Status","health.last_ok":"Last OK","health.last_error":"Last Error","health.restart_count":"Restarts","health.pid":"Process ID","health.uptime":"Uptime","health.updated_at":"Last Updated","dashboard.provider_model":"Provider / Model","dashboard.since_last_restart":"Since last restart","dashboard.paired_yes":"Yes","dashboard.paired_no":"No","dashboard.cost_overview":"Cost Overview","dashboard.active_channels":"Active Channels","dashboard.filter_active":"Active","dashboard.filter_all":"All","dashboard.no_active_channels":"No active channels","dashboard.component_health":"Component Health","dashboard.load_error":"Failed to load dashboard","dashboard.session_label":"Session","dashboard.daily_label":"Daily","dashboard.monthly_label":"Monthly","dashboard.total_tokens_label":"Total Tokens","dashboard.requests_label":"Requests","dashboard.no_channels":"No channels configured","dashboard.active":"Active","dashboard.inactive":"Inactive","dashboard.no_components":"No components reporting","dashboard.restarts":"Restarts","dashboard.tab_overview":"Overview","dashboard.tab_sessions":"Sessions","dashboard.tab_channels":"Channels","dashboard.sessions_title":"Active Sessions","dashboard.no_sessions":"No active sessions","dashboard.session_id":"Session ID","dashboard.session_channel":"Channel","dashboard.session_started":"Started","dashboard.session_last_activity":"Last Activity","dashboard.session_status":"Status","dashboard.session_messages":"Messages","dashboard.session_details":"Session Details","dashboard.session_history":"View History","dashboard.channels_title":"Channel Status","dashboard.no_channels_detail":"No channel details available","dashboard.channel_type":"Type","dashboard.channel_messages":"Messages","dashboard.channel_last_message":"Last Message","dashboard.channel_config":"Configuration","dashboard.channel_enabled":"Enabled","dashboard.channel_disabled":"Disabled","dashboard.loading_sessions":"Loading sessions...","dashboard.loading_channels":"Loading channels...","dashboard.load_sessions_error":"Failed to load sessions","dashboard.load_channels_error":"Failed to load channels","dashboard.never":"Never","settings.title":"Settings","settings.tab.appearance":"Appearance","settings.tab.typography":"Typography","settings.appearance":"Appearance","settings.typography":"Typography","settings.fontUi":"UI Font","settings.fontMono":"Code Font","settings.fontSize":"UI Font Size","settings.fontMonoSize":"Code Font Size","settings.preview":"Preview","settings.previewText":"The quick brown fox jumps over the lazy dog.","settings.fontNote":"Font changes apply on page reload.","settings.language":"Language","theme.mode":"Theme Mode","theme.accent":"Accent Color","theme.system":"System","theme.dark":"Dark","theme.light":"Light","theme.oled":"OLED Black","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"},tr:{"nav.dashboard":"Kontrol Paneli","nav.plans":"Planlar","nav.execution":"Yürütme","nav.governance":"Yönetişim","nav.scheduler":"Zamanlayıcı","nav.skills":"Beceriler","nav.agent":"Ajan","nav.tools":"Araçlar","nav.cron":"Cron Görevleri","nav.integrations":"Entegrasyonlar","nav.memory":"Hafıza","nav.config":"Yapılandırma","nav.cost":"Maliyet Takibi","nav.logs":"Kayıtlar","nav.devtools":"Araçlar","nav.swimlane":"Yüzme Şeridi","nav.doctor":"Doktor","nav.canvas":"Tuval","planb.nav.chat":"Sohbet","planb.nav.browser":"AI Tarayıcı","planb.nav.dashboard":"Kontrol Paneli","planb.nav.settings":"Ayarlar","planb.nav.more":"Daha Fazla","planb.layout.switch_to_wide":"Masaüstüne Geç","planb.layout.switch_to_compact":"Kompakta Geç","planb.layout.pop_out":"Pencereyi Ayır","planb.browser.title":"AI Tarayıcı","planb.browser.subtitle":"SuperRPA tarayıcı otomasyonunu başlat","planb.browser.launch":"Tarayıcıyı Başlat","planb.browser.url_placeholder":"https://example.com","planb.browser.active_sessions":"Aktif Oturumlar","planb.browser.no_sessions":"Aktif tarayıcı oturumu yok.","planb.browser.status_launching":"Başlatılıyor","planb.browser.status_running":"Çalışıyor","planb.browser.status_idle":"Boşta","planb.browser.status_error":"Hata","planb.browser.status_stopped":"Durduruldu","planb.browser.launch_error":"Tarayıcı başlatılamadı","planb.browser.close_error":"Oturum kapatılamadı","planb.browser.backend_not_configured":"SuperRPA yapılandırılmamış.","planb.chat.welcome":"Bugün size nasıl yardımcı olabilirim?","planb.chat.placeholder":"Bir şey sor...","planb.chat.sessions":"Sohbet Geçmişi","planb.chat.new_chat":"Yeni Sohbet","planb.chat.no_sessions":"Sohbet geçmişi yok","planb.chat.untitled":"Başlıksız","planb.chat.thought":"Düşünce","planb.chat.chip_browse":"Webde Gezin","planb.chat.chip_code":"Kod Yaz","planb.chat.chip_analyze":"Veri Analizi","planb.chat.chip_plan":"Proje Planla","planb.chat.regenerate":"Yeniden Oluştur","planb.settings.quick":"Hızlı Ayarlar","planb.settings.advanced":"Gelişmiş","planb.settings.quick_hint":"Hızlı ayarlar yakında gelecek. Şimdilik gelişmiş düzenleyiciyi kullanın.","planb.settings.open_advanced":"Gelişmiş Düzenleyiciyi Aç","dashboard.title":"Kontrol Paneli","dashboard.provider":"Sağlayıcı","dashboard.model":"Model","dashboard.uptime":"Çalışma Süresi","dashboard.temperature":"Sıcaklık","dashboard.gateway_port":"Ağ Geçidi Portu","dashboard.locale":"Dil","dashboard.memory_backend":"Hafıza Motoru","dashboard.paired":"Eşleştirilmiş","dashboard.channels":"Kanallar","dashboard.health":"Sağlık","dashboard.status":"Durum","dashboard.overview":"Genel Bakış","dashboard.system_info":"Sistem Bilgisi","dashboard.quick_actions":"Hızlı İşlemler","dashboard.provider_model":"Sağlayıcı / Model","dashboard.since_last_restart":"Son Yeniden Başlatmadan Beri","dashboard.paired_yes":"Evet","dashboard.paired_no":"Hayır","dashboard.cost_overview":"Maliyet Genel Bakışı","dashboard.active_channels":"Aktif Kanallar","dashboard.filter_active":"Aktif","dashboard.filter_all":"Tümü","dashboard.no_active_channels":"Aktif kanal yok","dashboard.component_health":"Bileşen Sağlığı","dashboard.load_error":"Kontrol paneli yüklenemedi","dashboard.session_label":"Oturum","dashboard.daily_label":"Günlük","dashboard.monthly_label":"Aylık","dashboard.total_tokens_label":"Toplam Token","dashboard.requests_label":"İstekler","dashboard.no_channels":"Kanal yapılandırılmamış","dashboard.active":"Aktif","dashboard.inactive":"Aktif Değil","dashboard.no_components":"Bileşen raporlamıyor","dashboard.restarts":"Yeniden Başlatmalar","dashboard.tab_overview":"Genel Bakış","dashboard.tab_sessions":"Oturumlar","dashboard.tab_channels":"Kanallar","dashboard.sessions_title":"Aktif Oturumlar","dashboard.no_sessions":"Aktif oturum yok","dashboard.session_id":"Oturum Kimliği","dashboard.session_channel":"Kanal","dashboard.session_started":"Başlangıç","dashboard.session_last_activity":"Son Etkinlik","dashboard.session_status":"Durum","dashboard.session_messages":"Mesajlar","dashboard.session_details":"Oturum Ayrıntıları","dashboard.session_history":"Geçmişi Görüntüle","dashboard.channels_title":"Kanal Durumu","dashboard.no_channels_detail":"Kanal ayrıntısı yok","dashboard.channel_type":"Tür","dashboard.channel_messages":"Mesajlar","dashboard.channel_last_message":"Son Mesaj","dashboard.channel_config":"Yapılandırma","dashboard.channel_enabled":"Etkin","dashboard.channel_disabled":"Devre Dışı","dashboard.loading_sessions":"Oturumlar yükleniyor...","dashboard.loading_channels":"Kanallar yükleniyor...","dashboard.load_sessions_error":"Oturumlar yüklenemedi","dashboard.load_channels_error":"Kanallar yüklenemedi","dashboard.never":"Hiç","agent.title":"Ajan Sohbeti","agent.send":"Gönder","agent.placeholder":"Bir mesaj yazın...","agent.start_conversation":"Sohbeti başlatmak için mesaj gönderin","agent.type_message":"Bir mesaj yazın...","agent.connecting":"Bağlanıyor...","agent.connected":"Bağlandı","agent.disconnected":"Bağlantı kesildi","agent.reconnecting":"Yeniden bağlanıyor...","agent.thinking":"Düşünüyor...","agent.tool_call":"Araç Çağrısı","agent.tool_result":"Araç Sonucu","agent.connection_error":"Bağlantı hatası. Yeniden bağlanmaya çalışılıyor...","agent.tool_call_prefix":"[Araç Çağrısı]","agent.tool_result_prefix":"[Araç Sonucu]","agent.error_prefix":"[Hata]","agent.unknown_error":"Bilinmeyen hata","agent.send_error":"Mesaj gönderilemedi. Lütfen tekrar deneyin.","agent.copy_message":"Mesajı kopyala","agent.connected_status":"Bağlandı","agent.disconnected_status":"Bağlantı kesildi","tools.title":"Mevcut Araçlar","tools.name":"Ad","tools.description":"Açıklama","tools.parameters":"Parametreler","tools.search":"Araç ara...","tools.empty":"Araç bulunamadı.","tools.count":"Toplam araç","tools.agent_tools":"Ajan Araçları","tools.cli_tools":"CLI Araçları","tools.parameter_schema":"Parametre Şeması","tools.path":"Yol","tools.version":"Sürüm","tools.category":"Kategori","tools.load_error":"Araçlar yüklenemedi","cron.title":"Zamanlanmış Görevler","cron.scheduled_tasks":"Zamanlanmış Görevler","cron.add":"Görev Ekle","cron.add_job":"Görev Ekle","cron.add_modal_title":"Cron Görevi Ekle","cron.delete":"Sil","cron.enable":"Etkinleştir","cron.disable":"Devre Dışı Bırak","cron.name":"Ad","cron.name_optional":"Ad (isteğe bağlı)","cron.command":"Komut","cron.command_required":"Komut","cron.schedule":"Zamanlama","cron.schedule_required":"Zamanlama","cron.next_run":"Sonraki Çalıştırma","cron.last_run":"Son Çalıştırma","cron.last_status":"Son Durum","cron.enabled":"Etkin","cron.enabled_status":"Etkin","cron.disabled_status":"Devre Dışı","cron.empty":"Zamanlanmış görev bulunamadı.","cron.confirm_delete":"Bu görevi silmek istediğinizden emin misiniz?","cron.load_error":"Cron görevleri yüklenemedi","cron.validation_error":"Zamanlama ve komut gereklidir.","cron.add_error":"Görev eklenemedi","cron.delete_error":"Görev silinemedi","cron.cancel":"İptal","cron.adding":"Ekleniyor...","cron.id":"ID","cron.actions":"İşlemler","cron.loading_run_history":"Çalıştırma geçmişi yükleniyor...","cron.load_run_history_error":"Çalıştırma geçmişi yüklenemedi","cron.no_runs":"Henüz çalıştırma kaydı yok.","cron.recent_runs":"Son Çalıştırmalar","cron.yes":"Evet","cron.no":"Hayır","cron.edit":"Düzenle","cron.edit_modal_title":"Cron Görevini Düzenle","cron.edit_error":"Görev güncellenemedi","cron.saving":"Kaydediliyor...","cron.save":"Kaydet","integrations.title":"Entegrasyonlar","integrations.available":"Mevcut","integrations.active":"Aktif","integrations.coming_soon":"Yakında","integrations.category":"Kategori","integrations.status":"Durum","integrations.search":"Entegrasyon ara...","integrations.empty":"Entegrasyon bulunamadı.","integrations.activate":"Etkinleştir","integrations.deactivate":"Devre Dışı Bırak","integrations.load_error":"Entegrasyonlar yüklenemedi","integrations.all":"Tümü","integrations.status_active":"Aktif","integrations.status_available":"Mevcut","integrations.status_coming_soon":"Yakında","memory.title":"Hafıza Deposu","memory.memory_title":"Hafıza","memory.search":"Hafıza ara...","memory.search_placeholder":"Hafıza girişleri ara...","memory.add":"Hafıza Ekle","memory.add_memory":"Hafıza Ekle","memory.add_modal_title":"Hafıza Ekle","memory.delete":"Sil","memory.key":"Anahtar","memory.key_required":"Anahtar","memory.content":"İçerik","memory.content_required":"İçerik","memory.category":"Kategori","memory.category_optional":"Kategori (isteğe bağlı)","memory.timestamp":"Zaman Damgası","memory.session":"Oturum","memory.score":"Puan","memory.empty":"Hafıza girişi bulunamadı.","memory.confirm_delete":"Bu hafıza girişini silmek istediğinizden emin misiniz?","memory.all_categories":"Tüm Kategoriler","memory.search_button":"Ara","memory.load_error":"Hafıza yüklenemedi","memory.saving":"Kaydediliyor...","memory.validation_error":"Anahtar ve içerik gereklidir.","memory.store_error":"Hafıza kaydedilemedi","memory.delete_error":"Hafıza silinemedi","memory.delete_confirm":"Sil?","memory.yes":"Evet","memory.no":"Hayır","memory.cancel":"İptal","config.title":"Yapılandırma","config.save":"Kaydet","config.saving":"Kaydediliyor...","config.reset":"Sıfırla","config.saved":"Yapılandırma başarıyla kaydedildi.","config.error":"Yapılandırma kaydedilemedi.","config.loading":"Yapılandırma yükleniyor...","config.editor_placeholder":"TOML yapılandırması...","config.configuration_title":"Yapılandırma","config.sensitive_title":"Hassas alanlar gizlendi","config.sensitive_hint":"API anahtarları, belirteçler ve parolalar güvenlik için gizlendi. Maskeli bir alanı güncellemek için, tüm maskeli değeri yeni değerinizle değiştirin.","config.save_success":"Yapılandırma başarıyla kaydedildi.","config.save_error":"Yapılandırma kaydedilemedi","config.toml_label":"TOML Yapılandırması","config.lines":"satır","cost.title":"Maliyet Takibi","cost.session":"Oturum Maliyeti","cost.daily":"Günlük Maliyet","cost.monthly":"Aylık Maliyet","cost.total_tokens":"Toplam Token","cost.request_count":"İstek Sayısı","cost.by_model":"Modele Göre Maliyet","cost.model":"Model","cost.tokens":"Token","cost.requests":"İstekler","cost.usd":"Maliyet (USD)","cost.load_error":"Maliyet verileri yüklenemedi","cost.session_cost":"Oturum Maliyeti","cost.daily_cost":"Günlük Maliyet","cost.monthly_cost":"Aylık Maliyet","cost.total_requests":"Toplam İstek","cost.token_statistics":"Token İstatistikleri","cost.avg_tokens_per_request":"Ortalama Token / İstek","cost.cost_per_1k_tokens":"1K Token Başına Maliyet","cost.model_breakdown":"Model Detayı","cost.no_model_data":"Model verisi mevcut değil.","cost.cost":"Maliyet","cost.share":"Pay","logs.title":"Canlı Kayıtlar","logs.live_logs":"Canlı Kayıtlar","logs.clear":"Temizle","logs.pause":"Duraklat","logs.resume":"Devam Et","logs.filter":"Kayıtları filtrele...","logs.filter_label":"Filtre","logs.empty":"Kayıt girişi bulunamadı.","logs.connected":"Bağlandı","logs.disconnected":"Bağlantı kesildi","logs.events":"olay","logs.jump_to_bottom":"En alta atla","logs.paused_hint":"Kayıt akışı duraklatıldı.","logs.waiting_hint":"Olay bekleniyor...","doctor.title":"Sistem Tanıları","doctor.diagnostics_title":"Tanılar","doctor.run":"Tanı Çalıştır","doctor.run_diagnostics":"Tanı Çalıştır","doctor.running":"Tanı çalıştırılıyor...","doctor.running_btn":"Çalıştırılıyor...","doctor.running_desc":"Tanı çalıştırılıyor...","doctor.running_hint":"Bu birkaç saniye sürebilir.","doctor.ok":"Tamam","doctor.warn":"Uyarı","doctor.error":"Hata","doctor.severity":"Şiddet","doctor.category":"Kategori","doctor.message":"Mesaj","doctor.empty":"Henüz tanı çalıştırılmadı.","doctor.summary":"Tanı Özeti","doctor.issues_found":"Sorunlar Bulundu","doctor.warnings_summary":"Uyarılar","doctor.all_clear":"Her Şey Yolunda","doctor.system_diagnostics":"Sistem Tanıları","doctor.empty_hint":'ZeroClaw kurulumunuzu kontrol etmek için "Tanı Çalıştır" düğmesine tıklayın.',"auth.pair":"Cihaz Eşleştir","auth.pairing_code":"Eşleştirme Kodu","auth.pair_button":"Eşleştir","auth.logout":"Çıkış Yap","auth.pairing_success":"Eşleştirme başarılı!","auth.pairing_failed":"Eşleştirme başarısız. Lütfen tekrar deneyin.","auth.enter_code":"Akıllı birine bağlanmak için eşleştirme kodunuzu girin.","common.loading":"Yükleniyor...","common.error":"Bir hata oluştu.","common.retry":"Tekrar Dene","common.cancel":"İptal","common.confirm":"Onayla","common.save":"Kaydet","common.delete":"Sil","common.edit":"Düzenle","common.close":"Kapat","common.yes":"Evet","common.no":"Hayır","common.search":"Ara...","common.no_data":"Veri mevcut değil.","common.refresh":"Yenile","common.back":"Geri","common.actions":"İşlemler","common.name":"Ad","common.description":"Açıklama","common.status":"Durum","common.created":"Oluşturulma","common.updated":"Güncellenme","health.title":"Sistem Sağlığı","health.component":"Bileşen","health.status":"Durum","health.last_ok":"Son Başarılı","health.last_error":"Son Hata","health.restart_count":"Yeniden Başlatmalar","health.pid":"İşlem Kimliği","health.uptime":"Çalışma Süresi","health.updated_at":"Son Güncelleme","settings.title":"Ayarlar","settings.tab.appearance":"Görünüm","settings.tab.typography":"Tipografi","settings.appearance":"Görünüm","settings.typography":"Tipografi","settings.fontUi":"Arayüz Yazı Tipi","settings.fontMono":"Kod Yazı Tipi","settings.fontSize":"Arayüz Boyutu","settings.fontMonoSize":"Kod Boyutu","settings.preview":"Önizleme","settings.previewText":"Tembel köpek üzerinde hızlı kahverengi tilki zıplar.","settings.fontNote":"Yazı tipi değişiklikleri sayfa yeniden yüklendikten sonra geçerli olur.","settings.language":"Dil","theme.mode":"Tema Modu","theme.accent":"Vurgu Rengi","theme.system":"Sistem","theme.dark":"Koyu","theme.light":"Açık","theme.oled":"OLED Siyah","console.nav.commandDeck":"Command Deck","console.nav.missionCenter":"Mission Center","console.nav.skillLibrary":"Skill Library","console.nav.dailyReport":"Daily Report","console.nav.settings":"Settings","console.role.finance":"Finance","console.role.engineering":"Engineering","console.role.executive":"Executive","console.role.hr":"HR","console.role.sales":"Sales","console.state.loading":"Loading...","console.state.empty":"No data","console.state.backendDown":"Backend unreachable","console.state.partialData":"Partial data loaded","console.state.stale":"Data stale","console.state.unauthorized":"Unauthorized","console.action.refresh":"Refresh","console.action.approve":"Approve","console.action.reject":"Reject","console.action.retry":"Retry","console.action.create":"Create","console.skill.capabilityLevel":"Capability Level","console.skill.enable":"Enable","console.skill.disable":"Disable","console.skill.core":"Core","console.skill.standard":"Standard","console.skill.specialized":"Specialized","console.skill.experimental":"Experimental","console.report.dailyTitle":"Daily Report","console.report.sourceLinks":"Source Links","console.report.noEvents":"No events today"}};let rE="zh";function jm(e){var a;return((a=Oy[rE])==null?void 0:a[e])??Oy.en[e]??e}const Fo=["qimingclaw-client-readiness","qimingclaw-remote-task-ingress","qimingclaw-daily-report"],cE=[{key:"all",label:"全部委托"},{key:"daily",label:"日常任务"},{key:"weekly",label:"周任务"},{key:"monthly",label:"月度任务"},{key:"adhoc",label:"临时任务"}];function wm(e){const a=typeof e.updated_at=="string"?e.updated_at:typeof e.created_at=="string"?e.created_at:"",l=a?new Date(a).getTime():0;return Number.isFinite(l)?l:0}function ki(e){if(!e)return"";const a=new Date(e);return Number.isNaN(a.getTime())?"":[a.getFullYear(),String(a.getMonth()+1).padStart(2,"0"),String(a.getDate()).padStart(2,"0")].join("-")}function bi(){return ki(new Date().toISOString())}function qy(e,a){const l=e?new Date(`${e}T12:00:00`):new Date;return Number.isNaN(l.getTime())?bi():(l.setDate(l.getDate()+a),ki(l.toISOString()))}function lp(e){const a=`${e.title} ${e.id}`.match(/(?:^|\D)(\d{1,2})[::](\d{2})(?:\D|$)/);if(!a)return null;const l=Number(a[1]),r=Number(a[2]);return!Number.isInteger(l)||!Number.isInteger(r)||l>23||r>59?null:{text:`${String(l).padStart(2,"0")}:${String(r).padStart(2,"0")}`,minutes:l*60+r}}function ip(e){return e.steps.flatMap(a=>a.tasks.flatMap(l=>[l.startedAt,l.finishedAt])).filter(a=>!!a)}function oE(e,a){return ip(e).map(ki).filter(Boolean).includes(a)||lp(e)?!0:[e.updatedAt,e.createdAt].map(ki).includes(a)}function dE(e){return lp(e)&&`${e.title}`.trim().toLowerCase()||e.id}function uE(e,a){return ip(e).some(l=>ki(l)===a)}function Ly(e,a){const l=uE(e,a)?1e4:0,r=Fo.includes(e.id)?1e3:0,o=[e.updatedAt,e.createdAt].map(ki).includes(a)?100:0;return l+r+o+wm({updated_at:e.updatedAt||"",created_at:e.createdAt||""})/1e13}function fE(e,a){const l=new Map;for(const r of e){const o=dE(r),d=l.get(o);(!d||Ly(r,a)>Ly(d,a))&&l.set(o,r)}return Array.from(l.values())}function By(e,a){const l=lp(e);if(l)return l.minutes;const r=ip(e).filter(o=>ki(o)===a).sort();if(r[0]){const o=new Date(r[0]);return o.getHours()*60+o.getMinutes()}return 1440}function mE(e){const a=`${e.id} ${e.title} ${e.objective}`.toLowerCase();return a.includes("month")||a.includes("monthly")||a.includes("月")?"monthly":a.includes("week")||a.includes("weekly")||a.includes("周")?"weekly":a.includes("临时")||a.includes("adhoc")||a.includes("hotlist")||a.includes("monitor")?"adhoc":"daily"}async function cx(e,a,l={}){const r=Date.now(),o=await Xo({command_kind:e,context_refs:a,payload:{source:"digital-mission-center",...l},correlation_id:`mission-${e}-${r}`,idempotency_key:`mission-${e}-${Object.values(a).join("-")||"new"}-${r}`});if(!o.accepted)throw new Error(o.message||`command 未被接受:${o.command_id||e}`);return o}async function ta(e,a,l={}){return cx(a,{plan_id:e},l)}async function Uy(e){const a=e.sourceIds.planId;if(!a)return null;const l=e.status.toLowerCase();if(l==="draft")await ta(a,"submit_plan",{requested_action:"mission_dispatch"}),await ta(a,"approve_plan",{requested_action:"mission_dispatch"});else if(l==="reviewing")await ta(a,"approve_plan",{requested_action:"mission_dispatch"});else if(!["approved","active","running"].includes(l))return await ta(a,"amend_plan",{requested_action:"reopen_for_execution",summary:"数字员工任务中心请求重新执行任务"}),null;return await ta(a,"activate_plan",{requested_action:"mission_dispatch"}),a}function pE(e){const a=e.steps.map((l,r)=>{const o=new Set;l.preferredSkills.forEach(p=>{p.trim()&&o.add(p)}),l.tasks.forEach(p=>{var h;(h=p.assignedSkillId)!=null&&h.trim()&&o.add(p.assignedSkillId)});const d=[l.description,...l.tasks.map(p=>p.description),l.title,e.objective,e.title].find(p=>typeof p=="string"&&p.trim());return{title:l.title||`${e.title} 第 ${r+1} 步`,description:d||l.title||e.objective||e.title,skills:Array.from(o),depends_on:r===0?[]:[`step-${r}`]}}).filter(l=>l.skills.length>0);if(a.length===0)throw new Error("当前任务没有可复用的 skill,不能创建真实重新执行计划。");return a}function ox(e){return`${e.replace(/(\s*重新执行)+$/u,"").trim()||e} 重新执行`}async function _E(e){var o,d;const a=await cx("create_plan",{session_id:"digital-mission-center",plan_id:e.sourceIds.planId||e.id},{requested_action:"mission_restart",title:ox(e.title),description:e.objective||e.title,steps:pE(e),original_plan_id:e.sourceIds.planId||e.id}),l=typeof((o=a.result)==null?void 0:o.plan_id)=="string"?a.result.plan_id:"";if(!l)throw new Error("重新执行计划已提交,但后端没有返回 plan_id。");const r=typeof((d=a.result)==null?void 0:d.status)=="string"?a.result.status.toLowerCase():"";return r==="draft"?(await ta(l,"submit_plan",{requested_action:"mission_restart"}),await ta(l,"approve_plan",{requested_action:"mission_restart"}),await ta(l,"activate_plan",{requested_action:"mission_restart"})):r==="reviewing"?(await ta(l,"approve_plan",{requested_action:"mission_restart"}),await ta(l,"activate_plan",{requested_action:"mission_restart"})):r==="approved"&&await ta(l,"activate_plan",{requested_action:"mission_restart"}),l}function hE({focusMissionId:e,focusTaskId:a,focusDate:l}){const r=l||bi(),[o,d]=v.useState([]),[p,h]=v.useState(null),[_,g]=v.useState(!0),[x,S]=v.useState(!1),[C,z]=v.useState("all"),[w,D]=v.useState(()=>r),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(!1),[ie,Z]=v.useState(null),[K,pe]=v.useState(null),[P,q]=v.useState(null),ce=v.useRef(null),R=v.useRef(!1);v.useEffect(()=>(R.current=!0,()=>{R.current=!1}),[]);const M=v.useCallback(async()=>{g(!0),S(!1);try{const ae=await fN();if(!R.current)return[];const he=new Map,Ie=Ke=>{const Dt=typeof Ke.plan_id=="string"?Ke.plan_id:"";Dt&&!he.has(Dt)&&he.set(Dt,Ke)};(Array.isArray(ae)?ae:[]).forEach(Ie);const V=Fo.filter(Ke=>!he.has(Ke));if(V.length>0){const Ke=await Promise.allSettled(V.map(async Dt=>({id:Dt,plans:await uy(Dt,20)})));for(const Dt of Ke)if(Dt.status==="fulfilled"){const wa=Dt.value.plans.find(Ci=>Ci.plan_id===Dt.value.id);wa&&Ie(wa)}}const Ce=Fo.map(Ke=>he.get(Ke)).filter(Ke=>!!Ke),He=[...[...he.entries()].filter(([Ke])=>!Fo.includes(Ke)).map(([,Ke])=>Ke).sort((Ke,Dt)=>wm(Dt)-wm(Ke)),...Ce];if(He.length>0){const Ke=jy(He);return d(Ke),Ke}return d([]),[]}catch(ae){return R.current?(console.error("[MissionCenter] fetch failed:",ae),d([]),S(!0),[]):[]}finally{R.current&&g(!1)}},[]);v.useEffect(()=>{M()},[M]),v.useEffect(()=>{D(l||bi()),k(!1)},[l]);const ne=v.useCallback(ae=>{h(ae),pe(ae.id),window.setTimeout(()=>{var he;(he=ce.current)==null||he.scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})},40)},[]),B=v.useCallback(ae=>{ne(ae),q({kind:"selected",missionId:ae.id,title:ae.title,planId:ae.sourceIds.planId})},[ne]);v.useEffect(()=>{if(!e&&!a)return;const ae=o.find(he=>he.id===e||he.sourceIds.planId===e||(a?he.sourceIds.taskIds.includes(a):!1));ae&&(z("all"),B(ae),window.setTimeout(()=>{var he;(he=document.getElementById(`mission-card-${Ad(ae.id)}`))==null||he.scrollIntoView({block:"center",behavior:"smooth"})},80))},[e,a,o,B]);const U=v.useCallback(async ae=>{if(O(ae.id),S(!1),Z(null),!ae.sourceIds.planId){Z("当前任务没有 qimingclaw Plan 记录,无法委托执行。"),O(null);return}try{const he=await Uy(ae),Ie=await M();if(z("all"),he){const V=Ie.find(Ce=>Ce.id===he||Ce.sourceIds.planId===he);if(V)ne(V),q({kind:"dispatched",missionId:V.id,title:V.title,planId:he});else{const Ce=await uy(he,5),yt=jy(Ce).find(He=>He.id===he);yt?(ne(yt),q({kind:"dispatched",missionId:yt.id,title:yt.title,planId:he})):h(null)}}else h(V=>(V==null?void 0:V.id)===ae.id?null:V)}catch(he){console.error("[MissionCenter] dispatch failed:",he),S(!1),Z(he instanceof Error?he.message:"任务委托失败")}finally{O(null)}},[M,ne]),le=v.useCallback(async ae=>{if(O(ae.id),S(!1),Z(null),!ae.sourceIds.planId){Z("当前任务没有 qimingclaw Plan 记录,无法重新执行。"),O(null);return}try{const he=await _E(ae),Ie=await M();z("all");const V=Ie.find(Ce=>Ce.id===he||Ce.sourceIds.planId===he);V?(ne(V),q({kind:"created",missionId:V.id,title:V.title,planId:he})):(pe(he),q({kind:"created",missionId:he,title:ox(ae.title),planId:he}))}catch(he){console.error("[MissionCenter] restart failed:",he),S(!1),Z(he instanceof Error?he.message:"重新执行失败")}finally{O(null)}},[M,ne]),de=w||bi(),Te=fE(N?o:o.filter(ae=>oE(ae,de)),de),E=Te.filter(ae=>ae.sourceIds.planId&&["draft","reviewing","approved"].includes(ae.status.toLowerCase())),J=v.useCallback(async()=>{if(E.length!==0){I(!0),S(!1);try{for(const ae of E)O(ae.id),await Uy(ae);await M(),h(null)}catch(ae){console.error("[MissionCenter] batch dispatch failed:",ae),S(!1),Z(ae instanceof Error?ae.message:"批量委托失败")}finally{O(null),I(!1)}}},[M,E]),ue=(C==="all"?Te:Te.filter(ae=>mE(ae)===C)).map((ae,he)=>({mission:ae,index:he})).sort((ae,he)=>{const Ie=V=>(V.id===K?2:0)+(V.id===(p==null?void 0:p.id)?1:0);return Ie(he.mission)-Ie(ae.mission)||By(ae.mission,de)-By(he.mission,de)||ae.index-he.index}).map(({mission:ae})=>ae),ve=(P==null?void 0:P.kind)==="created"?"刚创建重新执行任务":(P==null?void 0:P.kind)==="dispatched"?"刚委托执行任务":"当前查看任务",Ee=ae=>ae.id!==K?null:(P==null?void 0:P.missionId)===ae.id&&P.kind==="created"?"刚创建":(P==null?void 0:P.missionId)===ae.id&&P.kind==="dispatched"?"刚委托":"当前查看";return s.jsx("div",{className:"de-mission-center-page",children:s.jsxs("div",{className:"de-mission-center-layout",children:[s.jsx("div",{className:"de-mc-list",children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"任务委托",children:[s.jsx("button",{onClick:J,className:"de-btn-primary de-btn-sm",disabled:te||E.length===0,children:te?"委托中...":`委托可执行任务(${E.length})`}),s.jsx("button",{onClick:M,className:"de-btn-secondary de-btn-sm",children:jm("console.action.refresh")})]}),s.jsxs("div",{className:"de-card-body",children:[ie&&s.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:ie}),P&&s.jsxs("div",{className:"de-mission-focus-notice",children:[s.jsx("strong",{children:ve}),s.jsx("span",{children:P.title}),P.planId&&s.jsx("code",{children:P.planId})]}),s.jsxs("div",{className:"de-date-filter-row",children:[s.jsxs("label",{className:"de-date-filter-field",children:[s.jsx("span",{children:"选择日期"}),s.jsx("input",{type:"date",value:de,onChange:ae=>{k(!1),D(ae.target.value||bi())}})]}),s.jsxs("div",{className:"de-date-filter-actions","aria-label":"日期切换",children:[s.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{k(!1),D(qy(de,-1))},children:"前一天"}),s.jsx("button",{type:"button",className:"de-filter-chip active",onClick:()=>{k(!1),D(bi())},children:"今天"}),s.jsx("button",{type:"button",className:"de-filter-chip",onClick:()=>{k(!1),D(qy(de,1))},children:"后一天"})]}),s.jsx("span",{className:"de-date-filter-summary",children:N?`全部 ${Te.length} 项任务`:`${Te.length} 项任务`})]}),s.jsx("div",{className:"de-filter-row",children:cE.map(ae=>s.jsx("button",{className:`de-filter-chip ${C===ae.key?"active":""}`,onClick:()=>z(ae.key),children:ae.label},ae.key))}),_?s.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):x?s.jsx("p",{className:"de-empty-text",children:jm("console.state.backendDown")}):ue.length===0?s.jsxs("div",{className:"de-mission-empty-panel",children:[s.jsx("strong",{children:"当前日期暂无任务"}),s.jsx("p",{children:"这个日期没有匹配到 qimingclaw 任务记录,可以临时查看全部任务。"}),s.jsxs("div",{className:"de-mission-empty-actions",children:[s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",onClick:()=>{k(!0),z("all")},children:"查看全部任务"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{k(!1),D(l||bi())},children:"返回当前日期"})]})]}):s.jsx("div",{className:"de-mc-card-list",children:ue.map(ae=>s.jsx(W2,{mission:ae,selected:(p==null?void 0:p.id)===ae.id,focusLabel:Ee(ae),dateFilter:de,running:A===ae.id,onSelect:B,onRun:U,onRestart:le},ae.id))})]})]})}),s.jsx("div",{className:"de-mc-detail",ref:ce,children:p?s.jsx(sE,{mission:p,onClose:()=>h(null)}):s.jsx(gn,{children:s.jsx("div",{className:"de-card-body",children:s.jsxs("div",{className:"de-mission-empty-panel de-mission-empty-panel--detail",children:[s.jsx("strong",{children:"选择一个任务后,右侧会显示执行步骤、运行记录和交付结果。"}),s.jsx("p",{children:"任务详情会优先展示 qimingclaw 本地 Plan / Task / Run / Event 记录,以及从执行 payload 中整理出的产物线索。"})]})})})})]})})}const gE=[{value:"all",label:"全部任务"},{value:"daily",label:"日常任务"},{value:"weekly",label:"周任务"},{value:"monthly",label:"月度任务"},{value:"adhoc",label:"临时任务"}],yE={daily:"日常",weekly:"周",monthly:"月度",adhoc:"临时"},bE={allow:"白名单",deny:"黑名单",open:"开放",disabled:"停用"};function dx(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/weekly|week|周/.test(a)?"weekly":/monthly|month|月报|月度/.test(a)?"monthly":/monitor|crawler|巡检|监控|待办|日程|日报|日终|收件箱|工作台|客户跟进/.test(a)?"daily":"adhoc"}function em(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return e.capabilityLevel==="specialized"||e.capabilityLevel==="experimental"||/加密|深度|分析|自动化|部署|代码|审查|调研|批量|converter|crypto|github|deploy|review|research/.test(a)}function vE(e){const a=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/日报|周报|报表|待办|日程|巡检|客户|知识库|经营|费用|收件箱|工作台/.test(a)}function xE(e){const a=e.name,l=`${e.id} ${e.name} ${e.description} ${e.category}`.toLowerCase();return/report|报表|日报|周报|月报|汇报/.test(l)?`自动整理${a}材料,减少手工汇总和重复填报。`:/monitor|巡检|监控|预警/.test(l)?`按约定频率完成${a},及时提示异常和遗漏。`:/todo|待办|task|看板|日程/.test(l)?`帮你梳理${a},把后续处理事项集中呈现。`:/客户|crm|回访|满意/.test(l)?"汇总客户相关信息,形成可直接跟进的处理建议。":/知识|文档|制度|模板/.test(l)?"查找和核对资料内容,减少人工翻找和版本确认。":e.description}function kE(e,a,l){return e.enabled?"已学习":e.enabled?l?"需确认后学习":a?"建议学习":"可学习":"暂不使用"}function SE(e){var l,r;const a=[];return e.serverId&&a.push(e.serverId),e.running!==null&&e.running!==void 0&&a.push(e.running?"运行中":"未运行"),e.policySource==="remote"&&a.push("远端策略"),e.remotePolicy&&e.remotePolicy.enabled===!1&&a.push("管理端禁用"),e.governancePolicy&&a.push(bE[e.governancePolicy]),typeof e.toolCount=="number"&&a.push(`${e.toolCount} 工具`),(l=e.allowTools)!=null&&l.length&&a.push(`allow ${e.allowTools.length}`),(r=e.denyTools)!=null&&r.length&&a.push(`deny ${e.denyTools.length}`),a.slice(0,5)}function jE(e){var r;const a=(r=e.recentCalls)==null?void 0:r[0];return a?`${a.toolName?`${a.toolName} · `:""}${a.message||a.status||"最近调用"}`:typeof e.callCount=="number"&&e.callCount>0?`${e.callCount} 次调用`:null}function wE({skill:e,recommended:a=!1,advanced:l=!1,selected:r=!1,updating:o=!1,onSelect:d,onToggle:p,onAudit:h}){const _=dx(e),g=kE(e,a,l),x=SE(e),S=jE(e);return s.jsxs("div",{id:`skill-card-${Ad(e.id)}`,className:`de-skill-card ${r?"de-skill-card--selected":""}`,role:"button",tabIndex:0,onClick:()=>d==null?void 0:d(e),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),d==null||d(e))},children:[s.jsxs("div",{className:"de-skill-card-head",children:[s.jsx("span",{className:"de-skill-name",children:e.name}),s.jsx("span",{className:`de-skill-status ${e.enabled?"enabled":"disabled"}`,children:g})]}),s.jsx("p",{className:"de-skill-desc",children:xE(e)}),x.length>0&&s.jsx("div",{className:"de-skill-meta-row",children:x.map(C=>s.jsx("span",{className:"de-skill-meta-chip",children:C},C))}),S&&s.jsxs("p",{className:"de-skill-recent",children:["最近:",S]}),s.jsxs("div",{className:"de-skill-card-foot",children:[s.jsxs("span",{className:"de-skill-version",children:["适用任务:",yE[_]]}),s.jsx("button",{className:`de-skill-btn ${e.enabled?"de-skill-btn--danger":""}`,disabled:o,title:e.enabled?"暂时停用此技能,后续路由不会选择它。":"恢复使用此技能。",onClick:C=>{C.stopPropagation(),o||p==null||p(e)},children:o?"处理中...":e.enabled?"暂不使用":"恢复使用"}),s.jsx("button",{className:"de-skill-btn",title:"查看该技能的调用审计。",onClick:C=>{C.stopPropagation(),h==null||h(e)},children:"技能审计"})]})]})}function CE({focusSkillId:e,onNavigate:a}){const[l,r]=v.useState([]),[o,d]=v.useState(!0),[p,h]=v.useState(!1),[_,g]=v.useState(""),[x,S]=v.useState("all"),[C,z]=v.useState(e??null),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null),ie=v.useRef(!1);v.useEffect(()=>(ie.current=!0,()=>{ie.current=!1}),[]);const Z=v.useCallback(async()=>{d(!0),h(!1);try{const E=await _N();if(!ie.current)return;r(Array.isArray(E)?q2(E):[])}catch(E){if(!ie.current)return;console.error("[SkillLibrary] fetch failed:",E),r([]),h(!0)}finally{ie.current&&d(!1)}},[]);v.useEffect(()=>{Z()},[Z]),v.useEffect(()=>{e&&(z(e),S("all"),g(""),window.setTimeout(()=>{var E;(E=document.getElementById(`skill-card-${Ad(e)}`))==null||E.scrollIntoView({block:"center",behavior:"smooth"})},80))},[e,l.length]);const K=v.useCallback(async E=>{const J=!E.enabled;D(E.id),O(null),I(null);try{const se=await hN(E.id,J);if(!se.ok)throw new Error(se.error||"技能状态变更失败");r(ue=>ue.map(ve=>ve.id===E.id?{...ve,enabled:J}:ve)),z(E.id)}catch(se){O(se instanceof Error?se.message:"技能状态变更失败")}finally{D(null)}},[]),pe=v.useCallback(async()=>{k(!0),O(null),I(null);try{const E=await Hv();if(!E.ok)throw new Error(E.error||"技能策略拉取失败");await Z(),I(E.skipped?"技能策略无需重复拉取。":"技能策略已更新。")}catch(E){O(E instanceof Error?E.message:"技能策略拉取失败")}finally{k(!1)}},[Z]),P=l.filter(E=>x==="all"||dx(E)===x).filter(E=>_?[E.name,E.description,E.category,E.serverId,...E.tools??[],...E.allowTools??[],...E.denyTools??[]].filter(Boolean).join(" ").includes(_):!0),q=P.filter(em),ce=new Set(q.map(E=>E.id)),R=P.filter(E=>E.enabled&&!ce.has(E.id)),M=P.filter(E=>!E.enabled&&vE(E)&&!em(E)),ne=P.filter(E=>!E.enabled&&!em(E)),B=(M.length>0?M:ne).slice(0,4),U=new Set(B.map(E=>E.id)),le=ne.filter(E=>!U.has(E.id)),de=[{key:"recommended",title:"推荐学习",hint:"优先补齐高频工作能力,适合让数字员工尽快接手重复事务。",skills:B,emptyText:"暂无推荐学习项。"},{key:"learnable",title:"可学习技能",hint:"可纳入数字员工日常工作的业务能力,学习入口待接入后启用。",skills:le,emptyText:"当前没有可学习技能。"},{key:"learned",title:"已学技能",hint:"数字员工已经掌握并可被业务场景调用的能力。",skills:R,emptyText:"当前还没有已学习技能。"},{key:"advanced",title:"高级技能",hint:"适合有明确边界或需要确认后再交给数字员工处理的能力。",skills:q,emptyText:"暂无高级技能。"}],Te=E=>s.jsxs("section",{style:{display:"grid",gap:10},children:[s.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:12},children:[s.jsxs("div",{children:[s.jsx("h3",{style:{margin:0,fontSize:16,color:"var(--de-text-primary)"},children:E.title}),s.jsx("p",{style:{margin:"4px 0 0",fontSize:12,color:"var(--de-text-muted)"},children:E.hint})]}),s.jsxs("span",{className:"de-capability-badge de-capability-standard",children:[E.skills.length," 项"]})]}),E.skills.length===0?s.jsx("p",{className:"de-empty-text",style:{margin:0},children:E.emptyText}):s.jsx("div",{className:"de-skill-grid",children:E.skills.map(J=>s.jsx(wE,{skill:J,recommended:E.key==="recommended",advanced:E.key==="advanced",selected:C===J.id,updating:w===J.id,onSelect:se=>z(se.id),onToggle:K,onAudit:se=>a==null?void 0:a({tab:"skill-audit",auditSkillId:se.id})},`${E.key}-${J.id}`))})]},E.key);return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"学习技能",children:[s.jsx("button",{onClick:pe,disabled:N,className:"de-btn-secondary de-btn-sm",children:N?"拉取中...":"拉取策略"}),s.jsx("button",{onClick:Z,className:"de-btn-secondary de-btn-sm",children:"刷新"})]}),s.jsxs("div",{className:"de-card-body",children:[A&&s.jsx("div",{className:"de-schedule-result de-schedule-result--error",style:{marginBottom:12},children:A}),te&&s.jsx("div",{className:"de-schedule-result",style:{marginBottom:12},children:te}),s.jsxs("div",{className:"de-skill-toolbar",children:[s.jsx("input",{type:"text",className:"de-input",placeholder:"搜索业务能力...",value:_,onChange:E=>g(E.target.value)}),s.jsx("div",{className:"de-filter-row",children:gE.map(E=>s.jsx("button",{className:`de-filter-chip ${x===E.value?"active":""}`,onClick:()=>S(E.value),children:E.label},E.value))})]}),o?s.jsx("div",{className:"de-loading-skeleton",style:{height:300}}):p?s.jsx("p",{className:"de-empty-text",children:"技能目录暂不可用,请检查 qimingclaw bridge 或稍后刷新。"}):P.length===0&&l.length>0?s.jsx("p",{className:"de-empty-text",children:"无匹配技能,请调整搜索或筛选条件"}):P.length===0?s.jsx("p",{className:"de-empty-text",children:"暂无可展示的学习技能。"}):s.jsx("div",{style:{display:"grid",gap:18},children:de.map(Te)})]})]})})}const NE={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:12},Uo={border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"};function EE(){const e=new Date;return[e.getFullYear(),String(e.getMonth()+1).padStart(2,"0"),String(e.getDate()).padStart(2,"0")].join("-")}function AE(e){return(e==null?void 0:e.status)==="ready"?"已生成":(e==null?void 0:e.status)==="generating"?"生成中":(e==null?void 0:e.status)==="failed"?"生成失败":"待生成"}function TE(e){return(e==null?void 0:e.status)==="ready"?"de-report-badge--ready":"de-report-badge--waiting"}function RE(e){return e?e.generated_by==="ai"?`AI 已生成日报${e.model?`:${e.model}`:""}`:"AI 不可用时已使用规则兜底生成日报":"AI 将基于当天任务和运行明细生成日报"}function $E(e){if(!e)return[];const a=e.duties.filter(l=>l.selected).map(l=>l.id);return a.length>0?a:e.duties.filter(l=>l.implemented).map(l=>l.id)}function ux(e){if(!e)return"暂未生成";const a=new Date(e);return Number.isNaN(a.getTime())?e:a.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}function DE(e,a){const l=new Blob([a],{type:"text/plain;charset=utf-8"}),r=URL.createObjectURL(l),o=document.createElement("a");o.href=r,o.download=e,document.body.appendChild(o),o.click(),o.remove(),window.setTimeout(()=>URL.revokeObjectURL(r),1e3)}function Iy(e,a,l){const r=new Blob([a],{type:l}),o=URL.createObjectURL(r),d=document.createElement("a");d.href=o,d.download=e,document.body.appendChild(d),d.click(),d.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}function zE(e){const a=window.atob(e),l=new Uint8Array(a.length);for(let r=0;r0?l.map(d=>`- ${d.title}:${d.latest_status_label},执行 ${d.total_count} 次,成功 ${d.success_count},失败 ${d.failure_count}。${d.ai_summary||d.business_summary||""}`):["暂无任务汇总。"],"","## 运行明细",...r.length>0?r.map(d=>`- ${d.time||"--:--"} ${d.task_name} / ${d.step_name||d.operation_name||"任务执行"}:${d.status_label},${d.business_detail}`):["暂无运行明细。"],"","## 产物来源",...o.length>0?o.map(d=>`- ${d.name}:${d.source_label||d.source_type||"未知来源"}${d.uri?`,${d.uri}`:""}`):["暂无产物来源。"],"","## 详情",...(a.detail_lines??[]).length>0?a.detail_lines:["暂无详情。"]].join(` +`)}function OE({sections:e}){return e.length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"今天还没有可汇总的任务。"}):s.jsx("div",{className:"de-task-summary-grid","aria-label":"日报任务汇总",children:e.map(a=>s.jsxs("div",{className:`de-task-summary-card de-live-feed-row--${a.latest_status_tone||"info"}`,children:[s.jsx("span",{className:"de-task-summary-title",children:a.title}),s.jsx("span",{className:"de-badge de-badge-info",children:a.latest_status_label}),s.jsxs("strong",{children:["执行次数 ",a.total_count]}),s.jsxs("small",{children:["成功次数 ",a.success_count," · 失败次数 ",a.failure_count]}),s.jsx("em",{children:a.ai_summary||a.business_summary})]},a.id))})}function qE({details:e}){return e.length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"任务执行后,这里会展示时间、任务、步骤和执行情况。"}):s.jsxs("div",{className:"de-run-detail-list de-run-detail-list-scroll","aria-label":"日报运行明细",children:[s.jsxs("div",{className:"de-run-detail-row de-run-detail-row--head",children:[s.jsx("span",{children:"时间"}),s.jsx("span",{children:"任务名称"}),s.jsx("span",{children:"步骤名称"}),s.jsx("span",{children:"执行状态"}),s.jsx("span",{children:"执行情况"})]}),e.map(a=>s.jsxs("div",{className:`de-run-detail-row de-live-feed-row--${a.status_tone||"info"}`,children:[s.jsx("span",{children:a.time||"--:--"}),s.jsx("strong",{children:a.task_name}),s.jsx("em",{children:a.step_name||a.operation_name||"任务执行"}),s.jsx("i",{className:"de-badge de-badge-info",children:a.status_label}),s.jsx("span",{children:a.business_detail})]},a.id))]})}function LE({artifacts:e}){var D,N;const[a,l]=v.useState(null),[r,o]=v.useState(null),[d,p]=v.useState(null),[h,_]=v.useState(null);if(e.length===0)return s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"运行产物出现后,这里会展示文件、输出和来源记录。"});const g=(k,A)=>({...k,retention_status:String((A==null?void 0:A.retention_status)||k.retention_status||"unmanaged"),retention_until:String((A==null?void 0:A.retention_until)||k.retention_until||"")||null,last_retention_action:String((A==null?void 0:A.last_retention_action)||k.last_retention_action||"")||null,cleanup_status:String((A==null?void 0:A.cleanup_status)||k.cleanup_status||"")||null,deleted_at:String((A==null?void 0:A.deleted_at)||k.deleted_at||"")||null,cleanup_reason:String((A==null?void 0:A.cleanup_reason)||k.cleanup_reason||"")||null,cleanup_event_id:String((A==null?void 0:A.cleanup_event_id)||k.cleanup_event_id||"")||null,access:(A==null?void 0:A.access)||k.access}),x=async(k,A)=>{if(!k.id||a)return;const O=`${k.id}:${A}`;l(O),o(null);try{const te=await Xv(k.id,A);if(!(te!=null&&te.ok)){o((te==null?void 0:te.error)||"产物访问被拒绝");return}if(A==="preview"){const I=te.preview||{};p({title:String(I.name||k.name||"产物预览"),text:String(I.text||`${I.mime||k.kind||"artifact"} · ${I.size??"unknown"}`)})}else o(A==="download"?"已打开产物":"已打开位置")}catch(te){o(te instanceof Error?te.message:"产物访问失败")}finally{l(null)}},S=async k=>{if(!(!k.id||a)){l(`${k.id}:detail`),o(null);try{const[A,O]=await Promise.all([Oo(k.id),qo(k.id)]);_({artifact:g(k,A),item:A,versions:O})}catch(A){o(A instanceof Error?A.message:"读取产物详情失败")}finally{l(null)}}},C=async k=>{const A=h==null?void 0:h.artifact;if(!(!(A!=null&&A.id)||a)){l(`${A.id}:${k}`),o(null);try{const O=await yN(A.id,k,{reason:"digital_employee_artifact_governance"});if(!(O!=null&&O.ok)){o((O==null?void 0:O.error)||"保留策略写入失败");return}const[te,I]=await Promise.all([Oo(A.id),qo(A.id)]);_({artifact:g(A,te),item:te,versions:I}),o("保留策略已记录")}catch(O){o(O instanceof Error?O.message:"保留策略写入失败")}finally{l(null)}}},z=async()=>{const k=h==null?void 0:h.artifact;if(!(!(k!=null&&k.id)||a)){l(`${k.id}:cleanup`),o(null);try{const A=await bN(k.id,{reason:"digital_employee_artifact_cleanup",retention_status:k.retention_status||null,last_retention_action:k.last_retention_action||null});if(!(A!=null&&A.ok)){o((A==null?void 0:A.error)||"清理文件失败");return}const[O,te]=await Promise.all([Oo(k.id),qo(k.id)]);_({artifact:g(k,O),item:O,versions:te}),o("清理已记录")}catch(A){o(A instanceof Error?A.message:"清理文件失败")}finally{l(null)}}},w=async()=>{if(a)return;const k=e.map(A=>A.id).filter(Boolean);if(k.length!==0){l("artifact-batch:mark_expire"),o(null);try{const A=await Jv(k,"mark_expire",{reason:"digital_employee_daily_report_batch_retention"});if(!(A!=null&&A.ok)){o((A==null?void 0:A.error)||"批量标记到期失败");return}if(h!=null&&h.artifact.id){const[O,te]=await Promise.all([Oo(h.artifact.id),qo(h.artifact.id)]);_({artifact:g(h.artifact,O),item:O,versions:te})}o(`批量标记到期已记录:${A.recorded??0}/${A.total??k.length}`)}catch(A){o(A instanceof Error?A.message:"批量标记到期失败")}finally{l(null)}}};return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"de-artifact-retention-actions",children:s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>{w()},children:"批量标记到期"})}),s.jsx("div",{className:"de-artifact-source-list","aria-label":"日报产物来源",children:e.map(k=>{var I,ie,Z,K;const A=!!((I=k.access)!=null&&I.previewable),O=!!((ie=k.access)!=null&&ie.downloadable),te=!!((Z=k.access)!=null&&Z.openable);return s.jsxs("div",{className:"de-artifact-source-row",children:[s.jsx("strong",{children:k.name}),s.jsx("span",{children:k.source_label||k.source_type||"未知来源"}),s.jsxs("div",{className:"de-artifact-source-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!A||a!==null,onClick:()=>x(k,"preview"),title:"预览","aria-label":"预览",children:s.jsx(ed,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!O||a!==null,onClick:()=>x(k,"download"),title:"下载","aria-label":"下载",children:s.jsx(ws,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:!te||a!==null,onClick:()=>x(k,"open_location"),title:"位置","aria-label":"位置",children:s.jsx(JS,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:a!==null,onClick:()=>S(k),title:"版本","aria-label":"版本",children:s.jsx(FS,{size:15})})]}),s.jsxs("div",{className:"de-artifact-source-meta",children:[s.jsx("span",{children:k.version||"local-v1"}),s.jsx("span",{children:k.retention_status||"unmanaged"}),k.cleanup_status?s.jsx("span",{children:k.cleanup_status}):null,k.delivery_status?s.jsx("span",{children:k.delivery_status}):null,(K=k.access)!=null&&K.last_access_status?s.jsx("span",{children:k.access.last_access_status}):null]}),k.uri?s.jsx("code",{children:k.uri}):s.jsx("em",{children:k.kind||"artifact"})]},k.id)})}),r?s.jsx("p",{className:"de-inline-notice",children:r}):null,d?s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:d.title}),s.jsx("button",{type:"button",className:"de-btn-secondary",onClick:()=>p(null),children:"关闭"})]}),s.jsx("pre",{children:d.text})]}):null,h?s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:h.artifact.name}),s.jsx("button",{type:"button",className:"de-btn-secondary",onClick:()=>_(null),children:"关闭"})]}),s.jsxs("div",{className:"de-artifact-source-meta",children:[s.jsx("span",{children:h.artifact.retention_status||"unmanaged"}),h.artifact.cleanup_status?s.jsx("span",{children:h.artifact.cleanup_status}):null,h.artifact.deleted_at?s.jsx("span",{children:h.artifact.deleted_at}):null]}),s.jsxs("div",{className:"de-artifact-retention-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_keep"),children:"保留"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_expire"),children:"到期"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("mark_review"),children:"复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary",disabled:a!==null,onClick:()=>C("clear_retention"),children:"清除"}),s.jsxs("button",{type:"button",className:"de-btn-secondary",disabled:a!==null||h.artifact.cleanup_status==="deleted"||!(h.artifact.retention_status==="expired"||h.artifact.last_retention_action==="mark_expire")||!((D=h.artifact.access)!=null&&D.downloadable||(N=h.artifact.access)!=null&&N.openable),onClick:()=>{z()},children:[s.jsx(wb,{size:14})," 清理文件"]})]}),s.jsx("div",{className:"de-artifact-version-list",children:(h.versions.length>0?h.versions:[h.item]).filter(Boolean).map(k=>{var A;return s.jsxs("div",{children:[s.jsx("strong",{children:String(k.version||"local-v1")}),s.jsx("span",{children:String(((A=k.delivery_summary)==null?void 0:A.delivery_status)||k.source_label||"未记录")}),s.jsx("em",{children:String(k.created_at||"")})]},String(k.artifact_id||k.version_key||k.created_at))})})]}):null]})}function BE({focusSection:e}){const a=v.useMemo(()=>EE(),[]),[l,r]=v.useState(null),[o,d]=v.useState("18:00"),[p,h]=v.useState(!0),[_,g]=v.useState(null),[x,S]=v.useState(null),C=v.useRef(!1),z=(l==null?void 0:l.source)==="live",w=z?(l==null?void 0:l.daily_report)??null:null,D=z?(w==null?void 0:w.task_sections)??(l==null?void 0:l.execution_summaries)??[]:[],N=z?(l==null?void 0:l.run_details)??[]:[],k=z?(w==null?void 0:w.artifact_sources)??[]:[],A=z?null:(l==null?void 0:l.demo_reason)??"当前没有真实运行投影,日报区域暂不展示兜底数据。",O=(w==null?void 0:w.totals)??{task_count:D.length,execution_count:D.reduce((P,q)=>P+q.total_count,0),success_count:D.reduce((P,q)=>P+q.success_count,0),failure_count:D.reduce((P,q)=>P+q.failure_count,0),running_count:D.reduce((P,q)=>P+q.running_count,0)},te=v.useCallback(async()=>{var P;h(!0),S(null);try{const q=await Ss(a);if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||"18:00")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报数据加载失败")}finally{C.current&&h(!1)}},[a]);v.useEffect(()=>(C.current=!0,te(),()=>{C.current=!1}),[te]),v.useEffect(()=>{!e||p||window.setTimeout(()=>{var P;(P=document.getElementById(`report-section-${e}`))==null||P.scrollIntoView({block:"center",behavior:"smooth"})},80)},[e,p]);const I=v.useCallback(async()=>{var P;g("update_report_schedule"),S(null);try{const q=await ql({action:"update_report_schedule",date:a,report_schedule_time:o});if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||o),S("日报生成时间已更新。")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报生成时间设置失败")}finally{C.current&&g(null)}},[o,a]),ie=v.useCallback(async()=>{var P;g("generate_daily_report"),S(null);try{const q=await ql({action:"generate_daily_report",date:a,duty_ids:z?$E(l):[],report_schedule_time:o});if(!C.current)return;r(q),d(q.source==="live"&&((P=q.daily_report)==null?void 0:P.report_schedule_time)||o),S("日报已生成,可下载本地文本。")}catch(q){if(!C.current)return;S(q instanceof Error?q.message:"日报生成失败")}finally{C.current&&g(null)}},[z,l,o,a]),Z=v.useCallback(()=>{!w||w.status!=="ready"||DE(w.download_filename||tm(a),w.text_content||ME(a,w,D,N,k))},[k,w,N,D,a]),K=v.useCallback(async P=>{if(!w||w.status!=="ready")return;const q=P==="html"?w.html_artifact_id:w.pdf_artifact_id;if(q){g(P==="html"?"download_html":"download_pdf"),S(null);try{const ce=await Xv(q,"download");if(!(ce!=null&&ce.ok)){S((ce==null?void 0:ce.error)||"日报导出失败");return}const R=ce.preview||{};if(P==="html")Iy(w.html_filename||tm(a).replace(/\.txt$/,".html"),String(R.text||w.html_content||""),"text/html;charset=utf-8"),S("HTML 日报已导出。");else{const M=String(R.base64||"");if(!M){S("PDF 日报内容不可用");return}Iy(w.pdf_filename||tm(a).replace(/\.txt$/,".pdf"),zE(M),"application/pdf"),S("PDF 日报已导出。")}}catch(ce){if(!C.current)return;S(ce instanceof Error?ce.message:"日报导出失败")}finally{C.current&&g(null)}}},[w,a]),pe=v.useCallback(async P=>{if(!(w!=null&&w.report_id))return;g({send:"send_report",confirm:"confirm_report",request_approval:"request_approval"}[P]),S(null);try{const ce=await Zv({reportId:w.report_id,action:P,status:P==="send"?"sent":P==="confirm"?"confirmed":"pending",actor:P==="confirm"?"management":"digital_employee_operator",endpoint:"management-console"});if(!(ce!=null&&ce.eventId)&&!(ce!=null&&ce.event_id)){S("日报交付记录未写入");return}S(P==="send"?"日报发送记录已写入。":P==="confirm"?"管理端确认回执已写入。":"日报发送审批已创建。"),await te()}catch(ce){if(!C.current)return;S(ce instanceof Error?ce.message:"日报交付记录失败")}finally{C.current&&g(null)}},[te,w==null?void 0:w.report_id]);return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"日报生成",children:s.jsx("span",{className:"de-card-meta-text",children:a})}),s.jsx("div",{className:"de-card-body",children:p?s.jsx("div",{className:"de-loading-skeleton",style:{height:420}}):s.jsxs(s.Fragment,{children:[s.jsxs("section",{id:"report-section-today",className:"de-report-summary",style:{marginBottom:12},children:[s.jsxs("div",{className:"de-report-summary-head",children:[s.jsxs("div",{className:"de-report-summary-title-row",children:[s.jsx("h3",{children:(w==null?void 0:w.title)||"数字员工日报"}),s.jsx("p",{children:RE(w)})]}),s.jsx("span",{className:`de-report-badge ${TE(w)}`,children:AE(w)})]}),s.jsxs("div",{className:"de-report-summary-body",children:[s.jsxs("div",{className:"de-report-schedule-row",children:[s.jsxs("label",{children:[s.jsx("span",{children:"生成时间"}),s.jsx("input",{type:"time",value:o,onChange:P=>d(P.target.value||"18:00")})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_==="update_report_schedule",onClick:()=>{I()},children:"设置时间"}),s.jsx("button",{type:"button",className:"de-btn-primary de-btn-sm",disabled:_==="generate_daily_report",onClick:()=>{ie()},children:_==="generate_daily_report"?"生成中...":"生成日报"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm de-report-download-btn",disabled:!(w!=null&&w.pdf_available),onClick:Z,title:w!=null&&w.pdf_available?"下载本地日报文本":"生成日报后可下载本地日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"下载日报"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.html_artifact_id)||_==="download_html",onClick:()=>{K("html")},title:"导出 HTML 日报",children:[s.jsx(XS,{size:14,"aria-hidden":"true"}),"导出 HTML"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.pdf_artifact_id)||_==="download_pdf",onClick:()=>{K("pdf")},title:"导出 PDF 日报",children:[s.jsx(ws,{size:14,"aria-hidden":"true"}),"导出 PDF"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="send_report",onClick:()=>{pe("send")},title:"记录日报发送",children:[s.jsx(Sb,{size:14,"aria-hidden":"true"}),"记录发送"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="confirm_report",onClick:()=>{pe("confirm")},title:"写入管理端确认",children:[s.jsx(kb,{size:14,"aria-hidden":"true"}),"确认回执"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!(w!=null&&w.report_id)||_==="request_approval",onClick:()=>{pe("request_approval")},title:"发起日报审批",children:[s.jsx(Pr,{size:14,"aria-hidden":"true"}),"发起审批"]})]}),s.jsxs("div",{className:"de-report-metrics",children:[s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"任务总数"}),s.jsx("strong",{children:O.task_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"执行次数"}),s.jsx("strong",{children:O.execution_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"成功次数"}),s.jsx("strong",{children:O.success_count})]}),s.jsxs("div",{className:"de-report-metric",children:[s.jsx("span",{children:"失败次数"}),s.jsx("strong",{children:O.failure_count})]})]}),s.jsxs("div",{className:"de-report-meta",children:[s.jsx("p",{children:(w==null?void 0:w.summary)||"点击生成日报后,AI 会基于当天所有任务写出总分结构日报。"}),A?s.jsx("p",{children:A}):null,s.jsxs("p",{children:["计划生成时间:",o,";最近生成:",ux(w==null?void 0:w.generated_at)]}),x?s.jsx("p",{children:x}):null]})]})]}),s.jsxs("div",{style:NE,children:[s.jsxs("section",{id:"report-section-tasks",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"任务汇总"}),s.jsx(OE,{sections:D})]}),s.jsxs("section",{id:"report-section-details",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"运行明细"}),s.jsx(qE,{details:N})]}),s.jsxs("section",{id:"report-section-artifacts",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"产物来源"}),s.jsx(LE,{artifacts:k})]}),s.jsxs("section",{id:"report-section-summary",style:Uo,children:[s.jsx("h3",{className:"de-settings-heading",style:{marginTop:0},children:"日报内容"}),((w==null?void 0:w.detail_lines)??[]).length===0?s.jsx("p",{className:"de-empty-text",style:{padding:"18px 0 6px"},children:"生成日报后会展示 AI 整理后的分项说明。"}):s.jsx("div",{className:"de-report-meta",children:((w==null?void 0:w.detail_lines)??[]).map(P=>s.jsx("p",{children:P},P))})]})]})]})})]})})}const fx=[{id:"plans",label:"计划"},{id:"tasks",label:"任务"},{id:"runs",label:"运行"},{id:"events",label:"事件"},{id:"artifacts",label:"产物"},{id:"artifact-groups",label:"产物聚合"},{id:"approvals",label:"审批"}],UE={padding:"14px 18px"},IE={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(4, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},HE={display:"grid",gridTemplateColumns:"minmax(0, 1fr) minmax(280px, 360px)",gap:12,alignItems:"start"},GE={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},YE={width:"100%",minWidth:840,borderCollapse:"collapse"},Hy={border:"1px solid var(--de-glass-border-lighter)",borderRadius:8,background:"rgba(255,255,255,0.72)",overflow:"hidden"},KE={padding:18,color:"var(--de-text-muted)",fontSize:13},Gy={entity:"",status:"",syncStatus:"",updatedFrom:"",updatedTo:"",pageSize:20};function Yy(e){return fx.some(a=>a.id===e)?e:"plans"}function bt(e,a="-"){return e==null||e===""?a:String(e)}function na(e){return bt(e.entity_id||e.plan_id||e.task_id||e.run_id||e.event_id||e.artifact_id||e.approval_id,"unknown")}function mx(e){return bt(e.title||e.summary||e.kind||na(e),"未命名业务对象")}function Cm(e){return bt(e.updated_at||e.occurred_at||e.finished_at||e.started_at||e.created_at)}function QE(e,a){return a==="plans"?`任务 ${bt(e.task_count,"0")} / 运行 ${bt(e.run_count,"0")}`:a==="runs"?bt(e.last_event_message||e.duration_ms,"无最近事件"):a==="events"?bt(e.kind,"event"):a==="artifacts"?bt(e.cleanup_status||e.deleted_at||e.uri||e.kind,"artifact"):a==="artifact-groups"?`产物 ${bt(e.artifact_count,"0")} / 设备 ${bt(e.device_count,"0")} / 版本 ${bt(e.version_count,"0")}`:a==="approvals"?bt(e.approval_conflict_resolution||e.approval_conflict_resolved_at||e.decision||e.approval_conflict_reason||e.kind,"approval"):bt(e.assigned_skill_id||e.operation||e.kind)}function Io(e){return Array.isArray(e.artifact_ids)?e.artifact_ids.map(String).filter(Boolean):e.artifact_id?[String(e.artifact_id)]:[]}function VE(e,a){return{entity_id:e.entity.trim()||null,status:e.status.trim()||null,sync_status:e.syncStatus.trim()||null,updated_from:e.updatedFrom||null,updated_to:e.updatedTo||null,page_no:a,page_size:e.pageSize}}function XE(e){const a=String(e||"").toLowerCase();return["failed","error","rejected","conflict"].some(l=>a.includes(l))?"de-badge de-badge-danger":["pending","running","syncing","ready"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function ZE(e){return e.notification_id||e.entity_type==="notification"?{label:"打开通知运营",search:`?tab=notification-workbench&entity=${encodeURIComponent(na(e))}`}:e.report_id||e.entity_type==="daily_report"?{label:"打开日报运营",search:`?tab=daily-report-workbench&entity=${encodeURIComponent(na(e))}`}:e.service_id||e.audit_id||e.entity_type==="managed_service"||e.entity_type==="audit"?{label:"打开处置台",search:`?tab=ops-workbench&entity=${encodeURIComponent(na(e))}`}:null}function JE({row:e,onClose:a}){if(!e)return s.jsx("aside",{style:Hy,children:s.jsx("div",{style:KE,children:"选择一行业务对象查看详情。"})});const l=e.business_view||e.payload?{business_view:e.business_view??null,payload:e.payload??null}:null,r=ZE(e);return s.jsxs("aside",{style:Hy,"aria-label":"业务视图详情",children:[s.jsxs("div",{className:"de-artifact-preview",children:[s.jsxs("div",{children:[s.jsx("strong",{children:mx(e)}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:a,title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:[`实体:${na(e)}`,`状态:${bt(e.status)}`,`同步:${bt(e.sync_status)}`,`Plan:${bt(e.plan_id)}`,`Task:${bt(e.task_id)}`,`Run:${bt(e.run_id)}`,`时间:${Cm(e)}`,e.sync_record_url?`Sync Record:${e.sync_record_url}`:"",e.summary?`摘要:${e.summary}`:""].filter(Boolean).join(` +`)}),r?s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",onClick:()=>{window.location.search=r.search},children:r.label}):null]}),l?s.jsxs("details",{className:"de-business-json",open:!0,children:[s.jsx("summary",{children:"JSON 详情"}),s.jsx("pre",{children:JSON.stringify(l,null,2)})]}):null]})}function FE({initialKind:e,focusEntityId:a}){const[l,r]=v.useState(()=>Yy(e)),[o,d]=v.useState({...Gy,entity:a||""}),[p,h]=v.useState(1),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState([]),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null);v.useEffect(()=>{r(Yy(e))},[e]),v.useEffect(()=>{a&&d(M=>({...M,entity:a}))},[a]);const K=v.useCallback(async()=>{O(!0),I(null);try{const M=await rN(l,VE(o,p));g(M.items??[]),S(M.total??0),z(M.source??null),k(ne=>ne.filter(B=>(M.items??[]).some(U=>Io(U).includes(B)))),D(ne=>ne?(M.items??[]).find(B=>na(B)===na(ne))??null:null)}catch(M){g([]),S(0),I(M instanceof Error?M.message:"业务视图加载失败")}finally{O(!1)}},[o,l,p]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>Math.max(1,Math.ceil(x/o.pageSize)),[o.pageSize,x]),P=l==="artifacts"||l==="artifact-groups",q=(M,ne)=>{d(B=>({...B,[M]:ne})),h(1)},ce=M=>{const ne=Io(M);k(B=>ne.length>0&&ne.every(le=>B.includes(le))?B.filter(le=>!ne.includes(le)):Array.from(new Set([...B,...ne])))},R=async M=>{if(!(N.length===0||A)){O(!0),Z(null),I(null);try{const ne=await Jv(N,M,{reason:"digital_employee_artifact_batch_governance"});if(!(ne!=null&&ne.ok)){Z((ne==null?void 0:ne.error)||"批量保留策略写入失败");return}Z(`批量保留策略已记录:${ne.recorded??0}/${ne.total??N.length}`),k([]),await K()}catch(ne){I(ne instanceof Error?ne.message:"批量保留策略写入失败")}finally{O(!1)}}};return s.jsx("div",{style:UE,children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"业务视图",children:s.jsx("span",{className:"de-card-meta-text",children:C||"qimingclaw 本地业务查询"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsx("div",{className:"de-segmented-tabs",role:"tablist","aria-label":"业务视图类型",children:fx.map(M=>s.jsx("button",{type:"button",className:M.id===l?"active":"",onClick:()=>{r(M.id),h(1),D(null)},children:M.label},M.id))}),s.jsxs("div",{style:IE,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"关键词 / 实体 ID"}),s.jsx("input",{value:o.entity,onChange:M=>q("entity",M.target.value),placeholder:"plan / task / artifact"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:o.status,onChange:M=>q("status",M.target.value),placeholder:"pending"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"同步状态"}),s.jsx("input",{value:o.syncStatus,onChange:M=>q("syncStatus",M.target.value),placeholder:"synced"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"起始时间"}),s.jsx("input",{type:"date",value:o.updatedFrom,onChange:M=>q("updatedFrom",M.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"结束时间"}),s.jsx("input",{type:"date",value:o.updatedTo,onChange:M=>q("updatedTo",M.target.value)})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{d(Gy),h(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),P?s.jsxs("div",{className:"de-business-actions","aria-label":"批量保留治理",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",N.length," 个产物"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_keep")},children:[s.jsx(jb,{size:14})," 批量保留"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_expire")},children:"批量标记到期"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>{R("mark_review")},children:"批量复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:N.length===0||A,onClick:()=>k([]),children:"清空选择"})]}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsxs("div",{style:HE,className:"de-business-layout",children:[s.jsx("section",{style:GE,"aria-label":"业务视图列表",children:s.jsxs("table",{style:YE,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[P?s.jsx("th",{children:"选择"}):null,s.jsx("th",{children:"标题 / 实体"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"关联"}),s.jsx("th",{children:"扩展字段"}),s.jsx("th",{children:"同步"}),s.jsx("th",{children:"更新时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:_.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:P?8:7,children:A?"加载中...":"暂无业务对象"})}):_.map(M=>s.jsxs("tr",{className:w&&na(w)===na(M)?"active":"",children:[P?s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:Io(M).length>0&&Io(M).every(ne=>N.includes(ne)),onChange:()=>ce(M),"aria-label":"选择产物"})}):null,s.jsxs("td",{children:[s.jsx("strong",{children:mx(M)}),s.jsx("code",{children:na(M)})]}),s.jsx("td",{children:s.jsx("span",{className:XE(M.status),children:bt(M.status)})}),s.jsxs("td",{children:[s.jsx("span",{children:bt(M.plan_id)}),s.jsx("span",{children:bt(M.task_id)}),s.jsx("span",{children:bt(M.run_id)})]}),s.jsx("td",{children:QE(M,l)}),s.jsx("td",{children:bt(M.sync_status)}),s.jsx("td",{children:Cm(M)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(M),title:"详情","aria-label":"详情",children:s.jsx(ed,{size:15})})})]},`${l}:${na(M)}:${Cm(M)}`))})]})}),s.jsx(JE,{row:w,onClose:()=>D(null)})]}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:o.pageSize,onChange:M=>q("pageSize",Number(M.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p<=1,onClick:()=>h(M=>Math.max(1,M-1)),children:"上一页"}),s.jsxs("span",{children:[p," / ",pe]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p>=pe,onClick:()=>h(M=>Math.min(pe,M+1)),children:"下一页"})]})]})]})})}const px=[{id:"all",label:"全部"},{id:"approval_conflict",label:"审批冲突"},{id:"route_intervention",label:"路由干预"},{id:"risk_approval",label:"风险审批"},{id:"action_notification",label:"待处理通知"}],PE={padding:"14px 18px"},WE={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(3, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},eA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},tA={width:"100%",minWidth:980,borderCollapse:"collapse"},Ky={entity:"",status:"",priority:"",pageSize:20};function Qy(e){return px.some(a=>a.id===e)&&e||"all"}function vi(e,a="-"){return e==null||e===""?a:String(e)}function nA(e){return vi(e.updated_at||e.occurred_at)}function aA(e){const a=String(e||"").toLowerCase();return["failed","rejected","blocked","error"].some(l=>a.includes(l))?"de-badge de-badge-danger":["pending","open","required","warn"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function lA(e){return e.kind==="approval_conflict"&&e.approval_id?String(e.approval_id):null}function iA(e){return e.kind==="route_intervention"&&e.route_decision_id?String(e.route_decision_id):null}function sA({initialKind:e,focusEntityId:a}){const[l,r]=v.useState(()=>Qy(e)),[o,d]=v.useState({...Ky,entity:a||""}),[p,h]=v.useState(1),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState([]),[N,k]=v.useState(null),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null);v.useEffect(()=>r(Qy(e)),[e]),v.useEffect(()=>{a&&d(U=>({...U,entity:a}))},[a]);const K=v.useCallback(async()=>{O(!0),Z(null);try{const U=await UC({kind:l,entity_id:o.entity.trim()||null,status:o.status.trim()||null,priority:o.priority.trim()||null,page_no:p,page_size:o.pageSize});g(U.items??[]),S(U.total??0),z(U.source??null),D(le=>le.filter(de=>(U.items??[]).some(Te=>Te.intervention_id===de)))}catch(U){g([]),S(0),Z(U instanceof Error?U.message:"介入台加载失败")}finally{O(!1)}},[o,l,p]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>_.filter(U=>w.includes(U.intervention_id)),[_,w]),P=v.useMemo(()=>pe.map(lA).filter(U=>!!U),[pe]),q=v.useMemo(()=>pe.map(iA).filter(U=>!!U),[pe]),ce=v.useMemo(()=>Math.max(1,Math.ceil(x/o.pageSize)),[o.pageSize,x]),R=(U,le)=>{d(de=>({...de,[U]:le})),h(1)},M=U=>{D(le=>le.includes(U.intervention_id)?le.filter(de=>de!==U.intervention_id):[...le,U.intervention_id])},ne=async U=>{var le;if(!(P.length===0||A)){O(!0),I(null),Z(null);try{const de=await kN(P,U,{actor:"digital_employee_operator"});if(!de.ok)throw new Error(de.error||((le=de.reason_codes)==null?void 0:le.join(", "))||"批量审批冲突处理失败");I(`批量审批冲突已记录:${de.recorded}/${de.total}`),D([]),await K()}catch(de){Z(de instanceof Error?de.message:"批量审批冲突处理失败")}finally{O(!1)}}},B=async U=>{var le;if(!(q.length===0||A)){O(!0),I(null),Z(null);try{const de=await BC(q,{decision:U,actor:"digital_employee_operator"});if(!de.ok)throw new Error(de.error||((le=de.reason_codes)==null?void 0:le.join(", "))||"批量路由干预处理失败");I(`批量路由干预已记录:${de.recorded}/${de.total}`),D([]),await K()}catch(de){Z(de instanceof Error?de.message:"批量路由干预处理失败")}finally{O(!1)}}};return s.jsxs("div",{style:PE,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"介入台",children:s.jsx("span",{className:"de-card-meta-text",children:C||"qimingclaw 人工介入运营台"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsx("div",{className:"de-segmented-tabs",role:"tablist","aria-label":"介入类型",children:px.map(U=>s.jsx("button",{type:"button",className:U.id===l?"active":"",onClick:()=>{r(U.id),h(1),D([])},children:U.label},U.id))}),s.jsxs("div",{style:WE,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"实体 ID"}),s.jsx("input",{value:o.entity,onChange:U=>R("entity",U.target.value),placeholder:"approval / route / task"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:o.status,onChange:U=>R("status",U.target.value),placeholder:"open"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"优先级"}),s.jsx("input",{value:o.priority,onChange:U=>R("priority",U.target.value),placeholder:"high"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:o.pageSize,onChange:U=>R("pageSize",Number(U.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{d(Ky),h(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"批量介入动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",w.length," 项"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:P.length===0||A,onClick:()=>{ne("keep_local")},children:[s.jsx(jb,{size:14})," 批量保留本地"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:P.length===0||A,onClick:()=>{ne("mark_reviewed")},children:"批量标记复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:q.length===0||A,onClick:()=>{B("mark_reviewed")},children:"批量标记已看"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:q.length===0||A,onClick:()=>{B("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:w.length===0||A,onClick:()=>D([]),children:"清空选择"})]}),te?s.jsx("p",{className:"de-inline-notice",children:te}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,s.jsx("section",{style:eA,"aria-label":"介入台列表",children:s.jsxs("table",{style:tA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"类型 / 标题"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"优先级"}),s.jsx("th",{children:"关联"}),s.jsx("th",{children:"原因"}),s.jsx("th",{children:"最近时间"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:_.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:A?"加载中...":"暂无介入事项"})}):_.map(U=>s.jsxs("tr",{className:w.includes(U.intervention_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:w.includes(U.intervention_id),onChange:()=>M(U),"aria-label":"选择介入事项"})}),s.jsxs("td",{children:[s.jsx("strong",{children:U.title}),s.jsx("code",{children:U.intervention_id})]}),s.jsx("td",{children:s.jsx("span",{className:aA(U.status),children:vi(U.status)})}),s.jsx("td",{children:vi(U.priority)}),s.jsxs("td",{children:[s.jsx("span",{children:vi(U.plan_id)}),s.jsx("span",{children:vi(U.task_id)}),s.jsx("span",{children:vi(U.run_id)})]}),s.jsx("td",{children:vi(U.reason||U.summary)}),s.jsx("td",{children:nA(U)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>k(U),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},U.intervention_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p<=1,onClick:()=>h(U=>Math.max(1,U-1)),children:"上一页"}),s.jsxs("span",{children:[p," / ",ce]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p>=ce,onClick:()=>h(U=>Math.min(ce,U+1)),children:"下一页"})]})]})]}),N?s.jsxs("div",{className:"de-artifact-preview","aria-label":"介入详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:N.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>k(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(N,null,2)})]}):null]})}const rA={padding:"14px 18px"},cA={display:"grid",gridTemplateColumns:"minmax(180px, 1fr) repeat(3, minmax(120px, 160px)) auto",gap:8,alignItems:"end",marginBottom:12},oA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},dA={width:"100%",minWidth:980,borderCollapse:"collapse"},Vy={query:"",category:"",status:"",pageSize:20};function ks(e,a="-"){return e==null||e===""?a:String(e)}function uA(e){const a=String(e||"").toLowerCase();return["archived","deleted","failed"].some(l=>a.includes(l))?"de-badge de-badge-danger":["review","pending"].some(l=>a.includes(l))?"de-badge de-badge-warning":"de-badge de-badge-info"}function fA({initialQuery:e,focusEntityId:a}){const[l,r]=v.useState({...Vy,query:e||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState(0),[x,S]=v.useState(null),[C,z]=v.useState([]),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null);v.useEffect(()=>{e&&r(q=>({...q,query:e}))},[e]);const ie=v.useCallback(async()=>{k(!0),I(null);try{const q=await IC({q:l.query.trim()||null,category:l.category.trim()||null,status:l.status.trim()||null,entity_id:a||null,page_no:o,page_size:l.pageSize});h(q.items??[]),g(q.total??0),S(q.source??null),z(ce=>ce.filter(R=>(q.items??[]).some(M=>M.memory_id===R)))}catch(q){h([]),g(0),I(q instanceof Error?q.message:"记忆治理加载失败")}finally{k(!1)}},[l,a,o]);v.useEffect(()=>{ie()},[ie]);const Z=v.useMemo(()=>Math.max(1,Math.ceil(_/l.pageSize)),[l.pageSize,_]),K=(q,ce)=>{r(R=>({...R,[q]:ce})),d(1)},pe=q=>{z(ce=>ce.includes(q.memory_id)?ce.filter(R=>R!==q.memory_id):[...ce,q.memory_id])},P=async q=>{var ce;if(!(C.length===0||N)){k(!0),O(null),I(null);try{const R=await HC(C,q,{actor:"digital_employee_operator"});if(!R.ok)throw new Error(R.error||((ce=R.reason_codes)==null?void 0:ce.join(", "))||"记忆治理操作失败");O(`记忆治理已记录:${R.recorded}/${R.total}`),z([]),await ie()}catch(R){I(R instanceof Error?R.message:"记忆治理操作失败")}finally{k(!1)}}};return s.jsxs("div",{style:rA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"记忆治理",children:s.jsx("span",{className:"de-card-meta-text",children:x||"qimingclaw 长期记忆治理"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:cA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"关键词"}),s.jsx("input",{value:l.query,onChange:q=>K("query",q.target.value),placeholder:"key / content"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"分类"}),s.jsx("input",{value:l.category,onChange:q=>K("category",q.target.value),placeholder:"fact"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:q=>K("status",q.target.value),placeholder:"active"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:l.pageSize,onChange:q=>K("pageSize",Number(q.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{ie()},title:"搜索","aria-label":"搜索",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{r(Vy),d(1)},title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"记忆批量治理",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",C.length," 条"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("archive")},children:[s.jsx(HS,{size:14})," 批量归档"]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("restore")},children:[s.jsx(ej,{size:14})," 批量恢复"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>{P("mark_reviewed")},children:"批量复核"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:C.length===0||N,onClick:()=>z([]),children:"清空选择"})]}),A?s.jsx("p",{className:"de-inline-notice",children:A}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsx("section",{style:oA,"aria-label":"记忆治理列表",children:s.jsxs("table",{style:dA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"Key / 内容"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"分类"}),s.jsx("th",{children:"重复候选"}),s.jsx("th",{children:"同步"}),s.jsx("th",{children:"更新时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:N?"加载中...":"暂无记忆"})}):p.map(q=>s.jsxs("tr",{className:C.includes(q.memory_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:C.includes(q.memory_id),onChange:()=>pe(q),"aria-label":"选择记忆"})}),s.jsxs("td",{children:[s.jsx("strong",{children:ks(q.key)}),s.jsx("code",{children:ks(q.content_preview)})]}),s.jsx("td",{children:s.jsx("span",{className:uA(q.governance_status),children:ks(q.governance_status)})}),s.jsx("td",{children:ks(q.category)}),s.jsx("td",{children:q.merge_candidate_count>0?`重复候选 ${q.merge_candidate_count}`:"-"}),s.jsx("td",{children:ks(q.sync_status)}),s.jsx("td",{children:ks(q.updated_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(q),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},q.memory_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",_," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(q=>Math.max(1,q-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",Z]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=Z,onClick:()=>d(q=>Math.min(Z,q+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"记忆详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.key}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)})]}):null]})}const mA={padding:"14px 18px"},pA={display:"grid",gridTemplateColumns:"repeat(6, minmax(120px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},_A={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},hA={width:"100%",minWidth:1040,borderCollapse:"collapse"},Xy={skillId:"",toolName:"",serverId:"",decision:"",category:"",status:"",pageSize:20};function Fa(e,a="-"){return e==null||e===""?a:String(e)}function gA(e){const a=String(e||"").toLowerCase();return a.includes("allow")||a.includes("accepted")?"允许":a.includes("reject")||a.includes("deny")||a.includes("blocked")?"拒绝":a.includes("observe")?"观察":Fa(e,"观察")}function Zy(e){const a=String(e||"").toLowerCase();return/reject|deny|blocked|failed|error/.test(a)?"de-badge de-badge-danger":/warn|review|pending|timeout/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function yA(e){const a=typeof e=="number"?e:Number(e);return!Number.isFinite(a)||a<=0?"-":a<.01?`$${a.toFixed(4)}`:`$${a.toFixed(2)}`}function bA({focusSkillId:e}){const[a,l]=v.useState({...Xy,skillId:e||""}),[r,o]=v.useState(1),[d,p]=v.useState([]),[h,_]=v.useState(0),[g,x]=v.useState(null),[S,C]=v.useState(null),[z,w]=v.useState(!1),[D,N]=v.useState(null);v.useEffect(()=>{e&&l(I=>({...I,skillId:e}))},[e]);const k=v.useCallback(async()=>{w(!0),N(null);try{const I=await GC({skill_id:a.skillId.trim()||null,tool_name:a.toolName.trim()||null,server_id:a.serverId.trim()||null,decision:a.decision.trim()||null,category:a.category.trim()||null,status:a.status.trim()||null,page_no:r,page_size:a.pageSize});p(I.items??[]),_(I.total??0),x(I.source??null)}catch(I){p([]),_(0),N(I instanceof Error?I.message:"技能审计加载失败")}finally{w(!1)}},[a,r]);v.useEffect(()=>{k()},[k]);const A=v.useMemo(()=>Math.max(1,Math.ceil(h/a.pageSize)),[a.pageSize,h]),O=(I,ie)=>{l(Z=>({...Z,[I]:ie})),o(1)},te=()=>{l({...Xy,skillId:e||""}),o(1)};return s.jsxs("div",{style:mA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"技能审计",children:s.jsx("span",{className:"de-card-meta-text",children:g||"技能调用、工具、sandbox 与 token/cost 审计"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:pA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"Skill"}),s.jsx("input",{value:a.skillId,onChange:I=>O("skillId",I.target.value),placeholder:"skill id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Tool"}),s.jsx("input",{value:a.toolName,onChange:I=>O("toolName",I.target.value),placeholder:"tool name"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Server"}),s.jsx("input",{value:a.serverId,onChange:I=>O("serverId",I.target.value),placeholder:"server id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"决策"}),s.jsx("input",{value:a.decision,onChange:I=>O("decision",I.target.value),placeholder:"允许 / 拒绝 / 观察"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"分类"}),s.jsx("input",{value:a.category,onChange:I=>O("category",I.target.value),placeholder:"tool_call_audit"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:a.status,onChange:I=>O("status",I.target.value),placeholder:"status"})]}),s.jsxs("div",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{k()},title:"筛选","aria-label":"筛选",children:s.jsx(ZS,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:te,title:"重置","aria-label":"重置",children:s.jsx(ln,{size:15})})]})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"技能审计筛选",children:[s.jsxs("span",{className:"de-card-meta-text",children:["共 ",h," 条"]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:a.pageSize,onChange:I=>O("pageSize",Number(I.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]})]}),D?s.jsx("p",{className:"de-inline-notice",children:D}):null,s.jsx("section",{style:_A,"aria-label":"技能审计列表",children:s.jsxs("table",{style:hA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"审计"}),s.jsx("th",{children:"决策"}),s.jsx("th",{children:"Skill / Tool"}),s.jsx("th",{children:"Server"}),s.jsx("th",{children:"风险"}),s.jsx("th",{children:"Token / 成本"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:d.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:8,children:z?"加载中...":"暂无技能审计记录"})}):d.map(I=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:Fa(I.category)}),s.jsx("code",{children:Fa(I.audit_id)})]}),s.jsx("td",{children:s.jsx("span",{className:Zy(I.decision||I.status),children:gA(I.decision||I.status)})}),s.jsxs("td",{children:[s.jsx("strong",{children:Fa(I.skill_id)}),s.jsx("code",{children:Fa(I.tool_name)})]}),s.jsx("td",{children:Fa(I.server_id)}),s.jsx("td",{children:s.jsx("span",{className:Zy(I.risk_level||I.status),children:Fa(I.risk_level||I.status)})}),s.jsxs("td",{children:[Fa(I.total_tokens,"0")," / ",yA(I.estimated_cost_usd)]}),s.jsx("td",{children:Fa(I.occurred_at||I.updated_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(I),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},I.audit_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:[r," / ",A]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r<=1,onClick:()=>o(I=>Math.max(1,I-1)),children:"上一页"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r>=A,onClick:()=>o(I=>Math.min(A,I+1)),children:"下一页"})]})]})]}),S?s.jsxs("div",{className:"de-artifact-preview","aria-label":"技能审计详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:S.category}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(S,null,2)})]}):null]})}const vA={padding:"14px 18px"},xA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},kA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},SA={width:"100%",minWidth:980,borderCollapse:"collapse"},jA={kind:"all",status:"",priority:"",entityId:"",pageSize:20};function Ho(e,a="-"){return e==null||e===""?a:String(e)}function wA(e){const a=String(e||"").toLowerCase();return/error|failed|stopped|degraded/.test(a)?"de-badge de-badge-danger":/warn|pending|review/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function CA({initialKind:e,focusEntityId:a}){const[l,r]=v.useState({...jA,kind:e||"all",entityId:a||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState(!1),[A,O]=v.useState(null),[te,I]=v.useState(null),ie=v.useCallback(async()=>{k(!0),I(null);try{const q=await YC({kind:l.kind==="all"?null:l.kind,status:l.status||null,priority:l.priority||null,entity_id:l.entityId||null,page_no:o,page_size:l.pageSize});h(q.items??[]),S(q.total??0),z(q.source??null),g(ce=>ce.filter(R=>(q.items??[]).some(M=>M.ops_id===R)))}catch(q){h([]),S(0),I(q instanceof Error?q.message:"处置台加载失败")}finally{k(!1)}},[l,o]);v.useEffect(()=>{ie()},[ie]);const Z=v.useMemo(()=>Math.max(1,Math.ceil(x/l.pageSize)),[l.pageSize,x]),K=(q,ce)=>{r(R=>({...R,[q]:ce})),d(1)},pe=q=>{g(ce=>ce.includes(q.ops_id)?ce.filter(R=>R!==q.ops_id):[...ce,q.ops_id])},P=async q=>{var ce;if(!(_.length===0||N)){k(!0),O(null),I(null);try{const R=await KC(_,q,{actor:"digital_employee_operator"});if(!R.ok)throw new Error(R.error||((ce=R.reason_codes)==null?void 0:ce.join(", "))||"处置动作失败");O(`处置台已记录:${R.recorded}/${R.total}`),g([]),await ie()}catch(R){I(R instanceof Error?R.message:"处置动作失败")}finally{k(!1)}}};return s.jsxs("div",{style:vA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"处置台",children:s.jsx("span",{className:"de-card-meta-text",children:C||"诊断、服务、同步和策略处置"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:xA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"类型"}),s.jsxs("select",{value:l.kind,onChange:q=>K("kind",q.target.value),children:[s.jsx("option",{value:"all",children:"全部"}),s.jsx("option",{value:"diagnostic",children:"诊断"}),s.jsx("option",{value:"service",children:"服务"}),s.jsx("option",{value:"sync",children:"同步"}),s.jsx("option",{value:"policy",children:"策略"}),s.jsx("option",{value:"audit",children:"审计"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:q=>K("status",q.target.value),placeholder:"error"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"优先级"}),s.jsx("input",{value:l.priority,onChange:q=>K("priority",q.target.value),placeholder:"warn"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:l.entityId,onChange:q=>K("entityId",q.target.value),placeholder:"service / policy"})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{ie()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"处置台批量动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",_.length," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("mark_reviewed")},children:"批量标记已看"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("retry_policy_pull")},children:"策略重拉"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||N,onClick:()=>{P("safe_restart_service")},children:[s.jsx(Pr,{size:14})," 安全重启"]})]}),A?s.jsx("p",{className:"de-inline-notice",children:A}):null,te?s.jsx("p",{className:"de-inline-notice",children:te}):null,s.jsx("section",{style:kA,"aria-label":"处置事项列表",children:s.jsxs("table",{style:SA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"事项"}),s.jsx("th",{children:"类型"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"建议"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:N?"加载中...":"暂无处置事项"})}):p.map(q=>s.jsxs("tr",{className:_.includes(q.ops_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:_.includes(q.ops_id),onChange:()=>pe(q),"aria-label":"选择处置事项"})}),s.jsxs("td",{children:[s.jsx("strong",{children:q.title}),s.jsx("code",{children:q.ops_id})]}),s.jsx("td",{children:Ho(q.kind)}),s.jsx("td",{children:s.jsx("span",{className:wA(q.status||q.priority),children:Ho(q.status)})}),s.jsx("td",{children:Ho(q.recommended_action)}),s.jsx("td",{children:Ho(q.updated_at||q.occurred_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(q),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},q.ops_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(q=>Math.max(1,q-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",Z]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=Z,onClick:()=>d(q=>Math.min(Z,q+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"处置详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)})]}):null]})}const NA={padding:"14px 18px"},EA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},AA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},TA={width:"100%",minWidth:980,borderCollapse:"collapse"},RA={kind:"all",status:"",level:"",entityId:"",pageSize:20};function Go(e,a="-"){return e==null||e===""?a:String(e)}function Jy(e){const a=String(e||"").toLowerCase();return/error|failed/.test(a)?"de-badge de-badge-danger":/warn|action|unread/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function $A({initialKind:e,focusEntityId:a}){const[l,r]=v.useState({...RA,kind:e||"all",entityId:a||""}),[o,d]=v.useState(1),[p,h]=v.useState([]),[_,g]=v.useState([]),[x,S]=v.useState(0),[C,z]=v.useState(null),[w,D]=v.useState(null),[N,k]=v.useState(""),[A,O]=v.useState(!1),[te,I]=v.useState(null),[ie,Z]=v.useState(null),K=v.useCallback(async()=>{O(!0),Z(null);try{const M=await QC({kind:l.kind==="all"?null:l.kind,status:l.status||null,level:l.level||null,entity_id:l.entityId||null,page_no:o,page_size:l.pageSize});h(M.items??[]),S(M.total??0),z(M.source??null),g(ne=>ne.filter(B=>(M.items??[]).some(U=>U.notification_id===B)))}catch(M){h([]),S(0),Z(M instanceof Error?M.message:"通知运营加载失败")}finally{O(!1)}},[l,o]);v.useEffect(()=>{K()},[K]);const pe=v.useMemo(()=>Math.max(1,Math.ceil(x/l.pageSize)),[l.pageSize,x]),P=(M,ne)=>{r(B=>({...B,[M]:ne})),d(1)},q=M=>{g(ne=>ne.includes(M.notification_id)?ne.filter(B=>B!==M.notification_id):[...ne,M.notification_id])},ce=async M=>{var ne;if(!((M==="mark_read"||M==="dismiss")&&_.length===0)){O(!0),I(null),Z(null);try{const B=await VC(_,M,{actor:"digital_employee_operator"});if(!B.ok)throw new Error(B.error||((ne=B.reason_codes)==null?void 0:ne.join(", "))||"通知运营操作失败");I(M==="open_desktop_settings"?"已请求打开系统设置。":`通知运营已记录:${B.recorded}/${B.total}`),M!=="open_desktop_settings"&&g([]),await K()}catch(B){Z(B instanceof Error?B.message:"通知运营操作失败")}finally{O(!1)}}},R=async()=>{if(!(!(w!=null&&w.notification_id)||!N.trim())){O(!0);try{await Vv(w.notification_id,N.trim()),I("回复已记录。"),k(""),await K()}catch(M){Z(M instanceof Error?M.message:"回复失败")}finally{O(!1)}}};return s.jsxs("div",{style:NA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"通知运营",children:s.jsx("span",{className:"de-card-meta-text",children:C||"Inbox 运营视图"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:EA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"类型"}),s.jsx("input",{value:l.kind,onChange:M=>P("kind",M.target.value||"all"),placeholder:"all / need_input"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:l.status,onChange:M=>P("status",M.target.value),placeholder:"unread"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"等级"}),s.jsx("input",{value:l.level,onChange:M=>P("level",M.target.value),placeholder:"action"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:l.entityId,onChange:M=>P("entityId",M.target.value),placeholder:"notification id"})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{K()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-business-actions","aria-label":"通知批量动作",children:[s.jsxs("span",{className:"de-card-meta-text",children:["已选择 ",_.length," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||A,onClick:()=>{ce("mark_read")},children:"批量已读"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:_.length===0||A,onClick:()=>{ce("dismiss")},children:"批量忽略"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:A,onClick:()=>{ce("pull_updates")},children:"拉取通知"}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:A,onClick:()=>{ce("open_desktop_settings")},children:[s.jsx(nj,{size:14})," 打开系统设置"]})]}),te?s.jsx("p",{className:"de-inline-notice",children:te}):null,ie?s.jsx("p",{className:"de-inline-notice",children:ie}):null,s.jsx("section",{style:AA,"aria-label":"通知运营列表",children:s.jsxs("table",{style:TA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"选择"}),s.jsx("th",{children:"通知"}),s.jsx("th",{children:"类型"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"等级"}),s.jsx("th",{children:"时间"}),s.jsx("th",{children:"详情"})]})}),s.jsx("tbody",{children:p.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:A?"加载中...":"暂无通知"})}):p.map(M=>s.jsxs("tr",{className:_.includes(M.notification_id)?"active":"",children:[s.jsx("td",{children:s.jsx("input",{type:"checkbox",checked:_.includes(M.notification_id),onChange:()=>q(M),"aria-label":"选择通知"})}),s.jsxs("td",{children:[s.jsx("strong",{children:M.title}),s.jsx("code",{children:M.notification_id})]}),s.jsx("td",{children:Go(M.kind)}),s.jsx("td",{children:s.jsx("span",{className:Jy(M.status),children:Go(M.status)})}),s.jsx("td",{children:s.jsx("span",{className:Jy(M.priority),children:Go(M.priority)})}),s.jsx("td",{children:Go(M.updated_at||M.occurred_at)}),s.jsx("td",{children:s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{D(M),k("")},title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})})})]},M.notification_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",x," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o<=1,onClick:()=>d(M=>Math.max(1,M-1)),children:"上一页"}),s.jsxs("span",{children:[o," / ",pe]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o>=pe,onClick:()=>d(M=>Math.min(pe,M+1)),children:"下一页"})]})]})]}),w?s.jsxs("div",{className:"de-artifact-preview","aria-label":"通知详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:w.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>D(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(w,null,2)}),s.jsx("textarea",{value:N,onChange:M=>k(M.target.value),placeholder:"回复单条通知"}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:!N.trim()||A,onClick:()=>{R()},children:"回复"})]}):null]})}const DA={padding:"14px 18px"},zA={display:"grid",gridTemplateColumns:"repeat(4, minmax(130px, 1fr)) auto",gap:8,alignItems:"end",marginBottom:12},MA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},OA={width:"100%",minWidth:1020,borderCollapse:"collapse"},qA={date:"",status:"",entityId:"",pageSize:20};function Yr(e,a="-"){return e==null||e===""?a:String(e)}function LA(e){const a=String(e||"").toLowerCase();return/failed|error|pending/.test(a)?"de-badge de-badge-warning":(/confirmed|sent|requested|ready/.test(a),"de-badge de-badge-info")}function BA({focusEntityId:e}){const[a,l]=v.useState({...qA,entityId:e||""}),[r,o]=v.useState(1),[d,p]=v.useState([]),[h,_]=v.useState(0),[g,x]=v.useState(null),[S,C]=v.useState(null),[z,w]=v.useState(!1),[D,N]=v.useState(null),[k,A]=v.useState(null),O=v.useCallback(async()=>{w(!0),A(null);try{const K=await XC({date:a.date||null,status:a.status||null,entity_id:a.entityId||null,page_no:r,page_size:a.pageSize});p(K.items??[]),_(K.total??0),x(K.source??null)}catch(K){p([]),_(0),A(K instanceof Error?K.message:"日报运营加载失败")}finally{w(!1)}},[a,r]);v.useEffect(()=>{O()},[O]);const te=v.useMemo(()=>Math.max(1,Math.ceil(h/a.pageSize)),[a.pageSize,h]),I=(K,pe)=>{l(P=>({...P,[K]:pe})),o(1)},ie=async K=>{w(!0),N(null),A(null);try{await ql({action:"generate_daily_report",date:(K==null?void 0:K.date)||a.date||void 0,duty_ids:[]}),N("日报已生成。"),await O()}catch(pe){A(pe instanceof Error?pe.message:"生成日报失败")}finally{w(!1)}},Z=async(K,pe)=>{w(!0),N(null),A(null);try{await Zv({reportId:K.report_id,action:pe,status:pe==="send"?"sent":pe==="confirm"?"confirmed":"approval_requested",actor:"digital_employee_operator",message:"daily_report_workbench_action_recorded"}),N(pe==="send"?"发送记录已写入。":pe==="confirm"?"确认回执已记录。":"请求审批已记录。"),await O()}catch(P){A(P instanceof Error?P.message:"日报动作失败")}finally{w(!1)}};return s.jsxs("div",{style:DA,children:[s.jsxs(gn,{children:[s.jsx(Nn,{title:"日报运营",children:s.jsx("span",{className:"de-card-meta-text",children:g||"日报交付运营视图"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:zA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"日期"}),s.jsx("input",{type:"date",value:a.date,onChange:K=>I("date",K.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"状态"}),s.jsx("input",{value:a.status,onChange:K=>I("status",K.target.value),placeholder:"ready"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"实体"}),s.jsx("input",{value:a.entityId,onChange:K=>I("entityId",K.target.value),placeholder:"report id"})]}),s.jsxs("label",{children:[s.jsx("span",{children:"每页"}),s.jsxs("select",{value:a.pageSize,onChange:K=>I("pageSize",Number(K.target.value)||20),children:[s.jsx("option",{value:10,children:"10"}),s.jsx("option",{value:20,children:"20"}),s.jsx("option",{value:50,children:"50"})]})]}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>{O()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsx("div",{className:"de-business-actions","aria-label":"日报运营动作",children:s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:z,onClick:()=>{ie()},children:"生成日报"})}),D?s.jsx("p",{className:"de-inline-notice",children:D}):null,k?s.jsx("p",{className:"de-inline-notice",children:k}):null,s.jsx("section",{style:MA,"aria-label":"日报运营列表",children:s.jsxs("table",{style:OA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"日报"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"发送"}),s.jsx("th",{children:"确认"}),s.jsx("th",{children:"审批"}),s.jsx("th",{children:"产物"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:d.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:z?"加载中...":"暂无日报记录"})}):d.map(K=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:K.title}),s.jsxs("code",{children:[K.date," · ",K.report_id]})]}),s.jsx("td",{children:s.jsx("span",{className:LA(K.status),children:Yr(K.status)})}),s.jsx("td",{children:Yr(K.delivery_status)}),s.jsx("td",{children:Yr(K.confirmation_status)}),s.jsx("td",{children:Yr(K.approval_status)}),s.jsx("td",{children:Yr(K.artifact_count,"0")}),s.jsxs("td",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(K),title:"详情","aria-label":"详情",children:s.jsx(tl,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"send")},title:"记录发送","aria-label":"记录发送",children:s.jsx(Sb,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"confirm")},title:"确认回执","aria-label":"确认回执",children:s.jsx(kb,{size:15})}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:z,onClick:()=>{Z(K,"request_approval")},title:"请求审批","aria-label":"请求审批",children:s.jsx(Pr,{size:15})})]})]},K.report_id))})]})}),s.jsxs("div",{className:"de-business-pagination",children:[s.jsxs("span",{children:["共 ",h," 条"]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r<=1,onClick:()=>o(K=>Math.max(1,K-1)),children:"上一页"}),s.jsxs("span",{children:[r," / ",te]}),s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:r>=te,onClick:()=>o(K=>Math.min(te,K+1)),children:"下一页"})]})]})]}),S?s.jsxs("div",{className:"de-artifact-preview","aria-label":"日报运营详情",children:[s.jsxs("div",{children:[s.jsx("strong",{children:S.title}),s.jsx("button",{type:"button",className:"de-icon-btn",onClick:()=>C(null),title:"关闭","aria-label":"关闭",children:s.jsx(ka,{size:15})})]}),s.jsx("pre",{children:JSON.stringify(S,null,2)})]}):null]})}const UA={padding:"14px 18px"},IA={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(280px, 1fr))",gap:12},nm={border:"1px solid var(--de-glass-border-lighter)",borderRadius:8,padding:12,display:"grid",gap:10};function am(e,a="-"){return e==null||e===""?a:String(e)}function HA(e){const a=String(e||"").toLowerCase();return/error|failed|disabled/.test(a)?"de-badge de-badge-danger":/pull|pending|remote/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function GA(){const[e,a]=v.useState([]),[l,r]=v.useState(null),[o,d]=v.useState(null),[p,h]=v.useState(!1),[_,g]=v.useState(null),[x,S]=v.useState(null),C=v.useCallback(async()=>{h(!0),S(null);try{const k=await lN();a(k.items??[]),r(k.plan_step_dispatch_policy),d(k.risk_approval_policy)}catch(k){a([]),S(k instanceof Error?k.message:"策略中心加载失败")}finally{h(!1)}},[]);v.useEffect(()=>{C()},[C]);const z=async()=>{h(!0),g(null),S(null);try{const k=await iN();if(!k.ok)throw new Error(k.items.map(A=>A.error).filter(Boolean).join(", ")||"批量拉取策略失败");g(`批量拉取策略完成:${k.pulled}/${k.total}`),await C()}catch(k){S(k instanceof Error?k.message:"批量拉取策略失败")}finally{h(!1)}},w=async k=>{if(!l)return;const A=await aN(k);r(A),g("派发策略已保存。"),await C()},D=async k=>{if(!o)return;const A=await Kv(k);d(A),g("风险审批策略已保存。"),await C()},N=(k,A)=>{D({[k]:A.split(",").map(O=>O.trim()).filter(Boolean)})};return s.jsx("div",{style:UA,children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"策略中心",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:p,onClick:()=>{z()},children:"批量拉取策略"}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:p,onClick:()=>{C()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-card-body",children:[_?s.jsx("p",{className:"de-inline-notice",children:_}):null,x?s.jsx("p",{className:"de-inline-notice",children:x}):null,s.jsx("div",{style:IA,children:e.map(k=>s.jsxs("section",{style:nm,children:[s.jsx("strong",{children:k.title}),s.jsx("span",{className:HA(k.status),children:k.status}),s.jsx("small",{children:am(k.summary)}),s.jsxs("small",{children:["source: ",am(k.source)," · pulled: ",am(k.last_pulled_at)]}),k.last_pull_error?s.jsx("small",{children:k.last_pull_error}):null]},k.policy_id))}),l?s.jsxs("section",{style:nm,children:[s.jsx("h3",{className:"de-settings-heading",children:"派发策略"}),s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:l.enabled?"true":"false",onChange:k=>{w({enabled:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"max_per_sweep"}),s.jsx("input",{type:"number",min:1,max:10,value:l.max_per_sweep,onChange:k=>{w({max_per_sweep:Number(k.target.value)||1})}})]}),s.jsxs("label",{children:[s.jsx("span",{children:"auto_dispatch_ready_steps"}),s.jsxs("select",{value:l.auto_dispatch_ready_steps?"true":"false",onChange:k=>{w({auto_dispatch_ready_steps:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]})]}):null,o?s.jsxs("section",{style:nm,children:[s.jsx("h3",{className:"de-settings-heading",children:"风险审批策略"}),s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:o.enabled?"true":"false",onChange:k=>{D({enabled:k.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"approval_required_risk_levels"}),s.jsx("input",{value:o.approval_required_risk_levels.join(","),onChange:k=>N("approval_required_risk_levels",k.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"approval_required_actions"}),s.jsx("input",{value:o.approval_required_actions.join(","),onChange:k=>N("approval_required_actions",k.target.value)})]}),s.jsxs("label",{children:[s.jsx("span",{children:"auto_reject_actions"}),s.jsx("input",{value:o.auto_reject_actions.join(","),onChange:k=>N("auto_reject_actions",k.target.value)})]})]}):null]})]})})}const YA={padding:"14px 18px"},KA={overflow:"auto",border:"1px solid var(--de-glass-border-lighter)",borderRadius:8},QA={width:"100%",minWidth:980,borderCollapse:"collapse"},VA={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(180px, 1fr))",gap:10,marginBottom:12};function Kr(e,a="-"){return e==null||e===""?a:String(e)}function XA(e){const a=String(e||"").toLowerCase();return/failed|error|deleted/.test(a)?"de-badge de-badge-danger":/paused|pending|skipped/.test(a)?"de-badge de-badge-warning":"de-badge de-badge-info"}function ZA(){const[e,a]=v.useState([]),[l,r]=v.useState({enabled:!1,catch_up_on_startup:!1,max_run_history:20}),[o,d]=v.useState(!1),[p,h]=v.useState(null),[_,g]=v.useState(null),x=v.useCallback(async()=>{d(!0),g(null);try{const N=await OC();a(N.items??[]),r(N.settings)}catch(N){a([]),g(N instanceof Error?N.message:"调度运营加载失败")}finally{d(!1)}},[]);v.useEffect(()=>{x()},[x]);const S=v.useMemo(()=>e.filter(N=>N.enabled).length,[e]),C=async N=>{d(!0);try{const k=await MC(N);r(k),h("调度设置已保存。"),await x()}catch(k){g(k instanceof Error?k.message:"调度设置保存失败")}finally{d(!1)}},z=async()=>{d(!0),h(null),g(null);try{const N=await gN();h(`立即检查调度完成:activated ${N.activated??0},skipped ${N.skipped??0}`),await x()}catch(N){g(N instanceof Error?N.message:"立即检查调度失败")}finally{d(!1)}},w=async N=>{d(!0);try{await $C(N.schedule_id,{enabled:!N.enabled}),h(N.enabled?"调度已暂停。":"调度已启用。"),await x()}catch(k){g(k instanceof Error?k.message:"调度启停失败")}finally{d(!1)}},D=async N=>{d(!0);try{await RC(N.schedule_id),h("调度已删除。"),await x()}catch(k){g(k instanceof Error?k.message:"删除调度失败")}finally{d(!1)}};return s.jsx("div",{style:YA,children:s.jsxs(gn,{children:[s.jsxs(Nn,{title:"调度运营",children:[s.jsxs("span",{className:"de-card-meta-text",children:["启用 ",S,"/",e.length]}),s.jsxs("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o,onClick:()=>{z()},children:[s.jsx(WS,{size:14})," 立即检查调度"]}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:o,onClick:()=>{x()},title:"刷新","aria-label":"刷新",children:s.jsx(ln,{size:15})})]}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("div",{style:VA,className:"de-business-toolbar",children:[s.jsxs("label",{children:[s.jsx("span",{children:"enabled"}),s.jsxs("select",{value:l.enabled?"true":"false",onChange:N=>{C({enabled:N.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"catch_up_on_startup"}),s.jsxs("select",{value:l.catch_up_on_startup?"true":"false",onChange:N=>{C({catch_up_on_startup:N.target.value==="true"})},children:[s.jsx("option",{value:"true",children:"true"}),s.jsx("option",{value:"false",children:"false"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"max_run_history"}),s.jsx("input",{type:"number",min:1,max:500,value:l.max_run_history,onChange:N=>{C({max_run_history:Number(N.target.value)||20})}})]})]}),p?s.jsx("p",{className:"de-inline-notice",children:p}):null,_?s.jsx("p",{className:"de-inline-notice",children:_}):null,s.jsx("section",{style:KA,"aria-label":"调度运营列表",children:s.jsxs("table",{style:QA,className:"de-business-table",children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"任务"}),s.jsx("th",{children:"状态"}),s.jsx("th",{children:"Cron"}),s.jsx("th",{children:"下次"}),s.jsx("th",{children:"最近运行"}),s.jsx("th",{children:"最近结果"}),s.jsx("th",{children:"操作"})]})}),s.jsx("tbody",{children:e.length===0?s.jsx("tr",{children:s.jsx("td",{colSpan:7,children:o?"加载中...":"暂无调度任务"})}):e.map(N=>s.jsxs("tr",{children:[s.jsxs("td",{children:[s.jsx("strong",{children:N.name}),s.jsx("code",{children:N.schedule_id})]}),s.jsx("td",{children:s.jsx("span",{className:XA(N.status),children:Kr(N.status)})}),s.jsx("td",{children:Kr(N.cron_expr)}),s.jsx("td",{children:Kr(N.next_run)}),s.jsx("td",{children:Kr(N.last_run)}),s.jsx("td",{children:Kr(N.last_status||N.latest_run_error)}),s.jsxs("td",{className:"de-business-actions",children:[s.jsx("button",{type:"button",className:"de-btn-secondary de-btn-sm",disabled:o,onClick:()=>{w(N)},children:N.enabled?"暂停":"启用"}),s.jsx("button",{type:"button",className:"de-icon-btn",disabled:o,onClick:()=>{D(N)},title:"删除","aria-label":"删除",children:s.jsx(wb,{size:15})})]})]},N.schedule_id))})]})})]})]})})}const JA=["sales","engineering","hr","finance","executive"],Nm="qimingclaw:digital-role-preferences",Em="sgrobot-role-preferences",Jr={workStart:"09:00",workEnd:"18:00",notification:"system",reportTime:"17:30",avatarStyle:"professional",reminderLevel:"important"},FA={compact:"紧凑",balanced:"均衡",presentation:"汇报"},PA=[{id:"medium",label:"中风险"},{id:"high",label:"高风险"},{id:"critical",label:"严重风险"}],Fy=[{id:"governance.run_schedule_now",label:"立即运行调度"},{id:"plan_step.dispatch_ready_steps",label:"派发 Ready 步骤"},{id:"managed_service.restart.fileServer",label:"重启文件服务"},{id:"artifact.access.open_location",label:"打开产物位置"}],Py={enabled:!0,approval_required_risk_levels:["high","critical"],approval_required_actions:[],auto_reject_actions:[],updated_at:null,source:"local",remote_updated_at:null,last_pulled_at:null,last_pull_error:null},Wy={display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:12},ba={display:"flex",flexDirection:"column",gap:6,border:"1px solid var(--de-glass-border-lighter)",borderRadius:10,padding:"12px 14px",background:"linear-gradient(180deg, rgba(244,250,255,0.82), rgba(235,246,255,0.58))"},yi={minHeight:34,borderRadius:8,border:"1px solid var(--de-glass-border-light)",background:"rgba(255,255,255,0.72)",color:"var(--de-text-primary)",padding:"0 10px"};function WA(){try{const e=localStorage.getItem(Nm)??localStorage.getItem(Em);return e?{...Jr,...JSON.parse(e)}:Jr}catch{return Jr}}function eT(e){return!e||typeof e!="object"||Array.isArray(e)?Jr:{...Jr,...e}}function tT(){const{role:e,profile:a,setRole:l}=rj(),[r,o]=v.useState(WA),[d,p]=v.useState(Py),[h,_]=v.useState(!1),g=v.useRef(null);v.useEffect(()=>()=>{g.current&&clearTimeout(g.current)},[]),v.useEffect(()=>{let k=!1;return Cb().then(A=>{if(k||!(A!=null&&A.rolePreferences))return;const O=eT(A.rolePreferences);o(O);try{localStorage.setItem(Nm,JSON.stringify(O)),localStorage.removeItem(Em)}catch{}}),()=>{k=!0}},[]),v.useEffect(()=>{let k=!1;return Yv().then(A=>{k||p(A)}).catch(()=>{k||p(Py)}),()=>{k=!0}},[]);const x=()=>{_(!0),g.current&&clearTimeout(g.current),g.current=setTimeout(()=>_(!1),2e3)},S=k=>{o(k);try{localStorage.setItem(Nm,JSON.stringify(k)),localStorage.removeItem(Em)}catch{}Nb({rolePreferences:k},{action:"update_role_preferences",metadata:{preferences:k}}),x()},C=(k,A)=>{S({...r,[k]:A})},z=k=>{l(k),x()},w=k=>{const A={...d,...k};p(A),Kv(k).then(O=>p(O)).catch(()=>p(d)),x()},D=k=>{const A=new Set(d.approval_required_risk_levels);A.has(k)?A.delete(k):A.add(k),w({approval_required_risk_levels:Array.from(A)})},N=(k,A)=>{const O=new Set(d[k]);O.has(A)?O.delete(A):O.add(A),w({[k]:Array.from(O)})};return s.jsx("div",{style:{padding:"14px 18px"},children:s.jsxs(gn,{children:[s.jsx(Nn,{title:"角色偏好",children:h&&s.jsx("span",{className:"de-card-meta-text",children:"已保存"})}),s.jsxs("div",{className:"de-card-body",children:[s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"数字员工角色"}),s.jsx("p",{className:"de-settings-desc",children:"选择日常协作身份,数字员工会按你的岗位重点调整提醒和汇总口径。"}),s.jsx("div",{className:"de-role-grid",children:JA.map(k=>s.jsxs("button",{className:`de-role-card ${e===k?"active":""}`,onClick:()=>z(k),children:[s.jsx("span",{className:"de-role-label",children:jm(Wr[k].labelKey)}),s.jsxs("span",{className:"de-role-density",children:[FA[Wr[k].density]??"均衡","视图"]})]},k))})]}),s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"工作偏好"}),s.jsxs("div",{style:Wy,children:[s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"工作开始时间"}),s.jsx("input",{style:yi,type:"time",value:r.workStart,onChange:k=>C("workStart",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"工作结束时间"}),s.jsx("input",{style:yi,type:"time",value:r.workEnd,onChange:k=>C("workEnd",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"默认日报时间"}),s.jsx("input",{style:yi,type:"time",value:r.reportTime,onChange:k=>C("reportTime",k.target.value)})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"通知方式"}),s.jsxs("select",{style:yi,value:r.notification,onChange:k=>C("notification",k.target.value),children:[s.jsx("option",{value:"system",children:"系统通知"}),s.jsx("option",{value:"email",children:"邮件提醒"}),s.jsx("option",{value:"silent",children:"只在页面显示"})]})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"数字员工形象偏好"}),s.jsxs("select",{style:yi,value:r.avatarStyle,onChange:k=>C("avatarStyle",k.target.value),children:[s.jsx("option",{value:"professional",children:"专业稳重"}),s.jsx("option",{value:"friendly",children:"亲和协作"}),s.jsx("option",{value:"concise",children:"简洁高效"})]})]}),s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"任务提醒偏好"}),s.jsxs("select",{style:yi,value:r.reminderLevel,onChange:k=>C("reminderLevel",k.target.value),children:[s.jsx("option",{value:"important",children:"只提醒重要事项"}),s.jsx("option",{value:"all",children:"所有进展都提醒"}),s.jsx("option",{value:"quiet",children:"尽量少打扰"})]})]})]})]}),s.jsxs("section",{className:"de-settings-section",children:[s.jsx("h3",{className:"de-settings-heading",children:"风险审批策略"}),s.jsx("p",{className:"de-settings-desc",children:"调整客户端高风险动作在执行前是否需要人工审批,或直接拒绝;更完整的派发、路由和技能策略可在策略中心统一查看。"}),s.jsxs("div",{style:Wy,children:[s.jsxs("label",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"启用策略"}),s.jsxs("select",{style:yi,value:d.enabled?"enabled":"disabled",onChange:k=>w({enabled:k.target.value==="enabled"}),children:[s.jsx("option",{value:"enabled",children:"启用"}),s.jsx("option",{value:"disabled",children:"关闭"})]})]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"按风险等级审批"}),PA.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.approval_required_risk_levels.includes(k.id),onChange:()=>D(k.id)}),s.jsx("span",{children:k.label})]},k.id))]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"指定动作需审批"}),Fy.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.approval_required_actions.includes(k.id),onChange:()=>N("approval_required_actions",k.id)}),s.jsx("span",{children:k.label})]},k.id))]}),s.jsxs("div",{style:ba,children:[s.jsx("span",{className:"de-role-label",children:"指定动作直接拒绝"}),Fy.map(k=>s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:8},children:[s.jsx("input",{type:"checkbox",checked:d.auto_reject_actions.includes(k.id),onChange:()=>N("auto_reject_actions",k.id)}),s.jsx("span",{children:k.label})]},k.id))]})]})]}),s.jsxs("details",{className:"de-settings-section",style:{marginBottom:0},children:[s.jsx("summary",{className:"de-settings-heading",style:{cursor:"pointer"},children:"高级技术设置"}),s.jsxs("p",{className:"de-settings-desc",children:["默认隐藏,仅供技术人员排查使用。当前角色刷新阈值:",Math.round(a.staleDataThresholdMs/1e3)," 秒。"]})]})]})]})})}const _x=[{id:"home",label:"首页"},{id:"missions",label:"任务中心"},{id:"skills",label:"技能库"},{id:"reports",label:"日报"},{id:"business",label:"业务视图"},{id:"interventions",label:"介入台"},{id:"memory-governance",label:"记忆治理"},{id:"skill-audit",label:"技能审计"},{id:"ops-workbench",label:"处置台"},{id:"notification-workbench",label:"通知运营"},{id:"daily-report-workbench",label:"日报运营"},{id:"policy-center",label:"策略中心"},{id:"scheduler-workbench",label:"调度运营"},{id:"settings",label:"设置"}],nT="qimingclaw:digital-close",aT=[{id:"info",label:"消息"},{id:"warn",label:"提醒"},{id:"error",label:"异常"},{id:"action",label:"待处理"}],lT=[{id:"task_finished",label:"任务完成"},{id:"task_failed",label:"任务异常"},{id:"need_approval",label:"审批"},{id:"need_input",label:"输入"},{id:"task_progress",label:"进度"}],lm={enabled:!0,desktop_enabled:!0,muted_kinds:[],muted_levels:[],updated_at:null},hx="qimingclaw:digital-desktop-notified:v1",iT=new Set(["action","warn","error"]);function gx(e){return!!(e&&_x.some(a=>a.id===e))}function sT(e){const a=e.split("/").filter(Boolean),l=a.length>0?a[a.length-1]:null;return gx(l)?l:null}function eb(e,a){const l=new URLSearchParams(a),r=l.get("tab");return{tab:gx(r)?r:sT(e)??"home",date:l.get("date"),missionId:l.get("mission"),taskId:l.get("task"),skillId:l.get("skill"),reportSection:l.get("section"),businessKind:l.get("kind"),interventionKind:l.get("kind"),memoryQuery:l.get("q"),auditSkillId:l.get("skill_id"),opsKind:l.get("kind"),notificationKind:l.get("kind"),entityId:l.get("entity")}}function rT({target:e,onNavigate:a}){switch(e.tab){case"home":return s.jsx(T2,{onNavigate:a});case"missions":return s.jsx(hE,{focusMissionId:e.missionId,focusTaskId:e.taskId,focusDate:e.date});case"skills":return s.jsx(CE,{focusSkillId:e.skillId,onNavigate:a});case"reports":return s.jsx(BE,{focusSection:e.reportSection});case"business":return s.jsx(FE,{initialKind:e.businessKind,focusEntityId:e.entityId});case"interventions":return s.jsx(sA,{initialKind:e.interventionKind,focusEntityId:e.entityId});case"memory-governance":return s.jsx(fA,{initialQuery:e.memoryQuery,focusEntityId:e.entityId});case"skill-audit":return s.jsx(bA,{focusSkillId:e.auditSkillId||e.skillId});case"ops-workbench":return s.jsx(CA,{initialKind:e.opsKind,focusEntityId:e.entityId});case"notification-workbench":return s.jsx($A,{initialKind:e.notificationKind,focusEntityId:e.entityId});case"daily-report-workbench":return s.jsx(BA,{focusEntityId:e.entityId});case"policy-center":return s.jsx(GA,{});case"scheduler-workbench":return s.jsx(ZA,{});case"settings":return s.jsx(tT,{})}}function cT(){if(window.parent&&window.parent!==window){const e=window.location.origin==="null"?"*":window.location.origin;window.parent.postMessage({type:nT},e);return}window.close()}function oT(e){return e==="action"?"待处理":e==="error"?"异常":e==="warn"?"提醒":"消息"}function dT(e){return e==="resolved"?"已解决":e==="dismissed"?"已忽略":e==="read"?"已读":"未读"}function uT(e){const a=new Date(e);return Number.isNaN(a.getTime())?e:new Intl.DateTimeFormat("zh-CN",{hour:"2-digit",minute:"2-digit"}).format(a)}function Am(e){return e?e==="notification_unavailable"?"系统桌面通知不可用或未授权":e==="notification_settings_unavailable"?"当前平台无法自动打开系统通知设置":e==="qimingclaw_bridge_unavailable"?"客户端通知桥接尚不可用":e:null}function tb(e){return Am(e.reason)??e.error??"通知未能发送"}function fT(){try{const e=window.localStorage.getItem(hx),a=e?JSON.parse(e):[];return new Set(Array.isArray(a)?a.filter(l=>typeof l=="string"):[])}catch{return new Set}}function mT(e){try{window.localStorage.setItem(hx,JSON.stringify(Array.from(e).slice(-300)))}catch{}}function pT(e,a){return!a.enabled||!a.desktop_enabled||e.status!=="unread"||!iT.has(e.level)||a.muted_levels.includes(e.level)?!1:!a.muted_kinds.includes(e.kind)}async function _T(e,a){const l=fT(),r=e.filter(d=>pT(d,a)&&!l.has(d.notification_id));return r.length===0?null:(r.forEach(d=>l.add(d.notification_id)),mT(l),(await Promise.all(r.slice(0,3).map(d=>Uv({notification_id:d.notification_id,title:d.title,body:d.body,level:d.level,kind:d.kind,status:d.status}).catch(p=>({ok:!1,shown:!1,error:p instanceof Error?p.message:String(p)}))))).find(d=>d.ok===!1||d.shown!==!0)??null)}function hT(){const e=ia(),a=Dm(),[l,r]=v.useState(()=>eb(e.pathname,e.search)),[o,d]=v.useState(!1),[p,h]=v.useState([]),[_,g]=v.useState(0),[x,S]=v.useState(!1),[C,z]=v.useState(!1),[w,D]=v.useState(!1),[N,k]=v.useState(lm),[A,O]=v.useState(null),[te,I]=v.useState(!1),[ie,Z]=v.useState(!1),[K,pe]=v.useState(!1),[P,q]=v.useState(null),[ce,R]=v.useState({}),M=v.useCallback(async()=>{I(!0);try{O(await eN())}catch(V){O({supported:!1,platform:"unknown",can_open_settings:!1,reason:V instanceof Error?V.message:String(V)})}finally{I(!1)}},[]),ne=v.useCallback(async()=>{S(!0);try{const[V,Ce,yt]=await Promise.all([ZC("all"),JC(),FC().catch(()=>lm)]);h(V),g(Ce),k(yt),_T(V,yt).then(He=>{He&&q({tone:"warning",message:"自动桌面通知发送失败",detail:tb(He)})})}catch{h([]),g(0),k(lm)}finally{S(!1)}},[]);v.useEffect(()=>{r(eb(e.pathname,e.search))},[e.pathname,e.search]),v.useEffect(()=>{ne()},[ne]),v.useEffect(()=>{w&&M()},[w,M]);const B=v.useCallback(V=>{r(V);const Ce=new URLSearchParams;V.tab!=="home"&&Ce.set("tab",V.tab),V.date&&Ce.set("date",V.date),V.missionId&&Ce.set("mission",V.missionId),V.taskId&&Ce.set("task",V.taskId),V.skillId&&Ce.set("skill",V.skillId),V.reportSection&&Ce.set("section",V.reportSection),V.businessKind&&Ce.set("kind",V.businessKind),V.interventionKind&&Ce.set("kind",V.interventionKind),V.memoryQuery&&Ce.set("q",V.memoryQuery),V.auditSkillId&&Ce.set("skill_id",V.auditSkillId),V.opsKind&&Ce.set("kind",V.opsKind),V.notificationKind&&Ce.set("kind",V.notificationKind),V.entityId&&Ce.set("entity",V.entityId),a({pathname:e.pathname,search:Ce.toString()?`?${Ce.toString()}`:""},{replace:!1})},[e.pathname,a]),U=v.useCallback(async V=>{await cN(V),await ne()},[ne]),le=v.useCallback(async V=>{await oN(V),await ne()},[ne]),de=v.useCallback(async V=>{const Ce=(ce[V]??"").trim();Ce&&(await Vv(V,Ce),R(yt=>({...yt,[V]:""})),await ne())},[ne,ce]),Te=v.useCallback(async()=>{z(!0);try{await WC()}finally{z(!1),await ne()}},[ne]),E=v.useCallback(async V=>{const Ce=await PC(V);k(Ce),await ne()},[ne]),J=v.useCallback(V=>{const Ce=new Set(N.muted_levels);Ce.has(V)?Ce.delete(V):Ce.add(V),E({muted_levels:Array.from(Ce)})},[N.muted_levels,E]),se=v.useCallback(V=>{const Ce=new Set(N.muted_kinds);Ce.has(V)?Ce.delete(V):Ce.add(V),E({muted_kinds:Array.from(Ce)})},[N.muted_kinds,E]),ue=v.useCallback(async()=>{Z(!0);try{const V=await Uv({notification_id:`desktop-notification-test-${Date.now()}`,title:"数字员工桌面通知测试",body:"如果看到这条通知,系统桌面通知入口已可用。",level:"info",kind:"task_progress",status:"unread"});q(V.ok!==!1&&V.shown===!0?{tone:"success",message:"测试桌面通知已发送",detail:null}:{tone:"warning",message:"测试桌面通知发送失败",detail:tb(V)}),await M()}catch(V){q({tone:"warning",message:"测试桌面通知发送失败",detail:V instanceof Error?V.message:String(V)})}finally{Z(!1)}},[M]),ve=v.useCallback(async()=>{pe(!0);try{const V=await tN();q(V.success?{tone:"success",message:"已打开系统设置",detail:null}:{tone:"warning",message:"无法打开系统设置",detail:Am(V.reason)??V.error??"当前平台不支持自动打开"}),await M()}catch(V){q({tone:"warning",message:"无法打开系统设置",detail:V instanceof Error?V.message:String(V)})}finally{pe(!1)}},[M]),Ee=(P==null?void 0:P.tone)==="warning"||(A==null?void 0:A.supported)===!1?"warning":"success",ae=(P==null?void 0:P.message)??(te?"正在检查桌面通知":(A==null?void 0:A.supported)===!1?"系统桌面通知不可用":"系统桌面通知可用"),he=(P==null?void 0:P.detail)??Am(A==null?void 0:A.reason)??(A!=null&&A.platform?`平台:${A.platform}`:null),Ie=(A==null?void 0:A.can_open_settings)===!0||Ee==="warning";return s.jsx(sj,{children:s.jsxs("div",{className:"de-shell",children:[s.jsx("header",{className:"de-header",children:s.jsxs("div",{className:"de-header-content",children:[s.jsxs("div",{className:"de-header-left",children:[s.jsx("div",{className:"de-header-accent-bar"}),s.jsx("h1",{className:"de-header-title",children:"智能数字人系统"})]}),s.jsx("div",{className:"de-header-center",children:_x.map(V=>s.jsx("button",{className:`de-nav-btn ${l.tab===V.id?"active":""}`,onClick:()=>B({tab:V.id}),children:s.jsx("span",{children:V.label})},V.id))}),s.jsxs("div",{className:"de-header-right",children:[s.jsx("span",{className:"de-header-welcome",children:"欢迎您,"}),s.jsx("span",{className:"de-header-username",children:"王琦"}),s.jsx("button",{type:"button",className:"de-header-icon",title:"消息",children:s.jsx(PS,{size:16})}),s.jsxs("div",{className:"de-notification-anchor",children:[s.jsxs("button",{type:"button",className:`de-header-icon ${o?"active":""}`,title:"通知",onClick:()=>{d(V=>!V),ne()},children:[s.jsx(YS,{size:16}),_>0&&s.jsx("span",{className:"de-notification-count",children:_>99?"99+":_})]}),o&&s.jsxs("div",{className:"de-notification-popover",children:[s.jsxs("div",{className:"de-notification-head",children:[s.jsxs("div",{className:"de-notification-head-title",children:[s.jsx("strong",{children:"通知"}),s.jsx("span",{children:_>0?`${_} 条未读`:"暂无未读"})]}),s.jsxs("div",{className:"de-notification-head-actions",children:[s.jsx("button",{type:"button",className:`de-header-icon de-notification-close ${C?"active":""}`,title:"同步通知",onClick:()=>{Te()},disabled:C,children:s.jsx(ln,{size:14})}),s.jsx("button",{type:"button",className:`de-header-icon de-notification-close ${w?"active":""}`,title:"通知设置",onClick:()=>D(V=>!V),children:s.jsx(tj,{size:14})}),s.jsx("button",{type:"button",className:"de-header-icon de-notification-close",title:"关闭",onClick:()=>d(!1),children:s.jsx(ka,{size:14})})]})]}),w&&s.jsxs("div",{className:"de-notification-preferences",children:[s.jsxs("label",{className:"de-notification-switch",children:[s.jsx("input",{type:"checkbox",checked:N.enabled,onChange:V=>{E({enabled:V.target.checked})}}),s.jsx("span",{children:"接收通知"})]}),s.jsxs("label",{className:"de-notification-switch",children:[s.jsx("input",{type:"checkbox",checked:N.desktop_enabled,onChange:V=>{E({desktop_enabled:V.target.checked})}}),s.jsx("span",{children:"桌面通知"})]}),s.jsxs("div",{className:`de-notification-desktop-status de-notification-desktop-status--${Ee}`,children:[s.jsxs("div",{className:"de-notification-desktop-copy",children:[s.jsx("span",{children:"桌面通知状态"}),s.jsx("strong",{children:ae}),he&&s.jsx("small",{children:he})]}),s.jsxs("div",{className:"de-notification-desktop-actions",children:[s.jsxs("button",{type:"button",className:"de-notification-desktop-btn",title:"测试桌面通知",onClick:()=>{ue()},disabled:ie,children:[s.jsx(GS,{size:13}),s.jsx("span",{children:"测试桌面通知"})]}),Ie&&s.jsxs("button",{type:"button",className:"de-notification-desktop-btn",title:"打开系统设置",onClick:()=>{ve()},disabled:K,children:[s.jsx(VS,{size:13}),s.jsx("span",{children:"打开系统设置"})]})]})]}),s.jsxs("div",{className:"de-notification-preference-group",children:[s.jsx("span",{children:"静音等级"}),s.jsx("div",{className:"de-notification-segment-row",children:aT.map(V=>s.jsx("button",{type:"button",className:N.muted_levels.includes(V.id)?"active":"",title:`${V.label}静音`,onClick:()=>J(V.id),children:V.label},V.id))})]}),s.jsxs("div",{className:"de-notification-preference-group",children:[s.jsx("span",{children:"静音类型"}),s.jsx("div",{className:"de-notification-toggle-grid",children:lT.map(V=>s.jsxs("label",{children:[s.jsx("input",{type:"checkbox",checked:N.muted_kinds.includes(V.id),onChange:()=>se(V.id)}),s.jsx("span",{children:V.label})]},V.id))})]})]}),s.jsxs("div",{className:"de-notification-list",children:[x&&s.jsx("div",{className:"de-notification-empty",children:"加载中"}),!x&&p.length===0&&s.jsx("div",{className:"de-notification-empty",children:"暂无通知"}),!x&&p.map(V=>s.jsxs("article",{className:`de-notification-item de-notification-item--${V.level}`,children:[s.jsxs("div",{className:"de-notification-item-head",children:[s.jsx("span",{className:"de-notification-level",children:oT(V.level)}),s.jsx("span",{className:"de-notification-time",children:uT(V.created_at)})]}),s.jsxs("div",{className:"de-notification-title-row",children:[s.jsx("h3",{children:V.title}),s.jsx("span",{children:dT(V.status)})]}),s.jsx("p",{children:V.body}),V.reply&&s.jsx("div",{className:"de-notification-reply",children:V.reply}),V.status!=="resolved"&&V.status!=="dismissed"&&s.jsxs("div",{className:"de-notification-actions",children:[V.status==="unread"&&s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"标记已读",onClick:()=>void U(V.notification_id),children:s.jsx(KS,{size:14})}),s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"忽略",onClick:()=>void le(V.notification_id),children:s.jsx(ka,{size:14})})]}),V.kind==="need_input"&&V.status!=="dismissed"&&s.jsxs("div",{className:"de-notification-reply-row",children:[s.jsx("input",{value:ce[V.notification_id]??"",onChange:Ce=>R(yt=>({...yt,[V.notification_id]:Ce.target.value}))}),s.jsx("button",{type:"button",className:"de-notification-icon-btn",title:"回复",onClick:()=>void de(V.notification_id),children:s.jsx(Qo,{size:14})})]})]},V.notification_id))]})]})]}),s.jsx("button",{type:"button",className:"de-header-icon de-header-close",title:"关闭",onClick:cT,children:s.jsx(ka,{size:17})})]})]})}),s.jsx("div",{className:"de-shell-body",children:s.jsx(rT,{target:l,onNavigate:B})})]})})}function gT(){return s.jsx(AS,{children:s.jsxs(iS,{children:[s.jsx(sm,{path:"/digital/*",element:s.jsx(hT,{})}),s.jsx(sm,{path:"*",element:s.jsx(aS,{to:"/digital",replace:!0})})]})})}s0.createRoot(document.getElementById("root")).render(s.jsx(Wk.StrictMode,{children:s.jsx(gT,{})})); diff --git a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html index 97e75743..6e92fbed 100644 --- a/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html +++ b/qimingclaw/crates/agent-electron-client/public/sgrobot-digital/index.html @@ -16,7 +16,7 @@ console.warn("[qimingclaw] digital employee auth bootstrap skipped", error); } - + diff --git a/qimingclaw/crates/agent-electron-client/scripts/check-digital-employee.js b/qimingclaw/crates/agent-electron-client/scripts/check-digital-employee.js index 1e3f6993..1a1aa0c5 100644 --- a/qimingclaw/crates/agent-electron-client/scripts/check-digital-employee.js +++ b/qimingclaw/crates/agent-electron-client/scripts/check-digital-employee.js @@ -1149,6 +1149,38 @@ function checkDigitalPolicySchedulerWorkbenches() { console.log("[DigitalEmployeeCheck] policy center and scheduler workbench hooks OK"); } +function checkDigitalAdminActionLoop() { + console.log("\n[DigitalEmployeeCheck] Verify admin action pull/apply loop hooks"); + const syncServicePath = path.join(packageRoot, "src", "main", "services", "digitalEmployee", "syncService.ts"); + const ipcPath = path.join(packageRoot, "src", "main", "ipc", "digitalEmployeeHandlers.ts"); + const preloadPath = path.join(packageRoot, "src", "preload", "webviewPerfBridge.ts"); + const adapterPath = path.join(packageRoot, "embedded", "sgrobot-digital", "src", "lib", "qimingclawAdapter.ts"); + const apiPath = path.join(packageRoot, "embedded", "sgrobot-digital", "src", "lib", "api.ts"); + const syncService = fs.readFileSync(syncServicePath, "utf8"); + const ipc = fs.readFileSync(ipcPath, "utf8"); + const preload = fs.readFileSync(preloadPath, "utf8"); + const adapter = fs.readFileSync(adapterPath, "utf8"); + const api = fs.readFileSync(apiPath, "utf8"); + const requiredSnippets = [ + [syncService, "pullAndApplyDigitalEmployeeAdminActions", "admin action pull service"], + [syncService, "admin_action_applied", "admin action applied event"], + [syncService, "admin_action_rejected", "admin action rejected event"], + [syncService, "admin_action_failed", "admin action failed event"], + [syncService, "cleanup_file_batch", "high risk cleanup rejection guard"], + [ipc, "digitalEmployee:pullAdminActions", "admin action IPC"], + [preload, "pullAdminActions", "admin action preload bridge"], + [adapter, "/api/digital-employee/admin/actions/pull", "admin action adapter endpoint"], + [api, "pullAdminActions", "embedded admin action API helper"], + ]; + const missing = requiredSnippets + .filter(([content, snippet]) => !content.includes(snippet)) + .map(([, , label]) => label); + if (missing.length > 0) { + throw new Error(`Missing admin action loop hooks: ${missing.join(", ")}`); + } + console.log("[DigitalEmployeeCheck] admin action pull/apply loop hooks OK"); +} + function checkLocalDatabaseSchema() { console.log("\n[DigitalEmployeeCheck] Verify local SQLite digital schema"); const dbPath = path.join(os.homedir(), ".qimingclaw", "qimingclaw.db"); @@ -1207,6 +1239,7 @@ function main() { checkDigitalMemoryGovernanceAudit(); checkDigitalOpsNotificationReportWorkbenches(); checkDigitalPolicySchedulerWorkbenches(); + checkDigitalAdminActionLoop(); checkLocalDatabaseSchema(); console.log("\n[DigitalEmployeeCheck] All checks passed"); } catch (error) { diff --git a/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.test.ts b/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.test.ts index a3f6cff2..494745f2 100644 --- a/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.test.ts +++ b/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.test.ts @@ -116,6 +116,7 @@ vi.mock("../services/digitalEmployee/syncService", () => ({ pullDigitalEmployeeApprovalUpdates: vi.fn(async () => ({ ok: true, applied: 1, ignored: 0 })), submitDigitalEmployeeApprovalDecision: vi.fn(async () => ({ ok: true, submitted_at: "2026-06-07T08:00:00.000Z" })), pullDigitalEmployeeNotificationUpdates: vi.fn(async () => ({ ok: true, applied: 1, ignored: 0 })), + pullAndApplyDigitalEmployeeAdminActions: vi.fn(async () => ({ ok: true, applied: 1, rejected: 0, failed: 0, ignored: 0 })), submitDigitalEmployeeNotificationAction: vi.fn(async () => ({ ok: true, submitted_at: "2026-06-07T08:00:00.000Z" })), })); @@ -481,6 +482,22 @@ describe("digital employee managed service actions", () => { expect(syncService.submitDigitalEmployeeNotificationAction).toHaveBeenCalledWith({}); }); + it("registers admin action pull through IPC", async () => { + const electron = await import("electron"); + const syncService = await import("../services/digitalEmployee/syncService"); + const { registerDigitalEmployeeHandlers } = await import("./digitalEmployeeHandlers"); + + registerDigitalEmployeeHandlers(createCtx()); + const calls = vi.mocked(electron.ipcMain.handle).mock.calls; + const pullCall = calls.find(([channel]) => channel === "digitalEmployee:pullAdminActions"); + expect(pullCall).toBeTruthy(); + + const result = await (pullCall?.[1] as (_event: unknown) => Promise)({}); + + expect(result).toMatchObject({ ok: true, applied: 1 }); + expect(syncService.pullAndApplyDigitalEmployeeAdminActions).toHaveBeenCalledWith({ force: true }); + }); + it("registers desktop notification requests through IPC", async () => { const electron = await import("electron"); const { diff --git a/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts b/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts index 94a60b06..dba83696 100644 --- a/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts +++ b/qimingclaw/crates/agent-electron-client/src/main/ipc/digitalEmployeeHandlers.ts @@ -73,6 +73,7 @@ import { pullDigitalEmployeeRouteDecisionPolicy, submitDigitalEmployeeApprovalDecision, pullDigitalEmployeeNotificationUpdates, + pullAndApplyDigitalEmployeeAdminActions, submitDigitalEmployeeNotificationAction, } from "../services/digitalEmployee/syncService"; import { listDigitalEmployeePlanTemplates } from "../services/digitalEmployee/planTemplateService"; @@ -240,6 +241,10 @@ export function registerDigitalEmployeeHandlers(ctx: HandlerContext): void { return pullDigitalEmployeeNotificationUpdates({ force: true }); }); + ipcMain.handle("digitalEmployee:pullAdminActions", async () => { + return pullAndApplyDigitalEmployeeAdminActions({ force: true }); + }); + ipcMain.handle("digitalEmployee:submitNotificationAction", async (_, input: unknown) => { return submitDigitalEmployeeNotificationAction(typeof input === "object" && input ? input as Record : {}); }); diff --git a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.test.ts b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.test.ts index 5645b678..f812f921 100644 --- a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.test.ts +++ b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.test.ts @@ -650,6 +650,73 @@ describe("digital employee sync service", () => { ])); }); + it("pulls low-risk admin actions, applies them locally, and reports results", async () => { + mockState.fetch + .mockResolvedValueOnce(jsonResponse({ + success: true, + data: { + records: [ + { + id: 10, + entity_type: "artifact", + entity_id: "artifact-1", + action: "mark_expire", + request_payload: { reason: "管理端标记到期" }, + }, + ], + }, + })) + .mockResolvedValueOnce(jsonResponse({ success: true, data: { ok: true } })); + + const { pullAndApplyDigitalEmployeeAdminActions } = await import("./syncService"); + const result = await pullAndApplyDigitalEmployeeAdminActions({ force: true }); + + expect(result).toMatchObject({ + ok: true, + endpoint: "https://manage.example.com/api/digital-employee/admin/actions/pending?device_id=device-001", + applied: 1, + rejected: 0, + failed: 0, + ignored: 0, + }); + expect(mockState.fetch).toHaveBeenNthCalledWith( + 1, + "https://manage.example.com/api/digital-employee/admin/actions/pending?device_id=device-001", + expect.objectContaining({ method: "GET" }), + ); + expect(mockState.fetch).toHaveBeenNthCalledWith( + 2, + "https://manage.example.com/api/digital-employee/admin/actions/10/result", + expect.objectContaining({ method: "POST", body: expect.stringContaining("admin_action_applied") }), + ); + expect(Array.from(mockState.db?.events.values() ?? [])).toEqual(expect.arrayContaining([ + expect.objectContaining({ kind: "artifact_retention_marked" }), + expect.objectContaining({ kind: "admin_action_applied" }), + ])); + }); + + it("rejects high-risk admin actions without changing local facts", async () => { + mockState.fetch + .mockResolvedValueOnce(jsonResponse({ + success: true, + data: { records: [{ id: 11, entity_type: "artifact", entity_id: "artifact-1", action: "cleanup_file_batch" }] }, + })) + .mockResolvedValueOnce(jsonResponse({ success: true, data: { ok: true } })); + + const { pullAndApplyDigitalEmployeeAdminActions } = await import("./syncService"); + const result = await pullAndApplyDigitalEmployeeAdminActions({ force: true }); + + expect(result).toMatchObject({ ok: true, applied: 0, rejected: 1, failed: 0 }); + expect(mockState.fetch).toHaveBeenNthCalledWith( + 2, + "https://manage.example.com/api/digital-employee/admin/actions/11/result", + expect.objectContaining({ method: "POST", body: expect.stringContaining("admin_action_rejected") }), + ); + expect(Array.from(mockState.db?.events.values() ?? [])).toEqual(expect.arrayContaining([ + expect.objectContaining({ kind: "admin_action_rejected" }), + ])); + }); + it.each([ ["skillPolicies"], ["policies"], diff --git a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts index 8668baf6..62984654 100644 --- a/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts +++ b/qimingclaw/crates/agent-electron-client/src/main/services/digitalEmployee/syncService.ts @@ -6,7 +6,12 @@ import { normalizePlanStepDispatchPolicy, normalizeRiskApprovalPolicy, normalizeRouteDecisionPolicy, + recordDigitalEmployeeArtifactLifecycle, + recordDigitalEmployeeDailyReportDelivery, + recordDigitalEmployeeRouteInterventionResolution, + recordDigitalEmployeeRuntimeEvent, readDigitalEmployeeUiState, + resolveDigitalEmployeeApprovalConflict, saveDigitalEmployeeUiState, upsertDigitalEmployeeApprovalFromRemote, type DigitalEmployeeApprovalUpdateInput, @@ -30,6 +35,7 @@ const DEFAULT_APPROVAL_UPDATES_PATH = "/api/digital-employee/approvals/updates"; const DEFAULT_APPROVAL_DECISIONS_PATH = "/api/digital-employee/approvals/decisions"; const DEFAULT_NOTIFICATION_UPDATES_PATH = "/api/digital-employee/notifications/updates"; const DEFAULT_NOTIFICATION_ACTIONS_PATH = "/api/digital-employee/notifications/actions"; +const DEFAULT_ADMIN_ACTIONS_PATH = "/api/digital-employee/admin/actions"; const DEFAULT_PLAN_STEP_DISPATCH_LEASE_PATH = "/api/digital-employee/leases/plan-step-dispatch"; const MANAGEMENT_SYNC_RECORD_PATH = "/system/content/content-digital-employee-sync"; @@ -41,6 +47,7 @@ const POLICY_PULL_THROTTLE_MS = 60_000; const MAX_RETRY_DELAY_MS = 30 * 60_000; const FAILED_RETRY_CANDIDATE_MULTIPLIER = 4; const ATTEMPT_HISTORY_RETENTION_MS = 30 * 24 * 60 * 60_000; +const HIGH_RISK_ADMIN_ACTIONS = new Set(["accept_remote_approval", "cleanup_file_batch", "start_service", "stop_service", "hard_interrupt"]); let syncTimer: ReturnType | null = null; let syncing = false; @@ -75,6 +82,7 @@ interface DigitalEmployeeSyncConfig { approvalDecisionsEndpoint: string | null; notificationUpdatesEndpoint: string | null; notificationActionsEndpoint: string | null; + adminActionsEndpoint: string | null; leaseEndpoint: string | null; clientKey: string | null; authToken: string | null; @@ -152,6 +160,26 @@ export interface DigitalEmployeeNotificationActionSubmitResult { error?: string | null; } +export interface DigitalEmployeeAdminActionPullResult { + ok: boolean; + skipped?: boolean; + endpoint: string | null; + pulled_at: string | null; + applied: number; + rejected: number; + failed: number; + ignored: number; + error?: string | null; +} + +interface DigitalEmployeeAdminActionItem { + id: string; + entityType: string; + entityId: string; + action: string; + requestPayload: Record; +} + export interface DigitalEmployeePlanStepRemoteLease { lease_id: string; state: "active" | "released" | "expired"; @@ -827,6 +855,64 @@ export async function submitDigitalEmployeeNotificationAction( } } +export async function pullAndApplyDigitalEmployeeAdminActions( + options: { force?: boolean } = {}, +): Promise { + const config = resolveSyncConfig(); + const endpoint = buildAdminActionsPendingEndpoint(config.adminActionsEndpoint); + const missingCredentials = missingSyncCredentialLabels(config); + const pulledAt = new Date().toISOString(); + if (!endpoint || missingCredentials.length > 0) { + return { + ok: false, + endpoint, + pulled_at: pulledAt, + applied: 0, + rejected: 0, + failed: 0, + ignored: 0, + error: !endpoint ? "management admin actions endpoint unavailable" : `missing credentials: ${missingCredentials.join(", ")}`, + }; + } + try { + const response = await fetchJsonWithAuth(config, endpoint); + const responseError = readSyncResponseError(response as SyncResponse); + if (responseError) throw new Error(responseError); + const actions = readRemoteAdminActions(response); + let applied = 0; + let rejected = 0; + let failed = 0; + let ignored = 0; + for (const action of actions) { + if (!action.id) { + ignored += 1; + continue; + } + const result = await applyDigitalEmployeeAdminAction(action); + if (result.status === "applied") applied += 1; + else if (result.status === "rejected") rejected += 1; + else failed += 1; + await postDigitalEmployeeAdminActionResult(config, action.id, result.status, result.reasonCodes); + } + recordDigitalEmployeeRuntimeEvent({ + kind: "admin_actions_pulled", + status: "completed", + message: "管理端远程运营动作已拉取", + payload: { action: "pull_admin_actions", endpoint, applied, rejected, failed, ignored, source: "management-api" }, + }); + return { ok: true, endpoint, pulled_at: pulledAt, applied, rejected, failed, ignored, error: null }; + } catch (error) { + const message = normalizeError(error); + recordDigitalEmployeeRuntimeEvent({ + kind: "admin_action_failed", + status: "failed", + message: "管理端远程运营动作拉取失败", + payload: { action: "pull_admin_actions", endpoint, error: message, source: "management-api" }, + }); + return { ok: false, endpoint, pulled_at: pulledAt, applied: 0, rejected: 0, failed: 0, ignored: 0, error: message }; + } +} + export async function acquireDigitalEmployeePlanStepRemoteLease( input: DigitalEmployeePlanStepRemoteLeaseAcquireInput, ): Promise { @@ -1066,6 +1152,11 @@ function resolveSyncConfig(): DigitalEmployeeSyncConfig { ? config.notificationActionsEndpoint.trim() : null; const notificationActionsEndpoint = notificationActionsEndpointOverride || buildEndpoint(serverHost, DEFAULT_NOTIFICATION_ACTIONS_PATH); + const adminActionsEndpointOverride = + typeof config.adminActionsEndpoint === "string" && config.adminActionsEndpoint.trim() + ? config.adminActionsEndpoint.trim() + : null; + const adminActionsEndpoint = adminActionsEndpointOverride || buildEndpoint(serverHost, DEFAULT_ADMIN_ACTIONS_PATH); const leaseEndpointOverride = typeof config.planStepDispatchLeaseEndpoint === "string" && config.planStepDispatchLeaseEndpoint.trim() ? config.planStepDispatchLeaseEndpoint.trim() @@ -1088,6 +1179,7 @@ function resolveSyncConfig(): DigitalEmployeeSyncConfig { approvalDecisionsEndpoint, notificationUpdatesEndpoint, notificationActionsEndpoint, + adminActionsEndpoint, leaseEndpoint, clientKey: readClientKey(serverHost), authToken: readAuthToken(serverHost), @@ -1100,6 +1192,17 @@ function buildLeaseOperationEndpoint(baseEndpoint: string | null, operation: "ac return `${baseEndpoint.replace(/\/+$/, "")}/${operation}`; } +function buildAdminActionsPendingEndpoint(baseEndpoint: string | null): string | null { + if (!baseEndpoint) return null; + const params = new URLSearchParams({ device_id: getDeviceId() }); + return `${baseEndpoint.replace(/\/+$/, "")}/pending?${params.toString()}`; +} + +function buildAdminActionResultEndpoint(baseEndpoint: string | null, actionId: string): string | null { + if (!baseEndpoint) return null; + return `${baseEndpoint.replace(/\/+$/, "")}/${encodeURIComponent(actionId)}/result`; +} + function buildEndpoint(serverHost: string | null, path = DEFAULT_SYNC_PATH): string | null { if (!serverHost) return null; const normalized = serverHost.startsWith("http") @@ -1320,6 +1423,145 @@ function readRemoteNotificationUpdates(response: Record): Array }); } +function readRemoteAdminActions(response: Record): DigitalEmployeeAdminActionItem[] { + const data = objectRecord(response.data) ?? response; + const raw = Array.isArray(data.records) + ? data.records + : Array.isArray(data.actions) + ? data.actions + : Array.isArray(data.items) + ? data.items + : []; + return raw + .map((item) => objectRecord(item)) + .filter((item): item is Record => Boolean(item)) + .map((item) => ({ + id: stringField(item.id) || numericIdField(item.id), + entityType: normalizeAdminActionText(item.entity_type ?? item.entityType), + entityId: stringField(item.entity_id ?? item.entityId) || "", + action: normalizeAdminActionText(item.action), + requestPayload: objectRecord(item.request_payload ?? item.requestPayload) ?? {}, + })) + .filter((item) => Boolean(item.id && item.entityType && item.entityId && item.action)); +} + +async function applyDigitalEmployeeAdminAction(action: DigitalEmployeeAdminActionItem): Promise<{ status: "applied" | "rejected" | "failed"; reasonCodes: string[] }> { + try { + if (!isAllowedAdminAction(action)) { + return recordAdminActionRuntimeResult(action, "rejected", ["admin_action_rejected", "unsupported_or_high_risk_action"]); + } + const payload = action.requestPayload; + if (action.entityType === "approval") { + const result = resolveDigitalEmployeeApprovalConflict({ + approvalId: action.entityId, + resolution: action.action, + actor: "management-admin-action", + comment: stringField(payload.reason ?? payload.comment) || null, + }); + const ok = result?.status !== "rejected"; + return recordAdminActionRuntimeResult(action, ok ? "applied" : "rejected", ok ? ["admin_action_applied"] : ["admin_action_rejected", ...(result?.reason_codes ?? ["approval_action_rejected"])]); + } + if (action.entityType === "artifact") { + const artifactAction = action.action === "mark_reviewed" ? "mark_review" : action.action; + recordDigitalEmployeeArtifactLifecycle({ + artifactId: action.entityId, + action: artifactAction, + actor: "management-admin-action", + reason: stringField(payload.reason) || "admin_action", + retentionUntil: stringField(payload.retention_until ?? payload.retentionUntil) || null, + source: "management-admin-action", + }); + return recordAdminActionRuntimeResult(action, "applied", ["admin_action_applied"]); + } + if (action.entityType === "daily_report") { + const deliveryAction = action.action === "mark_confirmed" ? "confirm" : action.action === "request_approval" ? "request_approval" : "send"; + recordDigitalEmployeeDailyReportDelivery({ + reportId: action.entityId, + action: deliveryAction, + status: action.action.replace(/^mark_/, ""), + actor: "management-admin-action", + message: stringField(payload.message ?? payload.reason) || null, + }); + return recordAdminActionRuntimeResult(action, "applied", ["admin_action_applied"]); + } + if (action.entityType === "route" || action.entityType === "route_decision") { + recordDigitalEmployeeRouteInterventionResolution({ + routeDecisionId: action.entityId, + decision: action.action, + actor: "management-admin-action", + reasonCodes: ["admin_action_applied", action.action], + commandAccepted: false, + }); + return recordAdminActionRuntimeResult(action, "applied", ["admin_action_applied"]); + } + if (action.entityType === "notification") { + const currentState = readDigitalEmployeeUiState(); + const notificationStateById: Record = { ...(currentState.notificationStateById ?? {}) }; + const current = objectRecord(notificationStateById[action.entityId]) ?? {}; + const now = new Date().toISOString(); + notificationStateById[action.entityId] = { + ...current, + status: action.action === "dismiss" ? "dismissed" : "read", + read_at: action.action === "mark_read" ? now : current.read_at, + dismissed_at: action.action === "dismiss" ? now : current.dismissed_at, + source: "management-admin-action", + }; + saveDigitalEmployeeUiState({ action: "admin_notification_action", metadata: { admin_action_id: action.id, notification_id: action.entityId }, state: { ...currentState, notificationStateById } }); + return recordAdminActionRuntimeResult(action, "applied", ["admin_action_applied"]); + } + return recordAdminActionRuntimeResult(action, "applied", ["admin_action_applied", "audit_overlay_recorded"]); + } catch (error) { + return recordAdminActionRuntimeResult(action, "failed", ["admin_action_failed", normalizeError(error)]); + } +} + +function isAllowedAdminAction(action: DigitalEmployeeAdminActionItem): boolean { + if (HIGH_RISK_ADMIN_ACTIONS.has(action.action)) return false; + return new Set([ + "approval:keep_local", "approval:mark_reviewed", + "route:mark_reviewed", "route:dismiss", "route:retry_policy_check", + "route_decision:mark_reviewed", "route_decision:dismiss", "route_decision:retry_policy_check", + "notification:mark_read", "notification:dismiss", + "artifact:mark_keep", "artifact:mark_expire", "artifact:mark_reviewed", + "daily_report:mark_delivered", "daily_report:mark_confirmed", "daily_report:request_approval", + "audit:mark_reviewed", "audit:dismiss", + "event:mark_reviewed", "event:dismiss", + ]).has(`${action.entityType}:${action.action}`); +} + +function recordAdminActionRuntimeResult( + action: DigitalEmployeeAdminActionItem, + status: "applied" | "rejected" | "failed", + reasonCodes: string[], +): { status: "applied" | "rejected" | "failed"; reasonCodes: string[] } { + recordDigitalEmployeeRuntimeEvent({ + kind: status === "applied" ? "admin_action_applied" : status === "rejected" ? "admin_action_rejected" : "admin_action_failed", + status: status === "applied" ? "completed" : "failed", + message: `管理端动作${status}: ${action.action}`, + payload: { + admin_action_id: action.id, + entity_type: action.entityType, + entity_id: action.entityId, + action: action.action, + status, + reason_codes: reasonCodes, + source: "management-admin-action", + }, + }); + return { status, reasonCodes }; +} + +async function postDigitalEmployeeAdminActionResult( + config: DigitalEmployeeSyncConfig, + actionId: string, + status: "applied" | "rejected" | "failed", + reasonCodes: string[], +): Promise { + const endpoint = buildAdminActionResultEndpoint(config.adminActionsEndpoint, actionId); + if (!endpoint) return; + await fetchJsonWithAuth(config, endpoint, { status, reason_codes: reasonCodes }); +} + function readPlanStepLeaseRejectionReason(response: Record): string | null { if (response.ok === false || response.success === false || response.accepted === false || response.granted === false) { return stringField(response.reason ?? response.error ?? response.message) || "remote_lease_rejected"; @@ -2489,6 +2731,14 @@ function stringField(value: unknown): string { return typeof value === "string" && value.trim() ? value.trim() : ""; } +function normalizeAdminActionText(value: unknown): string { + return stringField(value).toLowerCase().replace(/-/g, "_"); +} + +function numericIdField(value: unknown): string { + return typeof value === "number" && Number.isFinite(value) ? String(value) : ""; +} + function stringArrayField(value: unknown): string[] { if (!Array.isArray(value)) return []; return value.map(stringField).filter(Boolean); diff --git a/qimingclaw/crates/agent-electron-client/src/preload/webviewPerfBridge.ts b/qimingclaw/crates/agent-electron-client/src/preload/webviewPerfBridge.ts index a27fdb6f..a9c5bb8a 100644 --- a/qimingclaw/crates/agent-electron-client/src/preload/webviewPerfBridge.ts +++ b/qimingclaw/crates/agent-electron-client/src/preload/webviewPerfBridge.ts @@ -152,6 +152,9 @@ contextBridge.exposeInMainWorld("QimingClawBridge", { async pullNotificationUpdates() { return ipcRenderer.invoke("digitalEmployee:pullNotificationUpdates"); }, + async pullAdminActions() { + return ipcRenderer.invoke("digitalEmployee:pullAdminActions"); + }, async submitNotificationAction(input: unknown) { return ipcRenderer.invoke("digitalEmployee:submitNotificationAction", input); }, diff --git a/qimingclaw/docs/digital-employee-frontend-integration-plan.md b/qimingclaw/docs/digital-employee-frontend-integration-plan.md index 950f49c1..017b9811 100644 --- a/qimingclaw/docs/digital-employee-frontend-integration-plan.md +++ b/qimingclaw/docs/digital-employee-frontend-integration-plan.md @@ -609,7 +609,7 @@ GET /api/digital-employee/approvals - 建议:下一轮围绕管理端正式审计视图和诊断修复动作,把本地可追溯审计继续推进到可运营处置。 12. **管理端业务查询模型** - - 已吸收:管理端已有通用 sync record 接收、查询、payload 摘要和深链;后端 sync record 已开始保存客户端顶层 `contract_version`、`entity_summary` 和 `business_view`,并基于现有 `digital_employee_sync_record` 拆出 `/api/digital-employee/plans`、`/plans/{plan_id}`、`/tasks`、`/runs`、`/events`、`/artifacts`、`/approvals` 管理端业务查询模型;列表支持客户端 Key、设备、实体 ID、状态、同步状态和同步时间范围过滤,业务 row 会提炼 title/status/summary、Plan/Task/Run 关联、发生/开始/结束时间、sync record 深链和脱敏客户端 Key;Plan 视图会聚合 task/run 计数与最近事件,Plan 详情会返回关联 tasks/runs/events/artifacts/approvals 摘要。embedded adapter 已拆出同名只读业务查询接口,从 qimingclaw runtime、artifact、approval 和 canonical event 投影生成统一分页视图;embedded 数字员工页已新增“业务视图”入口,支持计划/任务/运行/事件/产物/审批分段、实体/状态/同步状态/时间筛选、分页和详情 JSON 查看;客户端 outbox 的 event `business_view` 已开始按 route decision、governance command、approval action、artifact lifecycle/access、skill call audit 和 ready PlanStep dispatch 细分常用字段,本地与管理端业务视图投影已开始闭环。正式外部管理端台面已开始吸收:qiming-backend 新增 `/api/digital-employee/admin/workbench/{view}`,qiming 管理端新增“数字员工运营台”,统一展示业务视图、介入台、产物治理、通知运营、审计诊断、日报运营和路由治理,只读消费 sync record `business_view` 并提供同步记录深链。 + - 已吸收:管理端已有通用 sync record 接收、查询、payload 摘要和深链;后端 sync record 已开始保存客户端顶层 `contract_version`、`entity_summary` 和 `business_view`,并基于现有 `digital_employee_sync_record` 拆出 `/api/digital-employee/plans`、`/plans/{plan_id}`、`/tasks`、`/runs`、`/events`、`/artifacts`、`/approvals` 管理端业务查询模型;列表支持客户端 Key、设备、实体 ID、状态、同步状态和同步时间范围过滤,业务 row 会提炼 title/status/summary、Plan/Task/Run 关联、发生/开始/结束时间、sync record 深链和脱敏客户端 Key;Plan 视图会聚合 task/run 计数与最近事件,Plan 详情会返回关联 tasks/runs/events/artifacts/approvals 摘要。embedded adapter 已拆出同名只读业务查询接口,从 qimingclaw runtime、artifact、approval 和 canonical event 投影生成统一分页视图;embedded 数字员工页已新增“业务视图”入口,支持计划/任务/运行/事件/产物/审批分段、实体/状态/同步状态/时间筛选、分页和详情 JSON 查看;客户端 outbox 的 event `business_view` 已开始按 route decision、governance command、approval action、artifact lifecycle/access、skill call audit 和 ready PlanStep dispatch 细分常用字段,本地与管理端业务视图投影已开始闭环。正式外部管理端台面已开始吸收:qiming-backend 新增 `/api/digital-employee/admin/workbench/{view}`,qiming 管理端新增“数字员工运营台”,统一展示业务视图、介入台、产物治理、通知运营、审计诊断、日报运营和路由治理,只读消费 sync record `business_view` 并提供同步记录深链。管理端低风险动作闭环已开始吸收:后端新增 `/api/digital-employee/admin/actions` 记录动作意图和 `/pending` 拉取队列,qimingclaw 只应用保留本地、标记复核、通知已读/忽略、产物保留/到期、日报交付/确认/审批请求等低风险动作并写入 `admin_action_applied` / `admin_action_rejected` / `admin_action_failed`,qiming 运营台抽屉只提示“已记录,等待客户端拉取”。 - 缺口:复杂组合检索、跨设备聚合图、远程裁决/策略编辑动作和物化业务表仍待吸收。 - 建议:先使用 sync record 派生业务查询模型和 embedded 业务视图预览承接联调,再按容量和查询压力决定是否拆 Plan / Task / Run / Event 物理业务表。