From 6fb55f8959ac813b849e7777ef717df0576a13da Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 23 Apr 2026 04:04:43 +0100 Subject: [PATCH] extensions/acpx: align probeAgent with current config surface Keep the acpx runtime type shim compatible with upstream probeAgent support and de-duplicate the rebased config/service wiring against current main. Normalize probeAgent the same way agent registry keys are normalized so mixed-case config resolves consistently. Refs #68409 --- extensions/acpx/src/acpx-runtime-compat.d.ts | 1 + extensions/acpx/src/config-schema.ts | 3 --- extensions/acpx/src/config.ts | 9 ++++++--- extensions/acpx/src/service.ts | 1 - 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/extensions/acpx/src/acpx-runtime-compat.d.ts b/extensions/acpx/src/acpx-runtime-compat.d.ts index 646871b5888..a7d97fad294 100644 --- a/extensions/acpx/src/acpx-runtime-compat.d.ts +++ b/extensions/acpx/src/acpx-runtime-compat.d.ts @@ -30,6 +30,7 @@ declare module "acpx/runtime" { permissionMode?: unknown; nonInteractivePermissions?: unknown; timeoutMs?: number; + probeAgent?: string; }; export class AcpxRuntime { diff --git a/extensions/acpx/src/config-schema.ts b/extensions/acpx/src/config-schema.ts index 306f58f0cc7..0b390363d51 100644 --- a/extensions/acpx/src/config-schema.ts +++ b/extensions/acpx/src/config-schema.ts @@ -34,7 +34,6 @@ export type AcpxPluginConfig = { strictWindowsCmdWrapper?: boolean; timeoutSeconds?: number; queueOwnerTtlSeconds?: number; - probeAgent?: string; mcpServers?: Record; agents?: Record; }; @@ -50,7 +49,6 @@ export type ResolvedAcpxPluginConfig = { strictWindowsCmdWrapper: boolean; timeoutSeconds?: number; queueOwnerTtlSeconds: number; - probeAgent?: string; legacyCompatibilityConfig: { strictWindowsCmdWrapper?: boolean; queueOwnerTtlSeconds?: number; @@ -109,7 +107,6 @@ export const AcpxPluginConfigSchema = z.strictObject({ .number({ error: "queueOwnerTtlSeconds must be a number >= 0" }) .min(0, { error: "queueOwnerTtlSeconds must be a number >= 0" }) .optional(), - probeAgent: nonEmptyTrimmedString("probeAgent must be a non-empty string").optional(), mcpServers: z.record(z.string(), McpServerConfigSchema).optional(), agents: z .record( diff --git a/extensions/acpx/src/config.ts b/extensions/acpx/src/config.ts index a77a36e117c..76e26cef430 100644 --- a/extensions/acpx/src/config.ts +++ b/extensions/acpx/src/config.ts @@ -260,12 +260,16 @@ export function resolveAcpxPluginConfig(params: { ]), ); - const probeAgent = normalized.probeAgent?.trim(); + // Lowercase probeAgent so lookups match the registry keys built above, which + // also go through normalizeLowercaseStringOrEmpty. Without this, a user who + // writes `probeAgent: "OpenCode"` would silently miss the stored "opencode" + // key. + const probeAgent = normalizeLowercaseStringOrEmpty(normalized.probeAgent) || undefined; return { cwd, stateDir, - probeAgent: normalized.probeAgent, + probeAgent, permissionMode: normalized.permissionMode ?? DEFAULT_PERMISSION_MODE, nonInteractivePermissions: normalized.nonInteractivePermissions ?? DEFAULT_NON_INTERACTIVE_POLICY, @@ -275,7 +279,6 @@ export function resolveAcpxPluginConfig(params: { normalized.strictWindowsCmdWrapper ?? DEFAULT_STRICT_WINDOWS_CMD_WRAPPER, timeoutSeconds: normalized.timeoutSeconds ?? DEFAULT_ACPX_TIMEOUT_SECONDS, queueOwnerTtlSeconds: normalized.queueOwnerTtlSeconds ?? DEFAULT_QUEUE_OWNER_TTL_SECONDS, - probeAgent: probeAgent && probeAgent.length > 0 ? probeAgent : undefined, legacyCompatibilityConfig: { strictWindowsCmdWrapper: normalized.strictWindowsCmdWrapper, queueOwnerTtlSeconds: normalized.queueOwnerTtlSeconds, diff --git a/extensions/acpx/src/service.ts b/extensions/acpx/src/service.ts index 576e4072f19..27175434b9a 100644 --- a/extensions/acpx/src/service.ts +++ b/extensions/acpx/src/service.ts @@ -53,7 +53,6 @@ function createDefaultRuntime(params: AcpxRuntimeFactoryParams): AcpxRuntimeLike mcpServers: toAcpMcpServers(params.pluginConfig.mcpServers), permissionMode: params.pluginConfig.permissionMode, nonInteractivePermissions: params.pluginConfig.nonInteractivePermissions, - probeAgent: params.pluginConfig.probeAgent, timeoutMs: params.pluginConfig.timeoutSeconds != null ? params.pluginConfig.timeoutSeconds * 1_000