spine-framework 0.3.145 → 0.4.1

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