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,22 +1,13 @@
1
-
2
-
3
-
4
-
5
- // CIL[BEGIN chunk_id="aiagentdetailpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
6
- // CIL[DOC-MACRO purpose="Import dependencies for AIAgentDetailPage component"]
7
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, routing, API hooks, and UI components"]
8
- // CIL[DOC-CONTEXT module="AIAgentDetailPage" 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\",\"\\\"]"]
9
- // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
10
- // CIL[DOC-MICRO logic_summary="Imports React state management, routing, API hooks, UI components" notable_decisions="[]"]
11
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="Provide imports and dependencies for the AIAgentDetailPage admin view."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Assemble external and internal imports used by the AI agent detail page."]
4
+ // CIL[DOC-CONTEXT module="admin-ai-agent-detail" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="loaded dependencies for the page component" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React hooks, router utilities, API helpers, UI primitives, and admin page instructions." notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
12
8
  // CIL[DOC-STABILITY stability="stable"]
13
- // CIL[DOC-AUDIENCE audience="developer"]
14
- // 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, \."]
15
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
16
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
17
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
18
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
9
+ // CIL[DOC-AUDIENCE audience="admin-ui-developers"]
10
+
20
11
  import { useState, useEffect } from 'react'
21
12
  import { useParams, useNavigate } from 'react-router-dom'
22
13
  import { useApi } from '../../hooks/useApi'
@@ -32,21 +23,25 @@ import { Skeleton } from '../../components/ui/skeleton'
32
23
  import { Alert, AlertDescription, AlertTitle } from '../../components/ui/alert'
33
24
  import { ArrowLeft, Bot, AlertCircle } from 'lucide-react'
34
25
  import { PageInstructions } from '../../components/admin/PageInstructions'
35
- // CIL[END chunk_id="aiagentdetailpage_module_header_1783668265"]
36
- // CIL[BEGIN chunk_id="aiagentdetailpage_interface_aiagent_1783668265" type="interface" identity="AIAgent" parent="none"]
37
- // CIL[DOC-MACRO purpose="Define AIAgent data structure"]
38
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AI agent objects"]
39
- // CIL[DOC-CONTEXT module="AIAgentDetailPage" 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\",\"\\\"]"]
40
- // CIL[DOC-CONTRACT inputs="none" outputs="AIAgent interface type" errors="none" side_effects="none"]
41
- // CIL[DOC-MICRO logic_summary="Defines complete AI agent structure with model config and capabilities" notable_decisions="[]"]
42
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
43
- // CIL[DOC-STABILITY stability="stable"]
44
- // 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, \."]
45
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
46
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
47
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
26
+
27
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide imports and dependencies for the AIAgentDetailPage admin view.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
28
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
29
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
30
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
48
31
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
49
32
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
33
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:module_header:module_header"]
34
+
35
+
36
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:aiagent:interface" type="interface" identity="aiagent" parent="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:module_header:module_header"]
37
+ // CIL[DOC-MACRO purpose="Define the AIAgent data shape used by the detail page."]
38
+ // CIL[DOC-RESPONSIBILITY responsibility="Provide a TypeScript interface describing an agent record and its configuration fields."]
39
+ // CIL[DOC-CONTEXT module="admin-ai-agent-detail" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/pages/admin/AIAgentDetailPage.tsx"]
40
+ // CIL[DOC-CONTRACT inputs="none" outputs="AIAgent interface definition" errors="none" side_effects="none"]
41
+ // CIL[DOC-MICRO logic_summary="Declares an AIAgent interface with optional metadata, model config, system prompt, and tool list." notable_decisions="[]"]
42
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
43
+ // CIL[DOC-STABILITY stability="stable"]
44
+
50
45
  interface AIAgent {
51
46
  id: string
52
47
  name: string
@@ -63,42 +58,50 @@ interface AIAgent {
63
58
  created_at: string
64
59
  updated_at: string
65
60
  }
66
- // CIL[END chunk_id="aiagentdetailpage_interface_aiagent_1783668265"]
67
- // CIL[BEGIN chunk_id="aiagentdetailpage_constant_agent_types_1783668265" type="constant" identity="AGENT_TYPES" parent="none"]
68
- // CIL[DOC-MACRO purpose="Define AI agent type options"]
69
- // CIL[DOC-RESPONSIBILITY responsibility="Configure available agent type choices"]
70
- // CIL[DOC-CONTEXT module="AIAgentDetailPage" layer="constants" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/functions/_shared/schema-utils.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
71
- // CIL[DOC-CONTRACT inputs="none" outputs="Agent type options" errors="none" side_effects="none"]
72
- // CIL[DOC-MICRO logic_summary="Defines chat, analysis, automation, and custom agent types" 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: constants. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/functions/_shared/schema-utils.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/IntegrationsPage.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
+
62
+ // CIL[DOC-VECTOR type="context" content="purpose='Define the AIAgent data shape used by the detail page.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.tsx"]
63
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
64
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
65
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
79
66
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
80
67
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
68
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:aiagent:interface"]
69
+
70
+
71
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:agent_types:constant" type="constant" identity="agent_types" parent="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:module_header:module_header"]
72
+ // CIL[DOC-MACRO purpose="Provide the selectable labels and values for the agent_type field."]
73
+ // CIL[DOC-RESPONSIBILITY responsibility="Supply the list of supported AI agent type options for the select input."]
74
+ // CIL[DOC-CONTEXT module="admin-ai-agent-detail" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/pages/admin/AIAgentDetailPage.tsx"]
75
+ // CIL[DOC-CONTRACT inputs="none" outputs="AGENT_TYPES array constant" errors="none" side_effects="none"]
76
+ // CIL[DOC-MICRO logic_summary="Declares an array of agent type options with value and label pairs." notable_decisions="[]"]
77
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
78
+ // CIL[DOC-STABILITY stability="stable"]
79
+
81
80
  const AGENT_TYPES = [
82
81
  { value: 'chat', label: 'Chat' },
83
82
  { value: 'analysis', label: 'Analysis' },
84
83
  { value: 'automation', label: 'Automation' },
85
84
  { value: 'custom', label: 'Custom' }
86
85
  ]
87
- // CIL[END chunk_id="aiagentdetailpage_constant_agent_types_1783668265"]
88
- // CIL[BEGIN chunk_id="aiagentdetailpage_function_aiagentdetailpage_1783668265" type="function" identity="AIAgentDetailPage" parent="none"]
89
- // CIL[DOC-MACRO purpose="Main AIAgentDetailPage component implementation"]
90
- // CIL[DOC-RESPONSIBILITY responsibility="Render AI agent detail view with create/edit functionality"]
91
- // CIL[DOC-CONTEXT module="AIAgentDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
92
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
93
- // CIL[DOC-MICRO logic_summary="Manages CRUD operations for AI agents with form validation and state management" notable_decisions="[]"]
94
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
95
- // CIL[DOC-STABILITY stability="stable"]
96
- // 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, \."]
97
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
98
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
99
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
86
+
87
+ // CIL[DOC-VECTOR type="context" content="purpose='Provide the selectable labels and values for the agent_type field.'; No verified external callers; imports: .framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/components/ui/button.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"]
100
91
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
101
92
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
93
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:agent_types:constant"]
94
+
95
+
96
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:aiagentdetailpage:function" type="function" identity="aiagentdetailpage" parent="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:module_header:module_header"]
97
+ // CIL[DOC-MACRO purpose="Render and manage the AI agent create/edit detail page."]
98
+ // CIL[DOC-RESPONSIBILITY responsibility="Fetch or initialize agent data, manage editing state, validate inputs, save to the API, and render the UI."]
99
+ // CIL[DOC-CONTEXT module="admin-ai-agent-detail" layer="ui" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/pages/admin/AIAgentDetailPage.tsx"]
100
+ // CIL[DOC-CONTRACT inputs="route id param from useParams, apiFetch and useApi hooks" outputs="rendered create/edit form or read-only agent detail" errors="Failed to fetch or save errors logged to console" side_effects="navigates on create, calls /api/ai-agents, updates browser UI state"]
101
+ // CIL[DOC-MICRO logic_summary="Loads an agent or default create payload, binds form state, parses JSON fields, validates required fields, and saves the agent." notable_decisions="[]"]
102
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
103
+ // CIL[DOC-STABILITY stability="stable"]
104
+
102
105
  export function AIAgentDetailPage() {
103
106
  const { id } = useParams<{ id: string }>()
104
107
  const navigate = useNavigate()
@@ -114,6 +117,7 @@ export function AIAgentDetailPage() {
114
117
  system_prompt: '', tools: [], capabilities: {}, constraints: {}, metadata: {},
115
118
  is_active: true, created_at: new Date().toISOString(), updated_at: new Date().toISOString()
116
119
  }
120
+
117
121
  const response = await apiFetch(`/api/ai-agents?method=GET&id=${id}`)
118
122
  if (!response.ok) throw new Error('Failed to fetch AI agent')
119
123
  const result = await response.json()
@@ -267,4 +271,11 @@ export function AIAgentDetailPage() {
267
271
  </div>
268
272
  )
269
273
  }
270
- // CIL[END chunk_id="aiagentdetailpage_function_aiagentdetailpage_1783668265"]
274
+
275
+ // CIL[DOC-VECTOR type="context" content="purpose='Render and manage the AI agent 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"]
276
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
277
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
278
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
279
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
280
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
281
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentDetailPage.tsx:aiagentdetailpage:function"]
@@ -1,21 +1,22 @@
1
-
2
-
3
-
4
- // CIL[BEGIN chunk_id="aiagentspage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
5
- // CIL[DOC-MACRO purpose="Import dependencies for AIAgentsPage component"]
6
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, UI components, and utilities"]
7
- // CIL[DOC-CONTEXT module="AIAgentsPage" 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, routing, API hooks, UI components" notable_decisions="[]"]
10
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/src/pages/admin/AIAgentsPage.tsx"]
2
+ // CIL[DOC-MACRO purpose="Module header for admin presentation"]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Exports the AIAgentsPage component and AIAgent interface for managing AI agents"]
4
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx"]
5
+ // CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Module header with React imports for the AI agents admin page" notable_decisions="[]"]
7
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
11
8
  // 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."]
9
+ // CIL[DOC-AUDIENCE audience="internal"]
10
+ // CIL[DOC-VECTOR type="context" content="purpose='Module header for admin presentation'; responsibilities include exports the aiagentspage component and aiagent interface for managing ai agents. Related files: .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
11
+ // CIL[DOC-VECTOR type="blast_radius" content="No verified external callers from CIL graph; impacted callers include .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
12
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
13
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
17
14
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
18
15
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
16
+
17
+
18
+
19
+
19
20
  import { useState } from 'react'
20
21
  import { useNavigate } from 'react-router-dom'
21
22
  import { Cpu, CheckCircle, Clock } from 'lucide-react';
@@ -25,19 +26,20 @@ import { apiFetch } from '../../lib/api'
25
26
  import { AdminListPage } from '../../components/admin/AdminListPage'
26
27
  import { SortableTableHeader } from '../../components/admin/SortableTableHeader'
27
28
  import { Badge } from '../../components/ui/badge'
28
- // CIL[END chunk_id="aiagentspage_module_header_1783668265"]
29
- // CIL[BEGIN chunk_id="aiagentspage_interface_aiagent_1783668265" type="interface" identity="AIAgent" parent="none"]
30
- // CIL[DOC-MACRO purpose="Define AIAgent data structure"]
31
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for AI agent objects"]
32
- // CIL[DOC-CONTEXT module="AIAgentsPage" 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\",\"\\\"]"]
33
- // CIL[DOC-CONTRACT inputs="none" outputs="AIAgent interface type" errors="none" side_effects="none"]
34
- // CIL[DOC-MICRO logic_summary="Defines complete AI agent structure with model config and metadata" notable_decisions="[]"]
35
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
29
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:module_header:module_header"]
30
+
31
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:aiagent:interface" type="interface" identity="aiagent" parent="~/.framework/src/pages/admin/AIAgentsPage.tsx"]
32
+ // CIL[DOC-MACRO purpose="Defines the aiagent interface"]
33
+ // CIL[DOC-RESPONSIBILITY responsibility="Defines the TypeScript interface for AI agent records"]
34
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx"]
35
+ // CIL[DOC-CONTRACT inputs="none" outputs="AIAgent interface" errors="none" side_effects="none"]
36
+ // CIL[DOC-MICRO logic_summary="Describes the shape and fields of an AI agent object" notable_decisions="[]"]
37
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
36
38
  // CIL[DOC-STABILITY stability="stable"]
37
- // 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, \."]
38
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
39
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
40
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
39
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the aiagent interface'; responsibilities include defines the typescript interface for ai agent records. Related files: .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
40
+ // CIL[DOC-VECTOR type="blast_radius" content="No verified external callers from CIL graph; impacted callers include .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
41
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
42
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
41
43
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
42
44
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
43
45
  interface AIAgent {
@@ -62,19 +64,20 @@ interface AIAgent {
62
64
  app_id?: string
63
65
  metadata?: Record<string, any>
64
66
  }
65
- // CIL[END chunk_id="aiagentspage_interface_aiagent_1783668265"]
66
- // CIL[BEGIN chunk_id="aiagentspage_function_aiagentspage_1783668265" type="function" identity="AIAgentsPage" parent="none"]
67
- // CIL[DOC-MACRO purpose="Main AIAgentsPage component implementation"]
68
- // CIL[DOC-RESPONSIBILITY responsibility="Render AI agent management interface with filtering, sorting, and stats"]
69
- // CIL[DOC-CONTEXT module="AIAgentsPage" 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\",\"\\\"]"]
70
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
71
- // CIL[DOC-MICRO logic_summary="Manages state, fetches AI agents, handles filtering/sorting, renders table" notable_decisions="[]"]
72
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
67
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:aiagent:interface"]
68
+
69
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:aiagentspage:function" type="function" identity="aiagentspage" parent="~/.framework/src/pages/admin/AIAgentsPage.tsx"]
70
+ // CIL[DOC-MACRO purpose="Render AI agents admin page"]
71
+ // CIL[DOC-RESPONSIBILITY responsibility="Displays a searchable, filterable, sortable list of AI agents"]
72
+ // CIL[DOC-CONTEXT module="admin" layer="presentation" related_files=".framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx"]
73
+ // CIL[DOC-CONTRACT inputs="none" outputs="JSX page" errors="none" side_effects="React state, console logging, URL navigation"]
74
+ // CIL[DOC-MICRO logic_summary="Fetches agents, applies filters and sorting, and renders an admin list table" notable_decisions="[]"]
75
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
73
76
  // CIL[DOC-STABILITY stability="stable"]
74
- // 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, \."]
75
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
76
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
77
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
77
+ // CIL[DOC-VECTOR type="context" content="purpose='Render AI agents admin page'; responsibilities include displays a searchable, filterable, sortable list of ai agents. Related files: .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
78
+ // CIL[DOC-VECTOR type="blast_radius" content="No verified external callers from CIL graph; impacted callers include .framework/functions/ai-agents.ts,.framework/src/components/admin/AdminListPage.tsx,.framework/src/components/admin/SortableTableHeader.tsx,.framework/src/components/ui/badge.tsx,.framework/src/hooks/useApi.ts,.framework/src/lib/api.ts,.framework/src/lib/utils.ts,.framework/src/pages/admin/AIAgentsPage.tsx" status="ready"]
79
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified" status="ready"]
80
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented" status="ready"]
78
81
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
79
82
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
80
83
  export function AIAgentsPage() {
@@ -344,4 +347,4 @@ export function AIAgentsPage() {
344
347
  </AdminListPage>
345
348
  )
346
349
  }
347
- // CIL[END chunk_id="aiagentspage_function_aiagentspage_1783668265"]
350
+ // CIL[END stable_id="~/.framework/src/pages/admin/AIAgentsPage.tsx:aiagentspage:function"]
@@ -1,22 +1,17 @@
1
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
2
+ // CIL[DOC-MACRO purpose="Defines the admin API key detail/create page module and imports its dependencies."]
3
+ // CIL[DOC-RESPONSIBILITY responsibility="Provides the React page component, UI primitives, hooks, and utilities for creating and viewing API keys in the admin console."]
4
+ // CIL[DOC-CONTEXT module="api-key-management" layer="pages/admin" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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="none" outputs="TSX page module" errors="none" side_effects="none"]
6
+ // CIL[DOC-MICRO logic_summary="Imports React, router, UI components, icons, hooks, and utilities for the API key detail 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="developers, ai"]
10
+
1
11
 
2
12
 
3
13
 
4
14
 
5
- // CIL[BEGIN chunk_id="apikeydetailpage_module_header_1783668265" type="module_header" identity="module_header" parent="none"]
6
- // CIL[DOC-MACRO purpose="Import dependencies for APIKeyDetailPage component"]
7
- // CIL[DOC-RESPONSIBILITY responsibility="Import React hooks, routing, and UI components"]
8
- // CIL[DOC-CONTEXT module="APIKeyDetailPage" 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\",\"\\\"]"]
9
- // CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="none" side_effects="none"]
10
- // CIL[DOC-MICRO logic_summary="Imports React state management, routing, UI components, and utilities" notable_decisions="[]"]
11
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
12
- // CIL[DOC-STABILITY stability="stable"]
13
- // CIL[DOC-AUDIENCE audience="developer"]
14
- // 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, \."]
15
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
16
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
17
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
18
- // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
19
- // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
20
15
  import { useState, useEffect } from 'react'
21
16
  import { useParams, useNavigate } from 'react-router-dom'
22
17
  import { Button } from '../../components/ui/button'
@@ -33,21 +28,22 @@ import { useApi } from '../../hooks/useApi'
33
28
  import { apiFetch } from '../../lib/api'
34
29
  import { formatDateTime } from '../../lib/utils'
35
30
  import { PageInstructions } from '../../components/admin/PageInstructions'
36
- // CIL[END chunk_id="apikeydetailpage_module_header_1783668265"]
37
- // CIL[BEGIN chunk_id="apikeydetailpage_interface_apikey_1783668265" type="interface" identity="APIKey" parent="none"]
38
- // CIL[DOC-MACRO purpose="Define APIKey data structure"]
39
- // CIL[DOC-RESPONSIBILITY responsibility="Type definition for API key objects"]
40
- // CIL[DOC-CONTEXT module="APIKeyDetailPage" 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\",\"\\\"]"]
41
- // CIL[DOC-CONTRACT inputs="none" outputs="APIKey interface type" errors="none" side_effects="none"]
42
- // CIL[DOC-MICRO logic_summary="Defines complete API key structure with permissions and metadata" notable_decisions="[]"]
43
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
44
- // CIL[DOC-STABILITY stability="stable"]
45
- // 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, \."]
46
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
47
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
48
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
31
+
32
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the admin API key detail/create page module and imports its dependencies.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
33
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
34
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
35
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
49
36
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
50
37
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
38
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:module_header:module_header"]
39
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:APIKey:interface" type="interface" identity="APIKey" parent="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:module_header:module_header"]
40
+ // CIL[DOC-MACRO purpose="Defines the API key record shape used by the admin detail page."]
41
+ // CIL[DOC-RESPONSIBILITY responsibility="Provides the TypeScript contract for API key objects loaded, edited, and rendered by the page."]
42
+ // CIL[DOC-CONTEXT module="api-key-management" layer="pages/admin" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/APIKeyDetailPage.tsx"]
43
+ // CIL[DOC-CONTRACT inputs="none" outputs="interface type" errors="none" side_effects="none"]
44
+ // CIL[DOC-MICRO logic_summary="Describes all fields on an API key including id, name, key_type, rate_limit, permissions, scopes, metadata, machine_type, created_by, and timestamps." notable_decisions="[]"]
45
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
46
+ // CIL[DOC-STABILITY stability="stable"]
51
47
  interface APIKey {
52
48
  id: string
53
49
  name: string
@@ -70,42 +66,46 @@ interface APIKey {
70
66
  created_at: string
71
67
  updated_at: string
72
68
  }
73
- // CIL[END chunk_id="apikeydetailpage_interface_apikey_1783668265"]
74
- // CIL[BEGIN chunk_id="apikeydetailpage_constant_key_type_options_1783668265" type="constant" identity="KEY_TYPE_OPTIONS" parent="none"]
75
- // CIL[DOC-MACRO purpose="Define API key type options"]
76
- // CIL[DOC-RESPONSIBILITY responsibility="Configure available key type choices"]
77
- // CIL[DOC-CONTEXT module="APIKeyDetailPage" layer="constants" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
78
- // CIL[DOC-CONTRACT inputs="none" outputs="Key type options" errors="none" side_effects="none"]
79
- // CIL[DOC-MICRO logic_summary="Defines private and public key type options with descriptions" 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: constants. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, .framework/migrations/025_retype_threads_messages.sql, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, \."]
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."]
69
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the API key record shape used by the admin detail page.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
70
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
71
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
72
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
86
73
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
87
74
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
75
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:APIKey:interface"]
76
+
77
+
78
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:KEY_TYPE_OPTIONS:constant" type="constant" identity="KEY_TYPE_OPTIONS" parent="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:module_header:module_header"]
79
+ // CIL[DOC-MACRO purpose="Defines the selectable labels for API key types."]
80
+ // CIL[DOC-RESPONSIBILITY responsibility="Maps key type values to human-readable labels shown in the Key Type select control."]
81
+ // CIL[DOC-CONTEXT module="api-key-management" layer="pages/admin" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/APIKeyDetailPage.tsx"]
82
+ // CIL[DOC-CONTRACT inputs="none" outputs="constant array of option objects" errors="none" side_effects="none"]
83
+ // CIL[DOC-MICRO logic_summary="Array of option objects with value and label for inbound, outbound, internal, and cli key types." notable_decisions="[]"]
84
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
85
+ // CIL[DOC-STABILITY stability="stable"]
88
86
  const KEY_TYPE_OPTIONS = [
89
87
  { value: 'inbound', label: 'Inbound (External callers to Spine)' },
90
88
  { value: 'outbound', label: 'Outbound (Spine to external services)' },
91
89
  { value: 'internal', label: 'Internal (Spine-to-Spine)' },
92
90
  { value: 'cli', label: 'CLI / Script' }
93
91
  ]
94
- // CIL[END chunk_id="apikeydetailpage_constant_key_type_options_1783668265"]
95
- // CIL[BEGIN chunk_id="apikeydetailpage_function_apikeydetailpage_1783668265" type="function" identity="APIKeyDetailPage" parent="none"]
96
- // CIL[DOC-MACRO purpose="Main APIKeyDetailPage component implementation"]
97
- // CIL[DOC-RESPONSIBILITY responsibility="Render API key detail view with create/edit functionality"]
98
- // CIL[DOC-CONTEXT module="APIKeyDetailPage" layer="presentation" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
99
- // CIL[DOC-CONTRACT inputs="none" outputs="React component" errors="API failures" side_effects="Navigation, API calls"]
100
- // CIL[DOC-MICRO logic_summary="Manages CRUD operations for API keys with form validation and key generation" notable_decisions="[]"]
101
- // CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
102
- // CIL[DOC-STABILITY stability="stable"]
103
- // 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, \."]
104
- // CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
105
- // CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
106
- // CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
92
+ // CIL[DOC-VECTOR type="context" content="purpose='Defines the selectable labels for API key types.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
93
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
94
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
95
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
107
96
  // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
108
97
  // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
98
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:KEY_TYPE_OPTIONS:constant"]
99
+
100
+
101
+ // CIL[BEGIN stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:APIKeyDetailPage:component" type="component" identity="APIKeyDetailPage" parent="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:module_header:module_header"]
102
+ // CIL[DOC-MACRO purpose="Renders the admin page for creating a new API key and viewing an existing API key."]
103
+ // CIL[DOC-RESPONSIBILITY responsibility="Handles form state, API fetch, submission, JSON parsing, and rendering the create/read-only UI for API keys."]
104
+ // CIL[DOC-CONTEXT module="api-key-management" layer="pages/admin" related_files=".framework/src/components/admin/PageInstructions.tsx,.framework/src/components/ui/alert.tsx,.framework/src/components/ui/button.tsx,.framework/src/components/ui/card.tsx,.framework/src/components/ui/checkbox.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/label.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/APIKeyDetailPage.tsx"]
105
+ // CIL[DOC-CONTRACT inputs="route id parameter, API key response, user form input" outputs="TSX UI, navigation" errors="fetchError, form validation and submission errors, JSON parse errors" side_effects="POST to /api/api-keys, navigator.clipboard.writeText, setTimeout navigation, React state changes"]
106
+ // CIL[DOC-MICRO logic_summary="Renders the admin page for creating or viewing API keys. Manages form state with useState and useEffect, fetches the API key via useApi, parses JSON inputs for permissions, scopes and metadata, submits to /api/api-keys, shows a generated key once, and renders read-only summary or error alerts." notable_decisions="[\"Uses separate JSON string state for permissions, scopes, and metadata to allow text editing.\",\"Existing API keys are shown read-only with the key value masked.\",\"Only the create mode handles submission and receives a one-time generated key.\"]"]
107
+ // CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
108
+ // CIL[DOC-STABILITY stability="stable"]
109
109
  export function APIKeyDetailPage() {
110
110
  const { id } = useParams<{ id: string }>()
111
111
  const navigate = useNavigate()
@@ -164,6 +164,7 @@ export function APIKeyDetailPage() {
164
164
  setPermissionsJson(JSON.stringify(apiKey.permissions || {}, null, 2))
165
165
  setMetadataJson(JSON.stringify(apiKey.metadata || {}, null, 2))
166
166
  }
167
+
167
168
  }, [apiKey])
168
169
 
169
170
  const handleSubmit = async (e: React.FormEvent) => {
@@ -278,6 +279,7 @@ export function APIKeyDetailPage() {
278
279
  )
279
280
  }
280
281
 
282
+
281
283
  if (generatedKey) {
282
284
  return (
283
285
  <div className="space-y-6">
@@ -366,4 +368,10 @@ export function APIKeyDetailPage() {
366
368
  </div>
367
369
  )
368
370
  }
369
- // CIL[END chunk_id="apikeydetailpage_function_apikeydetailpage_1783668265"]
371
+ // CIL[DOC-VECTOR type="context" content="purpose='Renders the admin page for creating a new API key and viewing an existing API key.'; No verified external callers; imports: .framework/src/components/ui/button.tsx,.framework/src/components/ui/input.tsx,.framework/src/components/ui/textarea.tsx"]
372
+ // CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
373
+ // CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
374
+ // CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
375
+ // CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
376
+ // CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
377
+ // CIL[END stable_id="~/.framework/src/pages/admin/APIKeyDetailPage.tsx:APIKeyDetailPage:component"]