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,80 +1,43 @@
1
- /**
2
- * @module pipeline-executions
3
- * @audience core-contributor
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * Lifecycle management API for the `pipeline_executions` table. Records
8
- * track individual pipeline runs: status progression (pending → running →
9
- * completed/failed/cancelled), timing, trigger data, and result payloads.
10
- *
11
- * **Routed by:** `GET/POST/PATCH /.netlify/functions/pipeline-executions`
12
- *
13
- * **Actions:**
14
- * | method | ?action | handler |
15
- * |--------|----------|------------|
16
- * | GET | list | list |
17
- * | GET | running | getRunning |
18
- * | GET | stats | getStats |
19
- * | POST | cleanup | cleanup |
20
- * | GET | ?id | get |
21
- * | GET | (default)| list |
22
- * | POST | — | create |
23
- * | PATCH | start | start |
24
- * | PATCH | complete | complete |
25
- * | PATCH | cancel | cancel |
26
- *
27
- * **Status FSM:** pending → running → completed | failed | cancelled
28
- *
29
- * **Authorization:** All operations use `ctx.db` (RLS-scoped to account).
30
- * Account context required.
31
- *
32
- * **Column reference:**
33
- * `id`, `pipeline_id`, `status`, `trigger_data`, `result`, `error_message`,
34
- * `started_at`, `completed_at`, `duration_ms`, `created_by`, `account_id`, `created_at`
35
- *
36
- * @seeAlso pipelines.ts (pipeline_id FK source)
37
- * @seeAlso pipeline-runner.ts (runPipeline — calls create/start/complete)
38
- * @seeAlso audit.ts (emitLog for pipeline_execution.* events)
39
- */
40
-
41
1
  import { createHandler, json, error, parseBody } from './_shared/middleware'
42
2
  import { emitLog } from './_shared/audit'
3
+ import { adminDb } from './_shared/db'
4
+ import { isSystemAdmin } from './_shared/principal'
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
43
14
 
44
- const SELECT_WITH_JOINS = `
45
- *,
46
- pipeline:pipelines(id, name, trigger_type),
47
- triggered_by_person:people!pipeline_executions_created_by_fkey(id, full_name, email)
48
- `
49
-
50
- // ─── HANDLERS ─────────────────────────────────────────────────────────────────
51
-
52
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_LIST ──────────────────────────────────────────────
53
- /**
54
- * @chunk-id PIPELINE_EXECUTIONS_LIST_1_0_0
55
- * @version 1.0.0
56
- * @hash 499006790777b78f0eb610474f6869e94869b5b244d1ecedbb0e216cf68bae70
57
- * @macro Pipeline Executions List Handler
58
- * @micro Lists pipeline executions with filtering and joins
59
- * @inputs ctx: CoreContext — Request context with principal and database
60
- * @inputs body: any — Request body (unused for GET)
61
- * @outputs Array of execution records with pipeline and person joins
62
- * @depends-on [createHandler, SELECT_WITH_JOINS]
63
- * @depended-by [Netlify function routing]
64
- * @side-effects [DB queries with joins]
65
- * @tags pipeline-executions, list, crud, pagination
66
- */
15
+ // CIL[BEGIN chunk_id="pipeline-executions_module_header_1783932909" type="module_header" identity="module_header" parent="none"]
16
+ // CIL[DOC-MACRO purpose="Lists pipeline executions with filtering and joins"]
17
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution listing with filters"]
18
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
19
+ // CIL[DOC-CONTRACT inputs="ctx, body" outputs="Array of execution records" errors="Throws on DB errors" side_effects="Database queries"]
20
+ // CIL[DOC-MICRO logic_summary="Filters executions, applies pagination, returns records" notable_decisions="[]"]
21
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
22
+ // CIL[DOC-STABILITY stability="stable"]
23
+ // CIL[DOC-AUDIENCE audience="developer"]
24
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, \."]
25
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
26
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
27
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
28
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
29
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
67
30
  export const list = createHandler(async (ctx, body) => {
68
31
  const { pipeline_id, status, limit = 100, offset = 0 } = ctx.query || {}
32
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
69
33
 
70
- if (!ctx.accountId) {
34
+ if (!isSystemAdmin(ctx.principal) && !ctx.accountId) {
71
35
  throw new Error('Account context required')
72
36
  }
73
37
 
74
- let query = ctx.db
38
+ let query = db
75
39
  .from('pipeline_executions')
76
- .select(SELECT_WITH_JOINS)
77
- .eq('account_id', ctx.accountId)
40
+ .select('*')
78
41
  .order('created_at', { ascending: false })
79
42
 
80
43
  if (pipeline_id) query = query.eq('pipeline_id', pipeline_id)
@@ -87,25 +50,23 @@ export const list = createHandler(async (ctx, body) => {
87
50
 
88
51
  if (err) throw err
89
52
 
90
- return data
53
+ return data || []
91
54
  })
92
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_LIST ────────────────────────────────────────────────
93
-
94
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_GET ──────────────────────────────────────────────
95
- /**
96
- * @chunk-id PIPELINE_EXECUTIONS_GET_1_0_0
97
- * @version 1.0.0
98
- * @hash b148fbec727984f7623d1fa94ae20dd0550056d5c886b0994651f119dbc68521
99
- * @macro Pipeline Execution Get Handler
100
- * @micro Returns single pipeline execution record with joins
101
- * @inputs ctx: CoreContext — Request context with principal and database
102
- * @inputs body: any — Request body (unused for GET)
103
- * @outputs Execution record with pipeline and person joins
104
- * @depends-on [createHandler, SELECT_WITH_JOINS]
105
- * @depended-by [Netlify function routing]
106
- * @side-effects [DB single row query with joins]
107
- * @tags pipeline-executions, get, crud, single-record
108
- */
55
+ // CIL[END chunk_id="pipeline-executions_module_header_1783932909"]
56
+ // CIL[BEGIN chunk_id="pipeline-executions_get_1783932909" type="function" identity="get" parent="none"]
57
+ // CIL[DOC-MACRO purpose="Retrieves single pipeline execution by ID with joins"]
58
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle individual execution retrieval"]
59
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
60
+ // CIL[DOC-CONTRACT inputs="none" outputs="Single execution record" errors="Throws if ID missing or DB error" side_effects="Database query"]
61
+ // CIL[DOC-MICRO logic_summary="Fetches execution by ID with related data" notable_decisions="[]"]
62
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
+ // CIL[DOC-STABILITY stability="stable"]
64
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 3. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/layout/Sidebar.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
65
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 4."]
66
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
68
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
109
70
  export const get = createHandler(async (ctx, body) => {
110
71
  const { id } = ctx.query || {}
111
72
 
@@ -113,9 +74,11 @@ export const get = createHandler(async (ctx, body) => {
113
74
  throw new Error('Execution ID is required')
114
75
  }
115
76
 
116
- const { data, error: err } = await ctx.db
77
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
78
+
79
+ const { data, error: err } = await db
117
80
  .from('pipeline_executions')
118
- .select(SELECT_WITH_JOINS)
81
+ .select('*')
119
82
  .eq('id', id)
120
83
  .single()
121
84
 
@@ -123,23 +86,21 @@ export const get = createHandler(async (ctx, body) => {
123
86
 
124
87
  return data
125
88
  })
126
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_GET ────────────────────────────────────────────────
127
-
128
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_CREATE ──────────────────────────────────────────────
129
- /**
130
- * @chunk-id PIPELINE_EXECUTIONS_CREATE_1_0_0
131
- * @version 1.0.0
132
- * @hash fb1d51a8ca0e30e0d151147edde5516c01a51f2cfcad64105ff07937aa430924
133
- * @macro Pipeline Execution Create Handler
134
- * @micro Creates execution record in pending status with audit logging
135
- * @inputs ctx: CoreContext — Request context with principal and database
136
- * @inputs body: object — pipeline_id and optional trigger_data
137
- * @outputs {execution_id: string} — ID of created execution
138
- * @depends-on [createHandler, emitLog]
139
- * @depended-by [Netlify function routing, pipeline-runner.ts]
140
- * @side-effects [DB insert, audit logging]
141
- * @tags pipeline-executions, create, crud, audit
142
- */
89
+ // CIL[END chunk_id="pipeline-executions_get_1783932909"]
90
+ // CIL[BEGIN chunk_id="pipeline-executions_create_1783932909" type="function" identity="create" parent="none"]
91
+ // CIL[DOC-MACRO purpose="Creates pipeline execution record in pending status"]
92
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution creation with audit logging"]
93
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
94
+ // CIL[DOC-CONTRACT inputs="none" outputs="{execution_id: string}" errors="Throws on validation or DB errors" side_effects="Database insert, audit logging"]
95
+ // CIL[DOC-MICRO logic_summary="Creates execution record, logs audit event" notable_decisions="[]"]
96
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
97
+ // CIL[DOC-STABILITY stability="stable"]
98
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, \."]
99
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
100
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
101
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
102
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
103
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
143
104
  export const create = createHandler(async (ctx, body) => {
144
105
  const { pipeline_id, trigger_data } = body
145
106
 
@@ -172,23 +133,21 @@ export const create = createHandler(async (ctx, body) => {
172
133
 
173
134
  return { execution_id: data?.id }
174
135
  })
175
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_CREATE ────────────────────────────────────────────────
176
-
177
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_START ──────────────────────────────────────────────
178
- /**
179
- * @chunk-id PIPELINE_EXECUTIONS_START_1_0_0
180
- * @version 1.0.0
181
- * @hash 25eeada82be4fff26606dc6e784b6e0accaaebaee08514577368cdd146f39aaf
182
- * @macro Pipeline Execution Start Handler
183
- * @micro Transitions execution from pending to running with timestamp
184
- * @inputs ctx: CoreContext — Request context with principal and database
185
- * @inputs body: object — execution id to start
186
- * @outputs {success: true} — Confirmation of successful start
187
- * @depends-on [createHandler, emitLog]
188
- * @depended-by [Netlify function routing, pipeline-runner.ts]
189
- * @side-effects [DB update, audit logging]
190
- * @tags pipeline-executions, start, state-transition, audit
191
- */
136
+ // CIL[END chunk_id="pipeline-executions_create_1783932909"]
137
+ // CIL[BEGIN chunk_id="pipeline-executions_start_1783932909" type="function" identity="start" parent="none"]
138
+ // CIL[DOC-MACRO purpose="Transitions execution from pending to running"]
139
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution start with timestamp"]
140
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
141
+ // CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
142
+ // CIL[DOC-MICRO logic_summary="Updates status to running, sets start timestamp" 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: api-handler. Direct callers: 1. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
146
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
147
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
148
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
149
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
150
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
192
151
  export const start = createHandler(async (ctx, body) => {
193
152
  const { id } = body
194
153
 
@@ -212,23 +171,21 @@ export const start = createHandler(async (ctx, body) => {
212
171
 
213
172
  return { success: true }
214
173
  })
215
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_START ────────────────────────────────────────────────
216
-
217
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_COMPLETE ──────────────────────────────────────────────
218
- /**
219
- * @chunk-id PIPELINE_EXECUTIONS_COMPLETE_1_0_0
220
- * @version 1.0.0
221
- * @hash 088db36524718ec6d8d85e1051aa5d1c4fc31fb796f284bc1526c195d4686dff
222
- * @macro Pipeline Execution Complete Handler
223
- * @micro Transitions execution to completed/failed with duration calculation
224
- * @inputs ctx: CoreContext — Request context with principal and database
225
- * @inputs body: object — id, output_data, and optional error_message
226
- * @outputs {success: true} — Confirmation of successful completion
227
- * @depends-on [createHandler, emitLog]
228
- * @depended-by [Netlify function routing, pipeline-runner.ts]
229
- * @side-effects [DB read for started_at, DB update, audit logging]
230
- * @tags pipeline-executions, complete, state-transition, audit
231
- */
174
+ // CIL[END chunk_id="pipeline-executions_start_1783932909"]
175
+ // CIL[BEGIN chunk_id="pipeline-executions_complete_1783932909" type="function" identity="complete" parent="none"]
176
+ // CIL[DOC-MACRO purpose="Transitions execution to completed/failed with duration"]
177
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution completion with metrics"]
178
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
179
+ // CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
180
+ // CIL[DOC-MICRO logic_summary="Calculates duration, updates status, logs completion" notable_decisions="[]"]
181
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
182
+ // CIL[DOC-STABILITY stability="stable"]
183
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
184
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
185
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
186
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
187
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
188
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
232
189
  export const complete = createHandler(async (ctx, body) => {
233
190
  const { id, output_data, error_message } = body
234
191
 
@@ -239,7 +196,6 @@ export const complete = createHandler(async (ctx, body) => {
239
196
  const now = new Date().toISOString()
240
197
  const finalStatus = error_message ? 'failed' : 'completed'
241
198
 
242
- // Fetch started_at to compute duration
243
199
  const { data: existing } = await ctx.db
244
200
  .from('pipeline_executions')
245
201
  .select('started_at')
@@ -272,23 +228,21 @@ export const complete = createHandler(async (ctx, body) => {
272
228
 
273
229
  return { success: true }
274
230
  })
275
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_COMPLETE ────────────────────────────────────────────────
276
-
277
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_CANCEL ──────────────────────────────────────────────
278
- /**
279
- * @chunk-id PIPELINE_EXECUTIONS_CANCEL_1_0_0
280
- * @version 1.0.0
281
- * @hash f45e336099afeb28cb3db099fa428d8637e07876dcabf7ec85de844c25b43d97
282
- * @macro Pipeline Execution Cancel Handler
283
- * @micro Cancels execution by setting status to cancelled with timestamp
284
- * @inputs ctx: CoreContext — Request context with principal and database
285
- * @inputs body: object — execution id to cancel
286
- * @outputs {success: true} — Confirmation of successful cancellation
287
- * @depends-on [createHandler, emitLog]
288
- * @depended-by [Netlify function routing]
289
- * @side-effects [DB update, audit logging]
290
- * @tags pipeline-executions, cancel, state-transition, audit
291
- */
231
+ // CIL[END chunk_id="pipeline-executions_complete_1783932909"]
232
+ // CIL[BEGIN chunk_id="pipeline-executions_cancel_1783932909" type="function" identity="cancel" parent="none"]
233
+ // CIL[DOC-MACRO purpose="Cancels execution by setting status to cancelled"]
234
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution cancellation with audit"]
235
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[]"]
236
+ // CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
237
+ // CIL[DOC-MICRO logic_summary="Sets status to cancelled, logs audit event" notable_decisions="[]"]
238
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
239
+ // CIL[DOC-STABILITY stability="stable"]
240
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
241
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
242
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
243
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
244
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
245
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
292
246
  export const cancel = createHandler(async (ctx, body) => {
293
247
  const { id } = body
294
248
 
@@ -312,34 +266,32 @@ export const cancel = createHandler(async (ctx, body) => {
312
266
 
313
267
  return { success: true }
314
268
  })
315
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_CANCEL ────────────────────────────────────────────────
316
-
317
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_GET_RUNNING ──────────────────────────────────────────────
318
- /**
319
- * @chunk-id PIPELINE_EXECUTIONS_GET_RUNNING_1_0_0
320
- * @version 1.0.0
321
- * @hash d43691d1d9063a7421eae3b32ede4bb603efa7b2faf635861f66178fde5641b6
322
- * @macro Running Pipeline Executions Handler
323
- * @micro Returns currently running executions with optional pipeline filter
324
- * @inputs ctx: CoreContext — Request context with principal and database
325
- * @inputs body: any — Request body (unused for GET)
326
- * @outputs Array of running execution records with joins
327
- * @depends-on [createHandler, SELECT_WITH_JOINS]
328
- * @depended-by [Netlify function routing]
329
- * @side-effects [DB query with joins]
330
- * @tags pipeline-executions, running, status-filter, monitoring
331
- */
269
+ // CIL[END chunk_id="pipeline-executions_cancel_1783932909"]
270
+ // CIL[BEGIN chunk_id="pipeline-executions_getrunning_1783932909" type="function" identity="getRunning" parent="none"]
271
+ // CIL[DOC-MACRO purpose="Returns currently running executions with filtering"]
272
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle running execution monitoring"]
273
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
274
+ // CIL[DOC-CONTRACT inputs="none" outputs="Array of running executions" errors="Throws on DB errors" side_effects="Database query"]
275
+ // CIL[DOC-MICRO logic_summary="Filters for running status, returns with joins" notable_decisions="[]"]
276
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
277
+ // CIL[DOC-STABILITY stability="stable"]
278
+ // 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/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
279
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
280
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
281
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
282
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
283
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
332
284
  export const getRunning = createHandler(async (ctx, body) => {
333
285
  const { pipeline_id } = ctx.query || {}
286
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
334
287
 
335
- if (!ctx.accountId) {
288
+ if (!isSystemAdmin(ctx.principal) && !ctx.accountId) {
336
289
  throw new Error('Account context required')
337
290
  }
338
291
 
339
- let query = ctx.db
292
+ let query = db
340
293
  .from('pipeline_executions')
341
- .select(SELECT_WITH_JOINS)
342
- .eq('account_id', ctx.accountId)
294
+ .select('*')
343
295
  .eq('status', 'running')
344
296
  .order('started_at', { ascending: false })
345
297
 
@@ -349,36 +301,34 @@ export const getRunning = createHandler(async (ctx, body) => {
349
301
 
350
302
  if (err) throw err
351
303
 
352
- return data
304
+ return data || []
353
305
  })
354
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_GET_RUNNING ────────────────────────────────────────────────
355
-
356
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_GET_STATS ──────────────────────────────────────────────
357
- /**
358
- * @chunk-id PIPELINE_EXECUTIONS_GET_STATS_1_0_0
359
- * @version 1.0.0
360
- * @hash f80bc6b6b830d1bafcd7d02ecac50c78cab10ceef7441dc477b3193a7b29143e
361
- * @macro Pipeline Executions Statistics Handler
362
- * @micro Returns execution counts by status with filtering options
363
- * @inputs ctx: CoreContext — Request context with principal and database
364
- * @inputs body: any — Request body (unused for GET)
365
- * @outputs {total, completed, failed, running} — Status count statistics
366
- * @depends-on [createHandler]
367
- * @depended-by [Netlify function routing]
368
- * @side-effects [DB count query, aggregation]
369
- * @tags pipeline-executions, stats, analytics, monitoring
370
- */
306
+ // CIL[END chunk_id="pipeline-executions_getrunning_1783932909"]
307
+ // CIL[BEGIN chunk_id="pipeline-executions_getstats_1783932909" type="function" identity="getStats" parent="none"]
308
+ // CIL[DOC-MACRO purpose="Returns execution statistics by status with filtering"]
309
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution analytics and monitoring"]
310
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\"]"]
311
+ // CIL[DOC-CONTRACT inputs="none" outputs="Status count statistics" errors="Throws on DB errors" side_effects="Database aggregation"]
312
+ // CIL[DOC-MICRO logic_summary="Counts executions by status with date filtering" notable_decisions="[]"]
313
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
314
+ // CIL[DOC-STABILITY stability="stable"]
315
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts."]
316
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
317
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
318
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
319
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
320
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
371
321
  export const getStats = createHandler(async (ctx, body) => {
372
322
  const { pipeline_id, date_from, date_to } = ctx.query || {}
323
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
373
324
 
374
- if (!ctx.accountId) {
325
+ if (!isSystemAdmin(ctx.principal) && !ctx.accountId) {
375
326
  throw new Error('Account context required')
376
327
  }
377
328
 
378
- let query = ctx.db
329
+ let query = db
379
330
  .from('pipeline_executions')
380
331
  .select('id, status')
381
- .eq('account_id', ctx.accountId)
382
332
 
383
333
  if (pipeline_id) query = query.eq('pipeline_id', pipeline_id)
384
334
  if (date_from) query = query.gte('created_at', date_from)
@@ -396,23 +346,21 @@ export const getStats = createHandler(async (ctx, body) => {
396
346
  running: rows.filter((r: any) => r.status === 'running').length,
397
347
  }
398
348
  })
399
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_GET_STATS ────────────────────────────────────────────────
400
-
401
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_CLEANUP ──────────────────────────────────────────────
402
- /**
403
- * @chunk-id PIPELINE_EXECUTIONS_CLEANUP_1_0_0
404
- * @version 1.0.0
405
- * @hash 713c36d875b9e210b16504c324491c66485681a47265ab8cd228c66be58386d4
406
- * @macro Pipeline Executions Cleanup Handler
407
- * @micro Deletes old execution records beyond retention period
408
- * @inputs ctx: CoreContext — Request context with principal and database
409
- * @inputs body: object — days_to_keep (default 30) and optional status_filter
410
- * @outputs {deleted_count: number} — Number of deleted execution records
411
- * @depends-on [createHandler, emitLog]
412
- * @depended-by [Netlify function routing]
413
- * @side-effects [DB delete by date, audit logging]
414
- * @tags pipeline-executions, cleanup, retention, maintenance
415
- */
349
+ // CIL[END chunk_id="pipeline-executions_getstats_1783932909"]
350
+ // CIL[BEGIN chunk_id="pipeline-executions_cleanup_1783932909" type="function" identity="cleanup" parent="none"]
351
+ // CIL[DOC-MACRO purpose="Deletes old execution records beyond retention period"]
352
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle execution data retention management"]
353
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[]"]
354
+ // CIL[DOC-CONTRACT inputs="none" outputs="{deleted_count: number}" errors="Throws on DB errors" side_effects="Database delete, audit logging"]
355
+ // CIL[DOC-MICRO logic_summary="Deletes records older than retention period" notable_decisions="[]"]
356
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
357
+ // CIL[DOC-STABILITY stability="stable"]
358
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
359
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
360
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
361
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
362
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
363
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
416
364
  export const cleanup = createHandler(async (ctx, body) => {
417
365
  const { days_to_keep = 30, status_filter } = body
418
366
 
@@ -437,25 +385,21 @@ export const cleanup = createHandler(async (ctx, body) => {
437
385
 
438
386
  return { deleted_count: (data || []).length }
439
387
  })
440
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_CLEANUP ────────────────────────────────────────────────
441
-
442
- // ─── MAIN HANDLER ────────────────────────────────────────────────────────────
443
-
444
- // ─── CHUNK_START: PIPELINE_EXECUTIONS_HANDLER ──────────────────────────────────────────────
445
- /**
446
- * @chunk-id PIPELINE_EXECUTIONS_HANDLER_1_0_0
447
- * @version 1.0.0
448
- * @hash d1ff32ebff977774775afb91952838530a5d628211a7ab7ac5c74aca2e7c77d2
449
- * @macro Pipeline Executions Router
450
- * @micro Routes HTTP methods and actions to appropriate pipeline execution handlers
451
- * @inputs ctx: CoreContext — Request context with principal and database
452
- * @inputs body: any — Request body for POST/PATCH operations
453
- * @outputs Varies — Depends on routed handler (list/get/create/start/complete/cancel/getRunning/getStats/cleanup)
454
- * @depends-on [createHandler, list, get, create, start, complete, cancel, getRunning, getStats, cleanup]
455
- * @depended-by [Netlify function routing, pipeline-runner.ts]
456
- * @side-effects [Delegates to appropriate handler]
457
- * @tags pipeline-executions, router, crud, netlify-function
458
- */
388
+ // CIL[END chunk_id="pipeline-executions_cleanup_1783932909"]
389
+ // CIL[BEGIN chunk_id="pipeline-executions_handler_1783932909" type="function" identity="handler" parent="none"]
390
+ // CIL[DOC-MACRO purpose="Routes HTTP methods and actions to execution handlers"]
391
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle request routing for execution operations"]
392
+ // CIL[DOC-CONTEXT module="pipeline-executions" layer="api-handler" related_files="[]"]
393
+ // CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
394
+ // CIL[DOC-MICRO logic_summary="Routes based on action and method, delegates to handlers" notable_decisions="[]"]
395
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
396
+ // CIL[DOC-STABILITY stability="stable"]
397
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
398
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
399
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
400
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
401
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
402
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
459
403
  export const handler = createHandler(async (ctx, body) => {
460
404
  const { action } = ctx.query || {}
461
405
  const method = ctx.query?.method || 'GET'
@@ -491,4 +435,4 @@ export const handler = createHandler(async (ctx, body) => {
491
435
 
492
436
  throw new Error('Invalid action or method')
493
437
  })
494
- // ─── CHUNK_END: PIPELINE_EXECUTIONS_HANDLER ────────────────────────────────────────────────
438
+ // CIL[END chunk_id="pipeline-executions_handler_1783932909"]