spine-framework 0.3.124 → 0.3.126

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/.framework/cli/commands/agents.ts +35 -37
  2. package/.framework/cli/commands/auth.ts +35 -34
  3. package/.framework/cli/commands/create-app.ts +104 -40
  4. package/.framework/cli/commands/dev.ts +104 -69
  5. package/.framework/cli/commands/doctor.ts +179 -69
  6. package/.framework/cli/commands/generate.ts +83 -143
  7. package/.framework/cli/commands/init.ts +72 -34
  8. package/.framework/cli/commands/install-app.ts +260 -125
  9. package/.framework/cli/commands/items.ts +33 -44
  10. package/.framework/cli/commands/migrate.ts +122 -40
  11. package/.framework/cli/commands/migrations.ts +33 -40
  12. package/.framework/cli/commands/pipelines.ts +31 -39
  13. package/.framework/cli/commands/status.ts +47 -23
  14. package/.framework/cli/commands/system.ts +47 -37
  15. package/.framework/cli/commands/test.ts +112 -68
  16. package/.framework/cli/commands/validate-app.ts +215 -121
  17. package/.framework/cli/context.ts +112 -130
  18. package/.framework/cli/env-loader.ts +47 -18
  19. package/.framework/cli/index.ts +81 -42
  20. package/.framework/docs/runtime-types.md +1024 -0
  21. package/.framework/functions/_shared/agent-runner.ts +1296 -961
  22. package/.framework/functions/_shared/app-manifest.ts +82 -68
  23. package/.framework/functions/_shared/audit.ts +135 -83
  24. package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
  25. package/.framework/functions/_shared/db.ts +80 -126
  26. package/.framework/functions/_shared/hash-api-key.ts +63 -0
  27. package/.framework/functions/_shared/index.ts +224 -335
  28. package/.framework/functions/_shared/kb.ts +319 -0
  29. package/.framework/functions/_shared/llm.ts +92 -0
  30. package/.framework/functions/_shared/logging.ts +288 -0
  31. package/.framework/functions/_shared/middleware.ts +329 -365
  32. package/.framework/functions/_shared/outcomes.ts +36 -0
  33. package/.framework/functions/_shared/permissions.ts +359 -643
  34. package/.framework/functions/_shared/pipeline-runner.ts +243 -316
  35. package/.framework/functions/_shared/principal.ts +376 -468
  36. package/.framework/functions/_shared/resolve-credentials.ts +102 -0
  37. package/.framework/functions/_shared/resolve-ids.ts +188 -16
  38. package/.framework/functions/_shared/retry-deliveries.ts +104 -0
  39. package/.framework/functions/_shared/schema-utils.ts +611 -373
  40. package/.framework/functions/_shared/testing.ts +207 -137
  41. package/.framework/functions/_shared/tracing.ts +276 -0
  42. package/.framework/functions/_shared/trigger-engine.ts +159 -211
  43. package/.framework/functions/_shared/webhook-registration.ts +95 -81
  44. package/.framework/functions/_shared/webhook-registry.ts +153 -75
  45. package/.framework/functions/account-nodes.ts +31 -53
  46. package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
  47. package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
  48. package/.framework/functions/adapters/openai-outbound.ts +40 -0
  49. package/.framework/functions/admin-data.ts +685 -537
  50. package/.framework/functions/admin-funnel.ts +31 -20
  51. package/.framework/functions/admin-install-funnel.ts +47 -28
  52. package/.framework/functions/admin-signals.ts +47 -29
  53. package/.framework/functions/ai-agents.ts +122 -147
  54. package/.framework/functions/ai-interactions.ts +180 -90
  55. package/.framework/functions/api-keys.ts +250 -192
  56. package/.framework/functions/apps.ts +203 -197
  57. package/.framework/functions/auth.ts +98 -91
  58. package/.framework/functions/cil-agent-ingest.ts +773 -0
  59. package/.framework/functions/cil-agent.ts +592 -0
  60. package/.framework/functions/cil-callmap.ts +1227 -0
  61. package/.framework/functions/cil-config.ts +583 -0
  62. package/.framework/functions/cil-context.ts +445 -0
  63. package/.framework/functions/cil-doc.ts +1752 -0
  64. package/.framework/functions/cil-embeddings.ts +1202 -0
  65. package/.framework/functions/cil-graph.ts +585 -0
  66. package/.framework/functions/cil-ingest.ts +2416 -0
  67. package/.framework/functions/cil-pipeline.ts +318 -0
  68. package/.framework/functions/cil-project.ts +499 -0
  69. package/.framework/functions/cil-validate.ts +469 -0
  70. package/.framework/functions/debug-auth.ts +73 -53
  71. package/.framework/functions/deliveries.ts +117 -0
  72. package/.framework/functions/embeddings.ts +528 -516
  73. package/.framework/functions/eval-harness.ts +158 -106
  74. package/.framework/functions/integration-outbound.ts +311 -0
  75. package/.framework/functions/integration-routes.ts +240 -466
  76. package/.framework/functions/integrations.ts +132 -140
  77. package/.framework/functions/invites.ts +401 -201
  78. package/.framework/functions/item-progress.ts +113 -53
  79. package/.framework/functions/kb.ts +28 -0
  80. package/.framework/functions/logs.ts +239 -222
  81. package/.framework/functions/observability.ts +308 -259
  82. package/.framework/functions/pipeline-executions.ts +179 -235
  83. package/.framework/functions/pipelines.ts +163 -205
  84. package/.framework/functions/prompt-configs.ts +109 -156
  85. package/.framework/functions/roles.ts +97 -147
  86. package/.framework/functions/system-cron.ts +132 -218
  87. package/.framework/functions/system.ts +112 -52
  88. package/.framework/functions/tests.ts +32 -28
  89. package/.framework/functions/timers.ts +162 -210
  90. package/.framework/functions/triggers.ts +282 -346
  91. package/.framework/functions/types.ts +283 -400
  92. package/.framework/migrations/001_core_schema.sql +630 -0
  93. package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
  94. package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
  95. package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
  96. package/.framework/migrations/005_core_observability.sql +598 -0
  97. package/.framework/migrations/006_security_hardening_rls.sql +97 -0
  98. package/.framework/migrations/007_kb_article_list.sql +237 -0
  99. package/.framework/migrations/008_items_target.sql +8 -0
  100. package/.framework/migrations/009_roles_slug_unique.sql +11 -0
  101. package/.framework/public/spine.config.json +91 -0
  102. package/.framework/scripts/app-install-cli.ts +112 -98
  103. package/.framework/src/App.tsx +67 -20
  104. package/.framework/src/apps/admin/index.tsx +97 -27
  105. package/.framework/src/components/AppWrapper.tsx +50 -11
  106. package/.framework/src/components/CustomAppLoader.tsx +131 -22
  107. package/.framework/src/components/admin/AdminListPage.tsx +75 -8
  108. package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
  109. package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
  110. package/.framework/src/components/admin/PageInstructions.tsx +49 -0
  111. package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
  112. package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
  113. package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
  114. package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
  115. package/.framework/src/components/app-sidebar.tsx +50 -3
  116. package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
  117. package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
  118. package/.framework/src/components/kb/KBArticleList.tsx +557 -0
  119. package/.framework/src/components/layout/AppShell.tsx +54 -16
  120. package/.framework/src/components/layout/Header.tsx +50 -38
  121. package/.framework/src/components/layout/Layout.tsx +48 -32
  122. package/.framework/src/components/layout/Sidebar.tsx +167 -16
  123. package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
  124. package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
  125. package/.framework/src/components/runtime/DataFilters.tsx +78 -1
  126. package/.framework/src/components/runtime/DataHeader.tsx +32 -29
  127. package/.framework/src/components/runtime/DataListPage.tsx +161 -2
  128. package/.framework/src/components/runtime/DataStats.tsx +48 -1
  129. package/.framework/src/components/runtime/DataTable.tsx +153 -1
  130. package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
  131. package/.framework/src/components/runtime/index.ts +16 -9
  132. package/.framework/src/components/search-form.tsx +33 -1
  133. package/.framework/src/components/shared/AgentView.tsx +48 -51
  134. package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
  135. package/.framework/src/components/shared/InviteManager.tsx +113 -52
  136. package/.framework/src/components/shared/MemberList.tsx +182 -0
  137. package/.framework/src/components/shared/SchemaFields.tsx +96 -78
  138. package/.framework/src/components/ui/DataTable.tsx +86 -56
  139. package/.framework/src/components/ui/Form.tsx +188 -109
  140. package/.framework/src/components/ui/ItemCard.tsx +86 -58
  141. package/.framework/src/components/ui/ItemListView.tsx +88 -61
  142. package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
  143. package/.framework/src/components/ui/Modal.tsx +81 -4
  144. package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
  145. package/.framework/src/components/ui/accordion.tsx +97 -5
  146. package/.framework/src/components/ui/alert-dialog.tsx +225 -13
  147. package/.framework/src/components/ui/alert.tsx +113 -6
  148. package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
  149. package/.framework/src/components/ui/avatar.tsx +129 -7
  150. package/.framework/src/components/ui/badge.tsx +65 -3
  151. package/.framework/src/components/ui/breadcrumb.tsx +145 -8
  152. package/.framework/src/components/ui/button-group.tsx +81 -4
  153. package/.framework/src/components/ui/button.tsx +49 -2
  154. package/.framework/src/components/ui/calendar.tsx +65 -3
  155. package/.framework/src/components/ui/card.tsx +145 -8
  156. package/.framework/src/components/ui/carousel.tsx +129 -7
  157. package/.framework/src/components/ui/chart.tsx +161 -10
  158. package/.framework/src/components/ui/checkbox.tsx +49 -2
  159. package/.framework/src/components/ui/collapsible.tsx +81 -5
  160. package/.framework/src/components/ui/combobox.tsx +305 -20
  161. package/.framework/src/components/ui/command.tsx +177 -11
  162. package/.framework/src/components/ui/context-menu.tsx +273 -17
  163. package/.framework/src/components/ui/dialog.tsx +209 -27
  164. package/.framework/src/components/ui/direction.tsx +64 -4
  165. package/.framework/src/components/ui/drawer.tsx +193 -12
  166. package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
  167. package/.framework/src/components/ui/empty.tsx +145 -9
  168. package/.framework/src/components/ui/field.tsx +209 -14
  169. package/.framework/src/components/ui/hover-card.tsx +81 -4
  170. package/.framework/src/components/ui/input-group.tsx +162 -10
  171. package/.framework/src/components/ui/input-otp.tsx +98 -5
  172. package/.framework/src/components/ui/input.tsx +49 -2
  173. package/.framework/src/components/ui/item.tsx +225 -13
  174. package/.framework/src/components/ui/kbd.tsx +65 -3
  175. package/.framework/src/components/ui/label.tsx +49 -2
  176. package/.framework/src/components/ui/menubar.tsx +289 -17
  177. package/.framework/src/components/ui/native-select.tsx +97 -5
  178. package/.framework/src/components/ui/navigation-menu.tsx +177 -10
  179. package/.framework/src/components/ui/pagination.tsx +161 -9
  180. package/.framework/src/components/ui/popover.tsx +145 -8
  181. package/.framework/src/components/ui/progress.tsx +49 -2
  182. package/.framework/src/components/ui/radio-group.tsx +65 -3
  183. package/.framework/src/components/ui/resizable.tsx +82 -4
  184. package/.framework/src/components/ui/scroll-area.tsx +65 -3
  185. package/.framework/src/components/ui/select.tsx +193 -11
  186. package/.framework/src/components/ui/separator.tsx +49 -2
  187. package/.framework/src/components/ui/sheet.tsx +193 -11
  188. package/.framework/src/components/ui/sidebar.tsx +481 -38
  189. package/.framework/src/components/ui/skeleton.tsx +49 -2
  190. package/.framework/src/components/ui/slider.tsx +49 -2
  191. package/.framework/src/components/ui/sonner.tsx +49 -2
  192. package/.framework/src/components/ui/spinner.tsx +49 -2
  193. package/.framework/src/components/ui/switch.tsx +49 -2
  194. package/.framework/src/components/ui/table-primitives.tsx +160 -33
  195. package/.framework/src/components/ui/table.tsx +161 -9
  196. package/.framework/src/components/ui/tabs.tsx +113 -6
  197. package/.framework/src/components/ui/textarea.tsx +49 -2
  198. package/.framework/src/components/ui/toggle-group.tsx +81 -4
  199. package/.framework/src/components/ui/toggle.tsx +65 -3
  200. package/.framework/src/components/ui/tooltip.tsx +97 -5
  201. package/.framework/src/contexts/AppContext.tsx +129 -45
  202. package/.framework/src/contexts/AuthContext.tsx +187 -144
  203. package/.framework/src/hooks/use-mobile.ts +48 -2
  204. package/.framework/src/hooks/useApi.ts +208 -159
  205. package/.framework/src/hooks/useAppPath.ts +32 -23
  206. package/.framework/src/hooks/useApps.ts +51 -20
  207. package/.framework/src/hooks/useEntityList.ts +32 -78
  208. package/.framework/src/hooks/useEntityRecord.ts +35 -96
  209. package/.framework/src/hooks/useForm.ts +32 -92
  210. package/.framework/src/hooks/useListSchema.ts +49 -78
  211. package/.framework/src/hooks/useSchemaRecord.ts +114 -105
  212. package/.framework/src/lib/api.ts +195 -116
  213. package/.framework/src/lib/supabase.ts +98 -64
  214. package/.framework/src/lib/utils.ts +287 -151
  215. package/.framework/src/main.tsx +49 -3
  216. package/.framework/src/pages/DashboardPage.tsx +52 -29
  217. package/.framework/src/pages/NotFoundPage.tsx +32 -10
  218. package/.framework/src/pages/SetupPage.tsx +32 -12
  219. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
  220. package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
  221. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
  222. package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
  223. package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
  224. package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
  225. package/.framework/src/pages/admin/AppsPage.tsx +49 -2
  226. package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
  227. package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
  228. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
  229. package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
  230. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
  231. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
  232. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
  233. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
  234. package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
  235. package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
  236. package/.framework/src/pages/admin/LogsPage.tsx +422 -75
  237. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
  238. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
  239. package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
  240. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
  241. package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
  242. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
  243. package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
  244. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
  245. package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
  246. package/.framework/src/pages/admin/RolesPage.tsx +171 -18
  247. package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
  248. package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
  249. package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
  250. package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
  251. package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
  252. package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
  253. package/.framework/src/pages/admin/TimersPage.tsx +48 -20
  254. package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
  255. package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
  256. package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
  257. package/.framework/src/pages/admin/TypesPage.tsx +48 -20
  258. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
  259. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
  260. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
  261. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
  262. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
  263. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
  264. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
  265. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
  266. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
  267. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  268. package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
  269. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
  270. package/.framework/src/pages/auth/LoginPage.tsx +50 -23
  271. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
  272. package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
  273. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
  274. package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
  275. package/.framework/src/types/auth.ts +128 -71
  276. package/.framework/src/types/types.ts +373 -157
  277. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
  278. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
  279. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
  280. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
  281. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
  282. package/docs/README.md +9 -130
  283. package/netlify.toml +5 -2
  284. package/package.json +13 -25
  285. package/scripts/kb-ingest-docs.ts +203 -0
  286. package/spine.config.json +65 -4
  287. package/.framework/migrations/001_schema.sql +0 -425
  288. package/.framework/migrations/002_rls_and_functions.sql +0 -763
  289. package/.framework/migrations/004_enhancements.sql +0 -43
  290. package/.framework/migrations/005_auth_user_trigger.sql +0 -105
  291. package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
  292. package/.framework/migrations/016_invites.sql +0 -27
  293. package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
  294. package/.framework/migrations/018_apps_required_roles.sql +0 -17
  295. package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
  296. package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
  297. package/.framework/migrations/021_app_domains.sql +0 -112
  298. package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
  299. package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
  300. package/.framework/migrations/024_messages_account_id.sql +0 -9
  301. package/.framework/migrations/025_retype_threads_messages.sql +0 -240
  302. package/.framework/migrations/026_fix_rls_policies.sql +0 -47
  303. package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
  304. package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
  305. package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
  306. package/.framework/migrations/030_messages_updated_by.sql +0 -6
  307. package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
  308. package/docs/APPS.md +0 -232
  309. package/docs/ARCHITECTURE.md +0 -246
  310. package/docs/INSTALL.md +0 -155
  311. package/docs/design-schema-spec.md +0 -1837
  312. package/docs/dev-guides/01-create-an-app.md +0 -183
  313. package/docs/dev-guides/02-create-a-function.md +0 -178
  314. package/docs/dev-guides/03-create-a-component.md +0 -178
  315. package/docs/dev-guides/04-webhook-handlers.md +0 -129
  316. package/docs/dev-guides/05-testing.md +0 -168
  317. package/docs/dev-guides/README.md +0 -40
  318. package/docs/npm-packages-plan.md +0 -288
  319. package/docs/spine-core--api-reference.md +0 -822
@@ -1,9 +1,42 @@
1
+
2
+
3
+
4
+
5
+ // CIL[BEGIN chunk_id="toggle_module_header_1783750525" type="module_header" identity="imports" parent="none"]
6
+ // CIL[DOC-MACRO purpose="Import dependencies for toggle UI components"]
7
+ // CIL[DOC-RESPONSIBILITY responsibility="Import React, CVA, Radix UI primitives, and utility functions"]
8
+ // CIL[DOC-CONTEXT module="toggle-ui" layer="ui-components" related_files="[\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
9
+ // CIL[DOC-CONTRACT inputs="none" outputs="React, cva, VariantProps, TogglePrimitive, cn" errors="none" side_effects="none"]
10
+ // CIL[DOC-MICRO logic_summary="Imports required libraries and utilities for toggle implementation" notable_decisions="[]"]
11
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
12
+ // CIL[DOC-STABILITY stability="stable"]
13
+ // CIL[DOC-AUDIENCE audience="developer"]
14
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/table-primitives.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, \."]
15
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
16
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
17
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
18
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
20
  import * as React from "react"
2
21
  import { cva, type VariantProps } from "class-variance-authority"
3
22
  import { Toggle as TogglePrimitive } from "radix-ui"
4
23
 
5
24
  import { cn } from "@/lib/utils"
6
-
25
+ // CIL[END chunk_id="toggle_module_header_1783750525"]
26
+ // CIL[BEGIN chunk_id="toggle_togglevariants_1783750525" type="const" identity="toggleVariants" parent="none"]
27
+ // CIL[DOC-MACRO purpose="Define styling variants for toggle component"]
28
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide CVA configuration for toggle styling with variants and sizes"]
29
+ // CIL[DOC-CONTEXT module="toggle-ui" layer="ui-components" related_files="[\".framework/src/components/ui/table-primitives.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
30
+ // CIL[DOC-CONTRACT inputs="none" outputs="cva config object" errors="none" side_effects="none"]
31
+ // CIL[DOC-MICRO logic_summary="Creates default/outline variants and sm/default/lg sizes with state-aware styling" notable_decisions="[]"]
32
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
33
+ // CIL[DOC-STABILITY stability="stable"]
34
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 2. Direct calls: 0. Related files: .framework/src/components/ui/table-primitives.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
35
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 2. Total affected: 2."]
36
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
37
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
38
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
39
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
7
40
  const toggleVariants = cva(
8
41
  "group/toggle inline-flex items-center justify-center gap-1 rounded-md text-xs font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
42
  {
@@ -25,7 +58,21 @@ const toggleVariants = cva(
25
58
  },
26
59
  }
27
60
  )
28
-
61
+ // CIL[END chunk_id="toggle_togglevariants_1783750525"]
62
+ // CIL[BEGIN chunk_id="toggle_toggle_1783750525" type="function" identity="Toggle" parent="none"]
63
+ // CIL[DOC-MACRO purpose="Toggle button component with variant and size support"]
64
+ // CIL[DOC-RESPONSIBILITY responsibility="Render toggle with Radix UI and CVA styling"]
65
+ // CIL[DOC-CONTEXT module="toggle-ui" layer="ui-components" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
66
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="none" side_effects="renders DOM"]
67
+ // CIL[DOC-MICRO logic_summary="Wraps Radix Root with variant and size-aware styling using toggleVariants" notable_decisions="[]"]
68
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
69
+ // CIL[DOC-STABILITY stability="stable"]
70
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
71
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
72
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
73
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
74
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
75
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
29
76
  function Toggle({
30
77
  className,
31
78
  variant = "default",
@@ -41,5 +88,20 @@ function Toggle({
41
88
  />
42
89
  )
43
90
  }
44
-
91
+ // CIL[END chunk_id="toggle_toggle_1783750525"]
92
+ // CIL[BEGIN chunk_id="toggle_export_1783750525" type="export" identity="export" parent="none"]
93
+ // CIL[DOC-MACRO purpose="Export toggle component and variants"]
94
+ // CIL[DOC-RESPONSIBILITY responsibility="Make toggle components available for import"]
95
+ // CIL[DOC-CONTEXT module="toggle-ui" layer="ui-components" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
96
+ // CIL[DOC-CONTRACT inputs="none" outputs="named exports" errors="none" side_effects="module exports"]
97
+ // CIL[DOC-MICRO logic_summary="Exports Toggle component and toggleVariants for external use" notable_decisions="[]"]
98
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
99
+ // CIL[DOC-STABILITY stability="stable"]
100
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
101
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
102
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
103
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
104
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
105
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
45
106
  export { Toggle, toggleVariants }
107
+ // CIL[END chunk_id="toggle_export_1783750525"]
@@ -1,10 +1,45 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ // CIL[BEGIN chunk_id="tooltip_module_header_1783750525" type="module_header" identity="imports" parent="none"]
8
+ // CIL[DOC-MACRO purpose="Import dependencies for tooltip UI components"]
9
+ // CIL[DOC-RESPONSIBILITY responsibility="Import React, Radix UI primitives, and utility functions"]
10
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
11
+ // CIL[DOC-CONTRACT inputs="none" outputs="React, TooltipPrimitive, cn" errors="none" side_effects="none"]
12
+ // CIL[DOC-MICRO logic_summary="Imports required libraries and utilities for tooltip implementation" notable_decisions="[]"]
13
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
14
+ // CIL[DOC-STABILITY stability="stable"]
15
+ // CIL[DOC-AUDIENCE audience="developer"]
16
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/layout/Sidebar.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, \."]
17
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
18
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
19
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
20
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
21
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
22
  "use client"
2
23
 
3
24
  import * as React from "react"
4
25
  import { Tooltip as TooltipPrimitive } from "radix-ui"
5
26
 
6
27
  import { cn } from "@/lib/utils"
7
-
28
+ // CIL[END chunk_id="tooltip_module_header_1783750525"]
29
+ // CIL[BEGIN chunk_id="tooltip_tooltipprovider_1783750525" type="function" identity="TooltipProvider" parent="none"]
30
+ // CIL[DOC-MACRO purpose="Provider for tooltip context with delay configuration"]
31
+ // CIL[DOC-RESPONSIBILITY responsibility="Render tooltip provider with customizable delay duration"]
32
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
33
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="none" side_effects="renders DOM"]
34
+ // CIL[DOC-MICRO logic_summary="Wraps Radix Provider with delay duration configuration" notable_decisions="[]"]
35
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
36
+ // CIL[DOC-STABILITY stability="stable"]
37
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/layout/Sidebar.tsx, .framework/functions/_shared/schema-utils.ts, \."]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
39
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
40
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
41
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
8
43
  function TooltipProvider({
9
44
  delayDuration = 0,
10
45
  ...props
@@ -17,19 +52,61 @@ function TooltipProvider({
17
52
  />
18
53
  )
19
54
  }
20
-
55
+ // CIL[END chunk_id="tooltip_tooltipprovider_1783750525"]
56
+ // CIL[BEGIN chunk_id="tooltip_tooltip_1783750525" type="function" identity="Tooltip" parent="none"]
57
+ // CIL[DOC-MACRO purpose="Root tooltip container component"]
58
+ // CIL[DOC-RESPONSIBILITY responsibility="Render tooltip root with data attribute"]
59
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/portal/pages/CoursesPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
60
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="none" side_effects="renders DOM"]
61
+ // CIL[DOC-MICRO logic_summary="Wraps Radix Root with tooltip data slot" notable_decisions="[]"]
62
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
+ // CIL[DOC-STABILITY stability="stable"]
64
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/layout/Sidebar.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/portal/pages/CoursesPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
65
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
66
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
68
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
70
  function Tooltip({
22
71
  ...props
23
72
  }: React.ComponentProps<typeof TooltipPrimitive.Root>) {
24
73
  return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
25
74
  }
26
-
75
+ // CIL[END chunk_id="tooltip_tooltip_1783750525"]
76
+ // CIL[BEGIN chunk_id="tooltip_tooltiptrigger_1783750525" type="function" identity="TooltipTrigger" parent="none"]
77
+ // CIL[DOC-MACRO purpose="Tooltip trigger element for hover/focus interaction"]
78
+ // CIL[DOC-RESPONSIBILITY responsibility="Render trigger with data attribute for tooltip activation"]
79
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
80
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="none" side_effects="renders DOM"]
81
+ // CIL[DOC-MICRO logic_summary="Wraps Radix Trigger with tooltip data slot" notable_decisions="[]"]
82
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
83
+ // CIL[DOC-STABILITY stability="stable"]
84
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/layout/Sidebar.tsx, .framework/functions/_shared/schema-utils.ts, \."]
85
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
86
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
87
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
88
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
89
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
27
90
  function TooltipTrigger({
28
91
  ...props
29
92
  }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
30
93
  return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
31
94
  }
32
-
95
+ // CIL[END chunk_id="tooltip_tooltiptrigger_1783750525"]
96
+ // CIL[BEGIN chunk_id="tooltip_tooltipcontent_1783750525" type="function" identity="TooltipContent" parent="none"]
97
+ // CIL[DOC-MACRO purpose="Tooltip content panel with portal and animations"]
98
+ // CIL[DOC-RESPONSIBILITY responsibility="Render tooltip content with portal, styling, and arrow"]
99
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/portal/pages/CoursesPage.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
100
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="none" side_effects="renders DOM"]
101
+ // CIL[DOC-MICRO logic_summary="Wraps Radix Content with portal, animations, and arrow styling" 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: ui-components. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/portal/pages/CoursesPage.tsx, .framework/src/components/layout/Sidebar.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
105
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
106
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
107
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
108
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
109
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
33
110
  function TooltipContent({
34
111
  className,
35
112
  sideOffset = 0,
@@ -53,5 +130,20 @@ function TooltipContent({
53
130
  </TooltipPrimitive.Portal>
54
131
  )
55
132
  }
56
-
133
+ // CIL[END chunk_id="tooltip_tooltipcontent_1783750525"]
134
+ // CIL[BEGIN chunk_id="tooltip_export_1783750525" type="export" identity="export" parent="none"]
135
+ // CIL[DOC-MACRO purpose="Export all tooltip components"]
136
+ // CIL[DOC-RESPONSIBILITY responsibility="Make tooltip components available for import"]
137
+ // CIL[DOC-CONTEXT module="tooltip-ui" layer="ui-components" related_files="[]"]
138
+ // CIL[DOC-CONTRACT inputs="none" outputs="named exports" errors="none" side_effects="module exports"]
139
+ // CIL[DOC-MICRO logic_summary="Exports Tooltip, TooltipContent, TooltipProvider, and TooltipTrigger" notable_decisions="[]"]
140
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
141
+ // CIL[DOC-STABILITY stability="stable"]
142
+ // CIL[DOC-VECTOR type="context" content="Layer: ui-components. Direct callers: 0. Direct calls: 0. Related files: none."]
143
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
144
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
145
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
146
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
147
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
57
148
  export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }
149
+ // CIL[END chunk_id="tooltip_export_1783750525"]
@@ -1,20 +1,50 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+ // CIL[BEGIN chunk_id="AppContext_module_header_1783749485" type="module_header" identity="module_header" parent="none"]
10
+ // CIL[DOC-MACRO purpose="Module imports and type definitions"]
11
+ // CIL[DOC-RESPONSIBILITY responsibility="Define React context types and import dependencies"]
12
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-context" 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\",\".framework/functions/_shared/db.ts\",\"\\\"]"]
13
+ // CIL[DOC-CONTRACT inputs="none" outputs="type definitions" errors="none" side_effects="none"]
14
+ // CIL[DOC-MICRO logic_summary="Sets up imports and context interfaces for app management" notable_decisions="[]"]
15
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
16
+ // CIL[DOC-STABILITY stability="stable"]
17
+ // CIL[DOC-AUDIENCE audience="developer"]
18
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-context. 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, .framework/functions/_shared/db.ts, \."]
19
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
20
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
21
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
22
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
23
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
24
  import React, { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react'
2
25
  import { AppRecord } from '../hooks/useApps'
3
26
  import { apiFetch } from '../lib/api'
4
27
  import { useAuth } from './AuthContext'
5
-
6
- // ─── Current App Context (per-route) ───────────────────────────────────────────
7
-
8
28
  interface AppContextType {
9
29
  app: AppRecord
10
30
  }
11
31
 
12
32
  const AppContext = createContext<AppContextType | undefined>(undefined)
13
-
14
- /**
15
- * Returns the current app record from the nearest AppProvider.
16
- * Must be called inside an AppProvider (i.e., inside an app route).
17
- */
33
+ // CIL[END chunk_id="AppContext_module_header_1783749485"]
34
+ // CIL[BEGIN chunk_id="AppContext_usecurrentapp_1783749485" type="function" identity="useCurrentApp" parent="none"]
35
+ // CIL[DOC-MACRO purpose="Access current app from context"]
36
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide current app record to components"]
37
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-hook" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
38
+ // CIL[DOC-CONTRACT inputs="none" outputs="AppRecord" errors="throws if no provider" side_effects="none"]
39
+ // CIL[DOC-MICRO logic_summary="Returns app from React context with safety check" notable_decisions="[]"]
40
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
41
+ // CIL[DOC-STABILITY stability="stable"]
42
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 1. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
43
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 8."]
44
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
45
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
46
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
48
  export function useCurrentApp(): AppRecord {
19
49
  const context = useContext(AppContext)
20
50
  if (context === undefined) {
@@ -22,15 +52,40 @@ export function useCurrentApp(): AppRecord {
22
52
  }
23
53
  return context.app
24
54
  }
25
-
55
+ // CIL[END chunk_id="AppContext_usecurrentapp_1783749485"]
56
+ // CIL[BEGIN chunk_id="AppContext_appproviderprops_1783749485" type="interface" identity="AppProviderProps" parent="none"]
57
+ // CIL[DOC-MACRO purpose="Define provider props interface"]
58
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AppProvider component"]
59
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-types" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
60
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
61
+ // CIL[DOC-MICRO logic_summary="Simple props interface with app and children" notable_decisions="[]"]
62
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
+ // CIL[DOC-STABILITY stability="stable"]
64
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
65
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
66
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
68
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
26
70
  interface AppProviderProps {
27
71
  app: AppRecord
28
72
  children: React.ReactNode
29
73
  }
30
-
31
- /**
32
- * Provides the current app record to all descendants via useCurrentApp().
33
- */
74
+ // CIL[END chunk_id="AppContext_appproviderprops_1783749485"]
75
+ // CIL[BEGIN chunk_id="AppContext_appprovider_1783749485" type="function" identity="AppProvider" parent="none"]
76
+ // CIL[DOC-MACRO purpose="Provide current app context"]
77
+ // CIL[DOC-RESPONSIBILITY responsibility="Wrap components with app context"]
78
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-provider" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
79
+ // CIL[DOC-CONTRACT inputs="none" outputs="Provider component" errors="none" side_effects="context provider"]
80
+ // CIL[DOC-MICRO logic_summary="Simple React context provider wrapper" notable_decisions="[]"]
81
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
82
+ // CIL[DOC-STABILITY stability="stable"]
83
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-provider. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
84
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
85
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
86
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
87
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
88
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
34
89
  export function AppProvider({ app, children }: AppProviderProps) {
35
90
  return (
36
91
  <AppContext.Provider value={{ app }}>
@@ -38,9 +93,21 @@ export function AppProvider({ app, children }: AppProviderProps) {
38
93
  </AppContext.Provider>
39
94
  )
40
95
  }
41
-
42
- // ─── Apps Registry Context (global, fetch-once) ─────────────────────────────
43
-
96
+ // CIL[END chunk_id="AppContext_appprovider_1783749485"]
97
+ // CIL[BEGIN chunk_id="AppContext_appsregistrycontexttype_1783749485" type="interface" identity="AppsRegistryContextType" parent="none"]
98
+ // CIL[DOC-MACRO purpose="Define apps registry context type"]
99
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for apps registry context"]
100
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-types" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
101
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
102
+ // CIL[DOC-MICRO logic_summary="Defines shape of apps registry context with apps list and loading state" notable_decisions="[]"]
103
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
104
+ // CIL[DOC-STABILITY stability="stable"]
105
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
106
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
107
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
108
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
109
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
110
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
44
111
  interface AppsRegistryContextType {
45
112
  apps: AppRecord[]
46
113
  routableApps: AppRecord[]
@@ -50,12 +117,21 @@ interface AppsRegistryContextType {
50
117
  }
51
118
 
52
119
  const AppsRegistryContext = createContext<AppsRegistryContextType | undefined>(undefined)
53
-
54
- /**
55
- * Returns the global apps registry (all accessible apps for this user).
56
- * Fetches once on mount after auth, cached for the session.
57
- * Use this instead of useApps() to avoid per-page refetches.
58
- */
120
+ // CIL[END chunk_id="AppContext_appsregistrycontexttype_1783749485"]
121
+ // CIL[BEGIN chunk_id="AppContext_useappsregistry_1783749485" type="function" identity="useAppsRegistry" parent="none"]
122
+ // CIL[DOC-MACRO purpose="Access apps registry from context"]
123
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide apps registry data to components"]
124
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-hook" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
125
+ // CIL[DOC-CONTRACT inputs="none" outputs="AppsRegistryContextType" errors="throws if no provider" side_effects="none"]
126
+ // CIL[DOC-MICRO logic_summary="Returns apps registry context with safety check" notable_decisions="[]"]
127
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
128
+ // CIL[DOC-STABILITY stability="stable"]
129
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 1. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
130
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
131
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
132
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
133
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
134
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
59
135
  export function useAppsRegistry(): AppsRegistryContextType {
60
136
  const context = useContext(AppsRegistryContext)
61
137
  if (context === undefined) {
@@ -63,31 +139,45 @@ export function useAppsRegistry(): AppsRegistryContextType {
63
139
  }
64
140
  return context
65
141
  }
66
-
142
+ // CIL[END chunk_id="AppContext_useappsregistry_1783749485"]
143
+ // CIL[BEGIN chunk_id="AppContext_appsregistryproviderprops_1783749485" type="interface" identity="AppsRegistryProviderProps" parent="none"]
144
+ // CIL[DOC-MACRO purpose="Define registry provider props interface"]
145
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AppsRegistryProvider component"]
146
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-types" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
147
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
148
+ // CIL[DOC-MICRO logic_summary="Simple props interface with only children" notable_decisions="[]"]
149
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
150
+ // CIL[DOC-STABILITY stability="stable"]
151
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
152
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
153
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
154
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
155
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
156
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
67
157
  interface AppsRegistryProviderProps {
68
158
  children: React.ReactNode
69
159
  }
70
-
71
- /**
72
- * Fetches accessible apps for the current user and provides them globally.
73
- *
74
- * Role-based filtering is done server-side by the `get_account_apps` RPC
75
- * (migration 020). The client trusts the backend response and only filters
76
- * for routability (has a route_prefix and a renderer) and the current
77
- * environment's domain (preview_domain or prod_domain, selected by
78
- * `VITE_ENVIRONMENT`).
79
- *
80
- * Uses an AbortController to cancel in-flight fetches when dependencies
81
- * change, preventing interleaved responses from stale requests.
82
- */
160
+ // CIL[END chunk_id="AppContext_appsregistryproviderprops_1783749485"]
161
+ // CIL[BEGIN chunk_id="AppContext_appsregistryprovider_1783749485" type="function" identity="AppsRegistryProvider" parent="none"]
162
+ // CIL[DOC-MACRO purpose="Fetch and provide apps registry"]
163
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage apps registry state and API calls"]
164
+ // CIL[DOC-CONTEXT module="AppContext" layer="frontend-provider" related_files="[]"]
165
+ // CIL[DOC-CONTRACT inputs="none" outputs="Provider component" errors="network errors" side_effects="API calls, state updates"]
166
+ // CIL[DOC-MICRO logic_summary="Fetches apps list, filters by domain, provides registry context" notable_decisions="[]"]
167
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
168
+ // CIL[DOC-STABILITY stability="stable"]
169
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-provider. Direct callers: 0. Direct calls: 0. Related files: none."]
170
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
171
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
172
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
173
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
174
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
83
175
  export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
84
176
  const { user } = useAuth()
85
177
  const [apps, setApps] = useState<AppRecord[]>([])
86
178
  const [loading, setLoading] = useState(true)
87
179
  const [error, setError] = useState<string | null>(null)
88
180
  const abortRef = useRef<AbortController | null>(null)
89
- // Track which user the current `apps` + `loading` state belongs to.
90
- // When user changes, we know to treat state as stale until the new fetch lands.
91
181
  const loadedForUserRef = useRef<string | null>(null)
92
182
 
93
183
  const fetchApps = useCallback(async (signal?: AbortSignal) => {
@@ -111,7 +201,6 @@ export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
111
201
  const data = await response.json()
112
202
  if (data.error) throw new Error(data.error)
113
203
 
114
- // Backend already filters by role — no client-side role check needed
115
204
  const allApps: AppRecord[] = data.data || data || []
116
205
  setApps(allApps)
117
206
  loadedForUserRef.current = user.id
@@ -124,11 +213,8 @@ export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
124
213
  }
125
214
  }, [user])
126
215
 
127
- // Fetch when user identity or roles change.
128
- // Abort any in-flight request before starting a new one.
129
216
  const rolesKey = user?.roles?.join(',') || ''
130
217
  useEffect(() => {
131
- // Cancel previous fetch
132
218
  abortRef.current?.abort()
133
219
  const controller = new AbortController()
134
220
  abortRef.current = controller
@@ -138,8 +224,6 @@ export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
138
224
  return () => controller.abort()
139
225
  }, [user?.id, user?.account_id, rolesKey, fetchApps])
140
226
 
141
- // Derive effective loading: if user changed but we haven't fetched for them
142
- // yet (effect hasn't fired), treat as loading to prevent 404 flash.
143
227
  const effectiveLoading = loading || (!!user && loadedForUserRef.current !== user.id)
144
228
 
145
229
  const environment = (import.meta.env.VITE_ENVIRONMENT as string) || 'prod'
@@ -148,7 +232,6 @@ export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
148
232
  const appMatchesDomain = (app: AppRecord): boolean => {
149
233
  const domain = environment === 'preview' ? app.preview_domain : app.prod_domain
150
234
  if (!domain) return true
151
- // Accept both "hostname.com" and "https://hostname.com" formats
152
235
  const hostname = domain.includes('://') ? new URL(domain).hostname : domain.split(':')[0]
153
236
  return currentHost === hostname
154
237
  }
@@ -170,3 +253,4 @@ export function AppsRegistryProvider({ children }: AppsRegistryProviderProps) {
170
253
  </AppsRegistryContext.Provider>
171
254
  )
172
255
  }
256
+ // CIL[END chunk_id="AppContext_appsregistryprovider_1783749485"]