Add OIDC logout, fix OpenAPI schema types, expose end_session_endpoint
All checks were successful
CI / build (push) Successful in 1m8s
CI / docker (push) Successful in 51s
CI / deploy (push) Successful in 29s

Backend:
- Expose end_session_endpoint from OIDC provider metadata in /auth/oidc/config
- Add getEndSessionEndpoint() to OidcTokenExchanger

Frontend:
- On OIDC logout, redirect to provider's end_session_endpoint to clear SSO session
- Strip /api/v1 prefix from OpenAPI paths to match client baseUrl convention
- Add schema-types.ts with convenience type re-exports from generated schema
- Fix all type imports to use schema-types instead of raw generated schema
- Fix optional field access (processors, children, duration) with proper typing
- Fix AgentInstance.state → status field name

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-03-14 14:43:18 +01:00
parent 0d82304cf0
commit 50bb22d6f6
15 changed files with 1755 additions and 53 deletions

View File

@@ -1,5 +1,5 @@
import { useProcessorSnapshot } from '../../api/queries/executions';
import type { ExecutionSummary } from '../../api/schema';
import type { ExecutionSummary } from '../../api/schema-types';
import styles from './ExchangeDetail.module.css';
interface ExchangeDetailProps {

View File

@@ -1,5 +1,5 @@
import { useExecutionDetail } from '../../api/queries/executions';
import type { ProcessorNode as ProcessorNodeType } from '../../api/schema';
import type { ProcessorNode as ProcessorNodeType } from '../../api/schema-types';
import styles from './ProcessorTree.module.css';
const ICON_MAP: Record<string, { label: string; className: string }> = {
@@ -35,7 +35,7 @@ export function ProcessorTree({ executionId }: { executionId: string }) {
return (
<div className={styles.tree}>
<h4 className={styles.title}>Processor Execution Tree</h4>
{data.processors.map((proc, i) => (
{(data.processors as ProcessorNodeType[])?.map((proc, i) => (
<ProcessorNodeView key={proc.processorId ?? i} node={proc} />
))}
</div>
@@ -57,7 +57,7 @@ function ProcessorNodeView({ node }: { node: ProcessorNodeType }) {
<span className={styles.procDuration}>{node.durationMs}ms</span>
</div>
</div>
{node.children.length > 0 && (
{node.children && node.children.length > 0 && (
<div className={styles.nested}>
{node.children.map((child, i) => (
<ProcessorNodeView key={child.processorId ?? i} node={child} />

View File

@@ -1,5 +1,5 @@
import { useState, useMemo } from 'react';
import type { ExecutionSummary } from '../../api/schema';
import type { ExecutionSummary } from '../../api/schema-types';
import { StatusPill } from '../../components/shared/StatusPill';
import { DurationBar } from '../../components/shared/DurationBar';
import { AppBadge } from '../../components/shared/AppBadge';

View File

@@ -7,7 +7,7 @@ import { ScopeTabs } from '../../components/command-palette/ScopeTabs';
import { ResultsList } from '../../components/command-palette/ResultsList';
import { PaletteFooter } from '../../components/command-palette/PaletteFooter';
import { FilterChip } from '../../components/shared/FilterChip';
import type { ExecutionSummary, AgentInstance } from '../../api/schema';
import type { ExecutionSummary, AgentInstance } from '../../api/schema-types';
import styles from './SearchFilters.module.css';
export function SearchFilters() {

View File

@@ -1,5 +1,5 @@
import { create } from 'zustand';
import type { SearchRequest } from '../../api/schema';
import type { SearchRequest } from '../../api/schema-types';
function todayMidnight(): string {
const d = new Date();
@@ -94,8 +94,8 @@ export const useExecutionSearch = create<ExecutionSearchState>((set, get) => ({
status: statusStr ?? undefined,
timeFrom: s.timeFrom ? new Date(s.timeFrom).toISOString() : undefined,
timeTo: s.timeTo ? new Date(s.timeTo).toISOString() : undefined,
durationMin: s.durationMin,
durationMax: s.durationMax,
durationMin: s.durationMin ?? undefined,
durationMax: s.durationMax ?? undefined,
text: s.text || undefined,
routeId: s.routeId || undefined,
agentId: s.agentId || undefined,