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,21 +1,16 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="none"]
2
+ // CIL[DOC-MACRO purpose="Module header for the admin API keys list page, importing dependencies and defining the page component scope."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Set up imports and module metadata for APIKeysPage."]
4
+ // CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Contains import statements for the page; no runtime logic." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="ai-coder"]
10
+
1
11
 
2
12
 
3
13
 
4
- // CIL[BEGIN chunk_id="apikeyspage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
5
- // CIL[DOC-MACRO purpose="Import dependencies for APIKeysPage component"]
6
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, UI components, and utilities"]
7
- // CIL[DOC-CONTEXT module="APIKeysPage" layer="presentation" related_files="[\".framework/src/components/layout/Sidebar.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
8
- // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
9
- // CIL[DOC-MICRO logic_summary="Imports React state management, UI components, API hooks" 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/layout/Sidebar.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
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 React, { useState } from 'react'
20
15
  import { Plus, Key, CheckCircle, Clock, ShieldCheck, RefreshCw } from 'lucide-react';
21
16
  import { LoadingSpinner } from '../../components/ui/LoadingSpinner'
@@ -27,21 +22,21 @@ import { PageInstructions } from '../../components/admin/PageInstructions'
27
22
  import { formatDateTime } from '../../lib/utils'
28
23
  import { useApi } from '../../hooks/useApi'
29
24
  import { apiFetch } from '../../lib/api'
30
- // CIL[END chunk_id="apikeyspage_module_header_1783668265"]
31
- // CIL[BEGIN chunk_id="apikeyspage_interface_apikey_1783668265" type="interface" identity="APIKey" parent="none"]
32
- // CIL[DOC-MACRO purpose="Define APIKey data structure"]
33
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for API key objects"]
34
- // CIL[DOC-CONTEXT module="APIKeysPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/layout/Sidebar.tsx\",\"\\\"]"]
35
- // CIL[DOC-CONTRACT inputs="none" outputs="APIKey interface type" errors="none" side_effects="none"]
36
- // CIL[DOC-MICRO logic_summary="Defines complete API key structure with metadata and usage" notable_decisions="[]"]
37
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
38
- // CIL[DOC-STABILITY stability="stable"]
39
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/src/components/layout/Sidebar.tsx, \."]
40
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
41
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
42
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
25
+ // CIL[DOC-VECTOR type="context" content="purpose='Module header for the admin API keys list page, importing dependencies and defining the page component scope.'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
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/pages/admin/APIKeysPage.tsx:module_header:module_header"]
32
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikey:interface" type="interface" identity="apikey" parent="none"]
33
+ // CIL[DOC-MACRO purpose="Define the TypeScript shape of an API key record."]
34
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a typed interface for API key data."]
35
+ // CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/APIKeysPage.tsx"]
36
+ // CIL[DOC-CONTRACT inputs="none" outputs="APIKey type definition" errors="none" side_effects="none"]
37
+ // CIL[DOC-MICRO logic_summary="Describes fields for an API key including id, name, key_type, is_active, usage, integration, and creator." notable_decisions="[]"]
38
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
39
+ // CIL[DOC-STABILITY stability="stable"]
45
40
  interface APIKey {
46
41
  id: string
47
42
  name: string
@@ -63,21 +58,22 @@ interface APIKey {
63
58
  }
64
59
  created_at: string
65
60
  }
66
- // CIL[END chunk_id="apikeyspage_interface_apikey_1783668265"]
67
- // CIL[BEGIN chunk_id="apikeyspage_function_apikeyspage_1783668265" type="function" identity="APIKeysPage" parent="none"]
68
- // CIL[DOC-MACRO purpose="Main APIKeysPage component implementation"]
69
- // CIL[DOC-RESPONSIBILITY responsibility="Render API key management interface with filtering, sorting, and stats"]
70
- // CIL[DOC-CONTEXT module="APIKeysPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\".framework/src/components/layout/Sidebar.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
71
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
72
- // CIL[DOC-MICRO logic_summary="Manages state, fetches API keys, handles filtering/sorting, renders table" notable_decisions="[]"]
73
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
74
- // CIL[DOC-STABILITY stability="stable"]
75
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, .framework/src/components/layout/Sidebar.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
76
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
77
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
78
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
61
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the TypeScript shape of an API key record.'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
62
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
63
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
64
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
79
65
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
80
66
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
67
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikey:interface"]
68
+
69
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikeyspage:function" type="function" identity="apikeyspage" parent="none"]
70
+ // CIL[DOC-MACRO purpose="Render the admin API keys list page with search, filtering, sorting, and usage statistics."]
71
+ // CIL[DOC-RESPONSIBILITY responsibility="Display and filter API keys; handle row navigation."]
72
+ // CIL[DOC-CONTEXT module="admin/api-keys" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/PageInstructions.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/APIKeysPage.tsx"]
73
+ // CIL[DOC-CONTRACT inputs="none (React hook props and local state)" outputs="JSX page rendering" errors="Throws if API fetch fails (handled by useApi error state)" side_effects="Fetches /api/api-keys on mount; navigates on row click"]
74
+ // CIL[DOC-MICRO logic_summary="Fetches API keys, applies search/status/type filters, sorts, and renders a SortableTableHeader table with stats cards and usage instructions." notable_decisions="[]"]
75
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
76
+ // CIL[DOC-STABILITY stability="stable"]
81
77
  export function APIKeysPage() {
82
78
  const [searchTerm, setSearchTerm] = useState('')
83
79
  const [selectedStatus, setSelectedStatus] = useState('all')
@@ -376,4 +372,10 @@ export function APIKeysPage() {
376
372
  </AdminListPage>
377
373
  )
378
374
  }
379
- // CIL[END chunk_id="apikeyspage_function_apikeyspage_1783668265"]
375
+ // CIL[DOC-VECTOR type="context" content="purpose='Render the admin API keys list page with search, filtering, sorting, and usage statistics.'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/admin/AdminListPage.tsx"]
376
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
377
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
378
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
379
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
380
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
381
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeysPage.tsx:apikeyspage:function"]
@@ -1,3 +1,13 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:module_header:module_header"]
2
+ // CIL[DOC-MACRO purpose="Top-level module for the admin threshold alerts configuration page"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide imports and module context for the AlertsConfigPage and AlertModal components"]
4
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="module imports" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, icon components, UI primitives, hooks, and utilities used by the alert management page" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="ai-developer, system-admin"]
10
+
1
11
 
2
12
 
3
13
 
@@ -5,21 +15,6 @@
5
15
 
6
16
 
7
17
 
8
- // CIL[BEGIN chunk_id="alertsconfigpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
9
- // CIL[DOC-MACRO purpose="Import dependencies for AlertsConfigPage component"]
10
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, UI components, and utilities"]
11
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
12
- // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
13
- // CIL[DOC-MICRO logic_summary="Imports React state management, UI components, API hooks, icons" notable_decisions="[]"]
14
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
15
- // CIL[DOC-STABILITY stability="stable"]
16
- // CIL[DOC-AUDIENCE audience="developer"]
17
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
18
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
19
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
20
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
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
18
  import React, { useState } from 'react'
24
19
  import {
25
20
  Bell,
@@ -37,21 +32,22 @@ import { AdminListPage } from '../../components/admin/AdminListPage'
37
32
  import { useApi } from '../../hooks/useApi'
38
33
  import { apiFetch } from '../../lib/api'
39
34
  import { formatDateTime } from '../../lib/utils'
40
- // CIL[END chunk_id="alertsconfigpage_module_header_1783668265"]
41
- // CIL[BEGIN chunk_id="alertsconfigpage_interface_thresholdalert_1783668265" type="interface" identity="ThresholdAlert" parent="none"]
42
- // CIL[DOC-MACRO purpose="Define ThresholdAlert data structure"]
43
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for threshold alert objects"]
44
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
45
- // CIL[DOC-CONTRACT inputs="none" outputs="ThresholdAlert interface type" errors="none" side_effects="none"]
46
- // CIL[DOC-MICRO logic_summary="Defines alert structure with metric configuration and status" notable_decisions="[]"]
47
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
48
- // CIL[DOC-STABILITY stability="stable"]
49
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
50
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
51
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
52
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
35
+
36
+ // CIL[DOC-VECTOR type="context" content="purpose='Top-level module for the admin threshold alerts configuration page'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
37
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
38
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
39
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
53
40
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
54
41
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
42
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:module_header:module_header"]
43
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:ThresholdAlert:interface"]
44
+ // CIL[DOC-MACRO purpose="Describe the shape of a threshold alert record and its embedded data"]
45
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the ThresholdAlert TypeScript interface used across the alerts page"]
46
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
47
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
48
+ // CIL[DOC-MICRO logic_summary="Declares fields for alert identity, title, status, metric, operator, threshold, window, optional pipeline linkage, and timestamps" notable_decisions="[]"]
49
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
50
+ // CIL[DOC-STABILITY stability="stable"]
55
51
  interface ThresholdAlert {
56
52
  id: string
57
53
  title: string
@@ -68,71 +64,85 @@ interface ThresholdAlert {
68
64
  created_at: string
69
65
  updated_at: string
70
66
  }
71
- // CIL[END chunk_id="alertsconfigpage_interface_thresholdalert_1783668265"]
72
- // CIL[BEGIN chunk_id="alertsconfigpage_interface_pipeline_1783668265" type="interface" identity="Pipeline" parent="none"]
73
- // CIL[DOC-MACRO purpose="Define Pipeline data structure"]
74
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for pipeline objects"]
75
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"\\\"]"]
76
- // CIL[DOC-CONTRACT inputs="none" outputs="Pipeline interface type" errors="none" side_effects="none"]
77
- // CIL[DOC-MICRO logic_summary="Defines basic pipeline structure with id and name" notable_decisions="[]"]
78
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
79
- // CIL[DOC-STABILITY stability="stable"]
80
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, custom/apps/cortex/functions/custom_cil-embeddings.ts, \."]
81
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
82
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
83
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
67
+ // CIL[DOC-VECTOR type="context" content="purpose='Describe the shape of a threshold alert record and its embedded data'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
68
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
69
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
70
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
84
71
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
85
72
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
73
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:ThresholdAlert:interface"]
74
+
75
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:Pipeline:interface"]
76
+ // CIL[DOC-MACRO purpose="Describe a selectable pipeline reference"]
77
+ // CIL[DOC-RESPONSIBILITY responsibility="Define the minimal Pipeline shape used for alert pipeline selection"]
78
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
79
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
80
+ // CIL[DOC-MICRO logic_summary="Declares id and name fields for pipeline dropdown options" notable_decisions="[]"]
81
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
82
+ // CIL[DOC-STABILITY stability="stable"]
86
83
  interface Pipeline {
87
84
  id: string
88
85
  name: string
89
86
  }
90
- // CIL[END chunk_id="alertsconfigpage_interface_pipeline_1783668265"]
91
- // CIL[BEGIN chunk_id="alertsconfigpage_constant_metric_labels_1783668265" type="constant" identity="METRIC_LABELS" parent="none"]
92
- // CIL[DOC-MACRO purpose="Define metric and operator label mappings"]
93
- // CIL[DOC-RESPONSIBILITY responsibility="Configure display labels for metrics and operators"]
94
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="constants" 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\",\"\\\"]"]
95
- // CIL[DOC-CONTRACT inputs="none" outputs="Label mappings" errors="none" side_effects="none"]
96
- // CIL[DOC-MICRO logic_summary="Defines human-readable labels for metrics, operators, and units" notable_decisions="[]"]
97
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
98
- // CIL[DOC-STABILITY stability="stable"]
99
- // CIL[DOC-VECTOR type="context" content="Layer: constants. 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, \."]
100
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
101
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
102
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
87
+ // CIL[DOC-VECTOR type="context" content="purpose='Describe a selectable pipeline reference'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
88
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
89
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
90
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
103
91
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
104
92
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:Pipeline:interface"]
94
+
95
+
96
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:alert_constants:constants"]
97
+ // CIL[DOC-MACRO purpose="Provide human-readable labels and units for alert metrics and operators"]
98
+ // CIL[DOC-RESPONSIBILITY responsibility="Supply display maps for metric names, operators, and units used in the alert list and modal"]
99
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="presentation" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
100
+ // CIL[DOC-CONTRACT inputs="none" outputs="Record maps" errors="none" side_effects="none"]
101
+ // CIL[DOC-MICRO logic_summary="Defines METRIC_LABELS, OPERATOR_LABELS, and UNIT_LABELS records for rendering alert details" notable_decisions="[]"]
102
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
103
+ // CIL[DOC-STABILITY stability="stable"]
105
104
  const METRIC_LABELS: Record<string, string> = {
106
105
  error_rate: 'Error Rate',
107
106
  latency_p95: 'Latency (P95)',
108
107
  pipeline_failure_rate: 'Pipeline Failure Rate',
109
108
  }
110
109
 
110
+
111
+
112
+
113
+
111
114
  const OPERATOR_LABELS: Record<string, string> = {
112
115
  gt: '>',
113
116
  lt: '<',
114
117
  }
115
118
 
119
+
120
+
121
+
122
+
116
123
  const UNIT_LABELS: Record<string, string> = {
117
124
  error_rate: '%',
118
125
  latency_p95: 'ms',
119
126
  pipeline_failure_rate: '%',
120
127
  }
121
- // CIL[END chunk_id="alertsconfigpage_constant_metric_labels_1783668265"]
122
- // CIL[BEGIN chunk_id="alertsconfigpage_function_alertsconfigpage_1783668265" type="function" identity="AlertsConfigPage" parent="none"]
123
- // CIL[DOC-MACRO purpose="Main AlertsConfigPage component implementation"]
124
- // CIL[DOC-RESPONSIBILITY responsibility="Render threshold alerts management interface with CRUD operations"]
125
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="presentation" related_files="[]"]
126
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="API calls, state management"]
127
- // CIL[DOC-MICRO logic_summary="Manages alerts state, handles create/edit/delete, renders alert list with modal" notable_decisions="[]"]
128
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
129
- // CIL[DOC-STABILITY stability="stable"]
130
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
131
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
132
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
133
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
128
+
129
+
130
+
131
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide human-readable labels and units for alert metrics and operators'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
132
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
133
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
134
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
134
135
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
135
136
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
137
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:alert_constants:constants"]
138
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertsConfigPage:component"]
139
+ // CIL[DOC-MACRO purpose="Admin page for listing, creating, editing, toggling, and deleting threshold alerts"]
140
+ // CIL[DOC-RESPONSIBILITY responsibility="Render the alert list, fetch alert and pipeline data, and handle alert CRUD interactions"]
141
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="page" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
142
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX" errors="Failed to fetch/save/delete/toggle alert" side_effects="Displays browser alert on save/delete errors; navigates and refetches lists"]
143
+ // CIL[DOC-MICRO logic_summary="Loads alerts and pipelines with useApi, builds stat cards, renders AdminListPage, and provides handlers for save, delete, toggle, and edit actions" notable_decisions="[]"]
144
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
145
+ // CIL[DOC-STABILITY stability="stable"]
136
146
  export function AlertsConfigPage() {
137
147
  const [isModalOpen, setIsModalOpen] = useState(false)
138
148
  const [editingAlert, setEditingAlert] = useState<ThresholdAlert | null>(null)
@@ -255,6 +265,9 @@ export function AlertsConfigPage() {
255
265
  )
256
266
  }
257
267
 
268
+
269
+
270
+
258
271
  const statsCards = [
259
272
  {
260
273
  title: 'Total Alerts',
@@ -282,6 +295,7 @@ export function AlertsConfigPage() {
282
295
  },
283
296
  ]
284
297
 
298
+
285
299
  return (
286
300
  <AdminListPage
287
301
  title="Threshold Alerts"
@@ -387,21 +401,23 @@ export function AlertsConfigPage() {
387
401
  </AdminListPage>
388
402
  )
389
403
  }
390
- // CIL[END chunk_id="alertsconfigpage_function_alertsconfigpage_1783668265"]
391
- // CIL[BEGIN chunk_id="alertsconfigpage_interface_alertmodalprops_1783668265" type="interface" identity="AlertModalProps" parent="none"]
392
- // CIL[DOC-MACRO purpose="Define AlertModal component props"]
393
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AlertModal component properties"]
394
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="types" related_files="[]"]
395
- // CIL[DOC-CONTRACT inputs="none" outputs="AlertModalProps interface type" errors="none" side_effects="none"]
396
- // CIL[DOC-MICRO logic_summary="Defines props for alert modal with state and callback handlers" notable_decisions="[]"]
397
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
398
- // CIL[DOC-STABILITY stability="stable"]
399
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: none."]
400
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
401
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
402
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
404
+
405
+
406
+ // CIL[DOC-VECTOR type="context" content="purpose='Admin page for listing, creating, editing, toggling, and deleting threshold alerts'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
407
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
408
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
409
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
403
410
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
404
411
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
412
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertsConfigPage:component"]
413
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModalProps:interface"]
414
+ // CIL[DOC-MACRO purpose="Props contract for the AlertModal form component"]
415
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare the properties passed to AlertModal"]
416
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="type" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
417
+ // CIL[DOC-CONTRACT inputs="none" outputs="TypeScript type" errors="none" side_effects="none"]
418
+ // CIL[DOC-MICRO logic_summary="Defines isOpen, onClose, onSave, alert, and pipelines props for the alert edit/create modal" notable_decisions="[]"]
419
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
420
+ // CIL[DOC-STABILITY stability="stable"]
405
421
  interface AlertModalProps {
406
422
  isOpen: boolean
407
423
  onClose: () => void
@@ -409,21 +425,22 @@ interface AlertModalProps {
409
425
  alert: ThresholdAlert | null
410
426
  pipelines: Pipeline[]
411
427
  }
412
- // CIL[END chunk_id="alertsconfigpage_interface_alertmodalprops_1783668265"]
413
- // CIL[BEGIN chunk_id="alertsconfigpage_function_alertmodal_1783668265" type="function" identity="AlertModal" parent="none"]
414
- // CIL[DOC-MACRO purpose="AlertModal component implementation"]
415
- // CIL[DOC-RESPONSIBILITY responsibility="Render modal for creating/editing threshold alerts"]
416
- // CIL[DOC-CONTEXT module="AlertsConfigPage" layer="presentation" related_files="[]"]
417
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="Form validation" side_effects="Form submission"]
418
- // CIL[DOC-MICRO logic_summary="Manages form state for alert configuration with metric selection" notable_decisions="[]"]
419
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
420
- // CIL[DOC-STABILITY stability="stable"]
421
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: none."]
422
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
423
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
424
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
428
+ // CIL[DOC-VECTOR type="context" content="purpose='Props contract for the AlertModal form component'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
429
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
430
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
431
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
425
432
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
426
433
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
434
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModalProps:interface"]
435
+
436
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModal:component"]
437
+ // CIL[DOC-MACRO purpose="Modal form for creating and editing threshold alerts"]
438
+ // CIL[DOC-RESPONSIBILITY responsibility="Render a controlled form, manage alert state, and call onSave with form data"]
439
+ // CIL[DOC-CONTEXT module="admin/alerts" layer="component" related_files=".framework/src/components/admin/AdminListPage.tsx,.framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/button.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AlertsConfigPage.tsx"]
440
+ // CIL[DOC-CONTRACT inputs="isOpen: boolean, onClose: () => void, onSave: (data: any) => void, alert: ThresholdAlert | null, pipelines: Pipeline[]" outputs="JSX" errors="none" side_effects="Updates local form state on user input; calls onSave on submit"]
441
+ // CIL[DOC-MICRO logic_summary="Initializes form state, resets state when the alert or isOpen changes, and renders a form with metric, operator, threshold, window, optional pipeline, and active toggle fields" notable_decisions="[]"]
442
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
443
+ // CIL[DOC-STABILITY stability="stable"]
427
444
  function AlertModal({ isOpen, onClose, onSave, alert, pipelines }: AlertModalProps) {
428
445
  const [formData, setFormData] = useState({
429
446
  title: '',
@@ -607,4 +624,10 @@ function AlertModal({ isOpen, onClose, onSave, alert, pipelines }: AlertModalPro
607
624
  </Modal>
608
625
  )
609
626
  }
610
- // CIL[END chunk_id="alertsconfigpage_function_alertmodal_1783668265"]
627
+ // CIL[DOC-VECTOR type="context" content="purpose='Modal form for creating and editing threshold alerts'; No verified external callers; imports: .framework/src/components/ui/LoadingSpinner.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/Modal.tsx"]
628
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
629
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
630
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
631
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
632
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
633
+ // CIL[END stable_id="~/.framework/src/pages/admin/AlertsConfigPage.tsx:AlertModal:component"]
@@ -1,21 +1,16 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="Top-level imports and module entry point for the AppDetailPage admin component."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Declare external dependencies for the App detail admin page."]
4
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts"]
5
+ // CIL[DOC-CONTRACT inputs="" outputs="" errors="" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, React Router, API hooks, UI components, and utilities used by the AppDetailPage component." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
8
+ // CIL[DOC-STABILITY stability="stable"]
9
+ // CIL[DOC-AUDIENCE audience="developers"]
10
+
1
11
 
2
12
 
3
13
 
4
- // CIL[BEGIN chunk_id="appdetailpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
5
- // CIL[DOC-MACRO purpose="Import dependencies for AppDetailPage component"]
6
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, routing, API hooks, and UI components"]
7
- // CIL[DOC-CONTEXT module="AppDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
8
- // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
9
- // CIL[DOC-MICRO logic_summary="Imports React state management, routing, API hooks, UI components" 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: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
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 React, { useState, useEffect } from 'react'
20
15
  import { useParams, useNavigate } from 'react-router-dom'
21
16
  import { useApi } from '../../hooks/useApi'
@@ -39,21 +34,22 @@ import {
39
34
  import { ArrowLeft, Pencil, Trash2, AlertCircle } from 'lucide-react';
40
35
  import { formatDateTime } from '../../lib/utils'
41
36
  import { PageInstructions } from '../../components/admin/PageInstructions'
42
- // CIL[END chunk_id="appdetailpage_module_header_1783668265"]
43
- // CIL[BEGIN chunk_id="appdetailpage_interface_app_1783668265" type="interface" identity="App" parent="none"]
44
- // CIL[DOC-MACRO purpose="Define App data structure"]
45
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for app objects"]
46
- // CIL[DOC-CONTEXT module="AppDetailPage" layer="types" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
47
- // CIL[DOC-CONTRACT inputs="none" outputs="App interface type" errors="none" side_effects="none"]
48
- // CIL[DOC-MICRO logic_summary="Defines complete app structure with metadata, config, and stats" notable_decisions="[]"]
49
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
50
- // CIL[DOC-STABILITY stability="stable"]
51
- // CIL[DOC-VECTOR type="context" content="Layer: types. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
52
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
53
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
54
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
37
+ // CIL[DOC-VECTOR type="context" content="purpose='Top-level imports and module entry point for the AppDetailPage admin component.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
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"]
55
41
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
56
42
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
+ // CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
44
+
45
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:App:interface" type="interface" identity="App" parent="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
46
+ // CIL[DOC-MACRO purpose="Define the App data contract used across the admin app detail page."]
47
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript type describing the shape of an app record."]
48
+ // CIL[DOC-CONTEXT module="admin" layer="domain" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AppDetailPage.tsx"]
49
+ // CIL[DOC-CONTRACT inputs="app record from API or plain object" outputs="App interface definition" errors="" side_effects="none"]
50
+ // CIL[DOC-MICRO logic_summary="Declares the App interface with fields for metadata, configuration, and runtime settings." notable_decisions="[]"]
51
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
52
+ // CIL[DOC-STABILITY stability="stable"]
57
53
  interface App {
58
54
  id: string
59
55
  slug: string
@@ -82,21 +78,22 @@ interface App {
82
78
  created_by?: string
83
79
  account_id?: string
84
80
  }
85
- // CIL[END chunk_id="appdetailpage_interface_app_1783668265"]
86
- // CIL[BEGIN chunk_id="appdetailpage_function_appdetailpage_1783668265" type="function" identity="AppDetailPage" parent="none"]
87
- // CIL[DOC-MACRO purpose="Main AppDetailPage component implementation"]
88
- // CIL[DOC-RESPONSIBILITY responsibility="Render app detail view with create/edit/delete functionality"]
89
- // CIL[DOC-CONTEXT module="AppDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
90
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
91
- // CIL[DOC-MICRO logic_summary="Manages CRUD operations for apps with form validation and state management" notable_decisions="[]"]
92
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
93
- // CIL[DOC-STABILITY stability="stable"]
94
- // CIL[DOC-VECTOR type="context" content="Layer: presentation. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
95
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
96
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
97
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
81
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the App data contract used across the admin app detail page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
82
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
83
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
84
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
98
85
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
99
86
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
87
+ // CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:App:interface"]
88
+
89
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:AppDetailPage:component" type="component" identity="AppDetailPage" parent="~/.framework/src/pages/admin/AppDetailPage.tsx:module_header:module_header"]
90
+ // CIL[DOC-MACRO purpose="Render and manage the admin app create/edit/detail page."]
91
+ // CIL[DOC-RESPONSIBILITY responsibility="Display app details, support editing and saving app configuration, and handle deletion."]
92
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/Modal.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/badge.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/select.tsx,.framework/src/components/ui/skeleton.tsx,.framework/src/components/ui/textarea.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AppDetailPage.tsx"]
93
+ // CIL[DOC-CONTRACT inputs="route id param" outputs="Rendered admin app detail UI" errors="Invalid ID format, failed fetch, save/delete errors" side_effects="Navigates on save/delete; calls apiFetch for create/update/delete"]
94
+ // CIL[DOC-MICRO logic_summary="Fetches app by id, manages edit state and JSON config, renders form fields, and persists changes via API." notable_decisions="[]"]
95
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
96
+ // CIL[DOC-STABILITY stability="stable"]
100
97
  export function AppDetailPage() {
101
98
  const { id } = useParams<{ id: string }>()
102
99
  const navigate = useNavigate()
@@ -395,7 +392,10 @@ export function AppDetailPage() {
395
392
  </ol> },
396
393
  { title: 'Common mistakes', content: <ul className="list-disc pl-4 space-y-1">
397
394
  <li>Reusing a slug that already exists, causing a unique constraint error.</li>
395
+
396
+
398
397
  <li>Switching an app to Inactive while people are using it.</li>
398
+
399
399
  <li>Pasting non-JSON text or trailing commas in the Configuration JSON.</li>
400
400
  </ul> },
401
401
  ]}
@@ -607,4 +607,10 @@ export function AppDetailPage() {
607
607
  </div>
608
608
  )
609
609
  }
610
- // CIL[END chunk_id="appdetailpage_function_appdetailpage_1783668265"]
610
+ // CIL[DOC-VECTOR type="context" content="purpose='Render and manage the admin app create/edit/detail page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
611
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
612
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
613
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
614
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
615
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
616
+ // CIL[END stable_id="~/.framework/src/pages/admin/AppDetailPage.tsx:AppDetailPage:component"]