From 2ee3bb37db745d70fded10f319d5347a97671aed Mon Sep 17 00:00:00 2001 From: Roberto Musso Date: Wed, 15 Apr 2026 11:26:46 +0200 Subject: [PATCH] update skill config --- .claude/CLAUDE.md | 136 ++++---- .claude/CLAUDE.original.md | 269 +++++++++++++++ .claude/settings.json | 3 +- .claude/settings.local.json | 11 +- .gitignore | 99 ++++++ .vscode/mcp.json | 9 +- adiuvAI | 2 +- docs/PROMPT-sonner-notifications.md | 212 ++++++++++++ docs/adiuvAI.pptx | Bin 0 -> 354088 bytes docs/build-deck-commercialista.js | 504 ++++++++++++++++++++++++++++ docs/memory-evolution-strategy.md | 120 +++++++ docs/multi-region-guide.md | 253 ++++++++++++++ docs/plan-sonner-notifications.md | 484 ++++++++++++++++++++++++++ 13 files changed, 2026 insertions(+), 76 deletions(-) create mode 100644 .claude/CLAUDE.original.md create mode 100644 .gitignore create mode 100644 docs/PROMPT-sonner-notifications.md create mode 100644 docs/adiuvAI.pptx create mode 100644 docs/build-deck-commercialista.js create mode 100644 docs/memory-evolution-strategy.md create mode 100644 docs/multi-region-guide.md create mode 100644 docs/plan-sonner-notifications.md diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index a87f43f..9c715fd 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -1,22 +1,22 @@ # CLAUDE.md -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. +Guide Claude Code when work in repo. ## Keeping This File Up to Date -Update this file whenever a lesson is learned during development. Specifically, update CLAUDE.md when: +Update when lesson learned. Update when: -- A non-obvious architectural decision is made or discovered -- A gotcha, footgun, or surprising behavior is encountered (and the fix/workaround) -- A new command, workflow, or tool is added to the project -- A convention is established that isn't obvious from reading the code -- An integration detail is clarified (e.g., how the IPC protocol actually behaves, edge cases in the agent tool call cycle) +- Non-obvious arch decision made or found +- Gotcha, footgun, surprising behavior hit (+ fix/workaround) +- New command, workflow, tool added +- Convention set that not obvious from code +- Integration detail clarified (IPC protocol behavior, agent tool call edge cases) -Do **not** add things already derivable from reading the code, generic best practices, or ephemeral task notes — only durable, reusable knowledge. +Do **not** add derivable-from-code things, generic best practices, or ephemeral task notes — durable knowledge only. ## Repository Layout -This is a **monorepo with git submodules**. Each submodule is an independent repo with its own `.claude/CLAUDE.md` for detailed guidance. +**Monorepo with git submodules.** Each submodule independent repo with own `.claude/CLAUDE.md`. | Directory | What | Submodule | |-----------|------|-----------| @@ -25,13 +25,13 @@ This is a **monorepo with git submodules**. Each submodule is an independent rep | **`website/`** | Landing page (single `index.html`) | `git.muticolturano.com/adiuvAI/website` | | **`docs/`** | Planning docs & working memory (not a submodule) | -- | -After cloning, run `git submodule update --init --recursive` to populate submodule contents. +After clone, run `git submodule update --init --recursive` to populate submodules. --- ## adiuvAI (Electron App) -> **Detailed docs**: `adiuvAI/.claude/CLAUDE.md` covers commands, architecture, AI subsystem, design context, and conventions in depth. +> **Detailed docs**: `adiuvAI/.claude/CLAUDE.md` — commands, architecture, AI subsystem, design context, conventions. ### Commands @@ -62,12 +62,12 @@ Main Process (Node.js) └── LangGraph orchestrator (3 specialist agents, pluggable LLM providers) ``` -**This is a local-first app.** All user data (tasks, notes, projects) lives in local SQLite. The AI system (LangGraph + LangChain) runs entirely in the Electron main process with pluggable providers (OpenAI, Anthropic, GitHub Copilot). +**Local-first app.** All user data (tasks, notes, projects) in local SQLite. AI system (LangGraph + LangChain) runs in Electron main process, pluggable providers (OpenAI, Anthropic, GitHub Copilot). **IPC channels**: - `'trpc'` — bidirectional tRPC request/response (all CRUD) -- `'ai:stream'` — one-way token streaming from main → renderer -- `'ai:action'` — AI side-effects (e.g., task auto-created by agent) +- `'ai:stream'` — one-way token streaming main → renderer +- `'ai:action'` — AI side-effects (e.g. agent auto-creates task) **Key source paths**: - `src/main/ipc.ts` — Custom tRPC↔IPC bridge @@ -80,46 +80,54 @@ Main Process (Node.js) - `src/main/auth/backup-key.ts` — Device-specific AES-256 backup key (safeStorage, not password-derived) - `src/main/ai/token.ts` — Two-tier token storage: safeStorage + electron-store fallback - `src/main/auth/locale-defaults.ts` — Detects timezone, date/time format, language from OS locale -- `src/main/api/format-row.ts` — Formats timestamp columns in query results using user's FormatPrefs +- `src/main/api/format-row.ts` — Formats timestamp columns using user's FormatPrefs **Non-obvious details**: -- `electron-trpc` is NOT used — custom IPC bridge in `ipc.ts` + `ipcLink.ts` because electron-trpc bundles tRPC v10 internals +- `electron-trpc` NOT used — custom IPC bridge in `ipc.ts` + `ipcLink.ts` because electron-trpc bundles tRPC v10 internals - Vite configs use `.mts` extension to avoid ESM/CJS conflicts with electron-forge - `forge.config.ts` has complex cross-compilation hooks (downloads platform-specific native binaries for better-sqlite3 and LanceDB) -- DB has no foreign key constraints — cascade deletes are implemented in tRPC procedures -- Timestamps are milliseconds (JavaScript `Date.getTime()`), not ISO strings +- DB has no foreign key constraints — cascade deletes in tRPC procedures +- Timestamps are milliseconds (`Date.getTime()`), not ISO strings - Notes auto-embed to LanceDB on create/update (fire-and-forget, errors swallowed) +**Settings Page (shared Electron + Web)**: +- Settings page runs in **both** Electron and standalone web SPA (future landing-page portal). Same React components — no duplication. +- **Platform Adapter pattern**: `PlatformProvider` context (`src/renderer/lib/platform.tsx`) exposes `isElectron`/`isWeb`/`hasLocalAgents`/`hasFileDialog` flags. Components use `usePlatform()` to gate Electron-only features or disable on web. +- **6 sections**: Profile, AI Preferences, Account, Billing, Appearance, Agents. Sidebar nav with icons in `types.ts` (`SECTIONS` array). +- **Web build**: `vite.web.config.mts` builds standalone SPA to `dist-web/`. Entry: `web.html` → `src/renderer/web-main.tsx` (uses `httpBatchLink` via `src/renderer/lib/httpLink.ts` instead of `ipcLink`). Scripts: `npm run dev:web`, `npm run build:web`, `npm run preview:web`. +- **Electron-only gating**: Device ID card and local agent filesystem gated behind `platform.isElectron`. On web: visible but disabled, not hidden. +- **Gotcha**: Do NOT add Electron-specific settings (server URL, native file pickers) without wrapping in `platform.isElectron`. Same component tree renders on web. + **Onboarding Wizard**: -- First-run wizard collects 5 fields: `job_role`, `industry`, `primary_use_case`, `tone_preference`, `language`. Plus `user_name` derived from profile `name`+`surname`. +- First-run wizard collects 5 fields: `job_role`, `industry`, `primary_use_case`, `tone_preference`, `language`. Plus `user_name` from `name`+`surname`. - All fields stored as encrypted core memory (backend `MemoryMiddleware`), not local electron-store. -- `onboarding_completed_at` on the `users` table (nullable TIMESTAMPTZ) gates the flow — `null` = show wizard, non-null = skip. -- `AppShell.tsx` gates: if `profile.onboardingCompletedAt == null` → render `` instead of the app. +- `onboarding_completed_at` on `users` table (nullable TIMESTAMPTZ) gates flow — `null` = show wizard, non-null = skip. +- `AppShell.tsx` gates: if `profile.onboardingCompletedAt == null` → render `` instead of app. - `auth.status` tRPC procedure auto-seeds `language` and `user_name` into MemoryCore if missing (fire-and-forget `.catch(() => {})`). -- Format prefs (timezone, dateFormat, timeFormat) are stored in electron-store (`FormatPrefs`), not core memory — they're device-specific. -- `drizzle-executor.ts` wraps all query results through `formatRow()`/`formatRows()` using the user's FormatPrefs. -- Settings > Profile section allows post-onboarding editing of all fields + format prefs. -- **Gotcha — shadcn Button `outline` variant in dark mode**: The variant defines `dark:bg-input/30 dark:border-input dark:hover:bg-input/50` which overrides any custom `className` background. Fix: switch between `variant="default"` and `variant="outline"` instead of adding className overrides. -- **Gotcha — locale codes vs human names**: `app.getLocale()` and `navigator.language` return codes like `en-US`. Use `Intl.DisplayNames(undefined, { type: 'language' })` to convert to "English". This must be done in both the main process (`locale-defaults.ts`) and renderer (`OnboardingFlow.tsx`). +- Format prefs (timezone, dateFormat, timeFormat) stored in electron-store (`FormatPrefs`), not core memory — device-specific. +- `drizzle-executor.ts` wraps all query results through `formatRow()`/`formatRows()` using user's FormatPrefs. +- Settings > Profile allows post-onboarding edit of all fields + format prefs. +- **Gotcha — shadcn Button `outline` variant in dark mode**: Variant defines `dark:bg-input/30 dark:border-input dark:hover:bg-input/50` — overrides custom `className` background. Fix: switch between `variant="default"` and `variant="outline"` instead of className overrides. +- **Gotcha — locale codes vs human names**: `app.getLocale()` and `navigator.language` return codes like `en-US`. Use `Intl.DisplayNames(undefined, { type: 'language' })` to convert to "English". Must do in both main process (`locale-defaults.ts`) and renderer (`OnboardingFlow.tsx`). **i18n (Internationalization)**: - Uses `i18next` + `react-i18next` with bundled JSON translations (no lazy loading). -- Config in `src/renderer/i18n.ts`. 5 languages: EN, IT, ES, FR, DE. `SUPPORTED_LANGUAGES` array exported for UI selectors. +- Config in `src/renderer/i18n.ts`. 5 languages: EN, IT, ES, FR, DE. `SUPPORTED_LANGUAGES` exported for UI selectors. - Translation files: `src/renderer/locales/{en,it,es,fr,de}/translation.json`. Namespaces: `nav`, `auth`, `tasks`, `settings`, `common`, `errors`, `home`, `timeline`, `projects`, `agents`. -- **`common.*` namespace** holds shared labels (`save`, `cancel`, `delete`, `edit`, `add`, `rename`, `saving`, `deleting`, `creating`, `renameDescription`, `deleteTitle`). Before adding a new key, check if `common.*` already has it. +- **`common.*` namespace** holds shared labels (`save`, `cancel`, `delete`, `edit`, `add`, `rename`, `saving`, `deleting`, `creating`, `renameDescription`, `deleteTitle`). Check `common.*` before adding new key. - Pluralization uses i18next `_one`/`_other` suffixes (e.g. `tasksDueToday_one`, `tasksDueToday_other`). -- `LanguageSync` component in `src/renderer/index.tsx` reads persisted `uiLanguage` from electron-store via tRPC on startup and syncs to i18next. -- Language selector lives in `GeneralSection.tsx` (Settings > General). On change it: (1) calls `i18n.changeLanguage()`, (2) persists to electron-store via `setUiLanguage` mutation, (3) writes to backend core memory so AI responds in the same language. +- `LanguageSync` component in `src/renderer/index.tsx` reads persisted `uiLanguage` from electron-store via tRPC on startup, syncs to i18next. +- Language selector in `GeneralSection.tsx` (Settings > General). On change: (1) calls `i18n.changeLanguage()`, (2) persists to electron-store via `setUiLanguage` mutation, (3) writes to backend core memory so AI responds in same language. - `getUiLanguage()` exported from `src/main/store.ts` — used by `orchestrator.ts` to append language hint to daily brief prompt. -- Static data arrays that need translation use `labelKey` pattern (not `label`): store a translation key, call `t(labelKey)` at render time. Used in `NAV_ITEMS`, `COLUMNS`, `SECTIONS`, `SUGGESTION_CHIPS`. -- When adding new translated text: add the key to **all 5** JSON files. Keep `common.*` keys consistent across all languages. +- Static data arrays needing translation use `labelKey` pattern (not `label`): store translation key, call `t(labelKey)` at render. Used in `NAV_ITEMS`, `COLUMNS`, `SECTIONS`, `SUGGESTION_CHIPS`. +- When adding new translated text: add key to **all 5** JSON files. Keep `common.*` consistent across all languages. **Google OAuth (adiuvAI side)**: -- `adiuvai://` is NOT accepted by Google as a redirect URI — Google only accepts `http://localhost` or `https://`. The API backend exposes `GET /auth/oauth/google/web-callback` which receives the Google redirect and immediately bounces to `adiuvai://oauth/callback?...`. The redirect URI registered in Google Cloud Console points to the backend, not the Electron app. -- `app.requestSingleInstanceLock()` is required for the `second-instance` event to fire on Windows/Linux. If it returns `false`, call `app.quit()` immediately (another instance is already running). -- In dev (`process.defaultApp === true`), `setAsDefaultProtocolClient('adiuvai')` must include `[path.resolve(process.argv[1])]` as the third argument so the OS protocol registration includes the entry script. -- `loginWithOAuth` uses `fetch()` directly (not `this.get()`) because the authorize endpoint is public — `get()` throws when not authenticated. -- The backup key in `backup-key.ts` is stored in `encryptedTokens` under the key `backup_key`, reusing `getToken/setToken` from `token.ts`. It is device-bound and never password-derived, so social-login users can use backup features without issue. +- `adiuvai://` NOT accepted by Google as redirect URI — Google only accepts `http://localhost` or `https://`. API backend exposes `GET /auth/oauth/google/web-callback` which receives Google redirect and bounces to `adiuvai://oauth/callback?...`. Redirect URI in Google Cloud Console points to backend, not Electron app. +- `app.requestSingleInstanceLock()` required for `second-instance` event on Windows/Linux. If returns `false`, call `app.quit()` immediately. +- In dev (`process.defaultApp === true`), `setAsDefaultProtocolClient('adiuvai')` must include `[path.resolve(process.argv[1])]` as third arg so OS protocol registration includes entry script. +- `loginWithOAuth` uses `fetch()` directly (not `this.get()`) — authorize endpoint is public, `get()` throws when not authenticated. +- Backup key in `backup-key.ts` stored in `encryptedTokens` under key `backup_key`, reusing `getToken/setToken` from `token.ts`. Device-bound, never password-derived — social-login users can use backup features. --- @@ -185,11 +193,11 @@ FastAPI app (app/main.py) └── Marketplace (app/marketplace/) — plugin catalog, review, revenue sharing ``` -**LLM routing**: `gpt-4o-mini` classifies intent → routes to domain agent → agent uses `gpt-4o` with tools → tool calls describe client-side operations (JSON) → Electron executes locally and returns results. +**LLM routing**: `gpt-4o-mini` classifies intent → routes to domain agent → agent uses `gpt-4o` with tools → tool calls describe client-side ops (JSON) → Electron executes locally, returns results. -**Zero-trust data model**: The backend never stores or decrypts user content. PostgreSQL holds only auth, billing, plugin metadata, and storage record pointers. All user data is E2E-encrypted before leaving the Electron client. +**Zero-trust data model**: Backend never stores or decrypts user content. PostgreSQL holds only auth, billing, plugin metadata, storage record pointers. All user data E2E-encrypted before leaving Electron client. -**Key config**: `app/config/settings.py` — all env vars via Pydantic Settings. Copy `.env.example` to `.env` for local dev. Stripe and S3 gracefully stub when keys aren't configured. +**Key config**: `app/config/settings.py` — all env vars via Pydantic Settings. Copy `.env.example` to `.env` for local dev. Stripe and S3 gracefully stub when keys absent. **Database**: PostgreSQL with async SQLAlchemy 2.0 + asyncpg. 9 ORM models in `app/models.py`. Alembic migrations in `alembic/versions/`. @@ -197,36 +205,36 @@ FastAPI app (app/main.py) ### Non-obvious details -- **Tier from DB, not JWT**: `get_current_user` decodes JWT but fetches authoritative tier from `subscriptions` table — tier changes take effect immediately without re-login -- **Refresh tokens hashed**: Plaintext returned to client, stored as SHA-256 in DB — server can never retrieve the plaintext (intentional) +- **Tier from DB, not JWT**: `get_current_user` decodes JWT but fetches authoritative tier from `subscriptions` table — tier changes take effect immediately, no re-login needed +- **Refresh tokens hashed**: Plaintext returned to client, stored as SHA-256 in DB — server can never retrieve plaintext (intentional) - **WebSocket auth via query param**: `?token=` instead of Bearer header (WebSocket handshake limitation) - **Prompt IP protection**: `PromptTemplateRegistry` keeps prompts server-side; clients receive opaque `template_id`. `SanitizerMiddleware` strips leaked fragments from responses -- **Agents don't execute operations**: Tools return JSON describing client-side ops — the Electron client executes against local SQLite -- **Alembic async/sync split**: App uses `postgresql+asyncpg`, Alembic CLI needs `postgresql+psycopg2` — `env.py` handles the URL conversion +- **Agents don't execute operations**: Tools return JSON describing client-side ops — Electron client executes against local SQLite +- **Alembic async/sync split**: App uses `postgresql+asyncpg`, Alembic CLI needs `postgresql+psycopg2` — `env.py` handles URL conversion - **Tool loop cap**: Agent `_tool_loop` stops after 5 iterations to prevent infinite loops - **Route order matters**: `/backup/history` must be declared before `/backup/{backup_id}` to avoid path param shadowing - **CORS includes `app://`**: Electron uses custom `app://` protocol, not http/https -- **Vector search on encrypted data is not semantic**: Backend derives deterministic 32-dim floats from blob SHA-256 for storage/search — a known trade-off +- **Vector search on encrypted data is not semantic**: Backend derives deterministic 32-dim floats from blob SHA-256 for storage/search — known trade-off **Onboarding (API side)**: -- `PUT /auth/me/memory` — updates core memory k/v pairs and optionally marks onboarding complete (`mark_onboarded: true` sets `users.onboarding_completed_at`). -- `POST /auth/me/onboarding/reset` — nullifies `onboarding_completed_at` so the wizard re-runs. +- `PUT /auth/me/memory` — updates core memory k/v pairs, optionally marks onboarding complete (`mark_onboarded: true` sets `users.onboarding_completed_at`). +- `POST /auth/me/onboarding/reset` — nullifies `onboarding_completed_at` so wizard re-runs. - `POST /auth/onboarding/normalize` — LLM-normalizes free-text onboarding inputs via `gpt-4o-mini`; returns inputs unchanged on error. -- `get_current_user()` in `auth.py` middleware now decrypts core memory blocks and includes them in `UserProfile.memory` dict. -- `users.onboarding_completed_at` is a nullable TIMESTAMPTZ column — returned as epoch ms (int) in UserProfile schema. +- `get_current_user()` in `auth.py` middleware decrypts core memory blocks, includes in `UserProfile.memory` dict. +- `users.onboarding_completed_at` — nullable TIMESTAMPTZ, returned as epoch ms (int) in UserProfile schema. **i18n (API side)**: -- `_language_instruction()` in `app/core/deep_agent.py` reads the user's `language` from `MemoryCore` and appends a system prompt directive ("Always respond in {language}") to all 4 `run_*` functions. -- The Electron client writes the user's chosen language to backend core memory on language change, so the API picks it up on the next agent call. +- `_language_instruction()` in `app/core/deep_agent.py` reads user's `language` from `MemoryCore`, appends system prompt directive ("Always respond in {language}") to all 4 `run_*` functions. +- Electron client writes chosen language to backend core memory on change — API picks up on next agent call. **Google OAuth (api side)**: -- OAuth routes live in `app/api/routes/auth.py`: `GET /auth/oauth/{provider}/authorize`, `POST /auth/oauth/{provider}/callback`, `GET /auth/oauth/{provider}/web-callback` (bounces to deep link, excluded from OpenAPI schema). -- Provider abstraction in `app/auth/oauth_providers.py` — `GoogleOAuthProvider` uses `httpx` directly (no `authlib`). PKCE S256 is implemented manually via `generate_pkce_pair()`. -- `_pending_states` dict in `routes/auth.py` is **in-memory** — works for single-process dev but does not survive restarts and does not scale to multiple workers. Replace with Redis in production. -- `users.password_hash` is **nullable** — social-only users have `password_hash=None`. `await db.flush()` is required before creating a linked `OAuthAccount` to populate `new_user.id` before commit. -- `OAUTH_REDIRECT_URI` must point to the **API backend** (e.g. `https://api.adiuvai.com/...`), not the website domain. `adiuvai.com` is a static site with no server-side routing. -- **Unverified email + existing account = 409**: if `email_verified=False` and the email is already registered, the callback returns 409. Without this guard, branch 3 would attempt to INSERT a duplicate email and crash with a DB constraint violation (500). -- **Testing OAuth routes**: mock `GoogleOAuthProvider.exchange_code` and `get_userinfo` with `patch.object(..., new=AsyncMock(...))` — works because FastAPI instantiates a new provider per request. Use `monkeypatch.setattr(settings, "GOOGLE_AUTH_CLIENT_ID", ...)` to simulate configured credentials without restarting the app. +- OAuth routes in `app/api/routes/auth.py`: `GET /auth/oauth/{provider}/authorize`, `POST /auth/oauth/{provider}/callback`, `GET /auth/oauth/{provider}/web-callback` (bounces to deep link, excluded from OpenAPI schema). +- Provider abstraction in `app/auth/oauth_providers.py` — `GoogleOAuthProvider` uses `httpx` directly (no `authlib`). PKCE S256 implemented manually via `generate_pkce_pair()`. +- `_pending_states` dict in `routes/auth.py` is **in-memory** — works for single-process dev, doesn't survive restarts, doesn't scale to multiple workers. Replace with Redis in production. +- `users.password_hash` is **nullable** — social-only users have `password_hash=None`. `await db.flush()` required before creating linked `OAuthAccount` to populate `new_user.id` before commit. +- `OAUTH_REDIRECT_URI` must point to **API backend** (e.g. `https://api.adiuvai.com/...`), not website domain. `adiuvai.com` is static site with no server-side routing. +- **Unverified email + existing account = 409**: if `email_verified=False` and email already registered, callback returns 409. Without this guard, branch 3 would INSERT duplicate email and crash with DB constraint violation (500). +- **Testing OAuth routes**: mock `GoogleOAuthProvider.exchange_code` and `get_userinfo` with `patch.object(..., new=AsyncMock(...))` — works because FastAPI instantiates new provider per request. Use `monkeypatch.setattr(settings, "GOOGLE_AUTH_CLIENT_ID", ...)` to simulate configured credentials without restart. ### Tier System @@ -243,19 +251,19 @@ Enforced in `app/api/middleware/rate_limit.py` (sliding window) and `app/billing ## Cross-Project Integration -The Electron app and FastAPI backend communicate via **WebSocket** (`/chat/stream`): +Electron app and FastAPI backend communicate via **WebSocket** (`/chat/stream`): 1. Electron connects with `?token=` query param 2. Client sends `ChatRequest` JSON frame -3. Server streams text chunks, then a final frame: `{"done": true, "response": "...", "actions": []}` +3. Server streams text chunks, then final frame: `{"done": true, "response": "...", "actions": []}` 4. Server sends `tool_call` frames → Electron executes against local SQLite → returns `tool_result` -5. Server pings every 30 seconds to keep connection alive +5. Server pings every 30 seconds to keep alive -The Electron app also has a **fully local AI path** (LangGraph orchestrator in main process) that doesn't require the backend — this is the primary path for desktop use. +Electron also has **fully local AI path** (LangGraph orchestrator in main process) that doesn't require backend — primary path for desktop use. --- ## MCP Servers -- **Langfuse Docs** (`https://langfuse.com/api/mcp`) — configured at workspace level for prompt management documentation -- **shadcn** (`npx shadcn@latest mcp`) — configured in `adiuvAI/` for UI component generation +- **Langfuse Docs** (`https://langfuse.com/api/mcp`) — workspace-level, prompt management docs +- **shadcn** (`npx shadcn@latest mcp`) — configured in `adiuvAI/` for UI component generation \ No newline at end of file diff --git a/.claude/CLAUDE.original.md b/.claude/CLAUDE.original.md new file mode 100644 index 0000000..a676813 --- /dev/null +++ b/.claude/CLAUDE.original.md @@ -0,0 +1,269 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Keeping This File Up to Date + +Update this file whenever a lesson is learned during development. Specifically, update CLAUDE.md when: + +- A non-obvious architectural decision is made or discovered +- A gotcha, footgun, or surprising behavior is encountered (and the fix/workaround) +- A new command, workflow, or tool is added to the project +- A convention is established that isn't obvious from reading the code +- An integration detail is clarified (e.g., how the IPC protocol actually behaves, edge cases in the agent tool call cycle) + +Do **not** add things already derivable from reading the code, generic best practices, or ephemeral task notes — only durable, reusable knowledge. + +## Repository Layout + +This is a **monorepo with git submodules**. Each submodule is an independent repo with its own `.claude/CLAUDE.md` for detailed guidance. + +| Directory | What | Submodule | +|-----------|------|-----------| +| **`adiuvAI/`** | Electron desktop app (TypeScript/React) | `git.muticolturano.com/adiuvAI/adiuvAI` | +| **`api/`** | FastAPI backend (Python) | `git.muticolturano.com/adiuvAI/api` | +| **`website/`** | Landing page (single `index.html`) | `git.muticolturano.com/adiuvAI/website` | +| **`docs/`** | Planning docs & working memory (not a submodule) | -- | + +After cloning, run `git submodule update --init --recursive` to populate submodule contents. + +--- + +## adiuvAI (Electron App) + +> **Detailed docs**: `adiuvAI/.claude/CLAUDE.md` covers commands, architecture, AI subsystem, design context, and conventions in depth. + +### Commands + +```bash +cd adiuvAI +npm run start # Start dev server (Electron + Vite) +npm run lint # ESLint +npm run knip # Dead code analysis +npm run make # Build installers (Windows/Linux/macOS) +npm run package # Package without creating installers +npx drizzle-kit generate # Generate migration from schema changes +npx drizzle-kit push # Push schema directly (dev only) +``` + +No test suite currently. + +### Architecture + +``` +Renderer (React 19 + TanStack Router) + ↓ custom ipcLink (NOT electron-trpc — incompatible with tRPC v11) +Preload (contextBridge: window.electronTRPC + window.electronAI) + ↓ IPC channels +Main Process (Node.js) + ├── tRPC router (all CRUD + AI procedures) + ├── SQLite (better-sqlite3 + Drizzle ORM, WAL mode) + ├── LanceDB (vector embeddings, 1536-dim text-embedding-3-small) + └── LangGraph orchestrator (3 specialist agents, pluggable LLM providers) +``` + +**This is a local-first app.** All user data (tasks, notes, projects) lives in local SQLite. The AI system (LangGraph + LangChain) runs entirely in the Electron main process with pluggable providers (OpenAI, Anthropic, GitHub Copilot). + +**IPC channels**: +- `'trpc'` — bidirectional tRPC request/response (all CRUD) +- `'ai:stream'` — one-way token streaming from main → renderer +- `'ai:action'` — AI side-effects (e.g., task auto-created by agent) + +**Key source paths**: +- `src/main/ipc.ts` — Custom tRPC↔IPC bridge +- `src/main/router/index.ts` — All tRPC routers (~600 LOC) +- `src/main/ai/orchestrator.ts` — LangGraph intent routing + 3 agents (~991 LOC) +- `src/main/db/schema.ts` — 6 tables (clients, projects, tasks, checkpoints, notes, taskComments) +- `src/renderer/routes/` — File-based routing (TanStack Router auto-generates `routeTree.gen.ts`) +- `src/renderer/components/ui/` — shadcn/ui primitives (new-york theme, neutral colors) +- `src/main/auth/auth-manager.ts` — Login, register, logout, OAuth flow (singleton) +- `src/main/auth/backup-key.ts` — Device-specific AES-256 backup key (safeStorage, not password-derived) +- `src/main/ai/token.ts` — Two-tier token storage: safeStorage + electron-store fallback +- `src/main/auth/locale-defaults.ts` — Detects timezone, date/time format, language from OS locale +- `src/main/api/format-row.ts` — Formats timestamp columns in query results using user's FormatPrefs + +**Non-obvious details**: +- `electron-trpc` is NOT used — custom IPC bridge in `ipc.ts` + `ipcLink.ts` because electron-trpc bundles tRPC v10 internals +- Vite configs use `.mts` extension to avoid ESM/CJS conflicts with electron-forge +- `forge.config.ts` has complex cross-compilation hooks (downloads platform-specific native binaries for better-sqlite3 and LanceDB) +- DB has no foreign key constraints — cascade deletes are implemented in tRPC procedures +- Timestamps are milliseconds (JavaScript `Date.getTime()`), not ISO strings +- Notes auto-embed to LanceDB on create/update (fire-and-forget, errors swallowed) + +**Settings Page (shared between Electron and Web)**: +- The Settings page is designed to run in **both** the Electron app and a standalone web SPA (future landing-page user portal). The same React components are used — no duplication. +- **Platform Adapter pattern**: `PlatformProvider` context (`src/renderer/lib/platform.tsx`) exposes `isElectron`/`isWeb`/`hasLocalAgents`/`hasFileDialog` flags. Components use `usePlatform()` to conditionally render Electron-only features (device ID, local agent filesystem) or disable them on web. +- **6 sections**: Profile, AI Preferences, Account, Billing, Appearance, Agents. Sidebar nav with icons in `types.ts` (`SECTIONS` array). +- **Web build**: `vite.web.config.mts` builds a standalone SPA to `dist-web/`. Entry: `web.html` → `src/renderer/web-main.tsx` (uses `httpBatchLink` via `src/renderer/lib/httpLink.ts` instead of `ipcLink`). Scripts: `npm run dev:web`, `npm run build:web`, `npm run preview:web`. +- **Electron-only gating**: Device ID card and local agent filesystem features are gated behind `platform.isElectron`. On web, local agents are visible but disabled (not hidden). +- **Gotcha**: Do NOT add Electron-specific settings (e.g. server URL, native file pickers) without wrapping in `platform.isElectron`. The same component tree renders on web. + +**Onboarding Wizard**: +- First-run wizard collects 5 fields: `job_role`, `industry`, `primary_use_case`, `tone_preference`, `language`. Plus `user_name` derived from profile `name`+`surname`. +- All fields stored as encrypted core memory (backend `MemoryMiddleware`), not local electron-store. +- `onboarding_completed_at` on the `users` table (nullable TIMESTAMPTZ) gates the flow — `null` = show wizard, non-null = skip. +- `AppShell.tsx` gates: if `profile.onboardingCompletedAt == null` → render `` instead of the app. +- `auth.status` tRPC procedure auto-seeds `language` and `user_name` into MemoryCore if missing (fire-and-forget `.catch(() => {})`). +- Format prefs (timezone, dateFormat, timeFormat) are stored in electron-store (`FormatPrefs`), not core memory — they're device-specific. +- `drizzle-executor.ts` wraps all query results through `formatRow()`/`formatRows()` using the user's FormatPrefs. +- Settings > Profile section allows post-onboarding editing of all fields + format prefs. +- **Gotcha — shadcn Button `outline` variant in dark mode**: The variant defines `dark:bg-input/30 dark:border-input dark:hover:bg-input/50` which overrides any custom `className` background. Fix: switch between `variant="default"` and `variant="outline"` instead of adding className overrides. +- **Gotcha — locale codes vs human names**: `app.getLocale()` and `navigator.language` return codes like `en-US`. Use `Intl.DisplayNames(undefined, { type: 'language' })` to convert to "English". This must be done in both the main process (`locale-defaults.ts`) and renderer (`OnboardingFlow.tsx`). + +**i18n (Internationalization)**: +- Uses `i18next` + `react-i18next` with bundled JSON translations (no lazy loading). +- Config in `src/renderer/i18n.ts`. 5 languages: EN, IT, ES, FR, DE. `SUPPORTED_LANGUAGES` array exported for UI selectors. +- Translation files: `src/renderer/locales/{en,it,es,fr,de}/translation.json`. Namespaces: `nav`, `auth`, `tasks`, `settings`, `common`, `errors`, `home`, `timeline`, `projects`, `agents`. +- **`common.*` namespace** holds shared labels (`save`, `cancel`, `delete`, `edit`, `add`, `rename`, `saving`, `deleting`, `creating`, `renameDescription`, `deleteTitle`). Before adding a new key, check if `common.*` already has it. +- Pluralization uses i18next `_one`/`_other` suffixes (e.g. `tasksDueToday_one`, `tasksDueToday_other`). +- `LanguageSync` component in `src/renderer/index.tsx` reads persisted `uiLanguage` from electron-store via tRPC on startup and syncs to i18next. +- Language selector lives in `GeneralSection.tsx` (Settings > General). On change it: (1) calls `i18n.changeLanguage()`, (2) persists to electron-store via `setUiLanguage` mutation, (3) writes to backend core memory so AI responds in the same language. +- `getUiLanguage()` exported from `src/main/store.ts` — used by `orchestrator.ts` to append language hint to daily brief prompt. +- Static data arrays that need translation use `labelKey` pattern (not `label`): store a translation key, call `t(labelKey)` at render time. Used in `NAV_ITEMS`, `COLUMNS`, `SECTIONS`, `SUGGESTION_CHIPS`. +- When adding new translated text: add the key to **all 5** JSON files. Keep `common.*` keys consistent across all languages. + +**Google OAuth (adiuvAI side)**: +- `adiuvai://` is NOT accepted by Google as a redirect URI — Google only accepts `http://localhost` or `https://`. The API backend exposes `GET /auth/oauth/google/web-callback` which receives the Google redirect and immediately bounces to `adiuvai://oauth/callback?...`. The redirect URI registered in Google Cloud Console points to the backend, not the Electron app. +- `app.requestSingleInstanceLock()` is required for the `second-instance` event to fire on Windows/Linux. If it returns `false`, call `app.quit()` immediately (another instance is already running). +- In dev (`process.defaultApp === true`), `setAsDefaultProtocolClient('adiuvai')` must include `[path.resolve(process.argv[1])]` as the third argument so the OS protocol registration includes the entry script. +- `loginWithOAuth` uses `fetch()` directly (not `this.get()`) because the authorize endpoint is public — `get()` throws when not authenticated. +- The backup key in `backup-key.ts` is stored in `encryptedTokens` under the key `backup_key`, reusing `getToken/setToken` from `token.ts`. It is device-bound and never password-derived, so social-login users can use backup features without issue. + +--- + +## api (FastAPI Backend) + +### Commands + +```bash +cd api + +# Development +uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 + +# Production +gunicorn app.main:app -k uvicorn.workers.UvicornWorker -w 4 --timeout 120 + +# Database migrations +alembic upgrade head + +# Testing +pytest # all tests +pytest -v # verbose +pytest tests/test_agents.py # single file +pytest tests/test_agents.py -k test_name # single test + +# Linting/formatting +ruff check . +ruff format . + +# Docker (full stack: app + postgres + minio + qdrant) +docker compose up --build +``` + +### Architecture + +``` +FastAPI app (app/main.py) +├── Middleware: TierRateLimiter → Sanitizer → CORS +├── HTTP Routes (app/api/routes/) +│ ├── auth.py — register, login, token refresh (bcrypt + HS256 JWT) +│ ├── chat.py — POST /chat, WS /chat/stream +│ ├── plans.py — execution plan playbooks +│ ├── storage.py — E2E-encrypted cloud storage (S3) +│ ├── backup.py — encrypted backup upload/download +│ ├── vectors.py — encrypted vector upsert/search (Pinecone/Qdrant) +│ ├── plugins.py — plugin marketplace (Power+ tier) +│ └── billing.py — Stripe subscriptions +├── Agent System (app/agents/) +│ ├── task_agent.py — 8 tools +│ ├── project_agent.py — 6 tools +│ ├── checkpoint_agent.py — 4 tools +│ └── note_agent.py — 5 tools +├── Orchestration (app/core/) +│ ├── orchestrator.py — intent classification + agent routing +│ ├── agent_registry.py — decorator-based agent registry +│ ├── execution_plan.py — server-side prompt templates + plan builder +│ ├── llm.py — LiteLLM factory (100+ providers) +│ └── memory_middleware.py +├── Billing (app/billing/) +│ ├── tier_manager.py — feature matrix (Free/Pro/Power/Team) +│ └── stripe_service.py — Stripe checkout + webhooks +├── Storage (app/storage/) — S3 blob store, vector store, encryption +└── Marketplace (app/marketplace/) — plugin catalog, review, revenue sharing +``` + +**LLM routing**: `gpt-4o-mini` classifies intent → routes to domain agent → agent uses `gpt-4o` with tools → tool calls describe client-side operations (JSON) → Electron executes locally and returns results. + +**Zero-trust data model**: The backend never stores or decrypts user content. PostgreSQL holds only auth, billing, plugin metadata, and storage record pointers. All user data is E2E-encrypted before leaving the Electron client. + +**Key config**: `app/config/settings.py` — all env vars via Pydantic Settings. Copy `.env.example` to `.env` for local dev. Stripe and S3 gracefully stub when keys aren't configured. + +**Database**: PostgreSQL with async SQLAlchemy 2.0 + asyncpg. 9 ORM models in `app/models.py`. Alembic migrations in `alembic/versions/`. + +**Testing**: pytest + pytest-asyncio. Fixtures in `tests/conftest.py` create in-memory SQLite + moto-mocked S3. Test users seeded per tier (free/pro/power/team). + +### Non-obvious details + +- **Tier from DB, not JWT**: `get_current_user` decodes JWT but fetches authoritative tier from `subscriptions` table — tier changes take effect immediately without re-login +- **Refresh tokens hashed**: Plaintext returned to client, stored as SHA-256 in DB — server can never retrieve the plaintext (intentional) +- **WebSocket auth via query param**: `?token=` instead of Bearer header (WebSocket handshake limitation) +- **Prompt IP protection**: `PromptTemplateRegistry` keeps prompts server-side; clients receive opaque `template_id`. `SanitizerMiddleware` strips leaked fragments from responses +- **Agents don't execute operations**: Tools return JSON describing client-side ops — the Electron client executes against local SQLite +- **Alembic async/sync split**: App uses `postgresql+asyncpg`, Alembic CLI needs `postgresql+psycopg2` — `env.py` handles the URL conversion +- **Tool loop cap**: Agent `_tool_loop` stops after 5 iterations to prevent infinite loops +- **Route order matters**: `/backup/history` must be declared before `/backup/{backup_id}` to avoid path param shadowing +- **CORS includes `app://`**: Electron uses custom `app://` protocol, not http/https +- **Vector search on encrypted data is not semantic**: Backend derives deterministic 32-dim floats from blob SHA-256 for storage/search — a known trade-off + +**Onboarding (API side)**: +- `PUT /auth/me/memory` — updates core memory k/v pairs and optionally marks onboarding complete (`mark_onboarded: true` sets `users.onboarding_completed_at`). +- `POST /auth/me/onboarding/reset` — nullifies `onboarding_completed_at` so the wizard re-runs. +- `POST /auth/onboarding/normalize` — LLM-normalizes free-text onboarding inputs via `gpt-4o-mini`; returns inputs unchanged on error. +- `get_current_user()` in `auth.py` middleware now decrypts core memory blocks and includes them in `UserProfile.memory` dict. +- `users.onboarding_completed_at` is a nullable TIMESTAMPTZ column — returned as epoch ms (int) in UserProfile schema. + +**i18n (API side)**: +- `_language_instruction()` in `app/core/deep_agent.py` reads the user's `language` from `MemoryCore` and appends a system prompt directive ("Always respond in {language}") to all 4 `run_*` functions. +- The Electron client writes the user's chosen language to backend core memory on language change, so the API picks it up on the next agent call. + +**Google OAuth (api side)**: +- OAuth routes live in `app/api/routes/auth.py`: `GET /auth/oauth/{provider}/authorize`, `POST /auth/oauth/{provider}/callback`, `GET /auth/oauth/{provider}/web-callback` (bounces to deep link, excluded from OpenAPI schema). +- Provider abstraction in `app/auth/oauth_providers.py` — `GoogleOAuthProvider` uses `httpx` directly (no `authlib`). PKCE S256 is implemented manually via `generate_pkce_pair()`. +- `_pending_states` dict in `routes/auth.py` is **in-memory** — works for single-process dev but does not survive restarts and does not scale to multiple workers. Replace with Redis in production. +- `users.password_hash` is **nullable** — social-only users have `password_hash=None`. `await db.flush()` is required before creating a linked `OAuthAccount` to populate `new_user.id` before commit. +- `OAUTH_REDIRECT_URI` must point to the **API backend** (e.g. `https://api.adiuvai.com/...`), not the website domain. `adiuvai.com` is a static site with no server-side routing. +- **Unverified email + existing account = 409**: if `email_verified=False` and the email is already registered, the callback returns 409. Without this guard, branch 3 would attempt to INSERT a duplicate email and crash with a DB constraint violation (500). +- **Testing OAuth routes**: mock `GoogleOAuthProvider.exchange_code` and `get_userinfo` with `patch.object(..., new=AsyncMock(...))` — works because FastAPI instantiates a new provider per request. Use `monkeypatch.setattr(settings, "GOOGLE_AUTH_CLIENT_ID", ...)` to simulate configured credentials without restarting the app. + +### Tier System + +| Feature | Free | Pro | Power | Team | +|---------|------|-----|-------|------| +| Rate limit | 20/min | 60/min | 120/min | 200/min | +| Agents | 3 | unlimited | unlimited | unlimited | +| Cloud storage | 0 GB | 5 GB | 25 GB | unlimited | +| Plugin marketplace | no | no | yes | yes | + +Enforced in `app/api/middleware/rate_limit.py` (sliding window) and `app/billing/tier_manager.py` (feature checks + quota enforcement). + +--- + +## Cross-Project Integration + +The Electron app and FastAPI backend communicate via **WebSocket** (`/chat/stream`): + +1. Electron connects with `?token=` query param +2. Client sends `ChatRequest` JSON frame +3. Server streams text chunks, then a final frame: `{"done": true, "response": "...", "actions": []}` +4. Server sends `tool_call` frames → Electron executes against local SQLite → returns `tool_result` +5. Server pings every 30 seconds to keep connection alive + +The Electron app also has a **fully local AI path** (LangGraph orchestrator in main process) that doesn't require the backend — this is the primary path for desktop use. + +--- + +## MCP Servers + +- **Langfuse Docs** (`https://langfuse.com/api/mcp`) — configured at workspace level for prompt management documentation +- **shadcn** (`npx shadcn@latest mcp`) — configured in `adiuvAI/` for UI component generation diff --git a/.claude/settings.json b/.claude/settings.json index fceb05d..86ca5cf 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -5,6 +5,7 @@ ] }, "enabledPlugins": { - "ralph-loop@claude-plugins-official": true + "ralph-loop@claude-plugins-official": true, + "caveman@caveman": true } } diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 23011cb..00f02e4 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -1,9 +1,14 @@ { - "enableAllProjectMcpServers": true, "permissions": { "allow": [ "Bash(git add:*)", - "Bash(git commit -m ':*)" + "Bash(git commit -m ':*)", + "Skill(shadcn)", + "Skill(shadcn:*)", + "WebFetch(domain:raw.githubusercontent.com)", + "Bash(python \"C:/_temp/_adiuvai_workspace/.claude/skills/pptx/scripts/office/soffice.py\" --headless --convert-to pdf adiuvAI-per-commercialisti.pptx)", + "Read(//c/Users/musso/.claude/plugins/cache/caveman/caveman/63e797cd753b/**)" ] - } + }, + "enableAllProjectMcpServers": true } diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aece012 --- /dev/null +++ b/.gitignore @@ -0,0 +1,99 @@ +skills/ +unused_skills/ +.vscode/mcp.json +.claude/skills/brand-guidelines/LICENSE.txt +.claude/skills/brand-guidelines/SKILL.md +.claude/skills/frontend-design/LICENSE.txt +.claude/skills/frontend-design/SKILL.md +.claude/skills/remotion-best-practices/SKILL.md +.claude/skills/remotion-best-practices/rules/3d.md +.claude/skills/remotion-best-practices/rules/animations.md +.claude/skills/remotion-best-practices/rules/assets.md +.claude/skills/remotion-best-practices/rules/audio-visualization.md +.claude/skills/remotion-best-practices/rules/audio.md +.claude/skills/remotion-best-practices/rules/calculate-metadata.md +.claude/skills/remotion-best-practices/rules/can-decode.md +.claude/skills/remotion-best-practices/rules/charts.md +.claude/skills/remotion-best-practices/rules/compositions.md +.claude/skills/remotion-best-practices/rules/display-captions.md +.claude/skills/remotion-best-practices/rules/extract-frames.md +.claude/skills/remotion-best-practices/rules/ffmpeg.md +.claude/skills/remotion-best-practices/rules/fonts.md +.claude/skills/remotion-best-practices/rules/get-audio-duration.md +.claude/skills/remotion-best-practices/rules/get-video-dimensions.md +.claude/skills/remotion-best-practices/rules/get-video-duration.md +.claude/skills/remotion-best-practices/rules/gifs.md +.claude/skills/remotion-best-practices/rules/images.md +.claude/skills/remotion-best-practices/rules/import-srt-captions.md +.claude/skills/remotion-best-practices/rules/light-leaks.md +.claude/skills/remotion-best-practices/rules/lottie.md +.claude/skills/remotion-best-practices/rules/maps.md +.claude/skills/remotion-best-practices/rules/measuring-dom-nodes.md +.claude/skills/remotion-best-practices/rules/measuring-text.md +.claude/skills/remotion-best-practices/rules/parameters.md +.claude/skills/remotion-best-practices/rules/sequencing.md +.claude/skills/remotion-best-practices/rules/sfx.md +.claude/skills/remotion-best-practices/rules/silence-detection.md +.claude/skills/remotion-best-practices/rules/subtitles.md +.claude/skills/remotion-best-practices/rules/tailwind.md +.claude/skills/remotion-best-practices/rules/text-animations.md +.claude/skills/remotion-best-practices/rules/timing.md +.claude/skills/remotion-best-practices/rules/transcribe-captions.md +.claude/skills/remotion-best-practices/rules/transitions.md +.claude/skills/remotion-best-practices/rules/transparent-videos.md +.claude/skills/remotion-best-practices/rules/trimming.md +.claude/skills/remotion-best-practices/rules/videos.md +.claude/skills/remotion-best-practices/rules/voiceover.md +.claude/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +.claude/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +.claude/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +.claude/skills/shadcn/cli.md +.claude/skills/shadcn/customization.md +.claude/skills/shadcn/mcp.md +.claude/skills/shadcn/SKILL.md +.claude/skills/shadcn/agents/openai.yml +.claude/skills/shadcn/assets/shadcn-small.png +.claude/skills/shadcn/assets/shadcn.png +.claude/skills/shadcn/evals/evals.json +.claude/skills/shadcn/rules/base-vs-radix.md +.claude/skills/shadcn/rules/composition.md +.claude/skills/shadcn/rules/forms.md +.claude/skills/shadcn/rules/icons.md +.claude/skills/shadcn/rules/styling.md +.claude/skills/ui-ux-pro-max/SKILL.md +.claude/skills/ui-ux-pro-max/data/charts.csv +.claude/skills/ui-ux-pro-max/data/colors.csv +.claude/skills/ui-ux-pro-max/data/icons.csv +.claude/skills/ui-ux-pro-max/data/landing.csv +.claude/skills/ui-ux-pro-max/data/products.csv +.claude/skills/ui-ux-pro-max/data/react-performance.csv +.claude/skills/ui-ux-pro-max/data/styles.csv +.claude/skills/ui-ux-pro-max/data/typography.csv +.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +.claude/skills/ui-ux-pro-max/data/web-interface.csv +.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +.claude/skills/ui-ux-pro-max/data/stacks/react.csv +.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +.claude/skills/ui-ux-pro-max/scripts/core.py +.claude/skills/ui-ux-pro-max/scripts/design_system.py +.claude/skills/ui-ux-pro-max/scripts/search.py +.claude/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +.claude/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +.claude/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +.claude/skills/webapp-testing/LICENSE.txt +.claude/skills/webapp-testing/SKILL.md +.claude/skills/webapp-testing/examples/console_logging.py +.claude/skills/webapp-testing/examples/element_discovery.py +.claude/skills/webapp-testing/examples/static_html_automation.py +.claude/skills/webapp-testing/scripts/with_server.py diff --git a/.vscode/mcp.json b/.vscode/mcp.json index ea41438..016b0dc 100644 --- a/.vscode/mcp.json +++ b/.vscode/mcp.json @@ -1,9 +1,4 @@ { - "servers": { - "langfuse-docs": { - "url": "https://langfuse.com/api/mcp", - "type": "http" - } - }, - "inputs": [] + "inputs": [], + "servers": {} } \ No newline at end of file diff --git a/adiuvAI b/adiuvAI index 0371a46..333b6cb 160000 --- a/adiuvAI +++ b/adiuvAI @@ -1 +1 @@ -Subproject commit 0371a46731e771c8358231a531870d7d812d5f52 +Subproject commit 333b6cb769f47c1e666b7637523c0b3c9f7cb2ff diff --git a/docs/PROMPT-sonner-notifications.md b/docs/PROMPT-sonner-notifications.md new file mode 100644 index 0000000..3af71a9 --- /dev/null +++ b/docs/PROMPT-sonner-notifications.md @@ -0,0 +1,212 @@ +# Sonner Global Notification System — Ralph Loop Prompt + +You are implementing a global toast notification system in the adiuvAI Electron app using shadcn's sonner component. + +**Full plan:** Read `docs/plan-sonner-notifications.md` for the complete architecture, file list, i18n keys, and categorization of every mutation. + +## Rules + +- **Always read the plan first** at `docs/plan-sonner-notifications.md` before doing any work. +- **Always read a file before editing it.** Never edit blind. +- **One phase per iteration.** Complete one phase fully, verify it compiles, then move on. +- **Run `cd adiuvAI && npx tsc --noEmit` after each phase** to catch type errors early. +- **Run `cd adiuvAI && npm run lint` after Phase 3 and Phase 4** to catch lint issues. +- **Commit after each phase** with a descriptive message. +- **i18n: add keys to ALL 5 language files** (`en`, `it`, `es`, `fr`, `de`). The plan has complete translations for each. +- **Do NOT touch silent mutations** (note auto-save, kanban drag, sidebar toggle, AI chat/streaming). For these, add `onError` only if missing. +- **When removing `saved`/`setSaved` state patterns:** also remove the `setTimeout`, the button text ternary, and any `setSaved(false)` in `onChange` handlers. Replace button text with `{t('common.save')}`. +- **Import path for useNotify:** `import { useNotify } from '@/hooks/useNotify';` +- **Import path for toast (direct):** `import { toast } from 'sonner';` (only in useNotify.ts itself) + +## Progress Tracking + +Check the state of the codebase to determine which phase to work on: + +1. **If `src/renderer/components/ui/sonner.tsx` does NOT exist** → Start Phase 1 +2. **If `sonner.tsx` exists but settings components still have `setSaved`** → Do Phase 2 +3. **If settings are done but CRUD components lack `useNotify`** → Do Phase 3 +4. **If CRUD is done but auth/onboarding lack `useNotify`** → Do Phase 4 +5. **If all phases are done and `npx tsc --noEmit` + `npm run lint` pass** → Do Phase 5 (verification) + +--- + +## Phase 1: Foundation + +### Step 1: Install sonner + +```bash +cd adiuvAI && npx shadcn@latest add sonner --yes +``` + +### Step 2: Fix theme import in generated `sonner.tsx` + +The generated file imports `useTheme` from `next-themes`. This app does NOT use next-themes. Fix the import: + +```tsx +// WRONG (generated): +import { useTheme } from "next-themes" + +// CORRECT: +import { useTheme } from "@/components/theme-provider" +``` + +Also set `position="bottom-right"` and add `richColors` on the `` component. + +### Step 3: Add `` to `src/renderer/index.tsx` + +Import `Toaster` from `@/components/ui/sonner` and render it as the last child inside ``, AFTER ``. This ensures toasts work during login, onboarding, AND normal app usage. + +### Step 4: Create `src/renderer/hooks/useNotify.ts` + +Create the hook exactly as specified in the plan (Section 1.4). The hook exports `{ notify, notifyError, notifyPromise }`. + +### Step 5: Add i18n keys to all 5 translation files + +Add the `"toast"` top-level key with all sub-keys to: +- `src/renderer/locales/en/translation.json` (English — from plan) +- `src/renderer/locales/it/translation.json` (Italian — from plan) +- `src/renderer/locales/es/translation.json` (Spanish — from plan) +- `src/renderer/locales/fr/translation.json` (French — from plan) +- `src/renderer/locales/de/translation.json` (German — from plan) + +### Step 6: Verify + +```bash +cd adiuvAI && npx tsc --noEmit +``` + +### Step 7: Commit + +```bash +cd adiuvAI && git add -A && git commit -m "feat(notifications): add sonner toast foundation with useNotify hook and i18n keys" +``` + +--- + +## Phase 2: Settings Components + +For each of these 5 files, apply the pattern: add `useNotify()`, remove `saved`/`setSaved` state, remove `setTimeout`, replace button text ternary, add `notify()` in `onSuccess`, add `notifyError()` in `onError`. + +### Files (in order): + +1. **`src/renderer/components/settings/GeneralSection.tsx`** + - Remove: `saved`, `setSaved`, `error`, `setError`, `setTimeout`, inline `

` error, `setSaved(false)` in onChange + - Add: `notify('success', 'toast.profile.updated')` in handleSave onSuccess + - Add: `notifyError('toast.profile.updateError', err)` in handleSave onError + - Add: `notify('info', 'toast.settings.languageChanged')` in handleLanguageChange + - Button text: `{t('common.save')}` + +2. **`src/renderer/components/settings/ProfileSection.tsx`** + - Remove: `profileSaved`, `displaySaved` states and their `setTimeout`s + - Profile save → `notify('success', 'toast.settings.memorySaved')` + - Display save → `notify('success', 'toast.settings.formatPrefsSaved')` + - Reset onboarding → `notify('info', 'toast.onboarding.reset')` + +3. **`src/renderer/components/settings/AccountSection.tsx`** + - Remove: `urlSaved`, `setUrlSaved` state and `setTimeout` + - Backend URL save → `notify('success', 'toast.settings.backendUrlSaved')` + - Add onError → `notifyError('toast.settings.backendUrlError', err)` + - Logout → `notify('info', 'toast.auth.loggedOut')` + +4. **`src/renderer/components/settings/LocalAgentConfigPanel.tsx`** + - Remove: `saved` state and `setTimeout` + - Save → `notify('success', 'toast.agent.updated')` + - Add onError → `notifyError('toast.agent.updateError', err)` + +5. **`src/renderer/components/settings/CloudAgentConfigPanel.tsx`** + - Same as LocalAgentConfigPanel + +### Verify and Commit: + +```bash +cd adiuvAI && npx tsc --noEmit && npm run lint +cd adiuvAI && git add -A && git commit -m "feat(notifications): replace settings saved-state patterns with sonner toasts" +``` + +--- + +## Phase 3: CRUD Operations + +Add `useNotify()` to each component and wire `notify` / `notifyError` into existing `onSuccess` / `onError` callbacks. If `onError` doesn't exist, add it. + +### Files and mutations: + +**Tasks:** +- `src/renderer/components/tasks/NewTaskDialog.tsx` → `tasks.create`: success `toast.task.created` + inline `clients.create`: success `toast.client.created` +- `src/renderer/components/tasks/EditTaskDialog.tsx` → `tasks.update`: success `toast.task.updated` +- `src/renderer/components/tasks/TaskDetailDialog.tsx` → `taskComments.create`: success `toast.comment.created`, `taskComments.delete`: warning `toast.comment.deleted` +- `src/renderer/routes/tasks.tsx` → `tasks.delete`: warning `toast.task.deleted`, `tasks.update` status toggle: **onError only** +- `src/renderer/components/projects/KanbanBoard.tsx` → `tasks.update` drag: **onError only**, `tasks.delete`: warning `toast.task.deleted` +- `src/renderer/components/projects/ProjectDetail.tsx` → `tasks.delete`: warning `toast.task.deleted`, `tasks.update` toggle: **onError only**, `notes.create`: success `toast.note.created` +- `src/renderer/components/ai/blocks/ChatEntityBlock.tsx` → `tasks.delete`: warning `toast.task.deleted`, `tasks.update` toggle: **onError only** + +**Projects & Clients:** +- `src/renderer/components/projects/ProjectSidebar.tsx` → `projects.create`: success, `projects.update`: success, `projects.delete`: warning, `projects.archiveByClient`: warning (check if archiving or unarchiving), `clients.create`: success, `clients.update`: success, `clients.deleteWithCascade`: warning + +**Notes:** +- `src/renderer/routes/notes.$noteId.tsx` → `notes.delete`: warning `toast.note.deleted`, `notes.update` auto-save: **onError only** (SILENT) + +**Timeline:** +- `src/renderer/components/timeline/AddEventDialog.tsx` → `timelineEvents.create`: success +- `src/renderer/components/timeline/EditEventDialog.tsx` → `timelineEvents.update`: success +- `src/renderer/routes/timeline.tsx` → `timelineEvents.delete`: warning, `timelineEvents.update`: success + +**Agents:** +- `src/renderer/components/settings/AgentsSection.tsx` → `agent.*.delete`: warning, `agent.*.update` toggle: **onError only**, `agent.runNow`: use `notifyPromise` +- `src/renderer/components/settings/InlineAgentCreationStepper.tsx` → `agent.*.create`: success + +### Verify and Commit: + +```bash +cd adiuvAI && npx tsc --noEmit && npm run lint +cd adiuvAI && git add -A && git commit -m "feat(notifications): add sonner toasts to all CRUD operations" +``` + +--- + +## Phase 4: Auth + Onboarding + +### Files: + +1. **`src/renderer/components/auth/LoginForm.tsx`** + - `auth.login` onError → `notifyError('toast.auth.loginError', err)` (KEEP inline error too) + - `auth.register` onError → `notifyError('toast.auth.registerError', err)` (KEEP inline error too) + - `auth.loginWithOAuth` onError → `notifyError('toast.auth.oauthError', err)` + +2. **`src/renderer/components/layout/AppShell.tsx`** + - `auth.logout` onSuccess → `notify('info', 'toast.auth.loggedOut')` (add before `utils.auth.status.invalidate()`) + +3. **`src/renderer/components/onboarding/OnboardingFlow.tsx`** + - Final save onSuccess → `notify('success', 'toast.onboarding.completed', { descriptionKey: 'toast.onboarding.completedDescription' })` + - Final save onError → `notifyError('toast.onboarding.error', err)` + - Normalize call → use `notifyPromise` with loading/success/error keys + +### Verify and Commit: + +```bash +cd adiuvAI && npx tsc --noEmit && npm run lint +cd adiuvAI && git add -A && git commit -m "feat(notifications): add sonner toasts to auth and onboarding flows" +``` + +--- + +## Phase 5: Final Verification + +Run these checks: + +```bash +cd adiuvAI && npx tsc --noEmit +cd adiuvAI && npm run lint +cd adiuvAI && npm run knip +``` + +Verify: +- No remaining `setSaved` or `setTimeout.*setSaved` patterns in `src/renderer/components/settings/` +- All 5 translation files have the `toast` key with matching sub-keys +- `sonner.tsx` imports from `@/components/theme-provider` (NOT `next-themes`) +- `` renders in `index.tsx` inside `` +- `useNotify.ts` exists in `src/renderer/hooks/` + +If everything passes: + +SONNER NOTIFICATIONS COMPLETE diff --git a/docs/adiuvAI.pptx b/docs/adiuvAI.pptx new file mode 100644 index 0000000000000000000000000000000000000000..34194a8ad80892d71615c82f62d0b737bb09b298 GIT binary patch literal 354088 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� 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%0DA*ITeM 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%0Dtq8|=8o z|1Ji>R%^kSg_L&s8~0FSj4jFiA9vni7LwlOZ?NM+{=3G|NX*+{#uak?zj6Ofn+wR3 z!7WOO;Z^EGE16{}K~p0}1{_YmXUh*Y|&cVeG&<+aj0C0Yydr(i!*!=)-dTo5;}N zbA;ReU3c=M9^j7y^hg72WB#Pb;Ri>={9PVVjy__?i{^G}5LKsnj(j*cK)#Dw6Wog5aljRo3& z{)rHvfpZ+;(jmg(&Nlzp?W4mmmsY_;Asq3=?=U}d>fbIuepluYSymN|{Kq|-<1Rja z3*d11DRuPnKW+#dUw(WPeYm_)1HJs%VEQ<~pX1)cUHfS btA7u>G*$3`Xa<2qfiEXu6P%)l2ORxBk@%qa literal 0 HcmV?d00001 diff --git a/docs/build-deck-commercialista.js b/docs/build-deck-commercialista.js new file mode 100644 index 0000000..ab7c25a --- /dev/null +++ b/docs/build-deck-commercialista.js @@ -0,0 +1,504 @@ +// adiuvAI — Presentazione generica dell'applicazione +// Stile: Light canvas (app light mode) +const pptxgen = require("pptxgenjs"); +const path = require("path"); + +const ASSETS = "C:/_temp/_adiuvai_workspace/adiuvAI/assets"; +const LOGO_ICON = `${ASSETS}/logo/logo-icon.png`; +const SHOT_HOME = `${ASSETS}/screenshot/home.png`; +const SHOT_PROJECTS = `${ASSETS}/screenshot/projects.png`; +const SHOT_TASK = `${ASSETS}/screenshot/task.png`; +const SHOT_CHAT = `${ASSETS}/screenshot/home_chat.png`; + +// Palette light mode (app) +const C = { + bg: "F4EDF3", // pinkish-white canvas + surface: "FFFFFF", // cards + surface2: "EDE5EC", // subtle header row + gold: "FBC881", // primary accent + goldDark: "C79A5B", // darker gold for contrast on light bg + ink: "0C0C0C", // near-black + ink2: "323232", // body text dark + muted: "8A8EA9", // slate blue-gray + border: "C8C3CD", // dusty lavender border + borderSoft: "E5DFE4", +}; + +const FONT_H = "Calibri"; +const FONT_B = "Calibri"; + +const pres = new pptxgen(); +pres.layout = "LAYOUT_WIDE"; // 13.333 x 7.5 +pres.author = "adiuvAI"; +pres.title = "adiuvAI"; + +const SW = 13.333; +const SH = 7.5; + +const DARK = { bg: "0C0C0C", surface: "181818", surface2: "222222", text: "FBFBFB", muted: "8A8EA9", border: "2A2A2A" }; + +function bgLight(slide) { slide.background = { color: C.bg }; } +function bgDark(slide) { slide.background = { color: DARK.bg }; } + +function footer(slide, pageNum, total, dark) { + slide.addImage({ path: LOGO_ICON, x: 0.5, y: 0.35, w: 0.35, h: 0.35 }); + slide.addText( + [ + { text: "adiuv", options: { color: dark ? DARK.text : C.ink, fontFace: FONT_H, fontSize: 11 } }, + { text: "AI", options: { color: dark ? C.gold : C.goldDark, fontFace: FONT_H, fontSize: 11, bold: true } }, + ], + { x: 0.9, y: 0.33, w: 2.5, h: 0.4, margin: 0, valign: "middle" } + ); + slide.addText(`${pageNum} / ${total}`, { + x: SW - 1.5, y: 0.33, w: 1.0, h: 0.4, + color: dark ? DARK.muted : C.muted, fontFace: FONT_B, fontSize: 10, align: "right", valign: "middle", margin: 0, + }); +} + +function slideTitle(slide, eyebrow, title, dark) { + if (eyebrow) { + slide.addText(eyebrow.toUpperCase(), { + x: 0.8, y: 1.05, w: 10, h: 0.35, + color: dark ? C.gold : C.goldDark, fontFace: FONT_H, fontSize: 11, bold: true, charSpacing: 6, margin: 0, + }); + } + slide.addText(title, { + x: 0.8, y: 1.4, w: 11.5, h: 1.0, + color: dark ? DARK.text : C.ink, fontFace: FONT_H, fontSize: 36, bold: true, margin: 0, + }); +} + +function goldDot(slide, x, y) { + slide.addShape(pres.shapes.OVAL, { + x, y, w: 0.12, h: 0.12, fill: { color: C.gold }, line: { color: C.gold }, + }); +} + +const TOTAL = 9; +let page = 0; + +// ============================================================ +// 1 — COVER +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + + s.addImage({ path: LOGO_ICON, x: 1.1, y: 2.4, w: 2.6, h: 2.6 }); + + s.addText( + [ + { text: "adiuv", options: { color: C.ink, fontFace: FONT_H, fontSize: 72 } }, + { text: "AI", options: { color: C.goldDark, fontFace: FONT_H, fontSize: 72, bold: true } }, + ], + { x: 4.0, y: 2.7, w: 7.5, h: 1.3, margin: 0, valign: "middle" } + ); + + s.addShape(pres.shapes.RECTANGLE, { + x: 4.1, y: 4.05, w: 0.6, h: 0.04, fill: { color: C.gold }, line: { color: C.gold }, + }); + + s.addText("Meet your new chief of staff.", { + x: 4.0, y: 4.15, w: 8.5, h: 0.6, + color: C.ink, fontFace: FONT_H, fontSize: 24, italic: true, margin: 0, + }); + + s.addText("Una segretaria AI che legge la tua posta, organizza il tuo lavoro, e ogni mattina ti dice cosa conta — tutto sul tuo computer.", { + x: 4.0, y: 4.85, w: 8.5, h: 1.4, + color: C.ink2, fontFace: FONT_B, fontSize: 16, margin: 0, + }); +} + +// ============================================================ +// 2 — L'IDEA: UNA SEGRETARIA +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + footer(s, page, TOTAL); + slideTitle(s, "L'idea", "Non un altro tool. Una segretaria."); + + s.addText( + [ + { text: "Gli strumenti di produttività si aspettano che tu li usi.\n", options: { color: C.muted, fontSize: 18 } }, + { text: "adiuvAI lavora per te.", options: { color: C.ink, fontSize: 26, bold: true } }, + ], + { x: 0.8, y: 2.8, w: 11.8, h: 1.5, fontFace: FONT_H, margin: 0 } + ); + + // Metafora: cosa fa una segretaria reale + const duties = [ + { t: "Legge la tua posta", d: "Filtra, prioritizza, segnala solo ciò che richiede la tua attenzione." }, + { t: "Tiene in ordine l'agenda", d: "Scadenze, impegni, follow-up — tutto tracciato senza chiederti nulla." }, + { t: "Prepara il briefing", d: "Ogni mattina arriva con un piano chiaro: ecco cosa conta oggi." }, + { t: "Ti aiuta a eseguire", d: "Prepara bozze, organizza documenti, ti accompagna mentre lavori." }, + ]; + const cardW = 5.85, gap = 0.2; + duties.forEach((d, i) => { + const col = i % 2, row = Math.floor(i / 2); + const x = 0.8 + col * (cardW + gap); + const y = 4.45 + row * 1.35; + s.addShape(pres.shapes.RECTANGLE, { + x, y, w: cardW, h: 1.2, + fill: { color: C.surface }, line: { color: C.borderSoft, width: 0.75 }, + }); + s.addShape(pres.shapes.RECTANGLE, { + x, y, w: 0.08, h: 1.2, fill: { color: C.gold }, line: { color: C.gold }, + }); + s.addText(d.t, { + x: x + 0.3, y: y + 0.15, w: cardW - 0.4, h: 0.4, + color: C.ink, fontFace: FONT_H, fontSize: 16, bold: true, margin: 0, + }); + s.addText(d.d, { + x: x + 0.3, y: y + 0.55, w: cardW - 0.4, h: 0.65, + color: C.ink2, fontFace: FONT_B, fontSize: 12, margin: 0, + }); + }); +} + +// ============================================================ +// 3 — DAILY BRIEF + CAROUSEL (hero feature) +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgDark(s); + footer(s, page, TOTAL, true); + slideTitle(s, "Il cuore dell'esperienza", "Il briefing del mattino, poi ti prende per mano.", true); + + // Left: screenshot home (mostra il daily brief) + s.addImage({ path: SHOT_HOME, x: 0.8, y: 2.8, w: 6.4, h: 3.6 }); + s.addShape(pres.shapes.RECTANGLE, { + x: 0.8, y: 2.8, w: 6.4, h: 3.6, + fill: { type: "solid", color: DARK.bg, transparency: 100 }, + line: { color: DARK.border, width: 1 }, + }); + s.addText("Daily Brief", { + x: 0.8, y: 6.5, w: 6.4, h: 0.35, + color: DARK.muted, fontFace: FONT_H, fontSize: 11, bold: true, align: "center", charSpacing: 4, margin: 0, + }); + + // Right: caption + carousel feature + s.addText("Ogni mattina, un briefing personalizzato ti racconta cosa è cambiato, cosa scade e cosa conta di più.", { + x: 7.5, y: 2.75, w: 5.2, h: 1.4, + color: DARK.text, fontFace: FONT_H, fontSize: 16, margin: 0, + }); + + // Carousel card (feature) + s.addShape(pres.shapes.RECTANGLE, { + x: 7.5, y: 4.25, w: 5.2, h: 2.6, + fill: { color: DARK.surface }, line: { color: DARK.border, width: 0.75 }, + }); + s.addShape(pres.shapes.RECTANGLE, { + x: 7.5, y: 4.25, w: 0.08, h: 2.6, + fill: { color: C.gold }, line: { color: C.gold }, + }); + s.addText("CAROSELLO DELLE ATTIVITÀ", { + x: 7.75, y: 4.4, w: 5, h: 0.4, + color: C.gold, fontFace: FONT_H, fontSize: 10, bold: true, charSpacing: 4, margin: 0, + }); + s.addText( + [ + { text: "Dalla home, avvii il carosello: ", options: { color: DARK.text, bold: true, breakLine: true } }, + { text: "ogni scheda è un'attività che l'AI ritiene prioritaria per la giornata. Ti guida passo passo con le indicazioni per completarla, e puoi chattare con lei mentre lavori — come se avessi la tua segretaria al fianco.", + options: { color: DARK.muted } }, + ], + { x: 7.75, y: 4.8, w: 5, h: 1.95, fontFace: FONT_B, fontSize: 13, margin: 0 } + ); +} + +// ============================================================ +// 4 — CHAT CONTESTUALE +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgDark(s); + footer(s, page, TOTAL, true); + slideTitle(s, "Chat", "Parla con la tua segretaria. In italiano, in linguaggio naturale.", true); + + // left: examples + const examples = [ + "« Qual è la prossima attività su cui concentrarmi? »", + "« Riassumi le email arrivate stamattina. »", + "« Crea un'attività: richiamare Luca giovedì. »", + "« Cosa è cambiato sul progetto Patient Portal? »", + ]; + examples.forEach((e, i) => { + const y = 2.8 + i * 0.65; + s.addShape(pres.shapes.RECTANGLE, { + x: 0.8, y, w: 5.6, h: 0.55, + fill: { color: DARK.surface }, line: { color: DARK.border, width: 0.75 }, + }); + s.addShape(pres.shapes.RECTANGLE, { + x: 0.8, y, w: 0.06, h: 0.55, fill: { color: C.gold }, line: { color: C.gold }, + }); + s.addText(e, { + x: 1.0, y, w: 5.3, h: 0.55, + color: DARK.text, fontFace: FONT_B, fontSize: 12, italic: true, valign: "middle", margin: 0, + }); + }); + + s.addText("Niente prompt engineering. Niente modelli da scegliere. L'AI giusta lavora in background e ti risponde con il contesto del tuo workspace.", { + x: 0.8, y: 5.65, w: 5.6, h: 1.0, + color: DARK.muted, fontFace: FONT_B, fontSize: 13, margin: 0, + }); + + // right: screenshot + s.addImage({ path: SHOT_CHAT, x: 6.8, y: 2.6, w: 6.0, h: 3.375 }); + s.addShape(pres.shapes.RECTANGLE, { + x: 6.8, y: 2.6, w: 6.0, h: 3.375, + fill: { type: "solid", color: DARK.bg, transparency: 100 }, + line: { color: DARK.border, width: 1 }, + }); + s.addText("Chat contestuale sul workspace", { + x: 6.8, y: 6.05, w: 6.0, h: 0.35, + color: DARK.muted, fontFace: FONT_H, fontSize: 11, bold: true, align: "center", charSpacing: 4, margin: 0, + }); +} + +// ============================================================ +// 5 — FUNZIONALITÀ (compattate) +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + footer(s, page, TOTAL); + slideTitle(s, "Cosa fa", "Tutto il lavoro quotidiano, in un unico posto."); + + const items = [ + { t: "Email → Attività", d: "Legge Gmail, Outlook, cartelle locali ed estrae automaticamente task, promemoria e note." }, + { t: "Progetti e clienti", d: "Timeline, milestone, riepiloghi AI per ogni progetto. Tutto collegato." }, + { t: "Note con ricerca semantica", d: "Editor markdown e ricerca vettoriale su tutto ciò che scrivi." }, + { t: "Timeline e milestone", d: "Panoramica visiva delle scadenze e degli stati di avanzamento." }, + { t: "Agenti locali", d: "Sorveglianza file, monitor cartelle, integrazione Telegram." }, + { t: "Voce in riunione", d: "Prende note durante le call, estrae action item.", soon: true }, + ]; + const cardW = 3.95, gap = 0.2; + const cols = 3; + items.forEach((it, i) => { + const col = i % cols, row = Math.floor(i / cols); + const x = 0.8 + col * (cardW + gap); + const y = 2.8 + row * 1.9; + s.addShape(pres.shapes.RECTANGLE, { + x, y, w: cardW, h: 1.7, + fill: { color: C.surface }, line: { color: C.borderSoft, width: 0.75 }, + }); + if (it.soon) { + s.addShape(pres.shapes.RECTANGLE, { + x: x + cardW - 1.1, y: y + 0.18, w: 0.95, h: 0.3, + fill: { color: C.bg }, line: { color: C.gold, width: 0.75 }, + }); + s.addText("COMING SOON", { + x: x + cardW - 1.1, y: y + 0.18, w: 0.95, h: 0.3, + color: C.goldDark, fontFace: FONT_H, fontSize: 8, bold: true, align: "center", valign: "middle", charSpacing: 2, margin: 0, + }); + } + goldDot(s, x + 0.25, y + 0.3); + s.addText(it.t, { + x: x + 0.5, y: y + 0.2, w: cardW - 1.5, h: 0.4, + color: C.ink, fontFace: FONT_H, fontSize: 15, bold: true, margin: 0, + }); + s.addText(it.d, { + x: x + 0.25, y: y + 0.7, w: cardW - 0.5, h: 0.95, + color: C.ink2, fontFace: FONT_B, fontSize: 11.5, margin: 0, + }); + }); +} + +// ============================================================ +// 5 — RISERVATEZZA +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + footer(s, page, TOTAL); + slideTitle(s, "Riservatezza", "I tuoi dati non lasciano il tuo computer."); + + s.addText("Local-first.", { + x: 0.8, y: 2.8, w: 6, h: 0.9, + color: C.goldDark, fontFace: FONT_H, fontSize: 48, bold: true, margin: 0, + }); + s.addText("Tutto gira in locale. Il database è sul tuo disco, cifrato. Nessun server adiuvAI vede i contenuti di email, file o documenti.", { + x: 0.8, y: 3.9, w: 6, h: 2.0, + color: C.ink2, fontFace: FONT_B, fontSize: 15, margin: 0, + }); + + const comp = [ + { t: "GDPR", d: "I dati non vengono mai trasferiti a terzi. Conformità per architettura." }, + { t: "EU AI Act", d: "Progettato dall'inizio per il nuovo quadro normativo europeo." }, + { t: "Cifratura end-to-end", d: "Backup e sincronizzazione opzionali con cifratura client-side." }, + { t: "No training", d: "I tuoi dati non vengono mai usati per addestrare modelli AI." }, + ]; + comp.forEach((c, i) => { + const col = i % 2, row = Math.floor(i / 2); + const x = 7.2 + col * 2.95; + const y = 2.8 + row * 1.85; + s.addShape(pres.shapes.RECTANGLE, { + x, y, w: 2.85, h: 1.65, + fill: { color: C.surface }, line: { color: C.borderSoft, width: 0.75 }, + }); + s.addShape(pres.shapes.RECTANGLE, { + x, y, w: 2.85, h: 0.05, fill: { color: C.gold }, line: { color: C.gold }, + }); + s.addText(c.t, { + x: x + 0.2, y: y + 0.15, w: 2.6, h: 0.4, + color: C.goldDark, fontFace: FONT_H, fontSize: 15, bold: true, margin: 0, + }); + s.addText(c.d, { + x: x + 0.2, y: y + 0.6, w: 2.6, h: 1.0, + color: C.ink2, fontFace: FONT_B, fontSize: 11, margin: 0, + }); + }); +} + +// ============================================================ +// 6 — POSIZIONAMENTO +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + footer(s, page, TOTAL); + slideTitle(s, "Posizionamento", "Perché non Motion, Notion AI o Microsoft Copilot?"); + + const rows = [ + ["", "adiuvAI", "Motion", "Notion AI", "Copilot"], + ["Locale, dati sul tuo PC", "Sì", "No", "No", "No"], + ["Conforme EU AI Act", "Sì", "n/d", "n/d", "Parziale"], + ["Legge email + file + chat", "Sì", "Parziale", "No", "Sì"], + ["Daily Brief proattivo", "Sì", "No", "No", "No"], + ["AI invisibile (zero prompt)", "Sì", "No", "No", "No"], + ]; + const tableData = rows.map((r, ri) => + r.map((cell, ci) => { + if (ri === 0) { + return { + text: cell, + options: { + bold: true, color: ci === 1 ? C.goldDark : C.ink, + fill: { color: C.surface2 }, + align: "center", fontFace: FONT_H, fontSize: 13, valign: "middle", + }, + }; + } + if (ci === 0) { + return { + text: cell, + options: { + fontFace: FONT_B, fontSize: 12, color: C.ink, bold: true, + fill: { color: C.surface }, valign: "middle", + }, + }; + } + const isYes = cell === "Sì"; + return { + text: cell, + options: { + fontFace: FONT_B, fontSize: 12, align: "center", valign: "middle", + color: ci === 1 ? (isYes ? C.goldDark : C.muted) : (isYes ? C.ink : C.muted), + bold: ci === 1, + fill: { color: ci === 1 ? C.surface2 : C.surface }, + }, + }; + }) + ); + s.addTable(tableData, { + x: 0.8, y: 2.8, w: 11.7, + colW: [4.5, 1.8, 1.8, 1.8, 1.8], + rowH: 0.55, + border: { pt: 1, color: C.borderSoft }, + fontFace: FONT_B, + }); + + s.addText("Gli altri sono cloud-first generalisti. adiuvAI è locale, proattivo, pensato per chi lavora con dati propri.", { + x: 0.8, y: 6.55, w: 12.0, h: 0.5, + color: C.goldDark, fontFace: FONT_B, fontSize: 13, italic: true, margin: 0, + }); +} + +// ============================================================ +// 7 — ROADMAP +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + footer(s, page, TOTAL); + slideTitle(s, "Roadmap", "Dove siamo, dove stiamo andando."); + + const tlY = 4.2; + s.addShape(pres.shapes.RECTANGLE, { + x: 1.2, y: tlY, w: 11.0, h: 0.04, + fill: { color: C.border }, line: { color: C.border }, + }); + + const milestones = [ + { x: 1.6, label: "Oggi — Beta privata", items: ["Daily Brief", "Carosello attività", "Email → Task", "Progetti & Note"] }, + { x: 5.6, label: "Giugno 2026 — Beta pubblica", items: ["Telegram bot", "Outlook / Teams", "App mobile companion"] }, + { x: 9.6, label: "Oltre", items: ["Assistente vocale in riunione", "Workspace di team", "SSO e ruoli"] }, + ]; + milestones.forEach((m) => { + s.addShape(pres.shapes.OVAL, { + x: m.x - 0.12, y: tlY - 0.1, w: 0.25, h: 0.25, + fill: { color: C.gold }, line: { color: C.goldDark, width: 1 }, + }); + s.addText(m.label, { + x: m.x - 0.2, y: tlY - 0.9, w: 4.2, h: 0.5, + color: C.goldDark, fontFace: FONT_H, fontSize: 13, bold: true, margin: 0, + }); + s.addText( + m.items.map((it, idx) => ({ + text: it, + options: { bullet: { code: "25A0" }, color: C.ink2, breakLine: idx < m.items.length - 1, paraSpaceAfter: 4 }, + })), + { x: m.x - 0.2, y: tlY + 0.3, w: 4.0, h: 2.5, fontFace: FONT_B, fontSize: 12, margin: 0 } + ); + }); +} + +// ============================================================ +// 8 — CLOSING +// ============================================================ +{ + page++; + const s = pres.addSlide(); + bgLight(s); + + s.addImage({ path: LOGO_ICON, x: (SW - 1.5) / 2, y: 1.5, w: 1.5, h: 1.5 }); + + s.addText("Meet your new chief of staff.", { + x: 1.0, y: 3.3, w: SW - 2, h: 0.9, + color: C.ink, fontFace: FONT_H, fontSize: 32, bold: true, italic: true, align: "center", margin: 0, + }); + + s.addShape(pres.shapes.RECTANGLE, { + x: (SW - 0.6) / 2, y: 4.25, w: 0.6, h: 0.04, fill: { color: C.gold }, line: { color: C.gold }, + }); + + s.addText("Beta in arrivo a Giugno 2026. Gli early adopter otterranno accesso prioritario e potranno guidare il roadmap.", { + x: 1.5, y: 4.45, w: SW - 3, h: 1.4, + color: C.ink2, fontFace: FONT_B, fontSize: 16, align: "center", margin: 0, + }); + + s.addShape(pres.shapes.RECTANGLE, { + x: (SW - 7) / 2, y: 6.0, w: 7, h: 1.1, + fill: { color: C.surface }, line: { color: C.gold, width: 1.5 }, + }); + s.addText( + [ + { text: "Iscriviti alla waitlist · ", options: { color: C.ink, bold: true } }, + { text: "adiuvai.com", options: { color: C.goldDark, bold: true } }, + ], + { x: (SW - 7) / 2, y: 6.0, w: 7, h: 1.1, + fontFace: FONT_H, fontSize: 20, align: "center", valign: "middle", margin: 0 } + ); +} + +// ============================================================ +const OUT = path.resolve("C:/_temp/_adiuvai_workspace/docs/adiuvAI.pptx"); +pres.writeFile({ fileName: OUT }).then((f) => console.log("WROTE:", f)); diff --git a/docs/memory-evolution-strategy.md b/docs/memory-evolution-strategy.md new file mode 100644 index 0000000..a11c33f --- /dev/null +++ b/docs/memory-evolution-strategy.md @@ -0,0 +1,120 @@ +# Evoluzione della gestione memoria/personalizzazione di adiuvAI + +> **Versione:** 1.0 — 2026-04-14 +> **Scope:** analisi architetturale e raccomandazioni per l'evoluzione del sottosistema di memoria di adiuvAI (Electron + FastAPI), con focus sul posizionamento "segretaria personale" (cfr. `docs/marketing-strategy.md`). +> **Premessa:** lo stato attuale di `api/app/core/memory_middleware.py` implementa già un modello 4-tier ispirato a MemGPT (core / associative / episodic / proactive) con crittografia Fernet per-utente. Le raccomandazioni partono da qui, non da zero. + +--- + +## 1. Stato attuale (sintesi) + +| Tier | Storage | Uso | Gap principale | +|---|---|---|---| +| `core` | Postgres (k/v) crittografato | Preferenze stabili (lingua, ruolo, tono, ecc.) — già usato dall'onboarding | Crescita non controllata, nessuna gerarchia, nessun limite per tier | +| `associative` | `MemoryAssociative` + pgvector (campo `embedding` presente ma **inutilizzato**) | Recupero top-k | Fallback keyword: sta funzionando come "lista recenti", non come semantica | +| `episodic` | Summaries conversazione | Iniettato nel contesto | Summary naïf (`message[:200]`), nessuna compressione LLM, nessun decay | +| `proactive` | Pattern con `confidence` | Suggerimenti | Nessun ciclo che alimenta la tabella — resta vuota in produzione | + +**Zero-trust:** la crittografia per-utente è un vincolo architetturale forte. Qualunque tecnica che richieda di "leggere" la memoria lato server deve passare dal Fernet dell'utente → esclude servizi gestiti esterni (Mem0 SaaS, Pinecone con payload in chiaro) per il contenuto, ma lascia liberi i **vettori** (già trattati come deterministici da SHA-256 in `vectors.py`). + +--- + +## 2. Allineamento con il posizionamento "segretaria" + +Una segretaria umana eccelle in tre dimensioni mnestiche che gli agenti generici trascurano: + +1. **Memoria di ruolo** — sa *chi è* il capo, *cosa gli interessa*, *quali persone* sono VIP, *quali progetti* sono caldi. +2. **Memoria di routine** — conosce gli orari, gli stili comunicativi, le abitudini ("di lunedì il capo vuole il brief entro le 8:00"). +3. **Memoria relazionale** — conosce *le persone intorno al capo*: clienti, colleghi, fornitori, con contesto (ultimo contatto, tono appropriato, argomenti in sospeso). + +Il sistema attuale copre bene (1) tramite `core`, parzialmente (2) via onboarding, **non copre** (3). Questo è il gap più grande rispetto al marketing promise. + +--- + +## 3. Raccomandazione architetturale: ibrido mirato + +Nessuno degli approcci citati va adottato in purezza. La proposta è una **combinazione selettiva** guidata dal dominio: + +### 3.1 Base (tutti i tier): MemGPT consolidato + Mem0-style extraction + +Mantenere la struttura 4-tier già presente, ma **sostituire le scritture naïf con una pipeline Mem0**: + +- **Fase Extraction** (post-conversazione, async): + - Trigger: dopo `store_episode`, una task in background fa girare `gpt-4o-mini` (economico) su `(last_turn, recency_window, core_memory)`. + - Output strutturato: `{candidates: [{type: "fact|preference|relation|routine", content, target_tier}]}`. +- **Fase Update** (decisione ADD/UPDATE/DELETE/NOOP): + - Per ogni candidato: similarity search nel tier target → l'LLM decide l'azione via tool call. + - **Perché Mem0 e non MemGPT puro**: su un'app "segretaria" le informazioni importanti sono *fatti stabili* (il CFO si chiama Giulia, il cliente X paga sempre in ritardo), non conversazioni da rimettere in RAM. Il ciclo Extract/Update è più adatto di una coda FIFO di messaggi. + +### 3.2 Estensione dominio-specifica: Knowledge Graph leggero (Mem0g) + +Aggiungere un **quinto tier** orientato al dominio segretaria: + +- **`relational` tier**: grafo *Entità → Relazione → Entità* memorizzato in Postgres (non serve Neo4j). + - Nodi: Person, Company, Project, Topic (già presenti come entità in `agents` dell'Electron — riutilizzabili). + - Archi: `works_at`, `reports_to`, `stakeholder_of`, `last_contacted_on`, `owes_followup`. +- **Perché un grafo e non solo vettori**: la segretaria deve rispondere a domande tipo *"chi è Marco?"* → embedding testuale confonde "Marco Rossi (cliente)" con "Marco Bianchi (collega)". Il grafo disambigua, i vettori no. +- **Implementazione minima**: nuova tabella `memory_relations(user_id, subject_id, predicate, object_id, confidence, source_episode_id, encrypted_notes)`. Popolata dalla stessa pipeline Extraction. + +### 3.3 Dove **non** andare + +- **A-Mem / memory evolution retroattiva**: affascinante ma costoso (ri-analizza il passato a ogni nuova nota). Per una segretaria è *anti-pattern* — introduce non-determinismo dove l'utente si aspetta stabilità ("ma ieri mi dicevi un'altra cosa"). Skippare. +- **AutoGPT loop riflessivo**: il dominio è reattivo (brief, follow-up), non goal-seeking autonomo. Over-engineering. +- **LangChain `ConversationBufferMemory`** e parenti: già superati dalla struttura attuale. No regressioni. + +--- + +## 4. Differenziazione per tier di prodotto + +La memoria è un asset di differenziazione commerciale **naturale**: più memoria = segretaria più "al corrente". Proposta: + +| Capability | Free | Pro | Power | Team | +|---|:-:|:-:|:-:|:-:| +| `core` blocks (max k/v) | 20 | 100 | illimitato | illimitato | +| `episodic` retention | 7 gg | 90 gg | illimitato | illimitato | +| `associative` con pgvector reale (OpenAI embeddings) | ❌ (keyword only) | ✅ | ✅ | ✅ | +| `relational` graph (Mem0g) | ❌ | ✅ base (Person/Project) | ✅ completo + custom predicates | ✅ + condivisione team | +| Mem0 Extraction pipeline LLM | batch giornaliero | realtime post-turn | realtime + proactive mining | realtime + team-wide | +| `proactive` pattern mining | ❌ | ❌ | ✅ (pattern "ogni lunedì…") | ✅ | +| Memory export/import cifrato | ✅ | ✅ | ✅ | ✅ | +| Forget/consent UI (GDPR Art. 17) | ✅ | ✅ | ✅ | ✅ | + +**Rationale commerciale:** +- Il Free tier ha una segretaria che "ricorda i fatti base" — sufficiente per la wow-moment del daily brief, non sufficiente per sentirla *tua*. +- Il salto Free → Pro si giustifica con "la segretaria inizia a conoscere davvero le persone che tratti" (embeddings reali + grafo base). +- Il salto Pro → Power si vende come "la segretaria nota i tuoi pattern e te li anticipa" (proactive tier attivo). +- Il Team tier abilita memoria condivisa su entità aziendali comuni (clienti, progetti), mantenendo memoria personale cifrata per-utente. + +**Vincolo zero-trust**: il tier-gating si applica a *quanto* si memorizza e *quali pipeline* girano, **mai** a chi può leggere. Il backend continua a non decifrare nulla che non sia strettamente necessario al turn corrente. + +--- + +## 5. Piano di implementazione suggerito (ordine) + +1. **Quick win (1–2 gg)**: attivare davvero `pgvector` sull'`associative` tier (oggi c'è il campo `embedding` ma si usa il fallback keyword). Gate dietro tier ≥ Pro. +2. **Extraction pipeline Mem0-style (1 sett)**: task async post-`store_episode` → `gpt-4o-mini` → update strutturato dei tier. Log trace per debug. Gate per tier (batch Free vs realtime Pro+). +3. **Relational tier (Mem0g leggero) (1–2 sett)**: schema nuova tabella, alimentazione dalla pipeline, uso nel prompt agent come contesto "persone e relazioni rilevanti". +4. **Settings > Memory UI**: pagina dedicata per vedere/modificare `core` + `relational` (la segretaria deve essere *correggibile* — è una feature, non un bug, che l'utente possa dire "no, Giulia è la CFO non la CEO"). GDPR-compliant by design. +5. **Proactive mining (opzionale, Power)**: job schedulato che cerca pattern temporali nelle `episodic` e promuove a `proactive` con confidence score. + +--- + +## 6. Rischi e mitigazioni + +| Rischio | Mitigazione | +|---|---| +| Costo LLM dell'Extraction pipeline esplode sul Free | Batch notturno per Free (1 run/24h con rate cap), realtime solo Pro+ | +| Memoria "sporca" (fatti estratti errati) erode fiducia nella segretaria | UI di review/edit obbligatoria (punto 4); mai scrivere `core` senza conferma implicita (es. utente non corregge entro N turni) | +| Zero-trust vs embeddings: OpenAI vede il testo dell'embedding | Già accettato dall'architettura attuale per altri flussi (cfr. note su vector search in CLAUDE.md). Documentare esplicitamente nella privacy policy. Opzione BYOK-embedding per tier Power come mitigante marketing. | +| Grafo relazionale cresce indefinitamente | TTL per archi con `last_contacted_on` > 18 mesi + decay sulla `confidence` | +| Drift tra memoria locale (Electron SQLite) e backend | Già gestito come "backend = source of truth" per `core`. Estendere la stessa regola al nuovo `relational`. | + +--- + +## 7. TL;DR + +- **Base architetturale:** manteniamo MemGPT 4-tier (già in casa), sostituiamo le scritture naïf con pipeline **Mem0 Extract/Update**. +- **Differenziazione dominio:** aggiungiamo un tier **`relational` (Mem0g leggero)** per modellare persone/progetti — è il vero gap rispetto alla promessa "segretaria". +- **Monetizzazione:** la memoria diventa scala di differenziazione tier (retention, embeddings reali, proactive mining, team sharing) senza violare zero-trust. +- **Da evitare:** A-Mem (troppo non-deterministico), AutoGPT loop (fuori scope), wrapper LangChain legacy (regressione). +- **Primo passo concreto:** accendere pgvector reale sull'`associative` tier — è già pre-cablato e sbloccato da un singolo gate. diff --git a/docs/multi-region-guide.md b/docs/multi-region-guide.md new file mode 100644 index 0000000..83cda50 --- /dev/null +++ b/docs/multi-region-guide.md @@ -0,0 +1,253 @@ +# Guida Multi-Region — adiuvAI API + +> Stato attuale: FastAPI containerizzata (docker-compose) su singolo VPS Hetzner in Europa. +> Obiettivo: ridurre la latenza per utenti fuori dall'Europa. + +--- + +## Fase 1 — Ottimizzare Cloudflare (già in uso) + +### 1.1 Argo Smart Routing + +- **Dashboard → Traffic → Argo** — attivalo (~$5/mese + $0.10/GB) +- Usa i backbone privati Cloudflare invece dell'internet pubblico +- Riduce la latenza del 30-40% senza toccare nulla lato server +- Singolo cambiamento con miglior rapporto costo/beneficio + +### 1.2 SSL/TLS + +- **Dashboard → SSL/TLS → Overview** → mode **Full (Strict)** (non "Flexible", causa redirect loop) +- Abilita **TLS 1.3** (meno round-trip nell'handshake) +- Abilita **Early Hints** (103) in Speed → Optimization + +### 1.3 Cache Rules + +Di default Cloudflare non cachea le risposte API (Content-Type `application/json`). Per gli endpoint pubblici (es. `/api/v1/health`): + +- **Dashboard → Caching → Cache Rules** → crea regola: + - Match: `URI Path starts with /api/v1/health` + - Action: Cache, Edge TTL 30s, Browser TTL 10s +- Lato codice: aggiungere header `Cache-Control: public, s-maxage=30` e `CDN-Cache-Control: public, max-age=30` all'health endpoint +- **NON** cacheate endpoint autenticati (il JWT rende ogni richiesta unica) + +### 1.4 Response Compression + +- **Dashboard → Speed → Optimization → Content Optimization** +- Abilita **Brotli** (più efficiente di gzip per payload JSON) +- Le risposte JSON vengono compresse automaticamente al transit + +### 1.5 WebSocket + +- **Dashboard → Network** → verifica che **WebSockets** sia ON (default nel piano Free) +- Il `/chat/stream` WebSocket viene proxato ma non cacheato +- Il keepalive di 30s che già avete mantiene la connessione viva attraverso Cloudflare + +### 1.6 Tiered Cache (piano Pro+) + +- **Dashboard → Caching → Tiered Cache** → attiva **Smart Tiered Caching** +- Cloudflare usa data center "upper-tier" come cache intermedia +- Riduce le hit al tuo origin server + +### 1.7 Timeout + +- **Dashboard → Network → WebSocket timeout**: aumenta se gli utenti hanno sessioni chat lunghe +- **Proxy Read Timeout**: default 100s, sufficiente per le LLM call (il tool loop ha cap 5 iterazioni) + +--- + +## Fase 2 — Secondo nodo in US East + +### Architettura target + +``` + ┌─── Cloudflare (Geo Steering) ───┐ + │ │ + utenti EU/Africa utenti Americas + │ │ + ┌────────▼─────────┐ ┌──────────▼─────────┐ + │ VPS EU (attuale) │ │ VPS US (nuovo) │ + │ docker-compose │ │ docker-compose │ + │ app + PG primary │ │ app + PG replica │ + └────────┬──────────┘ └──────────┬──────────┘ + │ │ + └── PG streaming replication ────────┘ + (async, read-only replica) +``` + +### Opzione A: Secondo VPS Hetzner (Ashburn) + Cloudflare Load Balancing + +Estensione naturale del setup attuale — minimo cambiamento architetturale. + +#### Step 1 — Provisioning del VPS US + +1. Crea un VPS Hetzner in **Ashburn (us-east)** (stesse specs del nodo EU) +2. Setup identico: Docker, Docker Compose, git +3. Configura un **tunnel WireGuard** tra EU e US per il traffico DB (mai esporre PG sulla rete pubblica) + +#### Step 2 — PostgreSQL Streaming Replication + +**Sul PRIMARY (EU):** + +1. Creare un utente replication: + ```sql + CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD ''; + ``` +2. Creare un replication slot: + ```sql + SELECT pg_create_physical_replication_slot('replica_us_east'); + ``` +3. Configurare `pg_hba.conf` per permettere connessioni dal VPS US: + ``` + host replication replicator /32 scram-sha-256 + ``` +4. Esporre la porta PG solo sull'IP WireGuard nel `docker-compose.yml`: + ```yaml + services: + db: + ports: + - "10.0.0.1:5432:5432" # solo interfaccia WireGuard + ``` + +**Sul REPLICA (US):** + +1. Base backup dal primary: + ```bash + docker run --rm \ + -v postgres_data:/var/lib/postgresql/data \ + pgvector/pgvector:pg16 \ + bash -c "pg_basebackup -h -U replicator \ + -D /var/lib/postgresql/data -Fp -Xs -P -R" + ``` + Il flag `-R` crea automaticamente `standby.signal` e scrive `primary_conninfo` in `postgresql.auto.conf`. + +2. Avviare PG in modalita replica (legge `standby.signal` e si connette al primary) + +3. Verificare: + - Sul primary: `SELECT * FROM pg_stat_replication;` (deve mostrare il replica) + - Sul replica: `SELECT pg_is_in_recovery();` (deve restituire `t`) + +#### Step 3 — Modifiche al codice FastAPI + +Modifiche necessarie in `app/config/settings.py`: +- Aggiungere `DATABASE_READ_URL: str = ""` — URL del replica locale per le letture +- Aggiungere `REGION: str = "eu"` — identificativo regione per health check e observability + +Modifiche in `app/db.py`: +- Creare un secondo engine `read_engine` che usa `DATABASE_READ_URL` (fallback a `DATABASE_URL` se vuoto) +- Esporre un `get_read_session()` dependency da usare nelle query read-only + +Modifiche in `app/main.py`: +- L'health endpoint deve restituire `region` nel payload +- Aggiungere header `Cache-Control` / `CDN-Cache-Control` per il caching all'edge + +Nelle route, per le query di sola lettura pesanti (es. ricerca, listing): +- Usare `db: AsyncSession = Depends(get_read_session)` invece di `get_session` +- Le scritture (auth, billing, update) continuano a usare `get_session` (→ primary EU) + +#### Step 4 — Docker Compose per il nodo US + +Creare un `docker-compose.replica.yml` (override) che: +- Sovrascrive le env dell'app con `DATABASE_READ_URL` verso il DB locale e `DATABASE_URL` verso il primary EU +- Imposta `REGION=us-east` +- Avvia PG in modalita replica (con `primary_conninfo` che punta al primary EU via WireGuard) + +Il `.env` sul nodo US: +```env +DATABASE_URL=postgresql+asyncpg://postgres:@:5432/adiuvai +DATABASE_READ_URL=postgresql+asyncpg://postgres:postgres@db:5432/adiuvai +REGION=us-east +PRIMARY_DB_HOST= +REPLICATOR_PASSWORD= +# ... resto delle variabili (JWT_SECRET, STRIPE, LLM keys, etc.) identiche al nodo EU +``` + +Avvio: `docker compose -f docker-compose.yml -f docker-compose.replica.yml up -d` + +#### Step 5 — Deploy CI multi-region + +Estendere il workflow `.gitea/workflows/deploy.yaml` con un secondo job `deploy-us`: +- Identico a `deploy` ma con SSH verso il VPS US +- Usa `secrets.SSH_HOST_US`, `secrets.SSH_USER_US`, `secrets.SSH_KEY_US` +- Il comando di deploy usa `-f docker-compose.yml -f docker-compose.replica.yml` +- **NON** esegue `alembic upgrade head` — le migrazioni girano solo sul primary (il replica riceve le DDL via replication) + +I due job `deploy` e `deploy-us` possono girare in parallelo (entrambi dipendono solo da `test`). + +#### Step 6 — Cloudflare Geo Steering + +1. **Dashboard → Traffic → Load Balancing** (piano Pro, ~$5/mese per pool) +2. Creare due **Origin Pools**: + - `eu-pool`: origin = IP del VPS EU, health check = `GET /api/v1/health` + - `us-pool`: origin = IP del VPS US, health check = `GET /api/v1/health` +3. Creare un **Load Balancer** su `api.adiuvai.com`: + - Steering policy: **Geo** + - EU/Africa → `eu-pool` + - Americas → `us-pool` + - Fallback: `eu-pool` +4. Impostare health monitor: `GET /api/v1/health`, interval 60s, timeout 5s + - Se un nodo va giù, tutto il traffico va al nodo sano (automatic failover) + +### Opzione B: Fly.io (alternativa più semplice, meno controllo) + +Se preferisci evitare la gestione manuale di un secondo VPS: + +1. Crea un `fly.toml` nella root del progetto API +2. `fly launch` — Fly rileva il Dockerfile e deploya +3. `fly regions add iad` — aggiunge US East (Ashburn) +4. Fly gestisce: routing anycast, health checks, TLS, auto-scaling +5. Il DB resta su Hetzner EU — Fly non risolve il problema del database, ma elimina tutta la gestione infrastrutturale dell'app layer +6. Costo: ~$5-15/mese per region (dipende dalle risorse) +7. Contro: meno controllo, vendor lock-in, il DB non ha replica locale + +### Opzione C: Hetzner Cloud Load Balancer + geo DNS esterno + +- Hetzner offre load balancer nativi, ma sono single-region (non cross-region) +- Non adatto per geo-routing, utile solo per HA nella stessa region + +--- + +## Fase 3 — Terzo nodo in Asia (futuro) + +Stessa procedura della Fase 2: +1. VPS Hetzner Singapore (o AWS ap-southeast-1) +2. Secondo PG replica con slot `replica_asia` +3. Terzo pool in Cloudflare Load Balancing con geo steering per Asia-Pacific +4. Terzo job `deploy-asia` nel CI + +Da valutare solo quando il traffico dall'Asia lo giustifica. + +--- + +## Sicurezza della rete tra i nodi + +| Metodo | Pro | Contro | +|--------|-----|--------| +| **WireGuard** | Semplice, veloce, <1ms overhead, kernel-level | Setup manuale per nodo | +| **Hetzner vSwitch** | Zero config se entrambi su Hetzner | Solo stessa region | +| **Tailscale** | WireGuard gestito, zero config rete | Dipendenza esterna | +| **SSH tunnel** | Nessun software extra | Overhead maggiore, meno stabile | + +**Raccomandazione**: WireGuard (o Tailscale per semplicita) tra tutti i nodi. Mai esporre PostgreSQL 5432 sull'IP pubblico. + +--- + +## Considerazioni specifiche per adiuvAI + +- **L'app e local-first**: la maggior parte delle operazioni (tasks, notes, projects) avviene in SQLite locale nell'Electron app. Il backend serve solo auth, chat streaming, cloud storage e billing. Questo significa che la latenza del backend impatta meno di quanto sembrerebbe. +- **WebSocket `/chat/stream`**: il geo steering porta l'utente al nodo piu vicino, ma la risposta LLM dipende dalla latenza verso OpenAI/Anthropic (non verso il tuo server). Il beneficio principale e nel tempo di handshake e nel primo token. +- **`_pending_states` in-memory per OAuth**: gia documentato come non scalabile su multi-worker. Con multi-region diventa critico — servira Redis condiviso o spostare lo state su DB. +- **JWT_SECRET deve essere identico** su tutti i nodi — un token emesso dal nodo EU deve essere validato dal nodo US. +- **Alembic migrations**: eseguire SOLO sul primary. Il replica riceve le DDL via streaming replication. + +--- + +## Stima costi + +| Componente | Costo mensile | +|------------|---------------| +| Argo Smart Routing | ~$5 + $0.10/GB | +| Cloudflare Load Balancing | ~$5/pool | +| VPS Hetzner US (CX22) | ~$5-10 | +| WireGuard | Gratis | +| **Totale Fase 1** | **~$5** | +| **Totale Fase 2** | **~$15-20** | diff --git a/docs/plan-sonner-notifications.md b/docs/plan-sonner-notifications.md new file mode 100644 index 0000000..f01d3ec --- /dev/null +++ b/docs/plan-sonner-notifications.md @@ -0,0 +1,484 @@ +# Global Notification System — Sonner Toast Integration + +## Context + +The adiuvAI Electron app has **52+ user-facing mutations** (create/update/delete for tasks, projects, clients, notes, timeline events, agents, settings, auth) with **no unified feedback system**. Some components show a transient "Saved" button label for 2s via `useState` + `setTimeout`; most mutations are completely silent. Errors are handled inconsistently — some show inline text, many are swallowed. + +This plan adds a global toast notification system using **shadcn's sonner component**, replacing all ad-hoc patterns with a single i18n-aware API. + +--- + +## Phase 1: Foundation + +### 1.1 Install sonner via shadcn CLI + +```bash +cd adiuvAI && npx shadcn@latest add sonner +``` + +This installs the `sonner` npm package and generates `src/renderer/components/ui/sonner.tsx`. + +### 1.2 Fix theme import in generated `sonner.tsx` + +The generated file imports `useTheme` from `next-themes` (doesn't exist in this app). Replace with: + +```tsx +import { useTheme } from "@/components/theme-provider" +``` + +The app's `useTheme()` returns `{ theme: "dark" | "light" | "system" }` — same shape sonner expects. + +Configure `position="bottom-right"` to avoid sidebar collision. Keep `richColors` enabled for variant-specific coloring. + +Full target file: + +```tsx +import { useTheme } from "@/components/theme-provider" +import { Toaster as Sonner } from "sonner" + +type ToasterProps = React.ComponentProps + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme() + return ( + + ) +} + +export { Toaster } +``` + +### 1.3 Place `` in `src/renderer/index.tsx` + +Add `` as a sibling of `` inside ``: + +```tsx +import { Toaster } from '@/components/ui/sonner'; +// ... + + + + + + + + + +``` + +**Why here?** The `` must render OUTSIDE all conditional rendering in AppShell.tsx (which gates LoginForm / OnboardingFlow / main app). Placing it in `index.tsx` ensures toasts work in all three states. + +### 1.4 Create `useNotify()` hook + +**New file:** `src/renderer/hooks/useNotify.ts` + +```tsx +import { useTranslation } from 'react-i18next'; +import { toast } from 'sonner'; + +type ToastVariant = 'success' | 'error' | 'info' | 'warning'; + +interface NotifyOptions { + descriptionKey?: string; + values?: Record; + duration?: number; +} + +export function useNotify() { + const { t } = useTranslation(); + + function notify(variant: ToastVariant, messageKey: string, options?: NotifyOptions) { + const message = t(messageKey, options?.values); + const description = options?.descriptionKey + ? t(options.descriptionKey, options?.values) + : undefined; + const duration = options?.duration; + + switch (variant) { + case 'success': toast.success(message, { description, duration: duration ?? 3000 }); break; + case 'error': toast.error(message, { description, duration: duration ?? Infinity }); break; + case 'info': toast.info(message, { description, duration: duration ?? 3000 }); break; + case 'warning': toast.warning(message, { description, duration: duration ?? 4000 }); break; + } + } + + function notifyError(messageKey: string, error?: { message?: string }) { + toast.error(t(messageKey), { description: error?.message, duration: Infinity }); + } + + function notifyPromise(promise: Promise, keys: { loading: string; success: string; error: string }) { + toast.promise(promise, { loading: t(keys.loading), success: t(keys.success), error: t(keys.error) }); + } + + return { notify, notifyError, notifyPromise }; +} +``` + +**Design rationale:** +- Error toasts: `duration: Infinity` — persist until dismissed so users can read/copy errors +- Success: 3s auto-dismiss — brief confirmation +- Warning (destructive): 4s — slightly longer for delete confirmations +- `notifyError`: convenience for `onError` callbacks — title from i18n, description from raw error +- `notifyPromise`: wraps `toast.promise()` for long-running ops +- All text goes through `t()` for i18n + +### 1.5 Add i18n toast keys + +**Files:** `src/renderer/locales/{en,it,es,fr,de}/translation.json` + +Add a `toast` top-level key. English: + +```json +"toast": { + "profile": { + "updated": "Profile updated", + "updateError": "Failed to update profile" + }, + "settings": { + "languageChanged": "Language changed", + "backendUrlSaved": "Server URL saved", + "backendUrlError": "Failed to save server URL", + "formatPrefsSaved": "Display preferences saved", + "formatPrefsError": "Failed to save display preferences", + "memorySaved": "Preferences saved", + "memoryError": "Failed to save preferences" + }, + "auth": { + "loginError": "Sign-in failed", + "registerError": "Registration failed", + "oauthError": "Google sign-in failed", + "loggedOut": "Signed out" + }, + "onboarding": { + "completed": "Onboarding complete", + "completedDescription": "Your workspace is personalized", + "error": "Failed to save onboarding", + "reset": "Onboarding reset", + "normalizing": "Personalizing your workspace...", + "normalized": "Personalization ready" + }, + "task": { + "created": "Task created", + "createError": "Failed to create task", + "updated": "Task updated", + "updateError": "Failed to update task", + "deleted": "Task deleted", + "deleteError": "Failed to delete task" + }, + "project": { + "created": "Project created", + "createError": "Failed to create project", + "updated": "Project updated", + "updateError": "Failed to update project", + "deleted": "Project deleted", + "deleteError": "Failed to delete project", + "archived": "Project archived", + "unarchived": "Project unarchived", + "archivedAll": "All projects archived", + "unarchivedAll": "All projects unarchived" + }, + "client": { + "created": "Client created", + "createError": "Failed to create client", + "updated": "Client renamed", + "updateError": "Failed to rename client", + "deleted": "Client deleted", + "deleteError": "Failed to delete client" + }, + "note": { + "created": "Note created", + "createError": "Failed to create note", + "deleted": "Note deleted", + "deleteError": "Failed to delete note" + }, + "timeline": { + "created": "Event created", + "createError": "Failed to create event", + "updated": "Event updated", + "updateError": "Failed to update event", + "deleted": "Event deleted", + "deleteError": "Failed to delete event" + }, + "comment": { + "created": "Comment added", + "createError": "Failed to add comment", + "deleted": "Comment deleted", + "deleteError": "Failed to delete comment" + }, + "agent": { + "created": "Agent created", + "createError": "Failed to create agent", + "updated": "Agent configuration saved", + "updateError": "Failed to save agent configuration", + "deleted": "Agent deleted", + "deleteError": "Failed to delete agent", + "runStarted": "Agent run started", + "runError": "Failed to start agent" + } +} +``` + +**Italian translations:** + +```json +"toast": { + "profile": { "updated": "Profilo aggiornato", "updateError": "Impossibile aggiornare il profilo" }, + "settings": { "languageChanged": "Lingua cambiata", "backendUrlSaved": "URL del server salvato", "backendUrlError": "Impossibile salvare l'URL del server", "formatPrefsSaved": "Preferenze di visualizzazione salvate", "formatPrefsError": "Impossibile salvare le preferenze", "memorySaved": "Preferenze salvate", "memoryError": "Impossibile salvare le preferenze" }, + "auth": { "loginError": "Accesso fallito", "registerError": "Registrazione fallita", "oauthError": "Accesso con Google fallito", "loggedOut": "Disconnesso" }, + "onboarding": { "completed": "Onboarding completato", "completedDescription": "Il tuo workspace e' personalizzato", "error": "Impossibile salvare l'onboarding", "reset": "Onboarding ripristinato", "normalizing": "Personalizzazione in corso...", "normalized": "Personalizzazione pronta" }, + "task": { "created": "Attivita' creata", "createError": "Impossibile creare l'attivita'", "updated": "Attivita' aggiornata", "updateError": "Impossibile aggiornare l'attivita'", "deleted": "Attivita' eliminata", "deleteError": "Impossibile eliminare l'attivita'" }, + "project": { "created": "Progetto creato", "createError": "Impossibile creare il progetto", "updated": "Progetto aggiornato", "updateError": "Impossibile aggiornare il progetto", "deleted": "Progetto eliminato", "deleteError": "Impossibile eliminare il progetto", "archived": "Progetto archiviato", "unarchived": "Progetto ripristinato", "archivedAll": "Tutti i progetti archiviati", "unarchivedAll": "Tutti i progetti ripristinati" }, + "client": { "created": "Cliente creato", "createError": "Impossibile creare il cliente", "updated": "Cliente rinominato", "updateError": "Impossibile rinominare il cliente", "deleted": "Cliente eliminato", "deleteError": "Impossibile eliminare il cliente" }, + "note": { "created": "Nota creata", "createError": "Impossibile creare la nota", "deleted": "Nota eliminata", "deleteError": "Impossibile eliminare la nota" }, + "timeline": { "created": "Evento creato", "createError": "Impossibile creare l'evento", "updated": "Evento aggiornato", "updateError": "Impossibile aggiornare l'evento", "deleted": "Evento eliminato", "deleteError": "Impossibile eliminare l'evento" }, + "comment": { "created": "Commento aggiunto", "createError": "Impossibile aggiungere il commento", "deleted": "Commento eliminato", "deleteError": "Impossibile eliminare il commento" }, + "agent": { "created": "Agente creato", "createError": "Impossibile creare l'agente", "updated": "Configurazione agente salvata", "updateError": "Impossibile salvare la configurazione", "deleted": "Agente eliminato", "deleteError": "Impossibile eliminare l'agente", "runStarted": "Esecuzione agente avviata", "runError": "Impossibile avviare l'agente" } +} +``` + +**Spanish translations:** + +```json +"toast": { + "profile": { "updated": "Perfil actualizado", "updateError": "Error al actualizar el perfil" }, + "settings": { "languageChanged": "Idioma cambiado", "backendUrlSaved": "URL del servidor guardada", "backendUrlError": "Error al guardar la URL del servidor", "formatPrefsSaved": "Preferencias de visualizacion guardadas", "formatPrefsError": "Error al guardar las preferencias", "memorySaved": "Preferencias guardadas", "memoryError": "Error al guardar las preferencias" }, + "auth": { "loginError": "Error de acceso", "registerError": "Error de registro", "oauthError": "Error de acceso con Google", "loggedOut": "Sesion cerrada" }, + "onboarding": { "completed": "Configuracion completada", "completedDescription": "Tu espacio de trabajo esta personalizado", "error": "Error al guardar la configuracion", "reset": "Configuracion reiniciada", "normalizing": "Personalizando tu espacio...", "normalized": "Personalizacion lista" }, + "task": { "created": "Tarea creada", "createError": "Error al crear la tarea", "updated": "Tarea actualizada", "updateError": "Error al actualizar la tarea", "deleted": "Tarea eliminada", "deleteError": "Error al eliminar la tarea" }, + "project": { "created": "Proyecto creado", "createError": "Error al crear el proyecto", "updated": "Proyecto actualizado", "updateError": "Error al actualizar el proyecto", "deleted": "Proyecto eliminado", "deleteError": "Error al eliminar el proyecto", "archived": "Proyecto archivado", "unarchived": "Proyecto restaurado", "archivedAll": "Todos los proyectos archivados", "unarchivedAll": "Todos los proyectos restaurados" }, + "client": { "created": "Cliente creado", "createError": "Error al crear el cliente", "updated": "Cliente renombrado", "updateError": "Error al renombrar el cliente", "deleted": "Cliente eliminado", "deleteError": "Error al eliminar el cliente" }, + "note": { "created": "Nota creada", "createError": "Error al crear la nota", "deleted": "Nota eliminada", "deleteError": "Error al eliminar la nota" }, + "timeline": { "created": "Evento creado", "createError": "Error al crear el evento", "updated": "Evento actualizado", "updateError": "Error al actualizar el evento", "deleted": "Evento eliminado", "deleteError": "Error al eliminar el evento" }, + "comment": { "created": "Comentario agregado", "createError": "Error al agregar el comentario", "deleted": "Comentario eliminado", "deleteError": "Error al eliminar el comentario" }, + "agent": { "created": "Agente creado", "createError": "Error al crear el agente", "updated": "Configuracion del agente guardada", "updateError": "Error al guardar la configuracion", "deleted": "Agente eliminado", "deleteError": "Error al eliminar el agente", "runStarted": "Ejecucion del agente iniciada", "runError": "Error al iniciar el agente" } +} +``` + +**French translations:** + +```json +"toast": { + "profile": { "updated": "Profil mis a jour", "updateError": "Impossible de mettre a jour le profil" }, + "settings": { "languageChanged": "Langue modifiee", "backendUrlSaved": "URL du serveur enregistree", "backendUrlError": "Impossible d'enregistrer l'URL du serveur", "formatPrefsSaved": "Preferences d'affichage enregistrees", "formatPrefsError": "Impossible d'enregistrer les preferences", "memorySaved": "Preferences enregistrees", "memoryError": "Impossible d'enregistrer les preferences" }, + "auth": { "loginError": "Echec de la connexion", "registerError": "Echec de l'inscription", "oauthError": "Echec de la connexion Google", "loggedOut": "Deconnecte" }, + "onboarding": { "completed": "Configuration terminee", "completedDescription": "Votre espace de travail est personnalise", "error": "Impossible d'enregistrer la configuration", "reset": "Configuration reinitialisee", "normalizing": "Personnalisation en cours...", "normalized": "Personnalisation terminee" }, + "task": { "created": "Tache creee", "createError": "Impossible de creer la tache", "updated": "Tache mise a jour", "updateError": "Impossible de mettre a jour la tache", "deleted": "Tache supprimee", "deleteError": "Impossible de supprimer la tache" }, + "project": { "created": "Projet cree", "createError": "Impossible de creer le projet", "updated": "Projet mis a jour", "updateError": "Impossible de mettre a jour le projet", "deleted": "Projet supprime", "deleteError": "Impossible de supprimer le projet", "archived": "Projet archive", "unarchived": "Projet restaure", "archivedAll": "Tous les projets archives", "unarchivedAll": "Tous les projets restaures" }, + "client": { "created": "Client cree", "createError": "Impossible de creer le client", "updated": "Client renomme", "updateError": "Impossible de renommer le client", "deleted": "Client supprime", "deleteError": "Impossible de supprimer le client" }, + "note": { "created": "Note creee", "createError": "Impossible de creer la note", "deleted": "Note supprimee", "deleteError": "Impossible de supprimer la note" }, + "timeline": { "created": "Evenement cree", "createError": "Impossible de creer l'evenement", "updated": "Evenement mis a jour", "updateError": "Impossible de mettre a jour l'evenement", "deleted": "Evenement supprime", "deleteError": "Impossible de supprimer l'evenement" }, + "comment": { "created": "Commentaire ajoute", "createError": "Impossible d'ajouter le commentaire", "deleted": "Commentaire supprime", "deleteError": "Impossible de supprimer le commentaire" }, + "agent": { "created": "Agent cree", "createError": "Impossible de creer l'agent", "updated": "Configuration de l'agent enregistree", "updateError": "Impossible d'enregistrer la configuration", "deleted": "Agent supprime", "deleteError": "Impossible de supprimer l'agent", "runStarted": "Execution de l'agent lancee", "runError": "Impossible de lancer l'agent" } +} +``` + +**German translations:** + +```json +"toast": { + "profile": { "updated": "Profil aktualisiert", "updateError": "Profil konnte nicht aktualisiert werden" }, + "settings": { "languageChanged": "Sprache geaendert", "backendUrlSaved": "Server-URL gespeichert", "backendUrlError": "Server-URL konnte nicht gespeichert werden", "formatPrefsSaved": "Anzeigeeinstellungen gespeichert", "formatPrefsError": "Einstellungen konnten nicht gespeichert werden", "memorySaved": "Einstellungen gespeichert", "memoryError": "Einstellungen konnten nicht gespeichert werden" }, + "auth": { "loginError": "Anmeldung fehlgeschlagen", "registerError": "Registrierung fehlgeschlagen", "oauthError": "Google-Anmeldung fehlgeschlagen", "loggedOut": "Abgemeldet" }, + "onboarding": { "completed": "Einrichtung abgeschlossen", "completedDescription": "Ihr Arbeitsbereich ist personalisiert", "error": "Einrichtung konnte nicht gespeichert werden", "reset": "Einrichtung zurueckgesetzt", "normalizing": "Personalisierung laeuft...", "normalized": "Personalisierung abgeschlossen" }, + "task": { "created": "Aufgabe erstellt", "createError": "Aufgabe konnte nicht erstellt werden", "updated": "Aufgabe aktualisiert", "updateError": "Aufgabe konnte nicht aktualisiert werden", "deleted": "Aufgabe geloescht", "deleteError": "Aufgabe konnte nicht geloescht werden" }, + "project": { "created": "Projekt erstellt", "createError": "Projekt konnte nicht erstellt werden", "updated": "Projekt aktualisiert", "updateError": "Projekt konnte nicht aktualisiert werden", "deleted": "Projekt geloescht", "deleteError": "Projekt konnte nicht geloescht werden", "archived": "Projekt archiviert", "unarchived": "Projekt wiederhergestellt", "archivedAll": "Alle Projekte archiviert", "unarchivedAll": "Alle Projekte wiederhergestellt" }, + "client": { "created": "Kunde erstellt", "createError": "Kunde konnte nicht erstellt werden", "updated": "Kunde umbenannt", "updateError": "Kunde konnte nicht umbenannt werden", "deleted": "Kunde geloescht", "deleteError": "Kunde konnte nicht geloescht werden" }, + "note": { "created": "Notiz erstellt", "createError": "Notiz konnte nicht erstellt werden", "deleted": "Notiz geloescht", "deleteError": "Notiz konnte nicht geloescht werden" }, + "timeline": { "created": "Ereignis erstellt", "createError": "Ereignis konnte nicht erstellt werden", "updated": "Ereignis aktualisiert", "updateError": "Ereignis konnte nicht aktualisiert werden", "deleted": "Ereignis geloescht", "deleteError": "Ereignis konnte nicht geloescht werden" }, + "comment": { "created": "Kommentar hinzugefuegt", "createError": "Kommentar konnte nicht hinzugefuegt werden", "deleted": "Kommentar geloescht", "deleteError": "Kommentar konnte nicht geloescht werden" }, + "agent": { "created": "Agent erstellt", "createError": "Agent konnte nicht erstellt werden", "updated": "Agent-Konfiguration gespeichert", "updateError": "Konfiguration konnte nicht gespeichert werden", "deleted": "Agent geloescht", "deleteError": "Agent konnte nicht geloescht werden", "runStarted": "Agent-Ausfuehrung gestartet", "runError": "Agent konnte nicht gestartet werden" } +} +``` + +--- + +## Phase 2: Settings Mutations (replace existing `saved`/`setSaved` patterns) + +These 5 components have existing feedback to **remove and replace**: + +### 2.1 `src/renderer/components/settings/GeneralSection.tsx` + +**Current:** `saved`/`setSaved` state (line 28), `error`/`setError` state (line 29), `setTimeout` (line 44), inline `

` error (line 93). + +**Changes:** +1. Add `const { notify, notifyError } = useNotify();` +2. **Remove** `const [saved, setSaved] = useState(false);` +3. **Remove** `const [error, setError] = useState('');` +4. In `handleSave` `onSuccess`: remove `setSaved(true); setTimeout(...)` → add `notify('success', 'toast.profile.updated');` +5. In `handleSave` `onError`: replace `setError(err.message)` → `notifyError('toast.profile.updateError', err);` +6. **Remove** inline error `

` tag (line 93) +7. **Remove** `setSaved(false)` from `onChange` handlers (lines 83, 89) +8. Button text: `{saved ? t('settings.saved') : t('common.save')}` → `{t('common.save')}` +9. In `handleLanguageChange`: add `notify('info', 'toast.settings.languageChanged');` + +### 2.2 `src/renderer/components/settings/ProfileSection.tsx` + +**Current:** `profileSaved`/`displaySaved` states, both with `setTimeout`. + +**Changes:** +1. Add `useNotify()`, remove both `saved` states and `setTimeout`s +2. Profile save `onSuccess` → `notify('success', 'toast.settings.memorySaved')` +3. Display save `onSuccess` → `notify('success', 'toast.settings.formatPrefsSaved')` +4. Reset onboarding `onSuccess` → `notify('info', 'toast.onboarding.reset')` +5. Both save buttons: replace ternary with `{t('common.save')}` + +### 2.3 `src/renderer/components/settings/AccountSection.tsx` + +**Current:** `urlSaved`/`setUrlSaved` state, `setTimeout`. + +**Changes:** +1. Add `useNotify()`, remove `urlSaved` state and `setTimeout` +2. Backend URL save `onSuccess` → `notify('success', 'toast.settings.backendUrlSaved')` +3. Add `onError` → `notifyError('toast.settings.backendUrlError', err)` +4. Logout `onSuccess` → `notify('info', 'toast.auth.loggedOut')` +5. Button text: replace ternary with `{t('common.save')}` + +### 2.4 `src/renderer/components/settings/LocalAgentConfigPanel.tsx` + +**Current:** `saved`/`setSaved` state, `setTimeout`. + +**Changes:** +1. Add `useNotify()`, remove `saved` state and `setTimeout` +2. Save `onSuccess` → `notify('success', 'toast.agent.updated')` +3. Add `onError` → `notifyError('toast.agent.updateError', err)` +4. Button text: `{t('common.save')}` + +### 2.5 `src/renderer/components/settings/CloudAgentConfigPanel.tsx` + +Identical pattern to 2.4. + +--- + +## Phase 3: CRUD Operations + +### Tasks + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/tasks/NewTaskDialog.tsx` | `tasks.create` | success | `toast.task.created` | +| `components/tasks/EditTaskDialog.tsx` | `tasks.update` | success | `toast.task.updated` | +| `components/tasks/TaskDetailDialog.tsx` | `taskComments.create` | success | `toast.comment.created` | +| `components/tasks/TaskDetailDialog.tsx` | `taskComments.delete` | warning | `toast.comment.deleted` | +| `routes/tasks.tsx` | `tasks.delete` | warning | `toast.task.deleted` | +| `components/projects/KanbanBoard.tsx` | `tasks.delete` | warning | `toast.task.deleted` | +| `components/projects/ProjectDetail.tsx` | `tasks.delete` | warning | `toast.task.deleted` | +| `components/ai/blocks/ChatEntityBlock.tsx` | `tasks.delete` | warning | `toast.task.deleted` | + +**Error-only (no success toast):** Status toggle mutations in `routes/tasks.tsx`, `KanbanBoard.tsx`, `ProjectDetail.tsx`, `ChatEntityBlock.tsx` — visual feedback (badge/card move) IS the confirmation. + +### Projects + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/projects/ProjectSidebar.tsx` | `projects.create` | success | `toast.project.created` | +| `components/projects/ProjectSidebar.tsx` | `projects.update` | success | `toast.project.updated` | +| `components/projects/ProjectSidebar.tsx` | `projects.delete` | warning | `toast.project.deleted` | +| `components/projects/ProjectSidebar.tsx` | `projects.archiveByClient` | warning | `toast.project.archivedAll` / `unarchivedAll` | + +### Clients + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/projects/ProjectSidebar.tsx` | `clients.create` | success | `toast.client.created` | +| `components/projects/ProjectSidebar.tsx` | `clients.update` | success | `toast.client.updated` | +| `components/projects/ProjectSidebar.tsx` | `clients.deleteWithCascade` | warning | `toast.client.deleted` | +| `components/tasks/NewTaskDialog.tsx` | `clients.create` (inline) | success | `toast.client.created` | + +### Notes + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/projects/ProjectDetail.tsx` | `notes.create` | success | `toast.note.created` | +| `routes/notes.$noteId.tsx` | `notes.delete` | warning | `toast.note.deleted` | + +### Timeline Events + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/timeline/AddEventDialog.tsx` | `timelineEvents.create` | success | `toast.timeline.created` | +| `components/timeline/EditEventDialog.tsx` | `timelineEvents.update` | success | `toast.timeline.updated` | +| `routes/timeline.tsx` | `timelineEvents.delete` | warning | `toast.timeline.deleted` | +| `routes/timeline.tsx` | `timelineEvents.update` | success | `toast.timeline.updated` | + +### Agents + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/settings/AgentsSection.tsx` | `agent.*.delete` | warning | `toast.agent.deleted` | +| `components/settings/AgentsSection.tsx` | `agent.runNow` | promise | `toast.agent.runStarted` / `runError` | +| `components/settings/InlineAgentCreationStepper.tsx` | `agent.*.create` | success | `toast.agent.created` | + +--- + +## Phase 4: Auth + Onboarding + +| File | Mutation | Toast | Key | +|------|----------|-------|-----| +| `components/auth/LoginForm.tsx` | `auth.login` error | error | `toast.auth.loginError` | +| `components/auth/LoginForm.tsx` | `auth.register` error | error | `toast.auth.registerError` | +| `components/auth/LoginForm.tsx` | `auth.loginWithOAuth` error | error | `toast.auth.oauthError` | +| `components/layout/AppShell.tsx` | `auth.logout` success | info | `toast.auth.loggedOut` | +| `components/onboarding/OnboardingFlow.tsx` | final save success | success | `toast.onboarding.completed` | +| `components/onboarding/OnboardingFlow.tsx` | normalize call | promise | `toast.onboarding.normalizing` / `normalized` | + +**Auth note:** Keep inline form errors in LoginForm alongside toast — form-level positional context is valuable. + +--- + +## Explicitly SILENT Mutations (no toast) + +| Mutation | Reason | +|----------|--------| +| `notes.update` (auto-save debounced 2s) | Would spam a toast every 2s while typing | +| `tasks.update` status toggle (kanban drag, checkbox, status cycle) | Card movement / badge change IS the feedback | +| `settings.setSidebarCollapsed` | Sidebar animation IS the feedback | +| `ai.chat` / `ai.dailyBrief` | Has own streaming UI | +| `agent.journey.*` | Has own conversational UI | + +For these: add `onError` callback only (no success toast). + +--- + +## All Files Modified (Summary) + +**New files (2):** +- `src/renderer/components/ui/sonner.tsx` — generated by CLI + theme fix +- `src/renderer/hooks/useNotify.ts` — custom hook + +**Modified files (~25):** +- `package.json` — `sonner` dependency (automatic via CLI) +- `src/renderer/index.tsx` — add `` +- 5x `locales/{en,it,es,fr,de}/translation.json` — add `toast` keys +- 5x Settings components — replace saved state with toast +- ~14x CRUD/auth/onboarding components — add toast calls + +--- + +## Verification + +1. **All app states:** Trigger toasts during login (error), onboarding (completion), and normal usage (CRUD) +2. **Theme:** Switch dark/light/system — toast backgrounds should follow semantic tokens +3. **i18n:** Switch to Italian → trigger save → toast should read "Profilo aggiornato" +4. **Error persistence:** Error toasts stay until dismissed (test with invalid backend URL) +5. **Silent mutations:** Drag task on kanban, type in notes, toggle sidebar — NO toasts +6. **Removed patterns:** Settings Save buttons stay as "Save" (no "Saved" flash) + toast appears +7. **Position:** Bottom-right, not overlapping sidebar +8. **Lint:** `npm run lint` passes +9. **Build:** `npm run package` succeeds