feagi-core 2.2.4__tar.gz → 2.2.6__tar.gz

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 (175) hide show
  1. {feagi_core-2.2.4 → feagi_core-2.2.6}/PKG-INFO +14 -12
  2. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/__init__.py +1 -1
  3. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/bin/darwin-aarch64/feagi +0 -0
  4. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/bin/darwin-x86_64/feagi +0 -0
  5. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/bin/linux-aarch64/feagi +0 -0
  6. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/bin/linux-x86_64/feagi +0 -0
  7. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/bin/windows-x86_64/feagi.exe +0 -0
  8. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/bv.py +16 -2
  9. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/main.py +11 -1
  10. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/brain_output.py +6 -0
  11. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/PKG-INFO +14 -12
  12. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/requires.txt +19 -13
  13. {feagi_core-2.2.4 → feagi_core-2.2.6}/pyproject.toml +14 -12
  14. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_config_and_bv.py +63 -0
  15. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_brain_output_controller_api.py +3 -0
  16. {feagi_core-2.2.4 → feagi_core-2.2.6}/.pre-commit-config.yaml +0 -0
  17. {feagi_core-2.2.4 → feagi_core-2.2.6}/.ruff.toml +0 -0
  18. {feagi_core-2.2.4 → feagi_core-2.2.6}/LICENSE +0 -0
  19. {feagi_core-2.2.4 → feagi_core-2.2.6}/MANIFEST.in +0 -0
  20. {feagi_core-2.2.4 → feagi_core-2.2.6}/NOTICE +0 -0
  21. {feagi_core-2.2.4 → feagi_core-2.2.6}/README.md +0 -0
  22. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/esp32_controller/esp32_controller_example.py +0 -0
  23. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/example_video_simple.py +0 -0
  24. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/genome_vs_connectome/example_genome_vs_connectome.py +0 -0
  25. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/mixed_transport_agent/mixed_transport_agent.py +0 -0
  26. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/01_basic_metrics.py +0 -0
  27. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/02_data_logging.py +0 -0
  28. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/03_data_validation.py +0 -0
  29. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/04_performance_profiling.py +0 -0
  30. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/05_comprehensive_monitoring.py +0 -0
  31. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/observability/06_quick_start.py +0 -0
  32. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/servo_motor/example_servo_motor.py +0 -0
  33. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/simple_robot/example_simple_robot.py +0 -0
  34. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/video_streamer/example_rgbd_pair.py +0 -0
  35. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/video_streamer/example_rgbd_realsense.py +0 -0
  36. {feagi_core-2.2.4 → feagi_core-2.2.6}/examples/video_streamer/example_video_simple.py +0 -0
  37. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/agent/__init__.py +0 -0
  38. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/agent/base.py +0 -0
  39. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/agent/bluetooth.py +0 -0
  40. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/agent/esp32.py +0 -0
  41. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/agent/video.py +0 -0
  42. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/__init__.py +0 -0
  43. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/bv_process.py +0 -0
  44. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/feagi_process.py +0 -0
  45. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/cli/process_utils.py +0 -0
  46. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/config.py +0 -0
  47. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/connectome/__init__.py +0 -0
  48. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/connectome/api.py +0 -0
  49. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/connectome/artifact.py +0 -0
  50. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/connectome/model.py +0 -0
  51. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/engine/__init__.py +0 -0
  52. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/engine/manager.py +0 -0
  53. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/genome/__init__.py +0 -0
  54. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/genome/api.py +0 -0
  55. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/genome/artifact.py +0 -0
  56. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/packaging/__init__.py +0 -0
  57. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/paths.py +0 -0
  58. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/__init__.py +0 -0
  59. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/brain_input.py +0 -0
  60. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/client.py +0 -0
  61. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/connector_utils.py +0 -0
  62. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/health_monitor.py +0 -0
  63. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/__init__.py +0 -0
  64. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/base.py +0 -0
  65. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/numeric.py +0 -0
  66. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/smart_imu.py +0 -0
  67. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/text.py +0 -0
  68. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/inputs/vision.py +0 -0
  69. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/__init__.py +0 -0
  70. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/controller_logger.py +0 -0
  71. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/formatters.py +0 -0
  72. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/inspector.py +0 -0
  73. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/logger.py +0 -0
  74. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/metrics.py +0 -0
  75. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/monitor.py +0 -0
  76. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/profiler.py +0 -0
  77. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/observability/utils.py +0 -0
  78. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/outputs/__init__.py +0 -0
  79. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/outputs/base.py +0 -0
  80. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/outputs/motor.py +0 -0
  81. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/outputs/numeric.py +0 -0
  82. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/outputs/text.py +0 -0
  83. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/pns/registration_manager.py +0 -0
  84. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/transports/__init__.py +0 -0
  85. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/transports/base.py +0 -0
  86. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/transports/bluetooth_direct.py +0 -0
  87. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/transports/websocket_client.py +0 -0
  88. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi/transports/websocket_relay.py +0 -0
  89. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi-bv/feagi_bv/__init__.py +0 -0
  90. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi-bv/feagi_bv/runtime.py +0 -0
  91. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi-bv/setup.py +0 -0
  92. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/SOURCES.txt +0 -0
  93. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/dependency_links.txt +0 -0
  94. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/entry_points.txt +0 -0
  95. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/not-zip-safe +0 -0
  96. {feagi_core-2.2.4 → feagi_core-2.2.6}/feagi_core.egg-info/top_level.txt +0 -0
  97. {feagi_core-2.2.4 → feagi_core-2.2.6}/scripts/bump_version.py +0 -0
  98. {feagi_core-2.2.4 → feagi_core-2.2.6}/scripts/migrate_capabilities_json.py +0 -0
  99. {feagi_core-2.2.4 → feagi_core-2.2.6}/scripts/test_genome_import.py +0 -0
  100. {feagi_core-2.2.4 → feagi_core-2.2.6}/setup.cfg +0 -0
  101. {feagi_core-2.2.4 → feagi_core-2.2.6}/setup.py +0 -0
  102. {feagi_core-2.2.4 → feagi_core-2.2.6}/src/api/routers/v1/inputs.py +0 -0
  103. {feagi_core-2.2.4 → feagi_core-2.2.6}/src/evo/mapping_helper.py +0 -0
  104. {feagi_core-2.2.4 → feagi_core-2.2.6}/src/inf/byte_processor.py +0 -0
  105. {feagi_core-2.2.4 → feagi_core-2.2.6}/src/pns/vision.py +0 -0
  106. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/__init__.py +0 -0
  107. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/__init__.py +0 -0
  108. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_brain_artifact_options.py +0 -0
  109. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_bv_process_manager.py +0 -0
  110. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_config_command.py +0 -0
  111. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_engine_manager_spawn.py +0 -0
  112. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_feagi_process_manager.py +0 -0
  113. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/cli/test_main_interrupt_handling.py +0 -0
  114. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/__init__.py +0 -0
  115. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/bdu/__init__.py +0 -0
  116. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/bdu/test_connectome_manager.py +0 -0
  117. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/bdu/test_neuroembryogenesis.py +0 -0
  118. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/bdu/test_synaptogenesis.py +0 -0
  119. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/npu/__init__.py +0 -0
  120. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/npu/test_optimized_integration.py +0 -0
  121. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/npu_bdu_integration.py +0 -0
  122. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cli_config_show.py +0 -0
  123. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cortical_area_expansion.py +0 -0
  124. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cortical_area_parameter_updates.py +0 -0
  125. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cortical_mapping_flow.py +0 -0
  126. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cortical_mapping_reconstruction.py +0 -0
  127. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_cross_cortical_synaptic_propagation.py +0 -0
  128. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_debug_injection_issue.py +0 -0
  129. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_debug_power_area.py +0 -0
  130. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_essential_genome_power_injection.py +0 -0
  131. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_genome_burst_engine_auto_start.py +0 -0
  132. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_genome_connectome_sync.py +0 -0
  133. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_intelligent_expansion.py +0 -0
  134. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_morphology_dimension_sensitive.py +0 -0
  135. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_power_neuron_injection.py +0 -0
  136. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_real_world_synaptic_propagation.py +0 -0
  137. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_refractory_fire_ledger_api.py +0 -0
  138. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_ros_feagi_numeric_roundtrip.py +0 -0
  139. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_rust_fcl_workflow.py +0 -0
  140. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_rust_pns_visualization.py +0 -0
  141. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_sensory_fcl_pipeline.py +0 -0
  142. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_video_agent.py +0 -0
  143. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/test_video_to_feagi.py +0 -0
  144. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/workflows/__init__.py +0 -0
  145. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/integration/workflows/test_test_mode_integration.py +0 -0
  146. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_brain_input_helpers.py +0 -0
  147. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_client.py +0 -0
  148. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_connect_duplicate_registration.py +0 -0
  149. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_connectome_api.py +0 -0
  150. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_connectome_artifact.py +0 -0
  151. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_connectome_migration.py +0 -0
  152. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_connector_agent_register_callback.py +0 -0
  153. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_cortical_id_label.py +0 -0
  154. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_device_configuration_verification.py +0 -0
  155. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_device_registration_contract.py +0 -0
  156. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_engine_brain_artifacts.py +0 -0
  157. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_genome.py +0 -0
  158. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_genome_artifact.py +0 -0
  159. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_health_monitor.py +0 -0
  160. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_imu_sdk_helpers.py +0 -0
  161. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_motor_cortical_id_derivation.py +0 -0
  162. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_motor_decode_single_source_guardrail.py +0 -0
  163. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_motor_decoder_channel_span.py +0 -0
  164. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_motor_registration_tracking.py +0 -0
  165. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_recovery_config.py +0 -0
  166. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_rgbd_sdk_helpers.py +0 -0
  167. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_sensorimotor_area_registration.py +0 -0
  168. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_servo_motor.py +0 -0
  169. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_shm_cross_platform.py +0 -0
  170. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_smart_imu_input.py +0 -0
  171. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_text_token_stream.py +0 -0
  172. {feagi_core-2.2.4 → feagi_core-2.2.6}/tests/test_vision_segmentation.py +0 -0
  173. {feagi_core-2.2.4 → feagi_core-2.2.6}/tools/doc_helpers/convert_html_tables.py +0 -0
  174. {feagi_core-2.2.4 → feagi_core-2.2.6}/tools/doc_helpers/fix_broken_links.py +0 -0
  175. {feagi_core-2.2.4 → feagi_core-2.2.6}/tools/doc_helpers/fix_html_tables.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: feagi-core
3
- Version: 2.2.4
3
+ Version: 2.2.6
4
4
  Summary: Core SDK for building FEAGI agents, controlling the neural engine, and creating marketplace packages (without Brain Visualizer)
5
5
  Author-email: "Neuraville Inc." <feagi@neuraville.com>
6
6
  License: Apache-2.0
@@ -25,14 +25,15 @@ Requires-Dist: numpy>=1.20.0
25
25
  Requires-Dist: aiohttp>=3.9.0
26
26
  Requires-Dist: toml>=0.10.2
27
27
  Requires-Dist: requests>=2.31.0
28
- Requires-Dist: feagi-rust-py-libs>=0.0.115
28
+ Requires-Dist: feagi-rust-py-libs==0.0.117
29
29
  Requires-Dist: pyserial>=3.5
30
30
  Provides-Extra: bv
31
- Requires-Dist: feagi-bv<3.0.0,>=2.6.3; extra == "bv"
32
- Requires-Dist: feagi-bv-linux<3.0.0,>=2.6.3; sys_platform == "linux" and extra == "bv"
33
- Requires-Dist: feagi-bv-macos-arm64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "bv"
34
- Requires-Dist: feagi-bv-macos-x86_64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "bv"
35
- Requires-Dist: feagi-bv-windows<3.0.0,>=2.6.3; sys_platform == "win32" and extra == "bv"
31
+ Requires-Dist: feagi-bv==2.6.9; extra == "bv"
32
+ Requires-Dist: feagi-bv-linux==2.6.9; (sys_platform == "linux" and platform_machine == "x86_64") and extra == "bv"
33
+ Requires-Dist: feagi-bv-linux-arm64==2.6.9; (sys_platform == "linux" and platform_machine == "aarch64") and extra == "bv"
34
+ Requires-Dist: feagi-bv-macos-arm64==2.6.9; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "bv"
35
+ Requires-Dist: feagi-bv-macos-x86_64==2.6.9; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "bv"
36
+ Requires-Dist: feagi-bv-windows==2.6.9; sys_platform == "win32" and extra == "bv"
36
37
  Provides-Extra: video
37
38
  Requires-Dist: opencv-python>=4.9.0; extra == "video"
38
39
  Provides-Extra: bluetooth
@@ -60,11 +61,12 @@ Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
60
61
  Requires-Dist: mkdocstrings>=0.20.0; extra == "docs"
61
62
  Requires-Dist: mkdocstrings-python>=1.0.0; extra == "docs"
62
63
  Provides-Extra: full
63
- Requires-Dist: feagi-bv<3.0.0,>=2.6.3; extra == "full"
64
- Requires-Dist: feagi-bv-linux<3.0.0,>=2.6.3; sys_platform == "linux" and extra == "full"
65
- Requires-Dist: feagi-bv-macos-arm64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "full"
66
- Requires-Dist: feagi-bv-macos-x86_64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "full"
67
- Requires-Dist: feagi-bv-windows<3.0.0,>=2.6.3; sys_platform == "win32" and extra == "full"
64
+ Requires-Dist: feagi-bv==2.6.9; extra == "full"
65
+ Requires-Dist: feagi-bv-linux==2.6.9; (sys_platform == "linux" and platform_machine == "x86_64") and extra == "full"
66
+ Requires-Dist: feagi-bv-linux-arm64==2.6.9; (sys_platform == "linux" and platform_machine == "aarch64") and extra == "full"
67
+ Requires-Dist: feagi-bv-macos-arm64==2.6.9; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "full"
68
+ Requires-Dist: feagi-bv-macos-x86_64==2.6.9; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "full"
69
+ Requires-Dist: feagi-bv-windows==2.6.9; sys_platform == "win32" and extra == "full"
68
70
  Requires-Dist: opencv-python>=4.9.0; extra == "full"
69
71
  Requires-Dist: bleak>=0.21.0; extra == "full"
70
72
  Requires-Dist: websockets>=12.0; extra == "full"
@@ -18,7 +18,7 @@ Main modules:
18
18
  - feagi.cli: Command-line tools
19
19
  """
20
20
 
21
- __version__ = "2.2.4"
21
+ __version__ = "2.2.6"
22
22
 
23
23
  # Import key classes for convenience, but keep optional dependencies lazy so
24
24
  # `import feagi` does not require platform-specific extras (e.g., pyserial).
@@ -97,7 +97,14 @@ def _resolve_bv_binary() -> Tuple[Path, Path]:
97
97
 
98
98
  # Determine platform-specific package name
99
99
  if system.startswith("linux"):
100
- package_name = "feagi_bv_linux"
100
+ if machine in ("arm64", "aarch64"):
101
+ package_name = "feagi_bv_linux_arm64"
102
+ elif machine in ("x86_64", "amd64"):
103
+ package_name = "feagi_bv_linux"
104
+ else:
105
+ raise BrainVisualizerLaunchError(
106
+ f"Unsupported Linux architecture: {machine}"
107
+ )
101
108
  elif system == "darwin":
102
109
  if machine in ("arm64", "aarch64"):
103
110
  package_name = "feagi_bv_macos_arm64"
@@ -165,7 +172,14 @@ def _resolve_bv_binary() -> Tuple[Path, Path]:
165
172
  working_dir = binary.parent
166
173
  pck_file = None
167
174
  elif system.startswith("linux"):
168
- binary_names = ("BrainVisualizer", "BrainVisualizer-Remote")
175
+ binary_names = (
176
+ "BrainVisualizer",
177
+ "BrainVisualizer-Remote",
178
+ "BrainVisualizer.x86_64",
179
+ "BrainVisualizer.arm64",
180
+ "BrainVisualizer-Remote.x86_64",
181
+ "BrainVisualizer-Remote.arm64",
182
+ )
169
183
  candidates = _candidate_paths(bin_dir, binary_names, ("", "linux"))
170
184
  binary = _first_existing_path(candidates)
171
185
  if binary is None:
@@ -849,9 +849,19 @@ def main(argv: list[str] | None = None) -> int:
849
849
  except Exception:
850
850
  pass
851
851
  elif system.startswith("linux"):
852
+ machine = platform.machine().lower()
853
+ if machine in ("aarch64", "arm64"):
854
+ bv_package = "feagi-bv-linux-arm64"
855
+ elif machine in ("x86_64", "amd64"):
856
+ bv_package = "feagi-bv-linux"
857
+ else:
858
+ bv_package = None
852
859
  try:
853
- bv_version = version("feagi-bv-linux")
860
+ if bv_package is not None:
861
+ bv_version = version(bv_package)
854
862
  except Exception:
863
+ bv_version = None
864
+ if not bv_version:
855
865
  try:
856
866
  bv_version = version("feagi-bv")
857
867
  except Exception:
@@ -86,6 +86,10 @@ class BrainOutput:
86
86
  # Latest motor data (for debugging)
87
87
  self._motor_data: Dict[str, Any] = {}
88
88
  self._last_logged_motor_values: Dict[str, float] = {}
89
+ # Raw motor frame from the latest successful receive, or None when
90
+ # this tick had no motor bytes. Embodiments scan it for core areas
91
+ # such as Brain_Death that are not registered motor units.
92
+ self._last_motor_frame: Optional[bytes] = None
89
93
 
90
94
  # Configuration
91
95
  self._agent_id = None
@@ -2787,12 +2791,14 @@ class BrainOutput:
2787
2791
  raise RuntimeError("ConnectorAgent cache is not initialized.")
2788
2792
 
2789
2793
  # 1. Pull raw motor bytes from the transport (no Python-side decode).
2794
+ self._last_motor_frame = None
2790
2795
  raw_bytes = self._client.receive_motor_data_raw()
2791
2796
  if not raw_bytes:
2792
2797
  # No FEAGI motor frame this tick: clear the command map so controllers
2793
2798
  # hold current pose instead of replaying the last absolute latch.
2794
2799
  self._motor_data = {}
2795
2800
  return
2801
+ self._last_motor_frame = bytes(raw_bytes)
2796
2802
 
2797
2803
  # 2. Decode through the shared Rust decoder. This fires the per-output
2798
2804
  # callbacks registered in _register_motor_decoder(), which update
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: feagi-core
3
- Version: 2.2.4
3
+ Version: 2.2.6
4
4
  Summary: Core SDK for building FEAGI agents, controlling the neural engine, and creating marketplace packages (without Brain Visualizer)
5
5
  Author-email: "Neuraville Inc." <feagi@neuraville.com>
6
6
  License: Apache-2.0
@@ -25,14 +25,15 @@ Requires-Dist: numpy>=1.20.0
25
25
  Requires-Dist: aiohttp>=3.9.0
26
26
  Requires-Dist: toml>=0.10.2
27
27
  Requires-Dist: requests>=2.31.0
28
- Requires-Dist: feagi-rust-py-libs>=0.0.115
28
+ Requires-Dist: feagi-rust-py-libs==0.0.117
29
29
  Requires-Dist: pyserial>=3.5
30
30
  Provides-Extra: bv
31
- Requires-Dist: feagi-bv<3.0.0,>=2.6.3; extra == "bv"
32
- Requires-Dist: feagi-bv-linux<3.0.0,>=2.6.3; sys_platform == "linux" and extra == "bv"
33
- Requires-Dist: feagi-bv-macos-arm64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "bv"
34
- Requires-Dist: feagi-bv-macos-x86_64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "bv"
35
- Requires-Dist: feagi-bv-windows<3.0.0,>=2.6.3; sys_platform == "win32" and extra == "bv"
31
+ Requires-Dist: feagi-bv==2.6.9; extra == "bv"
32
+ Requires-Dist: feagi-bv-linux==2.6.9; (sys_platform == "linux" and platform_machine == "x86_64") and extra == "bv"
33
+ Requires-Dist: feagi-bv-linux-arm64==2.6.9; (sys_platform == "linux" and platform_machine == "aarch64") and extra == "bv"
34
+ Requires-Dist: feagi-bv-macos-arm64==2.6.9; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "bv"
35
+ Requires-Dist: feagi-bv-macos-x86_64==2.6.9; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "bv"
36
+ Requires-Dist: feagi-bv-windows==2.6.9; sys_platform == "win32" and extra == "bv"
36
37
  Provides-Extra: video
37
38
  Requires-Dist: opencv-python>=4.9.0; extra == "video"
38
39
  Provides-Extra: bluetooth
@@ -60,11 +61,12 @@ Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
60
61
  Requires-Dist: mkdocstrings>=0.20.0; extra == "docs"
61
62
  Requires-Dist: mkdocstrings-python>=1.0.0; extra == "docs"
62
63
  Provides-Extra: full
63
- Requires-Dist: feagi-bv<3.0.0,>=2.6.3; extra == "full"
64
- Requires-Dist: feagi-bv-linux<3.0.0,>=2.6.3; sys_platform == "linux" and extra == "full"
65
- Requires-Dist: feagi-bv-macos-arm64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "full"
66
- Requires-Dist: feagi-bv-macos-x86_64<3.0.0,>=2.6.3; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "full"
67
- Requires-Dist: feagi-bv-windows<3.0.0,>=2.6.3; sys_platform == "win32" and extra == "full"
64
+ Requires-Dist: feagi-bv==2.6.9; extra == "full"
65
+ Requires-Dist: feagi-bv-linux==2.6.9; (sys_platform == "linux" and platform_machine == "x86_64") and extra == "full"
66
+ Requires-Dist: feagi-bv-linux-arm64==2.6.9; (sys_platform == "linux" and platform_machine == "aarch64") and extra == "full"
67
+ Requires-Dist: feagi-bv-macos-arm64==2.6.9; (sys_platform == "darwin" and platform_machine == "arm64") and extra == "full"
68
+ Requires-Dist: feagi-bv-macos-x86_64==2.6.9; (sys_platform == "darwin" and platform_machine == "x86_64") and extra == "full"
69
+ Requires-Dist: feagi-bv-windows==2.6.9; sys_platform == "win32" and extra == "full"
68
70
  Requires-Dist: opencv-python>=4.9.0; extra == "full"
69
71
  Requires-Dist: bleak>=0.21.0; extra == "full"
70
72
  Requires-Dist: websockets>=12.0; extra == "full"
@@ -2,7 +2,7 @@ numpy>=1.20.0
2
2
  aiohttp>=3.9.0
3
3
  toml>=0.10.2
4
4
  requests>=2.31.0
5
- feagi-rust-py-libs>=0.0.115
5
+ feagi-rust-py-libs==0.0.117
6
6
  pyserial>=3.5
7
7
 
8
8
  [bluetooth]
@@ -10,19 +10,22 @@ bleak>=0.21.0
10
10
  websockets>=12.0
11
11
 
12
12
  [bv]
13
- feagi-bv<3.0.0,>=2.6.3
13
+ feagi-bv==2.6.9
14
14
 
15
15
  [bv:sys_platform == "darwin" and platform_machine == "arm64"]
16
- feagi-bv-macos-arm64<3.0.0,>=2.6.3
16
+ feagi-bv-macos-arm64==2.6.9
17
17
 
18
18
  [bv:sys_platform == "darwin" and platform_machine == "x86_64"]
19
- feagi-bv-macos-x86_64<3.0.0,>=2.6.3
19
+ feagi-bv-macos-x86_64==2.6.9
20
20
 
21
- [bv:sys_platform == "linux"]
22
- feagi-bv-linux<3.0.0,>=2.6.3
21
+ [bv:sys_platform == "linux" and platform_machine == "aarch64"]
22
+ feagi-bv-linux-arm64==2.6.9
23
+
24
+ [bv:sys_platform == "linux" and platform_machine == "x86_64"]
25
+ feagi-bv-linux==2.6.9
23
26
 
24
27
  [bv:sys_platform == "win32"]
25
- feagi-bv-windows<3.0.0,>=2.6.3
28
+ feagi-bv-windows==2.6.9
26
29
 
27
30
  [dev]
28
31
  pytest>=7.0.0
@@ -42,22 +45,25 @@ mkdocstrings>=0.20.0
42
45
  mkdocstrings-python>=1.0.0
43
46
 
44
47
  [full]
45
- feagi-bv<3.0.0,>=2.6.3
48
+ feagi-bv==2.6.9
46
49
  opencv-python>=4.9.0
47
50
  bleak>=0.21.0
48
51
  websockets>=12.0
49
52
 
50
53
  [full:sys_platform == "darwin" and platform_machine == "arm64"]
51
- feagi-bv-macos-arm64<3.0.0,>=2.6.3
54
+ feagi-bv-macos-arm64==2.6.9
52
55
 
53
56
  [full:sys_platform == "darwin" and platform_machine == "x86_64"]
54
- feagi-bv-macos-x86_64<3.0.0,>=2.6.3
57
+ feagi-bv-macos-x86_64==2.6.9
58
+
59
+ [full:sys_platform == "linux" and platform_machine == "aarch64"]
60
+ feagi-bv-linux-arm64==2.6.9
55
61
 
56
- [full:sys_platform == "linux"]
57
- feagi-bv-linux<3.0.0,>=2.6.3
62
+ [full:sys_platform == "linux" and platform_machine == "x86_64"]
63
+ feagi-bv-linux==2.6.9
58
64
 
59
65
  [full:sys_platform == "win32"]
60
- feagi-bv-windows<3.0.0,>=2.6.3
66
+ feagi-bv-windows==2.6.9
61
67
 
62
68
  [test]
63
69
  pytest>=7.0.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "feagi-core"
7
- version = "2.2.4"
7
+ version = "2.2.6"
8
8
  description = "Core SDK for building FEAGI agents, controlling the neural engine, and creating marketplace packages (without Brain Visualizer)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -28,17 +28,18 @@ dependencies = [
28
28
  "aiohttp>=3.9.0",
29
29
  "toml>=0.10.2",
30
30
  "requests>=2.31.0",
31
- "feagi-rust-py-libs>=0.0.115",
31
+ "feagi-rust-py-libs==0.0.117",
32
32
  "pyserial>=3.5", # For ESP32 serial communication
33
33
  ]
34
34
 
35
35
  [project.optional-dependencies]
36
36
  bv = [
37
- "feagi-bv>=2.6.3,<3.0.0",
38
- "feagi-bv-linux>=2.6.3,<3.0.0 ; sys_platform == 'linux'",
39
- "feagi-bv-macos-arm64>=2.6.3,<3.0.0 ; sys_platform == 'darwin' and platform_machine == 'arm64'",
40
- "feagi-bv-macos-x86_64>=2.6.3,<3.0.0 ; sys_platform == 'darwin' and platform_machine == 'x86_64'",
41
- "feagi-bv-windows>=2.6.3,<3.0.0 ; sys_platform == 'win32'",
37
+ "feagi-bv==2.6.9",
38
+ "feagi-bv-linux==2.6.9 ; sys_platform == 'linux' and platform_machine == 'x86_64'",
39
+ "feagi-bv-linux-arm64==2.6.9 ; sys_platform == 'linux' and platform_machine == 'aarch64'",
40
+ "feagi-bv-macos-arm64==2.6.9 ; sys_platform == 'darwin' and platform_machine == 'arm64'",
41
+ "feagi-bv-macos-x86_64==2.6.9 ; sys_platform == 'darwin' and platform_machine == 'x86_64'",
42
+ "feagi-bv-windows==2.6.9 ; sys_platform == 'win32'",
42
43
  ]
43
44
  video = [
44
45
  "opencv-python>=4.9.0",
@@ -72,11 +73,12 @@ docs = [
72
73
  "mkdocstrings-python>=1.0.0",
73
74
  ]
74
75
  full = [
75
- "feagi-bv>=2.6.3,<3.0.0",
76
- "feagi-bv-linux>=2.6.3,<3.0.0 ; sys_platform == 'linux'",
77
- "feagi-bv-macos-arm64>=2.6.3,<3.0.0 ; sys_platform == 'darwin' and platform_machine == 'arm64'",
78
- "feagi-bv-macos-x86_64>=2.6.3,<3.0.0 ; sys_platform == 'darwin' and platform_machine == 'x86_64'",
79
- "feagi-bv-windows>=2.6.3,<3.0.0 ; sys_platform == 'win32'",
76
+ "feagi-bv==2.6.9",
77
+ "feagi-bv-linux==2.6.9 ; sys_platform == 'linux' and platform_machine == 'x86_64'",
78
+ "feagi-bv-linux-arm64==2.6.9 ; sys_platform == 'linux' and platform_machine == 'aarch64'",
79
+ "feagi-bv-macos-arm64==2.6.9 ; sys_platform == 'darwin' and platform_machine == 'arm64'",
80
+ "feagi-bv-macos-x86_64==2.6.9 ; sys_platform == 'darwin' and platform_machine == 'x86_64'",
81
+ "feagi-bv-windows==2.6.9 ; sys_platform == 'win32'",
80
82
  "opencv-python>=4.9.0",
81
83
  "bleak>=0.21.0",
82
84
  "websockets>=12.0",
@@ -321,3 +321,66 @@ class TestWindowsBVBinaryResolution:
321
321
  "feagi.cli.bv.importlib.util.find_spec", return_value=spec
322
322
  ), pytest.raises(BrainVisualizerLaunchError, match="BV Windows runtime not found"):
323
323
  _resolve_bv_binary()
324
+
325
+
326
+ class TestLinuxBVBinaryResolution:
327
+ """Test Linux Brain Visualizer package and binary selection."""
328
+
329
+ def test_resolves_x86_64_remote_binary(self, tmp_path):
330
+ """x86_64 Linux loads feagi_bv_linux and the x86_64 export."""
331
+ package_dir = tmp_path / "feagi_bv_linux"
332
+ bin_dir = package_dir / "bin"
333
+ bin_dir.mkdir(parents=True)
334
+ binary_path = bin_dir / "BrainVisualizer-Remote.x86_64"
335
+ binary_path.write_text("")
336
+
337
+ spec = SimpleNamespace(submodule_search_locations=[str(package_dir)])
338
+ with patch("feagi.cli.bv.platform.system", return_value="Linux"), patch(
339
+ "feagi.cli.bv.platform.machine", return_value="x86_64"
340
+ ), patch("feagi.cli.bv.importlib.util.find_spec", return_value=spec):
341
+ binary, working_dir = _resolve_bv_binary()
342
+
343
+ assert binary == binary_path
344
+ assert working_dir == bin_dir
345
+
346
+ def test_resolves_aarch64_remote_binary(self, tmp_path):
347
+ """aarch64 Linux loads feagi_bv_linux_arm64 and the arm64 export."""
348
+ package_dir = tmp_path / "feagi_bv_linux_arm64"
349
+ bin_dir = package_dir / "bin"
350
+ bin_dir.mkdir(parents=True)
351
+ binary_path = bin_dir / "BrainVisualizer-Remote.arm64"
352
+ binary_path.write_text("")
353
+
354
+ spec = SimpleNamespace(submodule_search_locations=[str(package_dir)])
355
+ with patch("feagi.cli.bv.platform.system", return_value="Linux"), patch(
356
+ "feagi.cli.bv.platform.machine", return_value="aarch64"
357
+ ), patch("feagi.cli.bv.importlib.util.find_spec", return_value=spec):
358
+ binary, working_dir = _resolve_bv_binary()
359
+
360
+ assert binary == binary_path
361
+ assert working_dir == bin_dir
362
+
363
+ def test_arm64_machine_name_uses_arm64_package(self, tmp_path):
364
+ """arm64 is the same CPU as aarch64 and selects the ARM64 package."""
365
+ package_dir = tmp_path / "feagi_bv_linux_arm64"
366
+ bin_dir = package_dir / "bin"
367
+ bin_dir.mkdir(parents=True)
368
+ binary_path = bin_dir / "BrainVisualizer-Remote.arm64"
369
+ binary_path.write_text("")
370
+
371
+ spec = SimpleNamespace(submodule_search_locations=[str(package_dir)])
372
+ with patch("feagi.cli.bv.platform.system", return_value="Linux"), patch(
373
+ "feagi.cli.bv.platform.machine", return_value="arm64"
374
+ ), patch("feagi.cli.bv.importlib.util.find_spec", return_value=spec):
375
+ binary, _working_dir = _resolve_bv_binary()
376
+
377
+ assert binary == binary_path
378
+
379
+ def test_rejects_unknown_linux_architecture(self):
380
+ """An unrecognized Linux CPU does not select a package."""
381
+ with patch("feagi.cli.bv.platform.system", return_value="Linux"), patch(
382
+ "feagi.cli.bv.platform.machine", return_value="riscv64"
383
+ ), pytest.raises(
384
+ BrainVisualizerLaunchError, match="Unsupported Linux architecture"
385
+ ):
386
+ _resolve_bv_binary()
@@ -277,6 +277,7 @@ def test_receive_persists_unmapped_motor_channels_in_snapshot():
277
277
 
278
278
  # Raw bytes were handed to the Rust decoder (not Python-decoded).
279
279
  assert bo._cache.loaded == b"raw-motor-bytes"
280
+ assert bo._last_motor_frame == b"raw-motor-bytes"
280
281
  assert bo._cache.decoded is True
281
282
  assert bo._cache.updated_only_calls == 1
282
283
  # Snapshot channels are persisted even without registered output objects.
@@ -299,9 +300,11 @@ def test_receive_clears_motor_data_when_no_raw_bytes():
299
300
  bo._cache = object()
300
301
  bo._motor_data = {"1:0:absolute": 1.0}
301
302
 
303
+ bo._last_motor_frame = b"stale"
302
304
  bo.receive()
303
305
 
304
306
  assert bo._motor_data == {}
307
+ assert bo._last_motor_frame is None
305
308
 
306
309
 
307
310
  def test_connect_uses_both_agent_type_with_motor_and_scalar_sensory(monkeypatch):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes