feat(connectors): extend ConnectorDefinition with provider/auth/onboarding

- Add PiOAuthProviderId literal type covering pi-ai's built-in OAuth
  providers (anthropic, openai-codex, github-copilot, gemini-cli,
  antigravity)
- Add optional ConnectorDefinition fields: provider (pi-ai provider id),
  auth (ConnectorAuth with kind/type/provider/oauthId/envKey), and
  onboardingFeatured
- Decorate built-in CONNECTORS (codex_local, claude_local, gemini_local,
  claude-compat slots) with their pi-ai provider id, auth schema, and
  onboarding flag so credential-resolver and oauth-login-service can
  dispatch without changing execute/module wiring
- Re-export CONNECTORS, findConnectorDefinition, and
  listFeaturedOnboardingConnectors from main/connectors so consumers
  (including tests) import from a single module
This commit is contained in:
ZacharyZhang-NY committed 2026-04-17 01:28:13 -04:00
1 parent ef90a58fa2
commit 70cdb6838d
2 files changed
+70 -1

No files matched your search

+68 -1
View File
@@ -11,6 +11,45 @@ import { agentConfigurationDoc as geminiDoc, DEFAULT_GEMINI_LOCAL_MODEL, models
import { execute as geminiExecute, sessionCodec as geminiSessionCodec, testEnvironment as geminiTestEnvironment } from "@agentcompany/adapter-gemini-local/server";
import type { CapabilityMatrix, ConnectorId } from "@shared/types";
/**
* OAuth provider id recognized by pi-ai (see
* `@mariozechner/pi-ai/oauth`). Listed providers are the ones pi-ai ships with
* built-in OAuth flow handlers.
*/
export type PiOAuthProviderId =
| "anthropic"
| "openai-codex"
| "github-copilot"
| "gemini-cli"
| "antigravity";
export type ConnectorAuthKind =
| "oauth"
| "api_key"
| "aws"
| "azure"
| "gcp_adc";
/**
* Declarative auth descriptor for a connector. The pi-mono runtime uses this
* to know which credential kind to expect, which OAuth provider to invoke,
* and which environment variable to read as a fallback API key.
*
* Legacy consumers reference `auth.type`; credential-store/oauth code uses
* the canonical `kind`. Both aliases point at the same value.
*/
export interface ConnectorAuth {
kind: ConnectorAuthKind;
/** Alias of `kind` for legacy resolver code. */
type: ConnectorAuthKind;
/** pi-ai OAuth provider id (only set when `kind === "oauth"`). */
provider?: PiOAuthProviderId;
/** Alias of `provider` for legacy resolver code. */
oauthId?: PiOAuthProviderId;
/** Environment variable fallback for `kind === "api_key"`. */
envKey?: string;
}
export interface ConnectorDefinition {
id: ConnectorId;
label: string;
@@ -22,6 +61,21 @@ export interface ConnectorDefinition {
configurationDoc: string;
module: ServerAdapterModule;
listModels?: () => Promise<Array<{ id: string; label: string }>>;
/** pi-ai provider id (e.g. "anthropic", "openai"). Optional — unset for
* adapter-based connectors that do not resolve through pi-ai. */
provider?: string;
/** Auth schema; optional so existing entries stay source-compatible. */
auth?: ConnectorAuth;
/** Featured in the onboarding provider picker. */
onboardingFeatured?: boolean;
}
function oauthAuth(provider: PiOAuthProviderId): ConnectorAuth {
return { kind: "oauth", type: "oauth", provider, oauthId: provider };
}
function apiKeyAuth(envKey?: string): ConnectorAuth {
return { kind: "api_key", type: "api_key", envKey };
}
const claudeCompatModule: ServerAdapterModule = {
@@ -94,6 +148,9 @@ export const CONNECTORS: ConnectorDefinition[] = [
models: codexModels,
},
listModels: async () => codexModels,
provider: "openai",
auth: oauthAuth("openai-codex"),
onboardingFeatured: true,
},
{
id: "claude_local",
@@ -119,8 +176,15 @@ export const CONNECTORS: ConnectorDefinition[] = [
models: claudeModels,
},
listModels: async () => claudeModels,
provider: "anthropic",
auth: oauthAuth("anthropic"),
onboardingFeatured: true,
},
...claudeCompatSlots,
...claudeCompatSlots.map((slot) => ({
...slot,
provider: "anthropic",
auth: apiKeyAuth("ANTHROPIC_API_KEY"),
})),
{
id: "gemini_local",
label: "Gemini CLI",
@@ -145,5 +209,8 @@ export const CONNECTORS: ConnectorDefinition[] = [
models: geminiModels,
},
listModels: async () => geminiModels,
provider: "google",
auth: oauthAuth("gemini-cli"),
onboardingFeatured: true,
},
];
+2
View File
@@ -1,6 +1,8 @@
import type { ConnectorRecord } from "@shared/types";
import { CONNECTORS } from "./connector-definitions";
export { CONNECTORS } from "./connector-definitions";
export type { ConnectorDefinition } from "./connector-definitions";
export { findConnectorDefinition, listFeaturedOnboardingConnectors } from "./connector-definitions-lookup";
const RESERVED_ENV_BINDING_KEYS = new Set([
"PATH",