spine-framework 0.3.145 → 0.4.1
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 +5067 -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,3 +1,12 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/observability.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Observability and analytics function entry point"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Exports handler-driven analytics endpoints for event volume, error rate, latency, pipeline stats, top actors, AI support metrics, and log cleanup"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports shared middleware, database, auth, and id resolution utilities" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
1
10
|
|
|
2
11
|
|
|
3
12
|
|
|
@@ -6,40 +15,25 @@
|
|
|
6
15
|
|
|
7
16
|
|
|
8
17
|
|
|
9
|
-
// CIL[BEGIN chunk_id="observability_moduleheader_1783968140" type="module_header" identity="imports" parent="none"]
|
|
10
|
-
// CIL[DOC-MACRO purpose="Import dependencies for observability metrics API"]
|
|
11
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import handler utilities and database access"]
|
|
12
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
|
|
13
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="Import failures" side_effects="none"]
|
|
14
|
-
// CIL[DOC-MICRO logic_summary="Imports createHandler, adminDb" notable_decisions="[]"]
|
|
15
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
16
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
17
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
18
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
|
|
19
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
20
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
21
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
22
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
23
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
24
18
|
import { createHandler } from './_shared/middleware'
|
|
25
19
|
import { adminDb } from './_shared/db'
|
|
26
20
|
import { isSystemAdmin } from './_shared/principal'
|
|
27
21
|
import { resolveTypeId } from './_shared/resolve-ids'
|
|
28
|
-
// CIL[
|
|
29
|
-
// CIL[
|
|
30
|
-
// CIL[DOC-
|
|
31
|
-
// CIL[DOC-
|
|
32
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\"\\\"]"]
|
|
33
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Array of event volume data" errors="Account context required, dates required, DB errors" side_effects="DB RPC call"]
|
|
34
|
-
// CIL[DOC-MICRO logic_summary="Calls get_event_volume RPC with date range and bucket parameters" notable_decisions="[]"]
|
|
35
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, \."]
|
|
38
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
39
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
22
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Observability and analytics function entry point'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
23
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
24
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
25
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
41
26
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
27
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
28
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:module_header:module_header"]
|
|
29
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:floorBucket:function" type="function" identity="floorBucket" parent="~/.framework/functions/observability.ts"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Bucket a date to a chosen granularity"]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Normalize a Date to the start of the requested hour or day bucket"]
|
|
32
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="date: Date, bucket: string" outputs="Date" errors="none" side_effects="none"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Zeroes seconds and milliseconds; zeroes minutes for hour/day and hours for day" notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
36
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
43
37
|
function floorBucket(date: Date, bucket: string): Date {
|
|
44
38
|
const d = new Date(date)
|
|
45
39
|
d.setMilliseconds(0)
|
|
@@ -48,7 +42,22 @@ function floorBucket(date: Date, bucket: string): Date {
|
|
|
48
42
|
if (bucket === 'day') d.setHours(0)
|
|
49
43
|
return d
|
|
50
44
|
}
|
|
51
|
-
|
|
45
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Bucket a date to a chosen granularity'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
46
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
47
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
48
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
49
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
50
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
51
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:floorBucket:function"]
|
|
52
|
+
|
|
53
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getEventVolume:constant" type="constant" identity="getEventVolume" parent="~/.framework/functions/observability.ts"]
|
|
54
|
+
// CIL[DOC-MACRO purpose="Return event counts grouped by time bucket"]
|
|
55
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query logs for a date range and aggregate counts by ISO bucket"]
|
|
56
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
57
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to, ctx.query.bucket" outputs="array of { bucket, count }" errors="Account context required; from/to required; database error" side_effects="reads logs table"]
|
|
58
|
+
// CIL[DOC-MICRO logic_summary="Selects adminDb or ctx.db based on role; filters by account_id; groups with floorBucket; sorts ascending" notable_decisions="[]"]
|
|
59
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
60
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
52
61
|
export const getEventVolume = createHandler(async (ctx, body) => {
|
|
53
62
|
const { from, to, bucket = 'hour' } = ctx.query || {}
|
|
54
63
|
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
@@ -85,21 +94,21 @@ export const getEventVolume = createHandler(async (ctx, body) => {
|
|
|
85
94
|
.map(([bucket, count]) => ({ bucket, count }))
|
|
86
95
|
.sort((a, b) => new Date(a.bucket).getTime() - new Date(b.bucket).getTime())
|
|
87
96
|
})
|
|
88
|
-
// CIL[
|
|
89
|
-
// CIL[
|
|
90
|
-
// CIL[DOC-
|
|
91
|
-
// CIL[DOC-
|
|
92
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
93
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Error rate data object" errors="Account context required, dates required, DB errors" side_effects="DB RPC call"]
|
|
94
|
-
// CIL[DOC-MICRO logic_summary="Calls get_error_rate RPC with date range parameters" notable_decisions="[]"]
|
|
95
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
96
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
97
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
98
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
99
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
100
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
97
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Return event counts grouped by time bucket'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
98
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
99
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
100
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
101
101
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
102
102
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
103
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getEventVolume:constant"]
|
|
104
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getErrorRate:constant" type="constant" identity="getErrorRate" parent="~/.framework/functions/observability.ts"]
|
|
105
|
+
// CIL[DOC-MACRO purpose="Compute error rate over a date range"]
|
|
106
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Count total log rows and failures to derive an error rate"]
|
|
107
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
108
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to" outputs="{ total, errors, rate }" errors="Account context required; from/to required; database error" side_effects="reads logs table"]
|
|
109
|
+
// CIL[DOC-MICRO logic_summary="Queries logs for outcome/level; counts rows where outcome is failure or level is error" notable_decisions="[]"]
|
|
110
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
111
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
103
112
|
export const getErrorRate = createHandler(async (ctx, body) => {
|
|
104
113
|
const { from, to } = ctx.query || {}
|
|
105
114
|
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
@@ -135,21 +144,21 @@ export const getErrorRate = createHandler(async (ctx, body) => {
|
|
|
135
144
|
rate: total > 0 ? errors / total : 0,
|
|
136
145
|
}
|
|
137
146
|
})
|
|
138
|
-
// CIL[
|
|
139
|
-
// CIL[
|
|
140
|
-
// CIL[DOC-
|
|
141
|
-
// CIL[DOC-
|
|
142
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
143
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Latency percentile data" errors="Account context required, dates required, DB errors" side_effects="DB RPC call"]
|
|
144
|
-
// CIL[DOC-MICRO logic_summary="Calls get_latency_percentiles RPC with source and date range" 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: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
|
|
148
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
149
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
150
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
147
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Compute error rate over a date range'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
148
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
149
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
150
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
151
151
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
152
152
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
153
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getErrorRate:constant"]
|
|
154
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:percentile:function" type="function" identity="percentile" parent="~/.framework/functions/observability.ts"]
|
|
155
|
+
// CIL[DOC-MACRO purpose="Compute a percentile of a sorted numeric array"]
|
|
156
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return weighted percentile value using linear interpolation"]
|
|
157
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
158
|
+
// CIL[DOC-CONTRACT inputs="sorted: number[], p: number" outputs="number" errors="none" side_effects="none"]
|
|
159
|
+
// CIL[DOC-MICRO logic_summary="Calculates index from p and length-1; blends lower and upper sorted values" notable_decisions="[]"]
|
|
160
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
161
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
153
162
|
function percentile(sorted: number[], p: number): number {
|
|
154
163
|
if (sorted.length === 0) return 0
|
|
155
164
|
const idx = (p / 100) * (sorted.length - 1)
|
|
@@ -158,7 +167,22 @@ function percentile(sorted: number[], p: number): number {
|
|
|
158
167
|
const weight = idx - lower
|
|
159
168
|
return sorted[lower] * (1 - weight) + sorted[upper] * weight
|
|
160
169
|
}
|
|
161
|
-
|
|
170
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Compute a percentile of a sorted numeric array'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
171
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
172
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
173
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
174
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
175
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
176
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:percentile:function"]
|
|
177
|
+
|
|
178
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getLatencyPercentiles:constant" type="constant" identity="getLatencyPercentiles" parent="~/.framework/functions/observability.ts"]
|
|
179
|
+
// CIL[DOC-MACRO purpose="Return duration latency percentiles"]
|
|
180
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query positive non-null duration_ms values and compute p50/p90/p95/p99"]
|
|
181
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
182
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to, ctx.query.source" outputs="{ p50, p90, p95, p99 }" errors="Account context required; from/to required; database error" side_effects="reads logs table"]
|
|
183
|
+
// CIL[DOC-MICRO logic_summary="Filters by span_name when source provided; converts and filters duration values; sorts and delegates to percentile" notable_decisions="[]"]
|
|
184
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
185
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
162
186
|
export const getLatencyPercentiles = createHandler(async (ctx, body) => {
|
|
163
187
|
const { from, to, source = 'request' } = ctx.query || {}
|
|
164
188
|
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
@@ -199,21 +223,21 @@ export const getLatencyPercentiles = createHandler(async (ctx, body) => {
|
|
|
199
223
|
p99: percentile(values, 99),
|
|
200
224
|
}
|
|
201
225
|
})
|
|
202
|
-
// CIL[
|
|
203
|
-
// CIL[
|
|
204
|
-
// CIL[DOC-
|
|
205
|
-
// CIL[DOC-
|
|
206
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[]"]
|
|
207
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Array of pipeline statistics" errors="Account context required, dates required, DB errors" side_effects="DB RPC call"]
|
|
208
|
-
// CIL[DOC-MICRO logic_summary="Calls get_pipeline_stats RPC with date range parameters" notable_decisions="[]"]
|
|
209
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
210
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
211
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
212
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
213
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
214
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
226
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Return duration latency percentiles'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
227
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
228
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
229
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
215
230
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
216
231
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
232
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getLatencyPercentiles:constant"]
|
|
233
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getPipelineStats:constant" type="constant" identity="getPipelineStats" parent="~/.framework/functions/observability.ts"]
|
|
234
|
+
// CIL[DOC-MACRO purpose="Aggregate pipeline execution statistics"]
|
|
235
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Group pipeline_executions by pipeline_id and count successes/failures/durations"]
|
|
236
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
237
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to" outputs="array of { pipeline_id, success_count, failure_count, avg_duration_ms }" errors="Account context required; from/to required; database error" side_effects="reads pipeline_executions table"]
|
|
238
|
+
// CIL[DOC-MICRO logic_summary="Iterates rows to update per-pipeline counters and compute average duration where both timestamps exist" notable_decisions="[]"]
|
|
239
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
240
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
217
241
|
export const getPipelineStats = createHandler(async (ctx, body) => {
|
|
218
242
|
const { from, to } = ctx.query || {}
|
|
219
243
|
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
@@ -262,21 +286,21 @@ export const getPipelineStats = createHandler(async (ctx, body) => {
|
|
|
262
286
|
avg_duration_ms: s.duration_count > 0 ? Math.round(s.total_duration_ms / s.duration_count) : 0,
|
|
263
287
|
}))
|
|
264
288
|
})
|
|
265
|
-
// CIL[
|
|
266
|
-
// CIL[
|
|
267
|
-
// CIL[DOC-
|
|
268
|
-
// CIL[DOC-
|
|
269
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[]"]
|
|
270
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Array of actor activity data" errors="Account context required, dates required, DB errors" side_effects="DB RPC call"]
|
|
271
|
-
// CIL[DOC-MICRO logic_summary="Calls get_top_actors RPC with date range and limit parameters" notable_decisions="[]"]
|
|
272
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
273
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
274
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
275
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
276
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
277
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
289
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Aggregate pipeline execution statistics'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
290
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
291
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
292
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
278
293
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
279
294
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
295
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getPipelineStats:constant"]
|
|
296
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getTopActors:constant" type="constant" identity="getTopActors" parent="~/.framework/functions/observability.ts"]
|
|
297
|
+
// CIL[DOC-MACRO purpose="Rank principals by event volume"]
|
|
298
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Count log rows per created_by and return the top N"]
|
|
299
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
300
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to, ctx.query.limit" outputs="array of { principal_id, event_count }" errors="Account context required; from/to required; database error" side_effects="reads logs table"]
|
|
301
|
+
// CIL[DOC-MICRO logic_summary="Tallies created_by occurrences; sorts descending and limits to parsed limit defaulting to 5" notable_decisions="[]"]
|
|
302
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
303
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
280
304
|
export const getTopActors = createHandler(async (ctx, body) => {
|
|
281
305
|
const { from, to, limit = 5 } = ctx.query || {}
|
|
282
306
|
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
@@ -314,21 +338,21 @@ export const getTopActors = createHandler(async (ctx, body) => {
|
|
|
314
338
|
.sort((a, b) => b.event_count - a.event_count)
|
|
315
339
|
.slice(0, parseInt(limit.toString()) || 5)
|
|
316
340
|
})
|
|
317
|
-
// CIL[
|
|
318
|
-
// CIL[
|
|
319
|
-
// CIL[DOC-
|
|
320
|
-
// CIL[DOC-
|
|
321
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[]"]
|
|
322
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="{deleted_count: number}" errors="System admin required, DB errors" side_effects="DB RPC call, data deletion"]
|
|
323
|
-
// CIL[DOC-MICRO logic_summary="Calls cleanup_old_logs RPC with retention days parameter" notable_decisions="[]"]
|
|
324
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
325
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
326
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
327
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
328
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
329
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
341
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Rank principals by event volume'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
342
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
343
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
344
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
330
345
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
331
346
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
347
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getTopActors:constant"]
|
|
348
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:cleanupOldLogs:constant" type="constant" identity="cleanupOldLogs" parent="~/.framework/functions/observability.ts"]
|
|
349
|
+
// CIL[DOC-MACRO purpose="Delete old logs via retention policy"]
|
|
350
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Invoke a stored function to purge logs older than the requested retention"]
|
|
351
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
352
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.days" outputs="{ deleted_count }" errors="System admin required; database error" side_effects="calls cleanup_old_logs RPC; deletes records"]
|
|
353
|
+
// CIL[DOC-MICRO logic_summary="Restricts to system_admin; parses days defaulting to 90; runs cleanup_old_logs RPC" notable_decisions="[]"]
|
|
354
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
355
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
332
356
|
export const cleanupOldLogs = createHandler(async (ctx, body) => {
|
|
333
357
|
const { days = 90 } = ctx.query || {}
|
|
334
358
|
|
|
@@ -344,21 +368,21 @@ export const cleanupOldLogs = createHandler(async (ctx, body) => {
|
|
|
344
368
|
if (err) throw err
|
|
345
369
|
return { deleted_count: data?.[0]?.deleted_count || 0 }
|
|
346
370
|
})
|
|
347
|
-
// CIL[
|
|
348
|
-
// CIL[
|
|
349
|
-
// CIL[DOC-
|
|
350
|
-
// CIL[DOC-
|
|
351
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[]"]
|
|
352
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="AI metrics object with knowledge gaps" errors="Account context required, DB errors" side_effects="DB queries"]
|
|
353
|
-
// CIL[DOC-MICRO logic_summary="Queries AI metrics and knowledge gaps, returns aggregated analysis" notable_decisions="[]"]
|
|
354
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="complex_dependencies"]
|
|
355
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
356
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
357
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
358
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
359
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
371
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Delete old logs via retention policy'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
372
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
373
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
374
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
360
375
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
361
376
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
377
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:cleanupOldLogs:constant"]
|
|
378
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:getAiSupportMetrics:constant" type="constant" identity="getAiSupportMetrics" parent="~/.framework/functions/observability.ts"]
|
|
379
|
+
// CIL[DOC-MACRO purpose="Compute AI support KPIs for the account"]
|
|
380
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Aggregate AI feedback, resolved items, and escalated items over a period"]
|
|
381
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
382
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.from, ctx.query.to" outputs="{ period, ai_attempted, ai_resolved, human_escalations, thumbs_down_rate, kb_articles_created, kb_reuse_count, knowledge_gaps }" errors="Account context required; database error" side_effects="reads items table via adminDb"]
|
|
383
|
+
// CIL[DOC-MICRO logic_summary="Resolves ai_feedback_record type id; runs three parallel queries; computes rates and counts from feedback data" notable_decisions="[]"]
|
|
384
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
385
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
362
386
|
export const getAiSupportMetrics = createHandler(async (ctx, _body) => {
|
|
363
387
|
if (!ctx.accountId) throw new Error('Account context required')
|
|
364
388
|
|
|
@@ -429,21 +453,21 @@ export const getAiSupportMetrics = createHandler(async (ctx, _body) => {
|
|
|
429
453
|
knowledge_gaps: knowledgeGaps,
|
|
430
454
|
}
|
|
431
455
|
})
|
|
432
|
-
// CIL[
|
|
433
|
-
// CIL[
|
|
434
|
-
// CIL[DOC-
|
|
435
|
-
// CIL[DOC-
|
|
436
|
-
// CIL[DOC-CONTEXT module="observability" layer="api-handler" related_files="[]"]
|
|
437
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Varies by action" errors="Unknown action" side_effects="Delegates to handlers"]
|
|
438
|
-
// CIL[DOC-MICRO logic_summary="Switch statement routes action parameter to appropriate metric handler" notable_decisions="[]"]
|
|
439
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
440
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
441
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
442
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
443
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
444
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
456
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Compute AI support KPIs for the account'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
457
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
458
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
459
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
445
460
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
446
461
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
462
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:getAiSupportMetrics:constant"]
|
|
463
|
+
// CIL[BEGIN stable_id="~/.framework/functions/observability.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/observability.ts"]
|
|
464
|
+
// CIL[DOC-MACRO purpose="Route observability action requests"]
|
|
465
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch the requested analytics action to the appropriate function"]
|
|
466
|
+
// CIL[DOC-CONTEXT module="observability" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/_shared/resolve-ids.ts,.framework/functions/observability.ts"]
|
|
467
|
+
// CIL[DOC-CONTRACT inputs="ctx.query.action" outputs="action-specific result" errors="Unknown action" side_effects="delegates to analytics functions"]
|
|
468
|
+
// CIL[DOC-MICRO logic_summary="Switch on action and awaits the matching handler; returns default error for unknown actions" notable_decisions="[]"]
|
|
469
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
470
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
447
471
|
export const handler = createHandler(async (ctx, body) => {
|
|
448
472
|
const { action } = ctx.query || {}
|
|
449
473
|
|
|
@@ -466,4 +490,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
466
490
|
throw new Error(`Unknown action: ${action}. Valid actions: event_volume, error_rate, latency_percentiles, pipeline_stats, top_actors, ai_support_metrics, cleanup`)
|
|
467
491
|
}
|
|
468
492
|
})
|
|
469
|
-
// CIL[
|
|
493
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Route observability action requests'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/principal.ts"]
|
|
494
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
495
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
496
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
497
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
498
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
499
|
+
// CIL[END stable_id="~/.framework/functions/observability.ts:handler:constant"]
|