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,23 +1,19 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/components/ui/Modal.tsx"]
2
+ // CIL[DOC-MACRO purpose="shadcn/ui Modal component module built on Radix UI Dialog"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Imports dialog primitives and utils, then exports Modal and ModalFooter components"]
4
+ // CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="Modal and ModalFooter components, plus their prop interfaces" errors="" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, the cn utility, and local Dialog primitives; declares the public component exports" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="frontend"]
10
+
11
+
1
12
 
2
13
 
3
14
 
4
15
 
5
16
 
6
- // CIL[BEGIN chunk_id="Modal_moduleheader_1783907801" type="module_header" identity="imports" parent="none"]
7
- // CIL[DOC-MACRO purpose="Import React and dialog dependencies"]
8
- // CIL[DOC-RESPONSIBILITY responsibility="Provide all external dependencies for modal components"]
9
- // CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
10
- // CIL[DOC-CONTRACT inputs="none" outputs="React, cn, Dialog components" errors="none" side_effects="none"]
11
- // CIL[DOC-MICRO logic_summary="Imports React, utility function, and shadcn dialog primitives" notable_decisions="[]"]
12
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
13
- // CIL[DOC-STABILITY stability="stable"]
14
- // CIL[DOC-AUDIENCE audience="developer"]
15
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
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
17
  import React from 'react'
22
18
  import { cn } from '../../lib/utils'
23
19
  import {
@@ -27,21 +23,23 @@ import {
27
23
  DialogTitle,
28
24
  DialogDescription,
29
25
  } from './dialog'
30
- // CIL[END chunk_id="Modal_moduleheader_1783907801"]
31
- // CIL[BEGIN chunk_id="Modal_modalprops_1783907801" type="interface" identity="ModalProps" parent="none"]
32
- // CIL[DOC-MACRO purpose="Define main modal component props interface"]
33
- // CIL[DOC-RESPONSIBILITY responsibility="Specify all props needed for Modal component configuration"]
34
- // CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
35
- // CIL[DOC-CONTRACT inputs="none" outputs="ModalProps interface" errors="none" side_effects="none"]
36
- // CIL[DOC-MICRO logic_summary="Props for open state, close handler, content, and sizing" 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: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.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."]
26
+ // CIL[DOC-VECTOR type="context" content="purpose='shadcn/ui Modal component module built on Radix UI Dialog'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.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/components/ui/Modal.tsx:module_header:module_header"]
33
+
34
+
35
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalProps:interface" type="interface" identity="ModalProps" parent="~/.framework/src/components/ui/Modal.tsx"]
36
+ // CIL[DOC-MACRO purpose="Defines the prop contract for the Modal component"]
37
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares the configuration surface for Modal consumers"]
38
+ // CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
39
+ // CIL[DOC-CONTRACT inputs="none" outputs="ModalProps TypeScript interface" errors="" side_effects="none"]
40
+ // CIL[DOC-MICRO logic_summary="Optional title and description, required open state, close callback, children, and a size union" notable_decisions="[]"]
41
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
42
+ // CIL[DOC-STABILITY stability="stable"]
45
43
  interface ModalProps {
46
44
  isOpen: boolean
47
45
  onClose: () => void
@@ -50,21 +48,23 @@ interface ModalProps {
50
48
  children: React.ReactNode
51
49
  size?: 'sm' | 'md' | 'lg' | 'xl'
52
50
  }
53
- // CIL[END chunk_id="Modal_modalprops_1783907801"]
54
- // CIL[BEGIN chunk_id="Modal_modal_1783907801" type="function" identity="Modal" parent="none"]
55
- // CIL[DOC-MACRO purpose="Render modal dialog with configurable size and content"]
56
- // CIL[DOC-RESPONSIBILITY responsibility="Handle modal open/close state and content rendering"]
57
- // CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
58
- // CIL[DOC-CONTRACT inputs="none" outputs="Dialog wrapper" errors="none" side_effects="Calls onClose when dialog closed"]
59
- // CIL[DOC-MICRO logic_summary="Maps size prop to Tailwind max-width classes, conditionally renders header" notable_decisions="[]"]
60
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
61
- // CIL[DOC-STABILITY stability="stable"]
62
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/principal.ts, \."]
63
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
64
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
65
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
51
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the prop contract for the Modal component'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
52
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
53
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
54
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
66
55
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
67
56
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
57
+ // CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalProps:interface"]
58
+
59
+
60
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:Modal:component" type="component" identity="Modal" parent="~/.framework/src/components/ui/Modal.tsx"]
61
+ // CIL[DOC-MACRO purpose="Renders an accessible modal dialog with configurable size and optional header"]
62
+ // CIL[DOC-RESPONSIBILITY responsibility="Mounts a Dialog, applies size-based width classes, and renders optional title and description"]
63
+ // CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
64
+ // CIL[DOC-CONTRACT inputs="isOpen: boolean, onClose: () => void, title?: string, description?: string, children: React.ReactNode, size?: 'sm'|'md'|'lg'|'xl'" outputs="JSX.Element" errors="" side_effects="none"]
65
+ // CIL[DOC-MICRO logic_summary="Maps size prop to Tailwind max-width classes and conditionally renders a DialogHeader" notable_decisions="[]"]
66
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
67
+ // CIL[DOC-STABILITY stability="stable"]
68
68
  export function Modal({
69
69
  isOpen,
70
70
  onClose,
@@ -94,40 +94,44 @@ export function Modal({
94
94
  </Dialog>
95
95
  )
96
96
  }
97
- // CIL[END chunk_id="Modal_modal_1783907801"]
98
- // CIL[BEGIN chunk_id="Modal_modalfooterprops_1783907801" type="interface" identity="ModalFooterProps" parent="none"]
99
- // CIL[DOC-MACRO purpose="Define props for modal footer container"]
100
- // CIL[DOC-RESPONSIBILITY responsibility="Specify props for modal footer content and styling"]
101
- // CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
102
- // CIL[DOC-CONTRACT inputs="none" outputs="ModalFooterProps interface" errors="none" side_effects="none"]
103
- // CIL[DOC-MICRO logic_summary="Props for children content and optional styling classes" notable_decisions="[]"]
104
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
105
- // CIL[DOC-STABILITY stability="stable"]
106
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, \."]
107
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
108
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
109
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
97
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders an accessible modal dialog with configurable size and optional header'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
98
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
99
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
100
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
110
101
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
111
102
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
103
+ // CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:Modal:component"]
104
+
105
+
106
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooterProps:interface" type="interface" identity="ModalFooterProps" parent="~/.framework/src/components/ui/Modal.tsx"]
107
+ // CIL[DOC-MACRO purpose="Defines the prop contract for the ModalFooter component"]
108
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares the configuration surface for ModalFooter consumers"]
109
+ // CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
110
+ // CIL[DOC-CONTRACT inputs="none" outputs="ModalFooterProps TypeScript interface" errors="" side_effects="none"]
111
+ // CIL[DOC-MICRO logic_summary="Optional className and required children for the footer content" notable_decisions="[]"]
112
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
113
+ // CIL[DOC-STABILITY stability="stable"]
112
114
  interface ModalFooterProps {
113
115
  children: React.ReactNode
114
116
  className?: string
115
117
  }
116
- // CIL[END chunk_id="Modal_modalfooterprops_1783907801"]
117
- // CIL[BEGIN chunk_id="Modal_modalfooter_1783907801" type="function" identity="ModalFooter" parent="none"]
118
- // CIL[DOC-MACRO purpose="Render modal footer with action buttons"]
119
- // CIL[DOC-RESPONSIBILITY responsibility="Provide styled container for modal action buttons"]
120
- // CIL[DOC-CONTEXT module="Modal" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\"]"]
121
- // CIL[DOC-CONTRACT inputs="none" outputs="Footer div container" errors="none" side_effects="none"]
122
- // CIL[DOC-MICRO logic_summary="Uses Tailwind classes for flex layout, border, and spacing" notable_decisions="[]"]
123
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
124
- // CIL[DOC-STABILITY stability="stable"]
125
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx."]
126
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
127
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
128
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
118
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the prop contract for the ModalFooter component'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
119
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
120
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
121
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
129
122
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
130
123
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
124
+ // CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooterProps:interface"]
125
+
126
+
127
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooter:component" type="component" identity="ModalFooter" parent="~/.framework/src/components/ui/Modal.tsx"]
128
+ // CIL[DOC-MACRO purpose="Renders a right-aligned, bordered footer for modal actions"]
129
+ // CIL[DOC-RESPONSIBILITY responsibility="Provides a styled container for modal action buttons"]
130
+ // CIL[DOC-CONTEXT module="components/ui" layer="ui" related_files=".framework/src/components/ui/Modal.tsx,.framework/src/components/ui/dialog.tsx,.framework/src/lib/utils.ts"]
131
+ // CIL[DOC-CONTRACT inputs="children: React.ReactNode, className?: string" outputs="JSX.Element" errors="" side_effects="none"]
132
+ // CIL[DOC-MICRO logic_summary="Composes a flex row with gap and top border, allowing an extra className" notable_decisions="[]"]
133
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
134
+ // CIL[DOC-STABILITY stability="stable"]
131
135
  export function ModalFooter({ children, className }: ModalFooterProps) {
132
136
  return (
133
137
  <div className={cn('flex justify-end gap-3 border-t px-6 py-4 mt-6', className)}>
@@ -135,4 +139,10 @@ export function ModalFooter({ children, className }: ModalFooterProps) {
135
139
  </div>
136
140
  )
137
141
  }
138
- // CIL[END chunk_id="Modal_modalfooter_1783907801"]
142
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders a right-aligned, bordered footer for modal actions'; No verified external callers; imports: .framework/src/lib/utils.ts,.framework/src/components/ui/dialog.tsx"]
143
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
144
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
145
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
146
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
147
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
148
+ // CIL[END stable_id="~/.framework/src/components/ui/Modal.tsx:ModalFooter:component"]
@@ -1,23 +1,19 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:module_header:module_header"]
2
+ // CIL[DOC-MACRO purpose="Declare dependencies and set up the RichTextEditor module"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Import and expose all required libraries, components, and utilities"]
4
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="loads module dependencies"]
6
+ // CIL[DOC-MICRO logic_summary="Imports DOMPurify, marked, TipTap, lowlight, language definitions, React hooks, icons, and the cn utility" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developers"]
10
+
11
+
1
12
 
2
13
 
3
14
 
4
15
 
5
16
 
6
- // CIL[BEGIN chunk_id="richtexteditor_module_header_1783883196" type="module_header" identity="module_header" parent="none"]
7
- // CIL[DOC-MACRO purpose="Import TipTap editor, extensions, syntax highlighting, and UI dependencies"]
8
- // CIL[DOC-RESPONSIBILITY responsibility="Provide external dependencies for rich text editor system"]
9
- // CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
10
- // CIL[DOC-CONTRACT inputs="none" outputs="TipTap, extensions, lowlight, icons, utils" errors="none" side_effects="none"]
11
- // CIL[DOC-MICRO logic_summary="Imports TipTap editor core, extensions, syntax highlighting libraries, icons, and utilities" 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/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.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
17
  import DOMPurify from 'dompurify'
22
18
  import { marked } from 'marked'
23
19
  import { useEditor, EditorContent } from '@tiptap/react'
@@ -43,50 +39,66 @@ import {
43
39
  Minus,
44
40
  } from 'lucide-react'
45
41
  import { cn } from '@core/lib/utils'
46
- // CIL[END chunk_id="richtexteditor_module_header_1783883196"]
47
- // CIL[BEGIN chunk_id="richtexteditor_lowlight_1783883196" type="setup" identity="lowlight" parent="none"]
48
- // CIL[DOC-MACRO purpose="Configure syntax highlighting for code blocks"]
49
- // CIL[DOC-RESPONSIBILITY responsibility="Set up lowlight with multiple programming languages"]
50
- // CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"\\\"]"]
51
- // CIL[DOC-CONTRACT inputs="none" outputs="lowlight instance" errors="none" side_effects="global config"]
52
- // CIL[DOC-MICRO logic_summary="Creates lowlight instance and registers TypeScript, JavaScript, JSON, Bash, SQL languages" notable_decisions="[]"]
53
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
54
- // CIL[DOC-STABILITY stability="stable"]
55
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, custom/apps/portal/pages/ContentPage.tsx, \."]
56
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
57
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
58
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
42
+ // CIL[DOC-VECTOR type="context" content="purpose='Declare dependencies and set up the RichTextEditor module'; No verified external callers; imports: .framework/src/lib/utils.ts"]
43
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
44
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
45
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
59
46
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
60
47
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
48
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:module_header:module_header"]
49
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:lowlight_setup:setup"]
50
+ // CIL[DOC-MACRO purpose="Create and configure the lowlight syntax highlighter"]
51
+ // CIL[DOC-RESPONSIBILITY responsibility="Register language parsers with lowlight for code block highlighting"]
52
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
53
+ // CIL[DOC-CONTRACT inputs="none" outputs="lowlight: Lowlight" errors="none" side_effects="registers TypeScript, JavaScript, JSON, Bash, and SQL language parsers in the lowlight instance"]
54
+ // CIL[DOC-MICRO logic_summary="Creates a lowlight instance and registers five language parsers for code block syntax highlighting" notable_decisions="[]"]
55
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
56
+ // CIL[DOC-STABILITY stability="stable"]
61
57
  const lowlight = createLowlight()
62
58
  lowlight.register('typescript', typescript)
63
59
  lowlight.register('javascript', javascript)
64
60
  lowlight.register('json', json)
65
61
  lowlight.register('bash', bash)
66
62
  lowlight.register('sql', sql)
63
+ // CIL[DOC-VECTOR type="context" content="purpose='Create and configure the lowlight syntax highlighter'; No verified external callers; imports: .framework/src/lib/utils.ts"]
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"]
67
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
68
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
69
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:lowlight_setup:setup"]
67
70
 
71
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:toHtml:function"]
72
+ // CIL[DOC-MACRO purpose="Convert raw markdown or HTML text to HTML"]
73
+ // CIL[DOC-RESPONSIBILITY responsibility="Return a string of HTML, parsing markdown only when input does not already look like HTML"]
74
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
75
+ // CIL[DOC-CONTRACT inputs="raw: string | undefined" outputs="html: string" errors="none" side_effects="none"]
76
+ // CIL[DOC-MICRO logic_summary="Trims the input, tests for HTML-like tags, and either returns the source or parses markdown synchronously" notable_decisions="[]"]
77
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
78
+ // CIL[DOC-STABILITY stability="stable"]
68
79
  function toHtml(raw: string | undefined): string {
69
80
  const source = (raw ?? '').trim()
70
81
  if (!source) return ''
71
82
  const likelyHtml = /<\/?(?:h[1-6]|p|div|ul|ol|li|pre|code|br|span|strong|em|a|table|tr|td|th|thead|tbody|blockquote)\b/i.test(source)
72
83
  return likelyHtml ? source : (marked.parse(source, { async: false }) as string)
73
84
  }
74
-
75
- // CIL[END chunk_id="richtexteditor_lowlight_1783883196"]
76
- // CIL[BEGIN chunk_id="richtexteditor_richtexteditorprops_1783883196" type="interface" identity="RichTextEditorProps" parent="none"]
77
- // CIL[DOC-MACRO purpose="Define props interface for RichTextEditor component"]
78
- // CIL[DOC-RESPONSIBILITY responsibility="Specify component configuration and behavior options"]
79
- // CIL[DOC-CONTEXT module="richtexteditor" layer="ui" 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\",\"\\\"]"]
80
- // CIL[DOC-CONTRACT inputs="none" outputs="RichTextEditorProps interface" errors="none" side_effects="type definition"]
81
- // CIL[DOC-MICRO logic_summary="Defines value, onChange, placeholder, readonly, className, minHeight props" notable_decisions="[]"]
82
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
83
- // CIL[DOC-STABILITY stability="stable"]
84
- // CIL[DOC-VECTOR type="context" content="Layer: ui. 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, \."]
85
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
86
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
87
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
85
+ // CIL[DOC-VECTOR type="context" content="purpose='Convert raw markdown or HTML text to HTML'; No verified external callers; imports: .framework/src/lib/utils.ts"]
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"]
88
89
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
89
90
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
91
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:toHtml:function"]
92
+
93
+
94
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditorProps:interface"]
95
+ // CIL[DOC-MACRO purpose="Declare props for the RichTextEditor component"]
96
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the typed prop contract for editor configuration"]
97
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
98
+ // CIL[DOC-CONTRACT inputs="value: string, onChange?: (html: string) => void, placeholder?: string, readonly?: boolean, className?: string, minHeight?: string" outputs="N/A" errors="none" side_effects="none"]
99
+ // CIL[DOC-MICRO logic_summary="TypeScript interface describing optional and required props for RichTextEditor" notable_decisions="[]"]
100
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
101
+ // CIL[DOC-STABILITY stability="stable"]
90
102
  interface RichTextEditorProps {
91
103
  value: string
92
104
  onChange?: (html: string) => void
@@ -95,21 +107,22 @@ interface RichTextEditorProps {
95
107
  className?: string
96
108
  minHeight?: string
97
109
  }
98
- // CIL[END chunk_id="richtexteditor_richtexteditorprops_1783883196"]
99
- // CIL[BEGIN chunk_id="richtexteditor_toolbarbutton_1783883196" type="function" identity="ToolbarButton" parent="none"]
100
- // CIL[DOC-MACRO purpose="Toolbar button component with active state styling"]
101
- // CIL[DOC-RESPONSIBILITY responsibility="Render styled toolbar button with active/inactive states"]
102
- // CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
103
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX button element" errors="none" side_effects="renders DOM"]
104
- // CIL[DOC-MICRO logic_summary="Creates button with active styling, hover effects, and click handling" notable_decisions="[]"]
105
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
106
- // CIL[DOC-STABILITY stability="stable"]
107
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/functions/_shared/schema-utils.ts, \."]
108
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
109
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
110
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
110
+ // CIL[DOC-VECTOR type="context" content="purpose='Declare props for the RichTextEditor component'; No verified external callers; imports: .framework/src/lib/utils.ts"]
111
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
112
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
113
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
111
114
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
112
115
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
116
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditorProps:interface"]
117
+
118
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:ToolbarButton:component"]
119
+ // CIL[DOC-MACRO purpose="Render a single formatting toolbar button"]
120
+ // CIL[DOC-RESPONSIBILITY responsibility="Display a styled button that invokes a formatting command when clicked"]
121
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
122
+ // CIL[DOC-CONTRACT inputs="onClick: () => void, active?: boolean, title: string, children: React.ReactNode" outputs="JSX.Element" errors="none" side_effects="invokes onClick when clicked"]
123
+ // CIL[DOC-MICRO logic_summary="Renders a styled button with active state and onMouseDown preventDefault for TipTap integration" notable_decisions="[]"]
124
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
125
+ // CIL[DOC-STABILITY stability="stable"]
113
126
  function ToolbarButton({
114
127
  onClick,
115
128
  active,
@@ -137,21 +150,22 @@ function ToolbarButton({
137
150
  </button>
138
151
  )
139
152
  }
140
- // CIL[END chunk_id="richtexteditor_toolbarbutton_1783883196"]
141
- // CIL[BEGIN chunk_id="richtexteditor_richtexteditor_1783883196" type="function" identity="RichTextEditor" parent="none"]
142
- // CIL[DOC-MACRO purpose="Main rich text editor with toolbar and content editing"]
143
- // CIL[DOC-RESPONSIBILITY responsibility="Render complete rich text editor with formatting toolbar and content area"]
144
- // CIL[DOC-CONTEXT module="richtexteditor" layer="ui" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\"]"]
145
- // CIL[DOC-CONTRACT inputs="none" outputs="JSX editor component" errors="none" side_effects="renders DOM"]
146
- // CIL[DOC-MICRO logic_summary="Creates TipTap editor with toolbar, readonly mode, content styling, and synchronization" notable_decisions="[]"]
147
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
148
- // CIL[DOC-STABILITY stability="stable"]
149
- // CIL[DOC-VECTOR type="context" content="Layer: ui. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx."]
150
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
151
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
152
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
153
+ // CIL[DOC-VECTOR type="context" content="purpose='Render a single formatting toolbar button'; No verified external callers; imports: .framework/src/lib/utils.ts"]
154
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
155
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
156
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
153
157
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
154
158
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
159
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:ToolbarButton:component"]
160
+
161
+ // CIL[BEGIN stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditor:component"]
162
+ // CIL[DOC-MACRO purpose="Rich text editor component with formatting toolbar and readonly preview"]
163
+ // CIL[DOC-RESPONSIBILITY responsibility="Initialize a TipTap editor, render a formatting toolbar, and display sanitized HTML output"]
164
+ // CIL[DOC-CONTEXT module="RichTextEditor" layer="ui" related_files=".framework/src/components/ui/RichTextEditor.tsx,.framework/src/lib/utils.ts"]
165
+ // CIL[DOC-CONTRACT inputs="props: RichTextEditorProps" outputs="JSX.Element" errors="none" side_effects="calls onChange on edits, syncs content and editable state via effects, renders sanitized HTML in readonly mode"]
166
+ // CIL[DOC-MICRO logic_summary="Sanitizes initial HTML, creates a TipTap editor with StarterKit and lowlight, syncs content and readonly state, and renders a toolbar or read-only preview" notable_decisions="[]"]
167
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
168
+ // CIL[DOC-STABILITY stability="stable"]
155
169
  export function RichTextEditor({
156
170
  value,
157
171
  onChange,
@@ -299,4 +313,10 @@ export function RichTextEditor({
299
313
  </div>
300
314
  )
301
315
  }
302
- // CIL[END chunk_id="richtexteditor_richtexteditor_1783883196"]
316
+ // CIL[DOC-VECTOR type="context" content="purpose='Rich text editor component with formatting toolbar and readonly preview'; No verified external callers; imports: .framework/src/lib/utils.ts"]
317
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
318
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
319
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
320
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
321
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
322
+ // CIL[END stable_id="~/.framework/src/components/ui/RichTextEditor.tsx:RichTextEditor:component"]