spine-framework 0.3.144 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +20 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,3 +1,30 @@
1
+ /**
2
+ * @module trigger-engine
3
+ * @audience internal
4
+ * @layer shared-core
5
+ * @stability stable
6
+ *
7
+ * This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely.
8
+ *
9
+ * INVARIANT: All triggers must be validated before processing to maintain system integrity.
10
+ *
11
+ * @seeAlso middleware.ts (provides core context for event handling).
12
+ * @seeAlso db.ts (handles database interactions necessary for trigger processing).
13
+ * @seeAlso audit.ts (ensures auditing of actions taken during event processing).
14
+ * @seeAlso pipeline-runner.ts (executes the defined processing pipeline for triggers).
15
+ *
16
+ * @cil-generated
17
+ */
18
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/_shared/trigger-engine.ts"]
19
+ // CIL[DOC-MACRO purpose="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers."]
20
+ // CIL[DOC-RESPONSIBILITY responsibility="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely. INVARIANT: All triggers must be validated before processing to maintain system integrity."]
21
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="shared-core" related_files="middleware.ts (provides core context for event handling).,db.ts (handles database interactions necessary for trigger processing).,audit.ts (ensures auditing of actions taken during event processing).,pipeline-runner.ts (executes the defined processing pipeline for triggers)."]
22
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
23
+ // CIL[DOC-MICRO logic_summary="This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers. It integrates with core middleware and database functionalities to ensure that events are handled efficiently and securely. INVARIANT: All triggers must be validated before processing to maintain system integrity." 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"]
27
+
1
28
 
2
29
 
3
30
 
@@ -7,40 +34,117 @@
7
34
 
8
35
 
9
36
 
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"]
25
37
  import { CoreContext } from './middleware'
26
38
  import { adminDb } from './db'
27
39
  import { emitAudit } from './audit'
28
40
  import { runPipeline } from './pipeline-runner'
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"]
41
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:module_header:module_header"]
42
+ // CIL[DOC-VECTOR type="context" content="purpose='This module serves as the trigger engine for processing events within the system, coordinating various actions based on incoming triggers.'; No verified external callers" status="ready"]
43
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
44
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
45
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
46
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
48
+
49
+ // Callers pass the runtime table name (plural); seeded triggers and the
50
+ // EventType union use the singular kind. Mirrors ENTITY_TO_KIND in admin-data.
51
+ // CIL[DOC-MACRO purpose="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names."]
52
+ // CIL[DOC-RESPONSIBILITY responsibility="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module."]
53
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
54
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
55
+ // CIL[DOC-MICRO logic_summary="ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module." notable_decisions="none"]
56
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
57
+ // CIL[DOC-STABILITY stability="stable"]
58
+ /**
59
+ * ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names. It exists to provide a standardized reference for entity names throughout the module.
60
+ *
61
+ * @sideEffects none
62
+ * @stability stable
63
+ * @cil-generated
64
+ */
65
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:entity_event_name:constant" type="constant" identity="ENTITY_EVENT_NAME" parent="~/.framework/functions/_shared/trigger-engine.ts"]
66
+ // CIL[DOC-MACRO purpose="ENTITY_EVENT_NAME constant"]
67
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the ENTITY_EVENT_NAME constant."]
68
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
69
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
70
+ // CIL[DOC-MICRO logic_summary="Implements the ENTITY_EVENT_NAME constant." notable_decisions="[]"]
71
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
72
+ // CIL[DOC-STABILITY stability="stable"]
73
+ const ENTITY_EVENT_NAME: Record<string, string> = {
74
+ accounts: 'account',
75
+ people: 'person',
76
+ items: 'item',
77
+ threads: 'thread',
78
+ messages: 'message',
79
+ links: 'link',
80
+ attachments: 'attachment',
81
+ watchers: 'watcher',
82
+ item_progress: 'item_progress',
83
+ }
84
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:entity_event_name:constant"]
85
+ // CIL[DOC-VECTOR type="context" content="purpose='ENTITY_EVENT_NAME is a constant that maps various entity types to their corresponding singular names.'; No verified external callers" status="ready"]
86
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
87
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
88
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
89
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
90
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
91
+ // CIL[DOC-MACRO purpose="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists."]
92
+ // CIL[DOC-RESPONSIBILITY responsibility="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module."]
93
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
94
+ // CIL[DOC-CONTRACT inputs="entityType: string (required) — the type of the entity for which to retrieve the event name." outputs="string — the event name corresponding to the entity type or the entity type itself if no mapping exists." errors="none" side_effects="none"]
95
+ // CIL[DOC-MICRO logic_summary="This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module." notable_decisions="none"]
96
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
97
+ // CIL[DOC-STABILITY stability="stable"]
98
+ /**
99
+ * This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists. It exists to provide a consistent way to reference event names throughout the module.
100
+ *
101
+ * @inputSpec
102
+ * entityType: string (required) — the type of the entity for which to retrieve the event name.
103
+ * @outputSpec string — the event name corresponding to the entity type or the entity type itself if no mapping exists.
104
+ * @sideEffects none
105
+ * @stability stable
106
+ * @cil-generated
107
+ */
108
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventnamefor:constant" type="constant" identity="eventNameFor" parent="~/.framework/functions/_shared/trigger-engine.ts"]
109
+ // CIL[DOC-MACRO purpose="eventNameFor constant"]
110
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the eventNameFor constant."]
111
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
112
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
113
+ // CIL[DOC-MICRO logic_summary="Implements the eventNameFor constant." notable_decisions="[]"]
114
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
37
115
  // 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."]
116
+ const eventNameFor = (entityType: string) =>
117
+ ENTITY_EVENT_NAME[entityType] ?? entityType
118
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventnamefor:constant"]
119
+ // CIL[DOC-VECTOR type="context" content="purpose='This function retrieves the event name associated with a given entity type, defaulting to the entity type itself if no mapping exists.'; No verified external callers" status="ready"]
120
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
121
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
122
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
42
123
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
43
124
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
125
+
126
+ // CIL[DOC-MACRO purpose="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links."]
127
+ // CIL[DOC-RESPONSIBILITY responsibility="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module."]
128
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
129
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
130
+ // CIL[DOC-MICRO logic_summary="EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module." notable_decisions="none"]
131
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
132
+ // CIL[DOC-STABILITY stability="stable"]
133
+ /**
134
+ * EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links. It exists to provide a consistent and type-safe way to handle different events within the trigger engine module.
135
+ *
136
+ * @sideEffects none
137
+ * @stability stable
138
+ * @cil-generated
139
+ */
140
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventtype:type" type="type" identity="EventType" parent="~/.framework/functions/_shared/trigger-engine.ts"]
141
+ // CIL[DOC-MACRO purpose="EventType type"]
142
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the EventType type."]
143
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
144
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
145
+ // CIL[DOC-MICRO logic_summary="Implements the EventType type." notable_decisions="[]"]
146
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
147
+ // CIL[DOC-STABILITY stability="stable"]
44
148
  export type EventType =
45
149
  | 'item_created' | 'item_updated' | 'item_deleted'
46
150
  | 'account_created' | 'account_updated' | 'account_deleted'
@@ -49,21 +153,36 @@ export type EventType =
49
153
  | 'message_created' | 'message_updated' | 'message_deleted'
50
154
  | 'attachment_created' | 'attachment_updated' | 'attachment_deleted'
51
155
  | 'link_created' | 'link_updated' | 'link_deleted'
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."]
156
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:eventtype:type"]
157
+ // CIL[DOC-VECTOR type="context" content="purpose='EventType defines a set of string literals representing various event types related to items, accounts, persons, threads, messages, attachments, and links.'; No verified external callers" status="ready"]
158
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
159
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
160
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
65
161
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
66
162
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
163
+
164
+ // CIL[DOC-MACRO purpose="The Trigger interface defines the structure for a trigger object used in event-driven architectures."]
165
+ // CIL[DOC-RESPONSIBILITY responsibility="The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline."]
166
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
167
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
168
+ // CIL[DOC-MICRO logic_summary="The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline." notable_decisions="none"]
169
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
170
+ // CIL[DOC-STABILITY stability="stable"]
171
+ /**
172
+ * The Trigger interface defines the structure for a trigger object used in event-driven architectures. It encapsulates the necessary properties to identify and configure triggers within a pipeline.
173
+ *
174
+ * @sideEffects none
175
+ * @stability stable
176
+ * @cil-generated
177
+ */
178
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:trigger:interface" type="interface" identity="Trigger" parent="~/.framework/functions/_shared/trigger-engine.ts"]
179
+ // CIL[DOC-MACRO purpose="Trigger interface"]
180
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the Trigger interface."]
181
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
182
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
183
+ // CIL[DOC-MICRO logic_summary="Implements the Trigger interface." notable_decisions="[]"]
184
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
185
+ // CIL[DOC-STABILITY stability="stable"]
67
186
  interface Trigger {
68
187
  id: string
69
188
  name: string
@@ -76,21 +195,45 @@ interface Trigger {
76
195
  }
77
196
  is_active: boolean
78
197
  }
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."]
198
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:trigger:interface"]
199
+ // CIL[DOC-VECTOR type="context" content="purpose='The Trigger interface defines the structure for a trigger object used in event-driven architectures.'; No verified external callers" status="ready"]
200
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
201
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
202
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
92
203
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
93
204
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
205
+
206
+ // CIL[DOC-MACRO purpose="This function checks for active triggers based on the specified event type and fires them if their conditions are met."]
207
+ // CIL[DOC-RESPONSIBILITY responsibility="This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system."]
208
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
209
+ // CIL[DOC-CONTRACT inputs="- eventType: EventType (required) — the type of event that triggers the action.\\n- entityType: string (required) — the type of entity associated with the event.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context for the current operation." outputs="Promise<void>" errors="none" side_effects="Database writes to update trigger last triggered time and count, RPC calls to increment trigger count, and audit log emissions. dependencies="adminDb.from('triggers'), adminDb.from('types'), runPipeline, emitAudit, adminDb.from('triggers').update"]
210
+ // CIL[DOC-MICRO logic_summary="This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system." notable_decisions="Logs errors to the console and emits audit logs for failures."]
211
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
212
+ // CIL[DOC-STABILITY stability="stable"]
213
+ /**
214
+ * This function checks for active triggers based on the specified event type and fires them if their conditions are met. It exists to facilitate the execution of defined actions in response to specific events within the system.
215
+ *
216
+ * @inputSpec
217
+ * - eventType: EventType (required) — the type of event that triggers the action.
218
+ * - entityType: string (required) — the type of entity associated with the event.
219
+ * - entityId: string (required) — the unique identifier of the entity.
220
+ * - entityData: any (required) — the data associated with the entity.
221
+ * - ctx: CoreContext (required) — the context for the current operation.
222
+ * @outputSpec Promise<void>
223
+ * @sideEffects Database writes to update trigger last triggered time and count, RPC calls to increment trigger count, and audit log emissions.
224
+ * @stability stable
225
+ * @calls adminDb.from('triggers'), adminDb.from('types'), runPipeline, emitAudit, adminDb.from('triggers').update
226
+ * @errorHandling Logs errors to the console and emits audit logs for failures.
227
+ * @cil-generated
228
+ */
229
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:checkandfiretriggers:function" type="function" identity="checkAndFireTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
230
+ // CIL[DOC-MACRO purpose="checkAndFireTriggers function"]
231
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the checkAndFireTriggers function."]
232
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
233
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
234
+ // CIL[DOC-MICRO logic_summary="Implements the checkAndFireTriggers function." notable_decisions="[]"]
235
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
236
+ // CIL[DOC-STABILITY stability="stable"]
94
237
  export async function checkAndFireTriggers(
95
238
  eventType: EventType,
96
239
  entityType: string,
@@ -114,6 +257,16 @@ export async function checkAndFireTriggers(
114
257
  return
115
258
  }
116
259
 
260
+ // entityData carries type_id, never the slug — resolve it once when a
261
+ // trigger for this event filters on config.type_slug, otherwise those
262
+ // triggers can never match.
263
+ if (entityData && entityData.type_slug === undefined && entityData.type_id &&
264
+ triggers.some(t => t.config?.type_slug)) {
265
+ const { data: typeRow } = await adminDb
266
+ .from('types').select('slug').eq('id', entityData.type_id).maybeSingle()
267
+ if (typeRow?.slug) entityData = { ...entityData, type_slug: typeRow.slug }
268
+ }
269
+
117
270
  for (const trigger of triggers) {
118
271
  try {
119
272
  const shouldFire = evaluateTriggerConditions(trigger, entityType, entityData)
@@ -124,6 +277,7 @@ export async function checkAndFireTriggers(
124
277
 
125
278
  const triggerData = {
126
279
  event: eventType,
280
+ entity_id: entityId,
127
281
  entity: {
128
282
  type: entityType,
129
283
  id: entityId,
@@ -173,21 +327,42 @@ export async function checkAndFireTriggers(
173
327
  }
174
328
  }
175
329
  }
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."]
330
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:checkandfiretriggers:function"]
331
+ // CIL[DOC-VECTOR type="context" content="purpose='This function checks for active triggers based on the specified event type and fires them if their conditions are met.'; No verified external callers" status="ready"]
332
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
333
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
334
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
189
335
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
190
336
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
337
+
338
+ // CIL[DOC-MACRO purpose="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data."]
339
+ // CIL[DOC-RESPONSIBILITY responsibility="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate."]
340
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
341
+ // CIL[DOC-CONTRACT inputs="- trigger: Trigger (required) — the trigger configuration to evaluate against.\\n- entityType: string (required) — the type of the entity being evaluated.\\n- entityData: any (required) — the data associated with the entity." outputs="boolean — returns true if all conditions are met, false otherwise." errors="none" side_effects="none dependencies="getNestedValue, evaluateOperator"]
342
+ // CIL[DOC-MICRO logic_summary="Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate." notable_decisions="none"]
343
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
344
+ // CIL[DOC-STABILITY stability="stable"]
345
+ /**
346
+ * Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data. It determines if the conditions are met for a specific trigger to activate.
347
+ *
348
+ * @inputSpec
349
+ * - trigger: Trigger (required) — the trigger configuration to evaluate against.
350
+ * - entityType: string (required) — the type of the entity being evaluated.
351
+ * - entityData: any (required) — the data associated with the entity.
352
+ * @outputSpec boolean — returns true if all conditions are met, false otherwise.
353
+ * @sideEffects none
354
+ * @stability stable
355
+ * @calls getNestedValue, evaluateOperator
356
+ * @cil-generated
357
+ */
358
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluatetriggerconditions:function" type="function" identity="evaluateTriggerConditions" parent="~/.framework/functions/_shared/trigger-engine.ts"]
359
+ // CIL[DOC-MACRO purpose="evaluateTriggerConditions function"]
360
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the evaluateTriggerConditions function."]
361
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
362
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
363
+ // CIL[DOC-MICRO logic_summary="Implements the evaluateTriggerConditions function." notable_decisions="[]"]
364
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
365
+ // CIL[DOC-STABILITY stability="stable"]
191
366
  function evaluateTriggerConditions(
192
367
  trigger: Trigger,
193
368
  entityType: string,
@@ -225,41 +400,83 @@ function evaluateTriggerConditions(
225
400
 
226
401
  return true
227
402
  }
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."]
403
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluatetriggerconditions:function"]
404
+ // CIL[DOC-VECTOR type="context" content="purpose='Evaluates trigger conditions based on the provided trigger configuration, entity type, and entity data.'; No verified external callers" status="ready"]
405
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
406
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
407
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
241
408
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
242
409
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
410
+
411
+ // CIL[DOC-MACRO purpose="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation."]
412
+ // CIL[DOC-RESPONSIBILITY responsibility="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects."]
413
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
414
+ // CIL[DOC-CONTRACT inputs="- obj: any (required) — the object from which to retrieve the nested value.\\n- path: string (required) — the path to the nested value, potentially using Postgres-style accessors." outputs="any — the value found at the specified path, or undefined if not found." errors="none" side_effects="none"]
415
+ // CIL[DOC-MICRO logic_summary="Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects." notable_decisions="none"]
416
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
417
+ // CIL[DOC-STABILITY stability="stable"]
418
+ /**
419
+ * Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation. This function exists to facilitate easier access to deeply nested properties in objects.
420
+ *
421
+ * @inputSpec
422
+ * - obj: any (required) — the object from which to retrieve the nested value.
423
+ * - path: string (required) — the path to the nested value, potentially using Postgres-style accessors.
424
+ * @outputSpec any — the value found at the specified path, or undefined if not found.
425
+ * @sideEffects none
426
+ * @stability stable
427
+ * @cil-generated
428
+ */
429
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:getnestedvalue:function" type="function" identity="getNestedValue" parent="~/.framework/functions/_shared/trigger-engine.ts"]
430
+ // CIL[DOC-MACRO purpose="getNestedValue function"]
431
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the getNestedValue function."]
432
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
433
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
434
+ // CIL[DOC-MICRO logic_summary="Implements the getNestedValue function." notable_decisions="[]"]
435
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
436
+ // CIL[DOC-STABILITY stability="stable"]
243
437
  function getNestedValue(obj: any, path: string): any {
244
- return path.split('.').reduce((current, key) => {
438
+ // Trigger filters may use Postgres-style accessors (data->>'status');
439
+ // normalize them to dot notation before traversing.
440
+ const normalized = path.replace(/->>'?([^']+)'?/g, '.$1')
441
+ return normalized.split('.').reduce((current, key) => {
245
442
  return current?.[key]
246
443
  }, obj)
247
444
  }
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."]
445
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:getnestedvalue:function"]
446
+ // CIL[DOC-VECTOR type="context" content="purpose='Retrieves a nested value from an object using a specified path, normalizing Postgres-style accessors to dot notation.'; No verified external callers" status="ready"]
447
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
448
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
449
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
261
450
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
262
451
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
452
+
453
+ // CIL[DOC-MACRO purpose="Evaluates a set of operators against an actual value to determine if the conditions are met."]
454
+ // CIL[DOC-RESPONSIBILITY responsibility="Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria."]
455
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
456
+ // CIL[DOC-CONTRACT inputs="- actual: any (required) — the value to be evaluated against the operators.\\n- operators: Record<string, any> (required) — a collection of operators and their expected values." outputs="boolean — returns true if all operators are satisfied, otherwise false." errors="none" side_effects="none dependencies="console.warn"]
457
+ // CIL[DOC-MICRO logic_summary="Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria." notable_decisions="none"]
458
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
459
+ // CIL[DOC-STABILITY stability="stable"]
460
+ /**
461
+ * Evaluates a set of operators against an actual value to determine if the conditions are met. This function is used for validating data against specified criteria.
462
+ *
463
+ * @inputSpec
464
+ * - actual: any (required) — the value to be evaluated against the operators.
465
+ * - operators: Record<string, any> (required) — a collection of operators and their expected values.
466
+ * @outputSpec boolean — returns true if all operators are satisfied, otherwise false.
467
+ * @sideEffects none
468
+ * @stability stable
469
+ * @calls console.warn
470
+ * @cil-generated
471
+ */
472
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluateoperator:function" type="function" identity="evaluateOperator" parent="~/.framework/functions/_shared/trigger-engine.ts"]
473
+ // CIL[DOC-MACRO purpose="evaluateOperator function"]
474
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the evaluateOperator function."]
475
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
476
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
477
+ // CIL[DOC-MICRO logic_summary="Implements the evaluateOperator function." notable_decisions="[]"]
478
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
479
+ // CIL[DOC-STABILITY stability="stable"]
263
480
  function evaluateOperator(actual: any, operators: Record<string, any>): boolean {
264
481
  for (const [op, expected] of Object.entries(operators)) {
265
482
  switch (op) {
@@ -298,76 +515,148 @@ function evaluateOperator(actual: any, operators: Record<string, any>): boolean
298
515
  }
299
516
  return true
300
517
  }
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."]
518
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:evaluateoperator:function"]
519
+ // CIL[DOC-VECTOR type="context" content="purpose='Evaluates a set of operators against an actual value to determine if the conditions are met.'; No verified external callers" status="ready"]
520
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
521
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
522
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
314
523
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
315
524
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
525
+
526
+ // CIL[DOC-MACRO purpose="Triggers the creation event for a specified entity type, allowing for associated actions to be executed."]
527
+ // CIL[DOC-RESPONSIBILITY responsibility="Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system."]
528
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
529
+ // CIL[DOC-CONTRACT inputs="- entityType: string (required) — the type of the entity being created.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context in which the operation is performed." outputs="Promise<void>" errors="none" side_effects="none dependencies="eventNameFor, checkAndFireTriggers"]
530
+ // CIL[DOC-MICRO logic_summary="Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system." notable_decisions="none"]
531
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
532
+ // CIL[DOC-STABILITY stability="stable"]
533
+ /**
534
+ * Triggers the creation event for a specified entity type, allowing for associated actions to be executed. This function is essential for managing entity lifecycle events within the system.
535
+ *
536
+ * @inputSpec
537
+ * - entityType: string (required) — the type of the entity being created.
538
+ * - entityId: string (required) — the unique identifier of the entity.
539
+ * - entityData: any (required) — the data associated with the entity.
540
+ * - ctx: CoreContext (required) — the context in which the operation is performed.
541
+ * @outputSpec Promise<void>
542
+ * @sideEffects none
543
+ * @stability stable
544
+ * @calls eventNameFor, checkAndFireTriggers
545
+ * @cil-generated
546
+ */
547
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:firecreatetriggers:function" type="function" identity="fireCreateTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
548
+ // CIL[DOC-MACRO purpose="fireCreateTriggers function"]
549
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the fireCreateTriggers function."]
550
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
551
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
552
+ // CIL[DOC-MICRO logic_summary="Implements the fireCreateTriggers function." notable_decisions="[]"]
553
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
554
+ // CIL[DOC-STABILITY stability="stable"]
316
555
  export async function fireCreateTriggers(
317
556
  entityType: string,
318
557
  entityId: string,
319
558
  entityData: any,
320
559
  ctx: CoreContext
321
560
  ): Promise<void> {
322
- const eventType = `${entityType}_created` as EventType
561
+ const eventType = `${eventNameFor(entityType)}_created` as EventType
323
562
  await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
324
563
  }
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."]
564
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:firecreatetriggers:function"]
565
+ // CIL[DOC-VECTOR type="context" content="purpose='Triggers the creation event for a specified entity type, allowing for associated actions to be executed.'; No verified external callers" status="ready"]
566
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
567
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
568
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
338
569
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
339
570
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
571
+
572
+ // CIL[DOC-MACRO purpose="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed."]
573
+ // CIL[DOC-RESPONSIBILITY responsibility="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes."]
574
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
575
+ // CIL[DOC-CONTRACT inputs="entityType: string (required) — the type of the entity being updated.\\nentityId: string (required) — the unique identifier of the entity.\\nentityData: any (required) — the data associated with the entity update.\\nctx: CoreContext (required) — the context in which the operation is executed." outputs="Promise<void>" errors="none" side_effects="none dependencies="checkAndFireTriggers, eventNameFor"]
576
+ // CIL[DOC-MICRO logic_summary="Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes." notable_decisions="none"]
577
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
578
+ // CIL[DOC-STABILITY stability="stable"]
579
+ /**
580
+ * Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed. This function is essential for maintaining consistency and triggering necessary updates in response to entity changes.
581
+ *
582
+ * @inputSpec
583
+ * entityType: string (required) — the type of the entity being updated.
584
+ * entityId: string (required) — the unique identifier of the entity.
585
+ * entityData: any (required) — the data associated with the entity update.
586
+ * ctx: CoreContext (required) — the context in which the operation is executed.
587
+ * @outputSpec Promise<void>
588
+ * @sideEffects none
589
+ * @stability stable
590
+ * @calls checkAndFireTriggers, eventNameFor
591
+ * @cil-generated
592
+ */
593
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:fireupdatetriggers:function" type="function" identity="fireUpdateTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
594
+ // CIL[DOC-MACRO purpose="fireUpdateTriggers function"]
595
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the fireUpdateTriggers function."]
596
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
597
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
598
+ // CIL[DOC-MICRO logic_summary="Implements the fireUpdateTriggers function." notable_decisions="[]"]
599
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
600
+ // CIL[DOC-STABILITY stability="stable"]
340
601
  export async function fireUpdateTriggers(
341
602
  entityType: string,
342
603
  entityId: string,
343
604
  entityData: any,
344
605
  ctx: CoreContext
345
606
  ): Promise<void> {
346
- const eventType = `${entityType}_updated` as EventType
607
+ const eventType = `${eventNameFor(entityType)}_updated` as EventType
347
608
  await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
348
609
  }
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."]
610
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:fireupdatetriggers:function"]
611
+ // CIL[DOC-VECTOR type="context" content="purpose='Triggers an update event for a specified entity type and ID, allowing for associated actions to be executed.'; No verified external callers" status="ready"]
612
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
613
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
614
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
362
615
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
363
616
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
617
+
618
+ // CIL[DOC-MACRO purpose="The fireDeleteTriggers function triggers delete events for a specified entity type and ID."]
619
+ // CIL[DOC-RESPONSIBILITY responsibility="The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted."]
620
+ // CIL[DOC-CONTEXT module="trigger-engine" layer="app-specific" related_files=".framework/functions/_shared/middleware,.framework/functions/_shared/db,.framework/functions/_shared/audit,.framework/functions/_shared/pipeline-runner"]
621
+ // CIL[DOC-CONTRACT inputs="- entityType: string (required) — the type of the entity being deleted.\\n- entityId: string (required) — the unique identifier of the entity.\\n- entityData: any (required) — the data associated with the entity.\\n- ctx: CoreContext (required) — the context in which the operation is performed." outputs="Promise<void>" errors="none" side_effects="none dependencies="eventNameFor, checkAndFireTriggers"]
622
+ // CIL[DOC-MICRO logic_summary="The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted." notable_decisions="none"]
623
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
624
+ // CIL[DOC-STABILITY stability="stable"]
625
+ /**
626
+ * The fireDeleteTriggers function triggers delete events for a specified entity type and ID. It ensures that any associated triggers are executed when an entity is deleted.
627
+ *
628
+ * @inputSpec
629
+ * - entityType: string (required) — the type of the entity being deleted.
630
+ * - entityId: string (required) — the unique identifier of the entity.
631
+ * - entityData: any (required) — the data associated with the entity.
632
+ * - ctx: CoreContext (required) — the context in which the operation is performed.
633
+ * @outputSpec Promise<void>
634
+ * @sideEffects none
635
+ * @stability stable
636
+ * @calls eventNameFor, checkAndFireTriggers
637
+ * @cil-generated
638
+ */
639
+ // CIL[BEGIN stable_id="~/.framework/functions/_shared/trigger-engine.ts:firedeletetriggers:function" type="function" identity="fireDeleteTriggers" parent="~/.framework/functions/_shared/trigger-engine.ts"]
640
+ // CIL[DOC-MACRO purpose="fireDeleteTriggers function"]
641
+ // CIL[DOC-RESPONSIBILITY responsibility="Implements the fireDeleteTriggers function."]
642
+ // CIL[DOC-CONTEXT module=".framework/functions/_shared/trigger-engine.ts" layer="app-specific" related_files=""]
643
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
644
+ // CIL[DOC-MICRO logic_summary="Implements the fireDeleteTriggers function." notable_decisions="[]"]
645
+ // CIL[DOC-CONFIDENCE pass="first" score="0.8" flags="none"]
646
+ // CIL[DOC-STABILITY stability="stable"]
364
647
  export async function fireDeleteTriggers(
365
648
  entityType: string,
366
649
  entityId: string,
367
650
  entityData: any,
368
651
  ctx: CoreContext
369
652
  ): Promise<void> {
370
- const eventType = `${entityType}_deleted` as EventType
653
+ const eventType = `${eventNameFor(entityType)}_deleted` as EventType
371
654
  await checkAndFireTriggers(eventType, entityType, entityId, entityData, ctx)
372
655
  }
373
- // CIL[END chunk_id="triggerengine_firedelete_1784020784"]
656
+ // CIL[END stable_id="~/.framework/functions/_shared/trigger-engine.ts:firedeletetriggers:function"]
657
+ // CIL[DOC-VECTOR type="context" content="purpose='The fireDeleteTriggers function triggers delete events for a specified entity type and ID.'; No verified external callers" status="ready"]
658
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only" status="ready"]
659
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
660
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
661
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
662
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]