feat: surface codex app server thread visibility
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user