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,21 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// CIL[
|
|
5
|
-
// CIL[DOC-
|
|
6
|
-
// CIL[DOC-
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and components" errors="Import failures" side_effects="Module loading"]
|
|
9
|
-
// CIL[DOC-MICRO logic_summary="Imports React, UI components, icons, and utility functions" notable_decisions="[]"]
|
|
10
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin list page component module imports and entry point."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import dependencies and declare the AdminListPage component module."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Aggregates imports for the admin list page UI: React, UI primitives, icons, local components, and utils." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
11
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
12
|
-
// CIL[DOC-AUDIENCE audience="
|
|
13
|
-
|
|
14
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
15
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
16
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
17
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
18
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="module"]
|
|
10
|
+
|
|
19
11
|
import React, { ReactNode } from 'react'
|
|
20
12
|
import { Button } from '../ui/button'
|
|
21
13
|
import { Card, CardContent } from '../ui/card'
|
|
@@ -27,21 +19,22 @@ import { LucideIcon } from 'lucide-react'
|
|
|
27
19
|
import { AdminStatsCard } from './AdminStatsCard'
|
|
28
20
|
import { PageInstructions } from './PageInstructions'
|
|
29
21
|
import { cn } from '../../lib/utils'
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-CONTEXT module="AdminListPage" layer="component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
35
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Type interface" errors="none" side_effects="none"]
|
|
36
|
-
// CIL[DOC-MICRO logic_summary="Defines props for title, stats, search, filters, content, and loading states" notable_decisions="[]"]
|
|
37
|
-
// CIL[DOC-CONFIDENCE pass="second" score="1.00" flags="none"]
|
|
38
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
40
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
41
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
42
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
22
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin list page component module imports and entry point.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.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"]
|
|
43
26
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
27
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
28
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:module_header:module_header"]
|
|
29
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface" type="interface" identity="AdminListPageProps" parent="adminlistpage:function"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Props contract for the AdminListPage component."]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the typed input surface for AdminListPage."]
|
|
32
|
+
// CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="property bag: title, description, statsCards, children, optional search/filter/loading/error/new-button fields" outputs="typed props interface" errors="none" side_effects="none"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Describes the complete prop surface for the admin list page, including stats, search, filters, loading, error, and children." notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
36
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
+
|
|
45
38
|
interface AdminListPageProps {
|
|
46
39
|
title: string
|
|
47
40
|
description: string
|
|
@@ -71,21 +64,24 @@ interface AdminListPageProps {
|
|
|
71
64
|
emptyMessage?: string
|
|
72
65
|
emptyIcon?: LucideIcon
|
|
73
66
|
}
|
|
74
|
-
// CIL[
|
|
75
|
-
// CIL[
|
|
76
|
-
// CIL[DOC-
|
|
77
|
-
// CIL[DOC-
|
|
78
|
-
// CIL[DOC-CONTEXT module="AdminListPage" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
79
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Admin list page JSX" errors="Rendering errors" side_effects="UI rendering"]
|
|
80
|
-
// CIL[DOC-MICRO logic_summary="Renders header, stats cards, search/filters, content with loading/error states" notable_decisions="['comprehensive_layout', 'loading_states']"]
|
|
81
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
82
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
83
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
84
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
85
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
86
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
67
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Props contract for the AdminListPage component.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
68
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
69
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
70
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
87
71
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
88
72
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
73
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface"]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpage:function" type="function" identity="AdminListPage" parent=""]
|
|
77
|
+
// CIL[DOC-MACRO purpose="Render a reusable admin list page with header, instructions, stats, search, filters, and content."]
|
|
78
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Compose and render the admin list page layout and its interactive controls."]
|
|
79
|
+
// CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
|
|
80
|
+
// CIL[DOC-CONTRACT inputs="AdminListPageProps" outputs="JSX.Element" errors="Error state rendered inside card" side_effects="Sets window.location.href when new button is clicked and no onNewClick handler provided"]
|
|
81
|
+
// CIL[DOC-MICRO logic_summary="Builds a vertical page layout with title/actions, optional instructional help, stats cards, search/filter bar, and a content card that shows skeleton, error, or children." notable_decisions="[]"]
|
|
82
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
83
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
84
|
+
|
|
89
85
|
export function AdminListPage({
|
|
90
86
|
title,
|
|
91
87
|
description,
|
|
@@ -215,4 +211,10 @@ export function AdminListPage({
|
|
|
215
211
|
</div>
|
|
216
212
|
)
|
|
217
213
|
}
|
|
218
|
-
// CIL[
|
|
214
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a reusable admin list page with header, instructions, stats, search, filters, and content.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
|
|
215
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
216
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
217
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
218
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
219
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
220
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpage:function"]
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Provides React, router, icons, and UI component imports for the admin sidebar module"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declares module-level imports required by AdminSidebar"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported symbols" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, react-router-dom hooks, lucide-react icons, and local sidebar/collapsible UI primitives" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
|
-
// CIL[BEGIN chunk_id="AdminSidebar_module_header_1783931090" type="module_header" identity="imports" parent="none"]
|
|
5
|
-
// CIL[DOC-MACRO purpose="Import React, routing, and UI components for admin sidebar"]
|
|
6
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Manage all external module imports for admin sidebar"]
|
|
7
|
-
// CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
8
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and icons" errors="Import failures" side_effects="Module loading"]
|
|
9
|
-
// CIL[DOC-MICRO logic_summary="Imports React, routing, Lucide icons, and sidebar UI components" notable_decisions="[]"]
|
|
10
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
11
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
12
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
13
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
14
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
15
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
16
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
17
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
18
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
19
14
|
import * as React from "react"
|
|
20
15
|
import { Link, useLocation } from "react-router-dom"
|
|
21
16
|
import {
|
|
@@ -37,6 +32,8 @@ import {
|
|
|
37
32
|
Puzzle,
|
|
38
33
|
Shield,
|
|
39
34
|
MessageSquare,
|
|
35
|
+
GitBranch,
|
|
36
|
+
Lightbulb,
|
|
40
37
|
Key,
|
|
41
38
|
Truck,
|
|
42
39
|
TestTube,
|
|
@@ -63,21 +60,22 @@ import {
|
|
|
63
60
|
} from "../ui/sidebar"
|
|
64
61
|
import { Button } from "../ui/button"
|
|
65
62
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../ui/collapsible"
|
|
66
|
-
// CIL[
|
|
67
|
-
// CIL[
|
|
68
|
-
// CIL[DOC-
|
|
69
|
-
// CIL[DOC-
|
|
70
|
-
// CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
71
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Navigation data structure" errors="none" side_effects="none"]
|
|
72
|
-
// CIL[DOC-MICRO logic_summary="Organizes admin sections: configs, access, runtime, observability, testing" notable_decisions="['section_organization', 'icon_mapping']"]
|
|
73
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
74
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
75
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
76
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
77
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
78
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
63
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provides React, router, icons, and UI component imports for the admin sidebar module'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
64
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
65
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
66
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
79
67
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
80
68
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
69
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header"]
|
|
70
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationsections:constant" type="constant" identity="navigationSections" parent="none"]
|
|
71
|
+
// CIL[DOC-MACRO purpose="Defines the static navigation section structure for the admin sidebar"]
|
|
72
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Maintain the ordered list of admin navigation sections, routes, and optional nested children"]
|
|
73
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
|
|
74
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="navigationSections: NavigationSection[]" errors="none" side_effects="none"]
|
|
75
|
+
// CIL[DOC-MICRO logic_summary="Static array of navigation sections with title, icon, optional children, and route URLs" notable_decisions="[]"]
|
|
76
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
77
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
78
|
+
|
|
81
79
|
const navigationSections = [
|
|
82
80
|
{
|
|
83
81
|
title: "Configs",
|
|
@@ -107,6 +105,12 @@ const navigationSections = [
|
|
|
107
105
|
{ title: "Invites", url: "/spine-framework/admin/access/invites", icon: UserPlus },
|
|
108
106
|
]
|
|
109
107
|
},
|
|
108
|
+
{
|
|
109
|
+
title: "Security",
|
|
110
|
+
items: [
|
|
111
|
+
{ title: "Flagged Actors", url: "/spine-framework/admin/security", icon: Shield },
|
|
112
|
+
]
|
|
113
|
+
},
|
|
110
114
|
{
|
|
111
115
|
title: "Runtime",
|
|
112
116
|
items: [
|
|
@@ -148,25 +152,28 @@ const navigationSections = [
|
|
|
148
152
|
items: [
|
|
149
153
|
{ title: "Projects", url: "/spine-framework/admin/cil", icon: Brain },
|
|
150
154
|
{ title: "Search", url: "/spine-framework/admin/cil/search", icon: FileSearch },
|
|
155
|
+
{ title: "Versions", url: "/spine-framework/admin/cil/versions", icon: GitBranch },
|
|
156
|
+
{ title: "Suggestions", url: "/spine-framework/admin/cil/suggestions", icon: Lightbulb },
|
|
151
157
|
{ title: "Agent", url: "/spine-framework/admin/cil/agent", icon: MessageSquare },
|
|
152
158
|
]
|
|
153
159
|
}
|
|
154
160
|
]
|
|
155
|
-
// CIL[
|
|
156
|
-
// CIL[
|
|
157
|
-
// CIL[DOC-
|
|
158
|
-
// CIL[DOC-
|
|
159
|
-
// CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
160
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Admin sidebar JSX" errors="none" side_effects="Navigation rendering"]
|
|
161
|
-
// CIL[DOC-MICRO logic_summary="Handles active state, renders brand header, navigation sections, footer" notable_decisions="['active_link_detection', 'brand_header']"]
|
|
162
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
163
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
164
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
165
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
166
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
167
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
161
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the static navigation section structure for the admin sidebar'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
162
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
163
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
164
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
168
165
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
169
166
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
167
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationsections:constant"]
|
|
168
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:adminsidebar:function" type="function" identity="AdminSidebar" parent="none"]
|
|
169
|
+
// CIL[DOC-MACRO purpose="Renders the admin sidebar with navigation sections and active route highlighting"]
|
|
170
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render the admin sidebar UI and compute active route state from useLocation"]
|
|
171
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
|
|
172
|
+
// CIL[DOC-CONTRACT inputs="props: React.ComponentProps<typeof Sidebar>" outputs="JSX.Element" errors="none" side_effects="Reads useLocation and renders react-router Link components"]
|
|
173
|
+
// CIL[DOC-MICRO logic_summary="Uses useLocation to determine active routes; maps navigationSections into collapsible sidebar groups and nested items" notable_decisions="[]"]
|
|
174
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
175
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
176
|
+
|
|
170
177
|
export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
|
|
171
178
|
const location = useLocation()
|
|
172
179
|
|
|
@@ -181,12 +188,9 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
|
|
|
181
188
|
<SidebarMenuItem>
|
|
182
189
|
<SidebarMenuButton size="lg" asChild>
|
|
183
190
|
<Link to="/spine-framework/admin/configs/types">
|
|
184
|
-
<
|
|
185
|
-
<span className="text-sm font-bold">S</span>
|
|
186
|
-
</div>
|
|
191
|
+
<img src="/spine-logo.svg" alt="Spine Framework" className="h-8 w-auto shrink-0" />
|
|
187
192
|
<div className="flex flex-col gap-0.5 leading-none">
|
|
188
|
-
<span className="font-semibold">Spine</span>
|
|
189
|
-
<span className="text-xs text-muted-foreground">Framework</span>
|
|
193
|
+
<span className="font-semibold whitespace-nowrap">Spine Framework</span>
|
|
190
194
|
</div>
|
|
191
195
|
</Link>
|
|
192
196
|
</SidebarMenuButton>
|
|
@@ -282,4 +286,10 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
|
|
|
282
286
|
</Sidebar>
|
|
283
287
|
)
|
|
284
288
|
}
|
|
285
|
-
// CIL[
|
|
289
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders the admin sidebar with navigation sections and active route highlighting'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
290
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
291
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
292
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
293
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
294
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
295
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:adminsidebar:function"]
|
|
@@ -1,60 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// CIL[
|
|
5
|
-
// CIL[DOC-
|
|
6
|
-
// CIL[DOC-
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and types" errors="Import failures" side_effects="Module loading"]
|
|
9
|
-
// CIL[DOC-MICRO logic_summary="Imports React, Lucide icon type, and card UI components" notable_decisions="[]"]
|
|
10
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Module header for the AdminStatsCard component: imports React, LucideIcon, and Card/CardContent UI primitives"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare module-level imports required by the AdminStatsCard component"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/ui/card.tsx"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, LucideIcon type, and shadcn Card/CardContent components" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
11
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
12
|
-
// CIL[DOC-AUDIENCE audience="
|
|
13
|
-
|
|
14
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
15
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
16
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
17
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
18
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="admin developers"]
|
|
10
|
+
|
|
19
11
|
import React from 'react'
|
|
20
12
|
import { LucideIcon } from 'lucide-react'
|
|
21
13
|
import { Card, CardContent } from '../ui/card'
|
|
22
|
-
// CIL[
|
|
23
|
-
// CIL[
|
|
24
|
-
// CIL[DOC-
|
|
25
|
-
// CIL[DOC-
|
|
26
|
-
// CIL[DOC-CONTEXT module="AdminStatsCard" layer="component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
27
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Type interface" errors="none" side_effects="none"]
|
|
28
|
-
// CIL[DOC-MICRO logic_summary="Defines title, value, icon, and optional icon color props" notable_decisions="[]"]
|
|
29
|
-
// CIL[DOC-CONFIDENCE pass="second" score="1.00" flags="none"]
|
|
30
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
31
|
-
// CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
32
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
33
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
34
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
14
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Module header for the AdminStatsCard component: imports React, LucideIcon, and Card/CardContent UI primitives'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
|
|
15
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
16
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
17
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
35
18
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
36
19
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:module_header:module_header"]
|
|
21
|
+
|
|
22
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCardProps:interface" type="interface" identity="AdminStatsCardProps" parent="AdminStatsCard"]
|
|
23
|
+
// CIL[DOC-MACRO purpose="Props interface for the AdminStatsCard stat tile component"]
|
|
24
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the typed contract consumed by AdminStatsCard"]
|
|
25
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/ui/card.tsx"]
|
|
26
|
+
// CIL[DOC-CONTRACT inputs="title: string; value: string | number; icon: LucideIcon; iconColor?: string" outputs="interface type" errors="none" side_effects="none"]
|
|
27
|
+
// CIL[DOC-MICRO logic_summary="Optional iconColor defaults to text-primary" notable_decisions="[]"]
|
|
28
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
29
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
30
|
+
|
|
37
31
|
interface AdminStatsCardProps {
|
|
38
32
|
title: string
|
|
39
33
|
value: string | number
|
|
40
34
|
icon: LucideIcon
|
|
41
35
|
iconColor?: string
|
|
42
36
|
}
|
|
43
|
-
// CIL[
|
|
44
|
-
// CIL[
|
|
45
|
-
// CIL[DOC-
|
|
46
|
-
// CIL[DOC-
|
|
47
|
-
// CIL[DOC-CONTEXT module="AdminStatsCard" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
48
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Stat card JSX" errors="none" side_effects="UI rendering"]
|
|
49
|
-
// CIL[DOC-MICRO logic_summary="Renders card with icon, title, and value in horizontal layout" notable_decisions="['default_icon_color', 'horizontal_layout']"]
|
|
50
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
51
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
52
|
-
// CIL[DOC-VECTOR type="context" content="Layer: 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, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
53
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
54
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
55
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Props interface for the AdminStatsCard stat tile component'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
|
|
38
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
39
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
40
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
56
41
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
57
42
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
43
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCardProps:interface"]
|
|
44
|
+
|
|
45
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCard:function" type="function" identity="AdminStatsCard" parent=""]
|
|
46
|
+
// CIL[DOC-MACRO purpose="Renders an admin dashboard stat card with icon, title, and value"]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render a small stat card tile for admin dashboards"]
|
|
48
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/ui/card.tsx"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="title: string; value: string | number; icon: LucideIcon; iconColor?: string (default 'text-primary')" outputs="JSX Card component" errors="none" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Wraps title and value in a Card with an icon, applying optional icon color class" notable_decisions="[]"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
53
|
+
|
|
58
54
|
export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-primary" }: AdminStatsCardProps) {
|
|
59
55
|
return (
|
|
60
56
|
<Card>
|
|
@@ -78,4 +74,10 @@ export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-pri
|
|
|
78
74
|
</Card>
|
|
79
75
|
)
|
|
80
76
|
}
|
|
81
|
-
// CIL[
|
|
77
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders an admin dashboard stat card with icon, title, and value'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
|
|
78
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
79
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
80
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
81
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
82
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
83
|
+
// CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCard:function"]
|
|
@@ -1,19 +1,107 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:module_header:module_header"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Top-level module header for the PageInstructions React component."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare imports, exports, and the public surface of this module."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="module exports" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Aggregates imports and exports for the collapsible page instructions UI 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="module authors and consumers"]
|
|
10
|
+
|
|
1
11
|
import * as React from 'react'
|
|
2
12
|
import { ChevronDown } from 'lucide-react'
|
|
3
13
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible'
|
|
4
14
|
import { Card, CardContent } from '../ui/card'
|
|
5
15
|
|
|
16
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Top-level module header for the PageInstructions React component.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
|
|
17
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
18
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
19
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
20
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
22
|
+
// CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:module_header:module_header"]
|
|
23
|
+
|
|
24
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:cleancilmarkers:function"]
|
|
25
|
+
// CIL[DOC-MACRO purpose="Remove CIL marker comments from rendered text nodes."]
|
|
26
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Sanitize raw content before rendering so CIL tags do not leak into the UI."]
|
|
27
|
+
// CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
28
|
+
// CIL[DOC-CONTRACT inputs="content: React.ReactNode" outputs="React.ReactNode with CIL comment lines removed" errors="none" side_effects="none"]
|
|
29
|
+
// CIL[DOC-MICRO logic_summary="Returns non-string content unchanged; for strings, removes lines starting with // CIL[, collapses excess blank lines, and trims." notable_decisions="[]"]
|
|
30
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
31
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
32
|
+
|
|
33
|
+
function cleanCilMarkers(content: React.ReactNode): React.ReactNode {
|
|
34
|
+
if (typeof content !== 'string') return content
|
|
35
|
+
return content
|
|
36
|
+
.split('\n')
|
|
37
|
+
.filter(line => !line.trim().startsWith('// CIL['))
|
|
38
|
+
.join('\n')
|
|
39
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
40
|
+
.trim()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Remove CIL marker comments from rendered text nodes.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
|
|
44
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
45
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
46
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
47
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
48
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
49
|
+
// CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:cleancilmarkers:function"]
|
|
50
|
+
|
|
51
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionssection:interface"]
|
|
52
|
+
// CIL[DOC-MACRO purpose="Type contract for a single collapsible section inside PageInstructions."]
|
|
53
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the title and content shape expected by the PageInstructions component."]
|
|
54
|
+
// CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
55
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
|
|
56
|
+
// CIL[DOC-MICRO logic_summary="Declares a section with a string title and arbitrary React content." notable_decisions="[]"]
|
|
57
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
58
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
59
|
+
|
|
6
60
|
export interface PageInstructionsSection {
|
|
7
61
|
title: string
|
|
8
62
|
content: React.ReactNode
|
|
9
63
|
}
|
|
10
64
|
|
|
65
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Type contract for a single collapsible section inside PageInstructions.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
|
|
66
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
67
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
68
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
69
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
70
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
71
|
+
// CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionssection:interface"]
|
|
72
|
+
|
|
73
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionsprops:interface"]
|
|
74
|
+
// CIL[DOC-MACRO purpose="Props interface for the PageInstructions component."]
|
|
75
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Document the public configuration options accepted by PageInstructions."]
|
|
76
|
+
// CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
77
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
|
|
78
|
+
// CIL[DOC-MICRO logic_summary="Optional title, description node, and an array of sections." notable_decisions="[]"]
|
|
79
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
80
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
81
|
+
|
|
11
82
|
export interface PageInstructionsProps {
|
|
12
83
|
title?: string
|
|
13
84
|
description?: React.ReactNode
|
|
14
85
|
sections?: PageInstructionsSection[]
|
|
15
86
|
}
|
|
16
87
|
|
|
88
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Props interface for the PageInstructions component.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
|
|
89
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
90
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
91
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
92
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
94
|
+
// CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionsprops:interface"]
|
|
95
|
+
|
|
96
|
+
// CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructions:function"]
|
|
97
|
+
// CIL[DOC-MACRO purpose="Render a collapsible card containing optional description and instruction sections."]
|
|
98
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display page-level help or instructions in a collapsible UI widget."]
|
|
99
|
+
// CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
|
|
100
|
+
// CIL[DOC-CONTRACT inputs="props: PageInstructionsProps" outputs="JSX element or null" errors="none" side_effects="renders UI"]
|
|
101
|
+
// CIL[DOC-MICRO logic_summary="Returns null when no content is provided; otherwise renders a Card with a Collapsible trigger and filtered description/section content." notable_decisions="[]"]
|
|
102
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
103
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
104
|
+
|
|
17
105
|
export function PageInstructions({
|
|
18
106
|
title = 'Page instructions',
|
|
19
107
|
description,
|
|
@@ -30,13 +118,13 @@ export function PageInstructions({
|
|
|
30
118
|
<ChevronDown className="h-4 w-4 transition-transform group-data-[state=open]:rotate-180" />
|
|
31
119
|
</CollapsibleTrigger>
|
|
32
120
|
<CollapsibleContent className="space-y-4 pt-4">
|
|
33
|
-
{description && <div className="text-sm text-slate-600">{description}</div>}
|
|
121
|
+
{description && <div className="text-sm text-slate-600">{cleanCilMarkers(description)}</div>}
|
|
34
122
|
{sections && sections.length > 0 && (
|
|
35
123
|
<div className="space-y-3">
|
|
36
124
|
{sections.map((section, i) => (
|
|
37
125
|
<div key={i}>
|
|
38
126
|
<div className="text-sm font-semibold text-slate-700">{section.title}</div>
|
|
39
|
-
<div className="mt-1 text-sm text-slate-600">{section.content}</div>
|
|
127
|
+
<div className="mt-1 text-sm text-slate-600">{cleanCilMarkers(section.content)}</div>
|
|
40
128
|
</div>
|
|
41
129
|
))}
|
|
42
130
|
</div>
|
|
@@ -47,3 +135,11 @@ export function PageInstructions({
|
|
|
47
135
|
</Card>
|
|
48
136
|
)
|
|
49
137
|
}
|
|
138
|
+
|
|
139
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render a collapsible card containing optional description and instruction sections.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
|
|
140
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
141
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
142
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
143
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
144
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
145
|
+
// CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructions:function"]
|