spine-framework 0.3.125 → 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 +169 -97
  6. package/.framework/cli/commands/generate.ts +82 -160
  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,3 +1,21 @@
1
+
2
+
3
+
4
+ // CIL[BEGIN chunk_id="AdminListPage_module_header_1783931090" type="module_header" identity="imports" parent="none"]
5
+ // CIL[DOC-MACRO purpose="Import React and UI components for admin list page"]
6
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage all external module imports for admin list page"]
7
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="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\",\"\\\"]"]
8
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and components" errors="Import failures" side_effects="Module loading"]
9
+ // CIL[DOC-MICRO logic_summary="Imports React, UI components, icons, and utility functions" notable_decisions="[]"]
10
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
11
+ // CIL[DOC-STABILITY stability="stable"]
12
+ // CIL[DOC-AUDIENCE audience="developer"]
13
+ // CIL[DOC-VECTOR type="context" content="Layer: 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, \."]
14
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
15
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
16
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
17
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
19
  import React, { ReactNode } from 'react'
2
20
  import { Button } from '../ui/button'
3
21
  import { Card, CardContent } from '../ui/card'
@@ -7,11 +25,27 @@ import { Skeleton } from '../ui/skeleton'
7
25
  import { Search } from 'lucide-react'
8
26
  import { LucideIcon } from 'lucide-react'
9
27
  import { AdminStatsCard } from './AdminStatsCard'
28
+ import { PageInstructions } from './PageInstructions'
10
29
  import { cn } from '../../lib/utils'
11
-
30
+ // CIL[END chunk_id="AdminListPage_module_header_1783931090"]
31
+ // CIL[BEGIN chunk_id="AdminListPage_interface_1783931090" type="interface" identity="AdminListPageProps" parent="none"]
32
+ // CIL[DOC-MACRO purpose="Define props interface for AdminListPage component"]
33
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for admin list page properties"]
34
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="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\",\"\\\"]"]
35
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type interface" errors="none" side_effects="none"]
36
+ // CIL[DOC-MICRO logic_summary="Defines props for title, stats, search, filters, content, and loading states" notable_decisions="[]"]
37
+ // CIL[DOC-CONFIDENCE pass="second" score="1.00" flags="none"]
38
+ // CIL[DOC-STABILITY stability="stable"]
39
+ // CIL[DOC-VECTOR type="context" content="Layer: 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, \."]
40
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
41
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
42
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
43
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
44
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
12
45
  interface AdminListPageProps {
13
46
  title: string
14
47
  description: string
48
+ noPageInstructions?: boolean
15
49
  newButtonText?: string
16
50
  newButtonHref?: string
17
51
  onNewClick?: () => void
@@ -37,10 +71,25 @@ interface AdminListPageProps {
37
71
  emptyMessage?: string
38
72
  emptyIcon?: LucideIcon
39
73
  }
40
-
74
+ // CIL[END chunk_id="AdminListPage_interface_1783931090"]
75
+ // CIL[BEGIN chunk_id="AdminListPage_adminlistpage_1783931090" type="function" identity="AdminListPage" parent="none"]
76
+ // CIL[DOC-MACRO purpose="Admin list page component with stats, search, filters, and content"]
77
+ // CIL[DOC-RESPONSIBILITY responsibility="Render comprehensive admin list interface with all features"]
78
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
79
+ // CIL[DOC-CONTRACT inputs="none" outputs="Admin list page JSX" errors="Rendering errors" side_effects="UI rendering"]
80
+ // CIL[DOC-MICRO logic_summary="Renders header, stats cards, search/filters, content with loading/error states" notable_decisions="['comprehensive_layout', 'loading_states']"]
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: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.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"]
41
89
  export function AdminListPage({
42
90
  title,
43
91
  description,
92
+ noPageInstructions,
44
93
  newButtonText,
45
94
  newButtonHref = '#',
46
95
  onNewClick,
@@ -56,7 +105,6 @@ export function AdminListPage({
56
105
  }: AdminListPageProps) {
57
106
  return (
58
107
  <div className="space-y-6">
59
- {/* Header */}
60
108
  <div className="flex justify-between items-center">
61
109
  <div>
62
110
  <h1 className="text-xl font-semibold">{title}</h1>
@@ -70,7 +118,29 @@ export function AdminListPage({
70
118
  )}
71
119
  </div>
72
120
 
73
- {/* Stats Cards */}
121
+ {!noPageInstructions && (
122
+ <PageInstructions
123
+ sections={[
124
+ {
125
+ title: 'What this page is for',
126
+ content: `This page is the administrative list for ${title.toLowerCase()}. It shows all records in the system, their current state, and provides tools to search, filter, and create new records.`,
127
+ },
128
+ {
129
+ title: 'How to find records',
130
+ content: `Use the search field at the top of the list to look for records by name or keyword. Use the filter dropdowns to narrow the list by status, type, or other categories. Click any column header to sort ascending or descending.`,
131
+ },
132
+ {
133
+ title: 'How to create, view, and edit records',
134
+ content: `${newButtonText ? `Click the ${newButtonText} button in the top-right to create a new record. ` : ''}Click any row in the table to open its detail page. From the detail page you can review all fields, edit the record, and, if allowed, delete it. Deleting a record usually cannot be undone.`,
135
+ },
136
+ {
137
+ title: 'Understanding the stats',
138
+ content: `The summary cards above the table show the most important counts for this record type. Use them as a quick health check or to spot trends before drilling into the list.`,
139
+ },
140
+ ]}
141
+ />
142
+ )}
143
+
74
144
  <div className="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
75
145
  {statsCards.map((stat, index) => (
76
146
  <AdminStatsCard
@@ -83,11 +153,9 @@ export function AdminListPage({
83
153
  ))}
84
154
  </div>
85
155
 
86
- {/* Search and Filters */}
87
156
  <Card>
88
157
  <CardContent className="p-4">
89
158
  <div className="flex flex-col sm:flex-row gap-4">
90
- {/* Search */}
91
159
  {onSearchChange && (
92
160
  <div className="flex-1">
93
161
  <div className="relative">
@@ -102,7 +170,6 @@ export function AdminListPage({
102
170
  </div>
103
171
  )}
104
172
 
105
- {/* Filters */}
106
173
  {filters.map((filter, index) => (
107
174
  <div key={index} className="sm:w-48">
108
175
  <Select value={filter.value} onValueChange={filter.onChange}>
@@ -123,7 +190,6 @@ export function AdminListPage({
123
190
  </CardContent>
124
191
  </Card>
125
192
 
126
- {/* Content */}
127
193
  <Card>
128
194
  {loading ? (
129
195
  <div className="p-8 space-y-4">
@@ -149,3 +215,4 @@ export function AdminListPage({
149
215
  </div>
150
216
  )
151
217
  }
218
+ // CIL[END chunk_id="AdminListPage_adminlistpage_1783931090"]
@@ -1,12 +1,21 @@
1
- /**
2
- * @module src/components/admin/AdminSidebar
3
- * @audience installer
4
- * @layer frontend-component
5
- * @stability stable
6
- *
7
- * Admin sidebar with proper sections, React Router navigation, and active link highlighting.
8
- */
9
1
 
2
+
3
+
4
+ // CIL[BEGIN chunk_id="AdminSidebar_module_header_1783931090" type="module_header" identity="imports" parent="none"]
5
+ // CIL[DOC-MACRO purpose="Import React, routing, and UI components for admin sidebar"]
6
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage all external module imports for admin sidebar"]
7
+ // CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
8
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and icons" errors="Import failures" side_effects="Module loading"]
9
+ // CIL[DOC-MICRO logic_summary="Imports React, routing, Lucide icons, and sidebar UI components" notable_decisions="[]"]
10
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
11
+ // CIL[DOC-STABILITY stability="stable"]
12
+ // CIL[DOC-AUDIENCE audience="developer"]
13
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
14
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
15
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
16
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
17
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
10
19
  import * as React from "react"
11
20
  import { Link, useLocation } from "react-router-dom"
12
21
  import {
@@ -29,8 +38,12 @@ import {
29
38
  Shield,
30
39
  MessageSquare,
31
40
  Key,
41
+ Truck,
32
42
  TestTube,
33
- UserPlus
43
+ UserPlus,
44
+ BookOpen,
45
+ ChevronRight,
46
+ ChevronDown
34
47
  } from "lucide-react"
35
48
  import {
36
49
  Sidebar,
@@ -43,11 +56,28 @@ import {
43
56
  SidebarMenu,
44
57
  SidebarMenuButton,
45
58
  SidebarMenuItem,
59
+ SidebarMenuSub,
60
+ SidebarMenuSubButton,
61
+ SidebarMenuSubItem,
46
62
  SidebarRail,
47
63
  } from "../ui/sidebar"
48
64
  import { Button } from "../ui/button"
49
-
50
- // Navigation sections with correct admin URLs
65
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../ui/collapsible"
66
+ // CIL[END chunk_id="AdminSidebar_module_header_1783931090"]
67
+ // CIL[BEGIN chunk_id="AdminSidebar_navigation_sections_1783931090" type="navigation_data" identity="navigation_sections" parent="none"]
68
+ // CIL[DOC-MACRO purpose="Define navigation structure for admin interface"]
69
+ // CIL[DOC-RESPONSIBILITY responsibility="Configure sidebar navigation sections and items"]
70
+ // CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
71
+ // CIL[DOC-CONTRACT inputs="none" outputs="Navigation data structure" errors="none" side_effects="none"]
72
+ // CIL[DOC-MICRO logic_summary="Organizes admin sections: configs, access, runtime, observability, testing" notable_decisions="['section_organization', 'icon_mapping']"]
73
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
74
+ // CIL[DOC-STABILITY stability="stable"]
75
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
76
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
77
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
78
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
79
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
80
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
51
81
  const navigationSections = [
52
82
  {
53
83
  title: "Configs",
@@ -57,12 +87,18 @@ const navigationSections = [
57
87
  { title: "Pipelines", url: "/spine-framework/admin/configs/pipelines", icon: Activity },
58
88
  { title: "Triggers", url: "/spine-framework/admin/configs/triggers", icon: AlertTriangle },
59
89
  { title: "AI Agents", url: "/spine-framework/admin/configs/ai-agents", icon: Brain },
60
- { title: "Embeddings", url: "/spine-framework/admin/configs/embeddings", icon: Cpu },
61
90
  { title: "Timers", url: "/spine-framework/admin/configs/timers", icon: Timer },
62
- { title: "Integrations", url: "/spine-framework/admin/configs/integrations", icon: Puzzle },
91
+ {
92
+ title: "Integration Broker",
93
+ icon: Puzzle,
94
+ children: [
95
+ { title: "Integrations", url: "/spine-framework/admin/configs/integrations", icon: Puzzle },
96
+ { title: "API Keys", url: "/spine-framework/admin/configs/api-keys", icon: Key },
97
+ { title: "Deliveries", url: "/spine-framework/admin/configs/deliveries", icon: Truck },
98
+ ]
99
+ },
63
100
  { title: "Roles", url: "/spine-framework/admin/configs/roles", icon: Shield },
64
101
  { title: "Prompts", url: "/spine-framework/admin/configs/prompts", icon: MessageSquare },
65
- { title: "API Keys", url: "/spine-framework/admin/configs/api-keys", icon: Key },
66
102
  ]
67
103
  },
68
104
  {
@@ -99,13 +135,41 @@ const navigationSections = [
99
135
  items: [
100
136
  { title: "Test Runs", url: "/spine-framework/admin/testing", icon: TestTube },
101
137
  ]
138
+ },
139
+ {
140
+ title: "KB Engine",
141
+ items: [
142
+ { title: "Knowledge Base", url: "/spine-framework/admin/kb/kb-spine-public", icon: BookOpen },
143
+ { title: "Embeddings", url: "/spine-framework/admin/kb/embeddings", icon: Cpu },
144
+ ]
145
+ },
146
+ {
147
+ title: "CIL",
148
+ items: [
149
+ { title: "Projects", url: "/spine-framework/admin/cil", icon: Brain },
150
+ { title: "Search", url: "/spine-framework/admin/cil/search", icon: FileSearch },
151
+ { title: "Agent", url: "/spine-framework/admin/cil/agent", icon: MessageSquare },
152
+ ]
102
153
  }
103
154
  ]
104
-
155
+ // CIL[END chunk_id="AdminSidebar_navigation_sections_1783931090"]
156
+ // CIL[BEGIN chunk_id="AdminSidebar_adminsidebar_1783931090" type="function" identity="AdminSidebar" parent="none"]
157
+ // CIL[DOC-MACRO purpose="Admin sidebar component with navigation and active state"]
158
+ // CIL[DOC-RESPONSIBILITY responsibility="Render sidebar navigation with active link highlighting"]
159
+ // CIL[DOC-CONTEXT module="AdminSidebar" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
160
+ // CIL[DOC-CONTRACT inputs="none" outputs="Admin sidebar JSX" errors="none" side_effects="Navigation rendering"]
161
+ // CIL[DOC-MICRO logic_summary="Handles active state, renders brand header, navigation sections, footer" notable_decisions="['active_link_detection', 'brand_header']"]
162
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
163
+ // CIL[DOC-STABILITY stability="stable"]
164
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
165
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
166
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
167
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
168
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
169
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
105
170
  export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
106
171
  const location = useLocation()
107
172
 
108
- // Check if a URL is active (exact match or starts with path)
109
173
  const isActive = (url: string) => {
110
174
  return location.pathname === url || location.pathname.startsWith(url + '/')
111
175
  }
@@ -113,7 +177,6 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
113
177
  return (
114
178
  <Sidebar {...props}>
115
179
  <SidebarHeader>
116
- {/* Brand Header */}
117
180
  <SidebarMenu>
118
181
  <SidebarMenuItem>
119
182
  <SidebarMenuButton size="lg" asChild>
@@ -130,7 +193,6 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
130
193
  </SidebarMenuItem>
131
194
  </SidebarMenu>
132
195
 
133
- {/* Quick Create Button */}
134
196
  <SidebarGroup className="py-2">
135
197
  <Button className="w-full" size="sm">
136
198
  <PlusIcon className="mr-2 h-4 w-4" />
@@ -140,25 +202,74 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
140
202
  </SidebarHeader>
141
203
 
142
204
  <SidebarContent>
143
- {navigationSections.map((section) => (
144
- <SidebarGroup key={section.title}>
145
- <SidebarGroupLabel>{section.title}</SidebarGroupLabel>
146
- <SidebarGroupContent>
147
- <SidebarMenu>
148
- {section.items.map((item) => (
149
- <SidebarMenuItem key={item.title}>
150
- <SidebarMenuButton asChild isActive={isActive(item.url)}>
151
- <Link to={item.url}>
152
- <item.icon className="h-4 w-4" />
153
- <span>{item.title}</span>
154
- </Link>
155
- </SidebarMenuButton>
205
+ {navigationSections.map((section) => {
206
+ const sectionActive = section.items.some((item: any) =>
207
+ isActive(item.url) || (item.children && item.children.some((child: any) => isActive(child.url)))
208
+ )
209
+ return (
210
+ <SidebarGroup key={section.title} className="py-0">
211
+ <Collapsible defaultOpen={sectionActive} className="group/collapsible w-full">
212
+ <SidebarMenu>
213
+ <SidebarMenuItem>
214
+ <CollapsibleTrigger asChild>
215
+ <SidebarMenuButton className="font-semibold text-sm">
216
+ <span>{section.title}</span>
217
+ <ChevronRight className="ml-auto h-4 w-4 transition-transform group-data-[state=open]/collapsible:rotate-90" />
218
+ </SidebarMenuButton>
219
+ </CollapsibleTrigger>
156
220
  </SidebarMenuItem>
157
- ))}
158
- </SidebarMenu>
159
- </SidebarGroupContent>
160
- </SidebarGroup>
161
- ))}
221
+ </SidebarMenu>
222
+ <CollapsibleContent>
223
+ <SidebarGroupContent>
224
+ <SidebarMenu>
225
+ {section.items.map((item: any) => (
226
+ item.children ? (
227
+ <SidebarMenuItem key={item.title}>
228
+ <Collapsible
229
+ defaultOpen={item.children.some((child: any) => isActive(child.url))}
230
+ className="group/collapsible w-full"
231
+ >
232
+ <CollapsibleTrigger asChild>
233
+ <SidebarMenuButton>
234
+ <item.icon className="h-4 w-4" />
235
+ <span>{item.title}</span>
236
+ <ChevronRight className="ml-auto h-4 w-4 transition-transform group-data-[state=open]/collapsible:rotate-90" />
237
+ </SidebarMenuButton>
238
+ </CollapsibleTrigger>
239
+ <CollapsibleContent>
240
+ <SidebarMenuSub>
241
+ {item.children.map((child: any) => (
242
+ <SidebarMenuSubItem key={child.title}>
243
+ <SidebarMenuSubButton asChild isActive={isActive(child.url)}>
244
+ <Link to={child.url}>
245
+ <child.icon className="h-4 w-4" />
246
+ <span>{child.title}</span>
247
+ </Link>
248
+ </SidebarMenuSubButton>
249
+ </SidebarMenuSubItem>
250
+ ))}
251
+ </SidebarMenuSub>
252
+ </CollapsibleContent>
253
+ </Collapsible>
254
+ </SidebarMenuItem>
255
+ ) : (
256
+ <SidebarMenuItem key={item.title}>
257
+ <SidebarMenuButton asChild isActive={isActive(item.url)}>
258
+ <Link to={item.url}>
259
+ <item.icon className="h-4 w-4" />
260
+ <span>{item.title}</span>
261
+ </Link>
262
+ </SidebarMenuButton>
263
+ </SidebarMenuItem>
264
+ )
265
+ ))}
266
+ </SidebarMenu>
267
+ </SidebarGroupContent>
268
+ </CollapsibleContent>
269
+ </Collapsible>
270
+ </SidebarGroup>
271
+ )
272
+ })}
162
273
  </SidebarContent>
163
274
 
164
275
  <SidebarFooter className="p-4">
@@ -171,3 +282,4 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
171
282
  </Sidebar>
172
283
  )
173
284
  }
285
+ // CIL[END chunk_id="AdminSidebar_adminsidebar_1783931090"]
@@ -1,42 +1,60 @@
1
- /**
2
- * @module src/components/admin/AdminStatsCard
3
- * @audience installer
4
- * @layer frontend-component
5
- * @stability stable
6
- *
7
- * Single stat card used in admin list page headers. Renders an icon,
8
- * a title, and a numeric or string value inside a white rounded panel.
9
- * Icon colour defaults to `'text-blue-500'` but can be overridden per card.
10
- *
11
- * @seeAlso src/components/admin/AdminListPage.tsx (mounts this component)
12
- */
13
1
 
2
+
3
+
4
+ // CIL[BEGIN chunk_id="AdminStatsCard_module_header_1783931090" type="module_header" identity="imports" parent="none"]
5
+ // CIL[DOC-MACRO purpose="Import React and UI components for stats card"]
6
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage all external module imports for stats card"]
7
+ // CIL[DOC-CONTEXT module="AdminStatsCard" layer="component" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
8
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and types" errors="Import failures" side_effects="Module loading"]
9
+ // CIL[DOC-MICRO logic_summary="Imports React, Lucide icon type, and card UI components" notable_decisions="[]"]
10
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
11
+ // CIL[DOC-STABILITY stability="stable"]
12
+ // CIL[DOC-AUDIENCE audience="developer"]
13
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
14
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
15
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
16
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
17
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
14
19
  import React from 'react'
15
20
  import { LucideIcon } from 'lucide-react'
16
21
  import { Card, CardContent } from '../ui/card'
17
-
18
- /**
19
- * Props for `AdminStatsCard`.
20
- *
21
- * @prop title - Stat label
22
- * @prop value - Numeric or formatted string value to display
23
- * @prop icon - Lucide icon component
24
- * @prop iconColor - Tailwind text-colour class (default: `'text-blue-500'`)
25
- */
22
+ // CIL[END chunk_id="AdminStatsCard_module_header_1783931090"]
23
+ // CIL[BEGIN chunk_id="AdminStatsCard_interface_1783931090" type="interface" identity="AdminStatsCardProps" parent="none"]
24
+ // CIL[DOC-MACRO purpose="Define props interface for AdminStatsCard component"]
25
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for stats card properties"]
26
+ // CIL[DOC-CONTEXT module="AdminStatsCard" layer="component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
27
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type interface" errors="none" side_effects="none"]
28
+ // CIL[DOC-MICRO logic_summary="Defines title, value, icon, and optional icon color props" notable_decisions="[]"]
29
+ // CIL[DOC-CONFIDENCE pass="second" score="1.00" flags="none"]
30
+ // CIL[DOC-STABILITY stability="stable"]
31
+ // CIL[DOC-VECTOR type="context" content="Layer: 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/src/components/ui/table-primitives.tsx, \."]
32
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
33
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
34
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
35
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
36
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
26
37
  interface AdminStatsCardProps {
27
38
  title: string
28
39
  value: string | number
29
40
  icon: LucideIcon
30
41
  iconColor?: string
31
42
  }
32
-
33
- /**
34
- * Single stat card.
35
- *
36
- * @param props - `AdminStatsCardProps`
37
- * @returns White rounded card with icon and stat value
38
- * @sideEffects none (pure rendering)
39
- */
43
+ // CIL[END chunk_id="AdminStatsCard_interface_1783931090"]
44
+ // CIL[BEGIN chunk_id="AdminStatsCard_adminstatscard_1783931090" type="function" identity="AdminStatsCard" parent="none"]
45
+ // CIL[DOC-MACRO purpose="Single stat card component with icon and value display"]
46
+ // CIL[DOC-RESPONSIBILITY responsibility="Render individual statistics card with icon and formatted value"]
47
+ // CIL[DOC-CONTEXT module="AdminStatsCard" layer="component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
48
+ // CIL[DOC-CONTRACT inputs="none" outputs="Stat card JSX" errors="none" side_effects="UI rendering"]
49
+ // CIL[DOC-MICRO logic_summary="Renders card with icon, title, and value in horizontal layout" notable_decisions="['default_icon_color', 'horizontal_layout']"]
50
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
51
+ // CIL[DOC-STABILITY stability="stable"]
52
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
53
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
54
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
55
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
56
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
57
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
40
58
  export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-primary" }: AdminStatsCardProps) {
41
59
  return (
42
60
  <Card>
@@ -60,3 +78,4 @@ export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-pri
60
78
  </Card>
61
79
  )
62
80
  }
81
+ // CIL[END chunk_id="AdminStatsCard_adminstatscard_1783931090"]
@@ -0,0 +1,49 @@
1
+ import * as React from 'react'
2
+ import { ChevronDown } from 'lucide-react'
3
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible'
4
+ import { Card, CardContent } from '../ui/card'
5
+
6
+ export interface PageInstructionsSection {
7
+ title: string
8
+ content: React.ReactNode
9
+ }
10
+
11
+ export interface PageInstructionsProps {
12
+ title?: string
13
+ description?: React.ReactNode
14
+ sections?: PageInstructionsSection[]
15
+ }
16
+
17
+ export function PageInstructions({
18
+ title = 'Page instructions',
19
+ description,
20
+ sections,
21
+ }: PageInstructionsProps) {
22
+ if (!description && (!sections || sections.length === 0)) return null
23
+
24
+ return (
25
+ <Card>
26
+ <CardContent className="p-4">
27
+ <Collapsible>
28
+ <CollapsibleTrigger className="group flex w-full items-center justify-between text-sm font-medium text-slate-700">
29
+ <span>{title}</span>
30
+ <ChevronDown className="h-4 w-4 transition-transform group-data-[state=open]:rotate-180" />
31
+ </CollapsibleTrigger>
32
+ <CollapsibleContent className="space-y-4 pt-4">
33
+ {description && <div className="text-sm text-slate-600">{description}</div>}
34
+ {sections && sections.length > 0 && (
35
+ <div className="space-y-3">
36
+ {sections.map((section, i) => (
37
+ <div key={i}>
38
+ <div className="text-sm font-semibold text-slate-700">{section.title}</div>
39
+ <div className="mt-1 text-sm text-slate-600">{section.content}</div>
40
+ </div>
41
+ ))}
42
+ </div>
43
+ )}
44
+ </CollapsibleContent>
45
+ </Collapsible>
46
+ </CardContent>
47
+ </Card>
48
+ )
49
+ }
@@ -1,7 +1,39 @@
1
+
2
+
3
+
4
+ // CIL[BEGIN chunk_id="SortableTableHeader_module_header_1783931090" type="module_header" identity="imports" parent="none"]
5
+ // CIL[DOC-MACRO purpose="Import React and UI components for sortable table header"]
6
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage all external module imports for sortable header"]
7
+ // CIL[DOC-CONTEXT module="SortableTableHeader" layer="component" related_files="[\".framework/src/components/ui/table-primitives.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
8
+ // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules and icons" errors="Import failures" side_effects="Module loading"]
9
+ // CIL[DOC-MICRO logic_summary="Imports React, chevron icons, and table head component" notable_decisions="[]"]
10
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
11
+ // CIL[DOC-STABILITY stability="stable"]
12
+ // CIL[DOC-AUDIENCE audience="developer"]
13
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/table-primitives.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
14
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
15
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
16
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
17
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
1
19
  import React from 'react'
2
20
  import { ChevronUp, ChevronDown } from 'lucide-react'
3
21
  import { TableHead } from '../ui/table'
4
-
22
+ // CIL[END chunk_id="SortableTableHeader_module_header_1783931090"]
23
+ // CIL[BEGIN chunk_id="SortableTableHeader_interface_1783931090" type="interface" identity="SortableTableHeaderProps" parent="none"]
24
+ // CIL[DOC-MACRO purpose="Define props interface for SortableTableHeader component"]
25
+ // CIL[DOC-RESPONSIBILITY responsibility="Type definition for sortable header properties"]
26
+ // CIL[DOC-CONTEXT module="SortableTableHeader" layer="component" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
27
+ // CIL[DOC-CONTRACT inputs="none" outputs="Type interface" errors="none" side_effects="none"]
28
+ // CIL[DOC-MICRO logic_summary="Defines title, sort key, current sort state, and sort callback props" notable_decisions="[]"]
29
+ // CIL[DOC-CONFIDENCE pass="second" score="1.00" flags="none"]
30
+ // CIL[DOC-STABILITY stability="stable"]
31
+ // CIL[DOC-VECTOR type="context" content="Layer: 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/src/components/ui/table-primitives.tsx, \."]
32
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
33
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
34
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
35
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
36
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
5
37
  interface SortableTableHeaderProps {
6
38
  title: string
7
39
  sortKey: string
@@ -9,7 +41,21 @@ interface SortableTableHeaderProps {
9
41
  currentSortDirection?: 'asc' | 'desc'
10
42
  onSort: (key: string) => void
11
43
  }
12
-
44
+ // CIL[END chunk_id="SortableTableHeader_interface_1783931090"]
45
+ // CIL[BEGIN chunk_id="SortableTableHeader_sortabletableheader_1783931090" type="function" identity="SortableTableHeader" parent="none"]
46
+ // CIL[DOC-MACRO purpose="Sortable table header component with click-to-sort functionality"]
47
+ // CIL[DOC-RESPONSIBILITY responsibility="Render header with sorting indicators and click handlers"]
48
+ // CIL[DOC-CONTEXT module="SortableTableHeader" layer="component" related_files="[\".framework/src/components/ui/table-primitives.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
49
+ // CIL[DOC-CONTRACT inputs="none" outputs="Sortable header JSX" errors="none" side_effects="Sort callback execution"]
50
+ // CIL[DOC-MICRO logic_summary="Handles sort state, displays chevron indicators, manages click events" notable_decisions="['conditional_sort_indicators', 'click_to_sort']"]
51
+ // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
52
+ // CIL[DOC-STABILITY stability="stable"]
53
+ // CIL[DOC-VECTOR type="context" content="Layer: component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/table-primitives.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/components/ui/dialog.tsx, \."]
54
+ // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
55
+ // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
56
+ // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
57
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
58
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
13
59
  export function SortableTableHeader({
14
60
  title,
15
61
  sortKey,
@@ -40,3 +86,4 @@ export function SortableTableHeader({
40
86
  </TableHead>
41
87
  )
42
88
  }
89
+ // CIL[END chunk_id="SortableTableHeader_sortabletableheader_1783931090"]