spine-framework 0.3.124 → 0.3.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,61 +1,33 @@
1
- /**
2
- * @module pipelines
3
- * @audience core-contributor
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * CRUD API for the `pipelines` table, plus execution history access.
8
- * Pipelines are named lists of stages that execute sequentially via `runPipeline`
9
- * in `_shared/pipeline-runner.ts`.
10
- *
11
- * **Routed by:** `GET/POST/PATCH/DELETE /.netlify/functions/pipelines`
12
- *
13
- * **Actions:**
14
- * | method | ?action | handler |
15
- * |--------|--------------|-----------------|
16
- * | GET | by-trigger | listByTrigger |
17
- * | GET | executions | getExecutions |
18
- * | POST | toggle | toggle |
19
- * | GET | ?id | get |
20
- * | GET | (default) | list |
21
- * | POST | — | create |
22
- * | PATCH | — | update |
23
- * | DELETE | — | remove (hard) |
24
- *
25
- * **Authorization:** All operations use `ctx.db` (RLS-scoped). Authenticated
26
- * principal required for writes.
27
- *
28
- * INVARIANT: `remove` is a hard delete (no soft delete for pipelines).
29
- * INVARIANT: `toggle` is a dedicated POST action — use instead of PATCH for
30
- * is_active changes to ensure proper audit logging.
31
- *
32
- * @seeAlso pipeline-runner.ts (runPipeline — actual execution engine)
33
- * @seeAlso trigger-engine.ts (calls runPipeline when triggers fire)
34
- * @seeAlso audit.ts (emitLog for pipeline.* events)
35
- */
36
-
37
1
  import { createHandler } from './_shared/middleware'
38
- import { joins } from './_shared/db'
2
+ import { adminDb } from './_shared/db'
39
3
  import { emitLog } from './_shared/audit'
40
4
  import { sanitizeRecordData } from './_shared/permissions'
5
+ import { isSystemAdmin } from './_shared/principal'
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
41
14
 
42
- // ─── HANDLERS ─────────────────────────────────────────────────────────────────
43
-
44
- // ─── CHUNK_START: PIPELINES_LIST_BY_TRIGGER ──────────────────────────────────────────────
45
- /**
46
- * @chunk-id PIPELINES_LIST_BY_TRIGGER_1_0_0
47
- * @version 1.0.0
48
- * @hash eb5df34b2c5f7b954260202a14cbfbd84967ab03db335bd94894bf66a956a49a
49
- * @macro Pipelines by Trigger List Handler
50
- * @micro Lists pipelines filtered by trigger type with sanitization
51
- * @inputs ctx: CoreContext — Request context with principal and database
52
- * @inputs _body: any — Request body (unused for GET)
53
- * @outputs Array of sanitized pipeline records with app/createdBy joins
54
- * @depends-on [createHandler, joins, sanitizeRecordData]
55
- * @depended-by [Netlify function routing]
56
- * @side-effects [DB queries, permission sanitization]
57
- * @tags pipelines, list, trigger-type, crud
58
- */
15
+
16
+ // CIL[BEGIN chunk_id="pipelines_module_header_1783932909" type="module_header" identity="module_header" parent="none"]
17
+ // CIL[DOC-MACRO purpose="Lists pipelines filtered by trigger type with sanitization"]
18
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle trigger-based pipeline listing"]
19
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
20
+ // CIL[DOC-CONTRACT inputs="ctx, _body" outputs="Array of pipeline records" errors="Throws on validation or DB errors" side_effects="Database queries, permission sanitization"]
21
+ // CIL[DOC-MICRO logic_summary="Filters by trigger_type, applies permission sanitization" notable_decisions="[]"]
22
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
23
+ // CIL[DOC-STABILITY stability="stable"]
24
+ // CIL[DOC-AUDIENCE audience="developer"]
25
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
26
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
27
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
28
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
29
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
30
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
59
31
  export const listByTrigger = createHandler(async (ctx, _body) => {
60
32
  const { trigger_type, app_id, include_inactive } = ctx.query || {}
61
33
 
@@ -67,9 +39,11 @@ export const listByTrigger = createHandler(async (ctx, _body) => {
67
39
  throw new Error('Account context required')
68
40
  }
69
41
 
70
- let query = ctx.db
42
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
43
+
44
+ let query = db
71
45
  .from('pipelines')
72
- .select(`*, ${joins.app}, ${joins.createdBy}`)
46
+ .select('*')
73
47
  .eq('trigger_type', trigger_type)
74
48
 
75
49
  if (app_id) {
@@ -90,23 +64,21 @@ export const listByTrigger = createHandler(async (ctx, _body) => {
90
64
 
91
65
  return sanitized
92
66
  })
93
- // ─── CHUNK_END: PIPELINES_LIST_BY_TRIGGER ────────────────────────────────────────────────
94
-
95
- // ─── CHUNK_START: PIPELINES_LIST ──────────────────────────────────────────────
96
- /**
97
- * @chunk-id PIPELINES_LIST_1_0_0
98
- * @version 1.0.0
99
- * @hash af2b426b38e99a1907d3113a5b0b776204be0e51a897974573fb5ebc63b85892
100
- * @macro Pipelines List Handler
101
- * @micro Lists all pipelines with optional filtering and sanitization
102
- * @inputs ctx: CoreContext — Request context with principal and database
103
- * @inputs body: any — Request body (unused for GET)
104
- * @outputs Array of sanitized pipeline records with app/createdBy joins
105
- * @depends-on [createHandler, joins, sanitizeRecordData]
106
- * @depended-by [Netlify function routing]
107
- * @side-effects [DB queries, permission sanitization]
108
- * @tags pipelines, list, crud, pagination
109
- */
67
+ // CIL[END chunk_id="pipelines_module_header_1783932909"]
68
+ // CIL[BEGIN chunk_id="pipelines_list_1783932909" type="function" identity="list" parent="none"]
69
+ // CIL[DOC-MACRO purpose="Lists all pipelines with optional app filtering"]
70
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle general pipeline listing"]
71
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
72
+ // CIL[DOC-CONTRACT inputs="none" outputs="Array of pipeline records" errors="Throws on validation or DB errors" side_effects="Database queries, permission sanitization"]
73
+ // CIL[DOC-MICRO logic_summary="Lists pipelines with optional app filter, applies sanitization" notable_decisions="[]"]
74
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
75
+ // CIL[DOC-STABILITY stability="stable"]
76
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 3. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
77
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 4."]
78
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
79
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
80
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
81
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
110
82
  export const list = createHandler(async (ctx, body) => {
111
83
  const { app_id, include_inactive } = ctx.query || {}
112
84
 
@@ -114,10 +86,11 @@ export const list = createHandler(async (ctx, body) => {
114
86
  throw new Error('Account context required')
115
87
  }
116
88
 
117
- // RLS automatically filters to accessible accounts
118
- let query = ctx.db
89
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
90
+
91
+ let query = db
119
92
  .from('pipelines')
120
- .select(`*, ${joins.app}, ${joins.createdBy}`)
93
+ .select('*')
121
94
 
122
95
  if (app_id) {
123
96
  query = query.eq('app_id', app_id)
@@ -127,7 +100,6 @@ export const list = createHandler(async (ctx, body) => {
127
100
 
128
101
  if (err) throw err
129
102
 
130
- // Sanitize each record based on role permissions
131
103
  const sanitized = []
132
104
  for (const pipeline of data || []) {
133
105
  sanitized.push(await sanitizeRecordData(ctx, pipeline, 'pipeline'))
@@ -135,23 +107,21 @@ export const list = createHandler(async (ctx, body) => {
135
107
 
136
108
  return sanitized
137
109
  })
138
- // ─── CHUNK_END: PIPELINES_LIST ────────────────────────────────────────────────
139
-
140
- // ─── CHUNK_START: PIPELINES_GET ──────────────────────────────────────────────
141
- /**
142
- * @chunk-id PIPELINES_GET_1_0_0
143
- * @version 1.0.0
144
- * @hash 27a956f4dfe17b93c89170d8f3a9f3f792e4b264b48d13017a52d08014008033
145
- * @macro Pipeline Get Handler
146
- * @micro Returns single pipeline record with joins and sanitization
147
- * @inputs ctx: CoreContext — Request context with principal and database
148
- * @inputs body: any — Request body (unused for GET)
149
- * @outputs Sanitized pipeline record with app/createdBy joins
150
- * @depends-on [createHandler, joins, sanitizeRecordData]
151
- * @depended-by [Netlify function routing]
152
- * @side-effects [DB single row query, permission sanitization]
153
- * @tags pipelines, get, crud, single-record
154
- */
110
+ // CIL[END chunk_id="pipelines_list_1783932909"]
111
+ // CIL[BEGIN chunk_id="pipelines_get_1783932909" type="function" identity="get" parent="none"]
112
+ // CIL[DOC-MACRO purpose="Retrieves single pipeline by ID with sanitization"]
113
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle individual pipeline retrieval"]
114
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
115
+ // CIL[DOC-CONTRACT inputs="none" outputs="Single pipeline record" errors="Throws if ID missing or DB error" side_effects="Database query, permission sanitization"]
116
+ // CIL[DOC-MICRO logic_summary="Fetches pipeline by ID, applies permission sanitization" notable_decisions="[]"]
117
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
118
+ // CIL[DOC-STABILITY stability="stable"]
119
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, \."]
120
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
121
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
122
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
123
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
124
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
155
125
  export const get = createHandler(async (ctx, body) => {
156
126
  const { id } = ctx.query || {}
157
127
 
@@ -159,34 +129,33 @@ export const get = createHandler(async (ctx, body) => {
159
129
  throw new Error('Pipeline ID is required')
160
130
  }
161
131
 
162
- const { data, error: err } = await ctx.db
132
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
133
+
134
+ const { data, error: err } = await db
163
135
  .from('pipelines')
164
- .select(`*, ${joins.app}, ${joins.createdBy}`)
136
+ .select('*')
165
137
  .eq('id', id)
166
138
  .single()
167
139
 
168
140
  if (err) throw err
169
141
 
170
- // Sanitize based on role permissions
171
142
  return await sanitizeRecordData(ctx, data, 'pipeline')
172
143
  })
173
- // ─── CHUNK_END: PIPELINES_GET ────────────────────────────────────────────────
174
-
175
- // ─── CHUNK_START: PIPELINES_CREATE ──────────────────────────────────────────────
176
- /**
177
- * @chunk-id PIPELINES_CREATE_1_0_0
178
- * @version 1.0.0
179
- * @hash b39ec2f696a5d4a9589b7fce769eb0e174d5b0b17b7f4155dc10b5fe70c09252
180
- * @macro Pipeline Create Handler
181
- * @micro Creates pipeline record with validation and audit logging
182
- * @inputs ctx: CoreContext — Request context with principal and database
183
- * @inputs body: object — Pipeline data including name, trigger_type, stages
184
- * @outputs Inserted pipeline record
185
- * @depends-on [createHandler, emitLog]
186
- * @depended-by [Netlify function routing]
187
- * @side-effects [DB insert, audit logging]
188
- * @tags pipelines, create, crud, audit
189
- */
144
+ // CIL[END chunk_id="pipelines_get_1783932909"]
145
+ // CIL[BEGIN chunk_id="pipelines_create_1783932909" type="function" identity="create" parent="none"]
146
+ // CIL[DOC-MACRO purpose="Creates new pipeline with validation and audit logging"]
147
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle pipeline creation with security checks"]
148
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
149
+ // CIL[DOC-CONTRACT inputs="none" outputs="Created pipeline record" errors="Throws on validation or DB errors" side_effects="Database insert, audit logging"]
150
+ // CIL[DOC-MICRO logic_summary="Validates required fields, creates pipeline with audit trail" notable_decisions="[]"]
151
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
152
+ // CIL[DOC-STABILITY stability="stable"]
153
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
154
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
155
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
156
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
157
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
158
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
190
159
  export const create = createHandler(async (ctx, body) => {
191
160
  const { app_id, name, description, trigger_type, config, stages, metadata } = body
192
161
 
@@ -223,26 +192,24 @@ export const create = createHandler(async (ctx, body) => {
223
192
 
224
193
  return data
225
194
  })
226
- // ─── CHUNK_END: PIPELINES_CREATE ────────────────────────────────────────────────
227
-
228
- // ─── CHUNK_START: PIPELINES_UPDATE ──────────────────────────────────────────────
229
- /**
230
- * @chunk-id PIPELINES_UPDATE_1_0_0
231
- * @version 1.0.0
232
- * @hash 309910d5389fffcdc6b97b33dfd76f2217bb89e26469f73e4e792f9c41977a8f
233
- * @macro Pipeline Update Handler
234
- * @micro Updates pipeline with field allowlist and audit logging
235
- * @inputs ctx: CoreContext — Request context with principal and database
236
- * @inputs body: object — Pipeline updates including id and updatable fields
237
- * @outputs Updated pipeline record
238
- * @depends-on [createHandler, emitLog]
239
- * @depended-by [Netlify function routing]
240
- * @side-effects [DB update, audit logging]
241
- * @tags pipelines, update, crud, audit
242
- */
195
+ // CIL[END chunk_id="pipelines_create_1783932909"]
196
+ // CIL[BEGIN chunk_id="pipelines_update_1783932909" type="function" identity="update" parent="none"]
197
+ // CIL[DOC-MACRO purpose="Updates pipeline with selective field validation"]
198
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle pipeline updates with audit trail"]
199
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
200
+ // CIL[DOC-CONTRACT inputs="none" outputs="Updated pipeline record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
201
+ // CIL[DOC-MICRO logic_summary="Updates specified fields, maintains audit trail" notable_decisions="[]"]
202
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
203
+ // CIL[DOC-STABILITY stability="stable"]
204
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
205
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
206
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
207
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
208
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
209
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
243
210
  export const update = createHandler(async (ctx, body) => {
244
211
  const id = body?.id || ctx.query?.id
245
- const { id: _bodyId, name, description, config, stages, metadata } = body || {}
212
+ const { id: _bodyId, name, description, config, stages, metadata, trigger_type, is_active, app_id } = body || {}
246
213
 
247
214
  if (!id) {
248
215
  throw new Error('Pipeline ID is required')
@@ -252,7 +219,6 @@ export const update = createHandler(async (ctx, body) => {
252
219
  throw new Error('User context (person and account) required')
253
220
  }
254
221
 
255
- // Get current state for audit - RLS will filter to accessible pipelines
256
222
  const { data: current } = await ctx.db
257
223
  .from('pipelines')
258
224
  .select('*')
@@ -269,6 +235,9 @@ export const update = createHandler(async (ctx, body) => {
269
235
  if (config !== undefined) updateData.config = config
270
236
  if (stages !== undefined) updateData.stages = stages
271
237
  if (metadata !== undefined) updateData.metadata = metadata
238
+ if (trigger_type !== undefined) updateData.trigger_type = trigger_type
239
+ if (is_active !== undefined) updateData.is_active = is_active
240
+ if (app_id !== undefined) updateData.app_id = app_id
272
241
 
273
242
  const { data, error: err } = await ctx.db
274
243
  .from('pipelines')
@@ -286,23 +255,21 @@ export const update = createHandler(async (ctx, body) => {
286
255
 
287
256
  return data
288
257
  })
289
- // ─── CHUNK_END: PIPELINES_UPDATE ────────────────────────────────────────────────
290
-
291
- // ─── CHUNK_START: PIPELINES_TOGGLE ──────────────────────────────────────────────
292
- /**
293
- * @chunk-id PIPELINES_TOGGLE_1_0_0
294
- * @version 1.0.0
295
- * @hash 4167ca4a65e675a0e37d0237000acf0fe5fdb23699495ff9f46b39f1a4e93884
296
- * @macro Pipeline Toggle Handler
297
- * @micro Activates or deactivates pipeline with audit logging
298
- * @inputs ctx: CoreContext — Request context with principal and database
299
- * @inputs body: object — Pipeline id and is_active boolean
300
- * @outputs Updated pipeline record
301
- * @depends-on [createHandler, emitLog]
302
- * @depended-by [Netlify function routing]
303
- * @side-effects [DB update, audit logging]
304
- * @tags pipelines, toggle, state-transition, audit
305
- */
258
+ // CIL[END chunk_id="pipelines_update_1783932909"]
259
+ // CIL[BEGIN chunk_id="pipelines_toggle_1783932909" type="function" identity="toggle" parent="none"]
260
+ // CIL[DOC-MACRO purpose="Toggles pipeline active/inactive status"]
261
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle pipeline activation state changes"]
262
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\"]"]
263
+ // CIL[DOC-CONTRACT inputs="none" outputs="Updated pipeline record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
264
+ // CIL[DOC-MICRO logic_summary="Updates is_active flag, tracks state changes" notable_decisions="[]"]
265
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
266
+ // CIL[DOC-STABILITY stability="stable"]
267
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts."]
268
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
269
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
270
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
271
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
272
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
306
273
  export const toggle = createHandler(async (ctx, body) => {
307
274
  const { id, is_active } = body
308
275
 
@@ -314,7 +281,6 @@ export const toggle = createHandler(async (ctx, body) => {
314
281
  throw new Error('User context (person and account) required')
315
282
  }
316
283
 
317
- // Get current state for audit - RLS will filter to accessible pipelines
318
284
  const { data: current } = await ctx.db
319
285
  .from('pipelines')
320
286
  .select('*')
@@ -341,23 +307,21 @@ export const toggle = createHandler(async (ctx, body) => {
341
307
 
342
308
  return data
343
309
  })
344
- // ─── CHUNK_END: PIPELINES_TOGGLE ────────────────────────────────────────────────
345
-
346
- // ─── CHUNK_START: PIPELINES_GET_EXECUTIONS ──────────────────────────────────────────────
347
- /**
348
- * @chunk-id PIPELINES_GET_EXECUTIONS_1_0_0
349
- * @version 1.0.0
350
- * @hash 92b0d0a8f3c7ab12144950a0e1dd614a0d92fb6f5e3451542e396018bd5f783d
351
- * @macro Pipeline Executions History Handler
352
- * @micro Returns paginated execution history for a pipeline
353
- * @inputs ctx: CoreContext — Request context with principal and database
354
- * @inputs _body: any — Request body (unused for GET)
355
- * @outputs Array of pipeline_executions rows ordered newest-first
356
- * @depends-on [createHandler]
357
- * @depended-by [Netlify function routing]
358
- * @side-effects [DB query with pagination]
359
- * @tags pipelines, executions, history, pagination
360
- */
310
+ // CIL[END chunk_id="pipelines_toggle_1783932909"]
311
+ // CIL[BEGIN chunk_id="pipelines_getexecutions_1783932909" type="function" identity="getExecutions" parent="none"]
312
+ // CIL[DOC-MACRO purpose="Retrieves execution history for specific pipeline"]
313
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle pipeline execution history queries"]
314
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
315
+ // CIL[DOC-CONTRACT inputs="none" outputs="Array of execution records" errors="Throws if pipeline_id missing or DB error" side_effects="Database query"]
316
+ // CIL[DOC-MICRO logic_summary="Queries execution history with pagination" notable_decisions="[]"]
317
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
318
+ // CIL[DOC-STABILITY stability="stable"]
319
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
320
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
321
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
322
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
323
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
324
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
361
325
  export const getExecutions = createHandler(async (ctx, _body) => {
362
326
  const { pipeline_id, limit = 50, offset = 0 } = ctx.query || {}
363
327
 
@@ -379,23 +343,21 @@ export const getExecutions = createHandler(async (ctx, _body) => {
379
343
 
380
344
  return data
381
345
  })
382
- // ─── CHUNK_END: PIPELINES_GET_EXECUTIONS ────────────────────────────────────────────────
383
-
384
- // ─── CHUNK_START: PIPELINES_REMOVE ──────────────────────────────────────────────
385
- /**
386
- * @chunk-id PIPELINES_REMOVE_1_0_0
387
- * @version 1.0.0
388
- * @hash 8d87b1d6e7613f6fbaa77eb100c72359456f4bc38d8c435ac412d414d71e21be
389
- * @macro Pipeline Remove Handler
390
- * @micro Hard-deletes pipeline with audit logging
391
- * @inputs ctx: CoreContext — Request context with principal and database
392
- * @inputs _body: any — Request body (unused for DELETE)
393
- * @outputs {success: true} — Confirmation of successful deletion
394
- * @depends-on [createHandler, emitLog]
395
- * @depended-by [Netlify function routing]
396
- * @side-effects [DB delete, audit logging]
397
- * @tags pipelines, remove, delete, audit
398
- */
346
+ // CIL[END chunk_id="pipelines_getexecutions_1783932909"]
347
+ // CIL[BEGIN chunk_id="pipelines_remove_1783932909" type="function" identity="remove" parent="none"]
348
+ // CIL[DOC-MACRO purpose="Hard deletes pipeline with audit logging"]
349
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle pipeline deletion with audit trail"]
350
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[]"]
351
+ // CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws if ID missing or DB error" side_effects="Database delete, audit logging"]
352
+ // CIL[DOC-MICRO logic_summary="Hard deletes pipeline, maintains audit trail" notable_decisions="[]"]
353
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
354
+ // CIL[DOC-STABILITY stability="stable"]
355
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
356
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
357
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
358
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
359
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
360
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
399
361
  export const remove = createHandler(async (ctx, _body) => {
400
362
  const id = ctx.query?.id
401
363
 
@@ -425,25 +387,21 @@ export const remove = createHandler(async (ctx, _body) => {
425
387
 
426
388
  return { success: true }
427
389
  })
428
- // ─── CHUNK_END: PIPELINES_REMOVE ────────────────────────────────────────────────
429
-
430
- // ─── MAIN HANDLER ────────────────────────────────────────────────────────────
431
-
432
- // ─── CHUNK_START: PIPELINES_HANDLER ──────────────────────────────────────────────
433
- /**
434
- * @chunk-id PIPELINES_HANDLER_1_0_0
435
- * @version 1.0.0
436
- * @hash 6a2509eb1d183c23578cea419e1d53b579876dc8f8778a9b5577427365da7a68
437
- * @macro Pipelines Router
438
- * @micro Routes HTTP methods and actions to appropriate pipeline handlers
439
- * @inputs ctx: CoreContext — Request context with principal and database
440
- * @inputs body: any — Request body for POST/PATCH operations
441
- * @outputs Varies — Depends on routed handler (listByTrigger/getExecutions/toggle/list/get/create/update/remove)
442
- * @depends-on [createHandler, listByTrigger, getExecutions, toggle, list, get, create, update, remove]
443
- * @depended-by [Netlify function routing]
444
- * @side-effects [Delegates to appropriate handler]
445
- * @tags pipelines, router, crud, netlify-function
446
- */
390
+ // CIL[END chunk_id="pipelines_remove_1783932909"]
391
+ // CIL[BEGIN chunk_id="pipelines_handler_1783932909" type="function" identity="handler" parent="none"]
392
+ // CIL[DOC-MACRO purpose="Routes HTTP methods and actions to pipeline handlers"]
393
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle request routing for pipeline operations"]
394
+ // CIL[DOC-CONTEXT module="pipelines" layer="api-handler" related_files="[]"]
395
+ // CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
396
+ // CIL[DOC-MICRO logic_summary="Routes based on action and method, delegates to handlers" notable_decisions="[]"]
397
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
398
+ // CIL[DOC-STABILITY stability="stable"]
399
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
400
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
401
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
402
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
403
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
404
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
447
405
  export const handler = createHandler(async (ctx, body) => {
448
406
  const { action } = ctx.query || {}
449
407
  const method = ctx.query?.method || 'GET'
@@ -482,4 +440,4 @@ export const handler = createHandler(async (ctx, body) => {
482
440
 
483
441
  throw new Error('Invalid action or method')
484
442
  })
485
- // ─── CHUNK_END: PIPELINES_HANDLER ────────────────────────────────────────────────
443
+ // CIL[END chunk_id="pipelines_handler_1783932909"]