fix(ui): expose queue normalizer fields in work items
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 32s
CD Pipeline / build-and-deploy (push) Successful in 4m28s
CD Pipeline / post-deploy-checks (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-01 18:11:06 +08:00
parent c7a3a29144
commit 8d9e0bc80b
3 changed files with 37 additions and 3 deletions

View File

@@ -9045,8 +9045,10 @@
"metrics": { "metrics": {
"tags": "Tags", "tags": "Tags",
"groups": "Groups", "groups": "Groups",
"contract": "Contract" "contract": "Contract",
"queue": "Queue fields"
}, },
"queueFields": "Queue normalizer fields",
"receipt": { "receipt": {
"inputs": "Receipt inputs", "inputs": "Receipt inputs",
"outputs": "Receipt outputs" "outputs": "Receipt outputs"

View File

@@ -9045,8 +9045,10 @@
"metrics": { "metrics": {
"tags": "Tags", "tags": "Tags",
"groups": "分群鍵", "groups": "分群鍵",
"contract": "Contract" "contract": "Contract",
"queue": "Queue fields"
}, },
"queueFields": "Queue normalizer fields",
"receipt": { "receipt": {
"inputs": "Receipt inputs", "inputs": "Receipt inputs",
"outputs": "Receipt outputs" "outputs": "Receipt outputs"

View File

@@ -1035,6 +1035,8 @@ type PriorityWorkOrderResponse = {
ai_loop_current_blocker_harbor_recovery_receipt_input_ids?: string[] | null; ai_loop_current_blocker_harbor_recovery_receipt_input_ids?: string[] | null;
ai_loop_current_blocker_harbor_recovery_receipt_output_contract_count?: number | null; ai_loop_current_blocker_harbor_recovery_receipt_output_contract_count?: number | null;
ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null; ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null;
ai_loop_current_blocker_queue_readback_normalizer_contract_count?: number | null;
ai_loop_current_blocker_queue_readback_normalizer_field_ids?: string[] | null;
ai_loop_log_source_grouping_key_count?: number | null; ai_loop_log_source_grouping_key_count?: number | null;
ai_loop_log_source_grouping_keys?: string[] | null; ai_loop_log_source_grouping_keys?: string[] | null;
ai_loop_log_source_tagging_contract_count?: number | null; ai_loop_log_source_tagging_contract_count?: number | null;
@@ -1045,6 +1047,7 @@ type PriorityWorkOrderResponse = {
ai_loop_log_source_tagging_contract?: AiLoopLogSourceContract[] | null; ai_loop_log_source_tagging_contract?: AiLoopLogSourceContract[] | null;
ai_loop_current_blocker_harbor_recovery_receipt_input_ids?: string[] | null; ai_loop_current_blocker_harbor_recovery_receipt_input_ids?: string[] | null;
ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null; ai_loop_current_blocker_harbor_recovery_receipt_output_ids?: string[] | null;
ai_loop_current_blocker_queue_readback_normalizer_field_ids?: string[] | null;
} | null; } | null;
}>; }>;
}; };
@@ -7798,6 +7801,10 @@ function AiLoopLogSourceTagsPanel({
summary?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ?? summary?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ??
evidence?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ?? evidence?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ??
[]; [];
const queueNormalizerFieldIds =
summary?.ai_loop_current_blocker_queue_readback_normalizer_field_ids ??
evidence?.ai_loop_current_blocker_queue_readback_normalizer_field_ids ??
[];
const labelMap: Record<string, string> = { const labelMap: Record<string, string> = {
project_id: t("tagLabels.projectId"), project_id: t("tagLabels.projectId"),
product: t("tagLabels.product"), product: t("tagLabels.product"),
@@ -7829,6 +7836,14 @@ function AiLoopLogSourceTagsPanel({
label: t("metrics.contract"), label: t("metrics.contract"),
value: summary?.ai_loop_log_source_tagging_contract_count ?? contracts.length, value: summary?.ai_loop_log_source_tagging_contract_count ?? contracts.length,
}, },
{
key: "queue",
icon: SearchCheck,
label: t("metrics.queue"),
value:
summary?.ai_loop_current_blocker_queue_readback_normalizer_contract_count ??
queueNormalizerFieldIds.length,
},
]; ];
const receiptMetrics = [ const receiptMetrics = [
{ {
@@ -7870,7 +7885,7 @@ function AiLoopLogSourceTagsPanel({
<p className="mt-3 text-xs leading-5 text-[#77736a]"> <p className="mt-3 text-xs leading-5 text-[#77736a]">
{t("subtitle")} {t("subtitle")}
</p> </p>
<div className="mt-4 grid gap-px border border-[#e0ddd4] bg-[#e0ddd4] sm:grid-cols-3"> <div className="mt-4 grid gap-px border border-[#e0ddd4] bg-[#e0ddd4] sm:grid-cols-2 xl:grid-cols-4">
{metrics.map((metric) => { {metrics.map((metric) => {
const Icon = metric.icon; const Icon = metric.icon;
return ( return (
@@ -7893,6 +7908,21 @@ function AiLoopLogSourceTagsPanel({
value: summary?.ai_loop_current_blocker_id ?? "--", value: summary?.ai_loop_current_blocker_id ?? "--",
})} })}
</div> </div>
<div className="mt-3 border border-[#d8d3c7] bg-white px-3 py-2">
<div className="text-[11px] font-semibold text-[#77736a]">
{t("queueFields")}
</div>
<div className="mt-2 flex flex-wrap gap-1.5">
{queueNormalizerFieldIds.slice(0, 7).map((id) => (
<span
key={id}
className="max-w-full break-all border border-[#c9d8ea] bg-[#eef5ff] px-2 py-0.5 font-mono text-[10px] text-[#1f5b9b]"
>
{id}
</span>
))}
</div>
</div>
<div className="mt-3 grid gap-2"> <div className="mt-3 grid gap-2">
{receiptMetrics.map((metric) => ( {receiptMetrics.map((metric) => (
<div <div