diff --git a/src/agent/personas.ts b/src/agent/personas.ts index f7c27073fdd..630f5792d36 100644 --- a/src/agent/personas.ts +++ b/src/agent/personas.ts @@ -216,6 +216,8 @@ export const ZEE_AGENT_CONFIG: AgentConfig = { "zee:notification": true, "zee:calendar": true, "zee:contacts": true, + "zee:splitwise": true, + "zee:codexbar": true, }, options: {}, maxSteps: 30, @@ -234,6 +236,8 @@ Your strengths: - Communication across multiple channels (WhatsApp, email, etc.) - Scheduling and reminders - Note-taking and information retrieval +- Shared expenses and reimbursements (Splitwise) +- Usage monitoring via CodexBar (menu bar + CLI) Your approach: - Be helpful without being overwhelming diff --git a/src/config/runtime.ts b/src/config/runtime.ts index 76f3cbb5468..0e536f41b9e 100644 --- a/src/config/runtime.ts +++ b/src/config/runtime.ts @@ -42,6 +42,10 @@ type RuntimeConfig = { embeddingDimension?: number; }; }; + zee?: { + splitwise?: ZeeSplitwiseConfig; + codexbar?: ZeeCodexbarConfig; + }; }; export type MemoryQdrantConfig = { @@ -66,6 +70,20 @@ export type MemoryEmbeddingConfig = { baseUrl?: string; }; +export type ZeeSplitwiseConfig = { + enabled?: boolean; + token?: string; + tokenFile?: string; + baseUrl?: string; + timeoutMs?: number; +}; + +export type ZeeCodexbarConfig = { + enabled?: boolean; + command?: string | string[]; + timeoutMs?: number; +}; + const CONFIG_PATHS = [ path.join(os.homedir(), ".config", "agent-core", "agent-core.jsonc"), path.join(os.homedir(), ".config", "agent-core", "agent-core.json"), @@ -120,6 +138,18 @@ function mergeConfigs(base: RuntimeConfig, override: RuntimeConfig): RuntimeConf ...override.tiara?.qdrant, }, }, + zee: { + ...base.zee, + ...override.zee, + splitwise: { + ...base.zee?.splitwise, + ...override.zee?.splitwise, + }, + codexbar: { + ...base.zee?.codexbar, + ...override.zee?.codexbar, + }, + }, }; } @@ -201,3 +231,11 @@ export function getTiaraQdrantConfig(): TiaraQdrantConfig { embeddingDimension, }; } + +export function getZeeSplitwiseConfig(): ZeeSplitwiseConfig { + return loadRuntimeConfig().zee?.splitwise ?? {}; +} + +export function getZeeCodexbarConfig(): ZeeCodexbarConfig { + return loadRuntimeConfig().zee?.codexbar ?? {}; +} diff --git a/src/config/types.ts b/src/config/types.ts index 26c369bc4c6..1b9c667cffa 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -51,6 +51,9 @@ export interface AgentCoreConfig { /** General settings */ settings: GeneralSettings; + + /** Zee-specific integrations */ + zee?: ZeeConfig; } // ============================================================================= @@ -303,6 +306,29 @@ export interface GeneralSettings { experimental?: Record; } +// ============================================================================= +// Zee Integrations +// ============================================================================= + +export interface ZeeConfig { + splitwise?: ZeeSplitwiseConfig; + codexbar?: ZeeCodexbarConfig; +} + +export interface ZeeSplitwiseConfig { + enabled?: boolean; + token?: string; + tokenFile?: string; + baseUrl?: string; + timeoutMs?: number; +} + +export interface ZeeCodexbarConfig { + enabled?: boolean; + command?: string | string[]; + timeoutMs?: number; +} + // ============================================================================= // Configuration Loading // ============================================================================= diff --git a/src/personas/persona.ts b/src/personas/persona.ts index 669ab093570..3fba1573215 100644 --- a/src/personas/persona.ts +++ b/src/personas/persona.ts @@ -471,7 +471,7 @@ function condenseSkillContent(content: string, persona: PersonaId): string { // If no structured content found, provide a summary based on persona if (parts.length === 0) { const summaries: Record = { - zee: "Memory storage/search, messaging (WhatsApp/Telegram), calendar, contacts, notifications", + zee: "Memory storage/search, messaging (WhatsApp/Telegram), calendar, contacts, notifications, Splitwise expense sharing, CodexBar usage tracking", stanley: "Market data, portfolio management, SEC filings, research, NautilusTrader backtesting", johny: "Knowledge graph, spaced repetition, concept mapping, practice problems, learning progress", };