fix(ui): show ssh repair receipt contract in work items
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 31s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 0s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Failing after 4m21s
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 31s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 0s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Failing after 4m21s
This commit is contained in:
@@ -9047,6 +9047,10 @@
|
||||
"groups": "Groups",
|
||||
"contract": "Contract"
|
||||
},
|
||||
"receipt": {
|
||||
"inputs": "Receipt inputs",
|
||||
"outputs": "Receipt outputs"
|
||||
},
|
||||
"tagLabels": {
|
||||
"projectId": "Project",
|
||||
"product": "Product",
|
||||
|
||||
@@ -9047,6 +9047,10 @@
|
||||
"groups": "分群鍵",
|
||||
"contract": "Contract"
|
||||
},
|
||||
"receipt": {
|
||||
"inputs": "Receipt inputs",
|
||||
"outputs": "Receipt outputs"
|
||||
},
|
||||
"tagLabels": {
|
||||
"projectId": "專案",
|
||||
"product": "產品",
|
||||
|
||||
@@ -1031,6 +1031,10 @@ type PriorityWorkOrderResponse = {
|
||||
ai_loop_current_blocker_id?: string | null;
|
||||
ai_loop_current_blocker_log_source_tag_count?: number | null;
|
||||
ai_loop_current_blocker_log_source_tag_keys?: string[] | null;
|
||||
ai_loop_current_blocker_harbor_recovery_receipt_input_count?: number | 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_ids?: string[] | null;
|
||||
ai_loop_log_source_grouping_key_count?: number | null;
|
||||
ai_loop_log_source_grouping_keys?: string[] | null;
|
||||
ai_loop_log_source_tagging_contract_count?: number | null;
|
||||
@@ -1039,6 +1043,8 @@ type PriorityWorkOrderResponse = {
|
||||
evidence?: {
|
||||
ai_loop_current_blocker_log_source_tags?: AiLoopLogSourceTag[] | 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_output_ids?: string[] | null;
|
||||
} | null;
|
||||
}>;
|
||||
};
|
||||
@@ -7784,6 +7790,14 @@ function AiLoopLogSourceTagsPanel({
|
||||
const contracts = evidence?.ai_loop_log_source_tagging_contract ?? [];
|
||||
const groupingKeys = priority?.summary?.ai_loop_log_source_grouping_keys ?? [];
|
||||
const summary = priority?.summary;
|
||||
const receiptInputIds =
|
||||
summary?.ai_loop_current_blocker_harbor_recovery_receipt_input_ids ??
|
||||
evidence?.ai_loop_current_blocker_harbor_recovery_receipt_input_ids ??
|
||||
[];
|
||||
const receiptOutputIds =
|
||||
summary?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ??
|
||||
evidence?.ai_loop_current_blocker_harbor_recovery_receipt_output_ids ??
|
||||
[];
|
||||
const labelMap: Record<string, string> = {
|
||||
project_id: t("tagLabels.projectId"),
|
||||
product: t("tagLabels.product"),
|
||||
@@ -7816,6 +7830,24 @@ function AiLoopLogSourceTagsPanel({
|
||||
value: summary?.ai_loop_log_source_tagging_contract_count ?? contracts.length,
|
||||
},
|
||||
];
|
||||
const receiptMetrics = [
|
||||
{
|
||||
key: "inputs",
|
||||
label: t("receipt.inputs"),
|
||||
value:
|
||||
summary?.ai_loop_current_blocker_harbor_recovery_receipt_input_count ??
|
||||
receiptInputIds.length,
|
||||
ids: receiptInputIds,
|
||||
},
|
||||
{
|
||||
key: "outputs",
|
||||
label: t("receipt.outputs"),
|
||||
value:
|
||||
summary?.ai_loop_current_blocker_harbor_recovery_receipt_output_contract_count ??
|
||||
receiptOutputIds.length,
|
||||
ids: receiptOutputIds,
|
||||
},
|
||||
];
|
||||
|
||||
return (
|
||||
<section
|
||||
@@ -7861,6 +7893,33 @@ function AiLoopLogSourceTagsPanel({
|
||||
value: summary?.ai_loop_current_blocker_id ?? "--",
|
||||
})}
|
||||
</div>
|
||||
<div className="mt-3 grid gap-2">
|
||||
{receiptMetrics.map((metric) => (
|
||||
<div
|
||||
key={metric.key}
|
||||
className="border border-[#d8d3c7] bg-white px-3 py-2"
|
||||
>
|
||||
<div className="flex items-center justify-between gap-3">
|
||||
<span className="text-[11px] font-semibold text-[#77736a]">
|
||||
{metric.label}
|
||||
</span>
|
||||
<span className="font-mono text-sm font-semibold text-[#141413]">
|
||||
{loading ? "--" : metric.value}
|
||||
</span>
|
||||
</div>
|
||||
<div className="mt-2 flex flex-wrap gap-1.5">
|
||||
{metric.ids.slice(0, 6).map((id) => (
|
||||
<span
|
||||
key={id}
|
||||
className="border border-[#d8d3c7] bg-[#faf9f3] px-2 py-0.5 font-mono text-[10px] text-[#5f5b52]"
|
||||
>
|
||||
{id}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="bg-white p-4">
|
||||
|
||||
Reference in New Issue
Block a user