Josh Spicer 4eab4042e5
Harness fixes (#306978)
* feat: hide hardcoded CLI/Claude harnesses when providerApi is enabled

When `chat.customizations.providerApi.enabled` is true, the browser
harness service now only registers the Local (VS Code) harness statically.
All additional harnesses are expected to come from extensions via the
provider API rather than the hardcoded built-ins.

- CustomizationHarnessService reads the providerApi setting at construction
  time and only includes CLI/Claude harnesses when the setting is off
- Simplify _getAllHarnesses(): external harnesses no longer shadow static
  ones with the same id (the overlap case can't happen when providerApi is
  on and only Local is registered)
- Simplify registerExternalHarness dispose: drop the 'restored static
  harness' fallback guard — always fall back to first available harness
- Remove tests that verified the now-deleted external-overrides-static
  behaviour

* fix: extension menu contributions now evaluated for the hooks section

buildCreateActions() had an early 'return actions' for the hooks code
path that exited before the extension menu contribution check. This meant
extensions contributing to chat/customizations/create with a
'aiCustomizationManagementSection == hooks' when-clause were silently
ignored.

Move the AICustomizationManagementCreateMenuId evaluation (and its
'if (extensionCreateActions.length > 0) return extensionCreateActions'
short-circuit) to immediately after the commandId override check and
before the hooks-specific block, so extension-contributed actions take
precedence for all section types including hooks.
2026-04-01 00:07:00 +00:00
..
2026-04-01 00:07:00 +00:00
2026-03-27 15:55:09 -07:00