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,59 +1,29 @@
1
- /**
2
- * @module prompt-configs
3
- * @audience core-contributor
4
- * @layer api-handler
5
- * @stability stable
6
- *
7
- * CRUD API for the `prompt_configs` table. Prompt configs define LLM inference
8
- * parameters: system prompts, context templates, model selection, temperature,
9
- * confidence thresholds, escalation rules, tool access, and knowledge sources.
10
- * They are referenced by AI agents at inference time via `agent-runner.ts`.
11
- *
12
- * **Routed by:** `GET/POST/PATCH/DELETE /.netlify/functions/prompt-configs`
13
- *
14
- * **Standard CRUD routing:**
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). Account context
24
- * required for writes.
25
- *
26
- * INVARIANT: `remove` is a hard delete.
27
- * INVARIANT: `update` only patches the explicit allowlist of fields.
28
- * INVARIANT: `model` defaults to 'gpt-4o', `temperature` to 0.7,
29
- * `max_tokens` to 4000 if not specified on create.
30
- *
31
- * @seeAlso agent-runner.ts (resolveAgentConfig reads prompt_configs)
32
- * @seeAlso ai-agents.ts (ai_agents reference prompt_config_id)
33
- * @seeAlso audit.ts (emitLog for prompt_config.* events)
34
- */
35
-
36
1
  import { createHandler } from './_shared/middleware'
37
2
  import { emitLog } from './_shared/audit'
38
3
  import { sanitizeRecordData } from './_shared/permissions'
4
+ import { adminDb } from './_shared/db'
5
+ import { isSystemAdmin } from './_shared/principal'
6
+
7
+
8
+
39
9
 
40
- // ─── HANDLERS ─────────────────────────────────────────────────────────────────
41
-
42
- // ─── CHUNK_START: PROMPT_CONFIGS_LIST ──────────────────────────────────────────────
43
- /**
44
- * @chunk-id PROMPT_CONFIGS_LIST_1_0_0
45
- * @version 1.0.0
46
- * @hash 177c1ca02d205ad820b03fef84d2667ddde4eaa8a2aa82fbf3ee58d4f68890aa
47
- * @macro Prompt Configs List Handler
48
- * @micro Lists prompt configs with filtering and sanitization
49
- * @inputs ctx: CoreContext — Request context with principal and database
50
- * @inputs _body: any — Request body (unused for GET)
51
- * @outputs Array of sanitized prompt_config records with app/createdBy joins
52
- * @depends-on [createHandler, sanitizeRecordData]
53
- * @depended-by [Netlify function routing]
54
- * @side-effects [DB queries, permission sanitization]
55
- * @tags prompt-configs, list, crud, pagination
56
- */
10
+
11
+
12
+ // CIL[BEGIN chunk_id="prompt-configs_module_header_1783932909" type="module_header" identity="module_header" parent="none"]
13
+ // CIL[DOC-MACRO purpose="Lists prompt configs with filtering and sanitization"]
14
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle prompt config listing with filters"]
15
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\"\\\"]"]
16
+ // CIL[DOC-CONTRACT inputs="ctx, _body" outputs="Array of sanitized prompt configs" errors="Throws on DB errors" side_effects="Database queries, permission sanitization"]
17
+ // CIL[DOC-MICRO logic_summary="Filters by model/active status, applies sanitization" notable_decisions="[]"]
18
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
19
+ // CIL[DOC-STABILITY stability="stable"]
20
+ // CIL[DOC-AUDIENCE audience="developer"]
21
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, \."]
22
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
23
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
24
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
25
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
26
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
57
27
  export const list = createHandler(async (ctx, _body) => {
58
28
  const { model, is_active, limit = 100, offset = 0 } = ctx.query || {}
59
29
 
@@ -61,13 +31,11 @@ export const list = createHandler(async (ctx, _body) => {
61
31
  throw new Error('Account context required')
62
32
  }
63
33
 
64
- let query = ctx.db
34
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
35
+
36
+ let query = db
65
37
  .from('prompt_configs')
66
- .select(`
67
- *,
68
- app:apps(id, slug, name),
69
- created_by_person:people!prompt_configs_created_by_fkey(id, full_name, email)
70
- `)
38
+ .select('*')
71
39
  .order('name')
72
40
 
73
41
  if (model) {
@@ -91,23 +59,21 @@ export const list = createHandler(async (ctx, _body) => {
91
59
 
92
60
  return sanitized
93
61
  })
94
- // ─── CHUNK_END: PROMPT_CONFIGS_LIST ────────────────────────────────────────────────
95
-
96
- // ─── CHUNK_START: PROMPT_CONFIGS_GET ──────────────────────────────────────────────
97
- /**
98
- * @chunk-id PROMPT_CONFIGS_GET_1_0_0
99
- * @version 1.0.0
100
- * @hash 234cc28b4e9fba9333a221ac01d175bafaf93681221f182d6925df84caf90348
101
- * @macro Prompt Config Get Handler
102
- * @micro Returns single prompt config record with joins and sanitization
103
- * @inputs ctx: CoreContext — Request context with principal and database
104
- * @inputs _body: any — Request body (unused for GET)
105
- * @outputs Sanitized prompt_config record with app/createdBy joins
106
- * @depends-on [createHandler, sanitizeRecordData]
107
- * @depended-by [Netlify function routing]
108
- * @side-effects [DB single row query, permission sanitization]
109
- * @tags prompt-configs, get, crud, single-record
110
- */
62
+ // CIL[END chunk_id="prompt-configs_module_header_1783932909"]
63
+ // CIL[BEGIN chunk_id="prompt-configs_get_1783932909" type="function" identity="get" parent="none"]
64
+ // CIL[DOC-MACRO purpose="Retrieves single prompt config by ID with sanitization"]
65
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle individual prompt config retrieval"]
66
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
67
+ // CIL[DOC-CONTRACT inputs="none" outputs="Sanitized prompt config record" errors="Throws if ID missing or DB error" side_effects="Database query, permission sanitization"]
68
+ // CIL[DOC-MICRO logic_summary="Fetches config by ID, applies permission sanitization" notable_decisions="[]"]
69
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
70
+ // CIL[DOC-STABILITY stability="stable"]
71
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, \."]
72
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
73
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
74
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
75
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
76
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
111
77
  export const get = createHandler(async (ctx, _body) => {
112
78
  const { id } = ctx.query || {}
113
79
 
@@ -115,13 +81,10 @@ export const get = createHandler(async (ctx, _body) => {
115
81
  throw new Error('Config ID is required')
116
82
  }
117
83
 
118
- const { data, error: err } = await ctx.db
84
+ const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
85
+ const { data, error: err } = await db
119
86
  .from('prompt_configs')
120
- .select(`
121
- *,
122
- app:apps(id, slug, name),
123
- created_by_person:people!prompt_configs_created_by_fkey(id, full_name, email)
124
- `)
87
+ .select('*')
125
88
  .eq('id', id)
126
89
  .single()
127
90
 
@@ -129,25 +92,23 @@ export const get = createHandler(async (ctx, _body) => {
129
92
 
130
93
  return await sanitizeRecordData(ctx, data, 'prompt_config')
131
94
  })
132
- // ─── CHUNK_END: PROMPT_CONFIGS_GET ────────────────────────────────────────────────
133
-
134
- // ─── CHUNK_START: PROMPT_CONFIGS_CREATE ──────────────────────────────────────────────
135
- /**
136
- * @chunk-id PROMPT_CONFIGS_CREATE_1_0_0
137
- * @version 1.0.0
138
- * @hash e4aeda63ad485550140a44aa281020c9a6fc966da444d135281d869e053c5e6c
139
- * @macro Prompt Config Create Handler
140
- * @micro Creates prompt config with validation and audit logging
141
- * @inputs ctx: CoreContext — Request context with principal and database
142
- * @inputs body: object — Prompt config data including name, slug, and optional fields
143
- * @outputs Inserted prompt_config record
144
- * @depends-on [createHandler, emitLog]
145
- * @depended-by [Netlify function routing]
146
- * @side-effects [DB insert, audit logging]
147
- * @tags prompt-configs, create, crud, audit
148
- */
95
+ // CIL[END chunk_id="prompt-configs_get_1783932909"]
96
+ // CIL[BEGIN chunk_id="prompt-configs_create_1783932909" type="function" identity="create" parent="none"]
97
+ // CIL[DOC-MACRO purpose="Creates new prompt config with validation and defaults"]
98
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle prompt config creation with security"]
99
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
100
+ // CIL[DOC-CONTRACT inputs="none" outputs="Created prompt config record" errors="Throws on validation or DB errors" side_effects="Database insert, audit logging"]
101
+ // CIL[DOC-MICRO logic_summary="Validates required fields, sets defaults, creates config" notable_decisions="[]"]
102
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
103
+ // CIL[DOC-STABILITY stability="stable"]
104
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 3. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
105
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 4."]
106
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
107
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
108
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
109
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
149
110
  export const create = createHandler(async (ctx, body) => {
150
- const { app_id, name, slug, system_prompt, context_template, model, temperature, max_tokens,
111
+ const { app_id, name, slug, description, system_prompt, context_template, model, temperature, max_tokens,
151
112
  is_multi_turn, max_history_messages, confidence_threshold, escalation_action, escalation_target,
152
113
  output_mode, output_field, requires_review, knowledge_sources, available_tools, tool_constraints,
153
114
  metadata } = body
@@ -167,6 +128,7 @@ export const create = createHandler(async (ctx, body) => {
167
128
  account_id: ctx.accountId,
168
129
  name,
169
130
  slug,
131
+ description: description || null,
170
132
  system_prompt: system_prompt || null,
171
133
  context_template: context_template || null,
172
134
  model: model || 'gpt-4o',
@@ -183,8 +145,7 @@ export const create = createHandler(async (ctx, body) => {
183
145
  knowledge_sources: knowledge_sources || [],
184
146
  available_tools: available_tools || [],
185
147
  tool_constraints: tool_constraints || {},
186
- metadata: metadata || {},
187
- created_by: ctx.principal?.id
148
+ metadata: metadata || {}
188
149
  })
189
150
  .select()
190
151
  .single()
@@ -198,23 +159,21 @@ export const create = createHandler(async (ctx, body) => {
198
159
 
199
160
  return data
200
161
  })
201
- // ─── CHUNK_END: PROMPT_CONFIGS_CREATE ────────────────────────────────────────────────
202
-
203
- // ─── CHUNK_START: PROMPT_CONFIGS_UPDATE ──────────────────────────────────────────────
204
- /**
205
- * @chunk-id PROMPT_CONFIGS_UPDATE_1_0_0
206
- * @version 1.0.0
207
- * @hash 32985018c871c4d8b6faf93f817c33e8b9f65e6dbae5cdb0df37fa16bf7b2db1
208
- * @macro Prompt Config Update Handler
209
- * @micro Updates prompt config with field allowlist and audit logging
210
- * @inputs ctx: CoreContext — Request context with principal and database
211
- * @inputs body: object — Prompt config updates including id and updatable fields
212
- * @outputs Updated prompt_config record
213
- * @depends-on [createHandler, emitLog]
214
- * @depended-by [Netlify function routing]
215
- * @side-effects [DB update, audit logging]
216
- * @tags prompt-configs, update, crud, audit
217
- */
162
+ // CIL[END chunk_id="prompt-configs_create_1783932909"]
163
+ // CIL[BEGIN chunk_id="prompt-configs_update_1783932909" type="function" identity="update" parent="none"]
164
+ // CIL[DOC-MACRO purpose="Updates prompt config with field allowlist validation"]
165
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle prompt config updates with security"]
166
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
167
+ // CIL[DOC-CONTRACT inputs="none" outputs="Updated prompt config record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
168
+ // CIL[DOC-MICRO logic_summary="Updates allowed fields, maintains audit trail" notable_decisions="[]"]
169
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
170
+ // CIL[DOC-STABILITY stability="stable"]
171
+ // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 9. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/db.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
172
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 9. Total affected: 11."]
173
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
174
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
175
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
176
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
218
177
  export const update = createHandler(async (ctx, body) => {
219
178
  const id = body?.id || ctx.query?.id
220
179
  const { id: _bodyId, ...updates } = body || {}
@@ -223,7 +182,7 @@ export const update = createHandler(async (ctx, body) => {
223
182
  throw new Error('Config ID is required')
224
183
  }
225
184
 
226
- const allowed = ['name', 'slug', 'system_prompt', 'context_template', 'model', 'temperature',
185
+ const allowed = ['name', 'slug', 'description', 'app_id', 'system_prompt', 'context_template', 'model', 'temperature',
227
186
  'max_tokens', 'is_multi_turn', 'max_history_messages', 'confidence_threshold',
228
187
  'escalation_action', 'escalation_target', 'output_mode', 'output_field', 'requires_review',
229
188
  'knowledge_sources', 'available_tools', 'tool_constraints', 'metadata', 'is_active']
@@ -248,23 +207,21 @@ export const update = createHandler(async (ctx, body) => {
248
207
 
249
208
  return data
250
209
  })
251
- // ─── CHUNK_END: PROMPT_CONFIGS_UPDATE ────────────────────────────────────────────────
252
-
253
- // ─── CHUNK_START: PROMPT_CONFIGS_REMOVE ──────────────────────────────────────────────
254
- /**
255
- * @chunk-id PROMPT_CONFIGS_REMOVE_1_0_0
256
- * @version 1.0.0
257
- * @hash 2d6cdf4f067fe7259c1fb3d07c5928df36a2395424772a85a7d474072d883b84
258
- * @macro Prompt Config Remove Handler
259
- * @micro Hard-deletes prompt config with audit logging
260
- * @inputs ctx: CoreContext — Request context with principal and database
261
- * @inputs _body: any — Request body (unused for DELETE)
262
- * @outputs {success: true} — Confirmation of successful deletion
263
- * @depends-on [createHandler, emitLog]
264
- * @depended-by [Netlify function routing]
265
- * @side-effects [DB delete, audit logging]
266
- * @tags prompt-configs, remove, delete, audit
267
- */
210
+ // CIL[END chunk_id="prompt-configs_update_1783932909"]
211
+ // CIL[BEGIN chunk_id="prompt-configs_remove_1783932909" type="function" identity="remove" parent="none"]
212
+ // CIL[DOC-MACRO purpose="Hard deletes prompt config with audit logging"]
213
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle prompt config deletion with audit trail"]
214
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
215
+ // CIL[DOC-CONTRACT inputs="none" outputs="{success: true}" errors="Throws if ID missing or DB error" side_effects="Database delete, audit logging"]
216
+ // CIL[DOC-MICRO logic_summary="Hard deletes config, maintains audit trail" notable_decisions="[]"]
217
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
218
+ // CIL[DOC-STABILITY stability="stable"]
219
+ // 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, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, .framework/src/components/ui/table-primitives.tsx, \."]
220
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
221
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
222
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
223
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
224
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
268
225
  export const remove = createHandler(async (ctx, _body) => {
269
226
  const id = ctx.query?.id
270
227
 
@@ -294,25 +251,21 @@ export const remove = createHandler(async (ctx, _body) => {
294
251
 
295
252
  return { success: true }
296
253
  })
297
- // ─── CHUNK_END: PROMPT_CONFIGS_REMOVE ────────────────────────────────────────────────
298
-
299
- // ─── MAIN HANDLER ────────────────────────────────────────────────────────────
300
-
301
- // ─── CHUNK_START: PROMPT_CONFIGS_HANDLER ──────────────────────────────────────────────
302
- /**
303
- * @chunk-id PROMPT_CONFIGS_HANDLER_1_0_0
304
- * @version 1.0.0
305
- * @hash a49f4917dd07295e0ba9815bf929cccc5cffcbe4dcf6852aa4bd84d6cba1b690
306
- * @macro Prompt Configs Router
307
- * @micro Routes HTTP methods to appropriate prompt config handlers
308
- * @inputs ctx: CoreContext — Request context with principal and database
309
- * @inputs body: any — Request body for POST/PATCH operations
310
- * @outputs Varies — Depends on routed handler (list/get/create/update/remove)
311
- * @depends-on [createHandler, list, get, create, update, remove]
312
- * @depended-by [Netlify function routing]
313
- * @side-effects [Delegates to appropriate handler]
314
- * @tags prompt-configs, router, crud, netlify-function
315
- */
254
+ // CIL[END chunk_id="prompt-configs_remove_1783932909"]
255
+ // CIL[BEGIN chunk_id="prompt-configs_handler_1783932909" type="function" identity="handler" parent="none"]
256
+ // CIL[DOC-MACRO purpose="Routes HTTP methods to prompt config handlers"]
257
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle request routing for prompt config CRUD"]
258
+ // CIL[DOC-CONTEXT module="prompt-configs" 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\",\"\\\"]"]
259
+ // CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
260
+ // CIL[DOC-MICRO logic_summary="Routes based on method, delegates to CRUD handlers" notable_decisions="[]"]
261
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
262
+ // CIL[DOC-STABILITY stability="stable"]
263
+ // 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, \."]
264
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
265
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
266
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
267
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
268
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
316
269
  export const handler = createHandler(async (ctx, body) => {
317
270
  const { action } = ctx.query || {}
318
271
  const method = ctx.query?.method || 'GET'
@@ -336,4 +289,4 @@ export const handler = createHandler(async (ctx, body) => {
336
289
 
337
290
  throw new Error('Invalid action or method')
338
291
  })
339
- // ─── CHUNK_END: PROMPT_CONFIGS_HANDLER ────────────────────────────────────────────────
292
+ // CIL[END chunk_id="prompt-configs_handler_1783932909"]