spine-framework 0.3.144 → 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 +20 -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,38 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// CIL[
|
|
6
|
-
// CIL[DOC-
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-CONTEXT module="webhook-registration" layer="shared" 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\",\"\\\"]"]
|
|
9
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="adminDb" errors="none" side_effects="none"]
|
|
10
|
-
// CIL[DOC-MICRO logic_summary="Import database connection for webhook handler management" notable_decisions="[]"]
|
|
11
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registration.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/webhook-registration.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Module header for webhook-registration; imports shared database access."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declares module-level imports and identifies file scope."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="webhook-registration" layer="functions" related_files=".framework/functions/_shared/db.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports adminDb from ./db for use by webhook registration helpers" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
12
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
13
|
-
// CIL[DOC-AUDIENCE audience="
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// CIL[DOC-VECTOR type="
|
|
17
|
-
// CIL[DOC-VECTOR type="
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="spine-functions maintainers"]
|
|
10
|
+
|
|
11
|
+
import { adminDb } from './db'
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Module header for webhook-registration; imports shared database access.'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
18
16
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
19
17
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// CIL[BEGIN
|
|
23
|
-
// CIL[DOC-MACRO purpose="
|
|
24
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
25
|
-
// CIL[DOC-CONTEXT module="webhook-registration" layer="
|
|
18
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registration.ts:module_header:module_header"]
|
|
19
|
+
|
|
20
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registration.ts:WebhookHandlerRegistration:interface" type="interface" identity="WebhookHandlerRegistration" parent="~/.framework/functions/_shared/webhook-registration.ts"]
|
|
21
|
+
// CIL[DOC-MACRO purpose="Defines the configuration shape for registering a webhook handler"]
|
|
22
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the fields required to register a webhook handler"]
|
|
23
|
+
// CIL[DOC-CONTEXT module="webhook-registration" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registration.ts"]
|
|
26
24
|
// CIL[DOC-CONTRACT inputs="none" outputs="WebhookHandlerRegistration interface" errors="none" side_effects="none"]
|
|
27
|
-
// CIL[DOC-MICRO logic_summary="
|
|
28
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
25
|
+
// CIL[DOC-MICRO logic_summary="Exported interface describing name, functionName, optional description, events, appId, accountId, isSystem, and an optional db override" notable_decisions="[]"]
|
|
26
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
29
27
|
// CIL[DOC-STABILITY stability="stable"]
|
|
30
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
31
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
32
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
33
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
34
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
35
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
36
28
|
export interface WebhookHandlerRegistration {
|
|
37
29
|
name: string
|
|
38
30
|
functionName: string
|
|
@@ -43,21 +35,22 @@ export interface WebhookHandlerRegistration {
|
|
|
43
35
|
isSystem?: boolean
|
|
44
36
|
db?: typeof adminDb
|
|
45
37
|
}
|
|
46
|
-
// CIL[
|
|
47
|
-
// CIL[
|
|
48
|
-
// CIL[DOC-
|
|
49
|
-
// CIL[DOC-
|
|
50
|
-
// CIL[DOC-CONTEXT module="webhook-registration" layer="shared" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
|
|
51
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="database errors" side_effects="database update"]
|
|
52
|
-
// CIL[DOC-MICRO logic_summary="Upserts handler record with metadata and activation status" notable_decisions="[]"]
|
|
53
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
54
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
55
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
|
|
56
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
57
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
58
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
38
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the configuration shape for registering a webhook handler'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
39
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
40
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
41
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
59
42
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
60
43
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
44
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registration.ts:WebhookHandlerRegistration:interface"]
|
|
45
|
+
|
|
46
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registration.ts:registerWebhookHandler:function" type="function" identity="registerWebhookHandler" parent="~/.framework/functions/_shared/webhook-registration.ts"]
|
|
47
|
+
// CIL[DOC-MACRO purpose="Registers or updates a webhook handler record in the database"]
|
|
48
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Upsert an active webhook_handlers row for the given configuration"]
|
|
49
|
+
// CIL[DOC-CONTEXT module="webhook-registration" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registration.ts"]
|
|
50
|
+
// CIL[DOC-CONTRACT inputs="config: WebhookHandlerRegistration" outputs="void" errors="Supabase upsert error or thrown error" side_effects="Inserts/updates a row in webhook_handlers and logs to console"]
|
|
51
|
+
// CIL[DOC-MICRO logic_summary="Uses provided db or adminDb, upserts a row with name, function_name, description, events, app_id, account_id, is_system, is_active, is_deleted, and timestamps, on conflict on app_id,account_id,name; throws on error" notable_decisions="[]"]
|
|
52
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
53
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
61
54
|
export async function registerWebhookHandler(
|
|
62
55
|
config: WebhookHandlerRegistration
|
|
63
56
|
): Promise<void> {
|
|
@@ -93,21 +86,22 @@ export async function registerWebhookHandler(
|
|
|
93
86
|
throw err
|
|
94
87
|
}
|
|
95
88
|
}
|
|
96
|
-
// CIL[
|
|
97
|
-
// CIL[
|
|
98
|
-
// CIL[DOC-
|
|
99
|
-
// CIL[DOC-
|
|
100
|
-
// CIL[DOC-CONTEXT module="webhook-registration" layer="shared" related_files="[\"\\\"]"]
|
|
101
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="database errors" side_effects="database update"]
|
|
102
|
-
// CIL[DOC-MICRO logic_summary="Updates handler to inactive and deleted status" notable_decisions="[]"]
|
|
103
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
104
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
105
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: \."]
|
|
106
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
107
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
108
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
89
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Registers or updates a webhook handler record in the database'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
90
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
91
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
92
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
109
93
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
110
94
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
95
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registration.ts:registerWebhookHandler:function"]
|
|
96
|
+
|
|
97
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registration.ts:deregisterWebhookHandler:function" type="function" identity="deregisterWebhookHandler" parent="~/.framework/functions/_shared/webhook-registration.ts"]
|
|
98
|
+
// CIL[DOC-MACRO purpose="Marks a webhook handler as inactive and deleted in the database"]
|
|
99
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Soft-delete a webhook handler by name and optional scope"]
|
|
100
|
+
// CIL[DOC-CONTEXT module="webhook-registration" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registration.ts"]
|
|
101
|
+
// CIL[DOC-CONTRACT inputs="name: string, appId: string | null, accountId: string | null, db: typeof adminDb" outputs="void" errors="Supabase update error or thrown error" side_effects="Updates webhook_handlers setting is_active=false, is_deleted=true, deleted_at; logs to console"]
|
|
102
|
+
// CIL[DOC-MICRO logic_summary="Builds an update query filtered by name and optional appId/accountId, sets is_active and is_deleted flags with deleted_at, throws on error" notable_decisions="[]"]
|
|
103
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
104
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
111
105
|
export async function deregisterWebhookHandler(
|
|
112
106
|
name: string,
|
|
113
107
|
appId: string | null = null,
|
|
@@ -140,21 +134,22 @@ export async function deregisterWebhookHandler(
|
|
|
140
134
|
throw err
|
|
141
135
|
}
|
|
142
136
|
}
|
|
143
|
-
// CIL[
|
|
144
|
-
// CIL[
|
|
145
|
-
// CIL[DOC-
|
|
146
|
-
// CIL[DOC-
|
|
147
|
-
// CIL[DOC-CONTEXT module="webhook-registration" layer="shared" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\"]"]
|
|
148
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="database errors" side_effects="none"]
|
|
149
|
-
// CIL[DOC-MICRO logic_summary="Queries webhook_handlers table for active, non-deleted handler" notable_decisions="[]"]
|
|
150
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
151
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
152
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx."]
|
|
153
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
154
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
155
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
137
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Marks a webhook handler as inactive and deleted in the database'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
138
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
139
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
140
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
156
141
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
157
142
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
143
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registration.ts:deregisterWebhookHandler:function"]
|
|
144
|
+
|
|
145
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registration.ts:isHandlerRegistered:function" type="function" identity="isHandlerRegistered" parent="~/.framework/functions/_shared/webhook-registration.ts"]
|
|
146
|
+
// CIL[DOC-MACRO purpose="Checks whether an active, non-deleted webhook handler exists"]
|
|
147
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query the database and return a boolean indicating registration status"]
|
|
148
|
+
// CIL[DOC-CONTEXT module="webhook-registration" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registration.ts"]
|
|
149
|
+
// CIL[DOC-CONTRACT inputs="name: string, db: typeof adminDb" outputs="boolean" errors="Supabase query error" side_effects="none"]
|
|
150
|
+
// CIL[DOC-MICRO logic_summary="Selects name from webhook_handlers filtered by name, is_active, is_deleted with maybeSingle; returns true if a row exists, false on error" notable_decisions="[]"]
|
|
151
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
152
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
158
153
|
export async function isHandlerRegistered(
|
|
159
154
|
name: string,
|
|
160
155
|
db: typeof adminDb = adminDb
|
|
@@ -179,4 +174,10 @@ export async function isHandlerRegistered(
|
|
|
179
174
|
return false
|
|
180
175
|
}
|
|
181
176
|
}
|
|
182
|
-
// CIL[
|
|
177
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Checks whether an active, non-deleted webhook handler exists'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
178
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
179
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
180
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
181
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
182
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
183
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registration.ts:isHandlerRegistered:function"]
|
|
@@ -1,46 +1,74 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Defines the shared webhook handler registry and its data access for serverless functions"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide imports, types, and core utilities for resolving and loading webhook handler functions"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Contains the file header and shared adminDb import used by the registry functions" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="spine-functions maintainers"]
|
|
1
10
|
|
|
11
|
+
import { adminDb } from './db'
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the shared webhook handler registry and its data access for serverless functions'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
16
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
18
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:module_header:module_header"]
|
|
2
19
|
|
|
3
20
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// CIL[
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-
|
|
9
|
-
// CIL[DOC-
|
|
10
|
-
// CIL[DOC-
|
|
11
|
-
// CIL[DOC-MICRO logic_summary="Import database and initialize Map for handler metadata caching" notable_decisions="[]"]
|
|
12
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
21
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:HandlerCacheEntry:interface" type="interface" identity="HandlerCacheEntry" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
22
|
+
// CIL[DOC-MACRO purpose="Type definition for a cached webhook handler entry"]
|
|
23
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of an in-memory cached handler record"]
|
|
24
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
25
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
26
|
+
// CIL[DOC-MICRO logic_summary="Declares functionName and loaded boolean fields" notable_decisions="[]"]
|
|
27
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
13
28
|
// CIL[DOC-STABILITY stability="stable"]
|
|
14
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
15
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
16
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
17
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
18
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
19
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
|
-
import { adminDb } from './db'
|
|
22
29
|
|
|
23
30
|
interface HandlerCacheEntry {
|
|
24
31
|
functionName: string
|
|
25
32
|
loaded: boolean
|
|
26
33
|
}
|
|
34
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Type definition for a cached webhook handler entry'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
35
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
36
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
37
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
38
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
39
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
40
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:HandlerCacheEntry:interface"]
|
|
27
41
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// CIL[BEGIN
|
|
31
|
-
// CIL[DOC-MACRO purpose="
|
|
32
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
33
|
-
// CIL[DOC-CONTEXT module="webhook-registry" layer="
|
|
34
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="
|
|
35
|
-
// CIL[DOC-MICRO logic_summary="
|
|
36
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:handlerCache:constant" type="constant" identity="handlerCache" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
45
|
+
// CIL[DOC-MACRO purpose="In-memory cache of resolved webhook handler metadata"]
|
|
46
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Store loaded handler lookups to avoid repeated DB queries"]
|
|
47
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
48
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="Mutates when lookups or cache clears occur"]
|
|
49
|
+
// CIL[DOC-MICRO logic_summary="Map keyed by appId, accountId, and handlerName" notable_decisions="[]"]
|
|
50
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
37
51
|
// CIL[DOC-STABILITY stability="stable"]
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// CIL[DOC-VECTOR type="
|
|
41
|
-
// CIL[DOC-VECTOR type="
|
|
52
|
+
|
|
53
|
+
const handlerCache = new Map<string, HandlerCacheEntry>()
|
|
54
|
+
// CIL[DOC-VECTOR type="context" content="purpose='In-memory cache of resolved webhook handler metadata'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
55
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
56
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
57
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
42
58
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
43
59
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
60
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:handlerCache:constant"]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:lookupHandler:function" type="function" identity="lookupHandler" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
64
|
+
// CIL[DOC-MACRO purpose="Look up a webhook handler by name and optional scope, with fallback to global handlers"]
|
|
65
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Resolve the serverless function name for a given webhook handler"]
|
|
66
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
67
|
+
// CIL[DOC-CONTRACT inputs="handlerName: string, appId: string | null | undefined, accountId: string | null | undefined" outputs="{ functionName: string } | null" errors="Returns null when not found; logs console warnings" side_effects="Writes matching entries to handlerCache"]
|
|
68
|
+
// CIL[DOC-MICRO logic_summary="Builds a cache key, checks the cache, queries webhook_handlers with optional app and account filters, falls back to a null-scoped handler, and caches the result" notable_decisions="[]"]
|
|
69
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
70
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
71
|
+
|
|
44
72
|
export async function lookupHandler(
|
|
45
73
|
handlerName: string,
|
|
46
74
|
appId?: string | null,
|
|
@@ -52,6 +80,7 @@ export async function lookupHandler(
|
|
|
52
80
|
return { functionName: cached.functionName }
|
|
53
81
|
}
|
|
54
82
|
|
|
83
|
+
|
|
55
84
|
let query = adminDb
|
|
56
85
|
.from('webhook_handlers')
|
|
57
86
|
.select('name, function_name, is_active, is_deleted')
|
|
@@ -100,21 +129,23 @@ export async function lookupHandler(
|
|
|
100
129
|
|
|
101
130
|
return { functionName: data.function_name }
|
|
102
131
|
}
|
|
103
|
-
// CIL[
|
|
104
|
-
// CIL[
|
|
105
|
-
// CIL[DOC-
|
|
106
|
-
// CIL[DOC-
|
|
107
|
-
// CIL[DOC-CONTEXT module="webhook-registry" layer="shared" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
|
|
108
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Function or null" errors="import errors" side_effects="module loading"]
|
|
109
|
-
// CIL[DOC-MICRO logic_summary="Dynamic import with handler/default export validation" notable_decisions="[]"]
|
|
110
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
111
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
112
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/migrations/025_retype_threads_messages.sql, \."]
|
|
113
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
114
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
115
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
132
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Look up a webhook handler by name and optional scope, with fallback to global handlers'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
133
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
134
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
135
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
116
136
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
117
137
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
138
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:lookupHandler:function"]
|
|
139
|
+
|
|
140
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:loadHandler:function" type="function" identity="loadHandler" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
141
|
+
// CIL[DOC-MACRO purpose="Dynamically import and extract a handler function by module name"]
|
|
142
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load the configured serverless function at runtime"]
|
|
143
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
144
|
+
// CIL[DOC-CONTRACT inputs="functionName: string" outputs="Function | null" errors="Returns null if export missing or dynamic import fails; logs console errors" side_effects="None beyond module import"]
|
|
145
|
+
// CIL[DOC-MICRO logic_summary="Chooses a relative import prefix based on custom/ prefix, awaits the module, and returns the first available adapt, handler, or default export" notable_decisions="[]"]
|
|
146
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
147
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
148
|
+
|
|
118
149
|
export async function loadHandler(functionName: string): Promise<Function | null> {
|
|
119
150
|
try {
|
|
120
151
|
const prefix = functionName.startsWith('custom/') ? '../../../' : '../'
|
|
@@ -133,21 +164,23 @@ export async function loadHandler(functionName: string): Promise<Function | null
|
|
|
133
164
|
return null
|
|
134
165
|
}
|
|
135
166
|
}
|
|
136
|
-
// CIL[
|
|
137
|
-
// CIL[
|
|
138
|
-
// CIL[DOC-
|
|
139
|
-
// CIL[DOC-
|
|
140
|
-
// CIL[DOC-CONTEXT module="webhook-registry" layer="shared" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
141
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Function or null" errors="lookup/load errors" side_effects="cache update"]
|
|
142
|
-
// CIL[DOC-MICRO logic_summary="Looks up metadata then loads and returns handler function" notable_decisions="[]"]
|
|
143
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
144
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
145
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, \."]
|
|
146
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
147
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
148
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
167
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Dynamically import and extract a handler function by module name'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
168
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
169
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
170
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
149
171
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
150
172
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
173
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:loadHandler:function"]
|
|
174
|
+
|
|
175
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:resolveHandler:function" type="function" identity="resolveHandler" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
176
|
+
// CIL[DOC-MACRO purpose="Resolve and load a handler in one call"]
|
|
177
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Combine lookup and load for a given webhook handler name"]
|
|
178
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
179
|
+
// CIL[DOC-CONTRACT inputs="handlerName: string, appId?: string | null, accountId?: string | null" outputs="Function | null" errors="Returns null when lookup or load fails" side_effects="May populate handlerCache via lookupHandler"]
|
|
180
|
+
// CIL[DOC-MICRO logic_summary="Calls lookupHandler then loadHandler and returns the loaded function" notable_decisions="[]"]
|
|
181
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
182
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
183
|
+
|
|
151
184
|
export async function resolveHandler(
|
|
152
185
|
handlerName: string,
|
|
153
186
|
appId?: string | null,
|
|
@@ -158,39 +191,43 @@ export async function resolveHandler(
|
|
|
158
191
|
|
|
159
192
|
return loadHandler(metadata.functionName)
|
|
160
193
|
}
|
|
161
|
-
// CIL[
|
|
162
|
-
// CIL[
|
|
163
|
-
// CIL[DOC-
|
|
164
|
-
// CIL[DOC-
|
|
165
|
-
// CIL[DOC-CONTEXT module="webhook-registry" layer="shared" related_files="[]"]
|
|
166
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="cache cleared"]
|
|
167
|
-
// CIL[DOC-MICRO logic_summary="Clears Map cache to force fresh database queries" notable_decisions="[]"]
|
|
168
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
169
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
170
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
171
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
172
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
173
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
194
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolve and load a handler in one call'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
195
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
196
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
197
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
174
198
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
175
199
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
200
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:resolveHandler:function"]
|
|
201
|
+
|
|
202
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:clearHandlerCache:function" type="function" identity="clearHandlerCache" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
203
|
+
// CIL[DOC-MACRO purpose="Clear the in-memory handler cache"]
|
|
204
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Allow callers to invalidate cached webhook handler metadata"]
|
|
205
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
206
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Empties the handlerCache map"]
|
|
207
|
+
// CIL[DOC-MICRO logic_summary="Calls Map.clear on the handler cache" notable_decisions="[]"]
|
|
208
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
209
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
210
|
+
|
|
176
211
|
export function clearHandlerCache(): void {
|
|
177
212
|
handlerCache.clear()
|
|
178
213
|
}
|
|
179
|
-
// CIL[
|
|
180
|
-
// CIL[
|
|
181
|
-
// CIL[DOC-
|
|
182
|
-
// CIL[DOC-
|
|
183
|
-
// CIL[DOC-CONTEXT module="webhook-registry" layer="shared" related_files="[]"]
|
|
184
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="string array" errors="database errors" side_effects="none"]
|
|
185
|
-
// CIL[DOC-MICRO logic_summary="Queries webhook_handlers table and returns active handler names" notable_decisions="[]"]
|
|
186
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
187
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
188
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
189
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
190
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
191
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
214
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Clear the in-memory handler cache'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
215
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
216
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
217
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
192
218
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
193
219
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
220
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:clearHandlerCache:function"]
|
|
221
|
+
|
|
222
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/webhook-registry.ts:listRegisteredHandlers:function" type="function" identity="listRegisteredHandlers" parent="~/.framework/functions/_shared/webhook-registry.ts"]
|
|
223
|
+
// CIL[DOC-MACRO purpose="List active webhook handler names from the database"]
|
|
224
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a roster of available, active handlers"]
|
|
225
|
+
// CIL[DOC-CONTEXT module="webhook-registry" layer="functions" related_files=".framework/functions/_shared/db.ts,.framework/functions/_shared/webhook-registry.ts"]
|
|
226
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="string[]" errors="Returns empty array and logs error on DB failure" side_effects="None"]
|
|
227
|
+
// CIL[DOC-MICRO logic_summary="Queries webhook_handlers for active names and returns an array of name values" notable_decisions="[]"]
|
|
228
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
229
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
230
|
+
|
|
194
231
|
export async function listRegisteredHandlers(): Promise<string[]> {
|
|
195
232
|
const { data, error } = await adminDb
|
|
196
233
|
.from('webhook_handlers')
|
|
@@ -204,4 +241,10 @@ export async function listRegisteredHandlers(): Promise<string[]> {
|
|
|
204
241
|
|
|
205
242
|
return data?.map(h => h.name) || []
|
|
206
243
|
}
|
|
207
|
-
// CIL[
|
|
244
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List active webhook handler names from the database'; No verified external callers; imports: .framework/functions/_shared/db.ts"]
|
|
245
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
246
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
247
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
248
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
249
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
250
|
+
// CIL[END stable_id="~/.framework/functions/_shared/webhook-registry.ts:listRegisteredHandlers:function"]
|
|
@@ -1,38 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
// CIL[
|
|
3
|
-
// CIL[DOC-
|
|
4
|
-
// CIL[DOC-
|
|
5
|
-
// CIL[DOC-
|
|
6
|
-
// CIL[DOC-
|
|
7
|
-
// CIL[DOC-
|
|
8
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/account-nodes.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/account-nodes.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Netlify function entry point for account node retrieval and traversal"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Expose the handler that loads an account node with its ancestors, children, and descendants"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="account-nodes" layer="edge-function" related_files=".framework/functions/_shared/middleware.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, body: unknown" outputs="{ node, ancestors, children, descendants }" errors="Missing node_id, account not found, database errors" side_effects="Queries accounts table and calls get_account_ancestors/get_account_descendants RPCs"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Wraps createHandler to read node_id, validate presence, fetch the active account with its type, then retrieve ancestors, children, and descendants" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
9
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
10
|
-
// CIL[DOC-AUDIENCE audience="
|
|
11
|
-
|
|
12
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
13
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
14
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
15
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
16
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="api consumer"]
|
|
10
|
+
|
|
17
11
|
import { createHandler } from './_shared/middleware'
|
|
18
|
-
// CIL[
|
|
19
|
-
// CIL[
|
|
20
|
-
// CIL[DOC-
|
|
21
|
-
// CIL[DOC-
|
|
22
|
-
// CIL[DOC-CONTEXT module="account-nodes" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
23
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="{node,ancestors,children,descendants}" errors="node_id_required,node_not_found" side_effects="database_queries,rpc_calls"]
|
|
24
|
-
// CIL[DOC-MICRO logic_summary="Queries target node, uses RPC for ancestors/descendants, fetches direct children" notable_decisions="[]"]
|
|
25
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
26
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
27
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
28
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
29
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
30
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function entry point for account node retrieval and traversal'; No verified external callers; imports: .framework/functions/_shared/middleware.ts"]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
31
16
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
32
17
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
18
|
+
// CIL[END stable_id="~/.framework/functions/account-nodes.ts:module_header:module_header"]
|
|
19
|
+
// CIL[BEGIN stable_id="~/.framework/functions/account-nodes.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/account-nodes.ts"]
|
|
20
|
+
// CIL[DOC-MACRO purpose="Load a single account node and related tree"]
|
|
21
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Fetch an active account by id plus ancestors, children, and descendants"]
|
|
22
|
+
// CIL[DOC-CONTEXT module="account-nodes" layer="edge-function" related_files=".framework/functions/_shared/middleware.ts,.framework/functions/account-nodes.ts"]
|
|
23
|
+
// CIL[DOC-CONTRACT inputs="node_id: string" outputs="{ node, ancestors: Account[], children: Account[], descendants: Account[] }" errors="Account node not found, database RPC errors" side_effects="Queries accounts table and calls get_account_ancestors and get_account_descendants RPCs"]
|
|
24
|
+
// CIL[DOC-MICRO logic_summary="Validate node_id, fetch account, get ancestors, children, and descendants from database; return all four collections" notable_decisions="[]"]
|
|
25
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
26
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
33
27
|
export const handler = createHandler(async (ctx, body) => {
|
|
34
28
|
const { node_id } = ctx.query || {}
|
|
35
|
-
|
|
29
|
+
|
|
36
30
|
if (!node_id) {
|
|
37
31
|
throw new Error('node_id is required')
|
|
38
32
|
}
|
|
@@ -86,4 +80,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
86
80
|
descendants: descendants || []
|
|
87
81
|
}
|
|
88
82
|
})
|
|
89
|
-
// CIL[
|
|
83
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Load a single account node and related tree'; No verified external callers; imports: .framework/functions/_shared/middleware.ts"]
|
|
84
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
85
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
86
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
87
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
88
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
89
|
+
// CIL[END stable_id="~/.framework/functions/account-nodes.ts:handler:constant"]
|