Why
The current probe layer (src/main/probes/) only knows Anthropic. The catalog has 18 entries but probeProvider() returns error: No probe implemented for "<id>" for any provider whose probeKind is aws, gcp, or azure.
Bedrock and Vertex don't expose a cheap "validate this credential" HTTP endpoint the way OpenAI/Anthropic do — there's no /v1/models you can hit. The standard check is to call a tiny STS-shaped API and parse the response. Three axes:
- Bedrock — call
bedrock:ListFoundationModels (or bedrock:ListCustomModels) with the user's AWS credentials (default chain). 403/expired token ≠ working.
- Vertex — call
aiplatform.googleapis.com/v1/projects/<project>/locations/global/publishers/google/models with the configured ADC + project + region. The envKeys[] for Vertex is empty today so we need to surface a "Project + Region required" step in the wizard before this can be wired.
- Azure —
GET <endpoint>/openai/deployments?api-version=2024-02-01 with the user's AZURE_OPENAI_API_KEY. Or just probe the deployment the user names.
Scope
- Wire
aws probe kind: uses SDK's default credential provider chain; minimal IAM sigv4 against bedrock-runtime or bedrock control plane; returns valid | error with the AWS error code surfaced in detail.
- Wire
gcp probe kind: takes a project and region from wizard config; uses @google-cloud/aiplatform or just an authenticated REST GET; requires gcloud auth application-default login upstream.
- Wire
azure probe kind (and azure-openai): simple GET against the deployment list with the configured key.
- Vault entry for Vertex needs to carry
{project, region} alongside the credential. Either widen SecretWriteOptions or surface project/region as separate UI fields in the Keys step.
- Update
PROVIDER_CATALOG notes for cloud_creds rows to indicate "wizard will ask for project/region first".
- Renderer Keys step: when user picks Vertex, ask for project id + region before "Save"; persist into vault alongside the credential (or as a sibling secret).
- App + CLI both pick up the same probes via the shared
runProbe() dispatcher.
Acceptance criteria
References
Why
The current probe layer (
src/main/probes/) only knows Anthropic. The catalog has 18 entries butprobeProvider()returnserror: No probe implemented for "<id>"for any provider whoseprobeKindisaws,gcp, orazure.Bedrock and Vertex don't expose a cheap "validate this credential" HTTP endpoint the way OpenAI/Anthropic do — there's no
/v1/modelsyou can hit. The standard check is to call a tiny STS-shaped API and parse the response. Three axes:bedrock:ListFoundationModels(orbedrock:ListCustomModels) with the user's AWS credentials (default chain). 403/expired token ≠ working.aiplatform.googleapis.com/v1/projects/<project>/locations/global/publishers/google/modelswith the configured ADC + project + region. TheenvKeys[]for Vertex is empty today so we need to surface a "Project + Region required" step in the wizard before this can be wired.GET <endpoint>/openai/deployments?api-version=2024-02-01with the user'sAZURE_OPENAI_API_KEY. Or just probe the deployment the user names.Scope
awsprobe kind: uses SDK's default credential provider chain; minimal IAM sigv4 againstbedrock-runtimeorbedrockcontrol plane; returnsvalid | errorwith the AWS error code surfaced indetail.gcpprobe kind: takes aprojectandregionfrom wizard config; uses@google-cloud/aiplatformor just an authenticated RESTGET; requiresgcloud auth application-default loginupstream.azureprobe kind (andazure-openai): simpleGETagainst the deployment list with the configured key.{project, region}alongside the credential. Either widenSecretWriteOptionsor surface project/region as separate UI fields in the Keys step.PROVIDER_CATALOGnotes for cloud_creds rows to indicate "wizard will ask for project/region first".runProbe()dispatcher.Acceptance criteria
runProbe({ providerId: 'bedrock' })returns{ valid: true, status: 'ok' }against a working AWS account with Bedrock access.{ valid: false, status: 'invalid', detail: 'AWS error: ...' }for an unconfigured credential chain.Validatebutton in the renderer without code changes beyond the probe files.npm run typecheck && npm run lint && npm run buildclean.References
docs/adr/0003-key-validity-and-expiry-probing.md)aiplatform.googleapis.com: https://cloud.google.com/vertex-ai/generative-ai/docs/learn/rest