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,20 +1,15 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataDetailPage.tsx:module_header:module_header"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Module-level imports and component entry point for the runtime data detail page."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide React imports, route and UI component dependencies, and declare the DataDetailPage module."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="runtime" layer="presentation" related_files=".framework/src/components/runtime/DataDetailHeader.tsx,.framework/src/components/runtime/SchemaDetailForm.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/hooks/useEntityRecord.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="rendered DataDetailPage component and imported dependencies" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React hooks, router hooks, the useEntityRecord hook, and child UI components; contains no runtime logic." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers, maintainers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
|
-
// CIL[BEGIN chunk_id="DataDetailPage_module_header_1783929048" type="module_header" identity="imports" parent="none"]
|
|
4
|
-
// CIL[DOC-MACRO purpose="Import dependencies for entity detail page component"]
|
|
5
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports for hooks and components"]
|
|
6
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
7
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
|
|
8
|
-
// CIL[DOC-MICRO logic_summary="Imports React hooks, routing, entity hooks, and UI components" 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: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.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 { useState, useEffect } from 'react'
|
|
19
14
|
import { useParams, useSearchParams } from 'react-router-dom'
|
|
20
15
|
import { useEntityRecord } from '../../hooks/useEntityRecord'
|
|
@@ -23,73 +18,30 @@ import { SchemaDetailForm } from './SchemaDetailForm'
|
|
|
23
18
|
import { Button } from '../ui/button'
|
|
24
19
|
import { Card, CardContent } from '../ui/card'
|
|
25
20
|
import { Skeleton } from '../ui/skeleton'
|
|
26
|
-
|
|
27
|
-
// CIL[
|
|
28
|
-
// CIL[DOC-
|
|
29
|
-
// CIL[DOC-
|
|
30
|
-
// CIL[DOC-
|
|
31
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX detail page" errors="none" side_effects="none"]
|
|
32
|
-
// CIL[DOC-MICRO logic_summary="Render header and form with all edit/create functionality" notable_decisions="[]"]
|
|
33
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
34
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
35
|
-
// 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/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/migrations/015_simplify_apps_table.sql."]
|
|
36
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
37
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
38
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
21
|
+
|
|
22
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Module-level imports and component entry point for the runtime data detail page.'; No verified external callers; imports: .framework/src/hooks/useEntityRecord.ts,.framework/src/components/runtime/DataDetailHeader.tsx,.framework/src/components/runtime/SchemaDetailForm.tsx"]
|
|
23
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
24
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
25
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
39
26
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
40
27
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
// CIL[DOC-MACRO purpose="
|
|
44
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
45
|
-
// CIL[DOC-CONTEXT module="runtime" layer="
|
|
46
|
-
// CIL[DOC-CONTRACT inputs="
|
|
47
|
-
// CIL[DOC-MICRO logic_summary="
|
|
48
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
28
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataDetailPage.tsx:module_header:module_header"]
|
|
29
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataDetailPage.tsx:datadetailpage:function"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Render a detail/edit page for a runtime entity record using its design schema and the useEntityRecord hook."]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch and display a record, handle create/edit/delete flows, field changes, and cancel/save/delete actions, and render the detail form."]
|
|
32
|
+
// CIL[DOC-CONTEXT module="runtime" layer="presentation" related_files=".framework/src/components/runtime/DataDetailHeader.tsx,.framework/src/components/runtime/DataDetailPage.tsx,.framework/src/components/runtime/SchemaDetailForm.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/hooks/useEntityRecord.ts"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="URL params (entity, id, typeSlug), search params (edit)" outputs="JSX for loading, error, or detail form" errors="Failed to load record or schema; save/delete errors bubble via useEntityRecord" side_effects="Updates search params; navigates on create/cancel/delete; calls useEntityRecord save/delete; uses browser confirm dialog"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Uses useParams and useSearchParams, derives recordId and isCreating/isEditing, builds a config for useEntityRecord, initializes formData from schema sections, and handles field change, edit, save, delete, and cancel actions." notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
49
36
|
// CIL[DOC-STABILITY stability="stable"]
|
|
50
|
-
|
|
51
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
52
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
53
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
54
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
55
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
37
|
+
export function DataDetailPage() {
|
|
56
38
|
const { entity, id, typeSlug } = useParams<{ entity: string; id: string; typeSlug?: string }>()
|
|
57
39
|
const [searchParams, setSearchParams] = useSearchParams()
|
|
58
|
-
// CIL[END chunk_id="DataDetailPage_params_1783929048"]
|
|
59
40
|
|
|
60
|
-
// CIL[BEGIN chunk_id="DataDetailPage_stateflags_1783929048" type="variable_declaration" identity="stateFlags" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
61
|
-
// CIL[DOC-MACRO purpose="Determine create/edit mode from URL parameters"]
|
|
62
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle stateFlags"]
|
|
63
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
64
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="isCreating,isEditing" errors="none" side_effects="none"]
|
|
65
|
-
// CIL[DOC-MICRO logic_summary="Set create mode from missing id, edit mode from search param" notable_decisions="[]"]
|
|
66
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
67
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
68
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
69
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
70
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
71
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
72
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
73
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
74
41
|
const recordId = id === 'new' ? undefined : id
|
|
75
42
|
const isCreating = !recordId
|
|
76
43
|
const isEditing = searchParams.get('edit') === 'true' || isCreating
|
|
77
|
-
// CIL[END chunk_id="DataDetailPage_stateflags_1783929048"]
|
|
78
44
|
|
|
79
|
-
// CIL[BEGIN chunk_id="DataDetailPage_config_1783929048" type="variable_declaration" identity="config" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
80
|
-
// CIL[DOC-MACRO purpose="Create configuration object for entity record operations"]
|
|
81
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle config"]
|
|
82
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
83
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="config:object" errors="none" side_effects="none"]
|
|
84
|
-
// CIL[DOC-MICRO logic_summary="Configure entity details, API actions, and display settings" notable_decisions="[]"]
|
|
85
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
86
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
87
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, \."]
|
|
88
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
89
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
90
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
91
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
92
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
45
|
const defaultTypeSlugs: Record<string, string> = {
|
|
94
46
|
accounts: 'account',
|
|
95
47
|
people: 'person',
|
|
@@ -114,22 +66,7 @@ export function DataDetailPage() {
|
|
|
114
66
|
updateAction: 'update'
|
|
115
67
|
}
|
|
116
68
|
}
|
|
117
|
-
// CIL[END chunk_id="DataDetailPage_config_1783929048"]
|
|
118
69
|
|
|
119
|
-
// CIL[BEGIN chunk_id="DataDetailPage_entityrecord_1783929048" type="variable_declaration" identity="entityRecord" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
120
|
-
// CIL[DOC-MACRO purpose="Fetch entity record and management functions"]
|
|
121
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle entityRecord"]
|
|
122
|
-
// CIL[DOC-CONTEXT module="entityRecord" layer="unknown" related_files="[]"]
|
|
123
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
124
|
-
// CIL[DOC-MICRO logic_summary="Implements entityRecord" 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: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
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."]
|
|
131
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
132
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
133
70
|
const {
|
|
134
71
|
record,
|
|
135
72
|
fieldPermissions,
|
|
@@ -141,78 +78,18 @@ export function DataDetailPage() {
|
|
|
141
78
|
saving,
|
|
142
79
|
deleting
|
|
143
80
|
} = useEntityRecord(entity!, recordId, config)
|
|
144
|
-
// CIL[END chunk_id="DataDetailPage_entityrecord_1783929048"]
|
|
145
81
|
|
|
146
|
-
// CIL[BEGIN chunk_id="DataDetailPage_schema_1783929048" type="variable_declaration" identity="schema" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
147
|
-
// CIL[DOC-MACRO purpose="Extract schema and view from record data"]
|
|
148
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle schema"]
|
|
149
|
-
// CIL[DOC-CONTEXT module="schema" layer="unknown" related_files="[]"]
|
|
150
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
151
|
-
// CIL[DOC-MICRO logic_summary="Implements schema" notable_decisions="[]"]
|
|
152
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
153
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
154
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
155
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
156
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
157
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
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
82
|
const schema = record?.design_schema || null
|
|
161
83
|
const view = schema?.views?.default_detail || null
|
|
162
|
-
// CIL[END chunk_id="DataDetailPage_schema_1783929048"]
|
|
163
84
|
|
|
164
|
-
// CIL[BEGIN chunk_id="DataDetailPage_title_1783929048" type="variable_declaration" identity="title" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
165
|
-
// CIL[DOC-MACRO purpose="Generate display title for entity record"]
|
|
166
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle title"]
|
|
167
|
-
// CIL[DOC-CONTEXT module="title" layer="unknown" related_files="[]"]
|
|
168
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
169
|
-
// CIL[DOC-MICRO logic_summary="Implements title" notable_decisions="[]"]
|
|
170
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
171
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
172
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
173
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
174
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
175
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
176
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
177
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
178
85
|
const displayField = schema?.display_field || config.displayField
|
|
179
86
|
const FALLBACK_FIELDS = ['full_name', 'display_name', 'name', 'title', 'slug', 'email']
|
|
180
87
|
const recordTitle = record?.[displayField]
|
|
181
88
|
?? FALLBACK_FIELDS.map(f => record?.[f]).find(v => v != null)
|
|
182
89
|
?? 'Untitled'
|
|
183
|
-
// CIL[END chunk_id="DataDetailPage_title_1783929048"]
|
|
184
90
|
|
|
185
|
-
// CIL[BEGIN chunk_id="DataDetailPage_formdata_1783929048" type="variable_declaration" identity="formData" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
186
|
-
// CIL[DOC-MACRO purpose="Manage form state for entity editing"]
|
|
187
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle formData"]
|
|
188
|
-
// CIL[DOC-CONTEXT module="formData" layer="unknown" related_files="[]"]
|
|
189
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
190
|
-
// CIL[DOC-MICRO logic_summary="Implements formData" notable_decisions="[]"]
|
|
191
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
192
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
193
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
194
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
195
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
196
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
197
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
198
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
199
91
|
const [formData, setFormData] = useState<Record<string, any>>({})
|
|
200
|
-
// CIL[END chunk_id="DataDetailPage_formdata_1783929048"]
|
|
201
92
|
|
|
202
|
-
// CIL[BEGIN chunk_id="DataDetailPage_useeffect_1783929048" type="function" identity="useEffect" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
203
|
-
// CIL[DOC-MACRO purpose="Initialize form data when record loads or in create mode"]
|
|
204
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle useEffect"]
|
|
205
|
-
// CIL[DOC-CONTEXT module="useEffect" layer="unknown" related_files="[]"]
|
|
206
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
207
|
-
// CIL[DOC-MICRO logic_summary="Implements useEffect" notable_decisions="[]"]
|
|
208
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
209
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
210
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
211
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
212
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
213
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
214
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
215
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
216
93
|
useEffect(() => {
|
|
217
94
|
if (record && view) {
|
|
218
95
|
const initialData: Record<string, any> = {}
|
|
@@ -232,60 +109,15 @@ export function DataDetailPage() {
|
|
|
232
109
|
setFormData({})
|
|
233
110
|
}
|
|
234
111
|
}, [record, isCreating, view, schema])
|
|
235
|
-
// CIL[END chunk_id="DataDetailPage_useeffect_1783929048"]
|
|
236
112
|
|
|
237
|
-
// CIL[BEGIN chunk_id="DataDetailPage_handlefieldchange_1783929048" type="function" identity="handleFieldChange" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
238
|
-
// CIL[DOC-MACRO purpose="Update form field value when user edits"]
|
|
239
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleFieldChange"]
|
|
240
|
-
// CIL[DOC-CONTEXT module="handleFieldChange" layer="unknown" related_files="[]"]
|
|
241
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
242
|
-
// CIL[DOC-MICRO logic_summary="Implements handleFieldChange" notable_decisions="[]"]
|
|
243
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
244
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
245
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
246
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
247
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
248
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
249
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
250
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
251
113
|
const handleFieldChange = (key: string, value: any) => {
|
|
252
114
|
setFormData((prev) => ({ ...prev, [key]: value }))
|
|
253
115
|
}
|
|
254
|
-
// CIL[END chunk_id="DataDetailPage_handlefieldchange_1783929048"]
|
|
255
116
|
|
|
256
|
-
// CIL[BEGIN chunk_id="DataDetailPage_handleedit_1783929048" type="function" identity="handleEdit" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
257
|
-
// CIL[DOC-MACRO purpose="Enable edit mode for the entity record"]
|
|
258
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleEdit"]
|
|
259
|
-
// CIL[DOC-CONTEXT module="handleEdit" layer="unknown" related_files="[]"]
|
|
260
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
261
|
-
// CIL[DOC-MICRO logic_summary="Implements handleEdit" notable_decisions="[]"]
|
|
262
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
263
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
264
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
265
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
266
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
267
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
268
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
269
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
270
117
|
const handleEdit = () => {
|
|
271
118
|
setSearchParams({ edit: 'true' })
|
|
272
119
|
}
|
|
273
|
-
// CIL[END chunk_id="DataDetailPage_handleedit_1783929048"]
|
|
274
120
|
|
|
275
|
-
// CIL[BEGIN chunk_id="DataDetailPage_handlecancel_1783929048" type="function" identity="handleCancel" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
276
|
-
// CIL[DOC-MACRO purpose="Handle cancel action with navigation or reset"]
|
|
277
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleCancel"]
|
|
278
|
-
// CIL[DOC-CONTEXT module="handleCancel" layer="unknown" related_files="[]"]
|
|
279
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
280
|
-
// CIL[DOC-MICRO logic_summary="Implements handleCancel" notable_decisions="[]"]
|
|
281
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
282
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
283
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
284
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
285
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
286
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
287
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
288
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
289
121
|
const handleCancel = () => {
|
|
290
122
|
if (isCreating) {
|
|
291
123
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
@@ -308,22 +140,7 @@ export function DataDetailPage() {
|
|
|
308
140
|
}
|
|
309
141
|
}
|
|
310
142
|
}
|
|
311
|
-
// CIL[END chunk_id="DataDetailPage_handlecancel_1783929048"]
|
|
312
143
|
|
|
313
|
-
// CIL[BEGIN chunk_id="DataDetailPage_handlesave_1783929048" type="function" identity="handleSave" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
314
|
-
// CIL[DOC-MACRO purpose="Save entity record and handle navigation after save"]
|
|
315
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSave"]
|
|
316
|
-
// CIL[DOC-CONTEXT module="handleSave" layer="unknown" related_files="[]"]
|
|
317
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
318
|
-
// CIL[DOC-MICRO logic_summary="Implements handleSave" notable_decisions="[]"]
|
|
319
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
320
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
321
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
322
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
323
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
324
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
325
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
326
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
327
144
|
const handleSave = async () => {
|
|
328
145
|
await save(formData)
|
|
329
146
|
if (!isCreating) {
|
|
@@ -332,44 +149,14 @@ export function DataDetailPage() {
|
|
|
332
149
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
333
150
|
}
|
|
334
151
|
}
|
|
335
|
-
// CIL[END chunk_id="DataDetailPage_handlesave_1783929048"]
|
|
336
152
|
|
|
337
|
-
// CIL[BEGIN chunk_id="DataDetailPage_handledelete_1783929048" type="function" identity="handleDelete" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
338
|
-
// CIL[DOC-MACRO purpose="handleDelete"]
|
|
339
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleDelete"]
|
|
340
|
-
// CIL[DOC-CONTEXT module="handleDelete" layer="unknown" related_files="[]"]
|
|
341
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
342
|
-
// CIL[DOC-MICRO logic_summary="Implements handleDelete" notable_decisions="[]"]
|
|
343
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
344
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
345
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
346
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
347
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
348
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
349
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
350
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
351
153
|
const handleDelete = async () => {
|
|
352
154
|
if (confirm(`Are you sure you want to delete this ${config?.entity?.slice(0, -1) || 'record'}?`)) {
|
|
353
155
|
await deleteRecord()
|
|
354
156
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
355
157
|
}
|
|
356
158
|
}
|
|
357
|
-
// CIL[END chunk_id="DataDetailPage_handledelete_1783929048"]
|
|
358
159
|
|
|
359
|
-
// CIL[BEGIN chunk_id="DataDetailPage_loadingstate_1783929048" type="render_block" identity="loadingState" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
360
|
-
// CIL[DOC-MACRO purpose="Render loading skeleton for record fetching"]
|
|
361
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle loadingState"]
|
|
362
|
-
// CIL[DOC-CONTEXT module="loadingState" layer="unknown" related_files="[]"]
|
|
363
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
364
|
-
// CIL[DOC-MICRO logic_summary="Implements loadingState" notable_decisions="[]"]
|
|
365
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
366
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
367
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
368
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
369
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
370
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
371
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
372
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
373
160
|
if (loading) {
|
|
374
161
|
return (
|
|
375
162
|
<Card>
|
|
@@ -381,22 +168,7 @@ export function DataDetailPage() {
|
|
|
381
168
|
</Card>
|
|
382
169
|
)
|
|
383
170
|
}
|
|
384
|
-
// CIL[END chunk_id="DataDetailPage_loadingstate_1783929048"]
|
|
385
171
|
|
|
386
|
-
// CIL[BEGIN chunk_id="DataDetailPage_errorstate_1783929048" type="render_block" identity="errorState" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
387
|
-
// CIL[DOC-MACRO purpose="Render error state for record loading failures"]
|
|
388
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle errorState"]
|
|
389
|
-
// CIL[DOC-CONTEXT module="errorState" layer="unknown" related_files="[]"]
|
|
390
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
391
|
-
// CIL[DOC-MICRO logic_summary="Implements errorState" notable_decisions="[]"]
|
|
392
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
393
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
394
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
395
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
396
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
397
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
398
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
399
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
400
172
|
if (error || !schema || !view) {
|
|
401
173
|
return (
|
|
402
174
|
<Card>
|
|
@@ -407,22 +179,7 @@ export function DataDetailPage() {
|
|
|
407
179
|
</Card>
|
|
408
180
|
)
|
|
409
181
|
}
|
|
410
|
-
// CIL[END chunk_id="DataDetailPage_errorstate_1783929048"]
|
|
411
182
|
|
|
412
|
-
// CIL[BEGIN chunk_id="DataDetailPage_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
413
|
-
// CIL[DOC-MACRO purpose="Render main detail page with header and form"]
|
|
414
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
|
|
415
|
-
// CIL[DOC-CONTEXT module="mainRender" layer="unknown" related_files="[]"]
|
|
416
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
417
|
-
// CIL[DOC-MICRO logic_summary="Implements mainRender" notable_decisions="[]"]
|
|
418
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
419
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
420
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
421
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
422
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
423
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
424
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
425
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
426
183
|
return (
|
|
427
184
|
<div className="space-y-6">
|
|
428
185
|
<DataDetailHeader
|
|
@@ -451,6 +208,11 @@ export function DataDetailPage() {
|
|
|
451
208
|
/>
|
|
452
209
|
</div>
|
|
453
210
|
)
|
|
454
|
-
// CIL[END chunk_id="DataDetailPage_mainrender_1783929048"]
|
|
455
211
|
}
|
|
456
|
-
// CIL[
|
|
212
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a detail/edit page for a runtime entity record using its design schema and the useEntityRecord hook.'; No verified external callers; imports: .framework/src/hooks/useEntityRecord.ts,.framework/src/components/runtime/DataDetailHeader.tsx,.framework/src/components/runtime/SchemaDetailForm.tsx"]
|
|
213
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
214
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
215
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
216
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
217
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
218
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataDetailPage.tsx:datadetailpage:function"]
|
|
@@ -1,26 +1,37 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataFilters.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Provides a filter UI component for entity data"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render filter controls for search, enum, and boolean fields"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="runtime" layer="components" related_files=".framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/types/types.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="filter configuration and current values" outputs="controlled filter values" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Header for DataFilters component module" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
|
-
// CIL[BEGIN chunk_id="DataFilters_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
|
|
4
|
-
// CIL[DOC-MACRO purpose="Import dependencies and define filter component types"]
|
|
5
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data filters"]
|
|
6
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
7
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
|
|
8
|
-
// CIL[DOC-MICRO logic_summary="Imports EntityFilter type, UI components for filters" 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, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/IntegrationsPage.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 { EntityFilter } from '../../types/types'
|
|
19
14
|
import { Card, CardContent } from '../ui/card'
|
|
20
15
|
import { Input } from '../ui/input'
|
|
21
16
|
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select'
|
|
22
17
|
import { Button } from '../ui/button'
|
|
23
18
|
import { Label } from '../ui/label'
|
|
19
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provides a filter UI component for entity data'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
20
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
21
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
22
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
23
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
24
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataFilters.tsx:module_header:module_header"]
|
|
26
|
+
|
|
27
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataFilters.tsx:datafiltersprops:interface" type="interface" identity="datafiltersprops" parent="~/.framework/src/components/runtime/DataFilters.tsx:module_header:module_header"]
|
|
28
|
+
// CIL[DOC-MACRO purpose="Defines the props interface for DataFilters"]
|
|
29
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare the expected props for filter rendering and state management"]
|
|
30
|
+
// CIL[DOC-CONTEXT module="runtime" layer="components" related_files=".framework/src/components/runtime/DataFilters.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/types/types.ts"]
|
|
31
|
+
// CIL[DOC-CONTRACT inputs="filters, values, onChange, onClear" outputs="TypeScript interface" errors="none" side_effects="none"]
|
|
32
|
+
// CIL[DOC-MICRO logic_summary="Props interface for DataFilters component" notable_decisions="[]"]
|
|
33
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
34
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
24
35
|
|
|
25
36
|
interface DataFiltersProps {
|
|
26
37
|
filters: EntityFilter[]
|
|
@@ -28,72 +39,31 @@ interface DataFiltersProps {
|
|
|
28
39
|
onChange: (values: Record<string, any>) => void
|
|
29
40
|
onClear: () => void
|
|
30
41
|
}
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-
|
|
35
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
36
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
|
|
37
|
-
// CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
|
|
38
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
39
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
40
|
-
// 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/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
41
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
42
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
43
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the props interface for DataFilters'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
44
46
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
45
47
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// CIL[
|
|
50
|
-
// CIL[DOC-
|
|
51
|
-
// CIL[DOC-
|
|
52
|
-
// CIL[DOC-
|
|
53
|
-
// CIL[DOC-
|
|
48
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataFilters.tsx:datafiltersprops:interface"]
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/runtime/DataFilters.tsx:datafilters:function" type="function" identity="datafilters" parent="~/.framework/src/components/runtime/DataFilters.tsx:module_header:module_header"]
|
|
52
|
+
// CIL[DOC-MACRO purpose="Renders entity filter controls"]
|
|
53
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render search, enum, and boolean filters and propagate changes"]
|
|
54
|
+
// CIL[DOC-CONTEXT module="runtime" layer="components" related_files=".framework/src/components/runtime/DataFilters.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/types/types.ts"]
|
|
55
|
+
// CIL[DOC-CONTRACT inputs="filters, values, onChange, onClear" outputs="JSX filter UI" errors="none" side_effects="onChange callbacks"]
|
|
56
|
+
// CIL[DOC-MICRO logic_summary="Renders filter inputs and a clear button" notable_decisions="[]"]
|
|
57
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
54
58
|
// CIL[DOC-STABILITY stability="stable"]
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
58
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
59
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
60
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
59
|
+
|
|
60
|
+
export function DataFilters({ filters, values, onChange, onClear }: DataFiltersProps) {
|
|
61
61
|
const handleFilterChange = (key: string, value: any) => {
|
|
62
62
|
onChange({ ...values, [key]: value })
|
|
63
63
|
}
|
|
64
|
-
// CIL[END chunk_id="DataFilters_handlefilterchange_1783929048"]
|
|
65
64
|
|
|
66
|
-
// CIL[BEGIN chunk_id="DataFilters_hasactivefilters_1783929048" type="function" identity="hasActiveFilters" parent="DataFilters_datafilters_1783929048"]
|
|
67
|
-
// CIL[DOC-MACRO purpose="Check if any filters have active values"]
|
|
68
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle hasActiveFilters"]
|
|
69
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
|
|
70
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
71
|
-
// CIL[DOC-MICRO logic_summary="Check if any filter values are set (not empty/undefined/all)" notable_decisions="[]"]
|
|
72
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
73
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
74
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/RolesPage.tsx, .framework/migrations/025_retype_threads_messages.sql, \."]
|
|
75
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
76
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
77
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
78
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
79
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
80
65
|
const hasActiveFilters = Object.values(values).some(v => v !== undefined && v !== '' && v !== 'all')
|
|
81
|
-
// CIL[END chunk_id="DataFilters_hasactivefilters_1783929048"]
|
|
82
66
|
|
|
83
|
-
// CIL[BEGIN chunk_id="DataFilters_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataFilters_datafilters_1783929048"]
|
|
84
|
-
// CIL[DOC-MACRO purpose="Render filter UI with search, enum, and boolean inputs"]
|
|
85
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
|
|
86
|
-
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
87
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
|
|
88
|
-
// CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
|
|
89
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
90
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
91
|
-
// 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/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
92
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
93
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
94
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
95
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
96
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
97
67
|
return (
|
|
98
68
|
<Card>
|
|
99
69
|
<CardContent className="p-4">
|
|
@@ -163,6 +133,11 @@ export function DataFilters({ filters, values, onChange, onClear }: DataFiltersP
|
|
|
163
133
|
</CardContent>
|
|
164
134
|
</Card>
|
|
165
135
|
)
|
|
166
|
-
// CIL[END chunk_id="DataFilters_mainrender_1783929048"]
|
|
167
136
|
}
|
|
168
|
-
// CIL[
|
|
137
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders entity filter controls'; No verified external callers; imports: .framework/src/types/types.ts,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
138
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
139
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
140
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
141
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
142
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
143
|
+
// CIL[END stable_id="~/.framework/src/components/runtime/DataFilters.tsx:datafilters:function"]
|