spine-framework 0.3.125 → 0.3.127

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 +169 -97
  6. package/.framework/cli/commands/generate.ts +82 -161
  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} +147 -54
  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 +222 -347
  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 +162 -14
  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 +687 -533
  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 +173 -145
  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 +192 -115
  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 +3 -3
  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,43 @@
1
+
2
+
3
+
4
+
5
+
6
+ // CIL[BEGIN chunk_id="genericappshell_module_header_1783930597" type="module_header" identity="imports" parent="none"]
7
+ // CIL[DOC-MACRO purpose="Import React hooks and routing components for app shell"]
8
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide state management and routing dependencies"]
9
+ // CIL[DOC-CONTEXT module="generic-app-shell" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
10
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
11
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, routing components, and app-specific pages" notable_decisions="[]"]
12
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
13
+ // CIL[DOC-STABILITY stability="stable"]
14
+ // CIL[DOC-AUDIENCE audience="developer"]
15
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/components/ui/dialog.tsx, \."]
16
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
17
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
18
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
19
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
21
  import { useState } from 'react'
2
22
  import { Routes, Route, Navigate, useNavigate, useLocation } from 'react-router-dom'
3
23
  import { AppRecord } from '../../hooks/useApps'
4
24
  import { GenericListPage } from './GenericListPage'
5
25
  import { GenericDetailPage } from './GenericDetailPage'
6
-
26
+ // CIL[END chunk_id="genericappshell_module_header_1783930597"]
27
+ // CIL[BEGIN chunk_id="genericappshell_navitem_1783930597" type="interface" identity="NavItem" parent="none"]
28
+ // CIL[DOC-MACRO purpose="Define navigation item structure for app shell"]
29
+ // CIL[DOC-RESPONSIBILITY responsibility="Specify navigation properties and routing metadata"]
30
+ // CIL[DOC-CONTEXT module="generic-app-shell" layer="frontend-component" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
31
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type definition" errors="none" side_effects="none"]
32
+ // CIL[DOC-MICRO logic_summary="Interface with id, label, path, and optional type/view metadata" notable_decisions="[]"]
33
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
34
+ // CIL[DOC-STABILITY stability="stable"]
35
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
36
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
37
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
38
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
40
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
7
41
  interface NavItem {
8
42
  id: string
9
43
  label: string
@@ -13,16 +47,39 @@ interface NavItem {
13
47
  view?: string
14
48
  min_role?: string
15
49
  }
16
-
50
+ // CIL[END chunk_id="genericappshell_navitem_1783930597"]
51
+ // CIL[BEGIN chunk_id="genericappshell_genericappshellprops_1783930597" type="interface" identity="GenericAppShellProps" parent="none"]
52
+ // CIL[DOC-MACRO purpose="Define props interface for generic app shell component"]
53
+ // CIL[DOC-RESPONSIBILITY responsibility="Specify app configuration input for shell"]
54
+ // CIL[DOC-CONTEXT module="generic-app-shell" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
55
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type definition" errors="none" side_effects="none"]
56
+ // CIL[DOC-MICRO logic_summary="Simple interface requiring app record with navigation configuration" notable_decisions="[]"]
57
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
58
+ // CIL[DOC-STABILITY stability="stable"]
59
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
60
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
61
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
62
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
63
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
64
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
17
65
  interface GenericAppShellProps {
18
66
  app: AppRecord
19
67
  }
20
-
21
- /**
22
- * Data-driven app shell. Reads nav_items from the app record to build
23
- * a sidebar and child routes. Each nav entry with a type_slug renders
24
- * a GenericListPage (at path) and GenericDetailPage (at path/:id).
25
- */
68
+ // CIL[END chunk_id="genericappshell_genericappshellprops_1783930597"]
69
+ // CIL[BEGIN chunk_id="genericappshell_genericappshell_1783930597" type="function" identity="GenericAppShell" parent="none"]
70
+ // CIL[DOC-MACRO purpose="Data-driven app shell with sidebar navigation and routing"]
71
+ // CIL[DOC-RESPONSIBILITY responsibility="Create complete app layout from app configuration"]
72
+ // CIL[DOC-CONTEXT module="generic-app-shell" layer="frontend-component" 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\",\"\\\"]"]
73
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX app shell with routes" errors="none" side_effects="Renders navigation, handles routing, manages sidebar state"]
74
+ // CIL[DOC-MICRO logic_summary="Builds sidebar from nav_items, generates routes for list/detail pages, handles mobile responsiveness" notable_decisions="[]"]
75
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
76
+ // CIL[DOC-STABILITY stability="stable"]
77
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. 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, \."]
78
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
79
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
80
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
81
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
82
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
26
83
  export function GenericAppShell({ app }: GenericAppShellProps) {
27
84
  const navigate = useNavigate()
28
85
  const location = useLocation()
@@ -30,10 +87,10 @@ export function GenericAppShell({ app }: GenericAppShellProps) {
30
87
 
31
88
  const navItems: NavItem[] = (app.nav_items || []) as NavItem[]
32
89
 
33
- // Derive relative paths from app's route_prefix
90
+
34
91
  const prefix = app.route_prefix || `/${app.slug}`
35
92
 
36
- // Check if a nav item is active
93
+
37
94
  const isActive = (item: NavItem) => {
38
95
  const fullPath = item.path.startsWith('/') ? item.path : `${prefix}/${item.path}`
39
96
  return location.pathname.startsWith(fullPath)
@@ -120,7 +177,7 @@ export function GenericAppShell({ app }: GenericAppShellProps) {
120
177
 
121
178
  {/* Generate list + detail routes for each nav item with type_slug */}
122
179
  {navItems.filter(item => item.type_slug).map(item => {
123
- // Strip leading prefix to get relative route path
180
+
124
181
  const relativePath = item.path.startsWith(prefix)
125
182
  ? item.path.slice(prefix.length).replace(/^\//, '')
126
183
  : item.path.replace(/^\//, '')
@@ -179,3 +236,4 @@ export function GenericAppShell({ app }: GenericAppShellProps) {
179
236
  </div>
180
237
  )
181
238
  }
239
+ // CIL[END chunk_id="genericappshell_genericappshell_1783930597"]
@@ -1,20 +1,64 @@
1
+
2
+
3
+
4
+
5
+ // CIL[BEGIN chunk_id="genericdetailpage_module_header_1783930597" type="module_header" identity="imports" parent="none"]
6
+ // CIL[DOC-MACRO purpose="Import React hooks and routing components for detail page"]
7
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide state management and navigation dependencies"]
8
+ // CIL[DOC-CONTEXT module="generic-detail-page" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
9
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
10
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, routing components, and entity record hook" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
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 { useState, useEffect } from 'react'
2
21
  import { useParams, useSearchParams, useNavigate } from 'react-router-dom'
3
22
  import { useEntityRecord } from '../../hooks/useEntityRecord'
4
23
  import { DataDetailHeader } from '../runtime/DataDetailHeader'
5
24
  import { SchemaDetailForm } from '../runtime/SchemaDetailForm'
6
-
25
+ // CIL[END chunk_id="genericdetailpage_module_header_1783930597"]
26
+ // CIL[BEGIN chunk_id="genericdetailpage_genericdetailpageprops_1783930597" type="interface" identity="GenericDetailPageProps" parent="none"]
27
+ // CIL[DOC-MACRO purpose="Define props interface for generic detail page component"]
28
+ // CIL[DOC-RESPONSIBILITY responsibility="Specify configuration for schema-driven detail display"]
29
+ // CIL[DOC-CONTEXT module="generic-detail-page" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
30
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type definition" errors="none" side_effects="none"]
31
+ // CIL[DOC-MICRO logic_summary="Interface with type slug, optional view, and creation mode flag" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
35
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
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
  interface GenericDetailPageProps {
8
41
  typeSlug: string
9
42
  viewSlug?: string
10
43
  isCreating?: boolean
11
44
  }
12
-
13
- /**
14
- * Schema-driven detail page for the Generic App Shell.
15
- * Reuses the same runtime components as admin (DataDetailHeader, SchemaDetailForm)
16
- * but scoped to a specific type from the app's nav_items.
17
- */
45
+ // CIL[END chunk_id="genericdetailpage_genericdetailpageprops_1783930597"]
46
+ // CIL[BEGIN chunk_id="genericdetailpage_genericdetailpage_1783930597" type="function" identity="GenericDetailPage" parent="none"]
47
+ // CIL[DOC-LEARNING topic="runtime-type:generic/detail_view" content="GenericDetailPage renders record.design_schema.views.default_detail.sections. Each section has a title and a fields map. field.system=true means the value is read from the record row; otherwise from record.data. FieldRenderer uses field.data_type and the view's display_type to choose the widget."]
48
+ // CIL[DOC-NOTE type="design_schema_caveat" content="Without views.default_detail or fields missing from the schema, the detail page will be blank. The page falls back to useSchemaRecord defaults only for new records."]
49
+ // CIL[DOC-MACRO purpose="Schema-driven detail page with form for create/edit/view"]
50
+ // CIL[DOC-RESPONSIBILITY responsibility="Handle CRUD operations and form state for entity records"]
51
+ // CIL[DOC-CONTEXT module="generic-detail-page" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
52
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX detail page with form" errors="Loading/saving errors" side_effects="Data fetching, form state management, navigation"]
53
+ // CIL[DOC-MICRO logic_summary="Manages record CRUD, form state, edit modes, renders runtime components" notable_decisions="[]"]
54
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
55
+ // CIL[DOC-STABILITY stability="stable"]
56
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
57
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
58
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
59
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
60
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
61
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
62
  export function GenericDetailPage({ typeSlug, viewSlug, isCreating: forceCreate }: GenericDetailPageProps) {
19
63
  const { id } = useParams<{ id: string }>()
20
64
  const navigate = useNavigate()
@@ -48,21 +92,21 @@ export function GenericDetailPage({ typeSlug, viewSlug, isCreating: forceCreate
48
92
  deleting
49
93
  } = useEntityRecord('items', id, config)
50
94
 
51
- // Extract schema and view from the record itself
95
+
52
96
  const schema = record?.design_schema || null
53
97
  const resolvedDetailView = viewSlug
54
98
  ? schema?.views?.[viewSlug] || schema?.views?.default_detail
55
99
  : schema?.views?.default_detail
56
100
  const view = resolvedDetailView || null
57
101
 
58
- // Derive display title
102
+
59
103
  const displayField = schema?.display_field || config.displayField
60
104
  const FALLBACK_FIELDS = ['full_name', 'display_name', 'name', 'title', 'slug', 'email']
61
105
  const recordTitle = record?.[displayField]
62
106
  ?? FALLBACK_FIELDS.map(f => record?.[f]).find(v => v != null)
63
107
  ?? 'Untitled'
64
108
 
65
- // Lifted form state
109
+
66
110
  const [formData, setFormData] = useState<Record<string, any>>({})
67
111
 
68
112
  useEffect(() => {
@@ -198,3 +242,4 @@ export function GenericDetailPage({ typeSlug, viewSlug, isCreating: forceCreate
198
242
  </div>
199
243
  )
200
244
  }
245
+ // CIL[END chunk_id="genericdetailpage_genericdetailpage_1783930597"]
@@ -1,32 +1,77 @@
1
+
2
+
3
+
4
+
5
+ // CIL[BEGIN chunk_id="genericlistpage_module_header_1783930597" type="module_header" identity="imports" parent="none"]
6
+ // CIL[DOC-MACRO purpose="Import hooks and runtime components for generic list page"]
7
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide data fetching and UI rendering dependencies"]
8
+ // CIL[DOC-CONTEXT module="generic-list-page" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
9
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
10
+ // CIL[DOC-MICRO logic_summary="Imports schema hook, entity list hook, and runtime UI components" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
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 { useListSchema } from '../../hooks/useListSchema'
2
21
  import { useEntityList } from '../../hooks/useEntityList'
3
22
  import { DataHeader } from '../runtime/DataHeader'
4
23
  import { DataStats } from '../runtime/DataStats'
5
24
  import { DataFilters } from '../runtime/DataFilters'
6
25
  import { DataTable } from '../runtime/DataTable'
7
-
26
+ import { PageInstructions } from '../admin/PageInstructions'
27
+ // CIL[END chunk_id="genericlistpage_module_header_1783930597"]
28
+ // CIL[BEGIN chunk_id="genericlistpage_genericlistpageprops_1783930597" type="interface" identity="GenericListPageProps" parent="none"]
29
+ // CIL[DOC-MACRO purpose="Define props interface for generic list page component"]
30
+ // CIL[DOC-RESPONSIBILITY responsibility="Specify configuration for schema-driven list display"]
31
+ // CIL[DOC-CONTEXT module="generic-list-page" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
32
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type definition" errors="none" side_effects="none"]
33
+ // CIL[DOC-MICRO logic_summary="Interface with type slug, view configuration, and routing paths" notable_decisions="[]"]
34
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
35
+ // CIL[DOC-STABILITY stability="stable"]
36
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
37
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
38
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
39
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
40
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
41
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
8
42
  interface GenericListPageProps {
9
43
  typeSlug: string
10
44
  viewSlug?: string
11
45
  appPrefix: string
12
46
  detailPath: string
13
47
  }
14
-
15
- /**
16
- * Schema-driven list page for the Generic App Shell.
17
- * Resolves the type's design_schema and renders using the specified view
18
- * (or default_list if not specified).
19
- */
48
+ // CIL[END chunk_id="genericlistpage_genericlistpageprops_1783930597"]
49
+ // CIL[BEGIN chunk_id="genericlistpage_genericlistpage_1783930597" type="function" identity="GenericListPage" parent="none"]
50
+ // CIL[DOC-LEARNING topic="runtime-type:generic/list_view" content="GenericListPage uses record.design_schema.views.default_list with type list and display table/card/board. It reads fields map for display_type, sortable, and searchable. It also uses default_sort, stats, filters, and group_by when present."]
51
+ // CIL[DOC-NOTE type="design_schema_caveat" content="A missing default_list view causes the list to render no columns unless useListSchema falls back to the types table. display_type must be one FieldRenderer recognizes or the cell falls back to text."]
52
+ // CIL[DOC-MACRO purpose="Schema-driven list page with data table and filters"]
53
+ // CIL[DOC-RESPONSIBILITY responsibility="Render list view based on type schema and view configuration"]
54
+ // CIL[DOC-CONTEXT module="generic-list-page" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
55
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX list page with data table" errors="Schema loading errors" side_effects="Data fetching, renders UI components"]
56
+ // CIL[DOC-MICRO logic_summary="Resolves schema and view, builds config, fetches data, renders runtime components" notable_decisions="[]"]
57
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
58
+ // CIL[DOC-STABILITY stability="stable"]
59
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
60
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
61
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
62
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
63
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
64
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
65
  export function GenericListPage({ typeSlug, viewSlug, appPrefix, detailPath }: GenericListPageProps) {
21
66
  const resolvedViewSlug = viewSlug || 'default_list'
22
67
 
23
- // Resolve schema and view — uses the same hook as admin runtime
68
+
24
69
  const { schema, view, loading: schemaLoading, error: schemaError } = useListSchema({
25
70
  entity: 'items',
26
71
  viewSlug: resolvedViewSlug
27
72
  })
28
73
 
29
- // Build config from resolved schema + view
74
+
30
75
  const config = view && schema ? {
31
76
  entity: 'items',
32
77
  typeSlug,
@@ -86,6 +131,27 @@ export function GenericListPage({ typeSlug, viewSlug, appPrefix, detailPath }: G
86
131
  newButtonHref={`${appPrefix}/${detailPath}/new`}
87
132
  />
88
133
 
134
+ <PageInstructions
135
+ sections={[
136
+ {
137
+ title: 'What this page is for',
138
+ content: `This page lists all ${typeSlug} records for this app. It displays the stored records, their field values, and current status based on the app type schema.`,
139
+ },
140
+ {
141
+ title: 'How to find records',
142
+ content: `Use the filters above the table to narrow results. Click any column header to sort ascending or descending. The available columns and filters are defined by the type's design schema.`,
143
+ },
144
+ {
145
+ title: 'How to create, view, and edit records',
146
+ content: `Click the New button in the top-right to create a new ${typeSlug}. Click any row to open its detail view. From the detail view you can edit field values or delete the record. Permissions may restrict which actions are available to your role.`,
147
+ },
148
+ {
149
+ title: 'Understanding the stats',
150
+ content: `The cards above the table show summary counts and key metrics for this record type. Use them to quickly assess volume and status before drilling into the list.`,
151
+ },
152
+ ]}
153
+ />
154
+
89
155
  <DataStats
90
156
  stats={config.list.stats}
91
157
  data={data}
@@ -114,3 +180,4 @@ export function GenericListPage({ typeSlug, viewSlug, appPrefix, detailPath }: G
114
180
  </div>
115
181
  )
116
182
  }
183
+ // CIL[END chunk_id="genericlistpage_genericlistpage_1783930597"]
@@ -1,3 +1,22 @@
1
+
2
+
3
+
4
+
5
+ // CIL[BEGIN chunk_id="app-sidebar_module_header_1783930597" type="module_header" identity="imports" parent="none"]
6
+ // CIL[DOC-MACRO purpose="Import React and UI components for sidebar navigation"]
7
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for the sidebar component"]
8
+ // CIL[DOC-CONTEXT module="app-sidebar" layer="frontend-component" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
9
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
10
+ // CIL[DOC-MICRO logic_summary="Imports React, UI components, and icons needed for sidebar" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
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
 
3
22
  import { SearchForm } from "./search-form"
@@ -20,8 +39,21 @@ import {
20
39
  SidebarRail,
21
40
  } from "./ui/sidebar"
22
41
  import { GalleryVerticalEndIcon, PlusIcon, MinusIcon } from "lucide-react"
23
-
24
- // This is sample data.
42
+ // CIL[END chunk_id="app-sidebar_module_header_1783930597"]
43
+ // CIL[BEGIN chunk_id="app-sidebar_data_1783930597" type="constant" identity="data" parent="none"]
44
+ // CIL[DOC-MACRO purpose="Define navigation structure for documentation sidebar"]
45
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide hierarchical navigation data with sections and items"]
46
+ // CIL[DOC-CONTEXT module="app-sidebar" layer="frontend-component" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
47
+ // CIL[DOC-CONTRACT inputs="none" outputs="Navigation data object" errors="none" side_effects="none"]
48
+ // CIL[DOC-MICRO logic_summary="Static navigation tree with Getting Started, Build Your Application, API Reference, Architecture, and Community sections" notable_decisions="[]"]
49
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
50
+ // CIL[DOC-STABILITY stability="stable"]
51
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
52
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
53
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
54
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
55
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
56
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
25
57
  const data = {
26
58
  navMain: [
27
59
  {
@@ -161,7 +193,21 @@ const data = {
161
193
  },
162
194
  ],
163
195
  }
164
-
196
+ // CIL[END chunk_id="app-sidebar_data_1783930597"]
197
+ // CIL[BEGIN chunk_id="app-sidebar_appsidebar_1783930597" type="function" identity="AppSidebar" parent="none"]
198
+ // CIL[DOC-MACRO purpose="Render main navigation sidebar with collapsible sections"]
199
+ // CIL[DOC-RESPONSIBILITY responsibility="Create sidebar UI with header, navigation items, and search"]
200
+ // CIL[DOC-CONTEXT module="app-sidebar" layer="frontend-component" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
201
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX sidebar component" errors="none" side_effects="Renders navigation UI"]
202
+ // CIL[DOC-MICRO logic_summary="Maps navigation data to collapsible sidebar sections with icons and active states" notable_decisions="[]"]
203
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
204
+ // CIL[DOC-STABILITY stability="stable"]
205
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
206
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
207
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
208
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
209
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
210
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
165
211
  export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
166
212
  return (
167
213
  <Sidebar {...props}>
@@ -226,3 +272,4 @@ export function AppSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
226
272
  </Sidebar>
227
273
  )
228
274
  }
275
+ // CIL[END chunk_id="app-sidebar_appsidebar_1783930597"]
@@ -1,55 +1,62 @@
1
- /**
2
- * @module src/components/auth/ProtectedRoute
3
- * @audience installer
4
- * @layer frontend-component
5
- * @stability stable
6
- *
7
- * React Router route guard that enforces authentication and optional
8
- * system-admin role checks. Wrap any `<Route>` element that requires
9
- * a logged-in user.
10
- *
11
- * **Auth check:** If `AuthContext.user` is null (not yet logged in or
12
- * session expired), redirects to `/login` using `<Navigate replace>`.
13
- *
14
- * **System-admin check:** When `requireSystemAdmin=true`, verifies that
15
- * `user.roles` includes `'system_admin'`. On failure it renders an
16
- * access-denied screen rather than redirecting, to avoid redirect loops.
17
- *
18
- * @example
19
- * ```tsx
20
- * <Route path="/admin" element={
21
- * <ProtectedRoute requireSystemAdmin>
22
- * <AdminLayout />
23
- * </ProtectedRoute>
24
- * } />
25
- * ```
26
- *
27
- * @seeAlso src/contexts/AuthContext.tsx
28
- */
29
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+ // CIL[BEGIN chunk_id="protectedroute_module_header_1783930597" type="module_header" identity="imports" parent="none"]
9
+ // CIL[DOC-MACRO purpose="Import React and routing components for authentication"]
10
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide core dependencies for route protection"]
11
+ // CIL[DOC-CONTEXT module="protected-route" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
12
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
13
+ // CIL[DOC-MICRO logic_summary="Imports React, Navigate for routing, and useAuth hook" notable_decisions="[]"]
14
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
15
+ // CIL[DOC-STABILITY stability="stable"]
16
+ // CIL[DOC-AUDIENCE audience="developer"]
17
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, \."]
18
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
19
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
20
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
21
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
22
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
30
23
  import React from 'react'
31
24
  import { Navigate } from 'react-router-dom'
32
25
  import { useAuth } from '../../contexts/AuthContext'
33
-
34
- /**
35
- * Props for `ProtectedRoute`.
36
- *
37
- * @prop children - The protected route content
38
- * @prop requireSystemAdmin - If true, also requires the `system_admin` role
39
- */
26
+ // CIL[END chunk_id="protectedroute_module_header_1783930597"]
27
+ // CIL[BEGIN chunk_id="protectedroute_protectedrouteprops_1783930597" type="interface" identity="ProtectedRouteProps" parent="none"]
28
+ // CIL[DOC-MACRO purpose="Define props interface for route protection component"]
29
+ // CIL[DOC-RESPONSIBILITY responsibility="Specify configurable options for protected routes"]
30
+ // CIL[DOC-CONTEXT module="protected-route" layer="frontend-component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
31
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type definition" errors="none" side_effects="none"]
32
+ // CIL[DOC-MICRO logic_summary="Interface with optional system admin requirement flag" notable_decisions="[]"]
33
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
34
+ // CIL[DOC-STABILITY stability="stable"]
35
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
36
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
37
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
38
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
40
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
40
41
  interface ProtectedRouteProps {
41
42
  children: React.ReactNode
42
43
  requireSystemAdmin?: boolean
43
44
  }
44
-
45
- /**
46
- * Route guard component.
47
- *
48
- * @param props - `ProtectedRouteProps`
49
- * @returns `children` when authorised, a redirect to `/login` when
50
- * unauthenticated, or an access-denied screen when role check fails
51
- * @sideEffects none (navigation is declarative via `<Navigate>`)
52
- */
45
+ // CIL[END chunk_id="protectedroute_protectedrouteprops_1783930597"]
46
+ // CIL[BEGIN chunk_id="protectedroute_protectedroute_1783930597" type="function" identity="ProtectedRoute" parent="none"]
47
+ // CIL[DOC-MACRO purpose="Route guard component enforcing authentication and role checks"]
48
+ // CIL[DOC-RESPONSIBILITY responsibility="Protect routes from unauthorized access with optional admin validation"]
49
+ // CIL[DOC-CONTEXT module="protected-route" layer="frontend-component" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
50
+ // CIL[DOC-CONTRACT inputs="none" outputs="Protected content or redirect/denial UI" errors="none" side_effects="Navigation redirects, renders access denied UI"]
51
+ // CIL[DOC-MICRO logic_summary="Checks user auth state and optional system_admin role, redirects to login or shows access denied" notable_decisions="[]"]
52
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
53
+ // CIL[DOC-STABILITY stability="stable"]
54
+ // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
55
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
56
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
57
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
58
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
59
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
53
60
  export function ProtectedRoute({ children, requireSystemAdmin = false }: ProtectedRouteProps) {
54
61
  const { user } = useAuth()
55
62
 
@@ -58,7 +65,7 @@ export function ProtectedRoute({ children, requireSystemAdmin = false }: Protect
58
65
  }
59
66
 
60
67
  if (requireSystemAdmin && !user.roles?.includes('system_admin')) {
61
- // Show access denied message instead of redirect to avoid loops
68
+
62
69
  return (
63
70
  <div className="min-h-screen flex items-center justify-center bg-slate-50">
64
71
  <div className="text-center p-8">
@@ -86,3 +93,4 @@ export function ProtectedRoute({ children, requireSystemAdmin = false }: Protect
86
93
 
87
94
  return <>{children}</>
88
95
  }
96
+ // CIL[END chunk_id="protectedroute_protectedroute_1783930597"]