spine-framework 0.3.145 → 0.4.0

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 (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,29 +1,39 @@
1
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/prompt-configs.ts"]
2
+ // CIL[DOC-MACRO purpose="Import shared dependencies for prompt configuration handlers."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare module-level imports used by prompt-config handlers."]
4
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported utilities" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports middleware, audit, permissions, database, and principal utilities." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="framework"]
1
10
  import { createHandler } from './_shared/middleware'
2
11
  import { emitLog } from './_shared/audit'
3
12
  import { sanitizeRecordData } from './_shared/permissions'
4
13
  import { adminDb } from './_shared/db'
5
14
  import { isSystemAdmin } from './_shared/principal'
15
+ // CIL[DOC-VECTOR type="context" content="purpose='Import shared dependencies for prompt configuration handlers.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
16
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
17
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
18
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
19
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:module_header:module_header"]
6
22
 
7
23
 
8
24
 
9
25
 
10
26
 
11
27
 
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"]
28
+
29
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/prompt-configs.ts"]
30
+ // CIL[DOC-MACRO purpose="List prompt configuration records with optional filtering."]
31
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a paginated, filtered list of prompt configs for the current account."]
32
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
33
+ // CIL[DOC-CONTRACT inputs="ctx.query optional model, is_active, limit, offset" outputs="sanitized prompt_config records array" errors="throws if account missing or db error" side_effects="queries prompt_configs table"]
34
+ // CIL[DOC-MICRO logic_summary="Determines db context, builds query with filters and pagination, sanitizes each record." notable_decisions="[]"]
35
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
19
36
  // 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"]
27
37
  export const list = createHandler(async (ctx, _body) => {
28
38
  const { model, is_active, limit = 100, offset = 0 } = ctx.query || {}
29
39
 
@@ -59,21 +69,21 @@ export const list = createHandler(async (ctx, _body) => {
59
69
 
60
70
  return sanitized
61
71
  })
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."]
72
+ // CIL[DOC-VECTOR type="context" content="purpose='List prompt configuration records with optional filtering.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
73
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
74
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
75
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
75
76
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
76
77
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
78
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:list:constant"]
79
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/prompt-configs.ts"]
80
+ // CIL[DOC-MACRO purpose="Retrieve a single prompt configuration by ID."]
81
+ // CIL[DOC-RESPONSIBILITY responsibility="Return the sanitized prompt config for the given id."]
82
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
83
+ // CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="sanitized prompt_config record" errors="throws if id missing or db error" side_effects="queries prompt_configs table"]
84
+ // CIL[DOC-MICRO logic_summary="Validates id, fetches the single matching record, sanitizes and returns it." notable_decisions="[]"]
85
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
86
+ // CIL[DOC-STABILITY stability="stable"]
77
87
  export const get = createHandler(async (ctx, _body) => {
78
88
  const { id } = ctx.query || {}
79
89
 
@@ -92,21 +102,21 @@ export const get = createHandler(async (ctx, _body) => {
92
102
 
93
103
  return await sanitizeRecordData(ctx, data, 'prompt_config')
94
104
  })
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."]
105
+ // CIL[DOC-VECTOR type="context" content="purpose='Retrieve a single prompt configuration by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
106
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
107
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
108
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
108
109
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
109
110
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
111
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:get:constant"]
112
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/prompt-configs.ts"]
113
+ // CIL[DOC-MACRO purpose="Create a new prompt configuration record."]
114
+ // CIL[DOC-RESPONSIBILITY responsibility="Insert a new prompt_config with defaults and return the created record."]
115
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
116
+ // CIL[DOC-CONTRACT inputs="body with name, slug and optional fields" outputs="created prompt_config record" errors="throws if name/slug missing, account missing, or db error" side_effects="inserts into prompt_configs table and emits audit log"]
117
+ // CIL[DOC-MICRO logic_summary="Validates required fields, applies defaults, inserts the row, and emits an audit log." notable_decisions="[]"]
118
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
119
+ // CIL[DOC-STABILITY stability="stable"]
110
120
  export const create = createHandler(async (ctx, body) => {
111
121
  const { app_id, name, slug, description, system_prompt, context_template, model, temperature, max_tokens,
112
122
  is_multi_turn, max_history_messages, confidence_threshold, escalation_action, escalation_target,
@@ -159,21 +169,21 @@ export const create = createHandler(async (ctx, body) => {
159
169
 
160
170
  return data
161
171
  })
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."]
172
+ // CIL[DOC-VECTOR type="context" content="purpose='Create a new prompt configuration record.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
173
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
174
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
175
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
175
176
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
176
177
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
178
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:create:constant"]
179
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/prompt-configs.ts"]
180
+ // CIL[DOC-MACRO purpose="Update an existing prompt configuration."]
181
+ // CIL[DOC-RESPONSIBILITY responsibility="Apply allowed field updates to a prompt config and return the updated record."]
182
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
183
+ // CIL[DOC-CONTRACT inputs="body or query with id plus allowed updates" outputs="updated prompt_config record" errors="throws if id missing or db error" side_effects="updates prompt_configs table and emits audit log"]
184
+ // CIL[DOC-MICRO logic_summary="Merges allowed updates with updated_at timestamp, performs the update, and emits an audit log." notable_decisions="[]"]
185
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
186
+ // CIL[DOC-STABILITY stability="stable"]
177
187
  export const update = createHandler(async (ctx, body) => {
178
188
  const id = body?.id || ctx.query?.id
179
189
  const { id: _bodyId, ...updates } = body || {}
@@ -207,21 +217,21 @@ export const update = createHandler(async (ctx, body) => {
207
217
 
208
218
  return data
209
219
  })
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."]
220
+ // CIL[DOC-VECTOR type="context" content="purpose='Update an existing prompt configuration.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
221
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
222
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
223
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
223
224
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
224
225
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
226
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:update:constant"]
227
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/prompt-configs.ts"]
228
+ // CIL[DOC-MACRO purpose="Delete a prompt configuration by ID."]
229
+ // CIL[DOC-RESPONSIBILITY responsibility="Remove a prompt_config record and confirm success."]
230
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
231
+ // CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="{ success: true }" errors="throws if id missing, not found, or db error" side_effects="deletes from prompt_configs table and emits audit log"]
232
+ // CIL[DOC-MICRO logic_summary="Fetches the current record for audit, deletes the row, and emits an audit log." notable_decisions="[]"]
233
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
234
+ // CIL[DOC-STABILITY stability="stable"]
225
235
  export const remove = createHandler(async (ctx, _body) => {
226
236
  const id = ctx.query?.id
227
237
 
@@ -251,21 +261,21 @@ export const remove = createHandler(async (ctx, _body) => {
251
261
 
252
262
  return { success: true }
253
263
  })
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."]
264
+ // CIL[DOC-VECTOR type="context" content="purpose='Delete a prompt configuration by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
265
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
266
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
267
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
267
268
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
268
269
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
270
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:remove:constant"]
271
+ // CIL[BEGIN stable_id="~/.framework/functions/prompt-configs.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/prompt-configs.ts"]
272
+ // CIL[DOC-MACRO purpose="Dispatch prompt configuration requests by HTTP method and query."]
273
+ // CIL[DOC-RESPONSIBILITY responsibility="Route incoming requests to list, get, create, update, or remove handlers."]
274
+ // CIL[DOC-CONTEXT module="prompt-configs" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/_shared/principal.ts,.framework/functions/prompt-configs.ts"]
275
+ // CIL[DOC-CONTRACT inputs="ctx.query action and method, optional body" outputs="result from delegated handler" errors="throws if invalid action or method" side_effects="delegates to other handlers"]
276
+ // CIL[DOC-MICRO logic_summary="Switches on HTTP method and query id/action to call the appropriate handler." notable_decisions="[]"]
277
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
278
+ // CIL[DOC-STABILITY stability="stable"]
269
279
  export const handler = createHandler(async (ctx, body) => {
270
280
  const { action } = ctx.query || {}
271
281
  const method = ctx.query?.method || 'GET'
@@ -289,4 +299,10 @@ export const handler = createHandler(async (ctx, body) => {
289
299
 
290
300
  throw new Error('Invalid action or method')
291
301
  })
292
- // CIL[END chunk_id="prompt-configs_handler_1783932909"]
302
+ // CIL[DOC-VECTOR type="context" content="purpose='Dispatch prompt configuration requests by HTTP method and query.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/permissions.ts"]
303
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
304
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
305
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
306
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
307
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
308
+ // CIL[END stable_id="~/.framework/functions/prompt-configs.ts:handler:constant"]
@@ -1,9 +1,40 @@
1
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/roles.ts"]
2
+ // CIL[DOC-AUDIENCE audience="framework-internal"]
3
+ // CIL[DOC-MACRO purpose="Set up imports and exports for the roles Edge Function module"]
4
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide shared middleware and permission utilities for role handlers"]
5
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts"]
6
+ // CIL[DOC-CONTRACT inputs="none" outputs="module exports and imports" errors="none at module load" side_effects="none"]
7
+ // CIL[DOC-MICRO logic_summary="Imports createHandler, adminDb, emitLog, PermissionEngine and sanitizeRecordData for role CRUD operations" notable_decisions="Centralizes role logic behind shared permission and database helpers"]
8
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
9
+ // CIL[DOC-STABILITY stable]
1
10
  import { createHandler } from './_shared/middleware'
2
11
  import { adminDb } from './_shared/db'
3
12
  import { emitLog } from './_shared/audit'
4
13
  import { PermissionEngine, sanitizeRecordData } from './_shared/permissions'
5
-
14
+ // CIL[DOC-VECTOR type="context" content="purpose='Set up imports and exports for the roles Edge Function module'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
15
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
16
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
17
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
18
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
+ // CIL[END stable_id="~/.framework/functions/roles.ts:module_header:module_header"]
21
+
22
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:permissions:constant" type="constant" identity="permissions" parent="~/.framework/functions/roles.ts"]
23
+ // CIL[DOC-MACRO purpose="Provide a local alias for the shared PermissionEngine"]
24
+ // CIL[DOC-RESPONSIBILITY responsibility="Expose permission checks under a typed local constant for role handlers"]
25
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
26
+ // CIL[DOC-CONTRACT inputs="none" outputs="permissions: any" errors="none" side_effects="none"]
27
+ // CIL[DOC-MICRO logic_summary="Casts PermissionEngine to any as a module-local permissions reference" notable_decisions="Avoids changing shared permissions typings by using a local any cast"]
28
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
29
+ // CIL[DOC-STABILITY stable]
6
30
  const permissions = PermissionEngine as any
31
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide a local alias for the shared PermissionEngine'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
32
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
33
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
34
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
35
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
36
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
37
+ // CIL[END stable_id="~/.framework/functions/roles.ts:permissions:constant"]
7
38
 
8
39
 
9
40
 
@@ -11,21 +42,14 @@ const permissions = PermissionEngine as any
11
42
 
12
43
 
13
44
 
14
- // CIL[BEGIN chunk_id="roles_module_header_1783932909" type="module_header" identity="module_header" parent="none"]
15
- // CIL[DOC-MACRO purpose="Lists roles with filtering and permission-based sanitization"]
16
- // CIL[DOC-RESPONSIBILITY responsibility="Handle role listing with app and system filters"]
17
- // CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
18
- // CIL[DOC-CONTRACT inputs="ctx, _body" outputs="Array of role records" errors="Throws on DB errors" side_effects="Database queries, permission checks"]
19
- // CIL[DOC-MICRO logic_summary="Filters roles, applies permission sanitization for non-admins" notable_decisions="[]"]
20
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
21
- // CIL[DOC-STABILITY stability="stable"]
22
- // CIL[DOC-AUDIENCE audience="developer"]
23
- // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
24
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
25
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
26
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
27
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
28
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/roles.ts"]
46
+ // CIL[DOC-MACRO purpose="List active roles with optional app and system filters"]
47
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a paginated list of roles respecting query filters and user permission scoping"]
48
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
49
+ // CIL[DOC-CONTRACT inputs="ctx.query with optional app_id, is_system, limit and offset" outputs="array of role records" errors="database errors and unhandled query failures" side_effects="none"]
50
+ // CIL[DOC-MICRO logic_summary="Build a query on the roles table, filter by app_id and is_system, paginate and then either return full results for system admins or sanitize each record" notable_decisions="Defaults limit to 50 and offset to 0; sorts by is_system then name"]
51
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
52
+ // CIL[DOC-STABILITY stable]
29
53
  export const list = createHandler(async (ctx, _body) => {
30
54
  const { app_id, is_system, limit = '50', offset = '0' } = ctx.query || {}
31
55
 
@@ -67,21 +91,21 @@ export const list = createHandler(async (ctx, _body) => {
67
91
 
68
92
  return filteredData
69
93
  })
70
- // CIL[END chunk_id="roles_module_header_1783932909"]
71
- // CIL[BEGIN chunk_id="roles_get_1783932909" type="function" identity="get" parent="none"]
72
- // CIL[DOC-MACRO purpose="Retrieves single role by ID with sanitization"]
73
- // CIL[DOC-RESPONSIBILITY responsibility="Handle individual role retrieval"]
74
- // CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
75
- // CIL[DOC-CONTRACT inputs="none" outputs="Single role record" errors="Throws if ID missing or DB error" side_effects="Database query, permission sanitization"]
76
- // CIL[DOC-MICRO logic_summary="Fetches role by ID, applies permission sanitization" notable_decisions="[]"]
77
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
78
- // CIL[DOC-STABILITY stability="stable"]
79
- // 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/pages/admin/TypeDetailPage.tsx, \."]
80
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
81
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
82
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
94
+ // CIL[DOC-VECTOR type="context" content="purpose='List active roles with optional app and system filters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
95
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
96
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
97
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
83
98
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
84
99
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
100
+ // CIL[END stable_id="~/.framework/functions/roles.ts:list:constant"]
101
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/roles.ts"]
102
+ // CIL[DOC-MACRO purpose="Fetch a single active role by its id"]
103
+ // CIL[DOC-RESPONSIBILITY responsibility="Return one sanitized role record when the caller provides a valid id"]
104
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
105
+ // CIL[DOC-CONTRACT inputs="ctx.query.id" outputs="single role record" errors="missing id and database fetch errors" side_effects="none"]
106
+ // CIL[DOC-MICRO logic_summary="Fetch the role by id with an app join and apply sanitizeRecordData before returning" notable_decisions="Requires id in query and treats missing records as database errors"]
107
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
108
+ // CIL[DOC-STABILITY stable]
85
109
  export const get = createHandler(async (ctx, _body) => {
86
110
  const { id } = ctx.query || {}
87
111
 
@@ -104,21 +128,21 @@ export const get = createHandler(async (ctx, _body) => {
104
128
  const roleWithType = { ...data, type: 'role' }
105
129
  return await sanitizeRecordData(ctx, roleWithType, 'role')
106
130
  })
107
- // CIL[END chunk_id="roles_get_1783932909"]
108
- // CIL[BEGIN chunk_id="roles_create_1783932909" type="function" identity="create" parent="none"]
109
- // CIL[DOC-MACRO purpose="Creates new role with permission validation"]
110
- // CIL[DOC-RESPONSIBILITY responsibility="Handle role creation with security checks"]
111
- // CIL[DOC-CONTEXT module="roles" 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\",\"\\\"]"]
112
- // CIL[DOC-CONTRACT inputs="none" outputs="Created role record" errors="Throws on validation, permission, or DB errors" side_effects="Database insert, audit logging"]
113
- // CIL[DOC-MICRO logic_summary="Validates permissions, checks uniqueness, creates role" notable_decisions="[]"]
114
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
115
- // CIL[DOC-STABILITY stability="stable"]
116
- // 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, \."]
117
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
118
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
119
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
131
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch a single active role by its id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
132
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
133
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
134
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
120
135
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
121
136
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
137
+ // CIL[END stable_id="~/.framework/functions/roles.ts:get:constant"]
138
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/roles.ts"]
139
+ // CIL[DOC-MACRO purpose="Create a new role for an app or the platform"]
140
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate caller permissions, enforce slug uniqueness and insert a new role record"]
141
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
142
+ // CIL[DOC-CONTRACT inputs="body with app_id, slug, name, description, permissions object and is_system flag" outputs="newly created role record" errors="missing fields, permission denied, duplicate slug or database errors" side_effects="inserts a roles row and emits an audit log"]
143
+ // CIL[DOC-MICRO logic_summary="Require slug and name, enforce system_admin protection, check create permissions, guard against duplicate slugs and insert the role with a logged audit event" notable_decisions="Non-system-admins need surface create permission; system_admin slug is protected"]
144
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
145
+ // CIL[DOC-STABILITY stable]
122
146
  export const create = createHandler(async (ctx, body) => {
123
147
  const { app_id, slug, name, description, permissions: rolePermissions, is_system } = body
124
148
 
@@ -184,21 +208,21 @@ export const create = createHandler(async (ctx, body) => {
184
208
 
185
209
  return data
186
210
  })
187
- // CIL[END chunk_id="roles_create_1783932909"]
188
- // CIL[BEGIN chunk_id="roles_update_1783932909" type="function" identity="update" parent="none"]
189
- // CIL[DOC-MACRO purpose="Updates role with field-level permission validation"]
190
- // CIL[DOC-RESPONSIBILITY responsibility="Handle role updates with security validation"]
191
- // CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
192
- // CIL[DOC-CONTRACT inputs="none" outputs="Updated role record" errors="Throws on validation, permission, or DB errors" side_effects="Database update, audit logging"]
193
- // CIL[DOC-MICRO logic_summary="Validates update permissions, applies changes with audit trail" notable_decisions="[]"]
194
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
195
- // CIL[DOC-STABILITY stability="stable"]
196
- // 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/functions/_shared/principal.ts, \."]
197
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
198
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
199
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
211
+ // CIL[DOC-VECTOR type="context" content="purpose='Create a new role for an app or the platform'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
212
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
213
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
214
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
200
215
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
201
216
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
217
+ // CIL[END stable_id="~/.framework/functions/roles.ts:create:constant"]
218
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/roles.ts"]
219
+ // CIL[DOC-MACRO purpose="Update an existing role by id"]
220
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate the request, apply field-level update permissions and persist the changes"]
221
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
222
+ // CIL[DOC-CONTRACT inputs="body with id and updates" outputs="updated role record" errors="missing id, missing role, validation failure or database errors" side_effects="updates the roles row and emits an audit log"]
223
+ // CIL[DOC-MICRO logic_summary="Require id and a valid principal, fetch the current record, validate update fields, apply updates with a fresh timestamp and log the change" notable_decisions="Uses permissions.validateUpdatePermissions before applying any field changes"]
224
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
225
+ // CIL[DOC-STABILITY stable]
202
226
  export const update = createHandler(async (ctx, body) => {
203
227
  const { id, ...updates } = body
204
228
 
@@ -247,21 +271,21 @@ export const update = createHandler(async (ctx, body) => {
247
271
 
248
272
  return data
249
273
  })
250
- // CIL[END chunk_id="roles_update_1783932909"]
251
- // CIL[BEGIN chunk_id="roles_remove_1783932909" type="function" identity="remove" parent="none"]
252
- // CIL[DOC-MACRO purpose="Soft deletes role by setting is_active to false"]
253
- // CIL[DOC-RESPONSIBILITY responsibility="Handle role deletion with audit trail"]
254
- // CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[]"]
255
- // CIL[DOC-CONTRACT inputs="none" outputs="Deactivated role record" errors="Throws on validation or DB errors" side_effects="Database update, audit logging"]
256
- // CIL[DOC-MICRO logic_summary="Soft deletes role, maintains audit trail" notable_decisions="[]"]
257
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
258
- // CIL[DOC-STABILITY stability="stable"]
259
- // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
260
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
261
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
262
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
274
+ // CIL[DOC-VECTOR type="context" content="purpose='Update an existing role by id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
275
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
276
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
277
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
263
278
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
264
279
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
280
+ // CIL[END stable_id="~/.framework/functions/roles.ts:update:constant"]
281
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/roles.ts"]
282
+ // CIL[DOC-MACRO purpose="Soft-delete a role by setting is_active to false"]
283
+ // CIL[DOC-RESPONSIBILITY responsibility="Mark the requested role as inactive and record the deletion in the audit log"]
284
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
285
+ // CIL[DOC-CONTRACT inputs="body with id" outputs="deactivated role record" errors="missing id, missing role or database errors" side_effects="sets roles.is_active to false and emits an audit log"]
286
+ // CIL[DOC-MICRO logic_summary="Require id and a valid principal, fetch the current record, update is_active to false and log the deletion" notable_decisions="Performs a soft delete instead of removing the row"]
287
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
288
+ // CIL[DOC-STABILITY stable]
265
289
  export const remove = createHandler(async (ctx, body) => {
266
290
  const { id } = body
267
291
 
@@ -299,21 +323,21 @@ export const remove = createHandler(async (ctx, body) => {
299
323
 
300
324
  return data
301
325
  })
302
- // CIL[END chunk_id="roles_remove_1783932909"]
303
- // CIL[BEGIN chunk_id="roles_handler_1783932909" type="function" identity="handler" parent="none"]
304
- // CIL[DOC-MACRO purpose="Routes HTTP methods to appropriate role handlers"]
305
- // CIL[DOC-RESPONSIBILITY responsibility="Handle request routing for role CRUD operations"]
306
- // CIL[DOC-CONTEXT module="roles" layer="api-handler" related_files="[]"]
307
- // CIL[DOC-CONTRACT inputs="none" outputs="Varies by handler" errors="Throws on unsupported methods" side_effects="Delegates to appropriate handler"]
308
- // CIL[DOC-MICRO logic_summary="Routes based on HTTP method, delegates to CRUD handlers" notable_decisions="[]"]
309
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
310
- // CIL[DOC-STABILITY stability="stable"]
311
- // CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
312
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
313
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
314
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
326
+ // CIL[DOC-VECTOR type="context" content="purpose='Soft-delete a role by setting is_active to false'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
327
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
328
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
329
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
315
330
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
316
331
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
332
+ // CIL[END stable_id="~/.framework/functions/roles.ts:remove:constant"]
333
+ // CIL[BEGIN stable_id="~/.framework/functions/roles.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/roles.ts"]
334
+ // CIL[DOC-MACRO purpose="Route incoming role function requests to the correct handler by HTTP method"]
335
+ // CIL[DOC-RESPONSIBILITY responsibility="Dispatch list, get, create, update and remove operations based on ctx.query.method"]
336
+ // CIL[DOC-CONTEXT module="roles" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/roles.ts"]
337
+ // CIL[DOC-CONTRACT inputs="ctx.query.method and optional id" outputs="result from the dispatched handler" errors="unsupported method" side_effects="none directly; delegated handlers may mutate data"]
338
+ // CIL[DOC-MICRO logic_summary="Select the method from query or default to GET, then route to list, get, create, update or remove accordingly" notable_decisions="GET with id calls get; GET without id calls list; unsupported methods throw"]
339
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
340
+ // CIL[DOC-STABILITY stable]
317
341
  export const handler = createHandler(async (ctx, body) => {
318
342
  const method = ctx.query?.method || 'GET'
319
343
 
@@ -334,4 +358,10 @@ export const handler = createHandler(async (ctx, body) => {
334
358
  throw new Error(`Unsupported method: ${method}`)
335
359
  }
336
360
  })
337
- // CIL[END chunk_id="roles_handler_1783932909"]
361
+ // CIL[DOC-VECTOR type="context" content="purpose='Route incoming role function requests to the correct handler by HTTP method'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
362
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
363
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
364
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
365
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
366
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
367
+ // CIL[END stable_id="~/.framework/functions/roles.ts:handler:constant"]