spine-framework 0.3.124 → 0.3.126
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/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +188 -16
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +685 -537
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +187 -144
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +195 -116
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +5 -2
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,54 +1,46 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module trigger-engine
|
|
3
|
-
* @audience both
|
|
4
|
-
* @layer shared-core
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Event-driven trigger dispatch system. API handlers call `fire*Triggers` after
|
|
8
|
-
* a successful write to check whether any active triggers should fire. Matching
|
|
9
|
-
* triggers cause `runPipeline` to be invoked with structured `triggerData`.
|
|
10
|
-
*
|
|
11
|
-
* Public surface:
|
|
12
|
-
* - `checkAndFireTriggers` — full trigger evaluation and firing loop
|
|
13
|
-
* - `fireCreateTriggers` — convenience wrapper for `*_created` events
|
|
14
|
-
* - `fireUpdateTriggers` — convenience wrapper for `*_updated` events
|
|
15
|
-
* - `fireDeleteTriggers` — convenience wrapper for `*_deleted` events
|
|
16
|
-
*
|
|
17
|
-
* Trigger condition evaluation (in order, all must pass):
|
|
18
|
-
* 1. `config.entity_type` — exact match on entityType param
|
|
19
|
-
* 2. `config.type_slug` — match on `entityData.type_slug` (items only)
|
|
20
|
-
* 3. `config.filters` — field-level predicates with operators
|
|
21
|
-
* (`$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$exists`)
|
|
22
|
-
*
|
|
23
|
-
* INVARIANT: trigger evaluation and firing errors are caught per-trigger —
|
|
24
|
-
* a single failing trigger never prevents other triggers from firing.
|
|
25
|
-
* INVARIANT: `checkAndFireTriggers` never throws — all errors are caught
|
|
26
|
-
* and logged. Callers do not need to wrap in try/catch.
|
|
27
|
-
* INVARIANT: `adminDb` (service role) is used for trigger lookups and stats
|
|
28
|
-
* updates; `runPipeline` then uses the passed `ctx` for stage execution.
|
|
29
|
-
*
|
|
30
|
-
* @seeAlso pipeline-runner.ts (runPipeline — called when a trigger fires)
|
|
31
|
-
* @seeAlso audit.ts (emitAudit for trigger.fired / trigger.failed)
|
|
32
|
-
* @seeAlso index.ts (fire*Triggers re-exported for v2-custom/ and CLI)
|
|
33
|
-
*/
|
|
34
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
// CIL[BEGIN chunk_id="triggerengine_imports_1784020784" type="module_header" identity="imports" parent="none"]
|
|
11
|
+
// CIL[DOC-MACRO purpose="Import dependencies for trigger engine functionality"]
|
|
12
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import context, database, audit, and pipeline modules"]
|
|
13
|
+
// CIL[DOC-CONTEXT module="trigger-engine" 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="none" outputs="CoreContext, adminDb, emitAudit, runPipeline" errors="none" side_effects="none"]
|
|
15
|
+
// CIL[DOC-MICRO logic_summary="Import required modules for trigger processing and execution" 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"]
|
|
35
25
|
import { CoreContext } from './middleware'
|
|
36
26
|
import { adminDb } from './db'
|
|
37
27
|
import { emitAudit } from './audit'
|
|
38
28
|
import { runPipeline } from './pipeline-runner'
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
29
|
+
// CIL[END chunk_id="triggerengine_imports_1784020784"]
|
|
30
|
+
// CIL[BEGIN chunk_id="triggerengine_eventtype_1784020784" type="type" identity="EventType" parent="none"]
|
|
31
|
+
// CIL[DOC-MACRO purpose="Define event types for trigger system"]
|
|
32
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide union type for all triggerable events"]
|
|
33
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
34
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="EventType union" errors="none" side_effects="none"]
|
|
35
|
+
// CIL[DOC-MICRO logic_summary="Union of entity lifecycle events across different entity types" notable_decisions="[]"]
|
|
36
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
37
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
38
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
39
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
40
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
41
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
42
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
43
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
52
44
|
export type EventType =
|
|
53
45
|
| 'item_created' | 'item_updated' | 'item_deleted'
|
|
54
46
|
| 'account_created' | 'account_updated' | 'account_deleted'
|
|
@@ -57,16 +49,21 @@ export type EventType =
|
|
|
57
49
|
| 'message_created' | 'message_updated' | 'message_deleted'
|
|
58
50
|
| 'attachment_created' | 'attachment_updated' | 'attachment_deleted'
|
|
59
51
|
| 'link_created' | 'link_updated' | 'link_deleted'
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
// CIL[END chunk_id="triggerengine_eventtype_1784020784"]
|
|
53
|
+
// CIL[BEGIN chunk_id="triggerengine_triggerinterface_1784020784" type="interface" identity="Trigger" parent="none"]
|
|
54
|
+
// CIL[DOC-MACRO purpose="Define trigger interface for event-driven automation"]
|
|
55
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide structure for trigger configuration and metadata"]
|
|
56
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
57
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="Trigger interface" errors="none" side_effects="none"]
|
|
58
|
+
// CIL[DOC-MICRO logic_summary="Interface with trigger metadata, event type, pipeline, and config" notable_decisions="[]"]
|
|
59
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
60
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
61
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
62
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
63
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
64
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
65
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
66
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
70
67
|
interface Trigger {
|
|
71
68
|
id: string
|
|
72
69
|
name: string
|
|
@@ -79,56 +76,21 @@ interface Trigger {
|
|
|
79
76
|
}
|
|
80
77
|
is_active: boolean
|
|
81
78
|
}
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* {
|
|
98
|
-
* "event": "item_updated",
|
|
99
|
-
* "entity": { "type": "item", "id": "<uuid>", "data": {...} },
|
|
100
|
-
* "trigger": { "id": "<uuid>", "name": "My Trigger" },
|
|
101
|
-
* "fired_at": "2024-01-15T10:00:00.000Z"
|
|
102
|
-
* }
|
|
103
|
-
* ```
|
|
104
|
-
*
|
|
105
|
-
* @param eventType - The lifecycle event (e.g. 'item_updated')
|
|
106
|
-
* @param entityType - The entity table name (e.g. 'item', 'person')
|
|
107
|
-
* @param entityId - UUID of the entity that changed
|
|
108
|
-
* @param entityData - Full record data for condition evaluation
|
|
109
|
-
* @param ctx - CoreContext with requestId, accountId, and principal
|
|
110
|
-
* @returns Promise<void> — always resolves; never throws
|
|
111
|
-
* @throws never — all errors are caught per-trigger and logged
|
|
112
|
-
* @inputSpec eventType: EventType — must be one of the 21 defined event types
|
|
113
|
-
* @inputSpec entityId: string — UUID of the changed entity
|
|
114
|
-
* @inputSpec entityData: any — full record (used for condition evaluation)
|
|
115
|
-
* @outputSpec void
|
|
116
|
-
* @sideEffects DB read: triggers table
|
|
117
|
-
* @sideEffects DB write (per matching trigger): triggers.last_triggered, trigger_count
|
|
118
|
-
* @sideEffects Calls runPipeline (per matching trigger) — which writes pipeline_executions
|
|
119
|
-
* @sideEffects DB write: emitAudit (trigger.fired or trigger.failed per trigger)
|
|
120
|
-
* @calledBy All API handlers after successful create/update/delete writes
|
|
121
|
-
* @calledBy fireCreateTriggers, fireUpdateTriggers, fireDeleteTriggers
|
|
122
|
-
* @calls evaluateTriggerConditions, runPipeline, emitAudit
|
|
123
|
-
* @testUnit tests/unit/trigger-engine.test.ts
|
|
124
|
-
* @testIntegration tests/integration/trigger-engine.test.ts
|
|
125
|
-
*
|
|
126
|
-
* @example
|
|
127
|
-
* ```ts
|
|
128
|
-
* // In an API handler after a successful item update:
|
|
129
|
-
* await fireUpdateTriggers('item', updatedItem.id, updatedItem, ctx)
|
|
130
|
-
* ```
|
|
131
|
-
*/
|
|
79
|
+
// CIL[END chunk_id="triggerengine_triggerinterface_1784020784"]
|
|
80
|
+
// CIL[BEGIN chunk_id="triggerengine_checkandfire_1784020784" type="function" identity="checkAndFireTriggers" parent="none"]
|
|
81
|
+
// CIL[DOC-MACRO purpose="Check and fire triggers for entity events"]
|
|
82
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Query active triggers, evaluate conditions, execute pipelines"]
|
|
83
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
84
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="Database errors, pipeline failures" side_effects="Database updates, audit logs, pipeline execution"]
|
|
85
|
+
// CIL[DOC-MICRO logic_summary="Fetch triggers, evaluate conditions, run pipelines, update trigger stats, emit audit events" notable_decisions="[]"]
|
|
86
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
87
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
88
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
89
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
90
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
91
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
92
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
132
94
|
export async function checkAndFireTriggers(
|
|
133
95
|
eventType: EventType,
|
|
134
96
|
entityType: string,
|
|
@@ -136,7 +98,6 @@ export async function checkAndFireTriggers(
|
|
|
136
98
|
entityData: any,
|
|
137
99
|
ctx: CoreContext
|
|
138
100
|
): Promise<void> {
|
|
139
|
-
// Find matching active triggers
|
|
140
101
|
const { data: triggers, error } = await adminDb
|
|
141
102
|
.from('triggers')
|
|
142
103
|
.select('*')
|
|
@@ -153,7 +114,6 @@ export async function checkAndFireTriggers(
|
|
|
153
114
|
return
|
|
154
115
|
}
|
|
155
116
|
|
|
156
|
-
// Evaluate each trigger's conditions
|
|
157
117
|
for (const trigger of triggers) {
|
|
158
118
|
try {
|
|
159
119
|
const shouldFire = evaluateTriggerConditions(trigger, entityType, entityData)
|
|
@@ -162,7 +122,6 @@ export async function checkAndFireTriggers(
|
|
|
162
122
|
continue
|
|
163
123
|
}
|
|
164
124
|
|
|
165
|
-
// Prepare trigger data for pipeline
|
|
166
125
|
const triggerData = {
|
|
167
126
|
event: eventType,
|
|
168
127
|
entity: {
|
|
@@ -177,10 +136,8 @@ export async function checkAndFireTriggers(
|
|
|
177
136
|
fired_at: new Date().toISOString()
|
|
178
137
|
}
|
|
179
138
|
|
|
180
|
-
// Fire the pipeline
|
|
181
139
|
const result = await runPipeline(trigger.pipeline_id, triggerData, ctx)
|
|
182
140
|
|
|
183
|
-
// Update trigger statistics
|
|
184
141
|
await adminDb
|
|
185
142
|
.from('triggers')
|
|
186
143
|
.update({
|
|
@@ -216,28 +173,21 @@ export async function checkAndFireTriggers(
|
|
|
216
173
|
}
|
|
217
174
|
}
|
|
218
175
|
}
|
|
219
|
-
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
* @param entityType - Entity table name from the calling handler
|
|
235
|
-
* @param entityData - Full record data for field-level filter checks
|
|
236
|
-
* @returns boolean — true if all conditions pass; false to skip this trigger
|
|
237
|
-
* @throws never
|
|
238
|
-
* @calledBy checkAndFireTriggers (per trigger in the matching set)
|
|
239
|
-
* @calls getNestedValue, evaluateOperator
|
|
240
|
-
*/
|
|
176
|
+
// CIL[END chunk_id="triggerengine_checkandfire_1784020784"]
|
|
177
|
+
// CIL[BEGIN chunk_id="triggerengine_evaluatetriggerconditions_1784020784" type="function" identity="evaluateTriggerConditions" parent="none"]
|
|
178
|
+
// CIL[DOC-MACRO purpose="Evaluate if trigger conditions match entity data"]
|
|
179
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Check entity type, type slug, and filter conditions"]
|
|
180
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
|
|
181
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
182
|
+
// CIL[DOC-MICRO logic_summary="Validate trigger config against entity data using filters and operators" notable_decisions="[]"]
|
|
183
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
184
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
185
|
+
// 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/migrations/025_retype_threads_messages.sql, \."]
|
|
186
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
187
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
188
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
189
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
190
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
241
191
|
function evaluateTriggerConditions(
|
|
242
192
|
trigger: Trigger,
|
|
243
193
|
entityType: string,
|
|
@@ -245,33 +195,27 @@ function evaluateTriggerConditions(
|
|
|
245
195
|
): boolean {
|
|
246
196
|
const config = trigger.config || {}
|
|
247
197
|
|
|
248
|
-
// Check entity type filter
|
|
249
198
|
if (config.entity_type && config.entity_type !== entityType) {
|
|
250
199
|
return false
|
|
251
200
|
}
|
|
252
201
|
|
|
253
|
-
// Check type_slug filter (for items)
|
|
254
202
|
if (config.type_slug && entityData?.type_slug !== config.type_slug) {
|
|
255
203
|
return false
|
|
256
204
|
}
|
|
257
205
|
|
|
258
|
-
// Check custom filters
|
|
259
206
|
if (config.filters) {
|
|
260
207
|
for (const [key, expectedValue] of Object.entries(config.filters)) {
|
|
261
208
|
const actualValue = getNestedValue(entityData, key)
|
|
262
209
|
|
|
263
210
|
if (Array.isArray(expectedValue)) {
|
|
264
|
-
// Array means "any of these values"
|
|
265
211
|
if (!expectedValue.includes(actualValue)) {
|
|
266
212
|
return false
|
|
267
213
|
}
|
|
268
214
|
} else if (typeof expectedValue === 'object' && expectedValue !== null) {
|
|
269
|
-
// Object means operators: { $gt: 5, $lt: 10 }
|
|
270
215
|
if (!evaluateOperator(actualValue, expectedValue)) {
|
|
271
216
|
return false
|
|
272
217
|
}
|
|
273
218
|
} else {
|
|
274
|
-
// Simple equality
|
|
275
219
|
if (actualValue !== expectedValue) {
|
|
276
220
|
return false
|
|
277
221
|
}
|
|
@@ -281,35 +225,41 @@ function evaluateTriggerConditions(
|
|
|
281
225
|
|
|
282
226
|
return true
|
|
283
227
|
}
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
228
|
+
// CIL[END chunk_id="triggerengine_evaluatetriggerconditions_1784020784"]
|
|
229
|
+
// CIL[BEGIN chunk_id="triggerengine_getnestedvalue_1784020784" type="function" identity="getNestedValue" parent="none"]
|
|
230
|
+
// CIL[DOC-MACRO purpose="Get nested value from object using dot notation"]
|
|
231
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Navigate object hierarchy to retrieve nested property"]
|
|
232
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[]"]
|
|
233
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="any" errors="none" side_effects="none"]
|
|
234
|
+
// CIL[DOC-MICRO logic_summary="Split path by dots and traverse object to get nested value" notable_decisions="[]"]
|
|
235
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
236
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
237
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
238
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
239
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
240
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
241
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
242
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
294
243
|
function getNestedValue(obj: any, path: string): any {
|
|
295
244
|
return path.split('.').reduce((current, key) => {
|
|
296
245
|
return current?.[key]
|
|
297
246
|
}, obj)
|
|
298
247
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
248
|
+
// CIL[END chunk_id="triggerengine_getnestedvalue_1784020784"]
|
|
249
|
+
// CIL[BEGIN chunk_id="triggerengine_evaluateoperator_1784020784" type="function" identity="evaluateOperator" parent="none"]
|
|
250
|
+
// CIL[DOC-MACRO purpose="Evaluate comparison operators for trigger conditions"]
|
|
251
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Process MongoDB-style operators like $eq, $gt, $in"]
|
|
252
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[]"]
|
|
253
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
254
|
+
// CIL[DOC-MICRO logic_summary="Evaluate multiple operators against actual value, return false on any failure" notable_decisions="[]"]
|
|
255
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
256
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
257
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
258
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
259
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
260
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
261
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
262
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
313
263
|
function evaluateOperator(actual: any, operators: Record<string, any>): boolean {
|
|
314
264
|
for (const [op, expected] of Object.entries(operators)) {
|
|
315
265
|
switch (op) {
|
|
@@ -348,24 +298,21 @@ function evaluateOperator(actual: any, operators: Record<string, any>): boolean
|
|
|
348
298
|
}
|
|
349
299
|
return true
|
|
350
300
|
}
|
|
351
|
-
|
|
352
|
-
//
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
* @calls checkAndFireTriggers
|
|
367
|
-
* @testUnit tests/unit/trigger-engine.test.ts — 'fireCreateTriggers'
|
|
368
|
-
*/
|
|
301
|
+
// CIL[END chunk_id="triggerengine_evaluateoperator_1784020784"]
|
|
302
|
+
// CIL[BEGIN chunk_id="triggerengine_firecreate_1784020784" type="function" identity="fireCreateTriggers" parent="none"]
|
|
303
|
+
// CIL[DOC-MACRO purpose="Fire triggers for entity creation events"]
|
|
304
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Trigger event processing pipeline for created entities"]
|
|
305
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[]"]
|
|
306
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
307
|
+
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
308
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
309
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
310
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
311
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
312
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
313
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
314
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
315
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
369
316
|
export async function fireCreateTriggers(
|
|
370
317
|
entityType: string,
|
|
371
318
|
entityId: string,
|
|
@@ -375,21 +322,21 @@ export async function fireCreateTriggers(
|
|
|
375
322
|
const eventType = `${entityType}_created` as EventType
|
|
376
323
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
377
324
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
325
|
+
// CIL[END chunk_id="triggerengine_firecreate_1784020784"]
|
|
326
|
+
// CIL[BEGIN chunk_id="triggerengine_fireupdate_1784020784" type="function" identity="fireUpdateTriggers" parent="none"]
|
|
327
|
+
// CIL[DOC-MACRO purpose="Fire triggers for entity update events"]
|
|
328
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Trigger event processing pipeline for updated entities"]
|
|
329
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[]"]
|
|
330
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
331
|
+
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
332
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
333
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
334
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
335
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
336
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
337
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
338
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
339
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
393
340
|
export async function fireUpdateTriggers(
|
|
394
341
|
entityType: string,
|
|
395
342
|
entityId: string,
|
|
@@ -399,21 +346,21 @@ export async function fireUpdateTriggers(
|
|
|
399
346
|
const eventType = `${entityType}_updated` as EventType
|
|
400
347
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
401
348
|
}
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
349
|
+
// CIL[END chunk_id="triggerengine_fireupdate_1784020784"]
|
|
350
|
+
// CIL[BEGIN chunk_id="triggerengine_firedelete_1784020784" type="function" identity="fireDeleteTriggers" parent="none"]
|
|
351
|
+
// CIL[DOC-MACRO purpose="Fire triggers for entity deletion events"]
|
|
352
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Trigger event processing pipeline for deleted entities"]
|
|
353
|
+
// CIL[DOC-CONTEXT module="trigger-engine" layer="shared" related_files="[]"]
|
|
354
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="void" errors="none" side_effects="Pipeline execution, audit logging"]
|
|
355
|
+
// CIL[DOC-MICRO logic_summary="Create event type string and delegate to checkAndFireTriggers" notable_decisions="[]"]
|
|
356
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
357
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
358
|
+
// CIL[DOC-VECTOR type="context" content="Layer: shared. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
359
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
360
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
361
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
362
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
363
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
417
364
|
export async function fireDeleteTriggers(
|
|
418
365
|
entityType: string,
|
|
419
366
|
entityId: string,
|
|
@@ -423,3 +370,4 @@ export async function fireDeleteTriggers(
|
|
|
423
370
|
const eventType = `${entityType}_deleted` as EventType
|
|
424
371
|
await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
|
|
425
372
|
}
|
|
373
|
+
// CIL[END chunk_id="triggerengine_firedelete_1784020784"]
|