Skip to content

feat(ai): add Gemini as a third AI provider#18

Open
alon710 wants to merge 11 commits into
Shaya16:mainfrom
alon710:alon710/add-gemini-provider-v2
Open

feat(ai): add Gemini as a third AI provider#18
alon710 wants to merge 11 commits into
Shaya16:mainfrom
alon710:alon710/add-gemini-provider-v2

Conversation

@alon710

@alon710 alon710 commented May 27, 2026

Copy link
Copy Markdown

Summary

  • Adds Google Gemini alongside Claude and Ollama: provider factory, settings wiring, setup wizard step, settings page section, and i18n strings (en/he).
  • Extracts shared JSON parsing into src/server/ai/lib/parse-response.ts so Claude and the new Gemini provider share categorization-response handling.
  • Pins PRs to the upstream Shaya16/Spent repo in CLAUDE.md and refreshes README.md accordingly.

Test plan

  • Run setup wizard and configure Gemini end-to-end
  • Switch provider in Settings between Claude, Ollama, and Gemini
  • Trigger a sync and verify AI categorization works with Gemini

alon710 and others added 11 commits May 27, 2026 13:53
Adds Google Gemini alongside Claude and Ollama for transaction
categorization. Uses @google/genai with gemini-2.5-flash and stores
the API key encrypted under provider-specific setting keys so it can
coexist with a Claude key. Wires the new option through the setup
wizard, settings page, factory, and i18n.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds a streaming /chat page that uses the same AI provider configured
for categorization (Claude or Ollama). The agent answers free-text
questions about the user's finances through tool calls that wrap
existing read-only DB queries (transactions, monthly summary, top
merchants, category breakdown). Page and sidebar entry are disabled
when no AI provider is configured.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Next.js 16 renames the Middleware file convention to Proxy. The build
emits a deprecation warning until the rename happens.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
refactor: rename middleware.ts to proxy.ts for Next.js 16
- always require a key on save and drop the leave-blank-to-keep-stored UX,
  removing the hasStoredKey helper, hasClaudeApiKey/hasGeminiApiKey flags,
  and the i18n hint pair this required
- extract shared parseCategorizationResponse used by ClaudeProvider and
  GeminiProvider
- merge ClaudeConfig and GeminiConfig in the setup wizard into a single
  ApiKeyConfig with a children slot for provider-specific extras
- dispatch friendlyAIError on the provider argument instead of cascading
  regex matches over raw error text
- drop redundant Gemini model whitelist checks in the factory and settings
  writer

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…endering

Adds persistent chat sessions backed by SQLite (migration 021), a session history
sidebar with rename and delete actions, AI-generated chat titles via a setChatTitle
tool, and markdown rendering for assistant responses using react-markdown.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(chat): AI chat agent with persistent sessions and tool-based data access
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant