spine-framework 0.3.144 → 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 +20 -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,3 +1,13 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="React authentication context module: state, session, and provider."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the module entry point, dependencies, constants, interfaces, hooks, and provider component."]
4
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
5
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="AuthContext, AuthProvider, useAuth, and helper functions" errors="n/a" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports dependencies and defines constants, interfaces, and the provider for authentication." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="framework-developers"]
10
+
1
11
 
2
12
 
3
13
 
@@ -8,65 +18,112 @@
8
18
 
9
19
 
10
20
 
11
- // CIL[BEGIN chunk_id="AuthContext_module_header_1783749485" type="module_header" identity="module_header" parent="none"]
12
- // CIL[DOC-MACRO purpose="Auth module imports and constants"]
13
- // CIL[DOC-RESPONSIBILITY responsibility="Define React context types and storage constants"]
14
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-context" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
15
- // CIL[DOC-CONTRACT inputs="none" outputs="type definitions" errors="none" side_effects="none"]
16
- // CIL[DOC-MICRO logic_summary="Sets up imports and storage constants for auth management" notable_decisions="[]"]
17
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
18
- // CIL[DOC-STABILITY stability="stable"]
19
- // CIL[DOC-AUDIENCE audience="developer"]
20
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-context. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
21
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
22
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
23
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
24
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
25
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
26
21
  import React, { createContext, useContext, useEffect, useState, useRef, useCallback } from 'react'
27
22
  import { supabase } from '../lib/supabase'
28
23
  import { setAccountId, apiFetch, onUnauthorized } from '../lib/api'
29
24
  import { User } from '../types/auth'
30
-
25
+ // CIL[DOC-VECTOR type="context" content="purpose='React authentication context module: state, session, and provider.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
26
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
27
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
28
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
29
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
30
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
31
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:module_header:module_header"]
32
+
33
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_version:constant" type="constant" identity="storage_version" parent="module_header"]
34
+ // CIL[DOC-MACRO purpose="Define the storage_version constant."]
35
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_version value used by the auth context."]
36
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
37
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
38
+ // CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
39
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
40
+ // CIL[DOC-STABILITY stability="stable"]
31
41
  const STORAGE_VERSION = 1
42
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the storage_version constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.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"]
46
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
47
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
48
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_version:constant"]
49
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_key:constant" type="constant" identity="storage_key" parent="module_header"]
50
+ // CIL[DOC-MACRO purpose="Define the storage_key constant."]
51
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_key value used by the auth context."]
52
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
53
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
54
+ // CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
55
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
56
+ // CIL[DOC-STABILITY stability="stable"]
32
57
  const STORAGE_KEY = 'spine_user'
58
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the storage_key constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
59
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
60
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
61
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
62
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
63
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
64
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_key:constant"]
65
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_ttl_ms:constant" type="constant" identity="storage_ttl_ms" parent="module_header"]
66
+ // CIL[DOC-MACRO purpose="Define the storage_ttl_ms constant."]
67
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_ttl_ms value used by the auth context."]
68
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
69
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
70
+ // CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
71
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
72
+ // CIL[DOC-STABILITY stability="stable"]
33
73
  const STORAGE_TTL_MS = 24 * 60 * 60 * 1000
34
- const SESSION_TIMEOUT_MS = 15000
35
- // CIL[END chunk_id="AuthContext_module_header_1783749485"]
36
- // CIL[BEGIN chunk_id="AuthContext_storeduserenvelope_1783749485" type="interface" identity="StoredUserEnvelope" parent="none"]
37
- // CIL[DOC-MACRO purpose="Define stored user envelope interface"]
38
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for localStorage user storage"]
39
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-types" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
40
- // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
41
- // CIL[DOC-MICRO logic_summary="Envelope wrapper for user data with version and timestamp" notable_decisions="[]"]
42
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
74
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the storage_ttl_ms constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
75
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
76
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
77
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
78
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
79
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
80
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_ttl_ms:constant"]
81
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:session_timeout_ms:constant" type="constant" identity="session_timeout_ms" parent="module_header"]
82
+ // CIL[DOC-MACRO purpose="Define the session_timeout_ms constant."]
83
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the session_timeout_ms value used by the auth context."]
84
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
85
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
86
+ // CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
87
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
43
88
  // CIL[DOC-STABILITY stability="stable"]
44
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
45
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
46
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
47
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
89
+ const SESSION_TIMEOUT_MS = 15000
90
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the session_timeout_ms constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
91
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
92
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
93
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
48
94
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
49
95
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
96
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:session_timeout_ms:constant"]
97
+
98
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storeduserenvelope:interface" type="interface" identity="storeduserenvelope" parent="module_header"]
99
+ // CIL[DOC-MACRO purpose="TypeScript interface/type definition for storeduserenvelope."]
100
+ // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of storeduserenvelope data."]
101
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
102
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="storeduserenvelope interface shape" errors="n/a" side_effects="none"]
103
+ // CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
104
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
105
+ // CIL[DOC-STABILITY stability="stable"]
50
106
  interface StoredUserEnvelope {
51
107
  version: number
52
108
  timestamp: number
53
109
  user: User
54
110
  }
55
- // CIL[END chunk_id="AuthContext_storeduserenvelope_1783749485"]
56
- // CIL[BEGIN chunk_id="AuthContext_readstoreduser_1783749485" type="function" identity="readStoredUser" parent="none"]
57
- // CIL[DOC-MACRO purpose="Read stored user from localStorage"]
58
- // CIL[DOC-RESPONSIBILITY responsibility="Retrieve and validate cached user data"]
59
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\"\\\"]"]
60
- // CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="none" side_effects="localStorage read"]
61
- // CIL[DOC-MICRO logic_summary="Validates version and TTL before returning cached user" notable_decisions="[]"]
62
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
63
- // CIL[DOC-STABILITY stability="stable"]
64
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: \."]
65
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
66
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
67
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
111
+ // CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for storeduserenvelope.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
112
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
113
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
114
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
68
115
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
116
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
117
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storeduserenvelope:interface"]
118
+
119
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:readStoredUser:function" type="function" identity="readStoredUser" parent="module_header"]
120
+ // CIL[DOC-MACRO purpose="Deserialize and validate the cached user from localStorage."]
121
+ // CIL[DOC-RESPONSIBILITY responsibility="Read the stored user envelope, validate version and TTL, and return the user."]
122
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
123
+ // CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="returns null on parse, version mismatch, expiry, or storage read error" side_effects="reads from localStorage"]
124
+ // CIL[DOC-MICRO logic_summary="Reads localStorage by STORAGE_KEY, parses the JSON envelope, checks version and TTL, then returns user or null." notable_decisions="[]"]
125
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
126
+ // CIL[DOC-STABILITY stability="stable"]
70
127
  function readStoredUser(): User | null {
71
128
  try {
72
129
  const raw = localStorage.getItem(STORAGE_KEY)
@@ -79,21 +136,22 @@ function readStoredUser(): User | null {
79
136
  return null
80
137
  }
81
138
  }
82
- // CIL[END chunk_id="AuthContext_readstoreduser_1783749485"]
83
- // CIL[BEGIN chunk_id="AuthContext_writestoreduser_1783749485" type="function" identity="writeStoredUser" parent="none"]
84
- // CIL[DOC-MACRO purpose="Write user to localStorage"]
85
- // CIL[DOC-RESPONSIBILITY responsibility="Cache user data with envelope wrapper"]
86
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
87
- // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="localStorage write"]
88
- // CIL[DOC-MICRO logic_summary="Stores user in envelope or removes entry if null" notable_decisions="[]"]
89
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
90
- // CIL[DOC-STABILITY stability="stable"]
91
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
92
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
93
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
94
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
139
+ // CIL[DOC-VECTOR type="context" content="purpose='Deserialize and validate the cached user from localStorage.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
140
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
141
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
142
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
95
143
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
96
144
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
145
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:readStoredUser:function"]
146
+
147
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:writeStoredUser:function" type="function" identity="writeStoredUser" parent="module_header"]
148
+ // CIL[DOC-MACRO purpose="Persist or clear the cached user envelope in localStorage."]
149
+ // CIL[DOC-RESPONSIBILITY responsibility="Serialize the user to a versioned envelope or remove the stored key."]
150
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
151
+ // CIL[DOC-CONTRACT inputs="user: User | null" outputs="none" errors="silently swallowed" side_effects="writes or removes localStorage key"]
152
+ // CIL[DOC-MICRO logic_summary="Writes a versioned envelope with timestamp when user is truthy, otherwise removes the storage key." notable_decisions="[]"]
153
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
154
+ // CIL[DOC-STABILITY stability="stable"]
97
155
  function writeStoredUser(user: User | null) {
98
156
  try {
99
157
  if (user) {
@@ -109,21 +167,22 @@ function writeStoredUser(user: User | null) {
109
167
  } catch {
110
168
  }
111
169
  }
112
- // CIL[END chunk_id="AuthContext_writestoreduser_1783749485"]
113
- // CIL[BEGIN chunk_id="AuthContext_getsessionwithtimeout_1783749485" type="function" identity="getSessionWithTimeout" parent="none"]
114
- // CIL[DOC-MACRO purpose="Get Supabase session with timeout"]
115
- // CIL[DOC-RESPONSIBILITY responsibility="Prevent hanging on stale sessions"]
116
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
117
- // CIL[DOC-CONTRACT inputs="none" outputs="session data" errors="none" side_effects="none"]
118
- // CIL[DOC-MICRO logic_summary="Races session fetch against timeout to prevent hanging" notable_decisions="[]"]
119
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
120
- // CIL[DOC-STABILITY stability="stable"]
121
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, .framework/src/components/ui/table-primitives.tsx, \."]
122
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
123
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
124
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
170
+ // CIL[DOC-VECTOR type="context" content="purpose='Persist or clear the cached user envelope in localStorage.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
171
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
172
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
173
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
125
174
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
126
175
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
176
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:writeStoredUser:function"]
177
+
178
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:getSessionWithTimeout:function" type="function" identity="getSessionWithTimeout" parent="module_header"]
179
+ // CIL[DOC-MACRO purpose="Fetch the Supabase session with a timeout fallback."]
180
+ // CIL[DOC-RESPONSIBILITY responsibility="Wrap supabase.auth.getSession in a Promise.race to avoid hanging on slow networks."]
181
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
182
+ // CIL[DOC-CONTRACT inputs="none" outputs="{ data: { session: any | null } }" errors="returns null session on timeout or error" side_effects="none"]
183
+ // CIL[DOC-MICRO logic_summary="Races the Supabase getSession promise against a SESSION_TIMEOUT_MS timeout." notable_decisions="[]"]
184
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
185
+ // CIL[DOC-STABILITY stability="stable"]
127
186
  async function getSessionWithTimeout(): Promise<{ data: { session: any | null } }> {
128
187
  try {
129
188
  return await Promise.race([
@@ -136,85 +195,110 @@ async function getSessionWithTimeout(): Promise<{ data: { session: any | null }
136
195
  return { data: { session: null } }
137
196
  }
138
197
  }
139
- // CIL[END chunk_id="AuthContext_getsessionwithtimeout_1783749485"]
140
- // CIL[BEGIN chunk_id="AuthContext_authcontexttype_1783749485" type="interface" identity="AuthContextType" parent="none"]
141
- // CIL[DOC-MACRO purpose="Define auth context interface"]
142
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for auth context value"]
143
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-types" related_files="[]"]
144
- // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
145
- // CIL[DOC-MICRO logic_summary="Defines shape of auth context with user state and actions" notable_decisions="[]"]
146
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
147
- // CIL[DOC-STABILITY stability="stable"]
148
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: none."]
149
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
150
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
151
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
198
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch the Supabase session with a timeout fallback.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
199
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
200
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
201
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
152
202
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
153
203
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
204
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:getSessionWithTimeout:function"]
205
+
206
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthContextType:interface" type="interface" identity="AuthContextType" parent="module_header"]
207
+ // CIL[DOC-MACRO purpose="TypeScript interface/type definition for AuthContextType."]
208
+ // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of AuthContextType data."]
209
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
210
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="AuthContextType interface shape" errors="n/a" side_effects="none"]
211
+ // CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
212
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
213
+ // CIL[DOC-STABILITY stability="stable"]
154
214
  interface AuthContextType {
155
215
  user: User | null
156
216
  isLoading: boolean
157
- login: (email: string, password: string) => Promise<User | null>
217
+ login: (email: string, password: string, captchaToken?: string) => Promise<User | null>
158
218
  logout: () => Promise<void>
159
219
  refreshUser: () => Promise<User | null>
160
220
  }
221
+ // CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for AuthContextType.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
222
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
223
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
224
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
225
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
226
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
227
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthContextType:interface"]
161
228
 
162
- const AuthContext = createContext<AuthContextType | undefined>(undefined)
163
- // CIL[END chunk_id="AuthContext_authcontexttype_1783749485"]
164
- // CIL[BEGIN chunk_id="AuthContext_useauth_1783749485" type="function" identity="useAuth" parent="none"]
165
- // CIL[DOC-MACRO purpose="Access auth context hook"]
166
- // CIL[DOC-RESPONSIBILITY responsibility="Provide auth context to components"]
167
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-hook" related_files="[]"]
168
- // CIL[DOC-CONTRACT inputs="none" outputs="AuthContextType" errors="throws if no provider" side_effects="none"]
169
- // CIL[DOC-MICRO logic_summary="Returns auth context with safety check" notable_decisions="[]"]
170
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
229
+
230
+
231
+
232
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:authcontext:constant" type="constant" identity="authcontext" parent="module_header"]
233
+ // CIL[DOC-MACRO purpose="Define the authcontext constant."]
234
+ // CIL[DOC-RESPONSIBILITY responsibility="Hold the authcontext value used by the auth context."]
235
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
236
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
237
+ // CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
238
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
171
239
  // CIL[DOC-STABILITY stability="stable"]
172
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
173
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
174
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
175
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
240
+ const AuthContext = createContext<AuthContextType | undefined>(undefined)
241
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the authcontext constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
242
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
243
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
244
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
176
245
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
177
246
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
247
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:authcontext:constant"]
248
+
249
+
250
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:useauth:function" type="function" identity="useauth" parent="module_header"]
251
+ // CIL[DOC-MACRO purpose="Hook to consume the AuthContext value."]
252
+ // CIL[DOC-RESPONSIBILITY responsibility="Return the auth context or throw an error when used outside an AuthProvider."]
253
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
254
+ // CIL[DOC-CONTRACT inputs="none" outputs="AuthContextType" errors="throws Error('useAuth must be used within an AuthProvider')" side_effects="none"]
255
+ // CIL[DOC-MICRO logic_summary="Calls useContext(AuthContext) and validates the result is defined." notable_decisions="[]"]
256
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
257
+ // CIL[DOC-STABILITY stability="stable"]
178
258
  export function useAuth() {
179
259
  const context = useContext(AuthContext)
180
260
  if (context === undefined) {
181
261
  throw new Error('useAuth must be used within an AuthProvider')
182
262
  }
263
+
264
+
183
265
  return context
184
266
  }
185
- // CIL[END chunk_id="AuthContext_useauth_1783749485"]
186
- // CIL[BEGIN chunk_id="AuthContext_authproviderprops_1783749485" type="interface" identity="AuthProviderProps" parent="none"]
187
- // CIL[DOC-MACRO purpose="Define auth provider props interface"]
188
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AuthProvider component"]
189
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-types" related_files="[]"]
190
- // CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
191
- // CIL[DOC-MICRO logic_summary="Simple props interface with only children" notable_decisions="[]"]
192
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
193
- // CIL[DOC-STABILITY stability="stable"]
194
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: none."]
195
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
196
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
197
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
267
+ // CIL[DOC-VECTOR type="context" content="purpose='Hook to consume the AuthContext value.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
268
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
269
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
270
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
198
271
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
199
272
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
273
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:useauth:function"]
274
+
275
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthProviderProps:interface" type="interface" identity="AuthProviderProps" parent="module_header"]
276
+ // CIL[DOC-MACRO purpose="TypeScript interface/type definition for AuthProviderProps."]
277
+ // CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of AuthProviderProps data."]
278
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
279
+ // CIL[DOC-CONTRACT inputs="n/a" outputs="AuthProviderProps interface shape" errors="n/a" side_effects="none"]
280
+ // CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
281
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
282
+ // CIL[DOC-STABILITY stability="stable"]
200
283
  interface AuthProviderProps {
201
284
  children: React.ReactNode
202
285
  }
203
- // CIL[END chunk_id="AuthContext_authproviderprops_1783749485"]
204
- // CIL[BEGIN chunk_id="AuthContext_fetchusercontext_1783749485" type="function" identity="fetchUserContext" parent="none"]
205
- // CIL[DOC-MACRO purpose="Fetch user context with retry"]
206
- // CIL[DOC-RESPONSIBILITY responsibility="Get server-side user data with resilience"]
207
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[]"]
208
- // CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="none" side_effects="API calls"]
209
- // CIL[DOC-MICRO logic_summary="Retries on network errors with exponential backoff" notable_decisions="[]"]
210
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
211
- // CIL[DOC-STABILITY stability="stable"]
212
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 0. Direct calls: 0. Related files: none."]
213
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
214
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
215
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
286
+ // CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for AuthProviderProps.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
287
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
288
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
289
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
216
290
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
217
291
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
292
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthProviderProps:interface"]
293
+
294
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:fetchUserContext:function" type="function" identity="fetchUserContext" parent="module_header"]
295
+ // CIL[DOC-MACRO purpose="Fetch remote user context with retries and transient error handling."]
296
+ // CIL[DOC-RESPONSIBILITY responsibility="Load user data from /api/auth, tolerate transient network failures, and handle auth errors."]
297
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
298
+ // CIL[DOC-CONTRACT inputs="maxRetries: number (default 2)" outputs="User | null" errors="returns null for 401/403, client errors, or unrecoverable exceptions" side_effects="makes HTTP GET request to /api/auth"]
299
+ // CIL[DOC-MICRO logic_summary="Retry loop with exponential backoff; 5xx continues, 401/403/null returns, TypeError retries." notable_decisions="[]"]
300
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
301
+ // CIL[DOC-STABILITY stability="stable"]
218
302
  async function fetchUserContext(maxRetries = 2): Promise<User | null> {
219
303
  let lastError: unknown = null
220
304
 
@@ -250,21 +334,22 @@ async function fetchUserContext(maxRetries = 2): Promise<User | null> {
250
334
  }
251
335
  return null
252
336
  }
253
- // CIL[END chunk_id="AuthContext_fetchusercontext_1783749485"]
254
- // CIL[BEGIN chunk_id="AuthContext_authprovider_1783749485" type="function" identity="AuthProvider" parent="none"]
255
- // CIL[DOC-MACRO purpose="Manage authentication state and lifecycle"]
256
- // CIL[DOC-RESPONSIBILITY responsibility="Handle auth flow, storage sync, and session management"]
257
- // CIL[DOC-CONTEXT module="AuthContext" layer="frontend-provider" related_files="[]"]
258
- // CIL[DOC-CONTRACT inputs="none" outputs="Provider component" errors="auth errors" side_effects="localStorage, API calls, Supabase auth"]
259
- // CIL[DOC-MICRO logic_summary="Complex auth provider with storage sync, race guards, and cross-tab support" notable_decisions="[]"]
260
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
261
- // CIL[DOC-STABILITY stability="stable"]
262
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-provider. Direct callers: 0. Direct calls: 0. Related files: none."]
263
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
264
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
265
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
337
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch remote user context with retries and transient error handling.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
338
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
339
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
340
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
266
341
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
267
342
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
343
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:fetchUserContext:function"]
344
+
345
+ // CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:authprovider:function" type="function" identity="authprovider" parent="module_header"]
346
+ // CIL[DOC-MACRO purpose="Provide authentication state and actions to the React component tree."]
347
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage user state, session lifecycle, login/logout/refresh, and storage synchronization."]
348
+ // CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
349
+ // CIL[DOC-CONTRACT inputs="children: React.ReactNode" outputs="AuthContext.Provider with value { user, isLoading, login, logout, refreshUser }" errors="login may propagate Supabase error; useAuth throws outside provider" side_effects="updates localStorage, Supabase auth session, account id, and window storage listener"]
350
+ // CIL[DOC-MICRO logic_summary="Initializes from cache, fetches/refresh session on mount, exposes callbacks, and listens to auth/storage events." notable_decisions="[]"]
351
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
352
+ // CIL[DOC-STABILITY stability="stable"]
268
353
  export function AuthProvider({ children }: AuthProviderProps) {
269
354
  const storedUser = readStoredUser()
270
355
  const [user, setUser] = useState<User | null>(storedUser)
@@ -290,11 +375,15 @@ export function AuthProvider({ children }: AuthProviderProps) {
290
375
  setAccountId(ctx.account_id)
291
376
  }, [setUserWithStorage])
292
377
 
293
- const login = useCallback(async (email: string, password: string) => {
378
+ const login = useCallback(async (email: string, password: string, captchaToken?: string) => {
294
379
  isLoggingInRef.current = true
295
380
 
296
381
  try {
297
- const { data, error } = await supabase.auth.signInWithPassword({ email, password })
382
+ const { data, error } = await supabase.auth.signInWithPassword({
383
+ email,
384
+ password,
385
+ options: captchaToken ? { captchaToken } : undefined,
386
+ })
298
387
 
299
388
  if (error) throw error
300
389
 
@@ -449,4 +538,10 @@ export function AuthProvider({ children }: AuthProviderProps) {
449
538
  </AuthContext.Provider>
450
539
  )
451
540
  }
452
- // CIL[END chunk_id="AuthContext_authprovider_1783749485"]
541
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide authentication state and actions to the React component tree.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
542
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
543
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
544
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
545
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
546
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
547
+ // CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:authprovider:function"]