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,49 +1,64 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataHeader.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Provide the module-level imports and dependencies for the DataHeader runtime component."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import React, the Button component, and the lucide-react icon library used by DataHeader."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="runtime-data-header" layer="ui" related_files=".framework/src/components/ui/button.tsx"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported modules available to the file" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, the local Button component, and the full lucide-react icon library." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="ui-developers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
|
-
// CIL[BEGIN chunk_id="DataHeader_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
|
|
4
|
-
// CIL[DOC-MACRO purpose="Import dependencies and define header component types"]
|
|
5
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data header"]
|
|
6
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
7
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
|
|
8
|
-
// CIL[DOC-MICRO logic_summary="Imports React, UI components, defines DataHeaderProps" notable_decisions="[]"]
|
|
9
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
10
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
12
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
13
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
18
13
|
import React from 'react'
|
|
19
14
|
import { Button } from '../ui/button'
|
|
20
15
|
import * as Icons from 'lucide-react'
|
|
21
16
|
|
|
17
|
+
|
|
18
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provide the module-level imports and dependencies for the DataHeader runtime component.'; No verified external callers; imports: .framework/src/components/ui/button.tsx"]
|
|
19
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
20
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
21
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
22
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
23
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataHeader.tsx:module_header:module_header"]
|
|
25
|
+
|
|
26
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataHeader.tsx:dataheaderprops:interface" type="interface" identity="DataHeaderProps" parent="none"]
|
|
27
|
+
// CIL[DOC-MACRO purpose="Define the prop contract for the DataHeader component."]
|
|
28
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the expected properties for rendering a DataHeader: title, icon, description, and newButtonHref."]
|
|
29
|
+
// CIL[DOC-CONTEXT module="runtime-data-header" layer="ui" related_files=".framework/src/components/runtime/DataHeader.tsx,.framework/src/components/ui/button.tsx"]
|
|
30
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="DataHeaderProps TypeScript interface" errors="none" side_effects="none"]
|
|
31
|
+
// CIL[DOC-MICRO logic_summary="Declares a TypeScript interface with title, icon, description, and newButtonHref fields." notable_decisions="[]"]
|
|
32
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
33
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
34
|
+
|
|
22
35
|
interface DataHeaderProps {
|
|
23
36
|
title: string
|
|
24
37
|
icon: string
|
|
25
38
|
description: string
|
|
26
39
|
newButtonHref: string
|
|
27
40
|
}
|
|
28
|
-
// CIL[
|
|
29
|
-
// CIL[
|
|
30
|
-
// CIL[DOC-
|
|
31
|
-
// CIL[DOC-
|
|
32
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
33
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX header" errors="none" side_effects="navigation"]
|
|
34
|
-
// CIL[DOC-MICRO logic_summary="Renders icon, title, description, and new button with navigation" notable_decisions="[]"]
|
|
35
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
38
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
39
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
41
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the prop contract for the DataHeader component.'; No verified external callers; imports: .framework/src/components/ui/button.tsx"]
|
|
42
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
43
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
44
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
41
45
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
46
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
47
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataHeader.tsx:dataheaderprops:interface"]
|
|
48
|
+
|
|
49
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataHeader.tsx:dataheader:function" type="function" identity="DataHeader" parent="none"]
|
|
50
|
+
// CIL[DOC-MACRO purpose="Render a page header with an icon, title, description, and a New action button."]
|
|
51
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display the header for a data list page and provide a primary CTA linking to the new resource form."]
|
|
52
|
+
// CIL[DOC-CONTEXT module="runtime-data-header" layer="ui" related_files=".framework/src/components/runtime/DataHeader.tsx,.framework/src/components/ui/button.tsx"]
|
|
53
|
+
// CIL[DOC-CONTRACT inputs="title: string, icon: string, description: string, newButtonHref: string" outputs="Rendered JSX header with icon and button" errors="none" side_effects="sets window.location.href on button click, looks up icon from lucide-react"]
|
|
54
|
+
// CIL[DOC-MICRO logic_summary="Resolves a dynamic lucide-react icon component, renders a title, description, and a button labeled with the singular title." notable_decisions="[]"]
|
|
55
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
56
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
57
|
+
|
|
43
58
|
export function DataHeader({ title, icon, description, newButtonHref }: DataHeaderProps) {
|
|
44
59
|
// Dynamically get the icon component
|
|
45
60
|
const IconComponent = (Icons as Record<string, React.ComponentType<{ className?: string }>>)[icon] || Icons.Box
|
|
46
|
-
|
|
61
|
+
|
|
47
62
|
return (
|
|
48
63
|
<div className="flex justify-between items-center">
|
|
49
64
|
<div className="flex items-center gap-3">
|
|
@@ -57,8 +72,8 @@ export function DataHeader({ title, icon, description, newButtonHref }: DataHead
|
|
|
57
72
|
<p className="mt-0.5 text-sm text-muted-foreground">{description}</p>
|
|
58
73
|
</div>
|
|
59
74
|
</div>
|
|
60
|
-
|
|
61
|
-
<Button
|
|
75
|
+
|
|
76
|
+
<Button
|
|
62
77
|
onClick={() => window.location.href = newButtonHref}
|
|
63
78
|
className="flex items-center gap-2"
|
|
64
79
|
>
|
|
@@ -68,4 +83,10 @@ export function DataHeader({ title, icon, description, newButtonHref }: DataHead
|
|
|
68
83
|
</div>
|
|
69
84
|
)
|
|
70
85
|
}
|
|
71
|
-
// CIL[
|
|
86
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a page header with an icon, title, description, and a New action button.'; No verified external callers; imports: .framework/src/components/ui/button.tsx"]
|
|
87
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
88
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
89
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
90
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
91
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
92
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataHeader.tsx:dataheader:function"]
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// CIL[
|
|
4
|
-
// CIL[DOC-
|
|
5
|
-
// CIL[DOC-
|
|
6
|
-
// CIL[DOC-
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-MICRO logic_summary="Imports routing, hooks, and runtime components" notable_decisions="[]"]
|
|
9
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/runtime/DataListPage.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Import the hooks and child components used by the DataListPage runtime list view"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare module-level imports for routing, data hooks, and UI subcomponents"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="components/runtime" layer="runtime" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/runtime/DataFilters.tsx,.framework/src/components/runtime/DataHeader.tsx,.framework/src/components/runtime/DataStats.tsx,.framework/src/components/runtime/DataTable.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/hooks/useEntityList.ts,.framework/src/hooks/useListSchema.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported symbols available to DataListPage" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Import React Router useParams, list schema and entity list hooks, and runtime/ui child components" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
10
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
-
// CIL[DOC-AUDIENCE audience="
|
|
12
|
-
|
|
13
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="framework-developers,ui-developers"]
|
|
10
|
+
|
|
18
11
|
import { useParams } from 'react-router-dom'
|
|
19
12
|
import { useListSchema } from '../../hooks/useListSchema'
|
|
20
13
|
import { useEntityList } from '../../hooks/useEntityList'
|
|
@@ -25,73 +18,31 @@ import { DataTable } from './DataTable'
|
|
|
25
18
|
import { PageInstructions } from '../admin/PageInstructions'
|
|
26
19
|
import { Card, CardContent } from '../ui/card'
|
|
27
20
|
import { Skeleton } from '../ui/skeleton'
|
|
28
|
-
// CIL[
|
|
29
|
-
// CIL[
|
|
30
|
-
// CIL[DOC-
|
|
31
|
-
// CIL[DOC-
|
|
32
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/components/ui/table-primitives.tsx\"]"]
|
|
33
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX list page" errors="none" side_effects="none"]
|
|
34
|
-
// CIL[DOC-MICRO logic_summary="Render header, stats, filters, and table with config data" notable_decisions="[]"]
|
|
35
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/components/ui/table-primitives.tsx."]
|
|
38
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
39
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
21
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Import the hooks and child components used by the DataListPage runtime list view'; No verified external callers; imports: .framework/src/hooks/useListSchema.ts,.framework/src/hooks/useEntityList.ts,.framework/src/components/runtime/DataHeader.tsx"]
|
|
22
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
23
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
24
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
41
25
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
26
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// CIL[
|
|
46
|
-
// CIL[DOC-
|
|
47
|
-
// CIL[DOC-
|
|
48
|
-
// CIL[DOC-
|
|
49
|
-
// CIL[DOC-
|
|
50
|
-
// CIL[DOC-
|
|
27
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataListPage.tsx:module_header:module_header"]
|
|
28
|
+
|
|
29
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataListPage.tsx:DataListPage:component" type="component" identity="DataListPage" parent="~/.framework/src/components/runtime/DataListPage.tsx"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Render a schema-driven list page for runtime entity records with stats, filters, and a sortable data table"]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch the list schema, build the column/filter configuration, load entity list data, and render header/stats/filters/table with loading and error states"]
|
|
32
|
+
// CIL[DOC-CONTEXT module="components/runtime" layer="runtime" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/runtime/DataFilters.tsx,.framework/src/components/runtime/DataHeader.tsx,.framework/src/components/runtime/DataListPage.tsx,.framework/src/components/runtime/DataStats.tsx,.framework/src/components/runtime/DataTable.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/hooks/useEntityList.ts,.framework/src/hooks/useListSchema.ts"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="entity and optional typeSlug from route params; list schema via useListSchema; entity list data via useEntityList" outputs="JSX page composed of DataHeader, PageInstructions, DataStats, DataFilters, and DataTable" errors="schemaError or useEntityList error renders a fallback error card" side_effects="Invokes useListSchema and useEntityList data fetching; updates filters and sort via setter functions"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Build a config object from the loaded schema and view, handle loading and error states, then compose child components with derived columns, stats, filters, sort, and routing hrefs" notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
51
36
|
// CIL[DOC-STABILITY stability="stable"]
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
55
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
56
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
57
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
37
|
+
|
|
38
|
+
export function DataListPage() {
|
|
58
39
|
const { entity, typeSlug } = useParams<{ entity: string; typeSlug?: string }>()
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// CIL[BEGIN chunk_id="DataListPage_schema_1783929048" type="variable_declaration" identity="schema" parent="DataListPage_datalistpage_1783929048"]
|
|
62
|
-
// CIL[DOC-MACRO purpose="Fetch entity schema and view configuration"]
|
|
63
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle schema"]
|
|
64
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
65
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="schema,view,loading,error" errors="none" side_effects="API call"]
|
|
66
|
-
// CIL[DOC-MICRO logic_summary="Call useListSchema hook to get entity schema and view config" notable_decisions="[]"]
|
|
67
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
68
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
69
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 2. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
70
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 2. Total affected: 3."]
|
|
71
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
72
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
73
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
74
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
40
|
+
|
|
75
41
|
const { schema, view, loading: schemaLoading, error: schemaError } = useListSchema({
|
|
76
42
|
entity: entity || '',
|
|
77
43
|
viewSlug: 'default_list'
|
|
78
44
|
})
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// CIL[BEGIN chunk_id="DataListPage_config_1783929048" type="variable_declaration" identity="config" parent="DataListPage_datalistpage_1783929048"]
|
|
82
|
-
// CIL[DOC-MACRO purpose="Build configuration object from schema and view"]
|
|
83
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle config"]
|
|
84
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
85
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="config:object|null" errors="none" side_effects="none"]
|
|
86
|
-
// CIL[DOC-MICRO logic_summary="Merge schema and view data into config for list components" notable_decisions="[]"]
|
|
87
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
88
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
89
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
90
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
91
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
92
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
93
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
94
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
45
|
+
|
|
95
46
|
const config = view && schema ? {
|
|
96
47
|
entity: entity || '',
|
|
97
48
|
typeSlug: typeSlug || undefined,
|
|
@@ -112,48 +63,18 @@ export function DataListPage() {
|
|
|
112
63
|
}))
|
|
113
64
|
}
|
|
114
65
|
} : null
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// CIL[DOC-CONTEXT module="entityList" layer="unknown" related_files="[]"]
|
|
121
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
122
|
-
// CIL[DOC-MICRO logic_summary="Implements entityList" notable_decisions="[]"]
|
|
123
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
124
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
125
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
126
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
127
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
128
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
129
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
130
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
131
|
-
const {
|
|
132
|
-
data,
|
|
133
|
-
loading,
|
|
134
|
-
error,
|
|
66
|
+
|
|
67
|
+
const {
|
|
68
|
+
data,
|
|
69
|
+
loading,
|
|
70
|
+
error,
|
|
135
71
|
refetch,
|
|
136
|
-
filters,
|
|
137
|
-
setFilters,
|
|
138
|
-
sort,
|
|
72
|
+
filters,
|
|
73
|
+
setFilters,
|
|
74
|
+
sort,
|
|
139
75
|
setSort
|
|
140
76
|
} = useEntityList(entity!, config)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
// CIL[BEGIN chunk_id="DataListPage_loadingstate_1783929048" type="render_block" identity="loadingState" parent="DataListPage_datalistpage_1783929048"]
|
|
144
|
-
// CIL[DOC-MACRO purpose="Render loading skeleton for schema fetching"]
|
|
145
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle loadingState"]
|
|
146
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[]"]
|
|
147
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX loading skeleton" errors="none" side_effects="none"]
|
|
148
|
-
// CIL[DOC-MICRO logic_summary="Show skeleton placeholders for header, stats, and table" notable_decisions="[]"]
|
|
149
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
150
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
151
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
152
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
153
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
154
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
155
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
156
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
77
|
+
|
|
157
78
|
if (schemaLoading) {
|
|
158
79
|
return (
|
|
159
80
|
<div className="space-y-6">
|
|
@@ -179,22 +100,7 @@ export function DataListPage() {
|
|
|
179
100
|
</div>
|
|
180
101
|
)
|
|
181
102
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
// CIL[BEGIN chunk_id="DataListPage_errorstate_1783929048" type="render_block" identity="errorState" parent="DataListPage_datalistpage_1783929048"]
|
|
185
|
-
// CIL[DOC-MACRO purpose="Render error state for schema loading failures"]
|
|
186
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle errorState"]
|
|
187
|
-
// CIL[DOC-CONTEXT module="errorState" layer="unknown" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\"]"]
|
|
188
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
189
|
-
// CIL[DOC-MICRO logic_summary="Implements errorState" notable_decisions="[]"]
|
|
190
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
191
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
192
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts."]
|
|
193
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
194
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
195
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
196
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
197
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
103
|
+
|
|
198
104
|
if (schemaError || !config) {
|
|
199
105
|
return (
|
|
200
106
|
<Card>
|
|
@@ -205,25 +111,10 @@ export function DataListPage() {
|
|
|
205
111
|
</Card>
|
|
206
112
|
)
|
|
207
113
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
// CIL[BEGIN chunk_id="DataListPage_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataListPage_datalistpage_1783929048"]
|
|
211
|
-
// CIL[DOC-MACRO purpose="Render main list page with all components"]
|
|
212
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
|
|
213
|
-
// CIL[DOC-CONTEXT module="mainRender" layer="unknown" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/components/ui/table-primitives.tsx\"]"]
|
|
214
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
215
|
-
// CIL[DOC-MICRO logic_summary="Implements mainRender" notable_decisions="[]"]
|
|
216
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
217
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
218
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/components/ui/table-primitives.tsx."]
|
|
219
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
220
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
221
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
222
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
223
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
114
|
+
|
|
224
115
|
return (
|
|
225
116
|
<div className="space-y-6">
|
|
226
|
-
<DataHeader
|
|
117
|
+
<DataHeader
|
|
227
118
|
title={config.entity.charAt(0).toUpperCase() + config.entity.slice(1)}
|
|
228
119
|
icon={config.icon}
|
|
229
120
|
description={`Manage ${config.entity}`}
|
|
@@ -251,20 +142,20 @@ export function DataListPage() {
|
|
|
251
142
|
]}
|
|
252
143
|
/>
|
|
253
144
|
|
|
254
|
-
<DataStats
|
|
255
|
-
stats={config.list.stats}
|
|
145
|
+
<DataStats
|
|
146
|
+
stats={config.list.stats}
|
|
256
147
|
data={data}
|
|
257
148
|
loading={loading}
|
|
258
149
|
/>
|
|
259
|
-
|
|
260
|
-
<DataFilters
|
|
150
|
+
|
|
151
|
+
<DataFilters
|
|
261
152
|
filters={config.list.filters}
|
|
262
153
|
values={filters}
|
|
263
154
|
onChange={setFilters}
|
|
264
155
|
onClear={() => setFilters({})}
|
|
265
156
|
/>
|
|
266
|
-
|
|
267
|
-
<DataTable
|
|
157
|
+
|
|
158
|
+
<DataTable
|
|
268
159
|
columns={config.list.columns}
|
|
269
160
|
data={data}
|
|
270
161
|
loading={loading}
|
|
@@ -278,6 +169,11 @@ export function DataListPage() {
|
|
|
278
169
|
/>
|
|
279
170
|
</div>
|
|
280
171
|
)
|
|
281
|
-
// CIL[END chunk_id="DataListPage_mainrender_1783929048"]
|
|
282
172
|
}
|
|
283
|
-
// CIL[
|
|
173
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a schema-driven list page for runtime entity records with stats, filters, and a sortable data table'; No verified external callers; imports: .framework/src/hooks/useListSchema.ts,.framework/src/hooks/useEntityList.ts,.framework/src/components/runtime/DataHeader.tsx"]
|
|
174
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
175
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
176
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
177
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
178
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
179
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataListPage.tsx:DataListPage:component"]
|
|
@@ -1,30 +1,58 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataStats.tsx:module_header:module_header"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Module header for the DataStats runtime component"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare imports and dependencies for the DataStats component"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="DataStats" layer="runtime" related_files=".framework/src/components/ui/card.tsx,.framework/src/types/types.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports types, UI card, and icon utilities used by the DataStats component." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="engineer"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
|
-
// CIL[BEGIN chunk_id="DataStats_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
|
|
4
|
-
// CIL[DOC-MACRO purpose="Import dependencies and define types for stats component"]
|
|
5
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports, interfaces, and color constants"]
|
|
6
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
7
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="types_and_constants" errors="none" side_effects="none"]
|
|
8
|
-
// CIL[DOC-MICRO logic_summary="Imports EntityStat type, UI components, and defines color mapping" notable_decisions="[]"]
|
|
9
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
10
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
12
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
13
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
18
13
|
import { EntityStat } from '../../types/types'
|
|
19
14
|
import { Card, CardContent } from '../ui/card'
|
|
20
15
|
import * as Icons from 'lucide-react'
|
|
21
16
|
|
|
17
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Module header for the DataStats runtime component'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx"]
|
|
18
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
19
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
20
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
21
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
22
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
23
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataStats.tsx:module_header:module_header"]
|
|
24
|
+
|
|
25
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataStats.tsx:datastatsprops:interface"]
|
|
26
|
+
// CIL[DOC-MACRO purpose="DataStats component prop type"]
|
|
27
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the shape of props accepted by DataStats"]
|
|
28
|
+
// CIL[DOC-CONTEXT module="DataStats" layer="runtime" related_files=".framework/src/components/runtime/DataStats.tsx,.framework/src/components/ui/card.tsx,.framework/src/types/types.ts"]
|
|
29
|
+
// CIL[DOC-CONTRACT inputs="EntityStat[] stats, any[] data, optional boolean loading" outputs="DataStatsProps interface" errors="none" side_effects="none"]
|
|
30
|
+
// CIL[DOC-MICRO logic_summary="Type-only interface for DataStats props." notable_decisions="[]"]
|
|
31
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
32
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
22
33
|
interface DataStatsProps {
|
|
23
34
|
stats: EntityStat[]
|
|
24
35
|
data: any[]
|
|
25
36
|
loading?: boolean
|
|
26
37
|
}
|
|
38
|
+
// CIL[DOC-VECTOR type="context" content="purpose='DataStats component prop type'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx"]
|
|
39
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
40
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
41
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
42
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
43
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
44
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataStats.tsx:datastatsprops:interface"]
|
|
45
|
+
|
|
27
46
|
|
|
47
|
+
|
|
48
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataStats.tsx:colormap:constant"]
|
|
49
|
+
// CIL[DOC-MACRO purpose="Color style mapping for stat cards"]
|
|
50
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide Tailwind CSS class combinations for color themes"]
|
|
51
|
+
// CIL[DOC-CONTEXT module="DataStats" layer="runtime" related_files=".framework/src/components/runtime/DataStats.tsx,.framework/src/components/ui/card.tsx,.framework/src/types/types.ts"]
|
|
52
|
+
// CIL[DOC-CONTRACT inputs="color key" outputs="Tailwind class string" errors="unknown key falls back to gray" side_effects="none"]
|
|
53
|
+
// CIL[DOC-MICRO logic_summary="Record mapping semantic color names to background/text utility classes." notable_decisions="[]"]
|
|
54
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
55
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
28
56
|
const colorMap: Record<string, string> = {
|
|
29
57
|
blue: 'bg-blue-500/10 text-blue-500',
|
|
30
58
|
green: 'bg-green-500/10 text-green-500',
|
|
@@ -33,36 +61,25 @@ const colorMap: Record<string, string> = {
|
|
|
33
61
|
purple: 'bg-purple-500/10 text-purple-500',
|
|
34
62
|
gray: 'bg-muted text-muted-foreground'
|
|
35
63
|
}
|
|
36
|
-
// CIL[
|
|
37
|
-
// CIL[
|
|
38
|
-
// CIL[DOC-
|
|
39
|
-
// CIL[DOC-
|
|
40
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
41
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="number" errors="none" side_effects="none"]
|
|
42
|
-
// CIL[DOC-MICRO logic_summary="Switch on stat type, handle count vs filter_count with nested object access" notable_decisions="[]"]
|
|
43
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
44
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
45
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
46
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
47
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
48
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
64
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Color style mapping for stat cards'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx"]
|
|
65
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
66
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
67
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
49
68
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
69
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// CIL[
|
|
56
|
-
// CIL[DOC-
|
|
57
|
-
// CIL[DOC-
|
|
58
|
-
// CIL[DOC-
|
|
70
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataStats.tsx:colormap:constant"]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataStats.tsx:datastats:function"]
|
|
75
|
+
// CIL[DOC-MACRO purpose="Render data statistics cards"]
|
|
76
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Calculate and display entity statistics as a responsive grid of cards"]
|
|
77
|
+
// CIL[DOC-CONTEXT module="DataStats" layer="runtime" related_files=".framework/src/components/runtime/DataStats.tsx,.framework/src/components/ui/card.tsx,.framework/src/types/types.ts"]
|
|
78
|
+
// CIL[DOC-CONTRACT inputs="stats, data, loading" outputs="JSX grid of cards" errors="none" side_effects="renders React UI"]
|
|
79
|
+
// CIL[DOC-MICRO logic_summary="Maps stats to calculated values; uses colorMap and dynamic icon for each card." notable_decisions="[]"]
|
|
80
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
59
81
|
// CIL[DOC-STABILITY stability="stable"]
|
|
60
|
-
|
|
61
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
62
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
63
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
64
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
65
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
82
|
+
export function DataStats({ stats, data, loading }: DataStatsProps) {
|
|
66
83
|
const calculateStat = (stat: EntityStat): number => {
|
|
67
84
|
if (!data) return 0
|
|
68
85
|
|
|
@@ -83,7 +100,6 @@ export function DataStats({ stats, data, loading }: DataStatsProps) {
|
|
|
83
100
|
return 0
|
|
84
101
|
}
|
|
85
102
|
}
|
|
86
|
-
// CIL[END chunk_id="DataStats_calculatestat_1783929048"]
|
|
87
103
|
|
|
88
104
|
return (
|
|
89
105
|
<div className="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
|
|
@@ -114,4 +130,10 @@ export function DataStats({ stats, data, loading }: DataStatsProps) {
|
|
|
114
130
|
</div>
|
|
115
131
|
)
|
|
116
132
|
}
|
|
117
|
-
// CIL[
|
|
133
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render data statistics cards'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx"]
|
|
134
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
135
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
136
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
137
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
138
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
139
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataStats.tsx:datastats:function"]
|