吸收数字员工PlanStep依赖图派发策略
This commit is contained in:
@@ -458,18 +458,7 @@ function buildBusinessView(
|
||||
assigned_skill_id: stringField(record.assignedSkillId ?? record.assigned_skill_id) || null,
|
||||
};
|
||||
case "plan_step":
|
||||
return {
|
||||
...base,
|
||||
plan_id: stringField(record.planId ?? record.plan_id) || null,
|
||||
step_id: row.entity_id,
|
||||
seq: typeof record.seq === "number" ? record.seq : null,
|
||||
depends_on: Array.isArray(record.dependsOn ?? record.depends_on)
|
||||
? record.dependsOn ?? record.depends_on
|
||||
: [],
|
||||
preferred_skill_ids: Array.isArray(record.preferredSkillIds ?? record.preferred_skill_ids)
|
||||
? record.preferredSkillIds ?? record.preferred_skill_ids
|
||||
: [],
|
||||
};
|
||||
return planStepBusinessView(base, row, record);
|
||||
case "run":
|
||||
return {
|
||||
...base,
|
||||
@@ -511,6 +500,36 @@ function buildBusinessView(
|
||||
}
|
||||
}
|
||||
|
||||
function planStepBusinessView(
|
||||
base: Record<string, unknown>,
|
||||
row: OutboxRow,
|
||||
record: Record<string, unknown>,
|
||||
): Record<string, unknown> {
|
||||
const payload = objectRecord(record.payload) ?? {};
|
||||
const dependencyGraph = objectRecord(payload.dependencyGraph ?? payload.dependency_graph) ?? {};
|
||||
const lastDispatch = objectRecord(payload.lastDispatch ?? payload.last_dispatch) ?? {};
|
||||
const dependsOn = stringArrayField(record.dependsOn ?? record.depends_on);
|
||||
const blockedDependencies = stringArrayField(dependencyGraph.blockedDependencies ?? dependencyGraph.blocked_dependencies);
|
||||
const waitingDependencies = stringArrayField(dependencyGraph.waitingDependencies ?? dependencyGraph.waiting_dependencies);
|
||||
return {
|
||||
...base,
|
||||
plan_id: stringField(record.planId ?? record.plan_id) || null,
|
||||
step_id: row.entity_id,
|
||||
seq: numberField(record.seq),
|
||||
depends_on: dependsOn,
|
||||
dependency_count: dependsOn.length,
|
||||
dependency_status: stringField(dependencyGraph.status) || null,
|
||||
blocked_dependencies: blockedDependencies,
|
||||
blocked_dependency_count: blockedDependencies.length,
|
||||
waiting_dependencies: waitingDependencies,
|
||||
waiting_dependency_count: waitingDependencies.length,
|
||||
preferred_skill_ids: stringArrayField(record.preferredSkillIds ?? record.preferred_skill_ids),
|
||||
dispatchable: stringField(record.status) === "ready" && blockedDependencies.length === 0 && waitingDependencies.length === 0,
|
||||
skip_reason: stringField(payload.skipReason ?? payload.skip_reason) || null,
|
||||
last_dispatch_status: stringField(lastDispatch.status) || null,
|
||||
};
|
||||
}
|
||||
|
||||
function buildEventBusinessView(
|
||||
base: Record<string, unknown>,
|
||||
row: OutboxRow,
|
||||
@@ -569,7 +588,9 @@ function eventSpecificBusinessView(
|
||||
return artifactEventBusinessView(payload);
|
||||
}
|
||||
if (kind.startsWith("skill_call_")) return skillCallBusinessView(payload);
|
||||
if (isPlanStepDependencyEvent(kind)) return planStepDependencyBusinessView(payload);
|
||||
if (kind.startsWith("plan_step_dispatch_")) return planStepDispatchBusinessView(payload);
|
||||
if (isPlanStepDispatchPolicyEvent(kind)) return planStepDispatchPolicyBusinessView(payload);
|
||||
if (kind === "governance_provide_task_input") return governanceProvideTaskInputBusinessView(payload);
|
||||
if (isNotificationEvent(kind)) return notificationBusinessView(payload);
|
||||
return {};
|
||||
@@ -667,11 +688,43 @@ function skillCallBusinessView(payload: Record<string, unknown>): Record<string,
|
||||
function planStepDispatchBusinessView(payload: Record<string, unknown>): Record<string, unknown> {
|
||||
return {
|
||||
step_id: stringField(payload.step_id ?? payload.stepId) || null,
|
||||
plan_id: stringField(payload.plan_id ?? payload.planId) || null,
|
||||
task_id: stringField(payload.task_id ?? payload.taskId) || null,
|
||||
run_id: stringField(payload.run_id ?? payload.runId) || null,
|
||||
status: stringField(payload.status) || null,
|
||||
reason: stringField(payload.reason) || null,
|
||||
};
|
||||
}
|
||||
|
||||
function planStepDependencyBusinessView(payload: Record<string, unknown>): Record<string, unknown> {
|
||||
const dependencyGraph = objectRecord(payload.dependencyGraph ?? payload.dependency_graph) ?? {};
|
||||
const dependencies = stringArrayField(payload.dependsOn ?? payload.depends_on);
|
||||
return {
|
||||
step_id: stringField(payload.stepId ?? payload.step_id) || null,
|
||||
plan_id: stringField(payload.planId ?? payload.plan_id) || null,
|
||||
status: stringField(payload.status ?? dependencyGraph.status) || null,
|
||||
dependency_count: dependencies.length,
|
||||
blocked_dependencies: stringArrayField(dependencyGraph.blockedDependencies ?? dependencyGraph.blocked_dependencies),
|
||||
waiting_dependencies: stringArrayField(dependencyGraph.waitingDependencies ?? dependencyGraph.waiting_dependencies),
|
||||
satisfied_dependencies: stringArrayField(dependencyGraph.satisfiedDependencies ?? dependencyGraph.satisfied_dependencies),
|
||||
};
|
||||
}
|
||||
|
||||
function planStepDispatchPolicyBusinessView(payload: Record<string, unknown>): Record<string, unknown> {
|
||||
const metadata = objectRecord(payload.metadata) ?? {};
|
||||
const state = objectRecord(payload.state) ?? {};
|
||||
const policy = objectRecord(metadata.plan_step_dispatch_policy)
|
||||
?? objectRecord(state.planStepDispatchPolicy)
|
||||
?? {};
|
||||
return {
|
||||
action: stringField(metadata.action ?? payload.action) || "update_plan_step_dispatch_policy",
|
||||
policy_enabled: typeof policy.enabled === "boolean" ? policy.enabled : null,
|
||||
max_per_sweep: numberField(policy.max_per_sweep),
|
||||
auto_dispatch_ready_steps: typeof policy.auto_dispatch_ready_steps === "boolean" ? policy.auto_dispatch_ready_steps : null,
|
||||
updated_at: stringField(policy.updated_at) || null,
|
||||
};
|
||||
}
|
||||
|
||||
function governanceProvideTaskInputBusinessView(payload: Record<string, unknown>): Record<string, unknown> {
|
||||
const commandPayload = objectRecord(payload.payload) ?? {};
|
||||
const result = objectRecord(payload.result) ?? {};
|
||||
@@ -714,7 +767,9 @@ function eventBusinessCategory(kind: string): string {
|
||||
if (isApprovalSubscriptionEvent(kind)) return "approval";
|
||||
if (kind.startsWith("artifact_")) return "artifact";
|
||||
if (kind.startsWith("skill_call_")) return "skill";
|
||||
if (isPlanStepDependencyEvent(kind)) return "dispatch";
|
||||
if (kind.startsWith("plan_step_dispatch_")) return "dispatch";
|
||||
if (isPlanStepDispatchPolicyEvent(kind)) return "dispatch";
|
||||
if (isNotificationEvent(kind)) return "notification";
|
||||
if (kind.startsWith("governance_")) return "governance";
|
||||
return "runtime";
|
||||
@@ -724,6 +779,14 @@ function isApprovalSubscriptionEvent(kind: string): boolean {
|
||||
return kind === "digital_workday_update_approval_subscriptions";
|
||||
}
|
||||
|
||||
function isPlanStepDependencyEvent(kind: string): boolean {
|
||||
return kind === "plan_step_ready" || kind === "plan_step_blocked" || kind === "plan_step_waiting";
|
||||
}
|
||||
|
||||
function isPlanStepDispatchPolicyEvent(kind: string): boolean {
|
||||
return kind === "digital_workday_update_plan_step_dispatch_policy";
|
||||
}
|
||||
|
||||
function isNotificationEvent(kind: string): boolean {
|
||||
return kind === "digital_workday_update_notification_preferences"
|
||||
|| kind === "digital_workday_notification_read"
|
||||
|
||||
Reference in New Issue
Block a user