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,16 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Module header for the admin API keys list page, importing dependencies and defining the page component scope."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Set up imports and module metadata for APIKeysPage."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.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="Contains import statements for the page; no runtime logic." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="ai-coder"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
|
-
// CIL[BEGIN chunk_id="apikeyspage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
|
|
5
|
-
// CIL[DOC-MACRO purpose="Import dependencies for APIKeysPage component"]
|
|
6
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, UI components, and utilities"]
|
|
7
|
-
// CIL[DOC-CONTEXT module="APIKeysPage" layer="presentation" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
8
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
|
|
9
|
-
// CIL[DOC-MICRO logic_summary="Imports React state management, UI components, API hooks" 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.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 React, { useState } from 'react'
|
|
20
15
|
import { Plus, Key, CheckCircle, Clock, ShieldCheck, RefreshCw } from 'lucide-react';
|
|
21
16
|
import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
|
|
@@ -27,21 +22,21 @@ import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
|
27
22
|
import { formatDateTime } from '../../lib/utils'
|
|
28
23
|
import { useApi } from '../../hooks/useApi'
|
|
29
24
|
import { apiFetch } from '../../lib/api'
|
|
30
|
-
// CIL[
|
|
31
|
-
// CIL[
|
|
32
|
-
// CIL[DOC-
|
|
33
|
-
// CIL[DOC-
|
|
34
|
-
// CIL[DOC-CONTEXT module="APIKeysPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"\\\"]"]
|
|
35
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="APIKey interface type" errors="none" side_effects="none"]
|
|
36
|
-
// CIL[DOC-MICRO logic_summary="Defines complete API key structure with metadata and usage" 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, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/src/components/layout/Sidebar.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."]
|
|
25
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Module header for the admin API keys list page, importing dependencies and defining the page component scope.'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
|
|
26
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
27
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
28
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
43
29
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
30
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
31
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:module_header:module_header"]
|
|
32
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikey:interface" type="interface" identity="apikey" parent="none"]
|
|
33
|
+
// CIL[DOC-MACRO purpose="Define the TypeScript shape of an API key record."]
|
|
34
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a typed interface for API key data."]
|
|
35
|
+
// CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.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/APIKeysPage.tsx"]
|
|
36
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="APIKey type definition" errors="none" side_effects="none"]
|
|
37
|
+
// CIL[DOC-MICRO logic_summary="Describes fields for an API key including id, name, key_type, is_active, usage, integration, and creator." notable_decisions="[]"]
|
|
38
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
39
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
45
40
|
interface APIKey {
|
|
46
41
|
id: string
|
|
47
42
|
name: string
|
|
@@ -63,21 +58,22 @@ interface APIKey {
|
|
|
63
58
|
}
|
|
64
59
|
created_at: string
|
|
65
60
|
}
|
|
66
|
-
// CIL[
|
|
67
|
-
// CIL[
|
|
68
|
-
// CIL[DOC-
|
|
69
|
-
// CIL[DOC-
|
|
70
|
-
// CIL[DOC-CONTEXT module="APIKeysPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
71
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
|
|
72
|
-
// CIL[DOC-MICRO logic_summary="Manages state, fetches API keys, handles filtering/sorting, renders table" notable_decisions="[]"]
|
|
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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/layout/Sidebar.tsx, custom/apps/portal/pages/ContentPage.tsx, .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."]
|
|
61
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the TypeScript shape of an API key record.'; 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"]
|
|
79
65
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
80
66
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
67
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikey:interface"]
|
|
68
|
+
|
|
69
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikeyspage:function" type="function" identity="apikeyspage" parent="none"]
|
|
70
|
+
// CIL[DOC-MACRO purpose="Render the admin API keys list page with search, filtering, sorting, and usage statistics."]
|
|
71
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display and filter API keys; handle row navigation."]
|
|
72
|
+
// CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.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/APIKeysPage.tsx"]
|
|
73
|
+
// CIL[DOC-CONTRACT inputs="none (React hook props and local state)" outputs="JSX page rendering" errors="Throws if API fetch fails (handled by useApi error state)" side_effects="Fetches /api/api-keys on mount; navigates on row click"]
|
|
74
|
+
// CIL[DOC-MICRO logic_summary="Fetches API keys, applies search/status/type filters, sorts, and renders a SortableTableHeader table with stats cards and usage instructions." notable_decisions="[]"]
|
|
75
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
76
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
81
77
|
export function APIKeysPage() {
|
|
82
78
|
const [searchTerm, setSearchTerm] = useState('')
|
|
83
79
|
const [selectedStatus, setSelectedStatus] = useState('all')
|
|
@@ -376,4 +372,10 @@ export function APIKeysPage() {
|
|
|
376
372
|
</AdminListPage>
|
|
377
373
|
)
|
|
378
374
|
}
|
|
379
|
-
// CIL[
|
|
375
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render the admin API keys list page with search, filtering, sorting, and usage statistics.'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
|
|
376
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
377
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
378
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
379
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
380
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
381
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikeyspage:function"]
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:module_header:module_header"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Top-level module for the admin threshold alerts configuration page"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide imports and module context for the AlertsConfigPage and AlertModal components"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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="module imports" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React, icon components, UI primitives, hooks, and utilities used by the alert management 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-developer, system-admin"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
@@ -5,21 +15,6 @@
|
|
|
5
15
|
|
|
6
16
|
|
|
7
17
|
|
|
8
|
-
// CIL[BEGIN chunk_id="alertsconfigpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
|
|
9
|
-
// CIL[DOC-MACRO purpose="Import dependencies for AlertsConfigPage component"]
|
|
10
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, UI components, and utilities"]
|
|
11
|
-
// CIL[DOC-CONTEXT module="AlertsConfigPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
12
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
|
|
13
|
-
// CIL[DOC-MICRO logic_summary="Imports React state management, UI components, API hooks, icons" notable_decisions="[]"]
|
|
14
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
15
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
16
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
17
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
18
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
19
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
20
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
21
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
22
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
23
18
|
import React, { useState } from 'react'
|
|
24
19
|
import {
|
|
25
20
|
Bell,
|
|
@@ -37,21 +32,22 @@ import { AdminListPage } from '../../components/admin/AdminListPage'
|
|
|
37
32
|
import { useApi } from '../../hooks/useApi'
|
|
38
33
|
import { apiFetch } from '../../lib/api'
|
|
39
34
|
import { formatDateTime } from '../../lib/utils'
|
|
40
|
-
|
|
41
|
-
// CIL[
|
|
42
|
-
// CIL[DOC-
|
|
43
|
-
// CIL[DOC-
|
|
44
|
-
// CIL[DOC-
|
|
45
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ThresholdAlert interface type" errors="none" side_effects="none"]
|
|
46
|
-
// CIL[DOC-MICRO logic_summary="Defines alert structure with metric configuration and status" notable_decisions="[]"]
|
|
47
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
48
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
49
|
-
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
50
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
51
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
52
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
35
|
+
|
|
36
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Top-level module for the admin threshold alerts configuration page'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
37
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
38
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
39
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
53
40
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
54
41
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
42
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:module_header:module_header"]
|
|
43
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:ThresholdAlert:interface"]
|
|
44
|
+
// CIL[DOC-MACRO purpose="Describe the shape of a threshold alert record and its embedded data"]
|
|
45
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the ThresholdAlert TypeScript interface used across the alerts page"]
|
|
46
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
47
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
|
|
48
|
+
// CIL[DOC-MICRO logic_summary="Declares fields for alert identity, title, status, metric, operator, threshold, window, optional pipeline linkage, and timestamps" notable_decisions="[]"]
|
|
49
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
50
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
55
51
|
interface ThresholdAlert {
|
|
56
52
|
id: string
|
|
57
53
|
title: string
|
|
@@ -68,71 +64,85 @@ interface ThresholdAlert {
|
|
|
68
64
|
created_at: string
|
|
69
65
|
updated_at: string
|
|
70
66
|
}
|
|
71
|
-
// CIL[
|
|
72
|
-
// CIL[
|
|
73
|
-
// CIL[DOC-
|
|
74
|
-
// CIL[DOC-
|
|
75
|
-
// CIL[DOC-CONTEXT module="AlertsConfigPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
76
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Pipeline interface type" errors="none" side_effects="none"]
|
|
77
|
-
// CIL[DOC-MICRO logic_summary="Defines basic pipeline structure with id and name" notable_decisions="[]"]
|
|
78
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
79
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
80
|
-
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
81
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
82
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
83
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
67
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of a threshold alert record and its embedded data'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.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"]
|
|
84
71
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
85
72
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
73
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:ThresholdAlert:interface"]
|
|
74
|
+
|
|
75
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:Pipeline:interface"]
|
|
76
|
+
// CIL[DOC-MACRO purpose="Describe a selectable pipeline reference"]
|
|
77
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Define the minimal Pipeline shape used for alert pipeline selection"]
|
|
78
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
79
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
|
|
80
|
+
// CIL[DOC-MICRO logic_summary="Declares id and name fields for pipeline dropdown options" notable_decisions="[]"]
|
|
81
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
82
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
86
83
|
interface Pipeline {
|
|
87
84
|
id: string
|
|
88
85
|
name: string
|
|
89
86
|
}
|
|
90
|
-
// CIL[
|
|
91
|
-
// CIL[
|
|
92
|
-
// CIL[DOC-
|
|
93
|
-
// CIL[DOC-
|
|
94
|
-
// CIL[DOC-CONTEXT module="AlertsConfigPage" layer="constants" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
95
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Label mappings" errors="none" side_effects="none"]
|
|
96
|
-
// CIL[DOC-MICRO logic_summary="Defines human-readable labels for metrics, operators, and units" notable_decisions="[]"]
|
|
97
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
98
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
99
|
-
// CIL[DOC-VECTOR type="context" content="Layer: constants. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
100
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
101
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
102
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describe a selectable pipeline reference'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
103
91
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
104
92
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:Pipeline:interface"]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:alert_constants:constants"]
|
|
97
|
+
// CIL[DOC-MACRO purpose="Provide human-readable labels and units for alert metrics and operators"]
|
|
98
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Supply display maps for metric names, operators, and units used in the alert list and modal"]
|
|
99
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="presentation" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
100
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Record maps" errors="none" side_effects="none"]
|
|
101
|
+
// CIL[DOC-MICRO logic_summary="Defines METRIC_LABELS, OPERATOR_LABELS, and UNIT_LABELS records for rendering alert details" notable_decisions="[]"]
|
|
102
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
103
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
105
104
|
const METRIC_LABELS: Record<string, string> = {
|
|
106
105
|
error_rate: 'Error Rate',
|
|
107
106
|
latency_p95: 'Latency (P95)',
|
|
108
107
|
pipeline_failure_rate: 'Pipeline Failure Rate',
|
|
109
108
|
}
|
|
110
109
|
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
111
114
|
const OPERATOR_LABELS: Record<string, string> = {
|
|
112
115
|
gt: '>',
|
|
113
116
|
lt: '<',
|
|
114
117
|
}
|
|
115
118
|
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
116
123
|
const UNIT_LABELS: Record<string, string> = {
|
|
117
124
|
error_rate: '%',
|
|
118
125
|
latency_p95: 'ms',
|
|
119
126
|
pipeline_failure_rate: '%',
|
|
120
127
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// CIL[DOC-
|
|
125
|
-
// CIL[DOC-
|
|
126
|
-
// CIL[DOC-
|
|
127
|
-
// CIL[DOC-
|
|
128
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
129
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
130
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
131
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
132
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
133
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provide human-readable labels and units for alert metrics and operators'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
132
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
133
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
134
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
134
135
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
135
136
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
137
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:alert_constants:constants"]
|
|
138
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertsConfigPage:component"]
|
|
139
|
+
// CIL[DOC-MACRO purpose="Admin page for listing, creating, editing, toggling, and deleting threshold alerts"]
|
|
140
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render the alert list, fetch alert and pipeline data, and handle alert CRUD interactions"]
|
|
141
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
142
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX" errors="Failed to fetch/save/delete/toggle alert" side_effects="Displays browser alert on save/delete errors; navigates and refetches lists"]
|
|
143
|
+
// CIL[DOC-MICRO logic_summary="Loads alerts and pipelines with useApi, builds stat cards, renders AdminListPage, and provides handlers for save, delete, toggle, and edit actions" notable_decisions="[]"]
|
|
144
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
145
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
136
146
|
export function AlertsConfigPage() {
|
|
137
147
|
const [isModalOpen, setIsModalOpen] = useState(false)
|
|
138
148
|
const [editingAlert, setEditingAlert] = useState<ThresholdAlert | null>(null)
|
|
@@ -255,6 +265,9 @@ export function AlertsConfigPage() {
|
|
|
255
265
|
)
|
|
256
266
|
}
|
|
257
267
|
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
|
|
258
271
|
const statsCards = [
|
|
259
272
|
{
|
|
260
273
|
title: 'Total Alerts',
|
|
@@ -282,6 +295,7 @@ export function AlertsConfigPage() {
|
|
|
282
295
|
},
|
|
283
296
|
]
|
|
284
297
|
|
|
298
|
+
|
|
285
299
|
return (
|
|
286
300
|
<AdminListPage
|
|
287
301
|
title="Threshold Alerts"
|
|
@@ -387,21 +401,23 @@ export function AlertsConfigPage() {
|
|
|
387
401
|
</AdminListPage>
|
|
388
402
|
)
|
|
389
403
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
// CIL[DOC-
|
|
393
|
-
// CIL[DOC-
|
|
394
|
-
// CIL[DOC-
|
|
395
|
-
// CIL[DOC-
|
|
396
|
-
// CIL[DOC-MICRO logic_summary="Defines props for alert modal with state and callback handlers" notable_decisions="[]"]
|
|
397
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
398
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
399
|
-
// CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
400
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
401
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
402
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Admin page for listing, creating, editing, toggling, and deleting threshold alerts'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
407
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
408
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
409
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
403
410
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
404
411
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
412
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertsConfigPage:component"]
|
|
413
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModalProps:interface"]
|
|
414
|
+
// CIL[DOC-MACRO purpose="Props contract for the AlertModal form component"]
|
|
415
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare the properties passed to AlertModal"]
|
|
416
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
417
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
|
|
418
|
+
// CIL[DOC-MICRO logic_summary="Defines isOpen, onClose, onSave, alert, and pipelines props for the alert edit/create modal" notable_decisions="[]"]
|
|
419
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
420
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
405
421
|
interface AlertModalProps {
|
|
406
422
|
isOpen: boolean
|
|
407
423
|
onClose: () => void
|
|
@@ -409,21 +425,22 @@ interface AlertModalProps {
|
|
|
409
425
|
alert: ThresholdAlert | null
|
|
410
426
|
pipelines: Pipeline[]
|
|
411
427
|
}
|
|
412
|
-
// CIL[
|
|
413
|
-
// CIL[
|
|
414
|
-
// CIL[DOC-
|
|
415
|
-
// CIL[DOC-
|
|
416
|
-
// CIL[DOC-CONTEXT module="AlertsConfigPage" layer="presentation" related_files="[]"]
|
|
417
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="Form validation" side_effects="Form submission"]
|
|
418
|
-
// CIL[DOC-MICRO logic_summary="Manages form state for alert configuration with metric selection" notable_decisions="[]"]
|
|
419
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
420
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
421
|
-
// CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
422
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
423
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
424
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
428
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Props contract for the AlertModal form component'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
429
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
430
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
431
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
425
432
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
426
433
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
434
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModalProps:interface"]
|
|
435
|
+
|
|
436
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModal:component"]
|
|
437
|
+
// CIL[DOC-MACRO purpose="Modal form for creating and editing threshold alerts"]
|
|
438
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Render a controlled form, manage alert state, and call onSave with form data"]
|
|
439
|
+
// CIL[DOC-CONTEXT module="admin/alerts" layer="component" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.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/AlertsConfigPage.tsx"]
|
|
440
|
+
// CIL[DOC-CONTRACT inputs="isOpen: boolean, onClose: () => void, onSave: (data: any) => void, alert: ThresholdAlert | null, pipelines: Pipeline[]" outputs="JSX" errors="none" side_effects="Updates local form state on user input; calls onSave on submit"]
|
|
441
|
+
// CIL[DOC-MICRO logic_summary="Initializes form state, resets state when the alert or isOpen changes, and renders a form with metric, operator, threshold, window, optional pipeline, and active toggle fields" notable_decisions="[]"]
|
|
442
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
443
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
427
444
|
function AlertModal({ isOpen, onClose, onSave, alert, pipelines }: AlertModalProps) {
|
|
428
445
|
const [formData, setFormData] = useState({
|
|
429
446
|
title: '',
|
|
@@ -607,4 +624,10 @@ function AlertModal({ isOpen, onClose, onSave, alert, pipelines }: AlertModalPro
|
|
|
607
624
|
</Modal>
|
|
608
625
|
)
|
|
609
626
|
}
|
|
610
|
-
// CIL[
|
|
627
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Modal form for creating and editing threshold alerts'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
|
|
628
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
629
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
630
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
631
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
632
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
633
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModal:component"]
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Top-level imports and module entry point for the AppDetailPage admin component."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare external dependencies for the App detail admin page."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.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/input.tsx,.framework/src/components/ui/select.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="" outputs="" errors="" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports React hooks, React Router, API hooks, UI components, and utilities used by the AppDetailPage 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="developers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
4
|
-
// CIL[BEGIN chunk_id="appdetailpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
|
|
5
|
-
// CIL[DOC-MACRO purpose="Import dependencies for AppDetailPage component"]
|
|
6
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, routing, API hooks, and UI components"]
|
|
7
|
-
// CIL[DOC-CONTEXT module="AppDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.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" errors="none" side_effects="none"]
|
|
9
|
-
// CIL[DOC-MICRO logic_summary="Imports React state management, routing, API hooks, 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.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 React, { useState, useEffect } from 'react'
|
|
20
15
|
import { useParams, useNavigate } from 'react-router-dom'
|
|
21
16
|
import { useApi } from '../../hooks/useApi'
|
|
@@ -39,21 +34,22 @@ import {
|
|
|
39
34
|
import { ArrowLeft, Pencil, Trash2, AlertCircle } from 'lucide-react';
|
|
40
35
|
import { formatDateTime } from '../../lib/utils'
|
|
41
36
|
import { PageInstructions } from '../../components/admin/PageInstructions'
|
|
42
|
-
// CIL[
|
|
43
|
-
// CIL[
|
|
44
|
-
// CIL[DOC-
|
|
45
|
-
// CIL[DOC-
|
|
46
|
-
// CIL[DOC-CONTEXT module="AppDetailPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
47
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="App interface type" errors="none" side_effects="none"]
|
|
48
|
-
// CIL[DOC-MICRO logic_summary="Defines complete app structure with metadata, config, and stats" notable_decisions="[]"]
|
|
49
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
50
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
51
|
-
// 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, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
52
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
53
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
54
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Top-level imports and module entry point for the AppDetailPage admin component.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.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"]
|
|
55
41
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
56
42
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
43
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
|
|
44
|
+
|
|
45
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:App:interface" type="interface" identity="App" parent="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
|
|
46
|
+
// CIL[DOC-MACRO purpose="Define the App data contract used across the admin app detail page."]
|
|
47
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type describing the shape of an app record."]
|
|
48
|
+
// CIL[DOC-CONTEXT module="admin" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.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/input.tsx,.framework/src/components/ui/select.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/AppDetailPage.tsx"]
|
|
49
|
+
// CIL[DOC-CONTRACT inputs="app record from API or plain object" outputs="App interface definition" errors="" side_effects="none"]
|
|
50
|
+
// CIL[DOC-MICRO logic_summary="Declares the App interface with fields for metadata, configuration, and runtime settings." notable_decisions="[]"]
|
|
51
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
52
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
57
53
|
interface App {
|
|
58
54
|
id: string
|
|
59
55
|
slug: string
|
|
@@ -82,21 +78,22 @@ interface App {
|
|
|
82
78
|
created_by?: string
|
|
83
79
|
account_id?: string
|
|
84
80
|
}
|
|
85
|
-
// CIL[
|
|
86
|
-
// CIL[
|
|
87
|
-
// CIL[DOC-
|
|
88
|
-
// CIL[DOC-
|
|
89
|
-
// CIL[DOC-CONTEXT module="AppDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
90
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
|
|
91
|
-
// CIL[DOC-MICRO logic_summary="Manages CRUD operations for apps with form validation and state management" 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
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."]
|
|
81
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the App data contract used across the admin app detail page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
82
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
83
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
84
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
98
85
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
99
86
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
87
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:App:interface"]
|
|
88
|
+
|
|
89
|
+
// CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:AppDetailPage:component" type="component" identity="AppDetailPage" parent="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
|
|
90
|
+
// CIL[DOC-MACRO purpose="Render and manage the admin app create/edit/detail page."]
|
|
91
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display app details, support editing and saving app configuration, and handle deletion."]
|
|
92
|
+
// CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.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/input.tsx,.framework/src/components/ui/select.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/AppDetailPage.tsx"]
|
|
93
|
+
// CIL[DOC-CONTRACT inputs="route id param" outputs="Rendered admin app detail UI" errors="Invalid ID format, failed fetch, save/delete errors" side_effects="Navigates on save/delete; calls apiFetch for create/update/delete"]
|
|
94
|
+
// CIL[DOC-MICRO logic_summary="Fetches app by id, manages edit state and JSON config, renders form fields, and persists changes via API." notable_decisions="[]"]
|
|
95
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
96
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
100
97
|
export function AppDetailPage() {
|
|
101
98
|
const { id } = useParams<{ id: string }>()
|
|
102
99
|
const navigate = useNavigate()
|
|
@@ -395,7 +392,10 @@ export function AppDetailPage() {
|
|
|
395
392
|
</ol> },
|
|
396
393
|
{ title: 'Common mistakes', content: <ul className="list-disc pl-4 space-y-1">
|
|
397
394
|
<li>Reusing a slug that already exists, causing a unique constraint error.</li>
|
|
395
|
+
|
|
396
|
+
|
|
398
397
|
<li>Switching an app to Inactive while people are using it.</li>
|
|
398
|
+
|
|
399
399
|
<li>Pasting non-JSON text or trailing commas in the Configuration JSON.</li>
|
|
400
400
|
</ul> },
|
|
401
401
|
]}
|
|
@@ -607,4 +607,10 @@ export function AppDetailPage() {
|
|
|
607
607
|
</div>
|
|
608
608
|
)
|
|
609
609
|
}
|
|
610
|
-
// CIL[
|
|
610
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Render and manage the admin app create/edit/detail page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
|
|
611
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
612
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
613
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
614
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
615
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
616
|
+
// CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:AppDetailPage:component"]
|