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,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module pipeline-runner
|
|
3
|
+
* @audience internal
|
|
4
|
+
* @layer shared-core
|
|
5
|
+
* @stability stable
|
|
6
|
+
*
|
|
7
|
+
* This module serves as a pipeline runner that orchestrates the execution of various tasks within the system. It integrates with middleware, database operations, and auditing mechanisms to ensure a cohesive flow of operations. The module is designed to handle multi-step processes, ensuring that each step is executed in the correct order and context.
|
|
8
|
+
*
|
|
9
|
+
* INVARIANT: The CoreContext must always be provided to maintain the integrity of the operations.
|
|
10
|
+
*
|
|
11
|
+
* @seeAlso middleware (provides context for operations).
|
|
12
|
+
* @seeAlso db (handles database interactions).
|
|
13
|
+
* @seeAlso audit (manages auditing of operations).
|
|
14
|
+
* @seeAlso integration-outbound (executes outbound integrations).
|
|
15
|
+
*
|
|
16
|
+
* @cil-generated
|
|
17
|
+
*/
|
|
18
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
19
|
+
// CIL[DOC-MACRO purpose="This module serves as a pipeline runner that orchestrates the execution of various tasks within the system."]
|
|
20
|
+
// CIL[DOC-RESPONSIBILITY responsibility="This module serves as a pipeline runner that orchestrates the execution of various tasks within the system. It integrates with middleware, database operations, and auditing mechanisms to ensure a cohesive flow of operations. The module is designed to handle multi-step processes, ensuring that each step is executed in the correct order and context. INVARIANT: The CoreContext must always be provided to maintain the integrity of the operations."]
|
|
21
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="shared-core" related_files="middleware (provides context for operations).,db (handles database interactions).,audit (manages auditing of operations).,integration-outbound (executes outbound integrations)."]
|
|
22
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
23
|
+
// CIL[DOC-MICRO logic_summary="This module serves as a pipeline runner that orchestrates the execution of various tasks within the system. It integrates with middleware, database operations, and auditing mechanisms to ensure a cohesive flow of operations. The module is designed to handle multi-step processes, ensuring that each step is executed in the correct order and context. INVARIANT: The CoreContext must always be provided to maintain the integrity of the operations." notable_decisions="none"]
|
|
24
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
25
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
26
|
+
// CIL[DOC-AUDIENCE audience="internal"]
|
|
1
27
|
|
|
2
28
|
|
|
3
29
|
|
|
@@ -7,45 +33,125 @@
|
|
|
7
33
|
|
|
8
34
|
|
|
9
35
|
|
|
10
|
-
// CIL[BEGIN chunk_id="pipelinerunner_imports_1784020784" type="module_header" identity="imports" parent="none"]
|
|
11
|
-
// CIL[DOC-MACRO purpose="Import dependencies for pipeline execution"]
|
|
12
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import context, database, and audit modules"]
|
|
13
|
-
// CIL[DOC-CONTEXT module="pipeline-runner" 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\",\"\\\"]"]
|
|
14
|
-
// CIL[DOC-CONTRACT inputs="v" outputs="CoreContext, adminDb, emitAudit, UUID utilities" errors="none" side_effects="none"]
|
|
15
|
-
// CIL[DOC-MICRO logic_summary="Import required modules and UUID validation utilities" notable_decisions="[]"]
|
|
16
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
17
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
18
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
19
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. 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, \."]
|
|
20
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
21
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
22
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
23
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
24
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
25
36
|
import { CoreContext } from './middleware'
|
|
26
37
|
import { adminDb } from './db'
|
|
27
38
|
import { emitAudit, emitSpan } from './audit'
|
|
28
39
|
import { emitOutcome } from './outcomes'
|
|
29
40
|
import { withSpan } from './tracing'
|
|
30
|
-
import {
|
|
31
|
-
|
|
41
|
+
import { resolveKnowledgeScope, knowledgeRowAllowed } from './kb'
|
|
42
|
+
import { resolveNotificationRecipients } from './notify'
|
|
43
|
+
// integration-outbound is imported lazily — a static edge closes the cycle
|
|
44
|
+
// middleware → security → rate-limit → funnel → trigger-engine →
|
|
45
|
+
// pipeline-runner → integration-outbound → middleware, leaving createHandler
|
|
46
|
+
// undefined during module evaluation.
|
|
47
|
+
const executeOutbound = async (ctx: CoreContext, args: any) =>
|
|
48
|
+
(await import('../integration-outbound')).execute(ctx, args)
|
|
49
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:module_header:module_header"]
|
|
50
|
+
// CIL[DOC-VECTOR type="context" content="purpose='This module serves as a pipeline runner that orchestrates the execution of various tasks within the system.'; No verified external callers" status="ready"]
|
|
51
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
52
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
53
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
54
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
55
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
56
|
+
// CIL[DOC-MACRO purpose="UUID_RE is a regular expression that validates the format of UUIDs."]
|
|
57
|
+
// CIL[DOC-RESPONSIBILITY responsibility="UUID_RE is a regular expression that validates the format of UUIDs. It exists to ensure that any UUIDs processed in this module conform to the standard UUID format."]
|
|
58
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
59
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
60
|
+
// CIL[DOC-MICRO logic_summary="UUID_RE is a regular expression that validates the format of UUIDs. It exists to ensure that any UUIDs processed in this module conform to the standard UUID format." notable_decisions="none"]
|
|
61
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
62
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
63
|
+
/**
|
|
64
|
+
* UUID_RE is a regular expression that validates the format of UUIDs. It exists to ensure that any UUIDs processed in this module conform to the standard UUID format.
|
|
65
|
+
*
|
|
66
|
+
* @sideEffects none
|
|
67
|
+
* @stability stable
|
|
68
|
+
* @cil-generated
|
|
69
|
+
*/
|
|
70
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:uuid_re:constant" type="constant" identity="UUID_RE" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
71
|
+
// CIL[DOC-MACRO purpose="UUID_RE constant"]
|
|
72
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the UUID_RE constant."]
|
|
73
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
74
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
75
|
+
// CIL[DOC-MICRO logic_summary="Implements the UUID_RE constant." notable_decisions="[]"]
|
|
76
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
77
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
32
78
|
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
|
|
79
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:uuid_re:constant"]
|
|
80
|
+
// CIL[DOC-MACRO purpose="UUID_RE constant"]
|
|
81
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the UUID_RE constant."]
|
|
82
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
83
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
84
|
+
// CIL[DOC-MICRO logic_summary="Implements the UUID_RE constant." notable_decisions="[]"]
|
|
85
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
86
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="purpose='UUID_RE is a regular expression that validates the format of UUIDs.'; No verified external callers" status="ready"]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
91
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
92
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[DOC-MACRO purpose="Validates whether a given string is a properly formatted UUID."]
|
|
94
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validates whether a given string is a properly formatted UUID. This function is essential for ensuring that UUIDs are correctly identified in the pipeline processing."]
|
|
95
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
96
|
+
// CIL[DOC-CONTRACT inputs="- v: string (optional|nullable) — the value to be checked for UUID format." outputs="v is string — returns true if v is a valid UUID, otherwise false." errors="none" side_effects="none"]
|
|
97
|
+
// CIL[DOC-MICRO logic_summary="Validates whether a given string is a properly formatted UUID. This function is essential for ensuring that UUIDs are correctly identified in the pipeline processing." notable_decisions="none"]
|
|
98
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
99
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
100
|
+
/**
|
|
101
|
+
* Validates whether a given string is a properly formatted UUID. This function is essential for ensuring that UUIDs are correctly identified in the pipeline processing.
|
|
102
|
+
*
|
|
103
|
+
* @inputSpec
|
|
104
|
+
* - v: string (optional|nullable) — the value to be checked for UUID format.
|
|
105
|
+
* @outputSpec v is string — returns true if v is a valid UUID, otherwise false.
|
|
106
|
+
* @sideEffects none
|
|
107
|
+
* @stability stable
|
|
108
|
+
* @cil-generated
|
|
109
|
+
*/
|
|
110
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:isuuid:function" type="function" identity="isUuid" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
111
|
+
// CIL[DOC-MACRO purpose="isUuid function"]
|
|
112
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the isUuid function."]
|
|
113
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
114
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
115
|
+
// CIL[DOC-MICRO logic_summary="Implements the isUuid function." notable_decisions="[]"]
|
|
116
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
117
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
33
118
|
function isUuid(v: string | undefined | null): v is string { return !!v && UUID_RE.test(v) }
|
|
34
|
-
// CIL[END
|
|
35
|
-
// CIL[
|
|
36
|
-
// CIL[DOC-
|
|
37
|
-
// CIL[DOC-
|
|
38
|
-
// CIL[DOC-
|
|
39
|
-
// CIL[DOC-
|
|
40
|
-
// CIL[DOC-
|
|
41
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
119
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:isuuid:function"]
|
|
120
|
+
// CIL[DOC-MACRO purpose="isUuid function"]
|
|
121
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the isUuid function."]
|
|
122
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
123
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
124
|
+
// CIL[DOC-MICRO logic_summary="Implements the isUuid function." notable_decisions="[]"]
|
|
125
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
42
126
|
// CIL[DOC-STABILITY stability="stable"]
|
|
43
|
-
// CIL[DOC-VECTOR type="context" content="
|
|
44
|
-
// CIL[DOC-VECTOR type="blast_radius" content="
|
|
45
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies
|
|
46
|
-
// CIL[DOC-VECTOR type="constraint" content="
|
|
127
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Validates whether a given string is a properly formatted UUID.'; No verified external callers" status="ready"]
|
|
128
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
129
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
130
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
47
131
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
48
132
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
133
|
+
// CIL[DOC-MACRO purpose="The StageResult interface defines the structure of the result produced by a stage in a pipeline execution."]
|
|
134
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The StageResult interface defines the structure of the result produced by a stage in a pipeline execution. It captures essential information about the stage's execution status, output, and duration."]
|
|
135
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
136
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
137
|
+
// CIL[DOC-MICRO logic_summary="The StageResult interface defines the structure of the result produced by a stage in a pipeline execution. It captures essential information about the stage's execution status, output, and duration." notable_decisions="none"]
|
|
138
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
139
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
140
|
+
/**
|
|
141
|
+
* The StageResult interface defines the structure of the result produced by a stage in a pipeline execution. It captures essential information about the stage's execution status, output, and duration.
|
|
142
|
+
*
|
|
143
|
+
* @sideEffects none
|
|
144
|
+
* @stability stable
|
|
145
|
+
* @cil-generated
|
|
146
|
+
*/
|
|
147
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:stageresult:interface" type="interface" identity="StageResult" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
148
|
+
// CIL[DOC-MACRO purpose="StageResult interface"]
|
|
149
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the StageResult interface."]
|
|
150
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
151
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
152
|
+
// CIL[DOC-MICRO logic_summary="Implements the StageResult interface." notable_decisions="[]"]
|
|
153
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
154
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
49
155
|
export interface StageResult {
|
|
50
156
|
stageIndex: number
|
|
51
157
|
stageType: string
|
|
@@ -54,21 +160,35 @@ export interface StageResult {
|
|
|
54
160
|
error?: string
|
|
55
161
|
durationMs: number
|
|
56
162
|
}
|
|
57
|
-
// CIL[END
|
|
58
|
-
// CIL[
|
|
59
|
-
// CIL[DOC-
|
|
60
|
-
// CIL[DOC-
|
|
61
|
-
// CIL[DOC-
|
|
62
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ExecutionResult interface" errors="none" side_effects="none"]
|
|
63
|
-
// CIL[DOC-MICRO logic_summary="Interface for tracking overall pipeline execution with all stages" notable_decisions="[]"]
|
|
64
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
65
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
66
|
-
// 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/functions/custom_cil-embeddings.ts, \."]
|
|
67
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
68
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
69
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
163
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:stageresult:interface"]
|
|
164
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The StageResult interface defines the structure of the result produced by a stage in a pipeline execution.'; No verified external callers" status="ready"]
|
|
165
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
166
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
167
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
70
168
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
71
169
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
170
|
+
// CIL[DOC-MACRO purpose="The ExecutionResult interface defines the structure of the result returned after executing a pipeline, including its status and duration."]
|
|
171
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The ExecutionResult interface defines the structure of the result returned after executing a pipeline, including its status and duration. It is essential for tracking the outcome of pipeline executions in the system."]
|
|
172
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
173
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
174
|
+
// CIL[DOC-MICRO logic_summary="The ExecutionResult interface defines the structure of the result returned after executing a pipeline, including its status and duration. It is essential for tracking the outcome of pipeline executions in the system." notable_decisions="none"]
|
|
175
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
176
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
177
|
+
/**
|
|
178
|
+
* The ExecutionResult interface defines the structure of the result returned after executing a pipeline, including its status and duration. It is essential for tracking the outcome of pipeline executions in the system.
|
|
179
|
+
*
|
|
180
|
+
* @sideEffects none
|
|
181
|
+
* @stability stable
|
|
182
|
+
* @cil-generated
|
|
183
|
+
*/
|
|
184
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executionresult:interface" type="interface" identity="ExecutionResult" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
185
|
+
// CIL[DOC-MACRO purpose="ExecutionResult interface"]
|
|
186
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the ExecutionResult interface."]
|
|
187
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
188
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
189
|
+
// CIL[DOC-MICRO logic_summary="Implements the ExecutionResult interface." notable_decisions="[]"]
|
|
190
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
191
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
72
192
|
export interface ExecutionResult {
|
|
73
193
|
executionId: string
|
|
74
194
|
pipelineId: string
|
|
@@ -77,41 +197,79 @@ export interface ExecutionResult {
|
|
|
77
197
|
durationMs: number
|
|
78
198
|
error?: string
|
|
79
199
|
}
|
|
80
|
-
// CIL[END
|
|
81
|
-
// CIL[
|
|
82
|
-
// CIL[DOC-
|
|
83
|
-
// CIL[DOC-
|
|
84
|
-
// CIL[DOC-
|
|
85
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="PipelineStage interface" errors="none" side_effects="none"]
|
|
86
|
-
// CIL[DOC-MICRO logic_summary="Interface for defining pipeline stage type and configuration" notable_decisions="[]"]
|
|
87
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
88
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
89
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
90
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
91
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
92
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
200
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executionresult:interface"]
|
|
201
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The ExecutionResult interface defines the structure of the result returned after executing a pipeline, including its status and duration.'; No verified external callers" status="ready"]
|
|
202
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
203
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
204
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
93
205
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
94
206
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
207
|
+
// CIL[DOC-MACRO purpose="The PipelineStage interface defines the structure for a stage in a data processing pipeline, specifying the type of stage and its configuration options."]
|
|
208
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The PipelineStage interface defines the structure for a stage in a data processing pipeline, specifying the type of stage and its configuration options. It allows for flexible error handling and configuration management within the pipeline execution."]
|
|
209
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
210
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
211
|
+
// CIL[DOC-MICRO logic_summary="The PipelineStage interface defines the structure for a stage in a data processing pipeline, specifying the type of stage and its configuration options. It allows for flexible error handling and configuration management within the pipeline execution." notable_decisions="none"]
|
|
212
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
213
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
214
|
+
/**
|
|
215
|
+
* The PipelineStage interface defines the structure for a stage in a data processing pipeline, specifying the type of stage and its configuration options. It allows for flexible error handling and configuration management within the pipeline execution.
|
|
216
|
+
*
|
|
217
|
+
* @sideEffects none
|
|
218
|
+
* @stability stable
|
|
219
|
+
* @cil-generated
|
|
220
|
+
*/
|
|
221
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:pipelinestage:interface" type="interface" identity="PipelineStage" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
222
|
+
// CIL[DOC-MACRO purpose="PipelineStage interface"]
|
|
223
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the PipelineStage interface."]
|
|
224
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
225
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
226
|
+
// CIL[DOC-MICRO logic_summary="Implements the PipelineStage interface." notable_decisions="[]"]
|
|
227
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
228
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
95
229
|
interface PipelineStage {
|
|
96
230
|
stage_type: string
|
|
97
231
|
config?: Record<string, any>
|
|
98
232
|
continue_on_error?: boolean
|
|
99
233
|
}
|
|
100
|
-
// CIL[END
|
|
101
|
-
// CIL[
|
|
102
|
-
// CIL[DOC-
|
|
103
|
-
// CIL[DOC-
|
|
104
|
-
// CIL[DOC-
|
|
105
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="ExecutionResult" errors="Pipeline not found, execution failed" side_effects="Database updates, audit events"]
|
|
106
|
-
// CIL[DOC-MICRO logic_summary="Main pipeline executor handling stages, errors, and database tracking" notable_decisions="[]"]
|
|
107
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
108
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
109
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx."]
|
|
110
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
111
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
112
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
234
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:pipelinestage:interface"]
|
|
235
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The PipelineStage interface defines the structure for a stage in a data processing pipeline, specifying the type of stage and its configuration options.'; No verified external callers" status="ready"]
|
|
236
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
237
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
238
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
113
239
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
114
240
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
241
|
+
// CIL[DOC-MACRO purpose="Pipeline execution orchestrator that manages stage processing and error handling."]
|
|
242
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Runs a specified pipeline by executing its stages in sequence, tracking their results and handling errors. This function manages the lifecycle of a pipeline execution, including logging and database updates."]
|
|
243
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
244
|
+
// CIL[DOC-CONTRACT inputs="pipelineId: string (required) — The unique identifier of the pipeline to run.\\ntriggerData: any (optional) — Data to trigger the pipeline execution.\\nctx: CoreContext (required) — The context containing execution metadata and user information." outputs="Promise<ExecutionResult> — Returns the result of the pipeline execution, including stage results." errors="Error — Pipeline not found or inactive: {pipelineId}, Error — Failed to create execution: {execError?.message}, Error — Action not found for stage type: {stage.stage_type}, Error — Stage {i} ({stage.stage_type}) failed: {errorMessage}" side_effects="Writes to 'pipeline_executions' table, emits audit events. dependencies="adminDb.from('pipelines'), adminDb.from('pipeline_executions'), adminDb.from('actions'), executeStage, emitAudit"]
|
|
245
|
+
// CIL[DOC-MICRO logic_summary="Iterates through pipeline stages, executing each stage while capturing results and handling potential errors based on stage configuration." notable_decisions="Handles errors at each stage and decides whether to continue based on stage configuration."]
|
|
246
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
247
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
248
|
+
/**
|
|
249
|
+
* Runs a specified pipeline by executing its stages in sequence, tracking their results and handling errors. This function manages the lifecycle of a pipeline execution, including logging and database updates.
|
|
250
|
+
*
|
|
251
|
+
* @macro Pipeline execution orchestrator that manages stage processing and error handling.
|
|
252
|
+
* @micro Iterates through pipeline stages, executing each stage while capturing results and handling potential errors based on stage configuration.
|
|
253
|
+
* @inputSpec
|
|
254
|
+
* pipelineId: string (required) — The unique identifier of the pipeline to run.
|
|
255
|
+
* triggerData: any (optional) — Data to trigger the pipeline execution.
|
|
256
|
+
* ctx: CoreContext (required) — The context containing execution metadata and user information.
|
|
257
|
+
* @outputSpec Promise<ExecutionResult> — Returns the result of the pipeline execution, including stage results.
|
|
258
|
+
* @throws Error — Pipeline not found or inactive: {pipelineId}, Error — Failed to create execution: {execError?.message}, Error — Action not found for stage type: {stage.stage_type}, Error — Stage {i} ({stage.stage_type}) failed: {errorMessage}
|
|
259
|
+
* @sideEffects Writes to 'pipeline_executions' table, emits audit events.
|
|
260
|
+
* @stability stable
|
|
261
|
+
* @calls adminDb.from('pipelines'), adminDb.from('pipeline_executions'), adminDb.from('actions'), executeStage, emitAudit
|
|
262
|
+
* @errorHandling Handles errors at each stage and decides whether to continue based on stage configuration.
|
|
263
|
+
* @cil-generated
|
|
264
|
+
*/
|
|
265
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:runpipeline:function" type="function" identity="runPipeline" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
266
|
+
// CIL[DOC-MACRO purpose="runPipeline function"]
|
|
267
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the runPipeline function."]
|
|
268
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
269
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
270
|
+
// CIL[DOC-MICRO logic_summary="Implements the runPipeline function." notable_decisions="[]"]
|
|
271
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
272
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
115
273
|
export async function runPipeline(
|
|
116
274
|
pipelineId: string,
|
|
117
275
|
triggerData: any,
|
|
@@ -282,21 +440,44 @@ export async function runPipeline(
|
|
|
282
440
|
}
|
|
283
441
|
}, { onEnd: emitSpan })
|
|
284
442
|
}
|
|
285
|
-
// CIL[END
|
|
286
|
-
// CIL[
|
|
287
|
-
// CIL[DOC-
|
|
288
|
-
// CIL[DOC-
|
|
289
|
-
// CIL[DOC-
|
|
290
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="stage execution result" errors="Unknown handler module" side_effects="Handler execution"]
|
|
291
|
-
// CIL[DOC-MICRO logic_summary="Stage dispatcher routing to functions, integrations, or webhooks" notable_decisions="[]"]
|
|
292
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
293
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
294
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
295
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
296
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
297
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
443
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:runpipeline:function"]
|
|
444
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Runs a specified pipeline by executing its stages in sequence, tracking their results and handling errors.'; No verified external callers" status="ready"]
|
|
445
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
446
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
447
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
298
448
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
299
449
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
450
|
+
// CIL[DOC-MACRO purpose="Async function orchestrating the execution of various pipeline handlers."]
|
|
451
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Executes a specific stage of a pipeline based on the provided action and configuration. It dynamically routes the execution to the appropriate handler based on the action's module type."]
|
|
452
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
453
|
+
// CIL[DOC-CONTRACT inputs="- ctx: CoreContext (required) — the context for the execution.\\n- action: any (required) — the action object containing handler information.\\n- config: any (required) — the configuration object for the handler." outputs="Promise<any> — resolves to the result of the executed handler." errors="Error — unknown handler module." side_effects="none dependencies="withSpan, executeFunctionHandler, executeIntegrationHandler, executeWebhookHandler, emitSpan"]
|
|
454
|
+
// CIL[DOC-MICRO logic_summary="Utilizes a switch statement to determine the handler type and delegates execution to the corresponding handler function." notable_decisions="none"]
|
|
455
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
456
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
457
|
+
/**
|
|
458
|
+
* Executes a specific stage of a pipeline based on the provided action and configuration. It dynamically routes the execution to the appropriate handler based on the action's module type.
|
|
459
|
+
*
|
|
460
|
+
* @macro Async function orchestrating the execution of various pipeline handlers.
|
|
461
|
+
* @micro Utilizes a switch statement to determine the handler type and delegates execution to the corresponding handler function.
|
|
462
|
+
* @inputSpec
|
|
463
|
+
* - ctx: CoreContext (required) — the context for the execution.
|
|
464
|
+
* - action: any (required) — the action object containing handler information.
|
|
465
|
+
* - config: any (required) — the configuration object for the handler.
|
|
466
|
+
* @outputSpec Promise<any> — resolves to the result of the executed handler.
|
|
467
|
+
* @throws Error — unknown handler module.
|
|
468
|
+
* @sideEffects none
|
|
469
|
+
* @stability stable
|
|
470
|
+
* @calls withSpan, executeFunctionHandler, executeIntegrationHandler, executeWebhookHandler, emitSpan
|
|
471
|
+
* @cil-generated
|
|
472
|
+
*/
|
|
473
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executestage:function" type="function" identity="executeStage" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
474
|
+
// CIL[DOC-MACRO purpose="executeStage function"]
|
|
475
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the executeStage function."]
|
|
476
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
477
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
478
|
+
// CIL[DOC-MICRO logic_summary="Implements the executeStage function." notable_decisions="[]"]
|
|
479
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
480
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
300
481
|
async function executeStage(
|
|
301
482
|
ctx: CoreContext,
|
|
302
483
|
action: any,
|
|
@@ -321,37 +502,200 @@ async function executeStage(
|
|
|
321
502
|
}
|
|
322
503
|
}, { onEnd: emitSpan })
|
|
323
504
|
}
|
|
324
|
-
// CIL[END
|
|
325
|
-
// CIL[
|
|
326
|
-
// CIL[DOC-
|
|
327
|
-
// CIL[DOC-
|
|
328
|
-
// CIL[DOC-
|
|
329
|
-
// CIL[DOC-
|
|
330
|
-
// CIL[DOC-
|
|
331
|
-
//
|
|
505
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executestage:function"]
|
|
506
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Executes a specific stage of a pipeline based on the provided action and configuration.'; No verified external callers" status="ready"]
|
|
507
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
508
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
509
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
510
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
511
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
512
|
+
// Resolves {{trigger.*}} and {{record.*}} placeholders in stage config values.
|
|
513
|
+
// `trigger` is the triggerData envelope; `record` is the entity row that fired
|
|
514
|
+
// it (triggerData.entity.data), so {{record.data.action_type}} reaches into the
|
|
515
|
+
// record's jsonb and {{record.account_id}} gives the emitting account.
|
|
516
|
+
// CIL[DOC-MACRO purpose="Template resolver for dynamic content generation."]
|
|
517
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Resolves template strings by replacing placeholders with corresponding values from the provided trigger data. This function is used to dynamically generate content based on the context of the trigger data."]
|
|
518
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
519
|
+
// CIL[DOC-CONTRACT inputs="- value: any (required) — the input value which may contain template strings, arrays, or objects.\\n- triggerData: any (required) — the data context used for resolving template placeholders." outputs="any — the resolved value with templates replaced or the original value if no templates were found." errors="none" side_effects="none"]
|
|
520
|
+
// CIL[DOC-MICRO logic_summary="Utilizes a recursive approach to handle strings, arrays, and objects for template resolution." notable_decisions="none"]
|
|
521
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
522
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
523
|
+
/**
|
|
524
|
+
* Resolves template strings by replacing placeholders with corresponding values from the provided trigger data. This function is used to dynamically generate content based on the context of the trigger data.
|
|
525
|
+
*
|
|
526
|
+
* @macro Template resolver for dynamic content generation.
|
|
527
|
+
* @micro Utilizes a recursive approach to handle strings, arrays, and objects for template resolution.
|
|
528
|
+
* @inputSpec
|
|
529
|
+
* - value: any (required) — the input value which may contain template strings, arrays, or objects.
|
|
530
|
+
* - triggerData: any (required) — the data context used for resolving template placeholders.
|
|
531
|
+
* @outputSpec any — the resolved value with templates replaced or the original value if no templates were found.
|
|
532
|
+
* @sideEffects none
|
|
533
|
+
* @stability stable
|
|
534
|
+
* @cil-generated
|
|
535
|
+
*/
|
|
536
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:resolvetemplates:function" type="function" identity="resolveTemplates" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
537
|
+
// CIL[DOC-MACRO purpose="resolveTemplates function"]
|
|
538
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the resolveTemplates function."]
|
|
539
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
540
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
541
|
+
// CIL[DOC-MICRO logic_summary="Implements the resolveTemplates function." notable_decisions="[]"]
|
|
542
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
543
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
544
|
+
function resolveTemplates(value: any, triggerData: any): any {
|
|
545
|
+
const roots: Record<string, any> = {
|
|
546
|
+
trigger: triggerData,
|
|
547
|
+
record: triggerData?.entity?.data,
|
|
548
|
+
}
|
|
549
|
+
if (typeof value === 'string') {
|
|
550
|
+
if (!value.includes('{{')) return value
|
|
551
|
+
return value.replace(/\{\{\s*([^}]+?)\s*\}\}/g, (match, rawPath) => {
|
|
552
|
+
const parts = String(rawPath).trim().split('.')
|
|
553
|
+
let cur: any = roots[parts[0]]
|
|
554
|
+
if (cur === undefined) return match
|
|
555
|
+
for (const part of parts.slice(1)) {
|
|
556
|
+
if (cur == null) return match
|
|
557
|
+
cur = cur[part]
|
|
558
|
+
}
|
|
559
|
+
return cur == null ? '' : String(cur)
|
|
560
|
+
})
|
|
561
|
+
}
|
|
562
|
+
if (Array.isArray(value)) return value.map(v => resolveTemplates(v, triggerData))
|
|
563
|
+
if (value && typeof value === 'object') {
|
|
564
|
+
const out: Record<string, any> = {}
|
|
565
|
+
for (const [k, v] of Object.entries(value)) out[k] = resolveTemplates(v, triggerData)
|
|
566
|
+
return out
|
|
567
|
+
}
|
|
568
|
+
return value
|
|
569
|
+
}
|
|
570
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:resolvetemplates:function"]
|
|
571
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolves template strings by replacing placeholders with corresponding values from the provided trigger data.'; No verified external callers" status="ready"]
|
|
572
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
573
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
574
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
575
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
576
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
577
|
+
|
|
578
|
+
// CIL[DOC-MACRO purpose="Async function that retrieves account IDs from a database using a slug."]
|
|
579
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Resolves an account ID based on a provided slug. This function exists to facilitate the retrieval of account identifiers in a structured manner."]
|
|
580
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
581
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContext (required) — the context object containing necessary execution context.\\nslug: string (required) — the slug used to identify the account." outputs="Promise<string> — resolves to the account ID as a string." errors="Error — if the slug does not resolve to an account." side_effects="none dependencies="adminDb.from('accounts')"]
|
|
582
|
+
// CIL[DOC-MICRO logic_summary="Queries the database for an account ID matching the provided slug and throws an error if not found." notable_decisions="none"]
|
|
583
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
584
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
585
|
+
/**
|
|
586
|
+
* Resolves an account ID based on a provided slug. This function exists to facilitate the retrieval of account identifiers in a structured manner.
|
|
587
|
+
*
|
|
588
|
+
* @macro Async function that retrieves account IDs from a database using a slug.
|
|
589
|
+
* @micro Queries the database for an account ID matching the provided slug and throws an error if not found.
|
|
590
|
+
* @inputSpec
|
|
591
|
+
* ctx: CoreContext (required) — the context object containing necessary execution context.
|
|
592
|
+
* slug: string (required) — the slug used to identify the account.
|
|
593
|
+
* @outputSpec Promise<string> — resolves to the account ID as a string.
|
|
594
|
+
* @throws Error — if the slug does not resolve to an account.
|
|
595
|
+
* @sideEffects none
|
|
596
|
+
* @stability stable
|
|
597
|
+
* @calls adminDb.from('accounts')
|
|
598
|
+
* @cil-generated
|
|
599
|
+
*/
|
|
600
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:resolveaccountid:function" type="function" identity="resolveAccountId" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
601
|
+
// CIL[DOC-MACRO purpose="resolveAccountId function"]
|
|
602
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the resolveAccountId function."]
|
|
603
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
604
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
605
|
+
// CIL[DOC-MICRO logic_summary="Implements the resolveAccountId function." notable_decisions="[]"]
|
|
606
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
332
607
|
// CIL[DOC-STABILITY stability="stable"]
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
608
|
+
async function resolveAccountId(ctx: CoreContext, slug: string): Promise<string> {
|
|
609
|
+
const { data } = await adminDb
|
|
610
|
+
.from('accounts').select('id').eq('slug', slug).maybeSingle()
|
|
611
|
+
if (!data?.id) throw new Error(`account_slug '${slug}' did not resolve to an account`)
|
|
612
|
+
return data.id
|
|
613
|
+
}
|
|
614
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:resolveaccountid:function"]
|
|
615
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Resolves an account ID based on a provided slug.'; No verified external callers" status="ready"]
|
|
616
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
617
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
618
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
337
619
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
338
620
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
// CIL[DOC-MACRO purpose="The stageHandlers constant defines a set of asynchronous functions for handling various stages of a pipeline, specifically for updating and creating records in a database."]
|
|
624
|
+
// CIL[DOC-RESPONSIBILITY responsibility="The stageHandlers constant defines a set of asynchronous functions for handling various stages of a pipeline, specifically for updating and creating records in a database. It ensures that necessary parameters are provided and manages database interactions based on the provided configuration."]
|
|
625
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
626
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="Error — entity is required for update_item; Error — record_id missing and match found no record; Error — entity and data are required for create_record; Error — Update failed: {error.message}" side_effects="Database writes for updating or creating records. dependencies="adminDb.from, resolveTemplates, resolveAccountId"]
|
|
627
|
+
// CIL[DOC-MICRO logic_summary="The stageHandlers constant defines a set of asynchronous functions for handling various stages of a pipeline, specifically for updating and creating records in a database. It ensures that necessary parameters are provided and manages database interactions based on the provided configuration." notable_decisions="none"]
|
|
628
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
629
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
630
|
+
/**
|
|
631
|
+
* The stageHandlers constant defines a set of asynchronous functions for handling various stages of a pipeline, specifically for updating and creating records in a database. It ensures that necessary parameters are provided and manages database interactions based on the provided configuration.
|
|
632
|
+
*
|
|
633
|
+
* @throws Error — entity is required for update_item; Error — record_id missing and match found no record; Error — entity and data are required for create_record; Error — Update failed: {error.message}
|
|
634
|
+
* @sideEffects Database writes for updating or creating records.
|
|
635
|
+
* @stability stable
|
|
636
|
+
* @calls adminDb.from, resolveTemplates, resolveAccountId
|
|
637
|
+
* @cil-generated
|
|
638
|
+
*/
|
|
639
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:stagehandlers:constant" type="constant" identity="stageHandlers" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
640
|
+
// CIL[DOC-MACRO purpose="stageHandlers constant — registry of built-in pipeline stage executors keyed by stage_type slug"]
|
|
641
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements each built-in stage type: record writes (update_item/create_record), outbound (http_request/send_notification), orchestration (run_pipeline/query_items/agent_inference), knowledge (search_knowledge/generate_embeddings/revoke_embeddings/kb_ingest/kb_revoke), and create_interaction."]
|
|
642
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=".framework/functions/_shared/kb.ts,.framework/functions/embeddings.ts,.framework/migrations/053_builtin_action_seeds.sql,.framework/migrations/054_kb_ingest_lease.sql"]
|
|
643
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContext, config: stage config (item_id/document_id accept {{trigger.entity_id}}/{{entity_id}} templates)" outputs="stage-specific result object" errors="Error on missing required config keys or unresolved templates" side_effects="DB writes and/or outbound calls per stage type"]
|
|
644
|
+
// CIL[DOC-MICRO logic_summary="Template-bearing id fields resolve against config._triggerData then dynamic-import their engine — kb_ingest/kb_revoke import _shared/kb (canonical typed path with document lease); generate_embeddings/revoke_embeddings import functions/embeddings (legacy engine) and remain for cortex pipelines." notable_decisions="kb_ingest accepts item_id or document_id; kb_revoke accepts document_id or item_id — matching the seeded demo pipeline configs"]
|
|
645
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
646
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
339
647
|
const stageHandlers: Record<string, Function> = {
|
|
340
648
|
'update_item': async (ctx: CoreContext, config: any) => {
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
649
|
+
const triggerData = config._triggerData || {}
|
|
650
|
+
const { entity } = config
|
|
651
|
+
let recordId = config.record_id ? resolveTemplates(config.record_id, triggerData) : null
|
|
652
|
+
|
|
653
|
+
if (!entity) {
|
|
654
|
+
throw new Error('entity is required for update_item')
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
// Optional record lookup: match finds the target row when the pipeline
|
|
658
|
+
// doesn't know its id (e.g. the deal linked to a prospect account).
|
|
659
|
+
let existing: any = null
|
|
660
|
+
if (!recordId && config.match) {
|
|
661
|
+
const m = resolveTemplates(config.match, triggerData)
|
|
662
|
+
let q = adminDb.from(entity).select('*').limit(1)
|
|
663
|
+
if (m.account_slug) {
|
|
664
|
+
q = q.eq('account_id', await resolveAccountId(ctx, m.account_slug))
|
|
665
|
+
} else if (m.account_id) {
|
|
666
|
+
q = q.eq('account_id', m.account_id)
|
|
667
|
+
} else {
|
|
668
|
+
q = q.eq('account_id', ctx.accountId)
|
|
669
|
+
}
|
|
670
|
+
for (const [key, value] of Object.entries(m.filters || {})) {
|
|
671
|
+
q = q.eq(key, value as any)
|
|
672
|
+
}
|
|
673
|
+
const { data: found } = await q
|
|
674
|
+
existing = found?.[0] || null
|
|
675
|
+
recordId = existing?.id
|
|
676
|
+
}
|
|
677
|
+
if (!recordId) {
|
|
678
|
+
throw new Error('update_item: record_id missing and match found no record')
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
let updateData = resolveTemplates(config.data, triggerData)
|
|
682
|
+
// Merge nested data jsonb — stage configs carry only the keys they change.
|
|
683
|
+
if (updateData?.data) {
|
|
684
|
+
if (!existing) {
|
|
685
|
+
const { data: cur } = await adminDb.from(entity).select('data').eq('id', recordId).single()
|
|
686
|
+
existing = cur
|
|
687
|
+
}
|
|
688
|
+
updateData = { ...updateData, data: { ...(existing?.data || {}), ...updateData.data } }
|
|
345
689
|
}
|
|
346
690
|
|
|
347
691
|
const { data: result, error } = await adminDb
|
|
348
692
|
.from(entity)
|
|
349
693
|
.update({
|
|
350
|
-
...
|
|
694
|
+
...updateData,
|
|
351
695
|
updated_at: new Date().toISOString(),
|
|
352
696
|
updated_by: ctx.principal?.id
|
|
353
697
|
})
|
|
354
|
-
.eq('id',
|
|
698
|
+
.eq('id', recordId)
|
|
355
699
|
.select()
|
|
356
700
|
.single()
|
|
357
701
|
|
|
@@ -360,17 +704,35 @@ const stageHandlers: Record<string, Function> = {
|
|
|
360
704
|
},
|
|
361
705
|
|
|
362
706
|
'create_record': async (ctx: CoreContext, config: any) => {
|
|
363
|
-
const
|
|
364
|
-
|
|
707
|
+
const triggerData = config._triggerData || {}
|
|
708
|
+
const { entity } = config
|
|
709
|
+
const data = resolveTemplates(config.data, triggerData)
|
|
710
|
+
|
|
365
711
|
if (!entity || !data) {
|
|
366
712
|
throw new Error('entity and data are required for create_record')
|
|
367
713
|
}
|
|
368
714
|
|
|
715
|
+
// Optional cross-account target (e.g. a record lives in the platform
|
|
716
|
+
// account while the trigger fires in a customer account).
|
|
717
|
+
let accountId = ctx.accountId
|
|
718
|
+
if (config.account_slug) {
|
|
719
|
+
accountId = await resolveAccountId(ctx, resolveTemplates(config.account_slug, triggerData))
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
// Optional idempotency — skip the insert when a matching record exists.
|
|
723
|
+
if (config.dedupe?.field) {
|
|
724
|
+
const value = resolveTemplates(config.dedupe.value, triggerData)
|
|
725
|
+
let q = adminDb.from(entity).select('*').eq(config.dedupe.field, value)
|
|
726
|
+
if (config.dedupe.account_scoped !== false) q = q.eq('account_id', accountId)
|
|
727
|
+
const { data: found } = await q.limit(1)
|
|
728
|
+
if (found?.length) return { success: true, record: found[0], deduped: true }
|
|
729
|
+
}
|
|
730
|
+
|
|
369
731
|
const { data: result, error } = await adminDb
|
|
370
732
|
.from(entity)
|
|
371
733
|
.insert({
|
|
372
734
|
...data,
|
|
373
|
-
account_id:
|
|
735
|
+
account_id: accountId,
|
|
374
736
|
created_by: isUuid(ctx.principal?.id) ? ctx.principal?.id : null,
|
|
375
737
|
created_at: new Date().toISOString(),
|
|
376
738
|
updated_at: new Date().toISOString()
|
|
@@ -403,20 +765,25 @@ const stageHandlers: Record<string, Function> = {
|
|
|
403
765
|
|
|
404
766
|
'send_notification': async (ctx: CoreContext, config: any) => {
|
|
405
767
|
const { message, entity_type, entity_id, recipients = [] } = config
|
|
406
|
-
|
|
407
|
-
|
|
768
|
+
|
|
769
|
+
// watchers is the subscription table (who follows what) — deliveries go to
|
|
770
|
+
// the notifications table, one row per recipient. Migration 050 adds it.
|
|
771
|
+
// CIL[DOC-NOTE type="behavior" content="Recipients may be person UUIDs or 'role:<slug>' handles — resolveNotificationRecipients maps role slugs to this account's active people ids; a role matching nobody is a valid 0-notification result, not an error."]
|
|
772
|
+
const personIds = await resolveNotificationRecipients(ctx, recipients)
|
|
773
|
+
const notifications = personIds.map((recipientId: string) => ({
|
|
408
774
|
account_id: ctx.accountId,
|
|
409
775
|
person_id: recipientId,
|
|
410
776
|
message,
|
|
411
|
-
|
|
412
|
-
|
|
777
|
+
source_type: 'pipeline_execution',
|
|
778
|
+
source_id: entity_id || ctx.requestId,
|
|
779
|
+
target_type: entity_type || null,
|
|
780
|
+
target_id: entity_id && /^[0-9a-f-]{36}$/i.test(entity_id) ? entity_id : null,
|
|
413
781
|
is_read: false,
|
|
414
|
-
created_at: new Date().toISOString()
|
|
415
782
|
}))
|
|
416
783
|
|
|
417
784
|
if (notifications.length > 0) {
|
|
418
785
|
const { error } = await adminDb
|
|
419
|
-
.from('
|
|
786
|
+
.from('notifications')
|
|
420
787
|
.insert(notifications)
|
|
421
788
|
|
|
422
789
|
if (error) throw new Error(`Notification failed: ${error.message}`)
|
|
@@ -446,15 +813,37 @@ const stageHandlers: Record<string, Function> = {
|
|
|
446
813
|
|
|
447
814
|
'search_knowledge': async (ctx: CoreContext, config: any) => {
|
|
448
815
|
const { query, knowledge_sources, model_id, limit = 5, threshold = 0.7 } = config
|
|
449
|
-
|
|
816
|
+
|
|
450
817
|
if (!query) {
|
|
451
818
|
throw new Error('query is required for search_knowledge')
|
|
452
819
|
}
|
|
453
820
|
|
|
821
|
+
// Enforce the app knowledge envelope — the pipeline's owning app is the
|
|
822
|
+
// server-side authority (a client-supplied app hint is only a fallback).
|
|
823
|
+
let appRef: string | null = (ctx as any).appId || null
|
|
824
|
+
if (config._pipelineId) {
|
|
825
|
+
const { data: p } = await adminDb
|
|
826
|
+
.from('pipelines')
|
|
827
|
+
.select('app_id')
|
|
828
|
+
.eq('id', config._pipelineId)
|
|
829
|
+
.maybeSingle()
|
|
830
|
+
if (p?.app_id) appRef = p.app_id
|
|
831
|
+
}
|
|
832
|
+
const scope = await resolveKnowledgeScope(ctx, appRef, {})
|
|
833
|
+
if (!scope.allowed) {
|
|
834
|
+
return {
|
|
835
|
+
results: [],
|
|
836
|
+
count: 0,
|
|
837
|
+
method: 'denied',
|
|
838
|
+
error: `knowledge_denied: ${scope.deniedReason}`,
|
|
839
|
+
query
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
|
|
454
843
|
let dbQuery = adminDb
|
|
455
844
|
.from('embeddings')
|
|
456
845
|
.select('*')
|
|
457
|
-
.
|
|
846
|
+
.in('account_id', scope.accountIds)
|
|
458
847
|
.limit(limit)
|
|
459
848
|
|
|
460
849
|
if (knowledge_sources && knowledge_sources.length > 0) {
|
|
@@ -468,10 +857,13 @@ const stageHandlers: Record<string, Function> = {
|
|
|
468
857
|
const { data: textResults, error: textError } = await dbQuery
|
|
469
858
|
.textSearch('content', query, { type: 'websearch', config: 'english' })
|
|
470
859
|
|
|
471
|
-
|
|
860
|
+
const inScope = (rows: any[]) => (rows || []).filter((r: any) => knowledgeRowAllowed(scope, r))
|
|
861
|
+
|
|
862
|
+
if (!textError && textResults && inScope(textResults).length > 0) {
|
|
863
|
+
const rows = inScope(textResults)
|
|
472
864
|
return {
|
|
473
|
-
results:
|
|
474
|
-
count:
|
|
865
|
+
results: rows,
|
|
866
|
+
count: rows.length,
|
|
475
867
|
method: 'text_search',
|
|
476
868
|
query
|
|
477
869
|
}
|
|
@@ -484,9 +876,10 @@ const stageHandlers: Record<string, Function> = {
|
|
|
484
876
|
throw new Error(`Knowledge search failed: ${fallbackError.message}`)
|
|
485
877
|
}
|
|
486
878
|
|
|
879
|
+
const scopedResults = inScope(fallbackResults || [])
|
|
487
880
|
return {
|
|
488
|
-
results:
|
|
489
|
-
count:
|
|
881
|
+
results: scopedResults,
|
|
882
|
+
count: scopedResults.length,
|
|
490
883
|
method: 'fallback_ilike',
|
|
491
884
|
query
|
|
492
885
|
}
|
|
@@ -585,22 +978,129 @@ const stageHandlers: Record<string, Function> = {
|
|
|
585
978
|
force_regenerate: config.force_regenerate ?? false,
|
|
586
979
|
})
|
|
587
980
|
},
|
|
981
|
+
|
|
982
|
+
'revoke_embeddings': async (ctx: CoreContext, config: any) => {
|
|
983
|
+
const triggerData = config._triggerData || {}
|
|
984
|
+
let documentId = config.document_id ?? config.item_id
|
|
985
|
+
if (!documentId) throw new Error('document_id is required for revoke_embeddings')
|
|
986
|
+
|
|
987
|
+
if (typeof documentId === 'string' && documentId.includes('{{')) {
|
|
988
|
+
documentId = documentId
|
|
989
|
+
.replace(/\{\{trigger\.entity_id\}\}/g, triggerData?.entity_id || '')
|
|
990
|
+
.replace(/\{\{entity_id\}\}/g, triggerData?.entity_id || '')
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
if (!documentId) throw new Error('revoke_embeddings: could not resolve document_id from trigger data')
|
|
994
|
+
|
|
995
|
+
const { revoke } = await import('../embeddings')
|
|
996
|
+
const genCtx = { ...ctx, query: { ...((ctx as any).query || {}), action: 'revoke' } } as any
|
|
997
|
+
return await revoke(genCtx, { document_id: documentId })
|
|
998
|
+
},
|
|
999
|
+
|
|
1000
|
+
// CIL[DOC-NOTE type="behavior" content="kb_ingest/kb_revoke wrap the canonical typed path in _shared/kb.ts (content-hash lease, declared vector fields, supersede_keys supersession) — unlike generate_embeddings/revoke_embeddings which hit the legacy embeddings engine. Both stage types remain registered; new pipelines should prefer kb_ingest/kb_revoke."]
|
|
1001
|
+
'kb_ingest': async (ctx: CoreContext, config: any) => {
|
|
1002
|
+
const triggerData = config._triggerData || {}
|
|
1003
|
+
let itemId = config.item_id ?? config.document_id
|
|
1004
|
+
if (!itemId) throw new Error('item_id is required for kb_ingest')
|
|
1005
|
+
|
|
1006
|
+
if (typeof itemId === 'string' && itemId.includes('{{')) {
|
|
1007
|
+
itemId = itemId
|
|
1008
|
+
.replace(/\{\{trigger\.entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1009
|
+
.replace(/\{\{entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1010
|
+
}
|
|
1011
|
+
|
|
1012
|
+
if (!itemId) throw new Error('kb_ingest: could not resolve item_id from trigger data')
|
|
1013
|
+
|
|
1014
|
+
const { kbIngest } = await import('./kb')
|
|
1015
|
+
return await kbIngest(ctx, { id: itemId })
|
|
1016
|
+
},
|
|
1017
|
+
|
|
1018
|
+
'kb_revoke': async (ctx: CoreContext, config: any) => {
|
|
1019
|
+
const triggerData = config._triggerData || {}
|
|
1020
|
+
let itemId = config.document_id ?? config.item_id
|
|
1021
|
+
if (!itemId) throw new Error('document_id is required for kb_revoke')
|
|
1022
|
+
|
|
1023
|
+
if (typeof itemId === 'string' && itemId.includes('{{')) {
|
|
1024
|
+
itemId = itemId
|
|
1025
|
+
.replace(/\{\{trigger\.entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1026
|
+
.replace(/\{\{entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
if (!itemId) throw new Error('kb_revoke: could not resolve document_id from trigger data')
|
|
1030
|
+
|
|
1031
|
+
const { kbRevoke } = await import('./kb')
|
|
1032
|
+
return await kbRevoke(ctx, { id: itemId })
|
|
1033
|
+
},
|
|
1034
|
+
|
|
1035
|
+
'create_interaction': async (ctx: CoreContext, config: any) => {
|
|
1036
|
+
const triggerData = config._triggerData || {}
|
|
1037
|
+
const entityData = triggerData?.entity?.data || {}
|
|
1038
|
+
const resolveField = (v: any) => typeof v === 'string'
|
|
1039
|
+
? v.replace(/\{\{trigger\.entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1040
|
+
.replace(/\{\{entity_id\}\}/g, triggerData?.entity_id || '')
|
|
1041
|
+
.replace(/\{\{trigger\.thread_id\}\}/g, entityData?.thread_id || '')
|
|
1042
|
+
: v
|
|
1043
|
+
|
|
1044
|
+
const aiMessageId = resolveField(config.ai_message_id) || triggerData?.entity_id
|
|
1045
|
+
const threadId = resolveField(config.thread_id) || entityData?.thread_id
|
|
1046
|
+
if (!aiMessageId && !threadId) throw new Error('create_interaction: could not resolve ai_message_id or thread_id from trigger data')
|
|
1047
|
+
|
|
1048
|
+
const { createInteraction } = await import('../ai-interactions')
|
|
1049
|
+
const genCtx = { ...ctx, query: { ...((ctx as any).query || {}), action: 'create_interaction' } } as any
|
|
1050
|
+
// CIL[DOC-NOTE type="behavior" content="config.type_slug passes through to createInteraction (default ai_feedback_record when unset) so apps can record interactions under their own item type, e.g. demo_feedback_record."]
|
|
1051
|
+
return await createInteraction(genCtx, {
|
|
1052
|
+
ai_message_id: aiMessageId,
|
|
1053
|
+
thread_id: threadId,
|
|
1054
|
+
retrieved_sources: config.retrieved_sources ?? entityData?.data?.retrieved_sources,
|
|
1055
|
+
ai_confidence: config.ai_confidence ?? entityData?.data?.confidence,
|
|
1056
|
+
retrieval_confidence: config.retrieval_confidence ?? entityData?.data?.mean_similarity,
|
|
1057
|
+
type_slug: config.type_slug,
|
|
1058
|
+
})
|
|
1059
|
+
},
|
|
588
1060
|
}
|
|
589
|
-
// CIL[END
|
|
590
|
-
// CIL[
|
|
591
|
-
// CIL[DOC-
|
|
592
|
-
// CIL[DOC-
|
|
593
|
-
// CIL[DOC-
|
|
594
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="handler execution result" errors="Unknown function handler" side_effects="Handler execution"]
|
|
595
|
-
// CIL[DOC-MICRO logic_summary="Lookup and execute built-in stage handler by name" notable_decisions="[]"]
|
|
596
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
597
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
598
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
599
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
600
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
601
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
1061
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:stagehandlers:constant"]
|
|
1062
|
+
// CIL[DOC-VECTOR type="context" content="purpose='The stageHandlers constant defines a set of asynchronous functions for handling various stages of a pipeline, specifically for updating and creating records in a database.'; No verified external callers" status="ready"]
|
|
1063
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1064
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
1065
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
602
1066
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
603
1067
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
1068
|
+
|
|
1069
|
+
|
|
1070
|
+
|
|
1071
|
+
|
|
1072
|
+
|
|
1073
|
+
|
|
1074
|
+
// CIL[DOC-MACRO purpose="Handler executor that dynamically invokes function handlers based on their names."]
|
|
1075
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Executes a specified function handler with the provided context and configuration. This function ensures that the handler exists before attempting to invoke it."]
|
|
1076
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
1077
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContext (required) — the context in which the handler is executed.\\nhandlerName: string (required) — the name of the handler to execute.\\nconfig: any (required) — configuration parameters for the handler." outputs="Promise<any> — the result of the handler execution." errors="Error — if the handler name is unknown." side_effects="none"]
|
|
1078
|
+
// CIL[DOC-MICRO logic_summary="Retrieves the handler from a collection and invokes it with the provided context and configuration." notable_decisions="none"]
|
|
1079
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
1080
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
1081
|
+
/**
|
|
1082
|
+
* Executes a specified function handler with the provided context and configuration. This function ensures that the handler exists before attempting to invoke it.
|
|
1083
|
+
*
|
|
1084
|
+
* @macro Handler executor that dynamically invokes function handlers based on their names.
|
|
1085
|
+
* @micro Retrieves the handler from a collection and invokes it with the provided context and configuration.
|
|
1086
|
+
* @inputSpec
|
|
1087
|
+
* ctx: CoreContext (required) — the context in which the handler is executed.
|
|
1088
|
+
* handlerName: string (required) — the name of the handler to execute.
|
|
1089
|
+
* config: any (required) — configuration parameters for the handler.
|
|
1090
|
+
* @outputSpec Promise<any> — the result of the handler execution.
|
|
1091
|
+
* @throws Error — if the handler name is unknown.
|
|
1092
|
+
* @sideEffects none
|
|
1093
|
+
* @stability stable
|
|
1094
|
+
* @cil-generated
|
|
1095
|
+
*/
|
|
1096
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executefunctionhandler:function" type="function" identity="executeFunctionHandler" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
1097
|
+
// CIL[DOC-MACRO purpose="executeFunctionHandler function"]
|
|
1098
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the executeFunctionHandler function."]
|
|
1099
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
1100
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
1101
|
+
// CIL[DOC-MICRO logic_summary="Implements the executeFunctionHandler function." notable_decisions="[]"]
|
|
1102
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1103
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
604
1104
|
async function executeFunctionHandler(
|
|
605
1105
|
ctx: CoreContext,
|
|
606
1106
|
handlerName: string,
|
|
@@ -614,21 +1114,43 @@ async function executeFunctionHandler(
|
|
|
614
1114
|
|
|
615
1115
|
return await handler(ctx, config)
|
|
616
1116
|
}
|
|
617
|
-
// CIL[END
|
|
618
|
-
// CIL[
|
|
619
|
-
// CIL[DOC-
|
|
620
|
-
// CIL[DOC-
|
|
621
|
-
// CIL[DOC-
|
|
622
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="integration execution result" errors="Integration not found" side_effects="Integration execution"]
|
|
623
|
-
// CIL[DOC-MICRO logic_summary="Lookup integration config and execute external handler" notable_decisions="[]"]
|
|
624
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
625
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
626
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
627
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
628
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
629
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
1117
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executefunctionhandler:function"]
|
|
1118
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Executes a specified function handler with the provided context and configuration.'; No verified external callers" status="ready"]
|
|
1119
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1120
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
1121
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
630
1122
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
631
1123
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
1124
|
+
// CIL[DOC-MACRO purpose="Async function that triggers integration actions based on provided configuration."]
|
|
1125
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Executes an integration handler by importing the execute function from the integration-outbound module and passing the necessary parameters. This function facilitates the integration process by providing a structured way to handle integration actions."]
|
|
1126
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
1127
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContext (required) — the core context for the integration execution.\\nhandlerName: string (required) — the name of the integration handler to execute.\\nconfig: any (required) — configuration object containing integration parameters." outputs="Promise<any> — resolves with the result of the integration execution." errors="none" side_effects="calls external integration service to execute the handler. dependencies="execute"]
|
|
1128
|
+
// CIL[DOC-MICRO logic_summary="Imports the execute function dynamically and invokes it with a context and action configuration." notable_decisions="none"]
|
|
1129
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
1130
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
1131
|
+
/**
|
|
1132
|
+
* Executes an integration handler by importing the execute function from the integration-outbound module and passing the necessary parameters. This function facilitates the integration process by providing a structured way to handle integration actions.
|
|
1133
|
+
*
|
|
1134
|
+
* @macro Async function that triggers integration actions based on provided configuration.
|
|
1135
|
+
* @micro Imports the execute function dynamically and invokes it with a context and action configuration.
|
|
1136
|
+
* @inputSpec
|
|
1137
|
+
* ctx: CoreContext (required) — the core context for the integration execution.
|
|
1138
|
+
* handlerName: string (required) — the name of the integration handler to execute.
|
|
1139
|
+
* config: any (required) — configuration object containing integration parameters.
|
|
1140
|
+
* @outputSpec Promise<any> — resolves with the result of the integration execution.
|
|
1141
|
+
* @sideEffects calls external integration service to execute the handler.
|
|
1142
|
+
* @stability stable
|
|
1143
|
+
* @calls execute
|
|
1144
|
+
* @cil-generated
|
|
1145
|
+
*/
|
|
1146
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executeintegrationhandler:function" type="function" identity="executeIntegrationHandler" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
1147
|
+
// CIL[DOC-MACRO purpose="executeIntegrationHandler function"]
|
|
1148
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the executeIntegrationHandler function."]
|
|
1149
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
1150
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
1151
|
+
// CIL[DOC-MICRO logic_summary="Implements the executeIntegrationHandler function." notable_decisions="[]"]
|
|
1152
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1153
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
632
1154
|
async function executeIntegrationHandler(
|
|
633
1155
|
ctx: CoreContext,
|
|
634
1156
|
handlerName: string,
|
|
@@ -641,21 +1163,42 @@ async function executeIntegrationHandler(
|
|
|
641
1163
|
action_config: config
|
|
642
1164
|
})
|
|
643
1165
|
}
|
|
644
|
-
// CIL[END
|
|
645
|
-
// CIL[
|
|
646
|
-
// CIL[DOC-
|
|
647
|
-
// CIL[DOC-
|
|
648
|
-
// CIL[DOC-
|
|
649
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="webhook response" errors="Webhook URL not configured" side_effects="HTTP requests"]
|
|
650
|
-
// CIL[DOC-MICRO logic_summary="Send configuration data to configured webhook endpoint" notable_decisions="[]"]
|
|
651
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
652
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
653
|
-
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
654
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
655
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
656
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
1166
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executeintegrationhandler:function"]
|
|
1167
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Executes an integration handler by importing the execute function from the integration-outbound module and passing the necessary parameters.'; No verified external callers" status="ready"]
|
|
1168
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1169
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
1170
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
657
1171
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
658
1172
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
1173
|
+
// CIL[DOC-MACRO purpose="Executes a webhook action by sending an HTTP request to a specified URL with the provided configuration."]
|
|
1174
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Executes a webhook action by sending an HTTP request to a specified URL with the provided configuration. This function is designed to facilitate integration with external services via webhooks."]
|
|
1175
|
+
// CIL[DOC-CONTEXT module="pipeline-runner" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/outcomes,.framework/functions/_shared/tracing,.framework/functions/integration-outbound"]
|
|
1176
|
+
// CIL[DOC-CONTRACT inputs="ctx: CoreContext (required) — the context for the execution environment.\\naction: any (required) — the action configuration containing the webhook details.\\nconfig: any (required) — the body content to send with the webhook request." outputs="Promise<any> — resolves to an object containing success status, response status, and response body." errors="Error — Webhook URL not configured in action" side_effects="Makes an external HTTP request to the specified webhook URL. dependencies="execute"]
|
|
1177
|
+
// CIL[DOC-MICRO logic_summary="Executes a webhook action by sending an HTTP request to a specified URL with the provided configuration. This function is designed to facilitate integration with external services via webhooks." notable_decisions="none"]
|
|
1178
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
1179
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
1180
|
+
/**
|
|
1181
|
+
* Executes a webhook action by sending an HTTP request to a specified URL with the provided configuration. This function is designed to facilitate integration with external services via webhooks.
|
|
1182
|
+
*
|
|
1183
|
+
* @inputSpec
|
|
1184
|
+
* ctx: CoreContext (required) — the context for the execution environment.
|
|
1185
|
+
* action: any (required) — the action configuration containing the webhook details.
|
|
1186
|
+
* config: any (required) — the body content to send with the webhook request.
|
|
1187
|
+
* @outputSpec Promise<any> — resolves to an object containing success status, response status, and response body.
|
|
1188
|
+
* @throws Error — Webhook URL not configured in action
|
|
1189
|
+
* @sideEffects Makes an external HTTP request to the specified webhook URL.
|
|
1190
|
+
* @stability stable
|
|
1191
|
+
* @calls execute
|
|
1192
|
+
* @cil-generated
|
|
1193
|
+
*/
|
|
1194
|
+
// CIL[BEGIN stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executewebhookhandler:function" type="function" identity="executeWebhookHandler" parent="~/.framework/functions/_shared/pipeline-runner.ts"]
|
|
1195
|
+
// CIL[DOC-MACRO purpose="executeWebhookHandler function"]
|
|
1196
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Implements the executeWebhookHandler function."]
|
|
1197
|
+
// CIL[DOC-CONTEXT module=".framework/functions/_shared/pipeline-runner.ts" layer="app-specific" related_files=""]
|
|
1198
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
1199
|
+
// CIL[DOC-MICRO logic_summary="Implements the executeWebhookHandler function." notable_decisions="[]"]
|
|
1200
|
+
// CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
|
|
1201
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
659
1202
|
async function executeWebhookHandler(
|
|
660
1203
|
ctx: CoreContext,
|
|
661
1204
|
action: any,
|
|
@@ -685,4 +1228,10 @@ async function executeWebhookHandler(
|
|
|
685
1228
|
body: result.response_body
|
|
686
1229
|
}
|
|
687
1230
|
}
|
|
688
|
-
// CIL[END
|
|
1231
|
+
// CIL[END stable_id="~/.framework/functions/_shared/pipeline-runner.ts:executewebhookhandler:function"]
|
|
1232
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Executes a webhook action by sending an HTTP request to a specified URL with the provided configuration.'; No verified external callers" status="ready"]
|
|
1233
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
|
|
1234
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
|
|
1235
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
|
|
1236
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
1237
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|