79 Commits

Author SHA1 Message Date
Roberto
bff26c07db chore: bump submodules — post-review fixes
Fixes from final code review:
- Cloud scout CRUD URLs corrected (/api/v1/scouts/cloud)
- Note summarization URL corrected (/api/v1/scouts/notes/summarize)
- GmailConnector.fetch_content now uses single-message Gmail get instead of bulk fetch
- scout_proposal ack now sent only after successful local persist

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 05:40:22 +02:00
Roberto
f5fc25ebce chore: bump submodules — Phase 3 Gmail scout end-to-end
Phase 3 ships:
- GmailConnector implementation (list_new, fetch_metadata, fetch_content, archive, setup_watch, renew_watch)
- Connector registration at app startup
- Real triage LLM via scout-triage-system Langfuse prompt
- Pub/Sub webhook with JWT verification (dev-mode skip when GMAIL_PUBSUB_AUDIENCE empty)
- Cron-fallback poll + Gmail watch renewal in APScheduler lifespan
- Settings UI: Connect Gmail OAuth flow with separate gmail.readonly+modify scopes
- Deep-link callback handler adiuvai://scout/oauth/gmail/callback
- i18n keys scouts.connectGmail + toast.scout.gmailConnected in all 5 languages

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 04:55:48 +02:00
Roberto
6eadd61f62 chore: bump submodules — Phase 2 connector skeleton
Phase 2 ships:
- scout_triage_queue Postgres table + cloud_scout_configs gmail fields
- ScoutTriageQueue SQLAlchemy model
- SourceConnector Protocol + connector registry
- ScoutEngine: trigger_scout, _process_item (stub _triage_llm), deliver_pending, ack_proposal
- WS frame contract: scout_proposal + scout_proposal_ack
- Electron scout_suggestions SQLite table
- Electron scout-suggestion-handler

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 03:48:54 +02:00
Roberto
596e5551f8 chore: bump submodules — Phase 1 scouts rename complete
api: agent_ids → scout_ids in device_hello WS frame + tests
adiuvAI: CloudAgentConfig → CloudScoutConfig, agentIds → scoutIds
.claude/CLAUDE.md: update all scout-subsystem doc references

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 01:50:48 +02:00
Roberto
445a4cbbf9 docs: add scouts refactor + gmail scout implementation plan
Covers Phases 1-3 (rename, connector skeleton, Gmail end-to-end) as
28 TDD tasks. Phase 4 (Stage 2 categorization + brief HITL) deferred
to separate spec.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 23:32:40 +02:00
Roberto
732a4c42f8 docs: add scouts refactor + gmail scout design spec
Phases 1-3 in scope: rename agents → scouts (UI/code/Postgres/SQLite/
Langfuse), Gmail cloud scout w/ two-stage pipeline, SourceConnector
abstraction. Phase 4 (Stage 2 categorization + HITL surface in brief)
deferred to task-brief rework.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 23:15:46 +02:00
Roberto
1cd7a59dfc Add Contextual chat 2026-05-15 22:30:34 +02:00
Roberto
fd700c29be chore: bump adiuvAI submodule — contextual M7 (empty-state copy)
Empty-state hint on contextual sidebar when no messages.
Per-page copy with entity-name interpolation for project / note.
Notes hint mentions note editing deferred to a later release.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 21:17:09 +02:00
Roberto
750fada8f6 chore: bump submodules — contextual M6 (deprecation sweep)
M6 deletes legacy floating chat entirely:
- Frontend: FloatingChat / FloatingChatContext / useDoubleClickAI / all
  data-ai-section attrs / 'floating' from useAIChat / ChatInputBox /
  sendFloatingRequest / orchestrateFloating / ai.chat mode='floating'
- TaskBriefChat migrated from mode='floating' to mode='contextual'
- Backend: _handle_floating_request / run_floating_stream /
  _FLOATING_SYSTEM_PROMPT / floating tool helpers / WsFloatingRequest /
  WsFloatingDomain / StreamFormatter floating_domain branch /
  LLM_MODEL_FLOATING_AGENT / 'floating-agent' llm.py entry
- Langfuse: 'floating_system' prompt deleted (4 versions, all labels)
- Tests: floating-specific test functions removed from
  test_deep_agent.py + test_ws_unified.py + test_output_formatter.py +
  test_schemas_v3.py

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 18:58:08 +02:00
Roberto
6b857302e3 chore: bump api submodule — narrow contextual tool palette
Smoke trace 0b46841484ba7d024ed9f8d5ac8b1df0 showed agent picking
legacy list_projects + get_project (shallow snapshot, no aiSummary
or tasks) for a 'summarize Nexus' query. _contextual_tools now
exposes ONLY get_page_details for reads. Prompt rule 2 explicitly
forbids list_*/get_* legacy tools. Langfuse contextual_system v2
mirrors the new rule.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 18:24:39 +02:00
Roberto
9e28c35725 chore: bump adiuvAI submodule — contextual M5 (get_page_details executor)
M5 ships client-side dispatch for the contextual agent's
get_page_details tool. Handler in drizzle-executor returns
project/task/note entity snapshots plus tasks_all/projects_all/
timeline_all list variants. ToolCallActionSchema widened to
admit the new action.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 14:47:05 +02:00
Roberto
1662dcd7c0 chore: bump adiuvAI submodule — notes page header into shared AppShell header
HeaderContext exposes leftExtras + rightExtras slots. Notes route
publishes [back arrow] (left) + [Saving? + 3-dot menu] (right) to
the shared header. No more inline toolbar div on notes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 14:42:36 +02:00
Roberto
c1beffb713 chore: bump adiuvAI submodule — trigger button restyle + scroll fixes 2026-05-15 07:54:51 +02:00
Roberto
a9169708ce chore: bump adiuvAI submodule — ProjectTabBar sticky offset = heroH
Two bugs after showHeader: tab bar was sticky top-0 competing with
hero (also sticky top-0); and heroH was measured once at mount,
stale on cold loads. Fix: ResizeObserver tracks heroH in state,
tab bar sticky offset = heroH, observer re-creates on heroH change.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 07:31:54 +02:00
Roberto
f6ccde92a7 chore: bump adiuvAI submodule — projects-list header hoist + HeaderContext
ProjectSidebar internal header strip removed. Create-project button
renders in AppShell header next to the page label, only on /projects.
New HeaderContext + useHeaderSlot hook for publishing header label
and trailing extras from route components.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 07:22:52 +02:00
Roberto
c7bf8ce87b chore: bump adiuvAI submodule — move trigger to shared header, shrink to sm
AdiuvaTriggerButton now lives in AppShell header (next to sidebar
toggle + page label), hidden on home. Default size 32px (sm
variant). Routes keep their useContextualScope calls; per-route
button renders removed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:33:45 +02:00
Roberto
3b2110d530 chore: bump adiuvAI submodule — contextual sidebar M4 frontend complete
M4 ships full contextual chat UI:
- ContextualChatProvider (mounted once in AppShell)
- useContextualScope hook + ContextualScope type
- AdiuvaTriggerButton + AdiuvaIcon (compass needle, elevated, hover halo)
- ContextualSidebar shell (top-right elevated controls, fade-under-input)
- AppShell ResizablePanelGroup mount (non-home routes only, resize persists)
- Trigger + scope hook on Timeline / Tasks / Projects / ProjectDetail / Notes
- Main process bridge: ai.chat mode='contextual', orchestrateContextual,
  sendContextualRequest/sendContextualScopeUpdate, ai:contextual-scope-update IPC
- Stream listener cleanup on unmount (prevents IPC leaks mid-stream)
- ProjectsListScope sub-component prevents parent-effect clobbering child scope

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 22:10:03 +02:00
Roberto
69feea03da chore: bump api submodule — contextual frames + run_contextual_stream
M3 complete (code-side):
- ContextualScope Pydantic schema (camelCase alias_generator)
- render_scope_block (no id leakage)
- _CONTEXTUAL_SYSTEM_PROMPT fallback + {date_context} + {language_instruction} slots
- run_contextual_stream (Langfuse 'contextual_system' + fallback)
- _handle_contextual_request + _handle_contextual_scope_update WS handlers
- ContextualBufferProxy + append_system_message on session buffer

NOTE: Langfuse 'contextual_system' prompt must be created manually
before deploy. See M3.6 in docs/2026-05-14-contextual-sidebar-agent-plan.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-14 21:18:21 +02:00
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