feat: expose codex app-server protocol drift summary
This commit is contained in:
@@ -1400,6 +1400,35 @@ function normalizeDiscoveryThreadCollaborationSummary(collaborationModes) {
|
||||
};
|
||||
}
|
||||
|
||||
const CODEX_APP_SERVER_DOC_FOLLOWUP_ITEMS = [
|
||||
"collaborationMode/list",
|
||||
"thread/turns/list",
|
||||
"ThreadItem.collabToolCall",
|
||||
];
|
||||
|
||||
function discoveryMethodFromError(errorText) {
|
||||
const text = typeof errorText === "string" ? errorText.trim() : "";
|
||||
if (!text) return "";
|
||||
return text.split(":")[0] || "";
|
||||
}
|
||||
|
||||
function normalizeDiscoveryProtocolDriftSummary(errors) {
|
||||
const runtimeFailureMethods = Array.from(
|
||||
new Set(asArray(errors).map(discoveryMethodFromError).filter(Boolean)),
|
||||
).slice(0, 12);
|
||||
return {
|
||||
driftLevel: runtimeFailureMethods.length > 0 ? "warning" : "compatible",
|
||||
compatibilityMode: "runtime-probe",
|
||||
failedProbeCount: runtimeFailureMethods.length,
|
||||
runtimeFailureMethods,
|
||||
docFollowupCount: CODEX_APP_SERVER_DOC_FOLLOWUP_ITEMS.length,
|
||||
docFollowupItems: CODEX_APP_SERVER_DOC_FOLLOWUP_ITEMS,
|
||||
fallbackStrategy: "Boss Broker + App Server 注入/执行",
|
||||
userInitiatedOnly: true,
|
||||
labels: ["运行时探测", "官方文档跟进", "Boss Broker 兜底"],
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeDiscoveryPluginGovernanceSummary() {
|
||||
const actions = [
|
||||
{ label: "安装", group: "lifecycle" },
|
||||
@@ -2216,6 +2245,51 @@ export async function discoverCodexAppServerCapabilities(runnerConfig) {
|
||||
}),
|
||||
})),
|
||||
);
|
||||
const discoveryErrors = [
|
||||
modelResult?.__bossError ? `model/list:${safeRuntimeDiagnosticText(modelResult.__bossError)}` : undefined,
|
||||
providerCapabilities?.__bossError
|
||||
? `modelProvider/capabilities/read:${safeRuntimeDiagnosticText(providerCapabilities.__bossError)}`
|
||||
: undefined,
|
||||
skillsResult?.__bossError ? `skills/list:${safeRuntimeDiagnosticText(skillsResult.__bossError)}` : undefined,
|
||||
skillExtraRootsResult?.__bossError
|
||||
? `skills/extraRoots/set:${safeRuntimeDiagnosticText(skillExtraRootsResult.__bossError)}`
|
||||
: undefined,
|
||||
hooksResult?.__bossError ? `hooks/list:${safeRuntimeDiagnosticText(hooksResult.__bossError)}` : undefined,
|
||||
pluginResult?.__bossError ? `plugin/list:${safeRuntimeDiagnosticText(pluginResult.__bossError)}` : undefined,
|
||||
appsResult?.__bossError ? `app/list:${safeRuntimeDiagnosticText(appsResult.__bossError)}` : undefined,
|
||||
experimentalFeaturesResult?.__bossError
|
||||
? `experimentalFeature/list:${safeRuntimeDiagnosticText(experimentalFeaturesResult.__bossError)}`
|
||||
: undefined,
|
||||
collaborationModesResult?.__bossError
|
||||
? `collaborationMode/list:${safeRuntimeDiagnosticText(collaborationModesResult.__bossError)}`
|
||||
: undefined,
|
||||
permissionProfilesResult?.__bossError
|
||||
? `permissionProfile/list:${safeRuntimeDiagnosticText(permissionProfilesResult.__bossError)}`
|
||||
: undefined,
|
||||
mcpServersResult?.__bossError
|
||||
? `mcpServerStatus/list:${safeRuntimeDiagnosticText(mcpServersResult.__bossError)}`
|
||||
: undefined,
|
||||
accountResult?.__bossError ? `account/read:${safeRuntimeDiagnosticText(accountResult.__bossError)}` : undefined,
|
||||
rateLimitsResult?.__bossError
|
||||
? `account/rateLimits/read:${safeRuntimeDiagnosticText(rateLimitsResult.__bossError)}`
|
||||
: undefined,
|
||||
configResult?.__bossError ? `config/read:${safeRuntimeDiagnosticText(configResult.__bossError)}` : undefined,
|
||||
configRequirementsResult?.__bossError
|
||||
? `configRequirements/read:${safeRuntimeDiagnosticText(configRequirementsResult.__bossError)}`
|
||||
: undefined,
|
||||
externalAgentConfigResult?.__bossError
|
||||
? `externalAgentConfig/detect:${safeRuntimeDiagnosticText(externalAgentConfigResult.__bossError)}`
|
||||
: undefined,
|
||||
threadListResult?.__bossError
|
||||
? `thread/list:${safeRuntimeDiagnosticText(threadListResult.__bossError)}`
|
||||
: undefined,
|
||||
loadedThreadsResult?.__bossError
|
||||
? `thread/loaded/list:${safeRuntimeDiagnosticText(loadedThreadsResult.__bossError)}`
|
||||
: undefined,
|
||||
...threadTurnResults
|
||||
.filter((entry) => entry.result?.__bossError)
|
||||
.map((entry) => `thread/turns/list:${entry.threadId}:${safeRuntimeDiagnosticText(entry.result.__bossError)}`),
|
||||
].filter(Boolean);
|
||||
|
||||
return {
|
||||
version: trimToDefined(runnerConfig.version),
|
||||
@@ -2249,6 +2323,7 @@ export async function discoverCodexAppServerCapabilities(runnerConfig) {
|
||||
threadCollaborationSummary: normalizeDiscoveryThreadCollaborationSummary(
|
||||
normalizeDiscoveryCollaborationModes(collaborationModesResult),
|
||||
),
|
||||
protocolDriftSummary: normalizeDiscoveryProtocolDriftSummary(discoveryErrors),
|
||||
pluginGovernanceSummary: normalizeDiscoveryPluginGovernanceSummary(),
|
||||
accountGovernanceSummary: normalizeDiscoveryAccountGovernanceSummary(),
|
||||
configGovernanceSummary: normalizeDiscoveryConfigGovernanceSummary(),
|
||||
@@ -2267,51 +2342,7 @@ export async function discoverCodexAppServerCapabilities(runnerConfig) {
|
||||
extensionEventSummary: normalizeDiscoveryExtensionEventSummary(),
|
||||
threadLifecycleEventSummary: normalizeDiscoveryThreadLifecycleEventSummary(),
|
||||
streamDeltaEventSummary: normalizeDiscoveryStreamDeltaEventSummary(),
|
||||
errors: [
|
||||
modelResult?.__bossError ? `model/list:${safeRuntimeDiagnosticText(modelResult.__bossError)}` : undefined,
|
||||
providerCapabilities?.__bossError
|
||||
? `modelProvider/capabilities/read:${safeRuntimeDiagnosticText(providerCapabilities.__bossError)}`
|
||||
: undefined,
|
||||
skillsResult?.__bossError ? `skills/list:${safeRuntimeDiagnosticText(skillsResult.__bossError)}` : undefined,
|
||||
skillExtraRootsResult?.__bossError
|
||||
? `skills/extraRoots/set:${safeRuntimeDiagnosticText(skillExtraRootsResult.__bossError)}`
|
||||
: undefined,
|
||||
hooksResult?.__bossError ? `hooks/list:${safeRuntimeDiagnosticText(hooksResult.__bossError)}` : undefined,
|
||||
pluginResult?.__bossError ? `plugin/list:${safeRuntimeDiagnosticText(pluginResult.__bossError)}` : undefined,
|
||||
appsResult?.__bossError ? `app/list:${safeRuntimeDiagnosticText(appsResult.__bossError)}` : undefined,
|
||||
experimentalFeaturesResult?.__bossError
|
||||
? `experimentalFeature/list:${safeRuntimeDiagnosticText(experimentalFeaturesResult.__bossError)}`
|
||||
: undefined,
|
||||
collaborationModesResult?.__bossError
|
||||
? `collaborationMode/list:${safeRuntimeDiagnosticText(collaborationModesResult.__bossError)}`
|
||||
: undefined,
|
||||
permissionProfilesResult?.__bossError
|
||||
? `permissionProfile/list:${safeRuntimeDiagnosticText(permissionProfilesResult.__bossError)}`
|
||||
: undefined,
|
||||
mcpServersResult?.__bossError
|
||||
? `mcpServerStatus/list:${safeRuntimeDiagnosticText(mcpServersResult.__bossError)}`
|
||||
: undefined,
|
||||
accountResult?.__bossError ? `account/read:${safeRuntimeDiagnosticText(accountResult.__bossError)}` : undefined,
|
||||
rateLimitsResult?.__bossError
|
||||
? `account/rateLimits/read:${safeRuntimeDiagnosticText(rateLimitsResult.__bossError)}`
|
||||
: undefined,
|
||||
configResult?.__bossError ? `config/read:${safeRuntimeDiagnosticText(configResult.__bossError)}` : undefined,
|
||||
configRequirementsResult?.__bossError
|
||||
? `configRequirements/read:${safeRuntimeDiagnosticText(configRequirementsResult.__bossError)}`
|
||||
: undefined,
|
||||
externalAgentConfigResult?.__bossError
|
||||
? `externalAgentConfig/detect:${safeRuntimeDiagnosticText(externalAgentConfigResult.__bossError)}`
|
||||
: undefined,
|
||||
threadListResult?.__bossError
|
||||
? `thread/list:${safeRuntimeDiagnosticText(threadListResult.__bossError)}`
|
||||
: undefined,
|
||||
loadedThreadsResult?.__bossError
|
||||
? `thread/loaded/list:${safeRuntimeDiagnosticText(loadedThreadsResult.__bossError)}`
|
||||
: undefined,
|
||||
...threadTurnResults
|
||||
.filter((entry) => entry.result?.__bossError)
|
||||
.map((entry) => `thread/turns/list:${entry.threadId}:${safeRuntimeDiagnosticText(entry.result.__bossError)}`),
|
||||
].filter(Boolean),
|
||||
errors: discoveryErrors,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user