turnstone/web/src
pyr0ball 313b25e0d0 feat(alerts): security alerts tab — full scorer integration
- Fix loadScorerStatus: was spreading data.state + data.config (both
  undefined); API returns flat object; now uses data directly
- Fix v-for to use filteredDetections (was using raw detections array,
  breaking the Unacknowledged tab filter)
- Fix double-prefix URL bug: BASE already contains /turnstone, so
  fetches to ${BASE}/turnstone/api/... doubled the prefix → returned
  SPA HTML → silent JSON parse failure. Fixed all fetch URLs to use
  ${BASE}/api/... in SecurityAlertsView and DashboardView
- Add CybersecStatus interface to replace Record<string, unknown>
- Add scorer field to Detection interface; show 'cybersec' badge in
  label cell when scorer !== 'anomaly'
- Add cybersecStatus.running to cybersec badge (pulse animation)
- Add ANOMALY / CYBERSEC stats rows side-by-side
- Add 'Run cybersec' button with cybersecTriggerLoading state and
  runCybersec() function posting to /api/cybersec/run
- Rename 'Run scorer' → 'Run anomaly' for clarity

Closes: #11
2026-06-10 14:32:43 -07:00
..
components feat: bundle PII sanitization, onboarding wizard, NL source addition (#51, #52, #53) 2026-05-29 14:14:28 -07:00
router feat: security alerts tab — UI view for anomaly detections (#11) 2026-06-10 00:28:15 -07:00
stores feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00
style fix: reset browser UA button chrome for dark mode 2026-06-05 09:55:08 -07:00
views feat(alerts): security alerts tab — full scorer integration 2026-06-10 14:32:43 -07:00
App.vue feat: security alerts tab — UI view for anomaly detections (#11) 2026-06-10 00:28:15 -07:00
main.ts feat: dark/light theme — CSS variables, OS preference, toggle button 2026-05-09 16:20:07 -07:00
vite-env.d.ts feat: Vue 3 frontend and FastAPI REST layer 2026-05-08 16:27:59 -07:00