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,38 +1,44 @@
1
- /**
2
- * @module system
3
- * @audience both
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * System discovery and health endpoints for agentic IDE integration.
8
- * Provides machine-readable descriptions of the Spine instance,
9
- * runtime health checks, and OpenAPI spec generation.
10
- *
11
- * **Routed by:** `GET /.netlify/functions/system`
12
- *
13
- * **Dispatch table:**
14
- * | ?action | Description |
15
- * |---------|-------------|
16
- * | manifest | Returns system manifest (version, functions, integrity) |
17
- * | health | Returns health check status of all components |
18
- * | openapi | Returns OpenAPI 3.1 spec for all endpoints |
19
- *
20
- * **Authorization:**
21
- * - `manifest`: No auth required (public endpoint)
22
- * - `health`: No auth required (public endpoint)
23
- * - `openapi`: No auth required (public endpoint)
24
- *
25
- * @seeAlso .spine-manifest.json (integrity hashes)
26
- * @seeAlso cli/index.ts (CLI consumer of these endpoints)
27
- */
28
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+ // CIL[BEGIN chunk_id="system_module_header_1783931956" type="module_header" identity="module_header" parent="none"]
9
+ // CIL[DOC-MACRO purpose="Import dependencies for system discovery endpoints"]
10
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide middleware, database, and file system utilities"]
11
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
12
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported modules" errors="none" side_effects="none"]
13
+ // CIL[DOC-MICRO logic_summary="Imports handler, database, and file system modules for system operations" notable_decisions="[]"]
14
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
15
+ // CIL[DOC-STABILITY stability="stable"]
16
+ // CIL[DOC-AUDIENCE audience="developer"]
17
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
18
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
19
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
20
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
21
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
22
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
29
23
  import { createHandler } from './_shared/middleware'
30
24
  import { adminDb } from './_shared/db'
31
25
  import { readFileSync, existsSync, readdirSync } from 'fs'
32
26
  import { resolve } from 'path'
33
-
34
- // ─── TYPES ────────────────────────────────────────────────────────────────────
35
-
27
+ // CIL[END chunk_id="system_module_header_1783931956"]
28
+ // CIL[BEGIN chunk_id="system_types_1783931956" type="interface" identity="types" parent="none"]
29
+ // CIL[DOC-MACRO purpose="Define type interfaces for system endpoints"]
30
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide type definitions for system data structures"]
31
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
32
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definitions" errors="none" side_effects="none"]
33
+ // CIL[DOC-MICRO logic_summary="Defines FunctionInfo, SystemManifest, and HealthCheck interfaces" notable_decisions="[]"]
34
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
35
+ // CIL[DOC-STABILITY stability="stable"]
36
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 9. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
37
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 9. Total affected: 9."]
38
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
39
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
40
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
41
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
36
42
  interface FunctionInfo {
37
43
  name: string
38
44
  methods: string[]
@@ -64,11 +70,21 @@ interface HealthCheck {
64
70
  test_runs?: { last_suite: string; last_status: string; last_at: string }
65
71
  }
66
72
  }
67
-
68
- // ─── HELPERS ─────────────────────────────────────────────────────────────────
69
-
70
- // Netlify functions run from /functions directory after assembly
71
- // Project root is two levels up: /functions/../.. = project root
73
+ // CIL[END chunk_id="system_types_1783931956"]
74
+ // CIL[BEGIN chunk_id="system_helpers_1783931956" type="helpers" identity="helpers" parent="none"]
75
+ // CIL[DOC-MACRO purpose="Provide helper functions for system operations"]
76
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle manifest loading and function discovery"]
77
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
78
+ // CIL[DOC-CONTRACT inputs="none" outputs="helper functions" errors="none" side_effects="file system access"]
79
+ // CIL[DOC-MICRO logic_summary="Loads manifest from disk, discovers available functions in filesystem" notable_decisions="[]"]
80
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
81
+ // CIL[DOC-STABILITY stability="stable"]
82
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
83
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
84
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
85
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
86
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
87
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
72
88
  const PROJECT_ROOT = resolve(process.cwd(), '.')
73
89
 
74
90
  function loadManifest(): { version: string; integrity: { core_hash: string | null; verified: boolean } } {
@@ -103,7 +119,6 @@ async function discoverFunctions(): Promise<FunctionInfo[]> {
103
119
 
104
120
  return files.map(f => {
105
121
  const name = f.replace('.ts', '')
106
- // Infer methods from common patterns
107
122
  const methods = ['GET']
108
123
  if (!['logs', 'tests', 'system-cron', 'debug-auth'].includes(name)) {
109
124
  methods.push('POST')
@@ -123,13 +138,24 @@ async function discoverFunctions(): Promise<FunctionInfo[]> {
123
138
  }
124
139
  })
125
140
  }
126
-
127
- // ─── HANDLERS ────────────────────────────────────────────────────────────────
128
-
141
+ // CIL[END chunk_id="system_helpers_1783931956"]
142
+ // CIL[BEGIN chunk_id="system_getmanifest_1783931956" type="function" identity="getManifest" parent="none"]
143
+ // CIL[DOC-MACRO purpose="Generate system manifest with version and migration status"]
144
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide complete system status information"]
145
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
146
+ // CIL[DOC-CONTRACT inputs="none" outputs="SystemManifest data" errors="none" side_effects="database and file system queries"]
147
+ // CIL[DOC-MICRO logic_summary="Compares local migrations with applied migrations, discovers functions" notable_decisions="[]"]
148
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
149
+ // CIL[DOC-STABILITY stability="stable"]
150
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
151
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
152
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
153
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
154
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
155
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
129
156
  async function getManifest(): Promise<{ data: SystemManifest }> {
130
157
  const manifest = loadManifest()
131
158
 
132
- // Get migration status
133
159
  const migrationsDir = resolve(PROJECT_ROOT, 'v2-core/migrations_dayzero')
134
160
  let localMigrations: string[] = []
135
161
  if (existsSync(migrationsDir)) {
@@ -147,7 +173,6 @@ async function getManifest(): Promise<{ data: SystemManifest }> {
147
173
  .order('version', { ascending: true })
148
174
  appliedMigrations = (data || []).map((r: any) => r.version)
149
175
  } catch {
150
- // Schema migrations table may not exist yet
151
176
  }
152
177
 
153
178
  const appliedSet = new Set(appliedMigrations)
@@ -169,7 +194,21 @@ async function getManifest(): Promise<{ data: SystemManifest }> {
169
194
  }
170
195
  }
171
196
  }
172
-
197
+ // CIL[END chunk_id="system_getmanifest_1783931956"]
198
+ // CIL[BEGIN chunk_id="system_gethealth_1783931956" type="function" identity="getHealth" parent="none"]
199
+ // CIL[DOC-MACRO purpose="Perform system health checks across components"]
200
+ // CIL[DOC-RESPONSIBILITY responsibility="Check database, migrations, and integrity status"]
201
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
202
+ // CIL[DOC-CONTRACT inputs="none" outputs="HealthCheck data" errors="none" side_effects="database queries"]
203
+ // CIL[DOC-MICRO logic_summary="Tests database connectivity, compares migration status, checks integrity" notable_decisions="[]"]
204
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
205
+ // CIL[DOC-STABILITY stability="stable"]
206
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
207
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
208
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
209
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
210
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
211
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
173
212
  async function getHealth(): Promise<{ data: HealthCheck }> {
174
213
  const checks: HealthCheck['checks'] = {
175
214
  database: { connected: false, latency_ms: 0 },
@@ -177,7 +216,6 @@ async function getHealth(): Promise<{ data: HealthCheck }> {
177
216
  integrity: { verified: false }
178
217
  }
179
218
 
180
- // Database check
181
219
  const dbStart = Date.now()
182
220
  try {
183
221
  const { error } = await adminDb.from('accounts').select('id').limit(1)
@@ -187,7 +225,6 @@ async function getHealth(): Promise<{ data: HealthCheck }> {
187
225
  checks.database.connected = false
188
226
  }
189
227
 
190
- // Migration check
191
228
  const migrationsDir = resolve(PROJECT_ROOT, 'v2-core/migrations_dayzero')
192
229
  let localMigrations: string[] = []
193
230
  if (existsSync(migrationsDir)) {
@@ -211,11 +248,9 @@ async function getHealth(): Promise<{ data: HealthCheck }> {
211
248
  checks.migrations.current = false
212
249
  }
213
250
 
214
- // Integrity check
215
251
  const manifest = loadManifest()
216
252
  checks.integrity.verified = manifest.integrity.verified
217
253
 
218
- // Test run check (optional)
219
254
  try {
220
255
  const { data } = await adminDb
221
256
  .from('test_runs')
@@ -231,10 +266,8 @@ async function getHealth(): Promise<{ data: HealthCheck }> {
231
266
  }
232
267
  }
233
268
  } catch {
234
- // test_runs table may not exist
235
269
  }
236
270
 
237
- // Determine overall status
238
271
  let status: HealthCheck['status'] = 'healthy'
239
272
  if (!checks.database.connected) {
240
273
  status = 'unhealthy'
@@ -244,7 +277,21 @@ async function getHealth(): Promise<{ data: HealthCheck }> {
244
277
 
245
278
  return { data: { status, checks } }
246
279
  }
247
-
280
+ // CIL[END chunk_id="system_gethealth_1783931956"]
281
+ // CIL[BEGIN chunk_id="system_getopenapi_1783931956" type="function" identity="getOpenApi" parent="none"]
282
+ // CIL[DOC-MACRO purpose="Generate OpenAPI 3.1 specification for all endpoints"]
283
+ // CIL[DOC-RESPONSIBILITY responsibility="Create machine-readable API documentation"]
284
+ // CIL[DOC-CONTEXT module="system" layer="api-handler" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
285
+ // CIL[DOC-CONTRACT inputs="none" outputs="OpenAPI spec object" errors="none" side_effects="none"]
286
+ // CIL[DOC-MICRO logic_summary="Builds OpenAPI paths and operations from discovered function metadata" notable_decisions="[]"]
287
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
288
+ // CIL[DOC-STABILITY stability="stable"]
289
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 1. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
290
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
291
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
292
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
293
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
294
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
248
295
  async function getOpenApi(): Promise<{ data: any }> {
249
296
  const functions = await discoverFunctions()
250
297
  const manifest = loadManifest()
@@ -297,9 +344,21 @@ async function getOpenApi(): Promise<{ data: any }> {
297
344
  }
298
345
  }
299
346
  }
300
-
301
- // ─── MAIN HANDLER ─────────────────────────────────────────────────────────────
302
-
347
+ // CIL[END chunk_id="system_getopenapi_1783931956"]
348
+ // CIL[BEGIN chunk_id="system_handler_1783931956" type="function" identity="handler" parent="none"]
349
+ // CIL[DOC-MACRO purpose="Route system API requests to appropriate handlers"]
350
+ // CIL[DOC-RESPONSIBILITY responsibility="Dispatch system endpoint actions based on query parameters"]
351
+ // CIL[DOC-CONTEXT module="system" 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\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
352
+ // CIL[DOC-CONTRACT inputs="none" outputs="system data responses" errors="400" side_effects="calls helper functions"]
353
+ // CIL[DOC-MICRO logic_summary="Routes to manifest, health, or openapi based on action parameter" notable_decisions="[]"]
354
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
355
+ // CIL[DOC-STABILITY stability="stable"]
356
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. 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, .framework/src/components/ui/table-primitives.tsx, \."]
357
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
358
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
359
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
360
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
361
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
303
362
  export const handler = createHandler(async (ctx) => {
304
363
  const q = (ctx as any).query || {}
305
364
  const action = q.action || 'manifest'
@@ -321,3 +380,4 @@ export const handler = createHandler(async (ctx) => {
321
380
  }
322
381
  }
323
382
  })
383
+ // CIL[END chunk_id="system_handler_1783931956"]
@@ -1,33 +1,37 @@
1
- /**
2
- * @module tests
3
- * @audience both
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * Read-only API for the admin Testing dashboard. Exposes test run history
8
- * and per-case results stored in public.test_runs / public.test_results.
9
- *
10
- * **Routed by:** `GET /.netlify/functions/tests`
11
- *
12
- * **Dispatch table:**
13
- * | ?action | ?id | Description |
14
- * |---------|-----|-------------|
15
- * | list | — | Returns 20 most recent test_runs (summary, no individual results) |
16
- * | get | uuid | Returns one test_run + all its test_results |
17
- * | stats | — | Returns pass/fail counts grouped by suite for last 30 days |
18
- *
19
- * **Authorization:** system_admin only (machine principals with *:* also allowed).
20
- *
21
- * INVARIANT: no writes. This endpoint is purely for reading stored test run data.
22
- *
23
- * @seeAlso migrations_dayzero/008_test_runs.sql
24
- * @seeAlso tests/reporter.ts (writes the data this endpoint reads)
25
- * @seeAlso src/pages/admin/TestingDashboard.tsx (primary consumer)
26
- */
27
1
 
2
+
3
+ // CIL[BEGIN chunk_id="tests_module_header_1783931956" type="module_header" identity="module_header" parent="none"]
4
+ // CIL[DOC-MACRO purpose="Import dependencies for test API handler"]
5
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide middleware and database access"]
6
+ // CIL[DOC-CONTEXT module="tests" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
7
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported modules" errors="none" side_effects="none"]
8
+ // CIL[DOC-MICRO logic_summary="Imports createHandler middleware and adminDb for database access" notable_decisions="[]"]
9
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
+ // CIL[DOC-STABILITY stability="stable"]
11
+ // CIL[DOC-AUDIENCE audience="developer"]
12
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
13
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
28
18
  import { createHandler, requireSystemContextWithAudit } from './_shared/middleware'
29
19
  import { adminDb } from './_shared/db'
30
-
20
+ // CIL[END chunk_id="tests_module_header_1783931956"]
21
+ // CIL[BEGIN chunk_id="tests_handler_1783931956" type="function" identity="handler" parent="none"]
22
+ // CIL[DOC-MACRO purpose="Handle test API requests with multiple actions"]
23
+ // CIL[DOC-RESPONSIBILITY responsibility="Process test list, get, and stats endpoints"]
24
+ // CIL[DOC-CONTEXT module="tests" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
25
+ // CIL[DOC-CONTRACT inputs="none" outputs="test data or error responses" errors="400/404/500" side_effects="database queries"]
26
+ // CIL[DOC-MICRO logic_summary="Routes requests by action parameter, queries test_runs and test_results tables" notable_decisions="[]"]
27
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
28
+ // CIL[DOC-STABILITY stability="stable"]
29
+ // 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/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
30
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
31
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
32
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
33
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
34
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
31
35
  export const handler = createHandler(async (ctx) => {
32
36
  const authErr = requireSystemContextWithAudit(ctx)
33
37
  if (authErr) return authErr
@@ -97,7 +101,6 @@ export const handler = createHandler(async (ctx) => {
97
101
  return { data: stats, error: null }
98
102
  }
99
103
 
100
- // action === 'list'
101
104
  const limit = Math.min(parseInt(q.limit || '20', 10), 100)
102
105
  const suite = q.suite || null
103
106
 
@@ -117,3 +120,4 @@ export const handler = createHandler(async (ctx) => {
117
120
 
118
121
  return { data: data ?? [], error: null }
119
122
  })
123
+ // CIL[END chunk_id="tests_handler_1783931956"]