co-mono/packages/coding-agent/examples/sdk/09-api-keys-and-oauth.ts
Mario Zechner 56121dcac1 Add SDK usage examples
12 examples showing increasing levels of customization:
- 01-minimal: all defaults
- 02-custom-model: model and thinking level
- 03-custom-prompt: replace or modify prompt
- 04-skills: discover, filter, merge skills
- 05-tools: built-in tools, custom tools
- 06-hooks: logging, blocking, result modification
- 07-context-files: AGENTS.md files
- 08-slash-commands: file-based commands
- 09-api-keys-and-oauth: API key resolution, OAuth config
- 10-settings: compaction, retry, terminal settings
- 11-sessions: persistence options
- 12-full-control: replace everything

Also exports FileSlashCommand type from index.ts
2025-12-22 03:14:30 +01:00

45 lines
1.4 KiB
TypeScript

/**
* API Keys and OAuth
*
* Configure API key resolution. Default checks: models.json, OAuth, env vars.
*/
import {
createAgentSession,
configureOAuthStorage,
defaultGetApiKey,
SessionManager,
} from "../../src/index.js";
import { getAgentDir } from "../../src/config.js";
// Default: uses env vars (ANTHROPIC_API_KEY, etc.), OAuth, and models.json
const { session: defaultSession } = await createAgentSession({
sessionManager: SessionManager.inMemory(),
});
console.log("Session with default API key resolution");
// Custom resolver
const { session: customSession } = await createAgentSession({
getApiKey: async (model) => {
// Custom logic (secrets manager, database, etc.)
if (model.provider === "anthropic") {
return process.env.MY_ANTHROPIC_KEY;
}
// Fall back to default
return defaultGetApiKey()(model);
},
sessionManager: SessionManager.inMemory(),
});
console.log("Session with custom API key resolver");
// Use OAuth from ~/.pi/agent while customizing everything else
configureOAuthStorage(getAgentDir()); // Must call before createAgentSession
const { session: hybridSession } = await createAgentSession({
agentDir: "/tmp/custom-config", // Custom config location
// But OAuth tokens still come from ~/.pi/agent/oauth.json
systemPrompt: "You are helpful.",
skills: [],
sessionManager: SessionManager.inMemory(),
});
console.log("Session with OAuth from default location, custom config elsewhere");