Commit Graph
130 Commits
Author SHA1 Message Date
Hermes 2cf6638d9e fix: isolate note editor in memoized pane to prevent focus stealing on parent re-render 2026-08-01 13:18:08 +00:00
Hermes d9000c9f76 fix: restore selectedNoteId as state for re-render, keep ref for content 2026-08-01 13:11:31 +00:00
Hermes 7776668269 fix: remove all state changes on note selection to prevent focus stealing 2026-08-01 13:09:35 +00:00
Hermes 4a83ee88ba fix: add autoFocus to title input to reclaim focus after re-render 2026-08-01 13:09:25 +00:00
Hermes 82db10a10d fix: add tabIndex=-1 to search input to prevent auto-focus stealing from title input 2026-08-01 13:07:45 +00:00
Hermes d0d6002126 fix: use ref-based selectedNote to prevent re-render focus stealing 2026-08-01 13:07:20 +00:00
Hermes eeff700875 fix: TipTap focus leak - use uncontrolled NoteTitleInput with ref to prevent focus stealing on parent re-render 2026-08-01 13:05:31 +00:00
Hermes 3f1a1982ca fix: use uncontrolled inputs for note title and editor to prevent focus leak to search field 2026-08-01 13:04:24 +00:00
Hermes 420ebfe24a fix: isolate note title in memoized component, prevent search input stealing focus 2026-08-01 13:02:55 +00:00
Hermes a65b828c78 fix: isolate note title in memoized component to prevent focus leak to search field 2026-08-01 13:00:22 +00:00
Hermes 21efa311da fix: prevent NoteEditor re-render stealing focus - use key remount, onBlur save, stable ref 2026-08-01 12:58:46 +00:00
Hermes 8917f3ad19 fix: add missing quotes around className in NoteTitleInput 2026-08-01 12:58:34 +00:00
Hermes ec0fb10b3e fix: add missing quotes around className in NoteTitleInput 2026-08-01 12:57:53 +00:00
Hermes c35ea2b175 fix: isolate note title input in memoized component to prevent focus leak to search field 2026-08-01 12:57:32 +00:00
Hermes ee57195681 fix: stabilize handleContentChange callback via ref to prevent NoteEditor re-render stealing focus 2026-08-01 12:53:19 +00:00
Hermes 445f5e1257 fix: use uncontrolled input for note title to prevent focus leak to search field 2026-08-01 12:51:50 +00:00
Hermes ff2611ce18 fix: save note title on blur instead of every keystroke to prevent focus leak 2026-08-01 12:50:16 +00:00
Hermes 67214575fb fix: debounce note title save to prevent focus leak to search field 2026-08-01 12:49:27 +00:00
Hermes 35d063ea82 fix: R3 bugs - TipTap focus leak to search, Quick Captured opens palette, Calendar day view switching 2026-08-01 12:46:41 +00:00
Hermes 085f552c4b fix: calendar day view - separate Calendar instances per view to avoid react-big-calendar view switching bug 2026-08-01 12:40:23 +00:00
Hermes 6613ff058e fix: calendar day view - wrapper div key remount for forced reinit 2026-08-01 12:38:55 +00:00
Hermes d142db40c1 fix: calendar day view - test with regular Calendar (no DnD) 2026-08-01 12:35:01 +00:00
Hermes b9cce1e452 fix: calendar day view - toolbar onView directly sets page state, Calendar remounts via key 2026-08-01 12:33:39 +00:00
Hermes 60dd5a8280 fix: calendar day view - key-based remount workaround for react-big-calendar DnD 2026-08-01 12:32:13 +00:00
Hermes 4693f81095 fix: calendar day view - explicit onView override in toolbar 2026-08-01 12:30:30 +00:00
Hermes b7b7de64fb fix: add missing useRef import in calendar.tsx 2026-08-01 12:28:37 +00:00
Hermes 3a0df07296 fix: R3 bugs - TipTap focus leak, Quick Capture palette, Calendar day view 2026-08-01 12:26:43 +00:00
Hermes 118617c892 fix: MCP endpoint at /api/mcp (Bug #2) + REST API key auth (Bug #3)
Bug #2 (LOW): MCP endpoint was mounted at /mcp instead of /api/mcp,
inconsistent with all other API routes. Changed app.route("/mcp", ...)
to app.route("/api/mcp", ...) in apps/api/src/index.ts.

Bug #3 (MEDIUM): REST API endpoints only accepted JWT cookie/session
auth, not API key auth. Added authenticateApiKey() to authMiddleware
in apps/api/src/middleware/auth.ts so REST endpoints now accept
Authorization: Bearer <api_key> as a fallback after JWT verification.
2026-08-01 11:33:12 +00:00
Hermes a80207fc9a fix(calendar): day/week view toggle — controlled view prop + currentView in CustomToolbar 2026-08-01 05:34:35 +00:00
Hermes d4c02a3de2 T14/Bug #4 #5 #6 #8 #10: commit in-flight worker fixes (agents _all sentinel, settings useThemeStore, 5 detail route registrations)
Continuation of the T10 test report fixes (45d0810). The prior workers
for these bugs wrote the code but died before committing. This commit
captures their work and additionally restores a GET /:id/permissions
route that the prior helper-script accidentally deleted.

- Bug #4 HIGH: GET /api/agents/_all/activity now skips the WHERE clause
  when the SPA passes '_all' as the id.
- Bug #5 MED: Settings > Appearance tab now reads/writes useThemeStore
  (Zustand) so theme changes are consistent with the command palette.
- Bug #6 HIGH: /projects/:id detail page now exists. Plus 4 sibling
  detail pages (tasks/:id, habits/:id, notes/:id, canvas/:id) wired
  into the route tree.
- Bug #8 MED: GET /api/agents/activity (bare path) now returns the
  last 100 activity items instead of falling into /:id/activity with
  id='activity' (which failed the UUID cast).
- Bug #10 LOW: tasks/:id, habits/:id, notes/:id, canvas/:id detail
  pages are now committed (the worker that wrote them never committed).
- graph.tsx and index.tsx overlap with earlier committed fixes
  (t_cc5d9887 and t_296f0121); changes are additive and don't regress.

Also restores GET /api/agents/:id/permissions which the prior helper
script accidentally removed when reformatting agents.ts.

Parent: t_e1cbd87d
2026-08-01 04:13:25 +00:00
Hermes ef163a9d6f T8/Phase 6: OSS component swap polish
- Calendar: react-big-calendar w/ withDragAndDrop, date-fns localizer, custom event renderer (color tokens), custom toolbar, responsive (agenda on mobile), now indicator
- Graph: react-force-graph-2d w/ custom node/link canvas renderers, hover highlighting, search-to-fly, filter panel (entity + relationship types), ResizeObserver, 500-node cap, zoom controls
- Command palette: cmdk polish (recent items, @mention filter, settings/logout actions, mobile full-screen)
- Shortcuts: @github/hotkey for g+letter nav, n+letter create, ?, /, c; Cmd+K for palette
- README.md added with architecture, page list, shortcuts, dev guide
- Bundle: 369 KB gzipped (under 1.5 MB budget)
2026-08-01 02:34:37 +00:00
Hermes c18d7e9abe T7/Phase 5-1: Dashboard page (configurable widget grid, 8 widgets) 2026-08-01 02:21:24 +00:00
Hermes f617c39937 T6/Phase 4: 7 core entity pages (Tasks, Habits, Projects, Notes, Calendar, Graph, Search) 2026-08-01 02:10:18 +00:00
Hermes efcc748adb T5: remove stale T1 stub index.tsx (replaced by _app/index.tsx) 2026-08-01 02:00:40 +00:00
Hermes e86a7c0672 T5/Phase 3: SPA shell + navigation
- TanStack Router with type-safe file-based routes
- Sidebar: collapsible, workspace switcher, 12 nav links, user menu
- Topbar: search, quick-add, notifications, user avatar
- cmdk command palette: nav + create + search + @mentions
- Keyboard shortcuts: Cmd+K palette, g+t/h/p/n/c/g/s navigation, ? help
- Theme: dark default, accent picker (slate/blue/green/purple/orange), persisted to localStorage
- Auth: login -> /, logout -> /login, 401 redirect
- Placeholder pages for all 13 nav routes (real in T6/T7)
- Typed API client with useApiQuery/useApiMutation hooks
2026-08-01 02:00:24 +00:00
Hermes fca56ab77e T1/Phase 1: scaffold Vite SPA + Hono API + Bun worker
- apps/web: Vite + React 19 + TanStack Router/Query + shadcn/ui
   - apps/api: Hono + Bun on :3001 with /api/health, /api/auth/*, /mcp stubs
   - apps/worker: Bun worker stub, DB connection, graceful SIGTERM
   - apps/web-legacy/: old Next.js code moved aside (preserved for T2-T8 reference)
   - Dockerfiles: api (Bun), worker (Bun), spa (multi-stage Caddy)
   - Caddyfile: serves dist + reverse-proxies /api/* + /mcp to api
   - docker-compose.yml: 4-service target (api, spa, db, worker)
   - packages/db/src/client.ts: shared Drizzle client for api + worker
   - db/client.ts: root-level alias for convenience

   Parent: t_e1cbd87d -> t_24c9c3fd (T0)
2026-08-01 01:15:31 +00:00
Hermes 4c3c3249d4 fix(p2): Calendar view toggle - restore original T3 fix (view prop controlled) 2026-07-31 02:24:07 +00:00
Hermes d059beb7dc fix(p2): Calendar view toggle - key on BigCalendar dynamic import + defaultView 2026-07-31 02:20:40 +00:00
Hermes 0630a12597 fix(p2): Calendar view toggle - use view prop (controlled) as original T3 fix 2026-07-31 02:16:55 +00:00
Hermes e9d1380c88 fix(p2): Calendar view toggle - key on DragAndDropCalendar + view prop (clean) 2026-07-31 02:12:37 +00:00
Hermes 6454462317 fix(p2): Calendar view toggle - key on DragAndDropCalendar + view prop 2026-07-31 02:06:42 +00:00
Hermes bf37f9a488 fix(p2): Calendar view toggle - key on DragAndDropCalendar + view prop + onView handler 2026-07-31 01:56:25 +00:00
Hermes de06a9aa21 fix(p2): Calendar view toggle - key prop on DragAndDropCalendar forces remount 2026-07-31 01:47:47 +00:00
Hermes 4bf1c8bf4f fix(p2): Calendar view toggle - force Suspense remount with key prop 2026-07-31 01:37:59 +00:00
Hermes 08841abd68 fix(p2): Calendar view toggle - sync internal view state with parent prop via useEffect 2026-07-31 01:35:02 +00:00
Hermes ca8ff5d13b fix(p2): Calendar view toggle - use defaultView + key on parent dynamic import 2026-07-31 01:31:47 +00:00
Hermes aef02253db fix(p2): remove key prop from parent, keep view prop in wrapper 2026-07-31 01:29:27 +00:00
Hermes 9e80327be2 fix(p2): use view prop (controlled) + key on parent to force Calendar remount 2026-07-31 01:26:54 +00:00
Hermes ab6344d86d fix(p2): force Calendar remount on view change via key prop on parent 2026-07-31 01:24:08 +00:00
Hermes a18bddf784 fix(p2): use view prop (controlled) + key to force Calendar remount 2026-07-31 01:23:30 +00:00