feat: surface codex app server thread visibility

This commit is contained in:
AI Bot
2026-06-03 10:09:07 +08:00
parent c0c88444ec
commit 74b333ba2f
11 changed files with 216 additions and 4 deletions

View File

@@ -84,6 +84,24 @@ function numberFromMetadata(value: unknown) {
return Number.isFinite(numeric) ? Math.max(0, Math.round(numeric)) : 0;
}
function minuteTimestampFromMetadata(value: unknown) {
const text = typeof value === "string" ? value.trim() : "";
if (!text) return "未发现";
const date = new Date(text);
if (Number.isNaN(date.getTime())) return text;
const parts = new Intl.DateTimeFormat("zh-CN", {
timeZone: "Asia/Shanghai",
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
hour12: false,
}).formatToParts(date);
const valueOf = (type: string) => parts.find((part) => part.type === type)?.value ?? "";
return `${valueOf("year")}-${valueOf("month")}-${valueOf("day")} ${valueOf("hour")}:${valueOf("minute")}`;
}
export function buildDeviceWorkspaceDetailCards(workspace: DeviceWorkspaceView) {
const selectedDevice = workspace.selectedDevice;
const primaryPolicy = workspace.projectExecutionPolicies?.[0];
@@ -101,6 +119,7 @@ export function buildDeviceWorkspaceDetailCards(workspace: DeviceWorkspaceView)
const codexAppConfigSummary = objectFromMetadata(codexAppServerMetadata.appConfigSummary);
const codexConfigRequirements = objectFromMetadata(codexAppServerMetadata.configRequirements);
const codexExternalAgentMigration = objectFromMetadata(codexAppServerMetadata.externalAgentMigration);
const codexThreadSummary = objectFromMetadata(codexAppServerMetadata.threadSummary);
return {
capabilities: {
@@ -135,6 +154,11 @@ export function buildDeviceWorkspaceDetailCards(workspace: DeviceWorkspaceView)
)} 个 · 托管要求 ${numberFromMetadata(codexConfigRequirements.requirementCount)} 个 · 外部迁移 ${numberFromMetadata(
codexExternalAgentMigration.itemCount,
)}`,
codexThreads: `线程:${numberFromMetadata(codexThreadSummary.threadCount)} 个 · 已加载 ${numberFromMetadata(
codexThreadSummary.loadedThreadCount,
)} 个 · 活跃 ${numberFromMetadata(codexThreadSummary.activeThreadCount)} 个 · 最新 ${minuteTimestampFromMetadata(
codexThreadSummary.latestUpdatedAt,
)}`,
preferredExecutionMode: `默认执行模式:${
selectedDevice?.preferredExecutionMode === "gui"
? "GUI"
@@ -775,6 +799,9 @@ export function DeviceEditorCard({
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexConfig}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.codexThreads}
</div>
<div className="rounded-2xl bg-[#F7F8FA] px-3 py-2">
{detailCards.capabilities.items.preferredExecutionMode}
</div>