spine-framework 0.3.145 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +76 -0
  2. package/.framework/.spine-manifest.json +19 -0
  3. package/.framework/cli/commands/agents.ts +61 -33
  4. package/.framework/cli/commands/auth.ts +60 -28
  5. package/.framework/cli/commands/create-app.ts +212 -80
  6. package/.framework/cli/commands/dev.ts +184 -68
  7. package/.framework/cli/commands/doctor.ts +324 -152
  8. package/.framework/cli/commands/generate.ts +119 -68
  9. package/.framework/cli/commands/init.ts +141 -242
  10. package/.framework/cli/commands/install-app.ts +1336 -314
  11. package/.framework/cli/commands/items.ts +31 -29
  12. package/.framework/cli/commands/migrate.ts +299 -156
  13. package/.framework/cli/commands/migrations.ts +62 -30
  14. package/.framework/cli/commands/pipelines.ts +31 -29
  15. package/.framework/cli/commands/status.ts +105 -45
  16. package/.framework/cli/commands/system.ts +47 -42
  17. package/.framework/cli/commands/test.ts +161 -102
  18. package/.framework/cli/commands/upgrade.ts +260 -0
  19. package/.framework/cli/commands/validate-app.ts +517 -161
  20. package/.framework/cli/context.ts +117 -85
  21. package/.framework/cli/env-loader.ts +74 -43
  22. package/.framework/cli/index.ts +70 -46
  23. package/.framework/cli/lib/project-files.ts +404 -0
  24. package/.framework/docs/guides/testing-guide.md +1 -1
  25. package/.framework/docs/runtime-types.md +72 -72
  26. package/.framework/functions/_shared/access.ts +84 -0
  27. package/.framework/functions/_shared/agent-runner.ts +5067 -1026
  28. package/.framework/functions/_shared/app-manifest.ts +214 -94
  29. package/.framework/functions/_shared/ast.ts +214 -0
  30. package/.framework/functions/_shared/audit.ts +91 -55
  31. package/.framework/functions/_shared/cil.ts +368 -127
  32. package/.framework/functions/_shared/db.ts +337 -68
  33. package/.framework/functions/_shared/funnel.ts +228 -0
  34. package/.framework/functions/_shared/geo.ts +105 -0
  35. package/.framework/functions/_shared/hash-api-key.ts +94 -17
  36. package/.framework/functions/_shared/index.ts +22 -224
  37. package/.framework/functions/_shared/kb.ts +832 -58
  38. package/.framework/functions/_shared/llm.ts +118 -18
  39. package/.framework/functions/_shared/logging.ts +317 -19
  40. package/.framework/functions/_shared/middleware.ts +701 -131
  41. package/.framework/functions/_shared/notify.ts +70 -0
  42. package/.framework/functions/_shared/outcomes.ts +34 -19
  43. package/.framework/functions/_shared/permissions.ts +501 -315
  44. package/.framework/functions/_shared/pipeline-runner.ts +704 -155
  45. package/.framework/functions/_shared/principal.ts +436 -263
  46. package/.framework/functions/_shared/rate-limit.ts +233 -0
  47. package/.framework/functions/_shared/resolve-credentials.ts +86 -19
  48. package/.framework/functions/_shared/resolve-ids.ts +203 -139
  49. package/.framework/functions/_shared/retry-deliveries.ts +51 -16
  50. package/.framework/functions/_shared/schema-utils.ts +602 -521
  51. package/.framework/functions/_shared/security.ts +345 -0
  52. package/.framework/functions/_shared/testing.ts +197 -172
  53. package/.framework/functions/_shared/tracing.ts +351 -21
  54. package/.framework/functions/_shared/trigger-engine.ts +425 -136
  55. package/.framework/functions/_shared/webhook-registration.ts +71 -70
  56. package/.framework/functions/_shared/webhook-registry.ts +126 -83
  57. package/.framework/functions/account-nodes.ts +30 -30
  58. package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
  59. package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
  60. package/.framework/functions/adapters/openai-outbound.ts +15 -16
  61. package/.framework/functions/admin-data.ts +596 -173
  62. package/.framework/functions/admin-funnel.ts +64 -60
  63. package/.framework/functions/admin-install-funnel.ts +84 -66
  64. package/.framework/functions/admin-signals.ts +69 -51
  65. package/.framework/functions/ai-agents.ts +431 -106
  66. package/.framework/functions/ai-interactions.ts +186 -112
  67. package/.framework/functions/api-keys.ts +107 -107
  68. package/.framework/functions/apps.ts +154 -136
  69. package/.framework/functions/auth.ts +83 -65
  70. package/.framework/functions/cil-agent-ingest.ts +189 -232
  71. package/.framework/functions/cil-agent.ts +433 -177
  72. package/.framework/functions/cil-callmap.ts +642 -430
  73. package/.framework/functions/cil-config.ts +139 -135
  74. package/.framework/functions/cil-context.ts +214 -127
  75. package/.framework/functions/cil-doc.ts +587 -458
  76. package/.framework/functions/cil-embeddings.ts +453 -364
  77. package/.framework/functions/cil-graph.ts +427 -142
  78. package/.framework/functions/cil-ingest.ts +1418 -1154
  79. package/.framework/functions/cil-pipeline.ts +276 -21
  80. package/.framework/functions/cil-project.ts +659 -132
  81. package/.framework/functions/cil-validate.ts +198 -164
  82. package/.framework/functions/debug-auth.ts +57 -55
  83. package/.framework/functions/deliveries.ts +80 -21
  84. package/.framework/functions/embeddings.ts +1023 -318
  85. package/.framework/functions/eval-harness.ts +146 -108
  86. package/.framework/functions/integration-outbound.ts +205 -75
  87. package/.framework/functions/integration-routes.ts +128 -23
  88. package/.framework/functions/integrations.ts +125 -100
  89. package/.framework/functions/invites.ts +1095 -460
  90. package/.framework/functions/item-progress.ts +158 -102
  91. package/.framework/functions/kb.ts +34 -10
  92. package/.framework/functions/logs.ts +133 -133
  93. package/.framework/functions/observability.ts +152 -122
  94. package/.framework/functions/pipeline-executions.ts +147 -132
  95. package/.framework/functions/pipelines.ts +134 -119
  96. package/.framework/functions/prompt-configs.ts +96 -80
  97. package/.framework/functions/roles.ts +112 -82
  98. package/.framework/functions/security.ts +450 -0
  99. package/.framework/functions/system-cron.ts +117 -80
  100. package/.framework/functions/system.ts +158 -98
  101. package/.framework/functions/tests.ts +29 -29
  102. package/.framework/functions/timers.ts +94 -95
  103. package/.framework/functions/trigger-scheduler.ts +10 -0
  104. package/.framework/functions/triggers.ts +179 -149
  105. package/.framework/functions/types.ts +137 -125
  106. package/.framework/mcp/index.ts +133 -0
  107. package/.framework/mcp/load-env.ts +60 -0
  108. package/.framework/mcp/shared/app-manifest.ts +275 -0
  109. package/.framework/mcp/shared/db.ts +477 -0
  110. package/.framework/mcp/shared/kb.ts +118 -0
  111. package/.framework/mcp/tools/architect.ts +431 -0
  112. package/.framework/mcp/tools/cil/context.ts +345 -0
  113. package/.framework/mcp/tools/cil/graph.ts +242 -0
  114. package/.framework/mcp/tools/cil/ingest.ts +1217 -0
  115. package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
  116. package/.framework/mcp/tools/cil/pipeline.ts +767 -0
  117. package/.framework/mcp/tools/cil/project.ts +791 -0
  118. package/.framework/mcp/tools/cil/retrieval.ts +336 -0
  119. package/.framework/mcp/tools/cil/search-core.ts +454 -0
  120. package/.framework/mcp/tools/cil/search.ts +97 -0
  121. package/.framework/mcp/tools/cil/suggest.ts +186 -0
  122. package/.framework/mcp/tools/cil/validate.ts +1369 -0
  123. package/.framework/mcp/tools/kb/delete.ts +139 -0
  124. package/.framework/mcp/tools/kb/index.ts +52 -0
  125. package/.framework/mcp/tools/kb/ingest.ts +84 -0
  126. package/.framework/mcp/tools/kb/list-types.ts +102 -0
  127. package/.framework/mcp/tools/kb/publish.ts +100 -0
  128. package/.framework/mcp/tools/kb/reindex.ts +86 -0
  129. package/.framework/mcp/tools/kb/revoke.ts +85 -0
  130. package/.framework/mcp/tools/kb/search.ts +101 -0
  131. package/.framework/mcp/tools/kb/upsert.ts +125 -0
  132. package/.framework/mcp/tools/observability.ts +510 -0
  133. package/.framework/migrations/001_core_schema.sql +15 -0
  134. package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
  135. package/.framework/migrations/003_core_system_data.sql +16 -1
  136. package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
  137. package/.framework/migrations/005_core_observability.sql +17 -1
  138. package/.framework/migrations/006_security_hardening_rls.sql +15 -0
  139. package/.framework/migrations/007_kb_article_list.sql +17 -1
  140. package/.framework/migrations/008_items_target.sql +15 -0
  141. package/.framework/migrations/009_roles_slug_unique.sql +15 -0
  142. package/.framework/migrations/010_auth_user_trigger.sql +15 -0
  143. package/.framework/migrations/011_spine_system_account.sql +16 -0
  144. package/.framework/migrations/012_service_role_grants.sql +16 -0
  145. package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
  146. package/.framework/migrations/014_apps_required_roles.sql +16 -0
  147. package/.framework/migrations/015_types_kind_slug_unique.sql +15 -0
  148. package/.framework/migrations/016_cil_types.sql +281 -0
  149. package/.framework/migrations/017_cil_stable_ids.sql +37 -0
  150. package/.framework/migrations/018_runtime_tables.sql +129 -0
  151. package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
  152. package/.framework/migrations/020_schema_reconciliation.sql +67 -0
  153. package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
  154. package/.framework/migrations/032_cil_status_migration.sql +73 -0
  155. package/.framework/migrations/033_cil_versioning.sql +73 -0
  156. package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
  157. package/.framework/migrations/035_rate_limits.sql +55 -0
  158. package/.framework/migrations/036_demo_record_flags.sql +72 -0
  159. package/.framework/migrations/037_kb_types_canonical.sql +244 -0
  160. package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
  161. package/.framework/migrations/042_registration_hierarchy.sql +309 -0
  162. package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
  163. package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
  164. package/.framework/migrations/045_security_critical_rls.sql +139 -0
  165. package/.framework/migrations/046_security_missing_rls.sql +79 -0
  166. package/.framework/migrations/047_people_updated_by.sql +27 -0
  167. package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
  168. package/.framework/migrations/049_security_blocklist.sql +148 -0
  169. package/.framework/migrations/050_notifications.sql +49 -0
  170. package/.framework/migrations/051_message_agent_fields.sql +74 -0
  171. package/.framework/migrations/052_registration_security.sql +421 -0
  172. package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
  173. package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
  174. package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
  175. package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
  176. package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
  177. package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
  178. package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
  179. package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
  180. package/.framework/migrations/061_fk_dedup.sql +32 -0
  181. package/.framework/public/spine-logo.svg +10 -3
  182. package/.framework/scripts/app-install-cli.ts +190 -93
  183. package/.framework/scripts/assemble-frontend.sh +127 -44
  184. package/.framework/scripts/assemble-functions.sh +128 -30
  185. package/.framework/scripts/boundary-check.sh +6 -2
  186. package/.framework/scripts/build-manifest.sh +24 -68
  187. package/.framework/scripts/check-core-integrity.sh +15 -76
  188. package/.framework/scripts/checksum-manifest.mts +343 -0
  189. package/.framework/scripts/cil-migrate-markers.ts +403 -0
  190. package/.framework/scripts/fix-cil-markers.mjs +176 -0
  191. package/.framework/scripts/verify-integrity.sh +21 -57
  192. package/.framework/scripts/verify-manifest.mts +305 -0
  193. package/.framework/seeds/types/funnel_signal_use.json +74 -21
  194. package/.framework/seeds/types/spine_instance.json +73 -21
  195. package/.framework/src/App.tsx +118 -72
  196. package/.framework/src/apps/admin/index.tsx +855 -58
  197. package/.framework/src/components/AppWrapper.tsx +43 -45
  198. package/.framework/src/components/CustomAppLoader.tsx +160 -116
  199. package/.framework/src/components/admin/AdminListPage.tsx +46 -44
  200. package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
  201. package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
  202. package/.framework/src/components/admin/PageInstructions.tsx +98 -2
  203. package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
  204. package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
  205. package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
  206. package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
  207. package/.framework/src/components/app-sidebar.tsx +42 -45
  208. package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
  209. package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
  210. package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
  211. package/.framework/src/components/kb/KBArticleList.tsx +251 -10
  212. package/.framework/src/components/layout/AppShell.tsx +51 -45
  213. package/.framework/src/components/layout/Header.tsx +42 -43
  214. package/.framework/src/components/layout/Layout.tsx +46 -46
  215. package/.framework/src/components/layout/Sidebar.tsx +196 -96
  216. package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
  217. package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
  218. package/.framework/src/components/runtime/DataFilters.tsx +49 -74
  219. package/.framework/src/components/runtime/DataHeader.tsx +53 -32
  220. package/.framework/src/components/runtime/DataListPage.tsx +51 -155
  221. package/.framework/src/components/runtime/DataStats.tsx +66 -44
  222. package/.framework/src/components/runtime/DataTable.tsx +49 -149
  223. package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
  224. package/.framework/src/components/runtime/index.ts +119 -16
  225. package/.framework/src/components/search-form.tsx +46 -29
  226. package/.framework/src/components/shared/AgentView.tsx +65 -48
  227. package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
  228. package/.framework/src/components/shared/InviteManager.tsx +207 -97
  229. package/.framework/src/components/shared/MemberList.tsx +97 -0
  230. package/.framework/src/components/shared/SchemaFields.tsx +107 -86
  231. package/.framework/src/components/ui/DataTable.tsx +80 -68
  232. package/.framework/src/components/ui/Form.tsx +157 -146
  233. package/.framework/src/components/ui/ItemCard.tsx +74 -67
  234. package/.framework/src/components/ui/ItemListView.tsx +73 -68
  235. package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
  236. package/.framework/src/components/ui/Modal.tsx +78 -68
  237. package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
  238. package/.framework/src/components/ui/accordion.tsx +85 -86
  239. package/.framework/src/components/ui/alert-dialog.tsx +197 -184
  240. package/.framework/src/components/ui/alert.tsx +105 -94
  241. package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
  242. package/.framework/src/components/ui/avatar.tsx +122 -107
  243. package/.framework/src/components/ui/badge.tsx +60 -55
  244. package/.framework/src/components/ui/breadcrumb.tsx +127 -128
  245. package/.framework/src/components/ui/button-group.tsx +86 -72
  246. package/.framework/src/components/ui/button.tsx +71 -50
  247. package/.framework/src/components/ui/calendar.tsx +72 -57
  248. package/.framework/src/components/ui/card.tsx +136 -129
  249. package/.framework/src/components/ui/carousel.tsx +226 -107
  250. package/.framework/src/components/ui/chart.tsx +252 -147
  251. package/.framework/src/components/ui/checkbox.tsx +43 -44
  252. package/.framework/src/components/ui/collapsible.tsx +86 -71
  253. package/.framework/src/components/ui/combobox.tsx +282 -249
  254. package/.framework/src/components/ui/command.tsx +158 -146
  255. package/.framework/src/components/ui/context-menu.tsx +239 -240
  256. package/.framework/src/components/ui/dialog.tsx +174 -157
  257. package/.framework/src/components/ui/direction.tsx +72 -56
  258. package/.framework/src/components/ui/drawer.tsx +168 -169
  259. package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
  260. package/.framework/src/components/ui/empty.tsx +131 -120
  261. package/.framework/src/components/ui/field.tsx +205 -173
  262. package/.framework/src/components/ui/hover-card.tsx +71 -72
  263. package/.framework/src/components/ui/input-group.tsx +148 -133
  264. package/.framework/src/components/ui/input-otp.tsx +99 -86
  265. package/.framework/src/components/ui/input.tsx +43 -41
  266. package/.framework/src/components/ui/item.tsx +207 -185
  267. package/.framework/src/components/ui/kbd.tsx +57 -56
  268. package/.framework/src/components/ui/label.tsx +45 -41
  269. package/.framework/src/components/ui/menubar.tsx +268 -236
  270. package/.framework/src/components/ui/native-select.tsx +85 -86
  271. package/.framework/src/components/ui/navigation-menu.tsx +166 -156
  272. package/.framework/src/components/ui/pagination.tsx +131 -141
  273. package/.framework/src/components/ui/popover.tsx +125 -128
  274. package/.framework/src/components/ui/progress.tsx +47 -44
  275. package/.framework/src/components/ui/radio-group.tsx +60 -55
  276. package/.framework/src/components/ui/resizable.tsx +85 -72
  277. package/.framework/src/components/ui/scroll-area.tsx +57 -58
  278. package/.framework/src/components/ui/select.tsx +182 -169
  279. package/.framework/src/components/ui/separator.tsx +42 -43
  280. package/.framework/src/components/ui/sheet.tsx +170 -159
  281. package/.framework/src/components/ui/sidebar.tsx +395 -398
  282. package/.framework/src/components/ui/skeleton.tsx +42 -43
  283. package/.framework/src/components/ui/slider.tsx +61 -44
  284. package/.framework/src/components/ui/sonner.tsx +44 -44
  285. package/.framework/src/components/ui/spinner.tsx +47 -42
  286. package/.framework/src/components/ui/switch.tsx +56 -42
  287. package/.framework/src/components/ui/table-primitives.tsx +272 -132
  288. package/.framework/src/components/ui/table.tsx +140 -142
  289. package/.framework/src/components/ui/tabs.tsx +110 -93
  290. package/.framework/src/components/ui/textarea.tsx +43 -44
  291. package/.framework/src/components/ui/toggle-group.tsx +87 -71
  292. package/.framework/src/components/ui/toggle.tsx +56 -56
  293. package/.framework/src/components/ui/tooltip.tsx +99 -85
  294. package/.framework/src/contexts/AppContext.tsx +166 -114
  295. package/.framework/src/contexts/AuthContext.tsx +232 -137
  296. package/.framework/src/hooks/use-mobile.ts +43 -44
  297. package/.framework/src/hooks/useApi.ts +185 -172
  298. package/.framework/src/hooks/useAppPath.ts +31 -29
  299. package/.framework/src/hooks/useApps.ts +77 -42
  300. package/.framework/src/hooks/useEntityList.ts +66 -29
  301. package/.framework/src/hooks/useEntityRecord.ts +76 -32
  302. package/.framework/src/hooks/useForm.ts +62 -30
  303. package/.framework/src/hooks/useListSchema.ts +60 -43
  304. package/.framework/src/hooks/useSchemaRecord.ts +115 -95
  305. package/.framework/src/lib/api.ts +258 -134
  306. package/.framework/src/lib/registration.ts +181 -0
  307. package/.framework/src/lib/supabase.ts +118 -81
  308. package/.framework/src/lib/utils.ts +266 -266
  309. package/.framework/src/main.tsx +43 -44
  310. package/.framework/src/pages/DashboardPage.tsx +44 -43
  311. package/.framework/src/pages/NoAppPage.tsx +50 -0
  312. package/.framework/src/pages/NotFoundPage.tsx +32 -29
  313. package/.framework/src/pages/SetupPage.tsx +34 -33
  314. package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
  315. package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
  316. package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
  317. package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
  318. package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
  319. package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
  320. package/.framework/src/pages/admin/AppsPage.tsx +45 -42
  321. package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
  322. package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
  323. package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
  324. package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
  325. package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
  326. package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
  327. package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
  328. package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
  329. package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
  330. package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
  331. package/.framework/src/pages/admin/LogsPage.tsx +87 -137
  332. package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
  333. package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
  334. package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
  335. package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
  336. package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
  337. package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
  338. package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
  339. package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
  340. package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
  341. package/.framework/src/pages/admin/RolesPage.tsx +47 -164
  342. package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
  343. package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
  344. package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
  345. package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
  346. package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
  347. package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
  348. package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
  349. package/.framework/src/pages/admin/TimersPage.tsx +44 -42
  350. package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
  351. package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
  352. package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
  353. package/.framework/src/pages/admin/TypesPage.tsx +45 -42
  354. package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
  355. package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
  356. package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
  357. package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
  358. package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
  359. package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
  360. package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
  361. package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
  362. package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
  363. package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
  364. package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
  365. package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
  366. package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
  367. package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
  368. package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
  369. package/.framework/src/pages/auth/LoginPage.tsx +38 -32
  370. package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
  371. package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
  372. package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
  373. package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
  374. package/.framework/src/types/auth.ts +101 -93
  375. package/.framework/src/types/types.ts +283 -262
  376. package/.framework/templates/project.json +87 -0
  377. package/.framework/templates/spine.config.neutral.json +7 -0
  378. package/.framework/tests/api/api-surface.test.ts +381 -0
  379. package/.framework/tests/fixtures/seed.ts +427 -0
  380. package/.framework/tests/fixtures/teardown.ts +228 -0
  381. package/.framework/tests/reporter.ts +351 -0
  382. package/.framework/tests/setup.ts +135 -0
  383. package/.framework/tests/ui/ui-sweep.ts +278 -0
  384. package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
  385. package/.framework/tests/unit/agent-runner.test.ts +2389 -0
  386. package/.framework/tests/unit/ai-interactions.test.ts +81 -0
  387. package/.framework/tests/unit/app-manifest.test.ts +359 -0
  388. package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
  389. package/.framework/tests/unit/cil-determinism.test.ts +85 -0
  390. package/.framework/tests/unit/core-isolation.test.ts +153 -0
  391. package/.framework/tests/unit/funnel-signals.test.ts +135 -0
  392. package/.framework/tests/unit/install-app.test.ts +1759 -0
  393. package/.framework/tests/unit/invites-security.test.ts +572 -0
  394. package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
  395. package/.framework/tests/unit/kb-search.test.ts +119 -0
  396. package/.framework/tests/unit/migrate.test.ts +509 -0
  397. package/.framework/tests/unit/notify.test.ts +136 -0
  398. package/.framework/tests/unit/permissions.test.ts +269 -0
  399. package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
  400. package/.framework/tests/unit/principal-cache.test.ts +138 -0
  401. package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
  402. package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
  403. package/.framework/tests/unit/schema-utils.test.ts +225 -0
  404. package/.framework/tests/unit/trigger-engine.test.ts +513 -0
  405. package/.framework/tests/unit/validate-app.test.ts +527 -0
  406. package/README.md +34 -3
  407. package/bin/spine-framework.cjs +1 -0
  408. package/config/tailwind.config.cjs +7 -0
  409. package/config/tsconfig.functions.json +42 -0
  410. package/config/tsconfig.json +37 -9
  411. package/config/vite.config.ts +31 -2
  412. package/netlify.toml +31 -3
  413. package/package.json +46 -29
  414. package/scripts/assemble-frontend.sh +127 -44
  415. package/scripts/assemble-functions.sh +127 -29
  416. package/scripts/boundary-check.sh +6 -2
  417. package/scripts/build-manifest.sh +24 -68
  418. package/scripts/checksum-manifest.mts +345 -0
  419. package/scripts/dev-clean.sh +86 -0
  420. package/scripts/dev-netlify.sh +49 -0
  421. package/scripts/netlify-dev-wrapper.sh +2 -0
  422. package/scripts/verify-install.ts +358 -0
  423. package/scripts/verify-integrity.sh +21 -57
  424. package/scripts/verify-manifest.mts +305 -0
  425. package/templates/project/gitignore +45 -0
  426. package/{config → templates/project}/package-lock.json +22335 -9366
  427. package/vitest.config.ts +46 -0
  428. package/.framework/public/spine.config.json +0 -91
  429. package/config/deno.lock +0 -108
  430. package/config/tsconfig.node.tsbuildinfo +0 -1
  431. package/config/tsconfig.tsbuildinfo +0 -1
  432. package/config/vite.config.d.ts +0 -2
  433. package/custom/.devin/AGENT.md +0 -357
  434. package/custom/.devin/skills/install-app/SKILL.md +0 -39
  435. package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
  436. package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
  437. package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
  438. package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
  439. package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
  440. package/custom/.devin/workflows/app-install.yaml +0 -83
  441. package/custom/README.md +0 -79
  442. package/docs/README.md +0 -15
  443. package/scripts/app-install-cli.ts +0 -286
  444. package/scripts/check-core-integrity.sh +0 -82
  445. package/scripts/ingest-chunks.cjs +0 -202
  446. package/scripts/kb-chunk-parser.cjs +0 -312
  447. package/scripts/kb-chunk-parser.ts +0 -330
  448. package/scripts/kb-ingest-docs.ts +0 -203
  449. package/scripts/load-test-app-install.ts +0 -484
  450. package/scripts/test-login.js +0 -33
  451. package/spine.config.json +0 -91
@@ -1,23 +1,18 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Admin prompt config list page module header"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Imports React dependencies and admin UI components for prompt configuration management"]
4
+ // CIL[DOC-CONTEXT module="admin-prompt-configs" layer="pages" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, UI icons, components, hooks, and utilities for the prompt configs page" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="ai-rag"]
10
+
1
11
 
2
12
 
3
13
 
4
14
 
5
15
 
6
- // CIL[BEGIN chunk_id="promptconfigspage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
7
- // CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
8
- // CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for PromptConfigsPage component"]
9
- // CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
10
- // CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
11
- // CIL[DOC-MICRO logic_summary="Imports React, icons, UI components, and utility functions" notable_decisions="[]"]
12
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
13
- // CIL[DOC-STABILITY stability="stable"]
14
- // CIL[DOC-AUDIENCE audience="developer"]
15
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
16
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
17
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
18
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
19
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
21
16
  import React, { useState } from 'react'
22
17
  import { Plus, FileText, CheckCircle, Star, Cpu, MessageSquare } from 'lucide-react';
23
18
  import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
@@ -27,21 +22,23 @@ import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
27
22
  import { formatDateTime } from '../../lib/utils'
28
23
  import { useApi } from '../../hooks/useApi'
29
24
  import { apiFetch } from '../../lib/api'
30
- // CIL[END chunk_id="promptconfigspage_module_header_1783666257"]
31
- // CIL[BEGIN chunk_id="promptconfigspage_interface_promptconfig_1783666257" type="interface" identity="PromptConfig" parent="none"]
32
- // CIL[DOC-MACRO purpose="Define prompt configuration data structure"]
33
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for prompt configuration entities"]
34
- // CIL[DOC-CONTEXT module="PromptConfigsPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
35
- // CIL[DOC-CONTRACT inputs="none" outputs="PromptConfig interface" errors="Type errors" side_effects="Type system"]
36
- // CIL[DOC-MICRO logic_summary="Defines structure for AI prompt configurations with model settings" notable_decisions="[]"]
37
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
38
- // CIL[DOC-STABILITY stability="stable"]
39
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, \."]
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."]
25
+
26
+ // CIL[DOC-VECTOR type="context" content="purpose='Admin prompt config list page module header'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
27
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
28
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
29
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
43
30
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
44
31
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
32
+ // CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:module_header:module_header"]
33
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfig:interface" type="interface" identity="PromptConfig" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
34
+ // CIL[DOC-MACRO purpose="PromptConfig TypeScript interface definition"]
35
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares the shape of prompt configuration records used by the admin page"]
36
+ // CIL[DOC-CONTEXT module="admin-prompt-configs" layer="types" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/PromptConfigsPage.tsx"]
37
+ // CIL[DOC-CONTRACT inputs="none" outputs="PromptConfig type" errors="none" side_effects="none"]
38
+ // CIL[DOC-MICRO logic_summary="Defines optional and required fields for prompt config records including model settings, status, and audit timestamps" notable_decisions="[]"]
39
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
40
+ // CIL[DOC-STABILITY stability="stable"]
41
+
45
42
  interface PromptConfig {
46
43
  id: string
47
44
  name: string
@@ -61,21 +58,23 @@ interface PromptConfig {
61
58
  created_at: string
62
59
  updated_at: string
63
60
  }
64
- // CIL[END chunk_id="promptconfigspage_interface_promptconfig_1783666257"]
65
- // CIL[BEGIN chunk_id="promptconfigspage_function_promptconfigspage_1783666257" type="function" identity="PromptConfigsPage" parent="none"]
66
- // CIL[DOC-MACRO purpose="Render the complete prompt configs interface"]
67
- // CIL[DOC-RESPONSIBILITY responsibility="Main render logic for prompt configs page"]
68
- // CIL[DOC-CONTEXT module="PromptConfigsPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\"]"]
69
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
70
- // CIL[DOC-MICRO logic_summary="Renders AdminListPage with stats, filters, and prompt config table" notable_decisions="[]"]
71
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
72
- // CIL[DOC-STABILITY stability="stable"]
73
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx."]
74
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
75
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
76
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
61
+ // CIL[DOC-VECTOR type="context" content="purpose='PromptConfig TypeScript interface definition'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
62
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
63
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
64
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
77
65
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
78
66
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
67
+ // CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfig:interface"]
68
+
69
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfigsPage:component" type="component" identity="PromptConfigsPage" parent="~/.framework/src/pages/admin/PromptConfigsPage.tsx"]
70
+ // CIL[DOC-MACRO purpose="Renders the admin prompt configurations list page"]
71
+ // CIL[DOC-RESPONSIBILITY responsibility="Loads prompt configs, applies filters and sorting, and renders an AdminListPage with stats and table"]
72
+ // CIL[DOC-CONTEXT module="admin-prompt-configs" layer="pages" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/PromptConfigsPage.tsx"]
73
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX element" errors="useApi error if API fetch fails" side_effects="window navigation on row click"]
74
+ // CIL[DOC-MICRO logic_summary="Fetches prompt configs, filters by search, status, and type, sorts by selected key, and renders stat cards and sortable table rows" notable_decisions="[]"]
75
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
76
+ // CIL[DOC-STABILITY stability="stable"]
77
+
79
78
  export function PromptConfigsPage() {
80
79
  const [searchTerm, setSearchTerm] = useState('')
81
80
  const [selectedStatus, setSelectedStatus] = useState('all')
@@ -83,20 +82,6 @@ export function PromptConfigsPage() {
83
82
  const [sortKey, setSortKey] = useState('name')
84
83
  const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc')
85
84
 
86
- // CIL[BEGIN chunk_id="promptconfigspage_hooks_1783666257" type="hooks" identity="useApi" parent="promptconfigspage_function_promptconfigspage_1783666257"]
87
- // CIL[DOC-MACRO purpose="Fetch prompt configurations from API"]
88
- // CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
89
- // CIL[DOC-CONTEXT module="PromptConfigsPage" layer="data" related_files="[\"\\\"]"]
90
- // CIL[DOC-CONTRACT inputs="none" outputs="prompt configs array" errors="API errors" side_effects="HTTP requests"]
91
- // CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch prompt configurations list" notable_decisions="[]"]
92
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
93
- // CIL[DOC-STABILITY stability="stable"]
94
- // CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: \."]
95
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
96
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
97
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
98
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
99
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
100
85
  const { data: promptConfigs, loading, error, refetch } = useApi<PromptConfig[]>(
101
86
  async () => {
102
87
  const response = await apiFetch('/api/prompt-configs?action=list')
@@ -106,22 +91,7 @@ export function PromptConfigsPage() {
106
91
  },
107
92
  { immediate: true }
108
93
  )
109
- // CIL[END chunk_id="promptconfigspage_hooks_1783666257"]
110
94
 
111
- // CIL[BEGIN chunk_id="promptconfigspage_filters_1783666257" type="filter_logic" identity="filteredPromptConfigs" parent="promptconfigspage_function_promptconfigspage_1783666257"]
112
- // CIL[DOC-MACRO purpose="Filter and sort prompt configurations"]
113
- // CIL[DOC-RESPONSIBILITY responsibility="Handle filteredPromptConfigs"]
114
- // CIL[DOC-CONTEXT module="PromptConfigsPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
115
- // CIL[DOC-CONTRACT inputs="none" outputs="filtered configs" errors="none" side_effects="none"]
116
- // CIL[DOC-MICRO logic_summary="Filters configs by search, status, and type; extracts unique types" notable_decisions="[]"]
117
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
118
- // CIL[DOC-STABILITY stability="stable"]
119
- // CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
120
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
121
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
122
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
123
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
124
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
125
95
  const filteredPromptConfigs = (promptConfigs || []).filter(config => {
126
96
  const matchesSearch = config.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
127
97
  config.slug.toLowerCase().includes(searchTerm.toLowerCase()) ||
@@ -134,22 +104,7 @@ export function PromptConfigsPage() {
134
104
  })
135
105
 
136
106
  const promptTypes = Array.from(new Set((promptConfigs || []).map(c => c.prompt_type).filter(Boolean)))
137
- // CIL[END chunk_id="promptconfigspage_filters_1783666257"]
138
107
 
139
- // CIL[BEGIN chunk_id="promptconfigspage_handlers_1783666257" type="event_handlers" identity="handleSort" parent="promptconfigspage_function_promptconfigspage_1783666257"]
140
- // CIL[DOC-MACRO purpose="Handle sorting and row click events"]
141
- // CIL[DOC-RESPONSIBILITY responsibility="Handle handleSort"]
142
- // CIL[DOC-CONTEXT module="handleSort" layer="unknown" related_files="[]"]
143
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
144
- // CIL[DOC-MICRO logic_summary="Implements handleSort" notable_decisions="[]"]
145
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
146
- // CIL[DOC-STABILITY stability="stable"]
147
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
148
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
149
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
150
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
151
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
152
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
153
108
  const handleSort = (key: string) => {
154
109
  if (sortKey === key) {
155
110
  setSortDirection(sortDirection === 'asc' ? 'desc' : 'asc')
@@ -179,22 +134,7 @@ export function PromptConfigsPage() {
179
134
 
180
135
  return 0
181
136
  })
182
- // CIL[END chunk_id="promptconfigspage_handlers_1783666257"]
183
137
 
184
- // CIL[BEGIN chunk_id="promptconfigspage_stats_1783666257" type="stats_config" identity="statsCards" parent="promptconfigspage_function_promptconfigspage_1783666257"]
185
- // CIL[DOC-MACRO purpose="Configure statistics cards and filter options"]
186
- // CIL[DOC-RESPONSIBILITY responsibility="Handle statsCards"]
187
- // CIL[DOC-CONTEXT module="statsCards" layer="unknown" related_files="[]"]
188
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
189
- // CIL[DOC-MICRO logic_summary="Implements statsCards" notable_decisions="[]"]
190
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
191
- // CIL[DOC-STABILITY stability="stable"]
192
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
193
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
194
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
195
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
196
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
197
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
198
138
  const statsCards = [
199
139
  {
200
140
  title: 'Total Prompts',
@@ -247,22 +187,7 @@ export function PromptConfigsPage() {
247
187
  onChange: (v: string) => setSelectedType(v)
248
188
  }
249
189
  ]
250
- // CIL[END chunk_id="promptconfigspage_stats_1783666257"]
251
190
 
252
- // CIL[BEGIN chunk_id="promptconfigspage_render_1783666257" type="render_logic" identity="return" parent="promptconfigspage_function_promptconfigspage_1783666257"]
253
- // CIL[DOC-MACRO purpose="Render the complete prompt configs interface"]
254
- // CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
255
- // CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
256
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
257
- // CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
258
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
259
- // CIL[DOC-STABILITY stability="stable"]
260
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
261
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
262
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
263
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
264
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
265
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
266
191
  return (
267
192
  <AdminListPage
268
193
  title="Prompt Configs"
@@ -397,5 +322,10 @@ export function PromptConfigsPage() {
397
322
  </AdminListPage>
398
323
  )
399
324
  }
400
- // CIL[END chunk_id="promptconfigspage_render_1783666257"]
401
- // CIL[END chunk_id="promptconfigspage_function_promptconfigspage_1783666257"]
325
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders the admin prompt configurations list page'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
326
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
327
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
328
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
329
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
330
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
331
+ // CIL[END stable_id="~/.framework/src/pages/admin/PromptConfigsPage.tsx:PromptConfigsPage:component"]
@@ -1,22 +1,17 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Declares and re-exports UI component imports for the admin ProperlyDesignedPage module"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Dependency import block for admin dashboard page components and icons"]
4
+ // CIL[DOC-CONTEXT module=".framework/src/pages/admin/ProperlyDesignedPage.tsx" layer="pages" related_files=".framework/src/components/ui/accordion.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/components/ui/dropdown-menu.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/separator.tsx,.framework/src/components/ui/switch.tsx,.framework/src/components/ui/tabs.tsx"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="imported React, UI components, and icon symbols" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, local UI primitives, Radix UI components, and Lucide icons required by the dashboard page" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="maintainers"]
10
+
1
11
 
2
12
 
3
13
 
4
14
 
5
- // CIL[BEGIN chunk_id="properlydesignedpage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
6
- // CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
7
- // CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for ProperlyDesignedPage component"]
8
- // CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
9
- // CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
10
- // CIL[DOC-MICRO logic_summary="Imports React, comprehensive UI components, icons, and utility functions" notable_decisions="[]"]
11
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
12
- // CIL[DOC-STABILITY stability="stable"]
13
- // CIL[DOC-AUDIENCE audience="developer"]
14
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
15
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
16
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
17
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
18
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
15
  import { useState } from 'react'
21
16
  import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../components/ui/card'
22
17
  import { Button } from '../../components/ui/button'
@@ -86,41 +81,28 @@ import {
86
81
  TrendingUp,
87
82
  Activity
88
83
  } from 'lucide-react'
89
- // CIL[END chunk_id="properlydesignedpage_module_header_1783666257"]
90
- // CIL[BEGIN chunk_id="properlydesignedpage_function_properlydesignedpage_1783666257" type="function" identity="ProperlyDesignedPage" parent="none"]
91
- // CIL[DOC-MACRO purpose="Render the complete dashboard interface"]
92
- // CIL[DOC-RESPONSIBILITY responsibility="Main render logic for comprehensive dashboard page"]
93
- // CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
94
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
95
- // CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
96
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
97
- // CIL[DOC-STABILITY stability="stable"]
98
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
99
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
100
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
101
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
84
+
85
+ // CIL[DOC-VECTOR type="context" content="purpose='Declares and re-exports UI component imports for the admin ProperlyDesignedPage module'; No verified external callers; imports: .framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
86
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
87
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
88
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
102
89
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
103
90
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
91
+ // CIL[END stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:module_header:module_header"]
92
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:ProperlyDesignedPage:component" type="component" identity="ProperlyDesignedPage" parent="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
93
+ // CIL[DOC-MACRO purpose="Renders the admin dashboard overview page with tabs, stats, search, and settings UI"]
94
+ // CIL[DOC-RESPONSIBILITY responsibility="Display dashboard metrics, recent activity, reports, analytics placeholder, and user preferences"]
95
+ // CIL[DOC-CONTEXT module=".framework/src/pages/admin/ProperlyDesignedPage.tsx" layer="pages" related_files=".framework/src/components/ui/accordion.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/components/ui/dropdown-menu.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/separator.tsx,.framework/src/components/ui/switch.tsx,.framework/src/components/ui/tabs.tsx,.framework/src/pages/admin/ProperlyDesignedPage.tsx"]
96
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX.Element dashboard page" errors="none" side_effects="sets local React state for tab, search, notifications, and auto-save"]
97
+ // CIL[DOC-MICRO logic_summary="Implements a stateful React component with tabbed navigation, stat cards, search/filter bar, recent activity list, reports list, analytics placeholder, and settings toggles/forms" notable_decisions="[]"]
98
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
99
+ // CIL[DOC-STABILITY stability="stable"]
104
100
  export function ProperlyDesignedPage() {
105
101
  const [selectedTab, setSelectedTab] = useState('overview')
106
102
  const [searchQuery, setSearchQuery] = useState('')
107
103
  const [notifications, setNotifications] = useState(true)
108
104
  const [autoSave, setAutoSave] = useState(true)
109
105
 
110
- // CIL[BEGIN chunk_id="properlydesignedpage_render_1783666257" type="render_logic" identity="return" parent="properlydesignedpage_function_properlydesignedpage_1783666257"]
111
- // CIL[DOC-MACRO purpose="Render the complete dashboard interface"]
112
- // CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
113
- // CIL[DOC-CONTEXT module="ProperlyDesignedPage" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
114
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
115
- // CIL[DOC-MICRO logic_summary="Renders header, stats cards, search bar, tabs with multiple content sections" notable_decisions="[]"]
116
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
117
- // CIL[DOC-STABILITY stability="stable"]
118
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, \."]
119
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
120
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
121
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
122
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
123
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
124
106
  return (
125
107
  <div className="container mx-auto p-6 space-y-6">
126
108
  {/* Header Section */}
@@ -469,5 +451,10 @@ export function ProperlyDesignedPage() {
469
451
  </div>
470
452
  )
471
453
  }
472
- // CIL[END chunk_id="properlydesignedpage_render_1783666257"]
473
- // CIL[END chunk_id="properlydesignedpage_function_properlydesignedpage_1783666257"]
454
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders the admin dashboard overview page with tabs, stats, search, and settings UI'; No verified external callers; imports: .framework/src/components/ui/card.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx"]
455
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
456
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
457
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
458
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
459
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
460
+ // CIL[END stable_id="~/.framework/src/pages/admin/ProperlyDesignedPage.tsx:ProperlyDesignedPage:component"]
@@ -1,23 +1,13 @@
1
-
2
-
3
-
4
-
5
-
6
- // CIL[BEGIN chunk_id="roledetailpage_module_header_1783666257" type="module_header" identity="imports" parent="none"]
7
- // CIL[DOC-MACRO purpose="Import React dependencies and UI components"]
8
- // CIL[DOC-RESPONSIBILITY responsibility="Import all required modules for RoleDetailPage component"]
9
- // CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
10
- // CIL[DOC-CONTRACT inputs="none" outputs="React hooks, UI components, utilities" errors="Import errors" side_effects="Module loading"]
11
- // CIL[DOC-MICRO logic_summary="Imports React, router, UI components, icons, and utility functions" notable_decisions="[]"]
12
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Provides module-level imports and context for the admin role detail page."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Load React, routing, UI primitives, hooks, and utilities used by RoleDetailPage."]
4
+ // CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports dependencies for the role detail page." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
13
8
  // CIL[DOC-STABILITY stability="stable"]
14
- // CIL[DOC-AUDIENCE audience="developer"]
15
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
16
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
17
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
18
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
19
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
20
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
9
+ // CIL[DOC-AUDIENCE audience="admin-frontend"]
10
+
21
11
  import { useState, useEffect } from 'react'
22
12
  import { useParams, useNavigate } from 'react-router-dom'
23
13
  import { Button } from '../../components/ui/button'
@@ -33,21 +23,22 @@ import { useApi } from '../../hooks/useApi'
33
23
  import { apiFetch } from '../../lib/api'
34
24
  import { formatDateTime } from '../../lib/utils'
35
25
  import { PageInstructions } from '../../components/admin/PageInstructions'
36
- // CIL[END chunk_id="roledetailpage_module_header_1783666257"]
37
- // CIL[BEGIN chunk_id="roledetailpage_interface_role_1783666257" type="interface" identity="Role" parent="none"]
38
- // CIL[DOC-MACRO purpose="Define role data structure"]
39
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for role entities"]
40
- // CIL[DOC-CONTEXT module="RoleDetailPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
41
- // CIL[DOC-CONTRACT inputs="none" outputs="Role interface" errors="Type errors" side_effects="Type system"]
42
- // CIL[DOC-MICRO logic_summary="Defines structure for role configuration with permissions and metadata" notable_decisions="[]"]
43
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
44
- // CIL[DOC-STABILITY stability="stable"]
45
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
46
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
47
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
48
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
26
+
27
+ // CIL[DOC-VECTOR type="context" content="purpose='Provides module-level imports and context for the admin role detail page.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
28
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
29
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
30
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
49
31
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
50
32
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
33
+ // CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:module_header:module_header"]
34
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:Role:interface" type="interface" identity="Role" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
35
+ // CIL[DOC-MACRO purpose="Defines the TypeScript shape of a Role record used in the admin UI."]
36
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a typed contract for role data, permissions, and metadata."]
37
+ // CIL[DOC-CONTEXT module="admin" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/RoleDetailPage.tsx"]
38
+ // CIL[DOC-CONTRACT inputs="none" outputs="Role type definition" errors="none" side_effects="none"]
39
+ // CIL[DOC-MICRO logic_summary="Declares the Role interface fields consumed by the detail page and API." notable_decisions="[]"]
40
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
41
+ // CIL[DOC-STABILITY stability="stable"]
51
42
  interface Role {
52
43
  id: string
53
44
  name: string
@@ -60,21 +51,22 @@ interface Role {
60
51
  created_at: string
61
52
  updated_at: string
62
53
  }
63
- // CIL[END chunk_id="roledetailpage_interface_role_1783666257"]
64
- // CIL[BEGIN chunk_id="roledetailpage_function_roledetailpage_1783666257" type="function" identity="RoleDetailPage" parent="none"]
65
- // CIL[DOC-MACRO purpose="Render the complete role management interface"]
66
- // CIL[DOC-RESPONSIBILITY responsibility="Main render logic for role detail page"]
67
- // CIL[DOC-CONTEXT module="RoleDetailPage" layer="ui" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\"]"]
68
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX structure" errors="Render errors" side_effects="DOM updates"]
69
- // CIL[DOC-MICRO logic_summary="Renders loading states, error states, and role form with all fields" notable_decisions="[]"]
70
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
71
- // CIL[DOC-STABILITY stability="stable"]
72
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx."]
73
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
74
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
75
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
54
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the TypeScript shape of a Role record used in the admin UI.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
55
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
56
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
57
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
76
58
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
77
59
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
60
+ // CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:Role:interface"]
61
+
62
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:RoleDetailPage:component" type="component" identity="RoleDetailPage" parent="~/.framework/src/pages/admin/RoleDetailPage.tsx"]
63
+ // CIL[DOC-MACRO purpose="Renders a create/edit form for admin roles and their permissions."]
64
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetch role data, manage form state, validate permissions JSON, submit to the API, and render the admin UI."]
65
+ // CIL[DOC-CONTEXT module="admin" layer="page" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/RoleDetailPage.tsx"]
66
+ // CIL[DOC-CONTRACT inputs="URL id parameter ('new' or existing role), role data from /api/roles, user input" outputs="Rendered role form, navigation after save" errors="fetchError, save error, invalid permissions JSON" side_effects="Calls /api/roles (POST or PATCH) and navigates on success"]
67
+ // CIL[DOC-MICRO logic_summary="Initializes form from fetched role, parses permissions JSON, handles create/update submission, and renders instructions, alerts, and fields." notable_decisions="[]"]
68
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
69
+ // CIL[DOC-STABILITY stability="stable"]
78
70
  export function RoleDetailPage() {
79
71
  const { id } = useParams<{ id: string }>()
80
72
  const navigate = useNavigate()
@@ -92,20 +84,6 @@ export function RoleDetailPage() {
92
84
  const [isSubmitting, setIsSubmitting] = useState(false)
93
85
  const [error, setError] = useState<string | null>(null)
94
86
 
95
- // CIL[BEGIN chunk_id="roledetailpage_hooks_1783666257" type="hooks" identity="useApi" parent="roledetailpage_function_roledetailpage_1783666257"]
96
- // CIL[DOC-MACRO purpose="Fetch role data and manage form state"]
97
- // CIL[DOC-RESPONSIBILITY responsibility="Handle useApi"]
98
- // CIL[DOC-CONTEXT module="RoleDetailPage" layer="data" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
99
- // CIL[DOC-CONTRACT inputs="none" outputs="role data, form state" errors="API errors" side_effects="HTTP requests, state updates"]
100
- // CIL[DOC-MICRO logic_summary="Uses useApi hook to fetch role data and useEffect to sync form state" notable_decisions="[]"]
101
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
102
- // CIL[DOC-STABILITY stability="stable"]
103
- // CIL[DOC-VECTOR type="context" content="Layer: data. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
104
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
105
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
106
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
107
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
108
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
109
87
  const { data: role, loading, error: fetchError } = useApi<Role>(
110
88
  async () => {
111
89
  if (isCreateMode) return null
@@ -130,22 +108,7 @@ export function RoleDetailPage() {
130
108
  setPermissionsJson(JSON.stringify(role.permissions || {}, null, 2))
131
109
  }
132
110
  }, [role])
133
- // CIL[END chunk_id="roledetailpage_hooks_1783666257"]
134
111
 
135
- // CIL[BEGIN chunk_id="roledetailpage_handlers_1783666257" type="event_handlers" identity="handleSubmit" parent="roledetailpage_function_roledetailpage_1783666257"]
136
- // CIL[DOC-MACRO purpose="Handle form submission for role creation/editing"]
137
- // CIL[DOC-RESPONSIBILITY responsibility="Handle handleSubmit"]
138
- // CIL[DOC-CONTEXT module="RoleDetailPage" layer="logic" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
139
- // CIL[DOC-CONTRACT inputs="none" outputs="API response, navigation" errors="Validation errors, API errors" side_effects="HTTP requests, navigation"]
140
- // CIL[DOC-MICRO logic_summary="Validates form data, parses permissions, submits to API, handles errors" notable_decisions="[]"]
141
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
142
- // CIL[DOC-STABILITY stability="stable"]
143
- // CIL[DOC-VECTOR type="context" content="Layer: logic. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
144
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
145
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
146
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
147
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
148
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
149
112
  const handleSubmit = async (e: React.FormEvent) => {
150
113
  e.preventDefault()
151
114
  setIsSubmitting(true)
@@ -186,22 +149,7 @@ export function RoleDetailPage() {
186
149
  setIsSubmitting(false)
187
150
  }
188
151
  }
189
- // CIL[END chunk_id="roledetailpage_handlers_1783666257"]
190
152
 
191
- // CIL[BEGIN chunk_id="roledetailpage_render_1783666257" type="render_logic" identity="return" parent="roledetailpage_function_roledetailpage_1783666257"]
192
- // CIL[DOC-MACRO purpose="Render the complete role management interface"]
193
- // CIL[DOC-RESPONSIBILITY responsibility="Handle return"]
194
- // CIL[DOC-CONTEXT module="return" layer="unknown" related_files="[]"]
195
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
196
- // CIL[DOC-MICRO logic_summary="Implements return" notable_decisions="[]"]
197
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
198
- // CIL[DOC-STABILITY stability="stable"]
199
- // CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
200
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
201
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
202
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
203
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
204
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
205
153
  if (loading) {
206
154
  return (
207
155
  <div className="space-y-6">
@@ -262,6 +210,8 @@ export function RoleDetailPage() {
262
210
  </ul> },
263
211
  { title: 'How to create, save, and validate', content: <ol className="list-decimal pl-4 space-y-1">
264
212
  <li>In create mode, enter Name and Slug, then set Active and optionally System. Existing roles cannot change the slug.</li>
213
+
214
+
265
215
  <li>Enter valid Permissions JSON mapping type slugs to action arrays.</li>
266
216
  <li>Click Create Role or Update Role. Save fails if the name/slug are empty, the slug is changed, or the permissions JSON cannot be parsed.</li>
267
217
  </ol> },
@@ -362,6 +312,8 @@ export function RoleDetailPage() {
362
312
  </CardHeader>
363
313
  <CardContent>
364
314
  <p className="text-sm text-muted-foreground mb-3">
315
+
316
+
365
317
  Define permissions as a JSON object. Each key is a type slug, value is an array of allowed actions.
366
318
  </p>
367
319
  <Textarea
@@ -372,7 +324,7 @@ export function RoleDetailPage() {
372
324
  rows={10}
373
325
  />
374
326
  <p className="text-xs text-muted-foreground mt-2">
375
- Example: <code className="bg-muted px-1 py-0.5 rounded">{`{"support_ticket": ["read", "write", "admin"]}`}</code>
327
+ Example: <code className="bg-muted px-1 py-0.5 rounded">{`{"ticket": ["read", "write", "admin"]}`}</code>
376
328
  </p>
377
329
  </CardContent>
378
330
  </Card>
@@ -389,5 +341,10 @@ export function RoleDetailPage() {
389
341
  </div>
390
342
  )
391
343
  }
392
- // CIL[END chunk_id="roledetailpage_render_1783666257"]
393
- // CIL[END chunk_id="roledetailpage_function_roledetailpage_1783666257"]
344
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders a create/edit form for admin roles and their permissions.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
345
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
346
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
347
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
348
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
349
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
350
+ // CIL[END stable_id="~/.framework/src/pages/admin/RoleDetailPage.tsx:RoleDetailPage:component"]