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,23 +1,18 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Admin prompt config list page module header"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Imports React dependencies and admin UI components for prompt configuration management"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin-prompt-configs" layer="pages" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, UI icons, components, hooks, and utilities for the prompt configs page" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="ai-rag"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
14
|
|
|
5
15
|
|
|
6
|
-
// CIL[BEGIN chunk_id="promptconfigspage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
|
|
7
|
-
// CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
|
|
8
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for PromptConfigsPage component"]
|
|
9
|
-
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
10
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
11
|
-
// CIL[DOC-MICRO logic_summary="Imports React, icons, UI components, and utility functions" notable_decisions="[]"]
|
|
12
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
13
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
16
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
16
|
import React, { useState } from 'react'
|
|
22
17
|
import { Plus, FileText, CheckCircle, Star, Cpu, MessageSquare } from 'lucide-react';
|
|
23
18
|
import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
|
|
@@ -27,21 +22,23 @@ import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
|
|
|
27
22
|
import { formatDateTime } from '../../lib/utils'
|
|
28
23
|
import { useApi } from '../../hooks/useApi'
|
|
29
24
|
import { apiFetch } from '../../lib/api'
|
|
30
|
-
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-
|
|
35
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="PromptConfig interface" errors="Type errors" side_effects="Type system"]
|
|
36
|
-
// CIL[DOC-MICRO logic_summary="Defines structure for AI prompt configurations with model settings" notable_decisions="[]"]
|
|
37
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
38
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
39
|
-
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, \."]
|
|
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."]
|
|
25
|
+
|
|
26
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin prompt config list page module header'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
|
|
27
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
28
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
29
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
43
30
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
31
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
32
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:module_header:module_header"]
|
|
33
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfig:interface" type="interface" identity="PromptConfig" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
|
|
34
|
+
// CIL[DOC-MACRO purpose="PromptConfig TypeScript interface definition"]
|
|
35
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declares the shape of prompt configuration records used by the admin page"]
|
|
36
|
+
// CIL[DOC-CONTEXT module="admin-prompt-configs" layer="types" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/PromptConfigsPage.tsx"]
|
|
37
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="PromptConfig type" errors="none" side_effects="none"]
|
|
38
|
+
// CIL[DOC-MICRO logic_summary="Defines optional and required fields for prompt config records including model settings, status, and audit timestamps" notable_decisions="[]"]
|
|
39
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
40
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
41
|
+
|
|
45
42
|
interface PromptConfig {
|
|
46
43
|
id: string
|
|
47
44
|
name: string
|
|
@@ -61,21 +58,23 @@ interface PromptConfig {
|
|
|
61
58
|
created_at: string
|
|
62
59
|
updated_at: string
|
|
63
60
|
}
|
|
64
|
-
// CIL[
|
|
65
|
-
// CIL[
|
|
66
|
-
// CIL[DOC-
|
|
67
|
-
// CIL[DOC-
|
|
68
|
-
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\"]"]
|
|
69
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
70
|
-
// CIL[DOC-MICRO logic_summary="Renders AdminListPage with stats, filters, and prompt config table" notable_decisions="[]"]
|
|
71
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
72
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
73
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx."]
|
|
74
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
75
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
76
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
61
|
+
// CIL[DOC-VECTOR type="context" content="purpose='PromptConfig TypeScript interface definition'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
|
|
62
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
63
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
64
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
77
65
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
78
66
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
67
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfig:interface"]
|
|
68
|
+
|
|
69
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfigsPage:component" type="component" identity="PromptConfigsPage" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
|
|
70
|
+
// CIL[DOC-MACRO purpose="Renders the admin prompt configurations list page"]
|
|
71
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Loads prompt configs, applies filters and sorting, and renders an AdminListPage with stats and table"]
|
|
72
|
+
// CIL[DOC-CONTEXT module="admin-prompt-configs" layer="pages" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/PromptConfigsPage.tsx"]
|
|
73
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="useApi error if API fetch fails" side_effects="window navigation on row click"]
|
|
74
|
+
// CIL[DOC-MICRO logic_summary="Fetches prompt configs, filters by search, status, and type, sorts by selected key, and renders stat cards and sortable table rows" notable_decisions="[]"]
|
|
75
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
76
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
77
|
+
|
|
79
78
|
export function PromptConfigsPage() {
|
|
80
79
|
const [searchTerm, setSearchTerm] = useState('')
|
|
81
80
|
const [selectedStatus, setSelectedStatus] = useState('all')
|
|
@@ -83,20 +82,6 @@ export function PromptConfigsPage() {
|
|
|
83
82
|
const [sortKey, setSortKey] = useState('name')
|
|
84
83
|
const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
|
|
85
84
|
|
|
86
|
-
// CIL[BEGIN chunk_id="promptconfigspage_hooks_1783666257" type="hooks" identity="useApi" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
87
|
-
// CIL[DOC-MACRO purpose="Fetch prompt configurations from API"]
|
|
88
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
|
|
89
|
-
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="data" related_files="[\"\\\"]"]
|
|
90
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="prompt configs array" errors="API errors" side_effects="HTTP requests"]
|
|
91
|
-
// CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch prompt configurations list" notable_decisions="[]"]
|
|
92
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
93
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
94
|
-
// CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
95
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
96
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
97
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
98
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
99
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
100
85
|
const { data: promptConfigs, loading, error, refetch } = useApi<PromptConfig[]>(
|
|
101
86
|
async () => {
|
|
102
87
|
const response = await apiFetch('/api/prompt-configs?action=list')
|
|
@@ -106,22 +91,7 @@ export function PromptConfigsPage() {
|
|
|
106
91
|
},
|
|
107
92
|
{ immediate: true }
|
|
108
93
|
)
|
|
109
|
-
// CIL[END chunk_id="promptconfigspage_hooks_1783666257"]
|
|
110
94
|
|
|
111
|
-
// CIL[BEGIN chunk_id="promptconfigspage_filters_1783666257" type="filter_logic" identity="filteredPromptConfigs" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
112
|
-
// CIL[DOC-MACRO purpose="Filter and sort prompt configurations"]
|
|
113
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle filteredPromptConfigs"]
|
|
114
|
-
// CIL[DOC-CONTEXT module="PromptConfigsPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
115
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="filtered configs" errors="none" side_effects="none"]
|
|
116
|
-
// CIL[DOC-MICRO logic_summary="Filters configs by search, status, and type; extracts unique types" notable_decisions="[]"]
|
|
117
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
118
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
119
|
-
// CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
120
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
121
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
122
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
123
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
124
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
125
95
|
const filteredPromptConfigs = (promptConfigs || []).filter(config => {
|
|
126
96
|
const matchesSearch = config.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
127
97
|
config.slug.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
@@ -134,22 +104,7 @@ export function PromptConfigsPage() {
|
|
|
134
104
|
})
|
|
135
105
|
|
|
136
106
|
const promptTypes = Array.from(new Set((promptConfigs || []).map(c => c.prompt_type).filter(Boolean)))
|
|
137
|
-
// CIL[END chunk_id="promptconfigspage_filters_1783666257"]
|
|
138
107
|
|
|
139
|
-
// CIL[BEGIN chunk_id="promptconfigspage_handlers_1783666257" type="event_handlers" identity="handleSort" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
140
|
-
// CIL[DOC-MACRO purpose="Handle sorting and row click events"]
|
|
141
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSort"]
|
|
142
|
-
// CIL[DOC-CONTEXT module="handleSort" layer="unknown" related_files="[]"]
|
|
143
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
144
|
-
// CIL[DOC-MICRO logic_summary="Implements handleSort" notable_decisions="[]"]
|
|
145
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
146
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
147
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
148
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
149
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
150
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
151
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
152
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
153
108
|
const handleSort = (key: string) => {
|
|
154
109
|
if (sortKey === key) {
|
|
155
110
|
setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
|
|
@@ -179,22 +134,7 @@ export function PromptConfigsPage() {
|
|
|
179
134
|
|
|
180
135
|
return 0
|
|
181
136
|
})
|
|
182
|
-
// CIL[END chunk_id="promptconfigspage_handlers_1783666257"]
|
|
183
137
|
|
|
184
|
-
// CIL[BEGIN chunk_id="promptconfigspage_stats_1783666257" type="stats_config" identity="statsCards" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
185
|
-
// CIL[DOC-MACRO purpose="Configure statistics cards and filter options"]
|
|
186
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle statsCards"]
|
|
187
|
-
// CIL[DOC-CONTEXT module="statsCards" layer="unknown" related_files="[]"]
|
|
188
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
189
|
-
// CIL[DOC-MICRO logic_summary="Implements statsCards" notable_decisions="[]"]
|
|
190
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
191
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
192
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
193
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
194
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
195
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
196
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
197
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
198
138
|
const statsCards = [
|
|
199
139
|
{
|
|
200
140
|
title: 'Total Prompts',
|
|
@@ -247,22 +187,7 @@ export function PromptConfigsPage() {
|
|
|
247
187
|
onChange: (v: string) => setSelectedType(v)
|
|
248
188
|
}
|
|
249
189
|
]
|
|
250
|
-
// CIL[END chunk_id="promptconfigspage_stats_1783666257"]
|
|
251
190
|
|
|
252
|
-
// CIL[BEGIN chunk_id="promptconfigspage_render_1783666257" type="render_logic" identity="return" parent="promptconfigspage_function_promptconfigspage_1783666257"]
|
|
253
|
-
// CIL[DOC-MACRO purpose="Render the complete prompt configs interface"]
|
|
254
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
255
|
-
// CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
|
|
256
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
257
|
-
// CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
|
|
258
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
259
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
260
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
261
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
262
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
263
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
264
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
265
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
266
191
|
return (
|
|
267
192
|
<AdminListPage
|
|
268
193
|
title="Prompt Configs"
|
|
@@ -397,5 +322,10 @@ export function PromptConfigsPage() {
|
|
|
397
322
|
</AdminListPage>
|
|
398
323
|
)
|
|
399
324
|
}
|
|
400
|
-
// CIL[
|
|
401
|
-
// CIL[
|
|
325
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders the admin prompt configurations list page'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
|
|
326
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
327
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
328
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
329
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
330
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
331
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfigsPage:component"]
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Declares and re-exports UI component imports for the admin ProperlyDesignedPage module"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dependency import block for admin dashboard page components and icons"]
|
|
4
|
+
// CIL[DOC-CONTEXT module=".framework/src/pages/admin/ProperlyDesignedPage.tsx" layer="pages" related_files=".framework/src/components/ui/accordion.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/components/ui/dropdown-menu.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/separator.tsx,.framework/src/components/ui/switch.tsx,.framework/src/components/ui/tabs.tsx"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported React, UI components, and icon symbols" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React hooks, local UI primitives, Radix UI components, and Lucide icons required by the dashboard page" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="maintainers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
14
|
|
|
5
|
-
// CIL[BEGIN chunk_id="properlydesignedpage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
|
|
6
|
-
// CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
|
|
7
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for ProperlyDesignedPage component"]
|
|
8
|
-
// CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
9
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
10
|
-
// CIL[DOC-MICRO logic_summary="Imports React, comprehensive UI components, icons, and utility functions" notable_decisions="[]"]
|
|
11
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
12
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
13
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
14
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
15
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
16
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
17
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
18
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
15
|
import { useState } from 'react'
|
|
21
16
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
|
|
22
17
|
import { Button } from '../../components/ui/button'
|
|
@@ -86,41 +81,28 @@ import {
|
|
|
86
81
|
TrendingUp,
|
|
87
82
|
Activity
|
|
88
83
|
} from 'lucide-react'
|
|
89
|
-
|
|
90
|
-
// CIL[
|
|
91
|
-
// CIL[DOC-
|
|
92
|
-
// CIL[DOC-
|
|
93
|
-
// CIL[DOC-
|
|
94
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
95
|
-
// CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
|
|
96
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
97
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
98
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
99
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
100
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
101
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
84
|
+
|
|
85
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Declares and re-exports UI component imports for the admin ProperlyDesignedPage module'; No verified external callers; imports: .framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
86
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
87
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
88
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
102
89
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
103
90
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
91
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:module_header:module_header"]
|
|
92
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:ProperlyDesignedPage:component" type="component" identity="ProperlyDesignedPage" parent="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
|
|
93
|
+
// CIL[DOC-MACRO purpose="Renders the admin dashboard overview page with tabs, stats, search, and settings UI"]
|
|
94
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display dashboard metrics, recent activity, reports, analytics placeholder, and user preferences"]
|
|
95
|
+
// CIL[DOC-CONTEXT module=".framework/src/pages/admin/ProperlyDesignedPage.tsx" layer="pages" related_files=".framework/src/components/ui/accordion.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/components/ui/dropdown-menu.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/separator.tsx,.framework/src/components/ui/switch.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
|
|
96
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element dashboard page" errors="none" side_effects="sets local React state for tab, search, notifications, and auto-save"]
|
|
97
|
+
// CIL[DOC-MICRO logic_summary="Implements a stateful React component with tabbed navigation, stat cards, search/filter bar, recent activity list, reports list, analytics placeholder, and settings toggles/forms" notable_decisions="[]"]
|
|
98
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
99
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
104
100
|
export function ProperlyDesignedPage() {
|
|
105
101
|
const [selectedTab, setSelectedTab] = useState('overview')
|
|
106
102
|
const [searchQuery, setSearchQuery] = useState('')
|
|
107
103
|
const [notifications, setNotifications] = useState(true)
|
|
108
104
|
const [autoSave, setAutoSave] = useState(true)
|
|
109
105
|
|
|
110
|
-
// CIL[BEGIN chunk_id="properlydesignedpage_render_1783666257" type="render_logic" identity="return" parent="properlydesignedpage_function_properlydesignedpage_1783666257"]
|
|
111
|
-
// CIL[DOC-MACRO purpose="Render the complete dashboard interface"]
|
|
112
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
113
|
-
// CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
114
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
115
|
-
// CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
|
|
116
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
117
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
118
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
119
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
120
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
121
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
122
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
123
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
124
106
|
return (
|
|
125
107
|
<div className="container mx-auto p-6 space-y-6">
|
|
126
108
|
{/* Header Section */}
|
|
@@ -469,5 +451,10 @@ export function ProperlyDesignedPage() {
|
|
|
469
451
|
</div>
|
|
470
452
|
)
|
|
471
453
|
}
|
|
472
|
-
// CIL[
|
|
473
|
-
// CIL[
|
|
454
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders the admin dashboard overview page with tabs, stats, search, and settings UI'; No verified external callers; imports: .framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
|
|
455
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
456
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
457
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
458
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
459
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
460
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:ProperlyDesignedPage:component"]
|
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// CIL[
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for RoleDetailPage component"]
|
|
9
|
-
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
10
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
|
|
11
|
-
// CIL[DOC-MICRO logic_summary="Imports React, router, UI components, icons, and utility functions" notable_decisions="[]"]
|
|
12
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Provides module-level imports and context for the admin role detail page."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load React, routing, UI primitives, hooks, and utilities used by RoleDetailPage."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports dependencies for the role detail page." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
13
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
-
// CIL[DOC-AUDIENCE audience="
|
|
15
|
-
|
|
16
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="admin-frontend"]
|
|
10
|
+
|
|
21
11
|
import { useState, useEffect } from 'react'
|
|
22
12
|
import { useParams, useNavigate } from 'react-router-dom'
|
|
23
13
|
import { Button } from '../../components/ui/button'
|
|
@@ -33,21 +23,22 @@ import { useApi } from '../../hooks/useApi'
|
|
|
33
23
|
import { apiFetch } from '../../lib/api'
|
|
34
24
|
import { formatDateTime } from '../../lib/utils'
|
|
35
25
|
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
36
|
-
|
|
37
|
-
// CIL[
|
|
38
|
-
// CIL[DOC-
|
|
39
|
-
// CIL[DOC-
|
|
40
|
-
// CIL[DOC-
|
|
41
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Role interface" errors="Type errors" side_effects="Type system"]
|
|
42
|
-
// CIL[DOC-MICRO logic_summary="Defines structure for role configuration with permissions and metadata" notable_decisions="[]"]
|
|
43
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
44
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
45
|
-
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
46
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
47
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
48
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
26
|
+
|
|
27
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provides module-level imports and context for the admin role detail page.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
|
|
28
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
29
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
30
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
49
31
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
32
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
33
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:module_header:module_header"]
|
|
34
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:Role:interface" type="interface" identity="Role" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
|
|
35
|
+
// CIL[DOC-MACRO purpose="Defines the TypeScript shape of a Role record used in the admin UI."]
|
|
36
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a typed contract for role data, permissions, and metadata."]
|
|
37
|
+
// CIL[DOC-CONTEXT module="admin" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/RoleDetailPage.tsx"]
|
|
38
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Role type definition" errors="none" side_effects="none"]
|
|
39
|
+
// CIL[DOC-MICRO logic_summary="Declares the Role interface fields consumed by the detail page and API." notable_decisions="[]"]
|
|
40
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
41
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
51
42
|
interface Role {
|
|
52
43
|
id: string
|
|
53
44
|
name: string
|
|
@@ -60,21 +51,22 @@ interface Role {
|
|
|
60
51
|
created_at: string
|
|
61
52
|
updated_at: string
|
|
62
53
|
}
|
|
63
|
-
// CIL[
|
|
64
|
-
// CIL[
|
|
65
|
-
// CIL[DOC-
|
|
66
|
-
// CIL[DOC-
|
|
67
|
-
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\"]"]
|
|
68
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
|
|
69
|
-
// CIL[DOC-MICRO logic_summary="Renders loading states, error states, and role form with all fields" notable_decisions="[]"]
|
|
70
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
71
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
72
|
-
// CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx."]
|
|
73
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
74
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
75
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
54
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the TypeScript shape of a Role record used in the admin UI.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
|
|
55
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
56
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
57
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
76
58
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
77
59
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
60
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:Role:interface"]
|
|
61
|
+
|
|
62
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:RoleDetailPage:component" type="component" identity="RoleDetailPage" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
|
|
63
|
+
// CIL[DOC-MACRO purpose="Renders a create/edit form for admin roles and their permissions."]
|
|
64
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch role data, manage form state, validate permissions JSON, submit to the API, and render the admin UI."]
|
|
65
|
+
// CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/RoleDetailPage.tsx"]
|
|
66
|
+
// CIL[DOC-CONTRACT inputs="URL id parameter ('new' or existing role), role data from /api/roles, user input" outputs="Rendered role form, navigation after save" errors="fetchError, save error, invalid permissions JSON" side_effects="Calls /api/roles (POST or PATCH) and navigates on success"]
|
|
67
|
+
// CIL[DOC-MICRO logic_summary="Initializes form from fetched role, parses permissions JSON, handles create/update submission, and renders instructions, alerts, and fields." notable_decisions="[]"]
|
|
68
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
69
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
78
70
|
export function RoleDetailPage() {
|
|
79
71
|
const { id } = useParams<{ id: string }>()
|
|
80
72
|
const navigate = useNavigate()
|
|
@@ -92,20 +84,6 @@ export function RoleDetailPage() {
|
|
|
92
84
|
const [isSubmitting, setIsSubmitting] = useState(false)
|
|
93
85
|
const [error, setError] = useState<string | null>(null)
|
|
94
86
|
|
|
95
|
-
// CIL[BEGIN chunk_id="roledetailpage_hooks_1783666257" type="hooks" identity="useApi" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
96
|
-
// CIL[DOC-MACRO purpose="Fetch role data and manage form state"]
|
|
97
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
|
|
98
|
-
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="data" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
99
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="role data, form state" errors="API errors" side_effects="HTTP requests, state updates"]
|
|
100
|
-
// CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch role data and useEffect to sync form state" notable_decisions="[]"]
|
|
101
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
102
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
103
|
-
// CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
104
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
105
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
106
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
107
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
108
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
109
87
|
const { data: role, loading, error: fetchError } = useApi<Role>(
|
|
110
88
|
async () => {
|
|
111
89
|
if (isCreateMode) return null
|
|
@@ -130,22 +108,7 @@ export function RoleDetailPage() {
|
|
|
130
108
|
setPermissionsJson(JSON.stringify(role.permissions || {}, null, 2))
|
|
131
109
|
}
|
|
132
110
|
}, [role])
|
|
133
|
-
// CIL[END chunk_id="roledetailpage_hooks_1783666257"]
|
|
134
111
|
|
|
135
|
-
// CIL[BEGIN chunk_id="roledetailpage_handlers_1783666257" type="event_handlers" identity="handleSubmit" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
136
|
-
// CIL[DOC-MACRO purpose="Handle form submission for role creation/editing"]
|
|
137
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSubmit"]
|
|
138
|
-
// CIL[DOC-CONTEXT module="RoleDetailPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
139
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="API response, navigation" errors="Validation errors, API errors" side_effects="HTTP requests, navigation"]
|
|
140
|
-
// CIL[DOC-MICRO logic_summary="Validates form data, parses permissions, submits to API, handles errors" notable_decisions="[]"]
|
|
141
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
142
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
143
|
-
// CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
144
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
145
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
146
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
147
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
148
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
149
112
|
const handleSubmit = async (e: React.FormEvent) => {
|
|
150
113
|
e.preventDefault()
|
|
151
114
|
setIsSubmitting(true)
|
|
@@ -186,22 +149,7 @@ export function RoleDetailPage() {
|
|
|
186
149
|
setIsSubmitting(false)
|
|
187
150
|
}
|
|
188
151
|
}
|
|
189
|
-
// CIL[END chunk_id="roledetailpage_handlers_1783666257"]
|
|
190
152
|
|
|
191
|
-
// CIL[BEGIN chunk_id="roledetailpage_render_1783666257" type="render_logic" identity="return" parent="roledetailpage_function_roledetailpage_1783666257"]
|
|
192
|
-
// CIL[DOC-MACRO purpose="Render the complete role management interface"]
|
|
193
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
|
|
194
|
-
// CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
|
|
195
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
196
|
-
// CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
|
|
197
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
198
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
199
|
-
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
200
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
201
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
202
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
203
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
204
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
205
153
|
if (loading) {
|
|
206
154
|
return (
|
|
207
155
|
<div className="space-y-6">
|
|
@@ -262,6 +210,8 @@ export function RoleDetailPage() {
|
|
|
262
210
|
</ul> },
|
|
263
211
|
{ title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
|
|
264
212
|
<li>In create mode, enter Name and Slug, then set Active and optionally System. Existing roles cannot change the slug.</li>
|
|
213
|
+
|
|
214
|
+
|
|
265
215
|
<li>Enter valid Permissions JSON mapping type slugs to action arrays.</li>
|
|
266
216
|
<li>Click Create Role or Update Role. Save fails if the name/slug are empty, the slug is changed, or the permissions JSON cannot be parsed.</li>
|
|
267
217
|
</ol> },
|
|
@@ -362,6 +312,8 @@ export function RoleDetailPage() {
|
|
|
362
312
|
</CardHeader>
|
|
363
313
|
<CardContent>
|
|
364
314
|
<p className="text-sm text-muted-foreground mb-3">
|
|
315
|
+
|
|
316
|
+
|
|
365
317
|
Define permissions as a JSON object. Each key is a type slug, value is an array of allowed actions.
|
|
366
318
|
</p>
|
|
367
319
|
<Textarea
|
|
@@ -372,7 +324,7 @@ export function RoleDetailPage() {
|
|
|
372
324
|
rows={10}
|
|
373
325
|
/>
|
|
374
326
|
<p className="text-xs text-muted-foreground mt-2">
|
|
375
|
-
Example: <code className="bg-muted px-1 py-0.5 rounded">{`{"
|
|
327
|
+
Example: <code className="bg-muted px-1 py-0.5 rounded">{`{"ticket": ["read", "write", "admin"]}`}</code>
|
|
376
328
|
</p>
|
|
377
329
|
</CardContent>
|
|
378
330
|
</Card>
|
|
@@ -389,5 +341,10 @@ export function RoleDetailPage() {
|
|
|
389
341
|
</div>
|
|
390
342
|
)
|
|
391
343
|
}
|
|
392
|
-
// CIL[
|
|
393
|
-
// CIL[
|
|
344
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Renders a create/edit form for admin roles and their permissions.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
|
|
345
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
346
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
347
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
348
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
349
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
350
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:RoleDetailPage:component"]
|