e7da4ca25e
fix: attach domain to project ( #640 )
...
ci/woodpecker/push/ci Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 22:33:49 +00:00
d361d00674
fix: Logs page — activity_logs, optional workspaceId, autoRefresh on ( #637 )
...
ci/woodpecker/push/ci Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 22:10:16 +00:00
c23c33b0c5
fix(api): use TRUSTED_ORIGINS for socket.io gateway CORS ( #628 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 20:13:13 +00:00
c5253e9d62
feat(web): add project detail page ( #627 )
...
ci/woodpecker/push/ci Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 20:09:52 +00:00
e898551814
fix(web): correct Add Provider form to match fleet-settings DTO ( #626 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 20:00:50 +00:00
861eff4686
fix(web): correct Add Provider form DTO field mapping ( #623 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 19:19:04 +00:00
66d401461c
feat(web): fleet settings UI (MS22-P1h) ( #617 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 16:22:22 +00:00
01ae164b61
feat(web): onboarding wizard (MS22-P1f) ( #616 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 16:07:22 +00:00
6521f655a8
feat(web): add teams page and RBAC navigation/route gating (MS21-UI-005, RBAC-001, RBAC-002) ( #595 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 04:54:25 +00:00
7106512fa9
feat(web): add user edit/invite dialogs and workspace member management (MS21-UI-002, MS21-UI-004) ( #592 )
...
ci/woodpecker/push/ci Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-03-01 03:54:32 +00:00
b57f549d39
test(web): add API client tests for admin, workspaces, teams (MS21-TEST-004) ( #581 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 23:26:36 +00:00
e93e7ffaa9
feat(web): wire workspace member management UI (MS21-UI-004) ( #577 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 22:12:05 +00:00
307639eca0
feat(web): add teams settings page (MS21-UI-005) ( #576 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 22:12:04 +00:00
5cd6b8622d
feat(web): add admin users settings page (MS21-UI-001) ( #573 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 20:50:11 +00:00
20c9e68e1b
feat(web): wire workspaces settings page to real API (MS21-UI-003) ( #574 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 20:48:24 +00:00
ffc10c9a45
feat(api): add MS21 user fields for admin, local auth, and invitations ( #553 )
...
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 17:47:03 +00:00
128431ba58
fix(api,web): separate workspace context from auth session ( #551 )
...
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-28 15:14:29 +00:00
66fe475fa1
fix(web): convert favicon.ico to RGBA format for Turbopack ( #544 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-27 11:10:38 +00:00
c38bfae16c
fix(web): fix personalities page dark mode theming and wire to API ( #540 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-27 10:59:04 +00:00
dd0568cf15
fix(web): add workspace context to domain and project creation ( #536 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-27 10:28:40 +00:00
edcff6a0e0
fix(api,web): add workspace context to widgets and auto-detect workspace ID ( #532 )
...
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-27 04:53:07 +00:00
e3cba37e8c
fix(api,web): resolve RLS context SQL error, workspace guard crash, and projects response unwrapping ( #531 )
...
ci/woodpecker/push/web Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-27 04:18:35 +00:00
7de0e734b0
feat(web): implement SSE chat streaming with real-time token rendering ( #516 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-26 02:39:43 +00:00
cc56f2cbe1
feat(web): migrate dashboard to WidgetGrid with layout persistence ( #497 )
...
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-24 00:50:24 +00:00
05b1a93ccb
feat(web): add logs and telemetry page with filtering and auto-refresh ( #480 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 04:38:15 +00:00
a78a8b88e1
feat(web): add project workspace page with tasks and agent sessions ( #479 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 04:29:39 +00:00
172ed1d40f
feat(web): add kanban board page with drag-and-drop ( #478 )
...
ci/woodpecker/push/web Pipeline failed
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 04:26:25 +00:00
ee2ddfc8b8
feat(web): add projects page with CRUD operations ( #477 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 04:13:26 +00:00
5a6d00a064
feat(web): wire knowledge pages to real API data ( #476 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 04:12:14 +00:00
f97be2e6a3
feat(web): wire calendar page to real API data ( #474 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 03:51:15 +00:00
97606713b5
feat(web): wire tasks page to real API data ( #473 )
...
ci/woodpecker/push/web Pipeline failed
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 03:51:08 +00:00
7581d26567
Phase 2: Task Ingestion Pipeline ( #459 ) ( #460 )
...
ci/woodpecker/push/api Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-23 00:54:55 +00:00
1b66417be5
fix(web): restore login page design and add runtime config injection ( #435 )
...
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
Co-authored-by: Jason Woltje <jason@diversecanvas.com >
Co-committed-by: Jason Woltje <jason@diversecanvas.com >
2026-02-21 23:16:02 +00:00
af299abdaf
debug(auth): log session cookie source
ci/woodpecker/push/infra Pipeline was successful
ci/woodpecker/push/orchestrator Pipeline was successful
ci/woodpecker/push/api Pipeline was successful
ci/woodpecker/push/web Pipeline was successful
2026-02-18 21:36:01 -06:00
Jason Woltje
ab902250f8
feat(web-hud): seed default layout with orchestration widgets
ci/woodpecker/push/web Pipeline was successful
2026-02-17 16:07:09 -06:00
Jason Woltje
9d3a673e6c
fix( #411 ): resolve CI lint errors — prettier, unused directives, no-base-to-string
...
ci/woodpecker/push/web Pipeline failed
ci/woodpecker/push/api Pipeline was successful
- auth.config.ts: collapse multiline template literal to single line
- auth.controller.ts: add eslint-disable for intentional no-unnecessary-condition
- auth.service.ts: remove 5 unused eslint-disable directives (Node 24 resolves
BetterAuth types), fix prettier formatting, fix no-base-to-string
- login/page.tsx: remove unnecessary String() wrapper
- auth-context.test.tsx: fix prettier line length
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 17:00:01 -06:00
Jason Woltje
d7de20e586
fix( #411 ): classifyAuthError — return null for normal 401/session-expired instead of 'backend'
...
Normal authentication failures (401 Unauthorized, 403 Forbidden, session
expired) are not backend errors — they simply mean the user isn't logged in.
Previously these fell through to the `instanceof Error` catch-all and returned
"backend", causing a misleading "having trouble connecting" banner.
Now classifyAuthError explicitly checks for invalid_credentials and
session_expired codes from parseAuthError and returns null, so the UI shows
the logged-out state cleanly without an error banner.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 15:42:44 -06:00
Jason Woltje
b675db1324
test( #411 ): QA-015 — add credentials fallback test + fix refreshSession test name
...
Add test for non-string error.message fallback in handleCredentialsLogin.
Rename misleading refreshSession test to match actual behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 14:05:30 -06:00
Jason Woltje
e0d6d585b3
test( #411 ): QA-014 — add verifySession non-Error thrown value tests
...
Verify verifySession returns null when getSession throws non-Error
values (strings, objects) rather than crashing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 14:03:08 -06:00
Jason Woltje
df495c67b5
fix( #411 ): QA-012 — clamp RetryOptions to sensible ranges
...
fetchWithRetry now clamps maxRetries>=0, baseDelayMs>=100,
backoffFactor>=1 to prevent infinite loops or zero-delay hammering.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 13:53:29 -06:00
Jason Woltje
3e2c1b69ea
fix( #411 ): QA-009 — fix .env.example OIDC vars and test assertion
...
Update .env.example to list all 4 required OIDC vars (was missing OIDC_REDIRECT_URI).
Fix test assertion to match username->email rename in signInWithCredentials.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 13:51:13 -06:00
Jason Woltje
27c4c8edf3
fix( #411 ): QA-010 — fix minor JSDoc and comment issues across auth files
...
Fix response.ok JSDoc (2xx not 200), remove stale token refresh claim,
remove non-actionable comment, fix CSRF comment placement, add 403 mapping rationale.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 13:50:04 -06:00
Jason Woltje
08e32d42a3
fix( #411 ): QA-008 — derive KNOWN_CODES from ERROR_MESSAGES keys
...
Eliminates manual duplication of AuthErrorCode values in KNOWN_CODES
by deriving from Object.keys(ERROR_MESSAGES).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 13:40:48 -06:00
Jason Woltje
752e839054
fix( #411 ): QA-005 — production logging, error classification, session-expired state
...
logAuthError now always logs (not dev-only). Replaced isBackendError with
parseAuthError-based classification. signOut uses proper error type.
Session expiry sets explicit session_expired state. Login page logs in prod.
Fixed pre-existing lint violations in auth package (campsite rule).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 13:37:49 -06:00
Jason Woltje
110e181272
test( #411 ): add missing test coverage — getAccessToken, isAdmin, null cases, getClientIp
...
- Add getAccessToken tests (5): null session, valid token, expired token, buffer window, undefined token
- Add isAdmin tests (4): null session, true, false, undefined
- Add getUserById/getUserByEmail null-return tests (2)
- Add getClientIp tests via handleAuth (4): single IP, comma-separated, array, fallback
- Fix pre-existing controller spec failure by adding better-auth vi.mock calls
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 12:37:11 -06:00
Jason Woltje
9696e45265
fix( #411 ): remediate frontend review findings — wire fetchWithRetry, fix error handling
...
- Wire fetchWithRetry into login page config fetch (was dead code)
- Remove duplicate ERROR_CODE_MESSAGES, use parseAuthError from auth-errors.ts
- Fix OAuth sign-in fire-and-forget: add .catch() with PDA error + loading reset
- Fix credential login catch: use parseAuthError for better error messages
- Add user feedback when auth config fetch fails (was silent degradation)
- Fix sign-out failure: use logAuthError and set authError state
- Enable fetchWithRetry production logging for retry visibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-16 12:33:25 -06:00
Jason Woltje
c233d97ba0
feat( #417 ): add fetchWithRetry with exponential backoff for auth
...
Retries network and server errors up to 3 times with exponential
backoff (1s, 2s, 4s). Non-retryable errors fail immediately.
Refs #417
2026-02-16 12:19:46 -06:00
Jason Woltje
f1ee0df933
feat( #417 ): update auth-client.ts error messages to PDA-friendly
...
Uses parseAuthError from auth-errors module for consistent
PDA-friendly error messages in signInWithCredentials.
Refs #417
2026-02-16 12:15:25 -06:00
Jason Woltje
07084208a7
feat( #417 ): add session expiry detection to AuthProvider
...
Adds sessionExpiring and sessionMinutesRemaining to auth context.
Checks session expiry every 60s, warns when within 5 minutes.
Refs #417
2026-02-16 12:12:46 -06:00
Jason Woltje
f500300b1f
feat( #417 ): create auth-errors.ts with PDA error parsing and mapping
...
Adds AuthErrorCode type, ParsedAuthError interface, parseAuthError() classifier,
and getErrorMessage() helper. All messages use PDA-friendly language.
Refs #417
2026-02-16 12:02:57 -06:00