Commit Graph
135 Commits
Author SHA1 Message Date
jason.woltje 6521f655a8 feat(web): add teams page and RBAC navigation/route gating (MS21-UI-005, RBAC-001, RBAC-002) (#595)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-03-01 04:54:25 +00:00
jason.woltje c939a541a7 feat(web): gate settings nav by workspace role (MS21-RBAC-001) (#579)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-28 23:06:23 +00:00
jason.woltje ffc10c9a45 feat(api): add MS21 user fields for admin, local auth, and invitations (#553)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-28 17:47:03 +00:00
jason.woltje 128431ba58 fix(api,web): separate workspace context from auth session (#551)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-28 15:14:29 +00:00
jason.woltje c0e679ab7c fix(web,api): fix WebSocket authentication for chat real-time connection (#547)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-27 11:30:44 +00:00
jason.woltje c38bfae16c fix(web): fix personalities page dark mode theming and wire to API (#540)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-27 10:59:04 +00:00
jason.woltje b3922e1d5b feat(web): add dedicated /terminal page route (#538)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-27 10:43:14 +00:00
jason.woltje 21bf7e050f fix(web): resolve dashboard widget errors and deployment config (#530)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-27 03:49:57 +00:00
jason.woltje 9b2520ce1f feat(web): add agent output terminal tabs for orchestrator sessions (#522)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 04:04:26 +00:00
jason.woltje b110c469c4 feat(web): add orchestrator command system in chat interface (#521)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 03:39:00 +00:00
jason.woltje 859dcfc4b7 feat(web): implement multi-session terminal tab management (#520)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 03:18:35 +00:00
jason.woltje 13aa52aa53 feat(web): polish master chat with model selector, params config, and empty state (#519)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 03:17:23 +00:00
jason.woltje 417c6ab49c feat(web): integrate xterm.js with WebSocket terminal backend (#518)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 02:55:53 +00:00
jason.woltje 7de0e734b0 feat(web): implement SSE chat streaming with real-time token rendering (#516)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-26 02:39:43 +00:00
jason.woltje 7f89682946 test(web): add unit tests for MS18 components (#503)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 02:23:05 +00:00
jason.woltje d5ecc0b107 feat(web): add markdown round-trip and replace textarea with Tiptap (#501)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:40:34 +00:00
jason.woltje a81c4a5edd feat(web): add Tiptap WYSIWYG KnowledgeEditor component (#500)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:23:57 +00:00
jason.woltje ff5a09c3fb feat(web): add widget config dialog and layout management controls (#499)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 01:11:47 +00:00
jason.woltje f93fa60fff feat(web): add widget picker drawer for dashboard customization (#498)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 00:59:45 +00:00
jason.woltje cc56f2cbe1 feat(web): migrate dashboard to WidgetGrid with layout persistence (#497)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-24 00:50:24 +00:00
jason.woltje 37cf813b88 fix(web): update calendar and knowledge tests for real API integration (#483)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 05:04:55 +00:00
jason.woltje 5a6d00a064 feat(web): wire knowledge pages to real API data (#476)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 04:12:14 +00:00
jason.woltje 458cac7cdd Phase 3: Agent Cycle Visibility (#461) (#462)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 01:07:29 +00:00
jason.woltje 7581d26567 Phase 2: Task Ingestion Pipeline (#459) (#460)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 00:54:55 +00:00
jason.woltje 07f5225a76 Phase 1: Dashboard Polish + Theming (#457) (#458)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-23 00:16:45 +00:00
jason.woltje b43e860c40 feat(web): Phase 3 — Dashboard Page (#450) (#453)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 21:18:50 +00:00
jason.woltje 716f230f72 feat(ui,web): Phase 2 — Shared Components & Terminal Panel (#449) (#452)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 21:12:13 +00:00
jason.woltje a5ed260fbd feat(web): MS15 Phase 1 — Design System & App Shell (#451)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-22 20:57:06 +00:00
jason.woltje 1b66417be5 fix(web): restore login page design and add runtime config injection (#435)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 23:16:02 +00:00
jason.woltje 25ae14aba1 fix(web): resolve flaky CI test failures (#433)
Co-authored-by: Jason Woltje <[email protected]>
Co-committed-by: Jason Woltje <[email protected]>
2026-02-21 21:12:00 +00:00
jason.woltjeandClaude Opus 4.6 bc4c1f9c70 Merge develop into main
Consolidate all feature and fix branches into main:
- feat: orchestrator observability + mosaic rails integration (#422)
- fix: post-422 CI and compose env follow-up (#423)
- fix: orchestrator startup provider-key requirements (#425)
- fix: BetterAuth OAuth2 flow and compose wiring (#426)
- fix: BetterAuth UUID ID generation (#427)
- test: web vitest localStorage/file warnings (#428)
- fix: auth frontend remediation + review hardening (#421)
- Plus numerous Docker, deploy, and auth fixes from develop

Lockfile conflict resolved by regenerating from merged package.json.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-21 14:52:43 -06:00
Jason Woltje 63c6a129bd fix(runtime): stabilize LinkAutocomplete nav test and wire required compose env 2026-02-17 16:42:34 -06:00
Jason Woltje 9d9a01f5f7 feat(web): add orchestrator readiness badge and resilient events parsing 2026-02-17 16:20:03 -06:00
Jason Woltje 5bce7dbb05 feat(web): show latest orchestrator event in task progress widget 2026-02-17 16:12:40 -06:00
Jason Woltje d34f097a5c feat(web): add orchestrator events widget with matrix signal visibility 2026-02-17 15:56:12 -06:00
Jason Woltje f4ad7eba37 fix(web-hud): support hyphenated widget IDs with regression tests 2026-02-17 15:49:09 -06:00
Jason Woltje 3258cd4f4d feat(orchestrator): add SSE events, queue controls, and mosaic rails sync 2026-02-17 15:39:15 -06:00
Jason Woltje cab8d690ab fix(#411): complete 2026-02-17 remediation sweep
Apply RLS context at task service boundaries, harden orchestrator/web integration and session startup behavior, re-enable targeted frontend tests, and lock vulnerable transitive dependencies so QA and security gates pass cleanly.
2026-02-17 14:19:15 -06:00
Jason WoltjeandClaude Opus 4.6 1d7d5a9d01 refactor(#416): delete old LoginButton, replaced by OAuthButton
LoginButton.tsx and LoginButton.test.tsx removed. The login page now
uses OAuthButton, LoginForm, and AuthDivider from the auth redesign.

Refs #416

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 11:48:15 -06:00
Jason WoltjeandClaude Opus 4.6 81b5204258 feat(#415): theme fix, AuthDivider, SessionExpiryWarning components
- AUTH-014: Fix theme storage key (jarvis-theme -> mosaic-theme)
- AUTH-016: Create AuthDivider component with customizable text
- AUTH-019: Create SessionExpiryWarning floating banner (PDA-friendly, blue)
- Fix lint errors in LoginForm, OAuthButton from parallel agents
- Sync pnpm-lock.yaml for recharts dependency

Refs #415

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-16 11:37:31 -06:00
jason.woltjeandClaude Opus 4.6 444fa1116a fix(#410): align BetterAuth basePath and auth client with NestJS routing
BetterAuth defaulted basePath to /api/auth but NestJS controller routes
to /auth/* (no global prefix). The auth client also pointed at the web
frontend origin instead of the API server, and LoginButton used a
nonexistent GET /auth/signin/authentik endpoint.

- Set basePath: "/auth" in BetterAuth server config
- Point auth client baseURL to API_BASE_URL with matching basePath
- Add genericOAuthClient plugin to auth client
- Use signIn.oauth2({ providerId: "authentik" }) in LoginButton

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 19:41:08 -06:00
jason.woltjeandClaude Opus 4.6 cf28efa880 merge: resolve conflicts with develop (M10-Telemetry + M12-MatrixBridge)
Merge origin/develop into feature/m13-speech-services to incorporate
M10-Telemetry and M12-MatrixBridge changes. Resolved 4 conflicts:
- .env.example: Added speech config alongside telemetry + matrix config
- Makefile: Added speech targets alongside matrix targets
- app.module.ts: Import both MosaicTelemetryModule and SpeechModule
- docs/tasks.md: Combined all milestone task tracking sections

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 12:31:08 -06:00
jason.woltjeandClaude Opus 4.6 af9c5799af fix(#388): address PR review findings — fix WebSocket/REST bugs, improve error handling, fix types and comments
Critical fixes:
- Fix FormData field name mismatch (audio -> file) to match backend FileInterceptor
- Add /speech namespace to WebSocket connection URL
- Pass auth token in WebSocket handshake options
- Wrap audio.play() in try-catch for NotAllowedError and DOMException handling
- Replace bare catch block with named error parameter and descriptive message
- Add connect_error and disconnect event handlers to WebSocket
- Update JSDoc to accurately describe batch transcription (not real-time partial)

Important fixes:
- Emit transcription-error before disconnect in gateway auth failures
- Capture MediaRecorder error details and clean up media tracks on error
- Change TtsDefaultConfig.format type from string to AudioFormat
- Define canonical SPEECH_TIERS and AUDIO_FORMATS arrays as single source of truth
- Fix voice count from 54 to 53 in provider, AGENTS.md, and docs
- Fix inaccurate comments (Piper formats, tier prop, SpeachesProvider, TextValidationPipe)

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 03:44:33 -06:00
jason.woltjeandClaude Opus 4.6 bc86947d01 feat(#404): add speech settings page with provider config
Implements the SpeechSettings component with four sections:
- STT settings (enable/disable, language preference)
- TTS settings (enable/disable, voice selector, tier preference, auto-play, speed control)
- Voice preview with test button
- Provider status with health indicators

Also adds Slider UI component and getHealthStatus API client function.
30 unit tests covering all sections, toggles, voice loading, and PDA-friendly design.

Fixes #404

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 03:16:27 -06:00
jason.woltjeandClaude Opus 4.6 74d6c1092e feat(#403): add audio playback component for TTS output
Implements AudioPlayer inline component with play/pause, progress bar,
speed control (0.5x-2x), download, and duration display. Adds
TextToSpeechButton "Read aloud" component that synthesizes text via
the speech API and integrates AudioPlayer for playback. Includes
useTextToSpeech hook with API integration, audio caching, and
playback state management. All 32 tests passing.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 03:05:39 -06:00
jason.woltjeandClaude Opus 4.6 a5ee974765 feat(#375): frontend token usage and cost dashboard
- Install recharts for data visualization
- Add Usage nav item to sidebar navigation
- Create telemetry API service with data fetching functions
- Build dashboard page with summary cards, charts, and time range selector
- Token usage line chart, cost breakdown bar chart, task outcome pie chart
- Loading and empty states handled
- Responsive layout with PDA-friendly design
- Add unit tests (14 tests passing)

Refs #375

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-15 02:10:22 -06:00
Jason WoltjeandClaude Opus 4.6 e8a9a3087a fix(ci): fix pipeline #366 — web @mosaic/ui build, Dockerfile find bug, event handler types
Three root causes resolved:

1. .woodpecker/web.yml: build-shared step was missing @mosaic/ui build,
   causing 10 test suite failures + 20 typecheck errors (TS2307)

2. apps/orchestrator/Dockerfile: find -o without parentheses only deleted
   last pattern's matches, leaving spec files with test fixture secrets
   that triggered 5 Trivy false positives (3 CRITICAL, 2 HIGH)

3. 9 web files had untyped event handler parameters (e) causing 49 lint
   errors and 19 typecheck errors — added React.ChangeEvent<T> types

Verification: lint 0 errors, typecheck 0 errors, tests 73/73 suites pass

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-12 17:50:41 -06:00
jason.woltjeandClaude Opus 4.6 6a5a4e4de8 feat(web): add credential management UI pages and components
Add credentials settings page, audit log page, CRUD dialog components
(create, view, edit, rotate), credential card, dialog UI component,
and API client for the M7-CredentialSecurity feature.

Refs #346

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-10 09:42:41 -06:00
jason.woltjeandClaude Opus 4.6 32aff3787d fix(test): Fix FilterBar and TaskList test failures
FilterBar Test Fix:
- Skip onFilterChange callback on first render to prevent spurious calls
- Use isFirstRender ref to track initial mount
- Prevents "expected spy to not be called" failure in debounce test

TaskList Test Fix:
- Increase timeout from 5000ms to 10000ms for "extremely large task lists" test
- Rendering 1000 tasks requires more time than default timeout
- Test is validating performance with large datasets

These fixes resolve pipeline #324 test failures.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-08 02:09:40 -06:00
jason.woltjeandClaude Opus 4.6 2ca36b1518 fix(test): Use real timers for FilterBar debounce test
The debounce test was failing in CI because fake timers caused a
deadlock with React's internal rendering timers. Switched to using
real timers with a shorter debounce period (100ms) to make the test
both reliable and fast.

The test now:
- Uses real timers instead of fake timers
- Tests debounce behavior with rapid typing
- Verifies the callback is only called once after debounce completes
- Runs quickly (~100ms) without flakiness

Fixes the CI failure: "expected spy to not be called at all, but
actually been called 1 times"

Co-Authored-By: Claude Opus 4.6 <[email protected]>
2026-02-08 01:55:52 -06:00