Commit Graph

61 Commits

Author SHA1 Message Date
Roberto
4df5769e8f chore: bump adiuvAI submodule — fix multi-value filter splitting in drizzle-executor
Agent tools sending status="todo,in_progress" et sim now match rows
via inArray instead of literal-string equality.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 20:54:38 +02:00
Roberto
11097b4b5d chore: bump adiuvAI submodule — ChatSurface refactor + home persistence
M2 complete:
- useChatStream hook (shared streaming engine)
- ChatSurface presentational component (variant: home | contextual)
- AIChatPanel thin wrapper over ChatSurface
- Home chat history persisted to SQLite aiChatSessions/aiChatMessages
- 'new chat' rotates session id

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 20:13:59 +02:00
Roberto
2e2150498f chore: bump adiuvAI submodule — aiChat persistence tables + router
M1 complete: aiChatSessions + aiChatMessages tables, migration 0006,
indexes, and aiChat tRPC sub-router. No UI consumer yet.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 18:54:31 +02:00
Roberto
9d00c5d06d docs: contextual sidebar implementation plan
Step-by-step plan across M1-M7 with bite-sized TDD-style tasks,
exact code, commit boundaries, and submodule pointer bumps.
Source: docs/2026-05-14-contextual-sidebar-agent-design.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 18:39:26 +02:00
Roberto
782004916e docs: contextual sidebar agent design
Replace floating-chat (double-click) with adiuva trigger button + right-side
resizable sidebar that persists across navigation and shares the chat surface
with home chat. Includes deprecation sweep of floating_* code paths,
Langfuse prompt swap, and SQLite-backed chat history.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 18:15:36 +02:00
Roberto
1a8acd08c0 chore: bump api submodule + untrack settings.local.json
- api: folder agent pagination/search + PDF/DOCX extract, WS frame casing compat, Langfuse traces
- .gitignore: add .claude/settings.local.json
- graphify-out: refresh after 166-file incremental update
2026-05-14 14:27:41 +02:00
Roberto
82a7a8dc27 chore: bump adiuvAI submodule — DateTimeField typing perf
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 13:46:47 +02:00
Roberto
5a90dbc832 chore: bump adiuvAI submodule — DateTimeField typing fix after calendar pick
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 13:09:21 +02:00
Roberto
f72aaa8424 chore: bump adiuvAI submodule — DateTimeField autocomplete + calendar stay-open
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 12:56:02 +02:00
Roberto
fa09ed2156 chore: bump adiuvAI submodule — DateTimeField + assignees kbd wrap + header padding
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 12:38:33 +02:00
Roberto
1341fb3144 chore: bump adiuvAI submodule — Due popover keyboard close fix
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 11:21:45 +02:00
Roberto
3705316a25 feat: bump adiuvAI submodule — task form keyboard polish
Brings the TaskFormDialog UX in line with the timeline AddEventDialog:
new header (DialogTitle + DialogDescription, no separator), roving
focus across property pills, listbox keyboard inside each popover,
and a typeable DateField (with optional HH:MM suffix) for the Due
field. Two shared hooks (useRovingFocus, useListboxKeys) underpin
the keyboard model.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 11:18:30 +02:00
Roberto
72d7cc2f6e docs: add task form dialog keyboard polish implementation plan
Step-by-step plan to port AddEventDialog UX (header, full keyboard nav,
date+time via DateField) into TaskFormDialog. Two new shared hooks
(useRovingFocus, useListboxKeys), parseDate time-suffix, DateField
withTime + flat props, and i18n updates across all 5 languages.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 10:51:57 +02:00
Roberto
e1d15b3edd docs: add task form dialog keyboard polish design
Spec for porting AddEventDialog UX patterns into TaskFormDialog: new
header (title + description, no separator), full keyboard navigation
(roving focus on pills, arrow nav, Enter to open popover, arrow nav
inside list popovers and calendar), and date+time keyboard entry via
extended DateField (withTime + flat props) and parseDate time suffix.

Includes interactive HTML mockup demonstrating the keyboard flow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 10:47:57 +02:00
Roberto
faea5f0448 docs: add timeline batch-add implementation plan
9 tasks, manual verification per task (no automated test suite).
Covers parseDate utility, DateField primitive, EditEventDialog
migration, AddEventDialog rewrite with keyboard nav, edit-row mode,
batch submit with allSettled error handling.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 15:59:43 +02:00
Roberto
c68e23b713 docs(spec): defer TaskFormDialog migration from timeline batch-add
TaskFormDialog uses TZDate + H/M selectors; DateField primitive does
not cover timezone or time-of-day. Track as follow-up after DateField
gains timezone/time support.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 15:56:35 +02:00
Roberto
aba0f38816 docs: add timeline batch-add design spec
Stage-then-commit batch flow for AddEventDialog. One project per
batch, typed date entry with smart parse, full keyboard operation.
Extracts DateField + parseDate as shared primitives, migrates
EditEventDialog and TaskFormDialog.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 15:53:07 +02:00
Roberto
8dffbc714c feat: bump api + adiuvAI submodules for project folder integration
api/ (15 commits): migration + ORM model + tier matrix + quota helpers +
quota endpoint + folder_indexer (text/vision/PDF/DOCX) + WS index session
frames + scoped read tool + manifest formatter + manifest injection
into home/task-brief/multi-project brief.

adiuvAI/ (15 commits): drizzle schema + scanner + indexer + WS frame
senders + tRPC projectFolders router + drizzle-executor actions +
daily rescan + i18n (5 locales) + 5 React components (FolderChip,
FolderLinkCard, FolderFileList, FolderUnlinkDialog, FilesSection) +
ProjectTabBar/ProjectDetail wiring + pre-flight quota check + toasts.
2026-05-12 13:11:14 +02:00
Roberto
0abed9563b docs: add project-folder integration implementation plan
32 bite-sized tasks across 6 phases: API foundation, indexer (text +
vision + PDF/DOCX), agent wiring, Electron schema + scanner, renderer
UI, end-to-end smoke verification. Linked spec:
docs/superpowers/specs/2026-05-11-project-folder-integration-design.md
2026-05-11 22:24:34 +02:00
Roberto
361f89a29d docs: add project-folder integration design spec
Approved design for linking a local folder to a project: lightweight
manifest with per-file LLM summaries, WS-streamed indexing pipeline,
pre-injected manifest for Home/Brief/Task-Brief agents, tier-gated
token+file-count quota recorded backend-side.
2026-05-11 22:08:44 +02:00
Roberto
74e2152596 chore: bump adiuvAI submodule (remove kbd hint from TaskFormDialog) 2026-05-08 16:11:57 +02:00
Roberto
649e4f00a5 Update adiuvAI: fix popover auto-close in TaskDetailSheet 2026-05-08 16:08:48 +02:00
Roberto
1c8c7e2ddc chore: bump adiuvAI submodule (task UX polish fixes)
Pulls in fixes for: card context menu, change-status icon, sheet live render,
composer alignment, project link relocation to sheet header, no comment toast.
2026-05-08 16:03:26 +02:00
Roberto
b111c76661 Bump adiuvAI: TaskDetailSheet header X/menu alignment fix 2026-05-08 15:38:03 +02:00
Roberto
804a0a5af3 Bump adiuvAI: TaskFormDialog due-time picker + TaskDetailSheet header overlap fix 2026-05-08 15:24:11 +02:00
Roberto
314d5656ae Update adiuvAI: Drizzle migrator replaces hand-rolled DB migrations
Bumps adiuvAI submodule to dac1d50 — initDb() now uses
drizzle-orm/better-sqlite3/migrator against src/main/db/migrations/
instead of a hand-rolled CREATE TABLE IF NOT EXISTS string + try/catch
ALTER blob. Includes a one-time bootstrap that seeds __drizzle_migrations
on legacy DBs so existing data (incl. 51 user tasks) is preserved.

Fixes the empty-tasks-list regression caused by migration 0004
(estimate column + task_attachments table) not being mirrored into
db/index.ts.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-08 15:12:35 +02:00
Roberto
e073f4f774 feat: Task UX evolution — paginated table, detail sheet, attachments
Bumps adiuvAI submodule from dd3f144 to e104ffc, completing 27 commits
across 7 phases of the Task UX Evolution plan (docs/2026-05-08-task-ux-evolution-plan.md):

- Phase A: schema + backend (estimate column, task_attachments table, tRPC sub-router, cascade delete)
- Phase B: building blocks (AssigneeStack, StatusBadge, TaskAttachmentChip + hook, ChatInputBox comment variant)
- Phase C: TaskDetailSheet (replaces TaskDetailDialog) — sticky header/body/composer, attachments, clickable chip popovers
- Phase D: TaskFormDialog quick-capture form with property pills (replaces vertical NewTask/EditTask layout)
- Phase E: TaskTable + TaskTableRow + TaskPager + TaskListView orchestrator
- Phase F: project page tasks tab uses TaskListView (KanbanBoard removed)
- Phase G: i18n keys for all 5 locales (en/it/es/fr/de) + attachment toast keys
2026-05-08 14:45:43 +02:00
Roberto
20240c5fea docs: add Task UX Evolution implementation plan
29 tasks across 7 phases (schema+backend, building blocks, detail sheet,
form dialog, table+pager+list view, project page, i18n). Each task is a
single commit, manual smoke verify in dev (no test suite).
2026-05-08 13:05:58 +02:00
Roberto
310410350f docs: add Task UX Evolution design spec
Validated design for task list refactor: shadcn Table view with shared
pagination, right-side detail Sheet with attachments, redesigned
quick-capture create/edit dialog, project detail page reusing the same
list view.
2026-05-08 12:26:28 +02:00
Roberto
5274f014b9 Update adiuvAI: sidebar alignment + timeline axis improvements
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 18:11:38 +02:00
Roberto
ba9c9a4702 Update submodules: task briefing carousel feature complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 15:10:28 +02:00
Roberto
064142d386 update project data 2026-05-03 22:52:26 +02:00
Roberto
0c3dfb3564 Update note management from db vector to index 2026-04-30 00:11:39 +02:00
Roberto
c16e68f0d0 timeline resize view 2026-04-29 23:13:49 +02:00
Roberto
75f6b0dca5 Added graphify 2026-04-29 14:42:44 +02:00
Roberto
27dbfdfa8d Update project state 2026-04-29 09:31:37 +02:00
Roberto
6a352075ec last state 2026-04-27 09:15:31 +02:00
Roberto
d80d4d6b9e update skills 2026-04-27 09:08:36 +02:00
Roberto
b2989e53eb Slide for adiuvAI 2026-04-19 14:49:36 +02:00
Roberto Musso
0ac2ce924d brief agent 2026-04-18 22:20:03 +02:00
Roberto Musso
3538050e75 memory 2026-04-17 22:48:19 +02:00
Roberto Musso
2ee3bb37db update skill config 2026-04-15 11:26:46 +02:00
Roberto Musso
25a5a6672e chore: update subproject commits for waitlist and website 2026-04-12 10:20:31 +02:00
Roberto Musso
8ce3ade8ce feat(onboarding): implement first-run user onboarding wizard for profile setup
- Added a new onboarding wizard that runs on the first app launch post-login.
- Collects user personalization data (job role, industry, primary use case, tone preference, language) and stores it in encrypted core memory.
- Auto-detects and saves formatting preferences (timezone, time format, date format) in local electron-store.
- Normalizes user free-text inputs via a backend LLM call before persisting.
- Introduced new backend routes for memory updates and normalization.
- Updated frontend components to support the onboarding flow with a chat-bubble aesthetic.
- Added settings section for profile editing and re-running the onboarding process.
- Ensured that the onboarding process is skippable and editable in the settings.
- Implemented verification steps to ensure proper functionality and data handling.

chore: update submodules for waitlist and website
2026-04-12 00:36:11 +02:00
Roberto Musso
54eb863c52 feat: Update local agent documentation to reflect changes in user_id and session_id handling; add marketing strategy document; update skills-lock.json with new Remotion best practices; update website subproject commit. 2026-04-11 02:15:59 +02:00
Roberto Musso
bc2c76d2bb docs: update CLAUDE.md with Google OAuth architecture and gotchas
Document non-obvious details from Steps 1-5 implementation:
- adiuvAI: deep-link protocol workaround, requestSingleInstanceLock,
  backup-key.ts device-bound key, loginWithOAuth fetch() vs get()
- api: _pending_states in-memory limitation, nullable password_hash,
  OAUTH_REDIRECT_URI pointing to API not website, 409 unverified-email
  guard, OAuth testing patterns with AsyncMock + monkeypatch

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 18:39:20 +02:00
Roberto Musso
92648472d7 fix: handle unverified OAuth email conflict (api submodule)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 13:49:36 +02:00
Roberto Musso
2958961e75 feat: complete Step 5 Google OAuth — backup key + tests
- adiuvAI: add backup-key.ts (device-specific AES key via safeStorage),
  remove _cachedPassword from AuthManager
- api: add TestOAuth (6 tests) covering authorize, callback flows
- docs: mark Step 5 complete with lessons learned

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 13:42:29 +02:00
Roberto Musso
d068edc77e feat: Google OAuth Steps 2-4 — backend web-callback, Electron deep link, login UI, avatar
Backend (api @ feature/batch-agent-v2):
- GET /auth/oauth/{provider}/web-callback: bounces Google redirect to adiuvai://
- OAUTH_REDIRECT_URI default: http://localhost:8000/api/v1/.../web-callback

Electron (adiuvAI @ develop):
- adiuvai:// protocol registered in forge.config.ts and via setAsDefaultProtocolClient
- Single-instance lock + second-instance/open-url deep-link handlers
- AuthManager.loginWithOAuth() + handleOAuthCallback()
- auth.loginWithOAuth tRPC mutation
- LoginForm: Google button, divider, pending state
- AppShell + AccountSection: avatar photo with initials fallback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 13:04:14 +02:00
Roberto Musso
37d7e65b35 feat: implement Step 2 Google OAuth backend — provider abstraction, PKCE routes, user linking
Adds api/app/auth/oauth_providers.py with GoogleOAuthProvider (httpx-based,
no authlib needed) and generate_pkce_pair(). New routes:
GET /auth/oauth/{provider}/authorize and POST /auth/oauth/{provider}/callback
with state/PKCE validation and three-way user resolution (existing OAuth link,
email auto-link, new social-only user). Updates settings.py with
GOOGLE_AUTH_CLIENT_ID/SECRET and OAUTH_REDIRECT_URI.

Also includes Step 1 backend changes (already marked complete in plan):
oauth_accounts table migration, nullable password_hash, avatar_url on User.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 09:21:14 +02:00