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,25 +1,36 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApps.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useApps.ts"]
2
+ // CIL[DOC-MACRO purpose="Module setup and imports for useApps.ts"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Establish the public surface and dependencies of useApps.ts"]
4
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useApps.ts" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports required modules for useApps.ts" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-AUDIENCE audience="frontend"]
9
+ // CIL[DOC-STABILITY stability="stable"]
10
+
1
11
 
2
12
 
3
13
 
4
- // CIL[BEGIN chunk_id="useapps_module_header_1783719596" type="module_header" identity="module_header" parent="none"]
5
- // CIL[DOC-MACRO purpose="Define types and interfaces for app management"]
6
- // CIL[DOC-RESPONSIBILITY responsibility="Type definitions for AppRecord and UseAppsResult"]
7
- // CIL[DOC-CONTEXT module="useApps" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
8
- // CIL[DOC-CONTRACT inputs="none" outputs="Type definitions" errors="none" side_effects="Type declarations"]
9
- // CIL[DOC-MICRO logic_summary="Exports AppRecord interface with app metadata and UseAppsResult interface" notable_decisions="[]"]
10
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
11
- // CIL[DOC-STABILITY stability="stable"]
12
- // CIL[DOC-AUDIENCE audience="developer"]
13
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/principal.ts, \."]
14
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
15
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
16
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
17
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
19
14
  import { useState, useEffect } from 'react'
20
15
  import { apiFetch } from '../lib/api'
21
16
  import { useAuth } from '../contexts/AuthContext'
17
+ // CIL[DOC-VECTOR type="context" content="purpose='Module setup and imports for useApps.ts'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
18
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
19
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
20
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
21
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
22
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
23
+ // CIL[END stable_id="~/.framework/src/hooks/useApps.ts:module_header:module_header"]
24
+
22
25
 
26
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApps.ts:AppRecord:interface" type="interface" identity="AppRecord" parent="~/.framework/src/hooks/useApps.ts"]
27
+ // CIL[DOC-MACRO purpose="Define the AppRecord shape"]
28
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide the AppRecord type contract"]
29
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useApps.ts" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApps.ts,.framework/src/lib/api.ts"]
30
+ // CIL[DOC-CONTRACT inputs="none" outputs="AppRecord interface definition" errors="none" side_effects="none"]
31
+ // CIL[DOC-MICRO logic_summary="Declares the fields of the AppRecord interface" notable_decisions="[]"]
32
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
33
+ // CIL[DOC-STABILITY stability="stable"]
23
34
  export interface AppRecord {
24
35
  id: string
25
36
  slug: string
@@ -41,28 +52,45 @@ export interface AppRecord {
41
52
  preview_domain?: string | null
42
53
  prod_domain?: string | null
43
54
  }
55
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the AppRecord shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
56
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
57
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
58
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
59
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
60
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
61
+ // CIL[END stable_id="~/.framework/src/hooks/useApps.ts:AppRecord:interface"]
62
+
44
63
 
64
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApps.ts:UseAppsResult:interface" type="interface" identity="UseAppsResult" parent="~/.framework/src/hooks/useApps.ts"]
65
+ // CIL[DOC-MACRO purpose="Define the UseAppsResult shape"]
66
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide the UseAppsResult type contract"]
67
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useApps.ts" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApps.ts,.framework/src/lib/api.ts"]
68
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseAppsResult interface definition" errors="none" side_effects="none"]
69
+ // CIL[DOC-MICRO logic_summary="Declares the fields of the UseAppsResult interface" notable_decisions="[]"]
70
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
71
+ // CIL[DOC-STABILITY stability="stable"]
45
72
  interface UseAppsResult {
46
73
  apps: AppRecord[]
47
74
  loading: boolean
48
75
  error: string | null
49
76
  refetch: () => void
50
77
  }
51
- // CIL[END chunk_id="useapps_module_header_1783719596"]
52
- // CIL[BEGIN chunk_id="useapps_useapps_1783719596" type="function" identity="useApps" parent="none"]
53
- // CIL[DOC-MACRO purpose="Fetch and filter apps based on user roles and domain"]
54
- // CIL[DOC-RESPONSIBILITY responsibility="App fetching, role-based filtering, domain matching"]
55
- // CIL[DOC-CONTEXT module="useApps" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
56
- // CIL[DOC-CONTRACT inputs="none" outputs="UseAppsResult with apps, loading, error, refetch" errors="Network errors, auth errors" side_effects="React state updates, API calls"]
57
- // CIL[DOC-MICRO logic_summary="Fetches apps, filters by active status, domain, and user roles with system_admin override" notable_decisions="[]"]
58
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
59
- // CIL[DOC-STABILITY stability="stable"]
60
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 1. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
61
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
62
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
63
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
78
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the UseAppsResult shape'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
79
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
80
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
81
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
64
82
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
65
83
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
84
+ // CIL[END stable_id="~/.framework/src/hooks/useApps.ts:UseAppsResult:interface"]
85
+
86
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApps.ts:useApps:hook" type="hook" identity="useApps" parent="~/.framework/src/hooks/useApps.ts"]
87
+ // CIL[DOC-MACRO purpose="Implement useApps"]
88
+ // CIL[DOC-RESPONSIBILITY responsibility="Execute the core logic for useApps"]
89
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useApps.ts" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApps.ts,.framework/src/lib/api.ts"]
90
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseAppsResult" errors="propagates dependency errors" side_effects="updates React state"]
91
+ // CIL[DOC-MICRO logic_summary="Processes inputs, performs work, and returns output for useApps" notable_decisions="[]"]
92
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
93
+ // CIL[DOC-STABILITY stability="stable"]
66
94
  export function useApps(): UseAppsResult {
67
95
  const { user } = useAuth()
68
96
  const [apps, setApps] = useState<AppRecord[]>([])
@@ -134,21 +162,22 @@ export function useApps(): UseAppsResult {
134
162
 
135
163
  return { apps, loading, error, refetch: fetchApps }
136
164
  }
137
- // CIL[END chunk_id="useapps_useapps_1783719596"]
138
- // CIL[BEGIN chunk_id="useapps_useroutableapps_1783719596" type="function" identity="useRoutableApps" parent="none"]
139
- // CIL[DOC-MACRO purpose="Filter apps to only those with routing capabilities"]
140
- // CIL[DOC-RESPONSIBILITY responsibility="Route filtering for navigation-ready apps"]
141
- // CIL[DOC-CONTEXT module="useApps" layer="frontend-hook" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"\\\"]"]
142
- // CIL[DOC-CONTRACT inputs="none" outputs="UseAppsResult filtered to routable apps" errors="none" side_effects="React state updates via useApps hook"]
143
- // CIL[DOC-MICRO logic_summary="Wraps useApps and filters results to apps with route_prefix and not 'none' renderer" notable_decisions="[]"]
144
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
145
- // CIL[DOC-STABILITY stability="stable"]
146
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. 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/migrations/015_simplify_apps_table.sql, \."]
147
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
148
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
149
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
165
+ // CIL[DOC-VECTOR type="context" content="purpose='Implement useApps'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
166
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
167
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
168
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
150
169
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
151
170
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
171
+ // CIL[END stable_id="~/.framework/src/hooks/useApps.ts:useApps:hook"]
172
+
173
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApps.ts:useRoutableApps:hook" type="hook" identity="useRoutableApps" parent="~/.framework/src/hooks/useApps.ts"]
174
+ // CIL[DOC-MACRO purpose="Implement useRoutableApps"]
175
+ // CIL[DOC-RESPONSIBILITY responsibility="Execute the core logic for useRoutableApps"]
176
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useApps.ts" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApps.ts,.framework/src/lib/api.ts"]
177
+ // CIL[DOC-CONTRACT inputs="none" outputs="filtered UseAppsResult" errors="propagates dependency errors" side_effects="none"]
178
+ // CIL[DOC-MICRO logic_summary="Processes inputs, performs work, and returns output for useRoutableApps" notable_decisions="[]"]
179
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
180
+ // CIL[DOC-STABILITY stability="stable"]
152
181
  export function useRoutableApps() {
153
182
  const result = useApps()
154
183
  return {
@@ -156,4 +185,10 @@ export function useRoutableApps() {
156
185
  apps: result.apps.filter(app => app.route_prefix != null && app.renderer !== 'none')
157
186
  }
158
187
  }
159
- // CIL[END chunk_id="useapps_useroutableapps_1783719596"]
188
+ // CIL[DOC-VECTOR type="context" content="purpose='Implement useRoutableApps'; No verified external callers; imports: .framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
189
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
190
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
191
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
192
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
193
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
194
+ // CIL[END stable_id="~/.framework/src/hooks/useApps.ts:useRoutableApps:hook"]
@@ -1,24 +1,36 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityList.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useEntityList.ts"]
2
+ // CIL[DOC-AUDIENCE audience="internal"]
3
+ // CIL[DOC-MACRO purpose="Provide React and API imports for the useEntityList hook"]
4
+ // CIL[DOC-RESPONSIBILITY responsibility="Import dependencies required by useEntityList"]
5
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useEntityList" layer="ui" related_files=".framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
6
+ // CIL[DOC-CONTRACT inputs="none" outputs="module-level imports" errors="none" side_effects="none"]
7
+ // CIL[DOC-MICRO logic_summary="Imports useState/useEffect/useCallback from React, useApi helper, and apiFetch utility" notable_decisions=""]
8
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
9
+ // CIL[DOC-STABILITY stable]
10
+
1
11
 
2
12
 
3
- // CIL[BEGIN chunk_id="useentitylist_module_header_1783719596" type="module_header" identity="module_header" parent="none"]
4
- // CIL[DOC-MACRO purpose="Define entity list hook types and interfaces"]
5
- // CIL[DOC-RESPONSIBILITY responsibility="Type definitions for entity list management"]
6
- // CIL[DOC-CONTEXT module="useEntityList" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
7
- // CIL[DOC-CONTRACT inputs="none" outputs="MinimalEntityListConfig and UseEntityListReturn interfaces" errors="none" side_effects="Type declarations"]
8
- // CIL[DOC-MICRO logic_summary="Exports interfaces for list configuration, return values, and pagination controls" notable_decisions="[]"]
9
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
- // CIL[DOC-STABILITY stability="stable"]
11
- // CIL[DOC-AUDIENCE audience="developer"]
12
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
13
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
13
  import { useState, useEffect, useCallback } from 'react'
19
14
  import { useApi } from './useApi'
20
15
  import { apiFetch } from '../lib/api'
16
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide React and API imports for the useEntityList hook'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
17
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
18
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
19
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
20
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
21
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
22
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityList.ts:module_header:module_header"]
23
+
21
24
 
25
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityList.ts:MinimalEntityListConfig:interface" type="interface" identity="MinimalEntityListConfig" parent="~/.framework/src/hooks/useEntityList.ts"]
26
+ // CIL[DOC-AUDIENCE audience="internal"]
27
+ // CIL[DOC-MACRO purpose="Define the minimal configuration shape for useEntityList"]
28
+ // CIL[DOC-RESPONSIBILITY responsibility="Describe required and optional list configuration fields"]
29
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useEntityList" layer="ui" related_files=".framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityList.ts,.framework/src/lib/api.ts"]
30
+ // CIL[DOC-CONTRACT inputs="none" outputs="MinimalEntityListConfig interface" errors="none" side_effects="none"]
31
+ // CIL[DOC-MICRO logic_summary="Declares entity, optional typeSlug, API endpoint/listAction, and default sort settings" notable_decisions="list.defaultSort is required"]
32
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
33
+ // CIL[DOC-STABILITY stable]
22
34
  interface MinimalEntityListConfig {
23
35
  entity: string
24
36
  typeSlug?: string
@@ -30,7 +42,24 @@ interface MinimalEntityListConfig {
30
42
  defaultSort: { field: string; direction: 'asc' | 'desc' }
31
43
  }
32
44
  }
45
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the minimal configuration shape for useEntityList'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
46
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
47
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
48
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
49
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
50
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
51
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityList.ts:MinimalEntityListConfig:interface"]
52
+
33
53
 
54
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityList.ts:UseEntityListReturn:interface" type="interface" identity="UseEntityListReturn" parent="~/.framework/src/hooks/useEntityList.ts"]
55
+ // CIL[DOC-AUDIENCE audience="internal"]
56
+ // CIL[DOC-MACRO purpose="Define the return shape for useEntityList"]
57
+ // CIL[DOC-RESPONSIBILITY responsibility="Expose state and controls returned by the useEntityList hook"]
58
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useEntityList" layer="ui" related_files=".framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityList.ts,.framework/src/lib/api.ts"]
59
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseEntityListReturn interface" errors="none" side_effects="none"]
60
+ // CIL[DOC-MICRO logic_summary="Declares data, loading, error, refetch, filters, sort, and pagination state accessors" notable_decisions=""]
61
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
62
+ // CIL[DOC-STABILITY stable]
34
63
  interface UseEntityListReturn {
35
64
  data: any[]
36
65
  loading: boolean
@@ -48,21 +77,23 @@ interface UseEntityListReturn {
48
77
  total: number
49
78
  }
50
79
  }
51
- // CIL[END chunk_id="useentitylist_module_header_1783719596"]
52
- // CIL[BEGIN chunk_id="useentitylist_useentitylist_1783719596" type="function" identity="useEntityList" parent="none"]
53
- // CIL[DOC-MACRO purpose="Fetch and manage paginated, filtered, sorted entity lists"]
54
- // CIL[DOC-RESPONSIBILITY responsibility="List fetching, pagination, filtering, sorting, state management"]
55
- // CIL[DOC-CONTEXT module="useEntityList" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
56
- // CIL[DOC-CONTRACT inputs="none" outputs="UseEntityListReturn with data, controls, pagination" errors="Network errors, API errors" side_effects="React state updates, API calls via apiFetch"]
57
- // CIL[DOC-MICRO logic_summary="Builds query params from config, filters, sort, pagination; fetches via useApi; manages state" notable_decisions="[]"]
58
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
59
- // CIL[DOC-STABILITY stability="stable"]
60
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 3. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
61
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 3."]
62
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
63
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
80
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the return shape for useEntityList'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
81
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
82
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
83
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
64
84
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
65
85
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
86
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityList.ts:UseEntityListReturn:interface"]
87
+
88
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityList.ts:useEntityList:hook" type="hook" identity="useEntityList" parent="~/.framework/src/hooks/useEntityList.ts"]
89
+ // CIL[DOC-AUDIENCE audience="internal"]
90
+ // CIL[DOC-MACRO purpose="Fetch and manage a paginated, sortable, filterable list of entities"]
91
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage list state, build API query parameters, and expose list controls"]
92
+ // CIL[DOC-CONTEXT module=".framework/src/hooks/useEntityList" layer="ui" related_files=".framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityList.ts,.framework/src/lib/api.ts"]
93
+ // CIL[DOC-CONTRACT inputs="entity: string, config: MinimalEntityListConfig | null" outputs="UseEntityListReturn" errors="Throws on non-ok API response" side_effects="HTTP GET request, React state updates"]
94
+ // CIL[DOC-MICRO logic_summary="Computes URL parameters from filters, sort, and pagination; fetches via apiFetch; resets page on filter changes" notable_decisions="Defaults sort to created_at descending; resets page to 1 when filters change"]
95
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
96
+ // CIL[DOC-STABILITY stable]
66
97
  export function useEntityList(
67
98
  entity: string,
68
99
  config: MinimalEntityListConfig | null
@@ -141,4 +172,10 @@ export function useEntityList(
141
172
  }
142
173
  }
143
174
  }
144
- // CIL[END chunk_id="useentitylist_useentitylist_1783719596"]
175
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch and manage a paginated, sortable, filterable list of entities'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
176
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
177
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
178
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
179
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
180
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
181
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityList.ts:useEntityList:hook"]
@@ -1,29 +1,52 @@
1
-
2
-
3
- // CIL[BEGIN chunk_id="useentityrecord_module_header_1783719596" type="module_header" identity="module_header" parent="none"]
4
- // CIL[DOC-MACRO purpose="Define entity record hook types and interfaces"]
5
- // CIL[DOC-RESPONSIBILITY responsibility="Type definitions for entity record management"]
6
- // CIL[DOC-CONTEXT module="useEntityRecord" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
7
- // CIL[DOC-CONTRACT inputs="none" outputs="FieldPermissions, MinimalEntityConfig, UseEntityRecordReturn interfaces" errors="none" side_effects="Type declarations"]
8
- // CIL[DOC-MICRO logic_summary="Exports interfaces for field permissions, entity config, and record management" notable_decisions="[]"]
9
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityRecord.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useEntityRecord.ts"]
2
+ // CIL[DOC-MACRO purpose="React hook for fetching and managing a single entity record"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares module imports and exposes the useEntityRecord hook for record CRUD and permission handling"]
4
+ // CIL[DOC-CONTEXT module="useEntityRecord" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Sets up React and API imports used by the useEntityRecord hook." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
10
8
  // CIL[DOC-STABILITY stability="stable"]
11
- // CIL[DOC-AUDIENCE audience="developer"]
12
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
13
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
9
+ // CIL[DOC-AUDIENCE audience="internal"]
18
10
  import { useCallback } from 'react'
19
11
  import { useApi, useMutation } from './useApi'
20
12
  import { apiFetch } from '../lib/api'
21
13
  import { useAuth } from '../contexts/AuthContext'
14
+ // CIL[DOC-VECTOR type="context" content="purpose='React hook for fetching and managing a single entity record'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
15
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
16
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
17
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
18
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityRecord.ts:module_header:module_header"]
22
21
 
22
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityRecord.ts:fieldpermissions:interface" type="interface" identity="fieldpermissions" parent="~/.framework/src/hooks/useEntityRecord.ts"]
23
+ // CIL[DOC-MACRO purpose="Field-level read and write permission map"]
24
+ // CIL[DOC-RESPONSIBILITY responsibility="Defines the shape of per-field permissions with read and write booleans"]
25
+ // CIL[DOC-CONTEXT module="useEntityRecord" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityRecord.ts,.framework/src/lib/api.ts"]
26
+ // CIL[DOC-CONTRACT inputs="none" outputs="FieldPermissions object" errors="none" side_effects="none"]
27
+ // CIL[DOC-MICRO logic_summary="Maps a field name to an object containing read and write flags." notable_decisions="[]"]
28
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
29
+ // CIL[DOC-STABILITY stability="stable"]
23
30
  interface FieldPermissions {
24
31
  [key: string]: { read: boolean; write: boolean }
25
32
  }
33
+ // CIL[DOC-VECTOR type="context" content="purpose='Field-level read and write permission map'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
34
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
35
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
36
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
37
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
38
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
39
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityRecord.ts:fieldpermissions:interface"]
40
+
26
41
 
42
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityRecord.ts:MinimalEntityConfig:interface" type="interface" identity="MinimalEntityConfig" parent="~/.framework/src/hooks/useEntityRecord.ts"]
43
+ // CIL[DOC-MACRO purpose="Minimal configuration shape for an entity"]
44
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares the configuration required to drive entity CRUD and API action overrides"]
45
+ // CIL[DOC-CONTEXT module="useEntityRecord" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityRecord.ts,.framework/src/lib/api.ts"]
46
+ // CIL[DOC-CONTRACT inputs="none" outputs="MinimalEntityConfig object" errors="none" side_effects="none"]
47
+ // CIL[DOC-MICRO logic_summary="Defines entity metadata, icon, display field, and optional API action overrides." notable_decisions="[]"]
48
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
49
+ // CIL[DOC-STABILITY stability="stable"]
27
50
  interface MinimalEntityConfig {
28
51
  entity: string
29
52
  typeSlug?: string
@@ -38,7 +61,23 @@ interface MinimalEntityConfig {
38
61
  }
39
62
  softDelete?: boolean
40
63
  }
64
+ // CIL[DOC-VECTOR type="context" content="purpose='Minimal configuration shape for an entity'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
65
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
66
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
67
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
68
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
69
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
70
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityRecord.ts:MinimalEntityConfig:interface"]
41
71
 
72
+
73
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityRecord.ts:UseEntityRecordReturn:interface" type="interface" identity="UseEntityRecordReturn" parent="~/.framework/src/hooks/useEntityRecord.ts"]
74
+ // CIL[DOC-MACRO purpose="Return shape for useEntityRecord"]
75
+ // CIL[DOC-RESPONSIBILITY responsibility="Declares the object returned by the useEntityRecord hook including state, schema, permissions, and callbacks"]
76
+ // CIL[DOC-CONTEXT module="useEntityRecord" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityRecord.ts,.framework/src/lib/api.ts"]
77
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseEntityRecordReturn object" errors="none" side_effects="none"]
78
+ // CIL[DOC-MICRO logic_summary="Exposes record state, schema, field permissions, loading and error flags, and save/delete mutators." notable_decisions="[]"]
79
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
80
+ // CIL[DOC-STABILITY stability="stable"]
42
81
  interface UseEntityRecordReturn {
43
82
  record: any
44
83
  schema: any
@@ -51,23 +90,22 @@ interface UseEntityRecordReturn {
51
90
  saving: boolean
52
91
  deleting: boolean
53
92
  }
54
- // CIL[END chunk_id="useentityrecord_module_header_1783719596"]
55
- // CIL[BEGIN chunk_id="useentityrecord_useentityrecord_1783719596" type="function" identity="useEntityRecord" parent="none"]
56
- // CIL[DOC-LEARNING topic="runtime-type:generic/entity_record" content="useEntityRecord splits a record into system fields (field.system=true, stored on the row) and data fields (stored in record.data) using record.design_schema.fields. It applies field-level permissions before saving and uses the design_schema to build the update payload."]
57
- // CIL[DOC-NOTE type="design_schema_caveat" content="If record.design_schema is not stamped or fields is empty, all values may be treated as data and silently dropped by row-level validation or security policies."]
58
- // CIL[DOC-MACRO purpose="Fetch, save, and delete single entity records with permissions"]
59
- // CIL[DOC-RESPONSIBILITY responsibility="Record CRUD operations, field permissions, schema extraction"]
60
- // CIL[DOC-CONTEXT module="useEntityRecord" layer="frontend-hook" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
61
- // CIL[DOC-CONTRACT inputs="none" outputs="UseEntityRecordReturn with record, permissions, mutations" errors="Network errors, permission errors" side_effects="React state updates, API calls via apiFetch"]
62
- // CIL[DOC-MICRO logic_summary="Fetches record, calculates field permissions from schema, handles create/update/delete with system/custom field separation" notable_decisions="[]"]
63
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
64
- // CIL[DOC-STABILITY stability="stable"]
65
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 3. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
66
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 3."]
67
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
68
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
93
+ // CIL[DOC-VECTOR type="context" content="purpose='Return shape for useEntityRecord'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
94
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
95
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
96
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
69
97
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
70
98
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
99
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityRecord.ts:UseEntityRecordReturn:interface"]
100
+
101
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useEntityRecord.ts:useEntityRecord:hook" type="function" identity="useEntityRecord" parent="~/.framework/src/hooks/useEntityRecord.ts"]
102
+ // CIL[DOC-MACRO purpose="Fetch, save, and delete a single runtime entity record"]
103
+ // CIL[DOC-RESPONSIBILITY responsibility="Provides a React hook that loads a record, derives schema and field permissions, and exposes save and delete mutations"]
104
+ // CIL[DOC-CONTEXT module="useEntityRecord" layer="hooks" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/hooks/useApi.ts,.framework/src/hooks/useEntityRecord.ts,.framework/src/lib/api.ts"]
105
+ // CIL[DOC-CONTRACT inputs="entity: string, id: string | undefined, config: MinimalEntityConfig | null" outputs="UseEntityRecordReturn" errors="Throws on failed API requests; returns error string from useApi" side_effects="Calls apiFetch for GET, PATCH, POST, and DELETE requests via useMutation"]
106
+ // CIL[DOC-MICRO logic_summary="Fetches record by ID when present, derives permissions from user roles and design schema, and performs create/update/delete via useMutation." notable_decisions="[]"]
107
+ // CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
108
+ // CIL[DOC-STABILITY stability="stable"]
71
109
  export function useEntityRecord(
72
110
  entity: string,
73
111
  id: string | undefined,
@@ -244,4 +282,10 @@ export function useEntityRecord(
244
282
  deleting: deleteMutation.loading
245
283
  }
246
284
  }
247
- // CIL[END chunk_id="useentityrecord_useentityrecord_1783719596"]
285
+ // CIL[DOC-VECTOR type="context" content="purpose='Fetch, save, and delete a single runtime entity record'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/contexts/AuthContext.tsx"]
286
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
287
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
288
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
289
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
290
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
291
+ // CIL[END stable_id="~/.framework/src/hooks/useEntityRecord.ts:useEntityRecord:hook"]
@@ -1,23 +1,32 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useForm.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useForm.ts"]
2
+ // CIL[DOC-MACRO purpose="Import React hooks and shared form types for useForm"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Set up module dependencies and type imports for the useForm hook"]
4
+ // CIL[DOC-CONTEXT module=".framework/src/hooks" layer="hooks" related_files=".framework/src/types/types.ts"]
5
+ // CIL[DOC-CONTRACT inputs="" outputs="" errors="" side_effects=""]
6
+ // CIL[DOC-MICRO logic_summary="Imports useState, useCallback, useEffect from react and FieldDefinition, FormState, ValidationError from ../types/types" notable_decisions=""]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stable]
9
+ // CIL[DOC-AUDIENCE audience="Developers using the useForm form-state hook"]
1
10
 
2
-
3
- // CIL[BEGIN chunk_id="useform_module_header_1783719596" type="module_header" identity="module_header" parent="none"]
4
- // CIL[DOC-MACRO purpose="Define form hook types and interfaces"]
5
- // CIL[DOC-RESPONSIBILITY responsibility="Type definitions for form management"]
6
- // CIL[DOC-CONTEXT module="useForm" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
7
- // CIL[DOC-CONTRACT inputs="none" outputs="UseFormOptions and UseFormReturn interfaces" errors="none" side_effects="Type declarations"]
8
- // CIL[DOC-MICRO logic_summary="Exports interfaces for form options, return values, and field definitions" notable_decisions="[]"]
9
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
10
- // CIL[DOC-STABILITY stability="stable"]
11
- // CIL[DOC-AUDIENCE audience="developer"]
12
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
13
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
14
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
15
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
16
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
17
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
18
11
  import { useState, useCallback, useEffect } from 'react'
19
12
  import { FieldDefinition, FormState, ValidationError } from '../types/types'
13
+ // CIL[DOC-VECTOR type="context" content="purpose='Import React hooks and shared form types for useForm'; No verified external callers; imports: .framework/src/types/types.ts"]
14
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
15
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
16
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
17
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
19
+ // CIL[END stable_id="~/.framework/src/hooks/useForm.ts:module_header:module_header"]
20
+
20
21
 
22
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useForm.ts:UseFormOptions:interface" type="interface" identity="UseFormOptions" parent="~/.framework/src/hooks/useForm.ts"]
23
+ // CIL[DOC-MACRO purpose="Define configuration options for the useForm hook"]
24
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the shape of options accepted by useForm"]
25
+ // CIL[DOC-CONTEXT module=".framework/src/hooks" layer="hooks" related_files=".framework/src/hooks/useForm.ts,.framework/src/types/types.ts"]
26
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseFormOptions interface" errors="" side_effects="none"]
27
+ // CIL[DOC-MICRO logic_summary="Describes initial values, an array of FieldDefinition objects, and optional onSubmit, validate, and onChange callbacks" notable_decisions="Validation and change callbacks are optional"]
28
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
29
+ // CIL[DOC-STABILITY stable]
21
30
  interface UseFormOptions {
22
31
  initialValues: Record<string, any>
23
32
  fields: FieldDefinition[]
@@ -25,7 +34,23 @@ interface UseFormOptions {
25
34
  validate?: (values: Record<string, any>) => Record<string, string>
26
35
  onChange?: (values: Record<string, any>) => void
27
36
  }
37
+ // CIL[DOC-VECTOR type="context" content="purpose='Define configuration options for the useForm hook'; No verified external callers; imports: .framework/src/types/types.ts"]
38
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
39
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
40
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
41
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
+ // CIL[END stable_id="~/.framework/src/hooks/useForm.ts:UseFormOptions:interface"]
44
+
28
45
 
46
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useForm.ts:UseFormReturn:interface" type="interface" identity="UseFormReturn" parent="~/.framework/src/hooks/useForm.ts"]
47
+ // CIL[DOC-MACRO purpose="Define the return shape of the useForm hook"]
48
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the exposed form state and imperative callbacks available to consumers"]
49
+ // CIL[DOC-CONTEXT module=".framework/src/hooks" layer="hooks" related_files=".framework/src/hooks/useForm.ts,.framework/src/types/types.ts"]
50
+ // CIL[DOC-CONTRACT inputs="none" outputs="UseFormReturn interface" errors="" side_effects="none"]
51
+ // CIL[DOC-MICRO logic_summary="Exposes data, errors, touched, isSubmitting, isValid, isDirty, and change/blur/submit/reset helper callbacks" notable_decisions=""]
52
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
53
+ // CIL[DOC-STABILITY stable]
29
54
  interface UseFormReturn {
30
55
  data: Record<string, any>
31
56
  errors: Record<string, string>
@@ -41,21 +66,22 @@ interface UseFormReturn {
41
66
  setFieldError: (field: string, error: string) => void
42
67
  clearErrors: () => void
43
68
  }
44
- // CIL[END chunk_id="useform_module_header_1783719596"]
45
- // CIL[BEGIN chunk_id="useform_useform_1783719596" type="function" identity="useForm" parent="none"]
46
- // CIL[DOC-MACRO purpose="Schema-driven form state and validation management"]
47
- // CIL[DOC-RESPONSIBILITY responsibility="Form validation, state management, submission handling"]
48
- // CIL[DOC-CONTEXT module="useForm" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
49
- // CIL[DOC-CONTRACT inputs="none" outputs="UseFormReturn with form state and handlers" errors="Validation errors, submission errors" side_effects="React state updates, API calls via onSubmit"]
50
- // CIL[DOC-MICRO logic_summary="Implements field-level validation, form submission, error handling, and state management for schema-driven forms" notable_decisions="[]"]
51
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
52
- // CIL[DOC-STABILITY stability="stable"]
53
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
54
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
55
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
56
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
69
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the return shape of the useForm hook'; No verified external callers; imports: .framework/src/types/types.ts"]
70
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
71
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
72
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
57
73
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
58
74
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
75
+ // CIL[END stable_id="~/.framework/src/hooks/useForm.ts:UseFormReturn:interface"]
76
+
77
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useForm.ts:useForm:hook" type="hook" identity="useForm" parent="~/.framework/src/hooks/useForm.ts"]
78
+ // CIL[DOC-MACRO purpose="Manage React form state, validation, and submission for typed field definitions"]
79
+ // CIL[DOC-RESPONSIBILITY responsibility="Track form data, validate fields and full form, expose change/blur/submit handlers and reset helpers"]
80
+ // CIL[DOC-CONTEXT module=".framework/src/hooks" layer="hooks" related_files=".framework/src/hooks/useForm.ts,.framework/src/types/types.ts"]
81
+ // CIL[DOC-CONTRACT inputs="{initialValues,fields,onSubmit,validate,onChange}:UseFormOptions" outputs="UseFormReturn (data, errors, touched, isSubmitting, isValid, isDirty, handlers)" errors="Field validation messages and uncaught submission errors logged to console" side_effects="Updates React state, invokes onSubmit and onChange callbacks, logs submission errors to console"]
82
+ // CIL[DOC-MICRO logic_summary="Validates individual fields by data_type and custom validator, aggregates form errors, manages dirty and touched state, and handles async submission with an isSubmitting flag" notable_decisions="Validation clears the error for a changed field before blur; setFieldError and clearErrors allow manual error control"]
83
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
84
+ // CIL[DOC-STABILITY stable]
59
85
  export function useForm({
60
86
  initialValues,
61
87
  fields,
@@ -244,4 +270,10 @@ export function useForm({
244
270
  clearErrors
245
271
  }
246
272
  }
247
- // CIL[END chunk_id="useform_useform_1783719596"]
273
+ // CIL[DOC-VECTOR type="context" content="purpose='Manage React form state, validation, and submission for typed field definitions'; No verified external callers; imports: .framework/src/types/types.ts"]
274
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
275
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
276
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
277
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
278
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
279
+ // CIL[END stable_id="~/.framework/src/hooks/useForm.ts:useForm:hook"]