1use utoipa::openapi::security::{ApiKey, ApiKeyValue, SecurityScheme};
10use utoipa::OpenApi;
11
12use crate::{
13 common::ApiError,
14 v1::{
15 BrainRegionDetail,
16 BrainRegionListResponse,
17 BrainRegionSummary,
19 BurstCountResponse,
20
21 ComponentReadiness,
22
23 ConnectivityStatsResponse,
24 ConnectomeAnalyticsResponse,
25 Coordinates3D,
26 CorticalAreaDetail,
27 CorticalAreaListResponse,
28 CorticalAreaStatsResponse,
29 CorticalAreaSummary,
31 CreateBrainRegionRequest,
32
33 CreateCorticalAreaRequest,
34 CreateNeuronRequest,
35 Dimensions3D,
36
37 GenomeInfoResponse,
39 HealthCheckResponseV1,
41 LoadGenomeRequest,
42 NeuronCountResponse,
43
44 NeuronDensityResponse,
45 NeuronInfoResponse,
47 NeuronListResponse,
48 PopulatedAreaInfo,
49 PopulatedAreasResponse,
50 ReadinessCheckResponseV1,
51 RuntimeStatusResponse,
53 SaveGenomeRequest,
54 SaveGenomeResponse,
55 SetFrequencyRequest,
56 SystemHealthResponse,
58 UpdateCorticalAreaRequest,
59 ValidateGenomeRequest,
60 ValidateGenomeResponse,
61 },
62};
63
64#[derive(OpenApi)]
66#[openapi(
67 info(
68 title = "FEAGI REST API",
69 version = "1.0.0",
70 description = "Comprehensive REST API for FEAGI (Foundational Engine for Artificial General Intelligence)",
71 license(
72 name = "Apache-2.0",
73 url = "https://www.apache.org/licenses/LICENSE-2.0"
74 ),
75 contact(
76 name = "FEAGI Team",
77 url = "https://feagi.org",
78 email = "contact@feagi.org"
79 )
80 ),
81 servers(
82 (url = "http://localhost:8000", description = "Default FEAGI server"),
83 (url = "http://localhost:8080", description = "Alternative port")
84 ),
85 paths(
86 crate::endpoints::agent::heartbeat,
88 crate::endpoints::agent::list_agents,
89 crate::endpoints::agent::get_agent_properties,
90 crate::endpoints::agent::get_agent_properties_path,
91 crate::endpoints::agent::get_shared_memory,
92 crate::endpoints::agent::deregister_agent,
93 crate::endpoints::agent::manual_stimulation,
94 crate::endpoints::agent::get_fq_sampler_status,
95 crate::endpoints::agent::get_capabilities,
96 crate::endpoints::agent::get_all_agent_capabilities,
97 crate::endpoints::agent::get_agent_info,
98 crate::endpoints::agent::post_configure,
99
100 crate::endpoints::system::get_health_check,
102 crate::endpoints::system::get_cortical_area_visualization_skip_rate,
103 crate::endpoints::system::set_cortical_area_visualization_skip_rate,
104 crate::endpoints::system::get_cortical_area_visualization_suppression_threshold,
105 crate::endpoints::system::set_cortical_area_visualization_suppression_threshold,
106 crate::endpoints::system::get_version,
107 crate::endpoints::system::get_versions,
108 crate::endpoints::system::get_configuration,
109 crate::endpoints::system::get_user_preferences,
110 crate::endpoints::system::put_user_preferences,
111 crate::endpoints::system::get_cortical_area_types_list,
112 crate::endpoints::system::post_enable_visualization_fq_sampler,
113 crate::endpoints::system::post_disable_visualization_fq_sampler,
114 crate::endpoints::system::get_fcl_status_system,
115 crate::endpoints::system::post_fcl_reset_system,
116 crate::endpoints::system::get_processes,
117 crate::endpoints::system::get_unique_logs,
118 crate::endpoints::system::get_log_tail,
119 crate::endpoints::system::post_logs,
120 crate::endpoints::system::get_beacon_subscribers,
121 crate::endpoints::system::post_beacon_subscribe,
122 crate::endpoints::system::delete_beacon_unsubscribe,
123 crate::endpoints::system::get_global_activity_visualization,
124 crate::endpoints::system::put_global_activity_visualization,
125 crate::endpoints::system::post_circuit_library_path,
126 crate::endpoints::system::get_influxdb_test,
127 crate::endpoints::system::post_register_system,
128
129 crate::endpoints::cortical_area::get_ipu,
131 crate::endpoints::cortical_area::get_ipu_types,
132 crate::endpoints::cortical_area::get_opu,
133 crate::endpoints::cortical_area::get_opu_types,
134 crate::endpoints::cortical_area::get_cortical_area_id_list,
135 crate::endpoints::cortical_area::get_cortical_area_name_list,
136 crate::endpoints::cortical_area::get_cortical_id_name_mapping,
137 crate::endpoints::cortical_area::get_cortical_types,
138 crate::endpoints::cortical_area::get_cortical_map_detailed,
139 crate::endpoints::cortical_area::get_cortical_locations_2d,
140 crate::endpoints::cortical_area::get_cortical_area_geometry,
141 crate::endpoints::cortical_area::get_cortical_visibility,
142 crate::endpoints::cortical_area::post_cortical_name_location,
143 crate::endpoints::cortical_area::post_cortical_area_properties,
144 crate::endpoints::cortical_area::post_multi_cortical_area_properties,
145 crate::endpoints::cortical_area::post_cortical_area,
146 crate::endpoints::cortical_area::put_cortical_area,
147 crate::endpoints::cortical_area::delete_cortical_area,
148 crate::endpoints::cortical_area::post_custom_cortical_area,
149 crate::endpoints::cortical_area::post_clone,
150 crate::endpoints::cortical_area::put_multi_cortical_area,
151 crate::endpoints::cortical_area::delete_multi_cortical_area,
152 crate::endpoints::cortical_area::put_coord_2d,
153 crate::endpoints::cortical_area::put_suppress_cortical_visibility,
154 crate::endpoints::cortical_area::put_reset,
155 crate::endpoints::cortical_area::get_visualization,
156 crate::endpoints::cortical_area::post_batch_operations,
157 crate::endpoints::cortical_area::get_ipu_list,
158 crate::endpoints::cortical_area::get_opu_list,
159 crate::endpoints::cortical_area::put_coordinates_3d,
160 crate::endpoints::cortical_area::delete_bulk,
161 crate::endpoints::cortical_area::post_clone,
162 crate::endpoints::cortical_area::post_resize,
163 crate::endpoints::cortical_area::post_reposition,
164 crate::endpoints::cortical_area::get_voxel_neurons,
165 crate::endpoints::cortical_area::post_voxel_neurons,
166 crate::endpoints::cortical_area::get_memory_cortical_area,
167 crate::endpoints::cortical_area::get_cortical_area_index_list,
168 crate::endpoints::cortical_area::get_cortical_idx_mapping,
169 crate::endpoints::cortical_area::get_mapping_restrictions_query,
170 crate::endpoints::cortical_area::get_memory_usage,
171 crate::endpoints::cortical_area::get_area_neuron_count,
172 crate::endpoints::cortical_area::post_cortical_type_options,
173 crate::endpoints::cortical_area::post_mapping_restrictions,
174 crate::endpoints::cortical_area::post_mapping_restrictions_between_areas,
175 crate::endpoints::cortical_area::put_coord_3d,
176
177 crate::endpoints::morphology::get_morphology_list,
179 crate::endpoints::morphology::get_morphology_types,
180 crate::endpoints::morphology::get_list_types,
181 crate::endpoints::morphology::get_morphologies,
182 crate::endpoints::morphology::post_morphology,
183 crate::endpoints::morphology::put_morphology,
184 crate::endpoints::morphology::put_rename_morphology,
185 crate::endpoints::morphology::delete_morphology_by_name,
186 crate::endpoints::morphology::delete_morphology, crate::endpoints::morphology::post_morphology_properties,
188 crate::endpoints::morphology::post_morphology_usage,
189 crate::endpoints::morphology::get_list,
190 crate::endpoints::morphology::get_info,
191 crate::endpoints::morphology::post_create,
192 crate::endpoints::morphology::put_update,
193
194 crate::endpoints::genome::get_file_name,
196 crate::endpoints::genome::get_circuits,
197 crate::endpoints::genome::post_amalgamation_destination,
198 crate::endpoints::genome::delete_amalgamation_cancellation,
199 crate::endpoints::genome::post_genome_append,
200 crate::endpoints::genome::post_upload_barebones_genome,
201 crate::endpoints::genome::post_upload_essential_genome,
202 crate::endpoints::genome::get_name,
203 crate::endpoints::genome::get_timestamp,
204 crate::endpoints::genome::post_save,
205 crate::endpoints::genome::post_load,
206 crate::endpoints::genome::post_upload,
207 crate::endpoints::genome::get_download,
208 crate::endpoints::genome::get_properties,
209 crate::endpoints::genome::post_validate,
210 crate::endpoints::genome::post_transform,
211 crate::endpoints::genome::post_clone,
212 crate::endpoints::genome::post_reset,
213 crate::endpoints::genome::get_metadata,
214 crate::endpoints::genome::post_merge,
215 crate::endpoints::genome::get_diff,
216 crate::endpoints::genome::post_export_format,
217 crate::endpoints::genome::get_amalgamation,
218 crate::endpoints::genome::get_amalgamation_history_exact,
219 crate::endpoints::genome::get_cortical_template,
220 crate::endpoints::genome::get_defaults_files,
221 crate::endpoints::genome::get_download_region,
222 crate::endpoints::genome::get_genome_number,
223 crate::endpoints::genome::post_amalgamation_by_filename,
224 crate::endpoints::genome::post_amalgamation_by_payload,
225 crate::endpoints::genome::post_amalgamation_by_upload,
226 crate::endpoints::genome::post_append_file,
227 crate::endpoints::genome::post_upload_file,
228 crate::endpoints::genome::post_upload_file_edit,
229 crate::endpoints::genome::post_upload_string,
230
231 crate::endpoints::cortical_mapping::post_afferents,
233 crate::endpoints::cortical_mapping::post_efferents,
234 crate::endpoints::cortical_mapping::post_mapping_properties,
235 crate::endpoints::cortical_mapping::put_mapping_properties,
236 crate::endpoints::cortical_mapping::get_mapping,
237 crate::endpoints::cortical_mapping::get_mapping_list,
238 crate::endpoints::cortical_mapping::delete_mapping,
239 crate::endpoints::cortical_mapping::post_batch_update,
240 crate::endpoints::cortical_mapping::post_mapping,
241 crate::endpoints::cortical_mapping::put_mapping,
242
243 crate::endpoints::region::get_regions_members,
245 crate::endpoints::region::post_region,
246 crate::endpoints::region::put_region,
247 crate::endpoints::region::delete_region,
248 crate::endpoints::region::post_clone,
249 crate::endpoints::region::put_relocate_members,
250 crate::endpoints::region::delete_region_and_members,
251 crate::endpoints::region::get_regions,
252 crate::endpoints::region::get_region_titles,
253 crate::endpoints::region::get_region_detail,
254 crate::endpoints::region::put_change_region_parent,
255 crate::endpoints::region::put_change_cortical_area_region,
256
257 crate::endpoints::connectome::get_cortical_areas_list_detailed,
259 crate::endpoints::connectome::get_properties_dimensions,
260 crate::endpoints::connectome::get_properties_mappings,
261 crate::endpoints::connectome::get_snapshot,
262 crate::endpoints::connectome::get_stats,
263 crate::endpoints::connectome::post_batch_neuron_operations,
264 crate::endpoints::connectome::post_batch_synapse_operations,
265 crate::endpoints::connectome::get_neuron_count,
266 crate::endpoints::connectome::get_synapse_count,
267 crate::endpoints::connectome::get_paths,
268 crate::endpoints::connectome::get_cumulative_stats,
269 crate::endpoints::connectome::get_area_details,
270 crate::endpoints::connectome::post_rebuild,
271 crate::endpoints::connectome::get_structure,
272 crate::endpoints::connectome::post_clear,
273 crate::endpoints::connectome::get_validation,
274 crate::endpoints::connectome::get_topology,
275 crate::endpoints::connectome::post_optimize,
276 crate::endpoints::connectome::get_connectivity_matrix,
277 crate::endpoints::connectome::post_neurons_batch,
278 crate::endpoints::connectome::post_synapses_batch,
279 crate::endpoints::connectome::get_cortical_areas_list_summary,
280 crate::endpoints::connectome::get_cortical_areas_list_transforming,
281 crate::endpoints::connectome::get_cortical_area_list_types,
282 crate::endpoints::connectome::get_cortical_area_neurons,
283 crate::endpoints::connectome::get_area_synapses,
284 crate::endpoints::connectome::get_area_synapses_incoming,
285 crate::endpoints::connectome::get_cortical_info,
286 crate::endpoints::connectome::get_stats_cortical_cumulative,
287 crate::endpoints::connectome::get_neuron_properties_by_id,
288 crate::endpoints::connectome::get_neuron_properties_query,
289 crate::endpoints::connectome::get_neuron_properties_at_query,
290 crate::endpoints::connectome::get_memory_neuron,
291 crate::endpoints::connectome::get_area_neurons_query,
292 crate::endpoints::connectome::get_fire_queue_area,
293 crate::endpoints::connectome::get_plasticity_info,
294 crate::endpoints::connectome::get_path_query,
295 crate::endpoints::connectome::get_download_connectome,
296 crate::endpoints::connectome::get_download_cortical_area,
297 crate::endpoints::connectome::post_upload_connectome,
298 crate::endpoints::connectome::post_upload_cortical_area,
299
300 crate::endpoints::burst_engine::get_simulation_timestep,
302 crate::endpoints::burst_engine::post_simulation_timestep,
303 crate::endpoints::burst_engine::get_fcl,
304 crate::endpoints::burst_engine::get_fcl_neuron,
305 crate::endpoints::burst_engine::get_fire_queue,
306 crate::endpoints::burst_engine::get_fire_queue_neuron,
307 crate::endpoints::burst_engine::post_fcl_reset,
308 crate::endpoints::burst_engine::get_fcl_status,
309 crate::endpoints::burst_engine::get_fcl_sampler_config,
310 crate::endpoints::burst_engine::post_fcl_sampler_config,
311 crate::endpoints::burst_engine::get_area_fcl_sample_rate,
312 crate::endpoints::burst_engine::post_area_fcl_sample_rate,
313 crate::endpoints::burst_engine::get_fire_ledger_default_window_size,
314 crate::endpoints::burst_engine::put_fire_ledger_default_window_size,
315 crate::endpoints::burst_engine::get_fire_ledger_areas_window_config,
316 crate::endpoints::burst_engine::get_stats,
317 crate::endpoints::burst_engine::get_status,
318 crate::endpoints::burst_engine::post_control,
319 crate::endpoints::burst_engine::get_burst_counter,
320 crate::endpoints::burst_engine::post_start,
321 crate::endpoints::burst_engine::post_stop,
322 crate::endpoints::burst_engine::post_hold,
323 crate::endpoints::burst_engine::post_resume,
324 crate::endpoints::burst_engine::get_config,
325 crate::endpoints::burst_engine::put_config,
326 crate::endpoints::burst_engine::get_fire_ledger_area_window_size,
327 crate::endpoints::burst_engine::put_fire_ledger_area_window_size,
328 crate::endpoints::burst_engine::get_fire_ledger_history,
329 crate::endpoints::burst_engine::get_membrane_potentials,
330 crate::endpoints::burst_engine::put_membrane_potentials,
331 crate::endpoints::burst_engine::get_frequency_status,
332 crate::endpoints::burst_engine::post_measure_frequency,
333 crate::endpoints::burst_engine::get_frequency_history,
334 crate::endpoints::burst_engine::post_force_connectome_integration,
335
336 crate::endpoints::insight::post_neurons_membrane_potential_status,
338 crate::endpoints::insight::post_neuron_synaptic_potential_status,
339 crate::endpoints::insight::post_neurons_membrane_potential_set,
340 crate::endpoints::insight::post_neuron_synaptic_potential_set,
341
342 crate::endpoints::neuroplasticity::get_plasticity_queue_depth,
344 crate::endpoints::neuroplasticity::put_plasticity_queue_depth,
345 crate::endpoints::neuroplasticity::get_status,
346 crate::endpoints::neuroplasticity::get_transforming,
347 crate::endpoints::neuroplasticity::post_configure,
348 crate::endpoints::neuroplasticity::post_enable_area,
349 crate::endpoints::neuroplasticity::post_disable_area,
350
351 crate::endpoints::input::get_vision,
353 crate::endpoints::input::post_vision,
354 crate::endpoints::input::get_sensor_snapshot_last,
355
356 crate::endpoints::outputs::get_targets,
358 crate::endpoints::outputs::post_configure,
359 crate::endpoints::outputs::get_motor_snapshot_last,
360
361 crate::endpoints::physiology::get_physiology,
363 crate::endpoints::physiology::put_physiology,
364
365 crate::endpoints::simulation::post_stimulation_upload,
367 crate::endpoints::simulation::post_reset,
368 crate::endpoints::simulation::get_status,
369 crate::endpoints::simulation::get_stats,
370 crate::endpoints::simulation::post_config,
371
372 crate::endpoints::training::post_shock,
374 crate::endpoints::training::get_shock_options,
375 crate::endpoints::training::get_shock_status,
376 crate::endpoints::training::post_reward_intensity,
377 crate::endpoints::training::post_punishment_intensity,
378 crate::endpoints::training::post_gameover,
379 crate::endpoints::training::get_brain_fitness,
380 crate::endpoints::training::get_fitness_criteria,
381 crate::endpoints::training::put_fitness_criteria,
382 crate::endpoints::training::get_fitness_stats,
383 crate::endpoints::training::get_training_report,
384 crate::endpoints::training::get_status,
385 crate::endpoints::training::get_stats,
386 crate::endpoints::training::post_config,
387
388 crate::endpoints::visualization::post_register_client,
390 crate::endpoints::visualization::post_unregister_client,
391 crate::endpoints::visualization::post_heartbeat,
392 crate::endpoints::visualization::get_status,
393
394 crate::endpoints::monitoring::get_status,
396 crate::endpoints::monitoring::get_metrics,
397 crate::endpoints::monitoring::get_data,
398
399 crate::endpoints::evolution::get_status,
401 crate::endpoints::evolution::post_config,
402
403 crate::endpoints::network::get_status,
415 crate::endpoints::network::post_config,
416 crate::endpoints::network::get_connection_info,
417 ),
418 components(
419 schemas(
420 ApiError,
422
423 HealthCheckResponseV1,
425 ReadinessCheckResponseV1,
426 ComponentReadiness,
427
428 crate::v1::AgentRegistrationRequest,
430
431 crate::v1::OutputTargetsResponse,
433 crate::v1::OutputConfigRequest,
434 crate::v1::OutputConfigResponse,
435 crate::endpoints::outputs::MotorSnapshotResponse,
436 crate::endpoints::outputs::MotorTapArea,
437 crate::endpoints::outputs::MotorTapSample,
438 crate::endpoints::outputs::MotorTapAgent,
439
440 crate::endpoints::input::SensorSnapshotResponse,
442 crate::endpoints::input::SensorTapArea,
443 crate::endpoints::input::SensorTapSample,
444
445 crate::v1::PhysiologyResponse,
447 crate::v1::PhysiologyParameters,
448 crate::v1::PhysiologyUpdateRequest,
449 crate::v1::PhysiologyUpdateResponse,
450
451 crate::v1::FCLResponse,
453 crate::v1::FireQueueResponse,
454 crate::v1::FCLStatusResponse,
455 crate::v1::FireLedgerConfigResponse,
456 crate::v1::BurstEngineStats,
457 crate::v1::BurstEngineStatus,
458 crate::v1::BurstEngineControlRequest,
459
460 crate::v1::MonitoringStatusResponse,
462 crate::v1::SystemMetricsResponse,
463 crate::v1::MonitoringData,
464 crate::v1::MonitoringDataResponse,
465
466 crate::v1::StimulationUploadRequest,
468 crate::v1::SimulationControlRequest,
469 crate::v1::SimulationStatusResponse,
470 crate::v1::SimulationStatsResponse,
471 crate::v1::SimulationSuccessResponse,
472
473 crate::v1::ShockConfigRequest,
475 crate::v1::ShockOptionsResponse,
476 crate::v1::ShockStatusResponse,
477 crate::v1::IntensityRequest,
478 crate::v1::BrainFitnessResponse,
479 crate::v1::FitnessCriteriaResponse,
480 crate::v1::FitnessCriteriaUpdateRequest,
481 crate::v1::FitnessStatsResponse,
482 crate::v1::TrainingReportResponse,
483 crate::v1::TrainingStatusResponse,
484 crate::v1::TrainingStatsResponse,
485 crate::v1::TrainingConfigRequest,
486 crate::v1::TrainingSuccessResponse,
487
488 crate::v1::VisualizationClientRequest,
490 crate::v1::VisualizationClientResponse,
491 crate::v1::VisualizationHeartbeatRequest,
492 crate::v1::VisualizationStatusResponse,
493 crate::v1::VisualizationSuccessResponse,
494
495 crate::v1::EvolutionStatusResponse,
497 crate::v1::EvolutionConfigRequest,
498 crate::v1::EvolutionSuccessResponse,
499
500 crate::v1::SnapshotCreateRequest,
502 crate::v1::SnapshotCreateResponse,
503 crate::v1::SnapshotRestoreRequest,
504 crate::v1::SnapshotListResponse,
505 crate::v1::SnapshotInfo,
506 crate::v1::SnapshotArtifactResponse,
507 crate::v1::SnapshotCompareRequest,
508 crate::v1::SnapshotCompareResponse,
509 crate::v1::SnapshotUploadRequest,
510 crate::v1::SnapshotUploadResponse,
511 crate::v1::SnapshotSuccessResponse,
512
513 crate::v1::NetworkStatusResponse,
515 crate::v1::NetworkConnectionInfo,
516 crate::v1::ConnectionInfoApi,
517 crate::v1::ConnectionInfoZmq,
518 crate::v1::ConnectionInfoZmqPorts,
519 crate::v1::ConnectionInfoZmqEndpoints,
520 crate::v1::ConnectionInfoWebSocket,
521 crate::v1::ConnectionInfoWebSocketPorts,
522 crate::v1::ConnectionInfoWebSocketEndpoints,
523 crate::v1::ConnectionInfoShm,
524 crate::v1::ConnectionInfoUdp,
525 crate::v1::ConnectionInfoBluetooth,
526 crate::v1::ConnectionInfoStreamStatus,
527 crate::v1::NetworkConfigRequest,
528 crate::v1::NetworkSuccessResponse,
529 crate::v1::AgentRegistrationResponse,
530 crate::v1::HeartbeatRequest,
531 crate::v1::HeartbeatResponse,
532 crate::v1::AgentListResponse,
533 crate::v1::AgentPropertiesResponse,
534 crate::v1::AgentCapabilitiesSummary,
535 crate::v1::AgentDeregistrationRequest,
536 crate::v1::SuccessResponse,
537 crate::v1::ManualStimulationRequest,
538 crate::v1::ManualStimulationResponse,
539 crate::v1::DeviceRegistrationExportResponse,
540 crate::v1::DeviceRegistrationImportRequest,
541 crate::v1::DeviceRegistrationImportResponse,
542
543 crate::endpoints::system::HealthCheckResponse,
545 crate::endpoints::system::LogTailResponse,
546 crate::endpoints::system::LogTailRecord,
547
548 crate::endpoints::cortical_area::CorticalAreaIdListResponse,
550 crate::endpoints::cortical_area::CorticalAreaNameListResponse,
551 crate::endpoints::cortical_area::CorticalAreaResetRequest,
552 crate::endpoints::cortical_area::CorticalAreaResetResponse,
553 crate::endpoints::cortical_area::CorticalAreaResetItem,
554 crate::endpoints::cortical_area::CorticalTypeMetadata,
555 crate::endpoints::cortical_area::VoxelNeuronsQuery,
556 crate::endpoints::cortical_area::VoxelNeuronsBody,
557 crate::endpoints::cortical_area::VoxelNeuronsResponse,
558 crate::endpoints::cortical_area::MemoryCorticalAreaQuery,
559 crate::endpoints::cortical_area::MemoryCorticalAreaParamsResponse,
560 crate::endpoints::cortical_area::MemoryCorticalAreaResponse,
561 crate::endpoints::connectome::MemoryNeuronQuery,
562 crate::endpoints::connectome::MemoryNeuronDetailResponse,
563
564 crate::endpoints::morphology::MorphologyListResponse,
566 crate::endpoints::morphology::RenameMorphologyRequest,
567
568 CorticalAreaSummary,
570 CorticalAreaDetail,
571 CorticalAreaListResponse,
572 CreateCorticalAreaRequest,
573 UpdateCorticalAreaRequest,
574 Coordinates3D,
575 Dimensions3D,
576
577 BrainRegionSummary,
579 BrainRegionDetail,
580 BrainRegionListResponse,
581 CreateBrainRegionRequest,
582
583 GenomeInfoResponse,
585 LoadGenomeRequest,
586 SaveGenomeRequest,
587 SaveGenomeResponse,
588 ValidateGenomeRequest,
589 ValidateGenomeResponse,
590 crate::endpoints::genome::GenomeFileUploadForm,
591
592 NeuronInfoResponse,
594 CreateNeuronRequest,
595 NeuronListResponse,
596 NeuronCountResponse,
597
598 RuntimeStatusResponse,
600 SetFrequencyRequest,
601 BurstCountResponse,
602
603 SystemHealthResponse,
605 CorticalAreaStatsResponse,
606 ConnectivityStatsResponse,
607 ConnectomeAnalyticsResponse,
608 PopulatedAreasResponse,
609 PopulatedAreaInfo,
610 NeuronDensityResponse,
611 )
612 ),
613 tags(
614 (name = "agent", description = "Agent registration and heartbeat"),
615 (name = "system", description = "System health and configuration"),
616 (name = "cortical_area", description = "Cortical area management"),
617 (name = "morphology", description = "Morphology management"),
618 (name = "genome", description = "Genome operations"),
619 (name = "cortical_mapping", description = "Cortical mapping operations"),
620 (name = "region", description = "Brain region management"),
621 (name = "connectome", description = "Connectome operations"),
622 (name = "burst_engine", description = "Burst engine configuration and FCL/Fire Queue"),
623 (name = "insight", description = "Neuron insight operations"),
624 (name = "neuroplasticity", description = "Neuroplasticity configuration"),
625 (name = "input", description = "Input operations"),
626 (name = "outputs", description = "Output/motor target management"),
627 (name = "physiology", description = "Physiology parameter configuration"),
628 (name = "simulation", description = "Simulation control and stimulation"),
629 (name = "training", description = "Reinforcement learning and training"),
630 (name = "visualization", description = "Visualization client management"),
631 (name = "monitoring", description = "System monitoring and metrics"),
632 (name = "evolution", description = "Evolutionary algorithms"),
633 (name = "snapshot", description = "Brain snapshot management"),
634 (name = "network", description = "Network configuration"),
635 ),
636 modifiers(&SecurityAddon)
637)]
638pub struct ApiDoc;
639
640struct SecurityAddon;
642
643impl utoipa::Modify for SecurityAddon {
644 fn modify(&self, openapi: &mut utoipa::openapi::OpenApi) {
645 if let Some(components) = openapi.components.as_mut() {
646 components.add_security_scheme(
648 "api_key",
649 SecurityScheme::ApiKey(ApiKey::Header(ApiKeyValue::new("X-API-Key"))),
650 );
651
652 components.add_security_scheme(
654 "bearer_auth",
655 SecurityScheme::Http(
656 utoipa::openapi::security::HttpBuilder::new()
657 .scheme(utoipa::openapi::security::HttpAuthScheme::Bearer)
658 .bearer_format("JWT")
659 .build(),
660 ),
661 );
662 }
663 }
664}
665
666pub fn get_openapi_json() -> String {
668 ApiDoc::openapi()
669 .to_pretty_json()
670 .unwrap_or_else(|e| format!(r#"{{"error": "Failed to generate OpenAPI spec: {}"}}"#, e))
671}
672
673pub fn get_openapi_yaml() -> String {
675 "# OpenAPI YAML generation not yet implemented\n# Use /openapi.json instead".to_string()
678}
679
680#[cfg(test)]
681mod tests {
682 use super::*;
683
684 #[test]
685 fn test_openapi_generation() {
686 let json = get_openapi_json();
687 assert!(json.contains("FEAGI REST API"));
688 assert!(json.contains("health"));
689 assert!(json.contains("ready"));
690 }
691
692 #[test]
693 fn test_openapi_components() {
694 let openapi = ApiDoc::openapi();
695 assert!(openapi.components.is_some());
696
697 let components = openapi.components.unwrap();
698 assert!(components.schemas.contains_key("HealthCheckResponseV1"));
699 assert!(components.schemas.contains_key("ApiError"));
700 assert!(components.schemas.contains_key("VoxelNeuronsBody"));
701 assert!(components.schemas.contains_key("VoxelNeuronsResponse"));
702 assert!(components.schemas.contains_key("VoxelNeuronsQuery"));
703 assert!(components
704 .schemas
705 .contains_key("MemoryCorticalAreaResponse"));
706 assert!(components
707 .schemas
708 .contains_key("MemoryNeuronDetailResponse"));
709 }
710
711 #[test]
712 fn test_openapi_amalgamation_by_upload_is_multipart_form() {
713 let openapi = ApiDoc::openapi();
714 let json = serde_json::to_value(&openapi).expect("serialize openapi");
715
716 let content =
717 &json["paths"]["/v1/genome/amalgamation_by_upload"]["post"]["requestBody"]["content"];
718
719 assert!(
720 content.get("multipart/form-data").is_some(),
721 "Expected multipart/form-data content for /v1/genome/amalgamation_by_upload requestBody. Got: {}",
722 content
723 );
724 }
725
726 #[test]
727 fn test_security_schemes() {
728 let openapi = ApiDoc::openapi();
729 let components = openapi.components.unwrap();
730
731 assert!(components.security_schemes.contains_key("api_key"));
732 assert!(components.security_schemes.contains_key("bearer_auth"));
733 }
734}