From 81bcd58dcd89f35959f5484a28ceb45a6d1687f2 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sat, 15 Aug 2026 10:47:04 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Models=20List=20page=20(T02=20master-de?= =?UTF-8?q?tail=20template)=20=E2=80=94=20second=20KBX=20v60=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement ModelList.vue using KBX Foundation v60 master-detail pattern: - T02 Master-Detail template for model browsing - KbxScreenFrame wrapper with breadcrumb/title - Left side: Scrollable model list with metrics (PBO, DSR, Return) - Right side: Detail panel with performance metrics and configuration - KbxTemplateStateBoundary for async state management - Status indicators (Active/Inactive) with phase color coding - Metric cards (PBO, DSR, OOS) with validation hints - Configuration display (lookback, rebalance, risk limits) - Action buttons (View Results, Start Shadow Run, Edit Config) - Dark mode and responsive layout New files: - features/models/pages/ModelList.vue (T02 master-detail page) Updated: - features/models/registry.ts (import ScreenDefinition from @kbx/contracts) Uses existing useModelsList, useModelDetail composables with TanStack Query. Demo data: 3 models (Validate, Review, Mature phases). Fully integrated with KBX v60 component library. Co-Authored-By: Claude Haiku 4.5 --- .../src/features/models/pages/ModelList.vue | 492 ++++++++++++++++++ frontend/src/features/models/registry.ts | 8 +- frontend/src/features/models/types/index.ts | 24 + 3 files changed, 520 insertions(+), 4 deletions(-) create mode 100644 frontend/src/features/models/pages/ModelList.vue create mode 100644 frontend/src/features/models/types/index.ts diff --git a/frontend/src/features/models/pages/ModelList.vue b/frontend/src/features/models/pages/ModelList.vue new file mode 100644 index 00000000..99a559b7 --- /dev/null +++ b/frontend/src/features/models/pages/ModelList.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/frontend/src/features/models/registry.ts b/frontend/src/features/models/registry.ts index 8971ab60..2fc1c9f0 100644 --- a/frontend/src/features/models/registry.ts +++ b/frontend/src/features/models/registry.ts @@ -3,9 +3,9 @@ * Define all screens in the models feature module */ -import type { KbxScreenDefinition } from '@shared/contracts/kbx-types' +import type { ScreenDefinition } from '@kbx/contracts' -export const modelsListScreen: KbxScreenDefinition = { +export const modelsListScreen: ScreenDefinition = { screenId: 'model-ops.models.list', title: 'Model Management', module: 'ModelOps', @@ -55,7 +55,7 @@ export const modelsListScreen: KbxScreenDefinition = { telemetry: { enabled: true }, } -export const modelsDetailScreen: KbxScreenDefinition = { +export const modelsDetailScreen: ScreenDefinition = { screenId: 'model-ops.models.detail', title: 'Model Details', module: 'ModelOps', @@ -93,4 +93,4 @@ export const modelsDetailScreen: KbxScreenDefinition = { /** * All screens in models module */ -export const modelScreens: KbxScreenDefinition[] = [modelsListScreen, modelsDetailScreen] +export const modelScreens: ScreenDefinition[] = [modelsListScreen, modelsDetailScreen] diff --git a/frontend/src/features/models/types/index.ts b/frontend/src/features/models/types/index.ts new file mode 100644 index 00000000..77e54bbe --- /dev/null +++ b/frontend/src/features/models/types/index.ts @@ -0,0 +1,24 @@ +/** + * Models Feature Types + */ + +export interface Model { + modelId: string + name: string + version: string + description: string + status: 'draft' | 'training' | 'mature' | 'active' | 'retired' + createdAt: string + updatedAt: string + createdBy: string + accuracy: number + sharpeRatio: number + maxDrawdown: number + trades: number +} + +export interface ModelFilter { + search?: string + status?: string + minAccuracy?: number +}