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,62 +1,46 @@
1
- /**
2
- * @module ai-agents
3
- * @audience core-contributor
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * CRUD API for the `ai_agents` table. AI agent records define the configuration
8
- * for agentic inference workloads: model settings, system prompts, available
9
- * tools, capabilities, and constraints. The runtime execution is handled by
10
- * `_shared/agent-runner.ts`.
11
- *
12
- * **Routed by:** `GET/POST/PATCH/DELETE /.netlify/functions/ai-agents`
13
- *
14
- * **Actions (standard CRUD only):**
15
- * | method | condition | handler |
16
- * |--------|-----------|---------|
17
- * | GET | ?id | get |
18
- * | GET | (default) | list |
19
- * | POST | — | create |
20
- * | PATCH | — | update |
21
- * | DELETE | — | remove |
22
- *
23
- * **Authorization:** All operations use `ctx.db` (RLS-scoped). Authenticated
24
- * principal required for writes.
25
- *
26
- * INVARIANT: `remove` is a hard delete.
27
- * INVARIANT: `update` only patches allowed fields: name, description,
28
- * model_config, system_prompt, tools, capabilities, constraints, metadata,
29
- * is_active.
30
- *
31
- * @seeAlso agent-runner.ts (runAgent — runtime execution using these configs)
32
- * @seeAlso prompt-configs.ts (prompt_configs referenced by agent configs)
33
- * @seeAlso audit.ts (emitLog for ai_agent.* events)
34
- */
35
1
 
2
+
3
+
4
+
5
+
6
+
7
+ // CIL[BEGIN chunk_id="ai-agents_module_header_1784019432" type="module_header" identity="imports" parent="none"]
8
+ // CIL[DOC-MACRO purpose="Import dependencies for AI agents CRUD operations"]
9
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide core middleware, database joins, audit logging, and permissions"]
10
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
11
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported_modules" errors="none" side_effects="none"]
12
+ // CIL[DOC-MICRO logic_summary="Imports required modules and configures permissions engine" notable_decisions="[]"]
13
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
14
+ // CIL[DOC-STABILITY stability="stable"]
15
+ // CIL[DOC-AUDIENCE audience="developer"]
16
+ // 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/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
17
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
18
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
19
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
20
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
21
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
36
22
  import { createHandler } from './_shared/middleware'
37
- import { joins } from './_shared/db'
23
+ import { adminDb } from './_shared/db'
38
24
  import { emitLog } from './_shared/audit'
25
+ import { isSystemAdmin } from './_shared/principal'
39
26
  import { PermissionEngine, sanitizeRecordData } from './_shared/permissions'
40
27
 
41
28
  const permissions = PermissionEngine as any
42
-
43
- // ─── HANDLERS ─────────────────────────────────────────────────────────────────
44
-
45
- // ─── CHUNK_START: AI_AGENTS_LIST ──────────────────────────────────────────────
46
- /**
47
- * @chunk-id AI_AGENTS_LIST_1_0_0
48
- * @version 1.0.0
49
- * @hash 237972d65e86f5d432f55b602ac5e6f2dcfaefa83c662c10b7d3437ac906ff0d
50
- * @macro AI Agents List Handler
51
- * @micro Lists AI agents with filtering and pagination
52
- * @inputs ctx: CoreContext — Request context with principal and database
53
- * @inputs _body: any — Request body (unused for GET)
54
- * @outputs Array of sanitized AI agent records
55
- * @depends-on [createHandler, joins, sanitizeRecordData]
56
- * @depended-by [Netlify function routing]
57
- * @side-effects [DB queries, permission sanitization]
58
- * @tags ai-agents, list, crud, pagination
59
- */
29
+ // CIL[END chunk_id="ai-agents_module_header_1784019432"]
30
+ // CIL[BEGIN chunk_id="ai-agents_list_1784019432" type="function" identity="list" parent="none"]
31
+ // CIL[DOC-MACRO purpose="List AI agents with filtering and pagination"]
32
+ // CIL[DOC-RESPONSIBILITY responsibility="Query and sanitize AI agent records"]
33
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
34
+ // CIL[DOC-CONTRACT inputs="none" outputs="sanitized_agent_records[]" errors="account_required,database_error" side_effects="database_queries,permission_filtering"]
35
+ // CIL[DOC-MICRO logic_summary="Builds query with filters, applies pagination, sanitizes results" notable_decisions="[]"]
36
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
37
+ // CIL[DOC-STABILITY stability="stable"]
38
+ // 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/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, \."]
39
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
40
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
41
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
42
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
43
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
60
44
  export const list = createHandler(async (ctx, _body) => {
61
45
  const { agent_type, is_active, limit = 100, offset = 0 } = ctx.query || {}
62
46
 
@@ -64,10 +48,11 @@ export const list = createHandler(async (ctx, _body) => {
64
48
  throw new Error('Account context required')
65
49
  }
66
50
 
67
- // RLS automatically filters to accessible accounts
68
- let query = ctx.db
51
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
52
+
53
+ let query = db
69
54
  .from('ai_agents')
70
- .select(`*, ${joins.app}, ${joins.createdBy}`)
55
+ .select('*')
71
56
  .order('name')
72
57
 
73
58
  if (agent_type) {
@@ -91,23 +76,21 @@ export const list = createHandler(async (ctx, _body) => {
91
76
 
92
77
  return sanitized
93
78
  })
94
- // ─── CHUNK_END: AI_AGENTS_LIST ────────────────────────────────────────────────
95
-
96
- // ─── CHUNK_START: AI_AGENTS_GET ──────────────────────────────────────────────
97
- /**
98
- * @chunk-id AI_AGENTS_GET_1_0_0
99
- * @version 1.0.0
100
- * @hash 62f283668d9a90ff81e2cbf8c437298206b355d2dd96fb559b2848fc4ffbc5cd
101
- * @macro AI Agent Get Handler
102
- * @micro Returns a single AI agent by UUID with joins
103
- * @inputs ctx: CoreContext — Request context with principal and database
104
- * @inputs _body: any — Request body (unused for GET)
105
- * @outputs Sanitized AI agent record with app and createdBy joins
106
- * @depends-on [createHandler, joins, sanitizeRecordData]
107
- * @depended-by [Netlify function routing]
108
- * @side-effects [DB single row query, permission sanitization]
109
- * @tags ai-agents, get, crud, single-record
110
- */
79
+ // CIL[END chunk_id="ai-agents_list_1784019432"]
80
+ // CIL[BEGIN chunk_id="ai-agents_get_1784019432" type="function" identity="get" parent="none"]
81
+ // CIL[DOC-MACRO purpose="Get single AI agent by ID with joins"]
82
+ // CIL[DOC-RESPONSIBILITY responsibility="Retrieve and sanitize individual agent record"]
83
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
84
+ // CIL[DOC-CONTRACT inputs="none" outputs="sanitized_agent_record" errors="id_required,record_not_found,database_error" side_effects="database_query,permission_filtering"]
85
+ // CIL[DOC-MICRO logic_summary="Queries single agent by ID, applies permission sanitization" notable_decisions="[]"]
86
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
87
+ // CIL[DOC-STABILITY stability="stable"]
88
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
89
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
90
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
91
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
92
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
93
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
111
94
  export const get = createHandler(async (ctx, _body) => {
112
95
  const { id } = ctx.query || {}
113
96
 
@@ -115,9 +98,11 @@ export const get = createHandler(async (ctx, _body) => {
115
98
  throw new Error('Agent ID is required')
116
99
  }
117
100
 
118
- const { data, error: err } = await ctx.db
101
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
102
+
103
+ const { data, error: err } = await db
119
104
  .from('ai_agents')
120
- .select(`*, ${joins.app}, ${joins.createdBy}`)
105
+ .select('*')
121
106
  .eq('id', id)
122
107
  .single()
123
108
 
@@ -125,23 +110,21 @@ export const get = createHandler(async (ctx, _body) => {
125
110
 
126
111
  return await sanitizeRecordData(ctx, data, 'ai_agent')
127
112
  })
128
- // ─── CHUNK_END: AI_AGENTS_GET ────────────────────────────────────────────────
129
-
130
- // ─── CHUNK_START: AI_AGENTS_CREATE ──────────────────────────────────────────────
131
- /**
132
- * @chunk-id AI_AGENTS_CREATE_1_0_0
133
- * @version 1.0.0
134
- * @hash 355c8ceb1f33e033616480827141a2f33cde8e18fa4e9f9d94f4866af6fe66f6
135
- * @macro AI Agent Create Handler
136
- * @micro Creates new AI agent configuration with validation and audit logging
137
- * @inputs ctx: CoreContext — Request context with principal and database
138
- * @inputs body: object — Agent configuration data
139
- * @outputs Inserted AI agent record
140
- * @depends-on [createHandler, emitLog]
141
- * @depended-by [Netlify function routing]
142
- * @side-effects [DB insert, audit logging]
143
- * @tags ai-agents, create, crud, audit
144
- */
113
+ // CIL[END chunk_id="ai-agents_get_1784019432"]
114
+ // CIL[BEGIN chunk_id="ai-agents_create_1784019432" type="function" identity="create" parent="none"]
115
+ // CIL[DOC-MACRO purpose="Create new AI agent configuration"]
116
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate and insert new agent record with audit logging"]
117
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
118
+ // CIL[DOC-CONTRACT inputs="none" outputs="created_agent_record" errors="name_required,user_context_required,database_error" side_effects="database_insert,audit_logging"]
119
+ // CIL[DOC-MICRO logic_summary="Validates required fields, inserts with defaults, logs creation" notable_decisions="[]"]
120
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
121
+ // CIL[DOC-STABILITY stability="stable"]
122
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
123
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
124
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
125
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
126
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
127
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
145
128
  export const create = createHandler(async (ctx, body) => {
146
129
  const { app_id, name, description, agent_type, model_config, system_prompt, tools, capabilities, constraints, metadata } = body
147
130
 
@@ -181,23 +164,21 @@ export const create = createHandler(async (ctx, body) => {
181
164
 
182
165
  return data
183
166
  })
184
- // ─── CHUNK_END: AI_AGENTS_CREATE ────────────────────────────────────────────────
185
-
186
- // ─── CHUNK_START: AI_AGENTS_UPDATE ──────────────────────────────────────────────
187
- /**
188
- * @chunk-id AI_AGENTS_UPDATE_1_0_0
189
- * @version 1.0.0
190
- * @hash 07e173626958a0ef032cc4c80719c49df5990756e08ecdb70a4168ab73544f10
191
- * @macro AI Agent Update Handler
192
- * @micro Updates AI agent with field validation and audit logging
193
- * @inputs ctx: CoreContext — Request context with principal and database
194
- * @inputs body: object — Agent updates including id
195
- * @outputs Updated AI agent record
196
- * @depends-on [createHandler, emitLog]
197
- * @depended-by [Netlify function routing]
198
- * @side-effects [DB update, audit logging]
199
- * @tags ai-agents, update, crud, audit
200
- */
167
+ // CIL[END chunk_id="ai-agents_create_1784019432"]
168
+ // CIL[BEGIN chunk_id="ai-agents_update_1784019432" type="function" identity="update" parent="none"]
169
+ // CIL[DOC-MACRO purpose="Update existing AI agent configuration"]
170
+ // CIL[DOC-RESPONSIBILITY responsibility="Patch allowed fields on agent record with audit logging"]
171
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
172
+ // CIL[DOC-CONTRACT inputs="none" outputs="updated_agent_record" errors="id_required,user_context_required,database_error" side_effects="database_update,audit_logging"]
173
+ // CIL[DOC-MICRO logic_summary="Filters allowed fields, adds timestamp, updates with validation" notable_decisions="[]"]
174
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
175
+ // CIL[DOC-STABILITY stability="stable"]
176
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
177
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
178
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
179
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
180
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
181
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
201
182
  export const update = createHandler(async (ctx, body) => {
202
183
  const id = body?.id || ctx.query?.id
203
184
  const { id: _bodyId, ...updates } = body || {}
@@ -210,7 +191,7 @@ export const update = createHandler(async (ctx, body) => {
210
191
  throw new Error('User context (person and account) required')
211
192
  }
212
193
 
213
- const allowed = ['name', 'description', 'model_config', 'system_prompt', 'tools', 'capabilities', 'constraints', 'metadata', 'is_active']
194
+ const allowed = ['name', 'description', 'agent_type', 'model_config', 'system_prompt', 'tools', 'capabilities', 'constraints', 'metadata', 'is_active', 'app_id']
214
195
  const updateData: Record<string, any> = { updated_at: new Date().toISOString() }
215
196
  for (const key of allowed) {
216
197
  if (updates[key] !== undefined) updateData[key] = updates[key]
@@ -232,23 +213,21 @@ export const update = createHandler(async (ctx, body) => {
232
213
 
233
214
  return data
234
215
  })
235
- // ─── CHUNK_END: AI_AGENTS_UPDATE ────────────────────────────────────────────────
236
-
237
- // ─── CHUNK_START: AI_AGENTS_REMOVE ──────────────────────────────────────────────
238
- /**
239
- * @chunk-id AI_AGENTS_REMOVE_1_0_0
240
- * @version 1.0.0
241
- * @hash 7d990350b55b85945cc2148908618d6cd1dad27d1fc8343eab6966bedd9d84fa
242
- * @macro AI Agent Remove Handler
243
- * @micro Hard-deletes AI agent with validation and audit logging
244
- * @inputs ctx: CoreContext — Request context with principal and database
245
- * @inputs _body: any — Request body (unused for DELETE)
246
- * @outputs {success: true} — Success confirmation
247
- * @depends-on [createHandler, emitLog]
248
- * @depended-by [Netlify function routing]
249
- * @side-effects [DB delete, audit logging]
250
- * @tags ai-agents, remove, crud, audit
251
- */
216
+ // CIL[END chunk_id="ai-agents_update_1784019432"]
217
+ // CIL[BEGIN chunk_id="ai-agents_remove_1784019432" type="function" identity="remove" parent="none"]
218
+ // CIL[DOC-MACRO purpose="Delete AI agent configuration"]
219
+ // CIL[DOC-RESPONSIBILITY responsibility="Hard delete agent record with audit logging"]
220
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[]"]
221
+ // CIL[DOC-CONTRACT inputs="none" outputs="success_confirmation" errors="id_required,agent_not_found,database_error" side_effects="database_delete,audit_logging"]
222
+ // CIL[DOC-MICRO logic_summary="Validates existence, performs hard delete, logs deletion" notable_decisions="[]"]
223
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
224
+ // CIL[DOC-STABILITY stability="stable"]
225
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
226
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
227
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
228
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
229
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
230
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
252
231
  export const remove = createHandler(async (ctx, _body) => {
253
232
  const id = ctx.query?.id
254
233
 
@@ -278,25 +257,21 @@ export const remove = createHandler(async (ctx, _body) => {
278
257
 
279
258
  return { success: true }
280
259
  })
281
- // ─── CHUNK_END: AI_AGENTS_REMOVE ────────────────────────────────────────────────
282
-
283
- // ─── MAIN HANDLER ────────────────────────────────────────────────────────────
284
-
285
- // ─── CHUNK_START: AI_AGENTS_HANDLER ──────────────────────────────────────────────
286
- /**
287
- * @chunk-id AI_AGENTS_HANDLER_1_0_0
288
- * @version 1.0.0
289
- * @hash a49f4917dd07295e0ba9815bf929cccc5cffcbe4dcf6852aa4bd84d6cba1b690
290
- * @macro AI Agents Router
291
- * @micro Routes HTTP methods to appropriate CRUD handlers
292
- * @inputs ctx: CoreContext — Request context with principal and database
293
- * @inputs body: any — Request body for POST/PATCH operations
294
- * @outputs Varies — Depends on routed handler (list/get/create/update/remove)
295
- * @depends-on [createHandler, list, get, create, update, remove]
296
- * @depended-by [Netlify function routing]
297
- * @side-effects [Delegates to appropriate handler]
298
- * @tags ai-agents, router, crud, netlify-function
299
- */
260
+ // CIL[END chunk_id="ai-agents_remove_1784019432"]
261
+ // CIL[BEGIN chunk_id="ai-agents_handler_1784019432" type="function" identity="handler" parent="none"]
262
+ // CIL[DOC-MACRO purpose="Route HTTP methods to appropriate CRUD handlers"]
263
+ // CIL[DOC-RESPONSIBILITY responsibility="Dispatch requests based on method and query parameters"]
264
+ // CIL[DOC-CONTEXT module="ai-agents" layer="api-handler" related_files="[]"]
265
+ // CIL[DOC-CONTRACT inputs="none" outputs="handler_response" errors="invalid_action_or_method" side_effects="delegates_to_crud_handlers"]
266
+ // CIL[DOC-MICRO logic_summary="Routes GET/POST/PATCH/DELETE to list/get/create/update/remove" notable_decisions="[]"]
267
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
268
+ // CIL[DOC-STABILITY stability="stable"]
269
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
270
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
271
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
272
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
273
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
274
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
300
275
  export const handler = createHandler(async (ctx, body) => {
301
276
  const { action } = ctx.query || {}
302
277
  const method = ctx.query?.method || 'GET'
@@ -320,4 +295,4 @@ export const handler = createHandler(async (ctx, body) => {
320
295
 
321
296
  throw new Error('Invalid action or method')
322
297
  })
323
- // ─── CHUNK_END: AI_AGENTS_HANDLER ────────────────────────────────────────────────
298
+ // CIL[END chunk_id="ai-agents_handler_1784019432"]