spine-framework 0.3.145 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5051 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,21 +1,13 @@
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"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="Admin list page component module imports and entry point."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Import dependencies and declare the AdminListPage component module."]
4
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Aggregates imports for the admin list page UI: React, UI primitives, icons, local components, and utils." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
11
8
  // 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"]
9
+ // CIL[DOC-AUDIENCE audience="module"]
10
+
19
11
  import React, { ReactNode } from 'react'
20
12
  import { Button } from '../ui/button'
21
13
  import { Card, CardContent } from '../ui/card'
@@ -27,21 +19,22 @@ import { LucideIcon } from 'lucide-react'
27
19
  import { AdminStatsCard } from './AdminStatsCard'
28
20
  import { PageInstructions } from './PageInstructions'
29
21
  import { cn } from '../../lib/utils'
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."]
22
+ // CIL[DOC-VECTOR type="context" content="purpose='Admin list page component module imports and entry point.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
23
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
24
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
25
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
43
26
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
44
27
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
28
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:module_header:module_header"]
29
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface" type="interface" identity="AdminListPageProps" parent="adminlistpage:function"]
30
+ // CIL[DOC-MACRO purpose="Props contract for the AdminListPage component."]
31
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the typed input surface for AdminListPage."]
32
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
33
+ // CIL[DOC-CONTRACT inputs="property bag: title, description, statsCards, children, optional search/filter/loading/error/new-button fields" outputs="typed props interface" errors="none" side_effects="none"]
34
+ // CIL[DOC-MICRO logic_summary="Describes the complete prop surface for the admin list page, including stats, search, filters, loading, error, and children." notable_decisions="[]"]
35
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
36
+ // CIL[DOC-STABILITY stability="stable"]
37
+
45
38
  interface AdminListPageProps {
46
39
  title: string
47
40
  description: string
@@ -71,21 +64,24 @@ interface AdminListPageProps {
71
64
  emptyMessage?: string
72
65
  emptyIcon?: LucideIcon
73
66
  }
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."]
67
+ // CIL[DOC-VECTOR type="context" content="purpose='Props contract for the AdminListPage component.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
68
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
69
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
70
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
87
71
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
88
72
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
73
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpageprops:interface"]
74
+
75
+
76
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpage:function" type="function" identity="AdminListPage" parent=""]
77
+ // CIL[DOC-MACRO purpose="Render a reusable admin list page with header, instructions, stats, search, filters, and content."]
78
+ // CIL[DOC-RESPONSIBILITY responsibility="Compose and render the admin list page layout and its interactive controls."]
79
+ // CIL[DOC-CONTEXT module="AdminListPage" layer="components/admin" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/lib/utils.ts"]
80
+ // CIL[DOC-CONTRACT inputs="AdminListPageProps" outputs="JSX.Element" errors="Error state rendered inside card" side_effects="Sets window.location.href when new button is clicked and no onNewClick handler provided"]
81
+ // CIL[DOC-MICRO logic_summary="Builds a vertical page layout with title/actions, optional instructional help, stats cards, search/filter bar, and a content card that shows skeleton, error, or children." notable_decisions="[]"]
82
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
83
+ // CIL[DOC-STABILITY stability="stable"]
84
+
89
85
  export function AdminListPage({
90
86
  title,
91
87
  description,
@@ -215,4 +211,10 @@ export function AdminListPage({
215
211
  </div>
216
212
  )
217
213
  }
218
- // CIL[END chunk_id="AdminListPage_adminlistpage_1783931090"]
214
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a reusable admin list page with header, instructions, stats, search, filters, and content.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx"]
215
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
216
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
217
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
218
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
219
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
220
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminListPage.tsx:adminlistpage:function"]
@@ -1,21 +1,16 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
2
+ // CIL[DOC-MACRO purpose="Provides React, router, icons, and UI component imports for the admin sidebar module"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares module-level imports required by AdminSidebar"]
4
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported symbols" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, react-router-dom hooks, lucide-react icons, and local sidebar/collapsible UI primitives" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developer"]
10
+
1
11
 
2
12
 
3
13
 
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"]
19
14
  import * as React from "react"
20
15
  import { Link, useLocation } from "react-router-dom"
21
16
  import {
@@ -37,6 +32,8 @@ import {
37
32
  Puzzle,
38
33
  Shield,
39
34
  MessageSquare,
35
+ GitBranch,
36
+ Lightbulb,
40
37
  Key,
41
38
  Truck,
42
39
  TestTube,
@@ -63,21 +60,22 @@ import {
63
60
  } from "../ui/sidebar"
64
61
  import { Button } from "../ui/button"
65
62
  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."]
63
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides React, router, icons, and UI component imports for the admin sidebar module'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
64
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
65
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
66
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
79
67
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
80
68
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
69
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:module_header:module_header"]
70
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationsections:constant" type="constant" identity="navigationSections" parent="none"]
71
+ // CIL[DOC-MACRO purpose="Defines the static navigation section structure for the admin sidebar"]
72
+ // CIL[DOC-RESPONSIBILITY responsibility="Maintain the ordered list of admin navigation sections, routes, and optional nested children"]
73
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
74
+ // CIL[DOC-CONTRACT inputs="none" outputs="navigationSections: NavigationSection[]" errors="none" side_effects="none"]
75
+ // CIL[DOC-MICRO logic_summary="Static array of navigation sections with title, icon, optional children, and route URLs" notable_decisions="[]"]
76
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
77
+ // CIL[DOC-STABILITY stability="stable"]
78
+
81
79
  const navigationSections = [
82
80
  {
83
81
  title: "Configs",
@@ -107,6 +105,12 @@ const navigationSections = [
107
105
  { title: "Invites", url: "/spine-framework/admin/access/invites", icon: UserPlus },
108
106
  ]
109
107
  },
108
+ {
109
+ title: "Security",
110
+ items: [
111
+ { title: "Flagged Actors", url: "/spine-framework/admin/security", icon: Shield },
112
+ ]
113
+ },
110
114
  {
111
115
  title: "Runtime",
112
116
  items: [
@@ -148,25 +152,28 @@ const navigationSections = [
148
152
  items: [
149
153
  { title: "Projects", url: "/spine-framework/admin/cil", icon: Brain },
150
154
  { title: "Search", url: "/spine-framework/admin/cil/search", icon: FileSearch },
155
+ { title: "Versions", url: "/spine-framework/admin/cil/versions", icon: GitBranch },
156
+ { title: "Suggestions", url: "/spine-framework/admin/cil/suggestions", icon: Lightbulb },
151
157
  { title: "Agent", url: "/spine-framework/admin/cil/agent", icon: MessageSquare },
152
158
  ]
153
159
  }
154
160
  ]
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."]
161
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the static navigation section structure for the admin sidebar'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
162
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
163
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
164
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
168
165
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
169
166
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
167
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:navigationsections:constant"]
168
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:adminsidebar:function" type="function" identity="AdminSidebar" parent="none"]
169
+ // CIL[DOC-MACRO purpose="Renders the admin sidebar with navigation sections and active route highlighting"]
170
+ // CIL[DOC-RESPONSIBILITY responsibility="Render the admin sidebar UI and compute active route state from useLocation"]
171
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminSidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/sidebar.tsx"]
172
+ // CIL[DOC-CONTRACT inputs="props: React.ComponentProps<typeof Sidebar>" outputs="JSX.Element" errors="none" side_effects="Reads useLocation and renders react-router Link components"]
173
+ // CIL[DOC-MICRO logic_summary="Uses useLocation to determine active routes; maps navigationSections into collapsible sidebar groups and nested items" notable_decisions="[]"]
174
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
175
+ // CIL[DOC-STABILITY stability="stable"]
176
+
170
177
  export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>) {
171
178
  const location = useLocation()
172
179
 
@@ -181,12 +188,9 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
181
188
  <SidebarMenuItem>
182
189
  <SidebarMenuButton size="lg" asChild>
183
190
  <Link to="/spine-framework/admin/configs/types">
184
- <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-primary text-primary-foreground">
185
- <span className="text-sm font-bold">S</span>
186
- </div>
191
+ <img src="/spine-logo.svg" alt="Spine Framework" className="h-8 w-auto shrink-0" />
187
192
  <div className="flex flex-col gap-0.5 leading-none">
188
- <span className="font-semibold">Spine</span>
189
- <span className="text-xs text-muted-foreground">Framework</span>
193
+ <span className="font-semibold whitespace-nowrap">Spine Framework</span>
190
194
  </div>
191
195
  </Link>
192
196
  </SidebarMenuButton>
@@ -282,4 +286,10 @@ export function AdminSidebar({ ...props }: React.ComponentProps<typeof Sidebar>)
282
286
  </Sidebar>
283
287
  )
284
288
  }
285
- // CIL[END chunk_id="AdminSidebar_adminsidebar_1783931090"]
289
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders the admin sidebar with navigation sections and active route highlighting'; No verified external callers; imports: .framework/src/components/ui/sidebar.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/collapsible.tsx"]
290
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
291
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
292
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
293
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
294
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
295
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminSidebar.tsx:adminsidebar:function"]
@@ -1,60 +1,56 @@
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"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="Module header for the AdminStatsCard component: imports React, LucideIcon, and Card/CardContent UI primitives"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare module-level imports required by the AdminStatsCard component"]
4
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/ui/card.tsx"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, LucideIcon type, and shadcn Card/CardContent components" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
11
8
  // 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"]
9
+ // CIL[DOC-AUDIENCE audience="admin developers"]
10
+
19
11
  import React from 'react'
20
12
  import { LucideIcon } from 'lucide-react'
21
13
  import { Card, CardContent } from '../ui/card'
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."]
14
+ // CIL[DOC-VECTOR type="context" content="purpose='Module header for the AdminStatsCard component: imports React, LucideIcon, and Card/CardContent UI primitives'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
15
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
16
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
17
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
35
18
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
36
19
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:module_header:module_header"]
21
+
22
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCardProps:interface" type="interface" identity="AdminStatsCardProps" parent="AdminStatsCard"]
23
+ // CIL[DOC-MACRO purpose="Props interface for the AdminStatsCard stat tile component"]
24
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the typed contract consumed by AdminStatsCard"]
25
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/ui/card.tsx"]
26
+ // CIL[DOC-CONTRACT inputs="title: string; value: string | number; icon: LucideIcon; iconColor?: string" outputs="interface type" errors="none" side_effects="none"]
27
+ // CIL[DOC-MICRO logic_summary="Optional iconColor defaults to text-primary" notable_decisions="[]"]
28
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
29
+ // CIL[DOC-STABILITY stability="stable"]
30
+
37
31
  interface AdminStatsCardProps {
38
32
  title: string
39
33
  value: string | number
40
34
  icon: LucideIcon
41
35
  iconColor?: string
42
36
  }
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."]
37
+ // CIL[DOC-VECTOR type="context" content="purpose='Props interface for the AdminStatsCard stat tile component'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
39
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
40
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
56
41
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
57
42
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCardProps:interface"]
44
+
45
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCard:function" type="function" identity="AdminStatsCard" parent=""]
46
+ // CIL[DOC-MACRO purpose="Renders an admin dashboard stat card with icon, title, and value"]
47
+ // CIL[DOC-RESPONSIBILITY responsibility="Render a small stat card tile for admin dashboards"]
48
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/AdminStatsCard.tsx,.framework/src/components/ui/card.tsx"]
49
+ // CIL[DOC-CONTRACT inputs="title: string; value: string | number; icon: LucideIcon; iconColor?: string (default 'text-primary')" outputs="JSX Card component" errors="none" side_effects="none"]
50
+ // CIL[DOC-MICRO logic_summary="Wraps title and value in a Card with an icon, applying optional icon color class" notable_decisions="[]"]
51
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
52
+ // CIL[DOC-STABILITY stability="stable"]
53
+
58
54
  export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-primary" }: AdminStatsCardProps) {
59
55
  return (
60
56
  <Card>
@@ -78,4 +74,10 @@ export function AdminStatsCard({ title, value, icon: Icon, iconColor = "text-pri
78
74
  </Card>
79
75
  )
80
76
  }
81
- // CIL[END chunk_id="AdminStatsCard_adminstatscard_1783931090"]
77
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders an admin dashboard stat card with icon, title, and value'; No verified external callers; imports: .framework/src/components/ui/card.tsx"]
78
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
79
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
80
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
81
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
82
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
83
+ // CIL[END stable_id="~/.framework/src/components/admin/AdminStatsCard.tsx:AdminStatsCard:function"]
@@ -1,19 +1,107 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:module_header:module_header"]
2
+ // CIL[DOC-MACRO purpose="Top-level module header for the PageInstructions React component."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare imports, exports, and the public surface of this module."]
4
+ // CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="module exports" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Aggregates imports and exports for the collapsible page instructions UI component." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="module authors and consumers"]
10
+
1
11
  import * as React from 'react'
2
12
  import { ChevronDown } from 'lucide-react'
3
13
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../ui/collapsible'
4
14
  import { Card, CardContent } from '../ui/card'
5
15
 
16
+ // CIL[DOC-VECTOR type="context" content="purpose='Top-level module header for the PageInstructions React component.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
17
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
18
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
19
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
20
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
21
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
22
+ // CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:module_header:module_header"]
23
+
24
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:cleancilmarkers:function"]
25
+ // CIL[DOC-MACRO purpose="Remove CIL marker comments from rendered text nodes."]
26
+ // CIL[DOC-RESPONSIBILITY responsibility="Sanitize raw content before rendering so CIL tags do not leak into the UI."]
27
+ // CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
28
+ // CIL[DOC-CONTRACT inputs="content: React.ReactNode" outputs="React.ReactNode with CIL comment lines removed" errors="none" side_effects="none"]
29
+ // CIL[DOC-MICRO logic_summary="Returns non-string content unchanged; for strings, removes lines starting with // CIL[, collapses excess blank lines, and trims." notable_decisions="[]"]
30
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
31
+ // CIL[DOC-STABILITY stability="stable"]
32
+
33
+ function cleanCilMarkers(content: React.ReactNode): React.ReactNode {
34
+ if (typeof content !== 'string') return content
35
+ return content
36
+ .split('\n')
37
+ .filter(line => !line.trim().startsWith('// CIL['))
38
+ .join('\n')
39
+ .replace(/\n{3,}/g, '\n\n')
40
+ .trim()
41
+ }
42
+
43
+ // CIL[DOC-VECTOR type="context" content="purpose='Remove CIL marker comments from rendered text nodes.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
44
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
45
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
46
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
47
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
48
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
49
+ // CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:cleancilmarkers:function"]
50
+
51
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionssection:interface"]
52
+ // CIL[DOC-MACRO purpose="Type contract for a single collapsible section inside PageInstructions."]
53
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the title and content shape expected by the PageInstructions component."]
54
+ // CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
55
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
56
+ // CIL[DOC-MICRO logic_summary="Declares a section with a string title and arbitrary React content." notable_decisions="[]"]
57
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
58
+ // CIL[DOC-STABILITY stability="stable"]
59
+
6
60
  export interface PageInstructionsSection {
7
61
  title: string
8
62
  content: React.ReactNode
9
63
  }
10
64
 
65
+ // CIL[DOC-VECTOR type="context" content="purpose='Type contract for a single collapsible section inside PageInstructions.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
66
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
67
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
68
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
69
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
70
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
71
+ // CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionssection:interface"]
72
+
73
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionsprops:interface"]
74
+ // CIL[DOC-MACRO purpose="Props interface for the PageInstructions component."]
75
+ // CIL[DOC-RESPONSIBILITY responsibility="Document the public configuration options accepted by PageInstructions."]
76
+ // CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
77
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript interface" errors="none" side_effects="none"]
78
+ // CIL[DOC-MICRO logic_summary="Optional title, description node, and an array of sections." notable_decisions="[]"]
79
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
80
+ // CIL[DOC-STABILITY stability="stable"]
81
+
11
82
  export interface PageInstructionsProps {
12
83
  title?: string
13
84
  description?: React.ReactNode
14
85
  sections?: PageInstructionsSection[]
15
86
  }
16
87
 
88
+ // CIL[DOC-VECTOR type="context" content="purpose='Props interface for the PageInstructions component.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
89
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
90
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
91
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
92
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
93
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
94
+ // CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructionsprops:interface"]
95
+
96
+ // CIL[BEGIN stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructions:function"]
97
+ // CIL[DOC-MACRO purpose="Render a collapsible card containing optional description and instruction sections."]
98
+ // CIL[DOC-RESPONSIBILITY responsibility="Display page-level help or instructions in a collapsible UI widget."]
99
+ // CIL[DOC-CONTEXT module="admin" layer="components" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/collapsible.tsx"]
100
+ // CIL[DOC-CONTRACT inputs="props: PageInstructionsProps" outputs="JSX element or null" errors="none" side_effects="renders UI"]
101
+ // CIL[DOC-MICRO logic_summary="Returns null when no content is provided; otherwise renders a Card with a Collapsible trigger and filtered description/section content." notable_decisions="[]"]
102
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
103
+ // CIL[DOC-STABILITY stability="stable"]
104
+
17
105
  export function PageInstructions({
18
106
  title = 'Page instructions',
19
107
  description,
@@ -30,13 +118,13 @@ export function PageInstructions({
30
118
  <ChevronDown className="h-4 w-4 transition-transform group-data-[state=open]:rotate-180" />
31
119
  </CollapsibleTrigger>
32
120
  <CollapsibleContent className="space-y-4 pt-4">
33
- {description && <div className="text-sm text-slate-600">{description}</div>}
121
+ {description && <div className="text-sm text-slate-600">{cleanCilMarkers(description)}</div>}
34
122
  {sections && sections.length > 0 && (
35
123
  <div className="space-y-3">
36
124
  {sections.map((section, i) => (
37
125
  <div key={i}>
38
126
  <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>
127
+ <div className="mt-1 text-sm text-slate-600">{cleanCilMarkers(section.content)}</div>
40
128
  </div>
41
129
  ))}
42
130
  </div>
@@ -47,3 +135,11 @@ export function PageInstructions({
47
135
  </Card>
48
136
  )
49
137
  }
138
+
139
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a collapsible card containing optional description and instruction sections.'; No verified external callers; imports: .framework/src/components/ui/collapsible.tsx,.framework/src/components/ui/card.tsx"]
140
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
141
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
142
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
143
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
144
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
145
+ // CIL[END stable_id="~/.framework/src/components/admin/PageInstructions.tsx:pageinstructions:function"]