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,3 +1,13 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useApi.ts"]
2
+ // CIL[DOC-MACRO purpose="React hooks for asynchronous API operations including fetching, pagination, and mutations"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide reusable React hooks that encapsulate data fetching, pagination, and mutation state"]
4
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
5
+ // CIL[DOC-CONTRACT inputs="" outputs="useApi, usePaginatedApi, useMutation" errors="" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Exports three hooks for asynchronous API state management" notable_decisions="Keeps related data fetching patterns in a single module"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="frontend-developers"]
10
+
1
11
 
2
12
 
3
13
 
@@ -10,59 +20,46 @@
10
20
 
11
21
 
12
22
 
13
- // CIL[BEGIN chunk_id="useapi_module_header_1783740744" type="module_header" identity="imports" parent="none"]
14
- // CIL[DOC-MACRO purpose="Import React hooks and router for API functionality"]
15
- // CIL[DOC-RESPONSIBILITY responsibility="Provide core React dependencies for API state management"]
16
- // CIL[DOC-CONTEXT module="useApi" 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/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
17
- // CIL[DOC-CONTRACT inputs="none" outputs="React hooks" errors="none" side_effects="Module imports"]
18
- // CIL[DOC-MICRO logic_summary="Imports useState, useEffect, useCallback, useRef from React and useLocation from react-router-dom" notable_decisions="[]"]
19
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
20
- // CIL[DOC-STABILITY stability="stable"]
21
- // CIL[DOC-AUDIENCE audience="developer"]
22
- // 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/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
23
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
24
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
25
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
26
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
27
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
28
23
  import { useState, useEffect, useCallback, useRef } from 'react'
29
24
  import { useLocation } from 'react-router-dom'
30
- // CIL[END chunk_id="useapi_module_header_1783740744"]
31
- // CIL[BEGIN chunk_id="useapi_apistate_1783740744" type="interface" identity="ApiState" parent="none"]
32
- // CIL[DOC-MACRO purpose="Define API state structure for loading, data, and error tracking"]
33
- // CIL[DOC-RESPONSIBILITY responsibility="Own the core state shape for API operations"]
34
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
35
- // CIL[DOC-CONTRACT inputs="none" outputs="state interface" errors="none" side_effects="Type definition"]
36
- // CIL[DOC-MICRO logic_summary="Generic interface with data, loading, error, and lastFetched fields" notable_decisions="[]"]
37
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
38
- // CIL[DOC-STABILITY stability="stable"]
39
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, \."]
40
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
41
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
42
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
25
+ // CIL[DOC-VECTOR type="context" content="purpose='React hooks for asynchronous API operations including fetching, pagination, and mutations'; No verified external callers; imports: none"]
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"]
43
29
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
44
30
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
31
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:module_header:module_header"]
32
+
33
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:ApiState:interface" type="interface" identity="ApiState" parent="~/.framework/src/hooks/useApi.ts"]
34
+ // CIL[DOC-MACRO purpose="Type definition for ApiState"]
35
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the ApiState interface"]
36
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
37
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error, lastFetched" errors="" side_effects="none"]
38
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the ApiState data object" notable_decisions="Tracks lastFetched to record the most recent successful fetch"]
39
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
40
+ // CIL[DOC-STABILITY stability="stable"]
45
41
  interface ApiState<T> {
46
42
  data: T | null
47
43
  loading: boolean
48
44
  error: string | null
49
45
  lastFetched: Date | null
50
46
  }
51
- // CIL[END chunk_id="useapi_apistate_1783740744"]
52
- // CIL[BEGIN chunk_id="useapi_useapioptions_1783740744" type="interface" identity="UseApiOptions" parent="none"]
53
- // CIL[DOC-MACRO purpose="Configure API hook behavior with callbacks and initial data"]
54
- // CIL[DOC-RESPONSIBILITY responsibility="Define configuration options for API hook usage"]
55
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
56
- // CIL[DOC-CONTRACT inputs="none" outputs="options interface" errors="none" side_effects="Type definition"]
57
- // CIL[DOC-MICRO logic_summary="Options for immediate execution, success/error callbacks, initial data, and dependencies" 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: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
61
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
62
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
63
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
47
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for ApiState'; No verified external callers; imports: none"]
48
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
49
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
50
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
64
51
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
65
52
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
53
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:ApiState:interface"]
54
+
55
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UseApiOptions:interface" type="interface" identity="UseApiOptions" parent="~/.framework/src/hooks/useApi.ts"]
56
+ // CIL[DOC-MACRO purpose="Type definition for UseApiOptions"]
57
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UseApiOptions interface"]
58
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
59
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="immediate, onSuccess, onError, initialData, deps" errors="" side_effects="none"]
60
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UseApiOptions data object" notable_decisions="Uses generics to remain flexible across concrete API payloads"]
61
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
62
+ // CIL[DOC-STABILITY stability="stable"]
66
63
  interface UseApiOptions<T> {
67
64
  immediate?: boolean
68
65
  onSuccess?: (data: T) => void
@@ -70,21 +67,22 @@ interface UseApiOptions<T> {
70
67
  initialData?: T
71
68
  deps?: any[]
72
69
  }
73
- // CIL[END chunk_id="useapi_useapioptions_1783740744"]
74
- // CIL[BEGIN chunk_id="useapi_useapireturn_1783740744" type="interface" identity="UseApiReturn" parent="none"]
75
- // CIL[DOC-MACRO purpose="Define the return value structure for useApi hook"]
76
- // CIL[DOC-RESPONSIBILITY responsibility="Shape the public API surface for consumers"]
77
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
78
- // CIL[DOC-CONTRACT inputs="none" outputs="return interface" errors="none" side_effects="Type definition"]
79
- // CIL[DOC-MICRO logic_summary="Returns state data, loading status, error, and control functions" notable_decisions="[]"]
80
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
81
- // CIL[DOC-STABILITY stability="stable"]
82
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
83
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
84
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
85
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
70
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UseApiOptions'; No verified external callers; imports: none"]
71
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
72
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
73
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
86
74
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
87
75
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
76
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UseApiOptions:interface"]
77
+
78
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UseApiReturn:interface" type="interface" identity="UseApiReturn" parent="~/.framework/src/hooks/useApi.ts"]
79
+ // CIL[DOC-MACRO purpose="Type definition for UseApiReturn"]
80
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UseApiReturn interface"]
81
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
82
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error, execute, reset, refetch" errors="" side_effects="none"]
83
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UseApiReturn data object" notable_decisions="Returns both state and controller functions"]
84
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
85
+ // CIL[DOC-STABILITY stability="stable"]
88
86
  interface UseApiReturn<T> {
89
87
  data: T | null
90
88
  loading: boolean
@@ -93,21 +91,22 @@ interface UseApiReturn<T> {
93
91
  reset: () => void
94
92
  refetch: () => Promise<T>
95
93
  }
96
- // CIL[END chunk_id="useapi_useapireturn_1783740744"]
97
- // CIL[BEGIN chunk_id="useapi_useapi_1783740744" type="function" identity="useApi" parent="none"]
98
- // CIL[DOC-MACRO purpose="Core async API hook with loading state and request cancellation"]
99
- // CIL[DOC-RESPONSIBILITY responsibility="Manage API calls, state, and automatic cleanup on navigation"]
100
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
101
- // CIL[DOC-CONTRACT inputs="none" outputs="UseApiReturn" errors="throws API errors" side_effects="React state, AbortController"]
102
- // CIL[DOC-MICRO logic_summary="Wraps async functions with loading state, error handling, and AbortController for cancellation" notable_decisions="[]"]
103
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
104
- // CIL[DOC-STABILITY stability="stable"]
105
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
106
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
107
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
108
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
94
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UseApiReturn'; No verified external callers; imports: none"]
95
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
96
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
97
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
109
98
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
110
99
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
100
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UseApiReturn:interface"]
101
+
102
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:useApi:hook" type="hook" identity="useApi" parent="~/.framework/src/hooks/useApi.ts"]
103
+ // CIL[DOC-MACRO purpose="React hook for fetching data from an API with cancellation support"]
104
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage async state and lifecycle for useApi"]
105
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
106
+ // CIL[DOC-CONTRACT inputs="apiFunction returning a Promise<T> and UseApiOptions<T>" outputs="UseApiReturn<T> with data, loading, error, execute, reset, refetch" errors="Throws non-AbortError after updating state.error" side_effects="Calls apiFunction, updates React state, invokes onSuccess/onError, logs metrics"]
107
+ // CIL[DOC-MICRO logic_summary="Encapsulates a single async request lifecycle with request cancellation" notable_decisions="Uses refs to keep the latest callback versions and aborts previous in-flight requests"]
108
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
109
+ // CIL[DOC-STABILITY stability="stable"]
111
110
  export function useApi<T>(
112
111
  apiFunction: (params?: any) => Promise<T>,
113
112
  options: UseApiOptions<T> = {}
@@ -225,21 +224,22 @@ export function useApi<T>(
225
224
  refetch
226
225
  }
227
226
  }
228
- // CIL[END chunk_id="useapi_useapi_1783740744"]
229
- // CIL[BEGIN chunk_id="useapi_paginatedapistate_1783740744" type="interface" identity="PaginatedApiState" parent="none"]
230
- // CIL[DOC-MACRO purpose="Extend ApiState with pagination metadata for paginated responses"]
231
- // CIL[DOC-RESPONSIBILITY responsibility="Define state structure for paginated API data"]
232
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
233
- // CIL[DOC-CONTRACT inputs="none" outputs="paginated state interface" errors="none" side_effects="Type definition"]
234
- // CIL[DOC-MICRO logic_summary="Extends ApiState with pagination fields for page, totalPages, totalItems, itemsPerPage" notable_decisions="[]"]
235
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
236
- // CIL[DOC-STABILITY stability="stable"]
237
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
238
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
239
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
240
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
227
+ // CIL[DOC-VECTOR type="context" content="purpose='React hook for fetching data from an API with cancellation support'; No verified external callers; imports: none"]
228
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
229
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
230
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
241
231
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
242
232
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
233
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:useApi:hook"]
234
+
235
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:PaginatedApiState:interface" type="interface" identity="PaginatedApiState" parent="~/.framework/src/hooks/useApi.ts"]
236
+ // CIL[DOC-MACRO purpose="Type definition for PaginatedApiState"]
237
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the PaginatedApiState interface"]
238
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
239
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error, lastFetched, pagination" errors="" side_effects="none"]
240
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the PaginatedApiState data object" notable_decisions="Extends ApiState with a pagination block"]
241
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
242
+ // CIL[DOC-STABILITY stability="stable"]
243
243
  interface PaginatedApiState<T> extends ApiState<T[]> {
244
244
  pagination: {
245
245
  page: number
@@ -248,39 +248,41 @@ interface PaginatedApiState<T> extends ApiState<T[]> {
248
248
  itemsPerPage: number
249
249
  }
250
250
  }
251
- // CIL[END chunk_id="useapi_paginatedapistate_1783740744"]
252
- // CIL[BEGIN chunk_id="useapi_usepaginatedapioptions_1783740744" type="interface" identity="UsePaginatedApiOptions" parent="none"]
253
- // CIL[DOC-MACRO purpose="Extend UseApiOptions with pagination-specific configuration"]
254
- // CIL[DOC-RESPONSIBILITY responsibility="Define configuration options for paginated API hook"]
255
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
256
- // CIL[DOC-CONTRACT inputs="none" outputs="paginated options interface" errors="none" side_effects="Type definition"]
257
- // CIL[DOC-MICRO logic_summary="Extends UseApiOptions with itemsPerPage configuration" notable_decisions="[]"]
258
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
259
- // CIL[DOC-STABILITY stability="stable"]
260
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
261
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
262
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
263
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
251
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for PaginatedApiState'; No verified external callers; imports: none"]
252
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
253
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
254
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
264
255
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
265
256
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
257
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:PaginatedApiState:interface"]
258
+
259
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UsePaginatedApiOptions:interface" type="interface" identity="UsePaginatedApiOptions" parent="~/.framework/src/hooks/useApi.ts"]
260
+ // CIL[DOC-MACRO purpose="Type definition for UsePaginatedApiOptions"]
261
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UsePaginatedApiOptions interface"]
262
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
263
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="immediate, onSuccess, onError, initialData, deps, itemsPerPage" errors="" side_effects="none"]
264
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UsePaginatedApiOptions data object" notable_decisions="Extends UseApiOptions with pagination settings"]
265
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
266
+ // CIL[DOC-STABILITY stability="stable"]
266
267
  interface UsePaginatedApiOptions<T> extends UseApiOptions<T[]> {
267
268
  itemsPerPage?: number
268
269
  }
269
- // CIL[END chunk_id="useapi_usepaginatedapioptions_1783740744"]
270
- // CIL[BEGIN chunk_id="useapi_usepaginatedapireturn_1783740744" type="interface" identity="UsePaginatedApiReturn" parent="none"]
271
- // CIL[DOC-MACRO purpose="Extend UseApiReturn with pagination navigation controls"]
272
- // CIL[DOC-RESPONSIBILITY responsibility="Define return structure for paginated API hook with navigation"]
273
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
274
- // CIL[DOC-CONTRACT inputs="none" outputs="paginated return interface" errors="none" side_effects="Type definition"]
275
- // CIL[DOC-MICRO logic_summary="Extends UseApiReturn with pagination state and navigation functions" notable_decisions="[]"]
276
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
277
- // CIL[DOC-STABILITY stability="stable"]
278
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
279
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
280
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
281
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
270
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UsePaginatedApiOptions'; No verified external callers; imports: none"]
271
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
272
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
273
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
282
274
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
283
275
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
276
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UsePaginatedApiOptions:interface"]
277
+
278
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UsePaginatedApiReturn:interface" type="interface" identity="UsePaginatedApiReturn" parent="~/.framework/src/hooks/useApi.ts"]
279
+ // CIL[DOC-MACRO purpose="Type definition for UsePaginatedApiReturn"]
280
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UsePaginatedApiReturn interface"]
281
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
282
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error, execute, reset, refetch, pagination, setPage, setItemsPerPage, nextPage, prevPage, hasNextPage, hasPrevPage" errors="" side_effects="none"]
283
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UsePaginatedApiReturn data object" notable_decisions="Exposes pagination control methods in addition to base useApi return values"]
284
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
285
+ // CIL[DOC-STABILITY stability="stable"]
284
286
  interface UsePaginatedApiReturn<T> extends UseApiReturn<T[]> {
285
287
  pagination: PaginatedApiState<T>['pagination']
286
288
  setPage: (page: number) => void
@@ -290,21 +292,22 @@ interface UsePaginatedApiReturn<T> extends UseApiReturn<T[]> {
290
292
  hasNextPage: boolean
291
293
  hasPrevPage: boolean
292
294
  }
293
- // CIL[END chunk_id="useapi_usepaginatedapireturn_1783740744"]
294
- // CIL[BEGIN chunk_id="useapi_usepaginatedapi_1783740744" type="function" identity="usePaginatedApi" parent="none"]
295
- // CIL[DOC-MACRO purpose="Paginated API hook with page navigation and items-per-page controls"]
296
- // CIL[DOC-RESPONSIBILITY responsibility="Manage paginated API state and navigation controls"]
297
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
298
- // CIL[DOC-CONTRACT inputs="none" outputs="UsePaginatedApiReturn" errors="throws API errors" side_effects="React state, pagination"]
299
- // CIL[DOC-MICRO logic_summary="Wraps paginated API calls with state management and navigation functions" notable_decisions="[]"]
300
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
301
- // CIL[DOC-STABILITY stability="stable"]
302
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
303
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
304
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
305
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
295
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UsePaginatedApiReturn'; No verified external callers; imports: none"]
296
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
297
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
298
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
306
299
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
307
300
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
301
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UsePaginatedApiReturn:interface"]
302
+
303
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:usePaginatedApi:hook" type="hook" identity="usePaginatedApi" parent="~/.framework/src/hooks/useApi.ts"]
304
+ // CIL[DOC-MACRO purpose="React hook for paginated API fetching"]
305
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage async state and lifecycle for usePaginatedApi"]
306
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
307
+ // CIL[DOC-CONTRACT inputs="apiFunction returning {data: T[], pagination} and UsePaginatedApiOptions<T>" outputs="UsePaginatedApiReturn<T> with pagination controls" errors="Throws on API error after setting state.error" side_effects="Fetches new page when page or itemsPerPage changes"]
308
+ // CIL[DOC-MICRO logic_summary="Manages paginated state and refetches when pagination parameters change" notable_decisions="Resets to page 1 when itemsPerPage changes and exposes nextPage/prevPage helpers"]
309
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
310
+ // CIL[DOC-STABILITY stability="stable"]
308
311
  export function usePaginatedApi<T>(
309
312
  apiFunction: (params: { page: number; itemsPerPage: number; [key: string]: any }) => Promise<{
310
313
  data: T[]
@@ -441,61 +444,64 @@ export function usePaginatedApi<T>(
441
444
  hasPrevPage
442
445
  }
443
446
  }
444
- // CIL[END chunk_id="useapi_usepaginatedapi_1783740744"]
445
- // CIL[BEGIN chunk_id="useapi_mutationstate_1783740744" type="interface" identity="MutationState" parent="none"]
446
- // CIL[DOC-MACRO purpose="Define state structure for mutation operations"]
447
- // CIL[DOC-RESPONSIBILITY responsibility="Own the state shape for write operations"]
448
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
449
- // CIL[DOC-CONTRACT inputs="none" outputs="mutation state interface" errors="none" side_effects="Type definition"]
450
- // CIL[DOC-MICRO logic_summary="Simple state interface with data, loading, and error fields for mutations" notable_decisions="[]"]
451
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
452
- // CIL[DOC-STABILITY stability="stable"]
453
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
454
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
455
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
456
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
447
+ // CIL[DOC-VECTOR type="context" content="purpose='React hook for paginated API fetching'; No verified external callers; imports: none"]
448
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
449
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
450
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
457
451
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
458
452
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
453
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:usePaginatedApi:hook"]
454
+
455
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:MutationState:interface" type="interface" identity="MutationState" parent="~/.framework/src/hooks/useApi.ts"]
456
+ // CIL[DOC-MACRO purpose="Type definition for MutationState"]
457
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the MutationState interface"]
458
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
459
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error" errors="" side_effects="none"]
460
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the MutationState data object" notable_decisions="Uses generics to remain flexible across concrete API payloads"]
461
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
462
+ // CIL[DOC-STABILITY stability="stable"]
459
463
  interface MutationState<T> {
460
464
  data: T | null
461
465
  loading: boolean
462
466
  error: string | null
463
467
  }
464
- // CIL[END chunk_id="useapi_mutationstate_1783740744"]
465
- // CIL[BEGIN chunk_id="useapi_usemutationoptions_1783740744" type="interface" identity="UseMutationOptions" parent="none"]
466
- // CIL[DOC-MACRO purpose="Define callback options for mutation lifecycle events"]
467
- // CIL[DOC-RESPONSIBILITY responsibility="Configure mutation hook behavior with lifecycle callbacks"]
468
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
469
- // CIL[DOC-CONTRACT inputs="none" outputs="mutation options interface" errors="none" side_effects="Type definition"]
470
- // CIL[DOC-MICRO logic_summary="Options for success, error, and settled callbacks with typed parameters" notable_decisions="[]"]
471
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
472
- // CIL[DOC-STABILITY stability="stable"]
473
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
474
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
475
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
476
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
468
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for MutationState'; No verified external callers; imports: none"]
469
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
470
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
471
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
477
472
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
478
473
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
474
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:MutationState:interface"]
475
+
476
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UseMutationOptions:interface" type="interface" identity="UseMutationOptions" parent="~/.framework/src/hooks/useApi.ts"]
477
+ // CIL[DOC-MACRO purpose="Type definition for UseMutationOptions"]
478
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UseMutationOptions interface"]
479
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
480
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="onSuccess, onError, onSettled" errors="" side_effects="none"]
481
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UseMutationOptions data object" notable_decisions="Uses generics to remain flexible across concrete API payloads"]
482
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
483
+ // CIL[DOC-STABILITY stability="stable"]
479
484
  interface UseMutationOptions<T, P> {
480
485
  onSuccess?: (data: T) => void
481
486
  onError?: (error: string) => void
482
487
  onSettled?: () => void
483
488
  }
484
- // CIL[END chunk_id="useapi_usemutationoptions_1783740744"]
485
- // CIL[BEGIN chunk_id="useapi_usemutationreturn_1783740744" type="interface" identity="UseMutationReturn" parent="none"]
486
- // CIL[DOC-MACRO purpose="Define return structure for mutation hook"]
487
- // CIL[DOC-RESPONSIBILITY responsibility="Shape the public API surface for mutation operations"]
488
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
489
- // CIL[DOC-CONTRACT inputs="none" outputs="mutation return interface" errors="none" side_effects="Type definition"]
490
- // CIL[DOC-MICRO logic_summary="Returns mutation state, mutate function, and reset function" notable_decisions="[]"]
491
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
492
- // CIL[DOC-STABILITY stability="stable"]
493
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
494
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
495
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
496
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
489
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UseMutationOptions'; No verified external callers; imports: none"]
490
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
491
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
492
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
497
493
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
498
494
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
495
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UseMutationOptions:interface"]
496
+
497
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:UseMutationReturn:interface" type="interface" identity="UseMutationReturn" parent="~/.framework/src/hooks/useApi.ts"]
498
+ // CIL[DOC-MACRO purpose="Type definition for UseMutationReturn"]
499
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the fields and shape of the UseMutationReturn interface"]
500
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
501
+ // CIL[DOC-CONTRACT inputs="generic type parameters" outputs="data, loading, error, mutate, reset" errors="" side_effects="none"]
502
+ // CIL[DOC-MICRO logic_summary="Describes the structure of the UseMutationReturn data object" notable_decisions="Provides a mutate trigger and reset for optimistic UIs"]
503
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
504
+ // CIL[DOC-STABILITY stability="stable"]
499
505
  interface UseMutationReturn<T, P> {
500
506
  data: T | null
501
507
  loading: boolean
@@ -503,21 +509,22 @@ interface UseMutationReturn<T, P> {
503
509
  mutate: (params: P) => Promise<T>
504
510
  reset: () => void
505
511
  }
506
- // CIL[END chunk_id="useapi_usemutationreturn_1783740744"]
507
- // CIL[BEGIN chunk_id="useapi_usemutation_1783740744" type="function" identity="useMutation" parent="none"]
508
- // CIL[DOC-MACRO purpose="Write-operation hook for create, update, and delete operations"]
509
- // CIL[DOC-RESPONSIBILITY responsibility="Manage mutation state and lifecycle callbacks"]
510
- // CIL[DOC-CONTEXT module="useApi" layer="frontend-hook" related_files="[]"]
511
- // CIL[DOC-CONTRACT inputs="none" outputs="UseMutationReturn" errors="throws mutation errors" side_effects="React state, callbacks"]
512
- // CIL[DOC-MICRO logic_summary="Wraps async write operations with loading state and lifecycle callbacks" notable_decisions="[]"]
513
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
514
- // CIL[DOC-STABILITY stability="stable"]
515
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: none."]
516
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
517
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
518
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
512
+ // CIL[DOC-VECTOR type="context" content="purpose='Type definition for UseMutationReturn'; No verified external callers; imports: none"]
513
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
514
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
515
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
519
516
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
520
517
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
518
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:UseMutationReturn:interface"]
519
+
520
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useApi.ts:useMutation:hook" type="hook" identity="useMutation" parent="~/.framework/src/hooks/useApi.ts"]
521
+ // CIL[DOC-MACRO purpose="React hook for mutation operations"]
522
+ // CIL[DOC-RESPONSIBILITY responsibility="Manage async state and lifecycle for useMutation"]
523
+ // CIL[DOC-CONTEXT module="hooks" layer="frontend" related_files=".framework/src/hooks/useApi.ts"]
524
+ // CIL[DOC-CONTRACT inputs="mutationFunction(params: P) => Promise<T> and UseMutationOptions<T, P>" outputs="UseMutationReturn<T, P> with data, loading, error, mutate, reset" errors="Throws mutation error after setting state.error" side_effects="Updates React state and calls onSuccess/onError/onSettled callbacks"]
525
+ // CIL[DOC-MICRO logic_summary="Encapsulates a mutation request and reset lifecycle" notable_decisions="Calls onSettled in a finally block to allow cleanup after success or failure"]
526
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
527
+ // CIL[DOC-STABILITY stability="stable"]
521
528
  export function useMutation<T, P = void>(
522
529
  mutationFunction: (params: P) => Promise<T>,
523
530
  options: UseMutationOptions<T, P> = {}
@@ -572,4 +579,10 @@ export function useMutation<T, P = void>(
572
579
  reset
573
580
  }
574
581
  }
575
- // CIL[END chunk_id="useapi_usemutation_1783740744"]
582
+ // CIL[DOC-VECTOR type="context" content="purpose='React hook for mutation operations'; No verified external callers; imports: none"]
583
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
584
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
585
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
586
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
587
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
588
+ // CIL[END stable_id="~/.framework/src/hooks/useApi.ts:useMutation:hook"]
@@ -1,35 +1,31 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useAppPath.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/hooks/useAppPath.ts"]
2
+ // CIL[DOC-AUDIENCE audience="internal"]
3
+ // CIL[DOC-CONTEXT module="useAppPath" layer="hooks" related_files=".framework/src/contexts/AppContext.tsx"]
4
+ // CIL[DOC-CONTRACT inputs="" outputs="" errors="" side_effects=""]
5
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
6
+ // CIL[DOC-MACRO purpose="import the current-app context hook dependency"]
7
+ // CIL[DOC-MICRO logic_summary="imports useCurrentApp from AppContext" notable_decisions=""]
8
+ // CIL[DOC-RESPONSIBILITY responsibility="provide the app context dependency used by useAppPath"]
9
+ // CIL[DOC-STABILITY stable]
10
+
1
11
 
2
- // CIL[BEGIN chunk_id="useapppath_module_header_1783740744" type="module_header" identity="imports" parent="none"]
3
- // CIL[DOC-MACRO purpose="Import app context hook for route prefix access"]
4
- // CIL[DOC-RESPONSIBILITY responsibility="Provide access to current app configuration"]
5
- // CIL[DOC-CONTEXT module="useAppPath" layer="frontend-hook" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
6
- // CIL[DOC-CONTRACT inputs="none" outputs="useCurrentApp hook" errors="none" side_effects="Module imports"]
7
- // CIL[DOC-MICRO logic_summary="Imports useCurrentApp hook from AppContext for app-specific routing" notable_decisions="[]"]
8
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
9
- // CIL[DOC-STABILITY stability="stable"]
10
- // CIL[DOC-AUDIENCE audience="developer"]
11
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/principal.ts, \."]
12
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
13
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
14
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
15
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
16
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
17
12
  import { useCurrentApp } from '../contexts/AppContext'
18
- // CIL[END chunk_id="useapppath_module_header_1783740744"]
19
- // CIL[BEGIN chunk_id="useapppath_useapppath_1783740744" type="function" identity="useAppPath" parent="none"]
20
- // CIL[DOC-MACRO purpose="Generate app-specific path helper with route prefix handling"]
21
- // CIL[DOC-RESPONSIBILITY responsibility="Manage route prefix logic for app-relative paths"]
22
- // CIL[DOC-CONTEXT module="useAppPath" layer="frontend-hook" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
23
- // CIL[DOC-CONTRACT inputs="none" outputs="path helper function" errors="none" side_effects="React hook dependency"]
24
- // CIL[DOC-MICRO logic_summary="Creates path function that prepends app route_prefix to root-relative paths" notable_decisions="[]"]
25
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
26
- // CIL[DOC-STABILITY stability="stable"]
27
- // CIL[DOC-VECTOR type="context" content="Layer: frontend-hook. Direct callers: 7. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, .framework/src/components/ui/dialog.tsx, \."]
28
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 7. Total affected: 7."]
29
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
30
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
13
+ // CIL[DOC-VECTOR type="context" content="purpose='import the current-app context hook dependency'; No verified external callers; imports: .framework/src/contexts/AppContext.tsx"]
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"]
31
17
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
32
18
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
19
+ // CIL[END stable_id="~/.framework/src/hooks/useAppPath.ts:module_header:module_header"]
20
+
21
+ // CIL[BEGIN stable_id="~/.framework/src/hooks/useAppPath.ts:useAppPath:hook" type="hook" identity="useAppPath" parent="~/.framework/src/hooks/useAppPath.ts"]
22
+ // CIL[DOC-CONTEXT module="useAppPath" layer="hooks" related_files=".framework/src/contexts/AppContext.tsx,.framework/src/hooks/useAppPath.ts"]
23
+ // CIL[DOC-CONTRACT inputs="path: string" outputs="string: prefixed and normalized path" errors="none" side_effects="none"]
24
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
25
+ // CIL[DOC-MACRO purpose="return a path prefix function that applies the current app route prefix"]
26
+ // CIL[DOC-MICRO logic_summary="strips trailing slash from app.route_prefix; special-cases root '/'; otherwise ensures leading slash and concatenates" notable_decisions="treats '/' as special root path; only prefixes when a non-root route_prefix exists"]
27
+ // CIL[DOC-RESPONSIBILITY responsibility="produce an application-prefixed, slash-normalized path string"]
28
+ // CIL[DOC-STABILITY stable]
33
29
  export function useAppPath(): (path: string) => string {
34
30
  const app = useCurrentApp()
35
31
 
@@ -44,4 +40,10 @@ export function useAppPath(): (path: string) => string {
44
40
  return `${prefix}${normalized}`
45
41
  }
46
42
  }
47
- // CIL[END chunk_id="useapppath_useapppath_1783740744"]
43
+ // CIL[DOC-VECTOR type="context" content="purpose='return a path prefix function that applies the current app route prefix'; No verified external callers; imports: .framework/src/contexts/AppContext.tsx"]
44
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
45
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
46
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
47
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
48
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
49
+ // CIL[END stable_id="~/.framework/src/hooks/useAppPath.ts:useAppPath:hook"]