spine-framework 0.3.145 → 0.4.1

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 +5067 -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,3 +1,12 @@
1
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/apps.ts"]
2
+ // CIL[DOC-MACRO purpose="Application management handlers and CRUD operations for public.apps"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Define and export Netlify-style handler functions for the app lifecycle: list, get, schema, create, update, remove, availability, version, and dispatch"]
4
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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="imported shared modules" outputs="exported handler constants" errors="import-time type errors" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports shared middleware and permission helpers; exports handler functions for the apps API" notable_decisions="Uses createHandler for consistent request/response wrapping; delegates to PermissionEngine for access control"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="backend maintainers"]
1
10
 
2
11
 
3
12
 
@@ -25,53 +34,56 @@
25
34
 
26
35
 
27
36
 
28
-
29
37
 
38
+
39
+
40
+
41
+
42
+
30
43
 
31
44
 
32
45
 
33
46
 
34
47
 
35
48
 
36
- // CIL[BEGIN chunk_id="apps_moduleheader_1783969696" type="module_header" identity="imports" parent="none"]
37
- // CIL[DOC-MACRO purpose="Import dependencies for apps module"]
38
- // CIL[DOC-RESPONSIBILITY responsibility="Import middleware, database, permissions, and logging utilities"]
39
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
40
- // CIL[DOC-CONTRACT inputs="none" outputs="imported_modules" errors="none" side_effects="none"]
41
- // CIL[DOC-MICRO logic_summary="Imports required dependencies for app management functions" notable_decisions="[]"]
42
- // CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
43
- // CIL[DOC-STABILITY stability="stable"]
44
- // CIL[DOC-AUDIENCE audience="developer"]
45
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
46
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
47
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
48
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
49
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
50
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
51
49
 
52
50
  import { createHandler } from './_shared/middleware'
53
51
  import { adminDb } from './_shared/db'
54
52
  import { emitLog } from './_shared/audit'
55
53
  import { isSystemAdmin } from './_shared/principal'
56
54
  import { PermissionEngine, sanitizeRecordData } from './_shared/permissions'
57
-
58
- const permissions = PermissionEngine as any
59
- // CIL[END chunk_id="apps_moduleheader_1783969696"]
60
- // CIL[BEGIN chunk_id="apps_list_1783969696" type="function" identity="list" parent="none"]
61
- // CIL[DOC-LEARNING topic="apps_list:get_account_apps_filter" content="/api/apps?action=list calls get_account_apps, which filters by account ownership, is_active, and the requesting user's roles. An app missing from this list will never be rendered by AuthenticatedRouter."]
62
- // CIL[DOC-MACRO purpose="List apps with filtering and permissions"]
63
- // CIL[DOC-RESPONSIBILITY responsibility="Retrieve and filter apps by account and user roles"]
64
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
65
- // CIL[DOC-CONTRACT inputs="none" outputs="sanitized_app_list" errors="auth_errors,db_errors" side_effects="none"]
66
- // CIL[DOC-MICRO logic_summary="Query apps by account with role-based filtering and data sanitization" notable_decisions="[]"]
67
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
55
+ // CIL[DOC-VECTOR type="context" content="purpose='Application management handlers and CRUD operations for public.apps'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
56
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
57
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
58
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
59
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
60
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
61
+ // CIL[END stable_id="~/.framework/functions/apps.ts:module_header:module_header"]
62
+
63
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:permissions:constant" type="constant" identity="permissions" parent="~/.framework/functions/apps.ts"]
64
+ // CIL[DOC-MACRO purpose="Type alias shim for PermissionEngine"]
65
+ // CIL[DOC-RESPONSIBILITY responsibility="Reference PermissionEngine with loose typing for app handlers"]
66
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
67
+ // CIL[DOC-CONTRACT inputs="none" outputs="permissions reference" errors="none" side_effects="none"]
68
+ // CIL[DOC-MICRO logic_summary="Casts PermissionEngine to any to avoid strict type errors in this module" notable_decisions="Should be replaced by a properly typed export from the permissions engine"]
69
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
68
70
  // CIL[DOC-STABILITY stability="stable"]
69
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
70
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
71
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
72
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
71
+ const permissions = PermissionEngine as any
72
+ // CIL[DOC-VECTOR type="context" content="purpose='Type alias shim for PermissionEngine'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.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"]
73
76
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
74
77
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
78
+ // CIL[END stable_id="~/.framework/functions/apps.ts:permissions:constant"]
79
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/apps.ts"]
80
+ // CIL[DOC-MACRO purpose="List apps for an account with optional filters"]
81
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a sanitized list of apps accessible to the caller's roles"]
82
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
83
+ // CIL[DOC-CONTRACT inputs="ctx.query with include_system, include_inactive, account_id; ctx.accountId, ctx.principal, ctx.db" outputs="array of sanitized app records" errors="Account context required; database errors" side_effects="none"]
84
+ // CIL[DOC-MICRO logic_summary="Resolves target account, selects adminDb for system admins, calls get_account_apps RPC, and sanitizes each record" notable_decisions="Defaults include_system to true unless explicitly false; uses sanitizeRecordData per row"]
85
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
86
+ // CIL[DOC-STABILITY stability="stable"]
75
87
  export const list = createHandler(async (ctx, body) => {
76
88
  const { include_system, include_inactive, account_id } = ctx.query || {}
77
89
 
@@ -105,21 +117,21 @@ export const list = createHandler(async (ctx, body) => {
105
117
 
106
118
  return sanitized
107
119
  })
108
- // CIL[END chunk_id="apps_list_1783969696"]
109
- // CIL[BEGIN chunk_id="apps_get_1783969696" type="function" identity="get" parent="none"]
110
- // CIL[DOC-MACRO purpose="Get single app by ID or slug"]
111
- // CIL[DOC-RESPONSIBILITY responsibility="Retrieve individual app record with owner details"]
112
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
113
- // CIL[DOC-CONTRACT inputs="none" outputs="sanitized_app" errors="not_found,db_errors" side_effects="none"]
114
- // CIL[DOC-MICRO logic_summary="Query app by ID or slug and sanitize data for response" notable_decisions="[]"]
115
- // CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
116
- // CIL[DOC-STABILITY stability="stable"]
117
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
118
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
119
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
120
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
120
+ // CIL[DOC-VECTOR type="context" content="purpose='List apps for an account with optional filters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
121
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
122
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
123
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
121
124
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
122
125
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
126
+ // CIL[END stable_id="~/.framework/functions/apps.ts:list:constant"]
127
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/apps.ts"]
128
+ // CIL[DOC-MACRO purpose="Fetch a single active app by id or slug"]
129
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a sanitized app record matching the requested id or slug"]
130
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
131
+ // CIL[DOC-CONTRACT inputs="ctx.query.id or slug" outputs="sanitized app record" errors="App ID or slug required; not found; database errors" side_effects="none"]
132
+ // CIL[DOC-MICRO logic_summary="Queries the apps table by id or slug, limits to active records, and returns sanitized data" notable_decisions="Prefers id over slug; uses .single() to enforce a single result"]
133
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
134
+ // CIL[DOC-STABILITY stability="stable"]
123
135
  export const get = createHandler(async (ctx, body) => {
124
136
  const { id, slug } = ctx.query || {}
125
137
 
@@ -147,21 +159,21 @@ export const get = createHandler(async (ctx, body) => {
147
159
 
148
160
  return await sanitizeRecordData(ctx, data, 'app')
149
161
  })
150
- // CIL[END chunk_id="apps_get_1783969696"]
151
- // CIL[BEGIN chunk_id="apps_getschema_1783969696" type="function" identity="getSchema" parent="none"]
152
- // CIL[DOC-MACRO purpose="Get app schema configuration"]
153
- // CIL[DOC-RESPONSIBILITY responsibility="Retrieve schema definition for specific app"]
154
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
155
- // CIL[DOC-CONTRACT inputs="none" outputs="app_schema" errors="not_found,db_errors" side_effects="none"]
156
- // CIL[DOC-MICRO logic_summary="Call stored procedure to get app schema by slug" notable_decisions="[]"]
157
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
158
- // CIL[DOC-STABILITY stability="stable"]
159
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 1. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
160
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
161
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
162
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
162
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch a single active app by id or slug'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
163
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
164
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
165
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
163
166
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
164
167
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
168
+ // CIL[END stable_id="~/.framework/functions/apps.ts:get:constant"]
169
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:getSchema:constant" type="constant" identity="getSchema" parent="~/.framework/functions/apps.ts"]
170
+ // CIL[DOC-MACRO purpose="Retrieve the design schema for an app by slug"]
171
+ // CIL[DOC-RESPONSIBILITY responsibility="Return the schema payload from the get_app_schema RPC"]
172
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
173
+ // CIL[DOC-CONTRACT inputs="ctx.query.slug" outputs="app design schema" errors="App slug is required; database errors" side_effects="none"]
174
+ // CIL[DOC-MICRO logic_summary="Validates the slug and invokes the get_app_schema RPC, returning the result" notable_decisions="Relies on a database stored procedure for schema generation"]
175
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
176
+ // CIL[DOC-STABILITY stability="stable"]
165
177
  export const getSchema = createHandler(async (ctx, body) => {
166
178
  const { slug } = ctx.query || {}
167
179
 
@@ -176,21 +188,21 @@ export const getSchema = createHandler(async (ctx, body) => {
176
188
 
177
189
  return data
178
190
  })
179
- // CIL[END chunk_id="apps_getschema_1783969696"]
180
- // CIL[BEGIN chunk_id="apps_create_1783969696" type="function" identity="create" parent="none"]
181
- // CIL[DOC-MACRO purpose="Create new app with validation"]
182
- // CIL[DOC-RESPONSIBILITY responsibility="Create app record with permissions and audit logging"]
183
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
184
- // CIL[DOC-CONTRACT inputs="none" outputs="created_app" errors="validation_errors,permission_errors" side_effects="db_write,audit_log"]
185
- // CIL[DOC-MICRO logic_summary="Validate permissions, check slug uniqueness, create app, log event" notable_decisions="[]"]
186
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
187
- // CIL[DOC-STABILITY stability="stable"]
188
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
189
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
190
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
191
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
191
+ // CIL[DOC-VECTOR type="context" content="purpose='Retrieve the design schema for an app by slug'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
192
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
193
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
194
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
192
195
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
193
196
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
197
+ // CIL[END stable_id="~/.framework/functions/apps.ts:getSchema:constant"]
198
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/apps.ts"]
199
+ // CIL[DOC-MACRO purpose="Create a new app record"]
200
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate input and permissions, insert a new app row, and emit an audit log"]
201
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
202
+ // CIL[DOC-CONTRACT inputs="body with slug, name, and optional fields; ctx.principal, ctx.accountId" outputs="created app record" errors="Missing slug/name; anonymous user; insufficient permissions; duplicate slug; database errors" side_effects="inserts an apps row and emits app.created log"]
203
+ // CIL[DOC-MICRO logic_summary="Enforces required fields and auth, checks create permission, ensures slug uniqueness, inserts with defaults, and emits an audit event" notable_decisions="Defaults version, app_type, source, route_prefix, and min_role; only system admins bypass permission checks"]
204
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
205
+ // CIL[DOC-STABILITY stability="stable"]
194
206
  export const create = createHandler(async (ctx, body) => {
195
207
  const { slug, name, description, icon, color, version, app_type, source, owner_account_id, config, nav_items, min_role, integration_deps, metadata, route_prefix, renderer } = body
196
208
 
@@ -258,21 +270,21 @@ export const create = createHandler(async (ctx, body) => {
258
270
 
259
271
  return data
260
272
  })
261
- // CIL[END chunk_id="apps_create_1783969696"]
262
- // CIL[BEGIN chunk_id="apps_update_1783969696" type="function" identity="update" parent="none"]
263
- // CIL[DOC-MACRO purpose="Update existing app with permissions"]
264
- // CIL[DOC-RESPONSIBILITY responsibility="Update app record with field-level permission validation"]
265
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
266
- // CIL[DOC-CONTRACT inputs="none" outputs="updated_app" errors="not_found,permission_errors" side_effects="db_write,audit_log"]
267
- // CIL[DOC-MICRO logic_summary="Validate update permissions, apply changes, log modification" notable_decisions="[]"]
268
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
269
- // CIL[DOC-STABILITY stability="stable"]
270
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
271
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
272
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
273
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
273
+ // CIL[DOC-VECTOR type="context" content="purpose='Create a new app record'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
274
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
275
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
276
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
274
277
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
275
278
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
279
+ // CIL[END stable_id="~/.framework/functions/apps.ts:create:constant"]
280
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/apps.ts"]
281
+ // CIL[DOC-MACRO purpose="Update an existing app"]
282
+ // CIL[DOC-RESPONSIBILITY responsibility="Validate the caller, load the current record, check field-level permissions, and apply updates"]
283
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
284
+ // CIL[DOC-CONTRACT inputs="body with id and update fields; ctx.principal, ctx.accountId" outputs="updated app record" errors="App ID is required; not found; field permission denied; database errors" side_effects="updates the apps row and emits app.updated log"]
285
+ // CIL[DOC-MICRO logic_summary="Finds the current record, validates update permissions, sets updated_at, persists changes, and emits an audit event" notable_decisions="Strips body id from updates; uses validateUpdatePermissions to enforce field-level access"]
286
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
287
+ // CIL[DOC-STABILITY stability="stable"]
276
288
  export const update = createHandler(async (ctx, body) => {
277
289
  const id = body?.id || ctx.query?.id
278
290
  const { id: _bodyId, ...updates } = body || {}
@@ -324,21 +336,21 @@ export const update = createHandler(async (ctx, body) => {
324
336
 
325
337
  return data
326
338
  })
327
- // CIL[END chunk_id="apps_update_1783969696"]
328
- // CIL[BEGIN chunk_id="apps_remove_1783969696" type="function" identity="remove" parent="none"]
329
- // CIL[DOC-MACRO purpose="Soft delete app by deactivating"]
330
- // CIL[DOC-RESPONSIBILITY responsibility="Deactivate app record with audit logging"]
331
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
332
- // CIL[DOC-CONTRACT inputs="none" outputs="deactivated_app" errors="not_found,auth_errors" side_effects="db_write,audit_log"]
333
- // CIL[DOC-MICRO logic_summary="Set is_active=false instead of hard delete, log removal" notable_decisions="[]"]
334
- // CIL[DOC-CONFIDENCE pass="second" score="0.96" flags="none"]
335
- // CIL[DOC-STABILITY stability="stable"]
336
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
337
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
338
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
339
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
339
+ // CIL[DOC-VECTOR type="context" content="purpose='Update an existing app'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
340
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
341
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
342
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
340
343
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
341
344
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
345
+ // CIL[END stable_id="~/.framework/functions/apps.ts:update:constant"]
346
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/apps.ts"]
347
+ // CIL[DOC-MACRO purpose="Soft-delete an app"]
348
+ // CIL[DOC-RESPONSIBILITY responsibility="Set is_active to false for an app after authentication and existence checks"]
349
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
350
+ // CIL[DOC-CONTRACT inputs="body or query id; ctx.principal, ctx.accountId" outputs="deactivated app record" errors="App ID is required; not found; database errors" side_effects="deactivates the app and emits app.deleted log"]
351
+ // CIL[DOC-MICRO logic_summary="Loads the record, flips the is_active flag and updated_at, and emits an audit event" notable_decisions="Performs a soft delete rather than a hard delete"]
352
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
353
+ // CIL[DOC-STABILITY stability="stable"]
342
354
  export const remove = createHandler(async (ctx, body) => {
343
355
  const id = body?.id || ctx.query?.id
344
356
 
@@ -377,21 +389,21 @@ export const remove = createHandler(async (ctx, body) => {
377
389
 
378
390
  return data
379
391
  })
380
- // CIL[END chunk_id="apps_remove_1783969696"]
381
- // CIL[BEGIN chunk_id="apps_checkavailability_1783969696" type="function" identity="checkAvailability" parent="none"]
382
- // CIL[DOC-MACRO purpose="Check if app slug is available"]
383
- // CIL[DOC-RESPONSIBILITY responsibility="Validate app slug uniqueness for account"]
384
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
385
- // CIL[DOC-CONTRACT inputs="none" outputs="availability_boolean" errors="validation_errors,db_errors" side_effects="none"]
386
- // CIL[DOC-MICRO logic_summary="Call stored procedure to check slug availability in account" notable_decisions="[]"]
387
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
388
- // CIL[DOC-STABILITY stability="stable"]
389
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
390
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
391
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
392
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
392
+ // CIL[DOC-VECTOR type="context" content="purpose='Soft-delete an app'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
393
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
394
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
395
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
393
396
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
394
397
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
398
+ // CIL[END stable_id="~/.framework/functions/apps.ts:remove:constant"]
399
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:checkAvailability:constant" type="constant" identity="checkAvailability" parent="~/.framework/functions/apps.ts"]
400
+ // CIL[DOC-MACRO purpose="Check whether a slug is available for an account"]
401
+ // CIL[DOC-RESPONSIBILITY responsibility="Return an availability boolean from the is_app_available RPC"]
402
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
403
+ // CIL[DOC-CONTRACT inputs="ctx.query.slug and ctx.accountId" outputs="{ available: boolean }" errors="App slug is required; account context required; database errors" side_effects="none"]
404
+ // CIL[DOC-MICRO logic_summary="Validates the slug and account, then calls the is_app_available RPC" notable_decisions="Uses an account-scoped stored procedure to determine availability"]
405
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
406
+ // CIL[DOC-STABILITY stability="stable"]
395
407
  export const checkAvailability = createHandler(async (ctx, body) => {
396
408
  const { slug } = ctx.query || {}
397
409
 
@@ -413,21 +425,21 @@ export const checkAvailability = createHandler(async (ctx, body) => {
413
425
 
414
426
  return { available: data }
415
427
  })
416
- // CIL[END chunk_id="apps_checkavailability_1783969696"]
417
- // CIL[BEGIN chunk_id="apps_updateversion_1783969696" type="function" identity="updateVersion" parent="none"]
418
- // CIL[DOC-MACRO purpose="Update app version number"]
419
- // CIL[DOC-RESPONSIBILITY responsibility="Change app version with audit logging"]
420
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
421
- // CIL[DOC-CONTRACT inputs="none" outputs="success_status" errors="validation_errors,db_errors" side_effects="db_write,audit_log"]
422
- // CIL[DOC-MICRO logic_summary="Call stored procedure to update version, log change" notable_decisions="[]"]
423
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="rpc_behavior_not_mapped"]
424
- // CIL[DOC-STABILITY stability="stable"]
425
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
426
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
427
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
428
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
428
+ // CIL[DOC-VECTOR type="context" content="purpose='Check whether a slug is available for an account'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
429
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
430
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
431
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
429
432
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
430
433
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
434
+ // CIL[END stable_id="~/.framework/functions/apps.ts:checkAvailability:constant"]
435
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:updateVersion:constant" type="constant" identity="updateVersion" parent="~/.framework/functions/apps.ts"]
436
+ // CIL[DOC-MACRO purpose="Update an app version via a stored procedure"]
437
+ // CIL[DOC-RESPONSIBILITY responsibility="Bump the version of an app and emit an audit log"]
438
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
439
+ // CIL[DOC-CONTRACT inputs="body.id and body.version" outputs="{ success: true }" errors="App ID and version are required; database errors" side_effects="updates the app version and emits app.version_updated log"]
440
+ // CIL[DOC-MICRO logic_summary="Validates inputs, calls the update_app_version RPC, and emits an audit event" notable_decisions="RPC encapsulates version logic and any related triggers"]
441
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
442
+ // CIL[DOC-STABILITY stability="stable"]
431
443
  export const updateVersion = createHandler(async (ctx, body) => {
432
444
  const { id, version } = body
433
445
 
@@ -447,21 +459,21 @@ export const updateVersion = createHandler(async (ctx, body) => {
447
459
 
448
460
  return { success: true }
449
461
  })
450
- // CIL[END chunk_id="apps_updateversion_1783969696"]
451
- // CIL[BEGIN chunk_id="apps_handler_1783969696" type="function" identity="handler" parent="none"]
452
- // CIL[DOC-MACRO purpose="Route HTTP methods to app functions"]
453
- // CIL[DOC-RESPONSIBILITY responsibility="Dispatch requests to appropriate app operations"]
454
- // CIL[DOC-CONTEXT module="apps" layer="backend_functions" related_files="[]"]
455
- // CIL[DOC-CONTRACT inputs="none" outputs="function_responses" errors="method_errors" side_effects="none"]
456
- // CIL[DOC-MICRO logic_summary="Route based on HTTP method and query parameters to specific functions" notable_decisions="[]"]
457
- // CIL[DOC-CONFIDENCE pass="second" score="0.97" flags="none"]
458
- // CIL[DOC-STABILITY stability="stable"]
459
- // CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
460
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
461
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
462
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
462
+ // CIL[DOC-VECTOR type="context" content="purpose='Update an app version via a stored procedure'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
463
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
464
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
465
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
463
466
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
464
467
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
468
+ // CIL[END stable_id="~/.framework/functions/apps.ts:updateVersion:constant"]
469
+ // CIL[BEGIN stable_id="~/.framework/functions/apps.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/apps.ts"]
470
+ // CIL[DOC-MACRO purpose="Dispatch incoming app requests to the correct handler by HTTP method and action"]
471
+ // CIL[DOC-RESPONSIBILITY responsibility="Route GET/POST/PATCH/DELETE methods to the appropriate list, get, schema, create, update, remove, and version handlers"]
472
+ // CIL[DOC-CONTEXT module="functions" layer="edge" 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/apps.ts"]
473
+ // CIL[DOC-CONTRACT inputs="ctx.query.method, action, id, and slug" outputs="result of the delegated handler" errors="Unsupported HTTP method" side_effects="delegates to other handlers"]
474
+ // CIL[DOC-MICRO logic_summary="Switches on HTTP method and query params to dispatch to the appropriate app operation" notable_decisions="GET with id or slug maps to get; action schema/available handled; POST action version or create; PATCH update; DELETE remove"]
475
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
476
+ // CIL[DOC-STABILITY stability="stable"]
465
477
  export const handler = createHandler(async (ctx, body) => {
466
478
  const method = ctx.query?.method || 'GET'
467
479
 
@@ -492,4 +504,10 @@ export const handler = createHandler(async (ctx, body) => {
492
504
  throw new Error(`Unsupported method: ${method}`)
493
505
  }
494
506
  })
495
- // CIL[END chunk_id="apps_handler_1783969696"]
507
+ // CIL[DOC-VECTOR type="context" content="purpose='Dispatch incoming app requests to the correct handler by HTTP method and action'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
508
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
509
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
510
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
511
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
512
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
513
+ // CIL[END stable_id="~/.framework/functions/apps.ts:handler:constant"]