spine-framework 0.3.145 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5051 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
// CIL[BEGIN
|
|
2
|
-
// CIL[DOC-MACRO purpose="
|
|
3
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
4
|
-
// CIL[DOC-CONTEXT module="
|
|
5
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="
|
|
6
|
-
// CIL[DOC-MICRO logic_summary="Imports React hooks, router,
|
|
7
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin CIL project dashboard page root module: imports dependencies and composes the CILDashboardPage component."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Bootstraps the admin CIL dashboard page and wires UI primitives, icons, and the local PageInstructions component."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="default export CILDashboardPage" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React hooks, router, API, UI components, icons, and PageInstructions." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="
|
|
10
|
-
|
|
11
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
12
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
13
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
14
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
15
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers maintaining the CIL admin UI"]
|
|
10
|
+
|
|
16
11
|
import { useEffect, useState, useCallback } from 'react'
|
|
17
12
|
import { useParams } from 'react-router-dom'
|
|
18
13
|
import { apiFetch } from '@core/lib/api'
|
|
@@ -41,24 +36,23 @@ import {
|
|
|
41
36
|
Settings2,
|
|
42
37
|
} from 'lucide-react'
|
|
43
38
|
|
|
44
|
-
|
|
45
|
-
|
|
46
39
|
import { PageInstructions } from '../../../components/admin/PageInstructions'
|
|
47
|
-
// CIL[
|
|
48
|
-
// CIL[
|
|
49
|
-
// CIL[DOC-
|
|
50
|
-
// CIL[DOC-
|
|
51
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
52
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ProjectStats type definition" errors="none" side_effects="none"]
|
|
53
|
-
// CIL[DOC-MICRO logic_summary="Declares file count, chunk count, proposal counts, ingestion cost, and last ingestion timestamp" notable_decisions="[]"]
|
|
54
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
55
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
56
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
57
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
58
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
59
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
40
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin CIL project dashboard page root module: imports dependencies and composes the CILDashboardPage component.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
41
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
42
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
43
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
60
44
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
61
45
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
46
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:module_header:module_header"]
|
|
47
|
+
|
|
48
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:projectstats:interface" type="interface" identity="ProjectStats" parent="none"]
|
|
49
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL project ingestion statistics."]
|
|
50
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provides a typed contract for project-level stats returned from the ingestion pipeline."]
|
|
51
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
52
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface ProjectStats" errors="none" side_effects="none"]
|
|
53
|
+
// CIL[DOC-MICRO logic_summary="Fields: file_count, chunk_count, proposal_count, approved_count, pending_review_count, total_ingestion_cost_usd, last_ingested_at." notable_decisions="[]"]
|
|
54
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
55
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
62
56
|
interface ProjectStats {
|
|
63
57
|
file_count: number
|
|
64
58
|
chunk_count: number
|
|
@@ -68,44 +62,44 @@ interface ProjectStats {
|
|
|
68
62
|
total_ingestion_cost_usd: number
|
|
69
63
|
last_ingested_at: string | null
|
|
70
64
|
}
|
|
71
|
-
|
|
72
|
-
// CIL[
|
|
73
|
-
// CIL[
|
|
74
|
-
// CIL[DOC-
|
|
75
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type contract for chunk embedding coverage"]
|
|
76
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
77
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="EmbedStatus type definition" errors="none" side_effects="none"]
|
|
78
|
-
// CIL[DOC-MICRO logic_summary="Declares total, embedded, unembedded counts and coverage percentage" notable_decisions="[]"]
|
|
79
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
80
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
81
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
82
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
83
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
84
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
65
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL project ingestion statistics.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
66
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
67
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
68
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
85
69
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
86
70
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
71
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:projectstats:interface"]
|
|
72
|
+
|
|
73
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedstatus:interface" type="interface" identity="EmbedStatus" parent="none"]
|
|
74
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL embedding coverage status."]
|
|
75
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the embedding completeness counts for a project."]
|
|
76
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
77
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface EmbedStatus" errors="none" side_effects="none"]
|
|
78
|
+
// CIL[DOC-MICRO logic_summary="Fields: total_chunks, embedded_chunks, coverage_pct, unembedded_chunks." notable_decisions="[]"]
|
|
79
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
80
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
87
81
|
interface EmbedStatus {
|
|
88
82
|
total_chunks: number
|
|
89
83
|
embedded_chunks: number
|
|
90
84
|
coverage_pct: number
|
|
91
85
|
unembedded_chunks: number
|
|
92
86
|
}
|
|
93
|
-
|
|
94
|
-
// CIL[
|
|
95
|
-
// CIL[
|
|
96
|
-
// CIL[DOC-
|
|
97
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type contract for documentation coverage"]
|
|
98
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
99
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="DocStatus type definition" errors="none" side_effects="none"]
|
|
100
|
-
// CIL[DOC-MICRO logic_summary="Declares total, documented, undocumented, AI-generated, human-verified counts and coverage percentage" notable_decisions="[]"]
|
|
101
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
102
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
103
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
104
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
105
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
106
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL embedding coverage status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
107
91
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
108
92
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:embedstatus:interface"]
|
|
94
|
+
|
|
95
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docstatus:interface" type="interface" identity="DocStatus" parent="none"]
|
|
96
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL documentation coverage status."]
|
|
97
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the documentation coverage counts for a project."]
|
|
98
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
99
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface DocStatus" errors="none" side_effects="none"]
|
|
100
|
+
// CIL[DOC-MICRO logic_summary="Fields: total_chunks, documented_count, undocumented_count, ai_generated_count, human_verified_count, coverage_pct." notable_decisions="[]"]
|
|
101
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
102
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
109
103
|
interface DocStatus {
|
|
110
104
|
total_chunks: number
|
|
111
105
|
documented_count: number
|
|
@@ -114,22 +108,22 @@ interface DocStatus {
|
|
|
114
108
|
human_verified_count: number
|
|
115
109
|
coverage_pct: number
|
|
116
110
|
}
|
|
117
|
-
|
|
118
|
-
// CIL[
|
|
119
|
-
// CIL[
|
|
120
|
-
// CIL[DOC-
|
|
121
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type contract for call graph link counts"]
|
|
122
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
123
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="CallmapStatus type definition" errors="none" side_effects="none"]
|
|
124
|
-
// CIL[DOC-MICRO logic_summary="Declares import, call, export, and tested-by link counts" notable_decisions="[]"]
|
|
125
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
126
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
127
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
128
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
129
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
130
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
111
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL documentation coverage status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
112
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
113
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
114
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
131
115
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
132
116
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
117
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:docstatus:interface"]
|
|
118
|
+
|
|
119
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmapstatus:interface" type="interface" identity="CallmapStatus" parent="none"]
|
|
120
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL call-map link counts."]
|
|
121
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the call-map and import link counts for a project."]
|
|
122
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
123
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface CallmapStatus" errors="none" side_effects="none"]
|
|
124
|
+
// CIL[DOC-MICRO logic_summary="Fields: import_links, call_links, export_links, total_links, tested_by_links." notable_decisions="[]"]
|
|
125
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
126
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
133
127
|
interface CallmapStatus {
|
|
134
128
|
import_links: number
|
|
135
129
|
call_links: number
|
|
@@ -137,42 +131,64 @@ interface CallmapStatus {
|
|
|
137
131
|
total_links: number
|
|
138
132
|
tested_by_links?: number
|
|
139
133
|
}
|
|
140
|
-
|
|
141
|
-
// CIL[
|
|
142
|
-
// CIL[
|
|
143
|
-
// CIL[DOC-
|
|
144
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type contract for config extraction status"]
|
|
145
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[]"]
|
|
146
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ConfigStatus type definition" errors="none" side_effects="none"]
|
|
147
|
-
// CIL[DOC-MICRO logic_summary="Declares config item count and configures link count" notable_decisions="[]"]
|
|
148
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
149
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
150
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
151
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
152
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
153
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
134
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL call-map link counts.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
135
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
136
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
137
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
154
138
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
155
139
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
140
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:callmapstatus:interface"]
|
|
141
|
+
|
|
142
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:configstatus:interface" type="interface" identity="ConfigStatus" parent="none"]
|
|
143
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL configuration graph status."]
|
|
144
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the configuration graph item counts for a project."]
|
|
145
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
146
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface ConfigStatus" errors="none" side_effects="none"]
|
|
147
|
+
// CIL[DOC-MICRO logic_summary="Fields: config_items, configures_links." notable_decisions="[]"]
|
|
148
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
149
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
156
150
|
interface ConfigStatus {
|
|
157
151
|
config_items: number
|
|
158
152
|
configures_links: number
|
|
159
153
|
}
|
|
160
|
-
|
|
161
|
-
// CIL[
|
|
162
|
-
// CIL[
|
|
163
|
-
// CIL[DOC-
|
|
164
|
-
// CIL[DOC-
|
|
165
|
-
// CIL[DOC-
|
|
166
|
-
// CIL[
|
|
167
|
-
|
|
168
|
-
// CIL[
|
|
154
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL configuration graph status.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
155
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
156
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
157
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
158
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
159
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
160
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:configstatus:interface"]
|
|
161
|
+
|
|
162
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pipelineprogress:interface" type="interface" identity="PipelineProgress" parent="none"]
|
|
163
|
+
// CIL[DOC-MACRO purpose="Defines the shape of CIL pipeline progress aggregation."]
|
|
164
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the pipeline progress counts and per-file status for a project."]
|
|
165
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
166
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface PipelineProgress" errors="none" side_effects="none"]
|
|
167
|
+
// CIL[DOC-MICRO logic_summary="Fields: total_selected, total_chunks, by_status, file_statuses." notable_decisions="[]"]
|
|
168
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
169
169
|
// CIL[DOC-STABILITY stability="stable"]
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
interface PipelineProgress {
|
|
171
|
+
total_selected: number
|
|
172
|
+
total_chunks: number
|
|
173
|
+
by_status: Record<string, number>
|
|
174
|
+
file_statuses: Record<string, string>
|
|
175
|
+
}
|
|
176
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shape of CIL pipeline progress aggregation.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
177
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
178
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
179
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
174
180
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
175
181
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
182
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:pipelineprogress:interface"]
|
|
183
|
+
|
|
184
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:dashboarddata:interface" type="interface" identity="DashboardData" parent="none"]
|
|
185
|
+
// CIL[DOC-MACRO purpose="Defines the aggregate dashboard data type used by CILDashboardPage."]
|
|
186
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Types the unified dashboard data object fetched from multiple endpoints."]
|
|
187
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="type" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
188
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface DashboardData" errors="none" side_effects="none"]
|
|
189
|
+
// CIL[DOC-MICRO logic_summary="Fields: project, embed, doc, callmap, config." notable_decisions="[]"]
|
|
190
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
191
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
176
192
|
interface DashboardData {
|
|
177
193
|
project: { id: string; title: string; data: ProjectStats } | null
|
|
178
194
|
embed: EmbedStatus | null
|
|
@@ -180,24 +196,22 @@ interface DashboardData {
|
|
|
180
196
|
callmap: CallmapStatus | null
|
|
181
197
|
config: ConfigStatus | null
|
|
182
198
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
// CIL[
|
|
187
|
-
// CIL[BEGIN chunk_id="cildashboardpage_passcard_1784193942" type="function" identity="PassCard" parent="none"]
|
|
188
|
-
// CIL[DOC-MACRO purpose="Render a pipeline pass card with status, label, description, and metric"]
|
|
189
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Display a single pipeline step's completion status and metric as a clickable card"]
|
|
190
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[]"]
|
|
191
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
|
|
192
|
-
// CIL[DOC-MICRO logic_summary="Selects a status color and icon config and renders a compact status card with an optional link" notable_decisions="[]"]
|
|
193
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
194
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
195
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
196
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
197
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
198
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
199
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the aggregate dashboard data type used by CILDashboardPage.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
200
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
201
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
202
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
199
203
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
200
204
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
205
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:dashboarddata:interface"]
|
|
206
|
+
|
|
207
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:passcard:function" type="function" identity="PassCard" parent="none"]
|
|
208
|
+
// CIL[DOC-MACRO purpose="Renders a single pipeline pass card with status, icon, metric, and optional link."]
|
|
209
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Visualizes the state of one CIL pipeline stage."]
|
|
210
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
211
|
+
// CIL[DOC-CONTRACT inputs="PassCard props: number, label, icon, description, status, metric, href?, skill?" outputs="JSX card element" errors="none" side_effects="none"]
|
|
212
|
+
// CIL[DOC-MICRO logic_summary="Selects status color, background, and icon from statusConfig and renders a compact linked card." notable_decisions="[]"]
|
|
213
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
214
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
201
215
|
function PassCard({
|
|
202
216
|
number,
|
|
203
217
|
label,
|
|
@@ -206,6 +220,7 @@ function PassCard({
|
|
|
206
220
|
status,
|
|
207
221
|
metric,
|
|
208
222
|
href,
|
|
223
|
+
skill,
|
|
209
224
|
}: {
|
|
210
225
|
number: string
|
|
211
226
|
label: string
|
|
@@ -214,6 +229,7 @@ function PassCard({
|
|
|
214
229
|
status: 'complete' | 'partial' | 'empty' | 'unknown'
|
|
215
230
|
metric: string
|
|
216
231
|
href?: string
|
|
232
|
+
skill?: string
|
|
217
233
|
}) {
|
|
218
234
|
const statusConfig = {
|
|
219
235
|
complete: { color: 'text-green-600', bg: 'bg-green-50 border-green-200', dot: 'bg-green-500', icon: CheckCircle2 },
|
|
@@ -233,6 +249,7 @@ function PassCard({
|
|
|
233
249
|
<div className="flex items-center gap-1.5">
|
|
234
250
|
<span className="text-xs font-bold text-muted-foreground">Pass {number}</span>
|
|
235
251
|
<StatusIcon className={`h-3 w-3 ${statusConfig.color}`} />
|
|
252
|
+
{skill && <span className="text-[10px] font-mono text-muted-foreground/80 bg-slate-100 dark:bg-slate-800 px-1.5 py-0.5 rounded">{skill}</span>}
|
|
236
253
|
</div>
|
|
237
254
|
<div className="text-sm font-medium truncate">{label}</div>
|
|
238
255
|
<div className="text-xs text-muted-foreground">{description}</div>
|
|
@@ -246,24 +263,22 @@ function PassCard({
|
|
|
246
263
|
</div>
|
|
247
264
|
)
|
|
248
265
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
// CIL[
|
|
253
|
-
// CIL[BEGIN chunk_id="cildashboardpage_stattile_1784193942" type="function" identity="StatTile" parent="none"]
|
|
254
|
-
// CIL[DOC-MACRO purpose="Render a numeric statistic tile with label and optional subtext"]
|
|
255
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Display a single dashboard metric inside a styled Card"]
|
|
256
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[]"]
|
|
257
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
|
|
258
|
-
// CIL[DOC-MICRO logic_summary="Renders a Card with a large value, label, optional sub, and icon" notable_decisions="[]"]
|
|
259
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
260
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
261
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
262
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
263
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
264
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
266
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a single pipeline pass card with status, icon, metric, and optional link.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
267
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
268
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
269
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
265
270
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
266
271
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
272
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:passcard:function"]
|
|
273
|
+
|
|
274
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stattile:function" type="function" identity="StatTile" parent="none"]
|
|
275
|
+
// CIL[DOC-MACRO purpose="Renders a numeric stat tile with optional sub-label and accent styling."]
|
|
276
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Displays a single dashboard metric."]
|
|
277
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
278
|
+
// CIL[DOC-CONTRACT inputs="StatTile props: label, value, sub?, icon, accent?" outputs="JSX card" errors="none" side_effects="none"]
|
|
279
|
+
// CIL[DOC-MICRO logic_summary="Renders a Card with value, label, optional sub, and an icon." notable_decisions="[]"]
|
|
280
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
281
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
267
282
|
function StatTile({
|
|
268
283
|
label,
|
|
269
284
|
value,
|
|
@@ -292,24 +307,22 @@ function StatTile({
|
|
|
292
307
|
</Card>
|
|
293
308
|
)
|
|
294
309
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
// CIL[
|
|
299
|
-
// CIL[BEGIN chunk_id="cildashboardpage_coveragebar_1784193942" type="function" identity="CoverageBar" parent="none"]
|
|
300
|
-
// CIL[DOC-MACRO purpose="Render a labeled progress bar for coverage metrics"]
|
|
301
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Display a percentage coverage value with a Progress bar"]
|
|
302
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[]"]
|
|
303
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="none" side_effects="none"]
|
|
304
|
-
// CIL[DOC-MICRO logic_summary="Renders a label, percentage, and shadcn Progress component" notable_decisions="[]"]
|
|
305
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
306
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
307
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
308
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
309
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
310
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
310
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a numeric stat tile with optional sub-label and accent styling.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
311
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
312
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
313
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
311
314
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
312
315
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
316
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:stattile:function"]
|
|
317
|
+
|
|
318
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:coveragebar:function" type="function" identity="CoverageBar" parent="none"]
|
|
319
|
+
// CIL[DOC-MACRO purpose="Renders a labeled progress bar showing a percentage."]
|
|
320
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Visualizes embedding or documentation coverage as a progress bar."]
|
|
321
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
322
|
+
// CIL[DOC-CONTRACT inputs="label, pct, color?" outputs="JSX progress bar" errors="none" side_effects="none"]
|
|
323
|
+
// CIL[DOC-MICRO logic_summary="Shows a label, percentage, and Progress component." notable_decisions="[]"]
|
|
324
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
325
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
313
326
|
function CoverageBar({ label, pct, color = 'bg-indigo-500' }: { label: string; pct: number; color?: string }) {
|
|
314
327
|
return (
|
|
315
328
|
<div className="space-y-1">
|
|
@@ -321,24 +334,49 @@ function CoverageBar({ label, pct, color = 'bg-indigo-500' }: { label: string; p
|
|
|
321
334
|
</div>
|
|
322
335
|
)
|
|
323
336
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
// CIL[
|
|
328
|
-
// CIL[
|
|
329
|
-
// CIL[DOC-
|
|
330
|
-
// CIL[
|
|
331
|
-
|
|
332
|
-
// CIL[
|
|
333
|
-
// CIL[DOC-
|
|
334
|
-
// CIL[DOC-
|
|
337
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a labeled progress bar showing a percentage.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
338
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
339
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
340
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
341
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
342
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
343
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:coveragebar:function"]
|
|
344
|
+
|
|
345
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:step_details:constant" type="constant" identity="STEP_DETAILS" parent="none"]
|
|
346
|
+
// CIL[DOC-MACRO purpose="Maps CIL pipeline step slugs to labels, icons, descriptions, and skill tags."]
|
|
347
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provides the metadata that drives the PassCard rendering for each pipeline stage."]
|
|
348
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="data" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
349
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="const STEP_DETAILS" errors="none" side_effects="none"]
|
|
350
|
+
// CIL[DOC-MICRO logic_summary="Record of step slugs to display metadata for the nine CIL pipeline stages." notable_decisions="[]"]
|
|
351
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
335
352
|
// CIL[DOC-STABILITY stability="stable"]
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
353
|
+
const STEP_DETAILS: Record<string, { label: string; icon: React.ElementType; description: string; skill?: string }> = {
|
|
354
|
+
'0-discovered': { label: 'Discover Files', icon: FileCode2, description: 'Walk repo and register source files' },
|
|
355
|
+
'1-selected': { label: 'Select Files', icon: Search, description: 'Files matched by selected paths/globs' },
|
|
356
|
+
'2-chunked': { label: 'Chunk', icon: Layers, description: 'Parse files and write stable-ID markers', skill: 'cil-3' },
|
|
357
|
+
'3-documented': { label: 'Document', icon: Sparkles, description: 'Generate macro / micro / contract fields', skill: 'cil-4' },
|
|
358
|
+
'4-chunk-validated': { label: 'Validate Chunks', icon: CheckCircle2, description: 'Check coverage, overlap, stable IDs, and JSX leakage', skill: 'cil-5' },
|
|
359
|
+
'5-doc-validated': { label: 'Validate Docs', icon: CheckCircle2, description: 'Confirm required CIL[DOC-*] fields are present', skill: 'cil-6' },
|
|
360
|
+
'6-enriched': { label: 'Enrich', icon: Settings2, description: 'Add RAG context, blast radius, and learning notes', skill: 'cil-7' },
|
|
361
|
+
'7-embedded-mapped': { label: 'Embed & Map', icon: Zap, description: 'Generate embeddings and import/call/test edges', skill: 'cil-8' },
|
|
362
|
+
'8-published': { label: 'Publish', icon: CheckCircle2, description: 'Final validation and currentness check' },
|
|
363
|
+
}
|
|
364
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Maps CIL pipeline step slugs to labels, icons, descriptions, and skill tags.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
365
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
366
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
367
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
340
368
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
341
369
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
370
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:step_details:constant"]
|
|
371
|
+
|
|
372
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:driftalertcard:function" type="function" identity="DriftAlertCard" parent="none"]
|
|
373
|
+
// CIL[DOC-MACRO purpose="Renders a card that detects and displays CIL chunk hash drift for a project."]
|
|
374
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetches stored chunks, validates hashes, and surfaces drifted chunks with navigation links."]
|
|
375
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="component" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
376
|
+
// CIL[DOC-CONTRACT inputs="projectId, appPath" outputs="JSX card" errors="API or network errors swallowed" side_effects="none"]
|
|
377
|
+
// CIL[DOC-MICRO logic_summary="Calls admin-data and cil-validate APIs, compares hash status, and lists up to 5 drifted chunks with a count." notable_decisions="[]"]
|
|
378
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
379
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
342
380
|
function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p: string) => string }) {
|
|
343
381
|
const [driftChunks, setDriftChunks] = useState<any[] | null>(null)
|
|
344
382
|
const [checking, setChecking] = useState(false)
|
|
@@ -355,7 +393,6 @@ function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p
|
|
|
355
393
|
|
|
356
394
|
if (!chunks.length) { setDriftChunks([]); return }
|
|
357
395
|
|
|
358
|
-
|
|
359
396
|
const validateRes = await apiFetch('/api/cil-validate?action=validate', {
|
|
360
397
|
method: 'POST',
|
|
361
398
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -422,36 +459,37 @@ function DriftAlertCard({ projectId, appPath }: { projectId: string; appPath: (p
|
|
|
422
459
|
</Card>
|
|
423
460
|
)
|
|
424
461
|
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
// CIL[
|
|
429
|
-
// CIL[BEGIN chunk_id="cildashboardpage_cildashboardpage_1784193942" type="component" identity="CILDashboardPage" parent="none"]
|
|
430
|
-
// CIL[DOC-MACRO purpose="Render the CIL project dashboard page"]
|
|
431
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Fetch project status and display pipeline passes, coverage, stats, graph links, drift alerts, and quick actions"]
|
|
432
|
-
// CIL[DOC-CONTEXT module="cortex:cil-dashboard" layer="presentation" related_files="[]"]
|
|
433
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element" errors="Failed requests are ignored; empty states shown" side_effects="Calls /api/cil-project, /api/cil-embeddings, /api/cil-doc, /api/cil-callmap, and /api/cil-config; updates local state"]
|
|
434
|
-
// CIL[DOC-MICRO logic_summary="Loads project, embedding, documentation, callmap, and config statuses in parallel, then renders stat tiles, coverage bars, pass cards, graph links, drift alerts, and quick action buttons" notable_decisions="[]"]
|
|
435
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
436
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
437
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
438
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
439
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
440
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
462
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a card that detects and displays CIL chunk hash drift for a project.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
463
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
464
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
465
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
441
466
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
442
467
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
468
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:driftalertcard:function"]
|
|
469
|
+
|
|
470
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:cildashboardpage:function" type="function" identity="CILDashboardPage" parent="none"]
|
|
471
|
+
// CIL[DOC-MACRO purpose="Main admin page for reviewing CIL project health, coverage, pipeline status, graph links, and drift."]
|
|
472
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetches and aggregates project stats, coverage, pipeline progress, callmap, and config; renders the dashboard layout."]
|
|
473
|
+
// CIL[DOC-CONTEXT module="admin/cil" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/progress.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/api.ts,.framework/src/pages/admin/cil/CILDashboardPage.tsx"]
|
|
474
|
+
// CIL[DOC-CONTRACT inputs="route param id" outputs="JSX dashboard" errors="API errors fall back to null or empty values" side_effects="loads data on mount and on projectId change"]
|
|
475
|
+
// CIL[DOC-MICRO logic_summary="Fetches six endpoints in parallel, computes stats, renders PassCards for each pipeline step, and embeds DriftAlertCard." notable_decisions="[]"]
|
|
476
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
477
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
443
478
|
export default function CILDashboardPage() {
|
|
444
479
|
const { id: projectId } = useParams<{ id: string }>()
|
|
445
480
|
const appPath = (path: string) => '/spine-framework/admin' + (path.startsWith('/') ? path : '/' + path)
|
|
446
481
|
const [data, setData] = useState<DashboardData>({ project: null, embed: null, doc: null, callmap: null, config: null })
|
|
482
|
+
const [pipelineProgress, setPipelineProgress] = useState<PipelineProgress | null>(null)
|
|
447
483
|
const [loading, setLoading] = useState(true)
|
|
484
|
+
const [discovering, setDiscovering] = useState(false)
|
|
448
485
|
|
|
449
486
|
const load = useCallback(async () => {
|
|
450
487
|
if (!projectId) return
|
|
451
488
|
setLoading(true)
|
|
452
489
|
try {
|
|
453
|
-
const [projectRes, embedRes, docRes, callmapRes, configRes] = await Promise.allSettled([
|
|
490
|
+
const [projectRes, progressRes, embedRes, docRes, callmapRes, configRes] = await Promise.allSettled([
|
|
454
491
|
apiFetch(`/api/cil-project?action=get&id=${projectId}`).then(r => r.json()),
|
|
492
|
+
apiFetch(`/api/cil-project?action=pipeline_progress&id=${projectId}`).then(r => r.json()),
|
|
455
493
|
apiFetch(`/api/cil-embeddings?action=status&project_id=${projectId}`).then(r => r.json()),
|
|
456
494
|
apiFetch(`/api/cil-doc?action=gap_report&project_id=${projectId}`).then(r => r.json()),
|
|
457
495
|
apiFetch(`/api/cil-callmap?action=status&project_id=${projectId}`).then(r => r.json()),
|
|
@@ -465,6 +503,8 @@ export default function CILDashboardPage() {
|
|
|
465
503
|
callmap: callmapRes.status === 'fulfilled' ? (callmapRes.value?.data || callmapRes.value) : null,
|
|
466
504
|
config: configRes.status === 'fulfilled' ? (configRes.value?.data || configRes.value) : null,
|
|
467
505
|
})
|
|
506
|
+
const progressData = progressRes.status === 'fulfilled' ? (progressRes.value?.data || progressRes.value) : null
|
|
507
|
+
setPipelineProgress(progressData?.progress || null)
|
|
468
508
|
} finally {
|
|
469
509
|
setLoading(false)
|
|
470
510
|
}
|
|
@@ -472,6 +512,25 @@ export default function CILDashboardPage() {
|
|
|
472
512
|
|
|
473
513
|
useEffect(() => { load() }, [load])
|
|
474
514
|
|
|
515
|
+
const project = data.project
|
|
516
|
+
|
|
517
|
+
const handleDiscover = useCallback(async () => {
|
|
518
|
+
if (!projectId) return
|
|
519
|
+
setDiscovering(true)
|
|
520
|
+
try {
|
|
521
|
+
await apiFetch('/api/cil-ingest?action=discover', {
|
|
522
|
+
method: 'POST',
|
|
523
|
+
headers: { 'Content-Type': 'application/json' },
|
|
524
|
+
body: JSON.stringify({ project_id: projectId }),
|
|
525
|
+
})
|
|
526
|
+
} finally {
|
|
527
|
+
setDiscovering(false)
|
|
528
|
+
load()
|
|
529
|
+
}
|
|
530
|
+
}, [projectId, load])
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
|
|
475
534
|
if (loading) {
|
|
476
535
|
return (
|
|
477
536
|
<div className="p-6 space-y-4">
|
|
@@ -482,25 +541,29 @@ export default function CILDashboardPage() {
|
|
|
482
541
|
)
|
|
483
542
|
}
|
|
484
543
|
|
|
485
|
-
const project = data.project
|
|
486
544
|
const stats: ProjectStats = project?.data || { file_count: 0, chunk_count: 0, proposal_count: 0, approved_count: 0, pending_review_count: 0, total_ingestion_cost_usd: 0, last_ingested_at: null }
|
|
487
545
|
const embed = data.embed || { total_chunks: 0, embedded_chunks: 0, coverage_pct: 0, unembedded_chunks: 0 }
|
|
488
546
|
const doc = data.doc || { total_chunks: 0, documented_count: 0, undocumented_count: 0, ai_generated_count: 0, human_verified_count: 0, coverage_pct: 0 }
|
|
489
547
|
const callmap = data.callmap || { import_links: 0, call_links: 0, export_links: 0, total_links: 0, tested_by_links: 0 }
|
|
490
548
|
const config = data.config || { config_items: 0, configures_links: 0 }
|
|
491
549
|
|
|
550
|
+
const pp = pipelineProgress || { total_selected: 0, total_chunks: 0, by_status: {}, file_statuses: {} }
|
|
551
|
+
const selectedFiles = pp.total_selected
|
|
552
|
+
const selectedChunks = pp.total_chunks
|
|
553
|
+
const totalTracked = Object.values(pp.by_status).reduce((a, b) => a + (b || 0), 0)
|
|
554
|
+
|
|
555
|
+
const PIPELINE_ORDER = [
|
|
556
|
+
'0-discovered', '1-selected', '2-chunked', '3-documented', '4-chunk-validated',
|
|
557
|
+
'5-doc-validated', '6-enriched', '7-embedded-mapped', '8-published',
|
|
558
|
+
]
|
|
559
|
+
|
|
560
|
+
const embedPct = selectedChunks > 0 ? Math.round((embed.embedded_chunks / selectedChunks) * 100) : 0
|
|
561
|
+
const docPct = selectedChunks > 0 ? Math.round((doc.documented_count / selectedChunks) * 100) : 0
|
|
562
|
+
|
|
492
563
|
const lastIngested = stats.last_ingested_at
|
|
493
564
|
? new Date(stats.last_ingested_at).toLocaleDateString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })
|
|
494
565
|
: 'Never'
|
|
495
566
|
|
|
496
|
-
|
|
497
|
-
const pass1Status = stats.file_count > 0 ? 'complete' : 'empty'
|
|
498
|
-
const pass2Status = stats.chunk_count > 0 ? 'complete' : (stats.file_count > 0 ? 'partial' : 'empty')
|
|
499
|
-
const pass3Status = embed.coverage_pct === 100 ? 'complete' : (embed.embedded_chunks > 0 ? 'partial' : 'empty') as any
|
|
500
|
-
const pass4Status = doc.coverage_pct === 100 ? 'complete' : (doc.documented_count > 0 ? 'partial' : 'empty') as any
|
|
501
|
-
const pass4bStatus = callmap.total_links > 0 ? 'complete' : 'empty' as any
|
|
502
|
-
const pass5Status = config.config_items > 0 ? (config.configures_links > 0 ? 'complete' : 'partial') : 'empty' as any
|
|
503
|
-
|
|
504
567
|
return (
|
|
505
568
|
<div className="p-6 space-y-6 max-w-5xl">
|
|
506
569
|
{}
|
|
@@ -522,6 +585,16 @@ export default function CILDashboardPage() {
|
|
|
522
585
|
<Button size="sm" variant="outline" onClick={load} className="h-8 text-xs">
|
|
523
586
|
<RefreshCw className="h-3 w-3 mr-1" /> Refresh
|
|
524
587
|
</Button>
|
|
588
|
+
<Button size="sm" variant="outline" onClick={handleDiscover} disabled={discovering} className="h-8 text-xs">
|
|
589
|
+
{discovering ? <RefreshCw className="h-3 w-3 mr-1 animate-spin" /> : <FileCode2 className="h-3 w-3 mr-1" />}
|
|
590
|
+
Discover
|
|
591
|
+
</Button>
|
|
592
|
+
<Button size="sm" variant="outline" asChild className="h-8 text-xs">
|
|
593
|
+
<a href={appPath(`/cil/${projectId}/select`)}>
|
|
594
|
+
<Search className="h-3 w-3 mr-1" />
|
|
595
|
+
Select Files
|
|
596
|
+
</a>
|
|
597
|
+
</Button>
|
|
525
598
|
<Button size="sm" asChild className="h-8 text-xs">
|
|
526
599
|
<a href={appPath(`/cil/${projectId}/ingest`)}>
|
|
527
600
|
<Play className="h-3 w-3 mr-1" /> Run Pipeline
|
|
@@ -535,15 +608,15 @@ export default function CILDashboardPage() {
|
|
|
535
608
|
sections={[
|
|
536
609
|
{ title: 'What this page is for', content: 'This page is the project-level overview for a CIL project. It displays stats, coverage, pipeline status, graph links, and drift alerts.' },
|
|
537
610
|
{ title: 'How to read the cards', content: 'The top tiles show Files, Chunks, Pending Review, and cumulative LLM Cost. The Coverage card shows embedding and documentation coverage plus AI-generated, human-verified, and undocumented counts.' },
|
|
538
|
-
{ title: 'How to read the pipeline', content: 'Pass cards summarize Discover Files,
|
|
611
|
+
{ title: 'How to read the pipeline', content: 'Pass cards summarize Discover Files, Select Files, Chunk, Document, Validate Chunks, Validate Docs, Enrich, Embed & Map, and Publish. Each card shows status, counts, and a link to the relevant step.' },
|
|
539
612
|
{ title: 'Important notes', content: 'Use Refresh to reload the dashboard and Run Pipeline to start or continue ingestion. A drift alert appears when stored hashes differ from current code.' },
|
|
540
613
|
]}
|
|
541
614
|
/>
|
|
542
615
|
|
|
543
616
|
{}
|
|
544
617
|
<div className="grid grid-cols-2 sm:grid-cols-4 gap-4">
|
|
545
|
-
<StatTile label="Files" value={stats.file_count.toLocaleString()} icon={FileCode2} />
|
|
546
|
-
<StatTile label="Chunks" value={stats.chunk_count.toLocaleString()} icon={Layers} accent />
|
|
618
|
+
<StatTile label="Files" value={selectedFiles.toLocaleString()} sub={`${stats.file_count.toLocaleString()} discovered`} icon={FileCode2} />
|
|
619
|
+
<StatTile label="Chunks" value={selectedChunks.toLocaleString()} sub={`${stats.chunk_count.toLocaleString()} discovered`} icon={Layers} accent />
|
|
547
620
|
<StatTile
|
|
548
621
|
label="Pending Review"
|
|
549
622
|
value={stats.pending_review_count}
|
|
@@ -586,48 +659,43 @@ export default function CILDashboardPage() {
|
|
|
586
659
|
<div>
|
|
587
660
|
<h2 className="text-sm font-medium text-muted-foreground uppercase tracking-wide mb-3">Pipeline Status</h2>
|
|
588
661
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3">
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
description="Config field contracts + cil_configures links"
|
|
627
|
-
status={pass5Status}
|
|
628
|
-
metric={`${config.config_items.toLocaleString()} config items · ${config.configures_links.toLocaleString()} links`}
|
|
629
|
-
href={appPath(`/cil/${projectId}/ingest`)}
|
|
630
|
-
/>
|
|
662
|
+
{(() => {
|
|
663
|
+
const outByIdx = PIPELINE_ORDER.map((_, i) =>
|
|
664
|
+
PIPELINE_ORDER.slice(i === 0 ? 1 : i).reduce((sum, s) => sum + (pp.by_status[s] || 0), 0)
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
return PIPELINE_ORDER.map((status, idx) => {
|
|
668
|
+
|
|
669
|
+
const detail = STEP_DETAILS[status]
|
|
670
|
+
|
|
671
|
+
const inCount = idx === 0 ? totalTracked : outByIdx[idx - 1]
|
|
672
|
+
const outCount = outByIdx[idx]
|
|
673
|
+
|
|
674
|
+
const stageStatus = inCount === 0
|
|
675
|
+
? 'empty'
|
|
676
|
+
: inCount > 0 && outCount === inCount
|
|
677
|
+
? 'complete'
|
|
678
|
+
: 'partial'
|
|
679
|
+
|
|
680
|
+
const metric = selectedFiles > 0
|
|
681
|
+
? `${inCount.toLocaleString()} / ${outCount.toLocaleString()} files`
|
|
682
|
+
: 'No files selected'
|
|
683
|
+
|
|
684
|
+
return (
|
|
685
|
+
<PassCard
|
|
686
|
+
key={status}
|
|
687
|
+
number={`${idx + 1}`}
|
|
688
|
+
label={detail?.label || status}
|
|
689
|
+
icon={detail?.icon || Clock}
|
|
690
|
+
description={detail?.description || ''}
|
|
691
|
+
status={stageStatus as 'complete' | 'partial' | 'empty' | 'unknown'}
|
|
692
|
+
metric={metric}
|
|
693
|
+
href={appPath(`/cil/${projectId}/ingest`)}
|
|
694
|
+
skill={detail?.skill}
|
|
695
|
+
/>
|
|
696
|
+
)
|
|
697
|
+
})
|
|
698
|
+
})()}
|
|
631
699
|
</div>
|
|
632
700
|
</div>
|
|
633
701
|
|
|
@@ -695,5 +763,10 @@ export default function CILDashboardPage() {
|
|
|
695
763
|
</div>
|
|
696
764
|
)
|
|
697
765
|
}
|
|
698
|
-
|
|
699
|
-
// CIL[
|
|
766
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Main admin page for reviewing CIL project health, coverage, pipeline status, graph links, and drift.'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx"]
|
|
767
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
768
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
769
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
770
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
771
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
772
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/cil/CILDashboardPage.tsx:cildashboardpage:function"]
|