Commit Graph

24 Commits

Author SHA1 Message Date
e9c0763025 feat: task tags, sort controls, and tag filtering
- Added tags (JSONB array) to tasks schema with full CRUD support
- Tag editor in TaskDetailPanel with chip UI, Enter/comma to add, Backspace to remove
- Tag badges on TaskCard, KanbanBoard cards, and DashboardPage
- Sort controls on QueuePage: sort by priority, due date, created, updated, name
- Sort direction toggle (asc/desc) with persistence to localStorage
- Tag filter dropdown in QueuePage header (populated from existing tags)
- Search now matches tags
- Backend: tags in create/update, progressNotes in PATCH body
2026-01-29 11:04:39 +00:00
819649c8c7 fix: chat WS relay URL + chat UX improvements
- Fix docker-compose to read GATEWAY_WS_URL (was VITE_WS_URL, never set)
- Fix gateway-relay.ts default to ws.hammer.donovankelly.xyz
- Fix Elysia TS errors in error handlers (cast to any)
- Add thinking/typing indicator in chat (bouncing dots)
- Add message timestamps (tap to show)
- Add thread renaming (double-click thread name)
- Auto-resize chat input textarea
2026-01-29 08:34:45 +00:00
e874cafbec feat: due dates, subtasks, and task detail page (HQ-{number} URLs)
- Schema: added due_date and subtasks JSONB columns to tasks
- API: CRUD endpoints for subtasks (/tasks/:id/subtasks)
- API: due date support in create/update task
- TaskDetailPanel: due date picker with overdue/soon badges
- TaskDetailPanel: subtask checklist with progress bar
- TaskPage: full-page task view at /task/HQ-{number}
- Dashboard: task cards link to detail page, show subtask progress & due date badges
- Migration: 0001_mighty_callisto.sql
2026-01-29 07:06:59 +00:00
f2b477c03d fix(relay): proper gateway protocol handshake with role/scopes/ticks
- Add role: operator, scopes: [operator.read, operator.write]
- Handle connect.challenge event from gateway
- Add tick keepalive (gateway expects periodic ticks)
- Fix duplicate message listener bug
- Fix default URL fallback (remove non-existent ws. subdomain)
2026-01-29 06:38:23 +00:00
bf3aa18f8e fix: use ws.hammer.donovankelly.xyz for gateway relay WSS
- Backend relay defaults to wss://ws.hammer.donovankelly.xyz
- Dokploy env updated: GATEWAY_WS_URL, GATEWAY_WS_TOKEN
- Caddy: ws.hammer subdomain proxies WSS to gateway
2026-01-29 06:37:29 +00:00
6ae9ea8b43 fix: gateway-relay falls back to VITE_WS_TOKEN env var 2026-01-29 06:05:55 +00:00
5cfde2f2e7 feat: progress notes UI, search/filter, chat backend relay (HQ-21)
- Add progress note input to TaskDetailPanel (textarea + Cmd+Enter submit)
- Add addProgressNote API function
- Add search bar and priority filter to Queue page
- Include chat backend: WebSocket relay (gateway-relay.ts), chat routes (chat.ts)
- Chat frontend updated to connect via backend relay (/api/chat/ws)
2026-01-29 06:05:03 +00:00
b0559cdbc8 feat: projects with context - schema, API, frontend page, task assignment (HQ-17, HQ-21) 2026-01-29 05:05:20 +00:00
46ada23bcb fix: webhook message references dash.donovankelly.xyz (HQ-20)
- Updated webhook notification message to use dash domain
- Caddy now proxies /hooks/* to gateway, blocks all other paths
- Control UI no longer exposed publicly
2026-01-29 03:59:29 +00:00
e3ea7a204d feat: add assigneeId/assigneeName to tasks schema and API
- Added assignee_id and assignee_name columns to tasks table
- PATCH /api/tasks/:id now accepts assigneeId and assigneeName
- db:push on startup will auto-migrate the columns
2026-01-29 03:56:38 +00:00
a765bf74b1 fix: use hammer.donovankelly.xyz for all gateway access (HQ-21)
- Single domain for hooks + WebSocket (path-based routing)
- No need for ws.hammer or hooks.hammer subdomains
- Caddy proxies everything to gateway on this VPS
2026-01-29 02:55:36 +00:00
91bc69e178 feat: Hammer Dashboard with sidebar navigation (HQ-21)
- Add React Router with sidebar layout (DashboardLayout)
- Queue is now a routed page at /queue
- Chat placeholder page at /chat
- Admin page accessible from sidebar
- Dark sidebar with amber accent for active nav
- Updated CORS and auth to support dash.donovankelly.xyz
- Renamed to Hammer Dashboard
2026-01-29 02:14:25 +00:00
5c2e372ed2 fix: use hooks.hammer.donovankelly.xyz for webhook (HQ-20) 2026-01-29 02:09:41 +00:00
a73a410099 fix: enforce HTTPS for webhook, no hardcoded defaults (HQ-20)
- Webhook URL must be set via env var (no fallback)
- Webhook URL must start with https:// or it's rejected
- Both URL and token required, skip silently if missing
2026-01-29 02:05:55 +00:00
40c277c41a fix: use HTTPS for webhook URL (HQ-20)
- Default to https://hooks.donovankelly.xyz/hooks/agent
- Remove hardcoded token from compose defaults
- Token must be set via CLAWDBOT_HOOK_TOKEN env var in Dokploy
2026-01-29 02:05:25 +00:00
b27a55eb91 fix: webhook defaults for cross-server deployment (HQ-20)
- Default CLAWDBOT_HOOK_URL to VPS hook-proxy (72.60.68.214:18790)
- Add default CLAWDBOT_HOOK_TOKEN in compose for Dokploy deploys
- Add extra_hosts for host.docker.internal resolution
- Queue backend on remote server can now reach Clawdbot gateway
2026-01-29 02:03:47 +00:00
93746f0f71 feat: session-based auth, admin roles, user management
- All logged-in users can create/edit/manage tasks (no bearer token needed)
- Added user role system (user/admin)
- Donovan's account auto-promoted to admin on startup
- Admin page: view users, change roles, delete users
- /api/me endpoint returns current user info + role
- /api/admin/* routes (admin-only)
- Removed bearer token UI from frontend
- Bearer token still works for API/bot access
2026-01-29 01:33:18 +00:00
76b9c61b09 fix: use integer instead of serial for taskNumber, add backfill on startup
serial caused db:push failure on existing tables. Now uses nullable
integer with app-level sequencing and startup backfill.
2026-01-29 00:51:26 +00:00
8131dda10d feat: sequential task IDs (HQ-1, HQ-2, etc.)
- Add serial task_number column to tasks table
- Display HQ-{number} on cards and detail panel
- API resolveTask() supports UUID, number, or HQ-N prefix
- GET /api/tasks/:id endpoint for single task lookup
- All PATCH/POST/DELETE endpoints resolve by number or UUID
2026-01-29 00:07:04 +00:00
9a99b612ba feat: webhook to Clawdbot when task activated + session auth for all mutations 2026-01-28 23:36:40 +00:00
b7df98bd94 fix: add onError handler to task routes plugin for proper 401 responses 2026-01-28 23:23:31 +00:00
737c748486 fix: improve error handling for session auth check 2026-01-28 23:22:53 +00:00
96d81520b9 feat: add BetterAuth authentication
- Add better-auth to backend and frontend
- Create auth tables (users, sessions, accounts, verifications)
- Mount BetterAuth handler on /api/auth/*
- Protect GET /api/tasks with session auth
- Add login page with email/password
- Add invite route for creating users
- Add logout button to header
- Cross-subdomain cookies for .donovankelly.xyz
- Fix page title to 'Hammer Queue'
- Keep bearer token for admin mutations (separate from session auth)
- Update docker-compose with BETTER_AUTH_SECRET and COOKIE_DOMAIN
2026-01-28 23:19:57 +00:00
0a8d5486bb Initial scaffold: Hammer Queue task dashboard
- Backend: Elysia + Bun + Drizzle ORM + PostgreSQL
- Frontend: React + Vite + TypeScript + Tailwind CSS
- Task CRUD API with bearer token auth for writes
- Public read-only dashboard with auto-refresh
- Task states: active, queued, blocked, completed, cancelled
- Reorder support for queue management
- Progress notes per task
- Docker Compose for local dev and Dokploy deployment
2026-01-28 22:55:16 +00:00